[Libguestfs] [PATCH] Lib.pm: Add file_architecture command.

Richard W.M. Jones rjones at redhat.com
Tue Jul 28 18:03:03 UTC 2009


On Tue, Jul 28, 2009 at 05:59:14PM +0100, Richard W.M. Jones wrote:
> This patch does the same as the previous 'file-arch' command, except
> written in Perl and running on the host.

Attached is an updated and fixed version of this patch.

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://et.redhat.com/~rjones/libguestfs/
See what it can do: http://et.redhat.com/~rjones/libguestfs/recipes.html
-------------- next part --------------
>From ab715a8321f96f9b1115011d5a40e70ac52d672c Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at trick.home.annexia.org>
Date: Tue, 28 Jul 2009 17:55:35 +0100
Subject: [PATCH] Lib.pm: Add file_architecture command.

This command detects the architecture of some types of binaries,
libraries, kernel modules and initrd images.
---
 .gitignore                  |    6 ++-
 images/Makefile.am          |   44 +++++++++++-
 images/README-binfiles      |   13 ++++
 images/bin-i586-dynamic     |  Bin 0 -> 4616 bytes
 images/bin-sparc-dynamic    |  Bin 0 -> 5060 bytes
 images/bin-win32.exe        |  Bin 0 -> 21617 bytes
 images/bin-win64.exe        |  Bin 0 -> 44557 bytes
 images/bin-x86_64-dynamic   |  Bin 0 -> 6484 bytes
 images/lib-i586.so          |  Bin 0 -> 3834 bytes
 images/lib-sparc.so         |  Bin 0 -> 4536 bytes
 images/lib-win32.dll        |  Bin 0 -> 16402 bytes
 images/lib-win64.dll        |  Bin 0 -> 34777 bytes
 images/lib-x86_64.so        |  Bin 0 -> 5467 bytes
 perl/lib/Sys/Guestfs/Lib.pm |  161 ++++++++++++++++++++++++++++++++++++++++++-
 perl/t/500-lib-load.t       |   26 +++++++
 perl/t/510-lib-file-arch.t  |   62 +++++++++++++++++
 16 files changed, 306 insertions(+), 6 deletions(-)
 create mode 100644 images/README-binfiles
 create mode 100755 images/bin-i586-dynamic
 create mode 100755 images/bin-sparc-dynamic
 create mode 100755 images/bin-win32.exe
 create mode 100755 images/bin-win64.exe
 create mode 100755 images/bin-x86_64-dynamic
 create mode 100755 images/lib-i586.so
 create mode 100755 images/lib-sparc.so
 create mode 100755 images/lib-win32.dll
 create mode 100755 images/lib-win64.dll
 create mode 100755 images/lib-x86_64.so
 create mode 100644 perl/t/500-lib-load.t
 create mode 100644 perl/t/510-lib-file-arch.t

diff --git a/.gitignore b/.gitignore
index d66ed99..f2064a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -81,6 +81,8 @@ images/100kallzeroes
 images/100krandom
 images/10klines
 images/initrd
+images/initrd-x86_64.img
+images/initrd-x86_64.img.gz
 images/test.sqsh
 initramfs
 initramfs.timestamp
@@ -123,6 +125,7 @@ missing
 *.o
 ocaml/bindtests
 ocaml/bindtests.ml
+ocaml/dllmlguestfs.so
 ocaml/examples/lvs
 ocaml/guestfs_c_actions.c
 ocaml/guestfs.ml
@@ -156,9 +159,9 @@ python/guestfs.pyc
 ruby/bindtests.rb
 ruby/ext/guestfs/extconf.h
 ruby/ext/guestfs/_guestfs.c
+ruby/ext/guestfs/_guestfs.so
 ruby/ext/guestfs/mkmf.log
 ruby/Rakefile
-*.so
 src/guestfs-actions.c
 src/guestfs-actions.h
 src/guestfs-bindtests.c
@@ -166,6 +169,7 @@ src/guestfs_protocol.c
 src/guestfs_protocol.h
 src/guestfs_protocol.x
 src/guestfs-structs.h
+src/.libs/libguestfs.so
 src/.pod2text.data
 src/stamp-generator
 stamp-h1
diff --git a/images/Makefile.am b/images/Makefile.am
index 56a22fd..0ff91f6 100644
--- a/images/Makefile.am
+++ b/images/Makefile.am
@@ -22,7 +22,18 @@ EXTRA_DIST = \
 	helloworld.tar \
 	helloworld.tar.gz \
 	mbr-ext2-empty.img.gz \
-	empty known-1 known-2 known-3
+	empty known-1 known-2 known-3 \
+	bin-i586-dynamic \
+	bin-sparc-dynamic \
+	bin-win32.exe \
+	bin-win64.exe \
+	bin-x86_64-dynamic \
+	lib-i586.so \
+	lib-sparc.so \
+	lib-win32.dll \
+	lib-win64.dll \
+	lib-x86_64.so
+
 
 noinst_DATA = test.sqsh
 
@@ -37,7 +48,17 @@ squash_files_src = \
 	$(srcdir)/empty \
 	$(srcdir)/known-1 \
 	$(srcdir)/known-2 \
-	$(srcdir)/known-3
+	$(srcdir)/known-3 \
+	$(srcdir)/bin-i586-dynamic \
+	$(srcdir)/bin-sparc-dynamic \
+	$(srcdir)/bin-win32.exe \
+	$(srcdir)/bin-win64.exe \
+	$(srcdir)/bin-x86_64-dynamic \
+	$(srcdir)/lib-i586.so \
+	$(srcdir)/lib-sparc.so \
+	$(srcdir)/lib-win32.dll \
+	$(srcdir)/lib-win64.dll \
+	$(srcdir)/lib-x86_64.so
 
 squash_files_build = \
 	$(builddir)/100kallzeroes \
@@ -45,7 +66,9 @@ squash_files_build = \
 	$(builddir)/100kallspaces \
 	$(builddir)/100krandom \
 	$(builddir)/10klines \
-	$(builddir)/initrd
+	$(builddir)/initrd \
+	$(builddir)/initrd-x86_64.img \
+	$(builddir)/initrd-x86_64.img.gz
 
 squash_files = $(squash_files_src) $(squash_files_build)
 
@@ -86,3 +109,18 @@ $(builddir)/initrd: empty known-1 known-2 known-3
 	rm -f $@ $@-t
 	for f in $^; do echo $$f; done | cpio -o -H newc | gzip --best > $@-t
 	mv $@-t $@
