From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 13:59:10 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91Bwb0g021713; Mon, 1 Oct 2012 13:59:02 +0200 Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91BwYkT021643 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Mon, 1 Oct 2012 13:58:35 +0200 Received: by pbbrp8 with SMTP id rp8so7434150pbb.41 for ; Mon, 01 Oct 2012 04:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=upJuud/RF+zNimvLgD/0w/haJcZhaPEf0Pv5X8r7ECg=; b=NoEMjWg7eYmVoojHst+AztqOYFtNN/JwrLski6cox+CyTmSKMAC0kcfcxIJHCU8s9s B8U9b2JlokLt0txapLs1lXPMUhd9oEsjquPnnrKq6H+CmugjqAMfNrpnRT8prHYwsPOw kdqMx4D9FsbV9qLY8aaUgEuw7lPySgTTYxPC/nlAXeHXymXIImSCr8m7EhtkYv548ud7 dIccm8zC/HxBq2YfaemtqPqwR00WchT25pac55waCBK0/RN3IGpNNJW1314h9sePdJ+f ZdFCYFwsNZQu2SSP7L0tNbKmFhuVnuOp1TwvHSZ2emXxMq9biTlBntP/rH0bNksqSW6E eemg== MIME-Version: 1.0 Received: by 10.66.84.6 with SMTP id u6mr35886979pay.75.1349092708763; Mon, 01 Oct 2012 04:58:28 -0700 (PDT) Received: by 10.66.190.131 with HTTP; Mon, 1 Oct 2012 04:58:28 -0700 (PDT) Date: Mon, 1 Oct 2012 13:58:28 +0200 Message-ID: Subject: ProFTPD SFTP connection problem From: Michael Krietemeyer To: libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0139330806==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============0139330806== Content-Type: multipart/alternative; boundary=f46d042f955cacc87f04cafe1ffa --f46d042f955cacc87f04cafe1ffa Content-Type: text/plain; charset=UTF-8 Hello, I am using a libssh2 based client to connect to a ProFTPD with mod_sftp (0.9.7). I have teseted it with different versions of the library (1.3.0 and 1.4.2). I alwasy got the following errors (at the end of this post). If I use a very old libssh2 implementation (0.11) the connection works well. Can someone help me? Thanks in advance Michael Log messages: Aug 20 09:09:35 [23657] : unable to use 'none' cipher: Must be explicitly requested via SFTPCiphers Aug 20 09:09:35 [23657] : unable to use 'none' digest: Must be explicitly requested via SFTPDigests Aug 20 09:09:35 [23657] : sending KEXINIT message to client Aug 20 09:09:35 [23657] : sent SSH_MSG_KEXINIT (20) packet Aug 20 09:09:35 [23657] : handling connection from SSH2 client 'libssh2_1.4.2 PHP' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^OpenSSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^OpenSSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^OpenSSH_2\.5\.1p1.*|^OpenSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*|^OpenSSH_2\.5\.3.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^OpenSSH_2\.5\.1p1.*|^OpenSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*|^OpenSSH_2\.5\.3.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^OpenSSH.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^OpenSSH.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '.*MindTerm.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '.*MindTerm.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^Sun_SSH_1\.0.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^Sun_SSH_1\.0.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^2\.1\.0.*|^2\.1 .*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^2\.1\.0.*|^2\.1 .*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2\.0\.16.*|^2\.0\.17.*|^2\.0\.18.*|^2\.0\.19.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2\.0\.16.*|^2\.0\.17.*|^2\.0\.18.*|^2\.0\.19.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^2\.0\.11.*|^2\.0\.12.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^2\.0\.11.*|^2\.0\.12.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^2\.0\..*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^2\.0\..*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^2\.2\.0.*|^2\.3\.0.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^2\.2\.0.*|^2\.3\.0.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '.*SSH_Version_Mapper.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '.*SSH_Version_Mapper.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against regex '^Probe-.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match regex '^Probe-.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against SFTPClientMatch regex '.*' Aug 20 09:09:35 [23657] : setting max server channel window size to 536870912 bytes, as per SFTPClientMatch Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against SFTPClientMatch regex '.*WS_FTP.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match SFTPClientMatch regex '.*WS_FTP.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against SFTPClientMatch regex '.*WeOnlyDo.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match SFTPClientMatch regex '.*WeOnlyDo.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against SFTPClientMatch regex '.*JSCH.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match SFTPClientMatch regex '.*JSCH.*' Aug 20 09:09:35 [23657] : checking client version 'libssh2_1.4.2 PHP' against SFTPClientMatch regex '.*EldoS.SSHBlackbox.*' Aug 20 09:09:35 [23657] : client version 'libssh2_1.4.2 PHP' did not match SFTPClientMatch regex '.*EldoS.SSHBlackbox.*' Aug 20 09:09:36 [23657] : SSH2 packet len = 804 bytes Aug 20 09:09:36 [23657] : SSH2 packet padding len = 167 bytes Aug 20 09:09:36 [23657] : SSH2 packet payload len = 636 bytes Aug 20 09:09:36 [23657] : SSH2 packet MAC len = 0 bytes Aug 20 09:09:36 [23657] : received SSH_MSG_KEXINIT (20) packet Aug 20 09:09:36 [23657] : reading KEXINIT message from client Aug 20 09:09:36 [23657] : first kex packet follows = false Aug 20 09:09:36 [23657] : determining shared algorithms for SSH session Aug 20 09:09:36 [23657] : client-sent key exchange algorithms: diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 Aug 20 09:09:36 [23657] : attempt #1 to create a good DH key Aug 20 09:09:36 [23657] : generating DH key Aug 20 09:09:36 [23657] : good DH public key: 1075 bits set Aug 20 09:09:36 [23657] : client-sent host key algorithms: ssh-rsa,ssh-dss Aug 20 09:09:36 [23657] : client-sent client encryption algorithms: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se ,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc Aug 20 09:09:36 [23657] : client-sent server encryption algorithms: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se ,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc Aug 20 09:09:36 [23657] : client-sent client MAC algorithms: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160, hmac-ripemd160@openssh.com Aug 20 09:09:36 [23657] : client-sent server MAC algorithms: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160, hmac-ripemd160@openssh.com Aug 20 09:09:36 [23657] : client-sent client compression algorithms: none Aug 20 09:09:36 [23657] : client-sent server compression algorithms: none Aug 20 09:09:36 [23657] : client-sent client languages: Aug 20 09:09:36 [23657] : client-sent server languages: Aug 20 09:09:36 [23657] : SSH2 packet len = 508 bytes Aug 20 09:09:36 [23657] : SSH2 packet padding len = 246 bytes Aug 20 09:09:36 [23657] : SSH2 packet payload len = 261 bytes Aug 20 09:09:36 [23657] : SSH2 packet MAC len = 0 bytes Aug 20 09:09:36 [23657] : received SSH_MSG_KEX_DH_INIT (30) packet Aug 20 09:09:36 [23657] : reading DH_INIT message from client Aug 20 09:09:36 [23657] : writing DH_INIT message to client Aug 20 09:09:36 [23657] : computing DH key Aug 20 09:09:36 [23657] : sent SSH_MSG_KEX_DH_REPLY (31) packet Aug 20 09:09:36 [23657] : reading NEWKEYS message from client Aug 20 09:09:36 [23657] : SSH2 packet len = 180 bytes Aug 20 09:09:36 [23657] : SSH2 packet padding len = 178 bytes Aug 20 09:09:36 [23657] : SSH2 packet payload len = 1 bytes Aug 20 09:09:36 [23657] : SSH2 packet MAC len = 0 bytes Aug 20 09:09:36 [23657] : received SSH_MSG_NEWKEYS (21) packet Aug 20 09:09:36 [23657] : sending NEWKEYS message to client Aug 20 09:09:36 [23657] : sent SSH_MSG_NEWKEYS (21) packet Aug 20 09:09:36 [23657] : setting session keys Aug 20 09:09:36 [23657] : SSH2 packet len = 2751686127 bytes Aug 20 09:09:36 [23657] : SSH2 packet padding len = 209 bytes Aug 20 09:09:36 [23657] : SSH2 packet payload len = 2751685917 bytes Aug 20 09:09:36 [23657] : payload len (2751685917 bytes) exceeds max payload len (262144), ignoring payload Aug 20 09:09:36 [23657] : reading 10448 bytes of data for discarding Aug 20 09:09:36 [23657] : read 116 bytes, expected 10448 bytes; pessimistically returning Aug 20 09:09:36 [23657] : disconnecting (Application error) [at packet.c:1247] Aug 20 09:09:36 [23657] : sent SSH_MSG_DISCONNECT (1) packet --f46d042f955cacc87f04cafe1ffa Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello,=

I am using a l= ibssh2 based client to connect to a ProFTPD with mod_sftp (0.9.7). I have t= eseted it with different versions of the library (1.3.0 and 1.4.2). I alwas= y got the following errors (at the end of this post).

If I use a ver= y old libssh2 implementation (0.11) the connection works well.=C2=A0=

Can someone he= lp me?

Thanks in adva= nce
Michae= l


Log me= ssages:
Aug 20 09:09:3= 5 [23657] <ssh2:3>: unable to use 'none' cipher: Must be expl= icitly requested via SFTPCiphers
Aug 20 09:09:35 [23657] <ssh2:3>: unable to use 'none' digest= : Must be explicitly requested via SFTPDigests
Aug 20 09:09:35 [23657] &= lt;ssh2:9>: sending KEXINIT message to client
Aug 20 09:09:35 [23657]= <ssh2:3>: sent SSH_MSG_KEXINIT (20) packet
Aug 20 09:09:35 [23657] <ssh2:5>: handling connection from SSH2 clien= t 'libssh2_1.4.2 PHP'
Aug 20 09:09:35 [23657] <ssh2:18>: c= hecking client version 'libssh2_1.4.2 PHP' against regex '^Open= SSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0= .*'
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 = PHP' did not match regex '^OpenSSH-2\.0.*|^OpenSSH-2\.1.*|^OpenSSH_= 2\.1.*|^OpenSSH_2\.2.*|^OpenSSH_2\.3\.0.*'
Aug 20 09:09:35 [23657] &= lt;ssh2:18>: checking client version 'libssh2_1.4.2 PHP' against= regex '^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^OpenSSH_2\.5\.1p1.*|^Op= enSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*|^OpenSSH_2\.5\.3.*= 9;
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 = PHP' did not match regex '^OpenSSH_2\.3\..*|^OpenSSH_2\.5\.0p1.*|^O= penSSH_2\.5\.1p1.*|^OpenSSH_2\.5\.0.*|^OpenSSH_2\.5\.1.*|^OpenSSH_2\.5\.2.*= |^OpenSSH_2\.5\.3.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^OpenSSH.*'
Aug 20 09:09:35 [23= 657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did not ma= tch regex '^OpenSSH.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '.*MindTerm.*'
Aug 20 09:09:35 [= 23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did not = match regex '.*MindTerm.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^Sun_SSH_1\.0.*'
Aug 20 09:09:3= 5 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did n= ot match regex '^Sun_SSH_1\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^2\.1\.0.*|^2\.1 .*'
Aug 20 09:= 09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP' d= id not match regex '^2\.1\.0.*|^2\.1 .*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2= \.0\.16.*|^2\.0\.17.*|^2\.0\.18.*|^2\.0\.19.*'
Aug 20 09:09:35 [2365= 7] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did not matc= h regex '^2\.0\.13.*|^2\.0\.14.*|^2\.0\.15.*|^2\.0\.16.*|^2\.0\.17.*|^2= \.0\.18.*|^2\.0\.19.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^2\.0\.11.*|^2\.0\.12.*'
Aug 20= 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP= 9; did not match regex '^2\.0\.11.*|^2\.0\.12.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^2\.0\..*'
Aug 20 09:09:35 [236= 57] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did not mat= ch regex '^2\.0\..*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^2\.2\.0.*|^2\.3\.0.*'
Aug 20 0= 9:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP'= did not match regex '^2\.2\.0.*|^2\.3\.0.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1= \.2\.21.*|^1\.2\.22.*|^1\.3\.2.*'
Aug 20 09:09:35 [23657] <ssh2:1= 8>: client version 'libssh2_1.4.2 PHP' did not match regex '= ^1\.2\.18.*|^1\.2\.19.*|^1\.2\.20.*|^1\.2\.21.*|^1\.2\.22.*|^1\.3\.2.*'=
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '.*SSH_Version_Mapper.*'
Aug 20 = 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP'= ; did not match regex '.*SSH_Version_Mapper.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against regex '^Probe-.*'
Aug 20 09:09:35 [236= 57] <ssh2:18>: client version 'libssh2_1.4.2 PHP' did not mat= ch regex '^Probe-.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against SFTPClientMatch regex '.*'
Aug 20 09:0= 9:35 [23657] <ssh2:16>: setting max server channel window size to 536= 870912 bytes, as per SFTPClientMatch
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against SFTPClientMatch regex '.*WS_FTP.*'
Aug= 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP= ' did not match SFTPClientMatch regex '.*WS_FTP.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against SFTPClientMatch regex '.*WeOnlyDo.*'
A= ug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 P= HP' did not match SFTPClientMatch regex '.*WeOnlyDo.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against SFTPClientMatch regex '.*JSCH.*'
Aug 2= 0 09:09:35 [23657] <ssh2:18>: client version 'libssh2_1.4.2 PHP&#= 39; did not match SFTPClientMatch regex '.*JSCH.*'
Aug 20 09:09:35 [23657] <ssh2:18>: checking client version 'libss= h2_1.4.2 PHP' against SFTPClientMatch regex '.*EldoS.SSHBlackbox.*&= #39;
Aug 20 09:09:35 [23657] <ssh2:18>: client version 'libssh= 2_1.4.2 PHP' did not match SFTPClientMatch regex '.*EldoS.SSHBlackb= ox.*'
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len =3D 804 bytes
A= ug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len =3D 167 byt= es
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len =3D = 636 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet MAC len =3D 0 bytesAug 20 09:09:36 [23657] <ssh2:3>: received SSH_MSG_KEXINIT (20) pack= et
Aug 20 09:09:36 [23657] <ssh2:9>: reading KEXINIT message from = client
Aug 20 09:09:36 [23657] <ssh2:3>: first kex packet follows =3D false<= br>Aug 20 09:09:36 [23657] <ssh2:9>: determining shared algorithms fo= r SSH session
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent key ex= change algorithms: diffie-hellman-group14-sha1,diffie-hellman-group-exchang= e-sha1,diffie-hellman-group1-sha1
Aug 20 09:09:36 [23657] <ssh2:9>: attempt #1 to create a good DH key<= br>Aug 20 09:09:36 [23657] <ssh2:12>: generating DH key
Aug 20 09:= 09:36 [23657] <ssh2:10>: good DH public key: 1075 bits set
Aug 20 = 09:09:36 [23657] <ssh2:8>: client-sent host key algorithms: ssh-rsa,s= sh-dss
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client encryption algor= ithms: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cb= c,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server encryption algor= ithms: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cb= c,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client MAC algorithms: = hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com
Aug 20 09:0= 9:36 [23657] <ssh2:8>: client-sent server MAC algorithms: hmac-sha1,h= mac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent client compression algo= rithms: none
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server = compression algorithms: none
Aug 20 09:09:36 [23657] <ssh2:8>: cli= ent-sent client languages:=C2=A0
Aug 20 09:09:36 [23657] <ssh2:8>: client-sent server languages:=C2=A0=
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len =3D 508 bytes<= br>Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len =3D 246= bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len =3D 261 by= tes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet MAC len =3D 0 b= ytes
Aug 20 09:09:36 [23657] <ssh2:3>: received SSH_MSG_KEX_DH_INI= T (30) packet
Aug 20 09:09:36 [23657] <ssh2:9>: reading DH_INIT message from client=
Aug 20 09:09:36 [23657] <ssh2:9>: writing DH_INIT message to clie= nt
Aug 20 09:09:36 [23657] <ssh2:12>: computing DH key
Aug 20 0= 9:09:36 [23657] <ssh2:3>: sent SSH_MSG_KEX_DH_REPLY (31) packet
Aug 20 09:09:36 [23657] <ssh2:9>: reading NEWKEYS message from client=
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet len =3D 180 bytes<= br>Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len =3D 178= bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len =3D 1 byte= s
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet MAC len =3D 0 byt= es
Aug 20 09:09:36 [23657] <ssh2:3>: received SSH_MSG_NEWKEYS (21)= packet
Aug 20 09:09:36 [23657] <ssh2:9>: sending NEWKEYS message to clientAug 20 09:09:36 [23657] <ssh2:3>: sent SSH_MSG_NEWKEYS (21) packet<= br>Aug 20 09:09:36 [23657] <ssh2:9>: setting session keys
Aug 20 0= 9:09:36 [23657] <ssh2:20>: SSH2 packet len =3D 2751686127 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet padding len =3D 209 by= tes
Aug 20 09:09:36 [23657] <ssh2:20>: SSH2 packet payload len =3D= 2751685917 bytes
Aug 20 09:09:36 [23657] <ssh2:20>: payload len (= 2751685917 bytes) exceeds max payload len (262144), ignoring payload
Aug 20 09:09:36 [23657] <ssh2:3>: reading 10448 bytes of data for dis= carding
Aug 20 09:09:36 [23657] <ssh2:20>: read 116 bytes, expecte= d 10448 bytes; pessimistically returning
Aug 20 09:09:36 [23657] <ssh= 2:9>: disconnecting (Application error) [at packet.c:1247]
Aug 20 09:09:36 [23657] <ssh2:3>: sent SSH_MSG_DISCONNECT (1) packet<= /span> --f46d042f955cacc87f04cafe1ffa-- --===============0139330806== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============0139330806==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 14:35:56 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91CZmDL020549; Mon, 1 Oct 2012 14:35:54 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91CZkV9020535 for ; Mon, 1 Oct 2012 14:35:47 +0200 Received: (qmail 11171 invoked by uid 501); 1 Oct 2012 12:35:47 -0000 Message-ID: <20121001123547.11170.qmail@stuge.se> Date: Mon, 1 Oct 2012 14:35:47 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: ProFTPD SFTP connection problem Mail-Followup-To: libssh2-devel@cool.haxx.se References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Hi, Michael Krietemeyer wrote: > I am using a libssh2 based client to connect to a ProFTPD with mod_sftp > (0.9.7). I have teseted it with different versions of the library (1.3.0 > and 1.4.2). I alwasy got the following errors (at the end of this post). Interesting. Please build a libssh2 library with debugging enabled: ./configure --enable-debug And ideally use one of the included examples instead of PHP bindings: example/sftp But please modify the source code sftp.c to call libssh2_trace(session,~0); ..right before the call to libssh2_session_handshake() on line 161. Please send the output. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 14:52:59 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91Cqrvp032763; Mon, 1 Oct 2012 14:52:58 +0200 Received: from na3sys009aog102.obsmtp.com (na3sys009aog102.obsmtp.com [74.125.149.69]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91CqnI7032739 for ; Mon, 1 Oct 2012 14:52:49 +0200 Received: from mail-pa0-f54.google.com ([209.85.220.54]) (using TLSv1) by na3sys009aob102.postini.com ([74.125.148.12]) with SMTP ID DSNKUGmSIZ4N9WPstyrs4azMpwwkNJOWPVV0@postini.com; Mon, 01 Oct 2012 05:52:51 PDT Received: by padbi1 with SMTP id bi1so4066964pad.41 for ; Mon, 01 Oct 2012 05:52:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=L8y4Xzb0WJZDC/fMRMQZaK44rk4vo+KOgiwyTexMLM0=; b=mbnZBHeNfIHSFFESALdpNGgQGdK7dgKF9XiF+0adArHPxScCq0lcU1gVZazHbkSGGL YhLUCcWc8nkPs4iRLQxzI6JRz/ljIkm/VcRkXB6fT/Jwmdxy8miTj/qFLUtwoRwD4/qu CX9f+z/iAypa/EFMtj8DgLM/S9jGV9mIHS5Y1AEb4MXwK4tirblCpwzJ4nh7cgXbz7kM 8+1te9LAR6YU33KFtX7P4x5PTVGITK9j/Fr7vzi1/hbXYVr5sBMzXY43skE7XYepP9ht dDThPyH0drPSxUsARmtKUSU9AZEPesd+4oRhgqEGzbtk7N00P16PhMIwE/0tSqHgYUZf Hj6Q== MIME-Version: 1.0 Received: by 10.68.129.98 with SMTP id nv2mr40907628pbb.85.1349095969187; Mon, 01 Oct 2012 05:52:49 -0700 (PDT) Received: by 10.66.253.103 with HTTP; Mon, 1 Oct 2012 05:52:49 -0700 (PDT) In-Reply-To: References: <505A5B66.30207@yahoo.ca> Date: Mon, 1 Oct 2012 08:52:49 -0400 Message-ID: Subject: Re: libssh2_channel_wait_closed(...) issue From: Chris Harris To: libssh2 development X-Gm-Message-State: ALoCoQnRwHaKkuD4FkzXBTFrIDM7tvJP3CJN8rTRu2iAm81hAEealTvt9anwXR1i8NgohD/isNr/ X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1335321426==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============1335321426== Content-Type: multipart/alternative; boundary=047d7b10ce7702e8e504cafee2fe --047d7b10ce7702e8e504cafee2fe Content-Type: text/plain; charset=ISO-8859-1 I have a little more information on this. I enable debug trace on the sshd side. This is the snippet of trace where I get a -21 error code from libssh2: Sep 20 10:08:21 salix sshd[14975]: debug1: session_input_channel_req: session 0 req exec Sep 20 10:08:21 salix sshd[14975]: debug2: fd 3 setting TCP_NODELAY Sep 20 10:08:21 salix sshd[14975]: debug2: fd 10 setting O_NONBLOCK Sep 20 10:08:21 salix sshd[14975]: debug2: fd 9 setting O_NONBLOCK Sep 20 10:08:21 salix sshd[14975]: debug2: fd 12 setting O_NONBLOCK Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read<=0 rfd 10 len 0 Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read failed Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: close_read Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input open -> drain Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read 0 from efd 12 Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: closing read-efd 12 Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: ibuf empty Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eof Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input drain -> closed Sep 20 10:08:21 salix sshd[14975]: debug2: notify_done: reading Sep 20 10:08:21 salix sshd[14975]: debug1: Received SIGCHLD. Sep 20 10:08:21 salix sshd[14975]: debug1: session_by_pid: pid 14976 Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: session 0 channel 0 pid 14976 Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: request exit-status confirm 0 Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: release channel 0 Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: write failed Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: close_write Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eow Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: output open -> closed Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send close Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd eof Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd close Sep 20 10:08:21 salix sshd[14975]: debug1: server_input_channel_open: ctype session rchan 1 win 262144 max 32768 Sep 20 10:08:21 salix sshd[14975]: debug1: input_session_request Sep 20 10:08:21 salix sshd[14975]: debug1: channel 1: new [server-session] Sep 20 10:08:21 salix sshd[14975]: debug1: session_open: channel 1 Sep 20 10:08:21 salix sshd[14975]: error: no more sessions And this is the snippet with the delay add: Sep 20 10:11:26 salix sshd[16409]: debug1: session_input_channel_req: session 0 req exec Sep 20 10:11:26 salix sshd[16409]: debug2: fd 3 setting TCP_NODELAY Sep 20 10:11:26 salix sshd[16409]: debug2: fd 10 setting O_NONBLOCK Sep 20 10:11:26 salix sshd[16409]: debug2: fd 9 setting O_NONBLOCK Sep 20 10:11:26 salix sshd[16409]: debug2: fd 12 setting O_NONBLOCK Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read<=0 rfd 10 len 0 Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read failed Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: close_read Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input open -> drain Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read 0 from efd 12 Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: closing read-efd 12 Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: ibuf empty Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eof Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input drain -> closed Sep 20 10:11:26 salix sshd[16409]: debug2: notify_done: reading Sep 20 10:11:26 salix sshd[16409]: debug1: Received SIGCHLD. Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_pid: pid 16410 Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: session 0 channel 0 pid 16410 Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: request exit-status confirm 0 Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: release channel 0 Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: write failed Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: close_write Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eow Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: output open -> closed Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send close Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd eof Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd close Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: is dead Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: notify user Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_channel: session 0 channel 0 Sep 20 10:11:26 salix sshd[16409]: debug1: session_close_by_channel: channel 0 child 0 Sep 20 10:11:26 salix sshd[16409]: debug1: session_close: session 0 pid 0 Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: user detached Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: is dead Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: garbage collecting Sep 20 10:11:26 salix sshd[16409]: debug1: channel 0: free: server-session, nchannels 1 Sep 20 10:11:27 salix sshd[16409]: debug1: server_input_channel_open: ctype session rchan 1 win 262144 max 32768 Sep 20 10:11:27 salix sshd[16409]: debug1: input_session_request Sep 20 10:11:27 salix sshd[16409]: debug1: channel 0: new [server-session] It looks to me like the GC step needs to complete before another channel can be requested. I am not familiar with the ssh protocol but should libssh2 be waiting for this step to complete before libssh2_channel_wait_closed() returns? Many Thanks, Chris On Thu, Sep 20, 2012 at 10:06 AM, Chris Harris wrote: > Maxime & Daniel, > > Thanks very much for the quick response. I tried the patch, but sadly it > has no effect in this situation. Let me know if there is more information I > can provide to help. If I get some time today I will start taking a look at > the code myself as well. > > Regards, > > Chris > > > On Thu, Sep 20, 2012 at 4:20 AM, Daniel Stenberg wrote: > >> On Wed, 19 Sep 2012, Maxime Larocque wrote: >> >> I had a similar trouble with libssh2 1.4.2, and I submitted a patch to >>> correct this: >>> >>> http://trac.libssh2.org/**ticket/245 >>> >>> Under some conditions, libssh2 did not close the channel correctly. I am >>> not sure if it applies to your case... >>> >> >> Thanks for pointing out this potential fix! Chris, let us know if it >> changes anything for you. I gave libssh2_channel_wait_closed() a quick >> glance yesterday and I couldn't spot anything really wrong standing out so >> it will take some proper digging to debug this more. >> >> I figure it goes without saying, but I'll state it anyway: >> >> We are only a few people actually involved in this project. Those of us >> who have push rights to git will HUGELY appreciate your feedback, comments >> and additional tests of patches and bug reports as provided. That helps us >> merge things into git and future releases with more confidence and speed. >> >> -- >> >> / daniel.haxx.se >> ______________________________**_________________ >> libssh2-devel http://cool.haxx.se/cgi-bin/** >> mailman/listinfo/libssh2-devel >> > > --047d7b10ce7702e8e504cafee2fe Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I have a little more information on this. I enable debug trace on the sshd = side.=A0

This is the snippet of trace where I get a -21 = error code from libssh2:

Sep 20 10:08:21 sali= x sshd[14975]: debug1: session_input_channel_req: session 0 req exec
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 3 setting TCP_NODELAY
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 10 setting O_NONBLOCK=
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 9 setting O_NONBLO= CK
Sep 20 10:08:21 salix sshd[14975]: debug2: fd 12 setting O_NONBLOCK
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read<=3D0 = rfd 10 len 0
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0= : read failed
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: close_read
=
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input open ->= drain
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: read= 0 from efd 12
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: closing read-efd= 12
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: ibuf em= pty
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eo= f
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: input drain ->= ; closed
Sep 20 10:08:21 salix sshd[14975]: debug2: notify_done: = reading
Sep 20 10:08:21 salix sshd[14975]: debug1: Received SIGCH= LD.
Sep 20 10:08:21 salix sshd[14975]: debug1: session_by_pid: pid 14976
Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: s= ession 0 channel 0 pid 14976
Sep 20 10:08:21 salix sshd[14975]: d= ebug2: channel 0: request exit-status confirm 0
Sep 20 10:08:21 salix sshd[14975]: debug1: session_exit_message: relea= se channel 0
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0= : write failed
Sep 20 10:08:21 salix sshd[14975]: debug2: channel= 0: close_write
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send eow
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: output open -> = closed
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: send= close
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd eof
Sep 20 10:08:21 salix sshd[14975]: debug2: channel 0: rcvd close
Sep 20 10:08:21 salix sshd[14975]: debug1: server_input_channel_open: ct= ype session rchan 1 win 262144 max 32768
Sep 20 10:08:21 salix sshd[14975]: debug1: input_session_request
=
Sep 20 10:08:21 salix sshd[14975]: debug1: channel 1: new [server-sess= ion]
Sep 20 10:08:21 salix sshd[14975]: debug1: session_open: cha= nnel 1
Sep 20 10:08:21 salix sshd[14975]: error: no more sessions
=

And this is the snippet with the delay add:
<= br>
Sep 20 10:11:26 salix sshd[16409]: debug1: session_input= _channel_req: session 0 req exec
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 3 setting TCP_NODELAY
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 10 setting O_NONBLOCK=
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 9 setting O_NONBLO= CK
Sep 20 10:11:26 salix sshd[16409]: debug2: fd 12 setting O_NONBLOCK
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read<=3D0 = rfd 10 len 0
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0= : read failed
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: close_read
=
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input open ->= drain
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: read= 0 from efd 12
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: closing read-efd= 12
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: ibuf em= pty
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eo= f
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: input drain ->= ; closed
Sep 20 10:11:26 salix sshd[16409]: debug2: notify_done: = reading
Sep 20 10:11:26 salix sshd[16409]: debug1: Received SIGCH= LD.
Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_pid: pid 16410
Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: s= ession 0 channel 0 pid 16410
Sep 20 10:11:26 salix sshd[16409]: d= ebug2: channel 0: request exit-status confirm 0
Sep 20 10:11:26 salix sshd[16409]: debug1: session_exit_message: relea= se channel 0
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0= : write failed
Sep 20 10:11:26 salix sshd[16409]: debug2: channel= 0: close_write
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send eow
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: output open -> = closed
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: send= close
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd eof
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: rcvd close
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: is dead
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: notify user
=
Sep 20 10:11:26 salix sshd[16409]: debug1: session_by_channel: session= 0 channel 0
Sep 20 10:11:26 salix sshd[16409]: debug1: session_c= lose_by_channel: channel 0 child 0
Sep 20 10:11:26 salix sshd[16409]: debug1: session_close: session 0 pi= d 0
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: gc: use= r detached
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: = is dead
Sep 20 10:11:26 salix sshd[16409]: debug2: channel 0: garbage collecti= ng
Sep 20 10:11:26 salix sshd[16409]: debug1: channel 0: free: se= rver-session, nchannels 1
Sep 20 10:11:27 salix sshd[16409]: debu= g1: server_input_channel_open: ctype session rchan 1 win 262144 max 32768
Sep 20 10:11:27 salix sshd[16409]: debug1: input_session_request
=
Sep 20 10:11:27 salix sshd[16409]: debug1: channel 0: new [server-sess= ion]

It looks to me like the GC step needs t= o complete before another channel can be requested. I am not=A0familiar=A0w= ith the ssh protocol but should libssh2 be waiting for this step to complet= e before=A0libssh2_channel_wait_clos= ed() returns?

Many Thanks,=A0

Chris


On Thu, Sep 20, 2012 at = 10:06 AM, Chris Harris <chris.harris@kitware.com> wro= te:
Maxime &=A0Daniel,

<= /div>
Thanks very much for the quick response. I tried the patch, but sadly = it has no effect in this situation. Let me know if there is more informatio= n I can provide to help. If I get some time today I will start taking a loo= k at the code myself as well.

Regards,=A0

Chris


On Thu, Sep 20, 2012 at 4:20 AM, Daniel Stenberg <daniel@haxx.se> wrote:
On Wed, 19 Sep 2012, Maxime Larocque wr= ote:

I had a similar trouble with libssh2 1.4.2, and I submitted a patch to corr= ect this:

http://tra= c.libssh2.org/ticket/245

Under some conditions, libssh2 did not close the channel correctly. I am no= t sure if it applies to your case...

Thanks for pointing out this potential fix! Chris, let us know if it change= s anything for you. I gave libssh2_channel_wait_closed() a quick glance yes= terday and I couldn't spot anything really wrong standing out so it wil= l take some proper digging to debug this more.

I figure it goes without saying, but I'll state it anyway:

We are only a few people actually involved in this project. Those of us who= have push rights to git will HUGELY appreciate your feedback, comments and= additional tests of patches and bug reports as provided. That helps us mer= ge things into git and future releases with more confidence and speed.

--

=A0/ daniel.haxx.se=
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/list= info/libssh2-devel


--047d7b10ce7702e8e504cafee2fe-- --===============1335321426== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1335321426==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 15:33:48 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91DXUCc030089; Mon, 1 Oct 2012 15:33:44 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91DXSEg030079 for ; Mon, 1 Oct 2012 15:33:29 +0200 Received: (qmail 15968 invoked by uid 501); 1 Oct 2012 13:33:29 -0000 Message-ID: <20121001133329.15967.qmail@stuge.se> Date: Mon, 1 Oct 2012 15:33:29 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: libssh2_channel_wait_closed(...) issue Mail-Followup-To: libssh2-devel@cool.haxx.se References: <505A5B66.30207@yahoo.ca> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Chris Harris wrote: > This is the snippet of trace where I get a -21 error code from libssh2: It would be good to also see libssh2 trace output with and without sleep. > It looks to me like the GC step needs to complete before another > channel can be requested. Yes. > I am not familiar with the ssh protocol but should libssh2 be > waiting for this step to complete before > libssh2_channel_wait_closed() returns? The garbage collection is an implementation detail of OpenSSH, it has nothing to do with the protocol. libssh2 trace output will show the actual protocol exchange details, which will help say if OpenSSH is misbehaving or not. I suspect MaxSessions 1 has not been tested a great deal and I do think that it is OpenSSH at fault here, but let's look at the trace to make sure before you post there. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 16:08:10 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91E7vpO023354; Mon, 1 Oct 2012 16:08:08 +0200 Received: from na3sys009aog119.obsmtp.com (na3sys009aog119.obsmtp.com [74.125.149.246]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q91E7s5b023280 for ; Mon, 1 Oct 2012 16:07:54 +0200 Received: from mail-pa0-f54.google.com ([209.85.220.54]) (using TLSv1) by na3sys009aob119.postini.com ([74.125.148.12]) with SMTP ID DSNKUGmjup4MKQdfTcxQvx3B4VNzHuDJ4Hc0@postini.com; Mon, 01 Oct 2012 07:07:56 PDT Received: by padbi1 with SMTP id bi1so4129450pad.41 for ; Mon, 01 Oct 2012 07:07:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=UqYsr4y5jj2gH1p85NXTRIHxnmWWFDaUgbj712fQbok=; b=WQadwyL248E1L6fSV1f/odUidt+CHkvQvqNV7An3YoVgyIRPEl5KReUzI8V1NPCBWb 0owodejvi7KudMz/fc0Uw99t8dUuplSQG4+ech8RE51JNuNal0hVLx/n+ccV4zy+GWXo fyiFCpsAQ6kEcqXHJov1HUzp9MHTDDgwZSFqVI1nzqgVls3AW+2THDQVaNLS+32MbaoH blzAs3wqJtGWjkqDBEO8yNDOw28hP4+yPUxAlHSviDTtsCwIryfv7fLYupJ2cLcHmyc1 H4I508asISu5ALmBJXMCH6xZM3l9uFfjWSRidrhYZGoC0LygI6dAgWO6Y8MmY/NQrIqI UQXg== MIME-Version: 1.0 Received: by 10.68.138.229 with SMTP id qt5mr39833491pbb.122.1349100474107; Mon, 01 Oct 2012 07:07:54 -0700 (PDT) Received: by 10.66.253.103 with HTTP; Mon, 1 Oct 2012 07:07:54 -0700 (PDT) In-Reply-To: <20121001133329.15967.qmail@stuge.se> References: <505A5B66.30207@yahoo.ca> <20121001133329.15967.qmail@stuge.se> Date: Mon, 1 Oct 2012 10:07:54 -0400 Message-ID: Subject: Re: libssh2_channel_wait_closed(...) issue From: Chris Harris To: libssh2 development X-Gm-Message-State: ALoCoQmmWEUIphN0yRgzdOYp7hGroomMiWVCuqg9u4oLRBmIT46jCDiUkIWDxcMsTjHaVMV8g4Ri X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0599684736==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============0599684736== Content-Type: multipart/alternative; boundary=047d7b15aa5b8686ac04caffee4e --047d7b15aa5b8686ac04caffee4e Content-Type: text/plain; charset=ISO-8859-1 On Mon, Oct 1, 2012 at 9:33 AM, Peter Stuge wrote: > Chris Harris wrote: > > This is the snippet of trace where I get a -21 error code from libssh2: > > It would be good to also see libssh2 trace output with and without sleep. > > Here are the traces. I added the following options: LIBSSH2_TRACE_CONN | LIBSSH2_TRACE_TRANS | LIBSSH2_TRACE_ERROR First without the sleep: [libssh2] 8.271158 Conn: Channel 0 received request type exit-status (wr 0) [libssh2] 8.271165 Conn: Exit status 0 received for channel 0/0 => libssh2_transport_read() plain (80 bytes) 0000: 5E 00 00 00 00 00 00 00 47 20 31 30 3A 30 31 3A : ^.......G 10:01: 0010: 31 32 20 75 70 20 35 34 20 64 61 79 73 2C 20 31 : 12 up 54 days, 1 0020: 38 3A 33 38 2C 20 20 30 20 75 73 65 72 73 2C 20 : 8:38, 0 users, 0030: 20 6C 6F 61 64 20 61 76 65 72 61 67 65 3A 20 32 : load average: 2 0040: 2E 31 31 2C 20 32 2E 30 30 2C 20 31 2E 39 36 0A : .11, 2.00, 1.96. [libssh2] 8.271180 Transport: Packet type 94 received, length=80 [libssh2] 8.271183 Conn: 71 bytes packet_add() for 0/0/0 => libssh2_transport_read() plain (5 bytes) 0000: 60 00 00 00 00 : `.... [libssh2] 8.271190 Transport: Packet type 96 received, length=5 [libssh2] 8.271192 Conn: EOF received for channel 0/0 => libssh2_transport_read() plain (5 bytes) 0000: 61 00 00 00 00 : a.... [libssh2] 8.271199 Transport: Packet type 97 received, length=5 [libssh2] 8.271201 Conn: Close received for channel 0/0 [libssh2] 8.271204 Conn: channel_read() got 71 of data from 0/0/0 [ul] We read: 10:01:12 up 54 days, 18:38, 0 users, load average: 2.11, 2.00, 1.96 libssh2_channel_read returned 0 [libssh2] 8.271258 Conn: Sending EOF on channel 0/0 => libssh2_transport_write plain (5 bytes) 0000: 60 00 00 00 00 : `.... => libssh2_transport_write send() (36 bytes) 0000: C3 75 1C 44 54 E3 30 2C 65 CF 4C 35 88 E7 FC 57 : .u.DT.0,e.L5...W 0010: 17 24 9E 66 EB 5B 06 04 26 D4 5F 6D F4 E8 13 38 : .$.f.[..&._m...8 0020: 79 23 7D 70 : y#}p [libssh2] 8.271281 Conn: Closing channel 0/0 => libssh2_transport_write plain (5 bytes) 0000: 61 00 00 00 00 : a.... => libssh2_transport_write send() (36 bytes) 0000: 88 48 C9 1B CD DB 13 40 4A C9 5B D3 8B 9A B7 1F : .H.....@J.[..... 0010: 97 7C E3 5E F7 BE 39 FE B1 5A BB 84 8E A6 05 B7 : .|.^..9..Z...... 0020: C4 AD 4C B0 : ..L. [libssh2] 8.271298 Conn: Awaiting close of channel 0/0 EXIT: 0 bytecount: 71 [libssh2] 8.271312 Conn: Freeing channel 0/0 resources [libssh2] 8.271314 Transport: Looking for packet of type: 94 [libssh2] 8.271316 Transport: Looking for packet of type: 95 [libssh2] 8.271318 Conn: Allocated new channel ID#1 [libssh2] 8.271320 Conn: Opening Channel - win 262144 pack 32768 => libssh2_transport_write plain (24 bytes) 0000: 5A 00 00 00 07 73 65 73 73 69 6F 6E 00 00 00 01 : Z....session.... 0010: 00 04 00 00 00 00 80 00 : ........ => libssh2_transport_write send() (68 bytes) 0000: A7 47 26 76 FE 0B FD D3 2D 91 50 86 D4 12 57 1F : .G&v....-.P...W. 0010: E4 3E 63 71 27 35 22 AD D8 25 22 CF 41 9A 21 EB : .>cq'5"..%".A.!. 0020: E6 4A 45 52 9E DF 3E 42 55 68 2A 37 15 FF 9C F2 : .JER..>BUh*7.... 0030: 0B 3C D7 8C 1B 85 8F 4B 47 92 33 58 BC 83 FA 88 : .<.....KG.3X.... 0040: E1 95 8D 34 : ...4 [libssh2] 8.271343 Transport: Looking for packet of type: 91 [libssh2] 8.271344 Transport: Looking for packet of type: 92 [libssh2] 8.310148 Transport: Looking for packet of type: 91 [libssh2] 8.310163 Transport: Looking for packet of type: 92 => libssh2_transport_read() raw (68 bytes) 0000: BD 33 F3 EE C2 7C C0 A1 E4 31 93 00 9C 87 6E 47 : .3...|...1....nG 0010: AB FA 1E 8A 62 30 7D D5 2F AB 69 76 13 5B 01 9D : ....b0}./.iv.[.. 0020: 5E 6B 28 1B FC 12 09 85 91 02 7E 7B 45 BE 94 80 : ^k(.......~{E... 0030: 8E 72 B8 E1 29 36 5D F7 2C A6 EC 14 B3 CE 31 20 : .r..)6].,.....1 0040: 92 E7 63 31 : ..c1 => libssh2_transport_read() plain (28 bytes) 0000: 5C 00 00 00 01 00 00 00 01 00 00 00 0B 6F 70 65 : \............ope 0010: 6E 20 66 61 69 6C 65 64 00 00 00 00 : n failed.... [libssh2] 8.310215 Transport: Packet type 92 received, length=28 [libssh2] 8.310220 Transport: Looking for packet of type: 91 [libssh2] 8.310224 Transport: Looking for packet of type: 92 [libssh2] 8.310228 Failure Event: -21 - Channel open failure [libssh2] 8.310232 Transport: Looking for packet of type: 94 [libssh2] 8.310235 Transport: Looking for packet of type: 95 Error: -21 With the sleep: [libssh2] 0.376790 Conn: Channel 0 received request type exit-status (wr 0) [libssh2] 0.376797 Conn: Exit status 0 received for channel 0/0 => libssh2_transport_read() plain (80 bytes) 0000: 5E 00 00 00 00 00 00 00 47 20 31 30 3A 30 34 3A : ^.......G 10:04: 0010: 30 37 20 75 70 20 35 34 20 64 61 79 73 2C 20 31 : 07 up 54 days, 1 0020: 38 3A 34 31 2C 20 20 30 20 75 73 65 72 73 2C 20 : 8:41, 0 users, 0030: 20 6C 6F 61 64 20 61 76 65 72 61 67 65 3A 20 31 : load average: 1 0040: 2E 38 32 2C 20 31 2E 39 31 2C 20 31 2E 39 34 0A : .82, 1.91, 1.94. [libssh2] 0.376836 Transport: Packet type 94 received, length=80 [libssh2] 0.376842 Conn: 71 bytes packet_add() for 0/0/0 => libssh2_transport_read() raw (72 bytes) 0000: 49 78 5B 5E F6 CB 0F 59 3D 7E E8 A1 90 62 92 56 : Ix[^...Y=~...b.V 0010: ED 08 1F B7 34 E0 B4 0B 6E 24 01 D2 2D 9F 23 A6 : ....4...n$..-.#. 0020: A9 FE 82 83 60 35 D3 C9 0B F3 3C 5E E3 39 0E 2B : ....`5....<^.9.+ 0030: AD 33 70 2D 0F 5C B5 54 1E 80 FA ED 9F 7B 3D AC : .3p-.\.T.....{=. 0040: B4 64 E3 41 24 93 CD 08 : .d.A$... => libssh2_transport_read() plain (5 bytes) 0000: 60 00 00 00 00 : `.... [libssh2] 0.376892 Transport: Packet type 96 received, length=5 [libssh2] 0.376897 Conn: EOF received for channel 0/0 => libssh2_transport_read() plain (5 bytes) 0000: 61 00 00 00 00 : a.... [libssh2] 0.376915 Transport: Packet type 97 received, length=5 [libssh2] 0.376921 Conn: Close received for channel 0/0 [libssh2] 0.376927 Conn: channel_read() got 71 of data from 0/0/0 [ul] We read: 10:04:07 up 54 days, 18:41, 0 users, load average: 1.82, 1.91, 1.94 libssh2_channel_read returned 0 [libssh2] 0.377097 Conn: Sending EOF on channel 0/0 => libssh2_transport_write plain (5 bytes) 0000: 60 00 00 00 00 : `.... => libssh2_transport_write send() (36 bytes) 0000: 7F 42 AE 48 B5 17 0B D0 75 4C A2 FE A7 72 71 28 : .B.H....uL...rq( 0010: 8F 4C C3 05 60 DF 45 5B 30 D6 FA 86 9F 3B 03 03 : .L..`.E[0....;.. 0020: D9 42 DE B9 : .B.. [libssh2] 0.377144 Conn: Closing channel 0/0 => libssh2_transport_write plain (5 bytes) 0000: 61 00 00 00 00 : a.... => libssh2_transport_write send() (36 bytes) 0000: EA 38 19 81 92 9C 86 9C D1 BE 87 4F D9 04 F1 56 : .8.........O...V 0010: 7B 1E E5 2F A7 67 73 B0 79 17 BB F7 B7 31 78 04 : {../.gs.y....1x. 0020: 8D 0D 04 30 : ...0 [libssh2] 0.377186 Conn: Awaiting close of channel 0/0 EXIT: 0 bytecount: 71 [libssh2] 0.377212 Conn: Freeing channel 0/0 resources [libssh2] 0.377218 Transport: Looking for packet of type: 94 [libssh2] 0.377223 Transport: Looking for packet of type: 95 [libssh2] 1.377328 Conn: Allocated new channel ID#1 [libssh2] 1.377396 Conn: Opening Channel - win 262144 pack 32768 => libssh2_transport_write plain (24 bytes) 0000: 5A 00 00 00 07 73 65 73 73 69 6F 6E 00 00 00 01 : Z....session.... 0010: 00 04 00 00 00 00 80 00 : ........ => libssh2_transport_write send() (68 bytes) 0000: 3E 7D D9 40 FB A9 71 C9 C8 60 3B B4 AA 0F 36 25 : >}.@..q..`;...6% 0010: A0 51 4F 01 26 AD 60 65 BD D0 0C 16 29 C6 49 C1 : .QO.&.`e....).I. 0020: 62 4E 23 E5 71 30 29 D5 01 64 9F 9C EE 69 E8 24 : bN#.q0)..d...i.$ 0030: 7E 42 35 5A 34 64 4A 1A BC D5 75 69 62 D6 BA 60 : ~B5Z4dJ...uib..` 0040: 4A E9 2F FA : J./. [libssh2] 1.377558 Transport: Looking for packet of type: 91 [libssh2] 1.377565 Transport: Looking for packet of type: 92 [libssh2] 1.377927 Transport: Looking for packet of type: 91 [libssh2] 1.377996 Transport: Looking for packet of type: 92 => libssh2_transport_read() raw (52 bytes) 0000: 36 3F CD C5 F1 08 A7 4E FA C7 11 31 79 E3 DA F2 : 6?.....N...1y... 0010: F2 1A 1B 72 7B 4B 49 13 50 78 94 F5 CA F9 95 51 : ...r{KI.Px.....Q 0020: D7 AB 9C 13 E2 3A 20 22 C5 3B 78 DC 79 1E D8 7E : .....: ".;x.y..~ 0030: 9E 31 86 60 : .1.` => libssh2_transport_read() plain (17 bytes) 0000: 5B 00 00 00 01 00 00 00 00 00 00 00 00 00 00 80 : [............... 0010: 00 : . [libssh2] 1.378103 Transport: Packet type 91 received, length=17 [libssh2] 1.378111 Transport: Looking for packet of type: 91 [libssh2] 1.378118 Conn: Connection Established - ID: 1/0 win: 0/262144 pack: 32768/140733193420800 [libssh2] 1.378125 Conn: starting request(exec) on channel 1/0, message=uptime => libssh2_transport_write plain (18 bytes) 0000: 62 00 00 00 00 00 00 00 04 65 78 65 63 01 00 00 : b........exec... 0010: 00 06 : .. => libssh2_transport_write plain2 (6 bytes) 0000: 75 70 74 69 6D 65 : uptime => libssh2_transport_write send() (68 bytes) 0000: DA 18 E5 0F 7A 5D 07 E2 22 5C 09 84 CE 97 BD C7 : ....z].."\...... 0010: E3 4A 4C 44 5D 01 12 83 22 EC 48 8D AD E8 83 45 : .JLD]...".H....E 0020: 7C EB BE 00 36 46 A3 3A 39 E1 4D 26 5E 42 9B 82 : |...6F.:9.M&^B.. 0030: 56 75 1A AB 5C ED 51 32 46 A6 37 7C 4D F5 D0 D2 : Vu..\.Q2F.7|M... 0040: 1A 3C CB 3C : .<.< [libssh2] 1.378213 Transport: Looking for packet of type: 99 [libssh2] 1.378220 Transport: Looking for packet of type: 100 [libssh2] 1.378918 Transport: Looking for packet of type: 99 [libssh2] 1.378948 Transport: Looking for packet of type: 100 => libssh2_transport_read() raw (88 bytes) 0000: 4C 67 83 ED B5 AE AD A7 7F 02 6E CF 15 BE EE 7E : Lg........n....~ 0010: 65 51 D0 1D 2E C4 5E 0B 1C F5 60 C2 06 9F F3 60 : eQ....^...`....` 0020: 60 0B 02 D9 79 77 77 69 46 3C F7 AA 43 61 1E 35 : `...ywwiF<..Ca.5 0030: D6 46 1A 79 30 D5 00 79 E8 68 BA 87 63 7F 55 2C : .F.y0..y.h..c.U, 0040: CE 38 D1 7D C1 83 7F EB 9A 65 C0 79 76 D8 9E 4A : .8.}.....e.yv..J 0050: 56 EE C8 06 64 F8 2B BC : V...d.+. => libssh2_transport_read() plain (9 bytes) 0000: 5D 00 00 00 01 00 20 00 00 : ]..... .. [libssh2] 1.379028 Transport: Packet type 93 received, length=9 [libssh2] 1.379035 Conn: Window adjust for channel 1/0, adding 2097152 bytes, new window_size=2097152 => libssh2_transport_read() plain (5 bytes) 0000: 63 00 00 00 01 : c.... [libssh2] 1.379059 Transport: Packet type 99 received, length=5 [libssh2] 1.379066 Transport: Looking for packet of type: 99 [libssh2] 1.379073 Conn: channel_read() wants 16384 bytes from channel 1/0 stream #0 [libssh2] 1.381917 Conn: channel_read() wants 16384 bytes from channel 1/0 stream #0 => libssh2_transport_read() raw (116 bytes) 0000: 5A 92 15 0F 1E 2A FA FF 6C 80 52 19 A4 55 CC 73 : Z....*..l.R..U.s 0010: A2 8C 6D 70 EC BB 30 99 F1 EB 1E A8 C4 B3 78 ED : ..mp..0.......x. 0020: F0 D8 38 F5 FD CB 1B 70 BC DD BB 32 21 59 E0 10 : ..8....p...2!Y.. 0030: 7A B2 7B 1D 38 7D 4F 09 F5 72 96 3A 90 42 DF EE : z.{.8}O..r.:.B.. 0040: 5C 37 84 7C A2 EE 75 4C 83 C9 9F 3B 97 99 2E FE : \7.|..uL...;.... 0050: B6 54 D8 D7 17 6A 33 DA BD B7 F4 19 18 A6 B2 17 : .T...j3......... 0060: 2E B1 9C B1 05 13 51 D2 FC 4D AB 97 DF 81 24 CB : ......Q..M....$. 0070: F6 10 81 60 : ...` => libssh2_transport_read() plain (80 bytes) 0000: 5E 00 00 00 01 00 00 00 47 20 31 30 3A 30 34 3A : ^.......G 10:04: 0010: 30 38 20 75 70 20 35 34 20 64 61 79 73 2C 20 31 : 08 up 54 days, 1 0020: 38 3A 34 31 2C 20 20 30 20 75 73 65 72 73 2C 20 : 8:41, 0 users, 0030: 20 6C 6F 61 64 20 61 76 65 72 61 67 65 3A 20 31 : load average: 1 0040: 2E 38 32 2C 20 31 2E 39 31 2C 20 31 2E 39 34 0A : .82, 1.91, 1.94. [libssh2] 1.382138 Transport: Packet type 94 received, length=80 [libssh2] 1.382144 Conn: 71 bytes packet_add() for 1/0/0 [libssh2] 1.382151 Conn: channel_read() got 71 of data from 1/0/0 [ul] We read: 10:04:08 up 54 days, 18:41, 0 users, load average: 1.82, 1.91, 1.94 [libssh2] 1.382546 Conn: channel_read() wants 16384 bytes from channel 1/0 stream #0 => libssh2_transport_read() raw (140 bytes) 0000: EB EA AB E9 C1 47 F4 61 DB 88 F0 07 38 25 99 E9 : .....G.a....8%.. 0010: B3 1E C0 4C C3 BB 07 72 19 8D 3B DA D4 62 E9 11 : ...L...r..;..b.. 0020: D1 50 6B 8B 07 3B B6 F2 7F 4C A3 D1 76 48 0C 5C : .Pk..;...L..vH.\ 0030: A9 1F CC 78 0E BB C3 24 64 C3 84 C4 8B 83 66 DA : ...x...$d.....f. 0040: 1E EE 9B 53 3A 12 BB 58 DF AB E0 D6 C3 02 F1 8A : ...S:..X........ 0050: CE 99 90 EA 13 7C DB E6 A8 28 9C EE CF 35 F0 C1 : .....|...(...5.. 0060: 11 CA 2A 73 04 21 C0 F6 FE E8 6A 5D D4 71 80 0C : ..*s.!....j].q.. 0070: B2 32 C9 40 05 01 6C 4B B6 92 EE 39 DE 85 45 DB : .2.@..lK...9..E. 0080: B0 A9 CE F2 43 70 0E 7E 84 D1 F3 B9 : ....Cp.~.... => libssh2_transport_read() plain (5 bytes) 0000: 60 00 00 00 01 : `.... [libssh2] 1.382695 Transport: Packet type 96 received, length=5 [libssh2] 1.382701 Conn: EOF received for channel 1/0 => libssh2_transport_read() plain (25 bytes) 0000: 62 00 00 00 01 00 00 00 0B 65 78 69 74 2D 73 74 : b........exit-st 0010: 61 74 75 73 00 00 00 00 00 : atus..... [libssh2] 1.382725 Transport: Packet type 98 received, length=25 [libssh2] 1.382730 Conn: Channel 1 received request type exit-status (wr 0) [libssh2] 1.382736 Conn: Exit status 0 received for channel 1/0 => libssh2_transport_read() plain (5 bytes) 0000: 61 00 00 00 01 : a.... [libssh2] 1.382754 Transport: Packet type 97 received, length=5 [libssh2] 1.382760 Conn: Close received for channel 1/0 libssh2_channel_read returned 0 [libssh2] 1.382771 Conn: Sending EOF on channel 1/0 => libssh2_transport_write plain (5 bytes) 0000: 60 00 00 00 00 : `.... => libssh2_transport_write send() (36 bytes) 0000: 76 AF 27 D5 14 82 32 02 B4 EB F4 91 9F A6 0E C9 : v.'...2......... 0010: 37 53 CE A4 BE 53 65 05 9A 0D B9 2C 6F BC 15 5F : 7S...Se....,o.._ 0020: C4 00 CB D6 : .... [libssh2] 1.382818 Conn: Closing channel 1/0 => libssh2_transport_write plain (5 bytes) 0000: 61 00 00 00 00 : a.... => libssh2_transport_write send() (36 bytes) 0000: 5D AA 85 0F 1D 0D 57 53 E3 0E 50 82 A0 7E 77 AA : ].....WS..P..~w. 0010: 1B 55 A4 5C 93 DC 1B 85 08 F8 7F 1E 0D 52 FD F6 : .U.\.........R.. 0020: 17 00 81 33 : ...3 [libssh2] 1.382859 Conn: Awaiting close of channel 1/0 EXIT: 0 bytecount: 71 [libssh2] 1.382873 Conn: Freeing channel 1/0 resources [libssh2] 1.382879 Transport: Looking for packet of type: 94 [libssh2] 1.382887 Transport: Looking for packet of type: 95 [libssh2] 1.382894 Transport: Disconnecting: reason=11, desc=Normal Shutdown, Thank you for playing, lang= => libssh2_transport_write plain (51 bytes) 0000: 01 00 00 00 0B 00 00 00 26 4E 6F 72 6D 61 6C 20 : ........&Normal 0010: 53 68 75 74 64 6F 77 6E 2C 20 54 68 61 6E 6B 20 : Shutdown, Thank 0020: 79 6F 75 20 66 6F 72 20 70 6C 61 79 69 6E 67 00 : you for playing. 0030: 00 00 00 : ... => libssh2_transport_write plain2 (0 bytes) => libssh2_transport_write send() (84 bytes) 0000: C4 24 06 84 46 70 3C E8 05 77 8D EA 05 D9 6B 77 : .$..Fp<..w....kw 0010: A1 71 E2 34 8A F1 E3 46 CB 92 55 9D CC C9 F5 4E : .q.4...F..U....N 0020: F4 25 61 35 72 C6 0A B7 E5 A6 B5 1D CE 3C 24 0F : .%a5r........<$. 0030: 9F B2 54 01 3C 43 32 F0 16 60 E3 0B A9 94 31 15 : ..T. > > It looks to me like the GC step needs to complete before another > > channel can be requested. > > Yes. > > > > I am not familiar with the ssh protocol but should libssh2 be > > waiting for this step to complete before > > libssh2_channel_wait_closed() returns? > > The garbage collection is an implementation detail of OpenSSH, it > has nothing to do with the protocol. > I assumed that this was the case but wasn't sure > > libssh2 trace output will show the actual protocol exchange details, > which will help say if OpenSSH is misbehaving or not. > > I suspect MaxSessions 1 has not been tested a great deal and I do > think that it is OpenSSH at fault here, but let's look at the trace > to make sure before you post there. > > //Peter > _______________________________________________ > libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel > --047d7b15aa5b8686ac04caffee4e Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
On Mon, Oct 1, 2012 at 9:33 AM, Peter Stuge <peter= @stuge.se> wrote:
Chris Harris wrote:
> This is the snippet of trace where I get a -21 error code from libssh2= :

It would be good to also see libssh2 trace output with and without sl= eep.


Here are the t= races. I added the following options:=A0=A0LIBSSH2_TRACE_CONN | LIBSSH2_TRA= CE_TRANS | LIBSSH2_TRACE_ERROR

First without the s= leep:

[libssh2] 8.271158 Conn: Channel 0 received reques= t type exit-status (wr 0)
[libssh2] 8.271165 Conn: Exit status 0 = received for channel 0/0
=3D> libssh2_transport_read() plain (= 80 bytes)
0000: 5E 00 00 00 00 00 00 00 =A047 20 31 30 3A 30 31 3A : ^.......G 1= 0:01:
0010: 31 32 20 75 70 20 35 34 =A020 64 61 79 73 2C 20 31 : = 12 up 54 days, 1
0020: 38 3A 33 38 2C 20 20 30 =A020 75 73 65 72 = 73 2C 20 : 8:38, =A00 users,=A0
0030: 20 6C 6F 61 64 20 61 76 =A065 72 61 67 65 3A 20 32 : =A0load ave= rage: 2
0040: 2E 31 31 2C 20 32 2E 30 =A030 2C 20 31 2E 39 36 0A = : .11, 2.00, 1.96.
[libssh2] 8.271180 Transport: Packet type 94 r= eceived, length=3D80
[libssh2] 8.271183 Conn: 71 bytes packet_add() for 0/0/0
=3D= > libssh2_transport_read() plain (5 bytes)
0000: 60 00 00 00 0= 0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `..= ..
[libssh2] 8.271190 Transport: Packet type 96 received, length= =3D5
[libssh2] 8.271192 Conn: EOF received for channel 0/0
=3D>= ; libssh2_transport_read() plain (5 bytes)
0000: 61 00 00 00 00 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : a....=
[libssh2] 8.271199 Transport: Packet type 97 received, length=3D= 5
[libssh2] 8.271201 Conn: Close received for channel 0/0
[lib= ssh2] 8.271204 Conn: channel_read() got 71 of data from 0/0/0 [ul]
We read:
=A010:01:12 up 54 days, 18:38, =A00 users, =A0load ave= rage: 2.11, 2.00, 1.96

libssh2_channel_read returned 0
[libssh2] 8.2= 71258 Conn: Sending EOF on channel 0/0
=3D> libssh2_transport_= write plain (5 bytes)
0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....
=3D> libssh2_transport_write send() (36 bytes)
0000: C3 7= 5 1C 44 54 E3 30 2C =A065 CF 4C 35 88 E7 FC 57 : .u.DT.0,e.L5...W
0010: 17 24 9E 66 EB 5B 06 04 =A026 D4 5F 6D F4 E8 13 38 : .$.f.[..&._= m...8
0020: 79 23 7D 70 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: y#}p
[libssh2] 8.271281 Conn: Closing ch= annel 0/0
=3D> libssh2_transport_write plain (5 bytes)
0000: 61 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 : a....
=3D> libssh2_transport_write send() (36 bytes)
0000: 88 4= 8 C9 1B CD DB 13 40 =A04A C9 5B D3 8B 9A B7 1F : .H.....@J.[.....
0010: 97 7C E3 5E F7 BE 39 FE =A0B1 5A BB 84 8E A6 05 B7 : .|.^..9..Z.....= .
0020: C4 AD 4C B0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: ..L.
[libssh2] 8.271298 Conn: Awaiting c= lose of channel 0/0

EXIT: 0 bytecount: 71
[libssh2] 8.271312 Conn: Freeing channel 0/0 resources
[libssh2] 8.271314 Transport: Looking for packet of type: 94
[libssh2] 8.271316 Transport: Looking for packet of type: 95
[li= bssh2] 8.271318 Conn: Allocated new channel ID#1
[libssh2] 8.2713= 20 Conn: Opening Channel - win 262144 pack 32768
=3D> libssh2_transport_write plain (24 bytes)
0000: 5A 00= 00 00 07 73 65 73 =A073 69 6F 6E 00 00 00 01 : Z....session....
= 0010: 00 04 00 00 00 00 80 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0: ........
=3D> libssh2_transport_write send() (68 bytes)
0000: A7 47 26 = 76 FE 0B FD D3 =A02D 91 50 86 D4 12 57 1F : .G&v....-.P...W.
= 0010: E4 3E 63 71 27 35 22 AD =A0D8 25 22 CF 41 9A 21 EB : .>cq'5&qu= ot;..%".A.!.
0020: E6 4A 45 52 9E DF 3E 42 =A055 68 2A 37 15 FF 9C F2 : .JER..>B= Uh*7....
0030: 0B 3C D7 8C 1B 85 8F 4B =A047 92 33 58 BC 83 FA 88= : .<.....KG.3X....
0040: E1 95 8D 34 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ...4
[libssh2] 8.271343 Transport: Looking for packet of type: 91
[libssh2] 8.271344 Transport: Looking for packet of type: 92
[li= bssh2] 8.310148 Transport: Looking for packet of type: 91
[libssh= 2] 8.310163 Transport: Looking for packet of type: 92
=3D> libssh2_transport_read() raw (68 bytes)
0000: BD 33 = F3 EE C2 7C C0 A1 =A0E4 31 93 00 9C 87 6E 47 : .3...|...1....nG
0= 010: AB FA 1E 8A 62 30 7D D5 =A02F AB 69 76 13 5B 01 9D : ....b0}./.iv.[..<= /div>
0020: 5E 6B 28 1B FC 12 09 85 =A091 02 7E 7B 45 BE 94 80 : ^k(.......~= {E...
0030: 8E 72 B8 E1 29 36 5D F7 =A02C A6 EC 14 B3 CE 31 20 : = .r..)6].,.....1=A0
0040: 92 E7 63 31 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ..c1
=3D> libssh2_transport_read() plain (28 bytes)
0000: 5C 0= 0 00 00 01 00 00 00 =A001 00 00 00 0B 6F 70 65 : \............ope
0010: 6E 20 66 61 69 6C 65 64 =A000 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 : n f= ailed....
[libssh2] 8.310215 Transport: Packet type 92 received, length=3D28
[libssh2] 8.310220 Transport: Looking for packet of type: 91
[libssh2] 8.310224 Transport: Looking for packet of type: 92
[libssh2] 8.310228 Failure Event: -21 - Channel open failure
[lib= ssh2] 8.310232 Transport: Looking for packet of type: 94
[libssh2= ] 8.310235 Transport: Looking for packet of type: 95
Error: -21

With the sleep:

[li= bssh2] 0.376790 Conn: Channel 0 received request type exit-status (wr 0)
[libssh2] 0.376797 Conn: Exit status 0 received for channel 0/0
=3D> libssh2_transport_read() plain (80 bytes)
0000: 5E 0= 0 00 00 00 00 00 00 =A047 20 31 30 3A 30 34 3A : ^.......G 10:04:
0010: 30 37 20 75 70 20 35 34 =A020 64 61 79 73 2C 20 31 : 07 up 54 days, = 1
0020: 38 3A 34 31 2C 20 20 30 =A020 75 73 65 72 73 2C 20 : 8:41, =A00 = users,=A0
0030: 20 6C 6F 61 64 20 61 76 =A065 72 61 67 65 3A 20 3= 1 : =A0load average: 1
0040: 2E 38 32 2C 20 31 2E 39 =A031 2C 20 = 31 2E 39 34 0A : .82, 1.91, 1.94.
[libssh2] 0.376836 Transport: Packet type 94 received, length=3D80
[libssh2] 0.376842 Conn: 71 bytes packet_add() for 0/0/0
= =3D> libssh2_transport_read() raw (72 bytes)
0000: 49 78 5B 5E= F6 CB 0F 59 =A03D 7E E8 A1 90 62 92 56 : Ix[^...Y=3D~...b.V
0010: ED 08 1F B7 34 E0 B4 0B =A06E 24 01 D2 2D 9F 23 A6 : ....4...n$.= .-.#.
0020: A9 FE 82 83 60 35 D3 C9 =A00B F3 3C 5E E3 39 0E 2B : = ....`5....<^.9.+
0030: AD 33 70 2D 0F 5C B5 54 =A01E 80 FA ED = 9F 7B 3D AC : .3p-.\.T.....{=3D.
0040: B4 64 E3 41 24 93 CD 08 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0: .d.A$...
=3D> libssh2_transport_read() plain (5 b= ytes)
0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....
[libssh2] 0.376892 Transp= ort: Packet type 96 received, length=3D5
[libssh2] 0.376897 Conn: EOF received for channel 0/0
=3D>= ; libssh2_transport_read() plain (5 bytes)
0000: 61 00 00 00 00 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : a....=
[libssh2] 0.376915 Transport: Packet type 97 received, length=3D= 5
[libssh2] 0.376921 Conn: Close received for channel 0/0
[lib= ssh2] 0.376927 Conn: channel_read() got 71 of data from 0/0/0 [ul]
We read:
=A010:04:07 up 54 days, 18:41, =A00 users, =A0load ave= rage: 1.82, 1.91, 1.94

libssh2_channel_read returned 0
[libssh2] 0.3= 77097 Conn: Sending EOF on channel 0/0
=3D> libssh2_transport_= write plain (5 bytes)
0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....
=3D> libssh2_transport_write send() (36 bytes)
0000: 7F 4= 2 AE 48 B5 17 0B D0 =A075 4C A2 FE A7 72 71 28 : .B.H....uL...rq(
0010: 8F 4C C3 05 60 DF 45 5B =A030 D6 FA 86 9F 3B 03 03 : .L..`.E[0....;.= .
0020: D9 42 DE B9 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: .B..
[libssh2] 0.377144 Conn: Closing ch= annel 0/0
=3D> libssh2_transport_write plain (5 bytes)
0000: 61 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 : a....
=3D> libssh2_transport_write send() (36 bytes)
0000: EA 3= 8 19 81 92 9C 86 9C =A0D1 BE 87 4F D9 04 F1 56 : .8.........O...V
0010: 7B 1E E5 2F A7 67 73 B0 =A079 17 BB F7 B7 31 78 04 : {../.gs.y....1x= .
0020: 8D 0D 04 30 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: ...0
[libssh2] 0.377186 Conn: Awaiting c= lose of channel 0/0

EXIT: 0 bytecount: 71
[libssh2] 0.377212 Conn: Freeing channel 0/0 resources
[libssh2] 0.377218 Transport: Looking for packet of type: 94
[libssh2] 0.377223 Transport: Looking for packet of type: 95
[li= bssh2] 1.377328 Conn: Allocated new channel ID#1
[libssh2] 1.3773= 96 Conn: Opening Channel - win 262144 pack 32768
=3D> libssh2_transport_write plain (24 bytes)
0000: 5A 00= 00 00 07 73 65 73 =A073 69 6F 6E 00 00 00 01 : Z....session....
= 0010: 00 04 00 00 00 00 80 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0: ........
=3D> libssh2_transport_write send() (68 bytes)
0000: 3E 7D D9 = 40 FB A9 71 C9 =A0C8 60 3B B4 AA 0F 36 25 : >}.@..q..`;...6%
0= 010: A0 51 4F 01 26 AD 60 65 =A0BD D0 0C 16 29 C6 49 C1 : .QO.&.`e....)= .I.
0020: 62 4E 23 E5 71 30 29 D5 =A001 64 9F 9C EE 69 E8 24 : bN#.q0)..d.= ..i.$
0030: 7E 42 35 5A 34 64 4A 1A =A0BC D5 75 69 62 D6 BA 60 : = ~B5Z4dJ...uib..`
0040: 4A E9 2F FA =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: J./.
[libssh2] 1.377558 Transport: Looking for packet of type: 91
[libssh2] 1.377565 Transport: Looking for packet of type: 92
[li= bssh2] 1.377927 Transport: Looking for packet of type: 91
[libssh= 2] 1.377996 Transport: Looking for packet of type: 92
=3D> libssh2_transport_read() raw (52 bytes)
0000: 36 3F = CD C5 F1 08 A7 4E =A0FA C7 11 31 79 E3 DA F2 : 6?.....N...1y...
0= 010: F2 1A 1B 72 7B 4B 49 13 =A050 78 94 F5 CA F9 95 51 : ...r{KI.Px.....Q<= /div>
0020: D7 AB 9C 13 E2 3A 20 22 =A0C5 3B 78 DC 79 1E D8 7E : .....: &quo= t;.;x.y..~
0030: 9E 31 86 60 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: .1.`
=3D> libssh2_tra= nsport_read() plain (17 bytes)
0000: 5B 00 00 00 01 00 00 00 =A000 00 00 00 00 00 00 80 : [...............=
0010: 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : .
[libssh2] 1.378103 Trans= port: Packet type 91 received, length=3D17
[libssh2] 1.378111 Transport: Looking for packet of type: 91
[libssh2] 1.378118 Conn: Connection Established - ID: 1/0 win: 0/262144 pa= ck: 32768/140733193420800
[libssh2] 1.378125 Conn: starting reque= st(exec) on channel 1/0, message=3Duptime
=3D> libssh2_transport_write plain (18 bytes)
0000: 62 00= 00 00 00 00 00 00 =A004 65 78 65 63 01 00 00 : b........exec...
= 0010: 00 06 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0: ..
=3D> libssh2_transport_write plai= n2 (6 bytes)
0000: 75 70 74 69 6D 65 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0: uptime
=3D> libssh2_transport_write send(= ) (68 bytes)
0000: DA 18 E5 0F 7A 5D 07 E2 =A022 5C 09 84 CE 97 B= D C7 : ....z].."\......
0010: E3 4A 4C 44 5D 01 12 83 =A022 EC 48 8D AD E8 83 45 : .JLD]...&qu= ot;.H....E
0020: 7C EB BE 00 36 46 A3 3A =A039 E1 4D 26 5E 42 9B = 82 : |...6F.:9.M&^B..
0030: 56 75 1A AB 5C ED 51 32 =A046 A6 = 37 7C 4D F5 D0 D2 : Vu..\.Q2F.7|M...
0040: 1A 3C CB 3C =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: .<.<
[libssh2] 1.378213 Transport:= Looking for packet of type: 99
[libssh2] 1.378220 Transport: Loo= king for packet of type: 100
[libssh2] 1.378918 Transport: Looking for packet of type: 99
[libssh2] 1.378948 Transport: Looking for packet of type: 100
= =3D> libssh2_transport_read() raw (88 bytes)
0000: 4C 67 83 ED= B5 AE AD A7 =A07F 02 6E CF 15 BE EE 7E : Lg........n....~
0010: 65 51 D0 1D 2E C4 5E 0B =A01C F5 60 C2 06 9F F3 60 : eQ....^...`= ....`
0020: 60 0B 02 D9 79 77 77 69 =A046 3C F7 AA 43 61 1E 35 : = `...ywwiF<..Ca.5
0030: D6 46 1A 79 30 D5 00 79 =A0E8 68 BA 87 = 63 7F 55 2C : .F.y0..y.h..c.U,
0040: CE 38 D1 7D C1 83 7F EB =A09A 65 C0 79 76 D8 9E 4A : .8.}.....e.= yv..J
0050: 56 EE C8 06 64 F8 2B BC =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: V...d.+.
=3D> libssh2_transport_read(= ) plain (9 bytes)
0000: 5D 00 00 00 01 00 20 00 =A000 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0: ]..... ..
[libssh2] 1.379028 Transport: Packet type 93 rece= ived, length=3D9
[libssh2] 1.379035 Conn: Window adjust for chann= el 1/0, adding 2097152 bytes, new window_size=3D2097152
=3D> libssh2_transport_read() plain (5 bytes)
0000: 63 00= 00 00 01 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 : c....
[libssh2] 1.379059 Transport: Packet type 99 received= , length=3D5
[libssh2] 1.379066 Transport: Looking for packet of = type: 99
[libssh2] 1.379073 Conn: channel_read() wants 16384 bytes from channel= 1/0 stream #0
[libssh2] 1.381917 Conn: channel_read() wants 1638= 4 bytes from channel 1/0 stream #0
=3D> libssh2_transport_read= () raw (116 bytes)
0000: 5A 92 15 0F 1E 2A FA FF =A06C 80 52 19 A4 55 CC 73 : Z....*..l.R= ..U.s
0010: A2 8C 6D 70 EC BB 30 99 =A0F1 EB 1E A8 C4 B3 78 ED : = ..mp..0.......x.
0020: F0 D8 38 F5 FD CB 1B 70 =A0BC DD BB 32 21 = 59 E0 10 : ..8....p...2!Y..
0030: 7A B2 7B 1D 38 7D 4F 09 =A0F5 72 96 3A 90 42 DF EE : z.{.8}O..r.= :.B..
0040: 5C 37 84 7C A2 EE 75 4C =A083 C9 9F 3B 97 99 2E FE : = \7.|..uL...;....
0050: B6 54 D8 D7 17 6A 33 DA =A0BD B7 F4 19 18 = A6 B2 17 : .T...j3.........
0060: 2E B1 9C B1 05 13 51 D2 =A0FC 4D AB 97 DF 81 24 CB : ......Q..M.= ...$.
0070: F6 10 81 60 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ...`
=3D> libssh2_transpo= rt_read() plain (80 bytes)
0000: 5E 00 00 00 01 00 00 00 =A047 20= 31 30 3A 30 34 3A : ^.......G 10:04:
0010: 30 38 20 75 70 20 35 34 =A020 64 61 79 73 2C 20 31 : 08 up 54 da= ys, 1
0020: 38 3A 34 31 2C 20 20 30 =A020 75 73 65 72 73 2C 20 : = 8:41, =A00 users,=A0
0030: 20 6C 6F 61 64 20 61 76 =A065 72 61 67= 65 3A 20 31 : =A0load average: 1
0040: 2E 38 32 2C 20 31 2E 39 =A031 2C 20 31 2E 39 34 0A : .82, 1.91, = 1.94.
[libssh2] 1.382138 Transport: Packet type 94 received, leng= th=3D80
[libssh2] 1.382144 Conn: 71 bytes packet_add() for 1/0/0<= /div>
[libssh2] 1.382151 Conn: channel_read() got 71 of data from 1/0/0 [ul]=
We read:
=A010:04:08 up 54 days, 18:41, =A00 users, = =A0load average: 1.82, 1.91, 1.94

[libssh2] 1.3825= 46 Conn: channel_read() wants 16384 bytes from channel 1/0 stream #0
=3D> libssh2_transport_read() raw (140 bytes)
0000: EB EA= AB E9 C1 47 F4 61 =A0DB 88 F0 07 38 25 99 E9 : .....G.a....8%..
= 0010: B3 1E C0 4C C3 BB 07 72 =A019 8D 3B DA D4 62 E9 11 : ...L...r..;..b..=
0020: D1 50 6B 8B 07 3B B6 F2 =A07F 4C A3 D1 76 48 0C 5C : .Pk..;...L.= .vH.\
0030: A9 1F CC 78 0E BB C3 24 =A064 C3 84 C4 8B 83 66 DA : = ...x...$d.....f.
0040: 1E EE 9B 53 3A 12 BB 58 =A0DF AB E0 D6 C3 = 02 F1 8A : ...S:..X........
0050: CE 99 90 EA 13 7C DB E6 =A0A8 28 9C EE CF 35 F0 C1 : .....|...(.= ..5..
0060: 11 CA 2A 73 04 21 C0 F6 =A0FE E8 6A 5D D4 71 80 0C : = ..*s.!....j].q..
0070: B2 32 C9 40 05 01 6C 4B =A0B6 92 EE 39 DE = 85 45 DB : .2.@..lK...9..E.
0080: B0 A9 CE F2 43 70 0E 7E =A084 D1 F3 B9 =A0 =A0 =A0 =A0 =A0 =A0 := ....Cp.~....
=3D> libssh2_transport_read() plain (5 bytes)
0000: 60 00 00 00 01 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 : `....
[libssh2] 1.382695 Transport: Pac= ket type 96 received, length=3D5
[libssh2] 1.382701 Conn: EOF received for channel 1/0
=3D>= ; libssh2_transport_read() plain (25 bytes)
0000: 62 00 00 00 01 = 00 00 00 =A00B 65 78 69 74 2D 73 74 : b........exit-st
0010: 61 7= 4 75 73 00 00 00 00 =A000 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: atus= .....
[libssh2] 1.382725 Transport: Packet type 98 received, length=3D25
[libssh2] 1.382730 Conn: Channel 1 received request type exit-status= (wr 0)
[libssh2] 1.382736 Conn: Exit status 0 received for chann= el 1/0
=3D> libssh2_transport_read() plain (5 bytes)
0000: 61 00= 00 00 01 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 : a....
[libssh2] 1.382754 Transport: Packet type 97 received= , length=3D5
[libssh2] 1.382760 Conn: Close received for channel = 1/0
libssh2_channel_read returned 0
[libssh2] 1.382771 Conn: Sen= ding EOF on channel 1/0
=3D> libssh2_transport_write plain (5 = bytes)
0000: 60 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : `....
=3D> libssh2_transport_write send() (36 bytes)
0000: 76 A= F 27 D5 14 82 32 02 =A0B4 EB F4 91 9F A6 0E C9 : v.'...2.........
=
0010: 37 53 CE A4 BE 53 65 05 =A09A 0D B9 2C 6F BC 15 5F : 7S...Se....= ,o.._
0020: C4 00 CB D6 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: ....
[libssh2] 1.382818 Conn: Closing ch= annel 1/0
=3D> libssh2_transport_write plain (5 bytes)
0000: 61 00 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 : a....
=3D> libssh2_transport_write send() (36 bytes)
0000: 5D A= A 85 0F 1D 0D 57 53 =A0E3 0E 50 82 A0 7E 77 AA : ].....WS..P..~w.
0010: 1B 55 A4 5C 93 DC 1B 85 =A008 F8 7F 1E 0D 52 FD F6 : .U.\.........R.= .
0020: 17 00 81 33 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0: ...3
[libssh2] 1.382859 Conn: Awaiting c= lose of channel 1/0

EXIT: 0 bytecount: 71
[libssh2] 1.382873 Conn: Freeing channel 1/0 resources
[libssh2] 1.382879 Transport: Looking for packet of type: 94
[libssh2] 1.382887 Transport: Looking for packet of type: 95
[li= bssh2] 1.382894 Transport: Disconnecting: reason=3D11, desc=3DNormal Shutdo= wn, Thank you for playing, lang=3D
=3D> libssh2_transport_write plain (51 bytes)
0000: 01 00= 00 00 0B 00 00 00 =A026 4E 6F 72 6D 61 6C 20 : ........&Normal=A0
0010: 53 68 75 74 64 6F 77 6E =A02C 20 54 68 61 6E 6B 20 : Shutdown, = Thank=A0
0020: 79 6F 75 20 66 6F 72 20 =A070 6C 61 79 69 6E 67 00 : you for pla= ying.
0030: 00 00 00 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 : ...
=3D> libssh2_transpo= rt_write plain2 (0 bytes)
=3D> libssh2_transport_write send() = (84 bytes)
0000: C4 24 06 84 46 70 3C E8 =A005 77 8D EA 05 D9 6B 77 : .$..Fp<.= .w....kw
0010: A1 71 E2 34 8A F1 E3 46 =A0CB 92 55 9D CC C9 F5 4E= : .q.4...F..U....N
0020: F4 25 61 35 72 C6 0A B7 =A0E5 A6 B5 1D = CE 3C 24 0F : .%a5r........<$.
0030: 9F B2 54 01 3C 43 32 F0 =A016 60 E3 0B A9 94 31 15 : ..T.<C2.= .`....1.
0040: E8 DE 49 9C 88 F4 BF 5D =A050 4A 39 85 36 A8 5B 83= : ..I....]PJ9.6.[.
0050: E7 B6 46 41 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: ..FA
[libssh2] 1.382969 Transport: Freeing session resource
[libs= sh2] 1.382981 Transport: Extra packets left 0
all done


=A0

> It looks to me like the GC step needs to complete before another
> channel can be requested.

Yes.


> I am not familiar with the ssh protocol but should libssh2 be
> waiting for this step to complete before
> libssh2_channel_wait_closed() returns?

The garbage collection is an implementation detail of OpenSSH, it
has nothing to do with the protocol.

I = assumed that this was the case but wasn't sure
=A0

libssh2 trace output will show the actual protocol exchange details,
which will help say if OpenSSH is misbehaving or not.

I suspect MaxSessions 1 has not been tested a great deal and I do
think that it is OpenSSH at fault here, but let's look at the trace
to make sure before you post there.
=A0

//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/li= bssh2-devel

--047d7b15aa5b8686ac04caffee4e-- --===============0599684736== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============0599684736==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 19:17:34 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91HH4Mk010152; Mon, 1 Oct 2012 19:17:28 +0200 Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91HH2ZC010124 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 1 Oct 2012 19:17:03 +0200 Received: from compute2.internal (compute2.nyi.mail.srv.osa [10.202.2.42]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id C99972095E for ; Mon, 1 Oct 2012 13:17:01 -0400 (EDT) Received: from frontend2.nyi.mail.srv.osa ([10.202.2.161]) by compute2.internal (MEProxy); Mon, 01 Oct 2012 13:17:01 -0400 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=castaglia.org; h= date:from:to:subject:in-reply-to:message-id:references :mime-version:content-type; s=mesmtp; bh=jz5/70N1RhBCYXBfeWKf2k+ rpPU=; b=f5fsWp/0zJbG5SSBNy/xfYoBTnPrqTbjQDVk8YRP73kQ0l8aUP2iDJH YA1dnZtL732BRfm80dPu+asd+4uTpKOifqI3ldf9i4a4xImqmX1ySC4e3nbXy3sF zBgQvSiraNIWomyEfTiSJOQhC2OcKZAVnRkhjkWCMp7xdyNWSiCw= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:subject:in-reply-to :message-id:references:mime-version:content-type; s=smtpout; bh= jz5/70N1RhBCYXBfeWKf2k+rpPU=; b=IPIyyKShFlsMGqTYuQ3KiPZrFuel5QJj nafLVx/kFVue/r6nAGLpDtcUJ2lJGUrD45OWUTF0+Zht6gYu+16mTErhHkET4ef9 BTsD3s3bVJDt91AxZp7xi7VyTRMCJfGh3XLOrhFMpy/3J9wKVvC5rZy7tl7UFkoT 8HSmDnRw0fA= X-Sasl-enc: 8caKf+ARwX98XxxjWun14SEyaCFXkMKfa30k9fOxerQB 1349111821 Received: from familiar.local (unknown [64.71.23.251]) by mail.messagingengine.com (Postfix) with ESMTPA id 64FB0482525 for ; Mon, 1 Oct 2012 13:17:01 -0400 (EDT) Date: Mon, 1 Oct 2012 10:17:00 -0700 (PDT) From: TJ Saunders To: libssh2 development Subject: Re: ProFTPD SFTP connection problem In-Reply-To: Message-ID: References: User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" > I am using a libssh2 based client to connect to a ProFTPD with mod_sftp > (0.9.7). I have teseted it with different versions of the library (1.3.0 > and 1.4.2). I alwasy got the following errors (at the end of this post). When I run libssh2-1.4.2's test clients against proftpd+mod_sftp, it works properly. These tests were done on a Linux 2.6.28 i686 machine. What OS/platform are you using to compile/run the libssh2 code? > Aug 20 09:09:36 [23657] : SSH2 packet len = 2751686127 bytes This packet length, as generated by libssh2, appears to be the issue. We will need to determine how/why libssh2 would ever generate an SSH2 packet with such a length. TJ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Desire does not necessitate obligation. -TJ Saunders ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 1 20:01:49 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91I1iNE010051; Mon, 1 Oct 2012 20:01:47 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q91I1gfT010037 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 1 Oct 2012 20:01:42 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q91I1gPe010032 for ; Mon, 1 Oct 2012 20:01:42 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Mon, 1 Oct 2012 20:01:42 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: ProFTPD SFTP connection problem In-Reply-To: Message-ID: References: User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Mon, 1 Oct 2012, TJ Saunders wrote: >> Aug 20 09:09:36 [23657] : SSH2 packet len = 2751686127 bytes > > This packet length, as generated by libssh2, appears to be the issue. We > will need to determine how/why libssh2 would ever generate an SSH2 packet > with such a length. Quite possibly the packet isn't that big but the length field is "just" wrongly saying so... But yes, that seems to be at least "a" problem if not "the" problem. -- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 3 17:43:16 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q93FglXZ026457; Wed, 3 Oct 2012 17:43:10 +0200 Received: from mail-ie0-f182.google.com (mail-ie0-f182.google.com [209.85.223.182]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q93FgiNo026264 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Wed, 3 Oct 2012 17:42:45 +0200 Received: by ieak10 with SMTP id k10so17954009iea.41 for ; Wed, 03 Oct 2012 08:42:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=ylF4a1De4ZfIqCj4x0ALFI+QxkbmE57vT4tIsfM+cwk=; b=m8F6e6lCQJHuf5jvqHHdI1RDYLp3JIU884VocAlc5zI2BPJps1ouMkn1sJagr+DdVa 5mXBCXlJbVTkG4Jbk1c1AfVWWd0QJJeqEcai6KdGSWljbVUgbv7TYV2ttIr2n/i2HfjE Mf3C6t1G2TRvv3d65ke76QCVHtLm2lJa41Q69NcsVm557Kns6laKrSaSvMyCibmrsY54 idn0QQYbV3VkWrPKyfKyvh3+e8QisEzycq5eZzKl0nEQDVwenhbbTSSvW4ZpbyU5vlhY Rg+IIQc9LSMVztfyosIMYNgNsvZFezYoNrV5zDv6njjA5rVbVkUPJP0OQqBl5bw+xcfj C+7g== MIME-Version: 1.0 Received: by 10.43.97.8 with SMTP id ci8mr1891748icc.28.1349278959538; Wed, 03 Oct 2012 08:42:39 -0700 (PDT) Received: by 10.43.48.8 with HTTP; Wed, 3 Oct 2012 08:42:39 -0700 (PDT) Date: Wed, 3 Oct 2012 08:42:39 -0700 Message-ID: Subject: Issue in reading message sent from remote process From: Narayani To: libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0839923941==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============0839923941== Content-Type: multipart/alternative; boundary=bcaec517ce7616113304cb297d12 --bcaec517ce7616113304cb297d12 Content-Type: text/plain; charset=ISO-8859-1 Hi I am facing an issue while using libssh2. I used libssh2 channel write to write data to a remote node. But I am not sure how to access this data in the remote node. I tried using 'read' (not libssh2 read) from stdout but it does not work. Please refer source code below. main.cpp is running in master node and it sends data to MProcess.cpp which runs in remote node. I am trying to read this data in MProcess.cpp using 'read' from stdout, but it doesnt work. Please take a look, and let me know /*********main.cpp**********/ #include #include "MNode.h" using namespace std; int sock; LIBSSH2_SESSION *session; const char *keyfile1="~/.ssh/id_rsa.pub"; const char *keyfile2="~/.ssh/id_rsa"; const char *username="username"; const char *password="password"; static void kbd_callback(const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract) { (void)name; (void)name_len; (void)instruction; (void)instruction_len; if (num_prompts == 1) { responses[0].text = strdup(password); responses[0].length = strlen(password); } (void)prompts; (void)abstract; } /* kbd_callback */ static int waitsocket(int socket_fd, LIBSSH2_SESSION *session) { struct timeval timeout; int rc; fd_set fd; fd_set *writefd = NULL; fd_set *readfd = NULL; int dir; timeout.tv_sec = 10; timeout.tv_usec = 0; FD_ZERO(&fd); FD_SET(socket_fd, &fd); /* now make sure we wait in the correct direction */ dir = libssh2_session_block_directions(session); if(dir & LIBSSH2_SESSION_BLOCK_INBOUND) readfd = &fd; if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) writefd = &fd; rc = select(socket_fd + 1, readfd, writefd, NULL, &timeout); return rc; } LIBSSH2_CHANNEL * LaunchRemoteProcess(char *cmd){ const char *hostname = "127.0.0.1"; const char *commandline = "uptime"; const char *username = "user"; const char *password = "password"; /**************************/ unsigned long hostaddr; int rc, i, auth_pw = 0; struct sockaddr_in sin; const char *fingerprint; char *userauthlist; //LIBSSH2_SESSION *session; LIBSSH2_CHANNEL *channel; #ifdef WIN32 WSADATA wsadata; WSAStartup(MAKEWORD(2,0), &wsadata); #endif /*if (argc > 1) { hostaddr = inet_addr(argv[1]); } else { hostaddr = htonl(0x7F000001); }*/ hostaddr = inet_addr("69.91.198.171"); //if(argc > 2) { username = "user"; //} //if(argc > 3) { password = "password"; //} rc = libssh2_init (0); if (rc != 0) { fprintf (stderr, "libssh2 initialization failed (%d)\n", rc); //return 1; } /* Ultra basic "connect to port 22 on localhost". Your code is * responsible for creating the socket establishing the connection */ sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_family = AF_INET; sin.sin_port = htons(22); sin.sin_addr.s_addr = hostaddr; if (connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)) != 0) { fprintf(stderr, "failed to connect!\n"); // return -1; } /* Create a session instance and start it up. This will trade welcome * banners, exchange keys, and setup crypto, compression, and MAC layers */ session = libssh2_session_init(); if (libssh2_session_handshake(session, sock)) { fprintf(stderr, "Failure establishing SSH session\n"); // return -1; } /* At this point we havn't authenticated. The first thing to do is check * the hostkey's fingerprint against our known hosts Your app may have it * hard coded, may go to a file, may present it to the user, that's your * call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); printf("Fingerprint: "); for(i = 0; i < 20; i++) { printf("%02X ", (unsigned char)fingerprint[i]); } printf("\n"); /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); printf("Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password") != NULL) { auth_pw |= 1; } if (strstr(userauthlist, "keyboard-interactive") != NULL) { auth_pw |= 2; } if (strstr(userauthlist, "publickey") != NULL) { auth_pw |= 4; } /* if we got an 4. argument we set this option if supported */ /* if(argc > 4) { if ((auth_pw & 1) && !strcasecmp(argv[4], "-p")) { auth_pw = 1; } if ((auth_pw & 2) && !strcasecmp(argv[4], "-i")) { auth_pw = 2; } if ((auth_pw & 4) && !strcasecmp(argv[4], "-k")) { auth_pw = 4; } }*/ if (auth_pw & 1) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { printf("\tAuthentication by password failed!\n"); //goto shutdown; } else { printf("\tAuthentication by password succeeded.\n"); } } else if (auth_pw & 2) { /* Or via keyboard-interactive */ if (libssh2_userauth_keyboard_interactive(session, username, &kbd_callback) ) { printf("\tAuthentication by keyboard-interactive failed!\n"); //goto shutdown; } else { printf("\tAuthentication by keyboard-interactive succeeded.\n"); } } else if (auth_pw & 4) { /* Or by public key */ if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) { printf("\tAuthentication by public key failed!\n"); //goto shutdown; } else { printf("\tAuthentication by public key succeeded.\n"); } } else { printf("No supported authentication methods found!\n"); //goto shutdown; } /* Request a shell */ if (!(channel = libssh2_channel_open_session(session))) { fprintf(stderr, "Unable to open a session\n"); //goto shutdown; } /* Some environment variables may be set, * It's up to the server which ones it'll allow though */ libssh2_channel_setenv(channel, "FOO", "bar"); /* Request a terminal with 'vanilla' terminal emulation * See /etc/termcap for more options */ if (libssh2_channel_request_pty(channel, "vanilla")) { fprintf(stderr, "Failed requesting pty\n"); //goto skip_shell; } /* Open a SHELL on that pty */ if (libssh2_channel_shell(channel)) { fprintf(stderr, "Unable to request shell on allocated pty\n"); //goto shutdown; } /***********/ return channel; } int main(){ MNode *m = new MNode; LIBSSH2_CHANNEL *channel; int bytecount = 0; int rc; printf("main"); //channel = E char *cmd= "Mprocess"; //cout<<"Into remote proc exec"channel = channel; if (m->channel == NULL) { fprintf(stderr, "No channel"); //goto shutdown; } printf("starting exec\n"); while( (channel = libssh2_channel_open_session(session)) == NULL && libssh2_session_last_error(session,NULL,NULL,0) == LIBSSH2_ERROR_EAGAIN ) { waitsocket(sock, session); } if( channel == NULL ) { fprintf(stderr,"Error\n"); exit( 1 ); } while( (rc = libssh2_channel_exec(channel, cmd)) == LIBSSH2_ERROR_EAGAIN ) { waitsocket(sock, session); } if( rc != 0 ) { fprintf(stderr,"Error\n"); exit( 1 ); } printf( "Mprocess launched and now will send a message\n" ); m->sendMessage(); //channel = LaunchRemoteProcess(cmd); /**************/ for( ;; ) { /* loop until we block */ int rc; do { char buffer[0x4000]; rc = libssh2_channel_read( channel, buffer, sizeof(buffer) ); if( rc > 0 ) { int i; bytecount += rc; fprintf(stderr, "We read:\n"); for( i=0; i < rc; ++i ) fputc( buffer[i], stderr); fprintf(stderr, "\n"); } else { if( rc != LIBSSH2_ERROR_EAGAIN ) /* no need to output this for the EAGAIN case */ fprintf(stderr, "libssh2_channel_read returned %d\n", rc); } } while( rc > 0 ); /* this is due to blocking that would occur otherwise so we loop on this condition */ if( rc == LIBSSH2_ERROR_EAGAIN ) { printf("Waiting for message \n"); waitsocket(sock, session); } else break; } return 0; } /*****************************************************************************************************************************************/ /***************MNode.h*******************/ #include "libssh2_config.h" #include #ifdef HAVE_WINSOCK2_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif #ifdef HAVE_NETINET_IN_H # include #endif #ifdef HAVE_SYS_SELECT_H # include #endif # ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_ARPA_INET_H # include #endif #include #include #include #include #include #include #include //#define BUFSIZE 32000 #define BUFSIZE 320 class MNode { //private: //string hostName; //int pid; //LIBSSH2_CHANNEL *channel; public : LIBSSH2_CHANNEL *channel; void sendMessage(){ // int bufsize = BUFSIZE; int i; char buffer[BUFSIZE]; for (i = 0; i < BUFSIZE; i++) buffer[i] = 'A'; printf("Into lib write \n"); if (channel == NULL) { fprintf(stderr, "No mNode channel"); //goto shutdown; } int n = libssh2_channel_write_ex(channel, 0, buffer, sizeof(buffer)); libssh2_channel_flush_ex( channel, 0 ); printf("%d \n",n); } void receiveMessage(){ } }; /**********************************************************************************************************************************/ /**********MProcess.cpp**************/ /*#include #include using namespace std; int main(){ std::string s; printf("Into remote proc exec"); while(true) { getline( cin, s ); fprintf(stderr,"%s",s.c_str()); break; // flag=false; } //write(1,buffer,sizeof(buffer)); // printf("test Nani"); return 0; } */ #include #include #include #include #include using namespace std; int main() { char s[320]; printf("Into remote proc exec\n"); bzero(s,320); printf("message\n"); fflush( stdout ); read( 0, s, 20 ); printf( "read 20 bytes\n" ); fflush( stdout ); return 0; } --bcaec517ce7616113304cb297d12 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Hi

I am facing an issue while using libssh2. I used libssh2 channe= l write
to write data to a remote node. But I am not sure how to access = this data
in the remote node. I tried using 'read' (not libssh2 = read) from stdout
but it does not work.

Please refer source code below. main.cpp is run= ning in master node and it
sends data to MProcess.cpp which runs in rem= ote node. I am trying to read
this data in MProcess.cpp using 'read= ' from stdout, but it doesnt work.

Please take a look, and let me know


/*********main.cpp********= **/

#include<iostream>
#include "MNode.h"

us= ing namespace std;


int sock;
LIBSSH2_SESSION *session;

const char *keyfile1=3D"~/.ssh/id_rsa.pub";
const char *key= file2=3D"~/.ssh/id_rsa";
const char *username=3D"username= ";
const char *password=3D"password";


static vo= id kbd_callback(const char *name, int name_len,
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 co= nst char *instruction, int instruction_len,
=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 int num_prompts,
=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 const LIBSS= H2_USERAUTH_KBDINT_PROMPT *prompts,
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 LIBSSH2_USERAUTH_KBDINT_RESPONSE *resp= onses,
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 vo= id **abstract)
{
=A0=A0=A0 (void)name;
=A0=A0=A0 (void)name_len;=A0=A0=A0 (void)instruction;
=A0=A0=A0 (void)instruction_len;
=A0= =A0=A0 if (num_prompts =3D=3D 1) {
=A0=A0=A0=A0=A0=A0=A0 responses[0].te= xt =3D strdup(password);
=A0=A0=A0=A0=A0=A0=A0 responses[0].length =3D strlen(password);
=A0=A0= =A0 }
=A0=A0=A0 (void)prompts;
=A0=A0=A0 (void)abstract;
} /* kbd_= callback */

static int waitsocket(int socket_fd, LIBSSH2_SESSION *ses= sion)
{
=A0=A0=A0 struct timeval timeout;
=A0=A0=A0 int rc;
=A0=A0=A0 fd_set fd;
=A0=A0=A0 fd_set *writefd =3D = NULL;
=A0=A0=A0 fd_set *readfd =3D NULL;
=A0=A0=A0 int dir;

=A0= =A0=A0 timeout.tv_sec =3D 10;
=A0=A0=A0 timeout.tv_usec =3D 0;

=A0= =A0=A0 FD_ZERO(&fd);

=A0=A0=A0 FD_SET(socket_fd, &fd);

=A0=A0=A0 /* now make sure we wait in the correct direction */
=A0=A0= =A0 dir =3D libssh2_session_block_directions(session);

=A0=A0=A0 if(d= ir & LIBSSH2_SESSION_BLOCK_INBOUND)
=A0=A0=A0=A0=A0=A0=A0 readfd =3D= &fd;

=A0=A0=A0 if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND)
=A0=A0=A0=A0=A0=A0=A0 writefd =3D &fd;

=A0=A0=A0 rc =3D select(so= cket_fd + 1, readfd, writefd, NULL, &timeout);

=A0=A0=A0 return r= c;
}


LIBSSH2_CHANNEL * LaunchRemoteProcess(char *cmd){
=A0= =A0 const char *hostname =3D "127.0.0.1";
=A0=A0 const char *commandline =3D "uptime";
=A0=A0 const char= *username=A0=A0=A0 =3D "user";
=A0=A0 const char *password=A0= =A0=A0 =3D "password";

=A0=A0=A0=A0 /**********************= ****/
=A0=A0=A0 unsigned long hostaddr;
=A0=A0=A0 int rc, i, auth_pw =3D 0;
=A0=A0=A0 struct sockaddr_in sin;=A0=A0=A0 const char *fingerprint;
=A0=A0=A0 char *userauthlist;
=A0= =A0=A0 //LIBSSH2_SESSION *session;
=A0=A0=A0 LIBSSH2_CHANNEL *channel;#ifdef WIN32
=A0=A0=A0 WSADATA wsadata;

=A0=A0=A0 WSAStartup(MAKEWORD(2,0), &wsadata);
#endif

=A0= =A0=A0 /*if (argc > 1) {
=A0=A0=A0=A0=A0=A0=A0 hostaddr =3D inet_addr= (argv[1]);
=A0=A0=A0 } else {
=A0=A0=A0=A0=A0=A0=A0 hostaddr =3D hton= l(0x7F000001);
=A0=A0=A0 }*/
=A0=A0=A0 hostaddr =3D inet_addr("6= 9.91.198.171");

=A0=A0=A0 //if(argc > 2) {
=A0=A0=A0=A0=A0=A0=A0 username =3D &quo= t;user";
=A0=A0=A0 //}
=A0=A0=A0 //if(argc > 3) {
=A0=A0= =A0=A0=A0=A0=A0 password =3D "password";
=A0=A0=A0 //}

= =A0=A0=A0 rc =3D libssh2_init (0);

=A0=A0=A0 if (rc !=3D 0) {
=A0=A0=A0=A0=A0=A0=A0 fprintf (stderr, "libssh2 initialization failed = (%d)\n", rc);
=A0=A0=A0=A0=A0=A0=A0 //return 1;
=A0=A0=A0 }

<= p>=A0=A0=A0 /* Ultra basic "connect to port 22 on localhost".=A0 = Your code is
=A0=A0=A0=A0 * responsible for creating the socket establis= hing the connection
=A0=A0=A0=A0 */
=A0=A0=A0 sock =3D socket(AF_INET, SOCK_STREAM, 0);

<= p>=A0=A0=A0 sin.sin_family =3D AF_INET;
=A0=A0=A0 sin.sin_port =3D htons= (22);
=A0=A0=A0 sin.sin_addr.s_addr =3D hostaddr;
=A0=A0=A0 if (conne= ct(sock, (struct sockaddr*)(&sin),
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 sizeof(struct sockaddr_in)) != =3D 0) {
=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "failed to connect!\= n");
=A0=A0=A0=A0=A0=A0 // return -1;
=A0=A0=A0 }

=A0=A0= =A0 /* Create a session instance and start it up. This will trade welcome =A0=A0=A0=A0 * banners, exchange keys, and setup crypto, compression, and M= AC layers
=A0=A0=A0=A0 */
=A0=A0=A0 session =3D libssh2_session_init(= );

=A0=A0=A0 if (libssh2_session_handshake(session, sock)) {

= =A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "Failure establishing SSH sessio= n\n");
=A0=A0=A0=A0=A0=A0 // return -1;
=A0=A0=A0 }

=A0=A0=A0 /* At this = point we havn't authenticated. The first thing to do is check
=A0=A0= =A0=A0 * the hostkey's fingerprint against our known hosts Your app may= have it
=A0=A0=A0=A0 * hard coded, may go to a file, may present it to = the user, that's your
=A0=A0=A0=A0 * call
=A0=A0=A0=A0 */
=A0=A0=A0 fingerprint =3D libssh2= _hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);

=A0=A0=A0 printf(&= quot;Fingerprint: ");
=A0=A0=A0 for(i =3D 0; i < 20; i++) {
= =A0=A0=A0=A0=A0=A0=A0 printf("%02X ", (unsigned char)fingerprint[= i]);
=A0=A0=A0 }
=A0=A0=A0 printf("\n");

=A0=A0=A0 /* check w= hat authentication methods are available */
=A0=A0=A0 userauthlist =3D l= ibssh2_userauth_list(session, username, strlen(username));

=A0=A0=A0 = printf("Authentication methods: %s\n", userauthlist);
=A0=A0=A0 if (strstr(userauthlist, "password") !=3D NULL) {
= =A0=A0=A0=A0=A0=A0=A0 auth_pw |=3D 1;
=A0=A0=A0 }
=A0=A0=A0 if (strst= r(userauthlist, "keyboard-interactive") !=3D NULL) {
=A0=A0=A0= =A0=A0=A0=A0 auth_pw |=3D 2;
=A0=A0=A0 }
=A0=A0=A0 if (strstr(useraut= hlist, "publickey") !=3D NULL) {
=A0=A0=A0=A0=A0=A0=A0 auth_pw |=3D 4;
=A0=A0=A0 }

=A0=A0=A0 /* if = we got an 4. argument we set this option if supported */
=A0 /*=A0 if(ar= gc > 4) {
=A0=A0=A0=A0=A0=A0=A0 if ((auth_pw & 1) && !str= casecmp(argv[4], "-p")) {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 au= th_pw =3D 1;
=A0=A0=A0=A0=A0=A0=A0 }
=A0=A0=A0=A0=A0=A0=A0 if ((auth_pw & 2) &= ;& !strcasecmp(argv[4], "-i")) {
=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 auth_pw =3D 2;
=A0=A0=A0=A0=A0=A0=A0 }
=A0=A0=A0=A0=A0=A0= =A0 if ((auth_pw & 4) && !strcasecmp(argv[4], "-k")) = {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 auth_pw =3D 4;
=A0=A0=A0=A0=A0=A0=A0 }=
=A0=A0=A0 }*/

=A0=A0=A0 if (auth_pw & 1) {
=A0=A0=A0=A0=A0= =A0=A0 /* We could authenticate via password */
=A0=A0=A0=A0=A0=A0=A0 if= (libssh2_userauth_password(session, username, password)) {

=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 printf("\tAuthentication by password failed!\= n");
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0=A0=A0=A0=A0= } else {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 printf("\tAuthenticatio= n by password succeeded.\n");
=A0=A0=A0=A0=A0=A0=A0 }
=A0=A0=A0 = } else if (auth_pw & 2) {
=A0=A0=A0=A0=A0=A0=A0 /* Or via keyboard-i= nteractive */
=A0=A0=A0=A0=A0=A0=A0 if (libssh2_userauth_keyboard_interactive(session, us= ername,

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 &kbd_callback) ) {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 pr= intf("\tAuthentication by keyboard-interactive failed!\n");
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0=A0=A0=A0=A0= } else {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 printf("\tAuthenticatio= n by keyboard-interactive succeeded.\n");
=A0=A0=A0=A0=A0=A0=A0 }=A0=A0=A0 } else if (auth_pw & 4) {
=A0=A0=A0=A0=A0=A0=A0 /* Or by= public key */
=A0=A0=A0=A0=A0=A0=A0 if (libssh2_userauth_publickey_fromfile(session, user= name, keyfile1,

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 keyfile2, password)) {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= printf("\tAuthentication by public key failed!\n");
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0=A0=A0=A0=A0= } else {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 printf("\tAuthenticatio= n by public key succeeded.\n");
=A0=A0=A0=A0=A0=A0=A0 }
=A0=A0= =A0 } else {
=A0=A0=A0=A0=A0=A0=A0 printf("No supported authenticat= ion methods found!\n");
=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0 }

=A0=A0=A0 /* Re= quest a shell */
=A0=A0=A0 if (!(channel =3D libssh2_channel_open_sessio= n(session))) {

=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "Unable to = open a session\n");
=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0 }

=A0=A0=A0 /* Some environment variables may be set,
= =A0=A0=A0=A0 * It's up to the server which ones it'll allow though<= br>=A0=A0=A0=A0 */
=A0=A0=A0 libssh2_channel_setenv(channel, "FOO&q= uot;, "bar");


=A0=A0=A0 /* Request a terminal with 'vanilla' terminal emulation=A0=A0=A0=A0 * See /etc/termcap for more options
=A0=A0=A0=A0 */
= =A0=A0=A0 if (libssh2_channel_request_pty(channel, "vanilla")) {<= /p>

=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "Failed requesting pty\n&q= uot;);
=A0=A0=A0=A0=A0=A0=A0 //goto skip_shell;
=A0=A0=A0 }

=A0=A0=A0 /* = Open a SHELL on that pty */
=A0=A0=A0 if (libssh2_channel_shell(channel)= ) {

=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "Unable to request she= ll on allocated pty\n");
=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0 }
=A0=A0=A0=A0=A0=A0=A0 /***********/
=A0=A0 return channel= ;
}


int main(){

=A0MNode *m =3D new MNode;
=A0LIBSSH2= _CHANNEL *channel;
=A0int bytecount =3D 0;
=A0int rc;
=A0printf(&q= uot;main");
=A0//channel =3D E
=A0char=A0 *cmd=3D "Mprocess";
=A0//cout<<"Into rem= ote proc exec"<endl;
=A0channel =3D LaunchRemoteProcess(cmd);=A0if (channel =3D=3D NULL) {

=A0=A0=A0=A0=A0=A0=A0=A0 fprintf(stder= r, "No channel");
=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0 }
=A0//cout<&l= t;"exec done"<<endl;
=A0printf("exec done\n");=
=A0
=A0m->channel =3D channel;
=A0
=A0if (m->channel =3D= =3D NULL) {

=A0=A0=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "No chan= nel");
=A0=A0=A0=A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0 }

=A0=A0=A0= printf("starting exec\n");
=A0=A0=A0 while( (channel =3D libs= sh2_channel_open_session(session)) =3D=3D NULL &&
=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0 libssh2_session_last_error(session,NULL,NULL,0) =3D= =3D
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 LIBSSH2_ERROR_EAGAIN )
=A0=A0=A0=A0 {<= br>=A0=A0=A0=A0=A0=A0=A0=A0 waitsocket(sock, session);
=A0=A0=A0=A0 }=A0=A0=A0=A0 if( channel =3D=3D NULL )
=A0=A0=A0=A0 {
=A0=A0=A0=A0= =A0=A0=A0=A0 fprintf(stderr,"Error\n");
=A0=A0=A0=A0=A0=A0=A0= =A0 exit( 1 );
=A0=A0=A0=A0 }
=A0=A0=A0=A0 while( (rc =3D libssh2_cha= nnel_exec(channel, cmd)) =3D=3D
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 LIBSSH2_ERROR_EAGAIN )
=A0=A0=A0=A0 {<= br>=A0=A0=A0=A0=A0=A0=A0=A0 waitsocket(sock, session);
=A0=A0=A0=A0 }=A0=A0=A0=A0 if( rc !=3D 0 )
=A0=A0=A0=A0 {
=A0=A0=A0=A0=A0=A0=A0=A0= fprintf(stderr,"Error\n");
=A0=A0=A0=A0=A0=A0=A0=A0 exit( 1 )= ;
=A0=A0=A0 }
=A0=A0=A0=A0 printf( "Mprocess launched and now wi= ll send a message\n" );
=A0=A0=A0=A0
=A0m->sendMessage();
=A0
=A0=A0=A0 //channel =3D = LaunchRemoteProcess(cmd);
=A0=A0=A0 /**************/
=A0=A0=A0=A0=A0= =A0=A0 for( ;; )
=A0=A0=A0=A0 {
=A0=A0=A0=A0=A0=A0=A0=A0 /* loop unti= l we block */
=A0=A0=A0=A0=A0=A0=A0=A0 int rc;
=A0=A0=A0=A0=A0=A0=A0= =A0 do
=A0=A0=A0=A0=A0=A0=A0=A0 {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 char buffer[0x4000];
=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 rc =3D libssh2_channel_read( channel, buffer, size= of(buffer) );
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if( rc > 0 )
= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 int i;
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 = bytecount +=3D rc;
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fprintf(stderr, "We r= ead:\n");
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 for( i= =3D0; i < rc; ++i )
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 fputc( buffer[i], stderr);
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 fprintf(stderr, "\n");
=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 }
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else {
=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0 if( rc !=3D LIBSSH2_ERROR_EAGAIN )
=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* no need to output this for= the EAGAIN case */
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 fprintf(stderr, "libssh2_channel_read returned %d\n", r= c);
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }
=A0=A0=A0=A0=A0=A0=A0=A0 }
=A0= =A0=A0=A0=A0=A0=A0=A0 while( rc > 0 );

=A0=A0=A0=A0=A0=A0=A0=A0 /*= this is due to blocking that would occur otherwise so we loop on
=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 this condition */
=A0=A0=A0=A0=A0=A0=A0=A0 i= f( rc =3D=3D LIBSSH2_ERROR_EAGAIN )
=A0=A0=A0=A0=A0=A0=A0=A0 {=A0=A0
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 printf("Waiting for message \n");
=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 waitsocket(sock, session);
=A0=A0=A0=A0=A0=A0=A0=A0 }=
=A0=A0=A0=A0=A0=A0=A0=A0 else
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 b= reak;
=A0=A0=A0 }

=A0return 0;

}


/****************= ***************************************************************************= **********************************************/

=A0

/***************MNode.h*******************/

#include &qu= ot;libssh2_config.h"
#include <libssh2.h>

#ifdef HAVE_W= INSOCK2_H
# include <winsock2.h>
#endif
#ifdef HAVE_SYS_SOCK= ET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# i= nclude <netinet/in.h>
#endif
#ifdef HAVE_SYS_SELECT_H
# incl= ude <sys/select.h>
#endif
# ifdef HAVE_UNISTD_H
#include <= ;unistd.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endi= f

#include <sys/time.h>
#include <sys/types.h>
#inc= lude <stdlib.h>
#include <fcntl.h>
#include <errno.h&g= t;
#include <stdio.h>
#include <ctype.h>

//#define BUFSIZ= E 32000
#define BUFSIZE 320

class MNode
{
=A0//private:
= =A0//string hostName;
=A0//int pid;

=A0//LIBSSH2_CHANNEL *channel;=
=A0public :
=A0LIBSSH2_CHANNEL *channel;
=A0void sendMessage(){
=A0=A0 // int buf= size =3D BUFSIZE;
=A0=A0int i;
=A0=A0=A0=A0=A0=A0=A0 char buffer[BUFS= IZE];
=A0=A0=A0=A0=A0=A0=A0 for (i =3D 0; i < BUFSIZE; i++)
=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 buffer[i] =3D 'A';
=A0=A0=A0=A0=A0= =A0=A0 printf("Into lib write \n");
=A0=A0=A0=A0=A0=A0=A0 if (channel =3D=3D NULL) {

=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 fprintf(stderr, "No mNode channel");
=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 //goto shutdown;
=A0=A0=A0 }
=A0=A0=A0=A0=A0=A0=A0= int n =3D libssh2_channel_write_ex(channel, 0, buffer, sizeof(buffer));=A0libssh2_channel_flush_ex( channel, 0 );
=A0=A0=A0=A0=A0=A0=A0 printf("%d \n",n);

=A0}
=A0void re= ceiveMessage(){
=A0}

};
/**************************************= ***************************************************************************= *****************/


/**********MProcess.cpp**************/

/*#include<iostream&= gt;
#include<string.h>
using namespace std;
int main(){
= =A0 std::string s;
printf("Into remote proc exec");

=A0w= hile(true) {
=A0=A0getline( cin, s );

=A0=A0=A0=A0 fprintf(stderr,"%s",s= .c_str());
=A0=A0=A0=A0 break;
=A0=A0=A0 // flag=3Dfalse;
=A0 }=A0 //write(1,buffer,sizeof(buffer));
=A0=A0 // printf("test Nani&= quot;);
=A0return 0;
}
*/

#include <stdlib.h>
#include <stdio.h>
#include <un= istd.h>
#include<string>
#include<iostream>
using n= amespace std;
int main()
{
=A0 char s[320];
=A0 printf("In= to remote proc exec\n");
=A0 bzero(s,320);
=A0=A0=A0 printf("message\n");
=A0=A0=A0 = fflush( stdout );=A0=A0
=A0=A0=A0 read( 0, s, 20 );
=A0=A0=A0 printf= ( "read 20 bytes\n" );
=A0=A0=A0 fflush( stdout );
=A0=A0= =A0 return 0;
}

--bcaec517ce7616113304cb297d12-- --===============0839923941== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============0839923941==-- From libssh2-devel-bounces@cool.haxx.se Thu Oct 4 00:02:54 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q93M2ODA023977; Thu, 4 Oct 2012 00:02:48 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q93M2KbE023913 for ; Thu, 4 Oct 2012 00:02:20 +0200 Received: (qmail 5622 invoked by uid 501); 3 Oct 2012 22:02:21 -0000 Message-ID: <20121003220221.5621.qmail@stuge.se> Date: Thu, 4 Oct 2012 00:02:20 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: Issue in reading message sent from remote process Mail-Followup-To: libssh2-devel@cool.haxx.se References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Narayani wrote: > I am facing an issue while using libssh2. Actually I disagree. Your issue is with designing a remote process communication protocol which runs on top of SSH. This has absolutely nothing to do with libssh2. > I am not sure how to access this data in the remote node. That depends on how you design your remote process communication protocol which runs on top of SSH. How you do that is entirely up to you, the SSH protocol and thus libssh2 only offers you a secure 8-bit clean transport, nothing else. > I tried using 'read' (not libssh2 read) from stdout Yes, your remote process communication protocol will likely make use of stdin, stdout and perhaps also stderr on the server side. If you like you can also choose to implement using an SSH subsystem. In my opinion they are quite under-utilized. > but it does not work. We can not magically know why. You have a problem in your systems programming code in your application protocol, so you have to debug it. Your libssh2 source code is rather messy, I think you would find it easier to debug your protocol if you first clean up the source. You seem to be using a session channel with a shell in a pty, I don't know if that is on purpose or by accident, but you should know that it is has quite extensive consequences which you need to be familiar with in order to use the channel successfully. Since you didn't write anything about the desired semantics of what you want to develop it's impossible to give any advice on what you should or should not use. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Thu Oct 4 06:58:29 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q944w0lm014640; Thu, 4 Oct 2012 06:58:22 +0200 Received: from mail-ie0-f182.google.com (mail-ie0-f182.google.com [209.85.223.182]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q944vunn014615 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Thu, 4 Oct 2012 06:57:57 +0200 Received: by mail-ie0-f182.google.com with SMTP id k10so208204iea.41 for ; Wed, 03 Oct 2012 21:57:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=5059lFy2KDMdRa6bpPyW/KwKvLSr9EAJqbA4x4TqEq0=; b=ex9vGEiR6uFWsxE92v66/w4Q2lKhm2EssUcILLHtK/nviaYy8JqcbKuV1dy0k+q/u+ rbEsp94oKHrBy7dj0uwwp/9m1YvjNjwzLR+z7Rx8Ektft7OTyCUDnv+ixwcvcxK4qEwx Ke8NW4P5V8M72ZsfA6b8EjT13oDm/XBuj68mGYpM7mi0NHJqrkNxjmpTt+fx+qrxNKUW oeZWGj3Cy4B2zfwKY5CJbudIYFs35yy4a9kGwjTSYROy2xFuZA8f/uFaRX7N18JTuTV0 M4WPhT/7/k26reBVspKhChaqu4jgyh80AeHdEj0SMl/blv8xZ3pR8XqxdCmROPc3+JHK XC+w== MIME-Version: 1.0 Received: by 10.50.194.163 with SMTP id hx3mr4081402igc.37.1349326670807; Wed, 03 Oct 2012 21:57:50 -0700 (PDT) Received: by 10.43.48.8 with HTTP; Wed, 3 Oct 2012 21:57:50 -0700 (PDT) In-Reply-To: <20121003220221.5621.qmail@stuge.se> References: <20121003220221.5621.qmail@stuge.se> Date: Wed, 3 Oct 2012 21:57:50 -0700 Message-ID: Subject: Re: Issue in reading message sent from remote process From: Narayani To: libssh2 development X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1365017198==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============1365017198== Content-Type: multipart/alternative; boundary=14dae9340cabe641ac04cb34985d --14dae9340cabe641ac04cb34985d Content-Type: text/plain; charset=ISO-8859-1 Thanks Peter for your quick reply. Your inputs were helpful, I was able to resolve the issue. Thanks, Narayani On 3 October 2012 15:02, Peter Stuge wrote: > Narayani wrote: > > I am facing an issue while using libssh2. > > Actually I disagree. Your issue is with designing a remote process > communication protocol which runs on top of SSH. This has absolutely > nothing to do with libssh2. > > > > I am not sure how to access this data in the remote node. > > That depends on how you design your remote process communication > protocol which runs on top of SSH. How you do that is entirely up > to you, the SSH protocol and thus libssh2 only offers you a secure > 8-bit clean transport, nothing else. > > > > I tried using 'read' (not libssh2 read) from stdout > > Yes, your remote process communication protocol will likely make use > of stdin, stdout and perhaps also stderr on the server side. > > If you like you can also choose to implement using an SSH subsystem. > In my opinion they are quite under-utilized. > > > > but it does not work. > > We can not magically know why. > > You have a problem in your systems programming code in your > application protocol, so you have to debug it. > > Your libssh2 source code is rather messy, I think you would find it > easier to debug your protocol if you first clean up the source. > > You seem to be using a session channel with a shell in a pty, I don't > know if that is on purpose or by accident, but you should know that > it is has quite extensive consequences which you need to be familiar > with in order to use the channel successfully. > > Since you didn't write anything about the desired semantics of what > you want to develop it's impossible to give any advice on what you > should or should not use. > > > //Peter > _______________________________________________ > libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel > --14dae9340cabe641ac04cb34985d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Thanks Peter for your quick reply. Your inputs were
helpful,= I was able to resolve the issue.
=A0
Thanks,
Narayani

On 3 October 2012 15:02, = Peter Stuge <peter@stuge.se> wrote:
Narayani wrote:
> I am facing an issue while using libssh2.

Actually I disagree. Your issue is with designing a remote process communication protocol which runs on top of SSH. This has absolutely
nothing to do with libssh2.


> I am not sure how to access this data in the remote node.

That depends on how you design your remote process communication
protocol which runs on top of SSH. How you do that is entirely up
to you, the SSH protocol and thus libssh2 only offers you a secure
8-bit clean transport, nothing else.


> I tried using 'read' (not libssh2 read) from stdout

Yes, your remote process communication protocol will likely make use<= br> of stdin, stdout and perhaps also stderr on the server side.

If you like you can also choose to implement using an SSH subsystem.
In my opinion they are quite under-utilized.


> but it does not work.

We can not magically know why.

You have a problem in your systems programming code in your
application protocol, so you have to debug it.

Your libssh2 source code is rather messy, I think you would find it
easier to debug your protocol if you first clean up the source.

You seem to be using a session channel with a shell in a pty, I don't know if that is on purpose or by accident, but you should know that
it is has quite extensive consequences which you need to be familiar
with in order to use the channel successfully.

Since you didn't write anything about the desired semantics of what
you want to develop it's impossible to give any advice on what you
should or should not use.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/li= bssh2-devel

--14dae9340cabe641ac04cb34985d-- --===============1365017198== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1365017198==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 8 15:31:01 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98DUWA7004591; Mon, 8 Oct 2012 15:30:53 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q98DUTK0004582 for ; Mon, 8 Oct 2012 15:30:30 +0200 Received: (qmail 29323 invoked by uid 501); 8 Oct 2012 13:30:31 -0000 Message-ID: <20121008133031.29322.qmail@stuge.se> Date: Mon, 8 Oct 2012 15:30:31 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference Mail-Followup-To: libssh2-devel@cool.haxx.se References: <20121008125229.16552.qmail@earth.stuge.se> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20121008125229.16552.qmail@earth.stuge.se> X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" libssh2@git.stuge.se wrote: > +++ b/src/channel.c > @@ -1483,10 +1483,11 @@ libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, > char **langtag, > size_t *langtag_len) > { > - LIBSSH2_SESSION *session = channel->session; > size_t namelen = 0; > > if (channel) { > + LIBSSH2_SESSION *session = channel->session; > + > if (channel->exit_signal) { > namelen = strlen(channel->exit_signal); > if (exitsignal) { I think this fix is wrong. Please look at what happens after the condition. Also, I don't think that libssh2 needs to validate programmer input. If someone passes a NULL pointer to a function that is really an error, and they will then have a problem sooner or later anyway. It is much better for libssh2 to crash fast and hard in this case, to have a higher chance that the programmer discovers the error. Papering over the error just to please a static analyzer does not make sense. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 8 15:32:27 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98DWOIZ005606; Mon, 8 Oct 2012 15:32:26 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98DWMwI005561 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 8 Oct 2012 15:32:22 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q98DWMv6005558 for ; Mon, 8 Oct 2012 15:32:22 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Mon, 8 Oct 2012 15:32:22 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference In-Reply-To: <20121008133031.29322.qmail@stuge.se> Message-ID: References: <20121008125229.16552.qmail@earth.stuge.se> <20121008133031.29322.qmail@stuge.se> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Mon, 8 Oct 2012, Peter Stuge wrote: > Also, I don't think that libssh2 needs to validate programmer input. If > someone passes a NULL pointer to a function that is really an error, and > they will then have a problem sooner or later anyway. Is it possibly so that we use that function internally somewhere with a (possibly) NULL argument? -- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 8 15:59:14 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98Dx6dw024254; Mon, 8 Oct 2012 15:59:13 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q98Dx3eU024216 for ; Mon, 8 Oct 2012 15:59:03 +0200 Received: (qmail 32176 invoked by uid 501); 8 Oct 2012 13:59:04 -0000 Message-ID: <20121008135904.32175.qmail@stuge.se> Date: Mon, 8 Oct 2012 15:59:04 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference Mail-Followup-To: libssh2-devel@cool.haxx.se References: <20121008125229.16552.qmail@earth.stuge.se> <20121008133031.29322.qmail@stuge.se> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Daniel Stenberg wrote: >> Also, I don't think that libssh2 needs to validate programmer input. If >> someone passes a NULL pointer to a function that is really an error, and >> they will then have a problem sooner or later anyway. > > Is it possibly so that we use that function internally somewhere with a > (possibly) NULL argument? If yes, then that's what need to be fixed. I suspect that Coverity just notices that it is unchecked user input though. The function is called only in example/ssh2_echo.c and example/ssh2_exec.c. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 8 16:06:52 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E6mNr030412; Mon, 8 Oct 2012 16:06:51 +0200 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E6iEu030383 for ; Mon, 8 Oct 2012 16:06:44 +0200 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q98E6gQQ031496 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 8 Oct 2012 10:06:42 -0400 Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q98E6f3Q008049; Mon, 8 Oct 2012 10:06:41 -0400 From: Kamil Dudka To: Peter Stuge Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference Date: Mon, 8 Oct 2012 16:05:52 +0200 User-Agent: KMail/1.12.4 (Linux/2.6.32-279.5.2.el6.x86_64; KDE/4.3.4; x86_64; ; ) References: <20121008125229.16552.qmail@earth.stuge.se> <20121008133031.29322.qmail@stuge.se> In-Reply-To: <20121008133031.29322.qmail@stuge.se> MIME-Version: 1.0 Message-Id: <201210081605.52041.kdudka@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 Cc: libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Monday 08 October 2012 15:30:31 Peter Stuge wrote: > libssh2@git.stuge.se wrote: > > +++ b/src/channel.c > > @@ -1483,10 +1483,11 @@ libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL > > *channel, char **langtag, > > size_t *langtag_len) > > { > > - LIBSSH2_SESSION *session = channel->session; > > size_t namelen = 0; > > > > if (channel) { > > + LIBSSH2_SESSION *session = channel->session; > > + > > if (channel->exit_signal) { > > namelen = strlen(channel->exit_signal); > > if (exitsignal) { > > I think this fix is wrong. Please look at what happens after the condition. It does exactly what the comments above the functions suggests, doesn't it? > Also, I don't think that libssh2 needs to validate programmer input. > If someone passes a NULL pointer to a function that is really an > error, and they will then have a problem sooner or later anyway. > > It is much better for libssh2 to crash fast and hard in this case, to > have a higher chance that the programmer discovers the error. I fully agree with your attitude on this. Then we should just the check and update the comment above the function, right? Kamil _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 8 16:09:37 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E9YSe031984; Mon, 8 Oct 2012 16:09:37 +0200 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98E9V05031964 for ; Mon, 8 Oct 2012 16:09:31 +0200 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q98E9Wng003091 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 8 Oct 2012 10:09:32 -0400 Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q98E9VmA032683; Mon, 8 Oct 2012 10:09:31 -0400 From: Kamil Dudka To: Peter Stuge Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference Date: Mon, 8 Oct 2012 16:08:42 +0200 User-Agent: KMail/1.12.4 (Linux/2.6.32-279.5.2.el6.x86_64; KDE/4.3.4; x86_64; ; ) References: <20121008125229.16552.qmail@earth.stuge.se> <20121008135904.32175.qmail@stuge.se> In-Reply-To: <20121008135904.32175.qmail@stuge.se> MIME-Version: 1.0 Message-Id: <201210081608.42439.kdudka@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 Cc: Daniel Stenberg , libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Monday 08 October 2012 15:59:04 Peter Stuge wrote: > Daniel Stenberg wrote: > >> Also, I don't think that libssh2 needs to validate programmer input. If > >> someone passes a NULL pointer to a function that is really an error, and > >> they will then have a problem sooner or later anyway. > > > > Is it possibly so that we use that function internally somewhere with a > > (possibly) NULL argument? I cannot see any internal use of the function unless you count the examples. > If yes, then that's what need to be fixed. I suspect that Coverity > just notices that it is unchecked user input though. Nope. It spotted that the pointer was dereferenced prior to the NULL check, which is always a programming mistake: Error: REVERSE_INULL (CWE-476): src/channel.c:1486: deref_ptr: Directly dereferencing pointer "channel". src/channel.c:1489: check_after_deref: Dereferencing "channel" before a null check. Kamil _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 8 16:10:50 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98EAmx2000666; Mon, 8 Oct 2012 16:10:50 +0200 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q98EAkOX000648 for ; Mon, 8 Oct 2012 16:10:47 +0200 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q98EAl3Q007298 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 8 Oct 2012 10:10:47 -0400 Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q98EAjcl022071; Mon, 8 Oct 2012 10:10:47 -0400 From: Kamil Dudka To: Peter Stuge Subject: Re: libssh2 master a8cfc708 channel: fix possible NULL dereference Date: Mon, 8 Oct 2012 16:09:56 +0200 User-Agent: KMail/1.12.4 (Linux/2.6.32-279.5.2.el6.x86_64; KDE/4.3.4; x86_64; ; ) References: <20121008125229.16552.qmail@earth.stuge.se> <20121008133031.29322.qmail@stuge.se> <201210081605.52041.kdudka@redhat.com> In-Reply-To: <201210081605.52041.kdudka@redhat.com> MIME-Version: 1.0 Message-Id: <201210081609.56498.kdudka@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 Cc: libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Monday 08 October 2012 16:05:52 Kamil Dudka wrote: > On Monday 08 October 2012 15:30:31 Peter Stuge wrote: > > libssh2@git.stuge.se wrote: > > > +++ b/src/channel.c > > > @@ -1483,10 +1483,11 @@ libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL > > > *channel, char **langtag, > > > size_t *langtag_len) > > > { > > > - LIBSSH2_SESSION *session = channel->session; > > > size_t namelen = 0; > > > > > > if (channel) { > > > + LIBSSH2_SESSION *session = channel->session; > > > + > > > if (channel->exit_signal) { > > > namelen = strlen(channel->exit_signal); > > > if (exitsignal) { > > > > I think this fix is wrong. Please look at what happens after the > > condition. > > It does exactly what the comments above the functions suggests, doesn't it? > > > Also, I don't think that libssh2 needs to validate programmer input. > > If someone passes a NULL pointer to a function that is really an > > error, and they will then have a problem sooner or later anyway. > > > > It is much better for libssh2 to crash fast and hard in this case, to > > have a higher chance that the programmer discovers the error. > > I fully agree with your attitude on this. Then we should just the check > and update the comment above the function, right? I meant to _remove_ the check and update the comment. Kamil _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 9 09:22:54 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997MUWJ006012; Tue, 9 Oct 2012 09:22:47 +0200 Received: from smtpbg5.qq.com (SMTPBG5.QQ.COM [183.60.61.230]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q997MQ0c005985 for ; Tue, 9 Oct 2012 09:22:28 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail658t1349767339t943661 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMi1kZXZlbA==?=" Subject: libssh2_scp_recv is not populating struct stat Mime-Version: 1.0 Date: Tue, 9 Oct 2012 15:22:19 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============2011147892==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. --===============2011147892== Content-Type: multipart/alternative; boundary="----=_NextPart_5073D0AB_08A305C8_0DF32EE5" Content-Transfer-Encoding: 8Bit This is a multi-part message in MIME format. ------=_NextPart_5073D0AB_08A305C8_0DF32EE5 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 aGksYWxsDQogICAgSSBhbSB1c2luZyAgbGlic3NoMi0xLjQuMix0aGUgc2NwLmMgZXhhbXBs ZSBpcyBub3Qgd29yay4NCiAgICBsaWJzc2gyX3NjcF9yZWN2KHNlc3Npb24sIHNjcHBhdGgs ICZmaWxlaW5mbyk7IHRoZSBjYWxsIGlzIHN1Y2Vzc2Z1bCxidXQgdGhlIGZpbGVpbmZvLnN0 X3NpemUgaXMgYWx3YXlzIHplcm8uDQogICAgYW55b25lIGhlbHAgbWUuDQogICAgbXkgZW5n bGlzaCBpcyBwb29sLGZvcmdpdmUgbWUuDQogICAgdGhhbmtzLg== ------=_NextPart_5073D0AB_08A305C8_0DF32EE5 Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGksYWxsPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBJ IGFtIHVzaW5nJm5ic3A7IGxpYnNzaDItMS40LjIsdGhlIHNjcC5jIGV4YW1wbGUgaXMgbm90 IHdvcmsuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBsaWJzc2gyX3NjcF9yZWN2KHNlc3Np b24sIHNjcHBhdGgsICZhbXA7ZmlsZWluZm8pOyB0aGUgY2FsbCBpcyBzdWNlc3NmdWwsYnV0 IHRoZSBmaWxlaW5mby5zdF9zaXplIGlzIGFsd2F5cyB6ZXJvLjwvRElWPg0KPERJVj4mbmJz cDsmbmJzcDsgYW55b25lIGhlbHAgbWUuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBteSBl bmdsaXNoIGlzIHBvb2wsZm9yZ2l2ZSBtZS48L0RJVj4NCjxESVY+Jm5ic3A7Jm5ic3A7IHRo YW5rcy48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyZuYnNw OzwvRElWPjwvRk9OVD4= ------=_NextPart_5073D0AB_08A305C8_0DF32EE5-- --===============2011147892== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============2011147892==-- From libssh2-devel-bounces@cool.haxx.se Tue Oct 9 09:23:44 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997NgKi006573; Tue, 9 Oct 2012 09:23:44 +0200 Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997NfuC006530 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 9 Oct 2012 09:23:41 +0200 Received: (qmail 29972 invoked by uid 0); 9 Oct 2012 09:23:32 +0200 Date: 9 Oct 2012 09:23:32 +0200 Message-ID: <20121009072332.29970.qmail@sokrates.metanet.ch> From: jonas.schnelli@include7.ch To: libssh2-devel@cool.haxx.se MIME-Version: 1.0 Subject: =?utf-8?Q?Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?= Content-Disposition: inline X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997NgKi006573 Sehr geehrte Damen und Herren Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend. Dieses E-Mail wird NICHT automatisch weitergeleitet. Dieses E-Mail wird verzögert gelesen und beantwortet. In dringenden Fällen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe Wüger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren. Besten Dank. Freundliche Grüsse Jonas Schnelli _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 9 09:24:06 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997O4BZ006823; Tue, 9 Oct 2012 09:24:05 +0200 Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997O3g8006661 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 9 Oct 2012 09:24:03 +0200 Received: (qmail 30078 invoked by uid 0); 9 Oct 2012 09:23:58 +0200 Date: 9 Oct 2012 09:23:58 +0200 Message-ID: <20121009072358.30076.qmail@sokrates.metanet.ch> From: jonas.schnelli@include7.ch To: libssh2-devel@cool.haxx.se MIME-Version: 1.0 Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?= Content-Disposition: inline X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997O4BZ006823 Sehr geehrte Damen und Herren Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend. Dieses E-Mail wird NICHT automatisch weitergeleitet. Dieses E-Mail wird verzögert gelesen und beantwortet. In dringenden Fällen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe Wüger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren. Besten Dank. Freundliche Grüsse Jonas Schnelli _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 9 09:24:31 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997OUTW007000; Tue, 9 Oct 2012 09:24:31 +0200 Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997OSTt006965 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 9 Oct 2012 09:24:28 +0200 Received: (qmail 30282 invoked by uid 0); 9 Oct 2012 09:24:23 +0200 Date: 9 Oct 2012 09:24:23 +0200 Message-ID: <20121009072423.30280.qmail@sokrates.metanet.ch> From: jonas.schnelli@include7.ch To: libssh2-devel@cool.haxx.se MIME-Version: 1.0 Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?= Content-Disposition: inline X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997OUTW007000 Sehr geehrte Damen und Herren Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend. Dieses E-Mail wird NICHT automatisch weitergeleitet. Dieses E-Mail wird verzögert gelesen und beantwortet. In dringenden Fällen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe Wüger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren. Besten Dank. Freundliche Grüsse Jonas Schnelli _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 9 09:25:00 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997Ow9P007207; Tue, 9 Oct 2012 09:25:00 +0200 Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997Ov1F007159 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 9 Oct 2012 09:24:58 +0200 Received: (qmail 30398 invoked by uid 0); 9 Oct 2012 09:24:53 +0200 Date: 9 Oct 2012 09:24:53 +0200 Message-ID: <20121009072453.30396.qmail@sokrates.metanet.ch> From: jonas.schnelli@include7.ch To: libssh2-devel@cool.haxx.se MIME-Version: 1.0 Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?= Content-Disposition: inline X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997Ow9P007207 Sehr geehrte Damen und Herren Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend. Dieses E-Mail wird NICHT automatisch weitergeleitet. Dieses E-Mail wird verzögert gelesen und beantwortet. In dringenden Fällen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe Wüger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren. Besten Dank. Freundliche Grüsse Jonas Schnelli _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 9 09:25:32 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997PUlP008183; Tue, 9 Oct 2012 09:25:32 +0200 Received: from sokrates.metanet.ch (sokrates.ch-meta.net [80.74.145.70]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q997PT2G008161 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 9 Oct 2012 09:25:29 +0200 Received: (qmail 30811 invoked by uid 0); 9 Oct 2012 09:25:24 +0200 Date: 9 Oct 2012 09:25:24 +0200 Message-ID: <20121009072524.30809.qmail@sokrates.metanet.ch> From: jonas.schnelli@include7.ch To: libssh2-devel@cool.haxx.se MIME-Version: 1.0 Subject: =?utf-8?Q?Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_Abwesenheitsnotiz:_libssh2=5Fscp=5Frecv_is_not_populating_struct_stat?= Content-Disposition: inline X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q997PUlP008183 Sehr geehrte Damen und Herren Ich bin vom Dienstag 08. Oktober bis Montag 22. Oktober abwesend. Dieses E-Mail wird NICHT automatisch weitergeleitet. Dieses E-Mail wird verzögert gelesen und beantwortet. In dringenden Fällen bitte ich Sie, auf unsere Hauptnummer 044 500 16 70 anzurufen oder meine Vertretung Philippe Wüger (philippe.wueger AT include7 PUNKT ch) zu kontaktieren. Besten Dank. Freundliche Grüsse Jonas Schnelli _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 10 12:17:15 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9AAGhN2027128; Wed, 10 Oct 2012 12:17:05 +0200 Received: from smtpbg297.qq.com (smtpbg297.qq.com [184.105.67.100]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9AAGeUa027042 for ; Wed, 10 Oct 2012 12:16:41 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail658t1349864191t112826 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMi1kZXZlbA==?=" Subject: Re:libssh2_scp_recv is not populating struct stat Mime-Version: 1.0 Date: Wed, 10 Oct 2012 18:16:31 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 1220599768 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1964314942==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. --===============1964314942== Content-Type: multipart/alternative; boundary="----=_NextPart_50754AFF_D4D03058_03ABB07F" Content-Transfer-Encoding: 8Bit This is a multi-part message in MIME format. ------=_NextPart_50754AFF_D4D03058_03ABB07F Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 SSBmb3VuZCB0aGF0IHRoZSBsaWJnY3J5cHQtMS41LjAgaXMgdW5zdWl0ZWQgdG8gbGlic3No Mg0KICANCiBbbGlic3NoMl0gMC4zODY1MzggU29ja2V0OiBSZWN2ZWQgMTA0MC8xNjM4NCBi eXRlcyB0byAweDUwMmMzOCswDQpbbGlic3NoMl0gMC4zOTA0OTYgU29ja2V0OiBTZW50IDE2 LzE2IGJ5dGVzIGF0IDB4NTA2Yzc4DQpbbGlic3NoMl0gMC4zOTA1MzkgRmFpbHVyZSBFdmVu dDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5cw0KW2xpYnNzaDJd IDAuMzkwNzM2IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzAN CiAgDQoNCiANCg0KIC0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0t LS0tLS0NCiAgRnJvbTogICKjxaP2o+Wj8i9keSI8dW5peEB2aXAucXEuY29tPjsNCiBEYXRl OiAgVHVlLCBPY3QgOSwgMjAxMiAwMzoyMiBQTQ0KIFRvOiAgImxpYnNzaDItZGV2ZWwiPGxp YnNzaDItZGV2ZWxAY29vbC5oYXh4LnNlPjsgDQogDQogU3ViamVjdDogIGxpYnNzaDJfc2Nw X3JlY3YgaXMgbm90IHBvcHVsYXRpbmcgc3RydWN0IHN0YXQNCg0KIA0KDQogaGksYWxsDQog ICAgSSBhbSB1c2luZyAgbGlic3NoMi0xLjQuMix0aGUgc2NwLmMgZXhhbXBsZSBpcyBub3Qg d29yay4NCiAgICBsaWJzc2gyX3NjcF9yZWN2KHNlc3Npb24sIHNjcHBhdGgsICZmaWxlaW5m byk7IHRoZSBjYWxsIGlzIHN1Y2Vzc2Z1bCxidXQgdGhlIGZpbGVpbmZvLnN0X3NpemUgaXMg YWx3YXlzIHplcm8uDQogICAgYW55b25lIGhlbHAgbWUuDQogICAgbXkgZW5nbGlzaCBpcyBw b29sLGZvcmdpdmUgbWUuDQogICAgdGhhbmtzLg== ------=_NextPart_50754AFF_D4D03058_03ABB07F Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PEZPTlQgc2l6ZT0rMD4NCjxESVY+SSZuYnNwO2ZvdW5kIHRoYXQgdGhlIGxpYmdjcnlwdC0x LjUuMCBpcyB1bnN1aXRlZCB0byBsaWJzc2gyPC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0K PERJVj5bbGlic3NoMl0gMC4zODY1MzggU29ja2V0OiBSZWN2ZWQgMTA0MC8xNjM4NCBieXRl cyB0byAweDUwMmMzOCswPEJSPltsaWJzc2gyXSAwLjM5MDQ5NiBTb2NrZXQ6IFNlbnQgMTYv MTYgYnl0ZXMgYXQgMHg1MDZjNzg8QlI+W2xpYnNzaDJdIDAuMzkwNTM5IEZhaWx1cmUgRXZl bnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXM8QlI+W2xpYnNz aDJdIDAuMzkwNzM2IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4 KzA8L0RJVj48L0ZPTlQ+DQo8RElWPjxpbmNsdWRldGFpbD4NCjxESVY+PEJSPjwvRElWPg0K PERJVj48QlI+PC9ESVY+DQo8RElWIHN0eWxlPSJQQURESU5HLUJPVFRPTTogMnB4OyBQQURE SU5HLUxFRlQ6IDBweDsgUEFERElORy1SSUdIVDogMHB4OyBGT05ULUZBTUlMWTogQXJpYWwg TmFycm93OyBGT05ULVNJWkU6IDEycHg7IFBBRERJTkctVE9QOiAycHgiPi0tLS0tLS0tLS0t LS0tLS0tLSZuYnNwO09yaWdpbmFsJm5ic3A7LS0tLS0tLS0tLS0tLS0tLS0tPC9ESVY+DQo8 RElWIHN0eWxlPSJQQURESU5HLUJPVFRPTTogOHB4OyBQQURESU5HLUxFRlQ6IDhweDsgUEFE RElORy1SSUdIVDogOHB4OyBCQUNLR1JPVU5EOiAjZWZlZmVmOyBGT05ULVNJWkU6IDEycHg7 IFBBRERJTkctVE9QOiA4cHgiPg0KPERJVj48Qj5Gcm9tOiA8L0I+Jm5ic3A7IqPFo/aj5aPy L2R5IiZsdDt1bml4QHZpcC5xcS5jb20mZ3Q7OzwvRElWPg0KPERJVj48Qj5EYXRlOiA8L0I+ Jm5ic3A7VHVlLCBPY3QgOSwgMjAxMiAwMzoyMiBQTTwvRElWPg0KPERJVj48Qj5UbzogPC9C PiZuYnNwOyJsaWJzc2gyLWRldmVsIiZsdDtsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZSZn dDs7IDxXQlI+PC9ESVY+DQo8RElWPjwvRElWPg0KPERJVj48Qj5TdWJqZWN0OiA8L0I+Jm5i c3A7bGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdDwvRElW PjwvRElWPg0KPERJVj48QlI+PC9ESVY+PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGksYWxsPC9E SVY+DQo8RElWPiZuYnNwOyZuYnNwOyBJIGFtIHVzaW5nJm5ic3A7IGxpYnNzaDItMS40LjIs dGhlIHNjcC5jIGV4YW1wbGUgaXMgbm90IHdvcmsuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNw OyBsaWJzc2gyX3NjcF9yZWN2KHNlc3Npb24sIHNjcHBhdGgsICZhbXA7ZmlsZWluZm8pOyB0 aGUgY2FsbCBpcyBzdWNlc3NmdWwsYnV0IHRoZSBmaWxlaW5mby5zdF9zaXplIGlzIGFsd2F5 cyB6ZXJvLjwvRElWPg0KPERJVj4mbmJzcDsmbmJzcDsgYW55b25lIGhlbHAgbWUuPC9ESVY+ DQo8RElWPiZuYnNwOyZuYnNwOyBteSBlbmdsaXNoIGlzIHBvb2wsZm9yZ2l2ZSBtZS48L0RJ Vj4NCjxESVY+Jm5ic3A7Jm5ic3A7IHRoYW5rcy48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+ DQo8RElWPiZuYnNwOyZuYnNwOyA8L0RJVj48L0ZPTlQ+DQo8RElWPjwvRElWPjwvaW5jbHVk ZXRhaWw+PC9ESVY+ ------=_NextPart_50754AFF_D4D03058_03ABB07F-- --===============1964314942== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1964314942==-- From libssh2-devel-bounces@cool.haxx.se Wed Oct 10 16:02:19 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9AE1otb009401; Wed, 10 Oct 2012 16:02:13 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9AE1m11009387 for ; Wed, 10 Oct 2012 16:01:48 +0200 Received: (qmail 17188 invoked by uid 501); 10 Oct 2012 14:01:48 -0000 Message-ID: <20121010140148.17187.qmail@stuge.se> Date: Wed, 10 Oct 2012 16:01:48 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: libssh2_scp_recv is not populating struct stat Mail-Followup-To: libssh2-devel@cool.haxx.se References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9AE1otb009401 Ever wrote: > I found that the libgcrypt-1.5.0 is unsuited to libssh2 I think the issue requires further investigation. > [libssh2] 0.386538 Socket: Recved 1040/16384 bytes to 0x502c38+0 > [libssh2] 0.390496 Socket: Sent 16/16 bytes at 0x506c78 > [libssh2] 0.390539 Failure Event: -37 - Unable to exchange encryption keys > [libssh2] 0.390736 Socket: Recved 32/16384 bytes to 0x502c38+0 The above does not indicate an error. -37 means that some communication has not yet completed, so the call to libssh2 should be attempted again. ~/src/libssh2 $ git grep -- -37|cat include/libssh2.h:#define LIBSSH2_ERROR_EAGAIN -37 Please try to use some of the example programs included with libssh2. They should work just fine. If they do not work then let's find the problem. libgcrypt has one known limitation. libssh2 can not use passphrase-protected private SSH keys for authentication, if built with libgcrypt. Using such keys is only possible when built with OpenSSL. Everything else should work. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 03:58:02 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9B1vYLq010699; Thu, 11 Oct 2012 03:57:57 +0200 Received: from na3sys009aog112.obsmtp.com (na3sys009aog112.obsmtp.com [74.125.149.207]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9B1vW9v010685 for ; Thu, 11 Oct 2012 03:57:32 +0200 Received: from mail-ob0-f182.google.com ([209.85.214.182]) (using TLSv1) by na3sys009aob112.postini.com ([74.125.148.12]) with SMTP ID DSNKUHYnjJPORF86mYoZB7lB+swpVpew1CN9@postini.com; Wed, 10 Oct 2012 18:57:35 PDT Received: by mail-ob0-f182.google.com with SMTP id wc20so1226284obb.41 for ; Wed, 10 Oct 2012 18:57:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=J1uqVj29t/JgIyzbDf4sEKEhdJ9vaYPn2aRCWLolQdo=; b=ebHJVm4r/ESgcDoM12Leqkh6NYIcBQrfa8Q634j5i7ilrKo9YkQijMs7RyQy2ymCMH Fj0CleK1QpUSY0S6533t782WmtswiUn8jPuVH3T0BIx5huw2xqlYj2Mpk4/38+z9mrBy F+WsjC4FK4JmBQIQkLc6IBvh4Rf0oclrgqXOst95kCwkAVkeFVgBvp4AwfuXTwJsopAa vdioxhukEfhVZVITQWE3bAwx8fJjfH5lBbR4M8V01gqHvo+3K8svCag+q4u59zm83KJR 68edi5jPIlVWNDML232LbpqhmPQRc25FUCz6lbRRnkDZYeUPRqWFNp26lPB/Jq63fYnc CtXw== MIME-Version: 1.0 Received: by 10.182.157.44 with SMTP id wj12mr7208752obb.41.1349920652138; Wed, 10 Oct 2012 18:57:32 -0700 (PDT) Received: by 10.76.139.196 with HTTP; Wed, 10 Oct 2012 18:57:32 -0700 (PDT) Date: Wed, 10 Oct 2012 18:57:32 -0700 Message-ID: Subject: Connection loss detection with keepalive From: Anton Obukhov To: libssh2-devel@cool.haxx.se X-Gm-Message-State: ALoCoQl11xMWUeSkhZ9PCMHCgKv0Ls1XS0S5jGHSioVxPDoGlTuTngdRVAOLjynLivSdVGeVgSMu X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============2138750457==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============2138750457== Content-Type: multipart/alternative; boundary=f46d04428210f2195304cbbee45c --f46d04428210f2195304cbbee45c Content-Type: text/plain; charset=ISO-8859-1 Hello libssh2 authors, I'm working on an application, which needs to stream data from a remote machine in real time. Libssh2 is just great for handling sftp and exec sessions, but when it comes to unreliable networks conditions, it doesn't really have any handles to control its behavior. I scooped through this mailing list and the rest of googles, and found a couple of patches that were attempting to implement a reliable connection loss detection. (Namely, a patch attached to this ticket: http://trac.libssh2.org/ticket/183). However, even that was not enough for me. The two things missing in that patch are: 1. It doesn't handle a situation when the outgoing queue is full, and the libssh2_keepalive_send operation silently returns; 2. Even if want_reply set to 1, there is no checking for server responses to heartbeat, as we don't really read anything (normally, heartbeats are important in those scenarios, when there is a pause in data exchange and nothing else is being sent or received). What I had to implement for my application is a dedicated channel, which is used just make the core of the library update incoming packets queue, and also reset outstanding heartbeats counters. Something like this: LIBSSH2_CHANNEL *channelKeepAlive = createChannel(session, sock); while (1) { char buffer[1024]; libssh2_keepalive_send(session, &seconds_to_next); libssh2_channel_read_ex(channelKeepAlive, 0, buffer, sizeof(buffer)); ... //do other tasks } I'd like to understand if a patch that makes keepalive act as a connection loss detector would be interesting for this community, as a part of the library. If yes - what is the preferred API for dedicated channel open/close? Please note that all said above was tested only in non-blocking socket conditions, I guess something might be different for a blocking scenario. Thanks, Anton --f46d04428210f2195304cbbee45c Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hello libssh2 authors,

I'm working on= an application, which needs to stream data from a remote machine in real t= ime. Libssh2 is just great for handling sftp and exec sessions, but when it= comes to unreliable networks conditions, it doesn't really have any ha= ndles to control its behavior.=A0

I scooped through this mailing list and the rest of goo= gles, and found a couple of patches that were attempting to implement a rel= iable connection loss detection. (Namely, a patch attached to this ticket: = http://trac.libssh2.org/tick= et/183). However, even that was not enough for me.=A0

The two things missing in that patch are:
1. = It doesn't handle a situation when the outgoing queue is full, and the = libssh2_keepalive_send operation silently returns;
2. Even if wan= t_reply set to 1, there is no checking for server responses to heartbeat, a= s we don't really read anything (normally, heartbeats are important in = those scenarios, when there is a pause in data exchange and nothing else is= being sent or received).

What I had to implement for my application is a dedicat= ed channel, which is used just make the core of the library update incoming= packets queue, and also reset outstanding heartbeats counters. Something l= ike this:

LIBSSH2_CHANNEL *channelKeepAlive =3D createChannel(ses= sion, sock);
while (1) {
=A0=A0 =A0char buffer[1024];= =A0
=A0 =A0 libssh2_keepalive_send(session, &seconds_to_next)= ;
=A0 =A0 libssh2_channel_read_ex(channelKeepAlive, 0, buffer, sizeof(buffer)= );
=A0 =A0 ... //do other tasks
}

<= div>I'd like to understand if a patch that makes keepalive act as a con= nection loss detector would be interesting for this community, as a part of= the library. If yes - what is the preferred API for dedicated channel open= /close?=A0

Please note that all said above was tested only in non-= blocking socket conditions, I guess something might be different for a bloc= king scenario.

Thanks,
Anton

--f46d04428210f2195304cbbee45c-- --===============2138750457== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============2138750457==-- From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 10:01:52 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9B81SIR023880; Thu, 11 Oct 2012 10:01:46 +0200 Received: from smtpbg215.qq.com (smtpbg215.qq.com [112.90.139.244]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9B81L0d023831 for ; Thu, 11 Oct 2012 10:01:23 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail90t1349942447t2869908 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" Subject: Re: libssh2_scp_recv is not populating struct stat Mime-Version: 1.0 Date: Thu, 11 Oct 2012 16:00:47 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 2657145478 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1345375520==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. --===============1345375520== Content-Type: multipart/alternative; boundary="----=_NextPart_50767CAF_085AB040_06C103D2" Content-Transfer-Encoding: 8Bit This is a multi-part message in MIME format. ------=_NextPart_50767CAF_085AB040_06C103D2 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 aGkgcGV0ZXI6DQogVGhhbnMgZm9yIHlvdXIgcmVwbGF5aW5nLg0KIFllYWgsbWF5YmUgaXQg YmUgbm90IHRoZSBpc3N1ZS4NCiBJIHVzaW5nIG9wZW5zc2wtMC45LjhwLEkgZ290IHRoZSBm b2xsb3dpbmcgdGV4dDoNCiAgDQogfi9saWJzc2gyLTEuNC4yL2V4YW1wbGUjIC4vc2NwIDEw LjEyOS4xMzkuMTQwIG1xcSBtcXEyMDA1IC91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG8N CltsaWJzc2gyXSAwLjczNTY1OCBTb2NrZXQ6IFNlbnQgMjMvMjMgYnl0ZXMgYXQgMHgyYWFm NGIzMjYzN2QrMA0KW2xpYnNzaDJdIDAuNzM1NzYwIFNvY2tldDogRXJyb3IgcmVjdmluZyAx IGJ5dGVzOiAxMQ0KW2xpYnNzaDJdIDAuNzM1NzkyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIEZh aWxlZCBnZXR0aW5nIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM2NTg5IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzY2MzAgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczNjY1OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM2Njg2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyDQpbbGlic3NoMl0gMC43MzY3MTEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN CltsaWJzc2gyXSAwLjczNjczNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xp YnNzaDJdIDAuNzM2NzYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3No Ml0gMC43MzY3ODQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAw LjczNjk2NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM3 MDAxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzcwMjYg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczNzA4NSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM3MTE2IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzcxNDEgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczNzMxNCBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM4NzU3IFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43Mzg3ODMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXINCltsaWJzc2gyXSAwLjczODgwNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cg0KW2xpYnNzaDJdIDAuNzM4ODMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpb bGlic3NoMl0gMC43Mzg4NTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJz c2gyXSAwLjczODg4MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJd IDAuNzM4OTA0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43 Mzg5MjcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczODk1 MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM4OTc1IFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzkwMDYgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTAzMSBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5MDU1IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzkwNzkgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTExNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5MTM5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyDQpbbGlic3NoMl0gMC43MzkxNjQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN CltsaWJzc2gyXSAwLjczOTE4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xp YnNzaDJdIDAuNzM5MjEyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3No Ml0gMC43MzkyMzYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAw LjczOTI2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5 Mjk4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43MzkzMjUg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTM1MCBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5Mzc0IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43Mzk0MDEgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTQyNSBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5NDUxIFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43Mzk0NzUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXINCltsaWJzc2gyXSAwLjczOTQ5OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cg0KW2xpYnNzaDJdIDAuNzM5NTIzIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpb bGlic3NoMl0gMC43Mzk1NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJz c2gyXSAwLjczOTU3MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJd IDAuNzM5NTk2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC43 Mzk2MjAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjczOTY0 NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuNzM5ODMzIFNv Y2tldDogU2VudCA2NDgvNjQ4IGJ5dGVzIGF0IDB4NTA5OTU4DQpbbGlic3NoMl0gMC43Mzk4 NzQgU29ja2V0OiBSZWN2ZWQgNDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJz c2gyXSAwLjc0MDE5MCBTb2NrZXQ6IFNlbnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1OA0K W2xpYnNzaDJdIDAuNzQwMjI1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNo YW5nZSBlbmNyeXB0aW9uIGtleXMNCltsaWJzc2gyXSAwLjgwNjU5NyBTb2NrZXQ6IFJlY3Zl ZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJzc2gyXSAwLjgwODU0MSBT b2NrZXQ6IFNlbnQgMTYvMTYgYnl0ZXMgYXQgMHg1MDk5NTgNCltsaWJzc2gyXSAwLjgwODU4 MCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBr ZXlzDQpbbGlic3NoMl0gMC44MDg3NDUgU29ja2V0OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMg dG8gMHg1MDU5MTgrMA0KW2xpYnNzaDJdIDAuODA4ODU0IFNvY2tldDogU2VudCA1Mi81MiBi eXRlcyBhdCAweDUwOTk1OA0KW2xpYnNzaDJdIDAuODA5MDk4IFNvY2tldDogUmVjdmVkIDg4 LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCkZpbmdlcnByaW50OiA4RSBGRiA5RiBBRCA1 OSBCQiAyOCAwRCBDRSBCRCA5NiAxQyA4MCA1NiA3QiAzQSBERiA2NSBGRCBEMiANCltsaWJz c2gyXSAwLjgwOTYzNiBTb2NrZXQ6IFNlbnQgODQvODQgYnl0ZXMgYXQgMHg1MDk5NTgNClts aWJzc2gyXSAwLjgwOTY2OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0 aW5nDQpbbGlic3NoMl0gMC44MTA5MTkgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4NCBieXRl cyB0byAweDUwNTkxOCswDQpbbGlic3NoMl0gMC44MTEwMTUgU0NQOiBPcGVuaW5nIGNoYW5u ZWwgZm9yIFNDUCByZWNlaXZlDQpbbGlic3NoMl0gMC44MTEwNDQgQ29ubjogQWxsb2NhdGVk IG5ldyBjaGFubmVsIElEIzANCltsaWJzc2gyXSAwLjgxMTA2OCBDb25uOiBPcGVuaW5nIENo YW5uZWwgLSB3aW4gMjYyMTQ0IHBhY2sgMzI3NjgNCltsaWJzc2gyXSAwLjgxMTExNiBTb2Nr ZXQ6IFNlbnQgNjgvNjggYnl0ZXMgYXQgMHg1MDk5NTgNCltsaWJzc2gyXSAwLjgxMTE0NyBG YWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jaw0KW2xpYnNzaDJdIDAuODExMTc3IEZh aWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwNClts aWJzc2gyXSAwLjgxMTM1MiBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUw NTkxOCswDQpbbGlic3NoMl0gMC44MTE0MDggQ29ubjogQ29ubmVjdGlvbiBFc3RhYmxpc2hl ZCAtIElEOiAwLzAgd2luOiAxMDAwMDAvMjYyMTQ0IHBhY2s6IDMyNzY4LzMyNzY4DQpbbGli c3NoMl0gMC44MTE0NDAgQ29ubjogc3RhcnRpbmcgcmVxdWVzdChleGVjKSBvbiBjaGFubmVs IDAvMCwgbWVzc2FnZT1zY3AgLXBmICcvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvJw0K W2xpYnNzaDJdIDAuODExNDg5IFNvY2tldDogU2VudCAxNDgvMTQ4IGJ5dGVzIGF0IDB4NTA5 OTU4DQpbbGlic3NoMl0gMC44MTE1MjEgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxv Y2sgcmVxdWVzdGluZyBTQ1Agc3RhcnR1cA0KW2xpYnNzaDJdIDAuODEyNDYxIFNvY2tldDog UmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJzc2gyXSAwLjgxMjUx NSBTQ1A6IFNlbmRpbmcgaW5pdGlhbCB3YWtldXANCltsaWJzc2gyXSAwLjgxMjU0OSBDb25u OiBXcml0aW5nIDEgYnl0ZXMgb24gY2hhbm5lbCAwLzAsIHN0cmVhbSAjMA0KW2xpYnNzaDJd IDAuODEyNTc2IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFt X2lkPTANCltsaWJzc2gyXSAwLjgxMjYxNiBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQg MHg1MDk5NTgNCltsaWJzc2gyXSAwLjgxMjY0NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50 cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwDQpbbGlic3NoMl0gMC44MTI2 NzEgRmFpbHVyZSBFdmVudDogLTM3IC0gd291bGQgYmxvY2sNCltsaWJzc2gyXSAwLjgxMjY5 NSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVz cG9uc2UNCltsaWJzc2gyXSAwLjgzMDg0MiBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAx IGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwDQpbbGlic3NoMl0gMC44MzA4OTEg U29ja2V0OiBSZWN2ZWQgMTIwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCltsaWJzc2gy XSAwLjgzMDkzOCBDb25uOiAzMSBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEw NzY0MzM5Mw0KW2xpYnNzaDJdIDAuODMwOTY4IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIHdvdWxk IGJsb2NrDQpbbGlic3NoMl0gMC44MzA5OTMgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQg YmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlDQpbbGlic3NoMl0gMC44NjczNTcgQ29u bjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVh bSAjMA0KW2xpYnNzaDJdIDAuODY3NDEyIFNvY2tldDogUmVjdmVkIDM2MC8xNjM4NCBieXRl cyB0byAweDUwNTkxOCswDQpbbGlic3NoMl0gMC44Njc0NTggQ29ubjogOTIgYnl0ZXMgcGFj a2V0X2FkZCgpIGZvciAwLzAvNDY5MzExMDc2NDMzOTMNCltsaWJzc2gyXSAwLjg2NzQ5OSBD b25uOiBDaGFubmVsIDAgcmVjZWl2ZWQgcmVxdWVzdCB0eXBlIGV4aXQtc3RhdHVzICh3ciAw KQ0KW2xpYnNzaDJdIDAuODY3NTI4IENvbm46IEV4aXQgc3RhdHVzIDI1NSByZWNlaXZlZCBm b3IgY2hhbm5lbCAwLzANCltsaWJzc2gyXSAwLjg2NzU2MiBDb25uOiBDbG9zZSByZWNlaXZl ZCBmb3IgY2hhbm5lbCAwLzANCltsaWJzc2gyXSAwLjg2NzU5MyBDb25uOiBGcmVlaW5nIGNo YW5uZWwgMC8wIHJlc291cmNlcw0KW2xpYnNzaDJdIDAuODY3NjE5IENvbm46IFNlbmRpbmcg RU9GIG9uIGNoYW5uZWwgMC8wDQpbbGlic3NoMl0gMC44Njc2NTcgU29ja2V0OiBTZW50IDM2 LzM2IGJ5dGVzIGF0IDB4NTA5OTU4DQpbbGlic3NoMl0gMC44Njc2ODYgQ29ubjogQ2xvc2lu ZyBjaGFubmVsIDAvMA0KW2xpYnNzaDJdIDAuODY3NzE5IFNvY2tldDogU2VudCAzNi8zNiBi eXRlcyBhdCAweDUwOTk1OA0KW2xpYnNzaDJdIDAuODY3NzYxIFNvY2tldDogU2VudCA4NC84 NCBieXRlcyBhdCAweDUwOTk1OA0KYWxsIGRvbmUNCjwvOmluY2x1ZGV0YWlsPg0KIC0tLS0t LS0tLS08LzppbmNsdWRldGFpbD4NCiBJIGp1c3QgYWRkIG9uZSBjb2RlIGluIGV4YW1wbGUv c2NwLmMgPC86aW5jbHVkZXRhaWw+DQogPC86aW5jbHVkZXRhaWw+IA0KIGxpYnNzaDJfdHJh Y2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBMSUJTU0gyX1RSQUNFX1NPQ0tFVCB8 IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFDRV9FUlJPUiApOw0KICAgDQogbXkg Z2NjIGlzOg0KIGdjYyAtdg0KVXNpbmcgYnVpbHQtaW4gc3BlY3MuDQpUYXJnZXQ6IHg4Nl82 NC1zdXNlLWxpbnV4DQpDb25maWd1cmVkIHdpdGg6IC4uL2NvbmZpZ3VyZSAtLWVuYWJsZS10 aHJlYWRzPXBvc2l4IC0tcHJlZml4PS91c3IgLS13aXRoLWxvY2FsLXByZWZpeD0vdXNyL2xv Y2FsIC0taW5mb2Rpcj0vdXNyL3NoYXJlL2luZm8gLS1tYW5kaXI9L3Vzci9zaGFyZS9tYW4g LS1saWJkaXI9L3Vzci9saWI2NCAtLWxpYmV4ZWNkaXI9L3Vzci9saWI2NCAtLWVuYWJsZS1s YW5ndWFnZXM9YyxjKyssb2JqYyxmb3J0cmFuLG9iai1jKyssamF2YSxhZGEgLS1lbmFibGUt Y2hlY2tpbmc9cmVsZWFzZSAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS91c3IvaW5jbHVkZS9j KysvNC4xLjIgLS1lbmFibGUtc3NwIC0tZGlzYWJsZS1saWJzc3AgLS1kaXNhYmxlLWxpYmdj aiAtLXdpdGgtc2xpYmRpcj0vbGliNjQgLS13aXRoLXN5c3RlbS16bGliIC0tZW5hYmxlLXNo YXJlZCAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgLS1lbmFibGUtbGlic3RkY3h4LWFsbG9jYXRv cj1uZXcgLS1wcm9ncmFtLXN1ZmZpeD0gLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50 aW1lLWxpYnMgLS13aXRob3V0LXN5c3RlbS1saWJ1bndpbmQgLS13aXRoLWNwdT1nZW5lcmlj IC0taG9zdD14ODZfNjQtc3VzZS1saW51eA0KVGhyZWFkIG1vZGVsOiBwb3NpeA0KZ2NjIHZl cnNpb24gNC4xLjIgMjAwNzAxMTUgKHByZXJlbGVhc2UpIChTVVNFIExpbnV4KQ0KICANCiBJ IHB1enpsZSBvdmVyIHRoaXMgbWFueSBkYXlzLg0KIHRoYW5rcyBmb3IgeW91ciBoZWxwLg0K ICANCiAtLS0tLS0tLS0tLS0tLS0tLS0gT3JpZ2luYWwgLS0tLS0tLS0tLS0tLS0tLS0tDQog IEZyb206ICAiUGV0ZXIgU3R1Z2UiPHBldGVyQHN0dWdlLnNlPjsNCiBEYXRlOiAgV2VkLCBP Y3QgMTAsIDIwMTIgMTA6MDEgUE0NCiBUbzogICJsaWJzc2gyLWRldmVsIjxsaWJzc2gyLWRl dmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1YmplY3Q6ICBSZTogbGlic3NoMl9zY3BfcmVj diBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdA0KDQogDQoNCqPFo/aj5aPyIHdyb3Rl Og0KPiBJIGZvdW5kIHRoYXQgdGhlIGxpYmdjcnlwdC0xLjUuMCBpcyB1bnN1aXRlZCB0byBs aWJzc2gyDQoNCkkgdGhpbmsgdGhlIGlzc3VlIHJlcXVpcmVzIGZ1cnRoZXIgaW52ZXN0aWdh dGlvbi4NCg0KDQo+IFtsaWJzc2gyXSAwLjM4NjUzOCBTb2NrZXQ6IFJlY3ZlZCAxMDQwLzE2 Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzANCj4gW2xpYnNzaDJdIDAuMzkwNDk2IFNvY2tldDog U2VudCAxNi8xNiBieXRlcyBhdCAweDUwNmM3OA0KPiBbbGlic3NoMl0gMC4zOTA1MzkgRmFp bHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5cw0K PiBbbGlic3NoMl0gMC4zOTA3MzYgU29ja2V0OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMgdG8g MHg1MDJjMzgrMA0KDQpUaGUgYWJvdmUgZG9lcyBub3QgaW5kaWNhdGUgYW4gZXJyb3IuIC0z NyBtZWFucyB0aGF0IHNvbWUNCmNvbW11bmljYXRpb24gaGFzIG5vdCB5ZXQgY29tcGxldGVk LCBzbyB0aGUgY2FsbCB0byBsaWJzc2gyDQpzaG91bGQgYmUgYXR0ZW1wdGVkIGFnYWluLg0K DQp+L3NyYy9saWJzc2gyICQgZ2l0IGdyZXAgLS0gLTM3fGNhdA0KaW5jbHVkZS9saWJzc2gy Lmg6I2RlZmluZSBMSUJTU0gyX0VSUk9SX0VBR0FJTiAgICAgICAgICAgICAgICAgICAgLTM3 DQoNCg0KUGxlYXNlIHRyeSB0byB1c2Ugc29tZSBvZiB0aGUgZXhhbXBsZSBwcm9ncmFtcyBp bmNsdWRlZCB3aXRoIGxpYnNzaDIuDQpUaGV5IHNob3VsZCB3b3JrIGp1c3QgZmluZS4gSWYg dGhleSBkbyBub3Qgd29yayB0aGVuIGxldCdzIGZpbmQgdGhlDQpwcm9ibGVtLg0KDQpsaWJn Y3J5cHQgaGFzIG9uZSBrbm93biBsaW1pdGF0aW9uLiBsaWJzc2gyIGNhbiBub3QgdXNlDQpw YXNzcGhyYXNlLXByb3RlY3RlZCBwcml2YXRlIFNTSCBrZXlzIGZvciBhdXRoZW50aWNhdGlv biwgaWYgYnVpbHQNCndpdGggbGliZ2NyeXB0LiBVc2luZyBzdWNoIGtleXMgaXMgb25seSBw b3NzaWJsZSB3aGVuIGJ1aWx0IHdpdGgNCk9wZW5TU0wuIEV2ZXJ5dGhpbmcgZWxzZSBzaG91 bGQgd29yay4NCg0KDQovL1BldGVyDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXw0KbGlic3NoMi1kZXZlbCBodHRwOi8vY29vbC5oYXh4LnNlL2Nn aS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJzc2gyLWRldmVsDQogDQo8LzppbmNsdWRldGFp bD4= ------=_NextPart_50767CAF_085AB040_06C103D2 Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGkgcGV0ZXI6PC9ESVY+DQo8RElWPlRoYW5zIGZvciB5 b3VyIHJlcGxheWluZy48L0RJVj4NCjxESVY+WWVhaCxtYXliZSBpdCZuYnNwO2JlIG5vdCB0 aGUgaXNzdWUuPC9ESVY+DQo8RElWPkkgdXNpbmcgb3BlbnNzbC0wLjkuOHAsSSBnb3QgdGhl IDxTUEFOIGNsYXNzPWtleXdvcmQ+Zm9sbG93aW5nIHRleHQ8L1NQQU4+OjwvRElWPg0KPERJ Vj48L0ZPTlQ+PGluY2x1ZGV0YWlsPjwvaW5jbHVkZXRhaWw+Jm5ic3A7PC9ESVY+DQo8RElW Pn4vbGlic3NoMi0xLjQuMi9leGFtcGxlIyAuL3NjcCAxMC4xMjkuMTM5LjE0MCBtcXEgbXFx MjAwNSAvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvPEJSPltsaWJzc2gyXSAwLjczNTY1 OCBTb2NrZXQ6IFNlbnQgMjMvMjMgYnl0ZXMgYXQgMHgyYWFmNGIzMjYzN2QrMDxCUj5bbGli c3NoMl0gMC43MzU3NjAgU29ja2V0OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExPEJSPlts aWJzc2gyXSAwLjczNTc5MiBGYWlsdXJlIEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBi YW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM2NTg5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyPEJSPltsaWJzc2gyXSAwLjczNjYzMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj5bbGlic3NoMl0gMC43MzY2NTkgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8 QlI+W2xpYnNzaDJdIDAuNzM2Njg2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJS PltsaWJzc2gyXSAwLjczNjcxMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5b bGlic3NoMl0gMC43MzY3MzYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xp YnNzaDJdIDAuNzM2NzYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJz c2gyXSAwLjczNjc4NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3No Ml0gMC43MzY5NjcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJd IDAuNzM3MDAxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAw LjczNzAyNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43 MzcwODUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM3 MTE2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczNzE0 MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43MzczMTQg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4NzU3IFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczODc4MyBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzg4MDcgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4ODMyIFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczODg1NiBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzg4ODAgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4OTA0IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczODkyNyBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzg5NTEgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM4OTc1IFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTAwNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj5bbGlic3NoMl0gMC43MzkwMzEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5MDU1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyPEJSPltsaWJzc2gyXSAwLjczOTA3OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj5bbGlic3NoMl0gMC43MzkxMTUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8 QlI+W2xpYnNzaDJdIDAuNzM5MTM5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJS PltsaWJzc2gyXSAwLjczOTE2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5b bGlic3NoMl0gMC43MzkxODggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xp YnNzaDJdIDAuNzM5MjEyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJz c2gyXSAwLjczOTIzNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3No Ml0gMC43MzkyNjAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJd IDAuNzM5Mjk4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAw LjczOTMyNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43 MzkzNTAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5 Mzc0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTQw MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk0MjUg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5NDUxIFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTQ3NSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk0OTkgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5NTIzIFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTU0NyBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk1NzEgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5NTk2IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyPEJSPltsaWJzc2gyXSAwLjczOTYyMCBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj5bbGlic3NoMl0gMC43Mzk2NDQgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXI8QlI+W2xpYnNzaDJdIDAuNzM5ODMzIFNvY2tldDogU2VudCA2NDgvNjQ4 IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPltsaWJzc2gyXSAwLjczOTg3NCBTb2NrZXQ6IFJlY3Zl ZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC43NDAxOTAg U29ja2V0OiBTZW50IDE0NC8xNDQgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+W2xpYnNzaDJdIDAu NzQwMjI1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0 aW9uIGtleXM8QlI+W2xpYnNzaDJdIDAuODA2NTk3IFNvY2tldDogUmVjdmVkIDEwNDAvMTYz ODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC44MDg1NDEgU29ja2V0OiBT ZW50IDE2LzE2IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPltsaWJzc2gyXSAwLjgwODU4MCBGYWls dXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzPEJS PltsaWJzc2gyXSAwLjgwODc0NSBTb2NrZXQ6IFJlY3ZlZCAzMi8xNjM4NCBieXRlcyB0byAw eDUwNTkxOCswPEJSPltsaWJzc2gyXSAwLjgwODg1NCBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0 ZXMgYXQgMHg1MDk5NTg8QlI+W2xpYnNzaDJdIDAuODA5MDk4IFNvY2tldDogUmVjdmVkIDg4 LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzA8QlI+RmluZ2VycHJpbnQ6IDhFIEZGIDlGIEFE IDU5IEJCIDI4IDBEIENFIEJEIDk2IDFDIDgwIDU2IDdCIDNBIERGIDY1IEZEIEQyIDxCUj5b bGlic3NoMl0gMC44MDk2MzYgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4 PEJSPltsaWJzc2gyXSAwLjgwOTY2OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9j ayB3YWl0aW5nPEJSPltsaWJzc2gyXSAwLjgxMDkxOSBTb2NrZXQ6IFJlY3ZlZCAxMDk2LzE2 Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzA8QlI+W2xpYnNzaDJdIDAuODExMDE1IFNDUDogT3Bl bmluZyBjaGFubmVsIGZvciBTQ1AgcmVjZWl2ZTxCUj5bbGlic3NoMl0gMC44MTEwNDQgQ29u bjogQWxsb2NhdGVkIG5ldyBjaGFubmVsIElEIzA8QlI+W2xpYnNzaDJdIDAuODExMDY4IENv bm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQgcGFjayAzMjc2ODxCUj5bbGlic3No Ml0gMC44MTExMTYgU29ja2V0OiBTZW50IDY4LzY4IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPlts aWJzc2gyXSAwLjgxMTE0NyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jazxCUj5b bGlic3NoMl0gMC44MTExNzcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgc3Rh cnRpbmcgdXAgY2hhbm5lbDxCUj5bbGlic3NoMl0gMC44MTEzNTIgU29ja2V0OiBSZWN2ZWQg ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC44MTE0MDggQ29u bjogQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCAtIElEOiAwLzAgd2luOiAxMDAwMDAvMjYyMTQ0 IHBhY2s6IDMyNzY4LzMyNzY4PEJSPltsaWJzc2gyXSAwLjgxMTQ0MCBDb25uOiBzdGFydGlu ZyByZXF1ZXN0KGV4ZWMpIG9uIGNoYW5uZWwgMC8wLCBtZXNzYWdlPXNjcCAtcGYgJy91c3Iv bG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG8nPEJSPltsaWJzc2gyXSAwLjgxMTQ4OSBTb2NrZXQ6 IFNlbnQgMTQ4LzE0OCBieXRlcyBhdCAweDUwOTk1ODxCUj5bbGlic3NoMl0gMC44MTE1MjEg RmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgcmVxdWVzdGluZyBTQ1Agc3RhcnR1 cDxCUj5bbGlic3NoMl0gMC44MTI0NjEgU29ja2V0OiBSZWN2ZWQgNzIvMTYzODQgYnl0ZXMg dG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0gMC44MTI1MTUgU0NQOiBTZW5kaW5nIGluaXRp YWwgd2FrZXVwPEJSPltsaWJzc2gyXSAwLjgxMjU0OSBDb25uOiBXcml0aW5nIDEgYnl0ZXMg b24gY2hhbm5lbCAwLzAsIHN0cmVhbSAjMDxCUj5bbGlic3NoMl0gMC44MTI1NzYgQ29ubjog U2VuZGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW1faWQ9MDxCUj5bbGlic3No Ml0gMC44MTI2MTYgU29ja2V0OiBTZW50IDUyLzUyIGJ5dGVzIGF0IDB4NTA5OTU4PEJSPlts aWJzc2gyXSAwLjgxMjY0NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZy b20gY2hhbm5lbCAwLzAgc3RyZWFtICMwPEJSPltsaWJzc2gyXSAwLjgxMjY3MSBGYWlsdXJl IEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jazxCUj5bbGlic3NoMl0gMC44MTI2OTUgRmFpbHVy ZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlPEJS PltsaWJzc2gyXSAwLjgzMDg0MiBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVz IGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwPEJSPltsaWJzc2gyXSAwLjgzMDg5MSBTb2Nr ZXQ6IFJlY3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj5bbGlic3NoMl0g MC44MzA5MzggQ29ubjogMzEgYnl0ZXMgcGFja2V0X2FkZCgpIGZvciAwLzAvNDY5MzExMDc2 NDMzOTM8QlI+W2xpYnNzaDJdIDAuODMwOTY4IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIHdvdWxk IGJsb2NrPEJSPltsaWJzc2gyXSAwLjgzMDk5MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3Vs ZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8QlI+W2xpYnNzaDJdIDAuODY3MzU3 IENvbm46IGNoYW5uZWxfcmVhZCgpIHdhbnRzIDEgYnl0ZXMgZnJvbSBjaGFubmVsIDAvMCBz dHJlYW0gIzA8QlI+W2xpYnNzaDJdIDAuODY3NDEyIFNvY2tldDogUmVjdmVkIDM2MC8xNjM4 NCBieXRlcyB0byAweDUwNTkxOCswPEJSPltsaWJzc2gyXSAwLjg2NzQ1OCBDb25uOiA5MiBi eXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0MzM5MzxCUj5bbGlic3NoMl0g MC44Njc0OTkgQ29ubjogQ2hhbm5lbCAwIHJlY2VpdmVkIHJlcXVlc3QgdHlwZSBleGl0LXN0 YXR1cyAod3IgMCk8QlI+W2xpYnNzaDJdIDAuODY3NTI4IENvbm46IEV4aXQgc3RhdHVzIDI1 NSByZWNlaXZlZCBmb3IgY2hhbm5lbCAwLzA8QlI+W2xpYnNzaDJdIDAuODY3NTYyIENvbm46 IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMDxCUj5bbGlic3NoMl0gMC44Njc1OTMg Q29ubjogRnJlZWluZyBjaGFubmVsIDAvMCByZXNvdXJjZXM8QlI+W2xpYnNzaDJdIDAuODY3 NjE5IENvbm46IFNlbmRpbmcgRU9GIG9uIGNoYW5uZWwgMC8wPEJSPltsaWJzc2gyXSAwLjg2 NzY1NyBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+W2xpYnNzaDJd IDAuODY3Njg2IENvbm46IENsb3NpbmcgY2hhbm5lbCAwLzA8QlI+W2xpYnNzaDJdIDAuODY3 NzE5IFNvY2tldDogU2VudCAzNi8zNiBieXRlcyBhdCAweDUwOTk1ODxCUj5bbGlic3NoMl0g MC44Njc3NjEgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPmFsbCBk b25lPEJSPjwvOmluY2x1ZGV0YWlsPjwvRElWPg0KPERJVj4tLS0tLS0tLS0tPC86aW5jbHVk ZXRhaWw+PC9ESVY+DQo8RElWPkkganVzdCBhZGQgb25lIGNvZGUgaW4gZXhhbXBsZS9zY3Au YyA8LzppbmNsdWRldGFpbD48L0RJVj4NCjxESVY+PC86aW5jbHVkZXRhaWw+Jm5ic3A7PC9E SVY+DQo8RElWPmxpYnNzaDJfdHJhY2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBM SUJTU0gyX1RSQUNFX1NPQ0tFVCB8IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFD RV9FUlJPUiApOzwvRElWPg0KPERJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPm15IGdj YyBpczo8L0RJVj4NCjxESVY+Z2NjIC12PEJSPlVzaW5nIGJ1aWx0LWluIHNwZWNzLjxCUj5U YXJnZXQ6IHg4Nl82NC1zdXNlLWxpbnV4PEJSPkNvbmZpZ3VyZWQgd2l0aDogLi4vY29uZmln dXJlIC0tZW5hYmxlLXRocmVhZHM9cG9zaXggLS1wcmVmaXg9L3VzciAtLXdpdGgtbG9jYWwt cHJlZml4PS91c3IvbG9jYWwgLS1pbmZvZGlyPS91c3Ivc2hhcmUvaW5mbyAtLW1hbmRpcj0v dXNyL3NoYXJlL21hbiAtLWxpYmRpcj0vdXNyL2xpYjY0IC0tbGliZXhlY2Rpcj0vdXNyL2xp YjY0IC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyxvYmpjLGZvcnRyYW4sb2JqLWMrKyxqYXZh LGFkYSAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9 L3Vzci9pbmNsdWRlL2MrKy80LjEuMiAtLWVuYWJsZS1zc3AgLS1kaXNhYmxlLWxpYnNzcCAt LWRpc2FibGUtbGliZ2NqIC0td2l0aC1zbGliZGlyPS9saWI2NCAtLXdpdGgtc3lzdGVtLXps aWIgLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCAtLWVuYWJsZS1saWJz dGRjeHgtYWxsb2NhdG9yPW5ldyAtLXByb2dyYW0tc3VmZml4PSAtLWVuYWJsZS12ZXJzaW9u LXNwZWNpZmljLXJ1bnRpbWUtbGlicyAtLXdpdGhvdXQtc3lzdGVtLWxpYnVud2luZCAtLXdp dGgtY3B1PWdlbmVyaWMgLS1ob3N0PXg4Nl82NC1zdXNlLWxpbnV4PEJSPlRocmVhZCBtb2Rl bDogcG9zaXg8QlI+Z2NjIHZlcnNpb24gNC4xLjIgMjAwNzAxMTUgKHByZXJlbGVhc2UpIChT VVNFIExpbnV4KTwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxESVY+SSBwdXp6bGUgb3Zl ciB0aGlzIG1hbnkgZGF5cy48L0RJVj4NCjxESVY+dGhhbmtzIGZvciB5b3VyIGhlbHAuPC9E SVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJViBzdHlsZT0iUEFERElORy1CT1RUT006IDJw eDsgUEFERElORy1MRUZUOiAwcHg7IFBBRERJTkctUklHSFQ6IDBweDsgRk9OVC1GQU1JTFk6 IEFyaWFsIE5hcnJvdzsgRk9OVC1TSVpFOiAxMnB4OyBQQURESU5HLVRPUDogMnB4Ij4tLS0t LS0tLS0tLS0tLS0tLS0mbmJzcDtPcmlnaW5hbCZuYnNwOy0tLS0tLS0tLS0tLS0tLS0tLTwv RElWPg0KPERJViBzdHlsZT0iUEFERElORy1CT1RUT006IDhweDsgUEFERElORy1MRUZUOiA4 cHg7IFBBRERJTkctUklHSFQ6IDhweDsgQkFDS0dST1VORDogI2VmZWZlZjsgRk9OVC1TSVpF OiAxMnB4OyBQQURESU5HLVRPUDogOHB4Ij4NCjxESVY+PEI+RnJvbTogPC9CPiZuYnNwOyJQ ZXRlciBTdHVnZSImbHQ7cGV0ZXJAc3R1Z2Uuc2UmZ3Q7OzwvRElWPg0KPERJVj48Qj5EYXRl OiA8L0I+Jm5ic3A7V2VkLCBPY3QgMTAsIDIwMTIgMTA6MDEgUE08L0RJVj4NCjxESVY+PEI+ VG86IDwvQj4mbmJzcDsibGlic3NoMi1kZXZlbCImbHQ7bGlic3NoMi1kZXZlbEBjb29sLmhh eHguc2UmZ3Q7OyA8V0JSPjwvRElWPg0KPERJVj48L0RJVj4NCjxESVY+PEI+U3ViamVjdDog PC9CPiZuYnNwO1JlOiBsaWJzc2gyX3NjcF9yZWN2IGlzIG5vdCBwb3B1bGF0aW5nIHN0cnVj dCBzdGF0PC9ESVY+PC9ESVY+DQo8RElWPjxCUj48L0RJVj6jxaP2o+Wj8iB3cm90ZTo8QlI+ Jmd0OyBJIGZvdW5kIHRoYXQgdGhlIGxpYmdjcnlwdC0xLjUuMCBpcyB1bnN1aXRlZCB0byBs aWJzc2gyPEJSPjxCUj5JIHRoaW5rIHRoZSBpc3N1ZSByZXF1aXJlcyBmdXJ0aGVyIGludmVz dGlnYXRpb24uPEJSPjxCUj48QlI+Jmd0OyBbbGlic3NoMl0gMC4zODY1MzggU29ja2V0OiBS ZWN2ZWQgMTA0MC8xNjM4NCBieXRlcyB0byAweDUwMmMzOCswPEJSPiZndDsgW2xpYnNzaDJd IDAuMzkwNDk2IFNvY2tldDogU2VudCAxNi8xNiBieXRlcyBhdCAweDUwNmM3ODxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjM5MDUzOSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhj aGFuZ2UgZW5jcnlwdGlvbiBrZXlzPEJSPiZndDsgW2xpYnNzaDJdIDAuMzkwNzM2IFNvY2tl dDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzA8QlI+PEJSPlRoZSBhYm92 ZSBkb2VzIG5vdCBpbmRpY2F0ZSBhbiBlcnJvci4gLTM3IG1lYW5zIHRoYXQgc29tZTxCUj5j b21tdW5pY2F0aW9uIGhhcyBub3QgeWV0IGNvbXBsZXRlZCwgc28gdGhlIGNhbGwgdG8gbGli c3NoMjxCUj5zaG91bGQgYmUgYXR0ZW1wdGVkIGFnYWluLjxCUj48QlI+fi9zcmMvbGlic3No MiAkIGdpdCBncmVwIC0tIC0zN3xjYXQ8QlI+aW5jbHVkZS9saWJzc2gyLmg6I2RlZmluZSBM SUJTU0gyX0VSUk9SX0VBR0FJTiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAtMzc8QlI+PEJSPjxCUj5QbGVhc2UgdHJ5IHRv IHVzZSBzb21lIG9mIHRoZSBleGFtcGxlIHByb2dyYW1zIGluY2x1ZGVkIHdpdGggbGlic3No Mi48QlI+VGhleSBzaG91bGQgd29yayBqdXN0IGZpbmUuIElmIHRoZXkgZG8gbm90IHdvcmsg dGhlbiBsZXQncyBmaW5kIHRoZTxCUj5wcm9ibGVtLjxCUj48QlI+bGliZ2NyeXB0IGhhcyBv bmUga25vd24gbGltaXRhdGlvbi4gbGlic3NoMiBjYW4gbm90IHVzZTxCUj5wYXNzcGhyYXNl LXByb3RlY3RlZCBwcml2YXRlIFNTSCBrZXlzIGZvciBhdXRoZW50aWNhdGlvbiwgaWYgYnVp bHQ8QlI+d2l0aCBsaWJnY3J5cHQuIFVzaW5nIHN1Y2gga2V5cyBpcyBvbmx5IHBvc3NpYmxl IHdoZW4gYnVpbHQgd2l0aDxCUj5PcGVuU1NMLiBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxkIHdv cmsuPEJSPjxCUj48QlI+Ly9QZXRlcjxCUj5fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXzxCUj5saWJzc2gyLWRldmVsIGh0dHA6Ly9jb29sLmhheHgu c2UvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL2xpYnNzaDItZGV2ZWw8QlI+DQo8RElWPjwv RElWPjwvOmluY2x1ZGV0YWlsPjwvRElWPg== ------=_NextPart_50767CAF_085AB040_06C103D2-- --===============1345375520== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1345375520==-- From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 10:27:53 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9B8RkgY006975; Thu, 11 Oct 2012 10:27:52 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9B8Rjb7006971 for ; Thu, 11 Oct 2012 10:27:45 +0200 Received: (qmail 9604 invoked by uid 501); 11 Oct 2012 08:27:45 -0000 Message-ID: <20121011082745.9603.qmail@stuge.se> Date: Thu, 11 Oct 2012 10:27:45 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: libssh2_scp_recv is not populating struct stat Mail-Followup-To: libssh2-devel@cool.haxx.se References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9B8RkgY006975 Ever wrote: > I using openssl-0.9.8p,I got the following text: > > ~/libssh2-1.4.2/example# ./scp 10.129.139.140 mqq mqq2005 /usr/local/app/everpan/hello > [libssh2] 0.735658 Socket: Sent 23/23 bytes at 0x2aaf4b32637d+0 > [libssh2] 0.735760 Socket: Error recving 1 bytes: 11 > [libssh2] 0.735792 Failure Event: -37 - Failed getting banner > [libssh2] 0.736589 Socket: Recved 1 bytes banner > [libssh2] 0.736630 Socket: Recved 1 bytes banner > [libssh2] 0.736659 Socket: Recved 1 bytes banner > [libssh2] 0.736686 Socket: Recved 1 bytes banner > [libssh2] 0.736711 Socket: Recved 1 bytes banner > [libssh2] 0.736736 Socket: Recved 1 bytes banner > [libssh2] 0.736760 Socket: Recved 1 bytes banner > [libssh2] 0.736784 Socket: Recved 1 bytes banner > [libssh2] 0.736967 Socket: Recved 1 bytes banner > [libssh2] 0.737001 Socket: Recved 1 bytes banner > [libssh2] 0.737026 Socket: Recved 1 bytes banner > [libssh2] 0.737085 Socket: Recved 1 bytes banner > [libssh2] 0.737116 Socket: Recved 1 bytes banner > [libssh2] 0.737141 Socket: Recved 1 bytes banner > [libssh2] 0.737314 Socket: Recved 1 bytes banner > [libssh2] 0.738757 Socket: Recved 1 bytes banner > [libssh2] 0.738783 Socket: Recved 1 bytes banner > [libssh2] 0.738807 Socket: Recved 1 bytes banner > [libssh2] 0.738832 Socket: Recved 1 bytes banner > [libssh2] 0.738856 Socket: Recved 1 bytes banner > [libssh2] 0.738880 Socket: Recved 1 bytes banner > [libssh2] 0.738904 Socket: Recved 1 bytes banner > [libssh2] 0.738927 Socket: Recved 1 bytes banner > [libssh2] 0.738951 Socket: Recved 1 bytes banner > [libssh2] 0.738975 Socket: Recved 1 bytes banner > [libssh2] 0.739006 Socket: Recved 1 bytes banner > [libssh2] 0.739031 Socket: Recved 1 bytes banner > [libssh2] 0.739055 Socket: Recved 1 bytes banner > [libssh2] 0.739079 Socket: Recved 1 bytes banner > [libssh2] 0.739115 Socket: Recved 1 bytes banner > [libssh2] 0.739139 Socket: Recved 1 bytes banner > [libssh2] 0.739164 Socket: Recved 1 bytes banner > [libssh2] 0.739188 Socket: Recved 1 bytes banner > [libssh2] 0.739212 Socket: Recved 1 bytes banner > [libssh2] 0.739236 Socket: Recved 1 bytes banner > [libssh2] 0.739260 Socket: Recved 1 bytes banner > [libssh2] 0.739298 Socket: Recved 1 bytes banner > [libssh2] 0.739325 Socket: Recved 1 bytes banner > [libssh2] 0.739350 Socket: Recved 1 bytes banner > [libssh2] 0.739374 Socket: Recved 1 bytes banner > [libssh2] 0.739401 Socket: Recved 1 bytes banner > [libssh2] 0.739425 Socket: Recved 1 bytes banner > [libssh2] 0.739451 Socket: Recved 1 bytes banner > [libssh2] 0.739475 Socket: Recved 1 bytes banner > [libssh2] 0.739499 Socket: Recved 1 bytes banner > [libssh2] 0.739523 Socket: Recved 1 bytes banner > [libssh2] 0.739547 Socket: Recved 1 bytes banner > [libssh2] 0.739571 Socket: Recved 1 bytes banner > [libssh2] 0.739596 Socket: Recved 1 bytes banner > [libssh2] 0.739620 Socket: Recved 1 bytes banner > [libssh2] 0.739644 Socket: Recved 1 bytes banner > [libssh2] 0.739833 Socket: Sent 648/648 bytes at 0x509958 > [libssh2] 0.739874 Socket: Recved 488/16384 bytes to 0x505918+0 > [libssh2] 0.740190 Socket: Sent 144/144 bytes at 0x509958 > [libssh2] 0.740225 Failure Event: -37 - Unable to exchange encryption keys > [libssh2] 0.806597 Socket: Recved 1040/16384 bytes to 0x505918+0 > [libssh2] 0.808541 Socket: Sent 16/16 bytes at 0x509958 > [libssh2] 0.808580 Failure Event: -37 - Unable to exchange encryption keys > [libssh2] 0.808745 Socket: Recved 32/16384 bytes to 0x505918+0 > [libssh2] 0.808854 Socket: Sent 52/52 bytes at 0x509958 > [libssh2] 0.809098 Socket: Recved 88/16384 bytes to 0x505918+0 > Fingerprint: 8E FF 9F AD 59 BB 28 0D CE BD 96 1C 80 56 7B 3A DF 65 FD D2 > [libssh2] 0.809636 Socket: Sent 84/84 bytes at 0x509958 > [libssh2] 0.809668 Failure Event: -37 - Would block waiting > [libssh2] 0.810919 Socket: Recved 1096/16384 bytes to 0x505918+0 > [libssh2] 0.811015 SCP: Opening channel for SCP receive > [libssh2] 0.811044 Conn: Allocated new channel ID#0 > [libssh2] 0.811068 Conn: Opening Channel - win 262144 pack 32768 > [libssh2] 0.811116 Socket: Sent 68/68 bytes at 0x509958 > [libssh2] 0.811147 Failure Event: -37 - Would block > [libssh2] 0.811177 Failure Event: -37 - Would block starting up channel > [libssh2] 0.811352 Socket: Recved 88/16384 bytes to 0x505918+0 > [libssh2] 0.811408 Conn: Connection Established - ID: 0/0 win: 100000/262144 pack: 32768/32768 > [libssh2] 0.811440 Conn: starting request(exec) on channel 0/0, message=scp -pf '/usr/local/app/everpan/hello' > [libssh2] 0.811489 Socket: Sent 148/148 bytes at 0x509958 > [libssh2] 0.811521 Failure Event: -37 - Would block requesting SCP startup > [libssh2] 0.812461 Socket: Recved 72/16384 bytes to 0x505918+0 > [libssh2] 0.812515 SCP: Sending initial wakeup > [libssh2] 0.812549 Conn: Writing 1 bytes on channel 0/0, stream #0 > [libssh2] 0.812576 Conn: Sending 1 bytes on channel 0/0, stream_id=0 > [libssh2] 0.812616 Socket: Sent 52/52 bytes at 0x509958 > [libssh2] 0.812644 Conn: channel_read() wants 1 bytes from channel 0/0 stream #0 > [libssh2] 0.812671 Failure Event: -37 - would block > [libssh2] 0.812695 Failure Event: -37 - Would block waiting for SCP response > [libssh2] 0.830842 Conn: channel_read() wants 1 bytes from channel 0/0 stream #0 > [libssh2] 0.830891 Socket: Recved 120/16384 bytes to 0x505918+0 > [libssh2] 0.830938 Conn: 31 bytes packet_add() for 0/0/46931107643393 > [libssh2] 0.830968 Failure Event: -37 - would block > [libssh2] 0.830993 Failure Event: -37 - Would block waiting for SCP response > [libssh2] 0.867357 Conn: channel_read() wants 1 bytes from channel 0/0 stream #0 > [libssh2] 0.867412 Socket: Recved 360/16384 bytes to 0x505918+0 > [libssh2] 0.867458 Conn: 92 bytes packet_add() for 0/0/46931107643393 > [libssh2] 0.867499 Conn: Channel 0 received request type exit-status (wr 0) > [libssh2] 0.867528 Conn: Exit status 255 received for channel 0/0 > [libssh2] 0.867562 Conn: Close received for channel 0/0 > [libssh2] 0.867593 Conn: Freeing channel 0/0 resources > [libssh2] 0.867619 Conn: Sending EOF on channel 0/0 > [libssh2] 0.867657 Socket: Sent 36/36 bytes at 0x509958 > [libssh2] 0.867686 Conn: Closing channel 0/0 > [libssh2] 0.867719 Socket: Sent 36/36 bytes at 0x509958 > [libssh2] 0.867761 Socket: Sent 84/84 bytes at 0x509958 > all done The above output looks all right. > I just add one code in example/scp.c > libssh2_trace(session,LIBSSH2_TRACE_CONN | LIBSSH2_TRACE_SOCKET | LIBSSH2_TRACE_SCP | LIBSSH2_TRACE_ERROR ); Please change to: libssh2_trace(session, ~0); and then send complete output for when the example uses libgcrypt. Thanks! //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 12:10:26 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BAA7fA005434; Thu, 11 Oct 2012 12:10:23 +0200 Received: from smtpbg22.qq.com (SMTPBG22.QQ.COM [183.60.61.208]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BAA1ju004742 for ; Thu, 11 Oct 2012 12:10:02 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail90t1349950195t1296511 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" Subject: Re: libssh2_scp_recv is not populating struct stat Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_50769AF3_094D7588_7C17F916" Content-Transfer-Encoding: 8Bit Date: Thu, 11 Oct 2012 18:09:55 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 1464751587 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. ------=_NextPart_50769AF3_094D7588_7C17F916 Content-Type: multipart/alternative; boundary="----=_NextPart_50769AF3_094D7588_3F841146"; ------=_NextPart_50769AF3_094D7588_3F841146 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 aGksUGV0ZXIsDQogICAgIFBsZWFzZSBjaGVjayB0aGUgYXR0YWNobWVudHMuDQogIA0KIFRo YW5rcy4NCiAtLS0tLS0tLS0tLS0tLS0tLS0gT3JpZ2luYWwgLS0tLS0tLS0tLS0tLS0tLS0t DQogIEZyb206ICAiUGV0ZXIgU3R1Z2UiPHBldGVyQHN0dWdlLnNlPjsNCiBEYXRlOiAgVGh1 LCBPY3QgMTEsIDIwMTIgMDQ6MjcgUE0NCiBUbzogICJsaWJzc2gyLWRldmVsIjxsaWJzc2gy LWRldmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1YmplY3Q6ICBSZTogbGlic3NoMl9zY3Bf cmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdA0KDQogDQoNCqPFo/aj5aPyIHdy b3RlOg0KPiAgSSB1c2luZyBvcGVuc3NsLTAuOS44cCxJIGdvdCB0aGUgZm9sbG93aW5nIHRl eHQ6DQo+ICAgDQo+ICB+L2xpYnNzaDItMS40LjIvZXhhbXBsZSMgLi9zY3AgMTAuMTI5LjEz OS4xNDAgbXFxIG1xcTIwMDUgL3Vzci9sb2NhbC9hcHAvZXZlcnBhbi9oZWxsbw0KPiBbbGli c3NoMl0gMC43MzU2NTggU29ja2V0OiBTZW50IDIzLzIzIGJ5dGVzIGF0IDB4MmFhZjRiMzI2 MzdkKzANCj4gW2xpYnNzaDJdIDAuNzM1NzYwIFNvY2tldDogRXJyb3IgcmVjdmluZyAxIGJ5 dGVzOiAxMQ0KPiBbbGlic3NoMl0gMC43MzU3OTIgRmFpbHVyZSBFdmVudDogLTM3IC0gRmFp bGVkIGdldHRpbmcgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjU4OSBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY2MzAgU29ja2V0OiBSZWN2ZWQg MSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NjU5IFNvY2tldDogUmVjdmVkIDEg Ynl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjY4NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY3MTEgU29ja2V0OiBSZWN2ZWQgMSBieXRl cyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NzM2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg YmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjc2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcg0KPiBbbGlic3NoMl0gMC43MzY3ODQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u ZXINCj4gW2xpYnNzaDJdIDAuNzM2OTY3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy DQo+IFtsaWJzc2gyXSAwLjczNzAwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0K PiBbbGlic3NoMl0gMC43MzcwMjYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4g W2xpYnNzaDJdIDAuNzM3MDg1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFts aWJzc2gyXSAwLjczNzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGli c3NoMl0gMC43MzcxNDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNz aDJdIDAuNzM3MzE0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gy XSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0g MC43Mzg3ODMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAu NzM4ODA3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjcz ODgzMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzg4 NTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM4ODgw IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczODkwNCBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzg5MjcgU29j a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM4OTUxIFNvY2tl dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczODk3NSBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkwMDYgU29ja2V0OiBS ZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MDMxIFNvY2tldDogUmVj dmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTA1NSBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkwNzkgU29ja2V0OiBSZWN2ZWQg MSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTE1IFNvY2tldDogUmVjdmVkIDEg Ynl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTEzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkxNjQgU29ja2V0OiBSZWN2ZWQgMSBieXRl cyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTg4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg YmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcg0KPiBbbGlic3NoMl0gMC43MzkyMzYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u ZXINCj4gW2xpYnNzaDJdIDAuNzM5MjYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy DQo+IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0K PiBbbGlic3NoMl0gMC43MzkzMjUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4g W2xpYnNzaDJdIDAuNzM5MzUwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFts aWJzc2gyXSAwLjczOTM3NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGli c3NoMl0gMC43Mzk0MDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNz aDJdIDAuNzM5NDI1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gy XSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0g MC43Mzk0NzUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAu NzM5NDk5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjcz OTUyMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzk1 NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5NTcx IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTU5NiBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzk2MjAgU29j a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5NjQ0IFNvY2tl dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTgzMyBTb2NrZXQ6 IFNlbnQgNjQ4LzY0OCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC43Mzk4NzQg U29ja2V0OiBSZWN2ZWQgNDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNz aDJdIDAuNzQwMTkwIFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVzIGF0IDB4NTA5OTU4DQo+ IFtsaWJzc2gyXSAwLjc0MDIyNSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhj aGFuZ2UgZW5jcnlwdGlvbiBrZXlzDQo+IFtsaWJzc2gyXSAwLjgwNjU5NyBTb2NrZXQ6IFJl Y3ZlZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJdIDAuODA4 NTQxIFNvY2tldDogU2VudCAxNi8xNiBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0g MC44MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5 cHRpb24ga2V5cw0KPiBbbGlic3NoMl0gMC44MDg3NDUgU29ja2V0OiBSZWN2ZWQgMzIvMTYz ODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBbbGlic3NoMl0gMC44MDg4NTQgU29ja2V0OiBT ZW50IDUyLzUyIGJ5dGVzIGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gyXSAwLjgwOTA5OCBTb2Nr ZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswDQo+IEZpbmdlcnByaW50 OiA4RSBGRiA5RiBBRCA1OSBCQiAyOCAwRCBDRSBCRCA5NiAxQyA4MCA1NiA3QiAzQSBERiA2 NSBGRCBEMiANCj4gW2xpYnNzaDJdIDAuODA5NjM2IFNvY2tldDogU2VudCA4NC84NCBieXRl cyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MDk2NjggRmFpbHVyZSBFdmVudDogLTM3 IC0gV291bGQgYmxvY2sgd2FpdGluZw0KPiBbbGlic3NoMl0gMC44MTA5MTkgU29ja2V0OiBS ZWN2ZWQgMTA5Ni8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswDQo+IFtsaWJzc2gyXSAwLjgx MTAxNSBTQ1A6IE9wZW5pbmcgY2hhbm5lbCBmb3IgU0NQIHJlY2VpdmUNCj4gW2xpYnNzaDJd IDAuODExMDQ0IENvbm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJRCMwDQo+IFtsaWJzc2gy XSAwLjgxMTA2OCBDb25uOiBPcGVuaW5nIENoYW5uZWwgLSB3aW4gMjYyMTQ0IHBhY2sgMzI3 NjgNCj4gW2xpYnNzaDJdIDAuODExMTE2IFNvY2tldDogU2VudCA2OC82OCBieXRlcyBhdCAw eDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTExNDcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291 bGQgYmxvY2sNCj4gW2xpYnNzaDJdIDAuODExMTc3IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdv dWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwNCj4gW2xpYnNzaDJdIDAuODExMzUyIFNv Y2tldDogUmVjdmVkIDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJd IDAuODExNDA4IENvbm46IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQgLSBJRDogMC8wIHdpbjog MTAwMDAwLzI2MjE0NCBwYWNrOiAzMjc2OC8zMjc2OA0KPiBbbGlic3NoMl0gMC44MTE0NDAg Q29ubjogc3RhcnRpbmcgcmVxdWVzdChleGVjKSBvbiBjaGFubmVsIDAvMCwgbWVzc2FnZT1z Y3AgLXBmICcvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvJw0KPiBbbGlic3NoMl0gMC44 MTE0ODkgU29ja2V0OiBTZW50IDE0OC8xNDggYnl0ZXMgYXQgMHg1MDk5NTgNCj4gW2xpYnNz aDJdIDAuODExNTIxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3Rp bmcgU0NQIHN0YXJ0dXANCj4gW2xpYnNzaDJdIDAuODEyNDYxIFNvY2tldDogUmVjdmVkIDcy LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJdIDAuODEyNTE1IFNDUDog U2VuZGluZyBpbml0aWFsIHdha2V1cA0KPiBbbGlic3NoMl0gMC44MTI1NDkgQ29ubjogV3Jp dGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzANCj4gW2xpYnNzaDJdIDAu ODEyNTc2IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFtX2lk PTANCj4gW2xpYnNzaDJdIDAuODEyNjE2IFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAw eDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTI2NDQgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2Fu dHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMA0KPiBbbGlic3NoMl0gMC44 MTI2NzEgRmFpbHVyZSBFdmVudDogLTM3IC0gd291bGQgYmxvY2sNCj4gW2xpYnNzaDJdIDAu ODEyNjk1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHdhaXRpbmcgZm9yIFND UCByZXNwb25zZQ0KPiBbbGlic3NoMl0gMC44MzA4NDIgQ29ubjogY2hhbm5lbF9yZWFkKCkg d2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMA0KPiBbbGlic3NoMl0g MC44MzA4OTEgU29ja2V0OiBSZWN2ZWQgMTIwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzAN Cj4gW2xpYnNzaDJdIDAuODMwOTM4IENvbm46IDMxIGJ5dGVzIHBhY2tldF9hZGQoKSBmb3Ig MC8wLzQ2OTMxMTA3NjQzMzkzDQo+IFtsaWJzc2gyXSAwLjgzMDk2OCBGYWlsdXJlIEV2ZW50 OiAtMzcgLSB3b3VsZCBibG9jaw0KPiBbbGlic3NoMl0gMC44MzA5OTMgRmFpbHVyZSBFdmVu dDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlDQo+IFtsaWJz c2gyXSAwLjg2NzM1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZyb20g Y2hhbm5lbCAwLzAgc3RyZWFtICMwDQo+IFtsaWJzc2gyXSAwLjg2NzQxMiBTb2NrZXQ6IFJl Y3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBbbGlic3NoMl0gMC44Njc0 NTggQ29ubjogOTIgYnl0ZXMgcGFja2V0X2FkZCgpIGZvciAwLzAvNDY5MzExMDc2NDMzOTMN Cj4gW2xpYnNzaDJdIDAuODY3NDk5IENvbm46IENoYW5uZWwgMCByZWNlaXZlZCByZXF1ZXN0 IHR5cGUgZXhpdC1zdGF0dXMgKHdyIDApDQo+IFtsaWJzc2gyXSAwLjg2NzUyOCBDb25uOiBF eGl0IHN0YXR1cyAyNTUgcmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wDQo+IFtsaWJzc2gyXSAw Ljg2NzU2MiBDb25uOiBDbG9zZSByZWNlaXZlZCBmb3IgY2hhbm5lbCAwLzANCj4gW2xpYnNz aDJdIDAuODY3NTkzIENvbm46IEZyZWVpbmcgY2hhbm5lbCAwLzAgcmVzb3VyY2VzDQo+IFts aWJzc2gyXSAwLjg2NzYxOSBDb25uOiBTZW5kaW5nIEVPRiBvbiBjaGFubmVsIDAvMA0KPiBb bGlic3NoMl0gMC44Njc2NTcgU29ja2V0OiBTZW50IDM2LzM2IGJ5dGVzIGF0IDB4NTA5OTU4 DQo+IFtsaWJzc2gyXSAwLjg2NzY4NiBDb25uOiBDbG9zaW5nIGNoYW5uZWwgMC8wDQo+IFts aWJzc2gyXSAwLjg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTgN Cj4gW2xpYnNzaDJdIDAuODY3NzYxIFNvY2tldDogU2VudCA4NC84NCBieXRlcyBhdCAweDUw OTk1OA0KPiBhbGwgZG9uZQ0KDQpUaGUgYWJvdmUgb3V0cHV0IGxvb2tzIGFsbCByaWdodC4N Cg0KDQo+ICBJIGp1c3QgYWRkIG9uZSBjb2RlIGluIGV4YW1wbGUvc2NwLmMNCj4gIGxpYnNz aDJfdHJhY2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBMSUJTU0gyX1RSQUNFX1NP Q0tFVCB8IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFDRV9FUlJPUiApOw0KDQpQ bGVhc2UgY2hhbmdlIHRvOg0KDQpsaWJzc2gyX3RyYWNlKHNlc3Npb24sIH4wKTsNCg0KYW5k IHRoZW4gc2VuZCBjb21wbGV0ZSBvdXRwdXQgZm9yIHdoZW4gdGhlIGV4YW1wbGUgdXNlcyBs aWJnY3J5cHQuDQoNClRoYW5rcyENCg0KDQovL1BldGVyDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KbGlic3NoMi1kZXZlbCBodHRwOi8vY29v bC5oYXh4LnNlL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJzc2gyLWRldmVs ------=_NextPart_50769AF3_094D7588_3F841146 Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PERJVj48aW5jbHVkZXRhaWw+DQo8RElWPmhpLFBldGVyLDwvRElWPg0KPERJVj4mbmJzcDsm bmJzcDsmbmJzcDsgUGxlYXNlIGNoZWNrIHRoZSBhdHRhY2htZW50cy48L0RJVj4NCjxESVY+ Jm5ic3A7PC9ESVY+DQo8RElWPlRoYW5rcy48L0RJVj4NCjxESVY+LS0tLS0tLS0tLS0tLS0t LS0tJm5ic3A7T3JpZ2luYWwmbmJzcDstLS0tLS0tLS0tLS0tLS0tLS08L0RJVj4NCjxESVYg c3R5bGU9IlBBRERJTkctQk9UVE9NOiA4cHg7IFBBRERJTkctTEVGVDogOHB4OyBQQURESU5H LVJJR0hUOiA4cHg7IEJBQ0tHUk9VTkQ6ICNlZmVmZWY7IEZPTlQtU0laRTogMTJweDsgUEFE RElORy1UT1A6IDhweCI+DQo8RElWPjxCPkZyb206IDwvQj4mbmJzcDsiUGV0ZXIgU3R1Z2Ui Jmx0O3BldGVyQHN0dWdlLnNlJmd0Ozs8L0RJVj4NCjxESVY+PEI+RGF0ZTogPC9CPiZuYnNw O1RodSwgT2N0IDExLCAyMDEyIDA0OjI3IFBNPC9ESVY+DQo8RElWPjxCPlRvOiA8L0I+Jm5i c3A7ImxpYnNzaDItZGV2ZWwiJmx0O2xpYnNzaDItZGV2ZWxAY29vbC5oYXh4LnNlJmd0Ozsg PFdCUj48L0RJVj4NCjxESVY+PC9ESVY+DQo8RElWPjxCPlN1YmplY3Q6IDwvQj4mbmJzcDtS ZTogbGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdDwvRElW PjwvRElWPg0KPERJVj48QlI+PC9ESVY+o8Wj9qPlo/Igd3JvdGU6PEJSPiZndDsmbmJzcDsg SSB1c2luZyBvcGVuc3NsLTAuOS44cCxJIGdvdCB0aGUgZm9sbG93aW5nIHRleHQ6PEJSPiZn dDsmbmJzcDsmbmJzcDsgPEJSPiZndDsmbmJzcDsgfi9saWJzc2gyLTEuNC4yL2V4YW1wbGUj IC4vc2NwIDEwLjEyOS4xMzkuMTQwIG1xcSBtcXEyMDA1IC91c3IvbG9jYWwvYXBwL2V2ZXJw YW4vaGVsbG88QlI+Jmd0OyBbbGlic3NoMl0gMC43MzU2NTggU29ja2V0OiBTZW50IDIzLzIz IGJ5dGVzIGF0IDB4MmFhZjRiMzI2MzdkKzA8QlI+Jmd0OyBbbGlic3NoMl0gMC43MzU3NjAg U29ja2V0OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExPEJSPiZndDsgW2xpYnNzaDJdIDAu NzM1NzkyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIEZhaWxlZCBnZXR0aW5nIGJhbm5lcjxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjczNjU4OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjYzMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY1OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY4NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjcxMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjczNiBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjc2MCBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjc4NCBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjk2NyBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzAwMSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzAyNiBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzA4 NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz NzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjczNzE0MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjczNzMxNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts aWJzc2gyXSAwLjczODc4MyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjczODgwNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjczODgzMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg1NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg4MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODkwNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODkyNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODk1MSBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODk3NSBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTAwNiBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTAzMSBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTA1NSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTA3OSBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTEx NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz OTEzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjczOTE2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjczOTE4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts aWJzc2gyXSAwLjczOTIzNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjczOTI2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTMyNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM1MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM3NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQyNSBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQ3NSBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTQ5OSBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTUyMyBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU0NyBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU3 MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz OTU5NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjczOTYyMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjczOTY0NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjczOTgzMyBTb2NrZXQ6IFNlbnQgNjQ4LzY0OCBieXRlcyBhdCAweDUwOTk1ODxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTg3NCBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0 ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjc0MDE5MCBTb2NrZXQ6IFNl bnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjc0MDIy NSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBr ZXlzPEJSPiZndDsgW2xpYnNzaDJdIDAuODA2NTk3IFNvY2tldDogUmVjdmVkIDEwNDAvMTYz ODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwODU0MSBTb2Nr ZXQ6IFNlbnQgMTYvMTYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44 MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRp b24ga2V5czxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwODc0NSBTb2NrZXQ6IFJlY3ZlZCAzMi8x NjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZndDsgW2xpYnNzaDJdIDAuODA4ODU0IFNv Y2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUwOTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjgwOTA5OCBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJS PiZndDsgRmluZ2VycHJpbnQ6IDhFIEZGIDlGIEFEIDU5IEJCIDI4IDBEIENFIEJEIDk2IDFD IDgwIDU2IDdCIDNBIERGIDY1IEZEIEQyIDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwOTYzNiBT b2NrZXQ6IFNlbnQgODQvODQgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0g MC44MDk2NjggRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZzxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjgxMDkxOSBTb2NrZXQ6IFJlY3ZlZCAxMDk2LzE2Mzg0IGJ5dGVz IHRvIDB4NTA1OTE4KzA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTEwMTUgU0NQOiBPcGVuaW5n IGNoYW5uZWwgZm9yIFNDUCByZWNlaXZlPEJSPiZndDsgW2xpYnNzaDJdIDAuODExMDQ0IENv bm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJRCMwPEJSPiZndDsgW2xpYnNzaDJdIDAuODEx MDY4IENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQgcGFjayAzMjc2ODxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjgxMTExNiBTb2NrZXQ6IFNlbnQgNjgvNjggYnl0ZXMgYXQgMHg1 MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTExNDcgRmFpbHVyZSBFdmVudDogLTM3IC0g V291bGQgYmxvY2s8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTExNzcgRmFpbHVyZSBFdmVudDog LTM3IC0gV291bGQgYmxvY2sgc3RhcnRpbmcgdXAgY2hhbm5lbDxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjgxMTM1MiBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCsw PEJSPiZndDsgW2xpYnNzaDJdIDAuODExNDA4IENvbm46IENvbm5lY3Rpb24gRXN0YWJsaXNo ZWQgLSBJRDogMC8wIHdpbjogMTAwMDAwLzI2MjE0NCBwYWNrOiAzMjc2OC8zMjc2ODxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjgxMTQ0MCBDb25uOiBzdGFydGluZyByZXF1ZXN0KGV4ZWMpIG9u IGNoYW5uZWwgMC8wLCBtZXNzYWdlPXNjcCAtcGYgJy91c3IvbG9jYWwvYXBwL2V2ZXJwYW4v aGVsbG8nPEJSPiZndDsgW2xpYnNzaDJdIDAuODExNDg5IFNvY2tldDogU2VudCAxNDgvMTQ4 IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPiZndDsgW2xpYnNzaDJdIDAuODExNTIxIEZhaWx1cmUg RXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3RpbmcgU0NQIHN0YXJ0dXA8QlI+Jmd0 OyBbbGlic3NoMl0gMC44MTI0NjEgU29ja2V0OiBSZWN2ZWQgNzIvMTYzODQgYnl0ZXMgdG8g MHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjUxNSBTQ1A6IFNlbmRpbmcgaW5p dGlhbCB3YWtldXA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI1NDkgQ29ubjogV3JpdGluZyAx IGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzA8QlI+Jmd0OyBbbGlic3NoMl0gMC44 MTI1NzYgQ29ubjogU2VuZGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW1faWQ9 MDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjYxNiBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMg YXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI2NDQgQ29ubjogY2hhbm5lbF9y ZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjgxMjY3MSBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jazxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjY5NSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBi bG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8QlI+Jmd0OyBbbGlic3NoMl0gMC44MzA4 NDIgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8w IHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDg5MSBTb2NrZXQ6IFJlY3ZlZCAx MjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDkz OCBDb25uOiAzMSBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0MzM5MzxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk2OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBi bG9jazxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk5MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBX b3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8QlI+Jmd0OyBbbGlic3NoMl0g MC44NjczNTcgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5u ZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQxMiBTb2NrZXQ6IFJl Y3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw Ljg2NzQ1OCBDb25uOiA5MiBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0 MzM5MzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQ5OSBDb25uOiBDaGFubmVsIDAgcmVjZWl2 ZWQgcmVxdWVzdCB0eXBlIGV4aXQtc3RhdHVzICh3ciAwKTxCUj4mZ3Q7IFtsaWJzc2gyXSAw Ljg2NzUyOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUgcmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8w PEJSPiZndDsgW2xpYnNzaDJdIDAuODY3NTYyIENvbm46IENsb3NlIHJlY2VpdmVkIGZvciBj aGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzU5MyBDb25uOiBGcmVlaW5nIGNo YW5uZWwgMC8wIHJlc291cmNlczxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzYxOSBDb25uOiBT ZW5kaW5nIEVPRiBvbiBjaGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzY1NyBT b2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0g MC44Njc2ODYgQ29ubjogQ2xvc2luZyBjaGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw Ljg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBb bGlic3NoMl0gMC44Njc3NjEgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4 PEJSPiZndDsgYWxsIGRvbmU8QlI+PEJSPlRoZSBhYm92ZSBvdXRwdXQgbG9va3MgYWxsIHJp Z2h0LjxCUj48QlI+PEJSPiZndDsmbmJzcDsgSSBqdXN0IGFkZCBvbmUgY29kZSBpbiBleGFt cGxlL3NjcC5jPEJSPiZndDsmbmJzcDsgbGlic3NoMl90cmFjZShzZXNzaW9uLExJQlNTSDJf VFJBQ0VfQ09OTiB8IExJQlNTSDJfVFJBQ0VfU09DS0VUIHwgTElCU1NIMl9UUkFDRV9TQ1Ag fCBMSUJTU0gyX1RSQUNFX0VSUk9SICk7PEJSPjxCUj5QbGVhc2UgY2hhbmdlIHRvOjxCUj48 QlI+bGlic3NoMl90cmFjZShzZXNzaW9uLCB+MCk7PEJSPjxCUj5hbmQgdGhlbiBzZW5kIGNv bXBsZXRlIG91dHB1dCBmb3Igd2hlbiB0aGUgZXhhbXBsZSB1c2VzIGxpYmdjcnlwdC48QlI+ PEJSPlRoYW5rcyE8QlI+PEJSPjxCUj4vL1BldGVyPEJSPl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fPEJSPmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nv b2wuaGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vbGlic3NoMi1kZXZlbDxCUj4N CjxESVY+PC9ESVY+PC9pbmNsdWRldGFpbD48L0RJVj4= ------=_NextPart_50769AF3_094D7588_3F841146-- ------=_NextPart_50769AF3_094D7588_7C17F916 Content-Type: application/octet-stream; charset="gb18030"; name="scp_libgcrypt.log" Content-Disposition: attachment; filename="scp_libgcrypt.log" Content-Transfer-Encoding: base64 W2xpYnNzaDJdIDAuOTgyMDU1IFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2Nr ZXQgNQpbbGlic3NoMl0gMC45ODIxMTUgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NI LTIuMC1saWJzc2gyXzEuNC4yCltsaWJzc2gyXSAwLjk4MjEyNyBTb2NrZXQ6IFNlbnQgMjMv MjMgYnl0ZXMgYXQgMHgyYWQ0NGEzZGVlNWQrMApbbGlic3NoMl0gMC45ODIxMzUgU29ja2V0 OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExCltsaWJzc2gyXSAwLjk4MjEzOCBGYWlsdXJl IEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgyOTY3 IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4Mjk3NyBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODI5ODIgU29ja2V0OiBS ZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgyOTg2IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4Mjk5MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODI5OTMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXIKW2xpYnNzaDJdIDAuOTgyOTk3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy CltsaWJzc2gyXSAwLjk4MzAwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGli c3NoMl0gMC45ODMwMDUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJd IDAuOTgzMDA5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4 MzAxMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwMTcg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDIxIFNvY2tl dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzAyNCBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwMjggU29ja2V0OiBSZWN2ZWQg MSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDMyIFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzAzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcgpbbGlic3NoMl0gMC45ODMwNDIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIK W2xpYnNzaDJdIDAuOTgzMDQ1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJz c2gyXSAwLjk4MzA0OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0g MC45ODMwNTIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgz MDU1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzA1OCBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwNjEgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDY0IFNvY2tldDogUmVj dmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzA2NyBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwNzAgU29ja2V0OiBSZWN2ZWQgMSBieXRl cyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDczIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyCltsaWJzc2gyXSAwLjk4MzA3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpb bGlic3NoMl0gMC45ODMwNzggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNz aDJdIDAuOTgzMDgxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAw Ljk4MzA4NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMw ODcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDkwIFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzA5MiBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMwOTUgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMDk4IFNvY2tldDogUmVjdmVkIDEg Ynl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzEwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcgpbbGlic3NoMl0gMC45ODMxMDQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u ZXIKW2xpYnNzaDJdIDAuOTgzMTA3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyClts aWJzc2gyXSAwLjk4MzEwOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3No Ml0gMC45ODMxMTIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAu OTgzMTE1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzEx OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMxMjEgU29j a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMTI0IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjk4MzEyNyBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC45ODMxMjkgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuOTgzMTMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg YmFubmVyCltsaWJzc2gyXSAwLjk4MzEzNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cgpbbGlic3NoMl0gMC45ODMxMzggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xp YnNzaDJdIDAuOTgzMTQxIFRyYW5zcG9ydDogUmVjZWl2ZWQgQmFubmVyOiBTU0gtMi4wLTMu Mi45LjEgU1NIIFNlY3VyZSBTaGVsbCAobm9uLWNvbW1lcmNpYWwpCltsaWJzc2gyXSAwLjk4 MzM5NiBLZXkgRXg6IFNlbnQgS0VYOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsZGlm ZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSxkaWZmaWUtaGVsbG1hbi1ncm91cDEt c2hhMQpbbGlic3NoMl0gMC45ODM0MDIgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Es c3NoLWRzcwpbbGlic3NoMl0gMC45ODM0MDUgS2V5IEV4OiBTZW50IENSWVBUX0NTOiBhZXMx MjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0Bs eXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFlczEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2Zv dXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywzZGVzLWNiYwpbbGlic3NoMl0gMC45ODM0MDgg S2V5IEV4OiBTZW50IENSWVBUX1NDOiBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0 cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFl czEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2ZvdXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywz ZGVzLWNiYwpbbGlic3NoMl0gMC45ODM0MTEgS2V5IEV4OiBTZW50IE1BQ19DUzogaG1hYy1z aGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05NixobWFjLXJpcGVtZDE2MCxo bWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0gMC45ODM0MTMgS2V5IEV4OiBT ZW50IE1BQ19TQzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05 NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0g MC45ODM0MTYgS2V5IEV4OiBTZW50IENPTVBfQ1M6IG5vbmUKW2xpYnNzaDJdIDAuOTgzNDE4 IEtleSBFeDogU2VudCBDT01QX1NDOiBub25lCltsaWJzc2gyXSAwLjk4MzQyMSBLZXkgRXg6 IFNlbnQgTEFOR19DUzogCltsaWJzc2gyXSAwLjk4MzQyMyBLZXkgRXg6IFNlbnQgTEFOR19T QzogCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMpCjAwMDA6 IDE0IDY2IDRBIDYwIEY1IDQ3IDlGIDExICAwNSA3OSA2MyA0OCA5QSBCRiA5QSA5RiA6IC5m SmAuRy4uLnljSC4uLi4KMDAxMDogNUQgMDAgMDAgMDAgNTkgNjQgNjkgNjYgIDY2IDY5IDY1 IDJEIDY4IDY1IDZDIDZDIDogXS4uLllkaWZmaWUtaGVsbAowMDIwOiA2RCA2MSA2RSAyRCA2 NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGEx CjAwMzA6IDJDIDY0IDY5IDY2IDY2IDY5IDY1IDJEICA2OCA2NSA2QyA2QyA2RCA2MSA2RSAy RCA6ICxkaWZmaWUtaGVsbG1hbi0KMDA0MDogNjcgNzIgNkYgNzUgNzAgMkQgNjUgNzggIDYz IDY4IDYxIDZFIDY3IDY1IDJEIDczIDogZ3JvdXAtZXhjaGFuZ2UtcwowMDUwOiA2OCA2MSAz MSAyQyA2NCA2OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmll LWhlbGxtCjAwNjA6IDYxIDZFIDJEIDY3IDcyIDZGIDc1IDcwICAzMSAyRCA3MyA2OCA2MSAz MSAwMCAwMCA6IGFuLWdyb3VwMS1zaGExLi4KMDA3MDogMDAgMEYgNzMgNzMgNjggMkQgNzIg NzMgIDYxIDJDIDczIDczIDY4IDJEIDY0IDczIDogLi5zc2gtcnNhLHNzaC1kcwowMDgwOiA3 MyAwMCAwMCAwMCA5MiA2MSA2NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4u LmFlczEyOC1jdHIsCjAwOTA6IDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzICA3NCA3MiAyQyA2 MSA2NSA3MyAzMiAzNSA6IGFlczE5Mi1jdHIsYWVzMjUKMDBhMDogMzYgMkQgNjMgNzQgNzIg MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogNi1jdHIsYWVzMjU2LWNiYwow MGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkg OiAscmlqbmRhZWwtY2JjQGx5CjAwYzA6IDczIDYxIDc0IDZGIDcyIDJFIDZDIDY5ICA3NSAy RSA3MyA2NSAyQyA2MSA2NSA3MyA6IHNhdG9yLmxpdS5zZSxhZXMKMDBkMDogMzEgMzkgMzIg MkQgNjMgNjIgNjMgMkMgIDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzIDogMTkyLWNiYyxhZXMx MjgtYwowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAgNjkgNzMgNjggMkQgNjMgNjIg NjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsCjAwZjA6IDYxIDcyIDYzIDY2IDZGIDc1IDcyIDMx ICAzMiAzOCAyQyA2MSA3MiA2MyA2NiA2RiA6IGFyY2ZvdXIxMjgsYXJjZm8KMDEwMDogNzUg NzIgMkMgNjMgNjEgNzMgNzQgMzEgIDMyIDM4IDJEIDYzIDYyIDYzIDJDIDMzIDogdXIsY2Fz dDEyOC1jYmMsMwowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAgMDAgOTIgNjEg NjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyCjAxMjA6IDM4IDJEIDYzIDc0IDcyIDJD IDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA3NCA3MiA6IDgtY3RyLGFlczE5Mi1jdHIKMDEz MDogMkMgNjEgNjUgNzMgMzIgMzUgMzYgMkQgIDYzIDc0IDcyIDJDIDYxIDY1IDczIDMyIDog LGFlczI1Ni1jdHIsYWVzMgowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtCjAxNTA6IDYzIDYyIDYzIDQw IDZDIDc5IDczIDYxICA3NCA2RiA3MiAyRSA2QyA2OSA3NSAyRSA6IGNiY0BseXNhdG9yLmxp dS4KMDE2MDogNzMgNjUgMkMgNjEgNjUgNzMgMzEgMzkgIDMyIDJEIDYzIDYyIDYzIDJDIDYx IDY1IDogc2UsYWVzMTkyLWNiYyxhZQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAg MkMgNjIgNkMgNkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzCjAxODA6IDY4IDJE IDYzIDYyIDYzIDJDIDYxIDcyICA2MyA2NiA2RiA3NSA3MiAzMSAzMiAzOCA6IGgtY2JjLGFy Y2ZvdXIxMjgKMDE5MDogMkMgNjEgNzIgNjMgNjYgNkYgNzUgNzIgIDJDIDYzIDYxIDczIDc0 IDMxIDMyIDM4IDogLGFyY2ZvdXIsY2FzdDEyOAowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2 NCA2NSAgNzMgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uCjAxYjA6 IDU1IDY4IDZEIDYxIDYzIDJEIDczIDY4ICA2MSAzMSAyQyA2OCA2RCA2MSA2MyAyRCA6IFVo bWFjLXNoYTEsaG1hYy0KMDFjMDogNzMgNjggNjEgMzEgMkQgMzkgMzYgMkMgIDY4IDZEIDYx IDYzIDJEIDZEIDY0IDM1IDogc2hhMS05NixobWFjLW1kNQowMWQwOiAyQyA2OCA2RCA2MSA2 MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMgNjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1h CjAxZTA6IDYzIDJEIDcyIDY5IDcwIDY1IDZEIDY0ICAzMSAzNiAzMCAyQyA2OCA2RCA2MSA2 MyA6IGMtcmlwZW1kMTYwLGhtYWMKMDFmMDogMkQgNzIgNjkgNzAgNjUgNkQgNjQgMzEgIDM2 IDMwIDQwIDZGIDcwIDY1IDZFIDczIDogLXJpcGVtZDE2MEBvcGVucwowMjAwOiA3MyA2OCAy RSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMgMkQgNzMgOiBzaC5jb20uLi5V aG1hYy1zCjAyMTA6IDY4IDYxIDMxIDJDIDY4IDZEIDYxIDYzICAyRCA3MyA2OCA2MSAzMSAy RCAzOSAzNiA6IGhhMSxobWFjLXNoYTEtOTYKMDIyMDogMkMgNjggNkQgNjEgNjMgMkQgNkQg NjQgIDM1IDJDIDY4IDZEIDYxIDYzIDJEIDZEIDogLGhtYWMtbWQ1LGhtYWMtbQowMjMwOiA2 NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUgNkQgOiBkNS05 NixobWFjLXJpcGVtCjAyNDA6IDY0IDMxIDM2IDMwIDJDIDY4IDZEIDYxICA2MyAyRCA3MiA2 OSA3MCA2NSA2RCA2NCA6IGQxNjAsaG1hYy1yaXBlbWQKMDI1MDogMzEgMzYgMzAgNDAgNkYg NzAgNjUgNkUgIDczIDczIDY4IDJFIDYzIDZGIDZEIDAwIDogMTYwQG9wZW5zc2guY29tLgow MjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg OiAuLi5ub25lLi4uLm5vbmUuCjAyNzA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAw MCAwMCAwMCAgICAgICAgICAgICA6IC4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC45ODM1Nzcg U29ja2V0OiBTZW50IDY0OC82NDggYnl0ZXMgYXQgMHg1MDY3ZDgKPT4gbGlic3NoMl90cmFu c3BvcnRfd3JpdGUgc2VuZCgpICg2NDggYnl0ZXMpCjAwMDA6IDAwIDAwIDAyIDg0IDA3IDE0 IDY2IDRBICA2MCBGNSA0NyA5RiAxMSAwNSA3OSA2MyA6IC4uLi4uLmZKYC5HLi4ueWMKMDAx MDogNDggOUEgQkYgOUEgOUYgNUQgMDAgMDAgIDAwIDU5IDY0IDY5IDY2IDY2IDY5IDY1IDog SC4uLi5dLi4uWWRpZmZpZQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcg NzIgNkYgNzUgNzAgMzEgMzQgOiAtaGVsbG1hbi1ncm91cDE0CjAwMzA6IDJEIDczIDY4IDYx IDMxIDJDIDY0IDY5ICA2NiA2NiA2OSA2NSAyRCA2OCA2NSA2QyA6IC1zaGExLGRpZmZpZS1o ZWwKMDA0MDogNkMgNkQgNjEgNkUgMkQgNjcgNzIgNkYgIDc1IDcwIDJEIDY1IDc4IDYzIDY4 IDYxIDogbG1hbi1ncm91cC1leGNoYQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAg MkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQgOiBuZ2Utc2hhMSxkaWZmaWUtCjAwNjA6IDY4IDY1 IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3MCAzMSAyRCA3MyA6IGhlbGxtYW4t Z3JvdXAxLXMKMDA3MDogNjggNjEgMzEgMDAgMDAgMDAgMEYgNzMgIDczIDY4IDJEIDcyIDcz IDYxIDJDIDczIDogaGExLi4uLnNzaC1yc2EscwowMDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAw MCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBzaC1kc3MuLi4uYWVzMTI4CjAwOTA6 IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAzMiAyRCA2MyA3NCA3MiAyQyA6IC1j dHIsYWVzMTkyLWN0ciwKMDBhMDogNjEgNjUgNzMgMzIgMzUgMzYgMkQgNjMgIDc0IDcyIDJD IDYxIDY1IDczIDMyIDM1IDogYWVzMjU2LWN0cixhZXMyNQowMGIwOiAzNiAyRCA2MyA2MiA2 MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNiYyxyaWpuZGFlbC1j CjAwYzA6IDYyIDYzIDQwIDZDIDc5IDczIDYxIDc0ICA2RiA3MiAyRSA2QyA2OSA3NSAyRSA3 MyA6IGJjQGx5c2F0b3IubGl1LnMKMDBkMDogNjUgMkMgNjEgNjUgNzMgMzEgMzkgMzIgIDJE IDYzIDYyIDYzIDJDIDYxIDY1IDczIDogZSxhZXMxOTItY2JjLGFlcwowMGUwOiAzMSAzMiAz OCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2JjLGJs b3dmaXNoCjAwZjA6IDJEIDYzIDYyIDYzIDJDIDYxIDcyIDYzICA2NiA2RiA3NSA3MiAzMSAz MiAzOCAyQyA6IC1jYmMsYXJjZm91cjEyOCwKMDEwMDogNjEgNzIgNjMgNjYgNkYgNzUgNzIg MkMgIDYzIDYxIDczIDc0IDMxIDMyIDM4IDJEIDogYXJjZm91cixjYXN0MTI4LQowMTEwOiA2 MyA2MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMs M2Rlcy1jYmMuLi4uCjAxMjA6IDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzICA3NCA3MiAyQyA2 MSA2NSA3MyAzMSAzOSA6IGFlczEyOC1jdHIsYWVzMTkKMDEzMDogMzIgMkQgNjMgNzQgNzIg MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDc0IDcyIDogMi1jdHIsYWVzMjU2LWN0cgow MTQwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUg OiAsYWVzMjU2LWNiYyxyaWpuCjAxNTA6IDY0IDYxIDY1IDZDIDJEIDYzIDYyIDYzICA0MCA2 QyA3OSA3MyA2MSA3NCA2RiA3MiA6IGRhZWwtY2JjQGx5c2F0b3IKMDE2MDogMkUgNkMgNjkg NzUgMkUgNzMgNjUgMkMgIDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzIDogLmxpdS5zZSxhZXMx OTItYwowMTcwOiA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMg NjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJsCjAxODA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz ICA2MiA2MyAyQyA2MSA3MiA2MyA2NiA2RiA6IG93ZmlzaC1jYmMsYXJjZm8KMDE5MDogNzUg NzIgMzEgMzIgMzggMkMgNjEgNzIgIDYzIDY2IDZGIDc1IDcyIDJDIDYzIDYxIDogdXIxMjgs YXJjZm91cixjYQowMWEwOiA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQg NjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jCjAxYjA6IDYyIDYzIDAwIDAwIDAwIDU1 IDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyQyA6IGJjLi4uVWhtYWMtc2hhMSwKMDFj MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJEIDM5IDM2IDJDIDY4IDZEIDYxIDog aG1hYy1zaGExLTk2LGhtYQowMWQwOiA2MyAyRCA2RCA2NCAzNSAyQyA2OCA2RCAgNjEgNjMg MkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05CjAxZTA6IDM2IDJDIDY4IDZE IDYxIDYzIDJEIDcyICA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCA6IDYsaG1hYy1yaXBlbWQx NjAKMDFmMDogMkMgNjggNkQgNjEgNjMgMkQgNzIgNjkgIDcwIDY1IDZEIDY0IDMxIDM2IDMw IDQwIDogLGhtYWMtcmlwZW1kMTYwQAowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2OCAyRSAg NjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoCjAyMTA6IDZEIDYx IDYzIDJEIDczIDY4IDYxIDMxICAyQyA2OCA2RCA2MSA2MyAyRCA3MyA2OCA6IG1hYy1zaGEx LGhtYWMtc2gKMDIyMDogNjEgMzEgMkQgMzkgMzYgMkMgNjggNkQgIDYxIDYzIDJEIDZEIDY0 IDM1IDJDIDY4IDogYTEtOTYsaG1hYy1tZDUsaAowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAz NSAyRCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtCjAyNDA6 IDcyIDY5IDcwIDY1IDZEIDY0IDMxIDM2ICAzMCAyQyA2OCA2RCA2MSA2MyAyRCA3MiA6IHJp cGVtZDE2MCxobWFjLXIKMDI1MDogNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgIDQwIDZGIDcw IDY1IDZFIDczIDczIDY4IDogaXBlbWQxNjBAb3BlbnNzaAowMjYwOiAyRSA2MyA2RiA2RCAw MCAwMCAwMCAwNCAgNkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4u CjAyNzA6IDZFIDZGIDZFIDY1IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCA6IG5vbmUuLi4uLi4uLi4uLi4KMDI4MDogMDAgQkEgNjAgNUIgMjQgM0MgNUQgMDYgICAg ICAgICAgICAgICAgICAgICAgICAgIDogLi5gWyQ8XS4KW2xpYnNzaDJdIDAuOTgzNjgzIFRy YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwCltsaWJzc2gyXSAwLjk4 MzY4OSBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDI3OTgrMAo9PiBs aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg0ODggYnl0ZXMpCjAwMDA6IDAwIDAwIDAw IDBDIDA2IDAyIDAwIDAwICAwMCAwMCAyNCBEMSAzRCAwQSBCNSBBMyA6IC4uLi4uLi4uLi4k Lj0uLi4KMDAxMDogMDAgMDAgMDEgRDQgMDYgMTQgOUIgMUEgIDE3IEMwIDk4IDkxIDlEIEFD IDUyIEJBIDogLi4uLi4uLi4uLi4uLi5SLgowMDIwOiBDQiA3NiBBNCBDNCAxNSAxQSAwMCAw MCAgMDAgMUEgNjQgNjkgNjYgNjYgNjkgNjUgOiAudi4uLi4uLi4uZGlmZmllCjAwMzA6IDJE IDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAzMSAyRCA6IC1oZWxs bWFuLWdyb3VwMS0KMDA0MDogNzMgNjggNjEgMzEgMDAgMDAgMDAgMDcgIDczIDczIDY4IDJE IDY0IDczIDczIDAwIDogc2hhMS4uLi5zc2gtZHNzLgowMDUwOiAwMCAwMCA4MyA2MSA2NSA3 MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgMzMgNjQgOiAuLi5hZXMxMjgtY2JjLDNkCjAw NjA6IDY1IDczIDJEIDYzIDYyIDYzIDJDIDc0ICA3NyA2RiA2NiA2OSA3MyA2OCAzMSAzMiA6 IGVzLWNiYyx0d29maXNoMTIKMDA3MDogMzggMkQgNjMgNjIgNjMgMkMgNjMgNjEgIDczIDc0 IDMxIDMyIDM4IDJEIDYzIDYyIDogOC1jYmMsY2FzdDEyOC1jYgowMDgwOiA2MyAyQyA3NCA3 NyA2RiA2NiA2OSA3MyAgNjggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBjLHR3b2Zpc2gtY2Jj LGJsCjAwOTA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAz MSAzOSA6IG93ZmlzaC1jYmMsYWVzMTkKMDBhMDogMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUg IDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogMi1jYmMsYWVzMjU2LWNiYwowMGIwOiAyQyA3 NCA3NyA2RiA2NiA2OSA3MyA2OCAgMzEgMzkgMzIgMkQgNjMgNjIgNjMgMkMgOiAsdHdvZmlz aDE5Mi1jYmMsCjAwYzA6IDc0IDc3IDZGIDY2IDY5IDczIDY4IDMyICAzNSAzNiAyRCA2MyA2 MiA2MyAyQyA2MSA6IHR3b2Zpc2gyNTYtY2JjLGEKMDBkMDogNzIgNjMgNjYgNkYgNzUgNzIg MDAgMDAgIDAwIDgzIDYxIDY1IDczIDMxIDMyIDM4IDogcmNmb3VyLi4uLmFlczEyOAowMGUw OiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIgNjMgMkMgNzQgNzcgOiAt Y2JjLDNkZXMtY2JjLHR3CjAwZjA6IDZGIDY2IDY5IDczIDY4IDMxIDMyIDM4ICAyRCA2MyA2 MiA2MyAyQyA2MyA2MSA3MyA6IG9maXNoMTI4LWNiYyxjYXMKMDEwMDogNzQgMzEgMzIgMzgg MkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogdDEyOC1jYmMsdHdvZmlz aAowMTEwOiAyRCA2MyA2MiA2MyAyQyA2MiA2QyA2RiAgNzcgNjYgNjkgNzMgNjggMkQgNjMg NjIgOiAtY2JjLGJsb3dmaXNoLWNiCjAxMjA6IDYzIDJDIDYxIDY1IDczIDMxIDM5IDMyICAy RCA2MyA2MiA2MyAyQyA2MSA2NSA3MyA6IGMsYWVzMTkyLWNiYyxhZXMKMDEzMDogMzIgMzUg MzYgMkQgNjMgNjIgNjMgMkMgIDc0IDc3IDZGIDY2IDY5IDczIDY4IDMxIDogMjU2LWNiYyx0 d29maXNoMQowMTQwOiAzOSAzMiAyRCA2MyA2MiA2MyAyQyA3NCAgNzcgNkYgNjYgNjkgNzMg NjggMzIgMzUgOiA5Mi1jYmMsdHdvZmlzaDI1CjAxNTA6IDM2IDJEIDYzIDYyIDYzIDJDIDYx IDcyICA2MyA2NiA2RiA3NSA3MiAwMCAwMCAwMCA6IDYtY2JjLGFyY2ZvdXIuLi4KMDE2MDog MkIgNjggNkQgNjEgNjMgMkQgNzMgNjggIDYxIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDogK2ht YWMtc2hhMSxobWFjLQowMTcwOiA3MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEg NjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2LGhtYWMtbWQ1CjAxODA6IDJDIDY4IDZEIDYxIDYz IDJEIDZEIDY0ICAzNSAyRCAzOSAzNiAwMCAwMCAwMCAyQiA6ICxobWFjLW1kNS05Ni4uLisK MDE5MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDcz IDogaG1hYy1zaGExLGhtYWMtcwowMWEwOiA2OCA2MSAzMSAyRCAzOSAzNiAyQyA2OCAgNkQg NjEgNjMgMkQgNkQgNjQgMzUgMkMgOiBoYTEtOTYsaG1hYy1tZDUsCjAxYjA6IDY4IDZEIDYx IDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAwMCAwMCAwMCAwOSA2RSA6IGhtYWMtbWQ1LTk2 Li4uLm4KMDFjMDogNkYgNkUgNjUgMkMgN0EgNkMgNjkgNjIgIDAwIDAwIDAwIDA5IDZFIDZG IDZFIDY1IDogb25lLHpsaWIuLi4ubm9uZQowMWQwOiAyQyA3QSA2QyA2OSA2MiAwMCAwMCAw MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiAsemxpYi4uLi4uLi4uLi4uCjAxZTA6IDAw IDAwIDExIEI1IERDIDk1IDMxIDc5ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u LjF5Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDog MDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4u Li4KW2xpYnNzaDJdIDAuOTgzNzc2IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZl ZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg0NjEgYnl0 ZXMpCjAwMDA6IDE0IDlCIDFBIDE3IEMwIDk4IDkxIDlEICBBQyA1MiBCQSBDQiA3NiBBNCBD NCAxNSA6IC4uLi4uLi4uLlIuLnYuLi4KMDAxMDogMUEgMDAgMDAgMDAgMUEgNjQgNjkgNjYg IDY2IDY5IDY1IDJEIDY4IDY1IDZDIDZDIDogLi4uLi5kaWZmaWUtaGVsbAowMDIwOiA2RCA2 MSA2RSAyRCA2NyA3MiA2RiA3NSAgNzAgMzEgMkQgNzMgNjggNjEgMzEgMDAgOiBtYW4tZ3Jv dXAxLXNoYTEuCjAwMzA6IDAwIDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAw MCA4MyA2MSA2NSA6IC4uLnNzaC1kc3MuLi4uYWUKMDA0MDogNzMgMzEgMzIgMzggMkQgNjMg NjIgNjMgIDJDIDMzIDY0IDY1IDczIDJEIDYzIDYyIDogczEyOC1jYmMsM2Rlcy1jYgowMDUw OiA2MyAyQyA3NCA3NyA2RiA2NiA2OSA3MyAgNjggMzEgMzIgMzggMkQgNjMgNjIgNjMgOiBj LHR3b2Zpc2gxMjgtY2JjCjAwNjA6IDJDIDYzIDYxIDczIDc0IDMxIDMyIDM4ICAyRCA2MyA2 MiA2MyAyQyA3NCA3NyA2RiA6ICxjYXN0MTI4LWNiYyx0d28KMDA3MDogNjYgNjkgNzMgNjgg MkQgNjMgNjIgNjMgIDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczIDogZmlzaC1jYmMsYmxvd2Zp cwowMDgwOiA2OCAyRCA2MyA2MiA2MyAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNjIg NjMgOiBoLWNiYyxhZXMxOTItY2JjCjAwOTA6IDJDIDYxIDY1IDczIDMyIDM1IDM2IDJEICA2 MyA2MiA2MyAyQyA3NCA3NyA2RiA2NiA6ICxhZXMyNTYtY2JjLHR3b2YKMDBhMDogNjkgNzMg NjggMzEgMzkgMzIgMkQgNjMgIDYyIDYzIDJDIDc0IDc3IDZGIDY2IDY5IDogaXNoMTkyLWNi Yyx0d29maQowMGIwOiA3MyA2OCAzMiAzNSAzNiAyRCA2MyA2MiAgNjMgMkMgNjEgNzIgNjMg NjYgNkYgNzUgOiBzaDI1Ni1jYmMsYXJjZm91CjAwYzA6IDcyIDAwIDAwIDAwIDgzIDYxIDY1 IDczICAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyA6IHIuLi4uYWVzMTI4LWNiYywKMDBkMDog MzMgNjQgNjUgNzMgMkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogM2Rl cy1jYmMsdHdvZmlzaAowMGUwOiAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjMgNjEgNzMg NzQgMzEgMzIgMzggMkQgOiAxMjgtY2JjLGNhc3QxMjgtCjAwZjA6IDYzIDYyIDYzIDJDIDc0 IDc3IDZGIDY2ICA2OSA3MyA2OCAyRCA2MyA2MiA2MyAyQyA6IGNiYyx0d29maXNoLWNiYywK MDEwMDogNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggIDJEIDYzIDYyIDYzIDJDIDYxIDY1IDcz IDogYmxvd2Zpc2gtY2JjLGFlcwowMTEwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEg NjUgNzMgMzIgMzUgMzYgMkQgNjMgOiAxOTItY2JjLGFlczI1Ni1jCjAxMjA6IDYyIDYzIDJD IDc0IDc3IDZGIDY2IDY5ICA3MyA2OCAzMSAzOSAzMiAyRCA2MyA2MiA6IGJjLHR3b2Zpc2gx OTItY2IKMDEzMDogNjMgMkMgNzQgNzcgNkYgNjYgNjkgNzMgIDY4IDMyIDM1IDM2IDJEIDYz IDYyIDYzIDogYyx0d29maXNoMjU2LWNiYwowMTQwOiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3 MiAgMDAgMDAgMDAgMkIgNjggNkQgNjEgNjMgOiAsYXJjZm91ci4uLitobWFjCjAxNTA6IDJE IDczIDY4IDYxIDMxIDJDIDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyRCA6IC1zaGEx LGhtYWMtc2hhMS0KMDE2MDogMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgIDZEIDY0IDM1IDJD IDY4IDZEIDYxIDYzIDogOTYsaG1hYy1tZDUsaG1hYwowMTcwOiAyRCA2RCA2NCAzNSAyRCAz OSAzNiAwMCAgMDAgMDAgMkIgNjggNkQgNjEgNjMgMkQgOiAtbWQ1LTk2Li4uK2htYWMtCjAx ODA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6 IHNoYTEsaG1hYy1zaGExLTkKMDE5MDogMzYgMkMgNjggNkQgNjEgNjMgMkQgNkQgIDY0IDM1 IDJDIDY4IDZEIDYxIDYzIDJEIDogNixobWFjLW1kNSxobWFjLQowMWEwOiA2RCA2NCAzNSAy RCAzOSAzNiAwMCAwMCAgMDAgMDkgNkUgNkYgNkUgNjUgMkMgN0EgOiBtZDUtOTYuLi4ubm9u ZSx6CjAxYjA6IDZDIDY5IDYyIDAwIDAwIDAwIDA5IDZFICA2RiA2RSA2NSAyQyA3QSA2QyA2 OSA2MiA6IGxpYi4uLi5ub25lLHpsaWIKMDFjMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg IDAwIDAwIDAwIDAwIDAwICAgICAgICAgIDogLi4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC45 ODM4NDggVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3RoPTQ2MQpb bGlic3NoMl0gMC45ODM4NTIgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw ZTogMjAKW2xpYnNzaDJdIDAuOTgzODYzIEtleSBFeDogQWdyZWVkIG9uIEtFWCBtZXRob2Q6 IGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCltsaWJzc2gyXSAwLjk4Mzg2NiBLZXkgRXg6 IEFncmVlZCBvbiBIT1NUS0VZIG1ldGhvZDogc3NoLWRzcwpbbGlic3NoMl0gMC45ODM4Njkg S2V5IEV4OiBBZ3JlZWQgb24gQ1JZUFRfQ1MgbWV0aG9kOiBhZXMyNTYtY2JjCltsaWJzc2gy XSAwLjk4Mzg3MSBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczI1Ni1j YmMKW2xpYnNzaDJdIDAuOTgzODc0IEtleSBFeDogQWdyZWVkIG9uIE1BQ19DUyBtZXRob2Q6 IGhtYWMtc2hhMQpbbGlic3NoMl0gMC45ODM4NzYgS2V5IEV4OiBBZ3JlZWQgb24gTUFDX1ND IG1ldGhvZDogaG1hYy1zaGExCltsaWJzc2gyXSAwLjk4Mzg3OSBLZXkgRXg6IEFncmVlZCBv biBDT01QX0NTIG1ldGhvZDogbm9uZQpbbGlic3NoMl0gMC45ODM4ODEgS2V5IEV4OiBBZ3Jl ZWQgb24gQ09NUF9TQyBtZXRob2Q6IG5vbmUKW2xpYnNzaDJdIDAuOTgzODk1IEtleSBFeDog SW5pdGlhdGluZyBEaWZmaWUtSGVsbG1hbiBHcm91cDEgS2V5IEV4Y2hhbmdlCltsaWJzc2gy XSAwLjk4NDU4MiBLZXkgRXg6IFNlbmRpbmcgS0VYIHBhY2tldCAzMAo9PiBsaWJzc2gyX3Ry YW5zcG9ydF93cml0ZSBwbGFpbiAoMTMzIGJ5dGVzKQowMDAwOiAxRSAwMCAwMCAwMCA4MCAx MyA3QSA5OCAgM0MgMTIgNUQgM0MgMkIgQUUgNjkgNzcgOiAuLi4uLi56LjwuXTwrLml3CjAw MTA6IEE1IERCIEUyIDMxIEFBIDdEIDY4IEZDICA3MyBEQiA4NCAxOSAzMSAzRiBCMSA5MyA6 IC4uLjEufWgucy4uLjE/Li4KMDAyMDogN0YgMjYgODUgMjEgMDEgQTQgOTIgQUEgIDM4IEE5 IDVDIDZEIDMyIEZCIEREIEU1IDogLiYuIS4uLi44LlxtMi4uLgowMDMwOiAwMyA0NCAwOCBG OCBCRCAzNiA3RiA3OSAgMkMgQzMgRTkgNjggOUQgMTggMjUgQjEgOiAuRC4uLjYueSwuLmgu LiUuCjAwNDA6IEFFIEIzIDBFIEVBIDE1IEQxIDU0IDZBICBFMSBGOCAzMCBCNiBBRSBGOCBE RCBBNiA6IC4uLi4uLlRqLi4wLi4uLi4KMDA1MDogM0MgMDAgMjAgNTEgNDIgQTMgMTggRkMg IEVDIDI3IENEIDVEIEE4IDdBIDNEIDU0IDogPC4gUUIuLi4uJy5dLno9VAowMDYwOiAyMyA0 QSA4RiBENCA3NiBEMCAwMSAxQyAgODggOTQgQ0EgOTkgM0MgQTIgQjYgQ0UgOiAjSi4udi4u Li4uLi48Li4uCjAwNzA6IDBGIDQ0IEFBIDgwIDQ3IEJGIEI3IDMzICBFMSAzOCA4QSAxNSBC MiBGMyA4RCAyMyA6IC5ELi5HLi4zLjguLi4uLiMKMDA4MDogMDcgNjUgNTcgRkUgMzYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLmVXLjYKW2xpYnNzaDJdIDAuOTg0 Njg1IFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVzIGF0IDB4NTA2N2Q4Cj0+IGxpYnNzaDJf dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMTQ0IGJ5dGVzKQowMDAwOiAwMCAwMCAwMCA4QyAw NiAxRSAwMCAwMCAgMDAgODAgMTMgN0EgOTggM0MgMTIgNUQgOiAuLi4uLi4uLi4uLnouPC5d CjAwMTA6IDNDIDJCIEFFIDY5IDc3IEE1IERCIEUyICAzMSBBQSA3RCA2OCBGQyA3MyBEQiA4 NCA6IDwrLml3Li4uMS59aC5zLi4KMDAyMDogMTkgMzEgM0YgQjEgOTMgN0YgMjYgODUgIDIx IDAxIEE0IDkyIEFBIDM4IEE5IDVDIDogLjE/Li4uJi4hLi4uLjguXAowMDMwOiA2RCAzMiBG QiBERCBFNSAwMyA0NCAwOCAgRjggQkQgMzYgN0YgNzkgMkMgQzMgRTkgOiBtMi4uLi5ELi4u Ni55LC4uCjAwNDA6IDY4IDlEIDE4IDI1IEIxIEFFIEIzIDBFICBFQSAxNSBEMSA1NCA2QSBF MSBGOCAzMCA6IGguLiUuLi4uLi4uVGouLjAKMDA1MDogQjYgQUUgRjggREQgQTYgM0MgMDAg MjAgIDUxIDQyIEEzIDE4IEZDIEVDIDI3IENEIDogLi4uLi48LiBRQi4uLi4nLgowMDYwOiA1 RCBBOCA3QSAzRCA1NCAyMyA0QSA4RiAgRDQgNzYgRDAgMDEgMUMgODggOTQgQ0EgOiBdLno9 VCNKLi52Li4uLi4uCjAwNzA6IDk5IDNDIEEyIEI2IENFIDBGIDQ0IEFBICA4MCA0NyBCRiBC NyAzMyBFMSAzOCA4QSA6IC48Li4uLkQuLkcuLjMuOC4KMDA4MDogMTUgQjIgRjMgOEQgMjMg MDcgNjUgNTcgIEZFIDM2IEQ4IEYxIEExIEE3IEIwIDNFIDogLi4uLiMuZVcuNi4uLi4uPgpb bGlic3NoMl0gMC45ODQ3MTcgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw ZTogMzEKW2xpYnNzaDJdIDAuOTg0NzI0IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0 byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXMKW2xpYnNzaDJdIDEuMDQ3OTc1IFNvY2tldDog UmVjdmVkIDEwNDAvMTYzODQgYnl0ZXMgdG8gMHg1MDI3OTgrMAo9PiBsaWJzc2gyX3RyYW5z cG9ydF9yZWFkKCkgcmF3ICgxMDQwIGJ5dGVzKQowMDAwOiAwMCAwMCAwMCAwQyAwNiAwMiAw MCAwMCAgMDAgMDAgM0MgQTIgMjMgOTggQUUgOUUgOiAuLi4uLi4uLi4uPC4jLi4uCjAwMTA6 IDAwIDAwIDAzIEZDIDA1IDFGIDAwIDAwICAwMyAzMiAwMCAwMCAwMCAwNyA3MyA3MyA6IC4u Li4uLi4uLjIuLi4uc3MKMDAyMDogNjggMkQgNjQgNzMgNzMgMDAgMDAgMDEgIDAxIDAwIERB IDU2IDZEIDQ1IEUzIDM2IDogaC1kc3MuLi4uLi5WbUUuNgowMDMwOiAzOSBGNCBGNiBBMSA4 OSBGOSBEQiAxNyAgM0IgNzAgODMgRTEgRTQgMTggOEYgNTcgOiA5Li4uLi4uLjtwLi4uLi5X CjAwNDA6IEE3IDNGIDhGIEJBIEU3IEE0IDcyIERCICBGQiAwNiBGRSA1NSA0MiBCNiBCNCA0 NiA6IC4/Li4uLnIuLi4uVUIuLkYKMDA1MDogMzcgN0UgQzggMkEgNjMgNzIgMDkgQzcgIEYy IDJEIDg1IDgxIDZBIEVCIDFFIDhDIDogN34uKmNyLi4uLS4uai4uLgowMDYwOiBDOSA0RCA2 NCAyMCBGNiAzOCA1NyA5QyAgRDUgNDkgNEYgNzcgNzkgNjYgNkIgNjIgOiAuTWQgLjhXLi5J T3d5ZmtiCjAwNzA6IDg1IDFCIDQxIDI1IEU4IDYxIEI2IEQ5ICBDRiAxNCAwRCBGQiBERCBG QSA2MiAwNyA6IC4uQSUuYS4uLi4uLi4uYi4KMDA4MDogRkYgRUQgMkIgMkQgQjMgNzEgQUEg MUEgIDBCIDE2IDdDIEY1IDY4IDE1IDM3IEMyIDogLi4rLS5xLi4uLnwuaC43LgowMDkwOiBD QyA1MSBFNyA0RSA1OSA5MiA4MCBFRCAgODUgQjcgMjkgREQgQTIgNjQgNUYgQjcgOiAuUS5O WS4uLi4uKS4uZF8uCjAwYTA6IDg5IDNCIDk2IDIyIDA1IDUzIDU3IDBGICA1NyBBQyA2NCA1 NCBERiAxMSA5NSA1OCA6IC47LiIuU1cuVy5kVC4uLlgKMDBiMDogNkIgNzUgNkIgQkUgRjUg Q0IgMEUgQzAgIDk0IDAwIEE5IDNDIERCIDYzIEVGIEE2IDoga3VrLi4uLi4uLi48LmMuLgow MGMwOiBDMSBEMyBDMSAyQyBFNyAyMCBFNCBFMCAgOEEgN0MgNDIgMzAgM0UgNEEgQTYgNzkg OiAuLi4sLiAuLi58QjA+Si55CjAwZDA6IDFDIDQzIEE4IDk3IEQ2IDJBIDQxIDJEICAxRiBE RSA1QSBGOSAxRCA2QyBBOCAwQiA6IC5DLi4uKkEtLi5aLi5sLi4KMDBlMDogNTYgNUIgQUIg QkQgMUYgNTAgQ0UgNzQgIDQwIEFDIDlDIDk3IEE5IEM5IEIyIDUyIDogVlsuLi5QLnRALi4u Li4uUgowMGYwOiA2QSAzOSAwRCBCOCA4MyAxNyA0OSA1OSAgQ0EgRUQgRkEgMUIgRTAgQjEg QTAgNkEgOiBqOS4uLi5JWS4uLi4uLi5qCjAxMDA6IEU2IEJEIDMzIDhFIDlDIEM2IEMyIEQw ICA4MCBBNSA2MiBEOCA1RCA0NiA3QSAxMyA6IC4uMy4uLi4uLi5iLl1Gei4KMDExMDogRDEg M0YgNDggNzcgMjkgMTIgODEgNzcgIEM3IDAxIDdCIDZDIEUxIEI3IEFGIDU2IDogLj9Idyku LncuLntsLi4uVgowMTIwOiBFQyA2RCBDMSBFMSBDRSA3NSBFQyBCMCAgN0YgNzcgMDAgMDAg MDAgMTUgMDAgRjEgOiAubS4uLnUuLi53Li4uLi4uCjAxMzA6IDdDIDJCIDU1IDk3IEJDIDA2 IDVGIDYyICBEMCA5QSA2QiBGRCA0RCBBQSBGMyA1QSA6IHwrVS4uLl9iLi5rLk0uLloKMDE0 MDogRTMgQjUgMTcgMDAgMDAgMDEgMDAgM0UgIEY5IDg2IEJCIDMxIDVCIDJBIDk5IDQ4IDog Li4uLi4uLj4uLi4xWyouSAowMTUwOiAwMSBBMCAxNSA1MSAwQyBBRiA0NSBEMyAgN0YgMTEg MjkgMzggNDggNzAgMEQgMkUgOiAuLi5RLi5FLi4uKThIcC4uCjAxNjA6IENGIDBGIDc4IEQ3 IDJGIEYxIDhEIDcwICAzRiA1NyBCMiAzOSA5MiA3MCA0RCAzMyA6IC4ueC4vLi5wP1cuOS5w TTMKMDE3MDogQTQgMkYgRDYgMTYgQTIgMDcgNzIgOTUgIDk3IDE5IEZBIDU0IDU2IDc1IDFF IDlFIDogLi8uLi4uci4uLi5UVnUuLgowMTgwOiA1QyBDQSBDOCBENCA2QiA2OSA1OSAyQSAg MzkgMzcgRjkgQUQgRTYgMjUgRDEgMjggOiBcLi4ua2lZKjk3Li4uJS4oCjAxOTA6IDk2IEU3 IEQwIEZBIDUxIDc4IEUwIDUzICBDRSBFMCAyMCBGMyA3NCAzNCA3MyA2MiA6IC4uLi5ReC5T Li4gLnQ0c2IKMDFhMDogMTggRTggMkUgNUYgMzkgOUUgMDIgQUIgIEJEIDVBIDY4IEU5IDlG IEU5IDdEIEFEIDogLi4uXzkuLi4uWmguLi59LgowMWIwOiA3MSBCMCA0NiAzNSBCQSA2MyBB QiBBRSAgQUMgMDIgRDYgODggNzMgNjcgNDUgNDYgOiBxLkY1LmMuLi4uLi5zZ0VGCjAxYzA6 IEFCIDBGIDNBIEM5IDU2IEIyIDcyIDlDICAwRSA4QyBCQiBERCAyMyAyMCA5MCBFMyA6IC4u Oi5WLnIuLi4uLiMgLi4KMDFkMDogODAgRTMgNEYgNjUgRUMgRjQgRTYgODUgIEJBIDA4IEVG IDkwIDVFIEYyIDA1IEJFIDogLi5PZS4uLi4uLi4uXi4uLgowMWUwOiAwMSA4NSA0QyA1RiBB MCAwNCA1MCA1NSAgNzkgMUEgQ0YgRjggNTEgOTkgRjMgMTQgOiAuLkxfLi5QVXkuLi5RLi4u CjAxZjA6IDg1IEZFIERCIDM0IDQ1IDEzIDg4IDVFICBGRiA5NSBGOSBBRiAxNiBFRCAyQSAy QyA6IC4uLjRFLi5eLi4uLi4uKiwKMDIwMDogRTggQTQgRTEgRTQgNTIgNTcgMDcgMzYgIDc0 IEUyIDQ0IEZFIEE3IDlDIDE0IDg1IDogLi4uLlJXLjZ0LkQuLi4uLgowMjEwOiAwQyBCMCBF NSAzMiA0NSA1OCA4MSBDQyAgQjggMTMgNjMgMkQgNzkgQzEgODkgQzQgOiAuLi4yRVguLi4u Yy15Li4uCjAyMjA6IDVCIEMxIDc4IEY1IDA2IDQ3IEI4IDA1ICBFNSA2RiA5OCAwRSBDQSAy NiA3MCAxNSA6IFsueC4uRy4uLm8uLi4mcC4KMDIzMDogNEUgODYgNEQgMEIgRUEgMEUgRUEg M0YgIDdBIDE4IDhEIDEzIDE5IDQ4IDNEIDhEIDogTi5NLi4uLj96Li4uLkg9LgowMjQwOiA0 RSBFRSA0NSAyMiA2NyA2RiBCOSAwMCAgMDAgMDEgMDEgMDAgQTYgMDQgOTggOTAgOiBOLkUi Z28uLi4uLi4uLi4uCjAyNTA6IDFDIDcyIEVGIDc5IENBIEU2IDhCIDUxICA2QiA5MSBGNSAx OCAxRSBDQSBDRiBEQiA6IC5yLnkuLi5Ray4uLi4uLi4KMDI2MDogQUMgNjUgOTcgMDQgNjQg OEEgQ0UgRkYgIDU2IDhDIDNBIDZGIDA4IDM1IEQ2IDRCIDogLmUuLmQuLi5WLjpvLjUuSwow MjcwOiAzQSBGMyBEQSA5NyBFMCBFNyBGMSBGOCAgMUIgRjggNDcgMTEgRkMgMDEgMEUgOEYg OiA6Li4uLi4uLi4uRy4uLi4uCjAyODA6IDk1IDg0IDRDIDA4IDgzIDgwIDQyIENEICAzMiA3 QiA4NCAwRSAzMCAzNCA4NiA4RCA6IC4uTC4uLkIuMnsuLjA0Li4KMDI5MDogMTkgQTQgNEMg RUYgQjcgQTcgRDIgQ0MgIDM4IDE0IDNDIEJDIDFBIDI0IEZFIDcwIDogLi5MLi4uLi44Ljwu LiQucAowMmEwOiBGRiBCRiBDNCA4NyBBOCBGMyAzNSA5MCAgNjIgNzkgNTkgRjUgRUEgNjIg NDUgRTQgOiAuLi4uLi41LmJ5WS4uYkUuCjAyYjA6IDE3IDU0IDBBIDkwIDQyIDM0IDQyIEUz ICAxMCAyOCBCRSBFQiA1NSA5RCAyNyBFMSA6IC5ULi5CNEIuLiguLlUuJy4KMDJjMDogNkYg QzcgMTYgNTggRDggNzEgOEYgRkIgIDJEIERGIEYwIEM1IEQ2IDY1IDFCIDEzIDogby4uWC5x Li4tLi4uLmUuLgowMmQwOiAwQiA4MCBFQSA0MiA0NCAxNCBBRiAyOCAgNjUgRDUgRkQgQ0Yg QTggMjEgNkUgNzIgOiAuLi5CRC4uKGUuLi4uIW5yCjAyZTA6IDc1IEI1IDhCIDkxIDNBIDc5 IEFEIDhCICBFQSA3MiBDNiAzOSBGOCBCMSA3QSA3OCA6IHUuLi46eS4uLnIuOS4uengKMDJm MDogRjYgQ0EgODMgRkMgNDEgOTUgNjIgNEIgIEU4IDUyIDQxIDhCIDBCIDRCIERGIDFDIDog Li4uLkEuYksuUkEuLksuLgowMzAwOiBDNyA1QyBBMCBGRSBCRCA2QiBCNyAzQSAgMTkgQUYg NDQgMjggNjggREMgN0EgMkIgOiAuXC4uLmsuOi4uRChoLnorCjAzMTA6IDE5IEM5IDBEIEM4 IDU4IDEyIDIyIDE3ICA4QSA3QyBDMiAwMyAyRSA1QyBFOCBBMyA6IC4uLi5YLiIuLnwuLi5c Li4KMDMyMDogQzEgNjEgM0MgNkIgOEQgODcgRDggOEIgIEI4IDU3IDI4IDUwIDZGIDFEIDQ2 IDRGIDogLmE8ay4uLi4uVyhQby5GTwowMzMwOiBGNiBFMSA4NSBBQyBCQiA4NyA5QiBFMSAg MEEgQUQgOTUgNkYgODAgNEQgN0EgRjQgOiAuLi4uLi4uLi4uLm8uTXouCjAzNDA6IDcyIEEw IEZEIDZBIDUzIDc5IDc5IDhBICAxMiA3QiA0RSBGQiAwMCAwMCAwMCA4MCA6IHIuLmpTeXku LntOLi4uLi4KMDM1MDogNUEgODggNkEgMEMgMkMgRDQgMDYgREQgIDZFIEQ1IDQzIDRFIDAz IERDIDQ5IEUzIDogWi5qLiwuLi5uLkNOLi5JLgowMzYwOiA5NSA3RiBGRiBEQSAxRCA5MCBC QyBERSAgNzcgNTEgOTIgNEQgMEMgMzkgRjEgRTEgOiAuLi4uLi4uLndRLk0uOS4uCjAzNzA6 IEFDIEY1IDRBIDg1IDRBIEU5IDkwIDU0ICBGNyA0QSAxRCBBMyBFQyBFNiBFMyBGMSA6IC4u Si5KLi5ULkouLi4uLi4KMDM4MDogRjQgRTQgMjIgRUIgQjAgMjAgRjcgNkMgIEJFIDQ4IDgz IEQ2IEU2IDBFIEEwIDI4IDogLi4iLi4gLmwuSC4uLi4uKAowMzkwOiA1RSA5OSBCNCBBOSBB MiA4RCA5OSBBRiAgQTcgNjYgQ0MgNDcgRkQgODIgOTAgRkMgOiBeLi4uLi4uLi5mLkcuLi4u CjAzYTA6IEY2IDUxIEYwIEExIDNEIDQxIEY1IDlDICBDOCA0NiAzQSBBMiBENiBCRiA0MiAx NiA6IC5RLi49QS4uLkY6Li4uQi4KMDNiMDogNkIgNzQgREEgRTQgMDMgRkQgRDAgNEYgIDIx IEY1IDM1IEExIEExIDI4IERGIEYxIDoga3QuLi4uLk8hLjUuLiguLgowM2MwOiA2NyA1QSBF NCAxNSBCRCA2QyAwNiA1MyAgQTMgRjYgNjggQTkgOEIgNjYgQjggQzkgOiBnWi4uLmwuUy4u aC4uZi4uCjAzZDA6IDAwIDAwIDAwIDM3IDAwIDAwIDAwIDA3ICA3MyA3MyA2OCAyRCA2NCA3 MyA3MyAwMCA6IC4uLjcuLi4uc3NoLWRzcy4KMDNlMDogMDAgMDAgMjggNTcgMzIgM0QgQTEg OUMgIDY1IDdBIDEzIDgyIEJEIEY4IDI3IDA5IDogLi4oVzI9Li5lei4uLi4nLgowM2YwOiBG QiBDMiBFMCA4NSA2OSBCOSBGQyBDQiAgRTggMkYgNUEgRkUgRjUgN0MgRkYgQTUgOiAuLi4u aS4uLi4vWi4ufC4uCjA0MDA6IDBGIENFIDU2IEFCIDJFIDY5IDg0IDBDICBEMCBDRSA5QyBF QiA0NCBBMSAxMyBGQyA6IC4uVi4uaS4uLi4uLkQuLi4KPT4gbGlic3NoMl90cmFuc3BvcnRf cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMS4wNDgxNjMgVHJh bnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3Ry YW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwMTQgYnl0ZXMpCjAwMDA6IDFGIDAwIDAwIDAzIDMy IDAwIDAwIDAwICAwNyA3MyA3MyA2OCAyRCA2NCA3MyA3MyA6IC4uLi4yLi4uLnNzaC1kc3MK MDAxMDogMDAgMDAgMDEgMDEgMDAgREEgNTYgNkQgIDQ1IEUzIDM2IDM5IEY0IEY2IEExIDg5 IDogLi4uLi4uVm1FLjY5Li4uLgowMDIwOiBGOSBEQiAxNyAzQiA3MCA4MyBFMSBFNCAgMTgg OEYgNTcgQTcgM0YgOEYgQkEgRTcgOiAuLi47cC4uLi4uVy4/Li4uCjAwMzA6IEE0IDcyIERC IEZCIDA2IEZFIDU1IDQyICBCNiBCNCA0NiAzNyA3RSBDOCAyQSA2MyA6IC5yLi4uLlVCLi5G N34uKmMKMDA0MDogNzIgMDkgQzcgRjIgMkQgODUgODEgNkEgIEVCIDFFIDhDIEM5IDREIDY0 IDIwIEY2IDogci4uLi0uLmouLi4uTWQgLgowMDUwOiAzOCA1NyA5QyBENSA0OSA0RiA3NyA3 OSAgNjYgNkIgNjIgODUgMUIgNDEgMjUgRTggOiA4Vy4uSU93eWZrYi4uQSUuCjAwNjA6IDYx IEI2IEQ5IENGIDE0IDBEIEZCIEREICBGQSA2MiAwNyBGRiBFRCAyQiAyRCBCMyA6IGEuLi4u Li4uLmIuLi4rLS4KMDA3MDogNzEgQUEgMUEgMEIgMTYgN0MgRjUgNjggIDE1IDM3IEMyIEND IDUxIEU3IDRFIDU5IDogcS4uLi58LmguNy4uUS5OWQowMDgwOiA5MiA4MCBFRCA4NSBCNyAy OSBERCBBMiAgNjQgNUYgQjcgODkgM0IgOTYgMjIgMDUgOiAuLi4uLikuLmRfLi47LiIuCjAw OTA6IDUzIDU3IDBGIDU3IEFDIDY0IDU0IERGICAxMSA5NSA1OCA2QiA3NSA2QiBCRSBGNSA6 IFNXLlcuZFQuLi5Ya3VrLi4KMDBhMDogQ0IgMEUgQzAgOTQgMDAgQTkgM0MgREIgIDYzIEVG IEE2IEMxIEQzIEMxIDJDIEU3IDogLi4uLi4uPC5jLi4uLi4sLgowMGIwOiAyMCBFNCBFMCA4 QSA3QyA0MiAzMCAzRSAgNEEgQTYgNzkgMUMgNDMgQTggOTcgRDYgOiAgLi4ufEIwPkoueS5D Li4uCjAwYzA6IDJBIDQxIDJEIDFGIERFIDVBIEY5IDFEICA2QyBBOCAwQiA1NiA1QiBBQiBC RCAxRiA6ICpBLS4uWi4ubC4uVlsuLi4KMDBkMDogNTAgQ0UgNzQgNDAgQUMgOUMgOTcgQTkg IEM5IEIyIDUyIDZBIDM5IDBEIEI4IDgzIDogUC50QC4uLi4uLlJqOS4uLgowMGUwOiAxNyA0 OSA1OSBDQSBFRCBGQSAxQiBFMCAgQjEgQTAgNkEgRTYgQkQgMzMgOEUgOUMgOiAuSVkuLi4u Li4uai4uMy4uCjAwZjA6IEM2IEMyIEQwIDgwIEE1IDYyIEQ4IDVEICA0NiA3QSAxMyBEMSAz RiA0OCA3NyAyOSA6IC4uLi4uYi5dRnouLj9IdykKMDEwMDogMTIgODEgNzcgQzcgMDEgN0Ig NkMgRTEgIEI3IEFGIDU2IEVDIDZEIEMxIEUxIENFIDogLi53Li57bC4uLlYubS4uLgowMTEw OiA3NSBFQyBCMCA3RiA3NyAwMCAwMCAwMCAgMTUgMDAgRjEgN0MgMkIgNTUgOTcgQkMgOiB1 Li4udy4uLi4uLnwrVS4uCjAxMjA6IDA2IDVGIDYyIEQwIDlBIDZCIEZEIDREICBBQSBGMyA1 QSBFMyBCNSAxNyAwMCAwMCA6IC5fYi4uay5NLi5aLi4uLi4KMDEzMDogMDEgMDAgM0UgRjkg ODYgQkIgMzEgNUIgIDJBIDk5IDQ4IDAxIEEwIDE1IDUxIDBDIDogLi4+Li4uMVsqLkguLi5R LgowMTQwOiBBRiA0NSBEMyA3RiAxMSAyOSAzOCA0OCAgNzAgMEQgMkUgQ0YgMEYgNzggRDcg MkYgOiAuRS4uLik4SHAuLi4ueC4vCjAxNTA6IEYxIDhEIDcwIDNGIDU3IEIyIDM5IDkyICA3 MCA0RCAzMyBBNCAyRiBENiAxNiBBMiA6IC4ucD9XLjkucE0zLi8uLi4KMDE2MDogMDcgNzIg OTUgOTcgMTkgRkEgNTQgNTYgIDc1IDFFIDlFIDVDIENBIEM4IEQ0IDZCIDogLnIuLi4uVFZ1 Li5cLi4uawowMTcwOiA2OSA1OSAyQSAzOSAzNyBGOSBBRCBFNiAgMjUgRDEgMjggOTYgRTcg RDAgRkEgNTEgOiBpWSo5Ny4uLiUuKC4uLi5RCjAxODA6IDc4IEUwIDUzIENFIEUwIDIwIEYz IDc0ICAzNCA3MyA2MiAxOCBFOCAyRSA1RiAzOSA6IHguUy4uIC50NHNiLi4uXzkKMDE5MDog OUUgMDIgQUIgQkQgNUEgNjggRTkgOUYgIEU5IDdEIEFEIDcxIEIwIDQ2IDM1IEJBIDogLi4u LlpoLi4ufS5xLkY1LgowMWEwOiA2MyBBQiBBRSBBQyAwMiBENiA4OCA3MyAgNjcgNDUgNDYg QUIgMEYgM0EgQzkgNTYgOiBjLi4uLi4uc2dFRi4uOi5WCjAxYjA6IEIyIDcyIDlDIDBFIDhD IEJCIEREIDIzICAyMCA5MCBFMyA4MCBFMyA0RiA2NSBFQyA6IC5yLi4uLi4jIC4uLi5PZS4K MDFjMDogRjQgRTYgODUgQkEgMDggRUYgOTAgNUUgIEYyIDA1IEJFIDAxIDg1IDRDIDVGIEEw IDogLi4uLi4uLl4uLi4uLkxfLgowMWQwOiAwNCA1MCA1NSA3OSAxQSBDRiBGOCA1MSAgOTkg RjMgMTQgODUgRkUgREIgMzQgNDUgOiAuUFV5Li4uUS4uLi4uLjRFCjAxZTA6IDEzIDg4IDVF IEZGIDk1IEY5IEFGIDE2ICBFRCAyQSAyQyBFOCBBNCBFMSBFNCA1MiA6IC4uXi4uLi4uLios Li4uLlIKMDFmMDogNTcgMDcgMzYgNzQgRTIgNDQgRkUgQTcgIDlDIDE0IDg1IDBDIEIwIEU1 IDMyIDQ1IDogVy42dC5ELi4uLi4uLi4yRQowMjAwOiA1OCA4MSBDQyBCOCAxMyA2MyAyRCA3 OSAgQzEgODkgQzQgNUIgQzEgNzggRjUgMDYgOiBYLi4uLmMteS4uLlsueC4uCjAyMTA6IDQ3 IEI4IDA1IEU1IDZGIDk4IDBFIENBICAyNiA3MCAxNSA0RSA4NiA0RCAwQiBFQSA6IEcuLi5v Li4uJnAuTi5NLi4KMDIyMDogMEUgRUEgM0YgN0EgMTggOEQgMTMgMTkgIDQ4IDNEIDhEIDRF IEVFIDQ1IDIyIDY3IDogLi4/ei4uLi5IPS5OLkUiZwowMjMwOiA2RiBCOSAwMCAwMCAwMSAw MSAwMCBBNiAgMDQgOTggOTAgMUMgNzIgRUYgNzkgQ0EgOiBvLi4uLi4uLi4uLi5yLnkuCjAy NDA6IEU2IDhCIDUxIDZCIDkxIEY1IDE4IDFFICBDQSBDRiBEQiBBQyA2NSA5NyAwNCA2NCA6 IC4uUWsuLi4uLi4uLmUuLmQKMDI1MDogOEEgQ0UgRkYgNTYgOEMgM0EgNkYgMDggIDM1IEQ2 IDRCIDNBIEYzIERBIDk3IEUwIDogLi4uVi46by41Lks6Li4uLgowMjYwOiBFNyBGMSBGOCAx QiBGOCA0NyAxMSBGQyAgMDEgMEUgOEYgOTUgODQgNEMgMDggODMgOiAuLi4uLkcuLi4uLi4u TC4uCjAyNzA6IDgwIDQyIENEIDMyIDdCIDg0IDBFIDMwICAzNCA4NiA4RCAxOSBBNCA0QyBF RiBCNyA6IC5CLjJ7Li4wNC4uLi5MLi4KMDI4MDogQTcgRDIgQ0MgMzggMTQgM0MgQkMgMUEg IDI0IEZFIDcwIEZGIEJGIEM0IDg3IEE4IDogLi4uOC48Li4kLnAuLi4uLgowMjkwOiBGMyAz NSA5MCA2MiA3OSA1OSBGNSBFQSAgNjIgNDUgRTQgMTcgNTQgMEEgOTAgNDIgOiAuNS5ieVku LmJFLi5ULi5CCjAyYTA6IDM0IDQyIEUzIDEwIDI4IEJFIEVCIDU1ICA5RCAyNyBFMSA2RiBD NyAxNiA1OCBEOCA6IDRCLi4oLi5VLicuby4uWC4KMDJiMDogNzEgOEYgRkIgMkQgREYgRjAg QzUgRDYgIDY1IDFCIDEzIDBCIDgwIEVBIDQyIDQ0IDogcS4uLS4uLi5lLi4uLi5CRAowMmMw OiAxNCBBRiAyOCA2NSBENSBGRCBDRiBBOCAgMjEgNkUgNzIgNzUgQjUgOEIgOTEgM0EgOiAu LihlLi4uLiFucnUuLi46CjAyZDA6IDc5IEFEIDhCIEVBIDcyIEM2IDM5IEY4ICBCMSA3QSA3 OCBGNiBDQSA4MyBGQyA0MSA6IHkuLi5yLjkuLnp4Li4uLkEKMDJlMDogOTUgNjIgNEIgRTgg NTIgNDEgOEIgMEIgIDRCIERGIDFDIEM3IDVDIEEwIEZFIEJEIDogLmJLLlJBLi5LLi4uXC4u LgowMmYwOiA2QiBCNyAzQSAxOSBBRiA0NCAyOCA2OCAgREMgN0EgMkIgMTkgQzkgMEQgQzgg NTggOiBrLjouLkQoaC56Ky4uLi5YCjAzMDA6IDEyIDIyIDE3IDhBIDdDIEMyIDAzIDJFICA1 QyBFOCBBMyBDMSA2MSAzQyA2QiA4RCA6IC4iLi58Li4uXC4uLmE8ay4KMDMxMDogODcgRDgg OEIgQjggNTcgMjggNTAgNkYgIDFEIDQ2IDRGIEY2IEUxIDg1IEFDIEJCIDogLi4uLlcoUG8u Rk8uLi4uLgowMzIwOiA4NyA5QiBFMSAwQSBBRCA5NSA2RiA4MCAgNEQgN0EgRjQgNzIgQTAg RkQgNkEgNTMgOiAuLi4uLi5vLk16LnIuLmpTCjAzMzA6IDc5IDc5IDhBIDEyIDdCIDRFIEZC IDAwICAwMCAwMCA4MCA1QSA4OCA2QSAwQyAyQyA6IHl5Li57Ti4uLi4uWi5qLiwKMDM0MDog RDQgMDYgREQgNkUgRDUgNDMgNEUgMDMgIERDIDQ5IEUzIDk1IDdGIEZGIERBIDFEIDogLi4u bi5DTi4uSS4uLi4uLgowMzUwOiA5MCBCQyBERSA3NyA1MSA5MiA0RCAwQyAgMzkgRjEgRTEg QUMgRjUgNEEgODUgNEEgOiAuLi53US5NLjkuLi4uSi5KCjAzNjA6IEU5IDkwIDU0IEY3IDRB IDFEIEEzIEVDICBFNiBFMyBGMSBGNCBFNCAyMiBFQiBCMCA6IC4uVC5KLi4uLi4uLi4iLi4K MDM3MDogMjAgRjcgNkMgQkUgNDggODMgRDYgRTYgIDBFIEEwIDI4IDVFIDk5IEI0IEE5IEEy IDogIC5sLkguLi4uLiheLi4uLgowMzgwOiA4RCA5OSBBRiBBNyA2NiBDQyA0NyBGRCAgODIg OTAgRkMgRjYgNTEgRjAgQTEgM0QgOiAuLi4uZi5HLi4uLi5RLi49CjAzOTA6IDQxIEY1IDlD IEM4IDQ2IDNBIEEyIEQ2ICBCRiA0MiAxNiA2QiA3NCBEQSBFNCAwMyA6IEEuLi5GOi4uLkIu a3QuLi4KMDNhMDogRkQgRDAgNEYgMjEgRjUgMzUgQTEgQTEgIDI4IERGIEYxIDY3IDVBIEU0 IDE1IEJEIDogLi5PIS41Li4oLi5nWi4uLgowM2IwOiA2QyAwNiA1MyBBMyBGNiA2OCBBOSA4 QiAgNjYgQjggQzkgMDAgMDAgMDAgMzcgMDAgOiBsLlMuLmguLmYuLi4uLjcuCjAzYzA6IDAw IDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAwMCAyOCA1NyAzMiA6IC4uLnNz aC1kc3MuLi4oVzIKMDNkMDogM0QgQTEgOUMgNjUgN0EgMTMgODIgQkQgIEY4IDI3IDA5IEZC IEMyIEUwIDg1IDY5IDogPS4uZXouLi4uJy4uLi4uaQowM2UwOiBCOSBGQyBDQiBFOCAyRiA1 QSBGRSBGNSAgN0MgRkYgQTUgMEYgQ0UgNTYgQUIgMkUgOiAuLi4uL1ouLnwuLi4uVi4uCjAz ZjA6IDY5IDg0IDBDIEQwIENFIDlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IGkuLi4uLgpbbGlic3NoMl0gMS4wNDgzMjIgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAzMSBy ZWNlaXZlZCwgbGVuZ3RoPTEwMTQKW2xpYnNzaDJdIDEuMDQ4MzI1IFRyYW5zcG9ydDogTG9v a2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDMxCltsaWJzc2gyXSAxLjA0ODM1NyBLZXkgRXg6 IFNlcnZlcidzIE1ENSBGaW5nZXJwcmludDogZTc6MDQ6OGI6ZmY6ZGQ6NjM6NDQ6YTM6YWM6 YjA6Yjc6Mzk6ZjE6MDE6NWQ6YTUKW2xpYnNzaDJdIDEuMDQ4MzcyIEtleSBFeDogU2VydmVy J3MgU0hBMSBGaW5nZXJwcmludDogOGU6ZmY6OWY6YWQ6NTk6YmI6Mjg6MGQ6Y2U6YmQ6OTY6 MWM6ODA6NTY6N2I6M2E6ZGY6NjU6ZmQ6ZDIKW2xpYnNzaDJdIDEuMDU0MzMwIEtleSBFeDog U2VuZGluZyBORVdLRVlTIG1lc3NhZ2UKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxh aW4gKDEgYnl0ZXMpCjAwMDA6IDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IC4KW2xpYnNzaDJdIDEuMDU0NDA0IFNvY2tldDogU2VudCAxNi8x NiBieXRlcyBhdCAweDUwNjdkOAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBzZW5kKCkg KDE2IGJ5dGVzKQowMDAwOiAwMCAwMCAwMCAwQyAwQSAxNSA0NyBDMyAgNTEgQ0YgRDMgQzkg QTMgMEUgOUEgNjAgOiAuLi4uLi5HLlEuLi4uLi5gCltsaWJzc2gyXSAxLjA1NDQxMyBUcmFu c3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAyMQpbbGlic3NoMl0gMS4wNTQ0 MTggRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24g a2V5cwpbbGlic3NoMl0gMS4wNTQ1OTIgU29ja2V0OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMg dG8gMHg1MDI3OTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgzMiBieXRl cykKMDAwMDogMDAgMDAgMDAgMEMgMDYgMDIgMDAgMDAgIDAwIDAwIEI5IEVGIEVFIDRCIDMz IDg5IDogLi4uLi4uLi4uLi4uLkszLgowMDEwOiAwMCAwMCAwMCAwQyAwQSAxNSBBNiA4MiAg MDcgNTQgNzYgRTYgNDIgMzYgNzkgNDUgOiAuLi4uLi4uLi5Udi5CNnlFCj0+IGxpYnNzaDJf dHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDEu MDU0NjE0IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4g bGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxIGJ5dGVzKQowMDAwOiAxNSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuCltsaWJzc2gy XSAxLjA1NDYyNSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIxIHJlY2VpdmVkLCBsZW5ndGg9 MQpbbGlic3NoMl0gMS4wNTQ2MzAgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2Yg dHlwZTogMjEKW2xpYnNzaDJdIDEuMDU0NjMzIEtleSBFeDogUmVjZWl2ZWQgTkVXS0VZUyBt ZXNzYWdlCltsaWJzc2gyXSAxLjA1NDYzNyBLZXkgRXg6IHNlc3Npb25faWQgY2FsY3VsYXRl ZAovdXNyL2xvY2FsL2FwcC9ldmVycGFuL2xpYnNzaDItMS40LjIvZXhhbXBsZS8ubGlicy9z Y3A6IHJlbG9jYXRpb24gZXJyb3I6IC91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vbGlic3NoMi0x LjQuMi9zcmMvLmxpYnMvbGlic3NoMi5zby4xOiBzeW1ib2wgZ2NyeV9jaXBoZXJfc2V0a2V5 LCB2ZXJzaW9uIEdDUllQVF8xLjIgbm90IGRlZmluZWQgaW4gZmlsZSBsaWJnY3J5cHQuc28u MTEgd2l0aCBsaW5rIHRpbWUgcmVmZXJlbmNlCg== ------=_NextPart_50769AF3_094D7588_7C17F916 Content-Type: application/octet-stream; charset="gb18030"; name="scp_openssl.log" Content-Disposition: attachment; filename="scp_openssl.log" Content-Transfer-Encoding: base64 W2xpYnNzaDJdIDAuNTc1NDIzIFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2Nr ZXQgNQpbbGlic3NoMl0gMC41NzU0NzIgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NI LTIuMC1saWJzc2gyXzEuNC4yCltsaWJzc2gyXSAwLjU3NTQ4NiBTb2NrZXQ6IFNlbnQgMjMv MjMgYnl0ZXMgYXQgMHgyYjhkOTI4YTkzN2QrMApbbGlic3NoMl0gMC41NzU0OTQgU29ja2V0 OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExCltsaWJzc2gyXSAwLjU3NTQ5NyBGYWlsdXJl IEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2MzMx IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjMzOSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzNDMgU29ja2V0OiBS ZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2MzQ3IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjM1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzNTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXIKW2xpYnNzaDJdIDAuNTc2MzYwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy CltsaWJzc2gyXSAwLjU3NjM2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGli c3NoMl0gMC41NzYzNjggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJd IDAuNTc2MzcyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3 NjM3NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzODAg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2Mzg3IFNvY2tl dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjM5MCBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzYzOTMgU29ja2V0OiBSZWN2ZWQg MSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2Mzk2IFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjM5OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcgpbbGlic3NoMl0gMC41NzY0MDIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIK W2xpYnNzaDJdIDAuNTc2NDA0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJz c2gyXSAwLjU3NjQwNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0g MC41NzY0MTAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2 NDE1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQxOCBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0MjEgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDI0IFNvY2tldDogUmVj dmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQyNiBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0MjkgU29ja2V0OiBSZWN2ZWQgMSBieXRl cyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyCltsaWJzc2gyXSAwLjU3NjQzNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpb bGlic3NoMl0gMC41NzY0MzggU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNz aDJdIDAuNTc2NDQxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAw LjU3NjQ0NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0 NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDUwIFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ1MyBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0NTYgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDU5IFNvY2tldDogUmVjdmVkIDEg Ynl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ2MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcgpbbGlic3NoMl0gMC41NzY0NjQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u ZXIKW2xpYnNzaDJdIDAuNTc2NDY3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyClts aWJzc2gyXSAwLjU3NjQ3MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3No Ml0gMC41NzY0NzMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAu NTc2NDc2IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ3 OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0ODIgU29j a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDg1IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjU3NjQ4OCBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC41NzY0OTEgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNTc2NDk0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg YmFubmVyCltsaWJzc2gyXSAwLjU3NjQ5NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cgpbbGlic3NoMl0gMC41NzY1MDAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xp YnNzaDJdIDAuNTc2NTAzIFRyYW5zcG9ydDogUmVjZWl2ZWQgQmFubmVyOiBTU0gtMi4wLTMu Mi45LjEgU1NIIFNlY3VyZSBTaGVsbCAobm9uLWNvbW1lcmNpYWwpCltsaWJzc2gyXSAwLjU3 NjY1NSBLZXkgRXg6IFNlbnQgS0VYOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsZGlm ZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSxkaWZmaWUtaGVsbG1hbi1ncm91cDEt c2hhMQpbbGlic3NoMl0gMC41NzY2NjEgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Es c3NoLWRzcwpbbGlic3NoMl0gMC41NzY2NjQgS2V5IEV4OiBTZW50IENSWVBUX0NTOiBhZXMx MjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0Bs eXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFlczEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2Zv dXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywzZGVzLWNiYwpbbGlic3NoMl0gMC41NzY2Njcg S2V5IEV4OiBTZW50IENSWVBUX1NDOiBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0 cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFl czEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2ZvdXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywz ZGVzLWNiYwpbbGlic3NoMl0gMC41NzY2NzAgS2V5IEV4OiBTZW50IE1BQ19DUzogaG1hYy1z aGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05NixobWFjLXJpcGVtZDE2MCxo bWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0gMC41NzY2NzMgS2V5IEV4OiBT ZW50IE1BQ19TQzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05 NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0g MC41NzY2NzUgS2V5IEV4OiBTZW50IENPTVBfQ1M6IG5vbmUKW2xpYnNzaDJdIDAuNTc2Njc4 IEtleSBFeDogU2VudCBDT01QX1NDOiBub25lCltsaWJzc2gyXSAwLjU3NjY4MCBLZXkgRXg6 IFNlbnQgTEFOR19DUzogCltsaWJzc2gyXSAwLjU3NjY4MyBLZXkgRXg6IFNlbnQgTEFOR19T QzogCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMpCjAwMDA6 IDE0IDU4IDA0IEQ2IEMxIDEyIENGIDlBICBCOSBGRSAwMiBGRiBENiAwNyA5NCBERiA6IC5Y Li4uLi4uLi4uLi4uLi4KMDAxMDogRUUgMDAgMDAgMDAgNTkgNjQgNjkgNjYgIDY2IDY5IDY1 IDJEIDY4IDY1IDZDIDZDIDogLi4uLllkaWZmaWUtaGVsbAowMDIwOiA2RCA2MSA2RSAyRCA2 NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGEx CjAwMzA6IDJDIDY0IDY5IDY2IDY2IDY5IDY1IDJEICA2OCA2NSA2QyA2QyA2RCA2MSA2RSAy RCA6ICxkaWZmaWUtaGVsbG1hbi0KMDA0MDogNjcgNzIgNkYgNzUgNzAgMkQgNjUgNzggIDYz IDY4IDYxIDZFIDY3IDY1IDJEIDczIDogZ3JvdXAtZXhjaGFuZ2UtcwowMDUwOiA2OCA2MSAz MSAyQyA2NCA2OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmll LWhlbGxtCjAwNjA6IDYxIDZFIDJEIDY3IDcyIDZGIDc1IDcwICAzMSAyRCA3MyA2OCA2MSAz MSAwMCAwMCA6IGFuLWdyb3VwMS1zaGExLi4KMDA3MDogMDAgMEYgNzMgNzMgNjggMkQgNzIg NzMgIDYxIDJDIDczIDczIDY4IDJEIDY0IDczIDogLi5zc2gtcnNhLHNzaC1kcwowMDgwOiA3 MyAwMCAwMCAwMCA5MiA2MSA2NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4u LmFlczEyOC1jdHIsCjAwOTA6IDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzICA3NCA3MiAyQyA2 MSA2NSA3MyAzMiAzNSA6IGFlczE5Mi1jdHIsYWVzMjUKMDBhMDogMzYgMkQgNjMgNzQgNzIg MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogNi1jdHIsYWVzMjU2LWNiYwow MGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkg OiAscmlqbmRhZWwtY2JjQGx5CjAwYzA6IDczIDYxIDc0IDZGIDcyIDJFIDZDIDY5ICA3NSAy RSA3MyA2NSAyQyA2MSA2NSA3MyA6IHNhdG9yLmxpdS5zZSxhZXMKMDBkMDogMzEgMzkgMzIg MkQgNjMgNjIgNjMgMkMgIDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzIDogMTkyLWNiYyxhZXMx MjgtYwowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAgNjkgNzMgNjggMkQgNjMgNjIg NjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsCjAwZjA6IDYxIDcyIDYzIDY2IDZGIDc1IDcyIDMx ICAzMiAzOCAyQyA2MSA3MiA2MyA2NiA2RiA6IGFyY2ZvdXIxMjgsYXJjZm8KMDEwMDogNzUg NzIgMkMgNjMgNjEgNzMgNzQgMzEgIDMyIDM4IDJEIDYzIDYyIDYzIDJDIDMzIDogdXIsY2Fz dDEyOC1jYmMsMwowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAgMDAgOTIgNjEg NjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyCjAxMjA6IDM4IDJEIDYzIDc0IDcyIDJD IDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA3NCA3MiA6IDgtY3RyLGFlczE5Mi1jdHIKMDEz MDogMkMgNjEgNjUgNzMgMzIgMzUgMzYgMkQgIDYzIDc0IDcyIDJDIDYxIDY1IDczIDMyIDog LGFlczI1Ni1jdHIsYWVzMgowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtCjAxNTA6IDYzIDYyIDYzIDQw IDZDIDc5IDczIDYxICA3NCA2RiA3MiAyRSA2QyA2OSA3NSAyRSA6IGNiY0BseXNhdG9yLmxp dS4KMDE2MDogNzMgNjUgMkMgNjEgNjUgNzMgMzEgMzkgIDMyIDJEIDYzIDYyIDYzIDJDIDYx IDY1IDogc2UsYWVzMTkyLWNiYyxhZQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAg MkMgNjIgNkMgNkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzCjAxODA6IDY4IDJE IDYzIDYyIDYzIDJDIDYxIDcyICA2MyA2NiA2RiA3NSA3MiAzMSAzMiAzOCA6IGgtY2JjLGFy Y2ZvdXIxMjgKMDE5MDogMkMgNjEgNzIgNjMgNjYgNkYgNzUgNzIgIDJDIDYzIDYxIDczIDc0 IDMxIDMyIDM4IDogLGFyY2ZvdXIsY2FzdDEyOAowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2 NCA2NSAgNzMgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uCjAxYjA6 IDU1IDY4IDZEIDYxIDYzIDJEIDczIDY4ICA2MSAzMSAyQyA2OCA2RCA2MSA2MyAyRCA6IFVo bWFjLXNoYTEsaG1hYy0KMDFjMDogNzMgNjggNjEgMzEgMkQgMzkgMzYgMkMgIDY4IDZEIDYx IDYzIDJEIDZEIDY0IDM1IDogc2hhMS05NixobWFjLW1kNQowMWQwOiAyQyA2OCA2RCA2MSA2 MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMgNjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1h CjAxZTA6IDYzIDJEIDcyIDY5IDcwIDY1IDZEIDY0ICAzMSAzNiAzMCAyQyA2OCA2RCA2MSA2 MyA6IGMtcmlwZW1kMTYwLGhtYWMKMDFmMDogMkQgNzIgNjkgNzAgNjUgNkQgNjQgMzEgIDM2 IDMwIDQwIDZGIDcwIDY1IDZFIDczIDogLXJpcGVtZDE2MEBvcGVucwowMjAwOiA3MyA2OCAy RSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMgMkQgNzMgOiBzaC5jb20uLi5V aG1hYy1zCjAyMTA6IDY4IDYxIDMxIDJDIDY4IDZEIDYxIDYzICAyRCA3MyA2OCA2MSAzMSAy RCAzOSAzNiA6IGhhMSxobWFjLXNoYTEtOTYKMDIyMDogMkMgNjggNkQgNjEgNjMgMkQgNkQg NjQgIDM1IDJDIDY4IDZEIDYxIDYzIDJEIDZEIDogLGhtYWMtbWQ1LGhtYWMtbQowMjMwOiA2 NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUgNkQgOiBkNS05 NixobWFjLXJpcGVtCjAyNDA6IDY0IDMxIDM2IDMwIDJDIDY4IDZEIDYxICA2MyAyRCA3MiA2 OSA3MCA2NSA2RCA2NCA6IGQxNjAsaG1hYy1yaXBlbWQKMDI1MDogMzEgMzYgMzAgNDAgNkYg NzAgNjUgNkUgIDczIDczIDY4IDJFIDYzIDZGIDZEIDAwIDogMTYwQG9wZW5zc2guY29tLgow MjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg OiAuLi5ub25lLi4uLm5vbmUuCjAyNzA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAw MCAwMCAwMCAgICAgICAgICAgICA6IC4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41NzY4MDMg U29ja2V0OiBTZW50IDY0OC82NDggYnl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90cmFu c3BvcnRfd3JpdGUgc2VuZCgpICg2NDggYnl0ZXMpCjAwMDA6IDAwIDAwIDAyIDg0IDA3IDE0 IDU4IDA0ICBENiBDMSAxMiBDRiA5QSBCOSBGRSAwMiA6IC4uLi4uLlguLi4uLi4uLi4KMDAx MDogRkYgRDYgMDcgOTQgREYgRUUgMDAgMDAgIDAwIDU5IDY0IDY5IDY2IDY2IDY5IDY1IDog Li4uLi4uLi4uWWRpZmZpZQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcg NzIgNkYgNzUgNzAgMzEgMzQgOiAtaGVsbG1hbi1ncm91cDE0CjAwMzA6IDJEIDczIDY4IDYx IDMxIDJDIDY0IDY5ICA2NiA2NiA2OSA2NSAyRCA2OCA2NSA2QyA6IC1zaGExLGRpZmZpZS1o ZWwKMDA0MDogNkMgNkQgNjEgNkUgMkQgNjcgNzIgNkYgIDc1IDcwIDJEIDY1IDc4IDYzIDY4 IDYxIDogbG1hbi1ncm91cC1leGNoYQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAg MkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQgOiBuZ2Utc2hhMSxkaWZmaWUtCjAwNjA6IDY4IDY1 IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3MCAzMSAyRCA3MyA6IGhlbGxtYW4t Z3JvdXAxLXMKMDA3MDogNjggNjEgMzEgMDAgMDAgMDAgMEYgNzMgIDczIDY4IDJEIDcyIDcz IDYxIDJDIDczIDogaGExLi4uLnNzaC1yc2EscwowMDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAw MCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBzaC1kc3MuLi4uYWVzMTI4CjAwOTA6 IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAzMiAyRCA2MyA3NCA3MiAyQyA6IC1j dHIsYWVzMTkyLWN0ciwKMDBhMDogNjEgNjUgNzMgMzIgMzUgMzYgMkQgNjMgIDc0IDcyIDJD IDYxIDY1IDczIDMyIDM1IDogYWVzMjU2LWN0cixhZXMyNQowMGIwOiAzNiAyRCA2MyA2MiA2 MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNiYyxyaWpuZGFlbC1j CjAwYzA6IDYyIDYzIDQwIDZDIDc5IDczIDYxIDc0ICA2RiA3MiAyRSA2QyA2OSA3NSAyRSA3 MyA6IGJjQGx5c2F0b3IubGl1LnMKMDBkMDogNjUgMkMgNjEgNjUgNzMgMzEgMzkgMzIgIDJE IDYzIDYyIDYzIDJDIDYxIDY1IDczIDogZSxhZXMxOTItY2JjLGFlcwowMGUwOiAzMSAzMiAz OCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2JjLGJs b3dmaXNoCjAwZjA6IDJEIDYzIDYyIDYzIDJDIDYxIDcyIDYzICA2NiA2RiA3NSA3MiAzMSAz MiAzOCAyQyA6IC1jYmMsYXJjZm91cjEyOCwKMDEwMDogNjEgNzIgNjMgNjYgNkYgNzUgNzIg MkMgIDYzIDYxIDczIDc0IDMxIDMyIDM4IDJEIDogYXJjZm91cixjYXN0MTI4LQowMTEwOiA2 MyA2MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMs M2Rlcy1jYmMuLi4uCjAxMjA6IDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzICA3NCA3MiAyQyA2 MSA2NSA3MyAzMSAzOSA6IGFlczEyOC1jdHIsYWVzMTkKMDEzMDogMzIgMkQgNjMgNzQgNzIg MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDc0IDcyIDogMi1jdHIsYWVzMjU2LWN0cgow MTQwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUg OiAsYWVzMjU2LWNiYyxyaWpuCjAxNTA6IDY0IDYxIDY1IDZDIDJEIDYzIDYyIDYzICA0MCA2 QyA3OSA3MyA2MSA3NCA2RiA3MiA6IGRhZWwtY2JjQGx5c2F0b3IKMDE2MDogMkUgNkMgNjkg NzUgMkUgNzMgNjUgMkMgIDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzIDogLmxpdS5zZSxhZXMx OTItYwowMTcwOiA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMg NjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJsCjAxODA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz ICA2MiA2MyAyQyA2MSA3MiA2MyA2NiA2RiA6IG93ZmlzaC1jYmMsYXJjZm8KMDE5MDogNzUg NzIgMzEgMzIgMzggMkMgNjEgNzIgIDYzIDY2IDZGIDc1IDcyIDJDIDYzIDYxIDogdXIxMjgs YXJjZm91cixjYQowMWEwOiA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQg NjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jCjAxYjA6IDYyIDYzIDAwIDAwIDAwIDU1 IDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyQyA6IGJjLi4uVWhtYWMtc2hhMSwKMDFj MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJEIDM5IDM2IDJDIDY4IDZEIDYxIDog aG1hYy1zaGExLTk2LGhtYQowMWQwOiA2MyAyRCA2RCA2NCAzNSAyQyA2OCA2RCAgNjEgNjMg MkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05CjAxZTA6IDM2IDJDIDY4IDZE IDYxIDYzIDJEIDcyICA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCA6IDYsaG1hYy1yaXBlbWQx NjAKMDFmMDogMkMgNjggNkQgNjEgNjMgMkQgNzIgNjkgIDcwIDY1IDZEIDY0IDMxIDM2IDMw IDQwIDogLGhtYWMtcmlwZW1kMTYwQAowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2OCAyRSAg NjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoCjAyMTA6IDZEIDYx IDYzIDJEIDczIDY4IDYxIDMxICAyQyA2OCA2RCA2MSA2MyAyRCA3MyA2OCA6IG1hYy1zaGEx LGhtYWMtc2gKMDIyMDogNjEgMzEgMkQgMzkgMzYgMkMgNjggNkQgIDYxIDYzIDJEIDZEIDY0 IDM1IDJDIDY4IDogYTEtOTYsaG1hYy1tZDUsaAowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAz NSAyRCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtCjAyNDA6 IDcyIDY5IDcwIDY1IDZEIDY0IDMxIDM2ICAzMCAyQyA2OCA2RCA2MSA2MyAyRCA3MiA6IHJp cGVtZDE2MCxobWFjLXIKMDI1MDogNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgIDQwIDZGIDcw IDY1IDZFIDczIDczIDY4IDogaXBlbWQxNjBAb3BlbnNzaAowMjYwOiAyRSA2MyA2RiA2RCAw MCAwMCAwMCAwNCAgNkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4u CjAyNzA6IDZFIDZGIDZFIDY1IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCA6IG5vbmUuLi4uLi4uLi4uLi4KMDI4MDogMDAgREEgNUIgM0QgQzggNTggNDMgRjQgICAg ICAgICAgICAgICAgICAgICAgICAgIDogLi5bPS5YQy4KW2xpYnNzaDJdIDAuNTc2OTA3IFRy YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwCltsaWJzc2gyXSAwLjU3 NjkxNCBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMAo9PiBs aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg0ODggYnl0ZXMpCjAwMDA6IDAwIDAwIDAw IDBDIDA2IDAyIDAwIDAwICAwMCAwMCA2NiBFRCAyNCAyMSBBQyAxQSA6IC4uLi4uLi4uLi5m LiQhLi4KMDAxMDogMDAgMDAgMDEgRDQgMDYgMTQgRDEgNjUgIDBCIENBIEE4IDZEIDgzIEI0 IDc5IEJDIDogLi4uLi4uLmUuLi5tLi55LgowMDIwOiA3MSBDNSA1MiBBMiBCMSA1OCAwMCAw MCAgMDAgMUEgNjQgNjkgNjYgNjYgNjkgNjUgOiBxLlIuLlguLi4uZGlmZmllCjAwMzA6IDJE IDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAzMSAyRCA6IC1oZWxs bWFuLWdyb3VwMS0KMDA0MDogNzMgNjggNjEgMzEgMDAgMDAgMDAgMDcgIDczIDczIDY4IDJE IDY0IDczIDczIDAwIDogc2hhMS4uLi5zc2gtZHNzLgowMDUwOiAwMCAwMCA4MyA2MSA2NSA3 MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgMzMgNjQgOiAuLi5hZXMxMjgtY2JjLDNkCjAw NjA6IDY1IDczIDJEIDYzIDYyIDYzIDJDIDc0ICA3NyA2RiA2NiA2OSA3MyA2OCAzMSAzMiA6 IGVzLWNiYyx0d29maXNoMTIKMDA3MDogMzggMkQgNjMgNjIgNjMgMkMgNjMgNjEgIDczIDc0 IDMxIDMyIDM4IDJEIDYzIDYyIDogOC1jYmMsY2FzdDEyOC1jYgowMDgwOiA2MyAyQyA3NCA3 NyA2RiA2NiA2OSA3MyAgNjggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBjLHR3b2Zpc2gtY2Jj LGJsCjAwOTA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAz MSAzOSA6IG93ZmlzaC1jYmMsYWVzMTkKMDBhMDogMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUg IDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogMi1jYmMsYWVzMjU2LWNiYwowMGIwOiAyQyA3 NCA3NyA2RiA2NiA2OSA3MyA2OCAgMzEgMzkgMzIgMkQgNjMgNjIgNjMgMkMgOiAsdHdvZmlz aDE5Mi1jYmMsCjAwYzA6IDc0IDc3IDZGIDY2IDY5IDczIDY4IDMyICAzNSAzNiAyRCA2MyA2 MiA2MyAyQyA2MSA6IHR3b2Zpc2gyNTYtY2JjLGEKMDBkMDogNzIgNjMgNjYgNkYgNzUgNzIg MDAgMDAgIDAwIDgzIDYxIDY1IDczIDMxIDMyIDM4IDogcmNmb3VyLi4uLmFlczEyOAowMGUw OiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIgNjMgMkMgNzQgNzcgOiAt Y2JjLDNkZXMtY2JjLHR3CjAwZjA6IDZGIDY2IDY5IDczIDY4IDMxIDMyIDM4ICAyRCA2MyA2 MiA2MyAyQyA2MyA2MSA3MyA6IG9maXNoMTI4LWNiYyxjYXMKMDEwMDogNzQgMzEgMzIgMzgg MkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogdDEyOC1jYmMsdHdvZmlz aAowMTEwOiAyRCA2MyA2MiA2MyAyQyA2MiA2QyA2RiAgNzcgNjYgNjkgNzMgNjggMkQgNjMg NjIgOiAtY2JjLGJsb3dmaXNoLWNiCjAxMjA6IDYzIDJDIDYxIDY1IDczIDMxIDM5IDMyICAy RCA2MyA2MiA2MyAyQyA2MSA2NSA3MyA6IGMsYWVzMTkyLWNiYyxhZXMKMDEzMDogMzIgMzUg MzYgMkQgNjMgNjIgNjMgMkMgIDc0IDc3IDZGIDY2IDY5IDczIDY4IDMxIDogMjU2LWNiYyx0 d29maXNoMQowMTQwOiAzOSAzMiAyRCA2MyA2MiA2MyAyQyA3NCAgNzcgNkYgNjYgNjkgNzMg NjggMzIgMzUgOiA5Mi1jYmMsdHdvZmlzaDI1CjAxNTA6IDM2IDJEIDYzIDYyIDYzIDJDIDYx IDcyICA2MyA2NiA2RiA3NSA3MiAwMCAwMCAwMCA6IDYtY2JjLGFyY2ZvdXIuLi4KMDE2MDog MkIgNjggNkQgNjEgNjMgMkQgNzMgNjggIDYxIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDogK2ht YWMtc2hhMSxobWFjLQowMTcwOiA3MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEg NjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2LGhtYWMtbWQ1CjAxODA6IDJDIDY4IDZEIDYxIDYz IDJEIDZEIDY0ICAzNSAyRCAzOSAzNiAwMCAwMCAwMCAyQiA6ICxobWFjLW1kNS05Ni4uLisK MDE5MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDcz IDogaG1hYy1zaGExLGhtYWMtcwowMWEwOiA2OCA2MSAzMSAyRCAzOSAzNiAyQyA2OCAgNkQg NjEgNjMgMkQgNkQgNjQgMzUgMkMgOiBoYTEtOTYsaG1hYy1tZDUsCjAxYjA6IDY4IDZEIDYx IDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAwMCAwMCAwMCAwOSA2RSA6IGhtYWMtbWQ1LTk2 Li4uLm4KMDFjMDogNkYgNkUgNjUgMkMgN0EgNkMgNjkgNjIgIDAwIDAwIDAwIDA5IDZFIDZG IDZFIDY1IDogb25lLHpsaWIuLi4ubm9uZQowMWQwOiAyQyA3QSA2QyA2OSA2MiAwMCAwMCAw MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiAsemxpYi4uLi4uLi4uLi4uCjAxZTA6IDAw IDAwIEYxIEU1IDg1IEJEIDQwIDJFICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u LkAuCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDog MDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4u Li4KW2xpYnNzaDJdIDAuNTc2OTk3IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZl ZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg0NjEgYnl0 ZXMpCjAwMDA6IDE0IEQxIDY1IDBCIENBIEE4IDZEIDgzICBCNCA3OSBCQyA3MSBDNSA1MiBB MiBCMSA6IC4uZS4uLm0uLnkucS5SLi4KMDAxMDogNTggMDAgMDAgMDAgMUEgNjQgNjkgNjYg IDY2IDY5IDY1IDJEIDY4IDY1IDZDIDZDIDogWC4uLi5kaWZmaWUtaGVsbAowMDIwOiA2RCA2 MSA2RSAyRCA2NyA3MiA2RiA3NSAgNzAgMzEgMkQgNzMgNjggNjEgMzEgMDAgOiBtYW4tZ3Jv dXAxLXNoYTEuCjAwMzA6IDAwIDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAw MCA4MyA2MSA2NSA6IC4uLnNzaC1kc3MuLi4uYWUKMDA0MDogNzMgMzEgMzIgMzggMkQgNjMg NjIgNjMgIDJDIDMzIDY0IDY1IDczIDJEIDYzIDYyIDogczEyOC1jYmMsM2Rlcy1jYgowMDUw OiA2MyAyQyA3NCA3NyA2RiA2NiA2OSA3MyAgNjggMzEgMzIgMzggMkQgNjMgNjIgNjMgOiBj LHR3b2Zpc2gxMjgtY2JjCjAwNjA6IDJDIDYzIDYxIDczIDc0IDMxIDMyIDM4ICAyRCA2MyA2 MiA2MyAyQyA3NCA3NyA2RiA6ICxjYXN0MTI4LWNiYyx0d28KMDA3MDogNjYgNjkgNzMgNjgg MkQgNjMgNjIgNjMgIDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczIDogZmlzaC1jYmMsYmxvd2Zp cwowMDgwOiA2OCAyRCA2MyA2MiA2MyAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNjIg NjMgOiBoLWNiYyxhZXMxOTItY2JjCjAwOTA6IDJDIDYxIDY1IDczIDMyIDM1IDM2IDJEICA2 MyA2MiA2MyAyQyA3NCA3NyA2RiA2NiA6ICxhZXMyNTYtY2JjLHR3b2YKMDBhMDogNjkgNzMg NjggMzEgMzkgMzIgMkQgNjMgIDYyIDYzIDJDIDc0IDc3IDZGIDY2IDY5IDogaXNoMTkyLWNi Yyx0d29maQowMGIwOiA3MyA2OCAzMiAzNSAzNiAyRCA2MyA2MiAgNjMgMkMgNjEgNzIgNjMg NjYgNkYgNzUgOiBzaDI1Ni1jYmMsYXJjZm91CjAwYzA6IDcyIDAwIDAwIDAwIDgzIDYxIDY1 IDczICAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyA6IHIuLi4uYWVzMTI4LWNiYywKMDBkMDog MzMgNjQgNjUgNzMgMkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogM2Rl cy1jYmMsdHdvZmlzaAowMGUwOiAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjMgNjEgNzMg NzQgMzEgMzIgMzggMkQgOiAxMjgtY2JjLGNhc3QxMjgtCjAwZjA6IDYzIDYyIDYzIDJDIDc0 IDc3IDZGIDY2ICA2OSA3MyA2OCAyRCA2MyA2MiA2MyAyQyA6IGNiYyx0d29maXNoLWNiYywK MDEwMDogNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggIDJEIDYzIDYyIDYzIDJDIDYxIDY1IDcz IDogYmxvd2Zpc2gtY2JjLGFlcwowMTEwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEg NjUgNzMgMzIgMzUgMzYgMkQgNjMgOiAxOTItY2JjLGFlczI1Ni1jCjAxMjA6IDYyIDYzIDJD IDc0IDc3IDZGIDY2IDY5ICA3MyA2OCAzMSAzOSAzMiAyRCA2MyA2MiA6IGJjLHR3b2Zpc2gx OTItY2IKMDEzMDogNjMgMkMgNzQgNzcgNkYgNjYgNjkgNzMgIDY4IDMyIDM1IDM2IDJEIDYz IDYyIDYzIDogYyx0d29maXNoMjU2LWNiYwowMTQwOiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3 MiAgMDAgMDAgMDAgMkIgNjggNkQgNjEgNjMgOiAsYXJjZm91ci4uLitobWFjCjAxNTA6IDJE IDczIDY4IDYxIDMxIDJDIDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyRCA6IC1zaGEx LGhtYWMtc2hhMS0KMDE2MDogMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgIDZEIDY0IDM1IDJD IDY4IDZEIDYxIDYzIDogOTYsaG1hYy1tZDUsaG1hYwowMTcwOiAyRCA2RCA2NCAzNSAyRCAz OSAzNiAwMCAgMDAgMDAgMkIgNjggNkQgNjEgNjMgMkQgOiAtbWQ1LTk2Li4uK2htYWMtCjAx ODA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6 IHNoYTEsaG1hYy1zaGExLTkKMDE5MDogMzYgMkMgNjggNkQgNjEgNjMgMkQgNkQgIDY0IDM1 IDJDIDY4IDZEIDYxIDYzIDJEIDogNixobWFjLW1kNSxobWFjLQowMWEwOiA2RCA2NCAzNSAy RCAzOSAzNiAwMCAwMCAgMDAgMDkgNkUgNkYgNkUgNjUgMkMgN0EgOiBtZDUtOTYuLi4ubm9u ZSx6CjAxYjA6IDZDIDY5IDYyIDAwIDAwIDAwIDA5IDZFICA2RiA2RSA2NSAyQyA3QSA2QyA2 OSA2MiA6IGxpYi4uLi5ub25lLHpsaWIKMDFjMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg IDAwIDAwIDAwIDAwIDAwICAgICAgICAgIDogLi4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41 NzcwNzAgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3RoPTQ2MQpb bGlic3NoMl0gMC41NzcwNzMgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw ZTogMjAKW2xpYnNzaDJdIDAuNTc3MDg0IEtleSBFeDogQWdyZWVkIG9uIEtFWCBtZXRob2Q6 IGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCltsaWJzc2gyXSAwLjU3NzA4NyBLZXkgRXg6 IEFncmVlZCBvbiBIT1NUS0VZIG1ldGhvZDogc3NoLWRzcwpbbGlic3NoMl0gMC41NzcwOTAg S2V5IEV4OiBBZ3JlZWQgb24gQ1JZUFRfQ1MgbWV0aG9kOiBhZXMyNTYtY2JjCltsaWJzc2gy XSAwLjU3NzA5MiBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczI1Ni1j YmMKW2xpYnNzaDJdIDAuNTc3MDk1IEtleSBFeDogQWdyZWVkIG9uIE1BQ19DUyBtZXRob2Q6 IGhtYWMtc2hhMQpbbGlic3NoMl0gMC41NzcwOTcgS2V5IEV4OiBBZ3JlZWQgb24gTUFDX1ND IG1ldGhvZDogaG1hYy1zaGExCltsaWJzc2gyXSAwLjU3NzEwMCBLZXkgRXg6IEFncmVlZCBv biBDT01QX0NTIG1ldGhvZDogbm9uZQpbbGlic3NoMl0gMC41NzcxMDIgS2V5IEV4OiBBZ3Jl ZWQgb24gQ09NUF9TQyBtZXRob2Q6IG5vbmUKW2xpYnNzaDJdIDAuNTc3MTExIEtleSBFeDog SW5pdGlhdGluZyBEaWZmaWUtSGVsbG1hbiBHcm91cDEgS2V5IEV4Y2hhbmdlCltsaWJzc2gy XSAwLjU3NzM3MCBLZXkgRXg6IFNlbmRpbmcgS0VYIHBhY2tldCAzMAo9PiBsaWJzc2gyX3Ry YW5zcG9ydF93cml0ZSBwbGFpbiAoMTM0IGJ5dGVzKQowMDAwOiAxRSAwMCAwMCAwMCA4MSAw MCBGMCBFRiAgMUIgMzkgQTQgMEMgRjQgOUEgNzkgQTAgOiAuLi4uLi4uLi45Li4uLnkuCjAw MTA6IEJEIDc3IDM3IDdBIDhCIDY0IEU4IENDICAwOCA5MCBGOSA5RiBDMyA1NSBFNCA0RSA6 IC53N3ouZC4uLi4uLi5VLk4KMDAyMDogMjkgMDIgRjMgNzYgMzAgMEQgRDEgM0YgIDg4IEVD IEZCIEJDIEQ5IDk1IEM4IEM1IDogKS4udjAuLj8uLi4uLi4uLgowMDMwOiA0RiAwMiA0NSA2 MCAxNiBDQiAxOCBEOCAgMDEgQ0MgNTIgQTEgN0EgNEUgMUMgRkUgOiBPLkVgLi4uLi4uUi56 Ti4uCjAwNDA6IDlEIEU0IDU5IEY1IEU2IDE1IDhEIDI0ICAyNSA3MCBFNiA2MCA1MSA1MCAw RSAzMCA6IC4uWS4uLi4kJXAuYFFQLjAKMDA1MDogOTggQTYgNTMgNDkgRjggNEEgOUEgREMg IDU3IDVDIDI3IDRBIDA5IEZCIDhDIDRBIDogLi5TSS5KLi5XXCdKLi4uSgowMDYwOiA2NiBD OCA0MyBDRCAzNiBFMSAwOCA3NyAgOTggQjIgMzkgNkUgNTkgMEEgMjggQ0EgOiBmLkMuNi4u dy4uOW5ZLiguCjAwNzA6IEUyIEQ5IDREIDhBIDg3IEM1IDM4IEFDICBGMiAxNSAwNSA1OSA1 MyBBNiBEMyA1RCA6IC4uTS4uLjguLi4uWVMuLl0KMDA4MDogQkUgMjYgM0EgNzQgRjggMkYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLiY6dC4vCltsaWJzc2gyXSAwLjU3 NzQwMSBTb2NrZXQ6IFNlbnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1OAo9PiBsaWJzc2gy X3RyYW5zcG9ydF93cml0ZSBzZW5kKCkgKDE0NCBieXRlcykKMDAwMDogMDAgMDAgMDAgOEMg MDUgMUUgMDAgMDAgIDAwIDgxIDAwIEYwIEVGIDFCIDM5IEE0IDogLi4uLi4uLi4uLi4uLi45 LgowMDEwOiAwQyBGNCA5QSA3OSBBMCBCRCA3NyAzNyAgN0EgOEIgNjQgRTggQ0MgMDggOTAg RjkgOiAuLi55Li53N3ouZC4uLi4uCjAwMjA6IDlGIEMzIDU1IEU0IDRFIDI5IDAyIEYzICA3 NiAzMCAwRCBEMSAzRiA4OCBFQyBGQiA6IC4uVS5OKS4udjAuLj8uLi4KMDAzMDogQkMgRDkg OTUgQzggQzUgNEYgMDIgNDUgIDYwIDE2IENCIDE4IEQ4IDAxIENDIDUyIDogLi4uLi5PLkVg Li4uLi4uUgowMDQwOiBBMSA3QSA0RSAxQyBGRSA5RCBFNCA1OSAgRjUgRTYgMTUgOEQgMjQg MjUgNzAgRTYgOiAuek4uLi4uWS4uLi4kJXAuCjAwNTA6IDYwIDUxIDUwIDBFIDMwIDk4IEE2 IDUzICA0OSBGOCA0QSA5QSBEQyA1NyA1QyAyNyA6IGBRUC4wLi5TSS5KLi5XXCcKMDA2MDog NEEgMDkgRkIgOEMgNEEgNjYgQzggNDMgIENEIDM2IEUxIDA4IDc3IDk4IEIyIDM5IDogSi4u LkpmLkMuNi4udy4uOQowMDcwOiA2RSA1OSAwQSAyOCBDQSBFMiBEOSA0RCAgOEEgODcgQzUg MzggQUMgRjIgMTUgMDUgOiBuWS4oLi4uTS4uLjguLi4uCjAwODA6IDU5IDUzIEE2IEQzIDVE IEJFIDI2IDNBICA3NCBGOCAyRiBDQyBCQiAyOCBFQiAxMCA6IFlTLi5dLiY6dC4vLi4oLi4K W2xpYnNzaDJdIDAuNTc3NDM0IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5 cGU6IDMxCltsaWJzc2gyXSAwLjU3NzQzOCBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUg dG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzCltsaWJzc2gyXSAwLjY0MTQ5MSBTb2NrZXQ6 IFJlY3ZlZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzAKPT4gbGlic3NoMl90cmFu c3BvcnRfcmVhZCgpIHJhdyAoMTA0MCBieXRlcykKMDAwMDogMDAgMDAgMDAgMEMgMDYgMDIg MDAgMDAgIDAwIDAwIDU4IDY5IDc3IEZBIEYyIEMwIDogLi4uLi4uLi4uLlhpdy4uLgowMDEw OiAwMCAwMCAwMyBGQyAwNSAxRiAwMCAwMCAgMDMgMzIgMDAgMDAgMDAgMDcgNzMgNzMgOiAu Li4uLi4uLi4yLi4uLnNzCjAwMjA6IDY4IDJEIDY0IDczIDczIDAwIDAwIDAxICAwMSAwMCBE QSA1NiA2RCA0NSBFMyAzNiA6IGgtZHNzLi4uLi4uVm1FLjYKMDAzMDogMzkgRjQgRjYgQTEg ODkgRjkgREIgMTcgIDNCIDcwIDgzIEUxIEU0IDE4IDhGIDU3IDogOS4uLi4uLi47cC4uLi4u VwowMDQwOiBBNyAzRiA4RiBCQSBFNyBBNCA3MiBEQiAgRkIgMDYgRkUgNTUgNDIgQjYgQjQg NDYgOiAuPy4uLi5yLi4uLlVCLi5GCjAwNTA6IDM3IDdFIEM4IDJBIDYzIDcyIDA5IEM3ICBG MiAyRCA4NSA4MSA2QSBFQiAxRSA4QyA6IDd+Lipjci4uLi0uLmouLi4KMDA2MDogQzkgNEQg NjQgMjAgRjYgMzggNTcgOUMgIEQ1IDQ5IDRGIDc3IDc5IDY2IDZCIDYyIDogLk1kIC44Vy4u SU93eWZrYgowMDcwOiA4NSAxQiA0MSAyNSBFOCA2MSBCNiBEOSAgQ0YgMTQgMEQgRkIgREQg RkEgNjIgMDcgOiAuLkElLmEuLi4uLi4uLmIuCjAwODA6IEZGIEVEIDJCIDJEIEIzIDcxIEFB IDFBICAwQiAxNiA3QyBGNSA2OCAxNSAzNyBDMiA6IC4uKy0ucS4uLi58LmguNy4KMDA5MDog Q0MgNTEgRTcgNEUgNTkgOTIgODAgRUQgIDg1IEI3IDI5IEREIEEyIDY0IDVGIEI3IDogLlEu TlkuLi4uLikuLmRfLgowMGEwOiA4OSAzQiA5NiAyMiAwNSA1MyA1NyAwRiAgNTcgQUMgNjQg NTQgREYgMTEgOTUgNTggOiAuOy4iLlNXLlcuZFQuLi5YCjAwYjA6IDZCIDc1IDZCIEJFIEY1 IENCIDBFIEMwICA5NCAwMCBBOSAzQyBEQiA2MyBFRiBBNiA6IGt1ay4uLi4uLi4uPC5jLi4K MDBjMDogQzEgRDMgQzEgMkMgRTcgMjAgRTQgRTAgIDhBIDdDIDQyIDMwIDNFIDRBIEE2IDc5 IDogLi4uLC4gLi4ufEIwPkoueQowMGQwOiAxQyA0MyBBOCA5NyBENiAyQSA0MSAyRCAgMUYg REUgNUEgRjkgMUQgNkMgQTggMEIgOiAuQy4uLipBLS4uWi4ubC4uCjAwZTA6IDU2IDVCIEFC IEJEIDFGIDUwIENFIDc0ICA0MCBBQyA5QyA5NyBBOSBDOSBCMiA1MiA6IFZbLi4uUC50QC4u Li4uLlIKMDBmMDogNkEgMzkgMEQgQjggODMgMTcgNDkgNTkgIENBIEVEIEZBIDFCIEUwIEIx IEEwIDZBIDogajkuLi4uSVkuLi4uLi4uagowMTAwOiBFNiBCRCAzMyA4RSA5QyBDNiBDMiBE MCAgODAgQTUgNjIgRDggNUQgNDYgN0EgMTMgOiAuLjMuLi4uLi4uYi5dRnouCjAxMTA6IEQx IDNGIDQ4IDc3IDI5IDEyIDgxIDc3ICBDNyAwMSA3QiA2QyBFMSBCNyBBRiA1NiA6IC4/SHcp Li53Li57bC4uLlYKMDEyMDogRUMgNkQgQzEgRTEgQ0UgNzUgRUMgQjAgIDdGIDc3IDAwIDAw IDAwIDE1IDAwIEYxIDogLm0uLi51Li4udy4uLi4uLgowMTMwOiA3QyAyQiA1NSA5NyBCQyAw NiA1RiA2MiAgRDAgOUEgNkIgRkQgNEQgQUEgRjMgNUEgOiB8K1UuLi5fYi4uay5NLi5aCjAx NDA6IEUzIEI1IDE3IDAwIDAwIDAxIDAwIDNFICBGOSA4NiBCQiAzMSA1QiAyQSA5OSA0OCA6 IC4uLi4uLi4+Li4uMVsqLkgKMDE1MDogMDEgQTAgMTUgNTEgMEMgQUYgNDUgRDMgIDdGIDEx IDI5IDM4IDQ4IDcwIDBEIDJFIDogLi4uUS4uRS4uLik4SHAuLgowMTYwOiBDRiAwRiA3OCBE NyAyRiBGMSA4RCA3MCAgM0YgNTcgQjIgMzkgOTIgNzAgNEQgMzMgOiAuLnguLy4ucD9XLjku cE0zCjAxNzA6IEE0IDJGIEQ2IDE2IEEyIDA3IDcyIDk1ICA5NyAxOSBGQSA1NCA1NiA3NSAx RSA5RSA6IC4vLi4uLnIuLi4uVFZ1Li4KMDE4MDogNUMgQ0EgQzggRDQgNkIgNjkgNTkgMkEg IDM5IDM3IEY5IEFEIEU2IDI1IEQxIDI4IDogXC4uLmtpWSo5Ny4uLiUuKAowMTkwOiA5NiBF NyBEMCBGQSA1MSA3OCBFMCA1MyAgQ0UgRTAgMjAgRjMgNzQgMzQgNzMgNjIgOiAuLi4uUXgu Uy4uIC50NHNiCjAxYTA6IDE4IEU4IDJFIDVGIDM5IDlFIDAyIEFCICBCRCA1QSA2OCBFOSA5 RiBFOSA3RCBBRCA6IC4uLl85Li4uLlpoLi4ufS4KMDFiMDogNzEgQjAgNDYgMzUgQkEgNjMg QUIgQUUgIEFDIDAyIEQ2IDg4IDczIDY3IDQ1IDQ2IDogcS5GNS5jLi4uLi4uc2dFRgowMWMw OiBBQiAwRiAzQSBDOSA1NiBCMiA3MiA5QyAgMEUgOEMgQkIgREQgMjMgMjAgOTAgRTMgOiAu LjouVi5yLi4uLi4jIC4uCjAxZDA6IDgwIEUzIDRGIDY1IEVDIEY0IEU2IDg1ICBCQSAwOCBF RiA5MCA1RSBGMiAwNSBCRSA6IC4uT2UuLi4uLi4uLl4uLi4KMDFlMDogMDEgODUgNEMgNUYg QTAgMDQgNTAgNTUgIDc5IDFBIENGIEY4IDUxIDk5IEYzIDE0IDogLi5MXy4uUFV5Li4uUS4u LgowMWYwOiA4NSBGRSBEQiAzNCA0NSAxMyA4OCA1RSAgRkYgOTUgRjkgQUYgMTYgRUQgMkEg MkMgOiAuLi40RS4uXi4uLi4uLiosCjAyMDA6IEU4IEE0IEUxIEU0IDUyIDU3IDA3IDM2ICA3 NCBFMiA0NCBGRSBBNyA5QyAxNCA4NSA6IC4uLi5SVy42dC5ELi4uLi4KMDIxMDogMEMgQjAg RTUgMzIgNDUgNTggODEgQ0MgIEI4IDEzIDYzIDJEIDc5IEMxIDg5IEM0IDogLi4uMkVYLi4u LmMteS4uLgowMjIwOiA1QiBDMSA3OCBGNSAwNiA0NyBCOCAwNSAgRTUgNkYgOTggMEUgQ0Eg MjYgNzAgMTUgOiBbLnguLkcuLi5vLi4uJnAuCjAyMzA6IDRFIDg2IDREIDBCIEVBIDBFIEVB IDNGICA3QSAxOCA4RCAxMyAxOSA0OCAzRCA4RCA6IE4uTS4uLi4/ei4uLi5IPS4KMDI0MDog NEUgRUUgNDUgMjIgNjcgNkYgQjkgMDAgIDAwIDAxIDAxIDAwIEE2IDA0IDk4IDkwIDogTi5F ImdvLi4uLi4uLi4uLgowMjUwOiAxQyA3MiBFRiA3OSBDQSBFNiA4QiA1MSAgNkIgOTEgRjUg MTggMUUgQ0EgQ0YgREIgOiAuci55Li4uUWsuLi4uLi4uCjAyNjA6IEFDIDY1IDk3IDA0IDY0 IDhBIENFIEZGICA1NiA4QyAzQSA2RiAwOCAzNSBENiA0QiA6IC5lLi5kLi4uVi46by41LksK MDI3MDogM0EgRjMgREEgOTcgRTAgRTcgRjEgRjggIDFCIEY4IDQ3IDExIEZDIDAxIDBFIDhG IDogOi4uLi4uLi4uLkcuLi4uLgowMjgwOiA5NSA4NCA0QyAwOCA4MyA4MCA0MiBDRCAgMzIg N0IgODQgMEUgMzAgMzQgODYgOEQgOiAuLkwuLi5CLjJ7Li4wNC4uCjAyOTA6IDE5IEE0IDRD IEVGIEI3IEE3IEQyIENDICAzOCAxNCAzQyBCQyAxQSAyNCBGRSA3MCA6IC4uTC4uLi4uOC48 Li4kLnAKMDJhMDogRkYgQkYgQzQgODcgQTggRjMgMzUgOTAgIDYyIDc5IDU5IEY1IEVBIDYy IDQ1IEU0IDogLi4uLi4uNS5ieVkuLmJFLgowMmIwOiAxNyA1NCAwQSA5MCA0MiAzNCA0MiBF MyAgMTAgMjggQkUgRUIgNTUgOUQgMjcgRTEgOiAuVC4uQjRCLi4oLi5VLicuCjAyYzA6IDZG IEM3IDE2IDU4IEQ4IDcxIDhGIEZCICAyRCBERiBGMCBDNSBENiA2NSAxQiAxMyA6IG8uLlgu cS4uLS4uLi5lLi4KMDJkMDogMEIgODAgRUEgNDIgNDQgMTQgQUYgMjggIDY1IEQ1IEZEIENG IEE4IDIxIDZFIDcyIDogLi4uQkQuLihlLi4uLiFucgowMmUwOiA3NSBCNSA4QiA5MSAzQSA3 OSBBRCA4QiAgRUEgNzIgQzYgMzkgRjggQjEgN0EgNzggOiB1Li4uOnkuLi5yLjkuLnp4CjAy ZjA6IEY2IENBIDgzIEZDIDQxIDk1IDYyIDRCICBFOCA1MiA0MSA4QiAwQiA0QiBERiAxQyA6 IC4uLi5BLmJLLlJBLi5LLi4KMDMwMDogQzcgNUMgQTAgRkUgQkQgNkIgQjcgM0EgIDE5IEFG IDQ0IDI4IDY4IERDIDdBIDJCIDogLlwuLi5rLjouLkQoaC56KwowMzEwOiAxOSBDOSAwRCBD OCA1OCAxMiAyMiAxNyAgOEEgN0MgQzIgMDMgMkUgNUMgRTggQTMgOiAuLi4uWC4iLi58Li4u XC4uCjAzMjA6IEMxIDYxIDNDIDZCIDhEIDg3IEQ4IDhCICBCOCA1NyAyOCA1MCA2RiAxRCA0 NiA0RiA6IC5hPGsuLi4uLlcoUG8uRk8KMDMzMDogRjYgRTEgODUgQUMgQkIgODcgOUIgRTEg IDBBIEFEIDk1IDZGIDgwIDREIDdBIEY0IDogLi4uLi4uLi4uLi5vLk16LgowMzQwOiA3MiBB MCBGRCA2QSA1MyA3OSA3OSA4QSAgMTIgN0IgNEUgRkIgMDAgMDAgMDAgODAgOiByLi5qU3l5 Li57Ti4uLi4uCjAzNTA6IDJGIEY2IDU2IDg2IDFFIEVDIDgwIDE5ICAwRCA3QyAzNyA4RCBD MiA3QiA4NiAyMyA6IC8uVi4uLi4uLnw3Li57LiMKMDM2MDogQjUgMkYgQzIgQ0YgNUYgNkQg QTcgRDQgIDk5IDMxIEY1IDU2IDVEIDc0IEI1IDRDIDogLi8uLl9tLi4uMS5WXXQuTAowMzcw OiA4NyA2NiBGMSBDNiBGOCAxMSBGMiAwQiAgRjMgREIgQ0QgREYgNUIgMUUgQzggQzkgOiAu Zi4uLi4uLi4uLi5bLi4uCjAzODA6IDJBIDI1IDgwIEJCIDU3IDdCIDEzIDUwICA5MSAwOCBE QiA2MCBCNiAwQyA4OCA4NiA6IColLi5Xey5QLi4uYC4uLi4KMDM5MDogNUYgOUYgMjYgNzgg NTMgQkYgMEIgQzMgIDFGIDg5IDg2IDZDIDZFIDg5IEZBIEEwIDogXy4meFMuLi4uLi5sbi4u LgowM2EwOiA5NSA3MSBCRiA4QSAyRiBGNSBCNCBGOSAgRTQgNjYgNjEgRUMgOEIgQzYgMEEg RkIgOiAucS4uLy4uLi5mYS4uLi4uCjAzYjA6IDg3IDY2IDBBIEY2IDQxIDlEIDdEIDM3ICBE RCA3NCAxQSAxMyA1RSAzNiBBOSA0OSA6IC5mLi5BLn03LnQuLl42LkkKMDNjMDogNDggQjcg OUIgQjggQ0UgNDIgRTcgRTAgIDM5IDc0IDQ3IEVEIDE2IDQzIDI4IEE2IDogSC4uLi5CLi45 dEcuLkMoLgowM2QwOiAwMCAwMCAwMCAzNyAwMCAwMCAwMCAwNyAgNzMgNzMgNjggMkQgNjQg NzMgNzMgMDAgOiAuLi43Li4uLnNzaC1kc3MuCjAzZTA6IDAwIDAwIDI4IEJEIEIwIDI3IDY5 IDc0ICA5OSBDRCAyMyBBNSBDMCA5NSA2MSAwMCA6IC4uKC4uJ2l0Li4jLi4uYS4KMDNmMDog QzMgREMgQjQgNzYgRkEgNUQgNEYgNjggIDRFIEI1IDc3IDY2IDAxIDQ1IDQ1IDZGIDogLi4u di5dT2hOLndmLkVFbwowNDAwOiBERiBBRSA2NyBDNSA3NSBCRCBBMyAxOCAgQkYgMjkgNEEg OUUgRkUgQUUgQjggQjAgOiAuLmcudS4uLi4pSi4uLi4uCj0+IGxpYnNzaDJfdHJhbnNwb3J0 X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDAuNjQxNjgxIFRy YW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90 cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxMDE0IGJ5dGVzKQowMDAwOiAxRiAwMCAwMCAwMyAz MiAwMCAwMCAwMCAgMDcgNzMgNzMgNjggMkQgNjQgNzMgNzMgOiAuLi4uMi4uLi5zc2gtZHNz CjAwMTA6IDAwIDAwIDAxIDAxIDAwIERBIDU2IDZEICA0NSBFMyAzNiAzOSBGNCBGNiBBMSA4 OSA6IC4uLi4uLlZtRS42OS4uLi4KMDAyMDogRjkgREIgMTcgM0IgNzAgODMgRTEgRTQgIDE4 IDhGIDU3IEE3IDNGIDhGIEJBIEU3IDogLi4uO3AuLi4uLlcuPy4uLgowMDMwOiBBNCA3MiBE QiBGQiAwNiBGRSA1NSA0MiAgQjYgQjQgNDYgMzcgN0UgQzggMkEgNjMgOiAuci4uLi5VQi4u Rjd+LipjCjAwNDA6IDcyIDA5IEM3IEYyIDJEIDg1IDgxIDZBICBFQiAxRSA4QyBDOSA0RCA2 NCAyMCBGNiA6IHIuLi4tLi5qLi4uLk1kIC4KMDA1MDogMzggNTcgOUMgRDUgNDkgNEYgNzcg NzkgIDY2IDZCIDYyIDg1IDFCIDQxIDI1IEU4IDogOFcuLklPd3lma2IuLkElLgowMDYwOiA2 MSBCNiBEOSBDRiAxNCAwRCBGQiBERCAgRkEgNjIgMDcgRkYgRUQgMkIgMkQgQjMgOiBhLi4u Li4uLi5iLi4uKy0uCjAwNzA6IDcxIEFBIDFBIDBCIDE2IDdDIEY1IDY4ICAxNSAzNyBDMiBD QyA1MSBFNyA0RSA1OSA6IHEuLi4ufC5oLjcuLlEuTlkKMDA4MDogOTIgODAgRUQgODUgQjcg MjkgREQgQTIgIDY0IDVGIEI3IDg5IDNCIDk2IDIyIDA1IDogLi4uLi4pLi5kXy4uOy4iLgow MDkwOiA1MyA1NyAwRiA1NyBBQyA2NCA1NCBERiAgMTEgOTUgNTggNkIgNzUgNkIgQkUgRjUg OiBTVy5XLmRULi4uWGt1ay4uCjAwYTA6IENCIDBFIEMwIDk0IDAwIEE5IDNDIERCICA2MyBF RiBBNiBDMSBEMyBDMSAyQyBFNyA6IC4uLi4uLjwuYy4uLi4uLC4KMDBiMDogMjAgRTQgRTAg OEEgN0MgNDIgMzAgM0UgIDRBIEE2IDc5IDFDIDQzIEE4IDk3IEQ2IDogIC4uLnxCMD5KLnku Qy4uLgowMGMwOiAyQSA0MSAyRCAxRiBERSA1QSBGOSAxRCAgNkMgQTggMEIgNTYgNUIgQUIg QkQgMUYgOiAqQS0uLlouLmwuLlZbLi4uCjAwZDA6IDUwIENFIDc0IDQwIEFDIDlDIDk3IEE5 ICBDOSBCMiA1MiA2QSAzOSAwRCBCOCA4MyA6IFAudEAuLi4uLi5SajkuLi4KMDBlMDogMTcg NDkgNTkgQ0EgRUQgRkEgMUIgRTAgIEIxIEEwIDZBIEU2IEJEIDMzIDhFIDlDIDogLklZLi4u Li4uLmouLjMuLgowMGYwOiBDNiBDMiBEMCA4MCBBNSA2MiBEOCA1RCAgNDYgN0EgMTMgRDEg M0YgNDggNzcgMjkgOiAuLi4uLmIuXUZ6Li4/SHcpCjAxMDA6IDEyIDgxIDc3IEM3IDAxIDdC IDZDIEUxICBCNyBBRiA1NiBFQyA2RCBDMSBFMSBDRSA6IC4udy4ue2wuLi5WLm0uLi4KMDEx MDogNzUgRUMgQjAgN0YgNzcgMDAgMDAgMDAgIDE1IDAwIEYxIDdDIDJCIDU1IDk3IEJDIDog dS4uLncuLi4uLi58K1UuLgowMTIwOiAwNiA1RiA2MiBEMCA5QSA2QiBGRCA0RCAgQUEgRjMg NUEgRTMgQjUgMTcgMDAgMDAgOiAuX2IuLmsuTS4uWi4uLi4uCjAxMzA6IDAxIDAwIDNFIEY5 IDg2IEJCIDMxIDVCICAyQSA5OSA0OCAwMSBBMCAxNSA1MSAwQyA6IC4uPi4uLjFbKi5ILi4u US4KMDE0MDogQUYgNDUgRDMgN0YgMTEgMjkgMzggNDggIDcwIDBEIDJFIENGIDBGIDc4IEQ3 IDJGIDogLkUuLi4pOEhwLi4uLnguLwowMTUwOiBGMSA4RCA3MCAzRiA1NyBCMiAzOSA5MiAg NzAgNEQgMzMgQTQgMkYgRDYgMTYgQTIgOiAuLnA/Vy45LnBNMy4vLi4uCjAxNjA6IDA3IDcy IDk1IDk3IDE5IEZBIDU0IDU2ICA3NSAxRSA5RSA1QyBDQSBDOCBENCA2QiA6IC5yLi4uLlRW dS4uXC4uLmsKMDE3MDogNjkgNTkgMkEgMzkgMzcgRjkgQUQgRTYgIDI1IEQxIDI4IDk2IEU3 IEQwIEZBIDUxIDogaVkqOTcuLi4lLiguLi4uUQowMTgwOiA3OCBFMCA1MyBDRSBFMCAyMCBG MyA3NCAgMzQgNzMgNjIgMTggRTggMkUgNUYgMzkgOiB4LlMuLiAudDRzYi4uLl85CjAxOTA6 IDlFIDAyIEFCIEJEIDVBIDY4IEU5IDlGICBFOSA3RCBBRCA3MSBCMCA0NiAzNSBCQSA6IC4u Li5aaC4uLn0ucS5GNS4KMDFhMDogNjMgQUIgQUUgQUMgMDIgRDYgODggNzMgIDY3IDQ1IDQ2 IEFCIDBGIDNBIEM5IDU2IDogYy4uLi4uLnNnRUYuLjouVgowMWIwOiBCMiA3MiA5QyAwRSA4 QyBCQiBERCAyMyAgMjAgOTAgRTMgODAgRTMgNEYgNjUgRUMgOiAuci4uLi4uIyAuLi4uT2Uu CjAxYzA6IEY0IEU2IDg1IEJBIDA4IEVGIDkwIDVFICBGMiAwNSBCRSAwMSA4NSA0QyA1RiBB MCA6IC4uLi4uLi5eLi4uLi5MXy4KMDFkMDogMDQgNTAgNTUgNzkgMUEgQ0YgRjggNTEgIDk5 IEYzIDE0IDg1IEZFIERCIDM0IDQ1IDogLlBVeS4uLlEuLi4uLi40RQowMWUwOiAxMyA4OCA1 RSBGRiA5NSBGOSBBRiAxNiAgRUQgMkEgMkMgRTggQTQgRTEgRTQgNTIgOiAuLl4uLi4uLi4q LC4uLi5SCjAxZjA6IDU3IDA3IDM2IDc0IEUyIDQ0IEZFIEE3ICA5QyAxNCA4NSAwQyBCMCBF NSAzMiA0NSA6IFcuNnQuRC4uLi4uLi4uMkUKMDIwMDogNTggODEgQ0MgQjggMTMgNjMgMkQg NzkgIEMxIDg5IEM0IDVCIEMxIDc4IEY1IDA2IDogWC4uLi5jLXkuLi5bLnguLgowMjEwOiA0 NyBCOCAwNSBFNSA2RiA5OCAwRSBDQSAgMjYgNzAgMTUgNEUgODYgNEQgMEIgRUEgOiBHLi4u by4uLiZwLk4uTS4uCjAyMjA6IDBFIEVBIDNGIDdBIDE4IDhEIDEzIDE5ICA0OCAzRCA4RCA0 RSBFRSA0NSAyMiA2NyA6IC4uP3ouLi4uSD0uTi5FImcKMDIzMDogNkYgQjkgMDAgMDAgMDEg MDEgMDAgQTYgIDA0IDk4IDkwIDFDIDcyIEVGIDc5IENBIDogby4uLi4uLi4uLi4uci55Lgow MjQwOiBFNiA4QiA1MSA2QiA5MSBGNSAxOCAxRSAgQ0EgQ0YgREIgQUMgNjUgOTcgMDQgNjQg OiAuLlFrLi4uLi4uLi5lLi5kCjAyNTA6IDhBIENFIEZGIDU2IDhDIDNBIDZGIDA4ICAzNSBE NiA0QiAzQSBGMyBEQSA5NyBFMCA6IC4uLlYuOm8uNS5LOi4uLi4KMDI2MDogRTcgRjEgRjgg MUIgRjggNDcgMTEgRkMgIDAxIDBFIDhGIDk1IDg0IDRDIDA4IDgzIDogLi4uLi5HLi4uLi4u LkwuLgowMjcwOiA4MCA0MiBDRCAzMiA3QiA4NCAwRSAzMCAgMzQgODYgOEQgMTkgQTQgNEMg RUYgQjcgOiAuQi4yey4uMDQuLi4uTC4uCjAyODA6IEE3IEQyIENDIDM4IDE0IDNDIEJDIDFB ICAyNCBGRSA3MCBGRiBCRiBDNCA4NyBBOCA6IC4uLjguPC4uJC5wLi4uLi4KMDI5MDogRjMg MzUgOTAgNjIgNzkgNTkgRjUgRUEgIDYyIDQ1IEU0IDE3IDU0IDBBIDkwIDQyIDogLjUuYnlZ Li5iRS4uVC4uQgowMmEwOiAzNCA0MiBFMyAxMCAyOCBCRSBFQiA1NSAgOUQgMjcgRTEgNkYg QzcgMTYgNTggRDggOiA0Qi4uKC4uVS4nLm8uLlguCjAyYjA6IDcxIDhGIEZCIDJEIERGIEYw IEM1IEQ2ICA2NSAxQiAxMyAwQiA4MCBFQSA0MiA0NCA6IHEuLi0uLi4uZS4uLi4uQkQKMDJj MDogMTQgQUYgMjggNjUgRDUgRkQgQ0YgQTggIDIxIDZFIDcyIDc1IEI1IDhCIDkxIDNBIDog Li4oZS4uLi4hbnJ1Li4uOgowMmQwOiA3OSBBRCA4QiBFQSA3MiBDNiAzOSBGOCAgQjEgN0Eg NzggRjYgQ0EgODMgRkMgNDEgOiB5Li4uci45Li56eC4uLi5BCjAyZTA6IDk1IDYyIDRCIEU4 IDUyIDQxIDhCIDBCICA0QiBERiAxQyBDNyA1QyBBMCBGRSBCRCA6IC5iSy5SQS4uSy4uLlwu Li4KMDJmMDogNkIgQjcgM0EgMTkgQUYgNDQgMjggNjggIERDIDdBIDJCIDE5IEM5IDBEIEM4 IDU4IDogay46Li5EKGgueisuLi4uWAowMzAwOiAxMiAyMiAxNyA4QSA3QyBDMiAwMyAyRSAg NUMgRTggQTMgQzEgNjEgM0MgNkIgOEQgOiAuIi4ufC4uLlwuLi5hPGsuCjAzMTA6IDg3IEQ4 IDhCIEI4IDU3IDI4IDUwIDZGICAxRCA0NiA0RiBGNiBFMSA4NSBBQyBCQiA6IC4uLi5XKFBv LkZPLi4uLi4KMDMyMDogODcgOUIgRTEgMEEgQUQgOTUgNkYgODAgIDREIDdBIEY0IDcyIEEw IEZEIDZBIDUzIDogLi4uLi4uby5Nei5yLi5qUwowMzMwOiA3OSA3OSA4QSAxMiA3QiA0RSBG QiAwMCAgMDAgMDAgODAgMkYgRjYgNTYgODYgMUUgOiB5eS4ue04uLi4uLi8uVi4uCjAzNDA6 IEVDIDgwIDE5IDBEIDdDIDM3IDhEIEMyICA3QiA4NiAyMyBCNSAyRiBDMiBDRiA1RiA6IC4u Li58Ny4uey4jLi8uLl8KMDM1MDogNkQgQTcgRDQgOTkgMzEgRjUgNTYgNUQgIDc0IEI1IDRD IDg3IDY2IEYxIEM2IEY4IDogbS4uLjEuVl10LkwuZi4uLgowMzYwOiAxMSBGMiAwQiBGMyBE QiBDRCBERiA1QiAgMUUgQzggQzkgMkEgMjUgODAgQkIgNTcgOiAuLi4uLi4uWy4uLiolLi5X CjAzNzA6IDdCIDEzIDUwIDkxIDA4IERCIDYwIEI2ICAwQyA4OCA4NiA1RiA5RiAyNiA3OCA1 MyA6IHsuUC4uLmAuLi4uXy4meFMKMDM4MDogQkYgMEIgQzMgMUYgODkgODYgNkMgNkUgIDg5 IEZBIEEwIDk1IDcxIEJGIDhBIDJGIDogLi4uLi4ubG4uLi4ucS4uLwowMzkwOiBGNSBCNCBG OSBFNCA2NiA2MSBFQyA4QiAgQzYgMEEgRkIgODcgNjYgMEEgRjYgNDEgOiAuLi4uZmEuLi4u Li5mLi5BCjAzYTA6IDlEIDdEIDM3IEREIDc0IDFBIDEzIDVFICAzNiBBOSA0OSA0OCBCNyA5 QiBCOCBDRSA6IC59Ny50Li5eNi5JSC4uLi4KMDNiMDogNDIgRTcgRTAgMzkgNzQgNDcgRUQg MTYgIDQzIDI4IEE2IDAwIDAwIDAwIDM3IDAwIDogQi4uOXRHLi5DKC4uLi43LgowM2MwOiAw MCAwMCAwNyA3MyA3MyA2OCAyRCA2NCAgNzMgNzMgMDAgMDAgMDAgMjggQkQgQjAgOiAuLi5z c2gtZHNzLi4uKC4uCjAzZDA6IDI3IDY5IDc0IDk5IENEIDIzIEE1IEMwICA5NSA2MSAwMCBD MyBEQyBCNCA3NiBGQSA6ICdpdC4uIy4uLmEuLi4udi4KMDNlMDogNUQgNEYgNjggNEUgQjUg NzcgNjYgMDEgIDQ1IDQ1IDZGIERGIEFFIDY3IEM1IDc1IDogXU9oTi53Zi5FRW8uLmcudQow M2YwOiBCRCBBMyAxOCBCRiAyOSA0QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAuLi4uKUoKW2xpYnNzaDJdIDAuNjQxODQ3IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMzEg cmVjZWl2ZWQsIGxlbmd0aD0xMDE0CltsaWJzc2gyXSAwLjY0MTg1MCBUcmFuc3BvcnQ6IExv b2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAzMQpbbGlic3NoMl0gMC42NDE4NzMgS2V5IEV4 OiBTZXJ2ZXIncyBNRDUgRmluZ2VycHJpbnQ6IGU3OjA0OjhiOmZmOmRkOjYzOjQ0OmEzOmFj OmIwOmI3OjM5OmYxOjAxOjVkOmE1CltsaWJzc2gyXSAwLjY0MTg4NCBLZXkgRXg6IFNlcnZl cidzIFNIQTEgRmluZ2VycHJpbnQ6IDhlOmZmOjlmOmFkOjU5OmJiOjI4OjBkOmNlOmJkOjk2 OjFjOjgwOjU2OjdiOjNhOmRmOjY1OmZkOmQyCltsaWJzc2gyXSAwLjY0MzY5OCBLZXkgRXg6 IFNlbmRpbmcgTkVXS0VZUyBtZXNzYWdlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs YWluICgxIGJ5dGVzKQowMDAwOiAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjY0MzcxOCBTb2NrZXQ6IFNlbnQgMTYv MTYgYnl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgp ICgxNiBieXRlcykKMDAwMDogMDAgMDAgMDAgMEMgMEEgMTUgOTggMzIgIENEIDY4IEY3IDhB IDJDIDY1IDZEIDdCIDogLi4uLi4uLjIuaC4uLGVtewpbbGlic3NoMl0gMC42NDM3MjcgVHJh bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogMjEKW2xpYnNzaDJdIDAuNjQz NzMxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9u IGtleXMKW2xpYnNzaDJdIDAuNjQzOTE5IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVz IHRvIDB4NTA1OTE4KzAKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHJhdyAoMzIgYnl0 ZXMpCjAwMDA6IDAwIDAwIDAwIDBDIDA2IDAyIDAwIDAwICAwMCAwMCBDQyA2NiA0OSBBMSBF OSA3RCA6IC4uLi4uLi4uLi4uZkkuLn0KMDAxMDogMDAgMDAgMDAgMEMgMEEgMTUgMzIgOTEg IENEIDA5IDA1IDJBIEM0IDEyIDFFIEE3IDogLi4uLi4uMi4uLi4qLi4uLgo9PiBsaWJzc2gy X3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAwIDAw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4uCltsaWJzc2gyXSAw LjY0Mzk0MSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQsIGxlbmd0aD01Cj0+ IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMSBieXRlcykKMDAwMDogMTUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLgpbbGlic3No Ml0gMC42NDM5NTEgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMSByZWNlaXZlZCwgbGVuZ3Ro PTEKW2xpYnNzaDJdIDAuNjQzOTU1IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9m IHR5cGU6IDIxCltsaWJzc2gyXSAwLjY0Mzk1OSBLZXkgRXg6IFJlY2VpdmVkIE5FV0tFWVMg bWVzc2FnZQpbbGlic3NoMl0gMC42NDM5NjUgS2V5IEV4OiBzZXNzaW9uX2lkIGNhbGN1bGF0 ZWQKW2xpYnNzaDJdIDAuNjQzOTg0IEtleSBFeDogQ2xpZW50IHRvIFNlcnZlciBJViBhbmQg S2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNjQ0MDAwIEtleSBFeDogU2VydmVyIHRvIENs aWVudCBJViBhbmQgS2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNjQ0MDA2IEtleSBFeDog Q2xpZW50IHRvIFNlcnZlciBITUFDIEtleSBjYWxjdWxhdGVkCltsaWJzc2gyXSAwLjY0NDAx MSBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgSE1BQyBLZXkgY2FsY3VsYXRlZApbbGlic3No Ml0gMC42NDQwMTMgS2V5IEV4OiBDbGllbnQgdG8gU2VydmVyIGNvbXByZXNzaW9uIGluaXRp YWxpemVkCltsaWJzc2gyXSAwLjY0NDAxNiBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgY29t cHJlc3Npb24gaW5pdGlhbGl6ZWQKW2xpYnNzaDJdIDAuNjQ0MDI5IFRyYW5zcG9ydDogUmVx dWVzdGluZyB1c2VyYXV0aCBzZXJ2aWNlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs YWluICgxNyBieXRlcykKMDAwMDogMDUgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDcz IDY1IDcyIDYxIDc1IDc0IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjY0 NDA2MiBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90 cmFuc3BvcnRfd3JpdGUgc2VuZCgpICg1MiBieXRlcykKMDAwMDogREQgREMgODIgRTUgNkIg NkMgRDUgRDIgIEFEIDNCIDNCIERGIEVGIEIxIDAzIDdEIDogLi4uLmtsLi4uOzsuLi4ufQow MDEwOiA0OCBDNyBBOSAzRCAzQiA1NCA4MCAxRiAgMDQgQzIgMDYgMjkgOEUgMzkgQTkgRUYg OiBILi49O1QuLi4uLikuOS4uCjAwMjA6IDc3IEEzIDJDIEQ4IDc1IDQ0IEIwIENEICAwOSA1 QyA4QiA2RiA2MyAwRiBCMyBDNCA6IHcuLC51RC4uLlwub2MuLi4KMDAzMDogQjQgNDIgODMg MEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLkIuLgpbbGlic3No Ml0gMC42NDQwNzggVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpb bGlic3NoMl0gMC42NDQyOTQgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1 MDU5MTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAw MDogRjMgREQgRDUgOTAgM0UgRkYgMjUgN0EgIDAxIDlGIDNCIDE2IERGIDc2IDlFIDJEIDog Li4uLj4uJXouLjsuLnYuLQowMDEwOiBCMSBGMCA5NSBBRSBFRCAwQiA0QSAxNCAgMDMgNTEg NzAgODEgQTYgRTQgRjUgOTggOiAuLi4uLi5KLi5RcC4uLi4uCjAwMjA6IDJCIDZEIDcxIDkw IDk2IDk3IDE3IDk4ICBDNyA0NiA5NiA0NyA2NiAzQSAyQiBGOSA6ICttcS4uLi4uLkYuR2Y6 Ky4KMDAzMDogNDAgNTMgNUMgQzMgQTIgQzEgMDcgREQgIEVGIDFFIEVCIDJDIDdEIDYyIDQz IEU3IDogQFNcLi4uLi4uLi4sfWJDLgowMDQwOiA0NyBFOSA5MCBDNiBBNSBDMyBFOCBCMSAg RDkgMTEgRTMgMEQgRjQgM0YgOTMgODIgOiBHLi4uLi4uLi4uLi4uPy4uCjAwNTA6IEZBIDIw IDQ1IDg1IDUwIEU3IDVFIDI4ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4gRS5QLl4o Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIg MDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4K W2xpYnNzaDJdIDAuNjQ0MzM1IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwg bGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykK MDAwMDogMDYgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDczIDY1IDcyIDYxIDc1IDc0 IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjY0NDM1NCBUcmFuc3BvcnQ6 IFBhY2tldCB0eXBlIDYgcmVjZWl2ZWQsIGxlbmd0aD0xNwpbbGlic3NoMl0gMC42NDQzNTcg VHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpGaW5nZXJwcmludDog OEUgRkYgOUYgQUQgNTkgQkIgMjggMEQgQ0UgQkQgOTYgMUMgODAgNTYgN0IgM0EgREYgNjUg RkQgRDIgCltsaWJzc2gyXSAwLjY0NDQwOCBVc2VyYXV0aDogQXR0ZW1wdGluZyB0byBsb2dp biB1c2luZyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93 cml0ZSBwbGFpbiAoNDMgYnl0ZXMpCjAwMDA6IDMyIDAwIDAwIDAwIDAzIDZEIDcxIDcxICAw MCAwMCAwMCAwRSA3MyA3MyA2OCAyRCA6IDIuLi4ubXFxLi4uLnNzaC0KMDAxMDogNjMgNkYg NkUgNkUgNjUgNjMgNzQgNjkgIDZGIDZFIDAwIDAwIDAwIDA4IDcwIDYxIDogY29ubmVjdGlv bi4uLi5wYQowMDIwOiA3MyA3MyA3NyA2RiA3MiA2NCAwMCAwMCAgMDAgMDAgMDcgICAgICAg ICAgICAgICAgOiBzc3dvcmQuLi4uLgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFp bjIgKDcgYnl0ZXMpCjAwMDA6IDZEIDcxIDcxIDMyIDMwIDMwIDM1ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IG1xcTIwMDUKW2xpYnNzaDJdIDAuNjQ0NDM4IFNvY2tldDogU2Vu dCA4NC84NCBieXRlcyBhdCAweDUwOTk1OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBz ZW5kKCkgKDg0IGJ5dGVzKQowMDAwOiBGQiBBNyBCNSBEMSA3MyA4OCBDNiA2QyAgNUYgNDQg MkQgODMgMDYgMEMgODEgOTIgOiAuLi4ucy4ubF9ELS4uLi4uCjAwMTA6IDA4IDI0IDcwIDY1 IDAwIDIwIEYyIDMzICA5QyA3NSAzNyBGQiAzMSA0RCBCMyBCNiA6IC4kcGUuIC4zLnU3LjFN Li4KMDAyMDogRDcgMTYgQkQgQ0EgNjQgNDYgNEUgOEEgIDI0IDg3IDc5IDNFIEY3IEIzIDZF IDA3IDogLi4uLmRGTi4kLnk+Li5uLgowMDMwOiA5MSBBMyBERSA4MSBCNiAxNCBGNSA3NCAg RUUgQzggNUQgQzAgREIgRDMgRTMgODQgOiAuLi4uLi4udC4uXS4uLi4uCjAwNDA6IEMwIEE0 IEM4IEQyIDQyIEM5IEIyIEI5ICA0NSBDMCAyRSBCRSAzRSBDNSA3QiA3OCA6IC4uLi5CLi4u RS4uLj4ue3gKMDA1MDogQUYgQ0YgQ0EgQTUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogLi4uLgpbbGlic3NoMl0gMC42NDQ0NTkgVHJhbnNwb3J0OiBMb29raW5n IGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xpYnNzaDJdIDAuNjQ0NDYxIFRyYW5zcG9ydDog TG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDUxCltsaWJzc2gyXSAwLjY0NDQ2NCBUcmFu c3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA2MApbbGlic3NoMl0gMC42NDQ0 NjggRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZwpbbGlic3NoMl0g MC42NDU2MTQgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xp YnNzaDJdIDAuNjQ1NjIwIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6 IDUxCltsaWJzc2gyXSAwLjY0NTYyNCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv ZiB0eXBlOiA2MApbbGlic3NoMl0gMC42NDU2MjkgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4 NCBieXRlcyB0byAweDUwNTkxOCswCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcg KDEwOTYgYnl0ZXMpCjAwMDA6IDIyIDY0IEFDIEI4IDQ0IEFCIEFCIEM1ICA1MCBBOCAwQyBD MSAxRCBENSA3RiAzNiA6ICJkLi5ELi4uUC4uLi4uLjYKMDAxMDogOUEgRDEgRjQgRUYgNDgg OEUgNkIgNEMgIDVDIENCIDQzIDE1IEU1IDFBIENEIDVEIDogLi4uLkgua0xcLkMuLi4uXQow MDIwOiAxNCAxMyBFMCA3NSA4MCA0NCA1MCA3MiAgQ0UgNkUgREIgNEQgMTMgQTYgNTkgNDQg OiAuLi51LkRQci5uLk0uLllECjAwMzA6IDJFIDkwIEUyIDY0IDM1IDVEIEI5IDA2ICBCQyAx QiBBQiA4NiBCRCA4MSAwRiBFRCA6IC4uLmQ1XS4uLi4uLi4uLi4KMDA0MDogNTAgMEQgOUQg RTggNUUgMEIgQjMgNTcgIDAxIDBBIDk2IDk4IEY3IEI3IEJBIDdCIDogUC4uLl4uLlcuLi4u Li4uewowMDUwOiBFRiAyMSA0MiBCQyAzMyBCRCA2MCA0QyAgQjggRkUgNTUgMzIgOTUgNzAg OUMgNDMgOiAuIUIuMy5gTC4uVTIucC5DCjAwNjA6IDQ2IDk4IEM4IDA2IENBIEY4IDA2IDk1 ICAxMCA3OCBBRCBCMiA1QiBBNSA4QyA0RCA6IEYuLi4uLi4uLnguLlsuLk0KMDA3MDogNDkg MjEgQ0UgMTEgQ0EgODYgNEUgNTAgIEJBIEJCIEM2IDk3IDg4IDAyIDE0IDhGIDogSSEuLi4u TlAuLi4uLi4uLgowMDgwOiBGNyA1MCA1MSA0QSAzNCBGMiA4MyBENyAgMjUgQ0YgQ0QgMjcg MUUgQkIgMjQgRUQgOiAuUFFKNC4uLiUuLicuLiQuCjAwOTA6IDM5IEU3IDI1IDZEIEM0IDE0 IDIzIDkyICBFNSBBNSA3MiAxNyA3RSAxRiBFRiBFMiA6IDkuJW0uLiMuLi5yLn4uLi4KMDBh MDogNTkgNTQgN0UgODEgNzIgMkIgNjkgRUEgIERDIERCIDA3IENDIDdEIDU3IDYzIDY2IDog WVR+LnIraS4uLi4ufVdjZgowMGIwOiA1RiA2RSA2NSAxNyA0RCAyMCA5RCBGMyAgMUMgMTYg OTMgMjEgREQgMDUgQjcgRTIgOiBfbmUuTSAuLi4uLiEuLi4uCjAwYzA6IEVEIDU3IDlBIEI2 IDhBIDk1IDY1IEE3ICAwRSBENCAwMyBFRiBBNCBBMyAyMCAzQiA6IC5XLi4uLmUuLi4uLi4u IDsKMDBkMDogMDMgRjEgN0QgOEMgQUQgQ0IgMzAgNEMgIDhCIEY0IDNGIEZFIDREIDQ3IDVG IDQ2IDogLi59Li4uMEwuLj8uTUdfRgowMGUwOiBERSA2QSA4RSAyQyA1OSBDQiBBMCBFMiAg M0QgRkQgRDggODUgN0IgQTYgQjkgQUUgOiAuai4sWS4uLj0uLi57Li4uCjAwZjA6IDA0IDdB IDE2IDM1IDAwIEI3IDE3IDQ2ICA1NiAxMCBCMCBFQSBBQiBDMyAwOCBCMiA6IC56LjUuLi5G Vi4uLi4uLi4KMDEwMDogRjYgMEEgNzYgQzYgRjcgQUYgNUYgOEUgIDcyIEZEIDA2IDYzIDBB IDM4IEFCIEU0IDogLi52Li4uXy5yLi5jLjguLgowMTEwOiBBQSBBNyA0MCA5NCA5RSA1RiBB NCA3QyAgQUQgQ0IgNjIgMzggMjUgMTkgNDUgOUQgOiAuLkAuLl8ufC4uYjglLkUuCjAxMjA6 IDZDIEQyIEM3IEJDIERDIDREIDZFIDEwICBERSA3MSBCOCBGOSBCMiA1NSAzMiBGOCA6IGwu Li4uTW4uLnEuLi5VMi4KMDEzMDogOEQgODAgREEgREYgNjEgNTQgQjcgNzEgIERBIDJBIDAz IEZFIEY5IDA3IEI1IDY0IDogLi4uLmFULnEuKi4uLi4uZAowMTQwOiBDQiA3NyBCMSBEQiBE QiAzOSAwOCBGMiAgQTggNjMgNDkgQkUgOTYgMUQgMEEgRDQgOiAudy4uLjkuLi5jSS4uLi4u CjAxNTA6IDAyIEZGIEM1IDMxIDFCIDcwIEFGIDgxICAzMiAwMyAzNSAwQSBDRCAwMCBFMCA4 MCA6IC4uLjEucC4uMi41Li4uLi4KMDE2MDogQUQgN0YgOEEgOUMgREIgOTAgMkIgRTMgIEMx IDUyIDQ1IDE4IDlGIDc0IDM3IDkxIDogLi4uLi4uKy4uUkUuLnQ3LgowMTcwOiBGNCA2OCBC RSA2QiAwQiBGRSA3MSBCMCAgNDMgQkMgMzkgMDYgMkUgODYgNzYgRUUgOiAuaC5rLi5xLkMu OS4uLnYuCjAxODA6IDRBIDVDIEMxIEUwIDg0IEE3IDgyIEJGICA1MSA2QSA0RCA1OCBGNCAw MSAzMCBDQiA6IEpcLi4uLi4uUWpNWC4uMC4KMDE5MDogNEQgQUYgOEMgRTIgRDcgM0UgNzIg MDMgIDM0IDg3IDhEIDhDIDQzIEIyIEZDIDg5IDogTS4uLi4+ci40Li4uQy4uLgowMWEwOiAy NiAwNCA5NCA4OSBEMSAzRiBEOCBGOCAgQUEgQUQgNTUgODAgMzggMDkgQUQgQ0IgOiAmLi4u Lj8uLi4uVS44Li4uCjAxYjA6IDc2IDY2IDI4IDhGIDVDIDE3IDkzIDMyICA5QyA4RSBCQSBD NiAzNiAyRSAxMSBGOSA6IHZmKC5cLi4yLi4uLjYuLi4KMDFjMDogODQgNTggODMgMzggMEQg OEUgQjIgMUEgIEYyIDhGIEIyIEQwIDg0IDA4IDFFIEY2IDogLlguOC4uLi4uLi4uLi4uLgow MWQwOiBGMCBCQiA0MyBBRiBFQiAxMiBENiA5MCAgN0MgMUQgQTggNzUgNjQgREEgNEYgNkQg OiAuLkMuLi4uLnwuLnVkLk9tCjAxZTA6IDJFIEQwIEY0IDRGIDk2IEQ3IDBEIDc2ICBBQSA3 MyBEOCA3QyA0MSBGNyAxNSA4NCA6IC4uLk8uLi52LnMufEEuLi4KMDFmMDogQkYgMDkgNjMg NjQgQTggODggQUIgNUUgIDlDIDY2IEM5IEMzIDAyIDUxIDA1IEE1IDogLi5jZC4uLl4uZi4u LlEuLgowMjAwOiBDMSAxRSBGNiA0NiAxRCA1NSBENiA5OCAgNEYgMEUgRkEgRTcgRDUgQTkg MEMgNkUgOiAuLi5GLlUuLk8uLi4uLi5uCjAyMTA6IDA3IEYzIDkwIDgwIEE5IEZDIDgwIDEz ICBBQSA3QSBGMCA4QiAyOSA3OCA5NCA1QiA6IC4uLi4uLi4uLnouLil4LlsKMDIyMDogMjMg Q0IgNEEgOTQgNjAgMEEgQjcgNjEgIDgyIDFCIEE2IEFGIDM2IDU4IEJGIDExIDogIy5KLmAu LmEuLi4uNlguLgowMjMwOiAzMiAyMiAzQyBCOSA4NCA1MSAzRCA4NCAgQ0YgNzkgNTggREYg M0YgOTggNzcgNDQgOiAyIjwuLlE9Li55WC4/LndECjAyNDA6IDkzIEYyIEVFIDAzIEI5IDFE IDNBIDhCICAxNSBCQiA5QyAyQSA2NiAyMyBDOCA1MSA6IC4uLi4uLjouLi4uKmYjLlEKMDI1 MDogQTggQkYgMEEgMTUgNDUgREQgNUMgQzYgIDlBIEVDIENEIEU0IDczIEI2IEMyIEM4IDog Li4uLkUuXC4uLi4ucy4uLgowMjYwOiBENiBEMyBCNiA0QSAxNiA5OSBBQyAwMiAgQTAgMkEg QzQgOTAgRkEgRDcgNjEgODMgOiAuLi5KLi4uLi4qLi4uLmEuCjAyNzA6IEY2IDE3IDQ1IDJF IDMwIDg2IEI4IDU1ICA2OCA4RiBEOCBFNCA5NiA1MyA2MCBERCA6IC4uRS4wLi5VaC4uLi5T YC4KMDI4MDogMUMgM0QgQzIgQjUgQUMgRUMgOTcgNUYgIDNDIEZEIDU1IDczIDE0IDRDIDY5 IDRGIDogLj0uLi4uLl88LlVzLkxpTwowMjkwOiA0QyBGQyAzMiBDQSBGNSA5NyA1NCBCOCAg RDQgNzEgRkEgMTggREIgRjYgM0IgOUIgOiBMLjIuLi5ULi5xLi4uLjsuCjAyYTA6IEM0IDRD IDJFIEQ1IEY3IDNDIEU2IDJEICA5OSBEQiBFRCA2MiA5MyAyNyA1MSA1QSA6IC5MLi4uPC4t Li4uYi4nUVoKMDJiMDogN0YgRDIgNDQgNTEgOUYgMTAgNTIgMTcgIDhEIDYxIDUyIDREIEVD IEI4IEU0IDE1IDogLi5EUS4uUi4uYVJNLi4uLgowMmMwOiA1OSBBNSA5MSAyMiBEQSAwQSAw MCBEOCAgRTYgMzIgRUMgQ0UgOTEgNjcgOTcgMzUgOiBZLi4iLi4uLi4yLi4uZy41CjAyZDA6 IDJGIDQxIDY3IEMwIDdBIDc1IDc5IDQ4ICBCNSBGMiA2OCBDRiA3QiBENCBGMyA3OSA6IC9B Zy56dXlILi5oLnsuLnkKMDJlMDogOUEgQkUgQkUgNTcgMkQgNkIgMzEgQTEgIDVFIDkzIDdE IDk1IDgxIDc5IDg5IDcyIDogLi4uVy1rMS5eLn0uLnkucgowMmYwOiAzMyBBNCA3OSA0NSAz NSAyMCBCOCA0RSAgQjIgNTEgM0IgQkIgMzcgNkIgNDMgMzggOiAzLnlFNSAuTi5ROy43a0M4 CjAzMDA6IDVGIDREIDc2IEYzIDlDIDdCIDMxIDU0ICAwQSBFRSA2QyBGNCBBQyA2RSAwMiA5 MCA6IF9Ndi4uezFULi5sLi5uLi4KMDMxMDogOTggQjggRjcgNTAgOUEgMzAgN0UgNzYgIDI2 IDFDIDQyIENEIENFIERCIEM2IEFBIDogLi4uUC4wfnYmLkIuLi4uLgowMzIwOiA4OSA0NiBB MCAyNyBCMyBBNyA5NCA5NyAgQzcgRkMgNTcgQjUgM0IgRUEgRkEgODEgOiAuRi4nLi4uLi4u Vy47Li4uCjAzMzA6IDk5IEU1IDBDIERGIDJCIEMyIDk0IDFBICAzRiAzRSBDQiBDMyA3OSBE OCBBQSAzNCA6IC4uLi4rLi4uPz4uLnkuLjQKMDM0MDogODIgRkUgM0QgQzcgN0UgQzcgOTYg REUgIDgzIEJFIDcyIEM4IDgxIEUyIEY3IEQ5IDogLi49Ln4uLi4uLnIuLi4uLgowMzUwOiBF QSBERCBFOSAxRSA0OCBCQSA3QyA0NiAgOUIgODkgQTQgMzMgNjIgRjUgQzAgNUUgOiAuLi4u SC58Ri4uLjNiLi5eCjAzNjA6IEE3IDdGIDEyIDZGIEU1IEI1IEE1IEJBICA5MyBDMyAzNSAy NSBDMyBERCBDMCBERiA6IC4uLm8uLi4uLi41JS4uLi4KMDM3MDogMkQgNzcgMjAgQTAgODkg NUQgMDkgOUMgIEFCIEZCIDcxIDgyIDJEIDYwIDcwIDg2IDogLXcgLi5dLi4uLnEuLWBwLgow MzgwOiBCMCA3RSBBMiAzRSAzMyBBQSAxRSA2QSAgMDkgNzQgREYgNDAgNzAgNEMgNUQgMjUg OiAufi4+My4uai50LkBwTF0lCjAzOTA6IEIwIDRDIDBCIEIzIENDIDkwIEU4IEYzICBENCAx RiAzNCA0OCA5OSBDOSAwMyAwRiA6IC5MLi4uLi4uLi40SC4uLi4KMDNhMDogQUQgRkMgQzQg QjcgNTkgMDEgQzUgOUMgIDU0IEMwIEQ4IDU5IDhCIDdDIDNGIDg1IDogLi4uLlkuLi5ULi5Z Lnw/LgowM2IwOiA2QiA2NSBBNSAxMyBCNiBFOSBCMSA2NSAgREYgMDcgMDMgRUIgQjcgQzkg RDcgOUUgOiBrZS4uLi4uZS4uLi4uLi4uCjAzYzA6IDg5IEFBIDQ4IEIxIDAwIEI2IDkzIDU5 ICA4NyAzQyBCRiA4MCBCMiBGMiBFMiA1NSA6IC4uSC4uLi5ZLjwuLi4uLlUKMDNkMDogNkIg MjAgOUQgNzIgNTQgMjcgMzIgNUEgIDAxIDREIDkyIDFDIDJBIDRDIEEzIEEyIDogayAuclQn MlouTS4uKkwuLgowM2UwOiA4OSA2OSBFOSAzNiA1QiA4QyA3QyA1NiAgNzIgQjUgOTQgRDIg NkYgNUMgRjEgMEQgOiAuaS42Wy58VnIuLi5vXC4uCjAzZjA6IEJGIDAzIDdDIEUwIDk5IDlF IDUwIDVFICA4MyBBRCAxMiAwRiBDNCBBQSA1MiAxQiA6IC4ufC4uLlBeLi4uLi4uUi4KMDQw MDogQTQgNzIgNDMgMEEgREIgMzEgMEQgQzcgIDI5IEVBIDRBIEJBIDk0IDZGIDA3IEMwIDog LnJDLi4xLi4pLkouLm8uLgowNDEwOiAyNyA5QSBGQyAyMCA5OSBGMiA2NyA1QiAgMjkgMTgg NkEgQjcgMEEgQzQgM0IgOTUgOiAnLi4gLi5nWykuai4uLjsuCjA0MjA6IDFBIDg4IEQ3IDI0 IDY4IDFBIDFGIDY4ICAxOCA1MiBBMiA4RiBDNyA0NSBBOSA4MCA6IC4uLiRoLi5oLlIuLi5F Li4KMDQzMDogMUUgQzYgREEgRDkgMDUgOEEgMTUgNDUgIEY0IEJFIEZDIDc3IDVGIDAyIDQ1 IDk1IDogLi4uLi4uLkUuLi53Xy5FLgowNDQwOiBDNSA0NyBBMSA5RCA5OSAxOCBGMSAyRCAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAuRy4uLi4uLQo9PiBsaWJzc2gyX3RyYW5zcG9y dF9yZWFkKCkgcGxhaW4gKDEwMjggYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAzIEZGIEU3IDIx IDUzICAyNCAzOSBBQyBFRiAzRCA1NiA5RSBFNyA6IC4uLi4uLiFTJDkuLj1WLi4KMDAxMDog RTkgMzkgMTIgMzIgN0QgQjYgMkMgRDMgIDcyIEJEIEJGIDFGIDlBIDQ1IDA4IDVGIDogLjku Mn0uLC5yLi4uLkUuXwowMDIwOiAxNiBBMSA2RiBDMCBFMiBBNyAxNiAwRSAgQ0EgRjcgNDcg QjkgQzMgMDMgRjcgMjggOiAuLm8uLi4uLi4uRy4uLi4oCjAwMzA6IEY3IEE4IDU3IDRCIEU5 IDdCIDYyIDIwICAxMCA2QSAwMyAxMCA1OCBBQiA1QiBBQSA6IC4uV0sue2IgLmouLlguWy4K MDA0MDogMDcgQjUgOTggRTEgNjcgRDUgODAgQ0YgIEEwIEMyIDdEIEYyIDk3IEQ4IEY0IEY2 IDogLi4uLmcuLi4uLn0uLi4uLgowMDUwOiA4NSA5MiAxMSBGMCA2RSBEOCBBQSA0MCAgOTEg NTkgNTYgM0MgQkMgMDMgMkUgOTEgOiAuLi4ubi4uQC5ZVjwuLi4uCjAwNjA6IEE4IDI1IEE3 IEREIDE1IERBIEY1IDk1ICA5QSBFOCAyOCBDQiAzRSBCQiBENyA4MCA6IC4lLi4uLi4uLi4o Lj4uLi4KMDA3MDogRTAgMDkgRjEgNDggODAgMzEgODAgNUMgIEQzIEMzIDBDIEI2IEU2IDcz IENBIEVBIDogLi4uSC4xLlwuLi4uLnMuLgowMDgwOiBENiA3QyBBMyA4QiA3MCA3RCA1NiA1 OSAgQTUgRjQgQkQgNkIgMUMgMzQgRjkgMkEgOiAufC4ucH1WWS4uLmsuNC4qCjAwOTA6IEQ4 IEM0IDk1IDVEIEI3IDk1IEMwIDgzICA0RSBFNiA0RCA5RiBBMSAyQSA0OSA0QSA6IC4uLl0u Li4uTi5NLi4qSUoKMDBhMDogMkYgOTAgNjMgOEQgREUgNkUgRjMgRkIgIDU1IDUzIDRCIEVE IDNEIDdFIEZDIEIwIDogLy5jLi5uLi5VU0suPX4uLgowMGIwOiBGMiA1MiBFMCAwNCBDOCA3 NiA5NiBENCAgQTUgNUEgNjUgNjcgQTAgMEIgMEQgQzggOiAuUi4uLnYuLi5aZWcuLi4uCjAw YzA6IDk3IEY4IDQ1IDY1IDg1IDcwIEI4IDNEICBGMSA3QyA3QiA5QiAxNCA0MSBGOCBBOSA6 IC4uRWUucC49Lnx7Li5BLi4KMDBkMDogNkIgM0MgRDYgM0MgQTUgNkQgMUEgQjUgIEY1IDBE IEEwIDY1IDFCIDAzIDJDIEEyIDogazwuPC5tLi4uLi5lLi4sLgowMGUwOiAxMiAxNiA0NiBF RiBEMiBEQSBFMCBFOCAgRTggNTAgMzQgMUUgOUIgNTYgMjYgQTIgOiAuLkYuLi4uLi5QNC4u ViYuCjAwZjA6IDcyIDZFIENGIEY5IDUwIEQ2IEJEIDJFICBDOSAwMyAyQSBFNSA3QiAwRiA5 NyBEQiA6IHJuLi5QLi4uLi4qLnsuLi4KMDEwMDogMUEgRTEgRUUgREUgQkUgNDggNzcgMTcg IDc2IENBIDc1IDIzIDk4IDlFIDRFIDVDIDogLi4uLi5Idy52LnUjLi5OXAowMTEwOiBDMCA0 QSAwMiAwQiAyNCBBOSAzNCA3OCAgMTcgM0IgQjUgODYgNTMgNDYgQjEgN0EgOiAuSi4uJC40 eC47Li5TRi56CjAxMjA6IDJGIDJBIDJBIDNGIDRGIDRGIDhGIEIyICA5NCA1NyBEOCBDQiBD MyA0QSA4NSBBQyA6IC8qKj9PTy4uLlcuLi5KLi4KMDEzMDogODggNDcgNjYgNDUgNkEgMjIg MjcgQTMgIDc3IEJFIDVEIDZCIDNBIDE3IDNGIEEwIDogLkdmRWoiJy53Ll1rOi4/LgowMTQw OiAxRSBDRiA4QyA2NSA3RCBCRSAyQSBBMyAgQTMgQTYgNzEgRjQgNkEgNDggMkYgNzUgOiAu Li5lfS4qLi4ucS5qSC91CjAxNTA6IEQ2IERCIDM5IDUwIDkzIEI3IEM0IDA2ICA2QyAzMCBC MSBDOCAwQyAwRiAxRCAxNCA6IC4uOVAuLi4ubDAuLi4uLi4KMDE2MDogNEYgNzYgNUYgN0Qg NkYgQ0YgOTQgREUgIDI2IDY5IEE5IEVGIDI5IENEIERFIDhGIDogT3ZffW8uLi4maS4uKS4u LgowMTcwOiA2MiBFMCA4OCBFNyAwRiA5NCA0NyAxMCAgNDIgQTcgRDIgNUQgQzIgQTQgOEIg NTQgOiBiLi4uLi5HLkIuLl0uLi5UCjAxODA6IENEIDA5IENEIEZEIEMzIDAwIEM4IDE5ICBB QiBBRiAyMiBEQSBGMSA5NSA2RSBGMiA6IC4uLi4uLi4uLi4iLi4ubi4KMDE5MDogMkEgOTcg NjQgMEMgQzYgRjQgQUIgRjAgIEU5IEEwIDU5IDhFIDRDIEMyIEMxIERBIDogKi5kLi4uLi4u LlkuTC4uLgowMWEwOiAxQSBBMyBFOSA0NiA2OCBFMCAzRCBFOCAgOEIgQTAgRTAgQ0EgNzAg MDYgRTggQjYgOiAuLi5GaC49Li4uLi5wLi4uCjAxYjA6IDQzIDE3IDZDIDdBIEEzIERGIEND IDY0ICBGRCAyMiAwMCAxNiAxQiA5RiAxRiBDOSA6IEMubHouLi5kLiIuLi4uLi4KMDFjMDog NTIgMEUgRDEgRjEgMkIgOTggNTggNkYgIDI2IDJBIEU2IDNEIDc5IDM1IDg5IDdGIDogUi4u LisuWG8mKi49eTUuLgowMWQwOiA1MyA5QyBDQSAxNSAxNSA2NCBEQiAzNCAgMTUgQUUgMDUg MzEgNDIgMzggQUEgOTkgOiBTLi4uLmQuNC4uLjFCOC4uCjAxZTA6IEE5IEUyIEZBIEZFIDMy IDREIDBEIEI3ICAwRSBBRSBDMSA5OCBFOCBDNCAwMiBENCA6IC4uLi4yTS4uLi4uLi4uLi4K MDFmMDogQ0EgNjkgNEEgNjAgODEgRTYgREMgQUQgIEZCIDA3IDZEIDVCIENEIDE1IERBIDRE IDogLmlKYC4uLi4uLm1bLi4uTQowMjAwOiAwNiAyNSA5OSA2OSBENyAyOCBEMiA4NCAgNjkg Q0YgQTAgQzQgOUIgMkEgMUIgQjcgOiAuJS5pLiguLmkuLi4uKi4uCjAyMTA6IDJGIDYxIDc2 IDkzIDk4IDkzIEZCIDlGICA5MyA1MCBFRSAwMCAzRCA5NCBCMSBFOSA6IC9hdi4uLi4uLlAu Lj0uLi4KMDIyMDogNUUgMjEgMjAgQUUgMUQgNTEgMjEgQjQgIEI1IDAzIEM3IDdDIEZBIDZB IEQwIDJGIDogXiEgLi5RIS4uLi58LmouLwowMjMwOiAxMCBDNCAzMyAwRSAzNCAwNCBGQyA0 NiAgNTAgQjAgOEMgNUMgN0YgMzIgQzkgRDcgOiAuLjMuNC4uRlAuLlwuMi4uCjAyNDA6IDc0 IDY2IDJBIEFDIDA4IEY3IDExIDM5ICA2RiBDOCAwNiAxNCAzMyBCRCAyOSBERiA6IHRmKi4u Li45by4uLjMuKS4KMDI1MDogMzYgREQgNDkgMTggNDAgQjcgNjkgQkMgIDAxIEY4IDE2IDk0 IDM4IDJFIDVGIEMxIDogNi5JLkAuaS4uLi4uOC5fLgowMjYwOiAzMiAwQSBEOCBGRiBENCA2 QSAwOSA3MyAgNTYgOTkgNjkgRDYgRTUgNjkgQjEgNDIgOiAyLi4uLmouc1YuaS4uaS5CCjAy NzA6IEM1IDA1IDAwIDZFIDE5IDY2IDQ5IDQ0ICA0RCBDNSA0RSAwNyBBNiBGQyAwNCAwNCA6 IC4uLm4uZklETS5OLi4uLi4KMDI4MDogNkEgMDUgNjQgNDAgQTUgQ0IgQTEgNjEgIEE0IDc5 IEVFIDFBIDc5IDdDIEExIDgzIDogai5kQC4uLmEueS4ueXwuLgowMjkwOiBCQSA5RiBDNyA2 QiAwNSBFNiAzOSBENCAgMTggOEUgQUIgMDIgQTggMTkgQUYgOEMgOiAuLi5rLi45Li4uLi4u Li4uCjAyYTA6IDg4IEY0IDQ3IEY3IDQzIEYyIDNEIDFFICA5MSAxRiAwMSA5MSAzOCA1MiBB QiA4NCA6IC4uRy5DLj0uLi4uLjhSLi4KMDJiMDogNTEgMzIgMzYgRjIgMzUgQzAgQUEgRDQg IDgzIDdEIEQzIDk1IDk3IDNCIDI4IDY0IDogUTI2LjUuLi4ufS4uLjsoZAowMmMwOiA2MiA1 RCA2NiA5RSA0RCBEMSA4MyBFMyAgQzkgRkEgREMgMUMgRTggRTEgMEEgNjQgOiBiXWYuTS4u Li4uLi4uLi5kCjAyZDA6IDcxIDBFIDUxIENDIDgyIEQzIEY2IDdBICA5RCBFMCAzQSA5MSAw MCBENyBFNyA2QiA6IHEuUS4uLi56Li46Li4uLmsKMDJlMDogMEQgN0MgQkYgQTQgQzEgOTEg OUYgOTkgIDU4IEM3IDQzIDEzIDA2IDZCIDI5IDA2IDogLnwuLi4uLi5YLkMuLmspLgowMmYw OiBGRiAxMiBGOSBFNyBCOSA3NyBDMCBGMiAgMzkgMDQgMEUgMjIgM0UgNDIgMTIgMTkgOiAu Li4uLncuLjkuLiI+Qi4uCjAzMDA6IDUwIDBDIDE5IEY5IDZEIDc2IDZBIDRCICA0RCAzNyBD OCBGRSA0QyA3NiA5RCAwNSA6IFAuLi5tdmpLTTcuLkx2Li4KMDMxMDogQjggOTAgOUYgMEIg NEQgOTcgMzYgQkIgIDcwIDYyIDg5IDkyIDhEIEMwIEUzIDdGIDogLi4uLk0uNi5wYi4uLi4u LgowMzIwOiA4NCBFMiBBNyA1MiBFNyA5QiAxQyBFRiAgNTcgQjYgMzEgREEgREMgQTAgQTgg NjUgOiAuLi5SLi4uLlcuMS4uLi5lCjAzMzA6IDE3IDVDIDMzIEREIEQ4IEUwIDA5IDVDICBE QiBCQiBDMiA4QSAyNiA5RiA4NiA0NCA6IC5cMy4uLi5cLi4uLiYuLkQKMDM0MDogOTIgNUYg MzQgODMgMDUgNTcgOTYgRkUgIDUwIDkzIEZCIDBCIDZBIDA0IDNGIEU4IDogLl80Li5XLi5Q Li4uai4/LgowMzUwOiBGNyBGRSA0RSAzNSAyQiBFMSAzQiA1MCAgMkIgQzIgREEgNjUgRjgg MjkgRTQgMkYgOiAuLk41Ky47UCsuLmUuKS4vCjAzNjA6IDBEIDk3IEVGIDI1IDlDIDM3IERD IDNCICAwNiBEMyA1RCBGRCBBMSA1MiA2MyBEQSA6IC4uLiUuNy47Li5dLi5SYy4KMDM3MDog QTggQjYgMDIgM0MgQjcgQTEgMjIgNkYgIENDIEMxIDQzIDQ1IEFCIDk2IDZBIDVDIDogLi4u PC4uIm8uLkNFLi5qXAowMzgwOiA5OSA4NCBERCBERSA4RiBGRSBBNCBFNyAgNjQgNzkgMzEg REUgN0YgQzYgMjIgQjIgOiAuLi4uLi4uLmR5MS4uLiIuCjAzOTA6IDgwIEE0IDJBIDk4IEM2 IDYwIDI1IEI4ICAzNiBDQiA2RCBDMSBCMyBGMCBDRCAwOSA6IC4uKi4uYCUuNi5tLi4uLi4K MDNhMDogMDkgOTcgMUUgQTMgM0YgREQgMjkgQUIgIDRDIDNEIEM3IDkzIDZBIDM0IERDIDU2 IDogLi4uLj8uKS5MPS4uajQuVgowM2IwOiBFRiAxOSA2MyA1OCAzRCA3NiA3MyBGMCAgNDYg NDIgNUEgM0EgRjEgQTMgMTMgOEQgOiAuLmNYPXZzLkZCWjouLi4uCjAzYzA6IENCIDE1IENE IDgyIEYyIEM2IDIxIDBEICA2RSA5QSBEOCAyQyBFRCAxMCA0RCBDOSA6IC4uLi4uLiEubi4u LC4uTS4KMDNkMDogMzUgQzUgN0YgMTMgQzQgRDIgODQgRjMgIEZFIDFEIDdDIEE3IEI4IDRB IDc5IEVEIDogNS4uLi4uLi4uLnwuLkp5LgowM2UwOiBENCBFNyBFMCA3NSAzMCAwMCAwRCAz QyAgQjkgOUQgMDQgMkYgN0QgNUEgN0EgMkEgOiAuLi51MC4uPC4uLi99WnoqCjAzZjA6IEFB IDIzIEJCIEM4IEVBIDIyIEVCIDc1ICBCQSA2RiA0NyAwQyAzQiBBOSBEQyA1NiA6IC4jLi4u Ii51Lm9HLjsuLlYKMDQwMDogNjAgRUIgNEEgMjEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogYC5KIQpbbGlic3NoMl0gMC42NDYwMDcgVHJhbnNwb3J0OiBQYWNr ZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9MTAyOAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9y ZWFkKCkgcGxhaW4gKDEgYnl0ZXMpCjAwMDA6IDM0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IDQKW2xpYnNzaDJdIDAuNjQ2MDIwIFRyYW5zcG9y dDogUGFja2V0IHR5cGUgNTIgcmVjZWl2ZWQsIGxlbmd0aD0xCltsaWJzc2gyXSAwLjY0NjAy MyBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA1MgpbbGlic3NoMl0g MC42NDYwMjYgVXNlcmF1dGg6IFBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwK W2xpYnNzaDJdIDAuNjQ2MDM1IFNDUDogT3BlbmluZyBjaGFubmVsIGZvciBTQ1AgcmVjZWl2 ZQpbbGlic3NoMl0gMC42NDYwMzggQ29ubjogQWxsb2NhdGVkIG5ldyBjaGFubmVsIElEIzAK W2xpYnNzaDJdIDAuNjQ2MDQwIENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQg cGFjayAzMjc2OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMjQgYnl0ZXMp CjAwMDA6IDVBIDAwIDAwIDAwIDA3IDczIDY1IDczICA3MyA2OSA2RiA2RSAwMCAwMCAwMCAw MCA6IFouLi4uc2Vzc2lvbi4uLi4KMDAxMDogMDAgMDQgMDAgMDAgMDAgMDAgODAgMDAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4uLi4KW2xpYnNzaDJdIDAuNjQ2MDY0IFNv Y2tldDogU2VudCA2OC82OCBieXRlcyBhdCAweDUwOTk1OAo9PiBsaWJzc2gyX3RyYW5zcG9y dF93cml0ZSBzZW5kKCkgKDY4IGJ5dGVzKQowMDAwOiBBMyBCMSBEQyA2NCA3NCBFRSA1RiAx NSAgOTIgMTYgNUQgRkMgQkYgMEUgOUUgNjUgOiAuLi5kdC5fLi4uXS4uLi5lCjAwMTA6IDk3 IDgxIDg3IDk5IERBIDlCIDY4IEE5ICBFRiA3QiBFNCAwRCBDRCA2MyA2MiA1MSA6IC4uLi4u LmguLnsuLi5jYlEKMDAyMDogRjkgNjQgMzkgRkQgQzAgNDAgQjIgMTYgIDM5IDFFIDUzIDAz IDkyIDIyIDYxIDk2IDogLmQ5Li5ALi45LlMuLiJhLgowMDMwOiA2MCA0MCAzRSAxMCA0NSBD RSAxMSAxQyAgRTIgRDkgODUgQkIgQUEgMjMgQkIgRUYgOiBgQD4uRS4uLi4uLi4uIy4uCjAw NDA6IDU2IDAwIDUxIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IFYuUTEKW2xpYnNzaDJdIDAuNjQ2MDgyIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0 IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjY0NjA4NSBUcmFuc3BvcnQ6IExvb2tpbmcgZm9y IHBhY2tldCBvZiB0eXBlOiA5MgpbbGlic3NoMl0gMC42NDYwODggRmFpbHVyZSBFdmVudDog LTM3IC0gV291bGQgYmxvY2sKW2xpYnNzaDJdIDAuNjQ2MDk1IEZhaWx1cmUgRXZlbnQ6IC0z NyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwKW2xpYnNzaDJdIDAuNjQ2MzAy IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAw LjY0NjMwOCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5MgpbbGli c3NoMl0gMC42NDYzMTMgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5 MTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAwMDog QjYgQTYgNzQgNzEgRTkgM0MgMkIgOEEgIDA4IDg5IDJEIDY3IDJCIDJDIDBGIDE2IDogLi50 cS48Ky4uLi1nKywuLgowMDEwOiA1QyBGMyA5OCAwOSA0OCBDMCAzRCAxMiAgMkEgMjEgRDQg MUEgMjEgMjQgMDMgRkEgOiBcLi4uSC49LiohLi4hJC4uCjAwMjA6IDVCIERCIDA5IEMzIDI3 IDk4IEVCIDVGICAyRSBGMSAwRSA2RSBEMiBFMCAxMCAzNiA6IFsuLi4nLi5fLi4ubi4uLjYK MDAzMDogMTcgODggMjcgNEMgNEEgMUEgMEUgNDcgIEUxIDIwIEZBIEMwIDcwIDQyIDRBIDdE IDogLi4nTEouLkcuIC4ucEJKfQowMDQwOiBERCAzMCAzNSAzRiAzOCBGMiBBOCA2MCAgNUUg MDAgN0QgNEIgNjMgMTUgN0YgOUYgOiAuMDU/OC4uYF4ufUtjLi4uCjAwNTA6IEU3IDJFIDVF IDRFIEFEIDU4IEVDIEM5ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uXk4uWC4uCj0+ IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAg MDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xp YnNzaDJdIDAuNjQ2MzU0IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVu Z3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykKMDAw MDogNUIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAxIDg2IEEwIDAwIDAwIDgwIDog Wy4uLi4uLi4uLi4uLi4uLgowMDEwOiAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjY0NjM2OSBUcmFuc3BvcnQ6IFBh Y2tldCB0eXBlIDkxIHJlY2VpdmVkLCBsZW5ndGg9MTcKW2xpYnNzaDJdIDAuNjQ2MzcyIFRy YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjY0 NjM3NSBDb25uOiBDb25uZWN0aW9uIEVzdGFibGlzaGVkIC0gSUQ6IDAvMCB3aW46IDEwMDAw MC8yNjIxNDQgcGFjazogMzI3NjgvMzI3NjgKW2xpYnNzaDJdIDAuNjQ2MzgwIENvbm46IHN0 YXJ0aW5nIHJlcXVlc3QoZXhlYykgb24gY2hhbm5lbCAwLzAsIG1lc3NhZ2U9c2NwIC1wZiAn L3RtcC9URVNUJwo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMTggYnl0ZXMp CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwNCA2NSA3OCA2NSA2MyAwMSAwMCAw MCA6IGIuLi4uLi4uLmV4ZWMuLi4KMDAxMDogMDAgMjYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogLiYKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUg cGxhaW4yICgzOCBieXRlcykKMDAwMDogNzMgNjMgNzAgMjAgMkQgNzAgNjYgMjAgIDI3IDJG IDc0IDZEIDcwIDJGIDU0IDQ1IDogc2NwIC1wZiAnL3RtcC9URQowMDEwOiA1MyA1NCAyNyAw MCAwMiA0NSA5NSBDNSAgNDcgQTEgOUQgOTkgMTggRjEgMkQgMDAgOiBTVCcuLkUuLkcuLi4u Li0uCjAwMjA6IDkwIDM3IDUxIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IC43US4uLgpbbGlic3NoMl0gMC42NDY0MjEgU29ja2V0OiBTZW50IDEwMC8xMDAg Ynl0ZXMgYXQgMHg1MDk5NTgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgpICgx MDAgYnl0ZXMpCjAwMDA6IEZBIDE2IDAxIDFEIDcyIERBIDA0IEE2ICBCOSBBMCBBRiA2MSAy OSA0NiAyOCAyRSA6IC4uLi5yLi4uLi4uYSlGKC4KMDAxMDogNDUgQUUgRjQgN0IgMUEgRTYg ODEgQ0EgIDE0IDlEIDdDIDIwIEEzIDNCIDdBIDA3IDogRS4uey4uLi4uLnwgLjt6LgowMDIw OiAxOCBERSA1NSBCRSA4NiBDMCBGOSBGOSAgRDEgNjAgM0EgNUQgQzcgOEEgOEUgNUIgOiAu LlUuLi4uLi5gOl0uLi5bCjAwMzA6IDM3IDIxIDY5IEEzIEIyIDBDIDRBIDA4ICA0OCAyMCA0 QSAxMiBDNiAzRiAyMSA2RSA6IDchaS4uLkouSCBKLi4/IW4KMDA0MDogMDkgNzAgMzQgMkQg MzQgNDUgMEIgMEMgIDE0IEY2IDhFIDgxIDAyIDdGIDc0IEEzIDogLnA0LTRFLi4uLi4uLi50 LgowMDUwOiBFQyBFMSBDQyA3MCBCNSAxMyBEQSA3NCAgQjMgMUIgM0QgMkUgRDYgNTYgREEg MzMgOiAuLi5wLi4udC4uPS4uVi4zCjAwNjA6IDVFIDlDIEFDIDBCICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF4uLi4KW2xpYnNzaDJdIDAuNjQ2NDQ0IFRyYW5z cG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjY0NjQ0 NyBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJd IDAuNjQ2NDUxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3Rpbmcg U0NQIHN0YXJ0dXAKW2xpYnNzaDJdIDAuNjQ3MzM1IFRyYW5zcG9ydDogTG9va2luZyBmb3Ig cGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjY0NzM0MCBUcmFuc3BvcnQ6IExvb2tp bmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJdIDAuNjQ3MzQ1IFNvY2tldDog UmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzAKPT4gbGlic3NoMl90cmFuc3Bv cnRfcmVhZCgpIHJhdyAoNzIgYnl0ZXMpCjAwMDA6IDdDIDZCIDNFIDE0IDhEIEI3IEQ1IDg1 ICA1MCAwRCA3OCBDOCA4MiBFNCAxMyA1NCA6IHxrPi4uLi4uUC54Li4uLlQKMDAxMDogOEEg NjEgNTQgQ0MgNkUgQzEgRDMgNUQgIDFGIDdGIDhCIDlEIDUwIEU3IDREIEU1IDogLmFULm4u Ll0uLi4uUC5NLgowMDIwOiBERiA2RSA2OSBBMCAyNCBBOCAzNiAyNyAgODAgMTMgOUYgMDIg MEUgQTEgNEEgRDcgOiAubmkuJC42Jy4uLi4uLkouCjAwMzA6IEZBIEM2IDVCIEQxIDg4IDQ1 IEY0IEY4ICA3RCA1QSAyMSAwNyA5MyA5NCA2NCBDRCA6IC4uWy4uRS4ufVohLi4uZC4KMDA0 MDogMjYgN0MgQjcgOUYgMzEgNTggODAgRkQgICAgICAgICAgICAgICAgICAgICAgICAgIDog JnwuLjFYLi4KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQow MDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAuLi4uLgpbbGlic3NoMl0gMC42NDczODEgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJl Y2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUg Ynl0ZXMpCjAwMDA6IDYzIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IGMuLi4uCltsaWJzc2gyXSAwLjY0NzM5NyBUcmFuc3BvcnQ6IFBhY2tldCB0 eXBlIDk5IHJlY2VpdmVkLCBsZW5ndGg9NQpbbGlic3NoMl0gMC42NDc0MDIgVHJhbnNwb3J0 OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTkKW2xpYnNzaDJdIDAuNjQ3NDA4IFND UDogU2VuZGluZyBpbml0aWFsIHdha2V1cApbbGlic3NoMl0gMC42NDc0MTMgQ29ubjogV3Jp dGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzAKW2xpYnNzaDJdIDAuNjQ3 NDE3IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFtX2lkPTAK PT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDkgYnl0ZXMpCjAwMDA6IDVFIDAw IDAwIDAwIDAwIDAwIDAwIDAwICAwMSAgICAgICAgICAgICAgICAgICAgICA6IF4uLi4uLi4u Lgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbjIgKDEgYnl0ZXMpCjAwMDA6IDAw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4KW2xp YnNzaDJdIDAuNjQ3NDQxIFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUwOTk1OAo9 PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBzZW5kKCkgKDUyIGJ5dGVzKQowMDAwOiA0MSBC QyBEQSBERSBGMiA3QiAyOSA4NSAgMUIgRTYgNkYgMzQgRUEgNzEgQzMgRkIgOiBBLi4uLnsp Li4ubzQucS4uCjAwMTA6IDc2IEQwIEI4IDM4IDhGIDQyIEZFIEY2ICA2RiAyQyBENCA1MyAz RCA4OCA4RSA3MiA6IHYuLjguQi4ubywuUz0uLnIKMDAyMDogRUYgMUEgQTQgRDUgNDIgOTcg RTYgN0UgIDcxIERFIDRBIENCIDExIDFEIDcwIEREIDogLi4uLkIuLn5xLkouLi5wLgowMDMw OiBFRiAxQiBFMSBBNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu Li4uCltsaWJzc2gyXSAwLjY0NzQ1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5 dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjY0NzQ2MSBGYWls dXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC42NDc0NjQgRmFpbHVy ZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlClts aWJzc2gyXSAwLjY1NTg1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZy b20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjY1NTg3MCBTb2NrZXQ6IFJl Y3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMAo9PiBsaWJzc2gyX3RyYW5zcG9y dF9yZWFkKCkgcmF3ICgxMjAgYnl0ZXMpCjAwMDA6IDI4IENFIDI2IEVCIEE5IEY2IDEwIEU3 ICBBNCBEOCA0NCA5RiA1RCBDNSA4MSA4QSA6ICguJi4uLi4uLi5ELl0uLi4KMDAxMDogNkEg NjEgMzAgRjYgNUIgQTcgRDUgQkQgIDUxIEQ1IEFCIERCIDdCIDlCIDc4IDY1IDogamEwLlsu Li5RLi4uey54ZQowMDIwOiBEQiBDRSBEQyBFNCA2RCA3QSBDRCA5NyAgMEYgNjIgRjggQzYg QTEgMjcgRDEgMEIgOiAuLi4ubXouLi5iLi4uJy4uCjAwMzA6IDMyIDZEIDFFIEUzIEMwIDVD IDAyIEVCICA1MCAzRSBCRiAzQSBFOCA3MCBFQiBCNSA6IDJtLi4uXC4uUD4uOi5wLi4KMDA0 MDogRTUgMjkgMkQgQkIgRjAgOEYgNDggNjIgIEEyIDFDIEY2IDZDIEUxIDIwIEJBIDZCIDog LiktLi4uSGIuLi5sLiAuawowMDUwOiBDOCBDOSBDOCBDRiA5QyBFNCBFQiBGMSAgRkEgRTAg QTIgRDcgNUIgQzAgN0EgOUMgOiAuLi4uLi4uLi4uLi5bLnouCjAwNjA6IEIyIEYxIEJBIDdB IDk0IDMyIEQ0IDJEICA5MyBEQiBEQyA0MiA1MCBCMyAyMSA5NCA6IC4uLnouMi4tLi4uQlAu IS4KMDA3MDogM0EgQUEgNkYgOTQgQjcgMjMgOUUgNUQgICAgICAgICAgICAgICAgICAgICAg ICAgIDogOi5vLi4jLl0KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5 dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMC42NTU5MTkgVHJhbnNwb3J0OiBQYWNrZXQgdHlw ZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxh aW4gKDQ0IGJ5dGVzKQowMDAwOiA1RiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDEgMDAgMDAg MDAgMUYgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi4uc2NwCjAwMTA6IDNBIDIwIDc3IDYxIDcy IDZFIDY5IDZFICA2NyAzQSAyMCA0NSA3OCA2NSA2MyA3NSA6IDogd2FybmluZzogRXhlY3UK MDAyMDogNzQgNjkgNkUgNjcgMjAgNzMgNjMgNzAgIDMxIDJFIDBEIDBBICAgICAgICAgICAg IDogdGluZyBzY3AxLi4uCltsaWJzc2gyXSAwLjY1NTk1NiBUcmFuc3BvcnQ6IFBhY2tldCB0 eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9NDQKW2xpYnNzaDJdIDAuNjU1OTU5IENvbm46IDMx IGJ5dGVzIHBhY2tldF9hZGQoKSBmb3IgMC8wLzQ3ODg0NTkwMzgzMTA1CltsaWJzc2gyXSAw LjY1NTk2MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC42 NTU5NjcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQ IHJlc3BvbnNlCltsaWJzc2gyXSAwLjY5NDA0MSBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50 cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjY5NDA1 NSBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMAo9PiBsaWJz c2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgzNjAgYnl0ZXMpCjAwMDA6IDVEIDdDIDI3IDEw IDNBIEM5IDY2IDI1ICAzMyA4RCA2NyAxMSBCNSA1MyAzMyA2QiA6IF18Jy46LmYlMy5nLi5T M2sKMDAxMDogNEYgRDkgQkQgODMgNjYgNDkgQzMgNjEgIDk1IEJDIDVDIDYxIDMyIERBIDM2 IDE0IDogTy4uLmZJLmEuLlxhMi42LgowMDIwOiAyNCAzQiA5QSA0NyBDOSBBNSA4RCA4OSAg MUEgQUIgQTMgRDMgNzEgNzkgMjQgRkEgOiAkOy5HLi4uLi4uLi5xeSQuCjAwMzA6IDE4IDhF IDhCIEQzIEU5IENEIEQ5IDUzICA4NiBEQiBGRSAwRSBFRSBBNSBCNyA2MCA6IC4uLi4uLi5T Li4uLi4uLmAKMDA0MDogREUgOTkgNzQgRUIgOTYgQ0UgMUMgMzIgIEI5IDI0IEQzIDFCIEM1 IDdGIDBGIDE4IDogLi50Li4uLjIuJC4uLi4uLgowMDUwOiAzMSAwMCA1NyBEQyBFNCA1MiA4 NyBBMCAgQjkgRjMgNUMgNkUgRUUgMUMgMjQgQjMgOiAxLlcuLlIuLi4uXG4uLiQuCjAwNjA6 IDU4IDMxIDBCIDVGIEZEIDdFIDFFIDFBICA2OCA3NyA2RCAxRCBEOCBEMSA0OCBFQyA6IFgx Ll8ufi4uaHdtLi4uSC4KMDA3MDogM0UgRkUgOTkgNEQgRkYgOUIgMUMgMjYgIDkzIEFDIDBC IEI1IENEIDVDIDk0IDVEIDogPi4uTS4uLiYuLi4uLlwuXQowMDgwOiBBRSBDRCA5MiA2RSBB MSBFNSAzNSA0NSAgMTcgNUUgRTAgNTggRUEgMkEgN0YgQzEgOiAuLi5uLi41RS5eLlguKi4u CjAwOTA6IDBGIDdEIERDIDczIDVBIDgwIDg3IDZDICAwQSA3MyAyNCA1OCA2NCA0MCAwMSBD RiA6IC59LnNaLi5sLnMkWGRALi4KMDBhMDogMjUgQ0YgNDMgRTEgNTggMzYgMTggODUgIDE1 IEJBIDI3IEU0IDI4IDM2IDBEIDgyIDogJS5DLlg2Li4uLicuKDYuLgowMGIwOiBGMyAzQiA2 OSBBMSA4MCAxOCBCMCA4QiAgNjkgQjkgODcgMjEgNDkgOTcgODEgRkMgOiAuO2kuLi4uLmku LiFJLi4uCjAwYzA6IEM0IDM1IDNEIEIxIDdDIEQ0IDhGIDM1ICBFMyAzNSA5RiA2MSBFRiBB RCAxQiA3QiA6IC41PS58Li41LjUuYS4uLnsKMDBkMDogRDMgQTAgQzUgQjIgMkUgQTUgM0Eg RUEgIDREIEZFIEU3IEFGIDg4IEZGIDFEIEI3IDogLi4uLi4uOi5NLi4uLi4uLgowMGUwOiBC RSAyNiA2MSAwNSBBMiA3QyBCMCA5QSAgNTMgOUQgRDkgM0YgNDUgNDQgRjIgN0IgOiAuJmEu LnwuLlMuLj9FRC57CjAwZjA6IEYyIEJDIDM1IEM1IDY2IDE1IDM0IDYwICBBQyA2QSBBNyBF RiAyNCA3QiA1QiAzOSA6IC4uNS5mLjRgLmouLiR7WzkKMDEwMDogNUQgMDUgMzcgRDEgQkMg QzUgNjIgMEQgIDMwIDhCIEEwIDQ5IDFFIEYzIDE3IDYyIDogXS43Li4uYi4wLi5JLi4uYgow MTEwOiA0NiAyMSA0RiA2QiBCMCBBMyAxRiA0MCAgMTggQzggNTQgQzAgQUYgOEYgQ0EgNTUg OiBGIU9rLi4uQC4uVC4uLi5VCjAxMjA6IEIxIEZDIDFFIDJFIDYxIEE4IDkzIDBEICA3NCAw RCA1OSA0NyBFNiAzNiA0MyA1MSA6IC4uLi5hLi4udC5ZRy42Q1EKMDEzMDogMkEgNzEgNDMg REYgQzggRTEgODAgRkUgIDU1IEI5IDg4IEEzIDlGIDQ5IEFFIDdDIDogKnFDLi4uLi5VLi4u LkkufAowMTQwOiBBQyAxQSBDOCBERCAyMyA1NCAxMyBGRSAgMTMgMUUgQTEgRUQgMTYgREYg OTUgN0IgOiAuLi4uI1QuLi4uLi4uLi57CjAxNTA6IDIyIEE0IEUwIDgzIDMwIEQ4IDJBIDZB ICAyRiBFMyAwQSAwRSA4OCBFNiAzNSAwRiA6ICIuLi4wLipqLy4uLi4uNS4KMDE2MDogM0Mg OUIgMDYgNTQgMUQgQjAgNUEgMDUgICAgICAgICAgICAgICAgICAgICAgICAgIDogPC4uVC4u Wi4KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAw MiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4u LgpbbGlic3NoMl0gMC42OTQxNDMgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVk LCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwNSBieXRl cykKMDAwMDogNUYgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAxIDAwIDAwIDAwIDVDIDczIDYz IDcwIDogXy4uLi4uLi4uLi4uXHNjcAowMDEwOiAzQSAyMCA0NiA0MSA1NCA0MSA0QyAzQSAg MjAgNDUgNzggNjUgNjMgNzUgNzQgNjkgOiA6IEZBVEFMOiBFeGVjdXRpCjAwMjA6IDZFIDY3 IDIwIDczIDczIDY4IDMxIDIwICA2OSA2RSAyMCA2MyA2RiA2RCA3MCA2MSA6IG5nIHNzaDEg aW4gY29tcGEKMDAzMDogNzQgNjkgNjIgNjkgNkMgNjkgNzQgNzkgIDIwIDZEIDZGIDY0IDY1 IDIwIDY2IDYxIDogdGliaWxpdHkgbW9kZSBmYQowMDQwOiA2OSA2QyA2NSA2NCAyMCAyOCA0 MyA2OCAgNjUgNjMgNkIgMjAgNzQgNjggNjEgNzQgOiBpbGVkIChDaGVjayB0aGF0CjAwNTA6 IDIwIDczIDYzIDcwIDMxIDIwIDY5IDczICAyMCA2OSA2RSAyMCA3OSA2RiA3NSA3MiA6ICBz Y3AxIGlzIGluIHlvdXIKMDA2MDogMjAgNTAgNDEgNTQgNDggMjkgMkUgMEQgIDBBICAgICAg ICAgICAgICAgICAgICAgIDogIFBBVEgpLi4uCltsaWJzc2gyXSAwLjY5NDE3MSBUcmFuc3Bv cnQ6IFBhY2tldCB0eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9MTA1CltsaWJzc2gyXSAwLjY5 NDE3NCBDb25uOiA5MiBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80Nzg4NDU5MDM4MzEw NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAy IDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u CltsaWJzc2gyXSAwLjY5NDE4NyBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQs IGxlbmd0aD01Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMjUgYnl0ZXMp CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwQiA2NSA3OCA2OSA3NCAyRCA3MyA3 NCA6IGIuLi4uLi4uLmV4aXQtc3QKMDAxMDogNjEgNzQgNzUgNzMgMDAgMDAgMDAgMDAgIEZG ICAgICAgICAgICAgICAgICAgICAgIDogYXR1cy4uLi4uCltsaWJzc2gyXSAwLjY5NDIwMSBU cmFuc3BvcnQ6IFBhY2tldCB0eXBlIDk4IHJlY2VpdmVkLCBsZW5ndGg9MjUKW2xpYnNzaDJd IDAuNjk0MjA0IENvbm46IENoYW5uZWwgMCByZWNlaXZlZCByZXF1ZXN0IHR5cGUgZXhpdC1z dGF0dXMgKHdyIDApCltsaWJzc2gyXSAwLjY5NDIwOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUg cmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBw bGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDAuNjk0MjIwIFRyYW5zcG9ydDog UGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRf cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42OTQyMzggVHJh bnNwb3J0OiBQYWNrZXQgdHlwZSA5NyByZWNlaXZlZCwgbGVuZ3RoPTUKW2xpYnNzaDJdIDAu Njk0MjQxIENvbm46IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMApbbGlic3NoMl0g MC42OTQyNDggQ29ubjogRnJlZWluZyBjaGFubmVsIDAvMCByZXNvdXJjZXMKW2xpYnNzaDJd IDAuNjk0MjUyIENvbm46IFNlbmRpbmcgRU9GIG9uIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJf dHJhbnNwb3J0X3dyaXRlIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MCAwMCAwMCAwMCAwMCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgLi4uLgpbbGlic3NoMl0gMC42 OTQyNzEgU29ja2V0OiBTZW50IDM2LzM2IGJ5dGVzIGF0IDB4NTA5OTU4Cj0+IGxpYnNzaDJf dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMzYgYnl0ZXMpCjAwMDA6IDNFIDlDIDY0IDM2IEU5 IDRDIDVEIDdDICBFNyA2RCBCRCBDQiA2RCBFQSAxMiA5RCA6ID4uZDYuTF18Lm0uLm0uLi4K MDAxMDogMEYgNTggNUEgQjUgRUIgQUEgN0QgOEYgIDQ0IDhDIENCIDJDIEFBIDg2IDdCIDM5 IDogLlhaLi4ufS5ELi4sLi57OQowMDIwOiA0NCBDNyAxNiA2RSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBELi5uCltsaWJzc2gyXSAwLjY5NDI4NSBDb25uOiBD bG9zaW5nIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg1 IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42OTQyOTkgU29ja2V0OiBTZW50IDM2LzM2 IGJ5dGVzIGF0IDB4NTA5OTU4Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAo MzYgYnl0ZXMpCjAwMDA6IDdBIDBFIDNBIDg5IDBCIEYyIDUwIEY1ICA5OCA0NSBGRiBEMSA1 QyBEQiBDMCBGMCA6IHouOi4uLlAuLkUuLlwuLi4KMDAxMDogOEEgNjIgMjMgNjAgQjEgMUIg NzYgQ0MgIEI4IDZEIEEwIENFIDdEIDZGIEQwIDRCIDogLmIjYC4udi4ubS4ufW8uSwowMDIw OiAyMSA1NiBEMiBFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAh Vi4uCltsaWJzc2gyXSAwLjY5NDMxMSBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv ZiB0eXBlOiA5NApbbGlic3NoMl0gMC42OTQzMTQgVHJhbnNwb3J0OiBMb29raW5nIGZvciBw YWNrZXQgb2YgdHlwZTogOTUKW2xpYnNzaDJdIDAuNjk0MzE3IFRyYW5zcG9ydDogTG9va2lu ZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk0CltsaWJzc2gyXSAwLjY5NDMxOSBUcmFuc3BvcnQ6 IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5NQpbbGlic3NoMl0gMC42OTQzMjIgVHJh bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTQKW2xpYnNzaDJdIDAuNjk0 MzI1IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk1CltsaWJzc2gy XSAwLjY5NDMyOCBUcmFuc3BvcnQ6IERpc2Nvbm5lY3Rpbmc6IHJlYXNvbj0xMSwgZGVzYz1O b3JtYWwgU2h1dGRvd24sIFRoYW5rIHlvdSBmb3IgcGxheWluZywgbGFuZz0KPT4gbGlic3No Ml90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDUxIGJ5dGVzKQowMDAwOiAwMSAwMCAwMCAwMCAw QiAwMCAwMCAwMCAgMjYgNEUgNkYgNzIgNkQgNjEgNkMgMjAgOiAuLi4uLi4uLiZOb3JtYWwg CjAwMTA6IDUzIDY4IDc1IDc0IDY0IDZGIDc3IDZFICAyQyAyMCA1NCA2OCA2MSA2RSA2QiAy MCA6IFNodXRkb3duLCBUaGFuayAKMDAyMDogNzkgNkYgNzUgMjAgNjYgNkYgNzIgMjAgIDcw IDZDIDYxIDc5IDY5IDZFIDY3IDAwIDogeW91IGZvciBwbGF5aW5nLgowMDMwOiAwMCAwMCAw MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4KPT4gbGli c3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4yICgwIGJ5dGVzKQpbbGlic3NoMl0gMC42OTQz NTMgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4Cj0+IGxpYnNzaDJfdHJh bnNwb3J0X3dyaXRlIHNlbmQoKSAoODQgYnl0ZXMpCjAwMDA6IDZFIERCIEZFIEI5IDY3IENC IDFBIENEICA1MiBBMyAwQiA5NyAxQSAwMCA4MSBERiA6IG4uLi5nLi4uUi4uLi4uLi4KMDAx MDogNTkgRkMgRUYgQkYgNjkgQzEgMzAgNEUgIDBBIDEyIDNCIDQwIEI4IDBDIDczIDg0IDog WS4uLmkuME4uLjtALi5zLgowMDIwOiBGMSBGQiBCNSBGRSA4QSBBNiBERCA4MyAgRDQgOTQg NDcgMjcgRjUgMjYgRjMgRjMgOiAuLi4uLi4uLi4uRycuJi4uCjAwMzA6IDVDIDIwIDRGIDMx IDQyIDEwIDA0IDE0ICBERSA5MiAxMiBCRCBGOCBBQyBFMiA2NiA6IFwgTzFCLi4uLi4uLi4u LmYKMDA0MDogRjEgNzAgMjUgQTQgQzUgRDAgNTMgNTQgIDQ3IDg5IDE5IDAwIEU4IDlDIDQ1 IDAwIDogLnAlLi4uU1RHLi4uLi5FLgowMDUwOiAxQSBEQSA2NCBGQiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAuLmQuCltsaWJzc2gyXSAwLjY5NDM3NCBUcmFu c3BvcnQ6IEZyZWVpbmcgc2Vzc2lvbiByZXNvdXJjZQpbbGlic3NoMl0gMC42OTQzODYgVHJh bnNwb3J0OiBFeHRyYSBwYWNrZXRzIGxlZnQgMAphbGwgZG9uZQo= ------=_NextPart_50769AF3_094D7588_7C17F916 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel ------=_NextPart_50769AF3_094D7588_7C17F916-- From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 12:17:06 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BAH1rE008954; Thu, 11 Oct 2012 12:17:05 +0200 Received: from smtpbg250.qq.com (SMTPBG250.QQ.COM [183.60.52.106]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BAGub0008882 for ; Thu, 11 Oct 2012 12:16:57 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail90t1349950610t1910281 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" Subject: Re: libssh2_scp_recv is not populating struct stat Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_50769C92_0848E950_490B7C06" Content-Transfer-Encoding: 8Bit Date: Thu, 11 Oct 2012 18:16:50 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 195273932 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. ------=_NextPart_50769C92_0848E950_490B7C06 Content-Type: multipart/alternative; boundary="----=_NextPart_50769C92_0848E950_2BDABE80"; ------=_NextPart_50769C92_0848E950_2BDABE80 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 aGksUGV0ZXI6DQogICAgIFBsZWFzZSBjaGVrIHRoZSBuZXcgc2NwX2xpYmdjcnlwdC5sb2cg ZmlsZS4NCg0KICAgDQogVGhhbmtzLg0KIC0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAt LS0tLS0tLS0tLS0tLS0tLS0NCiAgRnJvbTogICKjxaP2o+Wj8i9keSI8dW5peEB2aXAucXEu Y29tPjsNCiBEYXRlOiAgVGh1LCBPY3QgMTEsIDIwMTIgMDY6MDkgUE0NCiBUbzogICJsaWJz c2gyIGRldmVsb3BtZW50IjxsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1 YmplY3Q6ICBSZTogbGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qg c3RhdA0KDQogDQoNCiAgaGksUGV0ZXIsDQogICAgIFBsZWFzZSBjaGVjayB0aGUgYXR0YWNo bWVudHMuDQogIA0KIFRoYW5rcy4NCiAtLS0tLS0tLS0tLS0tLS0tLS0gT3JpZ2luYWwgLS0t LS0tLS0tLS0tLS0tLS0tDQogIEZyb206ICAiUGV0ZXIgU3R1Z2UiPHBldGVyQHN0dWdlLnNl PjsNCiBEYXRlOiAgVGh1LCBPY3QgMTEsIDIwMTIgMDQ6MjcgUE0NCiBUbzogICJsaWJzc2gy LWRldmVsIjxsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZT47IA0KIA0KIFN1YmplY3Q6ICBS ZTogbGlic3NoMl9zY3BfcmVjdiBpcyBub3QgcG9wdWxhdGluZyBzdHJ1Y3Qgc3RhdA0KDQog DQoNCqPFo/aj5aPyIHdyb3RlOg0KPiAgSSB1c2luZyBvcGVuc3NsLTAuOS44cCxJIGdvdCB0 aGUgZm9sbG93aW5nIHRleHQ6DQo+ICAgDQo+ICB+L2xpYnNzaDItMS40LjIvZXhhbXBsZSMg Li9zY3AgMTAuMTI5LjEzOS4xNDAgbXFxIG1xcTIwMDUgL3Vzci9sb2NhbC9hcHAvZXZlcnBh bi9oZWxsbw0KPiBbbGlic3NoMl0gMC43MzU2NTggU29ja2V0OiBTZW50IDIzLzIzIGJ5dGVz IGF0IDB4MmFhZjRiMzI2MzdkKzANCj4gW2xpYnNzaDJdIDAuNzM1NzYwIFNvY2tldDogRXJy b3IgcmVjdmluZyAxIGJ5dGVzOiAxMQ0KPiBbbGlic3NoMl0gMC43MzU3OTIgRmFpbHVyZSBF dmVudDogLTM3IC0gRmFpbGVkIGdldHRpbmcgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjU4 OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY2MzAg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NjU5IFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjY4NiBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY3MTEgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2NzM2IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNjc2MCBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzY3ODQgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM2OTY3IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNzAwMSBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzcwMjYgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM3MDg1IFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczNzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzcxNDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXINCj4gW2xpYnNzaDJdIDAuNzM3MzE0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyDQo+IFtsaWJzc2gyXSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cg0KPiBbbGlic3NoMl0gMC43Mzg3ODMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN Cj4gW2xpYnNzaDJdIDAuNzM4ODA3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+ IFtsaWJzc2gyXSAwLjczODgzMiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBb bGlic3NoMl0gMC43Mzg4NTYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xp YnNzaDJdIDAuNzM4ODgwIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJz c2gyXSAwLjczODkwNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3No Ml0gMC43Mzg5MjcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJd IDAuNzM4OTUxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAw LjczODk3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43 MzkwMDYgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5 MDMxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTA1 NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkwNzkg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTE1IFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTEzOSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkxNjQgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MTg4IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkyMzYgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MjYwIFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcg0KPiBbbGlic3NoMl0gMC43MzkzMjUgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5MzUwIFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAwLjczOTM3NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcg0KPiBbbGlic3NoMl0gMC43Mzk0MDEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXINCj4gW2xpYnNzaDJdIDAuNzM5NDI1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyDQo+IFtsaWJzc2gyXSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cg0KPiBbbGlic3NoMl0gMC43Mzk0NzUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN Cj4gW2xpYnNzaDJdIDAuNzM5NDk5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+ IFtsaWJzc2gyXSAwLjczOTUyMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBb bGlic3NoMl0gMC43Mzk1NDcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xp YnNzaDJdIDAuNzM5NTcxIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJz c2gyXSAwLjczOTU5NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KPiBbbGlic3No Ml0gMC43Mzk2MjAgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCj4gW2xpYnNzaDJd IDAuNzM5NjQ0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQo+IFtsaWJzc2gyXSAw LjczOTgzMyBTb2NrZXQ6IFNlbnQgNjQ4LzY0OCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGli c3NoMl0gMC43Mzk4NzQgU29ja2V0OiBSZWN2ZWQgNDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1 OTE4KzANCj4gW2xpYnNzaDJdIDAuNzQwMTkwIFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVz IGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gyXSAwLjc0MDIyNSBGYWlsdXJlIEV2ZW50OiAtMzcg LSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzDQo+IFtsaWJzc2gyXSAwLjgw NjU5NyBTb2NrZXQ6IFJlY3ZlZCAxMDQwLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4g W2xpYnNzaDJdIDAuODA4NTQxIFNvY2tldDogU2VudCAxNi8xNiBieXRlcyBhdCAweDUwOTk1 OA0KPiBbbGlic3NoMl0gMC44MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5hYmxlIHRv IGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5cw0KPiBbbGlic3NoMl0gMC44MDg3NDUgU29ja2V0 OiBSZWN2ZWQgMzIvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBbbGlic3NoMl0gMC44 MDg4NTQgU29ja2V0OiBTZW50IDUyLzUyIGJ5dGVzIGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gy XSAwLjgwOTA5OCBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4NCBieXRlcyB0byAweDUwNTkxOCsw DQo+IEZpbmdlcnByaW50OiA4RSBGRiA5RiBBRCA1OSBCQiAyOCAwRCBDRSBCRCA5NiAxQyA4 MCA1NiA3QiAzQSBERiA2NSBGRCBEMiANCj4gW2xpYnNzaDJdIDAuODA5NjM2IFNvY2tldDog U2VudCA4NC84NCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MDk2NjggRmFp bHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZw0KPiBbbGlic3NoMl0gMC44 MTA5MTkgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswDQo+ IFtsaWJzc2gyXSAwLjgxMTAxNSBTQ1A6IE9wZW5pbmcgY2hhbm5lbCBmb3IgU0NQIHJlY2Vp dmUNCj4gW2xpYnNzaDJdIDAuODExMDQ0IENvbm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJ RCMwDQo+IFtsaWJzc2gyXSAwLjgxMTA2OCBDb25uOiBPcGVuaW5nIENoYW5uZWwgLSB3aW4g MjYyMTQ0IHBhY2sgMzI3NjgNCj4gW2xpYnNzaDJdIDAuODExMTE2IFNvY2tldDogU2VudCA2 OC82OCBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTExNDcgRmFpbHVyZSBF dmVudDogLTM3IC0gV291bGQgYmxvY2sNCj4gW2xpYnNzaDJdIDAuODExMTc3IEZhaWx1cmUg RXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwNCj4gW2xpYnNz aDJdIDAuODExMzUyIFNvY2tldDogUmVjdmVkIDg4LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4 KzANCj4gW2xpYnNzaDJdIDAuODExNDA4IENvbm46IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQg LSBJRDogMC8wIHdpbjogMTAwMDAwLzI2MjE0NCBwYWNrOiAzMjc2OC8zMjc2OA0KPiBbbGli c3NoMl0gMC44MTE0NDAgQ29ubjogc3RhcnRpbmcgcmVxdWVzdChleGVjKSBvbiBjaGFubmVs IDAvMCwgbWVzc2FnZT1zY3AgLXBmICcvdXNyL2xvY2FsL2FwcC9ldmVycGFuL2hlbGxvJw0K PiBbbGlic3NoMl0gMC44MTE0ODkgU29ja2V0OiBTZW50IDE0OC8xNDggYnl0ZXMgYXQgMHg1 MDk5NTgNCj4gW2xpYnNzaDJdIDAuODExNTIxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxk IGJsb2NrIHJlcXVlc3RpbmcgU0NQIHN0YXJ0dXANCj4gW2xpYnNzaDJdIDAuODEyNDYxIFNv Y2tldDogUmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJd IDAuODEyNTE1IFNDUDogU2VuZGluZyBpbml0aWFsIHdha2V1cA0KPiBbbGlic3NoMl0gMC44 MTI1NDkgQ29ubjogV3JpdGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzAN Cj4gW2xpYnNzaDJdIDAuODEyNTc2IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVs IDAvMCwgc3RyZWFtX2lkPTANCj4gW2xpYnNzaDJdIDAuODEyNjE2IFNvY2tldDogU2VudCA1 Mi81MiBieXRlcyBhdCAweDUwOTk1OA0KPiBbbGlic3NoMl0gMC44MTI2NDQgQ29ubjogY2hh bm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMA0K PiBbbGlic3NoMl0gMC44MTI2NzEgRmFpbHVyZSBFdmVudDogLTM3IC0gd291bGQgYmxvY2sN Cj4gW2xpYnNzaDJdIDAuODEyNjk1IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2Nr IHdhaXRpbmcgZm9yIFNDUCByZXNwb25zZQ0KPiBbbGlic3NoMl0gMC44MzA4NDIgQ29ubjog Y2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAj MA0KPiBbbGlic3NoMl0gMC44MzA4OTEgU29ja2V0OiBSZWN2ZWQgMTIwLzE2Mzg0IGJ5dGVz IHRvIDB4NTA1OTE4KzANCj4gW2xpYnNzaDJdIDAuODMwOTM4IENvbm46IDMxIGJ5dGVzIHBh Y2tldF9hZGQoKSBmb3IgMC8wLzQ2OTMxMTA3NjQzMzkzDQo+IFtsaWJzc2gyXSAwLjgzMDk2 OCBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jaw0KPiBbbGlic3NoMl0gMC44MzA5 OTMgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJl c3BvbnNlDQo+IFtsaWJzc2gyXSAwLjg2NzM1NyBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50 cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwDQo+IFtsaWJzc2gyXSAwLjg2 NzQxMiBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMA0KPiBb bGlic3NoMl0gMC44Njc0NTggQ29ubjogOTIgYnl0ZXMgcGFja2V0X2FkZCgpIGZvciAwLzAv NDY5MzExMDc2NDMzOTMNCj4gW2xpYnNzaDJdIDAuODY3NDk5IENvbm46IENoYW5uZWwgMCBy ZWNlaXZlZCByZXF1ZXN0IHR5cGUgZXhpdC1zdGF0dXMgKHdyIDApDQo+IFtsaWJzc2gyXSAw Ljg2NzUyOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUgcmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8w DQo+IFtsaWJzc2gyXSAwLjg2NzU2MiBDb25uOiBDbG9zZSByZWNlaXZlZCBmb3IgY2hhbm5l bCAwLzANCj4gW2xpYnNzaDJdIDAuODY3NTkzIENvbm46IEZyZWVpbmcgY2hhbm5lbCAwLzAg cmVzb3VyY2VzDQo+IFtsaWJzc2gyXSAwLjg2NzYxOSBDb25uOiBTZW5kaW5nIEVPRiBvbiBj aGFubmVsIDAvMA0KPiBbbGlic3NoMl0gMC44Njc2NTcgU29ja2V0OiBTZW50IDM2LzM2IGJ5 dGVzIGF0IDB4NTA5OTU4DQo+IFtsaWJzc2gyXSAwLjg2NzY4NiBDb25uOiBDbG9zaW5nIGNo YW5uZWwgMC8wDQo+IFtsaWJzc2gyXSAwLjg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0 ZXMgYXQgMHg1MDk5NTgNCj4gW2xpYnNzaDJdIDAuODY3NzYxIFNvY2tldDogU2VudCA4NC84 NCBieXRlcyBhdCAweDUwOTk1OA0KPiBhbGwgZG9uZQ0KDQpUaGUgYWJvdmUgb3V0cHV0IGxv b2tzIGFsbCByaWdodC4NCg0KDQo+ICBJIGp1c3QgYWRkIG9uZSBjb2RlIGluIGV4YW1wbGUv c2NwLmMNCj4gIGxpYnNzaDJfdHJhY2Uoc2Vzc2lvbixMSUJTU0gyX1RSQUNFX0NPTk4gfCBM SUJTU0gyX1RSQUNFX1NPQ0tFVCB8IExJQlNTSDJfVFJBQ0VfU0NQIHwgTElCU1NIMl9UUkFD RV9FUlJPUiApOw0KDQpQbGVhc2UgY2hhbmdlIHRvOg0KDQpsaWJzc2gyX3RyYWNlKHNlc3Np b24sIH4wKTsNCg0KYW5kIHRoZW4gc2VuZCBjb21wbGV0ZSBvdXRwdXQgZm9yIHdoZW4gdGhl IGV4YW1wbGUgdXNlcyBsaWJnY3J5cHQuDQoNClRoYW5rcyENCg0KDQovL1BldGVyDQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KbGlic3NoMi1k ZXZlbCBodHRwOi8vY29vbC5oYXh4LnNlL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJz c2gyLWRldmVs ------=_NextPart_50769C92_0848E950_2BDABE80 Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PEZPTlQgc2l6ZT0rMD4NCjxESVY+DQo8RElWPmhpLFBldGVyOjwvRElWPg0KPERJVj4mbmJz cDsmbmJzcDsmbmJzcDsgUGxlYXNlIGNoZWsgdGhlIG5ldyA8U1BBTiBpZD1TVXBsb2FkZXIx MzQ5OTUwNTQ3NzA3MDY4MTQ1NDExMTMxMDcxODg+c2NwX2xpYmdjcnlwPFdCUj50LmxvZyBm aWxlLjwvU1BBTj48L0RJVj48L0RJVj48L0ZPTlQ+DQo8RElWPjxpbmNsdWRldGFpbD4NCjxE SVY+Jm5ic3A7PC9ESVY+DQo8RElWPlRoYW5rcy48L0RJVj4NCjxESVYgc3R5bGU9IlBBRERJ TkctQk9UVE9NOiAycHg7IFBBRERJTkctTEVGVDogMHB4OyBQQURESU5HLVJJR0hUOiAwcHg7 IEZPTlQtRkFNSUxZOiBBcmlhbCBOYXJyb3c7IEZPTlQtU0laRTogMTJweDsgUEFERElORy1U T1A6IDJweCI+LS0tLS0tLS0tLS0tLS0tLS0tJm5ic3A7T3JpZ2luYWwmbmJzcDstLS0tLS0t LS0tLS0tLS0tLS08L0RJVj4NCjxESVYgc3R5bGU9IlBBRERJTkctQk9UVE9NOiA4cHg7IFBB RERJTkctTEVGVDogOHB4OyBQQURESU5HLVJJR0hUOiA4cHg7IEJBQ0tHUk9VTkQ6ICNlZmVm ZWY7IEZPTlQtU0laRTogMTJweDsgUEFERElORy1UT1A6IDhweCI+DQo8RElWPjxCPkZyb206 IDwvQj4mbmJzcDsio8Wj9qPlo/IvZHkiJmx0O3VuaXhAdmlwLnFxLmNvbSZndDs7PC9ESVY+ DQo8RElWPjxCPkRhdGU6IDwvQj4mbmJzcDtUaHUsIE9jdCAxMSwgMjAxMiAwNjowOSBQTTwv RElWPg0KPERJVj48Qj5UbzogPC9CPiZuYnNwOyJsaWJzc2gyIGRldmVsb3BtZW50IiZsdDts aWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZSZndDs7IDxXQlI+PC9ESVY+DQo8RElWPjwvRElW Pg0KPERJVj48Qj5TdWJqZWN0OiA8L0I+Jm5ic3A7UmU6IGxpYnNzaDJfc2NwX3JlY3YgaXMg bm90IHBvcHVsYXRpbmcgc3RydWN0IHN0YXQ8L0RJVj48L0RJVj4NCjxESVY+PEJSPjwvRElW Pg0KPERJVj4NCjxESVY+aGksUGV0ZXIsPC9ESVY+DQo8RElWPiZuYnNwOyAmbmJzcDsgUGxl YXNlIGNoZWNrIHRoZSBhdHRhY2htZW50cy48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8 RElWPlRoYW5rcy48L0RJVj4NCjxESVY+LS0tLS0tLS0tLS0tLS0tLS0tIE9yaWdpbmFsIC0t LS0tLS0tLS0tLS0tLS0tLTwvRElWPg0KPERJViBzdHlsZT0iUEFERElORy1CT1RUT006IDhw eDsgUEFERElORy1MRUZUOiA4cHg7IFBBRERJTkctUklHSFQ6IDhweDsgQkFDS0dST1VORDog I2VmZWZlZjsgRk9OVC1TSVpFOiAxMnB4OyBQQURESU5HLVRPUDogOHB4Ij4NCjxESVY+PEI+ RnJvbTogPC9CPiZuYnNwOyJQZXRlciBTdHVnZSImbHQ7cGV0ZXJAc3R1Z2Uuc2UmZ3Q7Ozwv RElWPg0KPERJVj48Qj5EYXRlOiA8L0I+Jm5ic3A7VGh1LCBPY3QgMTEsIDIwMTIgMDQ6Mjcg UE08L0RJVj4NCjxESVY+PEI+VG86IDwvQj4mbmJzcDsibGlic3NoMi1kZXZlbCImbHQ7bGli c3NoMi1kZXZlbEBjb29sLmhheHguc2UmZ3Q7OyA8V0JSPjwvRElWPg0KPERJVj48L0RJVj4N CjxESVY+PEI+U3ViamVjdDogPC9CPiZuYnNwO1JlOiBsaWJzc2gyX3NjcF9yZWN2IGlzIG5v dCBwb3B1bGF0aW5nIHN0cnVjdCBzdGF0PC9ESVY+PC9ESVY+DQo8RElWPjxCUj48L0RJVj6j xaP2o+Wj8iB3cm90ZTo8QlI+Jmd0OyZuYnNwOyBJIHVzaW5nIG9wZW5zc2wtMC45LjhwLEkg Z290IHRoZSBmb2xsb3dpbmcgdGV4dDo8QlI+Jmd0OyAmbmJzcDsgPEJSPiZndDsmbmJzcDsg fi9saWJzc2gyLTEuNC4yL2V4YW1wbGUjIC4vc2NwIDEwLjEyOS4xMzkuMTQwIG1xcSBtcXEy MDA1IC91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG88QlI+Jmd0OyBbbGlic3NoMl0gMC43 MzU2NTggU29ja2V0OiBTZW50IDIzLzIzIGJ5dGVzIGF0IDB4MmFhZjRiMzI2MzdkKzA8QlI+ Jmd0OyBbbGlic3NoMl0gMC43MzU3NjAgU29ja2V0OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6 IDExPEJSPiZndDsgW2xpYnNzaDJdIDAuNzM1NzkyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIEZh aWxlZCBnZXR0aW5nIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjU4OSBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjYzMCBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY1OSBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNjY4 NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz NjcxMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjczNjczNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjczNjc2MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjczNjc4NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts aWJzc2gyXSAwLjczNjk2NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjczNzAwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjczNzAyNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzA4NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzExNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzE0MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczNzMxNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODc1NyBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODc4MyBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODgwNyBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODgzMiBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg1NiBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODg4MCBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczODkw NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz ODkyNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjczODk1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjczODk3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjczOTAwNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts aWJzc2gyXSAwLjczOTAzMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjczOTA1NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjczOTA3OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTExNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTEzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTE2NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTE4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTIxMiBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTIzNiBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTI2MCBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTI5OCBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTMyNSBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM1MCBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTM3 NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjcz OTQwMSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjczOTQyNSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gy XSAwLjczOTQ1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjczOTQ3NSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7IFts aWJzc2gyXSAwLjczOTQ5OSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjczOTUyMyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjczOTU0NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcjxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU3MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTU5NiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTYyMCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTY0NCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTgzMyBTb2NrZXQ6IFNlbnQgNjQ4 LzY0OCBieXRlcyBhdCAweDUwOTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjczOTg3NCBTb2Nr ZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjc0MDE5MCBTb2NrZXQ6IFNlbnQgMTQ0LzE0NCBieXRlcyBhdCAweDUwOTk1ODxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjc0MDIyNSBGYWlsdXJlIEV2ZW50OiAtMzcgLSBVbmFibGUg dG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzPEJSPiZndDsgW2xpYnNzaDJdIDAuODA2NTk3 IFNvY2tldDogUmVjdmVkIDEwNDAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7 IFtsaWJzc2gyXSAwLjgwODU0MSBTb2NrZXQ6IFNlbnQgMTYvMTYgYnl0ZXMgYXQgMHg1MDk5 NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MDg1ODAgRmFpbHVyZSBFdmVudDogLTM3IC0gVW5h YmxlIHRvIGV4Y2hhbmdlIGVuY3J5cHRpb24ga2V5czxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgw ODc0NSBTb2NrZXQ6IFJlY3ZlZCAzMi8xNjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZn dDsgW2xpYnNzaDJdIDAuODA4ODU0IFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUw OTk1ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgwOTA5OCBTb2NrZXQ6IFJlY3ZlZCA4OC8xNjM4 NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZndDsgRmluZ2VycHJpbnQ6IDhFIEZGIDlGIEFE IDU5IEJCIDI4IDBEIENFIEJEIDk2IDFDIDgwIDU2IDdCIDNBIERGIDY1IEZEIEQyIDxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjgwOTYzNiBTb2NrZXQ6IFNlbnQgODQvODQgYnl0ZXMgYXQgMHg1 MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MDk2NjggRmFpbHVyZSBFdmVudDogLTM3IC0g V291bGQgYmxvY2sgd2FpdGluZzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMDkxOSBTb2NrZXQ6 IFJlY3ZlZCAxMDk2LzE2Mzg0IGJ5dGVzIHRvIDB4NTA1OTE4KzA8QlI+Jmd0OyBbbGlic3No Ml0gMC44MTEwMTUgU0NQOiBPcGVuaW5nIGNoYW5uZWwgZm9yIFNDUCByZWNlaXZlPEJSPiZn dDsgW2xpYnNzaDJdIDAuODExMDQ0IENvbm46IEFsbG9jYXRlZCBuZXcgY2hhbm5lbCBJRCMw PEJSPiZndDsgW2xpYnNzaDJdIDAuODExMDY4IENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdp biAyNjIxNDQgcGFjayAzMjc2ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMTExNiBTb2NrZXQ6 IFNlbnQgNjgvNjggYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTEx NDcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2s8QlI+Jmd0OyBbbGlic3NoMl0g MC44MTExNzcgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgc3RhcnRpbmcgdXAg Y2hhbm5lbDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMTM1MiBTb2NrZXQ6IFJlY3ZlZCA4OC8x NjM4NCBieXRlcyB0byAweDUwNTkxOCswPEJSPiZndDsgW2xpYnNzaDJdIDAuODExNDA4IENv bm46IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQgLSBJRDogMC8wIHdpbjogMTAwMDAwLzI2MjE0 NCBwYWNrOiAzMjc2OC8zMjc2ODxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMTQ0MCBDb25uOiBz dGFydGluZyByZXF1ZXN0KGV4ZWMpIG9uIGNoYW5uZWwgMC8wLCBtZXNzYWdlPXNjcCAtcGYg Jy91c3IvbG9jYWwvYXBwL2V2ZXJwYW4vaGVsbG8nPEJSPiZndDsgW2xpYnNzaDJdIDAuODEx NDg5IFNvY2tldDogU2VudCAxNDgvMTQ4IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPiZndDsgW2xp YnNzaDJdIDAuODExNTIxIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVl c3RpbmcgU0NQIHN0YXJ0dXA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI0NjEgU29ja2V0OiBS ZWN2ZWQgNzIvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjgxMjUxNSBTQ1A6IFNlbmRpbmcgaW5pdGlhbCB3YWtldXA8QlI+Jmd0OyBbbGlic3NoMl0g MC44MTI1NDkgQ29ubjogV3JpdGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0g IzA8QlI+Jmd0OyBbbGlic3NoMl0gMC44MTI1NzYgQ29ubjogU2VuZGluZyAxIGJ5dGVzIG9u IGNoYW5uZWwgMC8wLCBzdHJlYW1faWQ9MDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjYxNiBT b2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0g MC44MTI2NDQgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMgMSBieXRlcyBmcm9tIGNoYW5u ZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjY3MSBGYWlsdXJlIEV2 ZW50OiAtMzcgLSB3b3VsZCBibG9jazxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgxMjY5NSBGYWls dXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVzcG9uc2U8 QlI+Jmd0OyBbbGlic3NoMl0gMC44MzA4NDIgQ29ubjogY2hhbm5lbF9yZWFkKCkgd2FudHMg MSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw LjgzMDg5MSBTb2NrZXQ6IFJlY3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5MTgrMDxC Uj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDkzOCBDb25uOiAzMSBieXRlcyBwYWNrZXRfYWRkKCkg Zm9yIDAvMC80NjkzMTEwNzY0MzM5MzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk2OCBGYWls dXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jazxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjgzMDk5 MyBGYWlsdXJlIEV2ZW50OiAtMzcgLSBXb3VsZCBibG9jayB3YWl0aW5nIGZvciBTQ1AgcmVz cG9uc2U8QlI+Jmd0OyBbbGlic3NoMl0gMC44NjczNTcgQ29ubjogY2hhbm5lbF9yZWFkKCkg d2FudHMgMSBieXRlcyBmcm9tIGNoYW5uZWwgMC8wIHN0cmVhbSAjMDxCUj4mZ3Q7IFtsaWJz c2gyXSAwLjg2NzQxMiBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDU5 MTgrMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQ1OCBDb25uOiA5MiBieXRlcyBwYWNrZXRf YWRkKCkgZm9yIDAvMC80NjkzMTEwNzY0MzM5MzxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzQ5 OSBDb25uOiBDaGFubmVsIDAgcmVjZWl2ZWQgcmVxdWVzdCB0eXBlIGV4aXQtc3RhdHVzICh3 ciAwKTxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzUyOCBDb25uOiBFeGl0IHN0YXR1cyAyNTUg cmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wPEJSPiZndDsgW2xpYnNzaDJdIDAuODY3NTYyIENv bm46IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAw Ljg2NzU5MyBDb25uOiBGcmVlaW5nIGNoYW5uZWwgMC8wIHJlc291cmNlczxCUj4mZ3Q7IFts aWJzc2gyXSAwLjg2NzYxOSBDb25uOiBTZW5kaW5nIEVPRiBvbiBjaGFubmVsIDAvMDxCUj4m Z3Q7IFtsaWJzc2gyXSAwLjg2NzY1NyBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0ZXMgYXQgMHg1 MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44Njc2ODYgQ29ubjogQ2xvc2luZyBjaGFubmVs IDAvMDxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjg2NzcxOSBTb2NrZXQ6IFNlbnQgMzYvMzYgYnl0 ZXMgYXQgMHg1MDk5NTg8QlI+Jmd0OyBbbGlic3NoMl0gMC44Njc3NjEgU29ja2V0OiBTZW50 IDg0Lzg0IGJ5dGVzIGF0IDB4NTA5OTU4PEJSPiZndDsgYWxsIGRvbmU8QlI+PEJSPlRoZSBh Ym92ZSBvdXRwdXQgbG9va3MgYWxsIHJpZ2h0LjxCUj48QlI+PEJSPiZndDsmbmJzcDsgSSBq dXN0IGFkZCBvbmUgY29kZSBpbiBleGFtcGxlL3NjcC5jPEJSPiZndDsmbmJzcDsgbGlic3No Ml90cmFjZShzZXNzaW9uLExJQlNTSDJfVFJBQ0VfQ09OTiB8IExJQlNTSDJfVFJBQ0VfU09D S0VUIHwgTElCU1NIMl9UUkFDRV9TQ1AgfCBMSUJTU0gyX1RSQUNFX0VSUk9SICk7PEJSPjxC Uj5QbGVhc2UgY2hhbmdlIHRvOjxCUj48QlI+bGlic3NoMl90cmFjZShzZXNzaW9uLCB+MCk7 PEJSPjxCUj5hbmQgdGhlbiBzZW5kIGNvbXBsZXRlIG91dHB1dCBmb3Igd2hlbiB0aGUgZXhh bXBsZSB1c2VzIGxpYmdjcnlwdC48QlI+PEJSPlRoYW5rcyE8QlI+PEJSPjxCUj4vL1BldGVy PEJSPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPEJS PmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nvb2wuaGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlz dGluZm8vbGlic3NoMi1kZXZlbDxCUj4NCjxESVY+PC9ESVY+PC9ESVY+DQo8RElWPjwvRElW PjwvaW5jbHVkZXRhaWw+PC9ESVY+ ------=_NextPart_50769C92_0848E950_2BDABE80-- ------=_NextPart_50769C92_0848E950_490B7C06 Content-Type: application/octet-stream; charset="gb18030"; name="scp_libgcrypt.log" Content-Disposition: attachment; filename="scp_libgcrypt.log" Content-Transfer-Encoding: base64 W2xpYnNzaDJdIDAuNDk4NDAzIFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2Nr ZXQgNQpbbGlic3NoMl0gMC40OTg0NTMgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NI LTIuMC1saWJzc2gyXzEuNC4yCltsaWJzc2gyXSAwLjQ5ODQ2NSBTb2NrZXQ6IFNlbnQgMjMv MjMgYnl0ZXMgYXQgMHgyYjE2YzI5MjZlNWQrMApbbGlic3NoMl0gMC40OTg0NzMgU29ja2V0 OiBFcnJvciByZWN2aW5nIDEgYnl0ZXM6IDExCltsaWJzc2gyXSAwLjQ5ODQ3NiBGYWlsdXJl IEV2ZW50OiAtMzcgLSBGYWlsZWQgZ2V0dGluZyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5MzE5 IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTMyNiBTb2Nr ZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzMzAgU29ja2V0OiBS ZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5MzM0IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTMzOSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5 dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzNDMgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBi YW5uZXIKW2xpYnNzaDJdIDAuNDk5MzQ3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy CltsaWJzc2gyXSAwLjQ5OTM1MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGli c3NoMl0gMC40OTkzNTUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJd IDAuNDk5MzU5IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5 OTM2MyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzNjcg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5MzcxIFNvY2tl dDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTM3NSBTb2NrZXQ6IFJl Y3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTkzODIgU29ja2V0OiBSZWN2ZWQg MSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5Mzg1IFNvY2tldDogUmVjdmVkIDEgYnl0 ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTM4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJh bm5lcgpbbGlic3NoMl0gMC40OTkzOTEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIK W2xpYnNzaDJdIDAuNDk5Mzk0IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJz c2gyXSAwLjQ5OTM5NyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0g MC40OTk0MDIgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5 NDA1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQwOCBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0MTEgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDE0IFNvY2tldDogUmVj dmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQxNyBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0MjAgU29ja2V0OiBSZWN2ZWQgMSBieXRl cyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDIzIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFu bmVyCltsaWJzc2gyXSAwLjQ5OTQyNiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpb bGlic3NoMl0gMC40OTk0MjkgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNz aDJdIDAuNDk5NDMyIFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAw LjQ5OTQzNCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0 MzcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDQwIFNv Y2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ0MyBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0NDYgU29ja2V0OiBSZWN2 ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDQ5IFNvY2tldDogUmVjdmVkIDEg Ynl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ1MiBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcgpbbGlic3NoMl0gMC40OTk0NTUgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5u ZXIKW2xpYnNzaDJdIDAuNDk5NDU4IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyClts aWJzc2gyXSAwLjQ5OTQ2MSBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3No Ml0gMC40OTk0NjQgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAu NDk5NDY3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ3 MCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0NzMgU29j a2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDc2IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ3OSBTb2NrZXQ6IFJlY3Zl ZCAxIGJ5dGVzIGJhbm5lcgpbbGlic3NoMl0gMC40OTk0ODIgU29ja2V0OiBSZWN2ZWQgMSBi eXRlcyBiYW5uZXIKW2xpYnNzaDJdIDAuNDk5NDg1IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg YmFubmVyCltsaWJzc2gyXSAwLjQ5OTQ4OCBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cgpbbGlic3NoMl0gMC40OTk0OTEgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIKW2xp YnNzaDJdIDAuNDk5NDk1IFRyYW5zcG9ydDogUmVjZWl2ZWQgQmFubmVyOiBTU0gtMi4wLTMu Mi45LjEgU1NIIFNlY3VyZSBTaGVsbCAobm9uLWNvbW1lcmNpYWwpCltsaWJzc2gyXSAwLjUw MDIzMiBLZXkgRXg6IFNlbnQgS0VYOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsZGlm ZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSxkaWZmaWUtaGVsbG1hbi1ncm91cDEt c2hhMQpbbGlic3NoMl0gMC41MDAyMzkgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Es c3NoLWRzcwpbbGlic3NoMl0gMC41MDAyNDEgS2V5IEV4OiBTZW50IENSWVBUX0NTOiBhZXMx MjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0Bs eXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFlczEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2Zv dXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywzZGVzLWNiYwpbbGlic3NoMl0gMC41MDAyNDQg S2V5IEV4OiBTZW50IENSWVBUX1NDOiBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0 cixhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSxhZXMxOTItY2JjLGFl czEyOC1jYmMsYmxvd2Zpc2gtY2JjLGFyY2ZvdXIxMjgsYXJjZm91cixjYXN0MTI4LWNiYywz ZGVzLWNiYwpbbGlic3NoMl0gMC41MDAyNDcgS2V5IEV4OiBTZW50IE1BQ19DUzogaG1hYy1z aGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05NixobWFjLXJpcGVtZDE2MCxo bWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0gMC41MDAyNDkgS2V5IEV4OiBT ZW50IE1BQ19TQzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1kNS05 NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQpbbGlic3NoMl0g MC41MDAyNTEgS2V5IEV4OiBTZW50IENPTVBfQ1M6IG5vbmUKW2xpYnNzaDJdIDAuNTAwMjU0 IEtleSBFeDogU2VudCBDT01QX1NDOiBub25lCltsaWJzc2gyXSAwLjUwMDI1NiBLZXkgRXg6 IFNlbnQgTEFOR19DUzogCltsaWJzc2gyXSAwLjUwMDI1OSBLZXkgRXg6IFNlbnQgTEFOR19T QzogCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMpCjAwMDA6 IDE0IDUzIDkxIDBCIDQ2IDY5IENCIDQzICBEMiBGMiAyOSA5RCBCMCBBMCAwNiA4RiA6IC5T Li5GaS5DLi4pLi4uLi4KMDAxMDogMTUgMDAgMDAgMDAgNTkgNjQgNjkgNjYgIDY2IDY5IDY1 IDJEIDY4IDY1IDZDIDZDIDogLi4uLllkaWZmaWUtaGVsbAowMDIwOiA2RCA2MSA2RSAyRCA2 NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGEx CjAwMzA6IDJDIDY0IDY5IDY2IDY2IDY5IDY1IDJEICA2OCA2NSA2QyA2QyA2RCA2MSA2RSAy RCA6ICxkaWZmaWUtaGVsbG1hbi0KMDA0MDogNjcgNzIgNkYgNzUgNzAgMkQgNjUgNzggIDYz IDY4IDYxIDZFIDY3IDY1IDJEIDczIDogZ3JvdXAtZXhjaGFuZ2UtcwowMDUwOiA2OCA2MSAz MSAyQyA2NCA2OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmll LWhlbGxtCjAwNjA6IDYxIDZFIDJEIDY3IDcyIDZGIDc1IDcwICAzMSAyRCA3MyA2OCA2MSAz MSAwMCAwMCA6IGFuLWdyb3VwMS1zaGExLi4KMDA3MDogMDAgMEYgNzMgNzMgNjggMkQgNzIg NzMgIDYxIDJDIDczIDczIDY4IDJEIDY0IDczIDogLi5zc2gtcnNhLHNzaC1kcwowMDgwOiA3 MyAwMCAwMCAwMCA5MiA2MSA2NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4u LmFlczEyOC1jdHIsCjAwOTA6IDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzICA3NCA3MiAyQyA2 MSA2NSA3MyAzMiAzNSA6IGFlczE5Mi1jdHIsYWVzMjUKMDBhMDogMzYgMkQgNjMgNzQgNzIg MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogNi1jdHIsYWVzMjU2LWNiYwow MGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkg OiAscmlqbmRhZWwtY2JjQGx5CjAwYzA6IDczIDYxIDc0IDZGIDcyIDJFIDZDIDY5ICA3NSAy RSA3MyA2NSAyQyA2MSA2NSA3MyA6IHNhdG9yLmxpdS5zZSxhZXMKMDBkMDogMzEgMzkgMzIg MkQgNjMgNjIgNjMgMkMgIDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzIDogMTkyLWNiYyxhZXMx MjgtYwowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAgNjkgNzMgNjggMkQgNjMgNjIg NjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsCjAwZjA6IDYxIDcyIDYzIDY2IDZGIDc1IDcyIDMx ICAzMiAzOCAyQyA2MSA3MiA2MyA2NiA2RiA6IGFyY2ZvdXIxMjgsYXJjZm8KMDEwMDogNzUg NzIgMkMgNjMgNjEgNzMgNzQgMzEgIDMyIDM4IDJEIDYzIDYyIDYzIDJDIDMzIDogdXIsY2Fz dDEyOC1jYmMsMwowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAgMDAgOTIgNjEg NjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyCjAxMjA6IDM4IDJEIDYzIDc0IDcyIDJD IDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA3NCA3MiA6IDgtY3RyLGFlczE5Mi1jdHIKMDEz MDogMkMgNjEgNjUgNzMgMzIgMzUgMzYgMkQgIDYzIDc0IDcyIDJDIDYxIDY1IDczIDMyIDog LGFlczI1Ni1jdHIsYWVzMgowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtCjAxNTA6IDYzIDYyIDYzIDQw IDZDIDc5IDczIDYxICA3NCA2RiA3MiAyRSA2QyA2OSA3NSAyRSA6IGNiY0BseXNhdG9yLmxp dS4KMDE2MDogNzMgNjUgMkMgNjEgNjUgNzMgMzEgMzkgIDMyIDJEIDYzIDYyIDYzIDJDIDYx IDY1IDogc2UsYWVzMTkyLWNiYyxhZQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAg MkMgNjIgNkMgNkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzCjAxODA6IDY4IDJE IDYzIDYyIDYzIDJDIDYxIDcyICA2MyA2NiA2RiA3NSA3MiAzMSAzMiAzOCA6IGgtY2JjLGFy Y2ZvdXIxMjgKMDE5MDogMkMgNjEgNzIgNjMgNjYgNkYgNzUgNzIgIDJDIDYzIDYxIDczIDc0 IDMxIDMyIDM4IDogLGFyY2ZvdXIsY2FzdDEyOAowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2 NCA2NSAgNzMgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uCjAxYjA6 IDU1IDY4IDZEIDYxIDYzIDJEIDczIDY4ICA2MSAzMSAyQyA2OCA2RCA2MSA2MyAyRCA6IFVo bWFjLXNoYTEsaG1hYy0KMDFjMDogNzMgNjggNjEgMzEgMkQgMzkgMzYgMkMgIDY4IDZEIDYx IDYzIDJEIDZEIDY0IDM1IDogc2hhMS05NixobWFjLW1kNQowMWQwOiAyQyA2OCA2RCA2MSA2 MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMgNjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1h CjAxZTA6IDYzIDJEIDcyIDY5IDcwIDY1IDZEIDY0ICAzMSAzNiAzMCAyQyA2OCA2RCA2MSA2 MyA6IGMtcmlwZW1kMTYwLGhtYWMKMDFmMDogMkQgNzIgNjkgNzAgNjUgNkQgNjQgMzEgIDM2 IDMwIDQwIDZGIDcwIDY1IDZFIDczIDogLXJpcGVtZDE2MEBvcGVucwowMjAwOiA3MyA2OCAy RSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMgMkQgNzMgOiBzaC5jb20uLi5V aG1hYy1zCjAyMTA6IDY4IDYxIDMxIDJDIDY4IDZEIDYxIDYzICAyRCA3MyA2OCA2MSAzMSAy RCAzOSAzNiA6IGhhMSxobWFjLXNoYTEtOTYKMDIyMDogMkMgNjggNkQgNjEgNjMgMkQgNkQg NjQgIDM1IDJDIDY4IDZEIDYxIDYzIDJEIDZEIDogLGhtYWMtbWQ1LGhtYWMtbQowMjMwOiA2 NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUgNkQgOiBkNS05 NixobWFjLXJpcGVtCjAyNDA6IDY0IDMxIDM2IDMwIDJDIDY4IDZEIDYxICA2MyAyRCA3MiA2 OSA3MCA2NSA2RCA2NCA6IGQxNjAsaG1hYy1yaXBlbWQKMDI1MDogMzEgMzYgMzAgNDAgNkYg NzAgNjUgNkUgIDczIDczIDY4IDJFIDYzIDZGIDZEIDAwIDogMTYwQG9wZW5zc2guY29tLgow MjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg OiAuLi5ub25lLi4uLm5vbmUuCjAyNzA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAw MCAwMCAwMCAgICAgICAgICAgICA6IC4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41MDA0MDgg U29ja2V0OiBTZW50IDY0OC82NDggYnl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90cmFu c3BvcnRfd3JpdGUgc2VuZCgpICg2NDggYnl0ZXMpCjAwMDA6IDAwIDAwIDAyIDg0IDA3IDE0 IDUzIDkxICAwQiA0NiA2OSBDQiA0MyBEMiBGMiAyOSA6IC4uLi4uLlMuLkZpLkMuLikKMDAx MDogOUQgQjAgQTAgMDYgOEYgMTUgMDAgMDAgIDAwIDU5IDY0IDY5IDY2IDY2IDY5IDY1IDog Li4uLi4uLi4uWWRpZmZpZQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcg NzIgNkYgNzUgNzAgMzEgMzQgOiAtaGVsbG1hbi1ncm91cDE0CjAwMzA6IDJEIDczIDY4IDYx IDMxIDJDIDY0IDY5ICA2NiA2NiA2OSA2NSAyRCA2OCA2NSA2QyA6IC1zaGExLGRpZmZpZS1o ZWwKMDA0MDogNkMgNkQgNjEgNkUgMkQgNjcgNzIgNkYgIDc1IDcwIDJEIDY1IDc4IDYzIDY4 IDYxIDogbG1hbi1ncm91cC1leGNoYQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAg MkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQgOiBuZ2Utc2hhMSxkaWZmaWUtCjAwNjA6IDY4IDY1 IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3MCAzMSAyRCA3MyA6IGhlbGxtYW4t Z3JvdXAxLXMKMDA3MDogNjggNjEgMzEgMDAgMDAgMDAgMEYgNzMgIDczIDY4IDJEIDcyIDcz IDYxIDJDIDczIDogaGExLi4uLnNzaC1yc2EscwowMDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAw MCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBzaC1kc3MuLi4uYWVzMTI4CjAwOTA6 IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAzMiAyRCA2MyA3NCA3MiAyQyA6IC1j dHIsYWVzMTkyLWN0ciwKMDBhMDogNjEgNjUgNzMgMzIgMzUgMzYgMkQgNjMgIDc0IDcyIDJD IDYxIDY1IDczIDMyIDM1IDogYWVzMjU2LWN0cixhZXMyNQowMGIwOiAzNiAyRCA2MyA2MiA2 MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNiYyxyaWpuZGFlbC1j CjAwYzA6IDYyIDYzIDQwIDZDIDc5IDczIDYxIDc0ICA2RiA3MiAyRSA2QyA2OSA3NSAyRSA3 MyA6IGJjQGx5c2F0b3IubGl1LnMKMDBkMDogNjUgMkMgNjEgNjUgNzMgMzEgMzkgMzIgIDJE IDYzIDYyIDYzIDJDIDYxIDY1IDczIDogZSxhZXMxOTItY2JjLGFlcwowMGUwOiAzMSAzMiAz OCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2JjLGJs b3dmaXNoCjAwZjA6IDJEIDYzIDYyIDYzIDJDIDYxIDcyIDYzICA2NiA2RiA3NSA3MiAzMSAz MiAzOCAyQyA6IC1jYmMsYXJjZm91cjEyOCwKMDEwMDogNjEgNzIgNjMgNjYgNkYgNzUgNzIg MkMgIDYzIDYxIDczIDc0IDMxIDMyIDM4IDJEIDogYXJjZm91cixjYXN0MTI4LQowMTEwOiA2 MyA2MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMs M2Rlcy1jYmMuLi4uCjAxMjA6IDYxIDY1IDczIDMxIDMyIDM4IDJEIDYzICA3NCA3MiAyQyA2 MSA2NSA3MyAzMSAzOSA6IGFlczEyOC1jdHIsYWVzMTkKMDEzMDogMzIgMkQgNjMgNzQgNzIg MkMgNjEgNjUgIDczIDMyIDM1IDM2IDJEIDYzIDc0IDcyIDogMi1jdHIsYWVzMjU2LWN0cgow MTQwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUg OiAsYWVzMjU2LWNiYyxyaWpuCjAxNTA6IDY0IDYxIDY1IDZDIDJEIDYzIDYyIDYzICA0MCA2 QyA3OSA3MyA2MSA3NCA2RiA3MiA6IGRhZWwtY2JjQGx5c2F0b3IKMDE2MDogMkUgNkMgNjkg NzUgMkUgNzMgNjUgMkMgIDYxIDY1IDczIDMxIDM5IDMyIDJEIDYzIDogLmxpdS5zZSxhZXMx OTItYwowMTcwOiA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMg NjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJsCjAxODA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz ICA2MiA2MyAyQyA2MSA3MiA2MyA2NiA2RiA6IG93ZmlzaC1jYmMsYXJjZm8KMDE5MDogNzUg NzIgMzEgMzIgMzggMkMgNjEgNzIgIDYzIDY2IDZGIDc1IDcyIDJDIDYzIDYxIDogdXIxMjgs YXJjZm91cixjYQowMWEwOiA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQg NjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jCjAxYjA6IDYyIDYzIDAwIDAwIDAwIDU1 IDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyQyA6IGJjLi4uVWhtYWMtc2hhMSwKMDFj MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJEIDM5IDM2IDJDIDY4IDZEIDYxIDog aG1hYy1zaGExLTk2LGhtYQowMWQwOiA2MyAyRCA2RCA2NCAzNSAyQyA2OCA2RCAgNjEgNjMg MkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05CjAxZTA6IDM2IDJDIDY4IDZE IDYxIDYzIDJEIDcyICA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCA6IDYsaG1hYy1yaXBlbWQx NjAKMDFmMDogMkMgNjggNkQgNjEgNjMgMkQgNzIgNjkgIDcwIDY1IDZEIDY0IDMxIDM2IDMw IDQwIDogLGhtYWMtcmlwZW1kMTYwQAowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2OCAyRSAg NjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoCjAyMTA6IDZEIDYx IDYzIDJEIDczIDY4IDYxIDMxICAyQyA2OCA2RCA2MSA2MyAyRCA3MyA2OCA6IG1hYy1zaGEx LGhtYWMtc2gKMDIyMDogNjEgMzEgMkQgMzkgMzYgMkMgNjggNkQgIDYxIDYzIDJEIDZEIDY0 IDM1IDJDIDY4IDogYTEtOTYsaG1hYy1tZDUsaAowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAz NSAyRCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtCjAyNDA6 IDcyIDY5IDcwIDY1IDZEIDY0IDMxIDM2ICAzMCAyQyA2OCA2RCA2MSA2MyAyRCA3MiA6IHJp cGVtZDE2MCxobWFjLXIKMDI1MDogNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgIDQwIDZGIDcw IDY1IDZFIDczIDczIDY4IDogaXBlbWQxNjBAb3BlbnNzaAowMjYwOiAyRSA2MyA2RiA2RCAw MCAwMCAwMCAwNCAgNkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4u CjAyNzA6IDZFIDZGIDZFIDY1IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCA6IG5vbmUuLi4uLi4uLi4uLi4KMDI4MDogMDAgNzkgMDggOTkgNUUgNDAgMEQgNjggICAg ICAgICAgICAgICAgICAgICAgICAgIDogLnkuLl5ALmgKW2xpYnNzaDJdIDAuNTAwNTEzIFRy YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwCltsaWJzc2gyXSAwLjUw MDUxOSBTb2NrZXQ6IFJlY3ZlZCA0ODgvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBs aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg0ODggYnl0ZXMpCjAwMDA6IDAwIDAwIDAw IDBDIDA2IDAyIDAwIDAwICAwMCAwMCBBRCBDOSA1NiA3OCBDRSAzQyA6IC4uLi4uLi4uLi4u LlZ4LjwKMDAxMDogMDAgMDAgMDEgRDQgMDYgMTQgRTUgMEMgIDdFIEQ5IDE4IDRBIDIxIDAw IDU1IDY0IDogLi4uLi4uLi5+Li5KIS5VZAowMDIwOiA3OSAwNyAyRiA5QiAyMiBGOCAwMCAw MCAgMDAgMUEgNjQgNjkgNjYgNjYgNjkgNjUgOiB5Li8uIi4uLi4uZGlmZmllCjAwMzA6IDJE IDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAzMSAyRCA6IC1oZWxs bWFuLWdyb3VwMS0KMDA0MDogNzMgNjggNjEgMzEgMDAgMDAgMDAgMDcgIDczIDczIDY4IDJE IDY0IDczIDczIDAwIDogc2hhMS4uLi5zc2gtZHNzLgowMDUwOiAwMCAwMCA4MyA2MSA2NSA3 MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgMzMgNjQgOiAuLi5hZXMxMjgtY2JjLDNkCjAw NjA6IDY1IDczIDJEIDYzIDYyIDYzIDJDIDc0ICA3NyA2RiA2NiA2OSA3MyA2OCAzMSAzMiA6 IGVzLWNiYyx0d29maXNoMTIKMDA3MDogMzggMkQgNjMgNjIgNjMgMkMgNjMgNjEgIDczIDc0 IDMxIDMyIDM4IDJEIDYzIDYyIDogOC1jYmMsY2FzdDEyOC1jYgowMDgwOiA2MyAyQyA3NCA3 NyA2RiA2NiA2OSA3MyAgNjggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBjLHR3b2Zpc2gtY2Jj LGJsCjAwOTA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAz MSAzOSA6IG93ZmlzaC1jYmMsYWVzMTkKMDBhMDogMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUg IDczIDMyIDM1IDM2IDJEIDYzIDYyIDYzIDogMi1jYmMsYWVzMjU2LWNiYwowMGIwOiAyQyA3 NCA3NyA2RiA2NiA2OSA3MyA2OCAgMzEgMzkgMzIgMkQgNjMgNjIgNjMgMkMgOiAsdHdvZmlz aDE5Mi1jYmMsCjAwYzA6IDc0IDc3IDZGIDY2IDY5IDczIDY4IDMyICAzNSAzNiAyRCA2MyA2 MiA2MyAyQyA2MSA6IHR3b2Zpc2gyNTYtY2JjLGEKMDBkMDogNzIgNjMgNjYgNkYgNzUgNzIg MDAgMDAgIDAwIDgzIDYxIDY1IDczIDMxIDMyIDM4IDogcmNmb3VyLi4uLmFlczEyOAowMGUw OiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIgNjMgMkMgNzQgNzcgOiAt Y2JjLDNkZXMtY2JjLHR3CjAwZjA6IDZGIDY2IDY5IDczIDY4IDMxIDMyIDM4ICAyRCA2MyA2 MiA2MyAyQyA2MyA2MSA3MyA6IG9maXNoMTI4LWNiYyxjYXMKMDEwMDogNzQgMzEgMzIgMzgg MkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogdDEyOC1jYmMsdHdvZmlz aAowMTEwOiAyRCA2MyA2MiA2MyAyQyA2MiA2QyA2RiAgNzcgNjYgNjkgNzMgNjggMkQgNjMg NjIgOiAtY2JjLGJsb3dmaXNoLWNiCjAxMjA6IDYzIDJDIDYxIDY1IDczIDMxIDM5IDMyICAy RCA2MyA2MiA2MyAyQyA2MSA2NSA3MyA6IGMsYWVzMTkyLWNiYyxhZXMKMDEzMDogMzIgMzUg MzYgMkQgNjMgNjIgNjMgMkMgIDc0IDc3IDZGIDY2IDY5IDczIDY4IDMxIDogMjU2LWNiYyx0 d29maXNoMQowMTQwOiAzOSAzMiAyRCA2MyA2MiA2MyAyQyA3NCAgNzcgNkYgNjYgNjkgNzMg NjggMzIgMzUgOiA5Mi1jYmMsdHdvZmlzaDI1CjAxNTA6IDM2IDJEIDYzIDYyIDYzIDJDIDYx IDcyICA2MyA2NiA2RiA3NSA3MiAwMCAwMCAwMCA6IDYtY2JjLGFyY2ZvdXIuLi4KMDE2MDog MkIgNjggNkQgNjEgNjMgMkQgNzMgNjggIDYxIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDogK2ht YWMtc2hhMSxobWFjLQowMTcwOiA3MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEg NjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2LGhtYWMtbWQ1CjAxODA6IDJDIDY4IDZEIDYxIDYz IDJEIDZEIDY0ICAzNSAyRCAzOSAzNiAwMCAwMCAwMCAyQiA6ICxobWFjLW1kNS05Ni4uLisK MDE5MDogNjggNkQgNjEgNjMgMkQgNzMgNjggNjEgIDMxIDJDIDY4IDZEIDYxIDYzIDJEIDcz IDogaG1hYy1zaGExLGhtYWMtcwowMWEwOiA2OCA2MSAzMSAyRCAzOSAzNiAyQyA2OCAgNkQg NjEgNjMgMkQgNkQgNjQgMzUgMkMgOiBoYTEtOTYsaG1hYy1tZDUsCjAxYjA6IDY4IDZEIDYx IDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAwMCAwMCAwMCAwOSA2RSA6IGhtYWMtbWQ1LTk2 Li4uLm4KMDFjMDogNkYgNkUgNjUgMkMgN0EgNkMgNjkgNjIgIDAwIDAwIDAwIDA5IDZFIDZG IDZFIDY1IDogb25lLHpsaWIuLi4ubm9uZQowMWQwOiAyQyA3QSA2QyA2OSA2MiAwMCAwMCAw MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiAsemxpYi4uLi4uLi4uLi4uCjAxZTA6IDAw IDAwIDEyIDNBIDRGIEMzIEM4IEUzICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLjpP Li4uCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDog MDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4u Li4KW2xpYnNzaDJdIDAuNTAwNjAzIFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZl ZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg0NjEgYnl0 ZXMpCjAwMDA6IDE0IEU1IDBDIDdFIEQ5IDE4IDRBIDIxICAwMCA1NSA2NCA3OSAwNyAyRiA5 QiAyMiA6IC4uLn4uLkohLlVkeS4vLiIKMDAxMDogRjggMDAgMDAgMDAgMUEgNjQgNjkgNjYg IDY2IDY5IDY1IDJEIDY4IDY1IDZDIDZDIDogLi4uLi5kaWZmaWUtaGVsbAowMDIwOiA2RCA2 MSA2RSAyRCA2NyA3MiA2RiA3NSAgNzAgMzEgMkQgNzMgNjggNjEgMzEgMDAgOiBtYW4tZ3Jv dXAxLXNoYTEuCjAwMzA6IDAwIDAwIDA3IDczIDczIDY4IDJEIDY0ICA3MyA3MyAwMCAwMCAw MCA4MyA2MSA2NSA6IC4uLnNzaC1kc3MuLi4uYWUKMDA0MDogNzMgMzEgMzIgMzggMkQgNjMg NjIgNjMgIDJDIDMzIDY0IDY1IDczIDJEIDYzIDYyIDogczEyOC1jYmMsM2Rlcy1jYgowMDUw OiA2MyAyQyA3NCA3NyA2RiA2NiA2OSA3MyAgNjggMzEgMzIgMzggMkQgNjMgNjIgNjMgOiBj LHR3b2Zpc2gxMjgtY2JjCjAwNjA6IDJDIDYzIDYxIDczIDc0IDMxIDMyIDM4ICAyRCA2MyA2 MiA2MyAyQyA3NCA3NyA2RiA6ICxjYXN0MTI4LWNiYyx0d28KMDA3MDogNjYgNjkgNzMgNjgg MkQgNjMgNjIgNjMgIDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczIDogZmlzaC1jYmMsYmxvd2Zp cwowMDgwOiA2OCAyRCA2MyA2MiA2MyAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNjIg NjMgOiBoLWNiYyxhZXMxOTItY2JjCjAwOTA6IDJDIDYxIDY1IDczIDMyIDM1IDM2IDJEICA2 MyA2MiA2MyAyQyA3NCA3NyA2RiA2NiA6ICxhZXMyNTYtY2JjLHR3b2YKMDBhMDogNjkgNzMg NjggMzEgMzkgMzIgMkQgNjMgIDYyIDYzIDJDIDc0IDc3IDZGIDY2IDY5IDogaXNoMTkyLWNi Yyx0d29maQowMGIwOiA3MyA2OCAzMiAzNSAzNiAyRCA2MyA2MiAgNjMgMkMgNjEgNzIgNjMg NjYgNkYgNzUgOiBzaDI1Ni1jYmMsYXJjZm91CjAwYzA6IDcyIDAwIDAwIDAwIDgzIDYxIDY1 IDczICAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyA6IHIuLi4uYWVzMTI4LWNiYywKMDBkMDog MzMgNjQgNjUgNzMgMkQgNjMgNjIgNjMgIDJDIDc0IDc3IDZGIDY2IDY5IDczIDY4IDogM2Rl cy1jYmMsdHdvZmlzaAowMGUwOiAzMSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjMgNjEgNzMg NzQgMzEgMzIgMzggMkQgOiAxMjgtY2JjLGNhc3QxMjgtCjAwZjA6IDYzIDYyIDYzIDJDIDc0 IDc3IDZGIDY2ICA2OSA3MyA2OCAyRCA2MyA2MiA2MyAyQyA6IGNiYyx0d29maXNoLWNiYywK MDEwMDogNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggIDJEIDYzIDYyIDYzIDJDIDYxIDY1IDcz IDogYmxvd2Zpc2gtY2JjLGFlcwowMTEwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEg NjUgNzMgMzIgMzUgMzYgMkQgNjMgOiAxOTItY2JjLGFlczI1Ni1jCjAxMjA6IDYyIDYzIDJD IDc0IDc3IDZGIDY2IDY5ICA3MyA2OCAzMSAzOSAzMiAyRCA2MyA2MiA6IGJjLHR3b2Zpc2gx OTItY2IKMDEzMDogNjMgMkMgNzQgNzcgNkYgNjYgNjkgNzMgIDY4IDMyIDM1IDM2IDJEIDYz IDYyIDYzIDogYyx0d29maXNoMjU2LWNiYwowMTQwOiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3 MiAgMDAgMDAgMDAgMkIgNjggNkQgNjEgNjMgOiAsYXJjZm91ci4uLitobWFjCjAxNTA6IDJE IDczIDY4IDYxIDMxIDJDIDY4IDZEICA2MSA2MyAyRCA3MyA2OCA2MSAzMSAyRCA6IC1zaGEx LGhtYWMtc2hhMS0KMDE2MDogMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgIDZEIDY0IDM1IDJD IDY4IDZEIDYxIDYzIDogOTYsaG1hYy1tZDUsaG1hYwowMTcwOiAyRCA2RCA2NCAzNSAyRCAz OSAzNiAwMCAgMDAgMDAgMkIgNjggNkQgNjEgNjMgMkQgOiAtbWQ1LTk2Li4uK2htYWMtCjAx ODA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6 IHNoYTEsaG1hYy1zaGExLTkKMDE5MDogMzYgMkMgNjggNkQgNjEgNjMgMkQgNkQgIDY0IDM1 IDJDIDY4IDZEIDYxIDYzIDJEIDogNixobWFjLW1kNSxobWFjLQowMWEwOiA2RCA2NCAzNSAy RCAzOSAzNiAwMCAwMCAgMDAgMDkgNkUgNkYgNkUgNjUgMkMgN0EgOiBtZDUtOTYuLi4ubm9u ZSx6CjAxYjA6IDZDIDY5IDYyIDAwIDAwIDAwIDA5IDZFICA2RiA2RSA2NSAyQyA3QSA2QyA2 OSA2MiA6IGxpYi4uLi5ub25lLHpsaWIKMDFjMDogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg IDAwIDAwIDAwIDAwIDAwICAgICAgICAgIDogLi4uLi4uLi4uLi4uLgpbbGlic3NoMl0gMC41 MDA2NzMgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3RoPTQ2MQpb bGlic3NoMl0gMC41MDA2NzYgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw ZTogMjAKW2xpYnNzaDJdIDAuNTAwNjg4IEtleSBFeDogQWdyZWVkIG9uIEtFWCBtZXRob2Q6 IGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCltsaWJzc2gyXSAwLjUwMDY5MSBLZXkgRXg6 IEFncmVlZCBvbiBIT1NUS0VZIG1ldGhvZDogc3NoLWRzcwpbbGlic3NoMl0gMC41MDA2OTMg S2V5IEV4OiBBZ3JlZWQgb24gQ1JZUFRfQ1MgbWV0aG9kOiBhZXMyNTYtY2JjCltsaWJzc2gy XSAwLjUwMDY5NiBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczI1Ni1j YmMKW2xpYnNzaDJdIDAuNTAwNjk4IEtleSBFeDogQWdyZWVkIG9uIE1BQ19DUyBtZXRob2Q6 IGhtYWMtc2hhMQpbbGlic3NoMl0gMC41MDA3MDAgS2V5IEV4OiBBZ3JlZWQgb24gTUFDX1ND IG1ldGhvZDogaG1hYy1zaGExCltsaWJzc2gyXSAwLjUwMDcwMyBLZXkgRXg6IEFncmVlZCBv biBDT01QX0NTIG1ldGhvZDogbm9uZQpbbGlic3NoMl0gMC41MDA3MDUgS2V5IEV4OiBBZ3Jl ZWQgb24gQ09NUF9TQyBtZXRob2Q6IG5vbmUKW2xpYnNzaDJdIDAuNTAwNzE4IEtleSBFeDog SW5pdGlhdGluZyBEaWZmaWUtSGVsbG1hbiBHcm91cDEgS2V5IEV4Y2hhbmdlCltsaWJzc2gy XSAwLjUwMTE0NiBLZXkgRXg6IFNlbmRpbmcgS0VYIHBhY2tldCAzMAo9PiBsaWJzc2gyX3Ry YW5zcG9ydF93cml0ZSBwbGFpbiAoMTMzIGJ5dGVzKQowMDAwOiAxRSAwMCAwMCAwMCA4MCA0 QiBFMiA5NCAgMUQgOEUgOUIgRjkgMTAgNkYgQTMgNTkgOiAuLi4uLksuLi4uLi4uby5ZCjAw MTA6IDM2IEI5IDRFIDNFIDdDIDc5IDMzIDQ5ICA0QSA3MSA3QiBEQiBCNCAzRSBDMSA0OCA6 IDYuTj58eTNJSnF7Li4+LkgKMDAyMDogRDcgMzMgMDcgRTggNDMgNzggQTkgMkQgIDM2IDQ0 IDdCIEQ4IDA1IEM3IDNDIEQyIDogLjMuLkN4Li02RHsuLi48LgowMDMwOiAyMCA4QyA0NiBE NCAzNyBEMiA1NiBGMSAgRjEgMDMgMkEgN0MgNDQgMEYgODcgRDQgOiAgLkYuNy5WLi4uKnxE Li4uCjAwNDA6IDUwIDM1IDYzIEE5IDUxIEFFIDkyIDQzICA0MiBDNCA2NyA3OCAxNiAyNyA5 QiBBMyA6IFA1Yy5RLi5DQi5neC4nLi4KMDA1MDogNjMgNTggOEUgRTcgN0IgQ0QgNjkgNkMg IEQwIDc5IEFFIDBDIEVBIDEyIEMyIDQxIDogY1guLnsuaWwueS4uLi4uQQowMDYwOiBDQyBB RCBCOSBCRCBBMCBGRCA4RCBBQSAgMTkgMDMgN0UgOEEgNUEgQjYgRDQgRDAgOiAuLi4uLi4u Li4ufi5aLi4uCjAwNzA6IEY4IEE0IDU4IDJGIEUxIDcwIEE2IEQ3ICAyQyA2NyAyRiA0QSA1 QSA4NSA2RSBDMCA6IC4uWC8ucC4uLGcvSloubi4KMDA4MDogMzcgMTQgOTIgNzUgMTcgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNy4udS4KW2xpYnNzaDJdIDAuNTAx MjQ5IFNvY2tldDogU2VudCAxNDQvMTQ0IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJf dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMTQ0IGJ5dGVzKQowMDAwOiAwMCAwMCAwMCA4QyAw NiAxRSAwMCAwMCAgMDAgODAgNEIgRTIgOTQgMUQgOEUgOUIgOiAuLi4uLi4uLi4uSy4uLi4u CjAwMTA6IEY5IDEwIDZGIEEzIDU5IDM2IEI5IDRFICAzRSA3QyA3OSAzMyA0OSA0QSA3MSA3 QiA6IC4uby5ZNi5OPnx5M0lKcXsKMDAyMDogREIgQjQgM0UgQzEgNDggRDcgMzMgMDcgIEU4 IDQzIDc4IEE5IDJEIDM2IDQ0IDdCIDogLi4+LkguMy4uQ3guLTZEewowMDMwOiBEOCAwNSBD NyAzQyBEMiAyMCA4QyA0NiAgRDQgMzcgRDIgNTYgRjEgRjEgMDMgMkEgOiAuLi48LiAuRi43 LlYuLi4qCjAwNDA6IDdDIDQ0IDBGIDg3IEQ0IDUwIDM1IDYzICBBOSA1MSBBRSA5MiA0MyA0 MiBDNCA2NyA6IHxELi4uUDVjLlEuLkNCLmcKMDA1MDogNzggMTYgMjcgOUIgQTMgNjMgNTgg OEUgIEU3IDdCIENEIDY5IDZDIEQwIDc5IEFFIDogeC4nLi5jWC4uey5pbC55LgowMDYwOiAw QyBFQSAxMiBDMiA0MSBDQyBBRCBCOSAgQkQgQTAgRkQgOEQgQUEgMTkgMDMgN0UgOiAuLi4u QS4uLi4uLi4uLi5+CjAwNzA6IDhBIDVBIEI2IEQ0IEQwIEY4IEE0IDU4ICAyRiBFMSA3MCBB NiBENyAyQyA2NyAyRiA6IC5aLi4uLi5YLy5wLi4sZy8KMDA4MDogNEEgNUEgODUgNkUgQzAg MzcgMTQgOTIgIDc1IDE3IDJDIDk4IDNCIEUyIDE4IDAyIDogSloubi43Li51LiwuOy4uLgpb bGlic3NoMl0gMC41MDEyODEgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlw ZTogMzEKW2xpYnNzaDJdIDAuNTAxMjg3IEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0 byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXMKW2xpYnNzaDJdIDAuNTYyNjQ3IFNvY2tldDog UmVjdmVkIDEwNDAvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBsaWJzc2gyX3RyYW5z cG9ydF9yZWFkKCkgcmF3ICgxMDQwIGJ5dGVzKQowMDAwOiAwMCAwMCAwMCAwQyAwNiAwMiAw MCAwMCAgMDAgMDAgRUQgQjYgNTEgRTEgNjkgMTcgOiAuLi4uLi4uLi4uLi5RLmkuCjAwMTA6 IDAwIDAwIDAzIEZDIDA0IDFGIDAwIDAwICAwMyAzMiAwMCAwMCAwMCAwNyA3MyA3MyA6IC4u Li4uLi4uLjIuLi4uc3MKMDAyMDogNjggMkQgNjQgNzMgNzMgMDAgMDAgMDEgIDAxIDAwIERB IDU2IDZEIDQ1IEUzIDM2IDogaC1kc3MuLi4uLi5WbUUuNgowMDMwOiAzOSBGNCBGNiBBMSA4 OSBGOSBEQiAxNyAgM0IgNzAgODMgRTEgRTQgMTggOEYgNTcgOiA5Li4uLi4uLjtwLi4uLi5X CjAwNDA6IEE3IDNGIDhGIEJBIEU3IEE0IDcyIERCICBGQiAwNiBGRSA1NSA0MiBCNiBCNCA0 NiA6IC4/Li4uLnIuLi4uVUIuLkYKMDA1MDogMzcgN0UgQzggMkEgNjMgNzIgMDkgQzcgIEYy IDJEIDg1IDgxIDZBIEVCIDFFIDhDIDogN34uKmNyLi4uLS4uai4uLgowMDYwOiBDOSA0RCA2 NCAyMCBGNiAzOCA1NyA5QyAgRDUgNDkgNEYgNzcgNzkgNjYgNkIgNjIgOiAuTWQgLjhXLi5J T3d5ZmtiCjAwNzA6IDg1IDFCIDQxIDI1IEU4IDYxIEI2IEQ5ICBDRiAxNCAwRCBGQiBERCBG QSA2MiAwNyA6IC4uQSUuYS4uLi4uLi4uYi4KMDA4MDogRkYgRUQgMkIgMkQgQjMgNzEgQUEg MUEgIDBCIDE2IDdDIEY1IDY4IDE1IDM3IEMyIDogLi4rLS5xLi4uLnwuaC43LgowMDkwOiBD QyA1MSBFNyA0RSA1OSA5MiA4MCBFRCAgODUgQjcgMjkgREQgQTIgNjQgNUYgQjcgOiAuUS5O WS4uLi4uKS4uZF8uCjAwYTA6IDg5IDNCIDk2IDIyIDA1IDUzIDU3IDBGICA1NyBBQyA2NCA1 NCBERiAxMSA5NSA1OCA6IC47LiIuU1cuVy5kVC4uLlgKMDBiMDogNkIgNzUgNkIgQkUgRjUg Q0IgMEUgQzAgIDk0IDAwIEE5IDNDIERCIDYzIEVGIEE2IDoga3VrLi4uLi4uLi48LmMuLgow MGMwOiBDMSBEMyBDMSAyQyBFNyAyMCBFNCBFMCAgOEEgN0MgNDIgMzAgM0UgNEEgQTYgNzkg OiAuLi4sLiAuLi58QjA+Si55CjAwZDA6IDFDIDQzIEE4IDk3IEQ2IDJBIDQxIDJEICAxRiBE RSA1QSBGOSAxRCA2QyBBOCAwQiA6IC5DLi4uKkEtLi5aLi5sLi4KMDBlMDogNTYgNUIgQUIg QkQgMUYgNTAgQ0UgNzQgIDQwIEFDIDlDIDk3IEE5IEM5IEIyIDUyIDogVlsuLi5QLnRALi4u Li4uUgowMGYwOiA2QSAzOSAwRCBCOCA4MyAxNyA0OSA1OSAgQ0EgRUQgRkEgMUIgRTAgQjEg QTAgNkEgOiBqOS4uLi5JWS4uLi4uLi5qCjAxMDA6IEU2IEJEIDMzIDhFIDlDIEM2IEMyIEQw ICA4MCBBNSA2MiBEOCA1RCA0NiA3QSAxMyA6IC4uMy4uLi4uLi5iLl1Gei4KMDExMDogRDEg M0YgNDggNzcgMjkgMTIgODEgNzcgIEM3IDAxIDdCIDZDIEUxIEI3IEFGIDU2IDogLj9Idyku LncuLntsLi4uVgowMTIwOiBFQyA2RCBDMSBFMSBDRSA3NSBFQyBCMCAgN0YgNzcgMDAgMDAg MDAgMTUgMDAgRjEgOiAubS4uLnUuLi53Li4uLi4uCjAxMzA6IDdDIDJCIDU1IDk3IEJDIDA2 IDVGIDYyICBEMCA5QSA2QiBGRCA0RCBBQSBGMyA1QSA6IHwrVS4uLl9iLi5rLk0uLloKMDE0 MDogRTMgQjUgMTcgMDAgMDAgMDEgMDAgM0UgIEY5IDg2IEJCIDMxIDVCIDJBIDk5IDQ4IDog Li4uLi4uLj4uLi4xWyouSAowMTUwOiAwMSBBMCAxNSA1MSAwQyBBRiA0NSBEMyAgN0YgMTEg MjkgMzggNDggNzAgMEQgMkUgOiAuLi5RLi5FLi4uKThIcC4uCjAxNjA6IENGIDBGIDc4IEQ3 IDJGIEYxIDhEIDcwICAzRiA1NyBCMiAzOSA5MiA3MCA0RCAzMyA6IC4ueC4vLi5wP1cuOS5w TTMKMDE3MDogQTQgMkYgRDYgMTYgQTIgMDcgNzIgOTUgIDk3IDE5IEZBIDU0IDU2IDc1IDFF IDlFIDogLi8uLi4uci4uLi5UVnUuLgowMTgwOiA1QyBDQSBDOCBENCA2QiA2OSA1OSAyQSAg MzkgMzcgRjkgQUQgRTYgMjUgRDEgMjggOiBcLi4ua2lZKjk3Li4uJS4oCjAxOTA6IDk2IEU3 IEQwIEZBIDUxIDc4IEUwIDUzICBDRSBFMCAyMCBGMyA3NCAzNCA3MyA2MiA6IC4uLi5ReC5T Li4gLnQ0c2IKMDFhMDogMTggRTggMkUgNUYgMzkgOUUgMDIgQUIgIEJEIDVBIDY4IEU5IDlG IEU5IDdEIEFEIDogLi4uXzkuLi4uWmguLi59LgowMWIwOiA3MSBCMCA0NiAzNSBCQSA2MyBB QiBBRSAgQUMgMDIgRDYgODggNzMgNjcgNDUgNDYgOiBxLkY1LmMuLi4uLi5zZ0VGCjAxYzA6 IEFCIDBGIDNBIEM5IDU2IEIyIDcyIDlDICAwRSA4QyBCQiBERCAyMyAyMCA5MCBFMyA6IC4u Oi5WLnIuLi4uLiMgLi4KMDFkMDogODAgRTMgNEYgNjUgRUMgRjQgRTYgODUgIEJBIDA4IEVG IDkwIDVFIEYyIDA1IEJFIDogLi5PZS4uLi4uLi4uXi4uLgowMWUwOiAwMSA4NSA0QyA1RiBB MCAwNCA1MCA1NSAgNzkgMUEgQ0YgRjggNTEgOTkgRjMgMTQgOiAuLkxfLi5QVXkuLi5RLi4u CjAxZjA6IDg1IEZFIERCIDM0IDQ1IDEzIDg4IDVFICBGRiA5NSBGOSBBRiAxNiBFRCAyQSAy QyA6IC4uLjRFLi5eLi4uLi4uKiwKMDIwMDogRTggQTQgRTEgRTQgNTIgNTcgMDcgMzYgIDc0 IEUyIDQ0IEZFIEE3IDlDIDE0IDg1IDogLi4uLlJXLjZ0LkQuLi4uLgowMjEwOiAwQyBCMCBF NSAzMiA0NSA1OCA4MSBDQyAgQjggMTMgNjMgMkQgNzkgQzEgODkgQzQgOiAuLi4yRVguLi4u Yy15Li4uCjAyMjA6IDVCIEMxIDc4IEY1IDA2IDQ3IEI4IDA1ICBFNSA2RiA5OCAwRSBDQSAy NiA3MCAxNSA6IFsueC4uRy4uLm8uLi4mcC4KMDIzMDogNEUgODYgNEQgMEIgRUEgMEUgRUEg M0YgIDdBIDE4IDhEIDEzIDE5IDQ4IDNEIDhEIDogTi5NLi4uLj96Li4uLkg9LgowMjQwOiA0 RSBFRSA0NSAyMiA2NyA2RiBCOSAwMCAgMDAgMDEgMDEgMDAgQTYgMDQgOTggOTAgOiBOLkUi Z28uLi4uLi4uLi4uCjAyNTA6IDFDIDcyIEVGIDc5IENBIEU2IDhCIDUxICA2QiA5MSBGNSAx OCAxRSBDQSBDRiBEQiA6IC5yLnkuLi5Ray4uLi4uLi4KMDI2MDogQUMgNjUgOTcgMDQgNjQg OEEgQ0UgRkYgIDU2IDhDIDNBIDZGIDA4IDM1IEQ2IDRCIDogLmUuLmQuLi5WLjpvLjUuSwow MjcwOiAzQSBGMyBEQSA5NyBFMCBFNyBGMSBGOCAgMUIgRjggNDcgMTEgRkMgMDEgMEUgOEYg OiA6Li4uLi4uLi4uRy4uLi4uCjAyODA6IDk1IDg0IDRDIDA4IDgzIDgwIDQyIENEICAzMiA3 QiA4NCAwRSAzMCAzNCA4NiA4RCA6IC4uTC4uLkIuMnsuLjA0Li4KMDI5MDogMTkgQTQgNEMg RUYgQjcgQTcgRDIgQ0MgIDM4IDE0IDNDIEJDIDFBIDI0IEZFIDcwIDogLi5MLi4uLi44Ljwu LiQucAowMmEwOiBGRiBCRiBDNCA4NyBBOCBGMyAzNSA5MCAgNjIgNzkgNTkgRjUgRUEgNjIg NDUgRTQgOiAuLi4uLi41LmJ5WS4uYkUuCjAyYjA6IDE3IDU0IDBBIDkwIDQyIDM0IDQyIEUz ICAxMCAyOCBCRSBFQiA1NSA5RCAyNyBFMSA6IC5ULi5CNEIuLiguLlUuJy4KMDJjMDogNkYg QzcgMTYgNTggRDggNzEgOEYgRkIgIDJEIERGIEYwIEM1IEQ2IDY1IDFCIDEzIDogby4uWC5x Li4tLi4uLmUuLgowMmQwOiAwQiA4MCBFQSA0MiA0NCAxNCBBRiAyOCAgNjUgRDUgRkQgQ0Yg QTggMjEgNkUgNzIgOiAuLi5CRC4uKGUuLi4uIW5yCjAyZTA6IDc1IEI1IDhCIDkxIDNBIDc5 IEFEIDhCICBFQSA3MiBDNiAzOSBGOCBCMSA3QSA3OCA6IHUuLi46eS4uLnIuOS4uengKMDJm MDogRjYgQ0EgODMgRkMgNDEgOTUgNjIgNEIgIEU4IDUyIDQxIDhCIDBCIDRCIERGIDFDIDog Li4uLkEuYksuUkEuLksuLgowMzAwOiBDNyA1QyBBMCBGRSBCRCA2QiBCNyAzQSAgMTkgQUYg NDQgMjggNjggREMgN0EgMkIgOiAuXC4uLmsuOi4uRChoLnorCjAzMTA6IDE5IEM5IDBEIEM4 IDU4IDEyIDIyIDE3ICA4QSA3QyBDMiAwMyAyRSA1QyBFOCBBMyA6IC4uLi5YLiIuLnwuLi5c Li4KMDMyMDogQzEgNjEgM0MgNkIgOEQgODcgRDggOEIgIEI4IDU3IDI4IDUwIDZGIDFEIDQ2 IDRGIDogLmE8ay4uLi4uVyhQby5GTwowMzMwOiBGNiBFMSA4NSBBQyBCQiA4NyA5QiBFMSAg MEEgQUQgOTUgNkYgODAgNEQgN0EgRjQgOiAuLi4uLi4uLi4uLm8uTXouCjAzNDA6IDcyIEEw IEZEIDZBIDUzIDc5IDc5IDhBICAxMiA3QiA0RSBGQiAwMCAwMCAwMCA4MSA6IHIuLmpTeXku LntOLi4uLi4KMDM1MDogMDAgOTEgMDEgNTMgOUYgM0IgRjggQzIgIEE3IEJEIDlGIDM1IDE4 IDg4IDREIDE2IDogLi4uUy47Li4uLi41Li5NLgowMzYwOiAzNyA2NyA5QyBCOSA4MyA1RCA5 QiA4QiAgRTQgMzQgQjkgOTEgNUIgNzIgRDAgQUMgOiA3Zy4uLl0uLi40Li5bci4uCjAzNzA6 IDIwIEMyIEFBIDMzIDM3IDI0IEM1IDFGICA4MyBGQyBDQSBCMiAxNSA1NCA1MyA3MCA6ICAu LjM3JC4uLi4uLi5UU3AKMDM4MDogQjcgM0YgQjkgQUIgNDMgMzYgNEQgOUUgIEUzIDkxIDI2 IDJFIDc3IDFCIDREIDg1IDogLj8uLkM2TS4uLiYudy5NLgowMzkwOiBFNyA5RSBBNSA2QiA4 NCA4RSA2RiA3RSAgNzggMDQgMjQgQ0QgNjQgNTggQkEgREIgOiAuLi5rLi5vfnguJC5kWC4u CjAzYTA6IDBFIENDIENFIDE3IEQwIDQxIDQxIEM4ICBCMyA1OCBBMSA5RiBBOCBGNyA4RSBE NyA6IC4uLi4uQUEuLlguLi4uLi4KMDNiMDogNjQgM0EgMDkgRkQgNTMgNEIgRTUgNTMgIEMx IEIwIEQyIEExIEZBIDM5IEVEIEZGIDogZDouLlNLLlMuLi4uLjkuLgowM2MwOiA2MyBEOCAz MCBGRSA0MSBBNyA1OSAwMCAgN0YgRkIgNkQgQ0IgOTQgRTMgRTIgRkUgOiBjLjAuQS5ZLi4u bS4uLi4uCjAzZDA6IDIyIDAwIDAwIDAwIDM3IDAwIDAwIDAwICAwNyA3MyA3MyA2OCAyRCA2 NCA3MyA3MyA6ICIuLi43Li4uLnNzaC1kc3MKMDNlMDogMDAgMDAgMDAgMjggQTIgN0UgNEIg MUEgIEMxIDQ5IEM1IDVDIEUxIDBFIEUzIDdEIDogLi4uKC5+Sy4uSS5cLi4ufQowM2YwOiBG NCA4MSBENyBDRCAyQiA3NyA0OCA1MiAgNjkgNUUgNDIgMjQgOTYgRTEgREEgRjggOiAuLi4u K3dIUmleQiQuLi4uCjA0MDA6IENGIDgxIDNFIDY5IDYyIDAxIDI1IDdFICBGMiAzNCAxOCA4 QiA3NSA2OCAzNSA5RCA6IC4uPmliLiV+LjQuLnVoNS4KPT4gbGlic3NoMl90cmFuc3BvcnRf cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMC41NjI4MzYgVHJh bnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3Ry YW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwMTUgYnl0ZXMpCjAwMDA6IDFGIDAwIDAwIDAzIDMy IDAwIDAwIDAwICAwNyA3MyA3MyA2OCAyRCA2NCA3MyA3MyA6IC4uLi4yLi4uLnNzaC1kc3MK MDAxMDogMDAgMDAgMDEgMDEgMDAgREEgNTYgNkQgIDQ1IEUzIDM2IDM5IEY0IEY2IEExIDg5 IDogLi4uLi4uVm1FLjY5Li4uLgowMDIwOiBGOSBEQiAxNyAzQiA3MCA4MyBFMSBFNCAgMTgg OEYgNTcgQTcgM0YgOEYgQkEgRTcgOiAuLi47cC4uLi4uVy4/Li4uCjAwMzA6IEE0IDcyIERC IEZCIDA2IEZFIDU1IDQyICBCNiBCNCA0NiAzNyA3RSBDOCAyQSA2MyA6IC5yLi4uLlVCLi5G N34uKmMKMDA0MDogNzIgMDkgQzcgRjIgMkQgODUgODEgNkEgIEVCIDFFIDhDIEM5IDREIDY0 IDIwIEY2IDogci4uLi0uLmouLi4uTWQgLgowMDUwOiAzOCA1NyA5QyBENSA0OSA0RiA3NyA3 OSAgNjYgNkIgNjIgODUgMUIgNDEgMjUgRTggOiA4Vy4uSU93eWZrYi4uQSUuCjAwNjA6IDYx IEI2IEQ5IENGIDE0IDBEIEZCIEREICBGQSA2MiAwNyBGRiBFRCAyQiAyRCBCMyA6IGEuLi4u Li4uLmIuLi4rLS4KMDA3MDogNzEgQUEgMUEgMEIgMTYgN0MgRjUgNjggIDE1IDM3IEMyIEND IDUxIEU3IDRFIDU5IDogcS4uLi58LmguNy4uUS5OWQowMDgwOiA5MiA4MCBFRCA4NSBCNyAy OSBERCBBMiAgNjQgNUYgQjcgODkgM0IgOTYgMjIgMDUgOiAuLi4uLikuLmRfLi47LiIuCjAw OTA6IDUzIDU3IDBGIDU3IEFDIDY0IDU0IERGICAxMSA5NSA1OCA2QiA3NSA2QiBCRSBGNSA6 IFNXLlcuZFQuLi5Ya3VrLi4KMDBhMDogQ0IgMEUgQzAgOTQgMDAgQTkgM0MgREIgIDYzIEVG IEE2IEMxIEQzIEMxIDJDIEU3IDogLi4uLi4uPC5jLi4uLi4sLgowMGIwOiAyMCBFNCBFMCA4 QSA3QyA0MiAzMCAzRSAgNEEgQTYgNzkgMUMgNDMgQTggOTcgRDYgOiAgLi4ufEIwPkoueS5D Li4uCjAwYzA6IDJBIDQxIDJEIDFGIERFIDVBIEY5IDFEICA2QyBBOCAwQiA1NiA1QiBBQiBC RCAxRiA6ICpBLS4uWi4ubC4uVlsuLi4KMDBkMDogNTAgQ0UgNzQgNDAgQUMgOUMgOTcgQTkg IEM5IEIyIDUyIDZBIDM5IDBEIEI4IDgzIDogUC50QC4uLi4uLlJqOS4uLgowMGUwOiAxNyA0 OSA1OSBDQSBFRCBGQSAxQiBFMCAgQjEgQTAgNkEgRTYgQkQgMzMgOEUgOUMgOiAuSVkuLi4u Li4uai4uMy4uCjAwZjA6IEM2IEMyIEQwIDgwIEE1IDYyIEQ4IDVEICA0NiA3QSAxMyBEMSAz RiA0OCA3NyAyOSA6IC4uLi4uYi5dRnouLj9IdykKMDEwMDogMTIgODEgNzcgQzcgMDEgN0Ig NkMgRTEgIEI3IEFGIDU2IEVDIDZEIEMxIEUxIENFIDogLi53Li57bC4uLlYubS4uLgowMTEw OiA3NSBFQyBCMCA3RiA3NyAwMCAwMCAwMCAgMTUgMDAgRjEgN0MgMkIgNTUgOTcgQkMgOiB1 Li4udy4uLi4uLnwrVS4uCjAxMjA6IDA2IDVGIDYyIEQwIDlBIDZCIEZEIDREICBBQSBGMyA1 QSBFMyBCNSAxNyAwMCAwMCA6IC5fYi4uay5NLi5aLi4uLi4KMDEzMDogMDEgMDAgM0UgRjkg ODYgQkIgMzEgNUIgIDJBIDk5IDQ4IDAxIEEwIDE1IDUxIDBDIDogLi4+Li4uMVsqLkguLi5R LgowMTQwOiBBRiA0NSBEMyA3RiAxMSAyOSAzOCA0OCAgNzAgMEQgMkUgQ0YgMEYgNzggRDcg MkYgOiAuRS4uLik4SHAuLi4ueC4vCjAxNTA6IEYxIDhEIDcwIDNGIDU3IEIyIDM5IDkyICA3 MCA0RCAzMyBBNCAyRiBENiAxNiBBMiA6IC4ucD9XLjkucE0zLi8uLi4KMDE2MDogMDcgNzIg OTUgOTcgMTkgRkEgNTQgNTYgIDc1IDFFIDlFIDVDIENBIEM4IEQ0IDZCIDogLnIuLi4uVFZ1 Li5cLi4uawowMTcwOiA2OSA1OSAyQSAzOSAzNyBGOSBBRCBFNiAgMjUgRDEgMjggOTYgRTcg RDAgRkEgNTEgOiBpWSo5Ny4uLiUuKC4uLi5RCjAxODA6IDc4IEUwIDUzIENFIEUwIDIwIEYz IDc0ICAzNCA3MyA2MiAxOCBFOCAyRSA1RiAzOSA6IHguUy4uIC50NHNiLi4uXzkKMDE5MDog OUUgMDIgQUIgQkQgNUEgNjggRTkgOUYgIEU5IDdEIEFEIDcxIEIwIDQ2IDM1IEJBIDogLi4u LlpoLi4ufS5xLkY1LgowMWEwOiA2MyBBQiBBRSBBQyAwMiBENiA4OCA3MyAgNjcgNDUgNDYg QUIgMEYgM0EgQzkgNTYgOiBjLi4uLi4uc2dFRi4uOi5WCjAxYjA6IEIyIDcyIDlDIDBFIDhD IEJCIEREIDIzICAyMCA5MCBFMyA4MCBFMyA0RiA2NSBFQyA6IC5yLi4uLi4jIC4uLi5PZS4K MDFjMDogRjQgRTYgODUgQkEgMDggRUYgOTAgNUUgIEYyIDA1IEJFIDAxIDg1IDRDIDVGIEEw IDogLi4uLi4uLl4uLi4uLkxfLgowMWQwOiAwNCA1MCA1NSA3OSAxQSBDRiBGOCA1MSAgOTkg RjMgMTQgODUgRkUgREIgMzQgNDUgOiAuUFV5Li4uUS4uLi4uLjRFCjAxZTA6IDEzIDg4IDVF IEZGIDk1IEY5IEFGIDE2ICBFRCAyQSAyQyBFOCBBNCBFMSBFNCA1MiA6IC4uXi4uLi4uLios Li4uLlIKMDFmMDogNTcgMDcgMzYgNzQgRTIgNDQgRkUgQTcgIDlDIDE0IDg1IDBDIEIwIEU1 IDMyIDQ1IDogVy42dC5ELi4uLi4uLi4yRQowMjAwOiA1OCA4MSBDQyBCOCAxMyA2MyAyRCA3 OSAgQzEgODkgQzQgNUIgQzEgNzggRjUgMDYgOiBYLi4uLmMteS4uLlsueC4uCjAyMTA6IDQ3 IEI4IDA1IEU1IDZGIDk4IDBFIENBICAyNiA3MCAxNSA0RSA4NiA0RCAwQiBFQSA6IEcuLi5v Li4uJnAuTi5NLi4KMDIyMDogMEUgRUEgM0YgN0EgMTggOEQgMTMgMTkgIDQ4IDNEIDhEIDRF IEVFIDQ1IDIyIDY3IDogLi4/ei4uLi5IPS5OLkUiZwowMjMwOiA2RiBCOSAwMCAwMCAwMSAw MSAwMCBBNiAgMDQgOTggOTAgMUMgNzIgRUYgNzkgQ0EgOiBvLi4uLi4uLi4uLi5yLnkuCjAy NDA6IEU2IDhCIDUxIDZCIDkxIEY1IDE4IDFFICBDQSBDRiBEQiBBQyA2NSA5NyAwNCA2NCA6 IC4uUWsuLi4uLi4uLmUuLmQKMDI1MDogOEEgQ0UgRkYgNTYgOEMgM0EgNkYgMDggIDM1IEQ2 IDRCIDNBIEYzIERBIDk3IEUwIDogLi4uVi46by41Lks6Li4uLgowMjYwOiBFNyBGMSBGOCAx QiBGOCA0NyAxMSBGQyAgMDEgMEUgOEYgOTUgODQgNEMgMDggODMgOiAuLi4uLkcuLi4uLi4u TC4uCjAyNzA6IDgwIDQyIENEIDMyIDdCIDg0IDBFIDMwICAzNCA4NiA4RCAxOSBBNCA0QyBF RiBCNyA6IC5CLjJ7Li4wNC4uLi5MLi4KMDI4MDogQTcgRDIgQ0MgMzggMTQgM0MgQkMgMUEg IDI0IEZFIDcwIEZGIEJGIEM0IDg3IEE4IDogLi4uOC48Li4kLnAuLi4uLgowMjkwOiBGMyAz NSA5MCA2MiA3OSA1OSBGNSBFQSAgNjIgNDUgRTQgMTcgNTQgMEEgOTAgNDIgOiAuNS5ieVku LmJFLi5ULi5CCjAyYTA6IDM0IDQyIEUzIDEwIDI4IEJFIEVCIDU1ICA5RCAyNyBFMSA2RiBD NyAxNiA1OCBEOCA6IDRCLi4oLi5VLicuby4uWC4KMDJiMDogNzEgOEYgRkIgMkQgREYgRjAg QzUgRDYgIDY1IDFCIDEzIDBCIDgwIEVBIDQyIDQ0IDogcS4uLS4uLi5lLi4uLi5CRAowMmMw OiAxNCBBRiAyOCA2NSBENSBGRCBDRiBBOCAgMjEgNkUgNzIgNzUgQjUgOEIgOTEgM0EgOiAu LihlLi4uLiFucnUuLi46CjAyZDA6IDc5IEFEIDhCIEVBIDcyIEM2IDM5IEY4ICBCMSA3QSA3 OCBGNiBDQSA4MyBGQyA0MSA6IHkuLi5yLjkuLnp4Li4uLkEKMDJlMDogOTUgNjIgNEIgRTgg NTIgNDEgOEIgMEIgIDRCIERGIDFDIEM3IDVDIEEwIEZFIEJEIDogLmJLLlJBLi5LLi4uXC4u LgowMmYwOiA2QiBCNyAzQSAxOSBBRiA0NCAyOCA2OCAgREMgN0EgMkIgMTkgQzkgMEQgQzgg NTggOiBrLjouLkQoaC56Ky4uLi5YCjAzMDA6IDEyIDIyIDE3IDhBIDdDIEMyIDAzIDJFICA1 QyBFOCBBMyBDMSA2MSAzQyA2QiA4RCA6IC4iLi58Li4uXC4uLmE8ay4KMDMxMDogODcgRDgg OEIgQjggNTcgMjggNTAgNkYgIDFEIDQ2IDRGIEY2IEUxIDg1IEFDIEJCIDogLi4uLlcoUG8u Rk8uLi4uLgowMzIwOiA4NyA5QiBFMSAwQSBBRCA5NSA2RiA4MCAgNEQgN0EgRjQgNzIgQTAg RkQgNkEgNTMgOiAuLi4uLi5vLk16LnIuLmpTCjAzMzA6IDc5IDc5IDhBIDEyIDdCIDRFIEZC IDAwICAwMCAwMCA4MSAwMCA5MSAwMSA1MyA5RiA6IHl5Li57Ti4uLi4uLi4uUy4KMDM0MDog M0IgRjggQzIgQTcgQkQgOUYgMzUgMTggIDg4IDREIDE2IDM3IDY3IDlDIEI5IDgzIDogOy4u Li4uNS4uTS43Zy4uLgowMzUwOiA1RCA5QiA4QiBFNCAzNCBCOSA5MSA1QiAgNzIgRDAgQUMg MjAgQzIgQUEgMzMgMzcgOiBdLi4uNC4uW3IuLiAuLjM3CjAzNjA6IDI0IEM1IDFGIDgzIEZD IENBIEIyIDE1ICA1NCA1MyA3MCBCNyAzRiBCOSBBQiA0MyA6ICQuLi4uLi4uVFNwLj8uLkMK MDM3MDogMzYgNEQgOUUgRTMgOTEgMjYgMkUgNzcgIDFCIDREIDg1IEU3IDlFIEE1IDZCIDg0 IDogNk0uLi4mLncuTS4uLi5rLgowMzgwOiA4RSA2RiA3RSA3OCAwNCAyNCBDRCA2NCAgNTgg QkEgREIgMEUgQ0MgQ0UgMTcgRDAgOiAub354LiQuZFguLi4uLi4uCjAzOTA6IDQxIDQxIEM4 IEIzIDU4IEExIDlGIEE4ICBGNyA4RSBENyA2NCAzQSAwOSBGRCA1MyA6IEFBLi5YLi4uLi4u ZDouLlMKMDNhMDogNEIgRTUgNTMgQzEgQjAgRDIgQTEgRkEgIDM5IEVEIEZGIDYzIEQ4IDMw IEZFIDQxIDogSy5TLi4uLi45Li5jLjAuQQowM2IwOiBBNyA1OSAwMCA3RiBGQiA2RCBDQiA5 NCAgRTMgRTIgRkUgMjIgMDAgMDAgMDAgMzcgOiAuWS4uLm0uLi4uLiIuLi43CjAzYzA6IDAw IDAwIDAwIDA3IDczIDczIDY4IDJEICA2NCA3MyA3MyAwMCAwMCAwMCAyOCBBMiA6IC4uLi5z c2gtZHNzLi4uKC4KMDNkMDogN0UgNEIgMUEgQzEgNDkgQzUgNUMgRTEgIDBFIEUzIDdEIEY0 IDgxIEQ3IENEIDJCIDogfksuLkkuXC4uLn0uLi4uKwowM2UwOiA3NyA0OCA1MiA2OSA1RSA0 MiAyNCA5NiAgRTEgREEgRjggQ0YgODEgM0UgNjkgNjIgOiB3SFJpXkIkLi4uLi4uPmliCjAz ZjA6IDAxIDI1IDdFIEYyIDM0IDE4IDhCICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IC4lfi40Li4KW2xpYnNzaDJdIDAuNTYyOTk5IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMzEg cmVjZWl2ZWQsIGxlbmd0aD0xMDE1CltsaWJzc2gyXSAwLjU2MzAwMiBUcmFuc3BvcnQ6IExv b2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAzMQpbbGlic3NoMl0gMC41NjMwMzEgS2V5IEV4 OiBTZXJ2ZXIncyBNRDUgRmluZ2VycHJpbnQ6IGU3OjA0OjhiOmZmOmRkOjYzOjQ0OmEzOmFj OmIwOmI3OjM5OmYxOjAxOjVkOmE1CltsaWJzc2gyXSAwLjU2MzA0NiBLZXkgRXg6IFNlcnZl cidzIFNIQTEgRmluZ2VycHJpbnQ6IDhlOmZmOjlmOmFkOjU5OmJiOjI4OjBkOmNlOmJkOjk2 OjFjOjgwOjU2OjdiOjNhOmRmOjY1OmZkOmQyCltsaWJzc2gyXSAwLjU2Njg1NSBLZXkgRXg6 IFNlbmRpbmcgTkVXS0VZUyBtZXNzYWdlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs YWluICgxIGJ5dGVzKQowMDAwOiAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjU2NjkzMCBTb2NrZXQ6IFNlbnQgMTYv MTYgYnl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgp ICgxNiBieXRlcykKMDAwMDogMDAgMDAgMDAgMEMgMEEgMTUgMUYgMkQgIEMwIEY3IDM5IDdC IDczIDg1IDU5IDVCIDogLi4uLi4uLi0uLjl7cy5ZWwpbbGlic3NoMl0gMC41NjY5MzkgVHJh bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogMjEKW2xpYnNzaDJdIDAuNTY2 OTQzIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9u IGtleXMKW2xpYnNzaDJdIDAuNTY3MTM3IFNvY2tldDogUmVjdmVkIDMyLzE2Mzg0IGJ5dGVz IHRvIDB4NTAyYzM4KzAKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHJhdyAoMzIgYnl0 ZXMpCjAwMDA6IDAwIDAwIDAwIDBDIDA2IDAyIDAwIDAwICAwMCAwMCA3RSBDRCA3MiBBNyBD OCBENSA6IC4uLi4uLi4uLi5+LnIuLi4KMDAxMDogMDAgMDAgMDAgMEMgMEEgMTUgNzAgRUEg IEZGIDcxIDg4IDhEIEU4IDY2IDYwIDBFIDogLi4uLi4ucC4ucS4uLmZgLgo9PiBsaWJzc2gy X3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAwIDAw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4uCltsaWJzc2gyXSAw LjU2NzE1OSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQsIGxlbmd0aD01Cj0+ IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMSBieXRlcykKMDAwMDogMTUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLgpbbGlic3No Ml0gMC41NjcxNjkgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMSByZWNlaXZlZCwgbGVuZ3Ro PTEKW2xpYnNzaDJdIDAuNTY3MTc0IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9m IHR5cGU6IDIxCltsaWJzc2gyXSAwLjU2NzE3OCBLZXkgRXg6IFJlY2VpdmVkIE5FV0tFWVMg bWVzc2FnZQpbbGlic3NoMl0gMC41NjcxODEgS2V5IEV4OiBzZXNzaW9uX2lkIGNhbGN1bGF0 ZWQKW2xpYnNzaDJdIDAuNTY3MjU3IEtleSBFeDogQ2xpZW50IHRvIFNlcnZlciBJViBhbmQg S2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNTY3MzA1IEtleSBFeDogU2VydmVyIHRvIENs aWVudCBJViBhbmQgS2V5IGNhbGN1bGF0ZWQKW2xpYnNzaDJdIDAuNTY3MzMzIEtleSBFeDog Q2xpZW50IHRvIFNlcnZlciBITUFDIEtleSBjYWxjdWxhdGVkCltsaWJzc2gyXSAwLjU2NzM0 MSBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgSE1BQyBLZXkgY2FsY3VsYXRlZApbbGlic3No Ml0gMC41NjczNDQgS2V5IEV4OiBDbGllbnQgdG8gU2VydmVyIGNvbXByZXNzaW9uIGluaXRp YWxpemVkCltsaWJzc2gyXSAwLjU2NzM0NyBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgY29t cHJlc3Npb24gaW5pdGlhbGl6ZWQKW2xpYnNzaDJdIDAuNTY3MzUyIFRyYW5zcG9ydDogUmVx dWVzdGluZyB1c2VyYXV0aCBzZXJ2aWNlCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBs YWluICgxNyBieXRlcykKMDAwMDogMDUgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDcz IDY1IDcyIDYxIDc1IDc0IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjU2 NzQ1OSBTb2NrZXQ6IFNlbnQgNTIvNTIgYnl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90 cmFuc3BvcnRfd3JpdGUgc2VuZCgpICg1MiBieXRlcykKMDAwMDogRkMgNUQgNDEgOUUgQzkg ODMgNjQgMDMgIEVEIEYwIDkwIDU3IEUzIEI1IDREIDk0IDogLl1BLi4uZC4uLi5XLi5NLgow MDEwOiBCOSBCRCAyQyA5NSAzNCA2MyA4MCBEQiAgMEQgNzkgQ0MgOTcgMTggNUIgMkEgOTMg OiAuLiwuNGMuLi55Li4uWyouCjAwMjA6IDZCIDhFIDREIDNGIEQzIEI3IEEwIDQ5ICA5MCAw MyBBQSBDMCBDQiAwMiA5OSAxRiA6IGsuTT8uLi5JLi4uLi4uLi4KMDAzMDogODMgNTcgM0Ug MjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLlc+JApbbGlic3No Ml0gMC41Njc0NzYgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpb bGlic3NoMl0gMC41Njc3MDIgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1 MDJjMzgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAw MDogOTMgRTMgM0YgOEQgNUIgN0UgMjAgNjMgIDA1IDg2IDI2IERCIDhCIDdGIDQ2IDA5IDog Li4/Llt+IGMuLiYuLi5GLgowMDEwOiA5RCAwNSA3MSA2OSBGRiBFQSBCQyBDRSAgNkMgNDUg MjYgMkEgOTggQTIgMTEgMTAgOiAuLnFpLi4uLmxFJiouLi4uCjAwMjA6IEFEIDJCIEY3IDY1 IDE5IEI0IDM5IEQ1ICBFNSA2QSA5MCBDNCA2QiBFRSA0RiAxNCA6IC4rLmUuLjkuLmouLmsu Ty4KMDAzMDogOEIgQ0YgMjMgNTYgQjQgNTQgRDggNUMgIEFBIEMwIDQ5IEM5IDdEIEFBIDhD IEIyIDogLi4jVi5ULlwuLkkufS4uLgowMDQwOiA3NiBENSA3OCBENiBDRSAzNiAwNSAyRiAg NzEgQjIgNkIgMEIgNzYgN0YgREIgNkMgOiB2LnguLjYuL3Euay52Li5sCjAwNTA6IDVBIDIw IDFGIEZFIDNEIDMzIDg2IEM3ICAgICAgICAgICAgICAgICAgICAgICAgICA6IFogLi49My4u Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIg MDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4K W2xpYnNzaDJdIDAuNTY3NzU5IFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwg bGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykK MDAwMDogMDYgMDAgMDAgMDAgMEMgNzMgNzMgNjggIDJEIDc1IDczIDY1IDcyIDYxIDc1IDc0 IDogLi4uLi5zc2gtdXNlcmF1dAowMDEwOiA2OCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBoCltsaWJzc2gyXSAwLjU2NzgwNyBUcmFuc3BvcnQ6 IFBhY2tldCB0eXBlIDYgcmVjZWl2ZWQsIGxlbmd0aD0xNwpbbGlic3NoMl0gMC41Njc4MTAg VHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNgpGaW5nZXJwcmludDog OEUgRkYgOUYgQUQgNTkgQkIgMjggMEQgQ0UgQkQgOTYgMUMgODAgNTYgN0IgM0EgREYgNjUg RkQgRDIgCltsaWJzc2gyXSAwLjU2Nzg1OCBVc2VyYXV0aDogQXR0ZW1wdGluZyB0byBsb2dp biB1c2luZyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93 cml0ZSBwbGFpbiAoNDMgYnl0ZXMpCjAwMDA6IDMyIDAwIDAwIDAwIDAzIDZEIDcxIDcxICAw MCAwMCAwMCAwRSA3MyA3MyA2OCAyRCA6IDIuLi4ubXFxLi4uLnNzaC0KMDAxMDogNjMgNkYg NkUgNkUgNjUgNjMgNzQgNjkgIDZGIDZFIDAwIDAwIDAwIDA4IDcwIDYxIDogY29ubmVjdGlv bi4uLi5wYQowMDIwOiA3MyA3MyA3NyA2RiA3MiA2NCAwMCAwMCAgMDAgMDAgMDcgICAgICAg ICAgICAgICAgOiBzc3dvcmQuLi4uLgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFp bjIgKDcgYnl0ZXMpCjAwMDA6IDZEIDcxIDcxIDMyIDMwIDMwIDM1ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IG1xcTIwMDUKW2xpYnNzaDJdIDAuNTY3OTY4IFNvY2tldDogU2Vu dCA4NC84NCBieXRlcyBhdCAweDUwNmM3OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBz ZW5kKCkgKDg0IGJ5dGVzKQowMDAwOiA3QSAzNSA0RSBEOCBFQSA2QyA3MSA1QiAgQ0UgREUg QzYgRDkgRDAgQUYgMDUgREQgOiB6NU4uLmxxWy4uLi4uLi4uCjAwMTA6IEU1IDE2IDlBIEUz IEI2IDdDIDJCIEIyICBGRiBFNiA4RCAyOSA2MyBCRCA1NSAxMSA6IC4uLi4ufCsuLi4uKWMu VS4KMDAyMDogN0QgN0IgNTQgQTMgQUEgQUQgNjkgRTMgIEQ3IDYyIEQ5IDVFIEMyIDcyIEUy IDczIDogfXtULi4uaS4uYi5eLnIucwowMDMwOiA3OSA1QyAyMyA2RCA5NyBFQSBBRiBENiAg Q0YgMjIgMDggQzEgNDggNzAgQUMgRDYgOiB5XCNtLi4uLi4iLi5IcC4uCjAwNDA6IENDIDNF IENFIEE2IDY5IEQ3IEE4IDFBICBEMSBGNSA4RiAxOCA0QSAyRCAzMiBFMCA6IC4+Li5pLi4u Li4uLkotMi4KMDA1MDogNDkgMEEgQzEgQTkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogSS4uLgpbbGlic3NoMl0gMC41Njc5ODkgVHJhbnNwb3J0OiBMb29raW5n IGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xpYnNzaDJdIDAuNTY3OTkyIFRyYW5zcG9ydDog TG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDUxCltsaWJzc2gyXSAwLjU2Nzk5NCBUcmFu c3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA2MApbbGlic3NoMl0gMC41Njc5 OTggRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZwpbbGlic3NoMl0g MC41NjkxNjMgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogNTIKW2xp YnNzaDJdIDAuNTY5MTY5IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6 IDUxCltsaWJzc2gyXSAwLjU2OTE3MiBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv ZiB0eXBlOiA2MApbbGlic3NoMl0gMC41NjkxNzcgU29ja2V0OiBSZWN2ZWQgMTA5Ni8xNjM4 NCBieXRlcyB0byAweDUwMmMzOCswCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcg KDEwOTYgYnl0ZXMpCjAwMDA6IEFEIDZEIDZEIDc3IDkwIEE5IDVDIDAwICAxQSBCQSBEQyBB RCBENSA5NiAyNCAzQSA6IC5tbXcuLlwuLi4uLi4uJDoKMDAxMDogQzAgODYgMEEgQ0IgQ0Ug OTggQjggQkIgIEE4IDI1IEU4IENBIDQ4IEExIDQ0IENGIDogLi4uLi4uLi4uJS4uSC5ELgow MDIwOiBGOCA5QiAzOCAwNCA3OSBCQiA4NyA2QyAgQ0IgQzggMTAgN0YgREUgNzQgQzAgNDIg OiAuLjgueS4ubC4uLi4udC5CCjAwMzA6IDk2IEYxIDlCIEUwIEQyIEY0IEVEIEJGICAzNiA1 QyA0NCBGMCA2MCA4QiBCRiA1RCA6IC4uLi4uLi4uNlxELmAuLl0KMDA0MDogQjQgOTQgMzQg OUUgMEIgMTcgM0EgREQgIDcwIEJEIEMxIDNFIDI4IDBCIDE1IDdBIDogLi40Li4uOi5wLi4+ KC4uegowMDUwOiAzMyBBQiAyRCBFMCAxRCA0RCA3NSBEQiAgN0MgMEUgM0EgQjcgNzggQ0Ig RTUgREUgOiAzLi0uLk11LnwuOi54Li4uCjAwNjA6IDNBIDIxIEQzIEM0IDQ3IDRFIEUxIDY1 ICA0QyA3RSBFNSBCRCBFMiBFOCA3QiBGQiA6IDohLi5HTi5lTH4uLi4uey4KMDA3MDogNzIg RkUgODcgNUQgM0QgQjIgQUQgODAgIDZGIEU4IEE1IEFGIEM5IDc5IDI1IEUwIDogci4uXT0u Li5vLi4uLnklLgowMDgwOiBFNCBGMyA5RiA4MCA5NSBFRCA4MSBCNyAgNEEgMDggRDkgNUMg ODIgMDggNDEgQkEgOiAuLi4uLi4uLkouLlwuLkEuCjAwOTA6IEZDIDE1IDhBIDg2IEM0IEQz IDVBIEU2ICA4OCA2OCBDRiBFMCA4QiBEMCBDRCBFNyA6IC4uLi4uLlouLmguLi4uLi4KMDBh MDogOEYgOUQgQzggMTggNzIgNTMgMDAgOTEgIDdGIENBIDVBIDkyIDEwIDM0IDc4IEM2IDog Li4uLnJTLi4uLlouLjR4LgowMGIwOiBBNSBCRSA1MSA2OCA0RiBBMSBGOSAyNSAgMjcgNTMg MDMgNDggQ0IgODYgQTMgQjAgOiAuLlFoTy4uJSdTLkguLi4uCjAwYzA6IDE4IEMxIEUwIDkz IDEzIDI5IDFBIEU1ICAyOSA1MyAyMyA1MCBBNiBFQyAyOSAwQiA6IC4uLi4uKS4uKVMjUC4u KS4KMDBkMDogODAgOEUgNTggOUUgNTIgRjUgM0IgMDkgIDBBIDkyIDM0IEMwIEQ5IEY2IDBB IENBIDogLi5YLlIuOy4uLjQuLi4uLgowMGUwOiBDMCA5QyBENiA4NCA2RCBEQSAzRCA0RiAg MUUgQTcgNTQgNzkgNzAgMDIgRkEgMDUgOiAuLi4ubS49Ty4uVHlwLi4uCjAwZjA6IEM3IDc2 IENCIDMxIDQzIEYyIEREIDI2ICAyNyBGOCBDRCA4OCAwQiAyMyBBOSA1OSA6IC52LjFDLi4m Jy4uLi4jLlkKMDEwMDogMzEgQzggNTggRDMgQkUgODUgQkUgRTcgIDVCIEJBIDBBIDhFIDE3 IENCIEM2IEU5IDogMS5YLi4uLi5bLi4uLi4uLgowMTEwOiBERiA1QiA2MiBGQSAzMiAxNyBD MiA4MiAgQTIgMUQgQTMgNjYgQzQgQjQgMTEgNzIgOiAuW2IuMi4uLi4uLmYuLi5yCjAxMjA6 IERDIEFCIEE4IEFDIDRGIEFCIENFIDRCICA2MSBCRCBCNCAyNCA3QSBDRiBGOCBFOCA6IC4u Li5PLi5LYS4uJHouLi4KMDEzMDogQTIgQTYgREYgNzAgRkMgMzggQkMgM0IgIDE3IDUzIDgw IDBGIDQyIDI4IDQ4IDI5IDogLi4ucC44LjsuUy4uQihIKQowMTQwOiA0OCAxNCA5QiA0MSBC MiA2MCAyRiBGQiAgNDcgNzUgRTcgNjggMUIgMTMgM0UgQjIgOiBILi5BLmAvLkd1LmguLj4u CjAxNTA6IEJFIDVBIDFEIEM1IDZCIDU0IEFDIEQyICA0QyBFNSAyMSA4OCBFRSBFQyA5NyA4 RCA6IC5aLi5rVC4uTC4hLi4uLi4KMDE2MDogNzIgOTEgODcgRDQgNUYgRTIgMUEgRDMgIDE2 IDhFIDJEIENEIDhEIERFIEYxIDkzIDogci4uLl8uLi4uLi0uLi4uLgowMTcwOiAwMSA2MiBF RCA4OCBDNiBGOSBEQiA1NCAgNEEgQkUgRDUgQkMgRDEgRDggRTYgOTAgOiAuYi4uLi4uVEou Li4uLi4uCjAxODA6IDM5IEJCIDNDIDVCIEI3IEJGIDVDIEU0ICAzQiA0OCAxNiBDRSBDMCA5 MCBCRCBBRCA6IDkuPFsuLlwuO0guLi4uLi4KMDE5MDogOUMgRTQgOTIgRTAgRDkgOTIgODUg MjIgIEQ4IDc4IEFBIEU0IEVBIDI2IDQ1IEZCIDogLi4uLi4uLiIueC4uLiZFLgowMWEwOiAy QSBBOCAyMyBBNSBDRCAxMSAxQiBENCAgOUMgRDYgNUMgNjIgQzQgMzYgOTMgNUEgOiAqLiMu Li4uLi4uXGIuNi5aCjAxYjA6IDBEIDkzIDc5IEMyIDhFIDE5IEM2IDMxICAxNCBENCBCNyBC NyAyOSBBNyBDQyA4NyA6IC4ueS4uLi4xLi4uLikuLi4KMDFjMDogMkIgOUIgN0EgRUUgNzMg QTMgMUQgRTIgIDM2IDRCIDgzIEVGIDAxIEVCIEYxIEZGIDogKy56LnMuLi42Sy4uLi4uLgow MWQwOiAzNyA4MCA5OSAyQyAyMSA3NyBCRSBCMyAgQjMgODcgOTQgMjAgMEQgQzAgREQgOUIg OiA3Li4sIXcuLi4uLiAuLi4uCjAxZTA6IDFDIEY4IEY2IERGIDBFIDlGIEIxIEYwICBBRCA5 QSA3QyAyMiAyMSAyRiBFNiA4QyA6IC4uLi4uLi4uLi58IiEvLi4KMDFmMDogMTcgMzEgRUMg M0YgMkUgNzMgNkMgMTIgIDdCIDY1IDE3IDM5IDFCIDkyIDY2IDk5IDogLjEuPy5zbC57ZS45 Li5mLgowMjAwOiA4RiA5NyA4MiA2MiBDMCA0NyBFMCA1OSAgNTcgMTMgMjAgMUIgNjIgRjIg NDggMTEgOiAuLi5iLkcuWVcuIC5iLkguCjAyMTA6IEJFIDI1IDZGIDhFIERCIEVDIDg2IDY4 ICBCMSBFQiBCMSA5QyA0OCA4OSAwNSBCMiA6IC4lby4uLi5oLi4uLkguLi4KMDIyMDogNkYg QkQgNzEgOTAgNkQgODggM0YgOTIgIERDIDFDIDMzIDY4IDM5IDhCIDdGIDczIDogby5xLm0u Py4uLjNoOS4ucwowMjMwOiBFRSBBOCAyNyAyRiAwQyAxRiA2QyA3OCAgNEMgM0IgNEQgRjEg RjYgQjcgMEIgQUYgOiAuLicvLi5seEw7TS4uLi4uCjAyNDA6IEUzIDlBIDM5IDNBIENFIDZE IEQ1IEEwICBGOSBGMyA3RSBENSA5RSBGMCBBNyBGNyA6IC4uOToubS4uLi5+Li4uLi4KMDI1 MDogOEEgQUYgRUMgOUEgMzMgRTAgMTkgNUEgIDc4IDNFIEVGIDFEIDYyIDU2IDc4IDg3IDog Li4uLjMuLlp4Pi4uYlZ4LgowMjYwOiAwRSA1OCBGOCBDNSA0MiA0QyA0OCBBQiAgQTMgMDMg RjkgRDEgRkEgQjAgQTggREUgOiAuWC4uQkxILi4uLi4uLi4uCjAyNzA6IEY3IDUyIERDIEY2 IDhBIDNFIDQzIDE1ICAzRSA1QiBFRCBFMiBFMSA2RCA4QiBFQyA6IC5SLi4uPkMuPlsuLi5t Li4KMDI4MDogODAgRTcgQTUgMDkgMjMgMEQgNzggRjcgIEFCIENFIDhDIDAwIEUwIDY2IDQ0 IEJGIDogLi4uLiMueC4uLi4uLmZELgowMjkwOiAzNCBBNiAyMyAyRCBBNSBFNyAxOSBCRiAg RkYgRjAgMTQgRUYgNjkgQzQgMkUgOUQgOiA0LiMtLi4uLi4uLi5pLi4uCjAyYTA6IDAzIEM5 IDY4IDAyIDhFIEJDIDgzIDE4ICA3QyBDRSA1QyA3OCA2MiAyRiBENCBBQiA6IC4uaC4uLi4u fC5ceGIvLi4KMDJiMDogQjUgQjkgREUgNzUgNzIgRDcgMTkgNzkgIEJBIDlEIEM4IERFIDA5 IEU3IEVGIEQ1IDogLi4udXIuLnkuLi4uLi4uLgowMmMwOiBERSA0OSA0NiBGRiAzMCBFQyA1 NyBBQiAgMjQgNUUgQzEgMzMgMTUgODkgNDAgNzcgOiAuSUYuMC5XLiReLjMuLkB3CjAyZDA6 IDlDIDAwIEM2IDhFIDkwIDY5IDgwIDJGICA1OSA5MSA0QSA3NSAwQSBDQiAyQSBGQSA6IC4u Li4uaS4vWS5KdS4uKi4KMDJlMDogM0IgOTYgN0UgOUEgOTUgQ0QgMzAgNzkgIDlFIDlBIDE0 IDY0IEY5IEM1IDE4IDNCIDogOy5+Li4uMHkuLi5kLi4uOwowMmYwOiBDQiBCMSBCNiA3MiBF NSA2MSAzNCBEOCAgNjkgQzkgMzIgMTAgRTQgOTggQzAgMUUgOiAuLi5yLmE0LmkuMi4uLi4u CjAzMDA6IDk4IDREIDI5IDQ5IDZEIEFDIEFFIDk4ICBGMiA1RSAwRCBBOSA2OSA4MiA2QiA1 QSA6IC5NKUltLi4uLl4uLmkua1oKMDMxMDogNEIgNTQgRDEgMkUgOUMgRTIgQzggMjggIDdB IEJCIEM3IDFGIEE4IDIxIDY4IDVDIDogS1QuLi4uLih6Li4uLiFoXAowMzIwOiA1RiA0NCA4 QiBFMCA5NiBDMCA3OSBENiAgRDcgOEIgOEQgODAgNEYgMzIgNkEgODkgOiBfRC4uLi55Li4u Li5PMmouCjAzMzA6IDQzIERGIDZFIDIwIDAwIDg1IDIxIDVFICBFNCA4OCBEQiBBMiBFQSA2 OSBGMSA3NyA6IEMubiAuLiFeLi4uLi5pLncKMDM0MDogMDUgRTggNzUgNzYgQTMgOUUgNjUg RUEgIEEwIDNFIDVEIDFDIDI4IDAxIDEzIDVGIDogLi51di4uZS4uPl0uKC4uXwowMzUwOiA1 QyA5QSBDOSBGMiA1RCA3MiA4QSBDNCAgMUMgNTQgRDggQ0YgOEMgNUMgRjQgRDMgOiBcLi4u XXIuLi5ULi4uXC4uCjAzNjA6IDIyIDNDIEJDIEQzIDc5IEQ3IEQ1IEEyICA0QiA1NCBCMyAx NSA0NyAyMSBFNCAwMyA6ICI8Li55Li4uS1QuLkchLi4KMDM3MDogNTYgNEUgM0QgRUIgNkIg M0QgQ0MgMjQgIDBBIDEzIEI4IDk5IDcwIDM3IDRGIEVFIDogVk49Lms9LiQuLi4ucDdPLgow MzgwOiBBOSAyOSBEOSBGMSA4MiA1MyBDQSBCMSAgNzEgOUEgODkgNjUgRTggNDEgNjkgMDUg OiAuKS4uLlMuLnEuLmUuQWkuCjAzOTA6IEMwIEM0IDc1IDk5IEEyIDdDIDM1IDAyICBFNCBC RiAzQyAzMyBBNCAzMCBDQSBGMyA6IC4udS4ufDUuLi48My4wLi4KMDNhMDogOUEgQzIgMjIg RDIgOEYgNDMgQjMgNzAgIDhGIEJDIDgyIEE0IDc1IDREIDgwIDNEIDogLi4iLi5DLnAuLi4u dU0uPQowM2IwOiA5OSA0NiA3QSA5MSAxMiA1QyAzQyAxQyAgRjEgMDMgODQgRkUgNkUgN0Mg OUQgNEYgOiAuRnouLlw8Li4uLi5ufC5PCjAzYzA6IDY1IDg2IDY5IDQ0IDU3IEUxIEFGIDhG ICA1MyBCQiBDMyA1OCA0RSA1MSA4MCAxOSA6IGUuaURXLi4uUy4uWE5RLi4KMDNkMDogNjgg OTUgQkEgNDEgMjIgNDcgMkEgNTMgIDE4IDZBIDdBIDhGIEZBIDAzIDEyIDJDIDogaC4uQSJH KlMuanouLi4uLAowM2UwOiA3NCA3RCA2RCBFNCA4NiA0RCAwQiA0MSAgMjUgMjggQzUgOTAg RDggMjUgMDkgN0MgOiB0fW0uLk0uQSUoLi4uJS58CjAzZjA6IDY4IEI0IEE4IDE5IEVGIEZC IDBCIDgyICAzNCA0MiAzNyA1QiBENCA1MCAyOSBFRCA6IGguLi4uLi4uNEI3Wy5QKS4KMDQw MDogMzMgNjMgRkUgNjggODAgOUQgOTkgNjggIDhFIEVGIEMyIDNFIEEzIEE5IDBBIERDIDog M2MuaC4uLmguLi4+Li4uLgowNDEwOiA4NSBDMyAzNiBBNiA5NCA1RiAxNyAzQyAgNzIgODgg MjIgOEYgNUQgQjggRjUgNTkgOiAuLjYuLl8uPHIuIi5dLi5ZCjA0MjA6IEJEIDVEIDU2IDRF IDE3IERGIDQwIDBDICBGQyAzRSA4MCBCNiA3OCBDMyAwQSBDRiA6IC5dVk4uLkAuLj4uLngu Li4KMDQzMDogMzMgNEEgODcgMTQgOTUgMjcgODUgQTAgIEYwIDQzIDc5IDZCIDA1IDY2IDgy IEI0IDogM0ouLi4nLi4uQ3lrLmYuLgowNDQwOiA5MCA2MyBGMSA0MyAzRSBBQyAyNiBFMSAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAuYy5DPi4mLgo9PiBsaWJzc2gyX3RyYW5zcG9y dF9yZWFkKCkgcGxhaW4gKDEwMjggYnl0ZXMpCjAwMDA6IDAyIDAwIDAwIDAzIEZGIDE3IEFF IDkyICBDNCBFNSAwRSAxRCBDMCBFQSBEOCA0MSA6IC4uLi4uLi4uLi4uLi4uLkEKMDAxMDog NzEgQjIgNTQgQzYgREMgRjkgQzAgREEgIDUzIDE0IDMyIDUzIEFCIDExIEMyIDlFIDogcS5U Li4uLi5TLjJTLi4uLgowMDIwOiBBMiA0OCBBNSBCRSBBOCBDRSBDRCA1NSAgNEYgRjggNzkg REMgRTIgREQgRTQgQjMgOiAuSC4uLi4uVU8ueS4uLi4uCjAwMzA6IEE2IERCIDFEIDUxIEU3 IDA5IDEyIDZDICA3NyA4QiBBMyA3QiA4QiA4NyAyMiBFOCA6IC4uLlEuLi5sdy4uey4uIi4K MDA0MDogNTQgODIgRUIgRkUgMjkgOTYgNDEgMUUgIDIyIEQxIDY2IEEzIDRCIEU1IDYzIEU2 IDogVC4uLikuQS4iLmYuSy5jLgowMDUwOiAzQSAwRCAzMCAyQSA3NiAzNyBFRSBGRCAgMjcg RUYgNkQgQUEgOEQgQUMgRjkgOEEgOiA6LjAqdjcuLicubS4uLi4uCjAwNjA6IDBEIEM2IDM5 IDkzIEVEIEVGIEUwIEI0ICBGNCBBMiBCNSBGMSA4NSA0RiA5OSA0QiA6IC4uOS4uLi4uLi4u Li5PLksKMDA3MDogNzMgMDIgRkEgRTMgOTQgNjAgNkUgQkEgIDlFIDBFIDU4IDJDIDYyIDAx IDNFIDBCIDogcy4uLi5gbi4uLlgsYi4+LgowMDgwOiAxNyA1MSA2RSA0QyBEOSAzQyA1NSA4 RiAgMEIgRUUgQzMgRjEgQzEgQjUgQTEgNTcgOiAuUW5MLjxVLi4uLi4uLi5XCjAwOTA6IDQz IDVCIDU1IDI2IEJGIDdBIDk2IDU0ICBEMiBFMSA5MiBBRiBCMCBGOSBDMyBFQSA6IENbVSYu ei5ULi4uLi4uLi4KMDBhMDogNUIgN0MgMUYgQkMgRUMgRTIgQTQgMUMgIDY1IDcyIDNCIDY0 IEM0IEM3IDU1IDA5IDogW3wuLi4uLi5lcjtkLi5VLgowMGIwOiBFMCA4NyBCMyBCQyA4MCA3 NCA0NCAyNiAgQTcgRUMgREQgMTcgMEYgNEYgQkUgQjYgOiAuLi4uLnREJi4uLi4uTy4uCjAw YzA6IDQ1IDAzIEQ3IEIyIEI4IEJDIDlDIDYwICBGNiBEOSA1RiAzNCAyMCBFQSBGMyBBRiA6 IEUuLi4uLi5gLi5fNCAuLi4KMDBkMDogMjcgNzggNUIgODcgODIgRDIgMzQgMDIgIDVDIDFF IDE3IEM0IEZEIEFGIDUyIDUyIDogJ3hbLi4uNC5cLi4uLi5SUgowMGUwOiAwMiBCQiBGNyBE QSBDQSA2MSBENyAzQiAgREUgREQgNTAgM0EgREIgRjkgQjQgNTQgOiAuLi4uLmEuOy4uUDou Li5UCjAwZjA6IDcwIDM1IDNCIDMzIEFCIEYyIEQ0IENFICBDOSAwOSAwQSA1OCBFOCAzMiAw QiBBMyA6IHA1OzMuLi4uLi4uWC4yLi4KMDEwMDogMEUgMUUgQ0QgNzkgQjUgN0MgOTQgRjMg IEFBIEFBIDdCIDhCIDI3IDQ2IEExIDg2IDogLi4ueS58Li4uLnsuJ0YuLgowMTEwOiA1OSA4 NSAwRSBGMiBERiAyRCBDMyA4QiAgNzEgODUgOTUgOEMgRUUgM0UgMUQgQzAgOiBZLi4uLi0u LnEuLi4uPi4uCjAxMjA6IDFBIEM0IDk5IDcxIEUyIDI2IDhDIEU4ICA5NiA3RiA5MiA0NiA0 OSA2OCA1QiBBMiA6IC4uLnEuJi4uLi4uRkloWy4KMDEzMDogNzkgNDMgQjAgMTEgMUIgNTMg ODMgNEQgIDVCIEEwIEJDIDA2IDJFIEExIEY3IDQ2IDogeUMuLi5TLk1bLi4uLi4uRgowMTQw OiA2RSA0MCA2RiAzMCAyMyA0NSBBQiA5RiAgQkYgNDIgNjUgNkMgNTggOEQgM0YgQzYgOiBu QG8wI0UuLi5CZWxYLj8uCjAxNTA6IDcyIEIyIDI2IDA4IEJGIDgzIDg2IEVFICBGQSBENCA0 NiAwRiBEMSBBMCA2MSA4MyA6IHIuJi4uLi4uLi5GLi4uYS4KMDE2MDogRkMgRTYgRDYgMTkg RkYgMjUgOUMgMkUgIDkyIDVFIDg5IDYzIDM5IDg1IERFIDI2IDogLi4uLi4lLi4uXi5jOS4u JgowMTcwOiA3RiAwQSBCOSAyMiA1NCAyRSBCOSA3OSAgRDUgQzYgMjggNTQgNjEgRjkgNTgg MzAgOiAuLi4iVC4ueS4uKFRhLlgwCjAxODA6IDBBIEQxIEM4IENBIDk2IDdDIEZDIDVCICAw MCAxQSA4MyAyMiA0RCA0OCAzMyBGOSA6IC4uLi4ufC5bLi4uIk1IMy4KMDE5MDogODYgREEg ODUgNDEgQzYgMjcgMDggM0UgIEY2IDE1IENGIDU2IDY4IEE3IDFGIDFGIDogLi4uQS4nLj4u Li5WaC4uLgowMWEwOiBENiAwMiA4NCBDNCBCNyA5QiBCMCA1NiAgNjcgNzcgRkEgMjkgOUMg QUIgOTQgRTcgOiAuLi4uLi4uVmd3LikuLi4uCjAxYjA6IDYxIDU4IDQzIDJDIEMyIDdCIEZE IDRDICBERSBBOSA4RiA0MyA2RiBDMSA4QSA5NyA6IGFYQywuey5MLi4uQ28uLi4KMDFjMDog NEQgOTMgRTIgMjggNUUgNzUgREIgOEEgIEI0IEI3IEJFIDFGIDA5IEIzIDYzIDhCIDogTS4u KF51Li4uLi4uLi5jLgowMWQwOiA1MCA2QyA3MCBFQiA5QiAxMiBDMSBCNiAgM0IgNEIgQjYg MEUgMDUgQzkgQjggM0MgOiBQbHAuLi4uLjtLLi4uLi48CjAxZTA6IEUzIDI5IDZBIDAxIEE0 IEE5IDcxIDEyICBBNiA0NyBGMyA4OSBCMSA2OCA0OCAxNiA6IC4pai4uLnEuLkcuLi5oSC4K MDFmMDogQzggMUMgQ0EgNEEgNTkgMTAgRDQgMkEgIDE5IDk4IDM4IDc1IDY1IDgxIEI3IEFC IDogLi4uSlkuLiouLjh1ZS4uLgowMjAwOiAyMCA4NyA2OCA4RiBFMCA1NiBGQiAyNyAgRDMg MEEgQ0YgRkQgRDggODQgNkQgODYgOiAgLmguLlYuJy4uLi4uLm0uCjAyMTA6IEE3IDU5IDY0 IDZBIDA2IEE0IDEwIEJCICBENSA1OSA0MCAwMiAxQyAzRiA5NiA3QiA6IC5ZZGouLi4uLllA Li4/LnsKMDIyMDogQ0UgOTIgOTggRjggNEIgRTcgMDEgQkIgIDdCIDlDIEQ3IDFGIEVBIDA5 IDI3IDVDIDogLi4uLksuLi57Li4uLi4nXAowMjMwOiA1RiBGOCA1RSBGRiAyOCBGQiA0NCAz RSAgQzMgMTcgN0YgNUQgRDEgMkUgMEYgOEYgOiBfLl4uKC5EPi4uLl0uLi4uCjAyNDA6IEMx IEZGIDRBIDg5IDdEIEVBIDBCIEMyICBEQyBCNiA5NiA0RiBGNSBBNyA3NSBDRSA6IC4uSi59 Li4uLi4uTy4udS4KMDI1MDogQkIgNUMgQzIgQ0EgNDggMEEgRkQgQ0YgIDRGIEU3IDJDIDY4 IEJCIEQzIDYyIDREIDogLlwuLkguLi5PLixoLi5iTQowMjYwOiA1QyAzRSBEMiBCOCBFRCA1 OSA2NyAwMyAgRjkgMjQgQjEgNDUgQjcgQzUgNjEgNUQgOiBcPi4uLllnLi4kLkUuLmFdCjAy NzA6IDAzIERFIDMyIDE4IEJCIEY4IDg0IDg1ICA1NiA3NyBDOCBEQyA2MiAzNSBGMyA1RSA6 IC4uMi4uLi4uVncuLmI1Ll4KMDI4MDogMjAgQjQgNjYgRjUgRDggNjggMzggQ0QgIEVDIDE3 IERFIDFDIERGIEZEIEIyIEMxIDogIC5mLi5oOC4uLi4uLi4uLgowMjkwOiBCMSA0RiAzMyA4 RSBGMCBFMiBFNiBCRSAgRjAgNzkgMjkgMTggOEUgMkMgNTMgMTMgOiAuTzMuLi4uLi55KS4u LFMuCjAyYTA6IEU5IDE3IEE2IEY2IDYxIEEwIDZFIDQ1ICBCNSBFNCAzNCBDRiA2MCAzNCA3 MiBFOCA6IC4uLi5hLm5FLi40LmA0ci4KMDJiMDogQUIgOUYgQUQgOTEgRTEgRjQgQzYgNDkg IDVDIEQ1IEMzIERCIDREIEI0IDk0IDY2IDogLi4uLi4uLklcLi4uTS4uZgowMmMwOiA4MSAy QSBDOCAxMyBGQiAzNCBFNyA5QyAgN0UgNjggN0IgNjkgRDggQkYgQTEgQTMgOiAuKi4uLjQu Ln5oe2kuLi4uCjAyZDA6IDAwIDczIEU1IDAwIEJGIDMwIDg2IDE4ICA3NyA1QyA3RSAwNyBD RiA3NCBFNSAwMCA6IC5zLi4uMC4ud1x+Li50Li4KMDJlMDogMUYgQUIgQjcgQzMgQTggNjMg NjMgNzYgIEUwIDMwIEVFIEZEIEM5IEM1IDc0IDc4IDogLi4uLi5jY3YuMC4uLi50eAowMmYw OiA2RSAxNCBCNCA0OCBERiAwMyAwNSA0QSAgQzAgOUIgNzAgNjIgRDUgRkEgMzkgMUYgOiBu Li5ILi4uSi4ucGIuLjkuCjAzMDA6IEU2IEZGIDA5IEY4IDcxIDMwIEI0IDQ1ICAxOCBCQyBF RiA5NiAxOSAyOSA2OSBDQSA6IC4uLi5xMC5FLi4uLi4paS4KMDMxMDogMkUgMTQgODAgMkIg MEMgNTQgQTkgMDEgIDk0IDU4IDYzIDdCIDU0IDhDIDAxIDg1IDogLi4uKy5ULi4uWGN7VC4u LgowMzIwOiA5MCA2RiBGNiA1RCBFMSA2MiA0MiA3RSAgRTcgRjEgMEYgQ0EgRDYgRTUgRjIg QzUgOiAuby5dLmJCfi4uLi4uLi4uCjAzMzA6IDVFIEM4IDMzIDMxIEU5IEEyIDMxIEIyICA4 OCA4MyA5QiA3NCBCRiBFOSBCMyAwQiA6IF4uMzEuLjEuLi4udC4uLi4KMDM0MDogRkYgOUQg MUIgODAgRDcgMTYgNDEgRUYgIDVEIEUxIEZCIEE3IEIyIDg3IDYzIDMwIDogLi4uLi4uQS5d Li4uLi5jMAowMzUwOiA1MyA4MyAzMCBGQSBBMCA1RSBGOCBFQiAgNkIgMDMgQTIgNDggMTQg MDUgMTkgRjYgOiBTLjAuLl4uLmsuLkguLi4uCjAzNjA6IENDIEU3IDFEIDAzIDQyIENFIEJD IDQ4ICAwMCAxQyA2NCA0QSA3RiBFMiA2OCBFMCA6IC4uLi5CLi5ILi5kSi4uaC4KMDM3MDog OTcgQkQgMzggN0EgQjQgNkYgRDYgNDUgIEU2IDE0IENFIERBIEJDIDBGIDU0IEVGIDogLi44 ei5vLkUuLi4uLi5ULgowMzgwOiAzOCAzOCA3MiA2NSA0OSBGQSA5RCBEOSAgMkYgMUEgMTAg REIgQTEgQ0YgMDkgMTAgOiA4OHJlSS4uLi8uLi4uLi4uCjAzOTA6IEJEIEI5IDhDIDNFIDE2 IEMyIDI0IENDICA0QiA1QSAzQiAzRCBBQyAxMCAxRiA4QiA6IC4uLj4uLiQuS1o7PS4uLi4K MDNhMDogRUIgNTEgNEIgMjcgRjUgMzYgMkIgRTEgIDE2IDhCIDVCIDZDIENBIDMwIEM3IEIz IDogLlFLJy42Ky4uLltsLjAuLgowM2IwOiA4QiAxQSA2RCBCRCA0RiAyMyA5MiBGMCAgMUEg ODEgOEEgRDkgMjUgOUQgRDYgQzEgOiAuLm0uTyMuLi4uLi4lLi4uCjAzYzA6IDI5IDBBIEFD IDVGIDlCIDZDIEQ1IDAzICBCNiBDMCAxNyBGNyA4NSAwMiAyNSA5NCA6ICkuLl8ubC4uLi4u Li4uJS4KMDNkMDogRkEgNDggNDEgQTEgRjMgMDAgMTUgNEEgIEQ5IDlCIDcwIEU0IEM3IDVD IEVFIDQ1IDogLkhBLi4uLkouLnAuLlwuRQowM2UwOiBDRCA1NiBEOCBBRiA0MyAyMiA1NiA5 MSAgMTQgMzUgQjMgRDEgMEQgMUEgQ0UgRkUgOiAuVi4uQyJWLi41Li4uLi4uCjAzZjA6IDEx IDM5IEQ4IEFEIENEIDdBIDZCIDY0ICBBMCBDNiA5RSBDOCA4RiA4NyA0NyAwQSA6IC45Li4u emtkLi4uLi4uRy4KMDQwMDogRjQgQTYgNUUgRDIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogLi5eLgpbbGlic3NoMl0gMC41Njk1NzcgVHJhbnNwb3J0OiBQYWNr ZXQgdHlwZSAyIHJlY2VpdmVkLCBsZW5ndGg9MTAyOAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9y ZWFkKCkgcGxhaW4gKDEgYnl0ZXMpCjAwMDA6IDM0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IDQKW2xpYnNzaDJdIDAuNTY5NjE3IFRyYW5zcG9y dDogUGFja2V0IHR5cGUgNTIgcmVjZWl2ZWQsIGxlbmd0aD0xCltsaWJzc2gyXSAwLjU2OTYy MSBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA1MgpbbGlic3NoMl0g MC41Njk2MjQgVXNlcmF1dGg6IFBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwK W2xpYnNzaDJdIDAuNTY5NjMzIFNDUDogT3BlbmluZyBjaGFubmVsIGZvciBTQ1AgcmVjZWl2 ZQpbbGlic3NoMl0gMC41Njk2MzYgQ29ubjogQWxsb2NhdGVkIG5ldyBjaGFubmVsIElEIzAK W2xpYnNzaDJdIDAuNTY5NjM4IENvbm46IE9wZW5pbmcgQ2hhbm5lbCAtIHdpbiAyNjIxNDQg cGFjayAzMjc2OAo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMjQgYnl0ZXMp CjAwMDA6IDVBIDAwIDAwIDAwIDA3IDczIDY1IDczICA3MyA2OSA2RiA2RSAwMCAwMCAwMCAw MCA6IFouLi4uc2Vzc2lvbi4uLi4KMDAxMDogMDAgMDQgMDAgMDAgMDAgMDAgODAgMDAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4uLi4KW2xpYnNzaDJdIDAuNTY5NzQxIFNv Y2tldDogU2VudCA2OC82OCBieXRlcyBhdCAweDUwNmM3OAo9PiBsaWJzc2gyX3RyYW5zcG9y dF93cml0ZSBzZW5kKCkgKDY4IGJ5dGVzKQowMDAwOiBERSAzMSA2QSA3OSBDQiAxQSA1RSAy NiAgRUIgOEYgNjIgNDYgNkYgNUMgOEYgOTMgOiAuMWp5Li5eJi4uYkZvXC4uCjAwMTA6IEJB IDhEIDVCIDkxIDY2IDMxIEMwIDlBICAyRCBCMCA2QyBGNyBCMiAzOCBENCA1MCA6IC4uWy5m MS4uLS5sLi44LlAKMDAyMDogQjIgMzQgOEIgRTAgNUYgRDMgQTcgQTkgIDNFIDU3IDBGIDUx IDM0IDc2IDgwIEE4IDogLjQuLl8uLi4+Vy5RNHYuLgowMDMwOiAxRiBCRCA0MCA2MCA4OSAy NiBBRCBGNiAgOEIgRDcgRUYgNEEgMDggQTQgNDggQzggOiAuLkBgLiYuLi4uLkouLkguCjAw NDA6IEZEIDE1IDE5IERBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IC4uLi4KW2xpYnNzaDJdIDAuNTY5NzYwIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0 IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjU2OTc2MiBUcmFuc3BvcnQ6IExvb2tpbmcgZm9y IHBhY2tldCBvZiB0eXBlOiA5MgpbbGlic3NoMl0gMC41Njk3NjYgRmFpbHVyZSBFdmVudDog LTM3IC0gV291bGQgYmxvY2sKW2xpYnNzaDJdIDAuNTY5NzcxIEZhaWx1cmUgRXZlbnQ6IC0z NyAtIFdvdWxkIGJsb2NrIHN0YXJ0aW5nIHVwIGNoYW5uZWwKW2xpYnNzaDJdIDAuNTY5OTg4 IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAw LjU2OTk5NCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5MgpbbGli c3NoMl0gMC41Njk5OTkgU29ja2V0OiBSZWN2ZWQgODgvMTYzODQgYnl0ZXMgdG8gMHg1MDJj MzgrMAo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICg4OCBieXRlcykKMDAwMDog OTcgMzkgQTUgOUQgMEEgQjAgRDYgRUUgIDRFIDlFIEI0IDdFIDk1IEY1IDk0IDJEIDogLjku Li4uLi5OLi5+Li4uLQowMDEwOiA4NyAwNyBGOSA3MSA3RiBEOSA3NCA1NCAgQkQgRkQgNUEg QzggOTkgOUMgM0QgMjAgOiAuLi5xLi50VC4uWi4uLj0gCjAwMjA6IEQzIEIwIDZBIEYxIEIy IDI0IEY5IEY1ICA3NyA2NyBGOSBDRCAzMCAwOCA4RCA5RiA6IC4uai4uJC4ud2cuLjAuLi4K MDAzMDogMkEgRDggQTcgQkUgQzAgQTUgRDQgMDIgIEI2IEYzIEM4IDRCIEM4IDMyIDRBIDgz IDogKi4uLi4uLi4uLi5LLjJKLgowMDQwOiAyMCA4MCAzRCBBRiBCMCA2NSAyQiA3RiAgMzQg RDIgRjYgMTYgQzIgQTkgRjkgMzIgOiAgLj0uLmUrLjQuLi4uLi4yCjAwNTA6IEQ0IDI2IDNB IERDIEMwIEFDIDhCIDE0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4mOi4uLi4uCj0+ IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAg MDAgMDAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi4uLi4KW2xp YnNzaDJdIDAuNTcwMDQwIFRyYW5zcG9ydDogUGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVu Z3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICgxNyBieXRlcykKMDAw MDogNUIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAxIDg2IEEwIDAwIDAwIDgwIDog Wy4uLi4uLi4uLi4uLi4uLgowMDEwOiAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAuCltsaWJzc2gyXSAwLjU3MDA4MiBUcmFuc3BvcnQ6IFBh Y2tldCB0eXBlIDkxIHJlY2VpdmVkLCBsZW5ndGg9MTcKW2xpYnNzaDJdIDAuNTcwMDg2IFRy YW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDkxCltsaWJzc2gyXSAwLjU3 MDA4OCBDb25uOiBDb25uZWN0aW9uIEVzdGFibGlzaGVkIC0gSUQ6IDAvMCB3aW46IDEwMDAw MC8yNjIxNDQgcGFjazogMzI3NjgvMzI3NjgKW2xpYnNzaDJdIDAuNTcwMDk0IENvbm46IHN0 YXJ0aW5nIHJlcXVlc3QoZXhlYykgb24gY2hhbm5lbCAwLzAsIG1lc3NhZ2U9c2NwIC1wZiAn L3RtcC9URVNUJwo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMTggYnl0ZXMp CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwNCA2NSA3OCA2NSA2MyAwMSAwMCAw MCA6IGIuLi4uLi4uLmV4ZWMuLi4KMDAxMDogMDAgMjYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogLiYKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUg cGxhaW4yICgzOCBieXRlcykKMDAwMDogNzMgNjMgNzAgMjAgMkQgNzAgNjYgMjAgIDI3IDJG IDc0IDZEIDcwIDJGIDU0IDQ1IDogc2NwIC1wZiAnL3RtcC9URQowMDEwOiA1MyA1NCAyNyAw MCA2NiA4MiBCNCA5MCAgNjMgRjEgNDMgM0UgQUMgMjYgRTEgMDAgOiBTVCcuZi4uLmMuQz4u Ji4uCjAwMjA6IDExIDAwIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IC4uLi4uLgpbbGlic3NoMl0gMC41NzAyMTIgU29ja2V0OiBTZW50IDEwMC8xMDAg Ynl0ZXMgYXQgMHg1MDZjNzgKPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2VuZCgpICgx MDAgYnl0ZXMpCjAwMDA6IEEwIDFFIDAxIENCIDZGIENDIDk4IDkzICBCMyAyQSAyOCBGQiBG NCBFNCA1RiAyQSA6IC4uLi5vLi4uLiooLi4uXyoKMDAxMDogQkEgM0IgNUEgODggQTggOTgg MUMgMjUgIDMxIDkzIDY4IEEzIENFIEE3IDAwIDFGIDogLjtaLi4uLiUxLmguLi4uLgowMDIw OiAwQSA0QyBDNCA4NCA3NCA0MiAzNSA4MCAgNEIgQzIgMDUgRTkgQjkgNUEgQTMgMDcgOiAu TC4udEI1LksuLi4uWi4uCjAwMzA6IDU3IEVBIEM3IEZGIEFBIEYwIDA0IDlGICBFQyBDQSAy QSA0MiA0RCBBRSAxMCA4RSA6IFcuLi4uLi4uLi4qQk0uLi4KMDA0MDogRDQgRDggRjkgMjEg QUMgNUEgMUEgM0IgIDdEIEQ4IENCIDBEIDBGIEJGIERCIDI3IDogLi4uIS5aLjt9Li4uLi4u JwowMDUwOiBBNiBGQiBFQiAwNyAxNCBGMSA3RCBBQSAgODUgNjIgNEIgOTcgODMgRDUgOUIg NjggOiAuLi4uLi59Li5iSy4uLi5oCjAwNjA6IEY0IEIwIDJCIDZCICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IC4uK2sKW2xpYnNzaDJdIDAuNTcwMjM2IFRyYW5z cG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjU3MDIz OCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJd IDAuNTcwMjQyIEZhaWx1cmUgRXZlbnQ6IC0zNyAtIFdvdWxkIGJsb2NrIHJlcXVlc3Rpbmcg U0NQIHN0YXJ0dXAKW2xpYnNzaDJdIDAuNTcxMTMxIFRyYW5zcG9ydDogTG9va2luZyBmb3Ig cGFja2V0IG9mIHR5cGU6IDk5CltsaWJzc2gyXSAwLjU3MTEzNiBUcmFuc3BvcnQ6IExvb2tp bmcgZm9yIHBhY2tldCBvZiB0eXBlOiAxMDAKW2xpYnNzaDJdIDAuNTcxMTQxIFNvY2tldDog UmVjdmVkIDcyLzE2Mzg0IGJ5dGVzIHRvIDB4NTAyYzM4KzAKPT4gbGlic3NoMl90cmFuc3Bv cnRfcmVhZCgpIHJhdyAoNzIgYnl0ZXMpCjAwMDA6IEYyIDVGIEFDIERCIDY0IEEyIDI0IEEw ICBGMCA3NSBDNSAzRiA0NCBBMyA4RCBBNSA6IC5fLi5kLiQuLnUuP0QuLi4KMDAxMDogMzIg MjYgQTcgRUQgODUgRjQgRUEgRkQgIDY2IEZEIDJFIDU2IEM2IENCIEI3IDk3IDogMiYuLi4u Li5mLi5WLi4uLgowMDIwOiA3NSA5QyBGMSA1OSA4OSA3MSA0RSBBNSAgMkIgRTIgRUMgNkEg Q0UgQzEgNzMgMzUgOiB1Li5ZLnFOLisuLmouLnM1CjAwMzA6IEY3IDE2IDA3IEQxIDcxIDY5 IEQwIDdBICBDNyBGOCBEMyA2OSA0QiBEMCA5NSA5QyA6IC4uLi5xaS56Li4uaUsuLi4KMDA0 MDogRjEgRkMgQkQgMjAgNTYgQjUgRjkgNTggICAgICAgICAgICAgICAgICAgICAgICAgIDog Li4uIFYuLlgKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQow MDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAuLi4uLgpbbGlic3NoMl0gMC41NzExODggVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJl Y2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUg Ynl0ZXMpCjAwMDA6IDYzIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IGMuLi4uCltsaWJzc2gyXSAwLjU3MTIzMSBUcmFuc3BvcnQ6IFBhY2tldCB0 eXBlIDk5IHJlY2VpdmVkLCBsZW5ndGg9NQpbbGlic3NoMl0gMC41NzEyMzQgVHJhbnNwb3J0 OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTkKW2xpYnNzaDJdIDAuNTcxMjM4IFND UDogU2VuZGluZyBpbml0aWFsIHdha2V1cApbbGlic3NoMl0gMC41NzEyNDIgQ29ubjogV3Jp dGluZyAxIGJ5dGVzIG9uIGNoYW5uZWwgMC8wLCBzdHJlYW0gIzAKW2xpYnNzaDJdIDAuNTcx MjQ3IENvbm46IFNlbmRpbmcgMSBieXRlcyBvbiBjaGFubmVsIDAvMCwgc3RyZWFtX2lkPTAK PT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDkgYnl0ZXMpCjAwMDA6IDVFIDAw IDAwIDAwIDAwIDAwIDAwIDAwICAwMSAgICAgICAgICAgICAgICAgICAgICA6IF4uLi4uLi4u Lgo9PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbjIgKDEgYnl0ZXMpCjAwMDA6IDAw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4KW2xp YnNzaDJdIDAuNTcxMzQ4IFNvY2tldDogU2VudCA1Mi81MiBieXRlcyBhdCAweDUwNmM3OAo9 PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBzZW5kKCkgKDUyIGJ5dGVzKQowMDAwOiBBQyBB RiBBRSAyOSAyRSA0NSA4QiBEQyAgM0MgMEUgMEYgQkUgQTkgMEMgRjcgNTUgOiAuLi4pLkUu LjwuLi4uLi5VCjAwMTA6IDcyIDg5IDA4IDEyIEQ2IEY2IEI3IEUxICA1NyA0QyBGNCA0MiA3 MCBFQiBFMSAxNiA6IHIuLi4uLi4uV0wuQnAuLi4KMDAyMDogNjcgRDcgQzcgOEEgQzIgMjkg MkUgN0QgIEVFIEZEIDZGIEY5IENGIEI1IEMwIDY4IDogZy4uLi4pLn0uLm8uLi4uaAowMDMw OiBDQyA0OSA1MCAwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu SVAuCltsaWJzc2gyXSAwLjU3MTM2NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5 dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjU3MTM2OCBGYWls dXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC41NzEzNzEgRmFpbHVy ZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQIHJlc3BvbnNlClts aWJzc2gyXSAwLjU3OTYzMiBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50cyAxIGJ5dGVzIGZy b20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjU3OTY0MCBTb2NrZXQ6IFJl Y3ZlZCAxMjAvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBsaWJzc2gyX3RyYW5zcG9y dF9yZWFkKCkgcmF3ICgxMjAgYnl0ZXMpCjAwMDA6IEQxIDc4IDFGIDNFIEYzIEUxIDc3IDRF ICBBQiAxRCA2QyA0RCA5OSA2QiBDMiBCRSA6IC54Lj4uLndOLi5sTS5rLi4KMDAxMDogQzkg MEQgNzIgMjkgMjcgNDcgQjQgOUQgIEZEIDg0IDQ2IERDIDFCIERCIEMzIEUzIDogLi5yKSdH Li4uLkYuLi4uLgowMDIwOiBBMiBDNyA1MiBDMCBGNCBBOCA2NiA0NiAgMjkgRkYgOTggRjAg RjcgMzQgREEgQUIgOiAuLlIuLi5mRikuLi4uNC4uCjAwMzA6IEUxIDE5IDYxIDFEIDZDIEEx IEQxIEI0ICBGMiAzRSA4RSA5RCAyNyBENCA3NCBCQyA6IC4uYS5sLi4uLj4uLicudC4KMDA0 MDogM0YgMkUgMTkgRDQgNTMgOTIgMjggQUEgIEYzIDg5IDA1IEM0IEVCIDNBIDc2IDYzIDog Py4uLlMuKC4uLi4uLjp2YwowMDUwOiBFQiA3MCA5RSBFQyA5QyA5QiBDQSA5QyAgMTIgRDcg ODUgOUUgNDYgMkMgNDUgNzAgOiAucC4uLi4uLi4uLi5GLEVwCjAwNjA6IDFDIDhCIDQ4IDU1 IERBIDk1IDUzIDk4ICAwMCBDNiA5QyA0QiA1MCBBQSBCNSA0RSA6IC4uSFUuLlMuLi4uS1Au Lk4KMDA3MDogRTIgRjQgRDMgOTAgMEQgNUYgNzggMkIgICAgICAgICAgICAgICAgICAgICAg ICAgIDogLi4uLi5feCsKPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5 dGVzKQowMDAwOiAwMiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAuLi4uLgpbbGlic3NoMl0gMC41Nzk3MTggVHJhbnNwb3J0OiBQYWNrZXQgdHlw ZSAyIHJlY2VpdmVkLCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxh aW4gKDQ0IGJ5dGVzKQowMDAwOiA1RiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDEgMDAgMDAg MDAgMUYgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi4uc2NwCjAwMTA6IDNBIDIwIDc3IDYxIDcy IDZFIDY5IDZFICA2NyAzQSAyMCA0NSA3OCA2NSA2MyA3NSA6IDogd2FybmluZzogRXhlY3UK MDAyMDogNzQgNjkgNkUgNjcgMjAgNzMgNjMgNzAgIDMxIDJFIDBEIDBBICAgICAgICAgICAg IDogdGluZyBzY3AxLi4uCltsaWJzc2gyXSAwLjU3OTc1OCBUcmFuc3BvcnQ6IFBhY2tldCB0 eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9NDQKW2xpYnNzaDJdIDAuNTc5NzYxIENvbm46IDMx IGJ5dGVzIHBhY2tldF9hZGQoKSBmb3IgMC8wLzQ3MzczNDg5Mjc0ODgxCltsaWJzc2gyXSAw LjU3OTc2NiBGYWlsdXJlIEV2ZW50OiAtMzcgLSB3b3VsZCBibG9jawpbbGlic3NoMl0gMC41 Nzk3NjkgRmFpbHVyZSBFdmVudDogLTM3IC0gV291bGQgYmxvY2sgd2FpdGluZyBmb3IgU0NQ IHJlc3BvbnNlCltsaWJzc2gyXSAwLjYxODE1NCBDb25uOiBjaGFubmVsX3JlYWQoKSB3YW50 cyAxIGJ5dGVzIGZyb20gY2hhbm5lbCAwLzAgc3RyZWFtICMwCltsaWJzc2gyXSAwLjYxODE2 NyBTb2NrZXQ6IFJlY3ZlZCAzNjAvMTYzODQgYnl0ZXMgdG8gMHg1MDJjMzgrMAo9PiBsaWJz c2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgzNjAgYnl0ZXMpCjAwMDA6IEIzIEFFIDA4IDM0 IDZBIDhDIEMwIEREICBEMSA4QSAyNyBBMSA5MCAyMSBDQSA3NSA6IC4uLjRqLi4uLi4nLi4h LnUKMDAxMDogNjggOTkgNkIgOUMgQTggQjUgNjYgQjcgIEEzIDFEIDJBIDkzIDJCIDFBIDE1 IERGIDogaC5rLi4uZi4uLiouKy4uLgowMDIwOiBFNCBCNyAwQSBCNyA5QyBCMyA5NCA5RCAg NDUgNjMgQUUgOEQgMDEgNEYgNzMgNkYgOiAuLi4uLi4uLkVjLi4uT3NvCjAwMzA6IDVGIDE2 IDY2IERCIDYyIDk0IEU0IDBDICBBNCBBOCAyQSAxMyBFMSA4OCA1NyBBOCA6IF8uZi5iLi4u Li4qLi4uVy4KMDA0MDogRjUgNzcgNzAgMkUgMEEgNzEgMDEgQTQgIDk3IDY1IEE1IDFGIDBB IEI4IDBFIDA5IDogLndwLi5xLi4uZS4uLi4uLgowMDUwOiAzQiAyMCBEQSAyRSAzMyBFMiAy NyA2NCAgMzkgQTUgMjIgQjIgODAgN0UgMTYgMTkgOiA7IC4uMy4nZDkuIi4ufi4uCjAwNjA6 IEY5IDQ0IDZGIDQ1IDkxIDAxIEYwIDc3ICBCNCBCRSBEMiBDRSBGOCBBQSBBRSBDNyA6IC5E b0UuLi53Li4uLi4uLi4KMDA3MDogRTIgM0MgNEUgN0UgM0UgNDcgOTUgMzIgIDg1IDRDIDJB IDkxIEQ1IDYxIEQ4IDc2IDogLjxOfj5HLjIuTCouLmEudgowMDgwOiA1NiBEQiA1NyA2RiAx QSA2NSBCMSAzQSAgQjggNzEgQzYgOEYgRjkgQUEgQjAgQTUgOiBWLldvLmUuOi5xLi4uLi4u CjAwOTA6IDYyIDk2IENDIDQwIDYxIEE1IEE0IDhFICA1MCBEOSBCRSA3MCA0NyBEQSA3RSBF OCA6IGIuLkBhLi4uUC4ucEcufi4KMDBhMDogODAgMDkgRkUgN0QgRTEgNjAgOUEgMTQgIEJB IDYzIDY5IDE4IEI0IDNEIDI0IEQyIDogLi4ufS5gLi4uY2kuLj0kLgowMGIwOiBCNCBCNSA3 NyBBMSBENSBBOSBFRiA0RSAgNDYgMzAgQkIgMUQgRTggMDIgRTYgRTIgOiAuLncuLi4uTkYw Li4uLi4uCjAwYzA6IDlEIDJFIEJBIEZFIDQ3IEUzIEJBIDZEICAxQSA0NiAzRSAyMSA3QyA0 MyAxQyA3MyA6IC4uLi5HLi5tLkY+IXxDLnMKMDBkMDogREIgQTYgOTUgNzYgQTUgRjAgN0Eg OEQgIEVEIDhGIEI5IENEIEM1IEU3IENGIDU0IDogLi4udi4uei4uLi4uLi4uVAowMGUwOiA3 NCBBQiA1RCA0NCAzMiBFRiA0RiA5RiAgMjggNzUgN0EgNDQgREEgNUEgMEIgODUgOiB0Ll1E Mi5PLih1ekQuWi4uCjAwZjA6IDc1IDY3IDNDIEY1IEVDIEZBIEYxIDA5ICAzRSA1NyBBRiAw RCAwMSBFNiA2NCA0NSA6IHVnPC4uLi4uPlcuLi4uZEUKMDEwMDogNzIgQjIgMzEgNjIgRkMg MUIgMDQgOTUgIDU5IEEzIDczIDI0IEU4IEU2IDM3IEJBIDogci4xYi4uLi5ZLnMkLi43Lgow MTEwOiA2MCA0RSBGRSA0QSAzNSA0MyA2QyBERCAgMkIgMzEgN0IgQzYgQ0EgNzUgRUQgMDkg OiBgTi5KNUNsLisxey4udS4uCjAxMjA6IEE4IDM5IDE3IDFDIDBGIEU3IDlBIEM3ICA4RSA0 QiA2NyA0RCBFQiA2NyAzRCA0RSA6IC45Li4uLi4uLktnTS5nPU4KMDEzMDogMTggQjYgQTAg QzMgOTkgOTAgODIgMzIgIDZFIDIyIDJEIDg2IDk1IDk5IDE2IDQ1IDogLi4uLi4uLjJuIi0u Li4uRQowMTQwOiAxQyA0MiA1NCA3QSBBNyAyQyAyRCAzMiAgRkMgQTEgNkIgRjUgNjcgMkIg QjQgOTIgOiAuQlR6LiwtMi4uay5nKy4uCjAxNTA6IDY0IEQ5IEQ3IEUxIEQ1IDcyIEMxIDQ2 ICBERSBGQSBFMSA4MSA5RCA1NSA2QiBEOCA6IGQuLi4uci5GLi4uLi5Vay4KMDE2MDogRDcg MEUgNUIgNDUgNDQgNkQgMjQgNkQgICAgICAgICAgICAgICAgICAgICAgICAgIDogLi5bRURt JG0KPT4gbGlic3NoMl90cmFuc3BvcnRfcmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiAw MiAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4u LgpbbGlic3NoMl0gMC42MTgyNzggVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyIHJlY2VpdmVk LCBsZW5ndGg9NQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDEwNSBieXRl cykKMDAwMDogNUYgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAxIDAwIDAwIDAwIDVDIDczIDYz IDcwIDogXy4uLi4uLi4uLi4uXHNjcAowMDEwOiAzQSAyMCA0NiA0MSA1NCA0MSA0QyAzQSAg MjAgNDUgNzggNjUgNjMgNzUgNzQgNjkgOiA6IEZBVEFMOiBFeGVjdXRpCjAwMjA6IDZFIDY3 IDIwIDczIDczIDY4IDMxIDIwICA2OSA2RSAyMCA2MyA2RiA2RCA3MCA2MSA6IG5nIHNzaDEg aW4gY29tcGEKMDAzMDogNzQgNjkgNjIgNjkgNkMgNjkgNzQgNzkgIDIwIDZEIDZGIDY0IDY1 IDIwIDY2IDYxIDogdGliaWxpdHkgbW9kZSBmYQowMDQwOiA2OSA2QyA2NSA2NCAyMCAyOCA0 MyA2OCAgNjUgNjMgNkIgMjAgNzQgNjggNjEgNzQgOiBpbGVkIChDaGVjayB0aGF0CjAwNTA6 IDIwIDczIDYzIDcwIDMxIDIwIDY5IDczICAyMCA2OSA2RSAyMCA3OSA2RiA3NSA3MiA6ICBz Y3AxIGlzIGluIHlvdXIKMDA2MDogMjAgNTAgNDEgNTQgNDggMjkgMkUgMEQgIDBBICAgICAg ICAgICAgICAgICAgICAgIDogIFBBVEgpLi4uCltsaWJzc2gyXSAwLjYxODMxNyBUcmFuc3Bv cnQ6IFBhY2tldCB0eXBlIDk1IHJlY2VpdmVkLCBsZW5ndGg9MTA1CltsaWJzc2gyXSAwLjYx ODMyMCBDb25uOiA5MiBieXRlcyBwYWNrZXRfYWRkKCkgZm9yIDAvMC80NzM3MzQ4OTI3NDg4 MQo9PiBsaWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDUgYnl0ZXMpCjAwMDA6IDAy IDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLi4u CltsaWJzc2gyXSAwLjYxODM1OCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIgcmVjZWl2ZWQs IGxlbmd0aD01Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMjUgYnl0ZXMp CjAwMDA6IDYyIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwQiA2NSA3OCA2OSA3NCAyRCA3MyA3 NCA6IGIuLi4uLi4uLmV4aXQtc3QKMDAxMDogNjEgNzQgNzUgNzMgMDAgMDAgMDAgMDAgIEZG ICAgICAgICAgICAgICAgICAgICAgIDogYXR1cy4uLi4uCltsaWJzc2gyXSAwLjYxODM4MSBU cmFuc3BvcnQ6IFBhY2tldCB0eXBlIDk4IHJlY2VpdmVkLCBsZW5ndGg9MjUKW2xpYnNzaDJd IDAuNjE4Mzg0IENvbm46IENoYW5uZWwgMCByZWNlaXZlZCByZXF1ZXN0IHR5cGUgZXhpdC1z dGF0dXMgKHdyIDApCltsaWJzc2gyXSAwLjYxODM4NyBDb25uOiBFeGl0IHN0YXR1cyAyNTUg cmVjZWl2ZWQgZm9yIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBw bGFpbiAoNSBieXRlcykKMDAwMDogMDIgMDAgMDAgMDAgMDAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogLi4uLi4KW2xpYnNzaDJdIDAuNjE4NDI1IFRyYW5zcG9ydDog UGFja2V0IHR5cGUgMiByZWNlaXZlZCwgbGVuZ3RoPTUKPT4gbGlic3NoMl90cmFuc3BvcnRf cmVhZCgpIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42MTg0NzAgVHJh bnNwb3J0OiBQYWNrZXQgdHlwZSA5NyByZWNlaXZlZCwgbGVuZ3RoPTUKW2xpYnNzaDJdIDAu NjE4NDczIENvbm46IENsb3NlIHJlY2VpdmVkIGZvciBjaGFubmVsIDAvMApbbGlic3NoMl0g MC42MTg0ODAgQ29ubjogRnJlZWluZyBjaGFubmVsIDAvMCByZXNvdXJjZXMKW2xpYnNzaDJd IDAuNjE4NDgzIENvbm46IFNlbmRpbmcgRU9GIG9uIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJf dHJhbnNwb3J0X3dyaXRlIHBsYWluICg1IGJ5dGVzKQowMDAwOiA2MCAwMCAwMCAwMCAwMCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgLi4uLgpbbGlic3NoMl0gMC42 MTg1ODEgU29ja2V0OiBTZW50IDM2LzM2IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJf dHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMzYgYnl0ZXMpCjAwMDA6IDUxIDdEIEY5IDlDIDg3 IDU3IDg1IDg1ICA5QiAyNCA4NCBGQiAxQyAyNCBENyA2QSA6IFF9Li4uVy4uLiQuLi4kLmoK MDAxMDogRjAgRTIgMDQgNEUgQkEgQkIgMUIgOTMgIDhGIEZEIDVBIEVGIDcxIDRCIDFCIDRC IDogLi4uTi4uLi4uLloucUsuSwowMDIwOiA4MSA5QyA2MiA4RCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiAuLmIuCltsaWJzc2gyXSAwLjYxODU5NSBDb25uOiBD bG9zaW5nIGNoYW5uZWwgMC8wCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg1 IGJ5dGVzKQowMDAwOiA2MSAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBhLi4uLgpbbGlic3NoMl0gMC42MTg2NzAgU29ja2V0OiBTZW50IDM2LzM2 IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAo MzYgYnl0ZXMpCjAwMDA6IEVBIDgyIDNFIEI4IDNGIDg3IDlBIDg2ICBBRiBGQSAxRSA5MyA3 MSAwQiA4NSAzOSA6IC4uPi4/Li4uLi4uLnEuLjkKMDAxMDogMDggNDUgMDQgNTMgNzkgNEUg NDggRkQgIDZFIDBFIENDIDI0IDAyIDIwIDcxIEM3IDogLkUuU3lOSC5uLi4kLiBxLgowMDIw OiBDNSBEQiBGRCBCOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu Li4uCltsaWJzc2gyXSAwLjYxODY4NCBUcmFuc3BvcnQ6IExvb2tpbmcgZm9yIHBhY2tldCBv ZiB0eXBlOiA5NApbbGlic3NoMl0gMC42MTg2ODcgVHJhbnNwb3J0OiBMb29raW5nIGZvciBw YWNrZXQgb2YgdHlwZTogOTUKW2xpYnNzaDJdIDAuNjE4Njg5IFRyYW5zcG9ydDogTG9va2lu ZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk0CltsaWJzc2gyXSAwLjYxODY5MiBUcmFuc3BvcnQ6 IExvb2tpbmcgZm9yIHBhY2tldCBvZiB0eXBlOiA5NQpbbGlic3NoMl0gMC42MTg2OTQgVHJh bnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2YgdHlwZTogOTQKW2xpYnNzaDJdIDAuNjE4 Njk3IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDk1CltsaWJzc2gy XSAwLjYxODcwMSBUcmFuc3BvcnQ6IERpc2Nvbm5lY3Rpbmc6IHJlYXNvbj0xMSwgZGVzYz1O b3JtYWwgU2h1dGRvd24sIFRoYW5rIHlvdSBmb3IgcGxheWluZywgbGFuZz0KPT4gbGlic3No Ml90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDUxIGJ5dGVzKQowMDAwOiAwMSAwMCAwMCAwMCAw QiAwMCAwMCAwMCAgMjYgNEUgNkYgNzIgNkQgNjEgNkMgMjAgOiAuLi4uLi4uLiZOb3JtYWwg CjAwMTA6IDUzIDY4IDc1IDc0IDY0IDZGIDc3IDZFICAyQyAyMCA1NCA2OCA2MSA2RSA2QiAy MCA6IFNodXRkb3duLCBUaGFuayAKMDAyMDogNzkgNkYgNzUgMjAgNjYgNkYgNzIgMjAgIDcw IDZDIDYxIDc5IDY5IDZFIDY3IDAwIDogeW91IGZvciBwbGF5aW5nLgowMDMwOiAwMCAwMCAw MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuLi4KPT4gbGli c3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4yICgwIGJ5dGVzKQpbbGlic3NoMl0gMC42MTg4 MDUgU29ja2V0OiBTZW50IDg0Lzg0IGJ5dGVzIGF0IDB4NTA2Yzc4Cj0+IGxpYnNzaDJfdHJh bnNwb3J0X3dyaXRlIHNlbmQoKSAoODQgYnl0ZXMpCjAwMDA6IDA5IDc3IDc4IDY0IDE4IEUy IENDIDIwICBFNCBEOCBFMyBFQSA5MSBGNiAxMSBBQiA6IC53eGQuLi4gLi4uLi4uLi4KMDAx MDogQjAgRDYgRkIgNEEgMkYgNkQgMzEgMzEgIDM2IEFBIDQ1IEVBIEI3IDlEIEU2IDQ2IDog Li4uSi9tMTE2LkUuLi4uRgowMDIwOiAxNCA3NSAzQiAwOCAxQSBCNCAxQSBCMyAgN0IgQjYg MEYgNTcgRjcgRDMgNDYgNzYgOiAudTsuLi4uLnsuLlcuLkZ2CjAwMzA6IDEyIDVEIDgxIEZF IEZFIDgzIEQyIEJDICBERCBBNSA4NCA2NCA5RiBEOCAxNSBBMSA6IC5dLi4uLi4uLi4uZC4u Li4KMDA0MDogMzkgQ0EgQjUgMzUgN0IgQjUgODkgRDAgIDgzIDIyIDQ1IDYxIDA0IDE1IDE0 IDJGIDogOS4uNXsuLi4uIkVhLi4uLwowMDUwOiA1MSAzNSAzRCA0RiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBRNT1PCltsaWJzc2gyXSAwLjYxODgyNiBUcmFu c3BvcnQ6IEZyZWVpbmcgc2Vzc2lvbiByZXNvdXJjZQpbbGlic3NoMl0gMC42MTg4MzQgVHJh bnNwb3J0OiBFeHRyYSBwYWNrZXRzIGxlZnQgMAphbGwgZG9uZQo= ------=_NextPart_50769C92_0848E950_490B7C06 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel ------=_NextPart_50769C92_0848E950_490B7C06-- Oi, From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 12:58:48 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BAwase000602; Thu, 11 Oct 2012 12:58:43 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BAwYtc000586 for ; Thu, 11 Oct 2012 12:58:34 +0200 Received: (qmail 21079 invoked by uid 501); 11 Oct 2012 10:58:35 -0000 Message-ID: <20121011105835.21078.qmail@stuge.se> Date: Thu, 11 Oct 2012 12:58:35 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: libssh2_scp_recv is not populating struct stat Mail-Followup-To: libssh2-devel@cool.haxx.se References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9BAwase000602 Hi! Ever wrote: > Please chek the new scp_libgcrypt.log file. With the latest change it is now showing the same result as when using OpenSSL. Note that the scp command fails. The server returns an error message: > [libssh2] 0.618278 Transport: Packet type 2 received, length=5 > => libssh2_transport_read() plain (105 bytes) > 0000: 5F 00 00 00 00 00 00 00 01 00 00 00 5C 73 63 70 : _...........\scp > 0010: 3A 20 46 41 54 41 4C 3A 20 45 78 65 63 75 74 69 : : FATAL: Executi > 0020: 6E 67 20 73 73 68 31 20 69 6E 20 63 6F 6D 70 61 : ng ssh1 in compa > 0030: 74 69 62 69 6C 69 74 79 20 6D 6F 64 65 20 66 61 : tibility mode fa > 0040: 69 6C 65 64 20 28 43 68 65 63 6B 20 74 68 61 74 : iled (Check that > 0050: 20 73 63 70 31 20 69 73 20 69 6E 20 79 6F 75 72 : scp1 is in your > 0060: 20 50 41 54 48 29 2E 0D 0A : PATH)... This error message is present also in your OpenSSL log. If libssh2 does not reflect the correct exit-status after the channel has closed then that is a bug. Note that scp is not always the best option for file transfer. It's only included for compatibility. If possible I recommend to use SFTP instead. Now that libgcrypt works, take a look at the sftp example programs. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Thu Oct 11 13:55:07 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9BBsila031846; Thu, 11 Oct 2012 13:55:01 +0200 Received: from smtpbg224.qq.com (SMTPBG224.QQ.COM [183.62.126.31]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9BBse1j031720 for ; Thu, 11 Oct 2012 13:54:42 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail90t1349956472t166923 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMiBkZXZlbG9wbWVudA==?=" Subject: Re: libssh2_scp_recv is not populating struct stat Mime-Version: 1.0 Date: Thu, 11 Oct 2012 19:54:32 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 1357379579 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0853627151==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. --===============0853627151== Content-Type: multipart/alternative; boundary="----=_NextPart_5076B378_D4B80DF8_5894002C" Content-Transfer-Encoding: 8Bit This is a multi-part message in MIME format. ------=_NextPart_5076B378_D4B80DF8_5894002C Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 aGkNCiAgICBJIGdvdC4gVGhhbmtzIGEgbG90Lg0KICAgIFRoZSBzZnRwIGRvIHdvcmsgd2Vs bC4NCg0KICANCg0KIC0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0t LS0tLS0NCiAgRnJvbTogICJQZXRlciBTdHVnZSI8cGV0ZXJAc3R1Z2Uuc2U+Ow0KIERhdGU6 ICBUaHUsIE9jdCAxMSwgMjAxMiAwNjo1OCBQTQ0KIFRvOiAgImxpYnNzaDItZGV2ZWwiPGxp YnNzaDItZGV2ZWxAY29vbC5oYXh4LnNlPjsgDQogDQogU3ViamVjdDogIFJlOiBsaWJzc2gy X3NjcF9yZWN2IGlzIG5vdCBwb3B1bGF0aW5nIHN0cnVjdCBzdGF0DQoNCiANCg0KSGkhDQoN CqPFo/aj5aPyIHdyb3RlOg0KPiBQbGVhc2UgY2hlayB0aGUgbmV3IHNjcF9saWJnY3J5cHQu bG9nIGZpbGUuDQoNCldpdGggdGhlIGxhdGVzdCBjaGFuZ2UgaXQgaXMgbm93IHNob3dpbmcg dGhlIHNhbWUgcmVzdWx0IGFzIHdoZW4NCnVzaW5nIE9wZW5TU0wuIE5vdGUgdGhhdCB0aGUg c2NwIGNvbW1hbmQgZmFpbHMuIFRoZSBzZXJ2ZXIgcmV0dXJucw0KYW4gZXJyb3IgbWVzc2Fn ZToNCg0KDQo+IFtsaWJzc2gyXSAwLjYxODI3OCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIg cmVjZWl2ZWQsIGxlbmd0aD01DQo+ID0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFp biAoMTA1IGJ5dGVzKQ0KPiAwMDAwOiA1RiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDEgMDAg MDAgMDAgNUMgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi5cc2NwDQo+IDAwMTA6IDNBIDIwIDQ2 IDQxIDU0IDQxIDRDIDNBICAyMCA0NSA3OCA2NSA2MyA3NSA3NCA2OSA6IDogRkFUQUw6IEV4 ZWN1dGkNCj4gMDAyMDogNkUgNjcgMjAgNzMgNzMgNjggMzEgMjAgIDY5IDZFIDIwIDYzIDZG IDZEIDcwIDYxIDogbmcgc3NoMSBpbiBjb21wYQ0KPiAwMDMwOiA3NCA2OSA2MiA2OSA2QyA2 OSA3NCA3OSAgMjAgNkQgNkYgNjQgNjUgMjAgNjYgNjEgOiB0aWJpbGl0eSBtb2RlIGZhDQo+ IDAwNDA6IDY5IDZDIDY1IDY0IDIwIDI4IDQzIDY4ICA2NSA2MyA2QiAyMCA3NCA2OCA2MSA3 NCA6IGlsZWQgKENoZWNrIHRoYXQNCj4gMDA1MDogMjAgNzMgNjMgNzAgMzEgMjAgNjkgNzMg IDIwIDY5IDZFIDIwIDc5IDZGIDc1IDcyIDogIHNjcDEgaXMgaW4geW91cg0KPiAwMDYwOiAy MCA1MCA0MSA1NCA0OCAyOSAyRSAwRCAgMEEgICAgICAgICAgICAgICAgICAgICAgOiAgUEFU SCkuLi4NCg0KVGhpcyBlcnJvciBtZXNzYWdlIGlzIHByZXNlbnQgYWxzbyBpbiB5b3VyIE9w ZW5TU0wgbG9nLg0KDQpJZiBsaWJzc2gyIGRvZXMgbm90IHJlZmxlY3QgdGhlIGNvcnJlY3Qg ZXhpdC1zdGF0dXMgYWZ0ZXIgdGhlDQpjaGFubmVsIGhhcyBjbG9zZWQgdGhlbiB0aGF0IGlz IGEgYnVnLg0KDQpOb3RlIHRoYXQgc2NwIGlzIG5vdCBhbHdheXMgdGhlIGJlc3Qgb3B0aW9u IGZvciBmaWxlIHRyYW5zZmVyLiBJdCdzDQpvbmx5IGluY2x1ZGVkIGZvciBjb21wYXRpYmls aXR5LiBJZiBwb3NzaWJsZSBJIHJlY29tbWVuZCB0byB1c2UgU0ZUUA0KaW5zdGVhZC4gTm93 IHRoYXQgbGliZ2NyeXB0IHdvcmtzLCB0YWtlIGEgbG9vayBhdCB0aGUgc2Z0cCBleGFtcGxl DQpwcm9ncmFtcy4NCg0KDQovL1BldGVyDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KbGlic3NoMi1kZXZlbCBodHRwOi8vY29vbC5oYXh4LnNl L2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJzc2gyLWRldmVs ------=_NextPart_5076B378_D4B80DF8_5894002C Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGk8L0RJVj4NCjxESVY+Jm5ic3A7Jm5ic3A7IEkgZ290 LiBUaGFua3MgYSBsb3QuPC9ESVY+DQo8RElWPiZuYnNwOyZuYnNwOyBUaGUgc2Z0cCBkbyB3 b3JrIHdlbGwuPC9GT05UPjxpbmNsdWRldGFpbD48QlI+PC9ESVY+DQo8RElWPg0KPERJVj48 QlI+PC9ESVY+DQo8RElWIHN0eWxlPSJQQURESU5HLUJPVFRPTTogMnB4OyBQQURESU5HLUxF RlQ6IDBweDsgUEFERElORy1SSUdIVDogMHB4OyBGT05ULUZBTUlMWTogQXJpYWwgTmFycm93 OyBGT05ULVNJWkU6IDEycHg7IFBBRERJTkctVE9QOiAycHgiPi0tLS0tLS0tLS0tLS0tLS0t LSZuYnNwO09yaWdpbmFsJm5ic3A7LS0tLS0tLS0tLS0tLS0tLS0tPC9ESVY+DQo8RElWIHN0 eWxlPSJQQURESU5HLUJPVFRPTTogOHB4OyBQQURESU5HLUxFRlQ6IDhweDsgUEFERElORy1S SUdIVDogOHB4OyBCQUNLR1JPVU5EOiAjZWZlZmVmOyBGT05ULVNJWkU6IDEycHg7IFBBRERJ TkctVE9QOiA4cHgiPg0KPERJVj48Qj5Gcm9tOiA8L0I+Jm5ic3A7IlBldGVyIFN0dWdlIiZs dDtwZXRlckBzdHVnZS5zZSZndDs7PC9ESVY+DQo8RElWPjxCPkRhdGU6IDwvQj4mbmJzcDtU aHUsIE9jdCAxMSwgMjAxMiAwNjo1OCBQTTwvRElWPg0KPERJVj48Qj5UbzogPC9CPiZuYnNw OyJsaWJzc2gyLWRldmVsIiZsdDtsaWJzc2gyLWRldmVsQGNvb2wuaGF4eC5zZSZndDs7IDxX QlI+PC9ESVY+DQo8RElWPjwvRElWPg0KPERJVj48Qj5TdWJqZWN0OiA8L0I+Jm5ic3A7UmU6 IGxpYnNzaDJfc2NwX3JlY3YgaXMgbm90IHBvcHVsYXRpbmcgc3RydWN0IHN0YXQ8L0RJVj48 L0RJVj4NCjxESVY+PEJSPjwvRElWPkhpITxCUj48QlI+o8Wj9qPlo/Igd3JvdGU6PEJSPiZn dDsgUGxlYXNlIGNoZWsgdGhlIG5ldyBzY3BfbGliZ2NyeXB0LmxvZyBmaWxlLjxCUj48QlI+ V2l0aCB0aGUgbGF0ZXN0IGNoYW5nZSBpdCBpcyBub3cgc2hvd2luZyB0aGUgc2FtZSByZXN1 bHQgYXMgd2hlbjxCUj51c2luZyBPcGVuU1NMLiBOb3RlIHRoYXQgdGhlIHNjcCBjb21tYW5k IGZhaWxzLiBUaGUgc2VydmVyIHJldHVybnM8QlI+YW4gZXJyb3IgbWVzc2FnZTo8QlI+PEJS PjxCUj4mZ3Q7IFtsaWJzc2gyXSAwLjYxODI3OCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIg cmVjZWl2ZWQsIGxlbmd0aD01PEJSPiZndDsgPSZndDsgbGlic3NoMl90cmFuc3BvcnRfcmVh ZCgpIHBsYWluICgxMDUgYnl0ZXMpPEJSPiZndDsgMDAwMDogNUYgMDAgMDAgMDAgMDAgMDAg MDAgMDAmbmJzcDsgMDEgMDAgMDAgMDAgNUMgNzMgNjMgNzAgOiBfLi4uLi4uLi4uLi5cc2Nw PEJSPiZndDsgMDAxMDogM0EgMjAgNDYgNDEgNTQgNDEgNEMgM0EmbmJzcDsgMjAgNDUgNzgg NjUgNjMgNzUgNzQgNjkgOiA6IEZBVEFMOiBFeGVjdXRpPEJSPiZndDsgMDAyMDogNkUgNjcg MjAgNzMgNzMgNjggMzEgMjAmbmJzcDsgNjkgNkUgMjAgNjMgNkYgNkQgNzAgNjEgOiBuZyBz c2gxIGluIGNvbXBhPEJSPiZndDsgMDAzMDogNzQgNjkgNjIgNjkgNkMgNjkgNzQgNzkmbmJz cDsgMjAgNkQgNkYgNjQgNjUgMjAgNjYgNjEgOiB0aWJpbGl0eSBtb2RlIGZhPEJSPiZndDsg MDA0MDogNjkgNkMgNjUgNjQgMjAgMjggNDMgNjgmbmJzcDsgNjUgNjMgNkIgMjAgNzQgNjgg NjEgNzQgOiBpbGVkIChDaGVjayB0aGF0PEJSPiZndDsgMDA1MDogMjAgNzMgNjMgNzAgMzEg MjAgNjkgNzMmbmJzcDsgMjAgNjkgNkUgMjAgNzkgNkYgNzUgNzIgOiZuYnNwOyBzY3AxIGlz IGluIHlvdXI8QlI+Jmd0OyAwMDYwOiAyMCA1MCA0MSA1NCA0OCAyOSAyRSAwRCZuYnNwOyAw QSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyA6Jm5ic3A7IFBBVEgpLi4uPEJSPjxCUj5UaGlzIGVycm9y IG1lc3NhZ2UgaXMgcHJlc2VudCBhbHNvIGluIHlvdXIgT3BlblNTTCBsb2cuPEJSPjxCUj5J ZiBsaWJzc2gyIGRvZXMgbm90IHJlZmxlY3QgdGhlIGNvcnJlY3QgZXhpdC1zdGF0dXMgYWZ0 ZXIgdGhlPEJSPmNoYW5uZWwgaGFzIGNsb3NlZCB0aGVuIHRoYXQgaXMgYSBidWcuPEJSPjxC Uj5Ob3RlIHRoYXQgc2NwIGlzIG5vdCBhbHdheXMgdGhlIGJlc3Qgb3B0aW9uIGZvciBmaWxl IHRyYW5zZmVyLiBJdCdzPEJSPm9ubHkgaW5jbHVkZWQgZm9yIGNvbXBhdGliaWxpdHkuIElm IHBvc3NpYmxlIEkgcmVjb21tZW5kIHRvIHVzZSBTRlRQPEJSPmluc3RlYWQuIE5vdyB0aGF0 IGxpYmdjcnlwdCB3b3JrcywgdGFrZSBhIGxvb2sgYXQgdGhlIHNmdHAgZXhhbXBsZTxCUj5w cm9ncmFtcy48QlI+PEJSPjxCUj4vL1BldGVyPEJSPl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fPEJSPmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nvb2wu aGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vbGlic3NoMi1kZXZlbDxCUj4NCjxE SVY+PC9ESVY+PC9pbmNsdWRldGFpbD48L0RJVj4= ------=_NextPart_5076B378_D4B80DF8_5894002C-- --===============0853627151== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============0853627151==-- From libssh2-devel-bounces@cool.haxx.se Fri Oct 12 13:06:27 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9CB5ueN005029; Fri, 12 Oct 2012 13:06:19 +0200 Received: from smtpbg129.qq.com (smtpbg129.qq.com [183.60.2.225]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9CB5qZ5005010 for ; Fri, 12 Oct 2012 13:05:54 +0200 X-QQ-SSF: 000000000000001000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 121.14.102.13 X-QQ-STYLE: X-QQ-mid: webmail90t1350039944t3872469 From: "=?gb18030?B?o8Wj9qPlo/I=?=" To: "=?gb18030?B?bGlic3NoMi1kZXZlbA==?=" Subject: How can I improve the speed of sftp? Mime-Version: 1.0 Date: Fri, 12 Oct 2012 19:05:44 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0963833351==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multi-part message in MIME format. --===============0963833351== Content-Type: multipart/alternative; boundary="----=_NextPart_5077F988_D6927300_685CBF35" Content-Transfer-Encoding: 8Bit This is a multi-part message in MIME format. ------=_NextPart_5077F988_D6927300_685CBF35 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 aGksYWxsDQogV2hlbiBJIHVzZSBzeXN0ZW0ncyBzZnRwIHRvb2wgdGhlIHNwZWVkIGlzIDMx TS9zLGJ1dCB0aGUgbGlic3NoMidzIHNmdHAganVzdCA0fjVNL3MuDQogSG93IGNhbiBJIGlt cHJvdmUgdGhlIHNwZWVkPw0KICANCiBUaGFua3Mu ------=_NextPart_5077F988_D6927300_685CBF35 Content-Type: text/html; charset="gb18030" Content-Transfer-Encoding: base64 PEZPTlQgc2l6ZT0rMD4NCjxESVY+aGksYWxsPC9ESVY+DQo8RElWPldoZW4gSSB1c2Ugc3lz dGVtJ3Mgc2Z0cCB0b29sIHRoZSBzcGVlZCBpcyAzMU0vcyxidXQgdGhlIGxpYnNzaDIncyBz ZnRwIGp1c3QgNH41TS9zLjwvRElWPg0KPERJVj5Ib3cgY2FuIEkgaW1wcm92ZSB0aGUgc3Bl ZWQ/PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj5UaGFua3MuPC9ESVY+PC9GT05U Pg== ------=_NextPart_5077F988_D6927300_685CBF35-- --===============0963833351== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============0963833351==-- From libssh2-devel-bounces@cool.haxx.se Sat Oct 13 00:45:57 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9CMjU4T020852; Sat, 13 Oct 2012 00:45:52 +0200 Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9CMjQWO020810 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Sat, 13 Oct 2012 00:45:27 +0200 Received: by mail-ob0-f182.google.com with SMTP id wc20so3400876obb.41 for ; Fri, 12 Oct 2012 15:45:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ideadevice.com; s=google; h=mime-version:date:message-id:subject:from:to:content-type; bh=U/xt3YM9BsDK5Rbk+tJdLbT2fp5mcW/rA5iyK9tZB3Y=; b=MxT9JGhkhqkL+vVkjSbKa0bUHpSxP7E7LGRp5mN1RdKNHFDYCJR7XYUsDl5v2RXzfI /g5ZDet5EtTbKxPCxQpjgmw1eVGWoz743aEoFk9wWE7IyN9lMghMkRNm3woUofGR9tjK VMHY59qoHOABC9j6w10X/7+92HCdNwFlRELBE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=U/xt3YM9BsDK5Rbk+tJdLbT2fp5mcW/rA5iyK9tZB3Y=; b=ay8BcW15SuMiJa5oPPjFHTse4Q2SbafAiFDBJCYJ4PGGD1Ibf4oSyEafwDrx/7xVh4 PQx9lvOhlATpwmMBlEThkCcn9cMhWICE9fL37tJ/1a7zlUh7vJf9wBXn40CUVkau+snJ tA6HaDrGrAd1sJilbrl/GK7VG4jJlGhVu2f0zXRiQvwhFX3csj5lOki2TVBupL2r5mHb Pn5B11ttbn20E1dnTuJ2Tjnf49WJYMaPFPVAzfRs8jZcGtwBzycRzBlUZpLFfAbvQE3X V+HnIOhFWyZsFCdLCzBd3LHqGYNn3ROVt1mMexM+pabKC2IuB1KjVU4WvFczkvTFuJHZ L7UQ== MIME-Version: 1.0 Received: by 10.182.69.50 with SMTP id b18mr4593172obu.75.1350081921481; Fri, 12 Oct 2012 15:45:21 -0700 (PDT) Received: by 10.76.170.103 with HTTP; Fri, 12 Oct 2012 15:45:21 -0700 (PDT) Date: Sat, 13 Oct 2012 04:15:21 +0530 Message-ID: Subject: Re: libssh2_channel_get_exit_status From: aalok sood To: libssh2-devel@cool.haxx.se X-Gm-Message-State: ALoCoQmEwEoN0vrZdJhngd2+jQi4SbM38iHCUFvNntm2uKz1UW6nhKmAJgbFqzJcf5FZKaUvV0ZB X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1169770206==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============1169770206== Content-Type: multipart/alternative; boundary=14dae93b578058fb1e04cbe4717a --14dae93b578058fb1e04cbe4717a Content-Type: text/plain; charset=ISO-8859-1 Hi After much ado, I finally got some space and time to work on the patch. However, I see further issues with how libssh2_channel_get_exit_status() works. The exit_status field in channel structured is initialized to 0. Now in cases where in we received a unexpected eof and hence did not receive the exit status at all, the api libssh2_channel_get_exit_status() still returns 0 (which is a valid ssh code). The fix I have done on my local setup is to initialize channel->exit_status as -1. Now when I call libssh2_channel_get_exit_status, I know for sure that an exit code has been received or not. I realize that we can also overcome this problem by keeping a flag exit_code_received (which be set only if exit code is actually received), and return that in the new api: LIBSSH2_API int libssh2_channel_get_exit_status2(LIBSSH2_CHANNEL *channel, uint32_t *status) However I feel this is a serious issue in the existing api and must be fixed there as well. This pushes me towards the original fix, ie. to initialize exit_status to a non valid ssh return code. Regards Aalok On Tue, Jul 17, 2012 at 3:30 PM, wrote: > Send libssh2-devel mailing list submissions to > libssh2-devel@cool.haxx.se > > To subscribe or unsubscribe via the World Wide Web, visit > http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel > or, via email, send a message with subject or body 'help' to > libssh2-devel-request@cool.haxx.se > > You can reach the person managing the list at > libssh2-devel-owner@cool.haxx.se > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of libssh2-devel digest..." > > > Today's Topics: > > 1. Re: libssh2_channel_get_exit_status (Daniel Stenberg) (aalok sood) > 2. Re: libssh2_channel_get_exit_status (Daniel Stenberg) > (Peter Stuge) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Mon, 16 Jul 2012 15:45:17 +0530 > From: aalok sood > To: libssh2-devel@cool.haxx.se > Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg) > Message-ID: > < > CAG+SKy5o_0hJYHWhLSMWS2O9LWHzniHWUKYe0jYrFYpQP5mg1w@mail.gmail.com> > Content-Type: text/plain; charset="iso-8859-1" > > Yes Daniel I agree with you. > > It would be better than modifying libssh2_channel_get_exit_status. > Also keeping the fetch status in a separate field from the actual shell > exit_status would be a better, more clear api. > > I will add the api and send in a patch. > > -(Aalok)- > > > > > Message: 2 > > Date: Sun, 15 Jul 2012 23:55:36 +0200 (CEST) > > From: Daniel Stenberg > > To: libssh2 development > > Subject: Re: libssh2_channel_get_exit_status > > Message-ID: > > Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed > > > > On Sun, 15 Jul 2012, aalok sood wrote: > > > > > * libssh2_channel_get_exit_status > > > > > > Now this makes sense, but sending back zero seems peculiar to me. zero > > is a > > > valid shell exit code, so we should send back something out of valid > > shell > > > exit codes in case channel is None. How about -1? > > > > We should rather make a new function that has a prototype like: > > > > LIBSSH2_API int > > libssh2_channel_get_exit_status2(LIBSSH2_CHANNEL *channel, uint32_t > > *status) > > > > Which then can return the proper value from the protocol in a value > > separate > > from the return code. Wouldn't that work fine for you? > > > > -- > > > > > > > / daniel.haxx.se > > > > > > ------------------------------ > > > > _______________________________________________ > > libssh2-devel mailing list > > libssh2-devel@cool.haxx.se > > http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel > > > > > > End of libssh2-devel Digest, Vol 38, Issue 7 > > ******************************************** > > > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://cool.haxx.se/pipermail/libssh2-devel/attachments/20120716/a3beb8ab/attachment-0001.html > > > > ------------------------------ > > Message: 2 > Date: Mon, 16 Jul 2012 13:04:32 +0200 > From: Peter Stuge > To: libssh2-devel@cool.haxx.se > Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg) > Message-ID: <20120716110432.8470.qmail@stuge.se> > Content-Type: text/plain; charset=us-ascii > > aalok sood wrote: > > I will add the api and send in a patch. > > Remember to include documentation. > > > //Peter > > > ------------------------------ > > _______________________________________________ > libssh2-devel mailing list > libssh2-devel@cool.haxx.se > http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel > > > End of libssh2-devel Digest, Vol 38, Issue 8 > ******************************************** > --14dae93b578058fb1e04cbe4717a Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi

After much ado, I finally got some = space and time to work on the patch.
However, I see furt= her issues with how=A0libssh2_channel_get_exit_status() works.
The exit_status fie= ld in channel structured is initialized to 0.
Now in cases where in we received a= unexpected eof and hence did not receive the exit status at all, the api= =A0libssh2_ch= annel_get_exit_status()
st= ill returns 0 (which is a valid ssh code).

The fix I have done on my local setup is to initialize channel-&= gt;exit_status as -1. Now when I call libssh2_channel_get_exit_status,
I = know for sure that an exit code has been received or not.


I real= ize that we can also overcome this problem by keeping a flag exit_code_rece= ived (which be set only if exit code is actually received), and return that= in the new api:

=A0 LIBSSH2_API int
=A0 =A0libssh2_channel_get_exit_status2(LIBSSH2_C= HANNEL *channel, uint32_t
=A0*status)
=A0
However I feel this is a serious issue in the existing api and= must be fixed there as well. This pushes me towards the original fix, ie. = to initialize exit_status to a non valid ssh return code.


Regards
Aalok


On Tue, Jul 17, 2012 at 3:30 PM, <libss= h2-devel-request@cool.haxx.se> wrote:
Send libssh2-devel mailing list submissions = to
=A0 =A0 =A0 =A0 libssh2-devel= @cool.haxx.se

To subscribe or unsubscribe via the World Wide Web, visit
=A0 =A0 =A0 =A0 http://cool.haxx.se/cgi-bin/mailman/listinfo/= libssh2-devel
or, via email, send a message with subject or body 'help' to
=A0 =A0 =A0 =A0 libss= h2-devel-request@cool.haxx.se

You can reach the person managing the list at
=A0 =A0 =A0 =A0 libssh2= -devel-owner@cool.haxx.se

When replying, please edit your Subject line so it is more specific
than "Re: Contents of libssh2-devel digest..."


Today's Topics:

=A0 =A01. Re: libssh2_channel_get_exit_status (Daniel Stenberg) (aalok sood= )
=A0 =A02. Re: libssh2_channel_get_exit_status (Daniel Stenberg)
=A0 =A0 =A0 (Peter Stuge)


----------------------------------------------------------------------

Message: 1
Date: Mon, 16 Jul 2012 15:45:17 +0530
From: aalok sood <aalok@ideadevi= ce.com>
To: libssh2-devel@cool.haxx.s= e
Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg)
Message-ID:
=A0 =A0 =A0 =A0 <CAG+SKy5o_0hJYHWhLSMWS2O9LWHzniHWUKYe0jYrF= YpQP5mg1w@mail.gmail.com>
Content-Type: text/plain; charset=3D"iso-8859-1"

Yes Daniel I agree with you.

It would be better than modifying libssh2_channel_get_exit_status.
Also keeping the fetch status in a separate field from the actual shell
exit_status =A0would be a better, more clear api.

I will add the api and send in a patch.

-(Aalok)-



> Message: 2
> Date: Sun, 15 Jul 2012 23:55:36 +0200 (CEST)
> From: Daniel Stenberg <daniel@hax= x.se>
> To: libssh2 development <libssh2-devel@cool.haxx.se>
> Subject: Re: libssh2_channel_get_exit_status
> Message-ID: <alpine.DEB.2.00.1207152353050.5683@tvnag.unkk.fr>
> Content-Type: TEXT/PLAIN; charset=3DUS-ASCII; format=3Dflowed
>
> On Sun, 15 Jul 2012, aalok sood wrote:
>
> > * libssh2_channel_get_exit_status
> >
> > Now this makes sense, but sending back zero seems peculiar to me.= zero
> is a
> > valid shell exit code, so we should send back something out of va= lid
> shell
> > exit codes in case channel is None. How about -1?
>
> We should rather make a new function that has a prototype like:
>
> =A0 LIBSSH2_API int
> =A0 libssh2_channel_get_exit_status2(LIBSSH2_CHANNEL *channel, uint32_= t
> *status)
>
> Which then can return the proper value from the protocol in a value > separate
> from the return code. Wouldn't that work fine for you?
>
> --
>
>

> =A0 / daniel.haxx.= se
>
>
> ------------------------------
>
> _______________________________________________
> libssh2-devel mailing list
> libssh2-devel@cool.haxx.= se
> http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-dev= el
>
>
> End of libssh2-devel Digest, Vol 38, Issue 7
> ********************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cool.haxx= .se/pipermail/libssh2-devel/attachments/20120716/a3beb8ab/attachment-0001.h= tml>

------------------------------

Message: 2
Date: Mon, 16 Jul 2012 13:04:32 +0200
From: Peter Stuge <peter@stuge.se&= gt;
To: libssh2-devel@cool.haxx.s= e
Subject: Re: libssh2_channel_get_exit_status (Daniel Stenberg)
Message-ID: <20120= 716110432.8470.qmail@stuge.se>
Content-Type: text/plain; charset=3Dus-ascii

aalok sood wrote:
> I will add the api and send in a patch.

Remember to include documentation.


//Peter


------------------------------

_______________________________________________
libssh2-devel mailing list
libssh2-devel@cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel


End of libssh2-devel Digest, Vol 38, Issue 8
********************************************

--14dae93b578058fb1e04cbe4717a-- --===============1169770206== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1169770206==-- From libssh2-devel-bounces@cool.haxx.se Sat Oct 13 05:54:03 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9D3rf9k023393; Sat, 13 Oct 2012 05:53:59 +0200 Received: from na3sys009aog130.obsmtp.com (na3sys009aog130.obsmtp.com [74.125.149.143]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9D3raS0023357 for ; Sat, 13 Oct 2012 05:53:36 +0200 Received: from mail-oa0-f54.google.com ([209.85.219.54]) (using TLSv1) by na3sys009aob130.postini.com ([74.125.148.12]) with SMTP ID DSNKUHjlvy0ZSeivLOg4g7dQpMH2viLVk0Ma@postini.com; Fri, 12 Oct 2012 20:53:37 PDT Received: by mail-oa0-f54.google.com with SMTP id n9so3594397oag.41 for ; Fri, 12 Oct 2012 20:53:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=LzxHiQWIXk26yIUx6+waQyO0W3rYwxAlNZZ87k6jI18=; b=DtngjzSxg/nukzW7TYzuzt/gxExSWejOtAxA/5ZB8LlcG2AHWYXFlkZT9Ej6UlFg8v Kw+D9izzi1Ad/LhFkxSKshjR+vbk/BDM9RPBDXq0KYx0JABvQpA37nBJm87agP73+rAw 4Ts1GccKPfZB3KDvfYUfevkG9D3Rg/IhkZn7wy8yelECIpiGLgH3LLKdFRbbf7i3jLig WejW5Dr49ECsjnCE6HBX5fxVKKApajhL+dKZDnKWJNsDVFIQToJCwef8bk+zE3HM/nmQ oMnYxnXynRXJxDe/Bbu8FoJA6jx6t/vZpSEa7kVYfXW+4pFdmwY0kfDszh6Tx4TtfPoP frSw== MIME-Version: 1.0 Received: by 10.60.11.162 with SMTP id r2mr4880143oeb.114.1350100415420; Fri, 12 Oct 2012 20:53:35 -0700 (PDT) Received: by 10.76.139.196 with HTTP; Fri, 12 Oct 2012 20:53:35 -0700 (PDT) In-Reply-To: References: Date: Fri, 12 Oct 2012 20:53:35 -0700 Message-ID: Subject: select timeouts after libssh2_sftp_open_ex From: Anton Obukhov To: libssh2-devel@cool.haxx.se Content-Type: multipart/mixed; boundary=e89a8fb1f832ac17ea04cbe8bfd0 X-Gm-Message-State: ALoCoQnxS0hUoQUPzlmij4Uvhj0sbmF4c6COcXPxCqcQWg33ChnHwAyqnLBXeU3J924DTA+FX9SH X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --e89a8fb1f832ac17ea04cbe8bfd0 Content-Type: multipart/alternative; boundary=e89a8fb1f832ac17e604cbe8bfce --e89a8fb1f832ac17e604cbe8bfce Content-Type: text/plain; charset=ISO-8859-1 Hello, I'm trying to implement SFTP streaming functionality, and came across this issue. In the code attached, a random data is generated, and its portions are uploaded to a remote machine to /tmp/test using SFTP. Then, this file is repeatedly downloaded back to the host. The code uses non-blocking API. For file sizes between 1000 and 20000 bytes it works great. However, when data size is 30000 bytes, the upload happens successfully, but the following download results in a timeout in select after the call to libssh2_sftp_open_ex returns LIBSSH2_ERROR_EAGAIN. Here is the relevant piece of trace (full trace is attached to this email along with main.cpp, which can be compiled easily). I tried to strip the code as much as possible to make it self-contained, but please let me know if any additional information is required. Thanks in advance! 5ff0: 6D 59 0F 67 AD CD 1C 23 A8 7E 19 F4 19 30 51 A6 : mY.g...#.~...0Q. 6000: 3C 10 BC B7 : <... >>>>> End libssh2_sftp_write res=0 >>>>> Begin libssh2_sftp_open_ex [libssh2] 0.800717 SFTP: Sending file open request [libssh2] 0.800717 Conn: Writing 34 bytes on channel 0/0, stream #0 [libssh2] 0.802717 Conn: Writing 34 bytes on channel 0/0, stream #0 [libssh2] 0.802717 Socket: Recved 52/16384 bytes to 02e38fd4+0 => libssh2_transport_read() raw (52 bytes) 0000: 69 F3 B6 5E 2E 43 6F 2B 1E FC EA 36 E9 40 6D A3 : i..^.Co+...6.@m. 0010: 80 7F E3 69 90 E1 A0 60 9A 01 ED 2E 67 8D D3 97 : ...i...`....g... 0020: DD 08 AB 06 1C 24 E7 E0 2F 8B 57 B4 09 15 22 AB : .....$../.W...". 0030: 7D 8E A9 E2 : }... => libssh2_transport_read() plain (9 bytes) 0000: 5D 00 00 00 00 00 00 60 00 : ]......`. [libssh2] 0.802717 Transport: Packet type 93 received, length=9 [libssh2] 0.802717 Conn: Window adjust for channel 0/0, adding 24576 bytes, new window_size=24576 [libssh2] 0.802717 Conn: Sending 34 bytes on channel 0/0, stream_id=0 => libssh2_transport_write plain (9 bytes) 0000: 5E 00 00 00 00 00 00 00 22 : ^......." => libssh2_transport_write plain2 (34 bytes) 0000: 00 00 00 1E 03 00 00 00 02 00 00 00 09 2F 74 6D : ............./tm 0010: 70 2F 74 65 73 74 00 00 00 01 00 00 00 04 00 00 : p/test.......... 0020: 81 B6 : .. [libssh2] 0.802717 Socket: Sent 84/84 bytes at 02e3cffc => libssh2_transport_write send() (84 bytes) 0000: 46 99 5C 82 A2 14 F9 68 9E EC C3 A3 C8 5A 8C A6 : F.\....h.....Z.. 0010: 6B 98 86 79 99 74 00 CA 30 65 CC 1B 76 1C D2 5A : k..y.t..0e..v..Z 0020: DE A1 0F AC EE 8E D7 9A EA A5 75 D6 E5 81 3A 74 : ..........u...:t 0030: C2 1A 98 55 91 92 F2 68 A0 58 60 49 C6 09 1F 96 : ...U...h.X`I.... 0040: B6 2F 2E 56 95 D2 A8 6E 85 26 E5 10 DF FD D1 EC : ./.V...n.&...... 0050: DF 06 E7 3C : ...< [libssh2] 0.802717 SFTP: recv packet ### Error: select timeout file=main.cpp line=241 >>>>> Begin libssh2_sftp_close_handle [libssh2] 5.809003 SFTP: Closing handle --e89a8fb1f832ac17e604cbe8bfce Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,

I'm trying to = implement SFTP streaming functionality, and came across this issue. In the = code attached, a random data is generated, and its portions are uploaded to= a remote machine to /tmp/test using SFTP. Then, this file is repeatedly do= wnloaded back to the host.

The code uses non-blocking API. For file sizes between = 1000 and 20000 bytes it works great. However, when data size is 30000 bytes= , the upload happens successfully, but the following download results in a = timeout in select after the call to libssh2_sftp_open_ex returns LIBSSH2_ER= ROR_EAGAIN.

Here is the relevant piece of trace (full trace is atta= ched to this email along with main.cpp, which can be compiled easily). I tr= ied to strip the code as much as possible to make it self-contained, but pl= ease let me know if any additional information is required. Thanks in advan= ce!

5ff0: 6D 59 0F 67 AD CD 1C 23 A8 7E 19 F4 19 30 51 A6 = : mY.g...#.~...0Q.
6000: 3C 10 BC B7 = : <...
>>>>> End libssh2_sftp_write res=3D0
>&= gt;>>> Begin libssh2_sftp_open_ex
[libssh2] 0.800717 SFTP: Sending file open request
[libssh2] 0.800717 Co= nn: Writing 34 bytes on channel 0/0, stream #0
[libssh2] 0.802717 Conn: = Writing 34 bytes on channel 0/0, stream #0
[libssh2] 0.802717 Socket: Re= cved 52/16384 bytes to 02e38fd4+0
=3D> libssh2_transport_read() raw (52 bytes)
0000: 69 F3 B6 5E 2E 43 = 6F 2B 1E FC EA 36 E9 40 6D A3 : i..^.Co+...6.@m.
0010: 80 7F E3 69 90 E= 1 A0 60 9A 01 ED 2E 67 8D D3 97 : ...i...`....g...
0020: DD 08 AB 06 1C= 24 E7 E0 2F 8B 57 B4 09 15 22 AB : .....$../.W...".
0030: 7D 8E A9 E2 : }...
=3D> li= bssh2_transport_read() plain (9 bytes)
0000: 5D 00 00 00 00 00 00 60 00= : ]......`.
[libssh2] 0.802717 Transport: Packet t= ype 93 received, length=3D9
[libssh2] 0.802717 Conn: Window adjust for channel 0/0, adding 24576 bytes,= new window_size=3D24576
[libssh2] 0.802717 Conn: Sending 34 bytes on ch= annel 0/0, stream_id=3D0
=3D> libssh2_transport_write plain (9 bytes)=
0000: 5E 00 00 00 00 00 00 00 22 : ^......."
= =3D> libssh2_transport_write plain2 (34 bytes)
0000: 00 00 00 1E 03 0= 0 00 00 02 00 00 00 09 2F 74 6D : ............./tm
0010: 70 2F 74 65 73= 74 00 00 00 01 00 00 00 04 00 00 : p/test..........
0020: 81 B6 : ..
[libssh2] 0.= 802717 Socket: Sent 84/84 bytes at 02e3cffc
=3D> libssh2_transport_wr= ite send() (84 bytes)
0000: 46 99 5C 82 A2 14 F9 68 9E EC C3 A3 C8 5A 8= C A6 : F.\....h.....Z..
0010: 6B 98
86 79 99 74 00 CA 30 65 CC 1B 76 1C D2 5A : k..y.t..0= e..v..Z
0020: DE A1 0F AC EE 8E D7 9A EA A5 75 D6 E5 81 3A 74 : .......= ...u...:t
0030: C2 1A 98 55 91 92 F2 68 A0 58 60 49 C6 09 1F 96 : ...U...h.X`I.... 0040: B6 2F 2E 56 95 D2 A8 6E 85 26 E5 10 DF FD D1 EC : ./.V...n.&....= ..
0050: DF 06 E7 3C : ...<
[= libssh2] 0.802717 SFTP: recv packet
### Error: select timeout
fil= e=3Dmain.cpp
line=3D241
>>>>> Begin libssh2_sftp_close_= handle
[libssh2] 5.809003 SFTP: Closing handle

--e89a8fb1f832ac17e604cbe8bfce-- --e89a8fb1f832ac17ea04cbe8bfd0 Content-Type: text/x-c++src; charset=US-ASCII; name="main.cpp" Content-Disposition: attachment; filename="main.cpp" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h886iaw22 I2lmZGVmIF9XSU4zMg0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojZWxzZQ0KI2luY2x1ZGUgPHN5 cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8c3lzL3NlbGVj dC5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPGFycGEvaW5ldC5oPg0KI2VuZGlm DQoNCiNpbmNsdWRlIDxzeXMvdGltZS5oPg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNp bmNsdWRlIDxjdHlwZS5oPg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KDQojaW5jbHVkZSA8aW9tYW5p cD4NCiNpbmNsdWRlIDxpb3N0cmVhbT4NCiNpbmNsdWRlIDxzc3RyZWFtPg0KI2luY2x1ZGUgPGZz dHJlYW0+DQojaW5jbHVkZSA8dmVjdG9yPg0KDQojaW5jbHVkZSA8bGlic3NoMi5oPg0KI2luY2x1 ZGUgPGxpYnNzaDJfc2Z0cC5oPg0KDQoNCmNvbnN0IGludCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMg PSA1MDAwOw0KY29uc3QgY2hhciAqaG9zdG5hbWUgPSAiMTkyLjE2OC4xLjIwIjsNCmNvbnN0IGNo YXIgKnVzZXJuYW1lID0gInVibnQiOw0KY29uc3QgY2hhciAqcGFzc3dvcmQgPSAidWJudCI7DQoN Cg0KYm9vbCBiRmlyc3RUaW1lID0gdHJ1ZTsNCnN0ZDo6b2ZzdHJlYW0gc3NoTG9nRmlsZTsNCnZv aWQgbGlic3NoMl90cmFjZV9oYW5kbGVyX2NiKExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbiwgdm9p ZCAqb3BhcXVlLCBjb25zdCBjaGFyICptc2csIHNpemVfdCBtc2dTeikNCnsNCiAgICBpZiAoYkZp cnN0VGltZSkNCiAgICB7DQogICAgICAgIHNzaExvZ0ZpbGUub3Blbigic3NoLmxvZyIpOw0KICAg ICAgICBiRmlyc3RUaW1lID0gZmFsc2U7DQogICAgfQ0KICAgIHNzaExvZ0ZpbGUgPDwgbXNnIDw8 IHN0ZDo6ZW5kbDsNCn0NCg0KDQp2b2lkIG5jdkRlYnVnT3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5n ICZtc2cpDQp7DQogICAgaWYgKGJGaXJzdFRpbWUpDQogICAgew0KICAgICAgICBzc2hMb2dGaWxl Lm9wZW4oInNzaC5sb2ciKTsNCiAgICAgICAgYkZpcnN0VGltZSA9IGZhbHNlOw0KICAgIH0NCiAg ICBzc2hMb2dGaWxlIDw8IG1zZzsNCiAgICBzdGQ6OmNvdXQgPDwgbXNnOw0KfQ0KDQoNCiNkZWZp bmUgbmN2UHJpbnQobXNnKSBcDQogICAgZG8gXA0KICAgIHsgXA0KICAgICAgICBzdGQ6Om9zdHJp bmdzdHJlYW0gb3NzOyBcDQogICAgICAgIG9zcyA8PCBtc2cgPDwgc3RkOjplbmRsOyBcDQogICAg ICAgIG5jdkRlYnVnT3V0cHV0KG9zcy5zdHIoKSk7IFwNCiAgICB9IHdoaWxlICgwKQ0KDQoNCiNk ZWZpbmUgbmN2QXNzZXJ0UHJpbnQocHJlZCwgbXNnLCBpc1dhcm5pbmcpIFwNCiAgICBkbyBcDQog ICAgeyBcDQogICAgICAgIGlmICghKHByZWQpKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAg c3RkOjpvc3RyaW5nc3RyZWFtIG9zczsgXA0KICAgICAgICAgICAgb3NzIDw8ICIjIyMgIiA8PCAo aXNXYXJuaW5nID8gIldhcm5pbmc6ICIgOiAiRXJyb3I6ICIpIDw8IG1zZyA8PCBcDQogICAgICAg ICAgICAgICAgICAgIlxuICAgIGZpbGU9IiA8PCBfX0ZJTEVfXyA8PCBcDQogICAgICAgICAgICAg ICAgICAgIlxuICAgIGxpbmU9IiA8PCBfX0xJTkVfXyA8PCBcDQogICAgICAgICAgICAgICAgICAg c3RkOjplbmRsOyBcDQogICAgICAgICAgICBuY3ZEZWJ1Z091dHB1dChvc3Muc3RyKCkpOyBcDQog ICAgICAgIH0gXA0KICAgIH0gd2hpbGUgKDApDQoNCg0KI2RlZmluZSBuY3ZBc3NlcnRSZXR1cm4o cHJlZCwgbXNnLCByZXRDb2RlKSBcDQogICAgZG8gXA0KICAgIHsgXA0KICAgICAgICBib29sIF9w cmVkID0gKHByZWQpOyBcDQogICAgICAgIG5jdkFzc2VydFByaW50KF9wcmVkLCBtc2csIGZhbHNl KTsgXA0KICAgICAgICBpZiAoIV9wcmVkKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAgcmV0 dXJuIHJldENvZGU7IFwNCiAgICAgICAgfSBcDQogICAgfSB3aGlsZSAoMCkNCg0KDQpjbGFzcyBB dXRvV3NhSW5pdA0Kew0KcHVibGljOg0KICAgIEF1dG9Xc2FJbml0KGJvb2wgJmJJbml0KQ0KICAg IHsNCiNpZmRlZiBfV0lOMzINCiAgICAgICAgdGhpcy0+YkluaXQgPSBmYWxzZTsNCiAgICAgICAg YkluaXQgPSBmYWxzZTsNCiAgICAgICAgV1NBREFUQSB3c2FEYXRhOw0KICAgICAgICBpbnQgcmVz ID0gV1NBU3RhcnR1cChNQUtFV09SRCgxLCAxKSwgJndzYURhdGEpOw0KICAgICAgICBuY3ZBc3Nl cnRSZXR1cm4ocmVzID09IDAsICJXU0FTdGFydHVwIGZhaWxlZCIsICk7DQogICAgICAgIHRoaXMt PmJJbml0ID0gdHJ1ZTsNCiNlbmRpZg0KICAgICAgICBiSW5pdCA9IHRydWU7DQogICAgfQ0KDQog ICAgfkF1dG9Xc2FJbml0KCkNCiAgICB7DQojaWZkZWYgX1dJTjMyDQogICAgICAgIGlmICh0aGlz LT5iSW5pdCkNCiAgICAgICAgew0KICAgICAgICAgICAgV1NBQ2xlYW51cCgpOw0KICAgICAgICB9 DQojZW5kaWYNCiAgICB9DQoNCnByaXZhdGU6DQogICAgYm9vbCBiSW5pdDsNCn07DQoNCg0KY2xh c3MgQXV0b0xpYnNzaDJJbml0DQp7DQpwdWJsaWM6DQogICAgQXV0b0xpYnNzaDJJbml0KGJvb2wg JmJJbml0KQ0KICAgIHsNCiAgICAgICAgdGhpcy0+YkluaXQgPSBmYWxzZTsNCiAgICAgICAgYklu aXQgPSBmYWxzZTsNCg0KICAgICAgICBpbnQgcmVzID0gbGlic3NoMl9pbml0KDApOw0KICAgICAg ICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJMaWJTU0gyIGluaXRpYWxpemF0aW9uIGZhaWx1 cmUsIHJlcz0iIDw8IHJlcywgKTsNCg0KICAgICAgICB0aGlzLT5iSW5pdCA9IHRydWU7DQogICAg ICAgIGJJbml0ID0gdHJ1ZTsNCiAgICB9DQoNCiAgICB+QXV0b0xpYnNzaDJJbml0KCkNCiAgICB7 DQogICAgICAgIGlmICh0aGlzLT5iSW5pdCkNCiAgICAgICAgew0KICAgICAgICAgICAgbGlic3No Ml9leGl0KCk7DQogICAgICAgIH0NCiAgICB9DQpwcml2YXRlOg0KICAgIGJvb2wgYkluaXQ7DQp9 Ow0KDQoNCmNsYXNzIEF1dG9Tb2NrZXQNCnsNCnB1YmxpYzoNCiAgICBBdXRvU29ja2V0KGNvbnN0 IHN0ZDo6c3RyaW5nICZpcEFkZHIsIHVuc2lnbmVkIGlwUG9ydCwgbGlic3NoMl9zb2NrZXRfdCAm c29jaywgYm9vbCAmYkluaXQpDQogICAgew0KICAgICAgICBpbnQgcmVzOw0KICAgICAgICB0aGlz LT5iSW5pdCA9IGZhbHNlOw0KICAgICAgICBiSW5pdCA9IGZhbHNlOw0KDQogICAgICAgIHRoaXMt PnNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0KICAgICAgICBuY3ZBc3Nl cnRSZXR1cm4odGhpcy0+c29jayAhPSAwLCAiU29ja2V0IGNyZWF0ZSBmYWlsdXJlIiwgKTsNCg0K ICAgICAgICB1bnNpZ25lZCBob3N0YWRkciA9IGluZXRfYWRkcihpcEFkZHIuY19zdHIoKSk7DQoN CiAgICAgICAgc29ja2FkZHJfaW4gc29ja0FkZHJJbjsNCiAgICAgICAgc29ja0FkZHJJbi5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsNCiAgICAgICAgc29ja0FkZHJJbi5zaW5fcG9ydCA9IGh0b25zKGlw UG9ydCk7DQogICAgICAgIHNvY2tBZGRySW4uc2luX2FkZHIuc19hZGRyID0gaG9zdGFkZHI7DQog ICAgICAgIHJlcyA9IGNvbm5lY3QodGhpcy0+c29jaywgKHNvY2thZGRyKikoJnNvY2tBZGRySW4p LCBzaXplb2Yoc29ja2FkZHJfaW4pKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAw LCAiU29ja2V0IGNvbm5lY3QgZmFpbHVyZSwgcmVzPSIgPDwgcmVzLCApOw0KDQogICAgICAgIHNv Y2sgPSB0aGlzLT5zb2NrOw0KICAgICAgICB0aGlzLT5iSW5pdCA9IHRydWU7DQogICAgICAgIGJJ bml0ID0gdHJ1ZTsNCiAgICB9DQoNCiAgICB+QXV0b1NvY2tldCgpDQogICAgew0KICAgICAgICBp ZiAodGhpcy0+YkluaXQpDQogICAgICAgIHsNCiNpZmRlZiBXSU4zMg0KICAgICAgICAgICAgY2xv c2Vzb2NrZXQoc29jayk7DQojZWxzZQ0KICAgICAgICAgICAgY2xvc2Uoc29jayk7DQojZW5kaWYN CiAgICAgICAgfQ0KICAgIH0NCg0KcHJpdmF0ZToNCiAgICBib29sIGJJbml0Ow0KICAgIGxpYnNz aDJfc29ja2V0X3Qgc29jazsNCn07DQoNCg0Kc3RydWN0IExpYlNzaDJTZXNzaW9uV3JhcA0Kew0K ICAgIExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbjsNCiAgICBsaWJzc2gyX3NvY2tldF90IHNvY2s7 DQp9Ow0KDQoNCnN0YXRpYyBpbnQgdGltZWRXYWl0U2Vzc2lvblNvY2tldChMSUJTU0gyX1NFU1NJ T04gKnNlc3Npb24sIGxpYnNzaDJfc29ja2V0X3Qgc29jaywgaW50IHRpbWVvdXRNcykNCnsNCiAg ICBmZF9zZXQgZmQ7DQogICAgRkRfWkVSTygmZmQpOw0KICAgIEZEX1NFVChzb2NrLCAmZmQpOw0K DQogICAgaW50IGRpciA9IGxpYnNzaDJfc2Vzc2lvbl9ibG9ja19kaXJlY3Rpb25zKHNlc3Npb24p Ow0KDQogICAgZmRfc2V0ICpyZWFkZmQgPSBOVUxMOw0KICAgIGlmIChkaXIgJiBMSUJTU0gyX1NF U1NJT05fQkxPQ0tfSU5CT1VORCkNCiAgICB7DQogICAgICAgIHJlYWRmZCA9ICZmZDsNCiAgICB9 DQoNCiAgICBmZF9zZXQgKndyaXRlZmQgPSBOVUxMOw0KICAgIGlmIChkaXIgJiBMSUJTU0gyX1NF U1NJT05fQkxPQ0tfT1VUQk9VTkQpDQogICAgew0KICAgICAgICB3cml0ZWZkID0gJmZkOw0KICAg IH0NCg0KICAgIHRpbWV2YWwgdGltZW91dDsNCiAgICB0aW1lb3V0LnR2X3NlYyA9IHRpbWVvdXRN cyAvIDEwMDA7DQogICAgdGltZW91dC50dl91c2VjID0gKHRpbWVvdXRNcyAlIDEwMDApICogMTAw MDsNCiAgICBpbnQgcmVzID0gc2VsZWN0KHNvY2srMSwgcmVhZGZkLCB3cml0ZWZkLCBOVUxMLCAm dGltZW91dCk7DQogICAgaWYgKHJlcyA9PSAwKQ0KICAgIHsNCiAgICAgICAgbmN2QXNzZXJ0UmV0 dXJuKGZhbHNlLCAic2VsZWN0IHRpbWVvdXQiLCBMSUJTU0gyX0VSUk9SX0VBR0FJTik7DQogICAg fQ0KICAgIGVsc2UgaWYgKHJlcyA8IDApDQogICAgew0KICAgICAgICBuY3ZBc3NlcnRSZXR1cm4o ZmFsc2UsICJzZWxlY3QgZXJyb3I9IiA8PCByZXMsIC0xKTsNCiAgICB9DQogICAgcmV0dXJuIDA7 DQp9DQoNCg0KI2RlZmluZSBMSUJTU0gyX1RJTUVEX1BSRUZJWChsaWJzc2gyX2Z1bmNfbmFtZSkg XA0KICAgIG5jdlByaW50KCI+Pj4+PiBCZWdpbiAiIGxpYnNzaDJfZnVuY19uYW1lKTsgXA0KICAg IGludCByZXM7IFwNCiAgICB3aGlsZSAoMSkgXA0KICAgIHsNCg0KI2RlZmluZSBMSUJTU0gyX1RJ TUVEX1NVRkZJWF9JTlQobGlic3NoMl9mdW5jX25hbWUsIEJXQUlUU09DS0VULCBTRVNTSU9OLCBT T0NLLCBTRlRQKSBcDQogICAgICAgIGlmIChyZXMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIFwN CiAgICAgICAgeyBcDQogICAgICAgICAgICBpZiAoU0ZUUCAhPSBOVUxMICYmIHJlcyA9PSBMSUJT U0gyX0VSUk9SX1NGVFBfUFJPVE9DT0wpIFwNCiAgICAgICAgICAgIHsgXA0KICAgICAgICAgICAg ICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKFNGVFApOyBcDQogICAgICAgICAgICB9 IFwNCiAgICAgICAgICAgIG5jdlByaW50KCI+Pj4+PiBFbmQgIiBsaWJzc2gyX2Z1bmNfbmFtZSAi cmVzPSIgPDwgcmVzKTsgXA0KICAgICAgICAgICAgcmV0dXJuIHJlczsgXA0KICAgICAgICB9IFwN CiAgICAgICAgaWYgKEJXQUlUU09DS0VUKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAgcmVz ID0gdGltZWRXYWl0U2Vzc2lvblNvY2tldChTRVNTSU9OLCBTT0NLLCB0aW1lb3V0TXMpOyBcDQog ICAgICAgICAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICI+Pj4+PiBFbmQgIiBsaWJzc2gy X2Z1bmNfbmFtZSAiOiB0aW1lZFdhaXRTZXNzaW9uU29ja2V0IGZhaWx1cmUsIHJlcz0iIDw8IHJl cywgcmVzKTsgXA0KICAgICAgICB9IFwNCiAgICB9DQoNCiNkZWZpbmUgTElCU1NIMl9USU1FRF9T VUZGSVhfQ0hBTk5FTChsaWJzc2gyX2Z1bmNfbmFtZSwgY2huYW1lLCBTRVNTSU9OLCBTT0NLLCBT RlRQKSBcDQogICAgICAgIGlmIChjaG5hbWUgIT0gTlVMTCkgXA0KICAgICAgICB7IFwNCiAgICAg ICAgICAgIG5jdlByaW50KCI+Pj4+PiBFbmQgIiBsaWJzc2gyX2Z1bmNfbmFtZSk7IFwNCiAgICAg ICAgICAgIHJldHVybiAwOyBcDQogICAgICAgIH0gXA0KICAgICAgICByZXMgPSBsaWJzc2gyX3Nl c3Npb25fbGFzdF9lcnJubyhTRVNTSU9OKTsgXA0KICAgICAgICBpZiAocmVzICE9IExJQlNTSDJf RVJST1JfRUFHQUlOKSBcDQogICAgICAgIHsgXA0KICAgICAgICAgICAgaWYgKFNGVFAgIT0gTlVM TCAmJiByZXMgPT0gTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MKSBcDQogICAgICAgICAgICB7 IFwNCiAgICAgICAgICAgICAgICByZXMgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihTRlRQKTsg XA0KICAgICAgICAgICAgfSBcDQogICAgICAgICAgICBuY3ZQcmludCgiPj4+Pj4gRW5kICIgbGli c3NoMl9mdW5jX25hbWUgInJlcz0iIDw8IHJlcyk7IFwNCiAgICAgICAgICAgIHJldHVybiByZXM7 IFwNCiAgICAgICAgfSBcDQogICAgICAgIHJlcyA9IHRpbWVkV2FpdFNlc3Npb25Tb2NrZXQoU0VT U0lPTiwgU09DSywgdGltZW91dE1zKTsgXA0KICAgICAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09 IDAsICI+Pj4+PiBFbmQgIiBsaWJzc2gyX2Z1bmNfbmFtZSAiOiB0aW1lZFdhaXRTZXNzaW9uU29j a2V0IGZhaWx1cmUsIHJlcz0iIDw8IHJlcywgcmVzKTsgXA0KICAgIH0NCg0KDQpzdGF0aWMgaW50 IHRpbWVkX2xpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UoTElCU1NIMl9TRVNTSU9OICpzZXNzaW9u LCBsaWJzc2gyX3NvY2tldF90IHNvY2ssIGludCB0aW1lb3V0TXMpDQp7DQogICAgTElCU1NIMl9U SU1FRF9QUkVGSVgoImxpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UiKTsNCiAgICByZXMgPSBsaWJz c2gyX3Nlc3Npb25faGFuZHNoYWtlKHNlc3Npb24sIHNvY2spOw0KICAgIExJQlNTSDJfVElNRURf U1VGRklYX0lOVCgibGlic3NoMl9zZXNzaW9uX2hhbmRzaGFrZSIsIDAsIE5VTEwsIDAsIE5VTEwp DQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChMSUJT U0gyX1NFU1NJT04gKnNlc3Npb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0Kew0KICAgIExJQlNTSDJfVElN RURfUFJFRklYKCJsaWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdCIpOw0KICAgIHJlcyA9IGxpYnNz aDJfc2Vzc2lvbl9kaXNjb25uZWN0KHNlc3Npb24sIGRlc2NyaXB0aW9uKTsNCiAgICBMSUJTU0gy X1RJTUVEX1NVRkZJWF9JTlQoImxpYnNzaDJfc2Vzc2lvbl9kaXNjb25uZWN0IiwgMCwgTlVMTCwg MCwgTlVMTCkNCn0NCg0KDQpzdGF0aWMgaW50IHRpbWVkX2xpYnNzaDJfc2Vzc2lvbl9mcmVlKExJ QlNTSDJfU0VTU0lPTiAqc2Vzc2lvbiwgaW50IHRpbWVvdXRNcykNCnsNCiAgICBMSUJTU0gyX1RJ TUVEX1BSRUZJWCgibGlic3NoMl9zZXNzaW9uX2ZyZWUiKTsNCiAgICByZXMgPSBsaWJzc2gyX3Nl c3Npb25fZnJlZShzZXNzaW9uKTsNCiAgICBMSUJTU0gyX1RJTUVEX1NVRkZJWF9JTlQoImxpYnNz aDJfc2Vzc2lvbl9mcmVlIiwgMCwgTlVMTCwgMCwgTlVMTCkNCn0NCg0KDQpzdGF0aWMgaW50IHRp bWVkX2xpYnNzaDJfdXNlcmF1dGhfcGFzc3dvcmQoTElCU1NIMl9TRVNTSU9OICpzZXNzaW9uLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVz ZXJuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnBhc3N3b3JkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB0aW1lb3V0TXMpDQp7DQogICAgTElCU1NIMl9USU1FRF9QUkVGSVgoImxpYnNzaDJf dXNlcmF1dGhfcGFzc3dvcmQiKTsNCiAgICByZXMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3Jk KHNlc3Npb24sIHVzZXJuYW1lLCBwYXNzd29yZCk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhf SU5UKCJsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkIiwgMCwgTlVMTCwgMCwgTlVMTCkNCn0NCg0K DQpzdGF0aWMgaW50IHRpbWVkX2xpYnNzaDJfc2Z0cF9pbml0KGNvbnN0IExpYlNzaDJTZXNzaW9u V3JhcCAmc2Vzc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NI Ml9TRlRQICogJiBzZnRwQ2hhbm5lbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHRpbWVvdXRNcykNCnsNCiAgICBMSUJTU0gyX1RJTUVEX1BSRUZJWCgibGlic3NoMl9z ZnRwX2luaXQiKTsNCiAgICBzZnRwQ2hhbm5lbCA9IGxpYnNzaDJfc2Z0cF9pbml0KHNlc3Npb24u c2Vzc2lvbik7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfQ0hBTk5FTCgibGlic3NoMl9zZnRw X2luaXQiLCBzZnRwQ2hhbm5lbCwgc2Vzc2lvbi5zZXNzaW9uLCBzZXNzaW9uLnNvY2ssIE5VTEwp DQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3NmdHBfc2h1dGRvd24oY29uc3QgTGli U3NoMlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0TXMpDQp7DQogICAgTElCU1NIMl9USU1FRF9Q UkVGSVgoImxpYnNzaDJfc2Z0cF9zaHV0ZG93biIpOw0KICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9z aHV0ZG93bihzZnRwQ2hhbm5lbCk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfSU5UKCJsaWJz c2gyX3NmdHBfc2h1dGRvd24iLCAxLCBzZXNzaW9uLnNlc3Npb24sIHNlc3Npb24uc29jaywgc2Z0 cENoYW5uZWwpDQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3NmdHBfb3Blbl9leDIo Y29uc3QgTGliU3NoMlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtb2RlLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqICYgc2Z0 cEhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1l b3V0TXMpDQp7DQogICAgTElCU1NIMl9USU1FRF9QUkVGSVgoImxpYnNzaDJfc2Z0cF9vcGVuX2V4 Iik7DQogICAgc2Z0cEhhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNmdHBDaGFubmVsLCBm aWxlbmFtZSwgc3RybGVuKGZpbGVuYW1lKSwgZmxhZ3MsIG1vZGUsIExJQlNTSDJfU0ZUUF9PUEVO RklMRSk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfQ0hBTk5FTCgibGlic3NoMl9zZnRwX29w ZW5fZXgiLCBzZnRwSGFuZGxlLCBzZXNzaW9uLnNlc3Npb24sIHNlc3Npb24uc29jaywgc2Z0cENo YW5uZWwpDQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gyX3NmdHBfY2xvc2VfaGFuZGxl KGNvbnN0IExpYlNzaDJTZXNzaW9uV3JhcCAmc2Vzc2lvbiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9IQU5ETEUg KnNmdHBIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHRpbWVvdXRNcykNCnsNCiAgICBMSUJTU0gyX1RJTUVEX1BSRUZJWCgibGlic3NoMl9zZnRw X2Nsb3NlX2hhbmRsZSIpOw0KICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9jbG9zZV9oYW5kbGUoc2Z0 cEhhbmRsZSk7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhfSU5UKCJsaWJzc2gyX3NmdHBfY2xv c2VfaGFuZGxlIiwgMSwgc2Vzc2lvbi5zZXNzaW9uLCBzZXNzaW9uLnNvY2ssIHNmdHBDaGFubmVs KQ0KfQ0KDQoNCnN0YXRpYyBpbnQgdGltZWRfbGlic3NoMl9zZnRwX3JlYWQoY29uc3QgTGliU3No MlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMSUJTU0gyX1NGVFBfSEFORExFICpzZnRwSGFuZGxlLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBidWZmZXJfbWF4bGVuLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0Kew0KICAgIExJQlNTSDJfVElNRURfUFJFRklY KCJsaWJzc2gyX3NmdHBfcmVhZCIpOw0KICAgIHJlcyA9IGxpYnNzaDJfc2Z0cF9yZWFkKHNmdHBI YW5kbGUsIGJ1ZmZlciwgYnVmZmVyX21heGxlbik7DQogICAgTElCU1NIMl9USU1FRF9TVUZGSVhf SU5UKCJsaWJzc2gyX3NmdHBfcmVhZCIsIDEsIHNlc3Npb24uc2Vzc2lvbiwgc2Vzc2lvbi5zb2Nr LCBzZnRwQ2hhbm5lbCkNCn0NCg0KDQpzdGF0aWMgaW50IHRpbWVkX2xpYnNzaDJfc2Z0cF9yZWFk X2FsbChjb25zdCBMaWJTc2gyU2Vzc2lvbldyYXAgJnNlc3Npb24sDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0 cEhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVj dG9yPHVuc2lnbmVkIGNoYXI+ICZidWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc3pNYXgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgdGltZW91dE1zKQ0Kew0KICAgIGludCByZXM7DQogICAgYnVmLnJlc2l6ZSgwKTsNCiAg ICBjaGFyIGJ1ZmZlclsweDQwMDBdOw0KICAgIGludCBzekxlZnQgPSAoc3pNYXggPiAwID8gc3pN YXggOiBJTlRfTUFYKTsNCg0KICAgIGRvDQogICAgew0KICAgICAgICByZXMgPSB0aW1lZF9saWJz c2gyX3NmdHBfcmVhZChzZXNzaW9uLCBzZnRwQ2hhbm5lbCwgc2Z0cEhhbmRsZSwgYnVmZmVyLCBz dGQ6Om1pbjxpbnQ+KHN6TGVmdCwgc2l6ZW9mKGJ1ZmZlcikpLCB0aW1lb3V0TXMpOw0KICAgICAg ICBuY3ZBc3NlcnRSZXR1cm4ocmVzID49IDAsICJ0aW1lZF9saWJzc2gyX2NoYW5uZWxfcmVhZF9l eCBmYWlsdXJlLCByZXM9IiA8PCByZXMsIC0xKTsNCg0KICAgICAgICBpZiAocmVzID4gMCkNCiAg ICAgICAgew0KICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IGJ1Zi5zaXplKCk7DQogICAg ICAgICAgICBidWYucmVzaXplKG9sZFNpemUgKyByZXMpOw0KICAgICAgICAgICAgbWVtY3B5KCZi dWZbMF0gKyBvbGRTaXplLCBidWZmZXIsIHJlcyk7DQogICAgICAgICAgICBpZiAoc3pNYXggPiAw ICYmIChpbnQpYnVmLnNpemUoKSA+PSBzek1heCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0gd2hpbGUgKHJl cyA+IDApOw0KDQogICAgcmV0dXJuIDA7DQp9DQoNCg0Kc3RhdGljIGludCB0aW1lZF9saWJzc2gy X3NmdHBfd3JpdGUoY29uc3QgTGliU3NoMlNlc3Npb25XcmFwICZzZXNzaW9uLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNm dHBIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpidWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291 bnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0K ew0KICAgIExJQlNTSDJfVElNRURfUFJFRklYKCJsaWJzc2gyX3NmdHBfd3JpdGUiKTsNCiAgICBy ZXMgPSBsaWJzc2gyX3NmdHBfd3JpdGUoc2Z0cEhhbmRsZSwgYnVmZmVyLCBjb3VudCk7DQogICAg TElCU1NIMl9USU1FRF9TVUZGSVhfSU5UKCJsaWJzc2gyX3NmdHBfd3JpdGUiLCAxLCBzZXNzaW9u LnNlc3Npb24sIHNlc3Npb24uc29jaywgc2Z0cENoYW5uZWwpDQp9DQoNCg0Kc3RhdGljIGludCB0 aW1lZF9saWJzc2gyX3NmdHBfd3JpdGVfYWxsKGNvbnN0IExpYlNzaDJTZXNzaW9uV3JhcCAmc2Vz c2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NG VFAgKnNmdHBDaGFubmVsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNmdHBIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gJmJ1ZiwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dE1zKQ0K ew0KICAgIGludCByZXM7DQogICAgaW50IGJ1Zk9mZnMgPSAwOw0KICAgIGludCBidWZMZWZ0ID0g KGludClidWYuc2l6ZSgpOw0KDQogICAgZG8NCiAgICB7DQogICAgICAgIHJlcyA9IHRpbWVkX2xp YnNzaDJfc2Z0cF93cml0ZShzZXNzaW9uLCBzZnRwQ2hhbm5lbCwgc2Z0cEhhbmRsZSwgKGNvbnN0 IGNoYXIgKikmYnVmWzBdK2J1Zk9mZnMsIGJ1ZkxlZnQsIHRpbWVvdXRNcyk7DQogICAgICAgIG5j dkFzc2VydFJldHVybihyZXMgPj0gMCwgInRpbWVkX2xpYnNzaDJfc2Z0cF93cml0ZSBmYWlsdXJl LCByZXM9IiA8PCByZXMsIC0xKTsNCg0KICAgICAgICBpZiAocmVzID4gMCkNCiAgICAgICAgew0K ICAgICAgICAgICAgYnVmT2ZmcyArPSByZXM7DQogICAgICAgICAgICBidWZMZWZ0IC09IHJlczsN CiAgICAgICAgICAgIGlmIChidWZMZWZ0IDw9IDApDQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChy ZXMgPiAwKTsNCg0KICAgIHJldHVybiAwOw0KfQ0KDQoNCmNsYXNzIEF1dG9Tc2hTZXNzaW9uDQp7 DQpwdWJsaWM6DQogICAgQXV0b1NzaFNlc3Npb24obGlic3NoMl9zb2NrZXRfdCBzb2NrLCBMSUJT U0gyX1NFU1NJT04gKiAmIHNlc3Npb24sIGJvb2wgJmJJbml0KQ0KICAgIHsNCiAgICAgICAgaW50 IHJlczsNCiAgICAgICAgdGhpcy0+YkluaXQgPSBmYWxzZTsNCiAgICAgICAgYkluaXQgPSBmYWxz ZTsNCiAgICAgICAgc2Vzc2lvbiA9IE5VTEw7DQoNCiAgICAgICAgdGhpcy0+c2Vzc2lvbiA9IGxp YnNzaDJfc2Vzc2lvbl9pbml0KCk7DQogICAgICAgIG5jdkFzc2VydFJldHVybih0aGlzLT5zZXNz aW9uICE9IE5VTEwsICJsaWJzc2gyX3Nlc3Npb25faW5pdCBmYWlsdXJlIiwgKTsNCg0KICAgICAg ICBsaWJzc2gyX3Nlc3Npb25fc2V0X2Jsb2NraW5nKHRoaXMtPnNlc3Npb24sIDApOw0KDQogICAg ICAgIHJlcyA9IHRpbWVkX2xpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UodGhpcy0+c2Vzc2lvbiwg c29jaywgU1NIX0VBR0FJTl9USU1FT1VUX01TKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJl cyA9PSAwLCAidGltZWRfbGlic3NoMl9zZXNzaW9uX2hhbmRzaGFrZSBmYWlsdXJlLCByZXM9IiA8 PCByZXMsICk7DQoNCiAgICAgICAgdGhpcy0+YkluaXQgPSB0cnVlOw0KICAgICAgICBiSW5pdCA9 IHRydWU7DQogICAgICAgIHNlc3Npb24gPSB0aGlzLT5zZXNzaW9uOw0KDQogICAgICAgIGNvbnN0 IGNoYXIgKnNlc3Npb25Ib3N0a2V5SGFzaCA9IGxpYnNzaDJfaG9zdGtleV9oYXNoKHNlc3Npb24s IExJQlNTSDJfSE9TVEtFWV9IQVNIX01ENSk7DQogICAgICAgIG5jdkFzc2VydFJldHVybihzZXNz aW9uSG9zdGtleUhhc2ggIT0gTlVMTCwgImxpYnNzaDJfaG9zdGtleV9oYXNoIGZhaWx1cmUiLCAp Ow0KICAgIH0NCg0KICAgIGludCBhdXRoZW50aWNhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnVzZXJu YW1lLCBjb25zdCBzdGQ6OnN0cmluZyAmcGFzc3dvcmQpDQogICAgew0KICAgICAgICByZXR1cm4g dGltZWRfbGlic3NoMl91c2VyYXV0aF9wYXNzd29yZCh0aGlzLT5zZXNzaW9uLCB1c2VybmFtZS5j X3N0cigpLCBwYXNzd29yZC5jX3N0cigpLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAgIH0N Cg0KICAgIH5BdXRvU3NoU2Vzc2lvbigpDQogICAgew0KICAgICAgICBpZiAodGhpcy0+YkluaXQp DQogICAgICAgIHsNCiAgICAgICAgICAgIGludCByZXM7DQogICAgICAgICAgICByZXMgPSB0aW1l ZF9saWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChzZXNzaW9uLCAiYnllIiwgU1NIX0VBR0FJTl9U SU1FT1VUX01TKTsNCiAgICAgICAgICAgIG5jdkFzc2VydFByaW50KHJlcyA9PSAwLCAidGltZWRf bGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3QgZmFpbHVyZSwgcmVzPSIgPDwgcmVzLCBmYWxzZSk7 DQogICAgICAgICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3Nlc3Npb25fZnJlZShzZXNzaW9uLCBT U0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAgICAgICAgICAgbmN2QXNzZXJ0UHJpbnQocmVzID09 IDAsICJ0aW1lZF9saWJzc2gyX3Nlc3Npb25fZnJlZSBmYWlsdXJlLCByZXM9IiA8PCByZXMsIGZh bHNlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KcHJpdmF0ZToNCiAgICBib29sIGJJbml0Ow0KICAg IExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbjsNCn07DQoNCg0KY2xhc3MgQXV0b1NmdHBDaGFubmVs DQp7DQpwdWJsaWM6DQogICAgQXV0b1NmdHBDaGFubmVsKGNvbnN0IExpYlNzaDJTZXNzaW9uV3Jh cCAmc2Vzc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICogJiBzZnRwQ2hh bm5lbCwNCiAgICAgICAgICAgICAgICAgICAgaW50ICZyZXMpDQogICAgICA6IHNlc3Npb24oc2Vz c2lvbikNCiAgICB7DQogICAgICAgIHRoaXMtPmJJbml0ID0gZmFsc2U7DQogICAgICAgIHNmdHBD aGFubmVsID0gTlVMTDsNCiAgICAgICAgcmVzID0gdGltZWRfbGlic3NoMl9zZnRwX2luaXQoc2Vz c2lvbiwgc2Z0cENoYW5uZWwsIFNTSF9FQUdBSU5fVElNRU9VVF9NUyk7DQogICAgICAgIG5jdkFz c2VydFJldHVybihyZXMgPT0gMCwgInRpbWVkX2xpYnNzaDJfc2Z0cF9pbml0IGZhaWx1cmUsIHJl cz0iIDw8IHJlcywgKTsNCiAgICAgICAgdGhpcy0+c2Z0cENoYW5uZWwgPSBzZnRwQ2hhbm5lbDsN CiAgICAgICAgdGhpcy0+YkluaXQgPSB0cnVlOw0KICAgIH0NCg0KICAgIH5BdXRvU2Z0cENoYW5u ZWwoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMtPmJJbml0KQ0KICAgICAgICB7DQogICAgICAg ICAgICBpbnQgcmVzID0gdGltZWRfbGlic3NoMl9zZnRwX3NodXRkb3duKHNlc3Npb24sIHNmdHBD aGFubmVsLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAgICAgICAgICAgbmN2QXNzZXJ0UHJp bnQocmVzID09IDAsICJ0aW1lZF9saWJzc2gyX3NmdHBfc2h1dGRvd24gZmFpbHVyZSwgcmVzPSIg PDwgcmVzLCBmYWxzZSk7DQogICAgICAgIH0NCiAgICB9DQoNCnByaXZhdGU6DQogICAgYm9vbCBi SW5pdDsNCiAgICBjb25zdCBMaWJTc2gyU2Vzc2lvbldyYXAgJnNlc3Npb247DQogICAgTElCU1NI Ml9TRlRQICpzZnRwQ2hhbm5lbDsNCn07DQoNCg0KY2xhc3MgQXV0b1NmdHBIYW5kbGUNCnsNCnB1 YmxpYzoNCiAgICBBdXRvU2Z0cEhhbmRsZShjb25zdCBMaWJTc2gyU2Vzc2lvbldyYXAgJnNlc3Np b24sDQogICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbCwNCiAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwNCiAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBmbGFncywNCiAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfSEFORExFICog JiBzZnRwSGFuZGxlLA0KICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0TXMsDQogICAgICAg ICAgICAgICAgICAgaW50ICZyZXMpDQogICAgICA6IHNlc3Npb24oc2Vzc2lvbiksDQogICAgICAg IHNmdHBDaGFubmVsKHNmdHBDaGFubmVsKSwNCiAgICAgICAgdGltZW91dE1zKHRpbWVvdXRNcykN CiAgICB7DQogICAgICAgIHRoaXMtPmJJbml0ID0gZmFsc2U7DQogICAgICAgIHNmdHBIYW5kbGUg PSBOVUxMOw0KICAgICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3NmdHBfb3Blbl9leDIoc2Vzc2lv biwgc2Z0cENoYW5uZWwsIGZpbGVuYW1lLCBmbGFncywgMDY2Niwgc2Z0cEhhbmRsZSwgdGltZW91 dE1zKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAwLCAidGltZWRfbGlic3NoMl9z ZnRwX29wZW5fZXgyIGZhaWx1cmUsIHJlcz0iIDw8IHJlcywgKTsNCiAgICAgICAgdGhpcy0+c2Z0 cEhhbmRsZSA9IHNmdHBIYW5kbGU7DQogICAgICAgIHRoaXMtPmJJbml0ID0gdHJ1ZTsNCiAgICB9 DQoNCiAgICB+QXV0b1NmdHBIYW5kbGUoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMtPmJJbml0 KQ0KICAgICAgICB7DQogICAgICAgICAgICBpbnQgcmVzID0gdGltZWRfbGlic3NoMl9zZnRwX2Ns b3NlX2hhbmRsZShzZXNzaW9uLCBzZnRwQ2hhbm5lbCwgc2Z0cEhhbmRsZSwgdGltZW91dE1zKTsN CiAgICAgICAgICAgIG5jdkFzc2VydFByaW50KHJlcyA9PSAwLCAidGltZWRfbGlic3NoMl9zZnRw X2Nsb3NlX2hhbmRsZSBmYWlsdXJlLCByZXM9IiA8PCByZXMsIGZhbHNlKTsNCiAgICAgICAgfQ0K ICAgIH0NCg0KcHJpdmF0ZToNCiAgICBib29sIGJJbml0Ow0KICAgIGNvbnN0IExpYlNzaDJTZXNz aW9uV3JhcCAmc2Vzc2lvbjsNCiAgICBMSUJTU0gyX1NGVFAgKnNmdHBDaGFubmVsOw0KICAgIGlu dCB0aW1lb3V0TXM7DQogICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0cEhhbmRsZTsNCn07DQoN Cg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCnsNCiAgICBpbnQgcmVzOw0KICAg IGJvb2wgYkluaXQ7DQoNCiAgICBBdXRvV3NhSW5pdCB3c2FJbml0KGJJbml0KTsNCiAgICBuY3ZB c3NlcnRSZXR1cm4oYkluaXQsICJBdXRvV3NhSW5pdCBjdG9yIGZhaWx1cmUiLCAtMSk7DQoNCiAg ICBBdXRvTGlic3NoMkluaXQgbGlic3NoMkluaXQoYkluaXQpOw0KICAgIG5jdkFzc2VydFJldHVy bihiSW5pdCwgIkF1dG9MaWJzc2gySW5pdCBjdG9yIGZhaWx1cmUiLCAtMSk7DQoNCiAgICBsaWJz c2gyX3NvY2tldF90IHNvY2s7DQogICAgQXV0b1NvY2tldCBhU29ja2V0KGhvc3RuYW1lLCAyMiwg c29jaywgYkluaXQpOw0KICAgIG5jdkFzc2VydFJldHVybihiSW5pdCwgIkF1dG9Tb2NrZXQgY3Rv ciBmYWlsdXJlIiwgLTEpOw0KDQogICAgTElCU1NIMl9TRVNTSU9OICpzZXNzaW9uOw0KICAgIEF1 dG9Tc2hTZXNzaW9uIGFTc2hTZXNzaW9uKHNvY2ssIHNlc3Npb24sIGJJbml0KTsNCiAgICBuY3ZB c3NlcnRSZXR1cm4oYkluaXQsICJBdXRvU3NoU2Vzc2lvbiBjdG9yIGZhaWx1cmUiLCAtMSk7DQoN CiAgICByZXMgPSBhU3NoU2Vzc2lvbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkKTsN CiAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJTU0ggYXV0aGVudGljYXRpb24gZmFpbHVy ZSIsIC0xKTsNCg0KICAgIGxpYnNzaDJfdHJhY2Uoc2Vzc2lvbiwgfjApOw0KICAgIGxpYnNzaDJf dHJhY2Vfc2V0aGFuZGxlcihzZXNzaW9uLCBOVUxMLCBsaWJzc2gyX3RyYWNlX2hhbmRsZXJfY2Ip Ow0KDQogICAgTGliU3NoMlNlc3Npb25XcmFwIHNlc3Npb25XcmFwOw0KICAgIHNlc3Npb25XcmFw LnNlc3Npb24gPSBzZXNzaW9uOw0KICAgIHNlc3Npb25XcmFwLnNvY2sgPSBzb2NrOw0KDQogICAg c3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gbm9pc2UoMTAyNCoxMDI0LCAwKTsNCiAgICBmb3Ig KGludCBpPTA7IGk8KGludClub2lzZS5zaXplKCk7IGkrKykNCiAgICB7DQogICAgICAgIG5vaXNl W2ldID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqICgoZG91YmxlKXJhbmQoKSkgLyBSQU5EX01BWCk7 DQogICAgfQ0KDQogICAgLy8zMDAwMCBpcyB0aGUgZmlyc3QgcHJvYmxlbWF0aWMgc2l6ZQ0KICAg IGludCBzeltdID0gey8qMTAwMCwgMjAwMCwgMzAwMCwgNDAwMCwgNTAwMCwgMTAwMDAsIDIwMDAw LCAqLzMwMDAwLCA0MDAwMCwgNTAwMDAsIDgwMDAwLCAxMDAwMDAsIDIwMDAwMCwgNDAwMDAwLCA4 MDAwMDAsIDEwMDAwMDB9Ow0KDQogICAgTElCU1NIMl9TRlRQICpzZnRwQ2hhbm5lbDsNCiAgICBB dXRvU2Z0cENoYW5uZWwgYVNmdHBDaGFubmVsKHNlc3Npb25XcmFwLCBzZnRwQ2hhbm5lbCwgcmVz KTsNCiAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJBdXRvU2Z0cENoYW5uZWwgY3RvciBm YWlsdXJlIiwgLTEpOw0KDQogICAgZm9yICh1bnNpZ25lZCBpPTA7IGk8c2l6ZW9mKHN6KS9zaXpl b2YoaW50KTsgaSsrKQ0KICAgIHsNCiAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4g c3ViTm9pc2UoJm5vaXNlWzBdLCAmbm9pc2VbMF0gKyBzeltpXSk7DQoNCiAgICAgICAgTElCU1NI Ml9TRlRQX0hBTkRMRSAqc2Z0cEhhbmRsZVVwOw0KICAgICAgICBBdXRvU2Z0cEhhbmRsZSBhU2Z0 cEhhbmRsZVVwKHNlc3Npb25XcmFwLCBzZnRwQ2hhbm5lbCwgIi90bXAvdGVzdCIsIExJQlNTSDJf RlhGX0NSRUFUfExJQlNTSDJfRlhGX1RSVU5DfExJQlNTSDJfRlhGX1dSSVRFLCBzZnRwSGFuZGxl VXAsIFNTSF9FQUdBSU5fVElNRU9VVF9NUywgcmVzKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJu KHJlcyA9PSAwLCAiQXV0b1NmdHBIYW5kbGUgY3RvciBmYWlsdXJlIiwgLTEpOw0KDQogICAgICAg IHJlcyA9IHRpbWVkX2xpYnNzaDJfc2Z0cF93cml0ZV9hbGwoc2Vzc2lvbldyYXAsIHNmdHBDaGFu bmVsLCBzZnRwSGFuZGxlVXAsIHN1Yk5vaXNlLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMpOw0KICAg ICAgICBuY3ZBc3NlcnRSZXR1cm4ocmVzID09IDAsICJ0aW1lZF9saWJzc2gyX3NmdHBfd3JpdGVf YWxsLCByZXM9IiA8PCByZXMsIC0xKTsNCg0KICAgICAgICBMSUJTU0gyX1NGVFBfSEFORExFICpz ZnRwSGFuZGxlRG93bjsNCiAgICAgICAgQXV0b1NmdHBIYW5kbGUgYVNmdHBIYW5kbGVEb3duKHNl c3Npb25XcmFwLCBzZnRwQ2hhbm5lbCwgIi90bXAvdGVzdCIsIExJQlNTSDJfRlhGX1JFQUQsIHNm dHBIYW5kbGVEb3duLCBTU0hfRUFHQUlOX1RJTUVPVVRfTVMsIHJlcyk7DQogICAgICAgIG5jdkFz c2VydFJldHVybihyZXMgPT0gMCwgIkF1dG9TZnRwSGFuZGxlIGN0b3IgZmFpbHVyZSIsIC0xKTsN Cg0KICAgICAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdWJOb2lzZVJlY3ZkOw0KICAg ICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3NmdHBfcmVhZF9hbGwoc2Vzc2lvbldyYXAsIHNmdHBD aGFubmVsLCBzZnRwSGFuZGxlRG93biwgc3ViTm9pc2VSZWN2ZCwgMCwgU1NIX0VBR0FJTl9USU1F T1VUX01TKTsNCiAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAwLCAidGltZWRfbGlic3No Ml9zZnRwX3dyaXRlX2FsbCwgcmVzPSIgPDwgcmVzLCAtMSk7DQoNCiAgICAgICAgbmN2QXNzZXJ0 UmV0dXJuKHN1Yk5vaXNlLnNpemUoKSA9PSBzdWJOb2lzZVJlY3ZkLnNpemUoKSwgIkRhdGEgdmFs aWRhdGlvbiBmYWlsZWQiLCAtMSk7DQogICAgICAgIG5jdkFzc2VydFJldHVybigwID09IG1lbWNt cCgmc3ViTm9pc2VbMF0sICZzdWJOb2lzZVJlY3ZkWzBdLCBzdWJOb2lzZVJlY3ZkLnNpemUoKSks ICJEYXRhIHZhbGlkYXRpb24gZmFpbGVkIiwgLTEpOw0KDQogICAgICAgIGNvbnN0IGludCBudW1J dGVyID0gNTAvKGkrMSk7DQogICAgICAgIGZvciAoaW50IGo9MDsgajxudW1JdGVyOyBqKyspDQog ICAgICAgIHsNCiAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNmdHBIYW5kbGVEb3du MjsNCiAgICAgICAgICAgIEF1dG9TZnRwSGFuZGxlIGFTZnRwSGFuZGxlRG93bihzZXNzaW9uV3Jh cCwgc2Z0cENoYW5uZWwsICIvdG1wL3Rlc3QiLCBMSUJTU0gyX0ZYRl9SRUFELCBzZnRwSGFuZGxl RG93bjIsIFNTSF9FQUdBSU5fVElNRU9VVF9NUywgcmVzKTsNCiAgICAgICAgICAgIG5jdkFzc2Vy dFJldHVybihyZXMgPT0gMCwgIkF1dG9TZnRwSGFuZGxlIGN0b3IgZmFpbHVyZSIsIC0xKTsNCg0K ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gc3ViTm9pc2VSZWN2ZDI7DQog ICAgICAgICAgICByZXMgPSB0aW1lZF9saWJzc2gyX3NmdHBfcmVhZF9hbGwoc2Vzc2lvbldyYXAs IHNmdHBDaGFubmVsLCBzZnRwSGFuZGxlRG93bjIsIHN1Yk5vaXNlUmVjdmQyLCAwLCBTU0hfRUFH QUlOX1RJTUVPVVRfTVMpOw0KICAgICAgICAgICAgbmN2QXNzZXJ0UmV0dXJuKHJlcyA9PSAwLCAi dGltZWRfbGlic3NoMl9zZnRwX3dyaXRlX2FsbCwgcmVzPSIgPDwgcmVzLCAtMSk7DQogICAgICAg IH0NCg0KICAgICAgICBuY3ZQcmludCgiU2VyaWVzIG9mICIgPDwgc3pbaV0gPDwgIiBieXRlcyBk b3dubG9hZGVkIHZpYSBTRlRQIik7DQogICAgfQ0KDQogICAgcmV0dXJuIDA7DQp9DQo= --e89a8fb1f832ac17ea04cbe8bfd0 Content-Type: application/x-gzip; name="repro.tar.gz" Content-Disposition: attachment; filename="repro.tar.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h886wzjn1 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 --e89a8fb1f832ac17ea04cbe8bfd0 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --e89a8fb1f832ac17ea04cbe8bfd0-- From libssh2-devel-bounces@cool.haxx.se Sat Oct 13 06:12:49 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9D4Cgdl004476; Sat, 13 Oct 2012 06:12:47 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9D4CeJS004469 for ; Sat, 13 Oct 2012 06:12:40 +0200 Received: (qmail 2609 invoked by uid 501); 13 Oct 2012 04:05:59 -0000 Message-ID: <20121013040559.2608.qmail@stuge.se> Date: Sat, 13 Oct 2012 06:05:59 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: select timeouts after libssh2_sftp_open_ex Mail-Followup-To: libssh2-devel@cool.haxx.se References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Anton Obukhov wrote: > the following download results in a timeout Did you try this on a few different platforms? //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 15:58:50 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FDwI8a016315; Mon, 15 Oct 2012 15:58:41 +0200 Received: from gator378.hostgator.com (gator378.hostgator.com [184.173.199.219]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FDwGDm016309 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 15 Oct 2012 15:58:16 +0200 Received: from [173.231.110.50] (port=44315 helo=[192.168.10.210]) by gator378.hostgator.com with esmtpa (Exim 4.80) (envelope-from ) id 1TNkGB-0004Mu-Eg for libssh2-devel@cool.haxx.se; Mon, 15 Oct 2012 07:59:07 -0500 Message-ID: <507C089A.6080906@yahoo.ca> Date: Mon, 15 Oct 2012 08:59:06 -0400 From: Maxime Larocque User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 MIME-Version: 1.0 To: libssh2 development Subject: Re: select timeouts after libssh2_sftp_open_ex References: In-Reply-To: X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator378.hostgator.com X-AntiAbuse: Original Domain - cool.haxx.se X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - yahoo.ca X-BWhitelist: no X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: ([192.168.10.210]) [173.231.110.50]:44315 X-Source-Auth: max@weirdows.com X-Email-Count: 6 X-Source-Cap: bWF4bXRsO21heG10bDtnYXRvcjM3OC5ob3N0Z2F0b3IuY29t X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="iso-8859-1"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9FDwI8a016315 Hi Anton, Le 12/10/2012 23:53, Anton Obukhov a écrit : > The code uses non-blocking API. For file sizes between 1000 and 20000 > bytes it works great. However, when data size is 30000 bytes, the > upload happens successfully, but the following download results in a > timeout in select after the call to libssh2_sftp_open_ex returns > LIBSSH2_ERROR_EAGAIN. I have a doubt about your usage of select (which, incidentally, is identical to the libssh2 examples). Is it safe to call select with the readfds and the writefds being a pointer to the same structure? The select man page does not say anything about this, but the select_tut always uses 2 fdsets. From the man page: ============================== On success, *select*() and *pselect*() return the number of file descriptors contained in the three returned descriptor sets (that is, the total number of bits that are set in /readfds/, /writefds/, /exceptfds/) which may be zero if the timeout expires before anything interesting happens. ============================== From what I understand of this (it can depend on the implementation), but if you pass the same fdset to read and write, and if one of them gets cleared (not ready), it could effectively return 0, even if one of them is ready. Maxime Larocque _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 16:19:27 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FEJLmG029503; Mon, 15 Oct 2012 16:19:26 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FEJJwa029427 for ; Mon, 15 Oct 2012 16:19:19 +0200 Received: (qmail 29739 invoked by uid 501); 15 Oct 2012 14:19:20 -0000 Message-ID: <20121015141920.29738.qmail@stuge.se> Date: Mon, 15 Oct 2012 16:19:20 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: select timeouts after libssh2_sftp_open_ex Mail-Followup-To: libssh2-devel@cool.haxx.se References: <507C089A.6080906@yahoo.ca> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <507C089A.6080906@yahoo.ca> X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Maxime Larocque wrote: > Is it safe to call select with the readfds and the writefds being a > pointer to the same structure? I do not think so. Please send patches. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 18:06:17 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FG5wWE004542; Mon, 15 Oct 2012 18:06:14 +0200 Received: from xware.se (static-213-115-131-235.sme.bredbandsbolaget.se [213.115.131.235]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FG5uM7004495 for ; Mon, 15 Oct 2012 18:05:56 +0200 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=192.168.34.151; From: =?iso-8859-1?Q?Torbj=F6rn_Lindgren?= To: Subject: ProFTPD SFTP connection problem Date: Mon, 15 Oct 2012 18:05:51 +0200 Message-ID: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 14.0 Thread-Index: Ac2q7vJOYuEoCr8USUu43R/1LfXRUA== Content-Language: en-us X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============2013016377==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This is a multipart message in MIME format. --===============2013016377== Content-Type: multipart/alternative; boundary="----=_NextPart_000_00E6_01CDAAFF.B6727830" Content-Language: en-us This is a multipart message in MIME format. ------=_NextPart_000_00E6_01CDAAFF.B6727830 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello =20 Like the original poster on this subject I fail to connect to ProFTPD = using libssh2 so I would be interested to know if this problem has been = solved. I run the sftp.c example on Windows7 compiled with Visual Studio 2008, against a ProFTPD server version 1.3.3rc3 and libssh2_session_handshake returns -43. According to the logged banner in the trace output, the = server is SSH-2.0-mod_sftp/0.9.7. I have no direct access to the server so at = this moment I do not know what the server log says. The client trace log have some "Failure Event: -37" here and there, but they are present also when connecting to a working server. It ends with: =20 [libssh2] 0.609810 Transport: Looking for packet of type: 6 [libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5) Failure establishing SSH session: -43 =20 At some occations libssh2_session_handshake waits for several minutes. = At those occations return is still -43 but it is (got 0) instead of (got = 5). =20 I would be very grateful for any help =20 /Torbj=F6rn ------=_NextPart_000_00E6_01CDAAFF.B6727830 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

Hello

 

Like the original poster on this subject I fail to connect = to ProFTPD using libssh2 so I would be interested to know if this = problem has been solved.

I run the sftp.c example on Windows7 compiled with Visual = Studio 2008, against a ProFTPD server version 1.3.3rc3 and = libssh2_session_handshake returns -43. According to the logged banner in = the trace output, the server is SSH-2.0-mod_sftp/0.9.7. I have no direct = access to the server so at this moment I do not know what the server log = says. The client trace log have some "Failure Event: -37" here = and there, but they are present also when connecting to a working = server. It ends with:

 

[libssh2] 0.609810 Transport: Looking for packet of type: = 6

[libssh2] = 0.609810 Socket: Error recving 16384 bytes (got = 5)

Failure = establishing SSH session: -43

 

At some occations = libssh2_session_handshake waits for several minutes. At those occations = return is still -43 but it is (got 0) instead of (got = 5).

 

I would be very grateful for any = help

 

/Torbj=F6rn

------=_NextPart_000_00E6_01CDAAFF.B6727830-- --===============2013016377== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============2013016377==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 18:18:14 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FGI8XH012297; Mon, 15 Oct 2012 18:18:13 +0200 Received: from mail.adbitaly.com (mail.adbitaly.com [93.57.16.197]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FGI6L9012199 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT) for ; Mon, 15 Oct 2012 18:18:06 +0200 Received: from ADBBEXCH01.adbitaly.com ([::1]) by adbbexch01.adbitaly.com ([::1]) with mapi id 14.01.0421.002; Mon, 15 Oct 2012 18:18:02 +0200 From: Timothy Redaelli To: "libssh2-devel@cool.haxx.se" Subject: New about nettle support? Thread-Topic: New about nettle support? Thread-Index: Ac2q8HhNGPTSm1UCTCKgJa5MtCmyJg== Date: Mon, 15 Oct 2012 16:18:01 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.94.130] MIME-Version: 1.0 X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9FGI6L9012199 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Hi, Any news about nettle support (http://trac.libssh2.org/ticket/227)? Do anyone have a (unofficial too) patch? Thanks in advance -- Timothy M. Redaelli _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 19:01:31 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FH1Hlb015167; Mon, 15 Oct 2012 19:01:27 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FH1G8Z015134 for ; Mon, 15 Oct 2012 19:01:16 +0200 Received: (qmail 27345 invoked from network); 15 Oct 2012 17:01:13 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 15 Oct 2012 17:01:13 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Cc: libssh2-devel@cool.haxx.se Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software X-Trac-Project: libssh2 Date: Mon, 15 Oct 2012 17:01:13 -0000 X-URL: https://trac.libssh2.org/ Subject: Re: [libssh2] #227: nettle support X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/227#comment:2 Message-ID: <058.c7c9d2557ed720f456849b547a0a546f@libssh2.stuge.se> References: <043.ea73fcd1508a7faeacbc82c8689c2f79@libssh2.stuge.se> X-Trac-Ticket-ID: 227 In-Reply-To: <043.ea73fcd1508a7faeacbc82c8689c2f79@libssh2.stuge.se> X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9FH1G8Z015134 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #227: nettle support --------------------------+----------------- Reporter: vtorri | Owner: Type: enhancement | Status: new Priority: normal | Milestone: Component: crypto | Version: Resolution: | Keywords: Blocked By: | Blocks: --------------------------+----------------- Changes (by stuge): * version: 1.3.0 => -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 20:02:56 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FI2agx032551; Mon, 15 Oct 2012 20:02:53 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FI2YdS032540 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 15 Oct 2012 20:02:34 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9FI2Y68032536 for ; Mon, 15 Oct 2012 20:02:34 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Mon, 15 Oct 2012 20:02:34 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: New about nettle support? In-Reply-To: Message-ID: References: User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Mon, 15 Oct 2012, Timothy Redaelli wrote: > Any news about nettle support (http://trac.libssh2.org/ticket/227)? > > Do anyone have a (unofficial too) patch? I don't know of anyone working on nettle support. The ticket is pretty much useless and serves no purpose. -- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 23:43:55 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FLhUPh000737; Mon, 15 Oct 2012 23:43:49 +0200 Received: from na3sys009aog101.obsmtp.com (na3sys009aog101.obsmtp.com [74.125.149.67]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FLhRov000699 for ; Mon, 15 Oct 2012 23:43:28 +0200 Received: from mail-ie0-f182.google.com ([209.85.223.182]) (using TLSv1) by na3sys009aob101.postini.com ([74.125.148.12]) with SMTP ID DSNKUHyDeglgJfzqhNNfaD3H89uzcgsirpgr@postini.com; Mon, 15 Oct 2012 14:43:29 PDT Received: by mail-ie0-f182.google.com with SMTP id k10so10112205iea.41 for ; Mon, 15 Oct 2012 14:43:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=gFg06PC2+H90q0Czk0yiE1QCKgk0m06SWBB1lS4f6lk=; b=B2RWvnmjGb9WF22Q19q3F0uHVaR1yyjPwHjz8ebPCOvKxflhMLOLMQJarPRaRVeIta cAkZwwYrmThHmxoiPg2LKIOA85HIb5nnQCe6QtiYPPDga9/oocL/Sqi29VtkXtoIe3mT rnAv/6c6LbYMWnFJj58/j9Ee5vTWihDp3+tpXGG0A3ONoJxpBmahxJLrfIAnpcAircUX j2A4OtlnWld2mBOAY/lr6b9TBBl5NBGxyYBOYqZxTcGXWLcjuoSUM2vr/3lcP543YTrn 1VluEJe8URxX5dmB2owQ+bHwuOJmHixBiQMilaGlyq4UQixU7Qn/qYdfrt7Fj8VM6yAa epUg== MIME-Version: 1.0 Received: by 10.50.104.137 with SMTP id ge9mr10130949igb.17.1350337402106; Mon, 15 Oct 2012 14:43:22 -0700 (PDT) Received: by 10.50.96.198 with HTTP; Mon, 15 Oct 2012 14:43:22 -0700 (PDT) In-Reply-To: References: Date: Mon, 15 Oct 2012 14:43:22 -0700 Message-ID: Subject: Re: select timeouts after libssh2_sftp_open_ex From: Anton Obukhov To: libssh2-devel@cool.haxx.se X-Gm-Message-State: ALoCoQkL6NlAJNtV8fQctwG7ENt3gbJsTcWuPThKA1Ic7MX5n7AnoTDIFAZ8s7hq3H7DA6VisE68 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1450179827==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============1450179827== Content-Type: multipart/alternative; boundary=e89a8f23585f2df4c104cc1fed51 --e89a8f23585f2df4c104cc1fed51 Content-Type: text/plain; charset=ISO-8859-1 > From: Peter Stuge > Date: Sat, 13 Oct 2012 06:05:59 +0200 > >> Anton Obukhov wrote: >> the following download results in a timeout > > Did you try this on a few different platforms? Yes - it works with Ubuntu desktop, however the device I'm connecting to is embedded, and it has OpenSSH SFTP server in it. --e89a8f23585f2df4c104cc1fed51 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable > From: Peter Stuge <peter_at_st= uge.se>=A0
> Date: Sat, 13 Oct 2012 06:05:59 +0200
>
= >> Anton Obukhov wrote:=A0
>> the following download results= in a timeout=A0
>
> Did you try this on a few different platforms?=A0

=
Yes - it works with Ubuntu desktop, however the device I'm c= onnecting to is embedded, and it has OpenSSH SFTP server in it.
--e89a8f23585f2df4c104cc1fed51-- --===============1450179827== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1450179827==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 23:45:14 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FLjDce002518; Mon, 15 Oct 2012 23:45:14 +0200 Received: from na3sys009aog126.obsmtp.com (na3sys009aog126.obsmtp.com [74.125.149.155]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FLjAI7002478 for ; Mon, 15 Oct 2012 23:45:11 +0200 Received: from mail-ia0-f182.google.com ([209.85.210.182]) (using TLSv1) by na3sys009aob126.postini.com ([74.125.148.12]) with SMTP ID DSNKUHyD57pc/UNE8WlZvNMX3rneLRswoZiw@postini.com; Mon, 15 Oct 2012 14:45:12 PDT Received: by mail-ia0-f182.google.com with SMTP id k10so4723104iag.41 for ; Mon, 15 Oct 2012 14:45:11 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=N0zAVq0+WtOA1tFlRUpuyItlm/sROjMdGdfNIDxKYno=; b=IvdFazk1fgxZSaUnuwyOvow8V0ikc2IkF3r4o3wquJbMgEgda/1PL9JTvv7cQ9DFZf UM0v6ezHBSMlnbfTvX7t7y16U9lnBGch1XwGtu+D6MCySOib3kgbWWlm0m4PdUxO6Q0a 6BCTZQdlVf3zJhhBY98XY6eptWAEowzmFkdz98S05PnqIxm17kr+OX1jH2sRq9tF63v+ MhlR0Bv0ZnVsIhYNNcL47P5bnoGuS9xNDAy3QzHyYFRHIyY3Be/k+xJb3AVRxDAdD7Hh W/vqmV/PxCnc5WCPGcEyutf0Y64qRY5Ml4+04JCXnRQ1/mfaCH1Kf+eaVR7bgt0dKHkl iMzQ== MIME-Version: 1.0 Received: by 10.50.36.201 with SMTP id s9mr6933558igj.17.1350337511153; Mon, 15 Oct 2012 14:45:11 -0700 (PDT) Received: by 10.50.96.198 with HTTP; Mon, 15 Oct 2012 14:45:11 -0700 (PDT) In-Reply-To: References: Date: Mon, 15 Oct 2012 14:45:11 -0700 Message-ID: Subject: Re: select timeouts after libssh2_sftp_open_ex From: Anton Obukhov To: libssh2-devel@cool.haxx.se X-Gm-Message-State: ALoCoQlNWYnU9eWwYrV3ED4Rd3u2SvzVdW1jiLVprknZ+wrQ2be/x6UsWL706ZdpTWDcIaLvcfo6 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1755597449==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============1755597449== Content-Type: multipart/alternative; boundary=14dae9340e35addf1004cc1ff381 --14dae9340e35addf1004cc1ff381 Content-Type: text/plain; charset=ISO-8859-1 > From: Maxime Larocque Date: Mon, 15 Oct 2012 08:59:06 -0400 > > I have a doubt about your usage of select (which, incidentally, is > identical to the libssh2 examples). Thanks for the suggestion, I changed it and tried again - unfortunately it didn't solve the problem.. --14dae9340e35addf1004cc1ff381 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
>=A0From: Maxime Larocque Date: Mon, 15 Oct 2012 08:59:06 -0400
>
> I have a doubt about your usage of select (which= , incidentally, is=A0
> identical to the libssh2 examples)= .

Thanks for the suggestion, I changed it and tried= again - unfortunately it didn't solve the problem..
--14dae9340e35addf1004cc1ff381-- --===============1755597449== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1755597449==-- From libssh2-devel-bounces@cool.haxx.se Mon Oct 15 23:47:23 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FLlLQN003464; Mon, 15 Oct 2012 23:47:22 +0200 Received: from na3sys009aog131.obsmtp.com (na3sys009aog131.obsmtp.com [74.125.149.247]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9FLlJ7L003442 for ; Mon, 15 Oct 2012 23:47:19 +0200 Received: from mail-ie0-f182.google.com ([209.85.223.182]) (using TLSv1) by na3sys009aob131.postini.com ([74.125.148.12]) with SMTP ID DSNKUHyEaDHgvHbWJZuKqDzfe0kJGbrlxtwX@postini.com; Mon, 15 Oct 2012 14:47:21 PDT Received: by mail-ie0-f182.google.com with SMTP id k10so10118910iea.41 for ; Mon, 15 Oct 2012 14:47:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=tKXkwxNzvLXNr3XDPxioyufiXi5FScI+72J3nbaADDg=; b=ehYouq6Hdn8nQH/Me3mEU0JDCd4hR/m8qMboZ3VlXTKpUbgqSA8ltGWU/KesJ1mcrg ApOIil5Q5rA4HN6aF+AG08Sv3vWgGXLQE6sulf/c/0u7IUCKNu9tmRRKNvxo3kua3b5N nsYnR9ZhZjs+cVawUdr+3ItUAxk9bxyEK/Lez+IG6zUphyYZbTxqWUkld4bve2LXBD7l yKqt41iRQdTuyavFLdrv+AlfvkmmZU5you5jNth5Tpu2gkz0H8yPKFue6BJrWcy2N7er Thrkz4Ut7IzsfUR0I5iPvPssS6Zqx10414259w//SLX9XePYrwf5TcJLPWLcLmUqSEZk UKkw== MIME-Version: 1.0 Received: by 10.50.171.4 with SMTP id aq4mr10192695igc.72.1350337639989; Mon, 15 Oct 2012 14:47:19 -0700 (PDT) Received: by 10.50.96.198 with HTTP; Mon, 15 Oct 2012 14:47:19 -0700 (PDT) In-Reply-To: References: Date: Mon, 15 Oct 2012 14:47:19 -0700 Message-ID: Subject: Re: select timeouts after libssh2_sftp_open_ex From: Anton Obukhov To: libssh2-devel@cool.haxx.se X-Gm-Message-State: ALoCoQkFZthLvv7hr+k61mbPd6ZTw6qPTTmnohA0zIXVlF+fMiK23ZKRDr6Ho/H+RCIu4qvojSL6 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============2037203972==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============2037203972== Content-Type: multipart/alternative; boundary=e89a8f2353f55bc19504cc1ffb8d --e89a8f2353f55bc19504cc1ffb8d Content-Type: text/plain; charset=ISO-8859-1 > Yes - it works with Ubuntu desktop, however the device I'm connecting to is embedded, and it has OpenSSH SFTP server in it. The main SSH server on that embedded device is dropbear, just in case this may be helpful. --e89a8f2353f55bc19504cc1ffb8d Content-Type: text/html; charset=ISO-8859-1 > Yes - it works with Ubuntu desktop, however the device I'm connecting to is embedded, and it has OpenSSH SFTP server in it.

The main SSH server on that embedded device is dropbear, just in case this may be helpful.
--e89a8f2353f55bc19504cc1ffb8d-- --===============2037203972== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============2037203972==-- From libssh2-devel-bounces@cool.haxx.se Tue Oct 16 00:52:56 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FMqgZs021722; Tue, 16 Oct 2012 00:52:54 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9FMqedh021706 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 16 Oct 2012 00:52:40 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9FMqeip021698 for ; Tue, 16 Oct 2012 00:52:40 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Tue, 16 Oct 2012 00:52:40 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: ProFTPD SFTP connection problem In-Reply-To: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se> Message-ID: References: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="1129329158-1931616621-1350341560=:16107" X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1129329158-1931616621-1350341560=:16107 Content-Type: TEXT/PLAIN; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8BIT On Mon, 15 Oct 2012, Torbjörn Lindgren wrote: > [libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5) > > Failure establishing SSH session: -43 > > At some occations libssh2_session_handshake waits for several minutes. At > those occations return is still -43 but it is (got 0) instead of (got 5). That's src/transport.c:376 at work. I can't easily tell why that triggers for you though. -- / daniel.haxx.se --1129329158-1931616621-1350341560=:16107 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --1129329158-1931616621-1350341560=:16107-- From libssh2-devel-bounces@cool.haxx.se Tue Oct 16 18:48:45 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GGmJvI024997; Tue, 16 Oct 2012 18:48:37 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GGmHDP024979 for ; Tue, 16 Oct 2012 18:48:17 +0200 Received: (qmail 2656 invoked from network); 16 Oct 2012 16:48:16 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 16 Oct 2012 16:48:16 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Cc: libssh2-devel@cool.haxx.se Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software X-Trac-Project: libssh2 Date: Tue, 16 Oct 2012 16:48:16 -0000 X-URL: https://trac.libssh2.org/ Subject: [libssh2] #249: sftp download data corruption X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249 Message-ID: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-Trac-Ticket-ID: 249 X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9GGmHDP024979 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #249: sftp download data corruption --------------------+-------------------- Reporter: maxmtl | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: SFTP | Version: 1.4.2 Keywords: | Blocked By: Blocks: | --------------------+-------------------- When using libssh2's sftp to receive a file from an Apache Mina SSHD server (v0.6), the file is corrupted. Other clients (sftp from Openssh, Filezilla) does not show this behavior. Other SSH servers do not show this behavior. The problem seems to be that when libssh2 asks for 2000 bytes in SSH_FXP_READ, Mina SSHD always returns 32KB. When the SSH_FXP_DATA packet is received, all 32KB is sent to the application instead of only 2000 bytes. However, the next 32KB received will have an offset of 2000 instead of 32KB, thus corrupting the file. The solutions: - libssh2: limit the length of the chunk to the length of data that was requested (see patch) - Mina: correct the length of the data sent With the attached patch it works, but takes much more time to complete (2m27 for a 2 MB file, instead of around 14 seconds). At least, the data is not corrupted. -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 00:23:34 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMNBOh007506; Wed, 17 Oct 2012 00:23:29 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMN9Sv007471 for ; Wed, 17 Oct 2012 00:23:09 +0200 Received: (qmail 4831 invoked from network); 16 Oct 2012 22:23:05 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 16 Oct 2012 22:23:05 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Cc: libssh2-devel@cool.haxx.se Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software X-Trac-Project: libssh2 Date: Tue, 16 Oct 2012 22:23:05 -0000 X-URL: https://trac.libssh2.org/ Subject: Re: [libssh2] #249: sftp download data corruption X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:1 Message-ID: <058.5b48a0ad844ac87782e642124f2d5974@libssh2.stuge.se> References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-Trac-Ticket-ID: 249 In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9GMN9Sv007471 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #249: sftp download data corruption ---------------------+------------------- Reporter: maxmtl | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: SFTP | Version: 1.4.2 Resolution: | Keywords: Blocked By: | Blocks: ---------------------+------------------- Comment (by bagder): That's a violation of the spec from the server's side. Both the -5 draft as well as the latest -13 draft mentions that it should not return more data than the 'length' as given in the SSH_FXP_READ packet. I would rather argue that when detecting that the data is larger than requested, it should probably bail out since there's no way for it to know what data it got and how to handle it. I think your fix is somewhat of a kludge that works for this particular broken server but we can't tell how other broken servers will respond with wrong sizes. -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 00:25:55 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMPrM8009874; Wed, 17 Oct 2012 00:25:55 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9GMPq8o009848 for ; Wed, 17 Oct 2012 00:25:52 +0200 Received: (qmail 4992 invoked from network); 16 Oct 2012 22:25:52 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 16 Oct 2012 22:25:52 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Cc: libssh2-devel@cool.haxx.se Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software X-Trac-Project: libssh2 Date: Tue, 16 Oct 2012 22:25:52 -0000 X-URL: https://trac.libssh2.org/ Subject: Re: [libssh2] #249: sftp download data corruption X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:2 Message-ID: <058.259a0f629dc5e2b0389c6829191f7bbb@libssh2.stuge.se> References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-Trac-Ticket-ID: 249 In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9GMPq8o009848 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #249: sftp download data corruption ---------------------+------------------- Reporter: maxmtl | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: SFTP | Version: 1.4.2 Resolution: | Keywords: Blocked By: | Blocks: ---------------------+------------------- Comment (by bagder): This seems to be the patch for Mina SSHD: https://issues.apache.org/jira/browse/SSHD-101 -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 10:27:02 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9H8QeR6009486; Wed, 17 Oct 2012 10:26:57 +0200 Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9H8QaOU009443 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Wed, 17 Oct 2012 10:26:37 +0200 Received: by mail-pa0-f54.google.com with SMTP id bi1so6626888pad.41 for ; Wed, 17 Oct 2012 01:26:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=7/intrxZs/MiZW27GBqgVCdRQETyOH21oyWTwmedi4o=; b=b/L8KpHNe7C/5coNFeuQNz1SU+MzQB11WTp3mR79k9aczUaclshxDqtO89tbhRjEp0 tgYe+uE1FqkKrEF89zK0GGqXrmqvqkBwrHcKO8OPiN+21wu0EQFpiZmt6GtlJhv1ZKrY 8lKOvR18gPOLHkUFQqQc3dIyfT3vMIgr1FG8A2AWpGLEH8y3UwJTeRduOW0cCTPAklQY Fu85RvY5yOVt/OoZ8rgcMXoiswGxy+jt3moC8bIrJt5U3YWU8QHMd0vOKj0SHBNyCjM/ mnDrPf2ARXWxSYRoypCferL79GgBjbDmvNO1uUKn67pj9BPRbdgFcXxEDz9d0Wj1w9Bi YDiw== MIME-Version: 1.0 Received: by 10.68.228.98 with SMTP id sh2mr54689497pbc.95.1350462392111; Wed, 17 Oct 2012 01:26:32 -0700 (PDT) Received: by 10.66.190.131 with HTTP; Wed, 17 Oct 2012 01:26:32 -0700 (PDT) In-Reply-To: References: <00e501cdaaee$f2e90bf0$d8bb23d0$@xware.se> Date: Wed, 17 Oct 2012 10:26:32 +0200 Message-ID: Subject: Re: ProFTPD SFTP connection problem From: Michael Krietemeyer To: libssh2 development Content-Type: multipart/mixed; boundary=e89a8ff243012a11a804cc3d07d0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --e89a8ff243012a11a804cc3d07d0 Content-Type: multipart/alternative; boundary=e89a8ff243012a11a404cc3d07ce --e89a8ff243012a11a404cc3d07ce Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello, I compiled the libssh2 with Visual Studio 2008 and bulid the example sftp.c (added a few printf statements and activated tracing). If i connect against our protftp the error is: Failure establishing SSH session: -41 The trace log is attached to this eMail. Greetings Michael 2012/10/16 Daniel Stenberg > On Mon, 15 Oct 2012, Torbj=C3=B6rn Lindgren wrote: > > [libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5) >> >> Failure establishing SSH session: -43 >> >> At some occations libssh2_session_handshake waits for several minutes. A= t >> those occations return is still -43 but it is (got 0) instead of (got 5)= . >> > > That's src/transport.c:376 at work. I can't easily tell why that triggers > for you though. > > -- > > / daniel.haxx.se > _______________________________________________ > libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel > > --e89a8ff243012a11a404cc3d07ce Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello,

I compiled the libssh2 with Visual Studio 2008 an= d bulid the example sftp.c (added a few printf statements and activated tra= cing). If i connect against our protftp the error is:=C2=A0
Failu= re establishing SSH session: -41

The trace log is attached to this eMail.

=
Greetings=C2=A0
Michael

2012/10/16 Daniel Stenberg <daniel@haxx.se>
On Mon, 15 Oct 2012, Torbj= =C3=B6rn Lindgren wrote:

[libssh2] 0.609810 Socket: Error recving 16384 bytes (got 5)

Failure establishing SSH session: -43

At some occations libssh2_session_handshake waits for several minutes. At those occations return is still -43 but it is (got 0) instead of (got 5).

That's src/transport.c:376 at work. I can't easily tell why that tr= iggers for you though.

--

=C2=A0/ daniel.haxx.se<= /a>

_______________________________________________
libssh2-devel
http://cool.haxx.se/cgi-bin/mailman/listinfo/li= bssh2-devel


--e89a8ff243012a11a404cc3d07ce-- --e89a8ff243012a11a804cc3d07d0 Content-Type: text/plain; charset=US-ASCII; name="trace.txt" Content-Disposition: attachment; filename="trace.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h8e6fk1c0 W2xpYnNzaDJdIDAuMDkwNjE2IFRyYW5zcG9ydDogc2Vzc2lvbl9zdGFydHVwIGZvciBzb2NrZXQg MTQwDQpbbGlic3NoMl0gMC4wOTA2MTYgVHJhbnNwb3J0OiBTZW5kaW5nIEJhbm5lcjogU1NILTIu MC1saWJzc2gyXzEuNC4yDQpbbGlic3NoMl0gMC4wOTA2MTYgU29ja2V0OiBTZW50IDIzLzIzIGJ5 dGVzIGF0IDAxMkYwODE0KzANCltsaWJzc2gyXSAwLjA5MDYxNiBTb2NrZXQ6IEVycm9yIHJlY3Zp bmcgMSBieXRlczogMTENCltsaWJzc2gyXSAwLjA5MDYxNiBGYWlsdXJlIEV2ZW50OiAtMzcgLSBG YWlsZWQgZ2V0dGluZyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAx IGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMg YmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXIN CltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNz aDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4x MTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBT b2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDog UmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQg MSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVz IGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVy DQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJz c2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAu MTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcg U29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6 IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVk IDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRl cyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5l cg0KW2xpYnNzaDJdIDAuMTEwNjE3IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGli c3NoMl0gMC4xMTA2MTcgU29ja2V0OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAw LjExMDYxNyBTb2NrZXQ6IFJlY3ZlZCAxIGJ5dGVzIGJhbm5lcg0KW2xpYnNzaDJdIDAuMTEwNjE3 IFNvY2tldDogUmVjdmVkIDEgYnl0ZXMgYmFubmVyDQpbbGlic3NoMl0gMC4xMTA2MTcgU29ja2V0 OiBSZWN2ZWQgMSBieXRlcyBiYW5uZXINCltsaWJzc2gyXSAwLjExMDYxNyBUcmFuc3BvcnQ6IFJl Y2VpdmVkIEJhbm5lcjogU1NILTIuMC1tb2Rfc2Z0cC8wLjkuNw0KW2xpYnNzaDJdIDAuMjA2NjIy IEtleSBFeDogU2VudCBLRVg6IGRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMSxkaWZmaWUtaGVs bG1hbi1ncm91cC1leGNoYW5nZS1zaGExLGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExDQpbbGli c3NoMl0gMC4yMDY2MjIgS2V5IEV4OiBTZW50IEhPU1RLRVk6IHNzaC1yc2Esc3NoLWRzcw0KW2xp YnNzaDJdIDAuMjA2NjIyIEtleSBFeDogU2VudCBDUllQVF9DUzogYWVzMTI4LWN0cixhZXMxOTIt Y3RyLGFlczI1Ni1jdHIsYWVzMjU2LWNiYyxyaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UsYWVz MTkyLWNiYyxhZXMxMjgtY2JjLGJsb3dmaXNoLWNiYyxhcmNmb3VyMTI4LGFyY2ZvdXIsY2FzdDEy OC1jYmMsM2Rlcy1jYmMNCltsaWJzc2gyXSAwLjIwNjYyMiBLZXkgRXg6IFNlbnQgQ1JZUFRfU0M6 IGFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYtY3RyLGFlczI1Ni1jYmMscmlqbmRhZWwtY2Jj QGx5c2F0b3IubGl1LnNlLGFlczE5Mi1jYmMsYWVzMTI4LWNiYyxibG93ZmlzaC1jYmMsYXJjZm91 cjEyOCxhcmNmb3VyLGNhc3QxMjgtY2JjLDNkZXMtY2JjDQpbbGlic3NoMl0gMC4yMDY2MjIgS2V5 IEV4OiBTZW50IE1BQ19DUzogaG1hYy1zaGExLGhtYWMtc2hhMS05NixobWFjLW1kNSxobWFjLW1k NS05NixobWFjLXJpcGVtZDE2MCxobWFjLXJpcGVtZDE2MEBvcGVuc3NoLmNvbQ0KW2xpYnNzaDJd IDAuMjA2NjIyIEtleSBFeDogU2VudCBNQUNfU0M6IGhtYWMtc2hhMSxobWFjLXNoYTEtOTYsaG1h Yy1tZDUsaG1hYy1tZDUtOTYsaG1hYy1yaXBlbWQxNjAsaG1hYy1yaXBlbWQxNjBAb3BlbnNzaC5j b20NCltsaWJzc2gyXSAwLjIwNjYyMiBLZXkgRXg6IFNlbnQgQ09NUF9DUzogbm9uZQ0KW2xpYnNz aDJdIDAuMjA2NjIyIEtleSBFeDogU2VudCBDT01QX1NDOiBub25lDQpbbGlic3NoMl0gMC4yMDY2 MjIgS2V5IEV4OiBTZW50IExBTkdfQ1M6IA0KW2xpYnNzaDJdIDAuMjA2NjIyIEtleSBFeDogU2Vu dCBMQU5HX1NDOiANCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWluICg2MzYgYnl0ZXMp DQowMDAwOiAxNCAzNyBENCA2NiA3MSAxMCBGNyA0MiAgRTggNUMgOTMgMzMgNDQgQUMgNTggMjIg OiAuNy5mcS4uQi5cLjNELlgiDQowMDEwOiBCRCAwMCAwMCAwMCA1OSA2NCA2OSA2NiAgNjYgNjkg NjUgMkQgNjggNjUgNkMgNkMgOiAuLi4uWWRpZmZpZS1oZWxsDQowMDIwOiA2RCA2MSA2RSAyRCA2 NyA3MiA2RiA3NSAgNzAgMzEgMzQgMkQgNzMgNjggNjEgMzEgOiBtYW4tZ3JvdXAxNC1zaGExDQow MDMwOiAyQyA2NCA2OSA2NiA2NiA2OSA2NSAyRCAgNjggNjUgNkMgNkMgNkQgNjEgNkUgMkQgOiAs ZGlmZmllLWhlbGxtYW4tDQowMDQwOiA2NyA3MiA2RiA3NSA3MCAyRCA2NSA3OCAgNjMgNjggNjEg NkUgNjcgNjUgMkQgNzMgOiBncm91cC1leGNoYW5nZS1zDQowMDUwOiA2OCA2MSAzMSAyQyA2NCA2 OSA2NiA2NiAgNjkgNjUgMkQgNjggNjUgNkMgNkMgNkQgOiBoYTEsZGlmZmllLWhlbGxtDQowMDYw OiA2MSA2RSAyRCA2NyA3MiA2RiA3NSA3MCAgMzEgMkQgNzMgNjggNjEgMzEgMDAgMDAgOiBhbi1n cm91cDEtc2hhMS4uDQowMDcwOiAwMCAwRiA3MyA3MyA2OCAyRCA3MiA3MyAgNjEgMkMgNzMgNzMg NjggMkQgNjQgNzMgOiAuLnNzaC1yc2Esc3NoLWRzDQowMDgwOiA3MyAwMCAwMCAwMCA5MiA2MSA2 NSA3MyAgMzEgMzIgMzggMkQgNjMgNzQgNzIgMkMgOiBzLi4uLmFlczEyOC1jdHIsDQowMDkwOiA2 MSA2NSA3MyAzMSAzOSAzMiAyRCA2MyAgNzQgNzIgMkMgNjEgNjUgNzMgMzIgMzUgOiBhZXMxOTIt Y3RyLGFlczI1DQowMGEwOiAzNiAyRCA2MyA3NCA3MiAyQyA2MSA2NSAgNzMgMzIgMzUgMzYgMkQg NjMgNjIgNjMgOiA2LWN0cixhZXMyNTYtY2JjDQowMGIwOiAyQyA3MiA2OSA2QSA2RSA2NCA2MSA2 NSAgNkMgMkQgNjMgNjIgNjMgNDAgNkMgNzkgOiAscmlqbmRhZWwtY2JjQGx5DQowMGMwOiA3MyA2 MSA3NCA2RiA3MiAyRSA2QyA2OSAgNzUgMkUgNzMgNjUgMkMgNjEgNjUgNzMgOiBzYXRvci5saXUu c2UsYWVzDQowMGQwOiAzMSAzOSAzMiAyRCA2MyA2MiA2MyAyQyAgNjEgNjUgNzMgMzEgMzIgMzgg MkQgNjMgOiAxOTItY2JjLGFlczEyOC1jDQowMGUwOiA2MiA2MyAyQyA2MiA2QyA2RiA3NyA2NiAg NjkgNzMgNjggMkQgNjMgNjIgNjMgMkMgOiBiYyxibG93ZmlzaC1jYmMsDQowMGYwOiA2MSA3MiA2 MyA2NiA2RiA3NSA3MiAzMSAgMzIgMzggMkMgNjEgNzIgNjMgNjYgNkYgOiBhcmNmb3VyMTI4LGFy Y2ZvDQowMTAwOiA3NSA3MiAyQyA2MyA2MSA3MyA3NCAzMSAgMzIgMzggMkQgNjMgNjIgNjMgMkMg MzMgOiB1cixjYXN0MTI4LWNiYywzDQowMTEwOiA2NCA2NSA3MyAyRCA2MyA2MiA2MyAwMCAgMDAg MDAgOTIgNjEgNjUgNzMgMzEgMzIgOiBkZXMtY2JjLi4uLmFlczEyDQowMTIwOiAzOCAyRCA2MyA3 NCA3MiAyQyA2MSA2NSAgNzMgMzEgMzkgMzIgMkQgNjMgNzQgNzIgOiA4LWN0cixhZXMxOTItY3Ry DQowMTMwOiAyQyA2MSA2NSA3MyAzMiAzNSAzNiAyRCAgNjMgNzQgNzIgMkMgNjEgNjUgNzMgMzIg OiAsYWVzMjU2LWN0cixhZXMyDQowMTQwOiAzNSAzNiAyRCA2MyA2MiA2MyAyQyA3MiAgNjkgNkEg NkUgNjQgNjEgNjUgNkMgMkQgOiA1Ni1jYmMscmlqbmRhZWwtDQowMTUwOiA2MyA2MiA2MyA0MCA2 QyA3OSA3MyA2MSAgNzQgNkYgNzIgMkUgNkMgNjkgNzUgMkUgOiBjYmNAbHlzYXRvci5saXUuDQow MTYwOiA3MyA2NSAyQyA2MSA2NSA3MyAzMSAzOSAgMzIgMkQgNjMgNjIgNjMgMkMgNjEgNjUgOiBz ZSxhZXMxOTItY2JjLGFlDQowMTcwOiA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyAgMkMgNjIgNkMg NkYgNzcgNjYgNjkgNzMgOiBzMTI4LWNiYyxibG93ZmlzDQowMTgwOiA2OCAyRCA2MyA2MiA2MyAy QyA2MSA3MiAgNjMgNjYgNkYgNzUgNzIgMzEgMzIgMzggOiBoLWNiYyxhcmNmb3VyMTI4DQowMTkw OiAyQyA2MSA3MiA2MyA2NiA2RiA3NSA3MiAgMkMgNjMgNjEgNzMgNzQgMzEgMzIgMzggOiAsYXJj Zm91cixjYXN0MTI4DQowMWEwOiAyRCA2MyA2MiA2MyAyQyAzMyA2NCA2NSAgNzMgMkQgNjMgNjIg NjMgMDAgMDAgMDAgOiAtY2JjLDNkZXMtY2JjLi4uDQowMWIwOiA1NSA2OCA2RCA2MSA2MyAyRCA3 MyA2OCAgNjEgMzEgMkMgNjggNkQgNjEgNjMgMkQgOiBVaG1hYy1zaGExLGhtYWMtDQowMWMwOiA3 MyA2OCA2MSAzMSAyRCAzOSAzNiAyQyAgNjggNkQgNjEgNjMgMkQgNkQgNjQgMzUgOiBzaGExLTk2 LGhtYWMtbWQ1DQowMWQwOiAyQyA2OCA2RCA2MSA2MyAyRCA2RCA2NCAgMzUgMkQgMzkgMzYgMkMg NjggNkQgNjEgOiAsaG1hYy1tZDUtOTYsaG1hDQowMWUwOiA2MyAyRCA3MiA2OSA3MCA2NSA2RCA2 NCAgMzEgMzYgMzAgMkMgNjggNkQgNjEgNjMgOiBjLXJpcGVtZDE2MCxobWFjDQowMWYwOiAyRCA3 MiA2OSA3MCA2NSA2RCA2NCAzMSAgMzYgMzAgNDAgNkYgNzAgNjUgNkUgNzMgOiAtcmlwZW1kMTYw QG9wZW5zDQowMjAwOiA3MyA2OCAyRSA2MyA2RiA2RCAwMCAwMCAgMDAgNTUgNjggNkQgNjEgNjMg MkQgNzMgOiBzaC5jb20uLi5VaG1hYy1zDQowMjEwOiA2OCA2MSAzMSAyQyA2OCA2RCA2MSA2MyAg MkQgNzMgNjggNjEgMzEgMkQgMzkgMzYgOiBoYTEsaG1hYy1zaGExLTk2DQowMjIwOiAyQyA2OCA2 RCA2MSA2MyAyRCA2RCA2NCAgMzUgMkMgNjggNkQgNjEgNjMgMkQgNkQgOiAsaG1hYy1tZDUsaG1h Yy1tDQowMjMwOiA2NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNzIgNjkgNzAgNjUg NkQgOiBkNS05NixobWFjLXJpcGVtDQowMjQwOiA2NCAzMSAzNiAzMCAyQyA2OCA2RCA2MSAgNjMg MkQgNzIgNjkgNzAgNjUgNkQgNjQgOiBkMTYwLGhtYWMtcmlwZW1kDQowMjUwOiAzMSAzNiAzMCA0 MCA2RiA3MCA2NSA2RSAgNzMgNzMgNjggMkUgNjMgNkYgNkQgMDAgOiAxNjBAb3BlbnNzaC5jb20u DQowMjYwOiAwMCAwMCAwNCA2RSA2RiA2RSA2NSAwMCAgMDAgMDAgMDQgNkUgNkYgNkUgNjUgMDAg OiAuLi5ub25lLi4uLm5vbmUuDQowMjcwOiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDAgMDAg MDAgMDAgICAgICAgICAgICAgOiAuLi4uLi4uLi4uLi4NCltsaWJzc2gyXSAwLjIwNjYyMiBTb2Nr ZXQ6IFNlbnQgODA4LzgwOCBieXRlcyBhdCAwMDYwMkQ5MA0KPT4gbGlic3NoMl90cmFuc3BvcnRf d3JpdGUgc2VuZCgpICg4MDggYnl0ZXMpDQowMDAwOiAwMCAwMCAwMyAyNCBBNyAxNCAzNyBENCAg NjYgNzEgMTAgRjcgNDIgRTggNUMgOTMgOiAuLi4kLi43LmZxLi5CLlwuDQowMDEwOiAzMyA0NCBB QyA1OCAyMiBCRCAwMCAwMCAgMDAgNTkgNjQgNjkgNjYgNjYgNjkgNjUgOiAzRC5YIi4uLi5ZZGlm ZmllDQowMDIwOiAyRCA2OCA2NSA2QyA2QyA2RCA2MSA2RSAgMkQgNjcgNzIgNkYgNzUgNzAgMzEg MzQgOiAtaGVsbG1hbi1ncm91cDE0DQowMDMwOiAyRCA3MyA2OCA2MSAzMSAyQyA2NCA2OSAgNjYg NjYgNjkgNjUgMkQgNjggNjUgNkMgOiAtc2hhMSxkaWZmaWUtaGVsDQowMDQwOiA2QyA2RCA2MSA2 RSAyRCA2NyA3MiA2RiAgNzUgNzAgMkQgNjUgNzggNjMgNjggNjEgOiBsbWFuLWdyb3VwLWV4Y2hh DQowMDUwOiA2RSA2NyA2NSAyRCA3MyA2OCA2MSAzMSAgMkMgNjQgNjkgNjYgNjYgNjkgNjUgMkQg OiBuZ2Utc2hhMSxkaWZmaWUtDQowMDYwOiA2OCA2NSA2QyA2QyA2RCA2MSA2RSAyRCAgNjcgNzIg NkYgNzUgNzAgMzEgMkQgNzMgOiBoZWxsbWFuLWdyb3VwMS1zDQowMDcwOiA2OCA2MSAzMSAwMCAw MCAwMCAwRiA3MyAgNzMgNjggMkQgNzIgNzMgNjEgMkMgNzMgOiBoYTEuLi4uc3NoLXJzYSxzDQow MDgwOiA3MyA2OCAyRCA2NCA3MyA3MyAwMCAwMCAgMDAgOTIgNjEgNjUgNzMgMzEgMzIgMzggOiBz aC1kc3MuLi4uYWVzMTI4DQowMDkwOiAyRCA2MyA3NCA3MiAyQyA2MSA2NSA3MyAgMzEgMzkgMzIg MkQgNjMgNzQgNzIgMkMgOiAtY3RyLGFlczE5Mi1jdHIsDQowMGEwOiA2MSA2NSA3MyAzMiAzNSAz NiAyRCA2MyAgNzQgNzIgMkMgNjEgNjUgNzMgMzIgMzUgOiBhZXMyNTYtY3RyLGFlczI1DQowMGIw OiAzNiAyRCA2MyA2MiA2MyAyQyA3MiA2OSAgNkEgNkUgNjQgNjEgNjUgNkMgMkQgNjMgOiA2LWNi YyxyaWpuZGFlbC1jDQowMGMwOiA2MiA2MyA0MCA2QyA3OSA3MyA2MSA3NCAgNkYgNzIgMkUgNkMg NjkgNzUgMkUgNzMgOiBiY0BseXNhdG9yLmxpdS5zDQowMGQwOiA2NSAyQyA2MSA2NSA3MyAzMSAz OSAzMiAgMkQgNjMgNjIgNjMgMkMgNjEgNjUgNzMgOiBlLGFlczE5Mi1jYmMsYWVzDQowMGUwOiAz MSAzMiAzOCAyRCA2MyA2MiA2MyAyQyAgNjIgNkMgNkYgNzcgNjYgNjkgNzMgNjggOiAxMjgtY2Jj LGJsb3dmaXNoDQowMGYwOiAyRCA2MyA2MiA2MyAyQyA2MSA3MiA2MyAgNjYgNkYgNzUgNzIgMzEg MzIgMzggMkMgOiAtY2JjLGFyY2ZvdXIxMjgsDQowMTAwOiA2MSA3MiA2MyA2NiA2RiA3NSA3MiAy QyAgNjMgNjEgNzMgNzQgMzEgMzIgMzggMkQgOiBhcmNmb3VyLGNhc3QxMjgtDQowMTEwOiA2MyA2 MiA2MyAyQyAzMyA2NCA2NSA3MyAgMkQgNjMgNjIgNjMgMDAgMDAgMDAgOTIgOiBjYmMsM2Rlcy1j YmMuLi4uDQowMTIwOiA2MSA2NSA3MyAzMSAzMiAzOCAyRCA2MyAgNzQgNzIgMkMgNjEgNjUgNzMg MzEgMzkgOiBhZXMxMjgtY3RyLGFlczE5DQowMTMwOiAzMiAyRCA2MyA3NCA3MiAyQyA2MSA2NSAg NzMgMzIgMzUgMzYgMkQgNjMgNzQgNzIgOiAyLWN0cixhZXMyNTYtY3RyDQowMTQwOiAyQyA2MSA2 NSA3MyAzMiAzNSAzNiAyRCAgNjMgNjIgNjMgMkMgNzIgNjkgNkEgNkUgOiAsYWVzMjU2LWNiYyxy aWpuDQowMTUwOiA2NCA2MSA2NSA2QyAyRCA2MyA2MiA2MyAgNDAgNkMgNzkgNzMgNjEgNzQgNkYg NzIgOiBkYWVsLWNiY0BseXNhdG9yDQowMTYwOiAyRSA2QyA2OSA3NSAyRSA3MyA2NSAyQyAgNjEg NjUgNzMgMzEgMzkgMzIgMkQgNjMgOiAubGl1LnNlLGFlczE5Mi1jDQowMTcwOiA2MiA2MyAyQyA2 MSA2NSA3MyAzMSAzMiAgMzggMkQgNjMgNjIgNjMgMkMgNjIgNkMgOiBiYyxhZXMxMjgtY2JjLGJs DQowMTgwOiA2RiA3NyA2NiA2OSA3MyA2OCAyRCA2MyAgNjIgNjMgMkMgNjEgNzIgNjMgNjYgNkYg OiBvd2Zpc2gtY2JjLGFyY2ZvDQowMTkwOiA3NSA3MiAzMSAzMiAzOCAyQyA2MSA3MiAgNjMgNjYg NkYgNzUgNzIgMkMgNjMgNjEgOiB1cjEyOCxhcmNmb3VyLGNhDQowMWEwOiA3MyA3NCAzMSAzMiAz OCAyRCA2MyA2MiAgNjMgMkMgMzMgNjQgNjUgNzMgMkQgNjMgOiBzdDEyOC1jYmMsM2Rlcy1jDQow MWIwOiA2MiA2MyAwMCAwMCAwMCA1NSA2OCA2RCAgNjEgNjMgMkQgNzMgNjggNjEgMzEgMkMgOiBi Yy4uLlVobWFjLXNoYTEsDQowMWMwOiA2OCA2RCA2MSA2MyAyRCA3MyA2OCA2MSAgMzEgMkQgMzkg MzYgMkMgNjggNkQgNjEgOiBobWFjLXNoYTEtOTYsaG1hDQowMWQwOiA2MyAyRCA2RCA2NCAzNSAy QyA2OCA2RCAgNjEgNjMgMkQgNkQgNjQgMzUgMkQgMzkgOiBjLW1kNSxobWFjLW1kNS05DQowMWUw OiAzNiAyQyA2OCA2RCA2MSA2MyAyRCA3MiAgNjkgNzAgNjUgNkQgNjQgMzEgMzYgMzAgOiA2LGht YWMtcmlwZW1kMTYwDQowMWYwOiAyQyA2OCA2RCA2MSA2MyAyRCA3MiA2OSAgNzAgNjUgNkQgNjQg MzEgMzYgMzAgNDAgOiAsaG1hYy1yaXBlbWQxNjBADQowMjAwOiA2RiA3MCA2NSA2RSA3MyA3MyA2 OCAyRSAgNjMgNkYgNkQgMDAgMDAgMDAgNTUgNjggOiBvcGVuc3NoLmNvbS4uLlVoDQowMjEwOiA2 RCA2MSA2MyAyRCA3MyA2OCA2MSAzMSAgMkMgNjggNkQgNjEgNjMgMkQgNzMgNjggOiBtYWMtc2hh MSxobWFjLXNoDQowMjIwOiA2MSAzMSAyRCAzOSAzNiAyQyA2OCA2RCAgNjEgNjMgMkQgNkQgNjQg MzUgMkMgNjggOiBhMS05NixobWFjLW1kNSxoDQowMjMwOiA2RCA2MSA2MyAyRCA2RCA2NCAzNSAy RCAgMzkgMzYgMkMgNjggNkQgNjEgNjMgMkQgOiBtYWMtbWQ1LTk2LGhtYWMtDQowMjQwOiA3MiA2 OSA3MCA2NSA2RCA2NCAzMSAzNiAgMzAgMkMgNjggNkQgNjEgNjMgMkQgNzIgOiByaXBlbWQxNjAs aG1hYy1yDQowMjUwOiA2OSA3MCA2NSA2RCA2NCAzMSAzNiAzMCAgNDAgNkYgNzAgNjUgNkUgNzMg NzMgNjggOiBpcGVtZDE2MEBvcGVuc3NoDQowMjYwOiAyRSA2MyA2RiA2RCAwMCAwMCAwMCAwNCAg NkUgNkYgNkUgNjUgMDAgMDAgMDAgMDQgOiAuY29tLi4uLm5vbmUuLi4uDQowMjcwOiA2RSA2RiA2 RSA2NSAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgOiBub25lLi4uLi4uLi4u Li4uDQowMjgwOiAwMCA1QiA3QiBDMyA2QiBGRiBCQyBEOCAgRjQgNDAgNzIgRDQgRjYgOEYgQTIg QUYgOiAuW3suay4uLi5Aci4uLi4uDQowMjkwOiAyOCA0NyAyQSA3NSAzNCBBMyBFNyAyQSAgMEYg M0QgMzcgNjQgOEQgNzUgNEIgNjQgOiAoRyp1NC4uKi49N2QudUtkDQowMmEwOiAzNiAxNyA4NyBD QiA5QiBDNyBDQyAzNSAgRDEgRjggMzcgMEQgOUUgNDYgODEgODAgOiA2Li4uLi4uNS4uNy4uRi4u DQowMmIwOiA5QyAxRSAzQSA0QiBEQiA1NCA2OSA4RSAgRkIgNEEgNUMgNDEgRTAgNDQgRkQgRjkg OiAuLjpLLlRpLi5KXEEuRC4uDQowMmMwOiAzQiAxMSBGNSAxMSA0OCA1RSAyNiAxMSAgMDIgRjQg RTYgMEMgQjAgQzQgQTkgNTYgOiA7Li4uSF4mLi4uLi4uLi5WDQowMmQwOiAwNiA3NCA4RiAyOCBG MiA1NSA3MiA5QyAgMUMgOEEgMjYgQTAgNDEgQUIgNEUgQ0UgOiAudC4oLlVyLi4uJi5BLk4uDQow MmUwOiA1MCA5RiAxNSBGMSBGOCAyQyBDQiBDNyAgQTAgQkIgQkUgODMgMjUgN0EgNDUgQUYgOiBQ Li4uLiwuLi4uLi4lekUuDQowMmYwOiA2QiAyMiBGOSA4NSA5OCAyRCBDMyA5MyAgREMgNEMgRTYg OTUgOUIgODIgMDYgMTUgOiBrIi4uLi0uLi5MLi4uLi4uDQowMzAwOiBDNCBDNSBGRSAzQiBEMiA4 MyAzQSBEQiAgM0EgQUYgMDIgNzIgQjMgQjYgNzMgMkUgOiAuLi47Li46LjouLnIuLnMuDQowMzEw OiA5MCBFMCAwRSBCMyA1RSBBQSBGMSA5NCAgQzMgOTIgMkQgQ0MgREIgNzUgNTcgRjEgOiAuLi4u Xi4uLi4uLS4udVcuDQowMzIwOiA1NyBFNCBGQSAxQSBBQSA5NCBCRCAzOCAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBXLi4uLi4uOA0KW2xpYnNzaDJdIDAuMjA2NjIyIFRyYW5zcG9ydDogTG9v a2luZyBmb3IgcGFja2V0IG9mIHR5cGU6IDIwDQpbbGlic3NoMl0gMC4yMDY2MjIgU29ja2V0OiBS ZWN2ZWQgNjgwLzE2Mzg0IGJ5dGVzIHRvIDAwNUZFRDY4KzANCj0+IGxpYnNzaDJfdHJhbnNwb3J0 X3JlYWQoKSByYXcgKDY4MCBieXRlcykNCjAwMDA6IDAwIDAwIDAyIEE0IDA1IDE0IEUzIDgyICAz MiA2QyBFQSAyNSA5OSBEMSBDOCBCRCA6IC4uLi4uLi4uMmwuJS4uLi4NCjAwMTA6IEY0IDExIEJG IDA5IDdEIEUwIDAwIDAwICAwMCA4QiA2NCA2OSA2NiA2NiA2OSA2NSA6IC4uLi59Li4uLi5kaWZm aWUNCjAwMjA6IDJEIDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAyRCA2 NSA6IC1oZWxsbWFuLWdyb3VwLWUNCjAwMzA6IDc4IDYzIDY4IDYxIDZFIDY3IDY1IDJEICA3MyA2 OCA2MSAzMiAzNSAzNiAyQyA2NCA6IHhjaGFuZ2Utc2hhMjU2LGQNCjAwNDA6IDY5IDY2IDY2IDY5 IDY1IDJEIDY4IDY1ICA2QyA2QyA2RCA2MSA2RSAyRCA2NyA3MiA6IGlmZmllLWhlbGxtYW4tZ3IN CjAwNTA6IDZGIDc1IDcwIDJEIDY1IDc4IDYzIDY4ICA2MSA2RSA2NyA2NSAyRCA3MyA2OCA2MSA6 IG91cC1leGNoYW5nZS1zaGENCjAwNjA6IDMxIDJDIDY0IDY5IDY2IDY2IDY5IDY1ICAyRCA2OCA2 NSA2QyA2QyA2RCA2MSA2RSA6IDEsZGlmZmllLWhlbGxtYW4NCjAwNzA6IDJEIDY3IDcyIDZGIDc1 IDcwIDMxIDM0ICAyRCA3MyA2OCA2MSAzMSAyQyA2NCA2OSA6IC1ncm91cDE0LXNoYTEsZGkNCjAw ODA6IDY2IDY2IDY5IDY1IDJEIDY4IDY1IDZDICA2QyA2RCA2MSA2RSAyRCA2NyA3MiA2RiA6IGZm aWUtaGVsbG1hbi1ncm8NCjAwOTA6IDc1IDcwIDMxIDJEIDczIDY4IDYxIDMxICAyQyA3MiA3MyA2 MSAzMSAzMCAzMiAzNCA6IHVwMS1zaGExLHJzYTEwMjQNCjAwYTA6IDJEIDczIDY4IDYxIDMxIDAw IDAwIDAwICAwRiA3MyA3MyA2OCAyRCA3MiA3MyA2MSA6IC1zaGExLi4uLnNzaC1yc2ENCjAwYjA6 IDJDIDczIDczIDY4IDJEIDY0IDczIDczICAwMCAwMCAwMCA4RiA2MSA2NSA3MyAzMiA6ICxzc2gt ZHNzLi4uLmFlczINCjAwYzA6IDM1IDM2IDJEIDYzIDc0IDcyIDJDIDYxICA2NSA3MyAzMSAzOSAz MiAyRCA2MyA3NCA6IDU2LWN0cixhZXMxOTItY3QNCjAwZDA6IDcyIDJDIDYxIDY1IDczIDMxIDMy IDM4ICAyRCA2MyA3NCA3MiAyQyA2MSA2NSA3MyA6IHIsYWVzMTI4LWN0cixhZXMNCjAwZTA6IDMy IDM1IDM2IDJEIDYzIDYyIDYzIDJDICA2MSA2NSA3MyAzMSAzOSAzMiAyRCA2MyA6IDI1Ni1jYmMs YWVzMTkyLWMNCjAwZjA6IDYyIDYzIDJDIDYxIDY1IDczIDMxIDMyICAzOCAyRCA2MyA2MiA2MyAy QyA2MiA2QyA6IGJjLGFlczEyOC1jYmMsYmwNCjAxMDA6IDZGIDc3IDY2IDY5IDczIDY4IDJEIDYz ICA3NCA3MiAyQyA2MiA2QyA2RiA3NyA2NiA6IG93ZmlzaC1jdHIsYmxvd2YNCjAxMTA6IDY5IDcz IDY4IDJEIDYzIDYyIDYzIDJDICA2MyA2MSA3MyA3NCAzMSAzMiAzOCAyRCA6IGlzaC1jYmMsY2Fz dDEyOC0NCjAxMjA6IDYzIDYyIDYzIDJDIDYxIDcyIDYzIDY2ICA2RiA3NSA3MiAzMiAzNSAzNiAy QyA2MSA6IGNiYyxhcmNmb3VyMjU2LGENCjAxMzA6IDcyIDYzIDY2IDZGIDc1IDcyIDMxIDMyICAz OCAyQyAzMyA2NCA2NSA3MyAyRCA2MyA6IHJjZm91cjEyOCwzZGVzLWMNCjAxNDA6IDc0IDcyIDJD IDMzIDY0IDY1IDczIDJEICA2MyA2MiA2MyAwMCAwMCAwMCA4RiA2MSA6IHRyLDNkZXMtY2JjLi4u LmENCjAxNTA6IDY1IDczIDMyIDM1IDM2IDJEIDYzIDc0ICA3MiAyQyA2MSA2NSA3MyAzMSAzOSAz MiA6IGVzMjU2LWN0cixhZXMxOTINCjAxNjA6IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAz MiAzOCAyRCA2MyA3NCA3MiAyQyA6IC1jdHIsYWVzMTI4LWN0ciwNCjAxNzA6IDYxIDY1IDczIDMy IDM1IDM2IDJEIDYzICA2MiA2MyAyQyA2MSA2NSA3MyAzMSAzOSA6IGFlczI1Ni1jYmMsYWVzMTkN CjAxODA6IDMyIDJEIDYzIDYyIDYzIDJDIDYxIDY1ICA3MyAzMSAzMiAzOCAyRCA2MyA2MiA2MyA6 IDItY2JjLGFlczEyOC1jYmMNCjAxOTA6IDJDIDYyIDZDIDZGIDc3IDY2IDY5IDczICA2OCAyRCA2 MyA3NCA3MiAyQyA2MiA2QyA6ICxibG93ZmlzaC1jdHIsYmwNCjAxYTA6IDZGIDc3IDY2IDY5IDcz IDY4IDJEIDYzICA2MiA2MyAyQyA2MyA2MSA3MyA3NCAzMSA6IG93ZmlzaC1jYmMsY2FzdDENCjAx YjA6IDMyIDM4IDJEIDYzIDYyIDYzIDJDIDYxICA3MiA2MyA2NiA2RiA3NSA3MiAzMiAzNSA6IDI4 LWNiYyxhcmNmb3VyMjUNCjAxYzA6IDM2IDJDIDYxIDcyIDYzIDY2IDZGIDc1ICA3MiAzMSAzMiAz OCAyQyAzMyA2NCA2NSA6IDYsYXJjZm91cjEyOCwzZGUNCjAxZDA6IDczIDJEIDYzIDc0IDcyIDJD IDMzIDY0ICA2NSA3MyAyRCA2MyA2MiA2MyAwMCAwMCA6IHMtY3RyLDNkZXMtY2JjLi4NCjAxZTA6 IDAwIDNBIDY4IDZEIDYxIDYzIDJEIDczICA2OCA2MSAzMSAyQyA2OCA2RCA2MSA2MyA6IC46aG1h Yy1zaGExLGhtYWMNCjAxZjA6IDJEIDczIDY4IDYxIDMxIDJEIDM5IDM2ICAyQyA2OCA2RCA2MSA2 MyAyRCA2RCA2NCA6IC1zaGExLTk2LGhtYWMtbWQNCjAyMDA6IDM1IDJDIDY4IDZEIDYxIDYzIDJE IDZEICA2NCAzNSAyRCAzOSAzNiAyQyA2OCA2RCA6IDUsaG1hYy1tZDUtOTYsaG0NCjAyMTA6IDYx IDYzIDJEIDcyIDY5IDcwIDY1IDZEICA2NCAzMSAzNiAzMCAwMCAwMCAwMCAzQSA6IGFjLXJpcGVt ZDE2MC4uLjoNCjAyMjA6IDY4IDZEIDYxIDYzIDJEIDczIDY4IDYxICAzMSAyQyA2OCA2RCA2MSA2 MyAyRCA3MyA6IGhtYWMtc2hhMSxobWFjLXMNCjAyMzA6IDY4IDYxIDMxIDJEIDM5IDM2IDJDIDY4 ICA2RCA2MSA2MyAyRCA2RCA2NCAzNSAyQyA6IGhhMS05NixobWFjLW1kNSwNCjAyNDA6IDY4IDZE IDYxIDYzIDJEIDZEIDY0IDM1ICAyRCAzOSAzNiAyQyA2OCA2RCA2MSA2MyA6IGhtYWMtbWQ1LTk2 LGhtYWMNCjAyNTA6IDJEIDcyIDY5IDcwIDY1IDZEIDY0IDMxICAzNiAzMCAwMCAwMCAwMCAxQSA3 QSA2QyA6IC1yaXBlbWQxNjAuLi4uemwNCjAyNjA6IDY5IDYyIDQwIDZGIDcwIDY1IDZFIDczICA3 MyA2OCAyRSA2MyA2RiA2RCAyQyA3QSA6IGliQG9wZW5zc2guY29tLHoNCjAyNzA6IDZDIDY5IDYy IDJDIDZFIDZGIDZFIDY1ICAwMCAwMCAwMCAxQSA3QSA2QyA2OSA2MiA6IGxpYixub25lLi4uLnps aWINCjAyODA6IDQwIDZGIDcwIDY1IDZFIDczIDczIDY4ICAyRSA2MyA2RiA2RCAyQyA3QSA2QyA2 OSA6IEBvcGVuc3NoLmNvbSx6bGkNCjAyOTA6IDYyIDJDIDZFIDZGIDZFIDY1IDAwIDAwICAwMCAw MCAwMCAwMCAwMCAwMCAwMCAwMCA6IGIsbm9uZS4uLi4uLi4uLi4NCjAyYTA6IDAwIDAwIDAwIDdF IDQxIEFBIDE2IEU3ICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4uLn5BLi4uDQo9PiBsaWJz c2gyX3RyYW5zcG9ydF9yZWFkKCkgcGxhaW4gKDY3MCBieXRlcykNCjAwMDA6IDE0IEUzIDgyIDMy IDZDIEVBIDI1IDk5ICBEMSBDOCBCRCBGNCAxMSBCRiAwOSA3RCA6IC4uLjJsLiUuLi4uLi4uLn0N CjAwMTA6IEUwIDAwIDAwIDAwIDhCIDY0IDY5IDY2ICA2NiA2OSA2NSAyRCA2OCA2NSA2QyA2QyA6 IC4uLi4uZGlmZmllLWhlbGwNCjAwMjA6IDZEIDYxIDZFIDJEIDY3IDcyIDZGIDc1ICA3MCAyRCA2 NSA3OCA2MyA2OCA2MSA2RSA6IG1hbi1ncm91cC1leGNoYW4NCjAwMzA6IDY3IDY1IDJEIDczIDY4 IDYxIDMyIDM1ICAzNiAyQyA2NCA2OSA2NiA2NiA2OSA2NSA6IGdlLXNoYTI1NixkaWZmaWUNCjAw NDA6IDJEIDY4IDY1IDZDIDZDIDZEIDYxIDZFICAyRCA2NyA3MiA2RiA3NSA3MCAyRCA2NSA6IC1o ZWxsbWFuLWdyb3VwLWUNCjAwNTA6IDc4IDYzIDY4IDYxIDZFIDY3IDY1IDJEICA3MyA2OCA2MSAz MSAyQyA2NCA2OSA2NiA6IHhjaGFuZ2Utc2hhMSxkaWYNCjAwNjA6IDY2IDY5IDY1IDJEIDY4IDY1 IDZDIDZDICA2RCA2MSA2RSAyRCA2NyA3MiA2RiA3NSA6IGZpZS1oZWxsbWFuLWdyb3UNCjAwNzA6 IDcwIDMxIDM0IDJEIDczIDY4IDYxIDMxICAyQyA2NCA2OSA2NiA2NiA2OSA2NSAyRCA6IHAxNC1z aGExLGRpZmZpZS0NCjAwODA6IDY4IDY1IDZDIDZDIDZEIDYxIDZFIDJEICA2NyA3MiA2RiA3NSA3 MCAzMSAyRCA3MyA6IGhlbGxtYW4tZ3JvdXAxLXMNCjAwOTA6IDY4IDYxIDMxIDJDIDcyIDczIDYx IDMxICAzMCAzMiAzNCAyRCA3MyA2OCA2MSAzMSA6IGhhMSxyc2ExMDI0LXNoYTENCjAwYTA6IDAw IDAwIDAwIDBGIDczIDczIDY4IDJEICA3MiA3MyA2MSAyQyA3MyA3MyA2OCAyRCA6IC4uLi5zc2gt cnNhLHNzaC0NCjAwYjA6IDY0IDczIDczIDAwIDAwIDAwIDhGIDYxICA2NSA3MyAzMiAzNSAzNiAy RCA2MyA3NCA6IGRzcy4uLi5hZXMyNTYtY3QNCjAwYzA6IDcyIDJDIDYxIDY1IDczIDMxIDM5IDMy ICAyRCA2MyA3NCA3MiAyQyA2MSA2NSA3MyA6IHIsYWVzMTkyLWN0cixhZXMNCjAwZDA6IDMxIDMy IDM4IDJEIDYzIDc0IDcyIDJDICA2MSA2NSA3MyAzMiAzNSAzNiAyRCA2MyA6IDEyOC1jdHIsYWVz MjU2LWMNCjAwZTA6IDYyIDYzIDJDIDYxIDY1IDczIDMxIDM5ICAzMiAyRCA2MyA2MiA2MyAyQyA2 MSA2NSA6IGJjLGFlczE5Mi1jYmMsYWUNCjAwZjA6IDczIDMxIDMyIDM4IDJEIDYzIDYyIDYzICAy QyA2MiA2QyA2RiA3NyA2NiA2OSA3MyA6IHMxMjgtY2JjLGJsb3dmaXMNCjAxMDA6IDY4IDJEIDYz IDc0IDcyIDJDIDYyIDZDICA2RiA3NyA2NiA2OSA3MyA2OCAyRCA2MyA6IGgtY3RyLGJsb3dmaXNo LWMNCjAxMTA6IDYyIDYzIDJDIDYzIDYxIDczIDc0IDMxICAzMiAzOCAyRCA2MyA2MiA2MyAyQyA2 MSA6IGJjLGNhc3QxMjgtY2JjLGENCjAxMjA6IDcyIDYzIDY2IDZGIDc1IDcyIDMyIDM1ICAzNiAy QyA2MSA3MiA2MyA2NiA2RiA3NSA6IHJjZm91cjI1NixhcmNmb3UNCjAxMzA6IDcyIDMxIDMyIDM4 IDJDIDMzIDY0IDY1ICA3MyAyRCA2MyA3NCA3MiAyQyAzMyA2NCA6IHIxMjgsM2Rlcy1jdHIsM2QN CjAxNDA6IDY1IDczIDJEIDYzIDYyIDYzIDAwIDAwICAwMCA4RiA2MSA2NSA3MyAzMiAzNSAzNiA6 IGVzLWNiYy4uLi5hZXMyNTYNCjAxNTA6IDJEIDYzIDc0IDcyIDJDIDYxIDY1IDczICAzMSAzOSAz MiAyRCA2MyA3NCA3MiAyQyA6IC1jdHIsYWVzMTkyLWN0ciwNCjAxNjA6IDYxIDY1IDczIDMxIDMy IDM4IDJEIDYzICA3NCA3MiAyQyA2MSA2NSA3MyAzMiAzNSA6IGFlczEyOC1jdHIsYWVzMjUNCjAx NzA6IDM2IDJEIDYzIDYyIDYzIDJDIDYxIDY1ICA3MyAzMSAzOSAzMiAyRCA2MyA2MiA2MyA6IDYt Y2JjLGFlczE5Mi1jYmMNCjAxODA6IDJDIDYxIDY1IDczIDMxIDMyIDM4IDJEICA2MyA2MiA2MyAy QyA2MiA2QyA2RiA3NyA6ICxhZXMxMjgtY2JjLGJsb3cNCjAxOTA6IDY2IDY5IDczIDY4IDJEIDYz IDc0IDcyICAyQyA2MiA2QyA2RiA3NyA2NiA2OSA3MyA6IGZpc2gtY3RyLGJsb3dmaXMNCjAxYTA6 IDY4IDJEIDYzIDYyIDYzIDJDIDYzIDYxICA3MyA3NCAzMSAzMiAzOCAyRCA2MyA2MiA6IGgtY2Jj LGNhc3QxMjgtY2INCjAxYjA6IDYzIDJDIDYxIDcyIDYzIDY2IDZGIDc1ICA3MiAzMiAzNSAzNiAy QyA2MSA3MiA2MyA6IGMsYXJjZm91cjI1NixhcmMNCjAxYzA6IDY2IDZGIDc1IDcyIDMxIDMyIDM4 IDJDICAzMyA2NCA2NSA3MyAyRCA2MyA3NCA3MiA6IGZvdXIxMjgsM2Rlcy1jdHINCjAxZDA6IDJD IDMzIDY0IDY1IDczIDJEIDYzIDYyICA2MyAwMCAwMCAwMCAzQSA2OCA2RCA2MSA6ICwzZGVzLWNi Yy4uLjpobWENCjAxZTA6IDYzIDJEIDczIDY4IDYxIDMxIDJDIDY4ICA2RCA2MSA2MyAyRCA3MyA2 OCA2MSAzMSA6IGMtc2hhMSxobWFjLXNoYTENCjAxZjA6IDJEIDM5IDM2IDJDIDY4IDZEIDYxIDYz ICAyRCA2RCA2NCAzNSAyQyA2OCA2RCA2MSA6IC05NixobWFjLW1kNSxobWENCjAyMDA6IDYzIDJE IDZEIDY0IDM1IDJEIDM5IDM2ICAyQyA2OCA2RCA2MSA2MyAyRCA3MiA2OSA6IGMtbWQ1LTk2LGht YWMtcmkNCjAyMTA6IDcwIDY1IDZEIDY0IDMxIDM2IDMwIDAwICAwMCAwMCAzQSA2OCA2RCA2MSA2 MyAyRCA6IHBlbWQxNjAuLi46aG1hYy0NCjAyMjA6IDczIDY4IDYxIDMxIDJDIDY4IDZEIDYxICA2 MyAyRCA3MyA2OCA2MSAzMSAyRCAzOSA6IHNoYTEsaG1hYy1zaGExLTkNCjAyMzA6IDM2IDJDIDY4 IDZEIDYxIDYzIDJEIDZEICA2NCAzNSAyQyA2OCA2RCA2MSA2MyAyRCA6IDYsaG1hYy1tZDUsaG1h Yy0NCjAyNDA6IDZEIDY0IDM1IDJEIDM5IDM2IDJDIDY4ICA2RCA2MSA2MyAyRCA3MiA2OSA3MCA2 NSA6IG1kNS05NixobWFjLXJpcGUNCjAyNTA6IDZEIDY0IDMxIDM2IDMwIDAwIDAwIDAwICAxQSA3 QSA2QyA2OSA2MiA0MCA2RiA3MCA6IG1kMTYwLi4uLnpsaWJAb3ANCjAyNjA6IDY1IDZFIDczIDcz IDY4IDJFIDYzIDZGICA2RCAyQyA3QSA2QyA2OSA2MiAyQyA2RSA6IGVuc3NoLmNvbSx6bGliLG4N CjAyNzA6IDZGIDZFIDY1IDAwIDAwIDAwIDFBIDdBICA2QyA2OSA2MiA0MCA2RiA3MCA2NSA2RSA6 IG9uZS4uLi56bGliQG9wZW4NCjAyODA6IDczIDczIDY4IDJFIDYzIDZGIDZEIDJDICA3QSA2QyA2 OSA2MiAyQyA2RSA2RiA2RSA6IHNzaC5jb20semxpYixub24NCjAyOTA6IDY1IDAwIDAwIDAwIDAw IDAwIDAwIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAgICAgICA6IGUuLi4uLi4uLi4uLi4uDQpbbGli c3NoMl0gMC4yMDc2MjIgVHJhbnNwb3J0OiBQYWNrZXQgdHlwZSAyMCByZWNlaXZlZCwgbGVuZ3Ro PTY3MA0KW2xpYnNzaDJdIDAuMjA3NjIyIFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9m IHR5cGU6IDIwDQpbbGlic3NoMl0gMC4yMDc2MjIgS2V5IEV4OiBBZ3JlZWQgb24gS0VYIG1ldGhv ZDogZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGExDQpbbGlic3NoMl0gMC4yMDc2MjIgS2V5IEV4 OiBBZ3JlZWQgb24gSE9TVEtFWSBtZXRob2Q6IHNzaC1yc2ENCltsaWJzc2gyXSAwLjIwNzYyMiBL ZXkgRXg6IEFncmVlZCBvbiBDUllQVF9DUyBtZXRob2Q6IGFlczEyOC1jdHINCltsaWJzc2gyXSAw LjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBDUllQVF9TQyBtZXRob2Q6IGFlczEyOC1jdHINClts aWJzc2gyXSAwLjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBNQUNfQ1MgbWV0aG9kOiBobWFjLXNo YTENCltsaWJzc2gyXSAwLjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBNQUNfU0MgbWV0aG9kOiBo bWFjLXNoYTENCltsaWJzc2gyXSAwLjIwNzYyMiBLZXkgRXg6IEFncmVlZCBvbiBDT01QX0NTIG1l dGhvZDogbm9uZQ0KW2xpYnNzaDJdIDAuMjA3NjIyIEtleSBFeDogQWdyZWVkIG9uIENPTVBfU0Mg bWV0aG9kOiBub25lDQpbbGlic3NoMl0gMC4yMDc2MjIgS2V5IEV4OiBJbml0aWF0aW5nIERpZmZp ZS1IZWxsbWFuIEdyb3VwMTQgS2V5IEV4Y2hhbmdlDQpbbGlic3NoMl0gMC4yMDk2MjMgS2V5IEV4 OiBTZW5kaW5nIEtFWCBwYWNrZXQgMzANCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3dyaXRlIHBsYWlu ICgyNjIgYnl0ZXMpDQowMDAwOiAxRSAwMCAwMCAwMSAwMSAwMCBDNyA1NCAgMkEgNTQgN0QgODgg MjMgMDMgNTIgNkYgOiAuLi4uLi4uVCpUfS4jLlJvDQowMDEwOiBENyA4MiBDOCBCNiBBQSA5QyAy RCBBNSAgMUMgOUMgNDYgQkYgMDIgMzcgRTEgNTcgOiAuLi4uLi4tLi4uRi4uNy5XDQowMDIwOiAz QiBDNCAyNSAyQiA0NyA5NiBFQyAyMiAgQTcgMEEgQUIgRDYgRjYgNkUgOTUgNkEgOiA7LiUrRy4u Ii4uLi4ubi5qDQowMDMwOiBBMSAxQyA3QiA1MSBCQiAwQSA1MyA2MSAgNTUgOTEgQTggQzQgOEYg ODUgMUEgOTcgOiAuLntRLi5TYVUuLi4uLi4uDQowMDQwOiA2QiA5MyA1QyA4NyBEQiBFNiBENyBC MyAgQzAgNjUgMDEgOEYgMEQgQTkgMTEgNzMgOiBrLlwuLi4uLi5lLi4uLi5zDQowMDUwOiBERCAz QSAwOCA2RCBCRSA3MSA0NSA4MyAgRDUgMjcgNjYgQUMgRkYgNDkgMTkgMDAgOiAuOi5tLnFFLi4n Zi4uSS4uDQowMDYwOiBGRiBEQyAwQyBFRCA5OCAzMCBEMyA1RiAgMUUgOTMgNDYgRTQgNDUgNjcg RUYgQkUgOiAuLi4uLjAuXy4uRi5FZy4uDQowMDcwOiAzNiAwMiA4QSA0QSBGRiBEMyAyOCA1MCAg QkIgMTYgOEEgQkIgMTUgRjkgMzggMzYgOiA2Li5KLi4oUC4uLi4uLjg2DQowMDgwOiA0MiBCQSA0 NiBEMCBGMiA1MiA0QyBBNCAgQkQgQkEgQzggMUQgMzAgMUUgRDUgODUgOiBCLkYuLlJMLi4uLi4w Li4uDQowMDkwOiAwRCBBNiA3MCAxRCAzQyA1RiBFRiA2QiAgQjcgRUYgMDMgRTEgNEEgRjggNkQg QUYgOiAuLnAuPF8uay4uLi5KLm0uDQowMGEwOiBBMiA3RiBDMiAzQSA5RSA5OCA3RCAzNCAgMzUg QjggMTcgQTQgMDcgMzcgRjQgRDUgOiAuLi46Li59NDUuLi4uNy4uDQowMGIwOiAxRiA4MSAxMyBF RiBDMSA0RiBDOCA2NiAgN0YgNUIgNzkgMkIgRjcgN0YgRDEgOEYgOiAuLi4uLk8uZi5beSsuLi4u DQowMGMwOiBFRiBCMCA5NSAwQyA3NCBFNSA5NSA2QiAgNEEgRTUgRDggODUgQUIgQjAgQzQgOUUg OiAuLi4udC4ua0ouLi4uLi4uDQowMGQwOiBCMSA2MyAzNyBGRCBFMiAzNyA0NCA0OCAgNzQgQTYg RDkgRjUgNTggNkUgMUQgOTAgOiAuYzcuLjdESHQuLi5Ybi4uDQowMGUwOiBGOCBGRCBFQSA5RCA2 MiBGRCA3OCBCNyAgNTUgNUUgQ0YgODMgRTkgMTggQUUgMUQgOiAuLi4uYi54LlVeLi4uLi4uDQow MGYwOiAxNiA3MCAzRiAyMiA2MyAxNCAwMiA1NiAgQ0UgMTQgOTIgNDQgQjQgNDMgRTUgMTcgOiAu cD8iYy4uVi4uLkQuQy4uDQowMTAwOiA4QSBFNyA1QyA3NyAxMSAyOSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAuLlx3LikNCltsaWJzc2gyXSAwLjIwOTYyMyBTb2NrZXQ6IFNlbnQg NTEyLzUxMiBieXRlcyBhdCAwMDYwMkQ5MA0KPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgc2Vu ZCgpICg1MTIgYnl0ZXMpDQowMDAwOiAwMCAwMCAwMSBGQyBGNSAxRSAwMCAwMCAgMDEgMDEgMDAg QzcgNTQgMkEgNTQgN0QgOiAuLi4uLi4uLi4uLi5UKlR9DQowMDEwOiA4OCAyMyAwMyA1MiA2RiBE NyA4MiBDOCAgQjYgQUEgOUMgMkQgQTUgMUMgOUMgNDYgOiAuIy5Sby4uLi4uLi0uLi5GDQowMDIw OiBCRiAwMiAzNyBFMSA1NyAzQiBDNCAyNSAgMkIgNDcgOTYgRUMgMjIgQTcgMEEgQUIgOiAuLjcu VzsuJStHLi4iLi4uDQowMDMwOiBENiBGNiA2RSA5NSA2QSBBMSAxQyA3QiAgNTEgQkIgMEEgNTMg NjEgNTUgOTEgQTggOiAuLm4uai4ue1EuLlNhVS4uDQowMDQwOiBDNCA4RiA4NSAxQSA5NyA2QiA5 MyA1QyAgODcgREIgRTYgRDcgQjMgQzAgNjUgMDEgOiAuLi4uLmsuXC4uLi4uLmUuDQowMDUwOiA4 RiAwRCBBOSAxMSA3MyBERCAzQSAwOCAgNkQgQkUgNzEgNDUgODMgRDUgMjcgNjYgOiAuLi4ucy46 Lm0ucUUuLidmDQowMDYwOiBBQyBGRiA0OSAxOSAwMCBGRiBEQyAwQyAgRUQgOTggMzAgRDMgNUYg MUUgOTMgNDYgOiAuLkkuLi4uLi4uMC5fLi5GDQowMDcwOiBFNCA0NSA2NyBFRiBCRSAzNiAwMiA4 QSAgNEEgRkYgRDMgMjggNTAgQkIgMTYgOEEgOiAuRWcuLjYuLkouLihQLi4uDQowMDgwOiBCQiAx NSBGOSAzOCAzNiA0MiBCQSA0NiAgRDAgRjIgNTIgNEMgQTQgQkQgQkEgQzggOiAuLi44NkIuRi4u UkwuLi4uDQowMDkwOiAxRCAzMCAxRSBENSA4NSAwRCBBNiA3MCAgMUQgM0MgNUYgRUYgNkIgQjcg RUYgMDMgOiAuMC4uLi4ucC48Xy5rLi4uDQowMGEwOiBFMSA0QSBGOCA2RCBBRiBBMiA3RiBDMiAg M0EgOUUgOTggN0QgMzQgMzUgQjggMTcgOiAuSi5tLi4uLjouLn00NS4uDQowMGIwOiBBNCAwNyAz NyBGNCBENSAxRiA4MSAxMyAgRUYgQzEgNEYgQzggNjYgN0YgNUIgNzkgOiAuLjcuLi4uLi4uTy5m Llt5DQowMGMwOiAyQiBGNyA3RiBEMSA4RiBFRiBCMCA5NSAgMEMgNzQgRTUgOTUgNkIgNEEgRTUg RDggOiArLi4uLi4uLi50Li5rSi4uDQowMGQwOiA4NSBBQiBCMCBDNCA5RSBCMSA2MyAzNyAgRkQg RTIgMzcgNDQgNDggNzQgQTYgRDkgOiAuLi4uLi5jNy4uN0RIdC4uDQowMGUwOiBGNSA1OCA2RSAx RCA5MCBGOCBGRCBFQSAgOUQgNjIgRkQgNzggQjcgNTUgNUUgQ0YgOiAuWG4uLi4uLi5iLnguVV4u DQowMGYwOiA4MyBFOSAxOCBBRSAxRCAxNiA3MCAzRiAgMjIgNjMgMTQgMDIgNTYgQ0UgMTQgOTIg OiAuLi4uLi5wPyJjLi5WLi4uDQowMTAwOiA0NCBCNCA0MyBFNSAxNyA4QSBFNyA1QyAgNzcgMTEg MjkgRjYgNzEgQjUgQjEgMEQgOiBELkMuLi4uXHcuKS5xLi4uDQowMTEwOiA2MiBBQiBCRSBFNCA2 NiBEQyAyQiA2MSAgMDEgQTIgNzIgQ0YgM0YgREIgRTMgMTcgOiBiLi4uZi4rYS4uci4/Li4uDQow MTIwOiBENCA3MCAwMSAxNiAwNyBBQSA2NSBBRCAgMkEgOEEgQ0YgQUUgOUEgNzAgOUMgNTUgOiAu cC4uLi5lLiouLi4ucC5VDQowMTMwOiAwQyA2MCA5NSBGRCA2NyBDQSBBMyAyNyAgMUEgNTUgQjUg M0IgNzIgMjcgODMgMEEgOiAuYC4uZy4uJy5VLjtyJy4uDQowMTQwOiBDNiBBRiAzRiAxRSBGNiA0 NCBFRCAyRSAgMEYgODkgQTEgM0MgOTYgM0IgOUUgQ0UgOiAuLj8uLkQuLi4uLjwuOy4uDQowMTUw OiA5QiA3OCA0QyBBNyA2QiA1MyBFNSBGNCAgNDAgNDggOTYgMEYgRTcgNTYgNTMgQzQgOiAueEwu a1MuLkBILi4uVlMuDQowMTYwOiBGOCBBRCA1NCA5MyAwOCA3NSAzRSAxMCAgM0QgRDggMDkgNTIg MkYgQzQgQkUgOEUgOiAuLlQuLnU+Lj0uLlIvLi4uDQowMTcwOiA4NCA5MyA5QSA0QSA5MCBGOCBB NSA4NiAgQjIgMzAgMTkgRkQgQjAgREUgOUEgNTkgOiAuLi5KLi4uLi4wLi4uLi5ZDQowMTgwOiBF QiBBQiBGNCA0NyA0NSBGQSBENCBGNSAgOUMgM0UgRDEgQjggNUEgNkUgMTYgMjAgOiAuLi5HRS4u Li4+Li5abi4gDQowMTkwOiBGMyA3QiAwNyBCNyA4RSAyQyAwOCBEMCAgRTIgM0UgODEgNkYgODAg NTQgNDEgNTAgOiAuey4uLiwuLi4+Lm8uVEFQDQowMWEwOiAxRiA3QyA5OSA2OCA3QiAwRCBFRiAy MyAgM0MgN0EgRDQgOTggQUIgQjQgRDEgNUYgOiAufC5oey4uIzx6Li4uLi5fDQowMWIwOiA0RCA2 MiBBQyA0OSA4RSA4NyA0RiBFRCAgNkQgQzggMEEgNEIgQTEgNzMgQ0MgMjUgOiBNYi5JLi5PLm0u Lksucy4lDQowMWMwOiBENyAxRCBCRSA5NCBCNiAyNSA5NCBGNiAgNUUgMzYgMkQgQjcgRTQgMzkg MDcgOTUgOiAuLi4uLiUuLl42LS4uOS4uDQowMWQwOiBENCBGRSBEOCAwRCBENyBDOCA1NCA4RSAg NEUgOUMgNTMgRUIgNkYgN0QgNzEgRDEgOiAuLi4uLi5ULk4uUy5vfXEuDQowMWUwOiBFMSAzRiBD NyBDNiA2MCA0NyAwRiAyRiAgNjggNjcgM0IgQkMgODUgOTAgRjMgNTMgOiAuPy4uYEcuL2hnOy4u Li5TDQowMWYwOiAxNiAyMyA3NCBBQyA5RiAzQiBCNyBBOCAgQ0IgNDUgMTAgRkYgMzYgRjUgOUMg NjQgOiAuI3QuLjsuLi5FLi42Li5kDQpbbGlic3NoMl0gMC4yMDk2MjMgVHJhbnNwb3J0OiBMb29r aW5nIGZvciBwYWNrZXQgb2YgdHlwZTogMzENCltsaWJzc2gyXSAwLjIwOTYyMyBGYWlsdXJlIEV2 ZW50OiAtMzcgLSBVbmFibGUgdG8gZXhjaGFuZ2UgZW5jcnlwdGlvbiBrZXlzDQpbbGlic3NoMl0g MC4zMDI2MjggU29ja2V0OiBSZWN2ZWQgNTc2LzE2Mzg0IGJ5dGVzIHRvIDAwNUZFRDY4KzANCj0+ IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcgKDU3NiBieXRlcykNCjAwMDA6IDAwIDAwIDAy IDNDIDA5IDFGIDAwIDAwICAwMCA5NSAwMCAwMCAwMCAwNyA3MyA3MyA6IC4uLjwuLi4uLi4uLi4u c3MNCjAwMTA6IDY4IDJEIDcyIDczIDYxIDAwIDAwIDAwICAwMSAyMyAwMCAwMCAwMCA4MSAwMCA5 OSA6IGgtcnNhLi4uLiMuLi4uLi4NCjAwMjA6IDFBIEU2IDgyIDEzIDA3IDAwIEU2IDg2ICAzRSA2 NCA0NSBEQSA5NyA2OCA0NSAxQSA6IC4uLi4uLi4uPmRFLi5oRS4NCjAwMzA6IENEIDI3IEEzIDVG IDdFIDRDIENEIDk4ICBBRiAyOSBDQSBFQSA2QyAwNSA0RiAyNyA6IC4nLl9+TC4uLikuLmwuTycN CjAwNDA6IEFDIDQwIEVGIEM5IEIzIDhDIDgyIENGICBGQyA5QyAwNSA1MyA4RCA5MiA3OCA0NyA6 IC5ALi4uLi4uLi4uUy4ueEcNCjAwNTA6IDlFIDU1IDcyIDgwIDQ0IDJCIDRFIDQ4ICA3RSA1QyA1 RCA4NSA0MSA3OSBGMCAwQiA6IC5Vci5EK05IflxdLkF5Li4NCjAwNjA6IEE0IEUxIDJEIEMwIEM0 IDlEIDExIDM5ICA0QiAzMiA5MiAxQiBDNCAyMCA3RCAyMCA6IC4uLS4uLi45SzIuLi4gfSANCjAw NzA6IDQ2IDJGIDcwIDE0IDUwIDYwIDdEIDY1ICBEMiAwMyA5RCA2RCAyMyBBQyBDRiA0QiA6IEYv cC5QYH1lLi4ubSMuLksNCjAwODA6IDFDIDg4IDc2IEUzIDVDIDBGIDU2IEQzICBBRSBDNyAyNCA5 QSBFMyBDMiAwRSBGNyA6IC4udi5cLlYuLi4kLi4uLi4NCjAwOTA6IDQ5IDgyIDFEIDREIEM0IEEw IDYwIEE3ICAzNyAwMyA2RCBBRSAxOSBDOSA0OSAwMCA6IEkuLk0uLmAuNy5tLi4uSS4NCjAwYTA6 IDAwIDAxIDAxIDAwIEY0IEVDIERCIEQxICA4RiA1QSA1OSAwNSA0QyAxRSAwMiAzRCA6IC4uLi4u Li4uLlpZLkwuLj0NCjAwYjA6IDk5IDQ1IDI2IDdGIDYwIDBFIDNFIDc4ICA4QSA5QyAwMCA2OSA1 RSBFOCAzMiAyRiA6IC5FJi5gLj54Li4uaV4uMi8NCjAwYzA6IEI5IEVEIDIxIDQ5IDFGIDVEIDE3 IDNCICAyRiAzQiBBNyAzRSBBQSA3OSBGNSA5RiA6IC4uIUkuXS47LzsuPi55Li4NCjAwZDA6IDk3 IDE1IDQ4IDg3IEQ5IEY2IEIxIEE5ICAxMCBDOSBDMyA4NSAzNyAwNSAzQSBBQiA6IC4uSC4uLi4u Li4uLjcuOi4NCjAwZTA6IDdEIDYwIDA2IDk3IDI4IDU1IDVDIEVBICBCOCBBRiAyQyBBNyBGOCA2 QSAzMyBGMCA6IH1gLi4oVVwuLi4sLi5qMy4NCjAwZjA6IEQyIDM3IEM3IDI5IDlFIDExIEE5IDEz ICBCNiA1MSBENCBFNiAwOSA1RSAyRSBFNCA6IC43LikuLi4uLlEuLi5eLi4NCjAxMDA6IDU3IDUw IDI4IEZDIDY2IDkwIDU2IEQ4ICA2QiBBRiBERiBFRCA2OCBBRCBDNiA4OCA6IFdQKC5mLlYuay4u LmguLi4NCjAxMTA6IDNGIEU0IEFGIDBEIEREIENEIENBIEU0ICBGRSAwQiBGQSA1NyA3NSA1QSBB QiA0QyA6ID8uLi4uLi4uLi4uV3VaLkwNCjAxMjA6IDhBIDIyIDJEIDA0IEI4IDEzIEQ2IDMyICA3 MSAwQiA1NiBEQiAzNSA2MSBBQyBENiA6IC4iLS4uLi4ycS5WLjVhLi4NCjAxMzA6IDk4IEJGIDBG IDdFIDAxIDI4IEVBIDgzICA1QyA1RCAyOCBCOCA1OCA4MiA2RSBDMSA6IC4uLn4uKC4uXF0oLlgu bi4NCjAxNDA6IDU2IEI2IDE3IDYwIDdDIDczIEEyIENCICBDRCAzNiBFNCA0QiBCRSA5NyBGRiA5 NiA6IFYuLmB8cy4uLjYuSy4uLi4NCjAxNTA6IDg5IDU3IEIyIDIzIDU0IEY2IDYxIEFFICBBNyA4 QSA2QiBDMyA2QSA4QiA5QiBDOCA6IC5XLiNULmEuLi5rLmouLi4NCjAxNjA6IEQxIEI2IERBIEI4 IDYzIDk0IDA5IDA4ICA2OSBCRiBDOCBENCAyRCA0NiA3QiA5OSA6IC4uLi5jLi4uaS4uLi1Gey4N CjAxNzA6IDEyIDlEIDJFIDMzIEQ4IDE5IDFFIDI3ICBCNyAzNiAwQiBGQSAyMSA3MSBCMCA2NiA6 IC4uLjMuLi4nLjYuLiFxLmYNCjAxODA6IDFGIEREIDQzIDU3IEU0IDI3IEIzIDM0ICBFRiAzRSBD OSA5MyBDRiBBMyAyOSA5OCA6IC4uQ1cuJy40Lj4uLi4uKS4NCjAxOTA6IENFIDgxIENCIDA4IDk2 IDY1IDg0IDNEICBDNyBDOSA2NCBFRSA3QiBBQiBGRSBERSA6IC4uLi4uZS49Li5kLnsuLi4NCjAx YTA6IDM1IDRGIDEzIDA5IDAwIDAwIDAwIDhGICAwMCAwMCAwMCAwNyA3MyA3MyA2OCAyRCA6IDVP Li4uLi4uLi4uLnNzaC0NCjAxYjA6IDcyIDczIDYxIDAwIDAwIDAwIDgwIDBEICAxRSA3MyAyNCA3 MiAzRiAyRSAzRCA4MCA6IHJzYS4uLi4uLnMkcj8uPS4NCjAxYzA6IDgyIDg3IEFBIEY5IDNDIDBD IDc0IDI5ICAzRSAzMyA5NSAxMCBCMSBBMiAxRSBEMyA6IC4uLi48LnQpPjMuLi4uLi4NCjAxZDA6 IEM5IDQwIDFEIDhEIDdCIEQ4IDY3IDRGICBDRCBBNyBBNyAxOCBBQyBDQiA2OSBBNyA6IC5ALi57 LmdPLi4uLi4uaS4NCjAxZTA6IEM5IDEzIDkzIDEwIDc5IEM0IDlCIDlGICBGRCAyMyA0NyBGMyAz NCA5RSBBMiAyOSA6IC4uLi55Li4uLiNHLjQuLikNCjAxZjA6IEE3IEZFIEE0IEVEIDI0IDRGIDcz IDQ1ICBGRSAwQiAxRCBEMSAyQiAwOSA5NCA3RSA6IC4uLi4kT3NFLi4uLisuLn4NCjAyMDA6IDQ4 IEMwIDFBIDAyIEEwIDY1IEM2IEVGICAzNCBDMiA0NyBFOCA3QiAyOSA2MCBFRiA6IEguLi4uZS4u NC5HLnspYC4NCjAyMTA6IDVFIDQ2IEY5IEZBIDk2IDBCIDlDIDUyICA5OSA2RiAwQSA0MiBDQyA2 RCA4MCBCMyA6IF5GLi4uLi5SLm8uQi5tLi4NCjAyMjA6IDAwIDIzIEQ2IDA0IDA0IDVFIDk2IEIx ICBDNyAyNyA4QiBBNiBFMSAyMiBFNyAzQyA6IC4jLi4uXi4uLicuLi4iLjwNCjAyMzA6IDAwIDAx IEU4IEFGIDNGIERCIEM5IDM2ICAwMyA5NCAzRiBGMCAwMSA2MCBCQSBBNiA6IC4uLi4/Li42Li4/ Li5gLi4NCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoNTYyIGJ5dGVzKQ0KMDAw MDogMUYgMDAgMDAgMDAgOTUgMDAgMDAgMDAgIDA3IDczIDczIDY4IDJEIDcyIDczIDYxIDogLi4u Li4uLi4uc3NoLXJzYQ0KMDAxMDogMDAgMDAgMDAgMDEgMjMgMDAgMDAgMDAgIDgxIDAwIDk5IDFB IEU2IDgyIDEzIDA3IDogLi4uLiMuLi4uLi4uLi4uLg0KMDAyMDogMDAgRTYgODYgM0UgNjQgNDUg REEgOTcgIDY4IDQ1IDFBIENEIDI3IEEzIDVGIDdFIDogLi4uPmRFLi5oRS4uJy5ffg0KMDAzMDog NEMgQ0QgOTggQUYgMjkgQ0EgRUEgNkMgIDA1IDRGIDI3IEFDIDQwIEVGIEM5IEIzIDogTC4uLiku LmwuTycuQC4uLg0KMDA0MDogOEMgODIgQ0YgRkMgOUMgMDUgNTMgOEQgIDkyIDc4IDQ3IDlFIDU1 IDcyIDgwIDQ0IDogLi4uLi4uUy4ueEcuVXIuRA0KMDA1MDogMkIgNEUgNDggN0UgNUMgNUQgODUg NDEgIDc5IEYwIDBCIEE0IEUxIDJEIEMwIEM0IDogK05IflxdLkF5Li4uLi0uLg0KMDA2MDogOUQg MTEgMzkgNEIgMzIgOTIgMUIgQzQgIDIwIDdEIDIwIDQ2IDJGIDcwIDE0IDUwIDogLi45SzIuLi4g fSBGL3AuUA0KMDA3MDogNjAgN0QgNjUgRDIgMDMgOUQgNkQgMjMgIEFDIENGIDRCIDFDIDg4IDc2 IEUzIDVDIDogYH1lLi4ubSMuLksuLnYuXA0KMDA4MDogMEYgNTYgRDMgQUUgQzcgMjQgOUEgRTMg IEMyIDBFIEY3IDQ5IDgyIDFEIDREIEM0IDogLlYuLi4kLi4uLi5JLi5NLg0KMDA5MDogQTAgNjAg QTcgMzcgMDMgNkQgQUUgMTkgIEM5IDQ5IDAwIDAwIDAxIDAxIDAwIEY0IDogLmAuNy5tLi4uSS4u Li4uLg0KMDBhMDogRUMgREIgRDEgOEYgNUEgNTkgMDUgNEMgIDFFIDAyIDNEIDk5IDQ1IDI2IDdG IDYwIDogLi4uLlpZLkwuLj0uRSYuYA0KMDBiMDogMEUgM0UgNzggOEEgOUMgMDAgNjkgNUUgIEU4 IDMyIDJGIEI5IEVEIDIxIDQ5IDFGIDogLj54Li4uaV4uMi8uLiFJLg0KMDBjMDogNUQgMTcgM0Ig MkYgM0IgQTcgM0UgQUEgIDc5IEY1IDlGIDk3IDE1IDQ4IDg3IEQ5IDogXS47LzsuPi55Li4uLkgu Lg0KMDBkMDogRjYgQjEgQTkgMTAgQzkgQzMgODUgMzcgIDA1IDNBIEFCIDdEIDYwIDA2IDk3IDI4 IDogLi4uLi4uLjcuOi59YC4uKA0KMDBlMDogNTUgNUMgRUEgQjggQUYgMkMgQTcgRjggIDZBIDMz IEYwIEQyIDM3IEM3IDI5IDlFIDogVVwuLi4sLi5qMy4uNy4pLg0KMDBmMDogMTEgQTkgMTMgQjYg NTEgRDQgRTYgMDkgIDVFIDJFIEU0IDU3IDUwIDI4IEZDIDY2IDogLi4uLlEuLi5eLi5XUCguZg0K MDEwMDogOTAgNTYgRDggNkIgQUYgREYgRUQgNjggIEFEIEM2IDg4IDNGIEU0IEFGIDBEIEREIDog LlYuay4uLmguLi4/Li4uLg0KMDExMDogQ0QgQ0EgRTQgRkUgMEIgRkEgNTcgNzUgIDVBIEFCIDRD IDhBIDIyIDJEIDA0IEI4IDogLi4uLi4uV3VaLkwuIi0uLg0KMDEyMDogMTMgRDYgMzIgNzEgMEIg NTYgREIgMzUgIDYxIEFDIEQ2IDk4IEJGIDBGIDdFIDAxIDogLi4ycS5WLjVhLi4uLi5+Lg0KMDEz MDogMjggRUEgODMgNUMgNUQgMjggQjggNTggIDgyIDZFIEMxIDU2IEI2IDE3IDYwIDdDIDogKC4u XF0oLlgubi5WLi5gfA0KMDE0MDogNzMgQTIgQ0IgQ0QgMzYgRTQgNEIgQkUgIDk3IEZGIDk2IDg5 IDU3IEIyIDIzIDU0IDogcy4uLjYuSy4uLi4uVy4jVA0KMDE1MDogRjYgNjEgQUUgQTcgOEEgNkIg QzMgNkEgIDhCIDlCIEM4IEQxIEI2IERBIEI4IDYzIDogLmEuLi5rLmouLi4uLi4uYw0KMDE2MDog OTQgMDkgMDggNjkgQkYgQzggRDQgMkQgIDQ2IDdCIDk5IDEyIDlEIDJFIDMzIEQ4IDogLi4uaS4u Li1Gey4uLi4zLg0KMDE3MDogMTkgMUUgMjcgQjcgMzYgMEIgRkEgMjEgIDcxIEIwIDY2IDFGIERE IDQzIDU3IEU0IDogLi4nLjYuLiFxLmYuLkNXLg0KMDE4MDogMjcgQjMgMzQgRUYgM0UgQzkgOTMg Q0YgIEEzIDI5IDk4IENFIDgxIENCIDA4IDk2IDogJy40Lj4uLi4uKS4uLi4uLg0KMDE5MDogNjUg ODQgM0QgQzcgQzkgNjQgRUUgN0IgIEFCIEZFIERFIDM1IDRGIDEzIDA5IDAwIDogZS49Li5kLnsu Li41Ty4uLg0KMDFhMDogMDAgMDAgOEYgMDAgMDAgMDAgMDcgNzMgIDczIDY4IDJEIDcyIDczIDYx IDAwIDAwIDogLi4uLi4uLnNzaC1yc2EuLg0KMDFiMDogMDAgODAgMEQgMUUgNzMgMjQgNzIgM0Yg IDJFIDNEIDgwIDgyIDg3IEFBIEY5IDNDIDogLi4uLnMkcj8uPS4uLi4uPA0KMDFjMDogMEMgNzQg MjkgM0UgMzMgOTUgMTAgQjEgIEEyIDFFIEQzIEM5IDQwIDFEIDhEIDdCIDogLnQpPjMuLi4uLi4u QC4uew0KMDFkMDogRDggNjcgNEYgQ0QgQTcgQTcgMTggQUMgIENCIDY5IEE3IEM5IDEzIDkzIDEw IDc5IDogLmdPLi4uLi4uaS4uLi4ueQ0KMDFlMDogQzQgOUIgOUYgRkQgMjMgNDcgRjMgMzQgIDlF IEEyIDI5IEE3IEZFIEE0IEVEIDI0IDogLi4uLiNHLjQuLikuLi4uJA0KMDFmMDogNEYgNzMgNDUg RkUgMEIgMUQgRDEgMkIgIDA5IDk0IDdFIDQ4IEMwIDFBIDAyIEEwIDogT3NFLi4uLisuLn5ILi4u Lg0KMDIwMDogNjUgQzYgRUYgMzQgQzIgNDcgRTggN0IgIDI5IDYwIEVGIDVFIDQ2IEY5IEZBIDk2 IDogZS4uNC5HLnspYC5eRi4uLg0KMDIxMDogMEIgOUMgNTIgOTkgNkYgMEEgNDIgQ0MgIDZEIDgw IEIzIDAwIDIzIEQ2IDA0IDA0IDogLi5SLm8uQi5tLi4uIy4uLg0KMDIyMDogNUUgOTYgQjEgQzcg MjcgOEIgQTYgRTEgIDIyIEU3IDNDIDAwIDAxIEU4IEFGIDNGIDogXi4uLicuLi4iLjwuLi4uPw0K MDIzMDogREIgQzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog Li4NCltsaWJzc2gyXSAwLjMwMjYyOCBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDMxIHJlY2VpdmVk LCBsZW5ndGg9NTYyDQpbbGlic3NoMl0gMC4zMDI2MjggVHJhbnNwb3J0OiBMb29raW5nIGZvciBw YWNrZXQgb2YgdHlwZTogMzENCltsaWJzc2gyXSAwLjMwMjYyOCBLZXkgRXg6IFNlcnZlcidzIE1E NSBGaW5nZXJwcmludDogZDc6MmY6Nzk6ZDk6Nzk6MzE6MmQ6ZDI6OWM6NTk6NmM6OGI6NGI6YzA6 ZWQ6YWQNCltsaWJzc2gyXSAwLjMwMjYyOCBLZXkgRXg6IFNlcnZlcidzIFNIQTEgRmluZ2VycHJp bnQ6IDBmOjBiOjllOmNlOjI2Ojg2OjQ0OjMyOjQyOmVlOjFiOmFkOmJmOmM3OmQ1Ojc2OjNlOjk1 OjFjOmZiDQpbbGlic3NoMl0gMC4zMDc2MjggS2V5IEV4OiBTZW5kaW5nIE5FV0tFWVMgbWVzc2Fn ZQ0KPT4gbGlic3NoMl90cmFuc3BvcnRfd3JpdGUgcGxhaW4gKDEgYnl0ZXMpDQowMDAwOiAxNSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAuDQpbbGlic3No Ml0gMC4zMDc2MjggU29ja2V0OiBTZW50IDE4NC8xODQgYnl0ZXMgYXQgMDA2MDJEOTANCj0+IGxp YnNzaDJfdHJhbnNwb3J0X3dyaXRlIHNlbmQoKSAoMTg0IGJ5dGVzKQ0KMDAwMDogMDAgMDAgMDAg QjQgQjIgMTUgN0IgOTMgIDc2IDU0IDYzIDNCIDQ5IEUzIDkyIDg0IDogLi4uLi4uey52VGM7SS4u Lg0KMDAxMDogNzEgRTkgMDYgMzkgMjMgRDMgNzIgRkQgIDQyIEJCIEM4IDM4IDRGIEYwIDczIDNG IDogcS4uOSMuci5CLi44Ty5zPw0KMDAyMDogNkYgNTUgN0MgQzAgMkUgQzUgNTUgNjQgIDM1IDA5 IDFGIDI5IEIwIEEzIDFBIEFGIDogb1V8Li4uVWQ1Li4pLi4uLg0KMDAzMDogOUQgMEMgMjYgOUIg N0IgQTggNzMgQjkgIEI3IDhDIEI0IEY2IDIzIDhDIDE5IEVBIDogLi4mLnsucy4uLi4uIy4uLg0K MDA0MDogODAgRTYgQzkgMkQgMDQgQzIgNTcgRjkgIEEwIDJEIDMyIDU0IEZBIDBBIDUyIERGIDog Li4uLS4uVy4uLTJULi5SLg0KMDA1MDogMjIgM0IgRTAgOUYgOTIgOTMgMTYgOEUgIERCIEQzIDRD IEU2IDg0IEM5IEExIEM1IDogIjsuLi4uLi4uLkwuLi4uLg0KMDA2MDogMEMgRTkgRkUgRDggRTUg RDYgMDEgQjUgIDk4IDNEIDAxIDZDIEE5IDMwIDNCIDhGIDogLi4uLi4uLi4uPS5sLjA7Lg0KMDA3 MDogRDAgMzYgNUUgMUEgMzcgOTcgQTMgNUQgIEExIEM5IEQzIDBFIDFCIEU1IEIyIDVCIDogLjZe LjcuLl0uLi4uLi4uWw0KMDA4MDogODQgMzUgNEEgQzEgQkMgMjcgRTQgMjkgIEREIEFGIEZDIDJB IDMxIDVFIDQ1IEUxIDogLjVKLi4nLikuLi4qMV5FLg0KMDA5MDogRjEgQjMgNDggRjAgNkUgNDEg NUIgOTQgIDkzIERFIDlEIDI5IDg3IEEyIDI3IEQwIDogLi5ILm5BWy4uLi4pLi4nLg0KMDBhMDog NEUgQTAgRUYgODkgMEQgRUQgN0QgRUYgIDI2IDc3IDBGIDNEIDUzIDU3IEUzIDc3IDogTi4uLi4u fS4mdy49U1cudw0KMDBiMDogNDggOTEgN0MgRkMgRkMgNzIgQjAgQTggICAgICAgICAgICAgICAg ICAgICAgICAgIDogSC58Li5yLi4NCltsaWJzc2gyXSAwLjMwNzYyOCBUcmFuc3BvcnQ6IExvb2tp bmcgZm9yIHBhY2tldCBvZiB0eXBlOiAyMQ0KW2xpYnNzaDJdIDAuMzA3NjI4IEZhaWx1cmUgRXZl bnQ6IC0zNyAtIFVuYWJsZSB0byBleGNoYW5nZSBlbmNyeXB0aW9uIGtleXMNCltsaWJzc2gyXSAw LjMyNTYyOSBTb2NrZXQ6IFJlY3ZlZCAxNi8xNjM4NCBieXRlcyB0byAwMDVGRUQ2OCswDQo9PiBs aWJzc2gyX3RyYW5zcG9ydF9yZWFkKCkgcmF3ICgxNiBieXRlcykNCjAwMDA6IDAwIDAwIDAwIDBD IDBBIDE1IEE3IEVBICAwQSAyMyA5OSBGNyA5RCA1RiA3OCAzRiA6IC4uLi4uLi4uLiMuLi5feD8N Cj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSBwbGFpbiAoMSBieXRlcykNCjAwMDA6IDE1ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC4NCltsaWJzc2gy XSAwLjMyNTYyOSBUcmFuc3BvcnQ6IFBhY2tldCB0eXBlIDIxIHJlY2VpdmVkLCBsZW5ndGg9MQ0K W2xpYnNzaDJdIDAuMzI1NjI5IFRyYW5zcG9ydDogTG9va2luZyBmb3IgcGFja2V0IG9mIHR5cGU6 IDIxDQpbbGlic3NoMl0gMC4zMjU2MjkgS2V5IEV4OiBSZWNlaXZlZCBORVdLRVlTIG1lc3NhZ2UN CltsaWJzc2gyXSAwLjMyNTYyOSBLZXkgRXg6IHNlc3Npb25faWQgY2FsY3VsYXRlZA0KW2xpYnNz aDJdIDAuMzI1NjI5IEtleSBFeDogQ2xpZW50IHRvIFNlcnZlciBJViBhbmQgS2V5IGNhbGN1bGF0 ZWQNCltsaWJzc2gyXSAwLjMyNTYyOSBLZXkgRXg6IFNlcnZlciB0byBDbGllbnQgSVYgYW5kIEtl eSBjYWxjdWxhdGVkDQpbbGlic3NoMl0gMC4zMjU2MjkgS2V5IEV4OiBDbGllbnQgdG8gU2VydmVy IEhNQUMgS2V5IGNhbGN1bGF0ZWQNCltsaWJzc2gyXSAwLjMyNTYyOSBLZXkgRXg6IFNlcnZlciB0 byBDbGllbnQgSE1BQyBLZXkgY2FsY3VsYXRlZA0KW2xpYnNzaDJdIDAuMzI1NjI5IEtleSBFeDog Q2xpZW50IHRvIFNlcnZlciBjb21wcmVzc2lvbiBpbml0aWFsaXplZA0KW2xpYnNzaDJdIDAuMzI1 NjI5IEtleSBFeDogU2VydmVyIHRvIENsaWVudCBjb21wcmVzc2lvbiBpbml0aWFsaXplZA0KW2xp YnNzaDJdIDAuMzI1NjI5IFRyYW5zcG9ydDogUmVxdWVzdGluZyB1c2VyYXV0aCBzZXJ2aWNlDQo9 PiBsaWJzc2gyX3RyYW5zcG9ydF93cml0ZSBwbGFpbiAoMTcgYnl0ZXMpDQowMDAwOiAwNSAwMCAw MCAwMCAwbGlic3NoMl9pbml0OiBkb25lLg0Kc29ja2V0OiBkb25lLg0KY29ubmVjdDogZG9uZS4N CmxpYnNzaDJfc2Vzc2lvbl9pbml0OiBkb25lLg0KbGlic3NoMl9zZXNzaW9uX3NldF9ibG9ja2lu ZzogZG9uZS4NCmxpYnNzaDJfdHJhY2U6IGRvbmUuDQpDIDczIDczIDY4ICAyRCA3NSA3MyA2NSA3 MiA2MSA3NSA3NCA6IC4uLi4uc3NoLXVzZXJhdXQNCjAwMTA6IDY4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGgNCltsaWJzc2gyXSAwLjMyNTYyOSBTb2Nr ZXQ6IFNlbnQgMTMyLzEzMiBieXRlcyBhdCAwMDYwMkQ5MA0KPT4gbGlic3NoMl90cmFuc3BvcnRf d3JpdGUgc2VuZCgpICgxMzIgYnl0ZXMpDQowMDAwOiAxMyBGNSAzOCBFQiBCRSA1NSBEQiBBQSAg MDMgOEIgODkgNDYgQzUgREIgNUMgQkQgOiAuLjguLlUuLi4uLkYuLlwuDQowMDEwOiA3QiA3MCBG NSAzNCBDMyBFQSAyQiAwRCAgMjYgRDcgM0IgMzcgMTYgNDcgQjQgQTUgOiB7cC40Li4rLiYuOzcu Ry4uDQowMDIwOiAzMCAwRCAxRCBDQyA0MyA1NyA2QyA0OSAgQjMgODEgQTIgNEEgMTYgOTIgRTEg MTYgOiAwLi4uQ1dsSS4uLkouLi4uDQowMDMwOiA1QSA3QyAzNiAyQSA3OCA3RiA1OSBEOSAgMTEg MzYgMzAgNzMgMEMgODMgREEgRjYgOiBafDYqeC5ZLi42MHMuLi4uDQowMDQwOiAxRiBBNyBBQSA0 QyA0OCAxNiBGQiA1NSAgQ0QgNjggRDQgOTggQTQgODIgMjUgQkEgOiAuLi5MSC4uVS5oLi4uLiUu DQowMDUwOiAwNCBENiA3OSBCNyBFOCA0RiA5RCBEQiAgNzQgOTIgNkUgNjcgNTAgNkUgNEEgQjkg OiAuLnkuLk8uLnQubmdQbkouDQowMDYwOiBBNSAwQyAzQyBDNiA0MCAxQiAxNSA2RCAgMEYgQUQg NTUgMDMgQTQgQTUgOTIgMjUgOiAuLjwuQC4ubS4uVS4uLi4lDQowMDcwOiAwNyA3QyBDQiA5OCA2 QSBERiA2RCBGRiAgODkgQTAgRTAgOUEgNDMgNDggM0QgODMgOiAufC4uai5tLi4uLi5DSD0uDQow MDgwOiBFQSA5RCBDOCA0OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAu Li5JDQpbbGlic3NoMl0gMC4zMjU2MjkgVHJhbnNwb3J0OiBMb29raW5nIGZvciBwYWNrZXQgb2Yg dHlwZTogNg0KW2xpYnNzaDJdIDAuMzQzNjMwIFNvY2tldDogUmVjdmVkIDY4LzE2Mzg0IGJ5dGVz IHRvIDAwNUZFRDY4KzANCj0+IGxpYnNzaDJfdHJhbnNwb3J0X3JlYWQoKSByYXcgKDY4IGJ5dGVz KQ0KMDAwMDogRjEgMDEgRjAgMkEgQTAgMUYgREMgMzMgIDNGIDc1IDY5IDU3IDY2IDcyIDdBIDhE IDogLi4uKi4uLjM/dWlXZnJ6Lg0KMDAxMDogNzEgN0QgOUUgMDcgNEUgNEIgMDMgRjMgIEIzIEI2 IDAwIDcyIEREIDJGIDJGIDQ5IDogcX0uLk5LLi4uLi5yLi8vSQ0KMDAyMDogMDIgRkEgMEEgMTIg OEEgOTkgM0MgQjMgIDg4IEVGIDgzIDhGIDJFIDQ2IERDIDk3IDogLi4uLi4uPC4uLi4uLkYuLg0K MDAzMDogOTMgREYgM0EgMDUgQTcgNTYgMDAgOTUgIEVDIEE5IDU0IEE2IDVDIEVEIEU1IDUyIDog Li46Li5WLi4uLlQuXC4uUg0KMDA0MDogMEIgNDggRjkgREQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogLkguLg0KRmFpbHVyZSBlc3RhYmxpc2hpbmcgU1NIIHNlc3Npb246 IC00MQ0K --e89a8ff243012a11a804cc3d07d0 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --e89a8ff243012a11a804cc3d07d0-- From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 16:09:35 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HE9B00027261; Wed, 17 Oct 2012 16:09:28 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HE99Ks027250 for ; Wed, 17 Oct 2012 16:09:09 +0200 Received: (qmail 13341 invoked from network); 17 Oct 2012 14:09:08 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 17 Oct 2012 14:09:08 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Cc: libssh2-devel@cool.haxx.se Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software X-Trac-Project: libssh2 Date: Wed, 17 Oct 2012 14:09:08 -0000 X-URL: https://trac.libssh2.org/ Subject: Re: [libssh2] #249: sftp download data corruption X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:3 Message-ID: <058.b5a4fe58847874f40a17200088bbaf07@libssh2.stuge.se> References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-Trac-Ticket-ID: 249 In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9HE99Ks027250 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #249: sftp download data corruption ---------------------+------------------- Reporter: maxmtl | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: SFTP | Version: 1.4.2 Resolution: | Keywords: Blocked By: | Blocks: ---------------------+------------------- Comment (by maxmtl): Thanks for your time. I will have to talk with the Java guys here about the Mina SSHD patch. I think they redid the same correction. I agree that this is somewhat of a kludge. We have to work with old versions of our software (both embedded and java/pc-based), so this looked like the right solution. I have been mislead by Openssh's sftp client working correctly. So I (finally) took a look into the Openssh sftp client code. It goes fatal() when it receives more data than requested, but since it always asks for 32768 bytes it works correctly with old versions of Mina SSHD. Maybe that would be the correct solution in our case. Should I submit a patch that aborts when the received size is longer than requested? -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 19:03:28 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HH36Jj011989; Wed, 17 Oct 2012 19:03:22 +0200 Received: from gator378.hostgator.com (gator378.hostgator.com [184.173.199.219]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HH32ch011958 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Wed, 17 Oct 2012 19:03:03 +0200 Received: from [173.231.110.50] (port=64500 helo=[192.168.10.158]) by gator378.hostgator.com with esmtpa (Exim 4.80) (envelope-from ) id 1TOUVQ-0003JO-HU for libssh2-devel@cool.haxx.se; Wed, 17 Oct 2012 09:21:56 -0500 Message-ID: <507EBF03.6080908@yahoo.ca> Date: Wed, 17 Oct 2012 10:21:55 -0400 From: Maxime Larocque User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 MIME-Version: 1.0 To: libssh2 development Subject: sftp: Problem if received data is shorter than requested X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator378.hostgator.com X-AntiAbuse: Original Domain - cool.haxx.se X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - yahoo.ca X-BWhitelist: no X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: ([192.168.10.158]) [173.231.110.50]:64500 X-Source-Auth: max@weirdows.com X-Email-Count: 0 X-Source-Cap: bWF4bXRsO21heG10bDtnYXRvcjM3OC5ob3N0Z2F0b3IuY29t X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Hello, While working around ticket 249 I have seen something that might eventually lead to trouble. In sftp.c, around line 1487, sftp_read(): ====================================== case SSH_FXP_DATA: rc32 = _libssh2_ntohu32(data + 5); if (rc32 > (data_len - 9)) return _libssh2_error(session, LIBSSH2_ERROR_SFTP_PROTOCOL, "SFTP Protocol badness"); if(rc32 != chunk->len) { /* a short read does not imply end of file, but we must adjust the offset_sent since it was advanced with a full chunk->len before */ filep->offset_sent -= (chunk->len - rc32); ====================================== If the received length is shorter than requested, it just reduce the filep->offset_sent. This is wrong, since offset_sent has already been used to send requests. If this happens, the file will be missing a chunk. What OpenSSH does in this case is to resend the request with the missing length. I do not know if a lot of servers answers with data shorter than requested... It looks like old code, if the sftp code has passed from one-request-at-a-time to multiple parallel requests. I may have missed something in this case, so feel free to comment :-). Maxime Larocque _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 22:46:52 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKkToQ017143; Wed, 17 Oct 2012 22:46:47 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKkRBJ017132 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Wed, 17 Oct 2012 22:46:27 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9HKkRKj017123 for ; Wed, 17 Oct 2012 22:46:27 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Wed, 17 Oct 2012 22:46:27 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: sftp: Problem if received data is shorter than requested In-Reply-To: <507EBF03.6080908@yahoo.ca> Message-ID: References: <507EBF03.6080908@yahoo.ca> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Wed, 17 Oct 2012, Maxime Larocque wrote: > If the received length is shorter than requested, it just reduce the > filep->offset_sent. This is wrong, since offset_sent has already been used > to send requests. If this happens, the file will be missing a chunk. What > OpenSSH does in this case is to resend the request with the missing length. > I do not know if a lot of servers answers with data shorter than > requested... You're right. But the fix is a bit harder than "just that" because libssh2 does use speculative read-ahead and adding a separate read for a gap in the middle will require some proper considerations. I've basically held off trying to do that since I don't have a reliable (and repeatable) set of test cases to use for verification. But by all means, if you're up to it please go ahead and make an attempt! In reality, I've only seen a short read happen on the very last read for a file. I suppose you could make it happen if you for example try to read from /dev/random on the remote host or something. Ie from a file/pipe that provides data slowly. -- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Wed Oct 17 22:49:38 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKnaPU018855; Wed, 17 Oct 2012 22:49:37 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9HKm8Yg018037 for ; Wed, 17 Oct 2012 22:48:08 +0200 Received: (qmail 3253 invoked from network); 17 Oct 2012 20:48:07 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 17 Oct 2012 20:48:07 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Cc: libssh2-devel@cool.haxx.se Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software X-Trac-Project: libssh2 Date: Wed, 17 Oct 2012 20:48:07 -0000 X-URL: https://trac.libssh2.org/ Subject: Re: [libssh2] #249: sftp download data corruption X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/249#comment:4 Message-ID: <058.f046bfd155ae576d4ed93262b51b3e45@libssh2.stuge.se> References: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-Trac-Ticket-ID: 249 In-Reply-To: <043.190b9085be17002e0f5e9cec7fef3f7c@libssh2.stuge.se> X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9HKm8Yg018037 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #249: sftp download data corruption ---------------------+------------------- Reporter: maxmtl | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: SFTP | Version: 1.4.2 Resolution: | Keywords: Blocked By: | Blocks: ---------------------+------------------- Comment (by bagder): Yes please, such a patch would be awesome. Especially since it seems you have a fairly good way of trying it out! =) -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 01:40:31 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9LNdx1l005067; Mon, 22 Oct 2012 01:40:23 +0200 Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9LNdwsK005060 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 22 Oct 2012 01:39:58 +0200 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1TQ57k-0007yD-9R for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 01:40:04 +0200 Received: from 208.65.91.109 ([208.65.91.109]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 01:40:04 +0200 Received: from james.sumners by 208.65.91.109 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 01:40:04 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: libssh2-devel@cool.haxx.se From: James Sumners Subject: Key exchange trashing memory Date: Sun, 21 Oct 2012 19:27:52 -0400 Lines: 58 Message-ID: Mime-Version: 1.0 X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 208.65.91.109 User-Agent: Unison/2.1.9 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" I'm writing an Objective-C interface to libssh2. During my initial testing I was communicating with a server that reports the version string "OpenSSH_5.5p1 Debian-6+squeeze2" and didn't have any problems. Now, I'm testing against a server that reports simply "OpenSSH_6.0" (it's a slightly outdated Arch Linux server; OpenSSH 6.1 is available as an update) and the key exchange is failing. I'm using libssh2 version 1.4.3_DEV. I recorded a video of what is happening -- http://www.youtube.com/watch?v=vD364d9J8bc . This video shows the problem being run through LLDB. In the video, you can see that in the `void libssh2_sha1(const unsigned char *message, unsigned long len, unsigned char *out)` function in openssl.c (line 512) the `len` and `out` variables are getting overwritten after the call to `EVP_DigestInit`. Also shown in the video is a patch that allows the function to finish, but causes a crash later on in the process. Can anyone shed some light on what is happening here? The trace for the key exchange is: [libssh2] 0.229073 Key Ex: Sent KEX: diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 [libssh2] 0.229620 Key Ex: Sent HOSTKEY: ssh-rsa,ssh-dss [libssh2] 0.229920 Key Ex: Sent CRYPT_CS: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc [libssh2] 0.230242 Key Ex: Sent CRYPT_SC: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc [libssh2] 0.230549 Key Ex: Sent MAC_CS: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com [libssh2] 0.230828 Key Ex: Sent MAC_SC: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com [libssh2] 0.248835 Key Ex: Sent COMP_CS: none [libssh2] 0.249782 Key Ex: Sent COMP_SC: none [libssh2] 0.250296 Key Ex: Sent LANG_CS: [libssh2] 0.250665 Key Ex: Sent LANG_SC: [libssh2] 0.251181 Key Ex: Agreed on KEX method: diffie-hellman-group14-sha1 [libssh2] 0.251501 Key Ex: Agreed on HOSTKEY method: ssh-rsa [libssh2] 0.251799 Key Ex: Agreed on CRYPT_CS method: aes128-ctr [libssh2] 0.252076 Key Ex: Agreed on CRYPT_SC method: aes128-ctr [libssh2] 0.252362 Key Ex: Agreed on MAC_CS method: hmac-sha1 [libssh2] 0.252644 Key Ex: Agreed on MAC_SC method: hmac-sha1 [libssh2] 0.252915 Key Ex: Agreed on COMP_CS method: none [libssh2] 0.253183 Key Ex: Agreed on COMP_SC method: none [libssh2] 0.262499 Key Ex: Initiating Diffie-Hellman Group14 Key Exchange [libssh2] 0.273457 Key Ex: Sending KEX packet 30 [libssh2] 0.380532 Key Ex: Server's MD5 Fingerprint: 4b:ae:9e:24:47:80:5a:73:86:1e:ba:55:4c:b8:54:79 [libssh2] 0.381142 Key Ex: Server's SHA1 Fingerprint: 3f:de:ee:71:0b:2f:f4:92:7c:78:c6:0f:5b:ed:be:65:29:70:19:1d _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 10:47:16 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9M8kvNU014412; Mon, 22 Oct 2012 10:47:11 +0200 Received: from mail-ee0-f54.google.com (mail-ee0-f54.google.com [74.125.83.54]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9M8kthn014383 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Mon, 22 Oct 2012 10:46:55 +0200 Received: by mail-ee0-f54.google.com with SMTP id c50so894292eek.41 for ; Mon, 22 Oct 2012 01:46:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karelia.com; s=google; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer; bh=n4FPGrhdYW99UAv3Ji/lCtc8l6LoTKHCXL0D+fXPvoI=; b=a1RIh/t/JrUOAE5Owg8/da/rOnGOquDTDujAlS5E5eERq2+pa3J8ScycQaJrIcF+xK eQSDHTqCR+MFZL/Frm45Q9gjlsRzg8PR+u7UEm1UIgP+eS6hdrOxYsBfwfH2rXxMuIHw AUc7VAA6McgyGA1B2t/CzUgCzV1SgpvUb+fCw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer :x-gm-message-state; bh=n4FPGrhdYW99UAv3Ji/lCtc8l6LoTKHCXL0D+fXPvoI=; b=csVIEGjXsX6j1Db+5KCi/VkidkS9dbSBKjBr+U6bPvxduEMm6IyagvTOIcP7x+uTRD ABzjg2hew0Zm8tfoBEKq1JOU9RDDMdcqwnyAgTJLXXSk93/Hj3i7cUi+FhMWtPRwmav7 V5FM2EB9aADUjxiLHdj9EXM5M6KAc9CjnbhNpezptlIXfUY+eKIeE5HHZm+Yunb4mDuH 5bSm69QtZ/9AiSeYrXEQs5Hl2l9V9gJAHIVtBaizaYbDdWIkSrHD9ufiT9/g2tKqvKi7 brimaAutmSkqDOfqhH3tuemx3siEfk7j2qe8MkmvKRy+zIxLA+pmLAlUm6rF9LdWJQsL NZ9w== Received: by 10.14.214.133 with SMTP id c5mr10955903eep.8.1350895610991; Mon, 22 Oct 2012 01:46:50 -0700 (PDT) Received: from mikes-mac-pro-2.home (host86-159-9-168.range86-159.btcentralplus.com. [86.159.9.168]) by mx.google.com with ESMTPS id k2sm14869681eep.15.2012.10.22.01.46.49 (version=SSLv3 cipher=OTHER); Mon, 22 Oct 2012 01:46:50 -0700 (PDT) Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\)) Subject: Re: Key exchange trashing memory From: Mike Abdullah In-Reply-To: Date: Mon, 22 Oct 2012 09:46:49 +0100 Message-Id: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com> References: To: libssh2 development X-Mailer: Apple Mail (2.1499) X-Gm-Message-State: ALoCoQk1XKvGsCCdISwyiPfEwYij28s8NG6N9gdRH8pNveR6pMn/lq4LmG3dSY8LRlr4biiby7Ff X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9M8kthn014383 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" James, If you're interested, our libssh2 wrapper lives here: https://github.com/karelia/libssh2_sftp-Cocoa-wrapper It might help locate your problem. (Even better in my book if you can just extend it to your needs) On 22 Oct 2012, at 00:27, James Sumners wrote: > I'm writing an Objective-C interface to libssh2. During my initial testing I was communicating with a server that reports the version string "OpenSSH_5.5p1 Debian-6+squeeze2" and didn't have any problems. Now, I'm testing against a server that reports simply "OpenSSH_6.0" (it's a slightly outdated Arch Linux server; OpenSSH 6.1 is available as an update) and the key exchange is failing. I'm using libssh2 version 1.4.3_DEV. > > I recorded a video of what is happening -- http://www.youtube.com/watch?v=vD364d9J8bc . This video shows the problem being run through LLDB. > > In the video, you can see that in the `void libssh2_sha1(const unsigned char *message, unsigned long len, unsigned char *out)` function in openssl.c (line 512) the `len` and `out` variables are getting overwritten after the call to `EVP_DigestInit`. Also shown in the video is a patch that allows the function to finish, but causes a crash later on in the process. > > Can anyone shed some light on what is happening here? > > The trace for the key exchange is: > > [libssh2] 0.229073 Key Ex: Sent KEX: diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 > [libssh2] 0.229620 Key Ex: Sent HOSTKEY: ssh-rsa,ssh-dss > [libssh2] 0.229920 Key Ex: Sent CRYPT_CS: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc > [libssh2] 0.230242 Key Ex: Sent CRYPT_SC: aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc > [libssh2] 0.230549 Key Ex: Sent MAC_CS: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com > [libssh2] 0.230828 Key Ex: Sent MAC_SC: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com > [libssh2] 0.248835 Key Ex: Sent COMP_CS: none > [libssh2] 0.249782 Key Ex: Sent COMP_SC: none > [libssh2] 0.250296 Key Ex: Sent LANG_CS: > [libssh2] 0.250665 Key Ex: Sent LANG_SC: > [libssh2] 0.251181 Key Ex: Agreed on KEX method: diffie-hellman-group14-sha1 > [libssh2] 0.251501 Key Ex: Agreed on HOSTKEY method: ssh-rsa > [libssh2] 0.251799 Key Ex: Agreed on CRYPT_CS method: aes128-ctr > [libssh2] 0.252076 Key Ex: Agreed on CRYPT_SC method: aes128-ctr > [libssh2] 0.252362 Key Ex: Agreed on MAC_CS method: hmac-sha1 > [libssh2] 0.252644 Key Ex: Agreed on MAC_SC method: hmac-sha1 > [libssh2] 0.252915 Key Ex: Agreed on COMP_CS method: none > [libssh2] 0.253183 Key Ex: Agreed on COMP_SC method: none > [libssh2] 0.262499 Key Ex: Initiating Diffie-Hellman Group14 Key Exchange > [libssh2] 0.273457 Key Ex: Sending KEX packet 30 > [libssh2] 0.380532 Key Ex: Server's MD5 Fingerprint: 4b:ae:9e:24:47:80:5a:73:86:1e:ba:55:4c:b8:54:79 > [libssh2] 0.381142 Key Ex: Server's SHA1 Fingerprint: 3f:de:ee:71:0b:2f:f4:92:7c:78:c6:0f:5b:ed:be:65:29:70:19:1d > > > _______________________________________________ > libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 13:48:49 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MBmVbR025187; Mon, 22 Oct 2012 13:48:45 +0200 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MBmR3n025163 for ; Mon, 22 Oct 2012 13:48:28 +0200 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9MBmRro026619 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 22 Oct 2012 07:48:27 -0400 Received: from kdudka.brq.redhat.com (kdudka.brq.redhat.com [10.34.4.67]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q9MBmPNa029427; Mon, 22 Oct 2012 07:48:26 -0400 From: Kamil Dudka To: libssh2-devel@cool.haxx.se Subject: [PATCH] examples: use stderr for messages, stdout for data Date: Mon, 22 Oct 2012 13:47:23 +0200 Message-Id: <1350906443-20504-1-git-send-email-kdudka@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Reported by: Karel Srot Bug: https://bugzilla.redhat.com/867462 --- example/direct_tcpip.c | 19 ++++++++------- example/scp_nonblock.c | 2 +- example/scp_write_nonblock.c | 2 +- example/sftp.c | 49 +++++++++++++++++++++------------------- example/sftp_RW_nonblock.c | 14 ++++++------ example/sftp_append.c | 18 +++++++------- example/sftp_mkdir.c | 12 +++++----- example/sftp_mkdir_nonblock.c | 12 +++++----- example/sftp_nonblock.c | 4 +- example/sftp_write.c | 14 ++++++------ example/sftp_write_nonblock.c | 16 ++++++------ example/sftp_write_sliding.c | 16 ++++++------ example/sftpdir.c | 12 +++++----- example/sftpdir_nonblock.c | 8 +++--- example/ssh2.c | 26 +++++++++++---------- example/ssh2_agent.c | 14 ++++++------ example/ssh2_echo.c | 2 +- example/ssh2_exec.c | 4 +- example/subsystem_netconf.c | 20 ++++++++-------- example/tcpip-forward.c | 25 +++++++++++---------- 20 files changed, 148 insertions(+), 141 deletions(-) diff --git a/example/direct_tcpip.c b/example/direct_tcpip.c index 6aa9845..e530199 100644 --- a/example/direct_tcpip.c +++ b/example/direct_tcpip.c @@ -135,7 +135,7 @@ int main(int argc, char *argv[]) /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); - printf("Authentication methods: %s\n", userauthlist); + fprintf(stderr, "Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password")) auth |= AUTH_PASSWORD; if (strstr(userauthlist, "publickey")) @@ -157,12 +157,12 @@ int main(int argc, char *argv[]) } else if (auth & AUTH_PUBLICKEY) { if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) { - printf("\tAuthentication by public key failed!\n"); + fprintf(stderr, "\tAuthentication by public key failed!\n"); goto shutdown; } - printf("\tAuthentication by public key succeeded.\n"); + fprintf(stderr, "\tAuthentication by public key succeeded.\n"); } else { - printf("No supported authentication methods found!\n"); + fprintf(stderr, "No supported authentication methods found!\n"); goto shutdown; } @@ -185,7 +185,7 @@ int main(int argc, char *argv[]) goto shutdown; } - printf("Waiting for TCP connection on %s:%d...\n", + fprintf(stderr, "Waiting for TCP connection on %s:%d...\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port)); forwardsock = accept(listensock, (struct sockaddr *)&sin, &sinlen); @@ -197,8 +197,8 @@ int main(int argc, char *argv[]) shost = inet_ntoa(sin.sin_addr); sport = ntohs(sin.sin_port); - printf("Forwarding connection from %s:%d here to remote %s:%d\n", shost, - sport, remote_desthost, remote_destport); + fprintf(stderr, "Forwarding connection from %s:%d here to remote %s:%d\n", + shost, sport, remote_desthost, remote_destport); channel = libssh2_channel_direct_tcpip_ex(session, remote_desthost, remote_destport, shost, sport); @@ -228,7 +228,8 @@ int main(int argc, char *argv[]) perror("read"); goto shutdown; } else if (0 == len) { - printf("The client at %s:%d disconnected!\n", shost, sport); + fprintf(stderr, "The client at %s:%d disconnected!\n", shost, + sport); goto shutdown; } wr = 0; @@ -259,7 +260,7 @@ int main(int argc, char *argv[]) wr += i; } if (libssh2_channel_eof(channel)) { - printf("The server at %s:%d disconnected!\n", + fprintf(stderr, "The server at %s:%d disconnected!\n", remote_desthost, remote_destport); goto shutdown; } diff --git a/example/scp_nonblock.c b/example/scp_nonblock.c index 867d851..5d636c0 100644 --- a/example/scp_nonblock.c +++ b/example/scp_nonblock.c @@ -250,7 +250,7 @@ int main(int argc, char *argv[]) gettimeofday(&end, NULL); time_ms = tvdiff(end, start); - printf("Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total, + fprintf(stderr, "Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total, time_ms, total/(time_ms/1000.0), spin ); libssh2_channel_free(channel); diff --git a/example/scp_write_nonblock.c b/example/scp_write_nonblock.c index 9dfbd4e..0ac0f69 100644 --- a/example/scp_write_nonblock.c +++ b/example/scp_write_nonblock.c @@ -243,7 +243,7 @@ int main(int argc, char *argv[]) duration = (int)(time(NULL)-start); - printf("%ld bytes in %d seconds makes %.1f bytes/sec\n", + fprintf(stderr, "%ld bytes in %d seconds makes %.1f bytes/sec\n", total, duration, total/(double)duration); fprintf(stderr, "Sending EOF\n"); diff --git a/example/sftp.c b/example/sftp.c index e69b3c3..88ceba2 100644 --- a/example/sftp.c +++ b/example/sftp.c @@ -55,24 +55,24 @@ static void kbd_callback(const char *name, int name_len, char buf[1024]; (void)abstract; - printf("Performing keyboard-interactive authentication.\n"); + fprintf(stderr, "Performing keyboard-interactive authentication.\n"); - printf("Authentication name: '"); - fwrite(name, 1, name_len, stdout); - printf("'\n"); + fprintf(stderr, "Authentication name: '"); + fwrite(name, 1, name_len, stderr); + fprintf(stderr, "'\n"); - printf("Authentication instruction: '"); - fwrite(instruction, 1, instruction_len, stdout); - printf("'\n"); + fprintf(stderr, "Authentication instruction: '"); + fwrite(instruction, 1, instruction_len, stderr); + fprintf(stderr, "'\n"); - printf("Number of prompts: %d\n\n", num_prompts); + fprintf(stderr, "Number of prompts: %d\n\n", num_prompts); for (i = 0; i < num_prompts; i++) { - printf("Prompt %d from server: '", i); - fwrite(prompts[i].text, 1, prompts[i].length, stdout); - printf("'\n"); + fprintf(stderr, "Prompt %d from server: '", i); + fwrite(prompts[i].text, 1, prompts[i].length, stderr); + fprintf(stderr, "'\n"); - printf("Please type response: "); + fprintf(stderr, "Please type response: "); fgets(buf, sizeof(buf), stdin); n = strlen(buf); while (n > 0 && strchr("\r\n", buf[n - 1])) @@ -82,12 +82,13 @@ static void kbd_callback(const char *name, int name_len, responses[i].text = strdup(buf); responses[i].length = n; - printf("Response %d from user is '", i); - fwrite(responses[i].text, 1, responses[i].length, stdout); - printf("'\n\n"); + fprintf(stderr, "Response %d from user is '", i); + fwrite(responses[i].text, 1, responses[i].length, stderr); + fprintf(stderr, "'\n\n"); } - printf("Done. Sending keyboard-interactive responses to server now.\n"); + fprintf(stderr, + "Done. Sending keyboard-interactive responses to server now.\n"); } @@ -127,7 +128,7 @@ int main(int argc, char *argv[]) rc = libssh2_init (0); if (rc != 0) { - fprintf (stderr, "libssh2 initialization failed (%d)\n", rc); + fprintf(stderr, "libssh2 initialization failed (%d)\n", rc); return 1; } @@ -178,7 +179,7 @@ int main(int argc, char *argv[]) /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); - printf("Authentication methods: %s\n", userauthlist); + fprintf(stderr, "Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password") != NULL) { auth_pw |= 1; } @@ -211,21 +212,23 @@ int main(int argc, char *argv[]) } else if (auth_pw & 2) { /* Or via keyboard-interactive */ if (libssh2_userauth_keyboard_interactive(session, username, &kbd_callback) ) { - printf("\tAuthentication by keyboard-interactive failed!\n"); + fprintf(stderr, + "\tAuthentication by keyboard-interactive failed!\n"); goto shutdown; } else { - printf("\tAuthentication by keyboard-interactive succeeded.\n"); + fprintf(stderr, + "\tAuthentication by keyboard-interactive succeeded.\n"); } } else if (auth_pw & 4) { /* Or by public key */ if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) { - printf("\tAuthentication by public key failed!\n"); + fprintf(stderr, "\tAuthentication by public key failed!\n"); goto shutdown; } else { - printf("\tAuthentication by public key succeeded.\n"); + fprintf(stderr, "\tAuthentication by public key succeeded.\n"); } } else { - printf("No supported authentication methods found!\n"); + fprintf(stderr, "No supported authentication methods found!\n"); goto shutdown; } diff --git a/example/sftp_RW_nonblock.c b/example/sftp_RW_nonblock.c index babb48a..77c2027 100644 --- a/example/sftp_RW_nonblock.c +++ b/example/sftp_RW_nonblock.c @@ -141,11 +141,11 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if(argc > 1) { username = argv[1]; @@ -162,7 +162,7 @@ int main(int argc, char *argv[]) tempstorage = fopen(STORAGE, "wb"); if(!tempstorage) { - printf("Can't open temp storage file %s\n", STORAGE); + fprintf(stderr, "Can't open temp storage file %s\n", STORAGE); goto shutdown; } @@ -171,7 +171,7 @@ int main(int argc, char *argv[]) while ((rc = libssh2_userauth_password(session, username, password)) == LIBSSH2_ERROR_EAGAIN); if (rc) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -185,7 +185,7 @@ int main(int argc, char *argv[]) password)) == LIBSSH2_ERROR_EAGAIN); if (rc) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -341,7 +341,7 @@ int main(int argc, char *argv[]) #endif if (tempstorage) fclose(tempstorage); - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftp_append.c b/example/sftp_append.c index 731d21a..7585d38 100644 --- a/example/sftp_append.c +++ b/example/sftp_append.c @@ -86,7 +86,7 @@ int main(int argc, char *argv[]) local = fopen(loclfile, "rb"); if (!local) { - printf("Can't local file %s\n", loclfile); + fprintf(stderr, "Can't open local file %s\n", loclfile); return -1; } @@ -129,16 +129,16 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -147,7 +147,7 @@ int main(int argc, char *argv[]) "/home/username/.ssh/id_rsa.pub", "/home/username/.ssh/id_rsa", password)) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -174,12 +174,12 @@ int main(int argc, char *argv[]) } if(libssh2_sftp_fstat_ex(sftp_handle, &attrs, 0) < 0) { - printf("libssh2_sftp_fstat_ex failed\n"); + fprintf(stderr, "libssh2_sftp_fstat_ex failed\n"); goto shutdown; } else libssh2_sftp_seek64(sftp_handle, attrs.filesize); - printf("Did a seek to position %ld\n", (long) attrs.filesize); + fprintf(stderr, "Did a seek to position %ld\n", (long) attrs.filesize); fprintf(stderr, "libssh2_sftp_open() a handle for APPEND\n"); @@ -222,7 +222,7 @@ shutdown: #endif if (local) fclose(local); - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftp_mkdir.c b/example/sftp_mkdir.c index 39af8f0..8747084 100644 --- a/example/sftp_mkdir.c +++ b/example/sftp_mkdir.c @@ -110,16 +110,16 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -128,7 +128,7 @@ int main(int argc, char *argv[]) "/home/username/.ssh/id_rsa.pub", "/home/username/.ssh/id_rsa", password)) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -164,7 +164,7 @@ int main(int argc, char *argv[]) #else close(sock); #endif - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftp_mkdir_nonblock.c b/example/sftp_mkdir_nonblock.c index 84cdc8f..22a8f59 100644 --- a/example/sftp_mkdir_nonblock.c +++ b/example/sftp_mkdir_nonblock.c @@ -110,16 +110,16 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -128,7 +128,7 @@ int main(int argc, char *argv[]) "/home/username/.ssh/id_rsa.pub", "/home/username/.ssh/id_rsa", password)) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -164,7 +164,7 @@ int main(int argc, char *argv[]) #else close(sock); #endif - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftp_nonblock.c b/example/sftp_nonblock.c index 6ddc109..29cec8a 100644 --- a/example/sftp_nonblock.c +++ b/example/sftp_nonblock.c @@ -251,7 +251,7 @@ int main(int argc, char *argv[]) gettimeofday(&end, NULL); time_ms = tvdiff(end, start); - printf("Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total, + fprintf(stderr, "Got %d bytes in %ld ms = %.1f bytes/sec spin: %d\n", total, time_ms, total/(time_ms/1000.0), spin ); libssh2_sftp_close(sftp_handle); @@ -259,7 +259,7 @@ int main(int argc, char *argv[]) shutdown: - printf("libssh2_session_disconnect\n"); + fprintf(stderr, "libssh2_session_disconnect\n"); while (libssh2_session_disconnect(session, "Normal Shutdown, Thank you") == LIBSSH2_ERROR_EAGAIN); diff --git a/example/sftp_write.c b/example/sftp_write.c index 9415ce4..483f80a 100644 --- a/example/sftp_write.c +++ b/example/sftp_write.c @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) local = fopen(loclfile, "rb"); if (!local) { - printf("Can't local file %s\n", loclfile); + fprintf(stderr, "Can't open local file %s\n", loclfile); return -1; } @@ -128,16 +128,16 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -146,7 +146,7 @@ int main(int argc, char *argv[]) "/home/username/.ssh/id_rsa.pub", "/home/username/.ssh/id_rsa", password)) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -206,7 +206,7 @@ shutdown: #endif if (local) fclose(local); - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftp_write_nonblock.c b/example/sftp_write_nonblock.c index 61cc5f4..0d66c40 100644 --- a/example/sftp_write_nonblock.c +++ b/example/sftp_write_nonblock.c @@ -125,7 +125,7 @@ int main(int argc, char *argv[]) local = fopen(loclfile, "rb"); if (!local) { - printf("Can't local file %s\n", loclfile); + fprintf(stderr, "Can't open local file %s\n", loclfile); return -1; } @@ -169,18 +169,18 @@ int main(int argc, char *argv[]) * that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ while ((rc = libssh2_userauth_password(session, username, password)) == LIBSSH2_ERROR_EAGAIN); if (rc) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -191,7 +191,7 @@ int main(int argc, char *argv[]) password)) == LIBSSH2_ERROR_EAGAIN); if (rc) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -253,7 +253,7 @@ int main(int argc, char *argv[]) duration = (int)(time(NULL)-start); - printf("%ld bytes in %d seconds makes %.1f bytes/sec\n", + fprintf(stderr, "%ld bytes in %d seconds makes %.1f bytes/sec\n", total, duration, total/(double)duration); @@ -272,7 +272,7 @@ shutdown: #else close(sock); #endif - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftp_write_sliding.c b/example/sftp_write_sliding.c index 2d8301c..c2ba39d 100644 --- a/example/sftp_write_sliding.c +++ b/example/sftp_write_sliding.c @@ -125,7 +125,7 @@ int main(int argc, char *argv[]) local = fopen(loclfile, "rb"); if (!local) { - printf("Can't local file %s\n", loclfile); + fprintf(stderr, "Can't open local file %s\n", loclfile); return -1; } @@ -169,18 +169,18 @@ int main(int argc, char *argv[]) * that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ while ((rc = libssh2_userauth_password(session, username, password)) == LIBSSH2_ERROR_EAGAIN); if (rc) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -191,7 +191,7 @@ int main(int argc, char *argv[]) password)) == LIBSSH2_ERROR_EAGAIN); if (rc) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -262,7 +262,7 @@ int main(int argc, char *argv[]) duration = (int)(time(NULL)-start); - printf("%ld bytes in %d seconds makes %.1f bytes/sec\n", + fprintf(stderr, "%ld bytes in %d seconds makes %.1f bytes/sec\n", total, duration, total/(double)duration); @@ -281,7 +281,7 @@ shutdown: #else close(sock); #endif - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftpdir.c b/example/sftpdir.c index 006fd27..cb9fb88 100644 --- a/example/sftpdir.c +++ b/example/sftpdir.c @@ -130,16 +130,16 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { - printf("Authentication by password failed.\n"); + fprintf(stderr, "Authentication by password failed.\n"); goto shutdown; } } else { @@ -148,7 +148,7 @@ int main(int argc, char *argv[]) "/home/username/.ssh/id_rsa.pub", "/home/username/.ssh/id_rsa", password)) { - printf("\tAuthentication by public key failed\n"); + fprintf(stderr, "\tAuthentication by public key failed\n"); goto shutdown; } } @@ -229,7 +229,7 @@ int main(int argc, char *argv[]) #else close(sock); #endif - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/sftpdir_nonblock.c b/example/sftpdir_nonblock.c index 38fb010..c8ad9f5 100644 --- a/example/sftpdir_nonblock.c +++ b/example/sftpdir_nonblock.c @@ -134,11 +134,11 @@ int main(int argc, char *argv[]) * user, that's your call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); if (auth_pw) { /* We could authenticate via password */ @@ -239,7 +239,7 @@ int main(int argc, char *argv[]) #else close(sock); #endif - printf("all done\n"); + fprintf(stderr, "all done\n"); libssh2_exit(); diff --git a/example/ssh2.c b/example/ssh2.c index d5e6166..008496c 100644 --- a/example/ssh2.c +++ b/example/ssh2.c @@ -126,15 +126,15 @@ int main(int argc, char *argv[]) * call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); - printf("Authentication methods: %s\n", userauthlist); + fprintf(stderr, "Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password") != NULL) { auth_pw |= 1; } @@ -161,31 +161,33 @@ int main(int argc, char *argv[]) if (auth_pw & 1) { /* We could authenticate via password */ if (libssh2_userauth_password(session, username, password)) { - printf("\tAuthentication by password failed!\n"); + fprintf(stderr, "\tAuthentication by password failed!\n"); goto shutdown; } else { - printf("\tAuthentication by password succeeded.\n"); + fprintf(stderr, "\tAuthentication by password succeeded.\n"); } } else if (auth_pw & 2) { /* Or via keyboard-interactive */ if (libssh2_userauth_keyboard_interactive(session, username, &kbd_callback) ) { - printf("\tAuthentication by keyboard-interactive failed!\n"); + fprintf(stderr, + "\tAuthentication by keyboard-interactive failed!\n"); goto shutdown; } else { - printf("\tAuthentication by keyboard-interactive succeeded.\n"); + fprintf(stderr, + "\tAuthentication by keyboard-interactive succeeded.\n"); } } else if (auth_pw & 4) { /* Or by public key */ if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) { - printf("\tAuthentication by public key failed!\n"); + fprintf(stderr, "\tAuthentication by public key failed!\n"); goto shutdown; } else { - printf("\tAuthentication by public key succeeded.\n"); + fprintf(stderr, "\tAuthentication by public key succeeded.\n"); } } else { - printf("No supported authentication methods found!\n"); + fprintf(stderr, "No supported authentication methods found!\n"); goto shutdown; } @@ -250,7 +252,7 @@ int main(int argc, char *argv[]) #else close(sock); #endif - printf("all done!\n"); + fprintf(stderr, "all done!\n"); libssh2_exit(); diff --git a/example/ssh2_agent.c b/example/ssh2_agent.c index 9ca1a42..231445f 100644 --- a/example/ssh2_agent.c +++ b/example/ssh2_agent.c @@ -105,15 +105,15 @@ int main(int argc, char *argv[]) * call */ fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1); - printf("Fingerprint: "); + fprintf(stderr, "Fingerprint: "); for(i = 0; i < 20; i++) { - printf("%02X ", (unsigned char)fingerprint[i]); + fprintf(stderr, "%02X ", (unsigned char)fingerprint[i]); } - printf("\n"); + fprintf(stderr, "\n"); /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); - printf("Authentication methods: %s\n", userauthlist); + fprintf(stderr, "Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "publickey") == NULL) { fprintf(stderr, "\"publickey\" authentication is not supported\n"); goto shutdown; @@ -147,11 +147,11 @@ int main(int argc, char *argv[]) goto shutdown; } if (libssh2_agent_userauth(agent, username, identity)) { - printf("\tAuthentication with username %s and " + fprintf(stderr, "\tAuthentication with username %s and " "public key %s failed!\n", username, identity->comment); } else { - printf("\tAuthentication with username %s and " + fprintf(stderr, "\tAuthentication with username %s and " "public key %s succeeded!\n", username, identity->comment); break; @@ -234,7 +234,7 @@ int main(int argc, char *argv[]) #endif } - printf("all done!\n"); + fprintf(stderr, "all done!\n"); libssh2_exit(); diff --git a/example/ssh2_echo.c b/example/ssh2_echo.c index 1fd8f3f..2430e33 100644 --- a/example/ssh2_echo.c +++ b/example/ssh2_echo.c @@ -327,7 +327,7 @@ int main(int argc, char *argv[]) } if (exitsignal) - printf("\nGot signal: %s\n", exitsignal); + fprintf(stderr, "\nGot signal: %s\n", exitsignal); libssh2_channel_free(channel); channel = NULL; diff --git a/example/ssh2_exec.c b/example/ssh2_exec.c index e5b151d..d47761c 100644 --- a/example/ssh2_exec.c +++ b/example/ssh2_exec.c @@ -292,9 +292,9 @@ int main(int argc, char *argv[]) } if (exitsignal) - printf("\nGot signal: %s\n", exitsignal); + fprintf(stderr, "\nGot signal: %s\n", exitsignal); else - printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount); + fprintf(stderr, "\nEXIT: %d bytecount: %d\n", exitcode, bytecount); libssh2_channel_free(channel); channel = NULL; diff --git a/example/subsystem_netconf.c b/example/subsystem_netconf.c index 708113b..6f83661 100644 --- a/example/subsystem_netconf.c +++ b/example/subsystem_netconf.c @@ -173,7 +173,7 @@ int main(int argc, char *argv[]) /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); - printf("Authentication methods: %s\n", userauthlist); + fprintf(stderr, "Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password")) auth |= AUTH_PASSWORD; if (strstr(userauthlist, "publickey")) @@ -195,12 +195,12 @@ int main(int argc, char *argv[]) } else if (auth & AUTH_PUBLICKEY) { if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) { - printf("Authentication by public key failed!\n"); + fprintf(stderr, "Authentication by public key failed!\n"); goto shutdown; } - printf("Authentication by public key succeeded.\n"); + fprintf(stderr, "Authentication by public key succeeded.\n"); } else { - printf("No supported authentication methods found!\n"); + fprintf(stderr, "No supported authentication methods found!\n"); goto shutdown; } @@ -223,7 +223,7 @@ int main(int argc, char *argv[]) /* NETCONF: http://tools.ietf.org/html/draft-ietf-netconf-ssh-06 */ - printf("Sending NETCONF client \n"); + fprintf(stderr, "Sending NETCONF client \n"); snprintf(buf, sizeof(buf), "\n" "" @@ -235,14 +235,14 @@ int main(int argc, char *argv[]) if (-1 == netconf_write(channel, buf, len)) goto shutdown; - printf("Reading NETCONF server \n"); + fprintf(stderr, "Reading NETCONF server \n"); len = netconf_read_until(channel, "", buf, sizeof(buf)); if (-1 == len) goto shutdown; - printf("Got %d bytes:\n----------------------\n%s", (int)len, buf); + fprintf(stderr, "Got %d bytes:\n----------------------\n%s", (int)len, buf); - printf("Sending NETCONF \n"); + fprintf(stderr, "Sending NETCONF \n"); snprintf(buf, sizeof(buf), "\n" "" @@ -252,12 +252,12 @@ int main(int argc, char *argv[]) if (-1 == netconf_write(channel, buf, len)) goto shutdown; - printf("Reading NETCONF \n"); + fprintf(stderr, "Reading NETCONF \n"); len = netconf_read_until(channel, "", buf, sizeof(buf)); if (-1 == len) goto shutdown; - printf("Got %d bytes:\n----------------------\n%s", (int)len, buf); + fprintf(stderr, "Got %d bytes:\n----------------------\n%s", (int)len, buf); shutdown: if (channel) diff --git a/example/tcpip-forward.c b/example/tcpip-forward.c index a408b69..94d3cc8 100644 --- a/example/tcpip-forward.c +++ b/example/tcpip-forward.c @@ -137,7 +137,7 @@ int main(int argc, char *argv[]) /* check what authentication methods are available */ userauthlist = libssh2_userauth_list(session, username, strlen(username)); - printf("Authentication methods: %s\n", userauthlist); + fprintf(stderr, "Authentication methods: %s\n", userauthlist); if (strstr(userauthlist, "password")) auth |= AUTH_PASSWORD; if (strstr(userauthlist, "publickey")) @@ -159,17 +159,17 @@ int main(int argc, char *argv[]) } else if (auth & AUTH_PUBLICKEY) { if (libssh2_userauth_publickey_fromfile(session, username, keyfile1, keyfile2, password)) { - printf("\tAuthentication by public key failed!\n"); + fprintf(stderr, "\tAuthentication by public key failed!\n"); goto shutdown; } - printf("\tAuthentication by public key succeeded.\n"); + fprintf(stderr, "\tAuthentication by public key succeeded.\n"); } else { - printf("No supported authentication methods found!\n"); + fprintf(stderr, "No supported authentication methods found!\n"); goto shutdown; } - printf("Asking server to listen on remote %s:%d\n", remote_listenhost, - remote_wantport); + fprintf(stderr, "Asking server to listen on remote %s:%d\n", + remote_listenhost, remote_wantport); listener = libssh2_channel_forward_listen_ex(session, remote_listenhost, remote_wantport, &remote_listenport, 1); @@ -180,10 +180,10 @@ int main(int argc, char *argv[]) goto shutdown; } - printf("Server is listening on %s:%d\n", remote_listenhost, + fprintf(stderr, "Server is listening on %s:%d\n", remote_listenhost, remote_listenport); - printf("Waiting for remote connection\n"); + fprintf(stderr, "Waiting for remote connection\n"); channel = libssh2_channel_forward_accept(listener); if (!channel) { fprintf(stderr, "Could not accept connection!\n" @@ -192,7 +192,8 @@ int main(int argc, char *argv[]) goto shutdown; } - printf("Accepted remote connection. Connecting to local server %s:%d\n", + fprintf(stderr, + "Accepted remote connection. Connecting to local server %s:%d\n", local_destip, local_destport); forwardsock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sin.sin_family = AF_INET; @@ -206,7 +207,7 @@ int main(int argc, char *argv[]) goto shutdown; } - printf("Forwarding connection from remote %s:%d to local %s:%d\n", + fprintf(stderr, "Forwarding connection from remote %s:%d to local %s:%d\n", remote_listenhost, remote_listenport, local_destip, local_destport); /* Must use non-blocking IO hereafter due to the current libssh2 API */ @@ -228,7 +229,7 @@ int main(int argc, char *argv[]) perror("read"); goto shutdown; } else if (0 == len) { - printf("The local server at %s:%d disconnected!\n", + fprintf(stderr, "The local server at %s:%d disconnected!\n", local_destip, local_destport); goto shutdown; } @@ -260,7 +261,7 @@ int main(int argc, char *argv[]) wr += i; } if (libssh2_channel_eof(channel)) { - printf("The remote client at %s:%d disconnected!\n", + fprintf(stderr, "The remote client at %s:%d disconnected!\n", remote_listenhost, remote_listenport); goto shutdown; } -- 1.7.1 _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 14:40:22 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MCeAxV005451; Mon, 22 Oct 2012 14:40:20 +0200 Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MCe8Hw005438 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 22 Oct 2012 14:40:08 +0200 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1TQHIi-00051l-Lb for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 14:40:12 +0200 Received: from sumners-osx.clayton.edu ([168.28.245.176]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 14:40:12 +0200 Received: from james.sumners by sumners-osx.clayton.edu with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 14:40:12 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: libssh2-devel@cool.haxx.se From: James Sumners Subject: Re: Key exchange trashing memory Date: Mon, 22 Oct 2012 08:39:55 -0400 Lines: 15 Message-ID: References: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com> Mime-Version: 1.0 X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: sumners-osx.clayton.edu User-Agent: Unison/2.1.9 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On 2012-10-22 08:46:49 +0000, Mike Abdullah said: > James, > > If you're interested, our libssh2 wrapper lives here: > https://github.com/karelia/libssh2_sftp-Cocoa-wrapper > > It might help locate your problem. (Even better in my book if you can > just extend it to your needs) Looks good, but I'm going in a different direction with my interface. In regard to the problem, I don't see anything in your session class that would shed light on why libssh2 itself is failing. The error is occuring during the handshake while negotiating encryption keys. _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 17:45:01 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MFiWc4024457; Mon, 22 Oct 2012 17:44:54 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MFiVbA024450 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 22 Oct 2012 17:44:31 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9MFiVdT024446 for ; Mon, 22 Oct 2012 17:44:31 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Mon, 22 Oct 2012 17:44:31 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: [PATCH] examples: use stderr for messages, stdout for data In-Reply-To: <1350906443-20504-1-git-send-email-kdudka@redhat.com> Message-ID: References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Yeps, Looks perfectly reasonable to me! -- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 18:15:21 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGFFxD011340; Mon, 22 Oct 2012 18:15:19 +0200 Received: from mail-wg0-f54.google.com (mail-wg0-f54.google.com [74.125.82.54]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGFEtm011260 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Mon, 22 Oct 2012 18:15:14 +0200 Received: by mail-wg0-f54.google.com with SMTP id dt10so1858221wgb.11 for ; Mon, 22 Oct 2012 09:15:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karelia.com; s=google; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer; bh=7yTHjh4FdaV8GlxpAj5/ua0VbW6dxwO9hdymgROAFqU=; b=BxoYn/m5pfTpYqih39UE9N+TG/PSJ5PGJpNY0XYzdM699HOj+jKA6ep1f48lIzYKnp tgtbhdcJq+EXZAvLQp/SeOuEHuZRf+Nqk7sp+yFtlIt9r/1BHL2QyvMnpqwEgbICXS0f BuDXTs04PvgBQ8T+4qfPggW9o55jZHRUk6ZR0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer :x-gm-message-state; bh=7yTHjh4FdaV8GlxpAj5/ua0VbW6dxwO9hdymgROAFqU=; b=QtvDL7j8Kr+f0ZqolJuVBE7kpYv6uoyvPEE0n8jE2+RBySHeqBpUgkpOmA49tNCT0K l1rN8elvhwe7jpgA7vKkkKqeo4Ac5YjV56i0bd9gupR/PRjv0ifcBeCEzEs3OBKCA5kJ Hss86NPThqiAxwKqP8gmHPQTsFCvFS6ODqJCwJA5VhmeQKmxTnIbckOAJxpQhijo1TAU w+XhaPD8cfWhaSvqrEx0v6KEhgSTnmL/a+JYy0PuKw8bi8w6O8Yu6ufAChR+JkzzCPL4 w5JcqidnXhyjUOqwcPPsUSAj3JQ1+wIvzhyPVatPVmQ6PuaQPTiUmgINA7y2OdaWKgkY qu5w== Received: by 10.180.87.42 with SMTP id u10mr22449193wiz.0.1350922510619; Mon, 22 Oct 2012 09:15:10 -0700 (PDT) Received: from android_53e9a288fce7f1e5.mshome.net (87-194-215-37.bethere.co.uk. [87.194.215.37]) by mx.google.com with ESMTPS id fp6sm31619793wib.0.2012.10.22.09.15.09 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 22 Oct 2012 09:15:10 -0700 (PDT) Mime-Version: 1.0 (Apple Message framework v1278) Subject: Re: Key exchange trashing memory From: Mike Abdullah In-Reply-To: Date: Mon, 22 Oct 2012 16:25:19 +0100 Message-Id: <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com> References: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com> To: libssh2 development X-Mailer: Apple Mail (2.1278) X-Gm-Message-State: ALoCoQkFgzL/Kd9nCZMjRbU2/n5MWjqPI7eAaR+QibDuM6unhBJ0xMcXQCjH9PX4s30dIkJ/cXeF X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9MGFEtm011260 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="windows-1252" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9MGFFxD011340 On 22 Oct 2012, at 13:39, James Sumners wrote: > On 2012-10-22 08:46:49 +0000, Mike Abdullah said: > >> James, >> If you're interested, our libssh2 wrapper lives here: >> https://github.com/karelia/libssh2_sftp-Cocoa-wrapper >> It might help locate your problem. (Even better in my book if you can just extend it to your needs) > > Looks good, but I'm going in a different direction with my interface. If you care to publish it when finished, I would be very interested to see how you approach it differently. > In regard to the problem, I don't see anything in your session class that would shed light on why libssh2 itself is failing. The error is occuring during the handshake while negotiating encryption keys. I figured you might spot a difference in how the two talk to libssh2 that might throw light on the problem. Nothing more helpful than that I’m afraid. _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 18:38:06 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGbxAV025130; Mon, 22 Oct 2012 18:38:05 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9MGbxrC025116 for ; Mon, 22 Oct 2012 18:37:59 +0200 Received: (qmail 22394 invoked by uid 501); 22 Oct 2012 16:38:00 -0000 Message-ID: <20121022163800.22393.qmail@stuge.se> Date: Mon, 22 Oct 2012 18:38:00 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: [PATCH] examples: use stderr for messages, stdout for data Mail-Followup-To: libssh2-devel@cool.haxx.se References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1350906443-20504-1-git-send-email-kdudka@redhat.com> X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Kamil Dudka wrote: > Reported by: Karel Srot > Bug: https://bugzilla.redhat.com/867462 I think this is a waste of time. The examples are *library usage examples* - they are not supposed to be useful beyond that. Anyone caring about how they output their bytes is clearly not focusing on *library usage*. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 18:39:39 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGdbt0025852; Mon, 22 Oct 2012 18:39:38 +0200 Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGdZ2w025834 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 22 Oct 2012 18:39:35 +0200 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1TQL2U-0001Sk-1H for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 18:39:42 +0200 Received: from sumners-osx.clayton.edu ([168.28.245.176]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 18:39:42 +0200 Received: from james.sumners by sumners-osx.clayton.edu with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 18:39:42 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: libssh2-devel@cool.haxx.se From: James Sumners Subject: Re: Key exchange trashing memory Date: Mon, 22 Oct 2012 12:39:21 -0400 Lines: 33 Message-ID: References: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com> <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com> Mime-Version: 1.0 X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: sumners-osx.clayton.edu User-Agent: Unison/2.1.9 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9MGdbt0025852 On 2012-10-22 15:25:19 +0000, Mike Abdullah said: > > On 22 Oct 2012, at 13:39, James Sumners wrote: > >> On 2012-10-22 08:46:49 +0000, Mike Abdullah said: >> >>> James, >>> If you're interested, our libssh2 wrapper lives here: >>> https://github.com/karelia/libssh2_sftp-Cocoa-wrapper >>> It might help locate your problem. (Even better in my book if you can >>> just extend it to your needs) >> >> Looks good, but I'm going in a different direction with my interface. > > If you care to publish it when finished, I would be very interested to > see how you approach it differently. Definitely. > >> In regard to the problem, I don't see anything in your session class >> that would shed light on why libssh2 itself is failing. The error is >> occuring during the handshake while negotiating encryption keys. > > I figured you might spot a difference in how the two talk to libssh2 > that might throw light on the problem. Nothing more helpful than that > I’m afraid. I think I've found the problem. Xcode is insisting on linking to the OS X bundled version of OpenSSL. I'm in the process of trying to figure out how to force it to use the right library. _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 18:46:06 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGjvOd030264; Mon, 22 Oct 2012 18:46:05 +0200 Received: from mail-wg0-f54.google.com (mail-wg0-f54.google.com [74.125.82.54]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MGjuLI030216 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Mon, 22 Oct 2012 18:45:56 +0200 Received: by mail-wg0-f54.google.com with SMTP id dt10so1878857wgb.11 for ; Mon, 22 Oct 2012 09:45:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karelia.com; s=google; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer; bh=Lb0EPRfiYhpd2Jrj7JAaVe01iZVCQ0uLyp9Cei4CqZE=; b=TGCkPlBhNWngB/MXR/knK086jBsn2EGwA5lWYbYBm/QlfHfULEh/vzGHDS4atPcTNy //yKvzo0m1VwldGG36eAIwzTGaKVhJ680hOwPbjmkORiqnYhehlH4doVsVNBAilgdjRz Bd6DEIoDi/A8MVyZM/cHZgf/Tx6Qcyq9ca7Cw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer :x-gm-message-state; bh=Lb0EPRfiYhpd2Jrj7JAaVe01iZVCQ0uLyp9Cei4CqZE=; b=X5n9Vc+PcY+ncB8N3l+GoZUNHdADteuIsiS04DJmXghBWHoTI3bRPHxU0eJJxv6ZXo DuvyqOBdt48KPzB/ymIqznIlt558XJov2Rc7QFw+J41zFVEUJrBS9QlQGScyGRCFsQKl EDRdhV2rTYe+RBTCafBuDWLasz7RaJD3mNOlFIQJeiB105bJdJ+F7Zn/6Xb6tisE/0lD 9IZbf0t3WlbAiomQs8HlX/27BpVWN+uCFnniD8NdPO5H2JLYyLmiAz8/b5HWDXPzSQ7k 7LkoPzQvhysbtHParDxLCjfTJomdQGyZxRIFmw4h5R01kBIrbeRfjD4bWYxr5IcDr+AQ 0Bvg== Received: by 10.180.74.33 with SMTP id q1mr38410406wiv.4.1350924352810; Mon, 22 Oct 2012 09:45:52 -0700 (PDT) Received: from android_53e9a288fce7f1e5.mshome.net (87-194-215-37.bethere.co.uk. [87.194.215.37]) by mx.google.com with ESMTPS id dq6sm17814329wib.5.2012.10.22.09.45.51 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 22 Oct 2012 09:45:52 -0700 (PDT) Mime-Version: 1.0 (Apple Message framework v1278) Subject: Re: Key exchange trashing memory From: Mike Abdullah In-Reply-To: Date: Mon, 22 Oct 2012 17:45:57 +0100 Message-Id: <997D2C15-A87F-4DF2-A397-17528CB39317@karelia.com> References: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com> <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com> To: libssh2 development X-Mailer: Apple Mail (2.1278) X-Gm-Message-State: ALoCoQmmYyi4gcqw2VY/5bOBmdNvsxOPJsAHiZpK6X/WtJasBtpkRgi93BI0h+OwjuC3Q1RAFy/A X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9MGjuLI030216 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="windows-1252" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9MGjvOd030264 On 22 Oct 2012, at 17:39, James Sumners wrote: > I think I've found the problem. Xcode is insisting on linking to the OS X bundled version of OpenSSL. I'm in the process of trying to figure out how to force it to use the right library. Aha, well our code does specially link against an old copy of libcrypto just so we can force Xcode to use the right one. We don’t actually deploy a copy of the library, just use it to nudge the linker. _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 19:00:39 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MH0XLM007001; Mon, 22 Oct 2012 19:00:38 +0200 Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MH0WOA006996 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 22 Oct 2012 19:00:32 +0200 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1TQLMi-0006l2-Nq for libssh2-devel@cool.haxx.se; Mon, 22 Oct 2012 19:00:36 +0200 Received: from sumners-osx.clayton.edu ([168.28.245.176]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 19:00:36 +0200 Received: from james.sumners by sumners-osx.clayton.edu with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 22 Oct 2012 19:00:36 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: libssh2-devel@cool.haxx.se From: James Sumners Subject: Re: [PATCH] examples: use stderr for messages, stdout for data Date: Mon, 22 Oct 2012 13:00:18 -0400 Lines: 18 Message-ID: References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> <20121022163800.22393.qmail@stuge.se> Mime-Version: 1.0 X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: sumners-osx.clayton.edu User-Agent: Unison/2.1.9 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On 2012-10-22 16:38:00 +0000, Peter Stuge said: > Kamil Dudka wrote: >> Reported by: Karel Srot >> Bug: https://bugzilla.redhat.com/867462 > > I think this is a waste of time. > > The examples are *library usage examples* - they are not supposed to > be useful beyond that. Anyone caring about how they output their > bytes is clearly not focusing on *library usage*. > > > //Peter I agree. I read the RH BugZilla and thought "why is this even a report? They are examples, not programs to be used in production." _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 21:52:48 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MJqN3O026992; Mon, 22 Oct 2012 21:52:44 +0200 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MJqLeD026960 for ; Mon, 22 Oct 2012 21:52:21 +0200 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9MJqKqG020412 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 22 Oct 2012 15:52:21 -0400 Received: from nbkamil.localnet (vpn1-7-141.ams2.redhat.com [10.36.7.141]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q9MJqIAF022803; Mon, 22 Oct 2012 15:52:19 -0400 From: Kamil Dudka To: James Sumners Subject: Re: [PATCH] examples: use stderr for messages, stdout for data Date: Mon, 22 Oct 2012 21:52:15 +0200 Message-ID: <2119335.tfSgouqnTz@nbkamil> User-Agent: KMail/4.9.2 (Linux/3.4.4-gentoo+; KDE/4.9.2; x86_64; ; ) In-Reply-To: References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> <20121022163800.22393.qmail@stuge.se> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 Cc: Peter Stuge , libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Monday, October 22, 2012 13:00:18 James Sumners wrote: > On 2012-10-22 16:38:00 +0000, Peter Stuge said: > > Kamil Dudka wrote: > >> Reported by: Karel Srot > >> Bug: https://bugzilla.redhat.com/867462 > > > > I think this is a waste of time. I am not forcing anybody to work on this. The time I spent on writing the patch was sponsored by my employer, so it was not a big waste really. > > The examples are *library usage examples* - they are not supposed to > > be useful beyond that. Anyone caring about how they output their > > bytes is clearly not focusing on *library usage*. > > > > > > //Peter > > I agree. I read the RH BugZilla and thought "why is this even a report? > They are examples, not programs to be used in production." We are trying to introduce an easy way to test new releases of libssh2 independently of the libraries and applications that use it. Running the set of examples distributed with libssh2 seemed like a reasonable step to start with. To improve the test coverage, I asked Karel Srot to write some tests checking whether the contents of the transferred files matches the original contents. Obviously, this is something hard to check as long as the output of the examples is interleaved with verbose messages. Kamil _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 22:05:32 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MK5RRD006359; Mon, 22 Oct 2012 22:05:31 +0200 Received: from foo.stuge.se (qmailr@foo.stuge.se [212.116.89.98]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with SMTP id q9MK5QxF006353 for ; Mon, 22 Oct 2012 22:05:26 +0200 Received: (qmail 6314 invoked by uid 501); 22 Oct 2012 20:05:27 -0000 Message-ID: <20121022200527.6313.qmail@stuge.se> Date: Mon, 22 Oct 2012 22:05:27 +0200 From: Peter Stuge To: libssh2-devel@cool.haxx.se Subject: Re: [PATCH] examples: use stderr for messages, stdout for data Mail-Followup-To: libssh2-devel@cool.haxx.se References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> <20121022163800.22393.qmail@stuge.se> <2119335.tfSgouqnTz@nbkamil> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <2119335.tfSgouqnTz@nbkamil> X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Kamil Dudka wrote: > > > I think this is a waste of time. > > I am not forcing anybody to work on this. The time I spent on writing > the patch was sponsored by my employer, so it was not a big waste really. Waste for the employer IMO. > We are trying to introduce an easy way to test new releases of > libssh2 independently of the libraries and applications that use it. This is a great idea! > Running the set of examples distributed with libssh2 seemed like a > reasonable step to start with. This not so much. The examples are, third time, intended to demonstrate *library usage*. They are specifically not test cases. I would very much welcome test cases, which use the library, and not the examples. The exapmles can be improved to be more readable, so that they better serve their function of demonstrating library usage, but please stop mistaking them for test cases sooner rather than later. //Peter _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 22:41:36 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKfU0T002205; Mon, 22 Oct 2012 22:41:35 +0200 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKfSv0002189 for ; Mon, 22 Oct 2012 22:41:29 +0200 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9MKfT4L005528 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 22 Oct 2012 16:41:29 -0400 Received: from nbkamil.localnet (vpn1-7-141.ams2.redhat.com [10.36.7.141]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q9MKfSrc031958; Mon, 22 Oct 2012 16:41:29 -0400 From: Kamil Dudka To: Peter Stuge Subject: Re: [PATCH] examples: use stderr for messages, stdout for data Date: Mon, 22 Oct 2012 22:41:25 +0200 Message-ID: <26520325.S8Xus5HSlQ@nbkamil> User-Agent: KMail/4.9.2 (Linux/3.4.4-gentoo+; KDE/4.9.2; x86_64; ; ) In-Reply-To: <20121022200527.6313.qmail@stuge.se> References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> <2119335.tfSgouqnTz@nbkamil> <20121022200527.6313.qmail@stuge.se> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 Cc: libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Monday, October 22, 2012 22:05:27 Peter Stuge wrote: > Kamil Dudka wrote: > > > > I think this is a waste of time. > > > > I am not forcing anybody to work on this. The time I spent on writing > > the patch was sponsored by my employer, so it was not a big waste really. > > Waste for the employer IMO. > > > We are trying to introduce an easy way to test new releases of > > libssh2 independently of the libraries and applications that use it. > > This is a great idea! > > > Running the set of examples distributed with libssh2 seemed like a > > reasonable step to start with. > > This not so much. The examples are, third time, intended to > demonstrate *library usage*. They are specifically not test cases. > > I would very much welcome test cases, which use the library, and not > the examples. I agree, we need test cases. Still, the test cases can be based on the examples. If we need to test sftp, scp, tcp/ip forwarding, etc., we can just run the corresponding examples in a defined way and compare their output with the expected one. Otherwise we would have to duplicate the code exercising libssh2 and maintain it at two places. > The exapmles can be improved to be more readable, so that they better > serve their function of demonstrating library usage, but please stop > mistaking them for test cases sooner rather than later. I admit that my patch does not bring any major improvement from user's point of view, but I do not think it anyhow breaks the original purpose of those examples. Kamil _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Mon Oct 22 22:46:59 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKkv7M005891; Mon, 22 Oct 2012 22:46:58 +0200 Received: from giant.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MKktaL005867 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 22 Oct 2012 22:46:55 +0200 Received: from localhost (dast@localhost) by giant.haxx.se (8.14.4/8.14.4/Submit) with ESMTP id q9MKktjQ005860 for ; Mon, 22 Oct 2012 22:46:55 +0200 X-Authentication-Warning: giant.haxx.se: dast owned process doing -bs Date: Mon, 22 Oct 2012 22:46:55 +0200 (CEST) From: Daniel Stenberg X-X-Sender: dast@giant.haxx.se To: libssh2 development Subject: Re: [PATCH] examples: use stderr for messages, stdout for data In-Reply-To: <26520325.S8Xus5HSlQ@nbkamil> Message-ID: References: <1350906443-20504-1-git-send-email-kdudka@redhat.com> <2119335.tfSgouqnTz@nbkamil> <20121022200527.6313.qmail@stuge.se> <26520325.S8Xus5HSlQ@nbkamil> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) X-fromdanielhimself: yes MIME-Version: 1.0 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On Mon, 22 Oct 2012, Kamil Dudka wrote: > I admit that my patch does not bring any major improvement from user's point > of view, but I do not think it anyhow breaks the original purpose of those > examples. I agree. I don't think the patch harms anything but actually makes the situation slightly better. I'm not entirely sure however that basing tests on the example code is a good idea, but I also feel that the one who's doing the job right now gets to do a fair bit of deciding. We _can_ after all clone the examples into separate test cases at a later point (instead of doing it immediately now) in case we end up needing that. -- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 23 00:58:56 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MMwVOW024773; Tue, 23 Oct 2012 00:58:52 +0200 Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9MMwTY8024768 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 23 Oct 2012 00:58:29 +0200 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1TQQxA-0004hf-Qx for libssh2-devel@cool.haxx.se; Tue, 23 Oct 2012 00:58:36 +0200 Received: from 208.65.91.109 ([208.65.91.109]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 23 Oct 2012 00:58:36 +0200 Received: from james.sumners by 208.65.91.109 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 23 Oct 2012 00:58:36 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: libssh2-devel@cool.haxx.se From: James Sumners Subject: Re: Key exchange trashing memory Date: Mon, 22 Oct 2012 18:58:20 -0400 Lines: 18 Message-ID: References: <10C2E105-1FE6-4D15-AC8F-9B946B652422@karelia.com> <5C0ECBA6-A9AB-4BA1-8707-6B1A41080C02@karelia.com> <997D2C15-A87F-4DF2-A397-17528CB39317@karelia.com> Mime-Version: 1.0 X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 208.65.91.109 User-Agent: Unison/2.1.9 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9MMwVOW024773 On 2012-10-22 16:45:57 +0000, Mike Abdullah said: > > On 22 Oct 2012, at 17:39, James Sumners wrote: > >> I think I've found the problem. Xcode is insisting on linking to the OS >> X bundled version of OpenSSL. I'm in the process of trying to figure >> out how to force it to use the right library. > > Aha, well our code does specially link against an old copy of libcrypto > just so we can force Xcode to use the right one. We don’t actually > deploy a copy of the library, just use it to nudge the linker. It was definitely a problem with my test application linking to the system libcrypto.dylib instead of my own libcrypto.a. Took a while to figure out how to fix that. I'll post instructions along with my interface when it's releasable. _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 23 03:46:57 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9N1kXrH014631; Tue, 23 Oct 2012 03:46:53 +0200 Received: from earth.stuge.se (earth.stuge.se [212.116.89.126]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9N1kVxJ014616 for ; Tue, 23 Oct 2012 03:46:32 +0200 Received: (qmail 13423 invoked from network); 23 Oct 2012 01:46:29 -0000 Received: from unknown (HELO earth.stuge.se) (127.0.0.1) by localhost with SMTP; 23 Oct 2012 01:46:29 -0000 MIME-Version: 1.0 From: "libssh2 Trac" X-Trac-Version: 1.0dev Precedence: bulk Auto-Submitted: auto-generated X-Mailer: Trac 1.0dev, by Edgewall Software To: jaf@meyersound.com X-Trac-Project: libssh2 Date: Tue, 23 Oct 2012 01:46:29 -0000 X-URL: https://trac.libssh2.org/ Subject: [libssh2] #250: libssh2_channel_send_eof() sometimes fails when used in non-blocking mode X-Trac-Ticket-URL: https://trac.libssh2.org/ticket/250 Message-ID: <045.71dc68c0246eaefb66a5712cf86a4fa0@libssh2.stuge.se> X-Trac-Ticket-ID: 250 X-MIME-Autoconverted: from base64 to 8bit by giant.haxx.se id q9N1kVxJ014616 Cc: libssh2-devel@cool.haxx.se X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Reply-To: trac@libssh2.stuge.se, libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" #250: libssh2_channel_send_eof() sometimes fails when used in non-blocking mode -------------------------------------------+-------------------- Reporter: jfriesne | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: API | Version: 1.4.2 Keywords: non-blocking channel_send_eof | Blocked By: Blocks: | -------------------------------------------+-------------------- Hi there libssh2 developers, I think I've found a bug in the libssh2_channel_send_eof() function, when it is used in conjunction with libssh's non-blocking mode. The symptom for me is this: I have a program that uses libssh2 1.4.2 to upload multiple files at once. Each upload is handled by a different thread with its own (non-shared) libssh2 session object. Under Windows 7, about 80% of the time one or more of the uploads (at random) would fail with libssh2_channel_send_eof() returning error -7 (aka LIBSSH2_ERROR_SOCKET_SEND). I did some investigation and found found that the call to _libssh2_transport_write() inside channel_send_eof() was failing, with error code -39 (aka LIBSSH2_ERROR_BAD_USE), which AFAIK should never occur. A little more investigation revealed what is happening: sometimes channel_send_eof()'s first call to _libssh2_transport_write() would result in LIBSSH2_ERROR_EAGAIN, because the socket's output buffer has no more space. This is fine, but the problem is that the pointer passed in to _libssh2_transport_write() gets recorded into libssh2's transportpacket data structure, and then the next time _libssh2_transport_write() is called, it calls send_existing() and send_existing() checks to make sure that the pointer passed in on the second attempt is the same as the pointer that was passed in on the first attempt. That would all be fine, except that the 5-byte char array being sent by channel_send_eof() is located on the stack: static int channel_send_eof(LIBSSH2_CHANNEL *channel) { LIBSSH2_SESSION *session = channel->session; unsigned char packet[5]; /* packet_type(1) + channelno(4) */ int rc; [...] rc = _libssh2_transport_write(session, packet, 5); [...] .... which means that the memory location pointed to by (packet) may be different each time channel_send_eof() is called, even if the data pointed to by (packet) is the same. This is what triggers the LIBSSH2_ERROR_BAD_USE error inside send_existing(), which in turn causes libssh2_channel_send_eof() to fail. In my local copy of libssh2 I was able to resolve the problem by moving unsigned char packet[5]; /* packet_type(1) + channelno(4) */ from the stack of the channel_send_eof() function into the LIBSSH2_CHANNEL object instead (i.e. as a member variable). That way the memory location of (packet) will always be the same for a given channel object, and thus the false-positive error detection is avoided. I hope that all made sense -- if not, feel free to email me (jaf@meyersound.com). -Jeremy -- Ticket URL: libssh2 C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Tue Oct 23 17:27:22 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9NFQw0N031549; Tue, 23 Oct 2012 17:27:17 +0200 Received: from smtp1.hushmail.com (smtp1a.hushmail.com [65.39.178.236]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9NFQuAM031507 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Tue, 23 Oct 2012 17:26:57 +0200 Received: from smtp1.hushmail.com (smtp1a.hushmail.com [65.39.178.236]) by smtp1.hushmail.com (Postfix) with SMTP id 5B1A02FDF1 for ; Tue, 23 Oct 2012 15:26:56 +0000 (UTC) Received: from smtp.hushmail.com (w7.hushmail.com [65.39.178.32]) by smtp1.hushmail.com (Postfix) with ESMTP for ; Tue, 23 Oct 2012 15:26:56 +0000 (UTC) Received: by smtp.hushmail.com (Postfix, from userid 99) id 10E2B6F454; Tue, 23 Oct 2012 15:26:56 +0000 (UTC) MIME-Version: 1.0 Date: Tue, 23 Oct 2012 16:26:55 +0100 To: libssh2-devel@cool.haxx.se Subject: libssh2_userauth_publickey functionning From: scout_game@hushmail.me Message-Id: <20121023152656.10E2B6F454@smtp.hushmail.com> X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" Good morning; I want to use libssh2_userauth_publickey for my apps, I have seen a usage of this function from agent.c source file, but here I don't understand what is going on. Normally libssh2_userauth_publickey_fromfile() requires both public and private keys to authenticate. This is usual but I haven't seen libssh2_userauth_publickey uses any private key but only a public key in its argument as unsigned char* variable. So should I setup my ssh to authenticate without providing a private key before using libssh2_userauth_publickey ? if yes I have no clue how to do that, maybe should I generate the pub/priv keys from the remote server and copy the public key to my local computer but I haven't tried that trick before so don't know if this is the solution or there is something else hidden. Regards _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel From libssh2-devel-bounces@cool.haxx.se Thu Oct 25 12:44:53 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PAiQ27014358; Thu, 25 Oct 2012 12:44:44 +0200 Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PAiNLp014332 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Thu, 25 Oct 2012 12:44:24 +0200 Received: by mail-ob0-f182.google.com with SMTP id wc20so1432984obb.41 for ; Thu, 25 Oct 2012 03:44:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ideadevice.com; s=google; h=mime-version:date:message-id:subject:from:to:content-type; bh=jBRkiszkM8rJ2W89RVq0yDoCh9VM7aK+Vg1ymQWKk9g=; b=eqOIbvE3BAVUF4ihuOi+5QKFcn++lb1ZI7xOFXvyshZV7b+GbSNByRjAspIhYko8nS 0vB4ZP9iDJozkzbJeSQIa6SvH65N0afy/wmDcQCdixu/NO0pRLx92H/fBbhe7T8seCEQ BZOio79R6GB+5gRyVhqWF4EuBcrrR20fCqqjg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=jBRkiszkM8rJ2W89RVq0yDoCh9VM7aK+Vg1ymQWKk9g=; b=g8n/PQ0HkRrlEBEX/4LvNZJvJpEvYLpJIIkLoyX4r8kfqVC86SjRNIc18KXqUJTs7u Rraf0BZLaxJeLAK4Kn90igVm8CnJUEm3egMkPuBUeOzUoyd2ldlxCCDYklD+1Uz8UdrU 4JRwLqxcIvy90vfv7z0zWByWlPCSdvO/vknSTJW2UZSloJFJmxRKZrEeBuWc1Y/jPVO9 NKLGYw05wVWDx7jFSySmMzHpmmQ+4tudyZ9JvDH2j/wRuZPkzc1N51jq3atvu55OV2U7 mCmErO5C3+k53nKwgKCkpy5Sn4IncfyQsOuVde3Nbo37//wE4SG53vquW0KSMiL50H6d 7Xlw== MIME-Version: 1.0 Received: by 10.182.113.5 with SMTP id iu5mr15306002obb.36.1351161859125; Thu, 25 Oct 2012 03:44:19 -0700 (PDT) Received: by 10.182.81.199 with HTTP; Thu, 25 Oct 2012 03:44:17 -0700 (PDT) Date: Thu, 25 Oct 2012 16:14:17 +0530 Message-ID: Subject: Issue with libssh2_channel_wait_closed() after Shell is requested. From: Ravikanth Sharma To: libssh2-devel@cool.haxx.se X-Gm-Message-State: ALoCoQknbu2DtJY3+00O7Jp+RvY9te752NxKAZ/m389JGtnJY8cS11kBJ23hHHea4m2RUNdFMOJ8 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1309106277==" Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" --===============1309106277== Content-Type: multipart/alternative; boundary=f46d0447f188a5afe404ccdfe216 --f46d0447f188a5afe404ccdfe216 Content-Type: text/plain; charset=ISO-8859-1 Hi folks, libssh2_channel_wait_closed() returns -34 (LIBSSH2_ERROR_INVAL) after shell is requested(libssh2_channel_shell()). It works fine (returns 0) when there is no shell open on channel. Is there something extra I need to do to close the channel properly with shell running? Why cant I follow libssh2_channel_close() with libssh2_channel_wait_closed() when the shell is running? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> /******************************************************* * * * NO LICENSE, THIS CODE IS PUBLIC DOMAIN * * * * Written by Pioz * * To compile: "gcc -o ssh_client ssh_client.c -lssh2" * *******************************************************/ #include #include #include int main (int argc, char **argv) { if (argc != 4) { fprintf (stderr, "usage: %s host user pass\n", argv[0]); return -1; } char *host = argv[1]; int port = 22; char *user = argv[2]; char *pass = argv[3]; int sock; LIBSSH2_SESSION *session; LIBSSH2_CHANNEL *channel; struct sockaddr_in sin; // Make a connection on port 22 sock = socket (AF_INET, SOCK_STREAM, 0); sin.sin_family = AF_INET; sin.sin_port = htons (port); sin.sin_addr.s_addr = inet_addr (host); if (connect (sock, (struct sockaddr*)(&sin), sizeof (struct sockaddr_in)) != 0) { fprintf (stderr, "Connection failed!\n"); return -1; } session = libssh2_session_init (); if (libssh2_session_startup (session, sock)) { fprintf (stderr, "SSH connection failed!\n"); return -1; } // Authentication if (libssh2_userauth_password (session, user, pass)) { fprintf (stderr, "Authentication failed!\n"); return -1; } printf ("Authentication successfully!\n"); // Open terminal if (!(channel = libssh2_channel_open_session (session))) { fprintf (stderr, "Cannot open channel!\n"); return -1; } printf ( "\nrequest_pty:\t%d", libssh2_channel_request_pty (channel, "vt100")); printf ( "\nshell:\t%d", libssh2_channel_shell (channel)); // Close terminal printf ( "\nclose:\t%d", libssh2_channel_close (channel)); printf ( "\nwait_closed:\t%d", libssh2_channel_wait_closed (channel)); libssh2_channel_free (channel); // Disconnect libssh2_session_disconnect (session, "Goodbye"); libssh2_session_free (session); printf ("\nAll done.\n"); return 0; } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers! Ravi --f46d0447f188a5afe404ccdfe216 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi folks,

libssh2_channel_wait_closed() returns -34 (LIBSSH2_ERROR_I= NVAL) after shell is requested(libssh2_channel_shell()).
It works fine (= returns 0) when there is no shell open on channel.

Is there somethin= g extra I need to do to close the channel properly with shell running?
Why cant I follow libssh2_channel_close() with libssh2_channel_wait_closed(= ) when the shell is running?

<Code>>>>>>>>= ;>>>>>>>>>>>>>>>>>>&g= t;>>>>>>>>>>>>>>>>>>&= gt;>>>>>>>>>>>>>>>>>>= >>>>>>>>>>>>>>>>>>>= ;>>>>>

/*******************************************************
=A0*=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= *
=A0* NO LICENSE, THIS CODE IS PUBLIC DOMAIN=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 *
=A0*=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 *
=A0* Written by Pioz=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 *
=A0* To compile= : "gcc -o ssh_client ssh_client.c -lssh2" *
=A0***************= ****************************************/

#include <arpa/inet.h&g= t;
#include <stdio.h>
#include <libssh2.h>


int
ma= in (int argc, char **argv)
{
=A0 if (argc !=3D 4)
=A0=A0=A0 {
= =A0=A0=A0=A0=A0 fprintf (stderr, "usage: %s host user pass\n", ar= gv[0]);
=A0=A0=A0=A0=A0 return -1;
=A0=A0=A0 }

=A0 char *host =3D argv[1];
=A0 int=A0=A0 port =3D 22= ;
=A0 char *user =3D argv[2];
=A0 char *pass =3D argv[3];

=A0 = int sock;
=A0 LIBSSH2_SESSION *session;
=A0 LIBSSH2_CHANNEL *channel;=
=A0 struct sockaddr_in sin;
=A0
=A0 // Make a connection on port 22
=A0 sock =3D socket (AF_INET,= SOCK_STREAM, 0);
=A0 sin.sin_family =3D AF_INET;
=A0 sin.sin_port = =3D htons (port);
=A0 sin.sin_addr.s_addr =3D inet_addr (host);
=A0 i= f (connect (sock, (struct sockaddr*)(&sin), sizeof (struct sockaddr_in)= ) !=3D 0)
=A0=A0=A0 {
=A0=A0=A0=A0=A0 fprintf (stderr, "Connection failed!\n&= quot;);
=A0=A0=A0=A0=A0 return -1;
=A0=A0=A0 }
=A0 session =3D lib= ssh2_session_init ();
=A0 if (libssh2_session_startup (session, sock))=A0=A0=A0 {
=A0=A0=A0=A0=A0 fprintf (stderr, "SSH connection fail= ed!\n");
=A0=A0=A0=A0=A0 return -1;
=A0=A0=A0 }

=A0 // Authentication
= =A0 if (libssh2_userauth_password (session, user, pass))
=A0=A0=A0 {
= =A0=A0=A0=A0=A0 fprintf (stderr, "Authentication failed!\n");
= =A0=A0=A0=A0=A0 return -1;
=A0=A0=A0 }
=A0 printf ("Authenticati= on successfully!\n");
=A0
=A0 // Open terminal
=A0 if (!(channel =3D libssh2_channel_open_s= ession (session)))
=A0=A0=A0 {
=A0=A0=A0=A0=A0 fprintf (stderr, "= ;Cannot open channel!\n");
=A0=A0=A0=A0=A0 return -1;
=A0=A0=A0 = }

=A0 printf ( "\nrequest_pty:\t%d", libssh2_channel_requ= est_pty (channel, "vt100"));
=A0 printf ( "\nshell:\t%d", libssh2_channel_shell (channel));
=A0 // Close terminal
=A0 printf ( "\nclose:\t%d", libssh= 2_channel_close (channel));
=A0 printf ( "\nwait_closed:\t%d",= libssh2_channel_wait_closed (channel));
=A0 libssh2_channel_free (channel);
=A0
=A0 // Disconnect
=A0 lib= ssh2_session_disconnect (session, "Goodbye");
=A0 libssh2_sess= ion_free (session);

=A0 printf ("\nAll done.\n");

= =A0 return 0;
}

</Code>>>>>>>>>>>>>>&= gt;>>>>>>>>>>>>>>>>>>= >>>>>>>>>>>>>>>>>>>= ;>>>>>>>>>>>>>>>>>>&g= t;>>>>>>>>>>>>>>>>>

Cheers!

Ravi
--f46d0447f188a5afe404ccdfe216-- --===============1309106277== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel --===============1309106277==-- From libssh2-devel-bounces@cool.haxx.se Thu Oct 25 13:55:44 2012 Return-Path: Received: from www.haxx.se (localhost.localdomain [127.0.0.1]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PBtUvL031688; Thu, 25 Oct 2012 13:55:41 +0200 Received: from mail-qa0-f54.google.com (mail-qa0-f54.google.com [209.85.216.54]) by giant.haxx.se (8.14.4/8.14.4/Debian-2) with ESMTP id q9PBtREK031609 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Thu, 25 Oct 2012 13:55:28 +0200 Received: by mail-qa0-f54.google.com with SMTP id p27so1851445qat.20 for ; Thu, 25 Oct 2012 04:55:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; bh=o7oFoKLJlpROWzeXQVXn065AirySVRf2cmNmdzJv9BI=; b=jDowtMQN42G7LnNBRdqR9laUEDnV608JxOqSh6cAPjMbWziWaX2qeyNih2Iv+lZQDz 2LdT1MmhxIuQTbaIPRAB+CVQYZ9e7fD2FtBgXp3mLtYoiv9rHDHg4XKblQgcj8jDuH78 DXedW9eqfaX3NQY2aKgEQIdVKEReQcsnLQsdroVaqR8xI+OkVNUAQN/c/HrMB2DbRrcB 9OZzXe+P0qRUH8dX7ESXITV9OrOaQAIVucPZIEn/4jV7SWDyS3ehg9F8ZofoRROcqgy4 dkZ+e8t4XTlEdKU24oZpe8h+SaX8DgnuouP+eNH4ALjGXYnIos+cQ6GnAnwox1QzCwT8 P4/A== MIME-Version: 1.0 Received: by 10.224.116.12 with SMTP id k12mr6438010qaq.47.1351166123963; Thu, 25 Oct 2012 04:55:23 -0700 (PDT) Received: by 10.229.2.205 with HTTP; Thu, 25 Oct 2012 04:55:23 -0700 (PDT) In-Reply-To: <20121023152656.10E2B6F454@smtp.hushmail.com> References: <20121023152656.10E2B6F454@smtp.hushmail.com> Date: Thu, 25 Oct 2012 12:55:23 +0100 X-Google-Sender-Auth: yAq4ZjdoM9gRO5ruIG8ryJdmevo Message-ID: Subject: Re: libssh2_userauth_publickey functionning From: Alexander Lamaison To: libssh2 development X-MIME-Autoconverted: from quoted-printable to 8bit by giant.haxx.se id q9PBtREK031609 X-BeenThere: libssh2-devel@cool.haxx.se X-Mailman-Version: 2.1.15 Precedence: list Reply-To: libssh2 development List-Id: libssh2 development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: libssh2-devel-bounces@cool.haxx.se Sender: "libssh2-devel" On 23 October 2012 16:26, wrote: > Good morning; > I want to use libssh2_userauth_publickey for my apps, I have seen a usage of this function from agent.c source file, but here I don't understand what is going on. The easiest way to use public key authentication with libssh2 is to use the key agent API. These are the API functions that start with 'libssh2_agent_'. This way the user loads their keys into the appropriate keychain for their platform (for instance Pageant on Windows) and you call the agent api functions to authenticate using those keys. > Normally libssh2_userauth_publickey_fromfile() requires both public and private keys to authenticate. If you are using the OpenSSL crypto backend, you only need to provide the private key. The public key is extracted from it. > This is usual but I haven't seen libssh2_userauth_publickey uses any private key but only a public key in its argument as unsigned char* variable. So should I setup my ssh to authenticate without providing a private key before using libssh2_userauth_publickey ? I believe that libssh2_userauth_publickey expects you to sign the data manually yourself using a private key in the function you pass as a callback to the sign_callback argument. But I'm not 100% sure. Noone seems to remember quite how this API call works and it isn't documented. Notice that libssh2_userauth_publickey_from_file_ex is implemented in terms of libssh2_userauth_publickey and includes and example of a sign_callback function. > maybe should I generate the pub/priv keys from the remote server and copy the public key to my local computer but I haven't tried that trick before so don't know if this is the solution or there is something else hidden. How you distribute and install the public keys depends on your SSH server. For OpenSSH you copy and paste the public key line into the ~/.ssh/authorized_keys file. Alex -- Swish - Easy SFTP for Windows Explorer (http://www.swish-sftp.org) _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel