* Re: AIX & shared libstdc++
[not found] <3439FE5B.53F1D3CC.cygnus.egcs@msu.ru>
@ 1997-10-07 3:15 ` Jason Merrill
1997-10-07 3:48 ` Andrey Slepuhin
1997-10-09 9:26 ` Andrey Slepuhin
0 siblings, 2 replies; 16+ messages in thread
From: Jason Merrill @ 1997-10-07 3:15 UTC (permalink / raw)
To: Andrey Slepuhin, egcs
>>>>> Andrey Slepuhin <pooh@msu.ru> writes:
> I tried to build egcs-970929 on AIX 4.2.1 configured with
> --enable-shared
> option. The resulting shared libstdc++ was only ~600K instead of ~3M
> static one.
> This is because AIX linker does not know what symbols must be exported.
> PS: Passing option -unix to linker is incorrect on AIX, because AIX
> linker recognize it as option -u with a parameter "nix". As a result
> there are many linker warnings.
GCC support for shared libraries on AIX requires GNU ld, which supports the
-unix flag.
Jason
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++
1997-10-07 3:15 ` AIX & shared libstdc++ Jason Merrill
@ 1997-10-07 3:48 ` Andrey Slepuhin
1997-10-09 9:26 ` Andrey Slepuhin
1 sibling, 0 replies; 16+ messages in thread
From: Andrey Slepuhin @ 1997-10-07 3:48 UTC (permalink / raw)
To: Jason Merrill; +Cc: egcs
Jason Merrill wrote:
> GCC support for shared libraries on AIX requires GNU ld, which supports the
> -unix flag.
The following line:
* configure.in: Don't configure --with-gnu-ld on AIX
in file ChangeLog is not overrided yet (though it is dated Apr 25 1996
:-)).
Does anybody checked whether current snapshot can be configured with
this option? Can this be done with current version of binutils?
And the last: is shared libraries support with native ld possible in
principle?
Andrey
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++
1997-10-07 3:15 ` AIX & shared libstdc++ Jason Merrill
1997-10-07 3:48 ` Andrey Slepuhin
@ 1997-10-09 9:26 ` Andrey Slepuhin
1997-10-09 15:14 ` Ian Lance Taylor
1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev
1 sibling, 2 replies; 16+ messages in thread
From: Andrey Slepuhin @ 1997-10-09 9:26 UTC (permalink / raw)
To: Jason Merrill; +Cc: egcs
Hi,
I tried to compile egcs-971008 on AIX 4.2.1 configured with option
--with-gnu-ld.
1) I had problems when installing binutils 2.8.1 because function
finfo()
already defined in unistd.h with parameters different from finfo() that
comes
with binutils distribution (solved by renaming this function and all
calls to it).
2) Compilation was successful except the attempt of making unexistent
target
"libs" in libraries/soft-float/powerpc/libstdc++/Makefile (why???).
Shared libstdc++ was created successfully with a size ~2.5M
3) Even the simple test program failed to run with message about exec
format error due to bad text alignment.
It seems to me that problem is not with egcs but with gnu ld which
generates
invalid executables. Any help is appreciated.
Andrey.
PS: egcs-970929, with manually built shared libstdc++ (with native ld)
still
works without errors. I just successfully compiled and tested
omniORB2,
and it seems that combination of shared libstdc++, multithreading
and
exceptions works fine.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++
1997-10-09 9:26 ` Andrey Slepuhin
@ 1997-10-09 15:14 ` Ian Lance Taylor
1997-10-13 5:05 ` Andrey Slepuhin
1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev
1 sibling, 1 reply; 16+ messages in thread
From: Ian Lance Taylor @ 1997-10-09 15:14 UTC (permalink / raw)
To: pooh; +Cc: jason, egcs
Date: Thu, 09 Oct 1997 20:01:20 +0400
From: Andrey Slepuhin <pooh@msu.ru>
3) Even the simple test program failed to run with message about exec
format error due to bad text alignment.
It seems to me that problem is not with egcs but with gnu ld which
generates
invalid executables. Any help is appreciated.
You're right; the GNU linker doesn't work on AIX 4.2. It's possible
that the appended patch to ld/emultempl/aix.em will fix the immediate
problem. There may be other problems.
Ian
Index: aix.em
===================================================================
RCS file: /cvs/cvsfiles/devo/ld/emultempl/aix.em,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- aix.em 1997/06/16 16:56:24 1.20
+++ aix.em 1997/09/04 16:43:35 1.21
@@ -361,8 +361,8 @@
exp_nameop (NAME, "."),
exp_intop (0xfff)));
t = exp_binop ('&',
- exp_binop ('+', t, exp_intop (7)),
- exp_intop (~ (bfd_vma) 7));
+ exp_binop ('+', t, exp_intop (31)),
+ exp_intop (~ (bfd_vma) 31));
lang_section_start (".data", t);
}
break;
@@ -382,8 +382,8 @@
exp_intop (val),
exp_nameop (SIZEOF_HEADERS, NULL));
t = exp_binop ('&',
- exp_binop ('+', t, exp_intop (7)),
- exp_intop (~ (bfd_vma) 7));
+ exp_binop ('+', t, exp_intop (31)),
+ exp_intop (~ (bfd_vma) 31));
lang_section_start (".text", t);
}
break;
^ permalink raw reply [flat|nested] 16+ messages in thread
* something wrong with template instantiation mechanics
1997-10-09 9:26 ` Andrey Slepuhin
1997-10-09 15:14 ` Ian Lance Taylor
@ 1997-10-09 16:31 ` Oleg Krivosheev
1997-10-10 8:51 ` Joe Buck
1997-10-10 8:51 ` Joe Buck
1 sibling, 2 replies; 16+ messages in thread
From: Oleg Krivosheev @ 1997-10-09 16:31 UTC (permalink / raw)
To: Oleg Krivosheev; +Cc: Jason Merrill, egcs
Hi,
i've tried my code and lloks like tons of
small inline template functions are not
instantiated.
drabble ~ $ c++ -v
Reading specs from
/home/room1/kriol/local/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/specs
gcc version egcs-2.90.12 971008 (gcc2-970802 experimental)
drabble ~ $ uname -a
SunOS drabble 5.5.1 Generic_103640-08 sun4m sparc SUNW,SPARCstation-4
in a simple example:
#include "typedefs.H"
#include "Vector3D.H"
int
main( void ) {
return 0;
}
void
superdummy( void ) {
TVector3D<double> ccc;
ccc = 1.0;
abs(ccc);
}
where abs(ccc) declared as
template <class x> inline x
abs( const TVector3D<x>& y );
is not instantiated:
c++ -c test.ii
nm -s test.o | c++filt | grep abs
U abs(TVector3D<double> const &)
i'd expect it to be instantiated and marked W
i've enclosed full preprocessor output file.
thanks
OK
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev
1997-10-10 8:51 ` Joe Buck
@ 1997-10-10 8:51 ` Joe Buck
1 sibling, 0 replies; 16+ messages in thread
From: Joe Buck @ 1997-10-10 8:51 UTC (permalink / raw)
To: Oleg Krivosheev; +Cc: egcs team
> This message is in MIME format. The first part should be readable text,
> while the remaining parts are likely unreadable without MIME-aware tools.
> Send mail to mime@docserver.cac.washington.edu for more info.
>
> ---559023410-1804928587-876430667=:6246
> Content-Type: TEXT/PLAIN; charset=US-ASCII
>
>
> Hi,
>
> i've tried my code and lloks like tons of
> small inline template functions are not
> instantiated.
>
> drabble ~ $ c++ -v
> Reading specs from
> /home/room1/kriol/local/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/specs
> gcc version egcs-2.90.12 971008 (gcc2-970802 experimental)
> drabble ~ $ uname -a
> SunOS drabble 5.5.1 Generic_103640-08 sun4m sparc SUNW,SPARCstation-4
>
> in a simple example:
>
> #include "typedefs.H"
> #include "Vector3D.H"
>
> int
> main( void ) {
> return 0;
> }
>
> void
> superdummy( void ) {
> TVector3D<double> ccc;
> ccc = 1.0;
> abs(ccc);
> }
>
>
> where abs(ccc) declared as
>
> template <class x> inline x
> abs( const TVector3D<x>& y );
>
> is not instantiated:
>
> c++ -c test.ii
> nm -s test.o | c++filt | grep abs
> U abs(TVector3D<double> const &)
>
> i'd expect it to be instantiated and marked W
>
> i've enclosed full preprocessor output file.
>
> thanks
>
> OK
>
> ---559023410-1804928587-876430667=:6246
> Content-Type: TEXT/PLAIN; charset=US-ASCII; name="test.ii"
> Content-Transfer-Encoding: BASE64
> Content-ID: <Pine.GSO.3.96.971009155747.6246B@drabble>
> Content-Description:
>
> IyAxICJ0ZXN0LkMiDQojIDEgIi9ob21lL3Jvb20xL2tyaW9sL3dvcmsvUHJv
> amVjdC9jb25maWcvc3BhcmMtc3VuLXNvbGFyaXMtZ2NjL2NvbmZpZ3VyYXRp
> b24uaCIgMQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDEg
> InRlc3QuQyIgMg0KIyAxICIvaG9tZS9yb29tMS9rcmlvbC93b3JrL1Byb2pl
> Y3QvaW5jbHVkZS90eXBlZGVmcy5IIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0K
> DQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaGFyX3Q7DQp0eXBlZGVmIGNo
> YXIgICAgICAgICAgIGNoYXJfdDsNCnR5cGVkZWYgaW50ICAgICAgICAgICAg
> aW50X3Q7DQoNCnR5cGVkZWYgdW5zaWduZWQgaW50ICAgdWludF90Ow0KdHlw
> ZWRlZiBsb25nICAgICAgICAgICBsb25nX3Q7DQoNCg0KdHlwZWRlZiBib29s
> ICAgICAgICAgICBib29sX3Q7DQoNCg0KdHlwZWRlZiBmbG9hdCAgICAgICAg
> ICBmbG9hdF90Ow0KdHlwZWRlZiBkb3VibGUgICAgICAgICBkb3VibGVfdDsN
> Cg0KIA0KDQoNCg0KDQoNCg0KIyAxICJ0ZXN0LkMiIDINCg0KIyAxICIvaG9t
> ZS9yb29tMS9rcmlvbC93b3JrL1Byb2plY3QvaW5jbHVkZS9WZWN0b3IzRC5I
> IiAxIDMNCiANCg0KDQoNCg0KIyAxICIvaG9tZS9yb29tMS9rcmlvbC9sb2Nh
> bC9pbmNsdWRlL2lvc3RyZWFtIiAxIDMNCiANCg0KDQoNCg0KIyAxICIvaG9t
> ZS9yb29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9pb3N0cmVhbS5oIiAx
> IDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KI3ByYWdtYSBpbnRlcmZhY2UNCg0KDQoNCiMgMSAiL2hv
> bWUvcm9vbTEva3Jpb2wvbG9jYWwvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgi
> IDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCiNwcmFnbWEgaW50ZXJmYWNlDQoNCg0KICAgDQoN
> Cg0KDQpleHRlcm4gIkMiIHsNCiMgMSAiL2hvbWUvcm9vbTEva3Jpb2wvbG9j
> YWwvaW5jbHVkZS9nKysvbGliaW8uaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMg
> MSAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvc3BhcmMtc3VuLXNvbGFyaXMy
> LjUuMS9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMgNA0KICANCg0KDQoNCg0K
> DQoNCg0KDQoNCnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90IF9f
> YXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsNCnR5cGVkZWYgdW5z
> aWduZWQgaW50ICBfR191aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f
> KF9fUUlfXykpKTsNCnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90
> IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsNCnR5cGVkZWYg
> dW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9k
> ZV9fKF9fSElfXykpKTsNCnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQz
> Ml90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsNCnR5cGVk
> ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9f
> bW9kZV9fKF9fU0lfXykpKTsNCnR5cGVkZWYgICAgICAgICAgaW50ICBfR19p
> bnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsNCnR5
> cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18o
> KF9fbW9kZV9fKF9fRElfXykpKTsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBs
> b25nIGxvbmcgX0dfbGxvbmc7DQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5z
> aWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsNCg0KDQoNCg0KDQoNCg0KdHlw
> ZWRlZiBsb25nIF9HX2Nsb2NrX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
> X0dfZGV2X3Q7DQp0eXBlZGVmIGxvbmcgX0dfZnBvc190Ow0KdHlwZWRlZiBs
> b25nIF9HX2dpZF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2lub190
> Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21vZGVfdDsNCnR5cGVkZWYg
> dW5zaWduZWQgbG9uZyBfR19ubGlua190Ow0KdHlwZWRlZiBsb25nIF9HX29m
> Zl90Ow0KdHlwZWRlZiBsb25nIF9HX3BpZF90Ow0KDQoNCg0KdHlwZWRlZiBp
> bnQgX0dfcHRyZGlmZl90Ow0KdHlwZWRlZiBpbnQgICBfR19zaWdzZXRfdDsN
> Cg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3NpemVfdDsNCnR5cGVk
> ZWYgbG9uZyBfR190aW1lX3Q7DQp0eXBlZGVmIGxvbmcgX0dfdWlkX3Q7DQp0
> eXBlZGVmIGxvbmcgaW50IF9HX3djaGFyX3Q7DQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBfR19zc2l6ZV90Ow0KdHlwZWRl
> ZiB1bnNpZ25lZCBpbnQgX0dfd2ludF90Ow0KdHlwZWRlZiB2b2lkICogX0df
> dmFfbGlzdDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAz
> MCAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvaW5jbHVkZS9nKysvbGliaW8u
> aCIgMiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgNTEgIi9ob21l
> L3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1ZGUvZysrL2xpYmlvLmgiIDMNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lP
> X0ZJTEU7DQoNCiANCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN
> Cg0KdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7DQoNCg0KDQoNCiANCg0Kc3Ry
> dWN0IF9JT19tYXJrZXIgew0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7
> DQogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7DQogICANCg0KICAgDQogIGlu
> dCBfcG9zOw0KIyAxOTEgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1
> ZGUvZysrL2xpYmlvLmgiIDMNCg0KfTsNCg0Kc3RydWN0IF9JT19GSUxFIHsN
> CiAgaW50IF9mbGFnczsJCSANCg0KDQogICANCiAgIA0KICBjaGFyKiBfSU9f
> cmVhZF9wdHI7CSANCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgDQogIGNoYXIq
> IF9JT19yZWFkX2Jhc2U7CSANCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAN
> CiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIA0KICBjaGFyKiBfSU9fd3JpdGVf
> ZW5kOwkgDQogIGNoYXIqIF9JT19idWZfYmFzZTsJIA0KICBjaGFyKiBfSU9f
> YnVmX2VuZDsJIA0KICAgDQogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICANCiAg
> Y2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIA0KICBjaGFyICpfSU9fc2F2ZV9l
> bmQ7ICANCg0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7DQoNCiAg
> c3RydWN0IF9JT19GSUxFICpfY2hhaW47DQoNCiAgaW50IF9maWxlbm87DQog
> IGludCBfYmxrc2l6ZTsNCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7DQoNCg0KICAg
> DQogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOw0KICBjaGFyIF91bnVz
> ZWQ7DQogIGNoYXIgX3Nob3J0YnVmWzFdOw0KDQogICANCg0KDQoNCg0KfTsN
> Cg0KDQoNCg0KDQpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsNCmV4dGVybiBzdHJ1
> Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lP
> X3N0ZGVycl87DQoNCg0KDQoNCg0KIA0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAg
> X0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBfSU9fRklMRSAqLCB2b2lk
> ICosIF9HX3NzaXplX3QgKSAgOw0KICBfR19zc2l6ZV90ICAoKndyaXRlKSAg
> KHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lkICosIF9HX3NzaXplX3Qg
> KSAgOw0KICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUg
> KiwgX0dfb2ZmX3QgLCBpbnQpICA7DQogIGludCAoKmNsb3NlKSAgKHN0cnVj
> dCBfSU9fRklMRSAqKSAgOw0KfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190
> Ow0KDQogDQpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlDQp7DQogIHN0cnVjdCBf
> SU9fRklMRSBmaWxlOw0KICBjb25zdCB2b2lkICp2dGFibGU7DQogIHZvaWQg
> KmNvb2tpZTsNCiAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBpb19mdW5j
> dGlvbnM7DQp9Ow0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KZXh0ZXJuIGlu
> dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7DQpleHRlcm4gaW50IF9f
> dWZsb3cgIChfSU9fRklMRSAqKSAgOw0KZXh0ZXJuIGludCBfX292ZXJmbG93
> ICAoX0lPX0ZJTEUgKiwgaW50KSAgOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgX0lPX2dldGMgIChfSU9fRklMRSAq
> X19mcCkgIDsNCmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9f
> RklMRSAqX19mcCkgIDsNCmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9fRklM
> RSAqX19mcCkgIDsNCmV4dGVybiBpbnQgX0lPX2ZlcnJvciAgKF9JT19GSUxF
> ICpfX2ZwKSAgOw0KDQpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgIChf
> SU9fRklMRSAqX19mcCkgIDsNCg0KIA0KDQoNCg0KZXh0ZXJuIHZvaWQgX0lP
> X2Zsb2NrZmlsZSAgKF9JT19GSUxFICopICA7DQpleHRlcm4gdm9pZCBfSU9f
> ZnVubG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOw0KZXh0ZXJuIGludCBfSU9f
> ZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxF
> ICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOw0KZXh0
> ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFy
> ICosIF9HX3ZhX2xpc3QgKSAgOw0KZXh0ZXJuIF9HX3NzaXplX3QgIF9JT19w
> YWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfR19zc2l6ZV90ICkgIDsNCmV4dGVy
> biBfR19zaXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwg
> X0dfc2l6ZV90ICkgIDsNCg0KZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtv
> ZmYgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCwgaW50KSAgOw0KZXh0
> ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19m
> cG9zX3QgLCBpbnQpICA7DQoNCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1
> cF9hcmVhICAoX0lPX0ZJTEUgKikgIDsNCg0KDQp9DQoNCg0KDQojIDM2ICIv
> aG9tZS9yb29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYu
> aCIgMiAzDQoNCn0NCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDKysiIHsNCmNsYXNzIGlzdHJlYW07
> ICANCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsNCg0KIA0KDQoN
> Cg0KdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtb2ZmOw0KdHlwZWRlZiBfR19m
> cG9zX3QgIHN0cmVhbXBvczsNCnR5cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFt
> c2l6ZTsNCg0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7DQp0
> eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOw0KDQpzdHJ1Y3QgX2lv
> c19maWVsZHMNCnsgIA0KICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsNCiAgICBv
> c3RyZWFtKiBfdGllOw0KICAgIGludCBfd2lkdGg7DQogICAgX19mbXRmbGFn
> cyBfZmxhZ3M7DQogICAgc2hvcnQgIF9maWxsOw0KICAgIF9faW9zdGF0ZSBf
> c3RhdGU7DQogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOw0KICAgIGludCBf
> cHJlY2lzaW9uOw0KDQogICAgdm9pZCAqX2FycmF5czsgIA0KfTsNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgMTE1ICIvaG9tZS9yb29tMS9r
> cmlvbC9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMw0KDQoNCmNs
> YXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7DQogIGlvcyYgb3BlcmF0
> b3I9KGlvcyYpOyAgIA0KICBpb3MgKGNvbnN0IGlvcyYpOyAgDQogIHB1Ymxp
> YzoNCiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAgdHlw
> ZWRlZiBpbnQgaW9zdGF0ZTsNCiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsN
> CiAgICB0eXBlZGVmIGludCBzdHJlYW1zaXplOw0KICAgIGVudW0gaW9fc3Rh
> dGUgew0KCWdvb2RiaXQgPSAwICwNCgllb2ZiaXQgPSAxICwNCglmYWlsYml0
> ID0gMiAsDQoJYmFkYml0ID0gNCAgfTsNCiAgICBlbnVtIG9wZW5fbW9kZSB7
> DQoJaW4gPSAxICwNCglvdXQgPSAyICwNCglhdGUgPSA0ICwNCglhcHAgPSA4
> ICwNCgl0cnVuYyA9IDE2ICwNCglub2NyZWF0ZSA9IDMyICwNCglub3JlcGxh
> Y2UgPSA2NCAsDQoJYmluID0gMTI4ICwgIA0KCWJpbmFyeSA9IDEyOCAgfTsN
> CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07DQogICAgdHlw
> ZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7DQogICAgIA0KICAgIGVudW0g
> eyBza2lwd3M9IDAxICwNCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGlu
> dGVybmFsPSAwMTAgLA0KCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9
> IDAxMDAgLA0KCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAw
> ICwNCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLA0K
> CSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsDQoJICAg
> dW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCANCg0KDQoNCgkgICB9
> Ow0KICAgIGVudW0geyAgDQoJYmFzZWZpZWxkPWRlYytvY3QraGV4LA0KCWZs
> b2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLA0KCWFkanVzdGZpZWxkID0g
> bGVmdCtyaWdodCtpbnRlcm5hbA0KICAgIH07DQoNCiMgMTY4ICIvaG9tZS9y
> b29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMw0K
> DQoNCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9
> DQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBz
> YXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQ0KDQogICAgIA0K
> ICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1cm4gKHNob3J0IClfZmls
> bDsgfQ0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQ0KCXtzaG9ydCAg
> b2xkZiA9IChzaG9ydCApX2ZpbGw7IF9maWxsID0gKGNoYXIpbmV3ZjsgcmV0
> dXJuIG9sZGY7fQ0KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1
> cm4gX2ZsYWdzOyB9DQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3
> X3ZhbCkgew0KCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9
> IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9DQogICAgaW50IHByZWNpc2lv
> bigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0NCiAgICBpbnQgcHJl
> Y2lzaW9uKGludCBuZXdwKSB7DQoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9w
> cmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsN
> CglyZXR1cm4gb2xkcDsgfQ0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3Mg
> dmFsKSB7DQoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3Mg
> fD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQ0KICAgIGZtdGZsYWdzIHNldGYo
> Zm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7DQoJZm10ZmxhZ3Mgb2xk
> Yml0cyA9IF9mbGFnczsNCglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwg
> KHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQ0KICAgIGZtdGZsYWdz
> IHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7DQoJZm10ZmxhZ3Mgb2xkYml0cyA9
> IF9mbGFnczsNCglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9
> DQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9DQog
> ICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93
> aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0NCg0KDQoNCg0KICAgIHZvaWQg
> X3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0NCg0KICAgIHZvaWQgY2xlYXIo
> aW9zdGF0ZSBzdGF0ZSA9IDApIHsNCglfc3RhdGUgPSBfc3RyYnVmID8gc3Rh
> dGUgOiBzdGF0ZXxiYWRiaXQ7DQoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25z
> KSBfdGhyb3dfZmFpbHVyZSgpOyB9DQogICAgdm9pZCBzZXQoaW9zdGF0ZSBm
> bGFnKSB7IF9zdGF0ZSB8PSBmbGFnOw0KCWlmIChfc3RhdGUgJiBfZXhjZXB0
> aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQ0KICAgIHZvaWQgc2V0c3RhdGUo
> aW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgDQoJaWYgKF9zdGF0
> ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9DQogICAgaW50
> IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQ0KICAgIGlu
> dCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsg
> fQ0KICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlv
> czo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0NCiAgICBpbnQgYmFkKCkgY29u
> c3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0NCiAgICBpb3N0
> YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0NCiAgICBv
> cGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lk
> KikwIDogKHZvaWQqKSgtMSk7IH0NCiAgICBpbnQgb3BlcmF0b3IhKCkgY29u
> c3QgeyByZXR1cm4gZmFpbCgpOyB9DQogICAgaW9zdGF0ZSBleGNlcHRpb25z
> KCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0NCiAgICB2b2lkIGV4
> Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsNCglfZXhjZXB0aW9ucyA9IGVu
> YWJsZTsNCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWls
> dXJlKCk7IH0NCg0KICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJl
> dHVybiBfc3RyYnVmOyB9DQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1i
> dWYgKl9zKSB7DQogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBf
> c3RyYnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQ0KDQogICAg
> c3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9uKTsNCiAgICBzdGF0
> aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygx
> KTsgfQ0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOw0KICAgIHN0
> YXRpYyBpbnQgeGFsbG9jKCk7DQogICAgdm9pZComIHB3b3JkKGludCk7DQog
> ICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsNCiAgICBsb25nJiBpd29yZChp
> bnQpOw0KICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsNCg0KDQoNCg0KDQoN
> Cg0KDQoNCiAgICAgDQogICAgY2xhc3MgSW5pdCB7DQogICAgcHVibGljOg0K
> ICAgICAgSW5pdCAoKSB7IH0NCiAgICB9Ow0KDQogIHByb3RlY3RlZDoNCiAg
> ICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVf
> dG8gPSAwKTsNCiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7DQogICAgaW5s
> aW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAw
> KTsNCn07DQoNCg0KDQoNCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19k
> aXI7DQoNCg0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQpjbGFzcyBzdHJlYW1t
> YXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgew0KICAgIGZyaWVuZCBjbGFz
> cyBzdHJlYW1idWY7DQogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQp
> IHsgX3BvcyA9IG9mZnNldDsgfQ0KICBwdWJsaWM6DQogICAgc3RyZWFtbWFy
> a2VyKHN0cmVhbWJ1ZiAqc2IpOw0KICAgIH5zdHJlYW1tYXJrZXIoKTsNCiAg
> ICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0NCiAgICBpbnQgZGVsdGEo
> c3RyZWFtbWFya2VyJik7DQogICAgaW50IGRlbHRhKCk7DQp9Ow0KDQpzdHJ1
> Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIA0KICAgIGZyaWVu
> ZCBjbGFzcyBpb3M7DQogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07DQogICAg
> ZnJpZW5kIGNsYXNzIG9zdHJlYW07DQogICAgZnJpZW5kIGNsYXNzIHN0cmVh
> bW1hcmtlcjsNCiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJu
> ICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQ0KICBw
> cm90ZWN0ZWQ6DQogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxsOyAg
> DQogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0N
> CiAgICB2b2lkIF91bl9saW5rKCk7DQogICAgdm9pZCBfbGlua19pbigpOw0K
> ICAgIGNoYXIqIGdwdHIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX2ZsYWdz
> ICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0N
> CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX3B0
> cjsgfQ0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
> IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9l
> bmQ7IH0NCiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193
> cml0ZV9lbmQ7IH0NCiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJu
> IF9JT193cml0ZV9iYXNlOyB9DQogICAgY2hhciogZWJhY2soKSBjb25zdA0K
> ICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jh
> c2UgOiBfSU9fcmVhZF9iYXNlO30NCiAgICBjaGFyKiBiYXNlKCkgY29uc3Qg
> eyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9DQogICAgY2hhciogZWJ1ZigpIGNv
> bnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9DQogICAgaW50IGJsZW4oKSBj
> b25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQ0K
> ICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisr
> ID0gYzsgfQ0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9
> DQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9m
> bGFncyAgPSBmOyByZXR1cm4gZmw7fQ0KICAgIHZvaWQgeHNldGZsYWdzKGlu
> dCBmKSB7IF9mbGFncyAgfD0gZjsgfQ0KICAgIHZvaWQgeHNldGZsYWdzKGlu
> dCBmLCBpbnQgbWFzaykNCiAgICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYg
> fm1hc2spIHwgKGYgJiBtYXNrKTsgfQ0KICAgIHZvaWQgZ2J1bXAoaW50IG4p
> DQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9
> bik6KF9JT19yZWFkX3B0cis9bik7fQ0KICAgIHZvaWQgcGJ1bXAoaW50IG4p
> IHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9DQogICAgdm9pZCBzZXRiKGNoYXIq
> IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsNCiAgICB2b2lkIHNldHAoY2hhciog
> cCwgY2hhciogZXApDQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0
> ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQ0KICAgIHZvaWQgc2V0Zyhj
> aGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsNCiAgICAgIGlmIChfZmxh
> Z3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgDQog
> ICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9J
> T19yZWFkX2VuZCA9IGVnOyB9DQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJl
> dHVybiBfc2hvcnRidWY7IH0NCg0KICAgIGludCBpbl9iYWNrdXAoKSB7IHJl
> dHVybiBfZmxhZ3MgJiAweDEwMCA7IH0NCiAgICAgDQogICAgY2hhciAqR2Jh
> c2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBf
> SU9fcmVhZF9iYXNlOyB9DQogICAgIA0KICAgIGNoYXIgKmVHcHRyKCkgeyBy
> ZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9l
> bmQ7IH0NCiAgICAgDQogICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9i
> YWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9DQog
> ICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQ0K
> ICAgICANCiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgp
> ID8gX0lPX3JlYWRfZW5kIDogX0lPX3NhdmVfZW5kOyB9DQogICAgY2hhciAq
> TmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9DQogICAgY2hhciAq
> ZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0NCiAgICBpbnQgaGF2
> ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IChfX251bGwp
> IDsgfQ0KICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2Vy
> cyAhPSAoX19udWxsKSA7IH0NCiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEo
> KTsNCiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICANCiAgICBpbnQgcHV0
> X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0NCiAgICBpbnQg
> c3dpdGNoX3RvX2dldF9tb2RlKCk7DQogICAgDQogICAgc3RyZWFtYnVmKGlu
> dCBmbGFncz0wKTsNCiAgcHVibGljOg0KICAgIHN0YXRpYyBpbnQgZmx1c2hf
> YWxsKCk7DQogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJl
> ZCgpOyAgDQogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7DQogICAgdmlydHVh
> bCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICANCiAgICB2aXJ0dWFs
> IGludCB1bmRlcmZsb3coKTsgIA0KICAgIHZpcnR1YWwgaW50IHVmbG93KCk7
> ICANCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOw0KIA0KICAg
> IHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3Ry
> ZWFtc2l6ZSBuKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNo
> YXIqIHMsIHN0cmVhbXNpemUgbik7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mg
> c2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjpp
> bnxpb3M6Om91dCk7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3Bvcyhz
> dHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOw0K
> DQogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVr
> X2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQ0KICAgICAgeyBy
> ZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9DQogICAg
> c3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUg
> PSBpb3M6OmlufGlvczo6b3V0KQ0KICAgICAgeyByZXR1cm4gX0lPX3NlZWtw
> b3MgKHRoaXMsIHBvcywgbW9kZSk7IH0NCiAgICBzdHJlYW1wb3Mgc3NlZWtv
> ZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9z
> OjpvdXQpOw0KICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9z
> LCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwg
> c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7DQogICAgdmly
> dHVhbCBpbnQgc3luYygpOw0KICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUo
> KTsNCg0KICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGlu
> dCBkZWx0YSA9IDApOw0KICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsNCiAg
> ICBpbnQgc3VuZ2V0YygpOw0KICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1
> cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQ0KICAgIGludCBsaW5lYnVmZmVy
> ZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQ0KICAg
> IHZvaWQgdW5idWZmZXJlZChpbnQgaSkNCgl7IGlmIChpKSBfZmxhZ3MgfD0g
> MiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQ0KICAgIHZvaWQgbGluZWJ1ZmZl
> cmVkKGludCBpKQ0KCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2Ug
> X2ZsYWdzICY9IH4weDIwMCA7IH0NCiAgICBpbnQgYWxsb2NhdGUoKSB7ICAN
> CglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7DQoJZWxz
> ZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9DQogICAgIA0KICAgIHZvaWQgYWxs
> b2NidWYoKSB7IGlmIChiYXNlKCkgPT0gKF9fbnVsbCkgKSBkb2FsbG9jYnVm
> KCk7IH0NCiAgICB2b2lkIGRvYWxsb2NidWYoKTsNCiAgICBpbnQgaW5fYXZh
> aWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0N
> CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRy
> IC0gX0lPX3dyaXRlX2Jhc2U7IH0NCiAgICBzdHJlYW1zaXplIHNwdXRuKGNv
> bnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMs
> IG4pOyB9DQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1z
> aXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0NCiAg
> ICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy
> ZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9DQogICAgaW50IGlnbm9y
> ZShpbnQpOw0KICAgIGludCBnZXRfY29sdW1uKCk7DQogICAgaW50IHNldF9j
> b2x1bW4oaW50KTsNCiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0df
> c2l6ZV90ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7DQog
> ICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlz
> KTsgfQ0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz
> KTsgfQ0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5f
> SU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9f
> dW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5z
> aWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0N
> CiAgICBpbnQgc25leHRjKCkgew0KCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lP
> X3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQ0KCSAg
> cmV0dXJuICgtMSkgOw0KCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBz
> Z2V0YygpOyB9DQogICAgdm9pZCBzdG9zc2MoKSB7IGlmIChfSU9fcmVhZF9w
> dHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9DQogICAgaW50
> IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3Mq
> IHN0cmVhbSA9IChfX251bGwpICk7DQogICAgaW50IHNjYW4oY2hhciBjb25z
> dCAqZm10MCAuLi4pOw0KICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQw
> LCBfR192YV9saXN0ICBhcCk7DQogICAgaW50IGZvcm0oY2hhciBjb25zdCAq
> Zm10MCAuLi4pOw0KDQoNCg0KDQogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
> c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsNCiAgICB2aXJ0
> dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1z
> aXplKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1v
> ZmYsIF9zZWVrX2Rpcik7DQogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7
> DQogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgDQp9Ow0KDQog
> DQogDQoNCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsNCiAg
> cHJvdGVjdGVkOg0KICAgIHZvaWQgaW5pdCgpOw0KICBwdWJsaWM6DQogICAg
> c3RhdGljIGNvbnN0IGludCBvcGVucHJvdDsgIA0KICAgIGZpbGVidWYoKTsN
> CiAgICBmaWxlYnVmKGludCBmZCk7DQogICAgZmlsZWJ1ZihpbnQgZmQsIGNo
> YXIqIHAsIGludCBsZW4pOw0KDQoNCg0KICAgIH5maWxlYnVmKCk7DQogICAg
> ZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7DQogICAgZmlsZWJ1Ziogb3Blbihj
> b25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7DQogICAg
> ZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVu
> bW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOw0KICAgIHZpcnR1YWwgaW50
> IHVuZGVyZmxvdygpOw0KICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBj
> ID0gKC0xKSApOw0KICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4g
> X2ZpbGVubyA+PSAwOyB9DQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4g
> aXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9DQogICAgZmlsZWJ1Ziog
> Y2xvc2UoKTsNCiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7DQogICAg
> dmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2Rp
> ciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7DQogICAgdmlydHVhbCBz
> dHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsNCiAgICBzdHJl
> YW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOw0K
> ICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7
> DQogICAgdmlydHVhbCBpbnQgc3luYygpOw0KICBwcm90ZWN0ZWQ6ICANCiAN
> CiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdw
> dHIoKTsgfQ0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFk
> aW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9DQogICAgIA0KICAgIGNoYXIq
> IGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQ0KICAgICANCiAgICB2
> aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1z
> aXplIHNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0
> cmVhbW9mZiwgX3NlZWtfZGlyKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUg
> c3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsNCiAgICB2aXJ0
> dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICANCiAgICB2aXJ0dWFsIGludCBz
> eXNfY2xvc2UoKTsNCg0KDQoNCg0KfTsNCg0KaW5saW5lIHZvaWQgaW9zOjpp
> bml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgew0KCQlfc3Rh
> dGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0
> aW9ucz0wOw0KCQlfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9
> MDsgX2ZpbGw9JyAnOw0KDQoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRl
> YzsNCg0KDQoNCgkJX3ByZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQ0KDQpp
> bmxpbmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3Rv
> KSB7IGluaXQoc2IsIHRpZV90byk7IH0NCg0KaW5saW5lIGlvczo6fmlvcygp
> IHsNCg0KDQoNCiAgICBpZiAoX2FycmF5cykgZGVsZXRlIFtdIF9hcnJheXM7
> DQp9DQp9ICANCg0KIyAzMSAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvaW5j
> bHVkZS9nKysvaW9zdHJlYW0uaCIgMiAzDQoNCg0KZXh0ZXJuICJDKysiIHsN
> CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07DQp0eXBlZGVmIGlvcyYg
> KCpfX21hbmlwKShpb3MmKTsNCnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5p
> cCkoaXN0cmVhbSYpOw0KdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShv
> c3RyZWFtJik7DQoNCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMp
> Ow0KZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOw0KZXh0
> ZXJuIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYgb3V0cyk7DQpleHRlcm4gb3N0
> cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsNCg0KY2xhc3Mgb3N0cmVhbSA6
> IHZpcnR1YWwgcHVibGljIGlvcw0Kew0KICAgICANCiAgICB2b2lkIGRvX29z
> ZngoKTsNCiAgcHVibGljOg0KICAgIG9zdHJlYW0oKSB7IH0NCiAgICBvc3Ry
> ZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZWQ9IChfX251bGwpICk7
> DQogICAgaW50IG9wZngoKSB7DQoJaWYgKCFnb29kKCkpIHJldHVybiAwOw0K
> CWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7
> fSB9DQogICAgdm9pZCBvc2Z4KCkgeyAgOw0KCQkgIGlmIChmbGFncygpICYg
> KGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkNCgkJICAgICAgZG9fb3NmeCgp
> OyB9DQogICAgb3N0cmVhbSYgZmx1c2goKTsNCiAgICBvc3RyZWFtJiBwdXQo
> Y2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0N
> Cg0KDQoNCg0KDQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywg
> c3RyZWFtc2l6ZSBuKTsNCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNp
> Z25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJldHVybiB3
> cml0ZSgoY29uc3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJlYW0mIHdyaXRl
> KGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7
> IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJl
> YW0mIHdyaXRlKGNvbnN0IHZvaWQgKnMsIHN0cmVhbXNpemUgbikNCiAgICAg
> IHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9DQogICAgb3N0
> cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsNCiAgICBvc3RyZWFtJiBzZWVrcChz
> dHJlYW1vZmYsIF9zZWVrX2Rpcik7DQogICAgc3RyZWFtcG9zIHRlbGxwKCk7
> DQogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsN
> CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBjaGFyICpmb3JtYXQsIF9HX3Zh
> X2xpc3QgIGFyZ3MpOw0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFy
> IGMpOw0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBj
> KSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0NCiAgICBvc3RyZWFt
> JiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykg
> PDwgKGNoYXIpYzsgfQ0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
> Y2hhciAqcyk7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNp
> Z25lZCBjaGFyICpzKQ0KCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNo
> YXIqKXM7IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25l
> ZCBjaGFyICpzKQ0KCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIq
> KXM7IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZvaWQgKnAp
> Ow0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOw0KICAgIG9zdHJl
> YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOw0KICAgIG9zdHJlYW0m
> IG9wZXJhdG9yPDwobG9uZyBuKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
> KHVuc2lnbmVkIGxvbmcgbik7DQoNCiAgICBfX2V4dGVuc2lvbl9fIG9zdHJl
> YW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOw0KICAgIF9fZXh0ZW5zaW9u
> X18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7
> DQoNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4g
> b3BlcmF0b3I8PCgoaW50KW4pO30NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
> KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWdu
> ZWQgaW50KW4pO30NCg0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi
> KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0NCg0KICAgIG9zdHJl
> YW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOw0KICAgIG9zdHJlYW0mIG9wZXJh
> dG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4p
> OyB9DQoNCg0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJs
> ZSBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0NCg0KICAg
> IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4g
> KCpmdW5jKSgqdGhpcyk7IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9f
> bWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQ0K
> ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7DQoNCg0KDQp9
> Ow0KDQpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zDQp7DQog
> ICAgIA0KcHJvdGVjdGVkOg0KICAgIF9HX3NpemVfdCAgX2djb3VudDsNCg0K
> ICAgIGludCBfc2tpcF93cygpOw0KICBwdWJsaWM6DQogICAgaXN0cmVhbSgp
> OiBfZ2NvdW50ICgwKSB7IH0NCiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2Is
> IG9zdHJlYW0qdGllZD0gKF9fbnVsbCkgKTsNCiAgICBpc3RyZWFtJiBnZXQo
> Y2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7DQogICAg
> aXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh
> ciBkZWxpbSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxl
> biwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOw0KICAg
> IGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQo
> KGNoYXImKWMpOyB9DQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIs
> IGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsNCiAgICBpc3RyZWFtJiBn
> ZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxp
> bSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4s
> IGRlbGltKTsgfQ0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykg
> IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0NCiAgICBpc3RyZWFtJiBnZXQo
> c2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp
> DQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQog
> ICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVu
> LCBjaGFyIGRlbGltID0gJ1xuJykNCgl7IHJldHVybiBnZXRsaW5lKChjaGFy
> KilwdHIsIGxlbiwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgcmVhZChjaGFy
> ICpwdHIsIHN0cmVhbXNpemUgbik7DQogICAgaXN0cmVhbSYgcmVhZCh1bnNp
> Z25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsgcmV0dXJu
> IHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiByZWFkKHNp
> Z25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsgcmV0dXJu
> IHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiByZWFkKHZv
> aWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gcmVhZCgo
> Y2hhciopcHRyLCBuKTsgfQ0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYm
> IHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7DQogICAgaXN0cmVhbSYgZ2V0cyhj
> aGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOw0KICAgIGludCBpcGZ4KGlu
> dCBuZWVkID0gMCkgew0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxi
> aXQpOyByZXR1cm4gMDsgfQ0KCWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGll
> ICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQp
> KSBfdGllLT5mbHVzaCgpOw0KCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYg
> aW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsNCgkgIGVsc2UgcmV0
> dXJuIDE7DQoJfQ0KICAgIH0NCiAgICBpbnQgaXBmeDAoKSB7ICANCglpZiAo
> IWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0NCgll
> bHNlIHsNCgkgICA7DQoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsNCgkg
> IGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygp
> Ow0KCSAgZWxzZSByZXR1cm4gMTsNCgl9DQogICAgfQ0KICAgIGludCBpcGZ4
> MSgpIHsgIA0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy
> ZXR1cm4gMDsgfQ0KCWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGllICYmIHJk
> YnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsNCgkgIHJl
> dHVybiAxOw0KCX0NCiAgICB9DQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9DQog
> ICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7DQoJ
> CWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsNCgkJICAgICAg
> IGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsNCgkJICAgICAg
> IHJldHVybiBjaDsNCgkJICAgICB9IH0NCiAgICBpbnQgcGVlaygpOw0KICAg
> IF9HX3NpemVfdCAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQ0KICAg
> IGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7
> DQogICAgaW50IHN5bmMgKCk7DQogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFt
> cG9zKTsNCiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rp
> cik7DQogICAgc3RyZWFtcG9zIHRlbGxnKCk7DQogICAgaXN0cmVhbSYgcHV0
> YmFjayhjaGFyIGNoKSB7DQoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0
> YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7DQoJcmV0
> dXJuICp0aGlzO30NCiAgICBpc3RyZWFtJiB1bmdldCgpIHsNCglpZiAoZ29v
> ZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9z
> OjpiYWRiaXQpOw0KCXJldHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYgc2Nh
> bihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsNCiAgICBpc3RyZWFtJiB2c2Nh
> bihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOw0KDQoN
> Cg0KDQoNCg0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOw0KICAg
> IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1
> cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0NCiAgICBpc3RyZWFtJiBvcGVy
> YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNo
> YXIqKXApOyB9DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsN
> CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHty
> ZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9w
> ZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+Pigo
> Y2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7DQog
> ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7DQoNCiAgICBfX2V4dGVu
> c2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7DQogICAg
> X19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv
> bmcgbG9uZyYpOw0KDQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYp
> Ow0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7DQog
> ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7DQogICAg
> aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOw0KDQogICAg
> aXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7DQoNCiAgICBpc3RyZWFtJiBv
> cGVyYXRvcj4+KGZsb2F0Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihk
> b3VibGUmKTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl
> Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7
> KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYg
> b3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0
> aGlzKTsgfQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7
> DQp9Ow0KDQpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJs
> aWMgb3N0cmVhbQ0Kew0KICBwdWJsaWM6DQogICAgaW9zdHJlYW0oKSB7IH0N
> CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IChf
> X251bGwpICk7DQp9Ow0KDQpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWdu
> IDogcHVibGljIGlzdHJlYW0gew0KcHVibGljOg0KICBfSU9faXN0cmVhbV93
> aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOw0KICBfSU9faXN0cmVh
> bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2ln
> biYgcmhzKQ0KICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8
> aXN0cmVhbSY+IChyaHMpKTsgfQ0KfTsNCg0KY2xhc3MgX0lPX29zdHJlYW1f
> d2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsNCnB1YmxpYzoNCiAgX0lP
> X29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsNCiAg
> X0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFt
> X3dpdGhhc3NpZ24mIHJocykNCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0
> YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0NCn07DQoNCmV4dGVybiBf
> SU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsNCiANCmV4dGVybiBfSU9fb3N0
> cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7DQoNCmV4dGVybiBfSU9fb3N0
> cmVhbV93aXRoYXNzaWduIGNsb2cNCg0KDQoNCjsNCg0KZXh0ZXJuIGlzdHJl
> YW0mIGxvY2soaXN0cmVhbSYgaW5zKTsNCmV4dGVybiBpc3RyZWFtJiB1bmxv
> Y2soaXN0cmVhbSYgaW5zKTsNCmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJl
> YW0mIG91dHMpOw0KZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBv
> dXRzKTsNCg0Kc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICANCg0KaW5s
> aW5lIGlvcyYgZGVjKGlvcyYgaSkNCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6
> OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9DQppbmxpbmUg
> aW9zJiBoZXgoaW9zJiBpKQ0KeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVj
> fGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0NCmlubGluZSBpb3Mm
> IG9jdChpb3MmIGkpDQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9z
> OjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQ0KfSAgDQoNCg0KIyA2ICIv
> aG9tZS9yb29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2lvc3RyZWFtIiAyIDMN
> Cg0KDQoNCiMgNiAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2lu
> Y2x1ZGUvVmVjdG9yM0QuSCIgMiAzDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8
> Y2xhc3MgbnVtVD4gY2xhc3MgVFF1YXRlcm5pb247DQoNCnRlbXBsYXRlIDxj
> bGFzcyBudW1UPg0KY2xhc3MgVFZlY3RvcjNEIHsNCiAgICANCiAgcHVibGlj
> Og0KICANCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCg0KICAgIFRW
> ZWN0b3IzRCggdm9pZCApOw0KDQogICAgVFZlY3RvcjNEKCBudW1UIGRUICk7
> DQoNCiAgICBUVmVjdG9yM0QoIG51bVQgZFgsIG51bVQgZFksIG51bVQgZFog
> KTsNCg0KICAgIFRWZWN0b3IzRCggY29uc3QgbnVtVCogcGRYICk7DQoNCiAg
> ICBUVmVjdG9yM0QoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICk7DQog
> IA0KICAgIH5UVmVjdG9yM0QoKTsNCiAgICAgIA0KICAgICAgICANCiAgICAg
> ICAgDQogICAgICAgIA0KDQogICAgVFZlY3RvcjNEPG51bVQ+JiAgIG9wZXJh
> dG9yID0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIHJocyApOw0KICAgIFRW
> ZWN0b3IzRDxudW1UPiYgICBvcGVyYXRvciA9ICggbnVtVCBkVCApOw0KDQog
> ICAgbnVtVCYgICAgICBvcGVyYXRvcltdKCBpbnQgaUlkeCApOw0KICAgIA0K
> ICAgIFRWZWN0b3IzRDxudW1UPiAgICBvcGVyYXRvciAtICggdm9pZCApOw0K
> DQogICAgVFZlY3RvcjNEPG51bVQ+JiAgIG9wZXJhdG9yICs9ICggY29uc3Qg
> VFZlY3RvcjNEPG51bVQ+JiByaHMgKTsNCiAgICBUVmVjdG9yM0Q8bnVtVD4m
> ICAgb3BlcmF0b3IgKz0gKCBudW1UIGRUICk7DQoNCiAgICBUVmVjdG9yM0Q8
> bnVtVD4mICAgb3BlcmF0b3IgLT0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4m
> IHJocyApOw0KICAgIFRWZWN0b3IzRDxudW1UPiYgICBvcGVyYXRvciAtPSAo
> IG51bVQgZFQgKTsNCg0KICAgIFRWZWN0b3IzRDxudW1UPiYgICBvcGVyYXRv
> ciAqPSAoIG51bVQgZFQgKTsNCiAgICBUVmVjdG9yM0Q8bnVtVD4mICAgb3Bl
> cmF0b3IgLz0gKCBudW1UIGRUICk7DQoNCiAgICB2b2lkIG5vcm1hbGl6ZSgg
> dm9pZCApOw0KDQogICAgdm9pZCBzZXRYKCBudW1UIGRYICk7DQogICAgdm9p
> ZCBzZXRZKCBudW1UIGRZICk7DQogICAgdm9pZCBzZXRaKCBudW1UIGRaICk7
> DQoNCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCg0KICAgIG51bVQg
> ICAgICBvcGVyYXRvcltdKCBpbnQgaUlkeCApIGNvbnN0Ow0KICAgIA0KICAg
> IG51bVQgICAgICBkWCggdm9pZCApIGNvbnN0OyAgICANCiAgICBudW1UICAg
> ICAgZFkoIHZvaWQgKSBjb25zdDsNCiAgICBudW1UICAgICAgZFooIHZvaWQg
> KSBjb25zdDsNCg0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KDQog
> ICAgZnJpZW5kIGNsYXNzICBUUXVhdGVybmlvbjxudW1UPjsNCg0KICAgIGZy
> aWVuZCBUVmVjdG9yM0Q8bnVtVD4gb3BlcmF0b3IgKyAoIGNvbnN0IFRWZWN0
> b3IzRDxudW1UPiYsIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgKTsNCiAgICBm
> cmllbmQgVFZlY3RvcjNEPG51bVQ+IG9wZXJhdG9yICsgKCBjb25zdCBUVmVj
> dG9yM0Q8bnVtVD4mLCBudW1UICk7DQogICAgZnJpZW5kIFRWZWN0b3IzRDxu
> dW1UPiBvcGVyYXRvciArICggbnVtVCwgY29uc3QgVFZlY3RvcjNEPG51bVQ+
> JiApOw0KICAgIGZyaWVuZCBUVmVjdG9yM0Q8bnVtVD4gb3BlcmF0b3IgLSAo
> IGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIGNvbnN0IFRWZWN0b3IzRDxudW1U
> PiYgKTsNCiAgICBmcmllbmQgVFZlY3RvcjNEPG51bVQ+IG9wZXJhdG9yIC0g
> KCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mLCBudW1UICk7DQogICAgZnJpZW5k
> IFRWZWN0b3IzRDxudW1UPiBvcGVyYXRvciAtICggbnVtVCwgY29uc3QgVFZl
> Y3RvcjNEPG51bVQ+JiApOw0KICAgIGZyaWVuZCBUVmVjdG9yM0Q8bnVtVD4g
> b3BlcmF0b3IgKiAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIG51bVQgKTsN
> CiAgICBmcmllbmQgVFZlY3RvcjNEPG51bVQ+IG9wZXJhdG9yICogKCBudW1U
> LCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mICk7DQogICAgZnJpZW5kIG51bVQg
> ICAgICAgICAgICBvcGVyYXRvciAqICggY29uc3QgVFZlY3RvcjNEPG51bVQ+
> JiwgY29uc3QgVFZlY3RvcjNEPG51bVQ+JiApOyAgDQogICAgDQogICAgZnJp
> ZW5kIFRWZWN0b3IzRDxudW1UPiBvcGVyYXRvciAvICggY29uc3QgVFZlY3Rv
> cjNEPG51bVQ+JiwgbnVtVCApOw0KICAgIGZyaWVuZCBUVmVjdG9yM0Q8bnVt
> VD4gb3BlcmF0b3IgXiAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIGNvbnN0
> IFRWZWN0b3IzRDxudW1UPiYgKTsNCiAgICANCiAgICBmcmllbmQgYm9vbF90
> IG9wZXJhdG9yICE9ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNv
> bnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICk7DQogICAgZnJpZW5kIGJvb2xf
> dCBvcGVyYXRvciAhPSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIG51bVQg
> KTsNCiAgICBmcmllbmQgYm9vbF90IG9wZXJhdG9yICE9ICggbnVtVCwgY29u
> c3QgVFZlY3RvcjNEPG51bVQ+JiApOw0KICAgIA0KICAgIGZyaWVuZCBib29s
> X3Qgb3BlcmF0b3IgPT0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mLCBjb25z
> dCBUVmVjdG9yM0Q8bnVtVD4mICk7DQogICAgZnJpZW5kIGJvb2xfdCBvcGVy
> YXRvciA9PSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIG51bVQgKTsNCiAg
> ICBmcmllbmQgYm9vbF90IG9wZXJhdG9yID09ICggbnVtVCwgY29uc3QgVFZl
> Y3RvcjNEPG51bVQ+JiApOw0KICAgIA0KICAgIGZyaWVuZCBudW1UICAgICAg
> ICAgICAgYWJzKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mICk7ICAgICAgDQog
> ICAgZnJpZW5kIG51bVQgICAgICAgICAgICBub3JtKCBjb25zdCBUVmVjdG9y
> M0Q8bnVtVD4mICk7ICAgICANCiAgICBmcmllbmQgbnVtVCAgICAgICAgICAg
> IGFic190cmFucyggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiApOw0KICAgIGZy
> aWVuZCBudW1UICAgICAgICAgICAgbm9ybV90cmFucyggY29uc3QgVFZlY3Rv
> cjNEPG51bVQ+JiApOw0KICAgIGZyaWVuZCBudW1UICAgICAgICAgICAgYW5n
> bGUoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIGNvbnN0IFRWZWN0b3IzRDxu
> dW1UPiYgKTsNCiAgICBmcmllbmQgVFZlY3RvcjNEPG51bVQ+IHVuaXQoIGNv
> bnN0IFRWZWN0b3IzRCYgKTsNCg0KICAgICAgICANCiAgICAgICAgDQogICAg
> ICAgIA0KDQogICAgZnJpZW5kIGlzdHJlYW0mIG9wZXJhdG9yID4+ICggaXN0
> cmVhbSYgaXMsIFRWZWN0b3IzRDxudW1UPiYgKTsNCiAgICBmcmllbmQgb3N0
> cmVhbSYgb3BlcmF0b3IgPDwgKCBvc3RyZWFtJiBvcywgY29uc3QgVFZlY3Rv
> cjNEPG51bVQ+JiApOw0KDQogIHByaXZhdGU6DQoNCiAgICBudW1UIGRYXzsN
> CiAgICBudW1UIGRZXzsNCiAgICBudW1UIGRaXzsNCg0KfTsNCg0KIA0KIA0K
> IA0KDQojIDEgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1ZGUvZysr
> L2NtYXRoIiAxIDMNCiANCiANCg0KDQoNCg0KIyAxICIvaG9tZS9yb29tMS9r
> cmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNS4x
> L2VnY3MtMi45MC4xMi9pbmNsdWRlL21hdGguaCIgMSAzIDQNCiANCg0KDQoN
> Cg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KI3ByYWdtYSBpZGVudAkiQCgj
> KW1hdGguaAkyLjUJOTUvMDIvMDciDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQogDQoNCg0KdHlwZWRlZiB1bmlvbiBfaF92YWwgew0KICAJdW5z
> aWduZWQgbG9uZyBfaVsyXTsNCglkb3VibGUgX2Q7DQp9IF9oX3ZhbDsNCg0K
> DQpleHRlcm4gY29uc3QgX2hfdmFsIF9faHVnZV92YWw7DQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> ZXh0ZXJuIGludCBzaWduZ2FtOw0KDQoNCg0KDQogDQoNCg0KZW51bSB2ZXJz
> aW9uIHtsaWJtX2llZWUgPSAtMSwgY19pc3N1ZV80LCBhbnNpXzEsIHN0cmlj
> dF9hbnNpfTsNCg0KDQpleHRlcm4gY29uc3QgZW51bSB2ZXJzaW9uIF9saWJf
> dmVyc2lvbjsNCg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9fbWF0aF9leGNlcHRp
> b24gIHsNCg0KDQoNCglpbnQgdHlwZTsNCgljaGFyICpuYW1lOw0KCWRvdWJs
> ZSBhcmcxOw0KCWRvdWJsZSBhcmcyOw0KCWRvdWJsZSByZXR2YWw7DQp9Ow0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQogDQoNCg0KZXh0ZXJuIGRvdWJsZSBhY29zICAoZG91Ymxl
> KSAgOw0KZXh0ZXJuIGRvdWJsZSBhc2luICAoZG91YmxlKSAgOw0KZXh0ZXJu
> IGRvdWJsZSBhdGFuICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBhdGFu
> MiAgKGRvdWJsZSwgZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBjb3MgIChk
> b3VibGUpICA7DQpleHRlcm4gZG91YmxlIHNpbiAgKGRvdWJsZSkgIDsNCmV4
> dGVybiBkb3VibGUgdGFuICAoZG91YmxlKSAgOw0KDQpleHRlcm4gZG91Ymxl
> IGNvc2ggIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIHNpbmggIChkb3Vi
> bGUpICA7DQpleHRlcm4gZG91YmxlIHRhbmggIChkb3VibGUpICA7DQoNCmV4
> dGVybiBkb3VibGUgZXhwICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBm
> cmV4cCAgKGRvdWJsZSwgaW50ICopICA7DQpleHRlcm4gZG91YmxlIGxkZXhw
> ICAoZG91YmxlLCBpbnQpICA7DQpleHRlcm4gZG91YmxlIGxvZyAgKGRvdWJs
> ZSkgIDsNCmV4dGVybiBkb3VibGUgbG9nMTAgIChkb3VibGUpICA7DQpleHRl
> cm4gZG91YmxlIG1vZGYgIChkb3VibGUsIGRvdWJsZSAqKSAgOw0KDQpleHRl
> cm4gZG91YmxlIHBvdyAgKGRvdWJsZSwgZG91YmxlKSAgOw0KZXh0ZXJuIGRv
> dWJsZSBzcXJ0ICAoZG91YmxlKSAgOw0KDQpleHRlcm4gZG91YmxlIGNlaWwg
> IChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGZhYnMgIChkb3VibGUpICA7
> DQpleHRlcm4gZG91YmxlIGZsb29yICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRv
> dWJsZSBmbW9kICAoZG91YmxlLCBkb3VibGUpICA7DQoNCg0KDQogDQoNCg0K
> ZXh0ZXJuIGRvdWJsZSBlcmYgIChkb3VibGUpICA7DQpleHRlcm4gZG91Ymxl
> IGVyZmMgIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGdhbW1hICAoZG91
> YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBoeXBvdCAgKGRvdWJsZSwgZG91Ymxl
> KSAgOw0KZXh0ZXJuIGludCBpc25hbiAgKGRvdWJsZSkgIDsNCmV4dGVybiBk
> b3VibGUgajAgIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGoxICAoZG91
> YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBqbiAgKGludCwgZG91YmxlKSAgOw0K
> ZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgIChkb3VibGUpICA7DQpleHRlcm4gZG91
> YmxlIHkwICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSB5MSAgKGRvdWJs
> ZSkgIDsNCmV4dGVybiBkb3VibGUgeW4gIChpbnQsIGRvdWJsZSkgIDsNCg0K
> DQoNCiANCg0KDQpleHRlcm4gZG91YmxlIGFjb3NoICAoZG91YmxlKSAgOw0K
> ZXh0ZXJuIGRvdWJsZSBhc2luaCAgKGRvdWJsZSkgIDsNCmV4dGVybiBkb3Vi
> bGUgYXRhbmggIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGNicnQgIChk
> b3VibGUpICA7DQpleHRlcm4gZG91YmxlIGxvZ2IgIChkb3VibGUpICA7DQpl
> eHRlcm4gZG91YmxlIG5leHRhZnRlciAgKGRvdWJsZSwgZG91YmxlKSAgOw0K
> ZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgIChkb3VibGUsIGRvdWJsZSkgIDsN
> CmV4dGVybiBkb3VibGUgc2NhbGIgIChkb3VibGUsIGRvdWJsZSkgIDsNCg0K
> IA0KDQoNCmV4dGVybiBkb3VibGUgZXhwbTEgIChkb3VibGUpICA7DQpleHRl
> cm4gaW50IGlsb2diICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBsb2cx
> cCAgKGRvdWJsZSkgIDsNCmV4dGVybiBkb3VibGUgcmludCAgKGRvdWJsZSkg
> IDsNCg0KDQoNCiANCg0KDQoNCg0KDQpleHRlcm4gaW50IG1hdGhlcnIgIChz
> dHJ1Y3QgX19tYXRoX2V4Y2VwdGlvbiAgKikgIDsNCg0KDQoNCg0KIA0KDQoN
> CmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgIChkb3VibGUpICA7DQoNCiAN
> Cg0KDQpleHRlcm4gZG91YmxlIGNvcHlzaWduICAoZG91YmxlLCBkb3VibGUp
> ICA7DQpleHRlcm4gZG91YmxlIHNjYWxibiAgKGRvdWJsZSwgaW50KSAgOw0K
> DQogDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCmV4dGVybiBmbG9hdCBtb2Rm
> ZiAgKGZsb2F0LCBmbG9hdCAqKSAgOw0KDQojIDEgIi9ob21lL3Jvb20xL2ty
> aW9sL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEv
> ZWdjcy0yLjkwLjEyL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAxIDMgNA0K
> IA0KIA0KDQogDQogDQogDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0K
> I3ByYWdtYSBpZGVudAkiQCgjKWZsb2F0aW5ncG9pbnQuaAkyLjQgOTQvMDYv
> MDkiDQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDEg
> Ii9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1
> bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1ZGUvc3RkaW8uaCIg
> MSAzIDQNCiANCiANCg0KIA0KIA0KIA0KDQogDQoNCg0KDQoNCg0KDQojcHJh
> Z21hIGlkZW50CSJAKCMpc3RkaW8uaAkxLjM5CTk1LzEyLzA0IFNNSSIJDQoN
> CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0
> DQogDQogDQoNCiANCiANCiANCg0KDQoNCg0KI3ByYWdtYSBpZGVudAkiQCgj
> KWZlYXR1cmVfdGVzdHMuaAkxLjcJOTQvMTIvMDYgU01JIg0KDQoNCmV4dGVy
> biAiQyIgew0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCn0NCg0K
> DQoNCiMgMTcgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2MtbGli
> L3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1ZGUv
> c3RkaW8uaCIgMiAzIDQNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xp
> c3QuaCIgMSAzIDQNCiANCg0KDQoNCg0KDQoNCg0KI3ByYWdtYSBpZGVudAki
> QCgjKXZhX2xpc3QuaAkxLjYJOTYvMDEvMjYgU01JIg0KDQogDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgNDEgIi91c3IvaW5j
> bHVkZS9zeXMvdmFfbGlzdC5oIiAzIDQNCg0KDQoNCnR5cGVkZWYgdm9pZCAq
> X192YV9saXN0Ow0KDQoNCg0KDQoNCg0KDQp9DQoNCg0KDQojIDE4ICIvaG9t
> ZS9yb29tMS9rcmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
> YXJpczIuNS4xL2VnY3MtMi45MC4xMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0
> DQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25l
> ZCBpbnQJc2l6ZV90Ow0KDQoNCnR5cGVkZWYgbG9uZwlmcG9zX3Q7DQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN
> Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA4MSAi
> L2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
> LXNvbGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9zdGRpby5oIiAz
> IDQNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QJIA0Kew0KDQoNCg0K
> DQoJaW50CQlfY250OwkgDQoJdW5zaWduZWQgY2hhcgkqX3B0cjsJIA0KDQoJ
> dW5zaWduZWQgY2hhcgkqX2Jhc2U7CSANCgl1bnNpZ25lZCBjaGFyCV9mbGFn
> OwkgDQoJdW5zaWduZWQgY2hhcglfZmlsZTsJIA0KfSBGSUxFOw0KDQoNCmV4
> dGVybiBGSUxFCQlfX2lvYlsyMCBdOw0KDQoNCg0KZXh0ZXJuIEZJTEUJCSpf
> bGFzdGJ1ZjsNCmV4dGVybiB1bnNpZ25lZCBjaGFyCSpfYnVmZW5kdGFiW107
> DQoNCmV4dGVybiB1bnNpZ25lZCBjaGFyCSBfc2lidWZbXSwgX3NvYnVmW107
> DQoNCg0KDQoNCmV4dGVybiBpbnQJcmVtb3ZlKGNvbnN0IGNoYXIgKik7DQpl
> eHRlcm4gaW50CXJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7
> DQpleHRlcm4gRklMRQkqdG1wZmlsZSh2b2lkKTsNCmV4dGVybiBjaGFyCSp0
> bXBuYW0oY2hhciAqKTsNCg0KZXh0ZXJuIGNoYXIJKnRtcG5hbV9yKGNoYXIg
> Kik7DQoNCmV4dGVybiBpbnQJZmNsb3NlKEZJTEUgKik7DQpleHRlcm4gaW50
> CWZmbHVzaChGSUxFICopOw0KZXh0ZXJuIEZJTEUJKmZvcGVuKGNvbnN0IGNo
> YXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFCSpmcmVvcGVuKGNv
> bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0ZXJuIHZv
> aWQJc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsNCmV4dGVybiBpbnQJc2V0dmJ1
> ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOw0KIA0KZXh0ZXJuIGlu
> dAlmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0KIA0KZXh0
> ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7DQog
> DQpleHRlcm4gaW50CXByaW50Zihjb25zdCBjaGFyICosIC4uLik7DQogDQpl
> eHRlcm4gaW50CXNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsNCiANCmV4dGVy
> biBpbnQJc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCiAN
> CmV4dGVybiBpbnQJc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
> LCAuLi4pOw0KZXh0ZXJuIGludAl2ZnByaW50ZihGSUxFICosIGNvbnN0IGNo
> YXIgKiwgX192YV9saXN0KTsNCmV4dGVybiBpbnQJdnByaW50Zihjb25zdCBj
> aGFyICosIF9fdmFfbGlzdCk7DQpleHRlcm4gaW50CXZzcHJpbnRmKGNoYXIg
> KiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOw0KZXh0ZXJuIGludAlmZ2V0
> YyhGSUxFICopOw0KZXh0ZXJuIGNoYXIJKmZnZXRzKGNoYXIgKiwgaW50LCBG
> SUxFICopOw0KZXh0ZXJuIGludAlmcHV0YyhpbnQsIEZJTEUgKik7DQpleHRl
> cm4gaW50CWZwdXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsNCmV4dGVybiBp
> bnQJZ2V0YyhGSUxFICopOw0KZXh0ZXJuIGludAlnZXRjaGFyKHZvaWQpOw0K
> ZXh0ZXJuIGNoYXIJKmdldHMoY2hhciAqKTsNCmV4dGVybiBpbnQJcHV0Yyhp
> bnQsIEZJTEUgKik7DQpleHRlcm4gaW50CXB1dGNoYXIoaW50KTsNCmV4dGVy
> biBpbnQJcHV0cyhjb25zdCBjaGFyICopOw0KZXh0ZXJuIGludAl1bmdldGMo
> aW50LCBGSUxFICopOw0KZXh0ZXJuIHNpemVfdAlmcmVhZCh2b2lkICosIHNp
> emVfdCwgc2l6ZV90LCBGSUxFICopOw0KZXh0ZXJuIHNpemVfdAlmd3JpdGUo
> Y29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsNCmV4dGVy
> biBpbnQJZmdldHBvcyhGSUxFICosIGZwb3NfdCAqKTsNCmV4dGVybiBpbnQJ
> ZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOw0KZXh0ZXJuIGludAlmc2V0cG9z
> KEZJTEUgKiwgY29uc3QgZnBvc190ICopOw0KZXh0ZXJuIGxvbmcJZnRlbGwo
> RklMRSAqKTsNCmV4dGVybiB2b2lkCXJld2luZChGSUxFICopOw0KZXh0ZXJu
> IHZvaWQJY2xlYXJlcnIoRklMRSAqKTsNCmV4dGVybiBpbnQJZmVvZihGSUxF
> ICopOw0KZXh0ZXJuIGludAlmZXJyb3IoRklMRSAqKTsNCmV4dGVybiB2b2lk
> CXBlcnJvcihjb25zdCBjaGFyICopOw0KDQpleHRlcm4gaW50CV9fZmlsYnVm
> KEZJTEUgKik7DQpleHRlcm4gaW50CV9fZmxzYnVmKGludCwgRklMRSAqKTsN
> Cg0KIA0KDQoNCg0KDQoNCmV4dGVybiBGSUxFCSpmZG9wZW4oaW50LCBjb25z
> dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsNCmV4
> dGVybiBpbnQJZmlsZW5vKEZJTEUgKik7DQoNCg0KDQogDQoNCg0KDQoNCmV4
> dGVybiB2b2lkCWZsb2NrZmlsZShGSUxFICopOw0KZXh0ZXJuIGludAlmdHJ5
> bG9ja2ZpbGUoRklMRSAqKTsNCmV4dGVybiB2b2lkCWZ1bmxvY2tmaWxlKEZJ
> TEUgKik7DQpleHRlcm4gaW50CWdldGNfdW5sb2NrZWQoRklMRSAqKTsNCmV4
> dGVybiBpbnQJZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsNCmV4dGVybiBpbnQJ
> cHV0Y191bmxvY2tlZChpbnQsIEZJTEUgKik7DQpleHRlcm4gaW50CXB1dGNo
> YXJfdW5sb2NrZWQoaW50KTsNCg0KDQoNCiANCg0KDQoNCg0KZXh0ZXJuIEZJ
> TEUJKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVy
> biBjaGFyCSpjdXNlcmlkKGNoYXIgKik7DQpleHRlcm4gY2hhcgkqdGVtcG5h
> bShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50CWdl
> dG9wdChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7DQoNCmV4
> dGVybiBpbnQJZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNo
> YXIgKiopOw0KDQpleHRlcm4gY2hhcgkqb3B0YXJnOw0KZXh0ZXJuIGludAlv
> cHRpbmQsIG9wdGVyciwgb3B0b3B0Ow0KZXh0ZXJuIGludAlnZXR3KEZJTEUg
> Kik7DQpleHRlcm4gaW50CXB1dHcoaW50LCBGSUxFICopOw0KZXh0ZXJuIGlu
> dAlwY2xvc2UoRklMRSAqKTsNCg0KDQoNCiMgMzQzICIvaG9tZS9yb29tMS9r
> cmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNS4x
> L2VnY3MtMi45MC4xMi9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KDQoNCiANCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQp9DQoNCg0KDQojIDMzICIvaG9tZS9yb29t
> MS9rcmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
> NS4xL2VnY3MtMi45MC4xMi9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMiAz
> IDQNCg0KDQojIDEgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2Mt
> bGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1
> ZGUvc3lzL2llZWVmcC5oIiAxIDMgNA0KIA0KDQoNCg0KDQoNCg0KI3ByYWdt
> YSBpZGVudAkiQCgjKWllZWVmcC5oCTIuNyA5NC8xMS8wOSINCg0KDQpleHRl
> cm4gIkMiIHsNCg0KDQogDQoNCg0KDQplbnVtIGZwX2RpcmVjdGlvbl90eXBl
> IHsJIA0KCWZwX25lYXJlc3QJPSAwLA0KCWZwX3RvemVybwk9IDEsDQoJZnBf
> cG9zaXRpdmUJPSAyLA0KCWZwX25lZ2F0aXZlCT0gMw0KfTsNCg0KZW51bSBm
> cF9wcmVjaXNpb25fdHlwZSB7CSANCglmcF9leHRlbmRlZAk9IDAsDQoJZnBf
> c2luZ2xlCT0gMSwNCglmcF9kb3VibGUJPSAyLA0KCWZwX3ByZWNpc2lvbl8z
> CT0gMw0KfTsNCg0KZW51bSBmcF9leGNlcHRpb25fdHlwZSB7CSANCglmcF9p
> bmV4YWN0CT0gMCwNCglmcF9kaXZpc2lvbgk9IDEsDQoJZnBfdW5kZXJmbG93
> CT0gMiwNCglmcF9vdmVyZmxvdwk9IDMsDQoJZnBfaW52YWxpZAk9IDQNCn07
> DQoNCmVudW0gZnBfdHJhcF9lbmFibGVfdHlwZSB7CSANCglmcF90cmFwX2lu
> ZXhhY3QJPSAwLA0KCWZwX3RyYXBfZGl2aXNpb24JPSAxLA0KCWZwX3RyYXBf
> dW5kZXJmbG93CT0gMiwNCglmcF90cmFwX292ZXJmbG93CT0gMywNCglmcF90
> cmFwX2ludmFsaWQJPSA0DQp9Ow0KDQoNCiMgODEgIi9ob21lL3Jvb20xL2ty
> aW9sL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEv
> ZWdjcy0yLjkwLjEyL2luY2x1ZGUvc3lzL2llZWVmcC5oIiAzIDQNCg0KDQoj
> IDEyMiAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3Bh
> cmMtc3VuLXNvbGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9zeXMv
> aWVlZWZwLmgiIDMgNA0KDQoNCmVudW0gZnBfY2xhc3NfdHlwZSB7CQkgDQoJ
> ZnBfemVybwkJPSAwLA0KCWZwX3N1Ym5vcm1hbAk9IDEsDQoJZnBfbm9ybWFs
> CT0gMiwNCglmcF9pbmZpbml0eSAgIAk9IDMsDQoJZnBfcXVpZXQJPSA0LA0K
> CWZwX3NpZ25hbGluZwk9IDUNCn07DQoNCg0KfQ0KDQoNCg0KIyAzNSAiL2hv
> bWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
> bGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9mbG9hdGluZ3BvaW50
> LmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRl
> ZiBpbnQgc2lnZnBlX2NvZGVfdHlwZTsJIA0KDQp0eXBlZGVmIHZvaWQgKCpz
> aWdmcGVfaGFuZGxlcl90eXBlKSgpOwkgDQoNCg0KDQoNCg0KZXh0ZXJuIHNp
> Z2ZwZV9oYW5kbGVyX3R5cGUgc2lnZnBlICAoc2lnZnBlX2NvZGVfdHlwZSwg
> c2lnZnBlX2hhbmRsZXJfdHlwZSkgIDsNCg0KIA0KDQoNCnR5cGVkZWYgZmxv
> YXQgc2luZ2xlOwkJCQ0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBleHRlbmRl
> ZFszXTsNCg0KDQp0eXBlZGVmIGxvbmcgZG91YmxlIHF1YWRydXBsZTsJIA0K
> DQp0eXBlZGVmIHVuc2lnbmVkIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlOw0K
> CQkJCSANCg0KDQoNCiANCg0KDQoNCg0KdHlwZWRlZiBjaGFyIGRlY2ltYWxf
> c3RyaW5nWzUxMiBdOwkNCgkJCQkgDQoNCnR5cGVkZWYgc3RydWN0IHsNCgll
> bnVtIGZwX2NsYXNzX3R5cGUgZnBjbGFzczsNCglpbnQJc2lnbjsNCglpbnQJ
> ZXhwb25lbnQ7DQoJZGVjaW1hbF9zdHJpbmcgZHM7CSANCg0KDQoJaW50CW1v
> cmU7CQkgDQoNCg0KCWludCAJbmRpZ2l0czsJIA0KDQoNCn0gZGVjaW1hbF9y
> ZWNvcmQ7DQoNCmVudW0gZGVjaW1hbF9mb3JtIHsNCglmaXhlZF9mb3JtLAkJ
> IA0KDQoNCglmbG9hdGluZ19mb3JtCQkgDQoNCn07DQoNCnR5cGVkZWYgc3Ry
> dWN0IHsNCgllbnVtIGZwX2RpcmVjdGlvbl90eXBlIHJkOwkNCgkJCQkgDQoJ
> ZW51bSBkZWNpbWFsX2Zvcm0gZGY7CSANCg0KCWludCBuZGlnaXRzOwkJIA0K
> fSBkZWNpbWFsX21vZGU7DQoNCmVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSB7
> CSANCglpbnZhbGlkX2Zvcm0sCQkgDQoJd2hpdGVzcGFjZV9mb3JtLAkgDQoJ
> Zml4ZWRfaW50X2Zvcm0sCQkgDQoJZml4ZWRfaW50ZG90X2Zvcm0sCSANCglm
> aXhlZF9kb3RmcmFjX2Zvcm0sCSANCglmaXhlZF9pbnRkb3RmcmFjX2Zvcm0s
> CSANCglmbG9hdGluZ19pbnRfZm9ybSwJIAkNCglmbG9hdGluZ19pbnRkb3Rf
> Zm9ybSwJIA0KCWZsb2F0aW5nX2RvdGZyYWNfZm9ybSwJIA0KCWZsb2F0aW5n
> X2ludGRvdGZyYWNfZm9ybSwgDQoJaW5mX2Zvcm0sCQkgDQoJaW5maW5pdHlf
> Zm9ybSwJCSANCgluYW5fZm9ybSwJCSANCgluYW5zdHJpbmdfZm9ybQkJIA0K
> fTsNCg0KZXh0ZXJuIHZvaWQgc2luZ2xlX3RvX2RlY2ltYWwgIChzaW5nbGUg
> KiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosDQoJCQkJZnBf
> ZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKikgIDsNCmV4dGVybiB2b2lkIGRvdWJs
> ZV90b19kZWNpbWFsICAoZG91YmxlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNp
> bWFsX3JlY29yZCAqLA0KCQkJCWZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICop
> ICA7DQpleHRlcm4gdm9pZCBleHRlbmRlZF90b19kZWNpbWFsICAoZXh0ZW5k
> ZWQgKiwgZGVjaW1hbF9tb2RlICosDQoJCQkJZGVjaW1hbF9yZWNvcmQgKiwg
> ZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKikgIDsNCmV4dGVybiB2b2lkIHF1
> YWRydXBsZV90b19kZWNpbWFsICAocXVhZHJ1cGxlICosIGRlY2ltYWxfbW9k
> ZSAqLA0KCQkJCWRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVs
> ZF90eXBlICopICA7DQoNCmV4dGVybiB2b2lkIGRlY2ltYWxfdG9fc2luZ2xl
> ICAoc2luZ2xlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAq
> LA0KCQkJCWZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7DQpleHRlcm4g
> dm9pZCBkZWNpbWFsX3RvX2RvdWJsZSAgKGRvdWJsZSAqLCBkZWNpbWFsX21v
> ZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwNCgkJCQlmcF9leGNlcHRpb25fZmll
> bGRfdHlwZSAqKSAgOw0KZXh0ZXJuIHZvaWQgZGVjaW1hbF90b19leHRlbmRl
> ZCAgKGV4dGVuZGVkICosIGRlY2ltYWxfbW9kZSAqLA0KCQkJCWRlY2ltYWxf
> cmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7DQpleHRl
> cm4gdm9pZCBkZWNpbWFsX3RvX3F1YWRydXBsZSAgKHF1YWRydXBsZSAqLCBk
> ZWNpbWFsX21vZGUgKiwNCgkJCQlkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNl
> cHRpb25fZmllbGRfdHlwZSAqKSAgOw0KDQpleHRlcm4gdm9pZCBzdHJpbmdf
> dG9fZGVjaW1hbCAgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29y
> ZCAqLA0KCQkJCWVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSAqLCBjaGFyICoq
> KSAgOw0KZXh0ZXJuIHZvaWQgZnVuY190b19kZWNpbWFsICAoY2hhciAqKiwg
> aW50LCBpbnQsIGRlY2ltYWxfcmVjb3JkICosDQoJCQkJZW51bSBkZWNpbWFs
> X3N0cmluZ19mb3JtICosIGNoYXIgKiosDQoJCQkJaW50ICgqKSh2b2lkKSwg
> aW50ICosIGludCAoKikoaW50KSkgIDsNCmV4dGVybiB2b2lkIGZpbGVfdG9f
> ZGVjaW1hbCAgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAq
> LA0KCQkJCWVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSAqLCBjaGFyICoqLA0K
> CQkJCUZJTEUgKiwgaW50ICopICA7DQoNCmV4dGVybiBjaGFyICpzZWNvbnZl
> cnQgIChzaW5nbGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKikgIDsN
> CmV4dGVybiBjaGFyICpzZmNvbnZlcnQgIChzaW5nbGUgKiwgaW50LCBpbnQg
> KiwgaW50ICosIGNoYXIgKikgIDsNCmV4dGVybiBjaGFyICpzZ2NvbnZlcnQg
> IChzaW5nbGUgKiwgaW50LCBpbnQsIGNoYXIgKikgIDsNCmV4dGVybiBjaGFy
> ICplY29udmVydCAgKGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIg
> KikgIDsNCmV4dGVybiBjaGFyICpmY29udmVydCAgKGRvdWJsZSwgaW50LCBp
> bnQgKiwgaW50ICosIGNoYXIgKikgIDsNCmV4dGVybiBjaGFyICpnY29udmVy
> dCAgKGRvdWJsZSwgaW50LCBpbnQsIGNoYXIgKikgIDsNCmV4dGVybiBjaGFy
> ICpxZWNvbnZlcnQgIChxdWFkcnVwbGUgKiwgaW50LCBpbnQgKiwgaW50ICos
> IGNoYXIgKikgIDsNCmV4dGVybiBjaGFyICpxZmNvbnZlcnQgIChxdWFkcnVw
> bGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKikgIDsNCmV4dGVybiBj
> aGFyICpxZ2NvbnZlcnQgIChxdWFkcnVwbGUgKiwgaW50LCBpbnQsIGNoYXIg
> KikgIDsNCg0KZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3VibGUsIGludCwgaW50
> ICosIGludCAqKSAgOw0KZXh0ZXJuIGNoYXIgKmZjdnQgIChkb3VibGUsIGlu
> dCwgaW50ICosIGludCAqKSAgOw0KZXh0ZXJuIGNoYXIgKmdjdnQgIChkb3Vi
> bGUsIGludCwgY2hhciAqKSAgOw0KDQogDQoNCg0KDQpleHRlcm4gZG91Ymxl
> IGF0b2YgIChjb25zdCBjaGFyICopICA7DQpleHRlcm4gZG91YmxlIHN0cnRv
> ZCAgKGNvbnN0IGNoYXIgKiwgY2hhciAqKikgIDsNCg0KDQp9DQoNCg0KDQoj
> IDIzMCAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3Bh
> cmMtc3VuLXNvbGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9tYXRo
> LmgiIDIgMyA0DQoNCg0KDQoNCg0KfQ0KDQoNCg0KIyA3ICIvaG9tZS9yb29t
> MS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9jbWF0aCIgMiAzDQoNCg0KDQoj
> cHJhZ21hIGludGVyZmFjZSAiY21hdGgiDQoNCg0KZXh0ZXJuICJDKysiIHsN
> CiMgMzggIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1ZGUvZysrL2Nt
> YXRoIiAzDQoNCg0KaW5saW5lIGZsb2F0ICBhYnMgKGZsb2F0ICB4KSB7IHJl
> dHVybiBmYWJzICh4KTsgfQ0KDQppbmxpbmUgZG91YmxlIGFicyAoZG91Ymxl
> IHgpIHsgcmV0dXJuIGZhYnMgKHgpOyB9DQoNCg0KIyA3MSAiL2hvbWUvcm9v
> bTEva3Jpb2wvbG9jYWwvaW5jbHVkZS9nKysvY21hdGgiIDMNCg0KaW5saW5l
> IGxvbmcgZG91YmxlIGFicyAobG9uZyBkb3VibGUgeCkgeyByZXR1cm4gZmFi
> cyAoeCk7IH0NCg0KfSAgDQoNCg0KIyAxMjQgIi9ob21lL3Jvb20xL2tyaW9s
> L3dvcmsvUHJvamVjdC9pbmNsdWRlL1ZlY3RvcjNELkgiIDIgMw0KDQoNCiAg
> ICANCiAgICANCiAgICANCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGlu
> ZQ0KVFZlY3RvcjNEPG51bVQ+OjpUVmVjdG9yM0QoIHZvaWQgKSB7DQp9DQoN
> CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUNClRWZWN0b3IzRDxudW1U
> Pjo6VFZlY3RvcjNEKCBudW1UIGRUICk6DQogIGRYXyhkVCksIGRZXyhkVCks
> IGRaXyhkVCkgew0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5l
> DQpUVmVjdG9yM0Q8bnVtVD46OlRWZWN0b3IzRCggbnVtVCBkWCwgbnVtVCBk
> WSwgbnVtVCBkWiApOg0KICBkWF8oZFgpLCBkWV8oZFkpLCBkWl8oZFopIHsN
> Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZQ0KVFZlY3RvcjNE
> PG51bVQ+OjpUVmVjdG9yM0QoIGNvbnN0IG51bVQqIHBkWCApOg0KICBkWF8o
> IHBkWFswXSApLCBkWV8oIHBkWFsxXSApLCBkWl8oIHBkWFsyXSApIHsNCn0N
> Cg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZQ0KVFZlY3RvcjNEPG51
> bVQ+OjpUVmVjdG9yM0QoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICk6
> DQogIGRYXyggcmhzLmRYXyApLA0KICBkWV8oIHJocy5kWV8gKSwNCiAgZFpf
> KCByaHMuZFpfICkgew0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5s
> aW5lDQpUVmVjdG9yM0Q8bnVtVD46On5UVmVjdG9yM0QoKSB7DQp9DQoNCiAg
> ICANCiAgICANCiAgICANCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGlu
> ZSBudW1UJg0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvcltdKCBpbnQgaUlk
> eCApIHsNCiAgcmV0dXJuICggKiggKCZkWF8pICsgaUlkeCApICk7ICAgDQp9
> DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51
> bVQ+Jg0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvciA9ICggY29uc3QgVFZl
> Y3RvcjNEPG51bVQ+JiB0aGVWZWN0b3IgKSB7DQogIA0KICBkWF8gPSB0aGVW
> ZWN0b3IuZFhfOw0KICBkWV8gPSB0aGVWZWN0b3IuZFlfOw0KICBkWl8gPSB0
> aGVWZWN0b3IuZFpfOw0KICANCiAgcmV0dXJuICgqdGhpcyk7DQp9DQoNCnRl
> bXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+Jg0K
> VFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvciA9ICggbnVtVCBkVCApIHsNCiAg
> DQogIGRYXyA9IGRUOw0KICBkWV8gPSBkVDsNCiAgZFpfID0gZFQ7DQogIA0K
> ICByZXR1cm4gKCp0aGlzKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+
> IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4NClRWZWN0b3IzRDxudW1UPjo6b3Bl
> cmF0b3IgLSAoIHZvaWQgKSB7DQogIHJldHVybiBUVmVjdG9yM0Q8bnVtVD4o
> IC1kWF8sIC1kWV8sIC1kWl8gKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51
> bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4mDQpUVmVjdG9yM0Q8bnVtVD46
> Om9wZXJhdG9yICs9ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiByaHMgKSB7
> DQogIA0KICBkWF8gKz0gcmhzLmRYXzsNCiAgZFlfICs9IHJocy5kWV87DQog
> IGRaXyArPSByaHMuZFpfOw0KICANCiAgcmV0dXJuICgqdGhpcyk7DQp9DQoN
> CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+
> Jg0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvciArPSAoIG51bVQgZFQgKSB7
> DQogIA0KICBkWF8gKz0gZFQ7DQogIGRZXyArPSBkVDsNCiAgZFpfICs9IGRU
> Ow0KICANCiAgcmV0dXJuICgqdGhpcyk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
> cyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+Jg0KVFZlY3RvcjNEPG51
> bVQ+OjpvcGVyYXRvciAtPSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmhz
> ICkgew0KICANCiAgZFhfIC09IHJocy5kWF87DQogIGRZXyAtPSByaHMuZFlf
> Ow0KICBkWl8gLT0gcmhzLmRaXzsNCiAgDQogIHJldHVybiAoKnRoaXMpOw0K
> fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIFRWZWN0b3IzRDxu
> dW1UPiYNClRWZWN0b3IzRDxudW1UPjo6b3BlcmF0b3IgLT0gKCBudW1UIGRU
> ICkgew0KICANCiAgZFhfIC09IGRUOw0KICBkWV8gLT0gZFQ7DQogIGRaXyAt
> PSBkVDsNCiAgDQogIHJldHVybiAoKnRoaXMpOw0KfQ0KDQp0ZW1wbGF0ZSA8
> Y2xhc3MgbnVtVD4gaW5saW5lIFRWZWN0b3IzRDxudW1UPiYNClRWZWN0b3Iz
> RDxudW1UPjo6b3BlcmF0b3IgKj0gKCBudW1UIGRUICkgew0KICANCiAgZFhf
> ICo9IGRUOw0KICBkWV8gKj0gZFQ7DQogIGRaXyAqPSBkVDsNCiAgDQogIHJl
> dHVybiAoKnRoaXMpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5s
> aW5lIFRWZWN0b3IzRDxudW1UPiYNClRWZWN0b3IzRDxudW1UPjo6b3BlcmF0
> b3IgLz0gKCBudW1UIGRUICkgew0KICBkWF8gLz0gZFQ7DQogIGRZXyAvPSBk
> VDsNCiAgZFpfIC89IGRUOw0KICByZXR1cm4gKCp0aGlzKTsNCn0NCg0KdGVt
> cGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSB2b2lkDQpUVmVjdG9yM0Q8bnVt
> VD46Om5vcm1hbGl6ZSggdm9pZCApIHsNCiAgbnVtVCBkTiAgPSA6OnNxcnQo
> IGRYXypkWF8gKyBkWV8qZFlfICsgZFpfKmRaXyApOw0KICBkWF8gICAgIC89
> IGROOw0KICBkWV8gICAgIC89IGROOw0KICBkWl8gICAgIC89IGROOw0KfQ0K
> DQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIHZvaWQNClRWZWN0b3Iz
> RDxudW1UPjo6c2V0WCggbnVtVCBkWCApIHsNCiAgZFhfID0gZFg7DQp9DQoN
> CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgdm9pZA0KVFZlY3RvcjNE
> PG51bVQ+OjpzZXRZKCBudW1UIGRZICkgew0KICBkWV8gPSBkWTsNCn0NCg0K
> dGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSB2b2lkDQpUVmVjdG9yM0Q8
> bnVtVD46OnNldFooIG51bVQgZFogKSB7DQogIGRaXyA9IGRaOw0KfQ0KDQog
> ICAgDQogICAgDQogICAgDQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxp
> bmUgbnVtVA0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvcltdKCBpbnQgaUlk
> eCApIGNvbnN0IHsNCiAgcmV0dXJuICggKiggJihkWF8pICsgaUlkeCApICk7
> ICAgDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgbnVtVA0K
> VFZlY3RvcjNEPG51bVQ+OjpkWCggdm9pZCApIGNvbnN0IHsNCiAgcmV0dXJu
> IGRYXzsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBudW1U
> DQpUVmVjdG9yM0Q8bnVtVD46OmRZKCB2b2lkICkgY29uc3Qgew0KICByZXR1
> cm4gZFlfOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIG51
> bVQNClRWZWN0b3IzRDxudW1UPjo6ZFooIHZvaWQgKSBjb25zdCB7DQogIHJl
> dHVybiBkWl87DQp9DQoNCiAgICANCiAgICANCiAgICANCg0KdGVtcGxhdGUg
> PGNsYXNzIG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4NCm9wZXJhdG9y
> ICsgKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxocywgY29uc3QgVFZlY3Rv
> cjNEPG51bVQ+JiByaHMgKSB7DQogIHJldHVybiBUVmVjdG9yM0Q8bnVtVD4o
> IGxocy5kWF8gKyByaHMuZFhfLA0KICAgICAgICAgICAgICAgICAgICAgICAg
> ICBsaHMuZFlfICsgcmhzLmRZXywNCiAgICAgICAgICAgICAgICAgICAgICAg
> ICAgbGhzLmRaXyArIHJocy5kWl8gKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
> IG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4gDQpvcGVyYXRvciArICgg
> Y29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIG51bVQgZFggKSB7DQogIHJl
> dHVybiBUVmVjdG9yM0Q8bnVtVD4oIGxocy5kWF8gKyBkWCwNCiAgICAgICAg
> ICAgICAgICAgICAgICAgICAgbGhzLmRZXyArIGRYLA0KICAgICAgICAgICAg
> ICAgICAgICAgICAgICBsaHMuZFpfICsgZFggKTsNCn0NCg0KdGVtcGxhdGUg
> PGNsYXNzIG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4gDQpvcGVyYXRv
> ciArICggbnVtVCBkWCwgY29uc3QgVFZlY3RvcjNEPG51bVQ+JiByaHMgKSB7
> DQogIHJldHVybiBUVmVjdG9yM0Q8bnVtVD4oIHJocy5kWF8gKyBkWCwNCiAg
> ICAgICAgICAgICAgICAgICAgICAgICAgcmhzLmRZXyArIGRYLA0KICAgICAg
> ICAgICAgICAgICAgICAgICAgICByaHMuZFpfICsgZFggKTsNCn0NCg0KdGVt
> cGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4gDQpv
> cGVyYXRvciAtICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNvbnN0
> IFRWZWN0b3IzRDxudW1UPiYgcmhzICkgew0KICByZXR1cm4gVFZlY3RvcjNE
> PG51bVQ+KCBsaHMuZFhfIC0gcmhzLmRYXywNCiAgICAgICAgICAgICAgICAg
> ICAgICAgICAgbGhzLmRZXyAtIHJocy5kWV8sDQogICAgICAgICAgICAgICAg
> ICAgICAgICAgIGxocy5kWl8gLSByaHMuZFpfICk7DQp9DQoNCnRlbXBsYXRl
> IDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+IA0Kb3BlcmF0
> b3IgLSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgbGhzLCBudW1UIGRYICkg
> ew0KICByZXR1cm4gVFZlY3RvcjNEPG51bVQ+KCBsaHMuZFhfIC0gZFgsDQog
> ICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWV8gLSBkWCwNCiAgICAg
> ICAgICAgICAgICAgICAgICAgICAgbGhzLmRaXyAtIGRYICk7DQp9DQoNCnRl
> bXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+IA0K
> b3BlcmF0b3IgLSAoIG51bVQgZFgsIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYg
> cmhzICkgew0KICByZXR1cm4gVFZlY3RvcjNEPG51bVQ+KCAtcmhzLmRYXyAr
> IGRYLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAtcmhzLmRZXyArIGRY
> LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAtcmhzLmRaXyArIGRYICk7
> DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNE
> PG51bVQ+IA0Kb3BlcmF0b3IgKiAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYg
> bGhzICwgbnVtVCBkWCApIHsNCiAgcmV0dXJuIFRWZWN0b3IzRDxudW1UPigg
> bGhzLmRYXyAqIGRYLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsaHMu
> ZFlfICogZFgsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWl8g
> KiBkWCApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIFRW
> ZWN0b3IzRDxudW1UPiANCm9wZXJhdG9yICogKCBudW1UIGRYLCBjb25zdCBU
> VmVjdG9yM0Q8bnVtVD4mIHJocyApIHsNCiAgcmV0dXJuIFRWZWN0b3IzRDxu
> dW1UPiggcmhzLmRYXyAqIGRYLA0KICAgICAgICAgICAgICAgICAgICAgICAg
> ICByaHMuZFlfICogZFgsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHJo
> cy5kWl8gKiBkWCApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5s
> aW5lIG51bVQNCm9wZXJhdG9yICogKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4m
> IGxocywgY29uc3QgVFZlY3RvcjNEPG51bVQ+JiByaHMgKSB7ICAgDQogIHJl
> dHVybiAoIGxocy5kWF8gKiByaHMuZFhfICsgICAgICAgICAgICAgICAgICAg
> ICAgICAgICAgICANCiAgICAgICAgICAgbGhzLmRZXyAqIHJocy5kWV8gKw0K
> ICAgICAgICAgICBsaHMuZFpfICogcmhzLmRaXyAgICk7DQp9DQoNCnRlbXBs
> YXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+IA0Kb3Bl
> cmF0b3IgLyAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgbGhzLCBudW1UIGRY
> ICkgew0KICByZXR1cm4gVFZlY3RvcjNEPG51bVQ+KCBsaHMuZFhfIC8gZFgs
> DQogICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWV8gLyBkWCwNCiAg
> ICAgICAgICAgICAgICAgICAgICAgICAgbGhzLmRaXyAvIGRYICk7DQp9DQoN
> CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+
> DQpvcGVyYXRvciBeICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNv
> bnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICkgeyAgDQogIHJldHVybiBUVmVj
> dG9yM0Q8bnVtVD4oIGxocy5kWV8gKiByaHMuZFpfIC0gbGhzLmRaXyAqIHJo
> cy5kWV8sDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWl8gKiBy
> aHMuZFhfIC0gbGhzLmRYXyAqIHJocy5kWl8sDQogICAgICAgICAgICAgICAg
> ICAgICAgICAgIGxocy5kWF8gKiByaHMuZFlfIC0gbGhzLmRZXyAqIHJocy5k
> WF8gICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgYm9v
> bF90IA0Kb3BlcmF0b3IgIT0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxl
> ZnQsDQogICAgICAgICAgICAgIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmln
> aHQgKSB7DQogIHJldHVybiAoIChsZWZ0LmRYXyAhPSByaWdodC5kWF8pIHx8
> DQogICAgICAgICAgIChsZWZ0LmRZXyAhPSByaWdodC5kWV8pIHx8DQogICAg
> ICAgICAgIChsZWZ0LmRaXyAhPSByaWdodC5kWl8pICAgICk7DQp9DQoNCnRl
> bXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgYm9vbF90DQpvcGVyYXRvciAh
> PSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgbGhzLCBudW1UIHJocyApIHsN
> CiAgcmV0dXJuICggKCBsaHMuZFhfICE9IHJocyApIHx8DQogICAgICAgICAg
> ICggbGhzLmRZXyAhPSByaHMgKSB8fA0KICAgICAgICAgICAoIGxocy5kWl8g
> IT0gcmhzICkgICAgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlu
> bGluZSBib29sX3QNCm9wZXJhdG9yICE9ICggbnVtVCBsaHMsIGNvbnN0IFRW
> ZWN0b3IzRDxudW1UPiYgcmhzICkgew0KICByZXR1cm4gKCAoIGxocyAhPSBy
> aHMuZFhfICkgfHwNCiAgICAgICAgICAgKCBsaHMgIT0gcmhzLmRZXyApIHx8
> DQogICAgICAgICAgICggbGhzICE9IHJocy5kWl8gKSAgICApOw0KfQ0KDQp0
> ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIGJvb2xfdCANCm9wZXJhdG9y
> ID09ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNvbnN0IFRWZWN0
> b3IzRDxudW1UPiYgcmhzICkgew0KICByZXR1cm4gKCAobGhzLmRYXyA9PSBy
> aHMuZFhfKSAmJg0KICAgICAgICAgICAobGhzLmRZXyA9PSByaHMuZFlfKSAm
> Jg0KICAgICAgICAgICAobGhzLmRaXyA9PSByaHMuZFpfKSAgICApOw0KfQ0K
> DQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIGJvb2xfdCANCm9wZXJh
> dG9yID09ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIG51bVQgZFgg
> KSB7DQogIHJldHVybiAoIChsaHMuZFhfID09IGRYKSAmJg0KICAgICAgICAg
> ICAobGhzLmRZXyA9PSBkWCkgJiYNCiAgICAgICAgICAgKGxocy5kWl8gPT0g
> ZFgpICAgICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUg
> Ym9vbF90IA0Kb3BlcmF0b3IgPT0gKCBudW1UIGRYLCBjb25zdCBUVmVjdG9y
> M0Q8bnVtVD4mIHJocyApIHsNCiAgcmV0dXJuICggKHJocy5kWF8gPT0gZFgp
> ICYmDQogICAgICAgICAgIChyaHMuZFlfID09IGRYKSAmJg0KICAgICAgICAg
> ICAocmhzLmRaXyA9PSBkWCkgICAgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
> IG51bVQ+IGlubGluZSBudW1UDQphYnMoIGNvbnN0IFRWZWN0b3IzRDxudW1U
> PiYgbGhzICkgew0KICByZXR1cm4gOjpzcXJ0KCBsaHMuZFhfKmxocy5kWF8g
> KyBsaHMuZFlfKmxocy5kWV8gKyBsaHMuZFpfKmxocy5kWl8gKTsNCn0NCg0K
> dGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBudW1UDQpub3JtKCBjb25z
> dCBUVmVjdG9yM0Q8bnVtVD4mIGxocyApIHsNCiAgcmV0dXJuICggbGhzLmRY
> XypsaHMuZFhfICsgbGhzLmRZXypsaHMuZFlfICsgbGhzLmRaXypsaHMuZFpf
> ICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgbnVtVA0K
> YWJzX3RyYW5zKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxocyApIHsNCiAg
> cmV0dXJuIDo6c3FydCggbGhzLmRYXypsaHMuZFhfICsgbGhzLmRZXypsaHMu
> ZFlfICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgbnVt
> VA0Kbm9ybV90cmFucyggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMgKSB7
> DQogIHJldHVybiAoIGxocy5kWF8qbGhzLmRYXyArIGxocy5kWV8qbGhzLmRZ
> XyApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIG51bVQN
> CmFuZ2xlKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxocywgY29uc3QgVFZl
> Y3RvcjNEPG51bVQ+JiByaHMgKSB7DQogIHJldHVybiAoIDo6YWNvcyggKCBs
> aHMgKiByaHMgKSAvIDo6c3FydCggbm9ybSggbGhzICkgKiBub3JtKCByaHMg
> KSApICkgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBU
> VmVjdG9yM0Q8bnVtVD4NCnVuaXQoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYg
> bGhzICkgew0KICBudW1UIGROb3JtID0gOjpzcXJ0KCBsaHMuZFhfKmxocy5k
> WF8gKyBsaHMuZFlfKmxocy5kWV8gKyBsaHMuZFpfKmxocy5kWl8gKTsNCiAg
> cmV0dXJuIFRWZWN0b3IzRDxudW1UPiggbGhzLmRYXyAvIGROb3JtLA0KICAg
> ICAgICAgICAgICAgICAgICAgICAgICBsaHMuZFlfIC8gZE5vcm0sDQogICAg
> ICAgICAgICAgICAgICAgICAgICAgIGxocy5kWl8gLyBkTm9ybSApOw0KfQ0K
> DQoNCiMgMSAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2luY2x1
> ZGUvVmVjdG9yM0QuaUMiIDEgMw0KIA0KDQoNCg0KICAgIA0KICAgIA0KICAg
> IA0KDQoNCiMgMSAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2lu
> Y2x1ZGUvZm9ybWF0LkgiIDEgMw0KIA0KDQoNCg0KDQoNCiMgMSAiL2hvbWUv
> cm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
> aXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS92YWx1ZXMuaCIgMSAzIDQN
> CiANCiANCg0KIA0KIA0KIA0KDQoNCg0KDQojcHJhZ21hIGlkZW50CSJAKCMp
> dmFsdWVzLmgJMS4xMwk5NC8wNy8yOSBTTUkiCQ0KDQoNCmV4dGVybiAiQyIg
> ew0KDQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN
> Cg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN
> Cg0KIyAxMjQgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2MtbGli
> L3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1ZGUv
> dmFsdWVzLmgiIDMgNA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
> DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCn0NCg0KDQoNCiMg
> NyAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2luY2x1ZGUvZm9y
> bWF0LkgiIDIgMw0KDQoNCg0KDQoNCg0KY2xhc3MgZm9ybWF0IHsNCiAgICAN
> CiAgcHVibGljOg0KICAgIA0KICAgIGVudW0gew0KICAgICAgICAgICAgZGVm
> ZmxhZ3MgPWlvczo6c2tpcHdzIHwNCiAgICAgICAgICAgICAgICAgICAgICBp
> b3M6OnJpZ2h0IHwNCiAgICAgICAgICAgICAgICAgICAgICBpb3M6OmRlYyB8
> DQogICAgICAgICAgICAgICAgICAgICAgaW9zOjpzaG93cG9pbnQgfA0KICAg
> ICAgICAgICAgICAgICAgICAgIGlvczo6Zml4ZWQsDQogICAgICAgICAgICBk
> ZWZwcmVjICA9NCwNCiAgICAgICAgICAgIGRlZndpZHRoID0wLA0KICAgICAg
> ICAgICAgZGVmZmlsbCAgPScgJw0KICAgIH07DQoNCiAgICAgICAgDQogICAg
> ICAgIA0KICAgICAgICANCg0KICAgIGZvcm1hdCggaW9zJiBpICk7DQogIA0K
> ICAgIGZvcm1hdCggbG9uZ190IGwsIGludF90IHcsIGludF90IHAsIGNoYXJf
> dCBmICk7DQogIA0KICAgIGZvcm1hdCggbG9uZ190IGwsIGNoYXJfdCBmICk7
> DQogIA0KICAgIGZvcm1hdCggbG9uZ190IGwgKTsNCiAgDQogICAgZm9ybWF0
> KCBpbnRfdCB3LCBpbnRfdCBwLCBjaGFyX3QgZiApOw0KDQogICAgZm9ybWF0
> KCBsb25nX3QgbCwgaW50X3QgdywgaW50X3QgcCApOw0KICAgIA0KICAgIGZv
> cm1hdCggY2hhcl90IGwsIGludF90IHcsIGludF90IHAgKTsNCiAgDQogICAg
> Zm9ybWF0KCBpbnRfdCB3LCBpbnRfdCBwICk7DQogIA0KICAgIGZvcm1hdCgg
> Y2hhcl90IGYgKTsNCg0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0K
> ICANCiAgICB2b2lkIHNldCggaW9zJiBmICkgY29uc3Q7DQoNCiAgcHJpdmF0
> ZToNCiAgICANCiAgICBlbnVtIHsgeGZpID0gMSwgeHdkID0gMiwgeHByID0g
> NCwgeGZsID0gOCwgeGFsID0gMTUgfTsNCiAgICANCiAgICBsb25nX3QgZmxh
> Z3M7DQogICAgaW50X3QgIHdpZHRoOw0KICAgIGludF90ICBwcmVjaXNpb247
> DQogICAgY2hhcl90IGZpbGw7DQogICAgY2hhcl90IHh4eDsNCn07DQoNCiAN
> CiANCiANCg0KICAgIA0KICAgIA0KICAgIA0KDQppbmxpbmUNCmZvcm1hdDo6
> Zm9ybWF0KCBpb3MmIGkgKToNCiAgZmxhZ3MoICAgICBpLmZsYWdzKCkgKSwN
> CiAgd2lkdGgoICAgICBpLndpZHRoKCkgKSwNCiAgcHJlY2lzaW9uKCBpLnBy
> ZWNpc2lvbigpICksDQogIGZpbGwoICAgICAgaS5maWxsKCkgKSwNCiAgeHh4
> KCB4YWwgKSAgICAgICAgICAgeyAgDQp9DQoNCmlubGluZQ0KZm9ybWF0Ojpm
> b3JtYXQoIGxvbmdfdCBsLCBpbnRfdCB3LCBpbnRfdCBwLCBjaGFyX3QgZiAp
> Og0KICBmbGFncyggbCApLA0KICB3aWR0aCggdyApLA0KICBwcmVjaXNpb24o
> IHAgKSwNCiAgZmlsbCggZiApLA0KICB4eHgoIHhhbCApIHsNCn0NCiAgDQpp
> bmxpbmUNCmZvcm1hdDo6Zm9ybWF0KCBsb25nX3QgbCwgY2hhcl90IGYgKToN
> CiAgZmxhZ3MoIGwgKSwNCiAgd2lkdGgoIGRlZndpZHRoICksDQogIHByZWNp
> c2lvbiggZGVmcHJlYyApLA0KICBmaWxsKCBmICksDQogIHh4eCggeGZsIHwg
> eGZpICkgew0KfQ0KDQppbmxpbmUNCmZvcm1hdDo6Zm9ybWF0KCBsb25nX3Qg
> bCApOg0KICBmbGFncyggbCApLA0KICB3aWR0aCggZGVmd2lkdGggKSwNCiAg
> cHJlY2lzaW9uKCBkZWZwcmVjICksDQogIGZpbGwoIGRlZmZpbGwgKSwNCiAg
> eHh4KCB4ZmwgKSB7DQp9DQogIA0KaW5saW5lDQpmb3JtYXQ6OmZvcm1hdCgg
> aW50X3QgdywgaW50X3QgcCwgY2hhcl90IGYgKToNCiAgZmxhZ3MoIGRlZmZs
> YWdzICksDQogIHdpZHRoKCB3ICksDQogIHByZWNpc2lvbiggcCApLA0KICBm
> aWxsKCBmICksDQogIHh4eCggeGZpIHwgeHdkIHwgeHByICkgew0KfQ0KDQpp
> bmxpbmUNCmZvcm1hdDo6Zm9ybWF0KCBsb25nX3QgbCwgaW50X3QgdywgaW50
> X3QgcCApOg0KICBmbGFncyggbCApLA0KICB3aWR0aCggdyApLA0KICBwcmVj
> aXNpb24oIHAgKSwNCiAgZmlsbCggZGVmZmlsbCApLA0KICB4eHgoIHhmbCB8
> IHh3ZCB8IHhwciApIHsNCn0NCg0KaW5saW5lDQpmb3JtYXQ6OmZvcm1hdCgg
> aW50X3QgdywgaW50X3QgcCApOg0KICBmbGFncyggZGVmZmxhZ3MgKSwNCiAg
> d2lkdGgoIHcgKSwNCiAgcHJlY2lzaW9uKCBwICksDQogIGZpbGwoIGRlZmZp
> bGwgKSwNCiAgeHh4KCB4d2QgfCB4cHIgKSB7DQp9DQogIA0KaW5saW5lDQpm
> b3JtYXQ6OmZvcm1hdCggY2hhcl90IGYgKToNCiAgZmxhZ3MoIGRlZmZsYWdz
> ICksDQogIHdpZHRoKCBkZWZ3aWR0aCApLA0KICBwcmVjaXNpb24oIGRlZnBy
> ZWMgKSwNCiAgZmlsbCggZiApLA0KICB4eHgoIHhmaSApIHsNCn0NCg0KaW5s
> aW5lIG9zdHJlYW0mDQpvcGVyYXRvcjw8KCBvc3RyZWFtJiBvcywgY29uc3Qg
> Zm9ybWF0JiBmbXQgKSB7IA0KICBmbXQuc2V0KCBvcyApOyByZXR1cm4gb3M7
> DQp9DQoNCg0KIyAxMCAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0
> L2luY2x1ZGUvVmVjdG9yM0QuaUMiIDIgMw0KDQoNCg0KdGVtcGxhdGUgPGNs
> YXNzIG51bVQ+IGlzdHJlYW0mDQpvcGVyYXRvciA+PiAoIGlzdHJlYW0mIGlz
> LCBUVmVjdG9yM0Q8bnVtVD4mIHJocyApIHsNCiAgaXMgPj4gcmhzLmRYXyA+
> PiByaHMuZFlfID4+IHJocy5kWl87DQogIHJldHVybiBpczsNCn0NCg0KdGVt
> cGxhdGUgPGNsYXNzIG51bVQ+IG9zdHJlYW0mDQpvcGVyYXRvciA8PCAoIG9z
> dHJlYW0mIG9zLCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIHJocyApIHsNCiAg
> DQogIGNvbnN0IGNoYXIqIHNlcGFyYXRvciA9ICIgICI7DQogIA0KICBvcyA8
> PCBmb3JtYXQoICdFJywgMTgsIDEyICkgPDwgcmhzLmRYXyA8PCBzZXBhcmF0
> b3INCiAgICAgPDwgZm9ybWF0KCAnRScsIDE4LCAxMiApIDw8IHJocy5kWV8g
> PDwgc2VwYXJhdG9yDQogICAgIDw8IGZvcm1hdCggJ0UnLCAxOCwgMTIgKSA8
> PCByaHMuZFpfIDsNCiAgDQogIHJldHVybiBvczsNCn0NCiMgNDU3ICIvaG9t
> ZS9yb29tMS9rcmlvbC93b3JrL1Byb2plY3QvaW5jbHVkZS9WZWN0b3IzRC5I
> IiAyIDMNCg0KDQoNCnR5cGVkZWYgVFZlY3RvcjNEPGRvdWJsZV90PiBUVmVj
> dG9yM0RfdDsNCg0KDQojIDIgInRlc3QuQyIgMg0KDQoNCmludA0KbWFpbigg
> dm9pZCApIHsNCiAgcmV0dXJuIDA7DQp9DQoNCnZvaWQNCnN1cGVyZHVtbXko
> IHZvaWQgKSB7DQogIFRWZWN0b3IzRDxkb3VibGU+IGNjYzsNCiAgY2NjID0g
> MS4wOw0KICBhYnMoY2NjKTsNCn0NCg==
> ---559023410-1804928587-876430667=:6246--
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev
@ 1997-10-10 8:51 ` Joe Buck
1997-10-10 8:51 ` Oleg Krivosheev
1997-10-10 11:46 ` Oleg Krivosheev
1997-10-10 8:51 ` Joe Buck
1 sibling, 2 replies; 16+ messages in thread
From: Joe Buck @ 1997-10-10 8:51 UTC (permalink / raw)
To: Oleg Krivosheev; +Cc: egcs team
> i've tried my code and lloks like tons of
> small inline template functions are not
> instantiated.
I think that this is a consequence of the new rules: you have both
non-template and template abs functions. Unfortunately, I'm confused
by the new rules and not sure what is really supposed to change; I
also think that there still may be some bugs in the code that implements
them.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-10 8:51 ` Joe Buck
@ 1997-10-10 8:51 ` Oleg Krivosheev
1997-10-10 8:51 ` Oleg Krivosheev
[not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble>
1997-10-10 11:46 ` Oleg Krivosheev
1 sibling, 2 replies; 16+ messages in thread
From: Oleg Krivosheev @ 1997-10-10 8:51 UTC (permalink / raw)
To: Joe Buck; +Cc: Oleg Krivosheev, egcs team
Hi,
On Thu, 9 Oct 1997, Joe Buck wrote:
> > i've tried my code and lloks like tons of
> > small inline template functions are not
> > instantiated.
>
> I think that this is a consequence of the new rules: you have both
> non-template and template abs functions. Unfortunately, I'm confused
> by the new rules and not sure what is really supposed to change; I
> also think that there still may be some bugs in the code that implements
> them.
sorry, i sent a bit misleading example - maybe you're right,
i'm reading CD2 now.
Still i believe there are bugs in template instantiation -
if you change superdummy in the atached test.ii to
void
superdummy( void ) {
TVector3D<double> ccc, ddd;
ccc = 1.0;
abs(ccc);
ccc = ccc + ddd;
}
egcs will not be able instantiate
op+( const TVector3D<double>&, const TVector3D<double>& ) !
drabble ~ $ nm -s test.o | c++filt | grep Vec
00000000 W TVector3D<double>::~TVector3D(void)
00000000 W TVector3D<double>::operator=(TVector3D<double> const &)
00000000 W TVector3D<double>::operator=(double)
U operator+(TVector3D<double> const &, TVector3D<double> const &)
00000000 W TVector3D<double>::TVector3D(void)
U abs(TVector3D<double> const &)
there is no template/nontemplate op+ ix in the code.
Can you verify this one?
thanks
OK
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-10 8:51 ` Oleg Krivosheev
@ 1997-10-10 8:51 ` Oleg Krivosheev
[not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble>
1 sibling, 0 replies; 16+ messages in thread
From: Oleg Krivosheev @ 1997-10-10 8:51 UTC (permalink / raw)
To: Oleg Krivosheev; +Cc: Joe Buck, egcs team
On Thu, 9 Oct 1997, Oleg Krivosheev wrote:
> Date: Thu, 09 Oct 1997 22:17:58 -0500 (CDT)
>
> On Thu, 9 Oct 1997, Joe Buck wrote:
>
> > > i've tried my code and lloks like tons of
> > > small inline template functions are not
> > > instantiated.
> >
> > I think that this is a consequence of the new rules: you have both
> > non-template and template abs functions. Unfortunately, I'm confused
> > by the new rules and not sure what is really supposed to change; I
> > also think that there still may be some bugs in the code that implements
> > them.
>
> sorry, i sent a bit misleading example - maybe you're right,
> i'm reading CD2 now.
after reading CD2 and thinking a bit i still
believe this is a bug:
14.8.3 Overload resolution [temp.over]
..
For each function template, if the argument
deduction succeeds, the deduced template-arguments are used to instan-
tiate a single function template specialization which is added to the
candidate functions set to be used in overload resolution.
..
well, lloks like egcs deduces templates argument right,
then it properly did everload resolution and
choose template version of abs and generated
call - but no function body itself is instantiated !
regards
OK
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
[not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble>
@ 1997-10-10 11:44 ` Jason Merrill
1997-10-10 17:21 ` Oleg Krivosheev
0 siblings, 1 reply; 16+ messages in thread
From: Jason Merrill @ 1997-10-10 11:44 UTC (permalink / raw)
To: Oleg Krivosheev, egcs
>>>>> Oleg Krivosheev <kriol@fnal.gov> writes:
> after reading CD2 and thinking a bit i still
> believe this is a bug:
> 14.8.3 Overload resolution [temp.over]
> ..
> For each function template, if the argument
> deduction succeeds, the deduced template-arguments are used to instan-
> tiate a single function template specialization which is added to the
> candidate functions set to be used in overload resolution.
> ..
> well, lloks like egcs deduces templates argument right,
Yes.
> then it properly did everload resolution and
> choose template version of abs
No. It chose the non-template abs declared by the line
friend numT abs( const TVector3D<numT>& );
Jason
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-10 8:51 ` Joe Buck
1997-10-10 8:51 ` Oleg Krivosheev
@ 1997-10-10 11:46 ` Oleg Krivosheev
1997-10-10 20:46 ` Alexandre Oliva
1 sibling, 1 reply; 16+ messages in thread
From: Oleg Krivosheev @ 1997-10-10 11:46 UTC (permalink / raw)
To: Joe Buck; +Cc: egcs team
well, i've reduced example to few lines:
template <class T> class X {
public:
X( T );
X( const X<T>& );
~X();
friend X<T> operator+( const X<T>&, const X<T>& );
private:
T t_;
};
template <class T>
X<T>::
X( T t ):
t_(t) {
}
template <class T>
X<T>::
X( const X<T>& x ):
t_(x.t_) {
}
template <class T>
X<T>::
~X() {
}
template <class T> X<T>
operator+( const X<T>& a, const X<T>& b ) {
return X<T>( a.t_ + b.t_ );
}
main( void ) {
}
void
dummy( void ) {
X<int> x( 1 );
X<int> y( 2 );
x = x+y;
}
sparc-solaris2.5.1, gcc version egcs-2.90.12 971008 (gcc2-970802
experimental)
jor-el ~ $ c++ -c test2.cc
jor-el ~ $ nm -s test2.o |c++filt
00000000 W X<int>::~X(void)
00000030 ? __EXCEPTION_END__
00000000 ? __EXCEPTION_TABLE__
00000000 ? __FRAME_BEGIN__
U __builtin_delete
00000004 C __eh_cleanup
00000004 C __eh_in_catch
00000004 C __eh_pc
00000004 C __eh_type
00000004 C __eh_value
U operator+(X<int> const &, X<int> const &)
00000000 W X<int>::X(int)
U __throw
00000018 T dummy(void)
00000000 t gcc2_compiled.
00000000 T main
U terminate(void)
as one can see, op+ is not instantiated.
regards
OK
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-10 17:21 ` Oleg Krivosheev
@ 1997-10-10 17:19 ` Jason Merrill
0 siblings, 0 replies; 16+ messages in thread
From: Jason Merrill @ 1997-10-10 17:19 UTC (permalink / raw)
To: Oleg Krivosheev; +Cc: egcs
>>>>> Oleg Krivosheev <kriol@fnal.gov> writes:
> ok, reading again CD2:
> as friends. The preempt functions might be defined as a template as
> follows
> template<class T> task<T>* preempt(task<T>* t) { /* ... */ }
> it looks for me that i'v declared/defined
> abs and op+ in exactly the same manner as proposed in CD2.
That example is out of date, and is not normative in any case. But this is:
14.5.5 Function templates [temp.fct]
2 A function template can be overloaded with other function templates
and with normal (non-template) functions. A normal function is not
related to a function template (i.e., it is never considered to be a
specialization), even if it has the same name and type as a poten-
tially generated function template specialization.3)
_________________________
3) That is, declarations of non-template functions do not merely guide
overload resolution of template functions with the same name. If such
a non-template function is used in a program, it must be defined; it
will not be implicitly instantiated using the function template defi-
nition.
Jason
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-10 11:44 ` Jason Merrill
@ 1997-10-10 17:21 ` Oleg Krivosheev
1997-10-10 17:19 ` Jason Merrill
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Krivosheev @ 1997-10-10 17:21 UTC (permalink / raw)
To: Jason Merrill; +Cc: Oleg Krivosheev, egcs
hi,
On Fri, 10 Oct 1997, Jason Merrill wrote:
> >>>>> Oleg Krivosheev <kriol@fnal.gov> writes:
>
> > after reading CD2 and thinking a bit i still
> > believe this is a bug:
>
> > 14.8.3 Overload resolution [temp.over]
>
> > ..
> > For each function template, if the argument
> > deduction succeeds, the deduced template-arguments are used to instan-
> > tiate a single function template specialization which is added to the
> > candidate functions set to be used in overload resolution.
> > ..
>
> > well, lloks like egcs deduces templates argument right,
>
> Yes.
>
> > then it properly did everload resolution and
> > choose template version of abs
>
> No. It chose the non-template abs declared by the line
>
> friend numT abs( const TVector3D<numT>& );
>
hmm...
ok, reading again CD2:
14.5.3 Friends [temp.friend]
1 A friend function of a class template can be a function template or an
ordinary (non-template) function. [Example:
template<class T> class task {
// ...
friend void next_time();
friend task<T>* preempt(task<T>*);
friend task* prmt(task*); // task is task<T>
friend class task<int>;
// ...
};
Here, next_time() and task<int> become friends of all task classes,
and each task has appropriately typed functions preempt() and prmt()
as friends. The preempt functions might be defined as a template as
follows
template<class T> task<T>* preempt(task<T>* t) { /* ... */ }
--end example]
it looks for me that i'v declared/defined
abs and op+ in exactly the same manner as proposed in CD2.
It worked just fine with egcs-2.90.10, so it's regression, IMO
Just in case, i've enclosed below very small test case for op+:
template <class T> class X {
public:
X( T );
X( const X<T>& );
~X();
friend X<T> operator+( const X<T>&, const X<T>& );
private:
T t_;
};
template <class T>
X<T>::
X( T t ):
t_(t) {
}
template <class T>
X<T>::
X( const X<T>& x ):
t_(x.t_) {
}
template <class T>
X<T>::
~X() {
}
template <class T> X<T>
operator+( const X<T>& a, const X<T>& b ) {
return X<T>( a.t_ + b.t_ );
}
main( void ) {
}
void
dummy( void ) {
X<int> x( 1 );
X<int> y( 2 );
x = x+y;
}
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
1997-10-10 11:46 ` Oleg Krivosheev
@ 1997-10-10 20:46 ` Alexandre Oliva
0 siblings, 0 replies; 16+ messages in thread
From: Alexandre Oliva @ 1997-10-10 20:46 UTC (permalink / raw)
To: Oleg Krivosheev; +Cc: Joe Buck, egcs team
Oleg Krivosheev writes:
> template <class T> class X {
Here, you declare a non-template operator+ :
> friend X<T> operator+( const X<T>&, const X<T>& );
> };
And here, you declare a define a template one:
> template <class T> X<T>
> operator+( const X<T>& a, const X<T>& b ) {
> return X<T>( a.t_ + b.t_ );
> }
And here, overload resolution chooses the non-template one.
> x = x+y;
> as one can see, op+ is not instantiated.
It shouldn't, since it is not used at all. The non-template operator+
you use, OTOH, is not defined. You should have declared the template
version of the function friend, like this:
template <typename T>
class X;
template <typename T>
X<T> operator+(const X<T>&, const X<T>&);
template <typename T>
class X {
// note the angle brackets:
// vv
friend X<T> operator+<>(const X<T>&, const X<T>&);
};
--
Alexandre Oliva
mailto:oliva@dcc.unicamp.br mailto:aoliva@acm.org
http://www.dcc.unicamp.br/~oliva
Universidade Estadual de Campinas, SP, Brasil
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++
1997-10-09 15:14 ` Ian Lance Taylor
@ 1997-10-13 5:05 ` Andrey Slepuhin
0 siblings, 0 replies; 16+ messages in thread
From: Andrey Slepuhin @ 1997-10-13 5:05 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: egcs
Ian Lance Taylor wrote:
>
> Date: Thu, 09 Oct 1997 20:01:20 +0400
> From: Andrey Slepuhin <pooh@msu.ru>
>
> 3) Even the simple test program failed to run with message about exec
> format error due to bad text alignment.
> It seems to me that problem is not with egcs but with gnu ld which
> generates
> invalid executables. Any help is appreciated.
>
> You're right; the GNU linker doesn't work on AIX 4.2. It's possible
> that the appended patch to ld/emultempl/aix.em will fix the immediate
> problem. There may be other problems.
Thanks for the help - it seems that your patch works fine. At least I
just
successfully build omniORB2 with egcs-971008 configured with
--enable-shared
--with-gnu-ld. The only problem was with multiple defined symbol
_mutex_global_np
in pthread.h (native linker ignores multiple defined symbols; this
symbol is not
defined as extern - this looks like IBM bug).
Andrey.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics
[not found] <orbu0tza3m.fsf@sunsite.dcc.unicamp.br>
@ 1997-10-13 13:41 ` Oleg Krivosheev
0 siblings, 0 replies; 16+ messages in thread
From: Oleg Krivosheev @ 1997-10-13 13:41 UTC (permalink / raw)
To: Alexandre Oliva; +Cc: egcs, stl
Hi, All
i admit being wrong - looks like g++ works according to draft.
There is another closely related problem:
Tons of code in SGI STL use old style declaration.
From iterator.h:
template<....>
class reverse_iterator {
....
friend bool operator==(const self& x, const self& y);
friend bool operator<(const self& x, const self& y);
friend Distance operator-(const self& x, const self& y);
friend self operator+(Distance n, const self& x);
....
};
template <....> bool operator==( .... ) {
}
etc
After fixing my stuff so g++ instantiates all what i asked for,
i'm getting tons of uninstantiated op==, op!= etc
for some iterators.
thanks
OK
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~1997-10-13 13:41 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <3439FE5B.53F1D3CC.cygnus.egcs@msu.ru>
1997-10-07 3:15 ` AIX & shared libstdc++ Jason Merrill
1997-10-07 3:48 ` Andrey Slepuhin
1997-10-09 9:26 ` Andrey Slepuhin
1997-10-09 15:14 ` Ian Lance Taylor
1997-10-13 5:05 ` Andrey Slepuhin
1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev
1997-10-10 8:51 ` Joe Buck
1997-10-10 8:51 ` Oleg Krivosheev
1997-10-10 8:51 ` Oleg Krivosheev
[not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble>
1997-10-10 11:44 ` Jason Merrill
1997-10-10 17:21 ` Oleg Krivosheev
1997-10-10 17:19 ` Jason Merrill
1997-10-10 11:46 ` Oleg Krivosheev
1997-10-10 20:46 ` Alexandre Oliva
1997-10-10 8:51 ` Joe Buck
[not found] <orbu0tza3m.fsf@sunsite.dcc.unicamp.br>
1997-10-13 13:41 ` Oleg Krivosheev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).