+
+# Create a dummy initrd with a single file called 'bin/nash' which
+# is used to test the file-arch command.
+$(builddir)/initrd-x86_64.img: bin-x86_64-dynamic
+	rm -rf bin $@ $@-t
+	mkdir bin
+	cp $< bin/nash
+	echo bin/nash | cpio -o -H newc > $@-t
+	mv $@-t $@
+	rm -rf bin $@-t
+
+$(builddir)/initrd-x86_64.img.gz: initrd-x86_64.img
+	rm -f $@ $@-t
+	gzip --best -c $< > $@-t
+	mv $@-t $@
diff --git a/images/README-binfiles b/images/README-binfiles
new file mode 100644
index 0000000..f99fc84
--- /dev/null
+++ b/images/README-binfiles
@@ -0,0 +1,13 @@
+The bin-* and lib-* files are used for testing the
+Sys::Guestfs::Lib::file_architecture API.
+
+The bin-* files are generated from empty source files (ie.
+"main(){}") on the respective architectures.
+
+The lib-* files are generated from a (really) empty source file called
+lib.c which is linked into a library using gcc -shared on the
+respective architectures.
+
+If you are concerned that these binary files "lack source" then you
+can just remove them, but you may need to patch out tests in the perl/
+directory.
diff --git a/images/bin-i586-dynamic b/images/bin-i586-dynamic
new file mode 100755
index 0000000000000000000000000000000000000000..4f770633b47386ce8ab5a99eb6e35d1ae57b9de1
GIT binary patch
literal 4616
zcmcIoU2I%O6`oyh8VAzWcGF<Mz?JG0r_{G=Ym;ms2s`#VcDv1wy(x~O<m!6&+IwMt
z%<kRPeyHNG&4Xo(0tK}^pc3dqP=(+Dp&}}j$W_uxMT+{`2g*;SjR at 5uTI7eQm+zao
z<6f^DA%r;6*_m(7H)qb=duHy;o=>I6B9VyD5*2NNXzAOr_5{jDw<}9R7-GBV6FuV7
z;vO{7mRJG@`VQ*UZO|CB4Y~_Xc3p_IQy&1P(njA at Dd;PpqcBj}UvwzDZ2JLh&~>(>
z6UU`Jieei4Y1pW*15;_|7}P%S`!F`u0H$i&iFdsm;1<#SA1k;sj}>zL1-DdNFso&A
zQ1!*oGWH`!Ps+ZGgMD^DS?9btH#rYO4k_Dy at x))QqIr{$r^P^JZvb9|p$qlTK$FkL
z+8J}FxK9Ynnk$w|R at JjBo@EJym}O}Dg*9;utvR=3)v8VoJemSt(RNGXNP6P%h&5=&
z)eun`V+6mP50%p4y7zJxUr|sPKa92CgIMAyx1&t3#3WBHzgxfE-f%%{H2L!~jBl(7
ze_tOM{+>tiOBeng_RO<->m47mhaU2 at -MR@#17+avXP5s}|7-JjW->ot2V)68C!We@
zP&96U`2M9!7;~zAJJulo^o2DK&u8ViJFs1R%iGrYJ}T3v-&ngOCEzZ7b%=q~zV^y-
zBuIZ6KiAfytJD7FLufy^cJ2$SzkZnh>Q^H_W0Sw at B1wVy>BjYKbP%b(7CU`rZPj~N
ztiJk1^40t=XTZI9)$4kNZK&+H5$k1}e-nYMrh8+UlK-tcV4pa3X4SqEL?`Fc>hJ4M
zO*PKK&4slebt0hKJ&or-^!?Skfr%}rnyRul)x7phGrDrJiAjHHz+b+;`WueDlIp16
zh%Arxwy&giqKK`e+LvR!{_gtq*uiI-wLjKh>p6YaI<vOY)5{?Ee16A8g$H_Bmg~N^
zv;Mc3e{-d+zV6rFS5pq2qkiVdLDBdL!a9W~t at 4~1uLN<*_o+*^A}eHW?L-;JUV`Kj
z-N@$;KJ?4uSd&~MS5R{O<WYVCWeWO9D0A{bD1~G7;!SWgw(o)>7V#;l0l%zwqvV=l
za&ezwiBQYy at QawrjHQY4Jz!M-YvCTFJDtT?C8)$lMn=AD^kF;LYb4A8bI=%!#}5n)
z3?_`eNhfEF+n#FgPYhyx|L^Q%{6KuG at 5Ehv|3BGxpQTw{EPD2gFsoigm3durOP*7i
z7iOvKIp*-;iGI(X6Xsm0X6Ef`UYNPX5<08Wt0>Dkr&4vxrA@$st>P5OSC#pKCrr2G
z;@5K)@H-0tQ#ogQwlJN%HCwTZjxe)cxl+Xds`y40j^M;Dx>*cRMo0XZ(wpizQw2L)
zE*71Vr!(L`m!AcNImeup-#`H7r54&K4?+2PC6C`JezOeJwQ%pJ3_$;d{3VZTXFT9(
zJ4-6}Zmu8lxTf;p4WZ7phN|Rn4UIs#uE at Ir-W3?R_Oy^oc>>DyLmt=8doVEZ^|)-O
zPD8ogSm&Bs2hTt~JT9P^gYJNm$2HrHO4uL$63;_5k89ijk8#t^`DxxF>Wr0p2=|yc
zc-$AX=s5Z6G;bWdaq!}rgpxe!d8p>`{Idk!3v394F;Ff-HII8*H#+x7i~7;yt^_=|
z5ee`TFmONAqIu7uf&R!F0&fTgZ6jCLe~dbLe0SWsc}7wj5gH(x_Y&%w$B$b2F1(jR
zJbt_~;AtOWf4>6YGv>JR%mvcxsPp|&*oSfa7OKbP`N068)gSTiLp<*7z2I?Q*Fp~U
z22}e?f|vXlf9&%ID92}f{FWaA at 8h1!Td>og7V>yb)uOBXrqGv`<Cy&08lcoXmV9Sg
zzJuh9BXF*N<`?I{oMA49{k?j>5b01y?GLmq!u^Ad>Qt`w35Asd?gt915xDLZ=ICmD
zD~!oP^f$0gzEQPam7P10T9*o|C&=}uFlV9GnZo>HV?Wxkb7cy7Z(!LLWIES}!aM<}
zb)YcLv=HXI!gweU=C#6VwK0Dc=35bhd8#nK_$nV2Ry!>7PGOZ%%rAx2iGq2g at NO0|
zUlb1S9E`tPzUP;M`9(1w6 at l!Acl!^YYhK68)AS?2I^GD_Nnjms1gH8GF!PgdCW4)6
z3Z*<{26zVL&CqxYz;T>|Q6SH at j{hv$$Ajm=@xKSGpJzneFJ1%=kI(hq4EehTtcCM=
z6F|>LL_5TvTkt=D_4ABG9~3)~xMBY1T5!At54Ye9us&Nwq7R5O!210dVz=P;i+2KM
zZWrdi0L*<EP~!8zS`1Xa+k$@z%zc;7n|G+61M7V368DN<27G<zdJ{Mq;=fHC<Vy$Q
zX#gJz^0hO1pZEZn*9*qb8SNBNEJ<EpTwuoA1<dzNdk3EH=YdB<_ at Ng2Bfz(U_tO>K
zDTaZ04`L?M-xx5zbM)6Gu>P`kp%A(jifqNJdbQbEGmC5BNaon2m7bW&;I?R4qnps<
zBO4~3g)BF>VD39`FfMS`nJ+k=lLJg9(JxoF<_hH*yI{#flV#Tyggi`HxmvNfsK-ei
z9hJk3O%6YqvNYl_y8e+Pc?gq^X53Q0yDzz4#yekec!aa;O2uAO_g8r5NiJw|O1Rw~
zNgq2roVJdQjZLL8R%ZBcI>qU2?kt(%uJYClT4(^p2{i<q(Njl<pPU#GJOFM)A+OZg
zYEAkS8_k<;<ksWotVw6it>Tb7Qn0I4rz))3c`N at k3XFr{TW;n<Lmyqux7^}4ji0NQ
zt-M{z6&!exuTnqOjmS6?7;$3N;mH{~@*s<u at 5f`Fb3AK4YkB!v>6_-vf{=d?$cG~S
E4Rlo`%K!iX

literal 0
HcmV?d00001

diff --git a/images/bin-sparc-dynamic b/images/bin-sparc-dynamic
new file mode 100755
index 0000000000000000000000000000000000000000..138839af7840cc549a02937310df21c799984b7c
GIT binary patch
literal 5060
zcmds5Z){W76+idcP7DMvAscCE$4g;rkifV!MXY1$Gf4=PG+}8vwHw;AV>^jA$42%G
z3)LzTK>MevLlc^+im6sbt9 at wEK24KW2`jAxAJ7(c{kUl<?X-UA2d1fAD at Ay}-+k{o
zPR1nqbyqs?oZmg?o_p at Of8KrX?7+|wWhrSCOWGkTQPvW8ugE$LA=wg at 9(h2zP|>1w
z3biCWe3A%+Fen5JT|gpRQAeV#VZ0(mY9b`G_d~%G*a}G0Av8M*eQTh%pnnf~pG0mz
zM`B#;0|a{&kVrr3NLrWm{(b`OPl^gi<bLQ#M*l6ycPrZezCwO{Um?4<kT1^6#w(@x
zer?LOF_0P at e%iD}oH{1vl===(i27}dKW}|Dl0W}^&&^vqUVJEj`RoIO(9xd6EJSQ8
z1*UQ6({B#%t9@|%O;)Tae#TH~`-<ISwR}X8ouYJMoMYhOEh3x5btk7wMYrOm%bx2B
zhLYhB4v2ef1hv_G(VeN}vaq8nu$xZji!wNL>~NpEKc3KD85euTO2L!kCdtNpo}6R&
z1~Fo(!ieLh{1?by3S`7+X?gzbrRddAZQHLuxK`aKk~~|lFJFx;MME$=7fXc~A~iKv
zO^G!pVRq(7a=p(b8StNw&tG4P&g+ru9`xfaM00s(we#Ij^_fed>Ph4vxeat5=wiEV
z|Ehf{_0m?`c{wJ^5$E6Z(_9!+H(W2YJ-Eym+8yb72pGF!{`HRcZ~S;m_st7-ZR<|p
z*A7;#g>Xi$gs;`-s!sc3j%+#?v(>8|8965 at wXn;P^F1lp)YL0AM<;F}><DewkJLY>
z4eb~9Jh(jnr==)kVgE)>Oi6 at w%|t!MG{0bVFX|jQvhHGg_hJZk$Q^tmZ;t4^nLdrb
zd-2b?q22!~MsMa2G3vfdjKQ2bnA6X$MsD?j>$&1V5yaSbAy$pv!W at 4XsaaQc&22e<
zsJdf*E+to%t6|HL4b_+}%+tk~bpA3X_g#uf7spZ!+iLEL=-j;;PKC|55JRZB|8C@`
z+R^>aLilma;n_NTMyrs0ACE6DU}v(veWbq3cE%6od&xh>^h4dwtUrHeh}s_F9_R#F
z_4=I;!4vg*o##M5NbeW*+^B?qv{`L$+k`4z*9qG<AV*n&!uESm_j_<pk{iFWw{P9%
z9n_$}U%i>@N`Hyae;dy67r-~-3~);IJD=c8B*r<bZiBag{}y~bXaKYU#CHB3<rG;h
zjD`D|ad02Eg0{hLLCeZYfiu=!AigZxN(dHu^rvG};J1MfK=;K8&vzCpQq%OsT629R
z64&bg;@m(!1o<{)k}iXNeUI5aIF5JQz46|7!rq at qd_B>-{}H=qG?%rHraixY at 58%A
z{_l<Bl{3>`dR*cauk7<FBjt-;u6#=3#gdncCl4Rn>!l|HG+CU9kI&@sI?QJ!PBfLS
zOi4U at rU-vN_sYKJbgo><mx`-^3tc%^NV7p8oho<|&lmG}dbwFVCjg);Wz$|-;<+hz
zqMV-2xl>uRHAvzauT-v}L!W&=10{T>r}G(fSb`hB`FI6JnbP!huIQPCa8G<YthjWr
zyK%4K{l>r3n8s#V?L-Cl2<?u-4kR|n6z+ePhe5_}3U(m9hp1yQcKz5tp90e#_O9N)
z+-p2SS!hQZ266w=4trYfYX`Um#Mo%Vz5Q(vwu8324HZc5eK1|jIKCI`U-;wR)%!OJ
z3)3&p1kw*+cSp<0a!>`*<8AI2Rq`B&G0<NM421J(#UFLV7eK}iXN*2)c=oX0F9$l>
zy$DhuoM9H)kmLl&6#8Jf1TuC at up^~VXNnyNFM|hm5eMCY^mzxSi}6<lq8-M;dzHRh
zF)yYVyWgO~*qwwONZ&En+WoG{ZWeYRIcki+jlUXX`oozVflO+=BOo^Hu0u9<H(&?4
ztKA=)>=t1MYWRTIkpB#sbIE?+gB_ at G*M_L=qTsmOnSNU?qY21=$APnO9HgIt7+<UZ
zZqe_TAz)L?c;81wFpieb;1AS at iMG_S`~$@P`L0 at q9Z0VuFkOtlkAX}Zh_qAsrR$qD
zbhu8zSEEGvZv3PHSA5VH*MCqp{uJTG0PY7RK<t;8 at 5Cm5TV6u5J*YFKDJD}DaDC3`
z#=ea{Pc-)XRr<`JbKk%JZYS`^?7!QI{XOfy^NBg17>WN*25t?oLk`S*QlBCN<`{?z
zWWdY`@dYwqo;$=#WWa6YymOENZzK=CLx}yn^ZN at 0cr!WlT>He#8`2c1kpXi~h;NVq
z`=2(JUbDpfwxphGlemK%>)|pPu=(bABfvaIsOOrZ9-jm#di`kJsd4at9-j-1^?~Hp
z{|Ve?;=|-HzAh6VFyre1UIb at D#`mbGkWGxqV}6bY{VC|#-*?2))4=;P at f7T<;Ku$u
zaIFddLX<zvfj>0!OAucb{lCK+C>Y<H$nRSLW`6&$Ccf+Nw?uv5 at 2{}8o3PFmap3=s
z$*;1QUwq>Q^92X!PknU_J_viAf7m1cY7}}sU%;3z^<C(7ALtbGp(YTIgYKe8Ci10D
z2kYx#fS-p>7h6B|d$Ac;5x>I<*kk>v*Wv%80E4Nwp&x_be;12-*YuC%u>Ze7{|xQ7
zSX{5_W5jziz;LNPM|>$@&yUAihxW_V$MpKZx2 at Hx_fdecK33_w(cXr6Fh1*R7~czQ
z4}TjZQ}!y}%)~@IgHQ3kv5`@C=-5+Z_+oe6{#EFSz9v<+<W3e!<LQE{uR(5lW>#?5
zIaSDcxorH=1CJaOD%^Z_7N|ENnRKDxy6)ZD`IoHh%=Gjb->kVJh-qNBUx##LH2LI!
zYY;;+@``7DKl3A6+v$pGJYVF92Zu%uCx_gTBS)SZ7<0#xhld6 at a$XAEbh(^9<K~L|
zN6}QF|7eJNVsxZ$p#SO70px4=cye%{(YpWH;pCIY`h?d&|Gx$t=${;!%8aY;n2qXH
z|47^?PP?PI$$SNu;J!k-Qpr^$uwVO=#Bo;slKj^Xl~o;QD<yX-UCb78W=2iM8X at T`
Wu<PQ&YU0v^&gpxs{w1TwFaH5_!3g~T

literal 0
HcmV?d00001

diff --git a/images/bin-win32.exe b/images/bin-win32.exe
new file mode 100755
index 0000000000000000000000000000000000000000..db6d5758da020fec5272d4ec737f4d7d946da3fd
GIT binary patch
literal 21617
zcmeHP4Rlo1oxk_Jm&t at oAbe?5kU at gb-7+K)0=A+9Nsu6rK!SpbkI7^bMkh0IW`baC
z4TdObq#L_-?Y8tRRCd>P*<E%^TUI^WD0D?vyKGO7+pX=^wz3V?y8T*fPg}FU|NVIH
z%}juT)b4J%C-2>RfA{}&|M&B~c{gir8Db`5%)&J~%GeRa6vE<u=36g{$Ip0TJUd+S
z;>;s_^@}rGx5hKU?sTd%9q9^2Bgtec8*GaO(>=*xJQ=KSY6*6w+GC-zvT>D4baMk^
ztNC~~slRI#Tfo={Ib*M|VqVIPCCmq+04{^Es)>lpaRqUab(989c7sL4h#32k%zSn?
z6ZH}dL`w`Jb|L~9YX%Dmc$Y&c8{3|R&Lc&*kzG_*s*ERWVa;1Y?U8H*m at qwv1nSJj
z;qrtqs~QfaC86+Z6$*)teCG+E3y0b=8G`ER7N%Qa=w;#IP+ZCrzJZT~yz#lTq<4Oe
z#DWxU!9{w7v51{eZp^Q~M&$O=y&D(NO`?o9fNtR;0W^{Ay|_r{6kIt0bTx|w@;u2I
z!bQHjN<f|)=xVD){x7JF_u(S?t8wK7&@Emlkb`tTgp26rQpOvqjQLAy1t6+8j3m+h
zfq*<W$h$_`S4rh3aFKoQ^^k}p=&GxhP_lw<uizs3DqK0CoY3D&*f3Z&+#F^DCpV9N
zXHWKOhWwG7{J_bUzSk?CwJMt at hS|tGbl1Mut&ypiGe)RRdm4WBY{SpUw1N7{^8G9r
zX3y4FT2>gbRml(m5A11p3z2{1AHlKT53ql at XVu6sa)VPXund%s9EHTbSAR6}0e~Z4
zpc3Nr?<Yw}So?)6t8(NX1G<imd=exB(<(<EBhu-IVe?}`5=aN@$_GHW2_- at qu@BZ&
z5!R54H4|11>{M!WbX3%T;AG$HewYp|Y;@{D$Q^m>?a|SpJ%>fF*`Uj*KdJJs=a$1?
zQwAISgQ&sMhZ!5b`~6GzAWGl(B=L}U5RrHMh-AIr;uCh6DD5Af(EnMW)x&+qrrf&u
z8H+7_1gzOjOaFwTE0+E-qMq-(_W7k~hhefe+pu&xVJ~{*lKhc7$)9iWY^HxWdkD%1
z+_R01o;ZS<j=uJ1sy@{(pSlBi4|geX&r{qjuxMA32&_sf7*hPFZUaX8RW%gcF?6a<
zNfULIYDc~eX9~5aX6Kd)T~9lu#kr-zKaZib|7F2FVb_1c(<1{AEv5Y%IX*YY_Sqi@
zQXk8{59VRgV<Y{LGVly~ZvR)s3YVQsH7-NZz?9076iU(RU?>3t at s6H&?&y%}51WsA
zRP0$@X`!2r-t{YJT1P|Sd6;v{rp<dIzal!IEqnLgGH_z&PiW~`|EayVe5(4yXDB^k
z*O%bI>fs5WCZ~Q5=_6oe6F&XsKk;mFUs)g=X1t^St2<QM`1v!8^)g*#QI<KBevvhF
zY5C6YqSVsa;G0i7l;Pf!!R)x5LVhoZ$N{|*KE0HpZS%<n<OW6Y!13M}xR4ZnjLgZF
z_r7Qjh$7WrZq4zAsPD_)^I-o_37>A*`3s5$PG&9{TxSjPzNh{Ce#XK~;^`l_4642S
z!7zpk8sO5=6N6JJw`aNam_V0Xm at G~`cXZDeU@!yyO&DP1gNyb}4YR(tN3-+#-^@<l
zGwt(~?-&}L-1nN*_Xh8I6D`?01x<hXFGolFj+Nhf`{twQ|J7f8%@}xQ&vHH(=qHZ;
z=X!oL at X~8f>hZn5JPi8>PQnyx^U;o>&CeDQLJjp=AKG_x_P*vYqxdNmKd$0qDn6j%
zLn?km#k*Dfkcx*y3{{&?-SBG+CTD)xeCk2uRiDF%8103f6evBU(gL^uH<HQ1Sn at 8g
z+zVjZMG^0U2NLnN&gdO>Ce)rtFniTDdwr}kp2^12b%{tO6U)2{CR|kUJM=)f*;RgU
z9b>zZ-{`?!1-8$Vcd2FS1(baQ*Be9wS{<%LI)v*wT&r>2j%zEfZd~`^dH~lDE*&m}
zoV~1Jdpz5mPDNvQ$XUm4h-KHL+IteQm62q7BDRdN1Ytz5ti3%=MC^M;ODww~xm8fK
zH*Al_y0h_Aaz#9WF~H_9+wP2IyCU&qB;A=|*CO9-+p*-fcsi9t?PR`#o@(h)(zY|P
ztR3m at wzE6Bf$U&*GzOcn!DMzk)doLsJCzjBE>6UfbD9ys^B~a;8JT!zGLjH}A)k7#
z8ynWIZCJf<ff%bOnu4<5<m$?7i>9-hOM6_#(-0XVDR!lJb_+AwkX;PFA09xLRPDdJ
z1TP_q8B;y+dL(sM{Vvis$CGO?4C>amwqzseY)?1yVSi2|!vh@#WMia6*>RQHCfv9{
zXdw;HqHjHf%eL!Uo7UT_8(Ug!n|($g^&aH+!~4JcTJA!d!1)LkzhUi$U|p~#v at o=Q
zam*Oip(vZ*))P;(x5v{mF at O1n#?|%nyW+{tyVKcu3q#e5Le=v`b|D&>CXY#BA<nRh
zdy+Jl#oF=iFUt(0II}gC&IWT)t4I`DMTu0hQxKY}*V$QSeS#k#%Pe{(F5>s$Zuljo
zLvC<ibZaEdd^ErIbg-a#{}$}li|y`gnwfo+HfA9kg$?E|A!3$QY_~-+F=qD5Vt=vS
zk%)9M^8r~NKt7&8`GYcF4tD4u@#by`O at WA>j!gU>W)4WCqS(%Mb$28qU10pM6g&;K
zKMkw>D;iffFmv!Zs)11?9U&`TENYVDloG2LwNkzll{2{Cp^$)I@)a`s>u+vaU(bq8
z-iMm|mv3rqU`21x+b_eiIufZ!mie1+YHF-!zMH7w$62NJiq%caS{v8iV7Dy0sli^h
zzF`^b_AM*^A&LWasbn^tO5B`Ew=>`J;(wLy3}6n(_GBblr%)@<8tIf!y at LFKhIBfW
zZtCd3QpbD^3JyrPC6<UqvnjOQ3RO at ZsK@J0O at 4zyrwG)gUa9bkfZnVwOUEM2*C<Rj
zW=#v!rK{F<Zzm&T%(qIBCs^5k!2DmMTH_x<qKTPf)ZBMtu>pz+c3soj)`pF(>;=QO
zy7(2Wj=~psYr6tnCBuAclvoz1PggPDT9vhst!BO^mGvXLfcctLHh}Cx=3A$-sBgNK
z`PQo}Dw<x*d at U+l5m-SD))Lu<TC^6E;Z(VnSmzDUzd=x$vmWAvtN?P8LWTs=0OV$c
zJR*>KAR86(aUN)Bk2BvUmEVhe2Kif5ejoB}+nMiHl|MlA$ls>&k0T#NezVFSL_UK2
z?J9qW__0RVDt{RHIPzOm{)n)s4i-fe@)RhPYugkw3 at 8JpsLCG`Of6t)SIBWtY|qA$
z?Xh;<7f>1#?Pbn-fy*ZUF<P&jntYTqQ at 5+HqqqWZxy)t<SXnZuh-MoiFSQ#s)-^P@
zHa4xb*EiJBkZSfdmV5;S(5QBab+qmCtt!!@!YNSoxKWi at 6EW_YZ?#}IW?@ul33?yu
zTT}8=F|-1KwLM*Jv2=3;KcU312Ss((Dlz3QUt_W(mF|krRuz4%<ZCd?m^B5qS0GhJ
z_PmOO=;q^5#e%x{nuRUiS~fQ|qQkFmVSeAbl6w3cA&p*NLXt3r>h8Zj78R30O9>YR
z7BgM(ju2mK$=fKltQaIs;&<UbndV70#WJpX2)W{9>~697HD<~A6SI|_kz0#6YR8O9
zVw!5J#l?;%<5}C;i5v6T_fdRFdrw!_4rfDdED)d&0|t^(L&{(WO~{w#3X|J*zKpX9
zu68}Vf{SH_R<Zyt3X8G(xeOCK<CpSlkTxD>>~d~dgjYD*c^>5aqo6Ja*EC%8uKzBF
zbA~7*&MRzbgzecj at h5l?EP;t(wh?T!-I|tMj~SCcNxs>IYx+J^BMhQ6F8-C5Kyszd
z&iE3_jEB2td`-l7b_o8EDviKjVl#Q+)(t<e at p5RJi|bL4UB&Y at a{Sl43S}#C9Yy&p
zyEEBi$8 at i?<>OMC at vZy;6gPv6*8TrN`fsrDt8^*FuSmR;&@0da(^83cmpg95%=Z%<
ziHfew?;vqQgy8WEk5V1oJ&fN;P7pstSr&E7*>a0%loQU2O!{R&VB456kvae{`q`kY
z1A at K}%~!KI;_1u$#5a-Sd=5F^?o8l;%$OmB08+i7M(2q{VM`@8S9FbQv16J{{eZp4
zj(6c{P<Ne6cngX+dd7PZ&lN2mC*qHSRuk(jHJ{FRD(X#$*- at I@SqS&MeOM?oU;c?V
zHBriRMx*m(Zo!#%XbTt21MNJqqa!Yr5?i|Y@!BP|^SYyY^QI)SD!d4!YX*F0=-t_G
zw3SmEF;j2E`27*cu*61;_fZ<Nh$S{+eAmZNXJeLS$&DEAm&JZdZp8QlvOIu1ZN&J4
zGG7jMwGrdHB{T&h<VK7SNTkAYH)8z5Qt&iZWIY3wKCuzwgU^%tf~}-y7kc(xTJbyC
zr8%21!*51YUEPV;_MqII8Gfrh)zgMb8|6-sMgo at D@ab%YL*Rvd9X-jY at VfDbx1vK8
zSrOd*yrdINkVJAERyTSX!9Nj2j`NZm5z#|g;O{|!H8c0&%>1nXUZN{9>4iB8z0Yap
zU+KbwD7+Z{uX%t^<g@*gOHKb3{)v1NFURa at RI<|2>i}VMbO|&4?<;+OQR8Hc<O#qj
zQ8bm!2~ff}nVbI7QV^7KWQ)rrHHemsLyuF;f~Q0ZMdu?a*k3uUMZ_9VtWZR(Wt=xo
zCVc!%);M`S=qCvJBC>_>a)D!mF%gX8rG>;eX)2!+AcDz7V8m`?GI#Bp8iKiGY*3hc
zNsVJJwgw at UnG*;?T}6mrACOh2s*-EMK9YM`k>e2q`YtC|U}@8m=LB5RX|8+&Zk;}z
zR|`QKOE(GqSC+#0lQ80D)UfKwBrP}{i48s?U~FcHxh6=dSg0MaRI9 at 3>}vO#TB%Hh
z|4ILB*PQDEr0wdN=&W<R=(VWIT=JlF{(Dpz8s+)`m9ew*7N<=`{jA*XP^7z$&)YAG
zb-(aSPnPJGA4k at e=35ug{h`cj8`b7wI4=*-rp#bF!OQtC$Cu&GfnX6}e11<RU9d~Y
z?8wYZr&3w at 3TS>j8BO%iyKnWn2&}YE$F>9^lWmWuLR(1~lGw4x^xbhhu5~!+WL73I
zuNbuLHXk+k%vjZoF1ne2dS8cGl0CJ_GR&WTXrsB~+7DRVn0uLd#gO?+cKo*bEyk>h
zTg;a~biditVU}(j at rTXNasLxrpEr}oar^#<j_)w9@~<+>H~N=8+HaPG%qQ-<- at Md#
z5BD#%*O<5ahqfcpZ-)F?(*|9a|G4>H|8f7)=Zpz(MjxtSun*$?j@&c$CN9TAoo$JE
z^fDv^Z(y}`_jkzr7DG8?({I3>@q7IN%i4{`nxgfgHE7f?8}IKoR+bfMoE~w!xcGJn
zbo31Kx~5-VR#e|-I<n|#gXn}TlxbP?l;Op-EPAB43$|!_l65g$cn>&lBGhC3h1YOV
z;{SFJV3=Xb$yyZCvnbMjifN1+tOxr*8ECGcmqJ8K at ntgYr&#`u=+Xv(&6MR9#j|AE
zPjLW>ymF5K`!X)hT5uPk93&G38B`&jEYp69=ZdtestWmPS#D9hP^SG9uM}yQwi)?#
zvfQG$MW+1})6bq>vxqh(${!YSemPB*AIHU6^DBscB9m7_$^u+KuSL`-lN%7lWio^4
zL799Q(Vxqtt~d$&q?Gh?M8A;9#ULVS5V{r-NkfvJ<wzQm^z=s3kUWU!i!%8XBC;B&
zmVXxn?iE5?=rwn-C~YCxQfLcFkvvXgXx at wQ|343;QKj9uX#CN*ycmAJJP;D^*W_IN
z_9$bW`iEbS8}u7af;bB at V~l=cs~4NJMhF_ge-G|Kg~<KeN06h*-KE(Ngr;y8`8yyq
z`4VC>eNqA-5WJJ%G(F9xtP}Jp2?9_E8mGuf=#viw;0GSiI18IYLy3P at Ia&ctPH$uj
z!@nztB$%AOYp5(BI;jwPHZ?iDPAxR*$BG7z`=B|9JFU67;cb;ILu_*KU3xA7awSSM
zy_Gh32kwQsE>jR*1%M`qdtudRX{A7iE=;cX;sSDRwTgx;H956+ZqPld3b5)?J38q{
zoOyUgY{S=uN%?fR407ZS19F6jCLkwZl;{acORj9WAO}G%dyDQHl8fxw00#1c8_uO~
zP<zV0;qvR0K4C+7ve)D at b&(T??ugQa>ZzCZ27L!3z0sx};BbjwwUDbSsFy at Y7e4aO
zYtsu>FLe^BS!gF+j$uxsP#1YAH|X(oMjxJoF4AzevFz#^!=CffHHI8 at Vv71Im5${f
z@&uh+lRg}KhSYu4_4D_ at MI+x0+Rs$4v(??Tr_g4S_)*vsM$zd;6MkD0zp*(q&P*#2
zs%h>>BB|$MA<YeE@)+$yo6lgO<1s-)_RLih$r2eZq&;7RJ-uhJ$L_}GPS-49PU{F0
z=={ea&4usU<Y+E0(sL9MeG4>>Hyl4pT~x2X22Jie%))v>Mg9z+dZr_Jtl3zNf+}Ip
z*u7Wla%N*#n;-P(4x)f8F?r$Yq361(;Foiq`xZ;f(`|a8?5T9@(He4NTFq$<m#eur
zeV9vt9IfWGhEuzmoW4+`H8MBQYEEmoT+JWMEmS#Lg=y`Tt8gt+xsEKTyEB>`&ok|3
zr(R5+#H?KWO$b9H(vC=+&8%EBj9d;<vppZFeZb|)?+NFm{cElqrJbJIbG3KpBemTw
z*E`aF!j+ at 6AI{fRlgLMEx4K;KNc&T+9Ho6<zOI^$`AF at RE|=221nvSzEhrDydiM!x
zEEl%>*IhYE`&0S4YO?uA?L97+(jGo9?Z;d>O8evax at xxMBemDLTuS@O^V0r`D at SQR
zmanVk-h8BX$mLSno6k%8uq#JtKaj7h=C*vKHso?C?HkWaJ3d~^9bbzM<?E{1nvc}p
z?r?1tU!vkPheOkm-P)79ld*jcqGzNn+Cp&Whl0L37EONd9g9Z#Z~?vfhdRu(l%k!q
z8}!UZ^R%R~+(MO7G&QYfqEViI7wc8idnS8S|2ckkn#Hf`7Ua2mL$EqK2d7@=G?P58
zB|9s~BibH~)U3`&YH7+6ZQ*F&s(Z^hX{X(ulB2w_J6~5#I3KBf!9`S?cAuB_eFfSd
zawSW9YU=Zm+Hbgs(!Tw?v>zzYKIBSP+E?ZywQo3x9?M||(PP=;LuFyFwh%h=!-XEp
zBww`Y8OHK1hvxKS`Pwtly!-X4X+D!Zs`q~U>@<rH>UQV!_9i#z-7>8g1 at B4lMYDWM
z!q^W`9ssL&9uy+zhXL8jLCm7LQgto>@*&X^K;w*Dw{OVbZZtK;7p!mOzXRcg?N0h;
z!NLPhUnQEts#JmI&>3j-`bF|6oZHUoI24NBt7pGO2O%Q|scFwgYF9g4wmRG=*LOVi
zlL>4oqDsWHvPtANL{A|{k|mOmk;uv92M`@pHI>MR6%GAY9+`X+k=}Jng#P<USa50W
zF9F$-gZ#H770)y>X~8tT%1DGhgr^5oS68)In1deVMj+HmE={MPkxxrf&W-|PumJfa
zkOMj1_*)={bC4&2$a!AZ>tB={vOwzk7LZ&&3-fYnQ33Mi9B*6=M9;la&UHZKtgdy@
zI|&N(6ewxh3Xn9AV<?Ak(AYMPPvaaL1=l~lipxbl24omCl8dP6-<Qxn$VKRXpP*Ge
za=uJRPQ6|RQVEcpA}#y{kjIhJ_J~7x$jdg9G^Hq%YqzfH<v<`<$dEL1fK=g<?^lVx
z7P)-_(Yor9qu|!76-Yf07 at _Rh0>qz#BovqH)q8Ugd`O+{#A{NL;mY|4Xk6{K`XXDG
zOPfDMa*%ZGp*e$SBti#v+g0nh+P at 4My$3)Gs$;kEIVGrS at omuLj>;dBF8IvV<s*>@
zuH*`Vcw2Bb5Na!zYoX#|47&IPloif?D?zglC8Sc;bhF~3NFsM2srLX9xeo}f7urXR
z{Sgqo(~~rZfsj7eo)>^naFK5*gg7ME2#_T(#_bzFQ8ccF#d!H~2pldlRlP)XC07?9
zjX?C=D|OjGDj~=1;X8>&&ApQ5Q6-0rFxX!r7iy2S^>m^mMUtKP-vuh$-P1<TLQY;B
z4AG=*ZRyxHO__)%V>;bI2XJ&IgTsW1Baw>gq*6og{OCZW_eh6bc<4gB81$U_z|r!t
z4poF}wD?GlZC<NSYp2J!{95NZCD%n%KU8B?opU4?Ih+`<)9T+r*wP&eZI2b=(e56*
zBZgyvc&jW9>p-A-#f(&UEWU6_t&RT#myLJDAQqNJ=<FXPwx`5dj7Y+6rw`zAA at NNd
z4$tGO!gwSRzbDpC<z#5X+IkG?JPU1cpwP}YP)KGW`GH;SqDA;GV<Dj|Br_1Xe#6?<
z#x)Igb4$a9`X(IuTHREq&nMgRq=$20A2#EhqCBodHspR2AG$jhxibVK3;vr1z_Gn5
z4wC4zAt1uB5_$H-ZaMwGCqPdDX*QAZ7=kyh^0>bpfzPN1<9`ysYj&!GsG at h;IBw8|
zlT>7NZUOxoklq#(C0&s_QfWKW(}wRov#~CF8xEr3teLDUe#f)7Cp=1RfyBo^<ixAp
z=l$Oa8l!^<cK&~A5H-U)1+T=@w~y)wPIb1%BHi9<j-fX9-#~<y2opU27=jRN at 2H~P
zULzEeQ!TY}h)DoWOJ#Dr<vk)~+c2%&_OubS#JeJ$F>wq=wh4~JlBdzvJCj|pq-?3v
zSDxBY_8w2C@%$eQ;Y!h4wb42M(IWS#2kK0xuAF~hVcXOQn$bNGrF|21%A~KNUSD|+
z_ at g`H98X at QWG5TTUt{(M at 39lN?~2Cuc3o*n)@w;4xp+C9_y(WTr^$1LL)3Mr_aA?#
zai%>X9G>rF+dBhlF=rdT(g(5+cn28{{$dUjr=c>UUpOb$L=%aVlWupqGnP)q5(^jD
s5v^A}n&?jH*4nECs}?$Jp>oxq^18z5`=B0x=-93$&h(=jL^|((0C$N3NB{r;

literal 0
HcmV?d00001

diff --git a/images/bin-win64.exe b/images/bin-win64.exe
new file mode 100755
index 0000000000000000000000000000000000000000..98bddc028a5f0f95d155a970813d489265a624a3
GIT binary patch
literal 44557
zcmeHw4}4rjwg23^yUA|a{3&gqNDB)M5Rj%xo0b+^*fg7VQ_^NhQYfXc+3aqb&`q*#
zHf>sYSV*hHB^Z#uico#1yeDe)Arvf{QnbZCSn(hJKwnkB)S^~J<cCOp-!pS&?{032
zkI3`){%}9d&YUx6&N*}D%%3|mox6Jduy6<=ocJ3X6JifSdVKQt&40Edx#+Y<i^PMT
z at 0`BJX!y?QEghY`-bAuzV=~<3jfA_qds5!Em^azi?d|OL`Wu_QT|LoQMPXq<8M6-7
z2@(B3i7<C|tr8tVybH=46K9Jlrny+m08t74+(PWqajhBQO{F)nauGm}&k!O{h>t#C
z$Z`qcm1xOF#wa5m4#q`=Xcgj4<e%(w*eAryNo1}_#rjjoxBCSAkZx4oae8<~u(cu@
zPKA+_z at MnZ9~Jvu1Xzzx1V<{8iqH#l2p|54ZWjKs9-nCSRkZc?66#Pseu7zvS<&sH
zb)=$G at sqY`MI!1%oSH?1s83XmRMa-L5EfOblq9)l5nw$&;Tx$)#id+gBevs@=*sbz
z^$@>#)e1pH6~p)=x^oH0eoD-FRZAq|U+H%j{)p~8{N+5LTd+`K{&YHm-S|5Le-#py
z^#i)<^CkQwHIBphqXuHL59k(EAwh at _ki28~BRXjTgqa6)=P!_utPg=oA^LS00*?61
zd5agx_yv?+0y^Tio|7{H_$^WTJwiT0Ov#W}We7L|x~j^>1RMs5sAReAoSX?tNZLEk
z|3V7{23}g6cAe!D!k;djhoE7|B at hILN`HS51%<yrFz9++0<J$%Fz7Gyj-E1&&_5-3
z;EBcii%;7jtp|SP?bj{)=iiNutzLh?^;e{m=N)kUITItk3ilTXqF8Ec)kwP3s3DFY
zM(WO|Q<ptLE;;&G3HTq_H-=}l23=IT^eFNK23-%XkilaVq+P$h1X)W)i_r+uu5(TU
zhmpQQ=-%zZs8;#_QmaOwX8Hc%M at ZgiJJ=rmOz~+x5r~v7gsy=h*B^dMfz!NhF^x&Z
zJ3Aq>_~GEpz))aj`*p8PF;WXCFpGCKB4uC?mA9z)1Iq!VZ+I2J&L at j+8!3Kh<VY3e
zWP1#3-2kH5z*LP4JaPzR0#rweB#B>$nzdCUj}!u1)3WxmOPd4Ny>usl^xT(WhQLru
znRn-J0)s#PW8kyJJHG^r!~$vOnU$ajq}REtMveuFzc~9zs2kWhl3Ey8vcGu8jVNFs
zy(}0+nO`~Tk+^=~9vMYXHumGd;4zu$R+Xvm-_x$U5UqN4;8mk|M+Agv*9}1I94X!r
zgunx?A1zarly)V6mt<=}w)5G(0#e|Eu6kmXp8fc2Qsddw4A}i4#79p at eSyu+BT#oV
zg{ldl62=b30)x&off7|u!pR;WtxC^rMCwpsBLt3>4gp9n`{RYkJyyJ9iY$-o7?8-2
zE-8M<T<U#)*NzdGamSM>=Z=xSt9Oi~rUV8aH)PtizkkJFw!wI$03!NY;m#-j2F}w0
zIfJefP?q$<^YFX#mEs+ at P-$nswp13zHF|jw75;Ys1J^x4wQ$8%p(|@P)LglL at LL0a
zG?t!G?Ee-?IkGjYev2P&C~G}>SG%t7x~h>!$#bio9Q*!}JP at W`OHj>UfhcLaogaT=
zZ0r$us2Ke{sy*#G1*v4zou5Sl4D!AW(iBkyqrU^i0oR{u)o5{K5ESXTO;E7v*{WBD
zRvUrHlYxCdcZ at y^y86K<sz%@}>19hmaIL at iwCxarikW)az&DK18$se9>M&MEe$y~`
zWOS#@;hYsn&p2)M;AmiQUtnOrdvr6<OaAo!Zw4Y?59~Ya2&7A2eh*k5a5 at z)SIrvq
z5QAs_2-tMtLHq^=OB&Lyrzn;#{ThPNU!$mluKN)^ax)ca at OxvW+g1be{dH_?7$tn<
z3R%LBA~@ihiNcX>Mja4+<W7*J3**G*FH_M{PDAJNQuzVbFHj_UMz2JzQbRuS#Ou_?
ze4PF`(j}K=I{iLQZw3QzAZ?_ at vYUk%*|K2S5Q5|?Ss_(VKSIOi=pB$1ke+=EAlg##
z&ifFNeTMgn{mX7emeks1w^QI<_7MbqzhwI!eQ24B&?}e0<wx3w`@RXLWUbNV%ry00
zYMlQjk?q4{hxWiJ#*Ti9^H)84WHaE5{~-4i%I(y-SCKk9-U}L;!1<4~0YT-L1z;q>
zN9vLADA_`3u@~G14vrm}pFvCZpJMbW8MHLSO+Zt_mO37J1JyTr)Pt__cNzU)PB$vR
zedM2!I6OQ|^)tGKt-fEv=$D8B03LK{pcr_~OqEi-?IF#sxN5(}Z)o;UE{DyB7CueE
zl0T-N38WolF>~w?`6N(%zsbqkj;BJmH^m<V#t8$jIZ}nt#}X1qFC4<GFtGEL)TpLU
zpE_{V=${dY><^^<-zXtLza2XS+}4)@>8sq-f$a?p{ys4Hv(Z76>gab#T9&-#z#uvS
za;Z|9aRwlHR at xkR_0-hjK;+=Sh%sme1~+`OMEec~mXkquz*UT2de8velyT7YdrZu#
zMvfkQgj{#@kFaxK at NsE*;yQw1?Yp2jK)nf4mb(LkrC(K9Zj+{!KU5zL>DiC00u78_
zGxkd>jbfA at 7(7U67^8jEUhMFY>rZE^{QJ3lm4S3&7(>wLUN{Jv2AZ+ItUR?@wU-Z)
zuIWM_5qyjY(uHL-UJ=dchX{d at tGr<d^Mt_QPt<(j3Yn*&tUNHdf0SH4kZz!4*K6qL
zM`J)p-a!0>5Y^Hg&p_|WEB1rQSm~)$#KHZ92 at F1S1-THqPL!v7bS1Gv`#qT)4}*Nx
zL*>o(M}ph0Te5n6DxcATNX^oKvG2MiH0<~Nx at x5Tx~(%Y%->4P-22DXzqFsq;V*vp
zlDy)FYi87;y5<%?JQ5i48#Ak(Jn9S#jFkJ+zNvMC`|6i`Z;Qw8 at VOh7Jf18V*k|~c
zd at uR$EL!z%&}Uiii!@(?v&0ceVPKWADLqnp8&Cn`@#`*-3O?U{-8QJ#_Z-AG<<$>9
zS%1#H;)j<@B at QYj%$ZeBA1%=K87WT(rq&D|T)kvp((MSi>z6#4oPuG at zvSuU&xeoR
zN=@LyX<r#h{PUrGqo<9xU;pZzBk<|6*1%w at tfK){FnCQ_A~5(ACMJC|0%=M~BPEa~
z^uQDS`{l%?W)IC%#!6pYiCTh;Xxd-qA9&T7@(#S}OP$g%)KIpeW{;1YJKa*YSh~Yl
z>26Th4?YtZd=0H|^hLbg=xn!Bwwq-(KX4neb8SPeBT0C{s54)P?DmQY)eR8gPrDw+
zixm|kK*b1B8P){`<7KUNJ4YG at qg1eXS)u`H{SAYA%eEs^Y5^54K!poZ;noGxpl?VM
zF=B}ZB=k3=6*1-vBnV|MJ&5T|U}*L}1P5FzA(lG5z~G_4Iq>IK^RN9E{7$)cb9(N*
zpxF7FzA5QtcTsFCb;)pG$^SuL_yK^MuMZ5(z4Cc#OxKhx&GcUvJ8SmP_(B#kj-(BT
zgL+A{yrrW-8g7^TY|FDp{4j;8|MbG;#QGIf)X?nrAex at C^U1!u(zQ-Zk#9-&x(D9C
z+~X)Q9N0g#VQAqL&;*uzzjy%4L1PU=XFmH&3a%-uJo;YhKL*}#7w<R;1 at cp44;=89
zQ7w!5bN)Jdvy1FZ*r7lx%y3Sb5OtUjk8VdogAp&Q9C)Loc*kCl7k at AX7T`5pyyFGH
zR(~$FSn|i>f$LD1^d at KeJ^pm9yQcV|V-3cy8jKgfq9HvmwZ8ZRRNVt_c#C&D3I+pj
z_*8j|cSeARIt`94%v2z>W)BT*4dhTqM(1LJar9%OFT#S*@S-^s1X^nbkBvSH)RCzW
zTKsUGXvdg4xDVODD1eCxI1c$;usMobvxj<Q=J!)fGmZoxQP)rLLv>=u$ku+9kyOdb
zNPfT>X?}8~80qOcOp>=Q4p1q`<fMDRb0|9-RX1nrqHNEQmi&G}B{fE+Vn=_7{vsQ`
zDHlFMuPU%u>T|GG at y=VorG5CwPZ4DGmumxqFI-A(d#JDmOD{BfC&o&Dfms at +_-AA7
zBrvpg6q8(Z$)n|D#hoMdgZqki+y@;4Lv at D(>9wP1znH4SH85HMOGZNy+O+fy*Ac9Q
zP~1EEI|pKE*C7Z(hQWo6h#YX8iFA)sj2v*Ch8WolgF+c)O1nOXx6Z&|-3X%ps-g$S
zN;i;pLxt}JVytu{fU(je%Y}H9m|$i*R(dgTqrXPAwGRi<br}C#S3(kWqUayMS<b=q
zc+wHrGyjwSKKHJ7lc)`4J`{YBl$D~s;~MHa;$`co&uGQlRcdbF&)*LW&ZhTa>MlS|
zbm%V7XAm8_i&pfC9T<N7B(wq6(9LG7v;&F~N#$7SGDHWz&f$T<-;9+u149|SgWnh&
z8!K%g+67U7uLR^gffj7*t6r+FdcD5t<@(c~Xc#<PzvQ{VpAV&GVv>Gc2^GL~Jp!IC
zlKeg2zS8 at 2`w!q}dlzsik3MZV0F7_Y{!)%U5~=1_fq`Xb(0WsP_68IE;`)KVjHMQ0
zs&oqas#U;P?RW5*u^HdMbgJ(a at IX&cm`1iMt~%24s+zA>J&P<SA<NNxX^+AEL$$`>
z<AH&tKN5X^IQm)SIN3`z7^<PNm!1Rwh4_^0yit|qgdTM51S~6!^i8|21&ATWCG|ew
z+5}Mg4TiKM7r^T+{Xkz1=UH0}HfcF7&Bi=4?eY_1DCiEPeQ=7>g#@C9{3WI~=aB53
zPo}1gm43*F=mFPsVCbPD=8TrZ!((S&2n{JL;_xgEHNJx3+d14kF4XiZ7~jsJhM)4~
z at _&Qj+d0&*4#(pcG2KI$v5}sqGW;Wkb^2M1f06M;4By1?D;$2B!)wQdw=;atIJ)ul
zmvVZA3aJakBluB}1#A2};oD;YV;q~-6MZ?DOhqtue0_{uqUc+jRCxaxDir+ap7cB1
z>uCHt;eQPatnTbydD+~{7FBzj`npq{T`_M}MWwgAEtU#<=X%SNvCS3U%5%Jxc;?D~
z<J3;{#`>Z?p=2!H6A7m}d%9`+FVz$2iF-H4lD&jDGwQ{zU|;v9?w&2(-c*k_MZ1L9
z6C`mJc*&+`Ehj5}-YkA?ohff`=e8L5fVQi5b0nFnh{oe0-qXGD>aK*!f85{gKAGg?
zur;V)UqXd4 at qh7;uhlBN7yCjFhJ|=33wI-M(Kd at _e5@>@Fv~d%av0 at s8;8Rjev-on
zIed!4pK<tG4&713cNT|>I9$bH2Zsp`cW}6i!!L1|t?%QEJH+8(4qxK%H4Y16EStkh
z4lm#^z+n at I8#wIXFu~zA4tH>PBZs$gcn^o4=5RNMk8=0~huLMI_<tvxlfM7m?d}mZ
z(debINUA3pi`Ml=VhQT#0^#mxJeCxH5i63hSVL!9GMwBh>Wr1KRBc}}8S733lRc3b
zw%1qKarIGApM`DdNXEiZAjKyMOBo?DNtwkXglSHNlc~N$eRq3Ljrg|2Z0$|Ox?0eM
z*7UCEjK?S at eoiSZosmtoJ?LJASYtNygrlq*=8^ZBm-NMwTZ6G=drz_}+#QKYLX_f=
z*_4Xch7+m2ByipGG{TPw*U;0msV}jjuRB78uIo;rkm6^Qa%m at 23dh%WZ|UrY=0Qhu
zEVZ_~Lz=}h6Ld>~{{}~MJQhocsG}v8?CR_er()VXBIP)4HgTha#eh16DiGo(jgdt`
z8AT|B;h?8G*58>DmjK!rOLc`IBDt|wGy(4H?o7qHH;ZP9_q2uDQ5f1(4~629p6<;u
zU5Hk|y|Gj%oJfRHTd57VDNJ84G!CaaV#y>OX$XZQUD0^A*n(JB at 5Yc6E3Oxzh>Cqf
zgxcwpix4jh$r{D)5~mv>jF6i|w-I7ZpE5#y-4a)6hTD3QDbZjm4p*7&iDYMYs$E3Q
zcK8-fq?lb{6cJkAV|K;5A_>&NBW7>s#_n)jh;Ny_sboCXO>GUucw7H2u4`IT*RWu|
z9C5*V2KfJH{bh~qko3;;54AvvZ$fcF#*dsdak_qA7#a88Fd?&dkndRF9Si)IvcP%J
z2CH#+Xq6lfxA$e(d3opgpKk$reOC4V#nXgvoPsxOOr3CulV_Y_9#EHccCXIG=A9}q
zIf};G!+mi~w$$Y47?7CSZQK${L}<=M=QlElL_(s-qVuIplIMqL1An1VZA)WQsG+{O
zB at _~8NQ^%VL%H60{xdA_In;uxf48x6&024*x4NPlD?sxrE0<KxuUzCUkM$>FNxWQi
zr^4}bgn`wUdH9R<$0{OXUPn(?Y+mweOlf=PB@<n3eVy^>yya`_8~pR6C(PZlsCr%s
zYdxDRcrLPA{Y=)p!3<$WELVx(1SKwqJD-+#yz-~7n`XN)EG6N+#$n_|I>JfeaJwuD
znPBGkc3>)v)uwE6r%NU}6*a}3?k~fdPWSWpbvW~L$X)JypeB;)&d^EmPWN&wpXM2B
z at S9JZz_0~zcc^Y%ZC$XXzHv>csjjxM$uI77o$G;_J(;)1T6#k;hx0pKu>YK_gcb2H
zUR%tYImKD<IdC*@$tNM^9Jj?mzaW|)$$v#MDe<i7>uQT7gJGP$kKwHYY;I*XGp&5|
z4oUAbc$*XEZTS~qQO%s=6;s?!_cW+DHB{TUrloFOi#X(Ty_?kY1giq5W??RM{fe~>
z&R3XajB$H{3l!!;#*}!1)e3VFV`h4S3l+x47_TR|NMULiQ|{q+PqxBxm$FZ#XLWyV
zZ&H}GjHvcB$2QiYfPNQkJDYPB6T%Nf9V0FvL>&+-7_pQPD}Y$Zhzkj^5{LjJe1vEQ
zqMi}UJ$0<eDwgZ__>+~wyqNV30IU*b1A{?;^M$#Z!F2!^2y+dCtpFDZvys6LfaeP{
z$Y8?L6z&)1B at Fg^nj!$3B<Ps4-S9L;0XH*z1K>8mEesC>?o9}DEyH(GI^atg-bLx1
z!n};(`vFG*uVZ*O;KjncoWVT+mk4t`gChW|Q0yxhK1eXiy at BCF1f$?rGW-m|DEU<k
zA11h3m?4Ho30^47R)&uO?u52shF>)be}(fuD7NWQ>n=^Pjh$HUfCp at IoeYmfQXVIf
z$0U2=!h9d+-sSQ5V{LsKGYQvl!u=jkL%27!Jc)&mj+P!N@}D?ucXrx}WKWk&y_Qq=
zsMJjB<;?Hr<dJd7nf%+C;Gjno`7fi6z;V at yXvjsE)vsCJ*w`Q(A?i1ZmS5gdCmi8-
z%OpwG_LS_IobB<RFm+cu;pIgQK}Fc{X+Y=%xsOwQq3KdxA9Zg<Ya1HZtPBNPnuK%i
z$4G*dzNlI_hb0)iw6WeV%p0jwDyj|CG@&b?9<hk>3G)s*5aM(@FbRavX0S0oeF_1A
znl=80I$?gBG8PlD%HTF0Lylr8R$)8_339q)$W~&=e%9 at b_Vl&IW5QA5l-(<XPWOjE
zG|f06w7P2k;u=w6p6=QUjHjVzi!je{twx;s$Ux`D4n$l_CF~Z(irg%7-3ZL|(7M&D
zL(Mgp)`e=C>S`8XmSLJ_xmICbD|;3A$Ynjrs4&mw)-61k<D~j}6}FtQrl%#mQK8Op
zk=4yPPES(|Ye1W0QTY71jC6VGlF6QAV<IAZ@^^FgJVv*-V=YOT=W)M*ew(P9V{y5R
zD9pJ`KQ+S}?Wcl~MIJx?mro<}n8!RyB-Ub4$<#A4EYRet7<r=ZG3RscnF<kF9q!#E
z%ms{{<yk=vrkfY~zG`VPj0m1}U0qrDg|79mq+<^CBy0_|=tZup71kkUP?Zr)>2$bp
zzJe)L!o^|+8FQP4L!x+mb(!b8z6lm5?lR1n>&IySo&Xj_sm- at bkX)c4wlN&pD$I at 9
zTB2v_kPaiYgW9O3PDY?(0|K_ani1&BfPkeoF#??z5GYHW5$LUeK=;(e2y{<CpzH2t
z1iB?4(0TVTVpt;3fhHKSOCr#PzLycZC4xH9Bx6Pt2D<h#=8(cb*%V_AD-5*lW6Uvy
zfx4R+v)w_;P<Oh8F~eLL)Q3vr8{#Cig*Mr9&Rh{sHHSB2IFGofHUPr`6ecP$C*K0J
zs=jm3)k+R0i{hZ37ns+%rl9rD_z~)Jl_n?>#kNV0d3!!hhl+#tlsohP2|1l^%AY-5
z3O3eb^3l|c>EE=2NK><)&*w)Fr~2pVK~pRuoAMX(NkdGFvZZHun7i`_knD8R at 4MXQ
zR|-m}P=Px!NumZO%)JFPb((pp+Nl)gV+Azd5GRDzw1isfmy5;bLj_+!9&7g0fMH0O
z4;MTKEGdL8B(iCFxEJ=^Bbm`0O(GjQyYLERKEl`%Pjg>eGcVe=3G-3L&n!G5i{SOt
zB(c>=n+R*s*#vvgkCX3zjp at oUIf=ImbEM!GQgo#_C1;ws67Nn;HQ94c!|5j7oo*`i
z38DJcH7n~v_&=DTKwXW$u1WaJTMHvN+~$dey22YfBNze-)ntlLk+wKS<l7lz5(e-c
z3_A%<#*ybv#^gzgaIzx`rSD>-8%SF0muuJNM;Ti{*l<5%KgQUpz+%6{yqn=7f+6zb
z43_|o^!9ZL^B%^W01QnV?qzs}q!8vVhED_>Zx2f~Kf$<}!1ZkI?h)oE8S^e+u+t*U
zf0ouT=gcCKSXU>8iu;(Rj8T|63-eQqJWFLnbNzH-FYIW}DF+4uyJHx(K2umMhpDAv
z1{swIWJ^NZBzQo>9#L$o8T0<aQPf#+aH5olkkjd=bX}(_>Kp2GrOq%NMR(vovUpa9
zBORUHa7$;Au2l7U(AeILF$lAN6xqdT81(Rlhc*#|>tajY%qvn8Z>NVHv8AVZYgb!O
zyd_KnxS7xCZhq$gQ<)5&Zcdu&X~wR7V|%0AEepqWXYOH{C7xQm!-XU8a<r+=2(lJ%
z(h1ro*(Ecl6zxUPb)o$=Ej1y3J>IXdPH?$!o6Cy+LgnV|qRiXTg{%&mD%26?MY?2K
z#yCc%ujq^5qs27J*SMMnZQsMDzi2v+`oX at k$*j=UEw~LGhq<yyO&QFBmkA6o=qUIQ
zf%RH;0iE_VS25@=I1SyTc`<`i3(hC7fx(gjyrSc!g25Rc>TMd^RR^|)u`>&{6Hz0B
zvkK^c8<;@`y#;CFcnO1L1w8~dvFhaozaX%g!E*~{p?5c17(B1w5T&kVu%h5%0xxB-
zvS1Ynx{Sg31qGCM9Sf>1m`<seGq|`QOnKKcxU>KrA6_aL^bv%23TEXmc#MdzWN<~n
zAxgc9i30`Q1cn%FD7c@%RtAFwza%isU`xRp#Hx+Kbp>}37-4WjK`RkQWwn}fTEz_V
zqdBN!p19~{IL;L?!8Bt<e$YAHGjUw-I39yJ_c3!zQ57tqeWstwB$Ur=&GngWxjyqg
zR at 13`<{AdsXa0#n_L*xLWS at CIgEN$OY%fwX>6ywquH#hpj_Vm@?-*bu**kVH$lkG&
zLH3RhFv#BVK?d17ZeWnTV~_>0cYKIJ_Kq}z>>W2U$lfu;tk^qlVvxP#!(2f2j$sCa
z$~$gmaGmmwTNrFr-tiF@)S<lNRtDqBJ8om|Na$W;oHL-7&D)Ds!5NO at Es7usFTkV+
zWYc*(#zaF6$IYN{8|LSVo+D3brmbDtix=kSSrg%*ZGPR0enIx~^lmb~f88y8&73nc
zqe_kp^NU5VN-g^FtCh7VFu{--=#-X*=1^@-L&Nf#+KaJXHLZFEmEZ#W<{3f!%C#rC
z$RuN8mO;Z_E2aFB8nio5zoxmRW=(A!*7Tf?eIG!|?7nX7sYiulAH5c07KOG0nx>Yu
z!TL2T8f!#H-VJ%vPlOpFZ6a?lPYp%F6Hn+j50Uqwywm0I>IT*y>)n*<Nr=2OBTIm6
z=}cju%Da(KGd<BQ>qOoVGxGwxT;$!vU>T*#@geWSj4CGzg&Jnmc|;`-Owh>HEAnpU
zgi4~#PPl~=s*!+Ni`S%5$<DUE6cqXhCoQHVxz?9=E2EZrwlsJ2Y{6=K6feGcx8<pU
z+Xpk~g3lLuw=;TqmOX&JBkuuBE6h0oPe*eqTHl at MONqQY^D3m3f)d%-my+1K7`skl
z<%_Av`zRw at MR87D<b5oU>MR>6@*a}a<8=QS^;Z-MUb^B^kzcw4q5#wraAF9+sm}bJ
zTTqR&F(HyCBJw|=E4(Pwt4_3Z(v&LygBw70T0XjEXa4ZF5ckqjFl`ughT|BvqY{&W
zvBw|`kYo at bFvaPVKmV3AvKNP1<f4ZAOAcDqIKv2GiWiP<?0xSR`QC8UY0y%p<J6PT
z)9d%_qfT<PvLwB?zvQF^4sm9rBNo|&$!d3aV=PKXLxgd<VNfZI8<Dpxf%!ByNn?(2
zH|8g0iC~?^lo at ZJk(DLZv?vUQ4C73Lh87ElW^bHjTmm{w=v(TR3*!u9jXput62qIq
zrW1{?LY9Mm&N|zq-|}hr#p8677ARgly)4jSl3291rz;Uo#;{g}qc|I5nHPy(r$J?M
zyk{oLj3$$!LpX8~xYsFhb^UN_<iHE5lU|GF5T_Ux%V1oEDNEoyDBezGGKANF)j33(
ztAR~)Ka2h_iEhEU95Qjgl6q-4-UpHWis!k}zC^qeCrM+WL;|N;P}9A__?BT9$0%<&
zLI9b6PIxm#30oH492drSjHRgfvQA+<B?-#9h4Ed9JF5)IKafbW7?Hgj1;P7FLLL1v
zwi|leGr-%QWZd&45tBq^etjC^ebanIA!wG>cd`(3$&u(W+AAs%lwSyV-X-{XFQ9o5
zL}<oWzD1Fp7YfM}N?F@%#;2r!?acV&Gkl=OVhCLNukXUm9q~l(Hq-|^5y!bOtv5bH
z=mSWu!jxT~4HL%w<tU!x=0n$3c6R&aYTG4!I5;JYf7y(B`YY%wTEVxHd?h3g7a3n5
zw^)F`%657)#(R&kn^4yf3L87A7%*QXqtgup^QjVd0Wdtq)li}0Fyiy}1Nj%E&igJR
zeg}&B6GSS!kXQaZVt5vO1cm<smv0Y;#_mVKqxuCXJw6G3zi>Qm9{K$?u*b9L3B+3=
z!1&S+NsnD5Yp#@a{t5)kPVh;(l^h!1UA!IWk0bZl?^P-}-9LihCC0cdPvc{<E_QJp
z?B($L$hpL@?}Zw}l6-{8p5t(eQ-}*f8 at u~(LX3|LhScG>q%i6Y<0!N{%(Q2psC2DG
zo>6SLzUN#df{5ZD25xCjJZfdW*jS3PK0|oCK2Z}k8YH_eRPj>0%i<JUd!kPmtEFNl
zx?=b}EvH-%qStY3&~A?P3*!z$4%U?{d>MyVf&RQ%T8TTP61NkNDzscQz`ExV_c+`^
zA3}viTU<r$%Ht@}SRA-RXL+&0&eT|Np#IfZqj-2Vo at ziQG^zxrl_0xb+4BZfTA5Dk
z2=|5}bShIAm#8G6ljP_k#}=cBh9HlloRgN}d|<q%O)fr!<M3`;0>;83F))l}q0X*E
zD8wiD3V!`p#$rIm&SoTx^<!hcCd~|MVU1ClWtTw*4)Z&yf3mpp$-(??vI?O?)CF(G
zI)`e)6r!!>-+K3KN<W82LOYQ>Gnjwdh@^44zk%>V(i=lms15Iim}nVuXnnyF96`@P
z%hX1tE|5B+Xv|ZZUu4_MH&#gBF+2`Y>4Ool-q#3i7GjIvM>_R)hQh*FaxP$55Ww4n
zae;zoEC*?8hBQK??^&B6jS%V53>@9s9l~u;(rTdyDy9ufYQnhi6EZ{1Ow2wYP at S4=
z!#)t)-S?PG!v?IfkV=eUq%vw$(lX`enZuk$tt#nqh35kbMk^Hxh4dy=Av4K*T)_yF
z1Q58HpjPFlnMXX;8^xj25VlhzFzqSIV8%EK6pjgIO-Rt&*P{t$+X*m+W3Lu%^;Ay7
zsvTx|VlDcj|KNswMa4YzFW%X<F%ltw0tL;dO?<g)AMH%4NcQ&qqUyPzohy$7P%eti
z)kg!Eynpec5a<$-xzaQX<}+&%JYCsThl at z_@jLeBaX0zR3HS0%z4c!KZY3^LZS5nF
z8%nhIWscj<ce?X|vTx^`#<=Z#GqXQsI(gsC%-yJRxvxjZn`fBWdu`AtXCF=~mT$Tp
zXmp8qtlz7)@XV47g15a)Zw8aS8<tPUlS7FVmQmk*4aB*BjvqQC<Ef&ED9Al5V|?2E
zd%}Ah!)GXagCP6tjPV&wu!{*q)?-XF&U8<o;&7kh#s-{Gf_~mC!@-IvQ!c~`qoYhv
z#DNU~XECDn({a<D!od!u#@SO1VDepp65P`b%6Gw(_e>$Irx0uaxay}b#?Vs$u*d?Z
z5IdYUka=7>PhlZA5p~gtDzlVW%m6r{&P&DFQz<fyB6xMoNOh6a=^2I+oM9OC(+OXC
zIyldR#1p3*Q%IgnKIx<^V5X(85GRu+*fjtFl}J*bG95}Sh0Ix0a>aKxXM&=n_o?8X
zvA}6g!%<{`-g0E0g?{;Tl!r_q3wK6^anV#|DB|grwwvS1*bZ~r>MY>Q3K*FbvWU;3
zE0WH330h(*ua?0%3#InwTEvR)yDJo{DQ8cm+V;^%&on^QPgh8?*WB4g)%3M_>!w@|
zn^jCP)`Apw at l{Qy*+eC4gaQzVt$nEzfv~~+Ojc>N1q2df;zg{hvk;iDESv%#JOM>m
zl*uQ_&d(x)4vVRPByCBBV1s3;jH!)P*6eb;2bN^Fqs&V!TN1d;()^;SRI?W at MBBK?
zBD!cQmB at EGur+5%n=a4JLW#B6)Widgal%HWTM`--xdpW^r*2Cw-MaFWSLbK at zgs)8
zM>}yrwoFoD($9Q3oIFWN8-FP(#IJ#>KsO`kq?ef2*PEPY at 8Ns5_RdZA^rY0Gu6do^
zk$7J;hF94N9Ty^VNDRF2KSa7y71+F&Q5+joahk1Q5LEzX$q9>wk`!L<gJBB^5C**z
zjfg5CLjOxcMSD|GjAts2p2yU$bB^tXaq%YiXEwPz92*WgzG<v-Y#YA!-g`gcIHAJv
z>1!)u8!!IE-sm&8UvckKj;`w+2aP|tPycHD#qRQNI<~s++2#24weEHE6Hi6gpV#3u
z9sAtvXwmz(3?u&a{8flQ*8jj207mlv0AQql)olR2lAn?(k2(t0IX1UD3My`WZr87o
z at L8GVnf`m+zq-Ov at cawk{OMjtp?m4Y_18E`+y{Sh?-h>A-0ME=C~%+P2>!uwH3G`L
z?iNSEJukZFIWBzO at ubnd(mkiX at 0P%Ym%HbEbWMw6 at 3jx0R4K<p*Iw`VmJCy|WsZB^
z?>^`_@%bO#>o_FtaeV0gKf3td_4SVAunfLz3}5Lu!(HJhS@)GseZ=9Za6J0{cE?F(
zh4GcHD;!t3+h6%g*GC)`?p2Nu{<_ at lj`Q5 at FI?<6!9DCaaaFzPf{!%7MNF|`BCnZv
zx*>!$-+(`CY>UsOiF+ at qjNI*==l_=lFu9huju^t|FPWO}o<?_$;=%i$dP;mU3^3>~
zQm{_fD<X7si5`Cut$(1SmA^vh1&!HgyYwtCDyc7;SySY#DJriis;ntmyt3$!G0l-b
z&6zjN<(ih~oHo at lt<co`^-H*hHGd83w{8vV^fDzb^M<{W^{Xi=0m(E6dLsGgeEKCA
z!?S$+MI{{jpB>;(0y=a2PeM^kOP$TwUsv0<_4Ga|)Lx at JtZJ=dMCt4VZz9*ku~R{Z
zgT?C3ZX9sZ?DUZe+NSh(CgrK8t<1Wa&P>o^7S2aVF(if4q^Q;5t9z1I=GqiXYCcLS
zETif at 0IjCAMl5$k6`hp8YvxQySy`skG?#rS6r1o>T(Mi5y%a6Q at b+?JyZjH4a*b6;
zt!)O#D2|g%y^5xhR#mb5x=|em(M6=~9m|}0v%YC_xTZTwTzUl-R at MJK<?}E8c)WJp
z9=a@>G^%DRF~<=}|2s66RND|(*jg~3GpR*cS)d$V*$1@$XSa+0ZKZQ^flaZ+t>e1S
zcZe+`HhTma(~^}@$KS`DEtsj%AS?F=IX=jtA%ZmdrzglEQ0q7vw@`}4`qhl?VU!`7
ze#g;2S*Wv^0i9Z)2UME3))FX{X8mqwYI at zLhpeLGX$x1P<8<jR)6LZJAq(f#@tZ7M
zxsHF>!d2?{?G|paj(?o11+_sZGIF0U at _6<VhlaT1OdfGpatKsz9w9!@)IZDQYSOtD
zXL8w$^Hr99j6+n{A32(zVH6BAgN+$R+G8?W?B!gv*+7pWnsu&tCRejcvwk)88Y`Ek
z-fiXTVQbyOA$VIXRO}DT;IvGxwLj))IFoCwW}wY)h_%OK^lC<<mPc)jblb>emRF$y
z(&mI2Gie;Th#7`5jDs6F8n;m6bM0c~@8gi1SI75SI9tmc;j||#8n=!=XW?x54s+Vi
zEgH9uzhL1?bo^|*c+)dc at 1S`(u`oan+U6{dUT&eba`X-hrO2({LQXn0LlSJ`XwpLM
z;^>zw)LxDruuwnb=<^opC64~ZLeXJ)dQRYQg8J0ToMGkK!cko$<a(G<S`(nY%_yx2
zP`_f7)&!_G7^O7<iVp45<2}Aof8{E|nv;CcQm*Id2Q8FV#?qi!i_!HtK at +QFvDF-s
zE9$uZAEv;SD9P5Z&ZlW6=%Ov+cVd5s1$4Khhhwxj`RKuMJnOeg{{`k(%pGEay-jzg
zdc4s+?s$0*alYA{ZvlrFa9GCSc^tmo`46-F=Q%87IVW)VE5_rl$q64l#?ekaJ$lf5
zo#E#=Jj|h at vVQ;G{1&H)V- at Xq>p)Tk{@xhF$_y?0ssG%WlVKY}hVbHl9_1uS0Pj!O
z at 5Nbq{E;afxE&?AaWi7nxGhWs5Oxz7gNV2Rf8`kr<)V#XZw7;i_z3=j_><BJA at 0Rr
z8U7S!!h9Bg+o737^HoCQVd=cbOpuj}Rz7zDq+Du9{RuE5IhdD#Im{SU-A>4%K1#{b
z-|hh!Fetl0{niEoGmrjm4<Sg-L^jml;vpKTp>ZBXZO=3kf(Hx8;6q<Fus?L7m>yai
zb{O=3t#?Q``$w<YOqDdWJ;#}{i0CM?7ch0;4ufjWPE!LErMwx9o`2K&io at _C2M*be
zd-TK{hiO40zicy(0;|d_-Xm#J__gcP%P7*xVN~LmCrgOwN6+TTI~~ShI}_lC8B3Zv
z4BFSreRSJd40NXL$Q^3zs`8_K!zaCk_~;ZXd at H^|rBS|N<<E|hZ;(eQ->?hQI=_ZY
zO6RuDZcAOs3g_Lh$u5M_nc9WD6l9ZJ?r&!)J_go7X)#F86(cp&`Y0N*DwQ|)vFk&2
z%YAf<do!zQS*`zp8YFM}TdmuYHGw|-6|lEUmJj+UZ?VfFOMD8pRk9|wGfu+v<JhD8
zP?c=mxT%3K+e9mJD-7}ZGWd*eeZl$gd>xnsLMdHh=%uw1x3gP4?N5Q(o}sbZ`BJ1)
z-()?yPAxmzdn8?_t;nXz?ggLRM}K{cuuuv9V<Umj$9v1xuU}6*j!T0Re7NGdhI#;L
z4cS8i$a?6DXrNgi1n#&r@@s8nEr&rv_H!8J_$A5K!+dIeKv{fp^=2A>;BV6SYu4q^
z0LXe2AOHGR;4E2L1RVVh#E)>DPS~@tKPwt4*9piuPG`BCEQA*+s_o>Kn?&h4-HxoP
zPA8y|cCN1_%UL?-$|7Dg^E#~k(4I^rq7aH4(=-xuDyar%Q{Jn6Rq>&6QLD~nrhS!C
z{#KtrBaJE-M2vg%m;4B=d}IDN3fPD3Tp~3jeQYG+t?08WqmSLr#JL&;QnHTIZ{Qdk
z-NrX!vzVpf6X26O2Y4$Q?#^g9K}p#fhu at MlCa^qz8}aRu<%6n!%M;#Imhx~qb)Dtm
zx#d?aw|+f&oz)5^qN%MR?BAeSU-Bk2lz%x2r0hJgCuq;K>f-n#wGaIM9{Z3!4PbCg
zd))-BfM{AlQ;7+rH4-I&*`C2 at ofRKyO=aMu#x=@MkM>m`;(xEsH-Ui{6Lr#OqLxeY
z?g7nVrXhKB|06zN3B6>$k?8>xAJX{+D6Ec~OLF{7PG@@$pnD`Ac&Z+$M~lb_pM-`b
zXyVe&$Ek~-f`;ltm4dSW4$w%ZT!e8zNGn1lpj^4_lyLN%0-6qlZ$@(=XndLmp_(a|
z;B`ZJg06R^Gs$`ddf=pK)?>FJwGgd^BGjW*rW8hk7t*pAAxg{ECCGj}``{3_Jj|V;
z$<(sKkcP)^O+nUcB9GD<`Y^^x%O9t9HbX=2n`zjwTHePU)O=`uDBm7NbS_!sLGTG=
zXb5#XFvl`9p+v=^s)b9cGdgEVs-#m%&w!58B{%(}>mrkDg7;H<NvZeDeY8LC1{!KX
zR<0bP*1i#(M)gHBgw1`lKCM72Kg>-hNbA$8twAR{$36NTtqV!&9nCsCqe<UxeG(ac
zw1nJ{-Ye<Qv3jrU%}r#8)*NW1L9IE^-EO&UmB?t#fmRySngi9G{fU5v-t5&o{vyPH
z821bVMQ`LZgK!wRZwW+dvrne?YegzDqNa6SWXdkoSB}fhUx#6lnk;DKcaO^!K8P$i
znChj_AP2Lk2_R#529oiXw<JAalYXmB`YfAt+9%1CzE1n<Taw;jlYX~NI*o at cOW9{p
z<=Z5Eu}yl)CjE8POs at 39=)~TRveVu~4(Elm&z6I!e%U7dkWG5)q%7~ZNx#u1eTL2Q
z1yC=y>>ZPm-eQyffK7U}O?tp4JuxZiw33r!=Y{v#q at QP#et}JT|D>efV3R%reO-<|
z)py&ZKVg%;eNxh|u}Od3R`wk>>2wDeYskIL4U>|--6q{>D?6QO$g#$v-8SjNlaju{
zCVj81?0%c{4L0d_PD*;hCjEJv^tes>jW+4KCMBKz!*q^S7f!WV{#KjxM{UyYpOo}|
zoAj4$WxvKI{T`e2-IJ2;vq|4!lRniZ{WV)pyJu3;qc-W^wn=ZXNvByn*B7_Akx5B!
zwMl=%CcVKXy~8H`;H0Ei+N4Kq(qFQTagW<9e`r$DJ8aT_V3WSVR`zYSvOhB^>2aI%
z=WNoWHt9QT(hpBcI^A2y{=>7%Yi!b;Ht8?fEI&Fa=_#A^mu%8gHtDx!%HGk9TV>%F
zmT$DDI&fbvz7J&a;dXIMYY2YhpSSXsl$n`N#7Eh1{tO6^Ry8Pw4m9i0v-b^J!*Qzz
zM9MVPqlha$F!;DfzfJrD%T;}!u8ZUAyl|EtFOE-hKHZI}$~D1S!T9=mOK%EOHD_(Z
zh39EIYfSYXZB>m~)M4}ISGBjiCFzGyC|NGedEtZFVj5HJvq>-07R$UL3T#P`d*NM=
zcOqH=p&)PihUm7Hz06j2T2IK)aM3DT+1-<pK58rb^R}`lY|=kzD|^YLq|dUIy}?%Y
zXKd2HWGnm3NlBk+lkT at kKV*}>%O>4BDe14<EI-vI{Z5;7I#SJ^z%8zPQqpJG%D&Vl
z{h&?y4x9AKNlAakR`w at sUPmiBTvA>c2->`E at uZ}e*vejQEBlB|I-NJmwY+aq(&?CG
zPPrDoWGj2WP5OhjvIiz5{W+WTZ`-7=vq_KIqz5M@{jg2?4{Xv~ZPMwQ7Pc7s{JKd=
zKW3BuvQ7GSoAjq_(px7b{Z*TEr_JkzZPI^hlio2Y>B8poGi=g#*`&|1`Fvth(w#Qx
zvux7uw at F`Qlioim=`Y(X|GKT-Z?H-Kna%RsCncTEdgEW#3h;9_=^ZxdxOrLUVxPZZ
zQqq55lfKs`Jz$f*JR at Dt)qNQnJy*|~Be90VT0=+}|JY_k6VdQ4`F~`tPW+`+-(;@-
zfG+9r=d{&JGkoA|;~qU%{|A<<`Y?1*<#LbHCi8x=utm3><Cp7vuWoUM{(q<zJH0Ek
z1$;864RPg7_TjyMWZ6kG+7&touT#51cIOE3M-e;Z4ByN9r2m2(UJxT-4Drw-BZ`OT
zr$ocnP?-Nq<ah{D7 at Ae>V(&HO$uzo at XeQE;5j5(4Ga=Oan3r>%gj{!n0o9k{a~3c`
zeg{#Q#lU<!hh`-(st?zELcq|2jWg!c4a_j_qbWW+nZ}Yu^U&uqoar=OJQNW=@K8D<
zB0dKiy)&!$e2w^&(Errdvgr1&2Qz#q*Na3Wyje6<M3QXfqCKL;z*w>>h#+G_#KpzH
zxN|VH+FFSe5}@>H2gb59<?09Kz8rl%1dJt1m2{gt#m%+DpTAV=NZP6&MXqR$tbYT>
zmxCDrh8|0wr+~@zsNWM!j>S9>tNSQbiW7m+s|N}*4;U{pDh&}4bdq~r4yMtDp}Q{i
z$}RaJzD9~WxahGg-$g8QFxLa4-<Os24+EoTl?wBDV06!~F#9AQUl!*>!02&V(ToD~
zJfdU*g?X8B<yfNteyZnDs_oD%UGxwsF#MU(8**CismQe>hx2 at 3)a*jnpdXmrx at ZID
zb+mU&pUuF~LxIxpdPMcCQeo}}W*7dfT7D3a9={aLkAX=r4~2Oim~|PQmDh!Bei#)r
zda9BlBL0Y6dc074sFT+7RfQ=AW;^ICeNF|YH6x4oQ~={eNI6ul#lRfO$>j$|zc(qG
zD}m|A$@M;9toB9cKyV96yIS|tc20w)6}c>Z?f~Yw96Nsw7<#OdehnBu#9DRnLtuP4
z?ftjF<XYpegaKzuRv|X$^}J4%;uK(pGuF^o=<UkMbrxu%IntK^qxYK>pOwIn at vOG9
z9+)5G<mv?GnjFmgfO$O!GYHJgoO0a-OnHtq?gxg-WXXCA7(HVIJ3QY3rZvL{-wdYD
z_zJc1Pjx{)MmO4_d1cx8MdpmEmoyltxle#8sd#vffhLusvw@=%dM!oKlmc at wV^zv^
z1~Ao`Tp_x93?BjBl|w at x^?Jgh;g1Jz&!Jffnq8T45$CnQyp+jBm?$viIW*S-b3+a$
z4b0x0Tz3OQ-Hm0{F9Va?iyn|P+5OlLfT1DY%JmCi^gb-?tUi(~)XG0uo}Oc%sYXbU
z!gw$lS(>BIIl%0eW!E(41Cz+HMlCRlbIP?An0OAKtAVM^ku?BJNhX)Rq;OA;teZhY
zb*?-C5pfSNdd*YmOyB7s8t!}HQFNUm$+BARw?IP=<xshP3QQc3)hho4%*#1C>!UH2
zRZr%_G8X1sU>?ZHwHO$^qNrpw0z)w?*Ct>pGi67TxE2_CESlSanVR8@>n-JHs{1pR
z52=rWi(@$!`vP(u&d?CYuK;snh7V!B2TTV-Rd)Uex41JW*AdXn$jOzDX>}`dQAy|z
z7rX&emP4})m|#x1E&)cbx2RlkU~<Q}n}DGnz~cNFV7BM<evblkYmTg^fpO+weh<uH
z at S&EVWW5edZrhoPLr;2DU(uWej5nk65<nGE`UD#OHyz#R+^fMvUmNY>WMFwiswQn~
zquZSsiqj>-9B-%Z32Fd!sH5l!b(F<~a_&`D*P2QhDnZ?)tgq9iJ6+Lvj=u>R_uT4h
zUFA_i9D2reE_B1O2-z>+#ci$=-mnYCU74G1CoExh*;Q%zcy*0Xhp2075L0H%u|QU_
z$J=w9xpR$AmZQ^=>SL);F#F<DvV?}Cbfs;GenWBk+z=Tlo{ViAhYxk&N^?xqwq}3E
zo-T5wFOr24`~e}l*=8JqErVOQ at eQ98Dg{@tGmgJa9}3}OHu?WILm}J+Lo2y4>!zMi
zXa%mQ57zM&K+vzgcTG?CmSks&z7A90UE7yT;z}TygS4j<eDWvO)sx%`I1%eyfJ;O1
zRnQc^I)j_pVbQQG^A=P+U9DQNXnxh=#gsJ}OW=E+p^d%m;m$aH4<WP?A0)sh|6=|4
zYMJ~B6k*2Sj3XB=%BUETJ_z3$iuCks>Le$|eMELVlIgBad5=*JJH9==msH8{A`LY|
z%yZNsU80Eg at ZG{8dAXU8Wzjd-=cH3rN~TR~*R<5Ht_ua5>(=@k at ww23##;Ry+|bIH
zz6d^;?1{vBd+Sl(@QJoX)%1(&k-B5?1 at l8;2%;tm4NyGQ>@eGa#O#YeabLc?+n8 at 5
zmL<a7$1(aCXh$qb&Z!8r6Evmb4KQ0 at Vg+s_rF*93Wk<x8uIt5J#i$r5W!%+Ca)uO=
z?m3aNT8<jeL+z22Iz-%nkG-zK$A at 5P+;$Y|X(ti5r5tsGo1&zo?8}+QlhILWe4|g&
zb<qV<p<aC%6|TEZ_CkN9E%`j&x-<GW$5Ly%)y>?|j341LCi?sqRRQ-t^=KwFP)^_a
z3^Pbhofao;;I7_{YDBVV)clWInf>-)@}0~L)1eTS)UvpSj_)LOYy7fM+G6Mu64?gh
zYm at 0_<na~KB~NbSrH_^3E0MLziEIUAK@;dnXcEhA!V^!~&%)R}y*XBvHKj&(rYB4C
z=g+!gHNAA(6 at 7F{vs;mj#Tq)>==*09m35mnGk`nt$DP)8<3dR)k(46;r;%))<f9>U
zSL#MGOI3(&>7*;i(BtS_Xh)Hr?#;4^iqHhSk8kvh3F!JP)|osb(<-zKtNpfg(Dx@~
z^PTw4Z!Qb&6;mHPjajZ3z at 7hb@<r9UbtQy0#^lh6Zkl?M><?&@*Jc+u=kjb+FkKLz
zxfvU7%$H0nztjAsZLJb;4+Ke8N2og0oX(RQMI_ at Z>SpgK?why#fOzQ-bZLK!WciyE
z&2<gh6mE}GEpcN1$t}AY_O0TLt0ZcBXxUv_9auGv>zCPyq-0+DK-Uf*oyebf<;r5w
z+0z!HYnwHOU${c!%b+JE>RaeE8K8bDx9Py-Irh1vFP7XIj3wn)o4X at 1>BZ6=$h4|u
zOSNHNl#TA4XG^nm$pAQeL0e!4`U*(Qs$9j1d+-TH4_=B8q2qU%<6AP_r=Ml at oUSUn
z(^lPSD$5T-*>eu7H_x;`exCq;9)UJTB5 at 4&^s$#-d=`Q2aC}vBJAqKx>bQ?<nsLoe
zONJBC|9i<u9&dZDE9#Tpw2dq8P2k%kWHMQ6vG#CZ98H}EX+=S)xPaceJ)X-dKk1<z
zt5bdxAbaq`w?1*<U#OivJY at Bcyh_h3;DF<XJcvBra5_;3p~&sRrEj69tqmvW(^fo-
zqcV<fKjXWooHEliSzW2m3Lk%-l9{sc^p7+Atr4H+uUVb8RNYoq*`FVOoX~@FW at 1m3
tW_{rxYcgQ<z}%A2Lr*X>d-JY9ep3s^l!J9D(*b9ui+aG<lSO+?{6CJj<B0$O

literal 0
HcmV?d00001

diff --git a/images/bin-x86_64-dynamic b/images/bin-x86_64-dynamic
new file mode 100755
index 0000000000000000000000000000000000000000..033ac759b0b3667af0c5dd5bdb79516806bf4127
GIT binary patch
literal 6484
zcmds5U2Ggz6+S!TpG_LaP8w4;F=Qn+l7s50V;r+74I2MuTsD7>QyDeN?0R=?Z&>eI
zyR(&3f@*1#ip99yN=QiX&^+{^5>GsUkXnftBkVkY0tgyNRYHk{>5p&(jV#n=Ip at wj
zyEEerg$G_Z_RP8GyXV|<?%g}*{yaYv9#(ulU{c^qKvGH71!TVg{M&^nu at Lw{htI%1
zXh5VMA6?WCw at b{g$)=h6rJjnsj>?Jz6x}XJ-fm04oFgPo{;H(QqRsbEKuF910zxJ`
zs%n$<Z4D8DGruDpY)Z~{6dsxA(oUCl%u7<AIroqHMo+u!U%R5CM6yl{2F1I|#aJMA
zYR!sMc}{k6u3i_K%!5J#V9s`@(N2aaHU2&0I3G_XCwhAxPsKY^$#j0Mb1u}|+1sP#
zGFrEYzXhA2E*?8^Ry4 at tu^T1wy$2uqEvf$2_s*yPQvdZQUJ4%lU99Qt)9UKRBH8kT
z#s8SdCQw6rFJk0-3z_EBOeSsStZ3FUO~7u&s29CpnpBn*Gtp!kj)h112h47*TRSY8
zp+5QWkNQdvQGRc78%@r~Y!PlWMns9mm||nvka!~k@~0M6M&W(``ZHKuf0tfAL>r^<
zGyih=@P)bnln<ov-MnAN63NqK^Vi$ua{15)BgJ2xH;V5Vg*zLk#zt1I&DZH*tSprT
zTe*a6eFYW&Q7VxSW1)T<Heg)2W+~+x!bQnRXN}_88B&}-+JbtJ|MHK!8X{mUv~DM}
z&JGfmHdSMBylfo#L+(KH{&@<<DE!oC6kFF+40g|Nh1Nprn<$}D_MM;CFJsY1?w+~6
zJUKb3HSfPnW^mRh9Q~s&fDIJati64&6L$Q{Evxw_A at p>;ul(o9=KX^J*OyBr{4f2T
ztR417F%`TSF2;kmjm6F!HWXewkRpcodbnr>H^RkB!A+xhE{MH-KNLQ=)>r&^q<GI*
z`dA$)zPVnwUoIP0KCs#k-J<ag7ylV9-Wx3bt*^Z2Eu*mPGmgBMeb-nx7sR1U1zW-k
z at nBmROM&o$73>HvTnct!w?Y&fQDyvapx1Fm8imcW_2}!AHbg&+!h3!k_XU+I@^|Hk
z*uTyC^ArpH>NIDZvjgRQ>KB7JHX;w=&#7bCk9-_?8}eD?MD%?T`JNjE-&~7t-;PE<
z<r=~%H@<-`ob!?J9(-Oy-06{gh4HzHco8|A{#N}94dzaLxX}2L@}jy}M_`pO1VM~=
zWyaYze>Xd1#ki`AQWMKEk9~N*oFOQp==iSY@>NAAQRG_U^NNmd0A6-NLIQY5@;1p^
zC1*zCNp!O at A~=r$>+^Wh_e%7L%|Ms&GTtF&&Xa79NkI_HIGmzCeyNY+BxIk|+mJHI
zdI|r}8Lv-XM=v<zI5sfwM4$sx_rXAq)}wU=y1TlLbRF*M4Rnkq;sGOS*?4EqLCo;~
z at 5);4;*1rY04--_Z9dJVWZFt(XF*G6tc2FrKhkMMr=&EM&TA9-Brc%IIA|nIM|0Dl
z#V at 9@J)2uuyXM(MHkZt#U4n^q*+eQz2C_7pvOr6wllZn0bNHS_0qZjHs1*e*F>Ov}
zqcaI}I*zt1fflne*&I5w*@YNZVw=&KWDFf<uo--5qHVjKi5zOjGBY!YwB?;9|Fygi
zEojd3_XdiN5|RXXA7_KME|-aa79Zyt%KIeVKLtq1L7sF4hp^6R|D>V|?I)#w%70Gs
z+7DvoJ^WTV{)nO at LU~HC%09H-7IFXUrV}VqZesg+MMsJ9m|$SoOyoBjC${H2 at -$+U
zyV!nJ(NO|el|V>H)fctlr1L0H?qT~%zL5!$_ANvlKkG67D%MdhW0~`rU)l%A7>U|(
z#xFp8J%<mCDcf`Y?2z`{PxkNa|7DN8uIh*Y=4HXaX-{j6*ZxJsC@$_NuRr4+d%HDx
z_Fw at yt%*+iS?Pb)(|<PM`NQkpw>|bHX<w4|tJJuI*p8v^V!`Quyj~Yo<8r`uvZCbd
zpW&-mAbTGFX=y(#?Y;hZ{Mi0Ak3F9^_#6^sMajMXf8?>hD*a!T{=FH->;Iaxm&1kU
zv<M>A^V%oHzk<5df3~L`D^Z7>5T9iKOVoARhopT-+I!>m%D+K-Qf2?V{_4`6&xca1
z%wLY{EsuXbZ`^3a3M8*TmYM$vb)50@{^zE&4^SfxVmsz^N^#n6Hb#W at rnL9|-d=eF
zwW%%cKlp9?kEA{KQ#2}dxlH^+e8|6-*nX#{(j&qyG_3e`G_qZ8*zP+pDthfn=5NQT
z`VDFrX<g3aPh(lbhsTZc61l16e^zcV`F;V_1bO{4UW=;~t)g$KQZZs)C!LilM#Af#
z8?USEyWMzwWxwsl8*u&6oscN2w9=}za6j<6;WScV8}NGI#<y4Y-ERCL;QZ~zcL3*Q
zH{MjauX5u%f%B*vZwAhfZoCEWU34cT$|}w-&S%a_6>lOqPr31jG4Dj2kSMEoYU8}(
ztW=>D at 0V)nf2wlt;MRYna=vlnZNT5H8-ElhY_0a`HpNZ$chCfHcz$2{4C>%+*{yA#
zL47sG;d7|ygRSF0`xsx1aTr2efhM@^@k>`IKB&e|@ey6Xhj72_7k`g)h*LYK>U1ns
z=|S;dMiq)b;2Hmy1-=Vf8uV%-Sb9a^TYtyzBTjw;p82zcc&%|0>y5JYcf5o8pzOx`
z%LtV!MES86?#BV~DO=~yF2n=4Yx2&AcEopMobz&gIOjbkao)GE<IjtBSgP{=2jEYO
zcD8<Z=LBB0=hD{@-v!n0k=K=PBHmIX{_l{!(hRenaeh_c4+C9pIq3(8Q-A6DjEMGm
zL`$OmyXB7>BSPlaFC^aL`Cfkg0R7*~_UT at Z2t`3}3%o`ii$zl@$5kc7vR2N@;|*90
zZz>1IPL7)4kuzg>gK3(BF6pTOM^!vyPNgyv(Ud8UduB902Y8g5O(m>ET<h%)9R{i}
zlkqu{z5w=#F`l29xyXKoP7De+!=ru2hfJ2p4VSB4#Mx4KnMkJTlGwycVvP7$_+)=y
z*gQErd}e6O9P8^34^iZFcr~NhZ1kd;NXOlPxS<7e at GB?!j*kogoki`-SyU4 at wXs~@
z6er#a?7G=CpL*6DO-v<ocqAW4MRU1C4y3;KrdQXUSH0%QNo+BmOq=;!f`W3nj^{Gw
kbTl1LC9p<}JdZ*pC~+h=O*}VqWTJBkahw)6%cA4(FRYdo0{{R3

literal 0
HcmV?d00001

diff --git a/images/lib-i586.so b/images/lib-i586.so
new file mode 100755
index 0000000000000000000000000000000000000000..e82023a166c5a428ab399dbf7e9fc0d80cb15d3b
GIT binary patch
literal 3834
zcmc&%U2IfE6rODtsQi?Q@}o9!qtz6Zo23>gB*wN&TS^K at TNJ2px!v7%SNEsxy;~My
z0?kztvTlOZcOQ7s2#L|gpd_Yb8<d2H1~K6Q6B2<eT2T_z#t_!;yR%boOG)&}vpIXt
znRDixGc#vq?i_0AX!UqJLP5DG7nF{b2~iK4nJYE*!Y90<Ry-z_IeKMJdZ}FE912y!
z(K~IApdC2Lb~trhK at Znr0(~Z+BaT8QQtt(Bzix#<?gOPqSI3TdGG;|ce9V5-R{+2I
z@%Y<;mhUGnzqPaa%iQhCpTGOH63x?qeHHk?Jg)>$%GD)#Hw>Qw|2pu}qq4C|+%C3*
zz2K5xnIU7CViN}nSc0sUfsQb7z!I at Q2wm@wClk7987WKGg&s{rEur^;Ko!gwWQ|z#
zU|8sz2ldWyf7G<XsX)vy&9EtA(cYkDCbhLf4~GoPK%ZXIl-|&k2#L0i_U3?Ir>)jr
zlu<eFo at u|Ap<tc_^U3H#v at oP73RoA;<w=ZjF6Q7<QjBMW6yq2Jorm^sNg?kzdflF=
zD7=I&g#!PchVpz~6hG(66i?6>p?G2;{v%{>UM&JnFoOuyH^(8uPnSL6r3=wBl&@YQ
zM0WTN6z^WN<`ljLv$N-X{@4`2{?)F+DOeBXZ#^u8JyCV|%nJ5Szm~P{vg4>#nX~=i
zj(Tef?}6s*TK*5$;D6=#*~zlpKrw4$AY%Qw!N=`U&rwGxeqhr=Y4+bZXVbCA9;@ov
zyC<Lff>D at nK?5_CPdeef+2I$^3+XP+4o^yMLC$6y;ukO4W8R)U`D}HK9E8mO7ifp_
z8XV+oANbtB-E8Asd$MRPv~PKf<Jr03({~saBcCxxlbFH6oqNUNF3b#bf`g))lIMD2
zMFiKJE5O=Z1j?HH{a!IS0-k#*10(JuF2H<X9EfUl>IA0ZG^UAV%~j)!A!V@~*nmdz
zD?qVk!Usf1r-qPPauR-#R+2gV26_X`UnLn${~360C>TV{BTT9-5ZK_WZQHtIrLP`^
zU+1gy``4{rU03g`?F@%}n+!{~ud1(GIlFa(f1Uq+>-zt}`oVc?=7G3n^a{<iQj$g#
z*Plph5yOlKEp#9OGfAzK(5M*<r_5+FF-_2+ONC>!m&`!S5}I=uX;wG`-Z_%Aa76D*
z8S${tf>ttR!m%W81mS=ukmDtlbRrt at Xb@47=#4+kaf#yzeUtHcIAN)U`xo>H*!+Py
z;qtOZiS<Cr1fDL$XMn6zwzGDL$AGL^)*NkEv#Wq?qaACV$QoBbTf!P3>y>t_RU+$J
z#U&*+16kkXS>r?>cz0ZgVmlBAtkZ{kgy<{DAWnW2pu2&}j(dv8yg{6Hj)QhVAVN8N
zm3x`UeW-wTguOszw+}W%zoU_Vv?E4=%8qwGv4#yLU=D;NP}%Y9Aga5PdKEWavV$8j
z4jZD<x$O>>?4WkO6)u6{_!Ou<N6^5yw7Y`6f8_yoIhWlv*j<C2@&VNpf81rqv$601
zyANT<^N?|!?-ekkB^ku=$9z8ms{D9oo<vZdvkI64 at f1+m@hm-!Mvy5`cD!8ZmvJw^
z-~tr0&C40+=}!UeZYTj%>3BBNmx9l5*pDdzRN0Yo%@pjzCE!Cx-h9sinICI`HR|?v
zc##kXl at sV(ETri$QWE8trrfJ+DlbLmo|LkTz`ZABMwfd`%Dl1UUXn6bO70mc&vRt;
z9adhNLGA&m=O|>YOPM#GtZ6CpM3J>CWx1mKrj;@V4PZSI%7y&QWZg-5u|rv3QkJ_&
z-CgC*jVZseq at E{?ykn&-J97P{?5-5XTk6a+_bQ<bH#XN<ffwJY+?y(24{m&}p~}~T
zd>bIEd_7{ZXo1XloM{g#vkP<_GM9jIFX*T%UIubwsSsw1{|@w*OXFw!_aXBvAb7At
zxWC--KY at JM<?k#FOTh7b1D^Ya;3>OZ`~g(Wucxd^`~>-`idR-C{)D_=`74_*Dlrf>
z|LniKR9i3;KH#%6<PDH{#u514-UwN(2j2l5klpWs?KAW{ArsU)!h)>ok?#T#G-5H=
zQ$Pe$mT9H?`m`Xv=>y%{I`xkBu5P{%^o`S`&4DQu?_xa~%4loWt at jIDvIDWO6%Ijc
zXh6SEQtyu?dySaxT-v&k&Iso+*F))e{D6wnvUQ^qrnR$aON*`~hEe=Kj+~DG#}Qs4
zOtr0JTXR!~zOA*jtEF4-ZffpmVag#hsYi at ND28W@%wPG6u5DPW^@lBeAgEiBbmC2|
pHzV|oyS6rMX%E17`s-+xCy;t8&3N}ry@%XysK!S3b4b3m{syTyoD%>5

literal 0
HcmV?d00001

diff --git a/images/lib-sparc.so b/images/lib-sparc.so
new file mode 100755
index 0000000000000000000000000000000000000000..7feec75eb2222139e80c33095d8061bdedc6546b
GIT binary patch
literal 4536
zcmdT{U2IfE6rQ{7Z3`5vfPhNkN*YrlTo)(=i3ztXOKB-Bl#-w^xxMW!?VA0;-CJyl
zk>y7pG{(gE<WJlfjq$;T2Tc48n~LItMiMdM0h98hA+d=Ng8 at Uje&5`g?QJ0j9(?d@
z&YttlIdf*_%+H-U80*+#gbY!kDls2A3aSc_%|g_jldxHYg(;fE{bG at C$A5*)vqF&J
z;fKOMu%TEOI}l?J?6t}sg8d5YJ_}KTja&n+R(u9hb0c)Jw8gz&cS64%1?w+_Lse_%
zZqfeYo96k!o;gDs)7cB(+>A9}o&1|NF#XwM^CJ<jQ<!r0^RHk0eB$R=bm^XF&(6F0
z>Sy!*`000)--fD|vJk;$NuyD7OktHrS&HOIdej#}V_BDF%Y4Jr!l;c<Z4l+F5N*Is
z0lZ at dZa~Y-3nz{3V{Xin!gGY<45YIeC-1pA&vAs4%p^VG?1g}-f7qq!rjiE|!fD^{
zbSDOqc`uQRrrdl!kr%0CU%!>lTI+<9h`XMPI(_-P9}PvBxM=NY+Z1(HTdS-!Y_mck
z<TUsbVk2zmD>|8cC=Y at 87cMc@zy$smNomv^SNgaxYCcu^W$0h}I&xvul$5>#`bl3m
z&p|(}^a<!(H;j1+`gh0?*8<wA`5sG1>s+%+udRpAeZEia5|m5*(AVR2qgAEF?_4}l
zd`t-YV7YvA)Vz3<3+He{?~*aIWE6_MB2*C72Fh$<U-6~brQ`_Zp;O~^hc3(LxBTfg
zB7>razB8F^vpv=RHMC!iw(G~y_85B2_UGH;5!I)rN}p_Ds<JTp^}}iSD_s5Cl-_V*
zN^ks at F{^EHG+bKn!TMt8{pu6tLeZYT!4`85H-wGDqSqK}w8fF8-q2We$#}P9%l@(s
z{bqNSZ_tOnV=FN3AIIxB9*nJa=D0NG_yT^WF4uC#_&*snFL3;I9M2e5k<7m>W~s3)
z4UAvTiSA>d4Ot$HAF$oh{@u^d`8fKwP|i>F#+!xW!E(qJbw%jx3*{J2F_zEoD&J&3
z{;mBx$q&}$b23g~os~fdEwrSrh_2j^T=P6T=JL$QmM5=4zYaFB3UTK1Y&0;7Vm3Gp
zo&)9{uEIW|9oZMyD}sBd7Q7fHjEs7y0LgRoZ7|QJ`fRy8iSk}Z_RE000^AOH1DL*d
zM*L>{M}##LiJU0^$pk at v0=nGK#G*AC-4JfV=VW=f*=n{T;nk7I<B{goYr;+4iFkOc
z>-ps?S1td4I$QaXwCDB-EAQoeIjFTv)=O9enIWrhD4B|{OvZ&ogKmCMSn-hzYWmX4
z`Ih~OTt1o2Oal&VxkSok1*PpvdBTz(CCf_;LzkZ>D>3No&AI7>u=>4hE|1W at c%~mA
z_$6W-E0>jRy6I#;+R36ezD}r;O{WtX?=F|fgYf4X=9)gEn0rGL*EPw)di at KMe%veM
zW-yN*68*^Q!Q3zK;~tXx=$Nw6mp<G}Hkg=x*i&-faj$8TOAlbH+BfhEwfijZVY*$E
z%RcRfANCpbP_NG-49xZzi;@%vQ>S0SXK at r*$D<ABgUEoDANRK0-`w-`TcB+88wN8z
z&J5m%<eg{-uqMVJy#UsJ1^9tOwwR)@QjbC^KeNR137F at MCLQl(6wnXjFfniB${6XZ
z{oa61Kb&2-llphn;F+WS-U|4Q!w)>|Y|?)31^n=3H^G&*pjPw`1AY_m16OQ8zvBSN
zo$MdZH+jaDfOUJ6?C)1#H4ff0<y~_H$~4iB%sUqSaNp)xEzj!?U`;yi7z!8{dEq@%
z-ZhCeX}?n_U_3?A at 4QBk+IBB=y at sIH@$5eh)};L?F=v|UPokO)#I?oou-yhQ>j&aB
zpxj`tH0gL62PM}6D{G(Y3afVIo}^vHmwS&ujhXvQ8u2|Og?jl9JLd_+eIqf?4QjF;
z>?(h9573`upuHgf{qHGMv!pQ336Na7^skptu2UHw-)E3vj#I!sj}rJY1 at JwTz!Ma}
z%p36)3SiC&@U(XcG1i5&a~}iCIi>$XiPax4 at 4`BVNRE7$)FVFjku<P>4*-uV%>Ln?
z?)MKB*}t`DsYpAL&-=tS)t&)6+j|OF&bz{cn1%w%wf_;|VgSE}d=Y9ps`;e)S48`A
zd@!(oAM5-AGrwQV=pWX%X)}WA-!H&LK#k?vAy)Axbv}&{^I<GRJehwZ#QYl%17D&)
zF!EtoI^W8FE9`Q96y8Z+Qds^Qy;9&WEEU5;e at ayG&ck{!4(R#v--*Ucz!BONer1OJ
zb=pYF<i9bB`Dmmn-;Mn_FYgWQ-D~yZjTi0d>UKKXcJ=VZ=xm;b+M at weJnIakvVCsK
zk>6*>9U2z+`tD05yhPkuyKc>TL4%Ww4+AwvM8BI#IgWF?dh&bk#D~)95#KFXp!yW+
z+$_7arMqQ&%+ZKl()v_nd2#T2G_%nu6CSu6acf7{rj`z;Ys;2hu^y+VWm89tBai2^
z&Y+u#r|>%V)1aE!(cKk|ZQk7-LzX(XwY0`6bv8fQ*|NPY3jgWv?%O=B^(%bFi at NgC
P4!+K9JNVG{U-AC{m?pQ;

literal 0
HcmV?d00001

diff --git a/images/lib-win32.dll b/images/lib-win32.dll
new file mode 100755
index 0000000000000000000000000000000000000000..e1a2d2e6d30ec35ae4ada8fe0473ed603ca99e2f
GIT binary patch
literal 16402
zcmeHO4R9RQeSdFvWv$W4oGsfp;3nr-1RBsuI(^tAq&{pZV8_ at -wh3SE>U6h~4xjGS
zyFFv5J5enQEQC9DholVc1UyUwZON2|wB;k25!e$$noM0!n{;S01F6XvOj}Q<!_bhR
z{{HXdcK1#)AEBvf{GWUK-uu7*`+vRvd;50x-SxK|WF}+GLYkRj>?z~~NpU^<Wem*=
zKJm-~_Raa<U-1;*`27{zhO?#EXt6L<OpV0SseHcR#RlA1v7C=(^Rb at ITVo@Ij2mxk
zyr5aJ-qOq1M!tY;ni$!@KE>E2oUxbLycG at HSS^%V078SY=_qnaF(fKc8F<ngT||zI
zu`{wV_DL at 65*>(^I*43lTNvvmbU$O46N9;6RFKTo`hoFr&)w~z_jTla(u)kC6o7uV
zr9YlYc`4v*!pD$cv#cOjkYsJs at uDOYer-bo(OsY^WDdGye4tdK+BUi*=~4 at 0EIA!_
zB|qUK_)74LglPr8tfUh@>{oO&W&x1;xw%4G`4T=A{K)PAfNpJTr$odk8$%*H79oWo
zYP7arB`{^W9z-I##Z(Cb=sLOtV*fm34<nHymm-A#be*dN=DQRNPaqM$j|)`b0=n*Y
zQ6DC{X(XbHA%y^Rt2zW`jIPI#i0+eA2|}CEx>|UcJxBarMj|>fh{!7tCG7tSY at d8}
z{EcN(z4o!5W;>c>QREgwK4~?d`g at 3d@yLO{A;|~6bs1%6rGJR%$KT=~n?7>zz&A0Q
z1^w3XH>{~8#B<_=*L|3T9JuM{SG{z{vID!=lsPf&*)zu_!T4$Gs+V at 1o?P5~Y8`kT
ztD|1T=9ndXa;gj1 at uSwQJC6ALZ-jv8)Q-sb+uU0{)f=6>t=XD{H86^dcnO{ze<L#S
zFO%OXFE}jJnD(4g>6w|C1MXXsXKwxN9nVKdz!>D5`WC1srXL|P at 7iO)F!l&(eCkPR
z&7&0($VW6 at 0V$r6GClbn?~&7AYkxDq`&0pq?Qb4qG=EOtdoT#XpY~xZ2JcLJpCLQj
zAZ-VFOg<0CO`H%bve!g18_`6*xmF0X(P2J1P~Vy3FT&;Cr)Ye390>?`x*2`8|Nehd
zHu-94>C_F at 6d!-i=6j(_RN{-T`(2bi3_Pdc2=5{>G^ia|Yds>cYpsdt@@qOQKrj8@
z)z-wK<L}IPEfa5gO$V0$HPr_X&NN|6$N!y|--M>oMKJA|U(C#mAC1E8M=<{FCr%ra
z&mUOJry>*7W8%f~naLlVepbiN;aC#-PreFOtQ|)N5AHZtM;JJOogRms+n=H$jK&y}
z*)x~k*UzGqkEwjW%J->!kIHi at 9~C*62q6ExHuMf+qY}S6UV9XEVh%vm%tWCl5mPy)
z%Ch%I at 0$FG>;KX7__?KVE;}%kzTGLsGr1gdHtcfx+ at WmAbBpV8sZz-mdxdjL<MY~l
z*d7pjZ!o=li`+|V{#4fqanf=}Hs6sDfubqS=O1+sB>Q~}-a;97MLc!*xaBFvaL1ez
z?nm2Wf%a!megWwO(vOf%B58Q9v^Vf;UGMrrrkr!HOXV{;_ZsL$xGlv(`kG9p=$5c9
zH8aP-qE*PdyR#m9fH`ilm at hEaW(*GI%B5k())<3D*JZ3|jHEz_rw>5COke2j+tj<!
z59h_eSErHEu5{7+e;)AI$<VW4W80Fp&$acoW!s8v_qILMcBbv3_U86`+W)Zq>+MI{
zUui$p{<C(LxF~UHq9w5*aZ6$(abMza;>pB`#7l{vBwkPaXX0lGqocDU*#TxTCbqiR
z$)1OE+yl#@pCNR#q^408Ezy?xJp5XC;Ipt&j{kEe-bSJ5s1<cL$|=01!s7ZGiaoj9
z^{H%rUEj8?UaIJoM}>P5qC0gx2Acb*yR&ZF=00cR`mNg>hy9tr^aL=!7GC}682N1s
z9mWV?@oP72kFAS!#yjE(#&K)K&96P4W~~F|Y%Y_ at 7G<Gz?e_H>ds;`b`Jp?CUQ0*3
zy(`|{BB~t-2U<TC%I9OlsxRkD*`d6f!Rud-8Ag3+xKQ+BVXRdr8m&6q%ZCJ^sbbLa
znE4=ol$5i+j%%HGYhl=uvO;d~dFkO)k<D|mg at N)Qiy3><Si<U^QLo61aVi at tQB9K$
z`}Ts7vC^t{22v%L856SEu6G7=sUc?EE!!igXLD%3N7ke04jIJW*e_9w!J<4^%HG9{
zNr_oj?|37lgZb15I^HW8FNf|&A=3W*`i;HJnED=xH|nG#q~Z0#l8{s8TlKI?`A!&T
zaJxbw5w`4C+u82<;^w{{X1%%>mfK%kziI8}%^R8ZQ&Q5F<=0;!r&!itu8{KB1(v;W
z%Z;1Y_prJf>kJTGcg?0AXj^wb)ePIp6v_i|hCS-Y6~P(IGk$Rrjh6L!TpM_V>ve<w
z75_2>Q6Q{Dq9QFNjqnTOPf(L_2>S!B))szP3~C!lZ$i2f?T=Q-A8tXB$QOvco+DNx
zzK8dN@@eV;>VE~vg};N!qexN5!E>v}_?HO156z?^aaqV~S1^7>4KCS^*gpg3OoJN*
z@*jbNhe@(%7_^LkdI at +P0d7&|jy^Y4D!`~u|0C$@krw4f``nUS+~sC~tq0{cV50+l
zE;PE5xITcyng+AQlBZnB_$8!joyn3c+Jw!l->_UZ(Cf#=S#<mc)L6onQj{~}!ADW!
zoE<@DgT>KYHG$*tR{0Z;_-U#PrPHmlmN@&o?ntzNwnZ!j)Jv7bLeQG+Ufta?n$}ZZ
zab(Bwa*xt0u+Y$R`aLZGYWkXb`trRgGDl2bK2Bv!UrS71zE1?uO3RYdmruxM+mh3l
z-!0oCsMGZ2_sDt_-PQEv`z2~ISjg$iCnaW?<xgLJuVlQO)mhKOqIqKa@~Q8Vbu|l6
zVC{PMxn2Lu%<amYHEc6o7#YpEyJK<^`_t5jR+`krH6oT+CUkXKg&>HYH(1W6<)V4T
ztrU}13Rj!YAHopiQM`aPh~VQ7rcvX3{uhwZO+WGtP;k~5zWJMfZto$wI+Nb)qA|D+
zF#kd~UVZ)*B!cSy2>3#Nsom6I+Lzc1`63?0XELLiH8lJdP>h*NnQ4Ef;j?w?n=m0S
z1fB|YOW0)*D$Hx*rrpp0f(DLieWRoX(Q15pv{h%(XTD^L7$PpXV-ODnPMoia2oVj$
zl2k~}BVLVl6<!8-Er>%B$+;}z(_Gj9?H3{PqMbf53|Qzhy(ejh`7R3Z1!+^DC&Vn~
ze0>v%U$O$@vD9x|6S<l`-n@&q!tSub?x at r5n-}y;z4nVO9Wq~QZ~<x1P_02^1zX?L
z3jZ~#7L3fA2zlrO!jI9<V0Yol`P&N`apiC*<}%~0<x;U`u`k_OYAF^9p4|VnX7lM>
zIfHjB{&o?)OI{{hhz}DN6miFqWxPMkxPz5)-jhWHltH@%^9jy(+7FqxpWJCb{PA1N
zZ3oK_kMGLuGk0BWMmCK9>9ginzVyQ0HRf;LWH#D+%~ITKjCVb7tGV{^XIpOW7`n|d
z8*j3|eMP&uaD&+pH+vs9E`&Mb!oc7AWeuGDZW=OmXdu^;_6o%k%)+wg-)K=eXMy%-
z^c{;czQ>MO)_#mx<uf`4WhL6LSzu2XYa8n{p7v^&2k^_3b+jwHIe_mOHyOQOAfWBk
zlgKr%-f`=0Y+%mAIp6`B at CNh5Cv6%Nlx at ms><w0?6B7dHbsn95AX>^hWZ9;icH%+W
ze$-O}=UJ4eW!a|uX;Jq1-ii9(B5}4AR{_(wK8Hl2C_f_0Hs$nsDky3ixc?CCheZAh
zQ7+q*Zx^(OM4nOoD3?6&V4+|d`EewJ9kM7lK?8Ltvt_pk<&H#Crnp5kw<_h8LN?_}
zp=dxMn-o(lqM8MSSA6|%=w}IOH{O73t0->SiHua|>_)VI7!ViRWX662%-+HIuc5$$
zzvl1gM>`-mi!lQl%myhSX+5DgiKZaPi>t=yCmxC;!AG?2!L?suWUu|GO)Cr at ZPZCA
zAkd43hCHx at suj?uqzFN)Esa|>=#x)`7aH;y6>H$D3WJ+0_|St at Ej+GJbl){Oz5e=G
z4Ussv0W9qsO#TY4wXEpH06`;?$;WW51OUns{z2t*s0y-bnE?MIMKfQ}tiiRG><vXj
z5=<V$HGE&vk#HqiWF(~T9HQ4cEqD(!fUm-NJTn5`Mk4<SKNEt at hp;iEv&F_I(0*Lg
zRK`^HB7L at lPrcx#FYjkeW9THuRQL9CeKL+P6kjG^;Ww&M{PuK_ioRXi8#K?PH)tCp
z9H9EJiWM&lyNGk8sZ#i`tRRM~z+cLmeGclG;_GucdXY^&e3<(5K_5DqHrKd2qj)!X
z)oLN!j}{lblDZdO7ds<(t;`;-V2FG-Xky64m{$BOWs#rhWng&ETWc5f1)Biq6(9zj
z;LK^Ys)Y%3o7Vb-SqNh7XGuf)&>Rng)`#Q>+h^mW&SKJfDD?^RpqiF-T<CN57<+%R
zNUJdDnEyMVD>09^KlHLl!-uU;Cm7FVJISQgnATvq8vhBQYT$8TXbqODF at 1=@lU)_i
zYWxZkjg-mnscMx~T19E?l&dJ6%M1@%jqR*vl$nmPid`%&PRKT|S_WpMm#Hyb_n{WT
zboN(cx=;ETbszj^9SQGCdZb4Bn9o^i*txA5)BS>vQPN-jK++f2NZ;>sR?=^)#&pwo
zDE}zwr#_H$IxQITbJsqfvyx8x*APwj2_K`RpZP%2Y2O&)+_lH&tfX(L#&kbZ!3>Mf
z2{@He!3=uC<@`>Z%cx*<WWJ>}gv at HFiPhO?)QVJz-q~oR&WXiZI;RrdS$$A3-?bYk
zVLPWe9tK6zxe at 3&X_V)Gg?4pj&ZdvFz3bq+)2v#q$DPyK6^5GedS7$-448!@Dp!r^
zOjcvM at Aomvt2Agdz*v#gzYJ)U5JH5hjs(4Gt@<yYkMhQ7HKwzt8q at t)1*79RS;6Rd
z4p^Zyq{mR9;cRhOt at CU&)mF?#qv9Frs5qQEo`)+mbI0 at 5XQTPm+tqp9+4NB(=)F75
zs<$dM^t2KNy>s|6&^6BvZa$+o5QpG at KgNj1SAmI&QI5^Je<qqIK at -z7l^v1ng;?eE
z>_t)QLrpx-Htz2wHmaWsW?9EbD*bDuvl6RhVXeR)0+oChnv<YuMsJWQi%ex0WwN*k
z+0}}V!5n$SjlB%4|4h9?l8S$H$zq?vfQ{lq-*)sG1wQKdoZMZ+6iu0WMdd%kB!fQ?
zSuDW$F<{7I`uCWmIVv*}r7%CJ!O)#tgDlb-FV}f3Jwk2(=!jwLVqn7l`5e)NG~5o%
z7?89=O3rCu^cp2Gze~N4e2*O<i~>pXPzWQxKRbfLxAZR+jgL7B46Pr&^dCx^s891#
z!i04GIWS?nE{4%I$VeBd&t<^0fsP`J#$6tAlslrBqUi$7HnbyCm}{u0K=Qev29pNH
z=S;*!VD#=n_L`txDEd}B0F2(jN}8_$Lu8T$5tYy22#^Lz^DGGTIxjK*1dQBSkrj9v
z%+XOz`Mjg;`Uz<Km?w^BND!Rp>odQOFcKu^OC%=X`OASJ=li|7f!PO)KVCf*J~5W%
z7ox3pF5g_C(S9BTW`BrJ5g6*}%eq(f at -cs`FuwFBYG}S!gE<LIGdPna($aZgpx0-K
zSxzh!80<>a;u&|KJmjQ`sr(Sm^{eV=d4Tqpm3lTmSkP^$fq|mCOV at JQysOKD_<v`m
zLc`?*4=&)-d*FNnp78N;NFLpAW<77AH4BLgDsooQa~PuSg!m2XD(BHq!vn2TRDW{7
z>PdzuY{sp at kGk28)!h#M!0Kg3T=avnDSYFhE}4Qelq(FRa!!W6`h-#9LlASa`K*^s
z<+69-M2I$?j+iK|dN=i8hE%EJP+#U$Ya^tvxctJ at -PMIZHpYeExU7I>-}X)0)?eT2
zY}wkoy=Sx2*Sm4^I(-rk`r at CYPKgfhk<9Sd`1l=eYG)j-s`&#5kaM`q%asD`@On(1
zmv&OHT6z^{qg<yjNL1;a4vs5~WTotI1I}~PnHizgNb2 at N(J7S&@S)LjN1R=5v6L<3
zrN(#>>Fmx0ggOF~odqM;9;f;sd9o9h<HjHCF}K&$@HkrCVK+4zG$T7Q3h&5s=Z+(4
z;Zy3#)r?dKoLeW1Bh?-aDj^IRRZAw`iDmO}L!lJ1AL27kz|Y{69Z3zj;wX&pP{~bu
z<Sj(pP=3VCOK;C at AjN?Q3+1lR*-hyv-6C~PS2Wc1KtKf#ekyl}xvvhCI^sx9m2Sdm
zYR#utfi(J6W^2EO{t+MsGI0Js9L`R7$btbT_4b0kUr$b4OQ!+RuM&CW8zEZVX=j at p
zAaQ6KXeUW}`qP27MGjCfigDr&Q(GKYDv3eU!@AQg=G|OJ!bwqY5dgk6K at PI5mh;@>
StOFUr<4dVbQ|%II#s2_!9zG}l

literal 0
HcmV?d00001

diff --git a/images/lib-win64.dll b/images/lib-win64.dll
new file mode 100755
index 0000000000000000000000000000000000000000..ca94485c04b7663aef4b64976ca34609a1b790f0
GIT binary patch
literal 34777
zcmeHw4}28Wz3<F!mMjS&L5NZXSv6p+<R63xigiO0o!A8eB#1~m*(94}b+cJF6B4ZL
z1w*X+*7QZIZEbyRYPnTgeUJ9}6#ukFpn$Dfq<xlNt;Jq!gP}fKEv0JB{r=9MnVp at 0
zHSP7?wwzCP&N;vHJHNl at -<+A8S-yTyaVv_Ff#2AeqU=CS!OyNIzidYF)H#n$RUVrB
z>^VEsz_aJnw}-oYv3O@&JlNrD4o0J$hOa5)i+4wT;i#{A<r-f{XG^F!Cnu{wkglsy
zl$M)MQ#ST at T&dJ4N~cRv-caWGvR$slN*<6-!_TWI!_yH{UU}eJy0SEINp1=r1sMvZ
zs-jF%6yFAw>4g*n^SYE|M9j#9fOiFD8WrWBBue at 8FbEduu$25E6wXY^|E0-dBh+gE
z`Hfs$^285%qz0c-*I3*VG=c!uQGpLXQu}oLQi5Np8!nD>L?6t-1SY&R!Td_2zqqNZ
zi>k&laq&~i88$18!^I&^kJ*Tr6TLI-xPGP7UmWIm%!Z99Cmm)v at P>=4R at W1B9bIDh
z5xsLMV+FtBA1*c`Og=OLMcIrW;mO8>Bn9w=zM)8Gv+&IzfP^=XO059AWhLc2UrNys
zeuP(upDpCMO3IcnNDp1N<41TOrA%r7-oix;up}GNFn&|;n~$F at 0I&Qa2Kg1y*^eK!
zvBeCOasggN8OxtZc!%&KyruZr0`M+c$RI=t9fr&2r%Y<_yGj-_k11C(Fd75VU6zVN
zY0z83<r^b^<pGZjUQK1G0eEGlOzJ$MLye2%3#8&unw6#lPv!p$T42qi3Y at 6*9rcYo
zKNX3 at E-mrYNCjGf*8ifG at VtxWgXmR6JAkMdleN7xU!coreY<_v>}qA9ICsugrd?%y
z!&QOA-nDDA#E*z-|AFpLC-c8hq9|p<{RckN+V`4THk`=s2jDTH_lB1Ho&0-=N&m3%
zQ7yS>&MHNDl1j>6%$?&`9vuO<u@|(&LBhQB(;TyVB<Z;c$-d*R+^t7|{OBB9M$Ui+
zOiCu&C-qNMZrIiLw#q==qaiJsF}D<WTC&|+Hca%2iUj8++L9mSZfzn{Bp2OXrzkaL
zhexO6&QTcrO2CC6fy5zJ at hx<Fh}`|lvSUflACc)F&fWU&rX&M7fE?@2A~v7(>?P#n
zq9HPH|1o2>Hjr}%(j))kp?XG6ZQ}T2)StA(&&OWq^RyK!ib^Ul!LQ+Z<j&a)43NnQ
zgWAYe^gHl}zl;E2H3W+hEU`!Hd)=!od9&wqEjfv-`u_+pwjUtqv+*@B899bgO55wn
zMlD8kuP09=_j=}u6c>F8a_ORI1NpCh0^ot1=Me4nyoE89JT`JKksZk2&I`YeXygun
z_IeHggA_b6^4{3k_X+pN9;C>=eMhza1BrYC2GbH73JSHvjRlJnKhYAA0>73p3QD!a
zj{}JxbYGqH)D>|vze~Kn0o&CkMiT#~CH^#WY%<!yJMP3D!`uI2Zhry at X4$oW9vdU)
z>;VwQkC_F}qf%nes6J3N)^}XZy?F}|21h;)x_$4c-QQ@<ol^}y*}y^-)>w&E68Zk&
z#GdZ+0WCW~pk9u`Gw-}RHfEMYiNzaxJ-5ROV+dN3G)$6KNvNqMNy)z5+Ac8T{b%G7
zLEqSG3VI(%63g8FPk_eg|13K;`Ynl1_Cpij>*<7XC>S|J at W?i1UcZv4CkqA&76%g5
z1%)HO1@%A at DJ=<Dk_riXBd`Zq5d9YN<*1lpMrOfnTHo<8jj9_PAEjww<i}Y6CUXug
zK>8hc6Y1SZGn|pv2ry7zP#74fF7TnX5!g5K4OS;W4&F8L0;?3DV$YX}$`1fwv;o*e
zfEx)taS+m#UV|a&=VSS;%L%fJASl4V!~6sN3rDUX)53=z8AfU0F0Ki`Vju!W-`g%D
zpUOm!vh1x5%&xtL1YWd^q9tz{2eqV|x{V86rf(PZr0(C^s?vaGj(41X{{iE)zPH^*
z&R{Agy8N?PGEkQvk^V}a-8ZWC&d{27Y02t6dBo`TvHgH;I;tf<>BXRHJfS6irzKt<
zSp{E>{y1%XmE)?G%)g$|K48pBy84cvZ7kNB_w@~{2^YH25A({%6d0bh0ngRI+v{10
zD+TmVjVdNQWr)g#NB6NAVB{z8td`ihgEdp=Gpr>&xm1(-ElQSowM71V7qBXKS{8<N
zQLqopyt`<;9ydSWx$`5SK{!<2x at F1o^+qNW5s>D}rJDNGmL+s6(EVE3aO;*$GqYW}
zcaR3&^!bI+=QXNxA6Ydi_mRpOH4wKb_mN?3pjw?-_Vj3m);C;Oo%BzsNjz1%<oTY-
z)o#Bxuw-XEtM4hbddc(gUkcWI{DC}|zBw{BwtPK|brcB$!?sXJ(VFw~kDzs_JGWfS
z1U%fj<pzk?{Sw%(o>ZH7y7q#navxd7gxJT0aLp_`Fq$RX=Wt<Cn^KwBw|vP{aj#qR
z)-HKEp53<-f*gpyGB|n%HG%)0^cN7vKkk2OWR9)<Lf_uyG|q1*Xr$q=JwP+`jRi3+
z at tl_US@#SYQW|MUX{RA21}eR9dVPVfatF<IWBISw!t~(Lf^J{kcRa)J^&R&cX9WfV
z1sf`N_{q5#2QU_)JC5b=0Cp|<UE*!D!jbo|4v^KpK-F$z)v5v8kXq{|)H)JJ(;4|G
zYNYlLZOhSHz at j?o`Bfn}K at E-6s3RTL(IDSg(?1+Yw2)$vf>;1$y at A9N1)EXHSV+og
zq+A^-w~ofk#z2ygk%|RS&>Ki{WNpiCVg%juHQeW*Usod9>uCd93@%{3U%LR~$??q3
z+>dMaXEr8_<^ZGrx82#vOFu%XF=N%Bw&dS17ED5R<4xK?(Jy`t-w)hau+;3oAJ3 at V
zfq546-qzG3N!9J9Q36BU(vdohqS}&|dtN+J4O4LcCl~EJgXSGLYGC%`NG7xUpYFaZ
zS(Sms!|ll~Z{K at rZvQ9|?AtXZFt8{I9Bs)@a{Fk)2n@`<1`-4yLFwrA)W7=P^X6_n
z0}55sfUNDUE+8)}wHN$(B#4=dJX5F*XpJz#{ikCYll$=SNF53SYNVjF at 4dX-txo_w
z_p=5_fYxB{)>o0Y#xo`bRtkMvpiJ_*jN~QN$trJU?!#{c)ZYZuS3x3>EHT#S-c0W9
zd(W4<^)V3Wd(Y4H&Fyan9O4Ar9SXU$v~q_R2mxwPM at EV;8IOKt<Y8K=4CFtVPm$JG
znRsL5+W;MzLbKK*HA*Wc?8H;320|KE2B0`l?SajqZsiUdkp#V8U}`*~fur<K?!z_8
z*5OUPydsH`Qjyw$sJM+P=At}VgXw(JVvV$5b2QbQyg#)Xxm#50plSz6N-<xPrs at b2
zZ1n$PJW0)e&YnNA4D4Vr<3U&}xBqrfX&pTB3q;m%I>_e}t?$wUbHOz^dp?*O>-*jr
zGZtZLI16p_Oh7DuB at T|w*n{b#`xtsYJfD+9wQD|k<nVEl(T`O$s{96P=+R6zUnX`9
zRH=!bTHn$al<wb;ej7FJpFzV!PYrX)y~tp0XaINI2#n=x1WtGsA%A2e<frjB=_y7Q
zLyCuul6yU8AxpNU?2(IsWyuG8tTjCU2NGyWHV)0kyqffEBfvnNS4;Y7V!4yD=n?;p
zrNqw*DE+iCZ7ly=)kyC3>;i-Wsc0J=2Ql9s^~xo`7iH=B1}*XGS{f?{a>^hjtp;La
z`Clfw$=PSjLp0DZQiJgxtK#jn*6AOvO+1ymbsMo8s5zu18%8i5mOV{fZ7~yq8X<}>
zMzX%<Ve%sF8|fheNzX7Cp+aKOWk~Gx<U{(&8OrcpPcBl-P6^KpB!T)ps*$J}Mw0FT
zklZ(xKcgC{ft=d_7|W+c=ve;!Rk&XwBFrgnz(%eGrPe_$Sp)ldmV*;yqU5hYnYl`?
zkJ_~z3-0-4(Onl3{S8=fCTCyHco{Sn-$-L|q+lJ5!HwFIT}F}iN36bQUq~nzet}MS
z7=AGZ6CQ@&MmVA!(>;?j0Bgu$Xe{3cK?$XFEdS5Tu=xFfi1#LbJC>h~LJjkdFR>>v
zHkLnya2K{9drV{N4%&dMEjwCU_HJ$2Teaux#?4mkl9#kU?l)!z5_4~Z!qD$_L`Ry?
z$T<HU&wRpnp!KKd=ua#ZT8<vDI at H+Qwcs*1I5u~xh(9LcNonx+ATHs(AYz$6Ti_iN
z at b8QGbrDBJe6xr*ig=!gCyDswN>2Z5kuMhU$3(nGl*@WAi2TE8vBY~$z$KoDVHgV3
zQYrA9mFH0FnqGcrhS*;fC?j+1`OTF)?_0)W*|MG$Ua%;iO8q at pV0k!t#Z^UDRh0Wy
zcSntIN61%JT<R-q3K>CPk*_cw+F0x>y}(zBP{jVyl!|qQx?4JRw)+}1!ktmt{x>?C
zJ0rf0p?DVo=C=6oRG>S0U9__&>N7fh20bOfGXY{(oW%(?h+<C9mqM>8Z1}puH-tb3
zxE);^o8v}tOC+L1I-_mZcEr*IO3!ZQ?KDHgK0nWw#(12L{?C|a&t9N-A@;r06a!FR
z{vzR~qMmTHqMVsN1?g1s at 7e<XMoau#TQDC773HNA*fW3~1?)tjzKNGKiFl)kZx!)9
zB7R83&x!bD5x*{CZ!@PeOT-l-zEZ^PB94i8tB8k0{9O^J%DGd(_KWys5g!%taS<!f
zkwTV;XNY)~i06s8Sj3A(%xhWK|H`%?DL*WGyrWzm4}}8Zrg$*ENvTn<2pLt~@pvd|
z)WtiSLwMkLxf52~qSU59>)Yd at U<-iCJp`qSl`SoCs;oRikTsjSj8I2CrjW|6%fpcn
zrIc5wq(0nyT~#Nh7e!g&3Umfrgd|umea*G1I~3nk7mBxb#yf)1<`6>+#g+Z8)kdT$
z7&E%#fJNEU*q;$B(AjxickJ at +Xfw@jHBkd9DKAsW+Hl<H4n`WH7#AUDoqJ8lXo$84
zqb-q8OHFTcC`L6Pn*sV8+-oACP)uoY*N5UA;b_nZNn<F6`-Ih$Tit>Uu#HeNbo!ix
zFjb(VqU)FrJENiAu%WC$F5KCqw?be==~47xM^~H9ij=n$Jsb at i5T`>qN7eDX^g1P~
z>Z0azs@@%Cuu at mBsWWaUpLDgx;^C;#s<gOT;Za5TlB**KR-pV<S4XI$IR;xGH2!UV
zAFo-xq9(9#ft+GyfbIwRrK}Ag(5diOSs-ux^^v?k at aK<T{#WrlRr!<!PFdi?wSZ5&
zZZzZ at DjixpMDGgaL4rd=BSUWt9Ur21b0|NPmwvdio#OVNZh`sW;9^{8mmWck`&k)0
zd+Pd+ZGlUn9{2wr&;Wi5uj_a-Pp at 53Tdx%2oxtiyWO*<g1#FEG#CkWTya>ElGc6>U
zW$>^b1gLT~=&1PVdR6_()q0?IO}(xw=Q2oj3gjQ#pnqrD{SJ=f{`aa^tZ496`O1sS
zu>-iEv~)@7g3=0KVW>A2isR-gY6K$}C at OZ}O7O!SM{%=K(%#t-Dv4i<TZpcbc&wwT
zI~-{#S=LY+s4l at xPFqh=Pepl&fxW)#tb7rwTjNa1ezQx*9SGYcM7zoJxV at RQ#ph#}
z?r2xIEgHgBBJS(l>ZIoOU|ex~Jr)KlaAkJ2<JJYcjj8Av9#)vav3WYvhLYjUbZ2mO
zHn>~$nt8_3<DFD})ymb?iu;pU*ejcKRqcvpD^~^-w|*F&cV}d at MmmFrGAU5Ec4aNF
zV)Q;T<Q3v at v0WZ6B}u}`Rg^0kgI at uKNxYuxR`wpVR=J`&P@}k>p<Jf-JGgpP#>kt|
z(%Ib<2`TQp3}yq7&Ggc{HIvmWuj}!w40tyC@^DiqUQKTeyPn7zL}B(?zA>w~zL&KC
zd1Z>eqF%4BU8XE{J)HF|)X6dLUIXDSLvcNl^&>!C=P5ZD1e&i~7VHWst{se+>pU+9
z2ErW}5nPW7XkN~m?k0JU-lVu56Y!Z+4}zuZJYP;_96P(TL(tF_ir00*7Pw7zJt^=C
zbJm0+t%_?n>v_hyRLRwA)>YNi)z_|Ep|7sF0;9|7N|C7|hp3rel0DN)TIbc(F0Z_z
zMz0U7(W@#0fn}9dA6Hz1)81qlf5LT|n(M~f<z$f4$O<f_Ow#MtUcOfG<nIRvnOe%6
z{%vHYPlly3JcD7>nn4YfM!;||f}QCW1~Kz!_lgP>695F4l27$Lw_kwjr>i<P%!4g$
zUDx+?#!)z$p>6>S_k$=rV`Xb=R|u9I%^<O6#wmR?gBk!#P+zl5QBPM_$PJbH5Nvzh
z>FO_0(@mF;oOv5v&l<uNA=67V!LXLhOLzC7ma5K<STG)fkFi(L7BWrWm7x+B_XbP?
zXH<u}4BDl at 4u<0D%3!dX-YQmu0A#l_h*Bty4G#&K8N&ku#bvN!FmD2>S%hkrz`?p#
zu-;Cr>x1z&Qo5IOT^o#aqq+5RnzO+{Z)Ubt)Js at jkV}@zlv~!{fY8~rwoxyoBt#)^
z&rz+(ZPNAXWe}`RRQmL3{C+k7<gei!7T-BkS^FPAIf9fAKV-=x^cd1dPl8qLDkP_)
zEuBN9Kk?uN_9}wkKxTZL;C0A8PH-klKZ)`?z|U(#Vl$x*ejcR-Uq^NZ<U8|rB$T<k
zr*T>GgiQ1J4owJlR&OC17XepM&VLorcB1mBLfW at KYX#M&Eqi3RBx^{L^+21~N~1s+
z1nLR&4FX}zHqbQHhQp}zb3iV52$xY|khesv)^C70K5C3pgoZaa9sNRTc;|9K&LaT_
z!A`xZ2Q&)zBPoQOPZrRHo?#KIoy-z7DB_k-l-auOT!E<DnCmtR^X!<;&GjkNqa_P>
z-8ORFLjd{6Ch9hFT^@|hUAK)~7eRI&`d2glCq+ at eNzGv&Kt*9)kA#970sGNIf;O7Y
zIC9*@<QNt>Sz;<HfUXHsj=M;XPf&|ua@<97e4etb3Ef3<JdLbUtm`psa_T_?Lu@<w
z<-)@NPj)NfiB*ZNQ-9nT(!2OdjAA3Cc<%Tin5pV48kw9(Y)8*?=j#k7)B6_UQVR>y
zcn6kuG#quIr+dD5I at SZA^+&KSn+1aNkY7M#d&7EAQ47vu<vf3bqR!>{GU{EcOjKy0
zsPis2QJZz3o^R$`Hbr&(TL<gJdNVc at n=q*;>IJv63JZUR9s&lu(Km(K!cj#nqGqqE
zCYbewVgY0;4Lul(>BgoQyjDtvQ`K^@N>vw=BI;!K%$V4-@`Hm*iQ at VfE_#ZKOZXoi
zgS9m`Q-&g*TR;mTw(@BS$9W=k2~<&D1l%IFtfE?!Dw4}9f!@2gLI+-~xrphqaDgDL
z96FneEaM-dxwz6-J+2cjlw9Mkhg@>`gg0u at CtQ4agorI9Xi?(Ia4e4iaxTPN>B}RR
zxh`?ZrI5?MK=F8Qf)0~ZSLz}N64 at 3=Ot4Is*WHX6CKBrP at l};8&jg6&j>~64Y^xyJ
z{?=m#78DoW2zK6AaG`sX$z_yKvh4RL>NmZ=Blu+Ze(|~k5K?bh)O#hup|tlQV8OrZ
zpiWcgdZ%Z*y=Qr+si&!V7>Zm4SXgIge+>W8<StMs;YP>I;7P1uash(}PY2e;*_UM3
zPRI00FiLpymGh at iVlpN0NbL+YI~!OY6|n3aUd2NQQ>LrLMV94QWsC8ce`=0WJDn1_
z(@|$BDCG%$tn##c_53MB at -z?dFbQX<?x~DeHbG|;qS7q9H<*t~Q>Bon7ps>|VKRG2
zMjt~x!;>P@%<`1XN3zi*&h#i{Ab3_ei)Jli+-4U;bfQXR$ZGyc#Pw{{Hkr*anWbU*
zz))bhVC-|U)dp7kT&p(0&zr55O>daAF8gXGW&z1T at VVLW*lCb#o{$x0C;0gmK4w88
zius&ige|FjGzEZ(?n2UvD$h at W!?i_O+zi>%z^6Ec5B!1upObFCYzq0Ml>S|$OjT>A
zlMNP}gWSS-%uMB}s4mn+4;#0&$tH%@MqZ?bXK!uf;z_(gWu`VeuVg#<9B?c_y)3~K
zt>m&PoG0-;6;5P<J#ev0xf{i*`VM-Xia;6s(QSH3cUQc`IXiW2>MDwNb{hPqz9bxN
zj&!$#a1&cB(~4ql5`Y$-kVcK-c5tF(OQ at Bnn{Xp(bhYpdy8(;_BgkR8rnL|r_VOYO
zCoZ|lcVD8O*RZ^A>%|8*-tJxgX5jG*m-{~NQVakGdx}}Q73rIMUqJfp%*T+vrS}1(
zk7pVT{@8|JyQd#^fA3!ic=zP50{EMagGhhfdnMAp>UrQAWWM74Ju<KM+;k^0U+_}Z
zU-dlZ&N2?Vv%U(@tql2i&sQIRbome6XB+OOE8S<Wb6@|$<Ck1o`s!_40`vR(yz7DZ
zS|)M$N-tG<HIq1erFWgX!T9OW)!q_!<goiWW#5XTX79Rd-8sL%=Ev?$OBW4!R|MRx
z-qZG9{ovJa7L}Af{j at u8-~1tWlj~gd>Y|d8r;AG5`8T;&KNh&;YYS^X=lw&i%LBg!
z;5L_X`FNfjfBAw1Fk8*g`UO5}Yl;*#8=Y~oIW>V(;h(_*GoU2B1F9-&Z{Czl at 3cJb
z`vR%FxDBin`O2wzwNp!{xzUqZkpG%2 at 1u)E!Lq4&l~ZR{PW4UmWK5gno;Jl*J+-is
zYEGJ#;kjZe-5FDu&m%?N%q<p8uX<|T>S-SLG`A-(EdvxJzgYrb-gI3l^1v6VQ_%;p
zKugbRe(R^}p>c07+i~Bkv3FXO)H|{W_F=GZw-Gn0bcd<4_d`<mZ$F3-r*QwjTR at KZ
zE~UpS(`?BG$pFifX*mu6R+=uf?18IA0nw7_H5M#Srt2-(OqpJ1!F)2!&n{qc6v}j?
zg;y%mpB96JTj|*^imgZr*CIfwvRWo-^+Q2b*2v_)atJ`HcZlSRCTNXJzG8w_%j7qN
z at j&Z-k=$v4%7uhdQeX)ZW+dgj)}+1a1(BR>5?XbENYZ8=1yxy9DU#P%Aj$3$!4_Cu
z4hiu8_Vyqpkmga9bu#&7fvGADGI_5FS|=^_3lr2JldqVdbu#&{rkoAZQl+Mx4N`Q=
zQVoKH8Fh=4B|+V{1nB!BR{1$8W)&o!6l^W8NPSJLSwajsmyJW^CxS|eDY0z8CY85E
z%5qWNLQ$*MRK3pW4~IC%1)*=6wbnYVv)1G*5>)~_X4a~gwIokfsqb|(2ZtVS34&6e
zajX#(Jhqs;>TVawdn{18gqsELts<u3LZ)}%7J$OIU0GJ7$2}C#NoDfWq8=KkOn%k`
zt(Hki9ax-#b#>BSC24n=gx1KUB#4eBlNN19*LKogCu!eg(q1c*k|4UDOj@)Z?*5*z
zh1(=lPkXWydM(fwMe;5aRQIq*TC^Q4U|68+7BM+WrsaDg<2p)Ke92_DS|*QJATFhK
zb=F!XYaKRgIYupKt#z{2>t-!Eqgc%T*;8G at 0CF%b6zxckecMI<EfDZe34A#xrQ0tZ
zKb>AWK0D_KKuQ1o at YCg$ga7{)gzpsbkcg$c36W2a{?_zH1%tbU-Q<`n=P`O3L_v;=
zJZD|yVDA=qa`sp%@-s#36R}m3r~cad>GV$J|FJDl+=~C5fQskh_a6Rhw2ij?@Kg|c
zLbh;&$f=4Cud~>S%*@S5(dvb8_;7KXD9b?12jP2=qIr<fVWp4YN`p7ACC|a5B4XoK
zX@)7MtQq7PcmyCm<H;k>wIdwHU8Sot{7``KumE&AxY%iE2Spyc-N2z&-L6Q(P?W<0
zf at 7V4Lyzg4MtTEfGx5u0I3P0)j$CEYF at SD$Kdyvl51E4WG=SYIJF(4<fE+y{pnyGb
z;8f!3l;>OlqI)~HT8gVveR^I-;WYf*>iFln(SvgedHA_idUj_IvW?MRkJ-l9gI%kY
zNx$d8O+;>7pYo#x8S(e?JITWR&d?nf@;iB(`&}rIf+c0%2N;(bo28bx4D-X5`AUe%
z?Sua16dC{PgMVAXOIX9qhSUe067GiN)JCoFL3-24tSWgO`am9Zwr<&TPsWR+Uk3|t
zUMH{y-dSkDiwGKUS&zeusRX%!jZqvzblO43kEdbQh|~*6DN0!TArz$#knIA8_mM%W
zg%XbA)O{_=X}qw4v at _|&TQBJjw3Hxq_W{Nzt3Epd;POOFszwytssn}L6s%vro at ks9
z2k-RaIETtY;8-IPGAV&h=>*PtKVT=sVJD3i)E@#4jqz at kC=zEY2s%|{Rf~>YZh=$1
z_<eDzD>WOA#fMUyPWAe_li`TdR{ePRNm86_wDF;w`wNM*ApPYB5$>-v1Z259wUy*|
zOLse-z*+BmU!1B+s(ErcRqM&;C&HonLy(v2K7QXJobLdqj at bt|1W<MY(r7|to40I8
z-UUiZkZs-v*k5i#lHMNVX|@FAZH!(!cZP#tACnT=MKO_&0=`}1FzCC433J(3Ae;`h
zjRKVO)r%zZLG-Fa?Gv>PqDOZ?LxTHw?T~Oj3Y<omg-b|~8bD0S<~Yykkj(Vz-5G>v
zhKb2+ at 5e+;`ofPi_eCdx9iagd4r2MiWF`xz1-*SaJIf&^?L*@;y^N-mV&JqiZ3i71
zqnQmEjc&4riKEAgE6NrvDfgia1&~R$OwOIGK`Wi<tggH`twF8ME~f0=jgq at ct2cX)
z*4Pd(w}zb$Varz-ho#JRHjJQ at nd6Ym_F0;cq|DUMn5N^=5$8E?Hf3hy9hX}`VE<nr
z56Ah>m*<O+=g>*yAqBn-93OsGOQ2mZQ&XlRy)EuX3K48*A4v#C;Rq5M;*;S_fiq1z
zvs&i at atO;s`zXO>CSJ#2 at v|AGyg2=pC%8%s_|)OA7}go~Alt?vGzoI~c%y{m<wrT!
z%T9xGl9z(fhL1?nA{MS(_Z|WxbKQ%#7U?Ac8UEJt<eBnF4)&PV>h!WEU#rU<8#~TH
zWa-WfO$hd>2DaVzgnbx4x-;YVXmtc~1iEjk1eD)5RUidGTA=$Ky2~MNx>e$64-Wg7
zJ=YIJ<{i@)rtS(qIlbVb-Ea-2CmP4tS?UFgmZFLcQa&FN*dP_fRxPo%8Ii5!199JG
z(GlEfcC_&-KMLt=kcyYlHv~j*e`7-2haKE$|IEg#oMvMiq+*^`OK?9vA at 28CbcF61
z4({|c#LoSwLw5x??+}taDDGJO$i1K6>3<(=lo!o#aL;h)P90g)61saQ#Qgz_j?jII
zgZsM<-H$tT&zlhUyB*wVm1eU>`AZJ&J009-PKZ1Gmw=7eB6<R7gOpE6m#2dErR<jX
zO^EwGi;l27jb3){<qqzPty;qGg%jew!=fX&(@wmd`wR#78CEU9y>vp{hb%gR`&;R}
z$`3pIzTe^Z#S`NGgoFEhhwih|<*Aru)@qLiapnxpOEM*FHQMnXj5smLswM2>mlC2R
zJvc^*@o>aC!JIF~!{IhuFhk0tQVPaO335(3EG0}^BN3{=DW^G=wS;l at PURf;A?j7W
z^!;UC6p$V~v0fKFBR#0nEN>4Ey*|(w-YY3f8!mcC$}Az}_kp3Ue^s<Q+OsBG%Ln3q
zi-Y at 59o+XhxPRBdy>3F>>5Bw5y%s&=;6Ci&KIGuOZbIA}9o)A%xc54^zbspedC%B5
zA at 21K?hyy~MhEwM9NgO{#J$?VJ>cN(cW|$FaF0!hd%J`C9S-idIJkQqe(#+Scf-N`
z0SEUX2lp!-+&52%`(_9C-45<M9Nf1$xZg4%?wW&py at R{v;NIl$`{0DQ-{|1}goFEb
z2ltpm_b*L|`#J}A!@<4X!TlkJ?n4ve9&m8q;NVX8m$vb+VxxomeG}qd=iuJr;J(hm
z{Z<F}?Gxg@!NL7T2ltqR`*RNNJ0`@v#lihn2lvem?yozz4^N1D#KHY;2lqh-_gRiM
zzi&d^V-D`y9NfR;;9g;Jm+Mu(i6hsmDf5L`ukM!;f<t=vTd!A%K3`{^c)eOJH9hgV
zu6(IU2Zl-ua$WZ!>Q%nql*gMUjk(5N^wRt5b<wTT?<(zp*@N7#dku8VXY2Uy=#=d`
zb8Yis=uXnne%&kRaeTjSoCbvQi_t25C_=<`Mik|0B;{y~$_P<Fr0yK at -v}LnavVZ$
zG9D6b)y1Ch(*LRFp&Xlvz~TRxfbWd49U-5nbsuWU-4#yf5kUBuAaQ;yc#-co4()Q4
zioHq>`Gdfr*2^LEd|uu`b9o|qGuuh#@&Hkp4V*^kPOX&JDxoBVrgPdkgywcwC<Q`i
zY0%cNh4UFe3IVYw4+0|BQJl_$fLPWbnok1qF1TAVKX0Q$Pst;AO71r))4z4lKY7e#
zcJ>JgUqP(`;2;u^w<(EWLA(&y?&S+f1)HW-fXKUAE^{3q@*b8$!hmR~XleQ>8$=iX
z>Oa%OVP~S^7$FLl#geFHhYSJokj)wo0wUKEocl9?$Pto5e#z)OaIHo8bwK23%yA}>
zfo+=30^~-M7ulH(N}#~?(#4UgKAW9OQH#$P((=myv0JqfkgX<VqG$j@!D_vm0co+}
zd>IfwSX=)3E+BQNMH<M~8%$|qylu27i&1X*;z`t!V++^)SwOa%y%NaEi-7oSyj}w&
zW`i69M6O^tom`ZY-?=<Qrw9<MJ?r9t+Ql}DT?!l at a4o%R0g2dj*8!nG5$AP1lF!(1
zJ`2c~Y+4KfV%PM40pdq3i`SEYth3d677)H8?GwBX0&>*GYZMT<@5kl&6Ci|cwXrF1
zrreq2ICT2PTQ)jHfXL?s9On{1>TL3S91xP%qD;@08*Ml-Kz5iA9Ed`P1uI?#AuV|8
zy at 9naAt)#&1Z6}F2NRL#g8&HKKaawn+GM^LkUWzzVLk-N6E>V at 0FgV=;4Y3K=1;^(
z9tuAPjx`q$<TrrGJw1+d43N#HUWAi}gPGcGklBD_03FRyP%Z|9+MQ*wD*({|vvj|j
z;iQfUt$@%3!E5RKP-Ugirl|oO*><>u1Ay$d>HZ)f{ArHV^ie<tZ8HA|5DG+t(>V-?
zX5z^6R1_0J*uMu33?fDe@@W_&zYh>guQA{ZLk)-|DCgsa!THEZx!H*UO1aHqOMpYc
zve+sIqzMp`)x!A<Ah*~gyv<STen9Rp?W6N!wH3du)=uD*GKf#e{2U;K;AP4DYe4Qc
z>5!}$*bej~CYk7mHz)vkz=m@%AotmLtpH?$4JQnU4-oP_r;`MPMlFl-Hb8E*)!GHf
zA>dfGo&&_*#$E>G8K_{j%;SK>OnI{LFtWHM)YRRk2XQV}Tc}HBW8F=(TW#jU(bi5`
z7Hn#wW4lDfNH`jj=~jHl+st&~I2DP5Bfv#cu)*O)=DA!rTtyxsi6&(~)d&FRK}zF*
zq!u>OQibMXviH+!D=VcmHi0o_NqD;YY1XmZiWJrPp+fv$UTL&TJ+vq_--3UcS9H4S
z5jrdns753nYD<Ib?Ktoag)JdEZAy=c^X}-sZqopQGmb#h at hUbBNrIzv9jBnt?tZAY
zBiI&NMhEce`sFxEp{`~PPKBpa+H}3PYei?YCmuF}I2f=tD$d+zHBhQkNr=`MojAfC
zehGya;@Bba9Txco7gDAt$j at dfu2@jEcrjJQ7hc*TolQZkW$A<fevZ66{LWTRYNH%J
zW=G|-!{vxVJQTyZjCxyFYcL$a8T*QU1y1JU2kozhO>hhzLCk{(1&rNl7U+6csJR>B
zZ_=A_9DkUaBn~um!ck1;1<_%Zc5>p7J4lv7iw@|M1OZ>&u%f<pd5vDTrlz5KCC(TO
ztgMo!nCkehfc+Z=wd75_6I at YF*Xu&@XehF9fgXgzsL#M=kdPnMg((o^Q_mB^;eZ`6
zz-03}!FL9LLFZ(#^S(Hdw13fNv$D?G)_AgjE#t#y9=)~M;ICW-aIEH)_;L<xf#VDH
z&Q at Z9f8vJqaEK%0WG at i^>&;3!g4d$0cXc=65D<KUK^LF-;qp<7#odD`@yR}k0PPrh
z*g_X(vA$Vg;qaw|=p5v^2u=>cHxYDv$)TC-jR#~YgihkknibVH711+esj3UF&=F(l
zrsZE4z at lBs6-#Bww27fd)1n9OvW25CRA-mXLd+k0&JxZ+%aZ40+P-BWic>$OK_GO0
zy$SuFv0&63pQ2z*oW=wlgGO7FdV_ at xcGd?n^l|E*v>R{-**>a~(ng^)lgR2U=4U)$
zu(Y<zPp=dGMA|I%<Y4M^DWb~W!cT<b{+89!xZ+zG>@y=^nl^CQ1_;sqnoW=KL+M&V
zy(x+iE&1gU>GkFmuQS$Z-{>I8PvBGA*~p?bn<v-lX@;d{&c4<m><VK=aLgHd$zOoP
zEu*f}|M86HZ~0LVlZ5$o5J`c5(L+zy0c&jP==Syt#cT#S(dSfnqu^aA)k6H6C9tDI
zk^1z{qDX<o7&p%FDZfslpYZc3dV24nK{v&!a+G63K<XgJM<yf1&wA?2YmI(vXcsMe
zV{>x^laxG6Q7CX?;ZnZMqK~7#>@YA@>KTpFQKl)W)ryXQY1e*Qx4&$GT*`<sv#Yz)
z95R__#K|4p+kAXU9nx`}aZ4z!w?=|(T`9wwWq}lAtKVBakdJ~+x{No5pDOz|cgR2T
z^EGLMJx-03W4)|A-p6 at BA+6KP-h9%@$dWx}%wl}35}_5F`cFJe%K62%WVFt?6wTt~
cJ*T at 12dh96Hl-NSz1AErCnCApa2oPI0GHmX2><{9

literal 0
HcmV?d00001

diff --git a/images/lib-x86_64.so b/images/lib-x86_64.so
new file mode 100755
index 0000000000000000000000000000000000000000..8cee4d202fc167f5cb2809048577b7c130dd0567
GIT binary patch
literal 5467
zcmdT|U5pe(5U#ytVO3-i0TD4wKoih7ZV>P^LHAe=2DAJKcLsxInA_ds*6fe&%#p(w
zB{@hGa)}y$9(>UFqS2V}pb3%~fA9}|xkOF;&ly5;iiz@|;tOk4Pk+Zu?_M+}KG>U`
z>iVjxtGc_or>7t3Eo|&cBnTx*w~^vzgh);cK2Ae}C`a9t;^$(zLg}V1h}vpPv=EfY
zQaa*eCjTuhw^AVvI;lfCrzz~ZwB2 at Xw_V$T9?<%r2wS=%|6N*c(rZ{I1yppU+<7`E
zNu2+*ME%WYqa^<~ZSAN0 at sr2it{p0#uRTy$_{`z&zj<x^Pia%+(iI6y{5<-Om7p29
ziv*j+|BLv4{M3^V<$J&Q`O61(EqQb7?3^>7{W6E)X-kr=K9+_fMcTI_JgV1EgD+ux
z8I&UQ9<I-&v#mw5tO!c9S>tH~-#!gKm+^TW;#{ck*_77v%WPO&cW<pxcm2R?2ChqP
zrCtfh9b`hTTO9GE>QyTbmdU+ipSz>Hx8euoX1?nAe%YsLWuR#L4SOxQ<&qb8Y%}2d
zVQUQ4OSGx5d41kpWv{Z=z$H-^&kKGbD%|Z{mH4F$FRt(ub&(gc<fJTBLmq%1pBdsZ
z$CAS+Uq<lglubl%<f5|C<14ul#huZg(~~zcIQfY at e&dHT`hNOEYt6+;i(1#t=4WPU
zj%&gXv6z0GXti2m=Nw6W&}ETx=$)XeHLlDaN9jMXZh~dxJa)RLZ|CrUGrI0&;e*-E
z*t%H>izZ)@R>o3iIK2vE*M7^yIkMml)+wx<aNa$abjEhIoLj#3t<2I564ZMM=dlG(
zv%IG@|8rJ7%vF{*Pk)%&$JNB{o_kK77|bj^$RQH-v%_a4b2)%uapB0-%UNg3p>KjY
z?EeuKoa||x$}FXmC&GyPS#PKAR8C?UJ=Y4ZbjGf}i5b>&M$e?Vk4KUs7(OeV-7U6i
z{4#1lc+`|@^<YF5ASMqS^PJFt<cO5nA(>i_muepQ{oDCgL!blN5NZFiP7=u%DaW+@
z;*h19rk7~CNYkXIlRAHNGX%NpNm3+#q+AgaI;stUZ`VBXc#qbT{YVPhJKqZ9&uV=h
zAJrd>!>^iOsO5he^02l4{)zX4>FIYJ7j4StZ?#tNR=v_%ZLhYo)~amwmh77BT5H9Q
za>;VMAjEH2y^?qI|Dm$&@2>^k0NH-f4CxSR^+r&(_tuB)f#FKEbVH>?iW~C$A+k&R
z>ued)pczW`m79L0QI9b$%bMk?CkDE9e>EUmZPa#99^ty$uI=)WJJ|GUWwMJwqv><g
zA-S)}O~~#n?bywR^6AwoMfTHRYkt_ON#45Iwo$8<>w!6;|B}Co?IicHUZy)Ap!w+D
zE11py-#NEokM#`NtqqZGSXUb66BUuHW!PiAgZ`=&#johV9_uj2n6wRh>>r at mFIYtt
ztWWR`S7hzN9_tkp`v&5N9%w(?%U%E;`vIt>9ZCG+8}VzHN?bwT1jGIVx<^1R at DF?R
zzs|C#{ZXw53O#{k4>j#a7?ZfL-{SlP3VT*jMSMkz&rH;QLi-1`qRL!{J<bsi8}?HQ
zS}|=*80^sOLBk&J7f|!S2>-A at tnD#>i}Z^K)YLcmr?frh$4XhMX`JuPcrpG;i677L
zU%CkUthUeUIR4K5MZ-R)?Q`1R^k?!f8TNReJO9xBb+(t>LHu~%;5+4jo<EEm{G(rQ
z8UArz9M=hH<{#`q-!ts-{-4zL7R#drcA%fKQ0j;u=lHZf5Fk#p0Xy*HTrpBqiD3T&
z6g4$<FJm0OqpCk@|6fHxuABD4BX^^!PA24z>VdzK+3Wa^_%W_>uIc3e+~uKt(Qs(6
zq0%(ZBu9()NmM1t5hE|+cyj8z7sqE1_VYNNBJ9&~d?sZ(bSlYjI_#@){q)p1Fpjr>
zPl`OrJLyEn_W4bQM2|F-<kK+rqX^9HTuRty;`kiCAF!g3swXK!*dL<8B!87*-N*6E
zroPMK_&mZojpLUS)?XZ-PgqxRd;wv-#BuqWjh8S_+s8-pe+GY7$F+&%J3K+{;~+Vl
z=r9i53U42WUdFrlgkc%;vRmn2h#z@<pT_6Tvbc6(y^L^O+IhifXS(<gvcAN>!kEV=
z6y84X&nvt={#Ui%al`MsjCUHhkEEThvn_MJzEgO6KK!Kc40RiE{-N7x%M%_bi)CiX
zOoK0Hd|rqAU&;6~vk~Td8JBw&Gq3K{xOx9_*EIU~GT!N)g^FIa8o5%TVl(iA;lV+>
z$af?8zHK|)!seZQa?|2&h;eu1Bcf8n-CJ!8cvV-O;azWdg!o{7f3+NxOZM7T-D^k$
zZlyFL+|8s8{%&cwR@)Chy<0aZHyd~KZ0U8ui5t`}cu^k=$_wA<NT{0%+t&9K+-(~-
z?(FSz`+C+FdL`tN-*AV#da26SL1Fy5tqpf??b)(9&uIKQsl%O7r^}^WE_zSYc8P?`
ICH2ko7w~UU;Q#;t

literal 0
HcmV?d00001

diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
index 4020c24..3820758 100644
--- a/perl/lib/Sys/Guestfs/Lib.pm
+++ b/perl/lib/Sys/Guestfs/Lib.pm
@@ -300,6 +300,163 @@ sub resolve_windows_path
     return $path;
 }
 
+=head2 file_architecture
+
+ $arch = file_architecture ($g, $path)
+
+The C<file_architecture> function lets you get the architecture for a
+particular binary or library in the guest.  By "architecture" we mean
+what processor it is compiled for (eg. C<i586> or C<x86_64>).
+
+The function works on at least the following types of files:
+
+=over 4
+
+=item *
+
+many types of Un*x binary
+
+=item *
+
+many types of Un*x shared library
+
+=item *
+
+Windows Win32 and Win64 binaries
+
+=item *
+
+Windows Win32 and Win64 DLLs
+
+Win32 binaries and DLLs return C<i386>.
+
+Win64 binaries and DLLs return C<x86_64>.
+
+=item *
+
+Linux kernel modules
+
+=item *
+
+Linux new-style initrd images
+
+=item *
+
+some non-x86 Linux vmlinuz kernels
+
+=back
+
+What it can't do currently:
+
+=over 4
+
+=item *
+
+static libraries (libfoo.a)
+
+=item *
+
+Linux old-style initrd as compressed ext2 filesystem (RHEL 3)
+
+=item *
+
+x86 Linux vmlinuz kernels
+
+x86 vmlinuz images (bzImage format) consist of a mix of 16-, 32- and
+compressed code, and are horribly hard to unpack.  If you want to find
+the architecture of a kernel, use the architecture of the associated
+initrd or kernel module(s) instead.
+
+=back
+
+=cut
+
+sub _elf_arch_to_canonical
+{
+    local $_ = shift;
+
+    if ($_ eq "Intel 80386") {
+	return "i386";
+    } elsif ($_ eq "Intel 80486") {
+	return "i486";	# probably not in the wild
+    } elsif ($_ eq "x86-64") {
+	return "x86_64";
+    } elsif (/SPARC32/) {
+	return "sparc";
+    } elsif (/SPARC V9/) {
+	return "sparc64";
+    } elsif ($_ eq "IA-64") {
+	return "ia64";
+    } elsif (/64.*PowerPC/) {
+	return "ppc64";
+    } elsif (/PowerPC/) {
+	return "ppc";
+    } else {
+	warn __x("returning non-canonical architecture type '{arch}'",
+		 arch => $_);
+	return $_;
+    }
+}
+
+my @_initrd_binaries = ("nash", "modprobe", "sh", "bash");
+
+sub file_architecture
+{
+    local $_;
+    my $g = shift;
+    my $path = shift;
+
+    # Our basic tool is 'file' ...
+    my $file = $g->file ($path);
+
+    if ($file =~ /ELF.*(?:executable|shared object), (.+?),/) {
+	# ELF executable or shared object.  We need to convert
+	# what file(1) prints into the canonical form.
+	return _elf_arch_to_canonical ($1);
+    } elsif ($file =~ /PE32 executable/) {
+	return "i386";		# Win32 executable or DLL
+    } elsif ($file =~ /PE32\+ executable/) {
+	return "x86_64";	# Win64 executable or DLL
+    }
+
+    elsif ($file =~ /cpio archive/) {
+	# Probably an initrd.
+	my $zcat = "cat";
+	if ($file =~ /gzip/) {
+	    $zcat = "zcat";
+	} elsif ($file =~ /bzip2/) {
+	    $zcat = "bzcat";
+	}
+
+	# Download and unpack it to find a binary file.
+	my $dir = tempdir (CLEANUP => 1);
+	$g->download ($path, "$dir/initrd");
+
+	my $bins = join " ", map { "bin/$_" } @_initrd_binaries;
+	my $cmd = "cd $dir && $zcat initrd | cpio -id $bins";
+	my $r = system ($cmd);
+	die __x("cpio command failed: {error}", error => $?)
+	    unless $r == 0;
+
+	foreach my $bin (@_initrd_binaries) {
+	    if (-f "$dir/bin/$bin") {
+		open PIPE, "file $dir/bin/$bin |";
+		local $/ = undef;
+		$_ = <PIPE>;
+		if (/ELF.*executable, (.+?),/) {
+		    return _elf_arch_to_canonical ($1);
+		}
+	    }
+	}
+
+	die __x("file_architecture: no known binaries found in initrd image: {path}",
+		path => $path);
+    }
+
+    die __x("file_architecture: unknown architecture: {path}",
+	    path => $path);
+}
+
 =head1 OPERATING SYSTEM INSPECTION FUNCTIONS
 
 The functions in this section can be used to inspect the operating
@@ -1093,8 +1250,8 @@ sub mount_operating_system
  $g->umount_all ();
 
 The C<inspect_in_detail> function inspects the mounted operating
-system for installed applications, installed kernels, kernel modules
-and more.
+system for installed applications, installed kernels, kernel modules,
+system architecture, and more.
 
 It adds extra keys to the existing C<%os> hash reflecting what it
 finds.  These extra keys are:
diff --git a/perl/t/500-lib-load.t b/perl/t/500-lib-load.t
new file mode 100644
index 0000000..1407169
--- /dev/null
+++ b/perl/t/500-lib-load.t
@@ -0,0 +1,26 @@
+# libguestfs Perl bindings -*- perl -*-
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use Sys::Guestfs;
+use Sys::Guestfs::Lib;
+
+# Just check Lib can be loaded.
+ok (1);
diff --git a/perl/t/510-lib-file-arch.t b/perl/t/510-lib-file-arch.t
new file mode 100644
index 0000000..14392e8
--- /dev/null
+++ b/perl/t/510-lib-file-arch.t
@@ -0,0 +1,62 @@
+# libguestfs Perl bindings -*- perl -*-
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+use strict;
+use warnings;
+use Test::More tests => 17;
+
+use Sys::Guestfs;
+use Sys::Guestfs::Lib;
+
+my $h = Sys::Guestfs->new ();
+ok ($h);
+
+$h->add_drive_ro ("../images/test.sqsh");
+ok (1);
+
+$h->launch ();
+ok (1);
+$h->wait_ready ();
+ok (1);
+
+$h->mount_vfs ("ro", "squashfs", "/dev/sda", "/");
+ok (1);
+
+is (Sys::Guestfs::Lib::file_architecture ($h, "/bin-i586-dynamic"),
+    "i386");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/bin-sparc-dynamic"),
+    "sparc");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/bin-win32.exe"),
+    "i386");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/bin-win64.exe"),
+    "x86_64");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/bin-x86_64-dynamic"),
+    "x86_64");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/lib-i586.so"),
+    "i386");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/lib-sparc.so"),
+    "sparc");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/lib-win32.dll"),
+    "i386");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/lib-win64.dll"),
+    "x86_64");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/lib-x86_64.so"),
+    "x86_64");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/initrd-x86_64.img"),
+    "x86_64");
+is (Sys::Guestfs::Lib::file_architecture ($h, "/initrd-x86_64.img.gz"),
+    "x86_64");
-- 
1.6.2.5



More information about the Libguestfs mailing list