Apologies if this is a repeat post, but I did not see the first one come
back from the reflector. I've made the included image a whole lot
smaller in case that was the problem.
Rob.
Robert May wrote:
Daniel Fernandez wrote:
Hello, perl-win32-gui-users,
Anybody knows if it's possible to display a background bitmap image
in a MDIFrame? If it's possible, I will appreciate a short example .
Here's one way of doing it with a regular window. You should be able to
adjust this to work with an MDI frame. (Sorry about the big image)
Regards,
Rob.
#!perl -w
use strict;
use warnings;
use Win32::GUI;
use Win32::GUI::BitmapInline();
# Load our bitmap
#my $bm = Win32::GUI::Bitmap->new("sail.bmp") or die "Creating Bitmap";
my $bm = get_bitmap();
# Store the width and height, as we'll use them a lot
my($bmw, $bmh) = ($bm->Info())[0..1];
# create a class without a background brush: this prevents
# defWindowProc erasing the window background, as we want to
# paint it ourselves to avoid flicker
my $class = Win32::GUI::Class->new(
-name => 'noflicker',
-brush => 0,
);
# create a window, using our class. Add style WS_CLIPCHILDEN
# so that any child windows are automatically masked out of
# our window's DC, and then we don't need to worry about drawing
# over them
my $mw = Win32::GUI::Window->new(
-name => "ImgWindow",
-title => "Background Image",
-pos => [100,100],
-size => [300,200],
-class => $class,
-addstyle => WS_CLIPCHILDREN,
-onPaint => \&paint,
-onTerminate => sub {-1},
);
$mw->AddButton(
-name => "Button",
-pos => [20,20],
-text => "Example Child Window",
);
# Create a memory DC, compatible with our window's
# DC, containing our bitmap. Do this once, here, to speed
# up the painting routine. Use a local block, so that $dc
# goes out of scope, and $dc gets released (could call
# $dc->ReleaseDC() instead).
my $memDC;
{
my $dc = $mw->GetDC();
$memDC = $dc->CreateCompatibleDC();
$memDC->SelectObject($bm);
}
# We need a brush to paint the window background
# with, select a grey one. We don't need to worry
# about freeing stock objects when we're done with them
my $bkBrush = Win32::GUI::GetStockObject(1);
# Show the window and enter the dialog phase.
$mw->Show();
Win32::GUI::Dialog();
exit(0);
# Our window painting routine. To avoid flicker we will
# paint the whole of the window, taking care not to draw any
# pixel more than once.
sub paint
{
my($window, $dc) = @_;
# I will add StretchBlt to the next release so that we can stretch the
# image to fit the window, but it's not there right now.
#$dc->StretchBlt(0, 0, ($window->GetClientRect())[2..3], $memDC, 0, 0,
$bmw, $bmh);
#calculate the image position to center it in the window
my ($ww, $wh) = ($window->GetClientRect())[2..3];
my $l = ($ww - $bmw)/2;
my $t = ($wh - $bmh)/2;
my $r = $l + $bmw;
my $b = $t + $bmh;
# copy the image from the memory DC to the window's DC
$dc->BitBlt($l, $t, $bmw, $bmh, $memDC, 0, 0);
# fill the spaces around the image with our background brush.
# We should probably not draw when it is not necessary (i.e. when
# the image meets the side(s), but we can get away with not checking,
# as the DC is always clipped to the window's client rect.
$dc->FillRect(0, 0, $ww, $t, $bkBrush);
$dc->FillRect(0, $b, $ww, $wh, $bkBrush);
$dc->FillRect(0, $t, $l, $b, $bkBrush);
$dc->FillRect($r, $t, $ww, $b, $bkBrush);
# We've drawn the background, so inform windows that there is nothing
left
# to draw.
$dc->Validate();
# we've processed the message, so return 0.
return 0;
}
sub get_bitmap
{
return Win32::GUI::BitmapInline->new( q(
Qk1gMQAAAAAAADYEAAAoAAAAoAAAAG4AAAABAAgAAQAAACotAAATCwAAEwsAAAABAAAAAQAAADEx
AAA5OQAhOTkAKTk5ADk5OQAAQkIAGEJCACFCQgApQkIAMUJCADlCQgBCQkIAAEpKAAhKSgAQSkoA
GEpKACFKSgApSkoAMUpKADlKSgBCSkoAAFJSAAhSUgAQUlIAGFJSACFSUgApUlIAMVJSADlSUgBC
UlIASlJSAABaWgAIWloAEFpaABhaWgAhWloAKVpaADFaWgA5WloAQlpaAEpaWgBSWloAAGNjAAhj
YwAQY2MAGGNjACFjYwApY2MAMWNjADljYwBCY2MASmNjAFJjYwBaY2MAAGtrAAhrawAQa2sAGGtr
ACFrawApa2sAMWtrADlrawBCa2sASmtrAFJrawBaa2sAY2trAABzcwAIc3MAEHNzABhzcwAxc3MA
OXNzAEJzcwBKc3MAUnNzAFpzcwBjc3MAa3NzAAB7ewAIe3sAEHt7ADl7ewBCe3sASnt7AFJ7ewBa
e3sAY3t7AGt7ewBze3sAe3t7AACEhAAIhIQASoSEAFKEhABahIQAY4SEAGuEhABzhIQAe4SEAISE
hAAAjIwAY4yMAGuMjABzjIwAe4yMAISMjACMjIwAe5SUAISUlACMlJQAlJSUAHucnACEnJwAjJyc
AJScnACcnJwAjKWlAJSlpQCcpaUApaWlAJytrQClra0Ara2tAKW1tQCttbUAtbW1AK29vQC1vb0A
vb29ALXGxgC9xsYAxs7OAMbW1gDO1tYAc97eAHve3gCE3t4Azt7eAHPn5wB75+cAhOfnAIzn5wCU
5+cAnOfnAKXn5wBK7+8AUu/vAFrv7wBj7+8Aa+/vAHPv7wB77+8AhO/vAIzv7wCU7+8AnO/vAKXv
7wCt7+8AY/f3AGv39wBz9/cAe/f3AIT39wCM9/cAlPf3AJz39wCl9/cArff3ALX39wC99/cAY///
AGv//wBz//8Ae///AIT//wCM//8AlP//AJz//wCl//8Arf//ALX//wC9//8Axv//AM7//wDW//8A
3v//AOf//wDv//8A9///AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/
//8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////
AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A
////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAGAQEA
AQEBBQAACAEFBQUMDAUFCgEABAUBAQEJAAUBBgAEAQADBQUMAAQFAAYBAQABAQEFAAAIAQUFBQwM
BQUKAQAEBQEBAQkABQEGAAQBAAMFBQwABAUABgEBAAEBAQUAAAgBBQUFDAwFBQoBAAMFAQEAAAAA
AwUFDAAEBQcBAAMFDAwABhUABwwMFRUMDAwABxUBDAUFCQEGAAUBAAQFBQUMBAUHAQADBQwMAAYV
AAcMDBUVDAwMAAcVAQwFBQkBBgAFAQAEBQUFDAQFBwEAAwUMDAAGFQAJDAwVFQwMDBUVAAAAAQEG
BQcMBQUBDAEMBBUBHwEqBB8FFQEfAR8FKgAEHxUVFQgMAAoFBQEBAQAAAQEBBgUHDAUFAQwBDAQV
AR8BKgQfBRUBHwEfBSoABB8VFRUIDAAKBQUBAQEAAAEBAQYFBwwFBQEMAQwEFQEfASoEHwEVAAAG
DAQVBB8BKgEqBTYBKgEqCB8ABBUVHyoHHwYqBx8ABBUVFQwFBQYMBBUEHwEqASoFNgEqASoIHwAE
FRUfKgcfBioHHwAEFRUVDAUFBgwEFQQfASoBKgU2ASoBKggfARUAAAAGHxUVFQwMBRUBDAEVBgwB
FQEVBR8KFQAQHx8VFR8VHxUfFQwVDBUVFQgfAAoVDBUMHxUVFQwMBRUBDAEVBgwBFQEVBR8KFQAQ
Hx8VFR8VHxUfFQwVDBUVFQgfAAoVDBUMHxUVFQwMBRUBDAEVBgwBFQEVBR8GFQAABSoEiQGOBokA
Bo6Ojo+PkQSQAAuPj4+Oj46OiY6PjwAFkAANj46JiImJiImJjo+PjwAEjgWJBIgFiQGOBokABo6O
jo+PkQSQAAuPj4+Oj46OiY6PjwAFkAANj46JiImJiImJjo+PjwAEjgWJBIgFiQGOBokABo6Ojo+P
kQSQAY8FFQAAABsVFR8fKo6Ojo2Ojo2Mh4yMjYyOjY2MjY6Ojo8ABZAABI+Ojo4EjQAJjo6Oj4+P
jo2NAAWMAAeNjY2Oj5CQAAWPABmOjY2Ojo6Njo6NjIeMjI2Mjo2NjI2Ojo6PAAWQAASPjo6OBI0A
CY6Ojo+Pj46NjQAFjAAHjY2Njo+QkAAFjwAejo2Njo6OjY6OjYyHjIyNjI6NjYyNjo6OjwwMFQwM
AAAAFgwMFRUMnZ2dnJ2enZ2bnJqampmNjIwGiwAGjIyampuaBJsABJycnJoFmwAInJuam5uamo0F
jAAIjZubnJ2dnJwEnQAOnJ2enZ2bnJqampmNjIwGiwAGjIyampuaBJsABJycnJoFmwAInJuam5ua
mo0FjAAIjZubnJ2dnJwEnQAOnJ2enZ2bnJqampmNjIwFiwAFQzY2KioAAAAAB0M2Kh8Vp6cABKYA
BpumpqanpgSbAByamZmYmJeYl5aXmJiZmpqam5ump6anp6epp6enBKYAEpumppubmpqZmJiZmZma
m6enpwSmAAabpqamp6YEmwAcmpmZmJiXmJeWl5iYmZqampubpqemp6enqaenpwSmABKbpqabm5qa
mZiYmZmZmpunp6cEpgAGm6ampqemBJsAC5qZmZiYl09PW09DAAAAAAxPW1tbQ6SlpqempqYPpwAG
pqalpKOjBaIACaOjo6SlpKSlpgALpwASpqalpKOjoqGhoaOkpaanpqamD6cABqampaSjowWiAAmj
o6OkpaSkpaYAC6cAEqampaSjo6KhoaGjpKWmp6ampg+nAAUqHyo2QwAAAAASKjY2Q0Ovr6+wsrKz
s7O0s7SyCLQABrW0tbS0tASzAA+ysrGwsLCvsK+usK+wsLIACbMAFrSzs7KxsbCwsK+vr7CysrOz
s7SztLIItAAGtbS1tLS0BLMAD7KysbCwsK+wr66wr7CwsgAJswAWtLOzsrGxsLCwr6+vsLKys7Oz
tLO0sgi0AAa1DAwMFRUAAAATHx8fKiqwsK+vrq+vsLGztLS0swAEtAAJs7OztLOztLS1AAS0AA21
tbS0tLO0s7OzsbGxAASwAbEEsgmzABCysrCwr6+ur6+wsbO0tLSzBLQACbOzs7Szs7S0tQAEtAAN
tbW0tLSztLOzs7GxsQAEsAGxBLIJswAQsrKwsK+vrq+vsLGztLS0swS0AAmzs7O0Hx8VFQwAAAAA
GDY2Kiofs7KxsbCvraysra6xs7SztLO0swS0AAq1tbS1tLW1tbS2BbUGtAAns7OysrGxsLGvr6+w
sK+wsbGysrOzsrGxsK+trKytrrGztLO0s7SzAAS0AAq1tbS1tLW1tbS2BbUGtAAvs7OysrGxsLGv
r6+wsK+wsbGysrOzsrGxsK+trKytrrGztLO0s7SztLS0FQwMFRUAAAAAFlBQXFBcsLGxsbKysbGw
r66trK6wsLEGsgADs7OzAAS1AbQGtQALtrW1tba1tLS0s7QABbMAHLKxsbCwr7Cvrq+vsLGxsbKy
sbGwr66trK6wsLEGsgADs7OzAAS1AbQGtQALtrW1tba1tLS0s7QABbMAHLKxsbCwr7Cvrq+vsLGx
sbKysbGwr66trK6wsLEFsgAFKysgKxUAAAAACSAgKysrsrKxsQAGsgGxAbAErwADsbKyAAWzAASy
s7KyBbMABbS0tbW1AAi2CbUABbS1tLS0AASzAASysrGxBrIBsQGwBK8AA7GysgAFswAEsrOysgWz
AAW0tLW1tQAItgm1AAW0tbS0tAAEswAEsrKxsQayAbEBsASvAAuxsrKzs7MgKzcrNwAAAAUWAbUF
tASzAAO0tLQABLMBtAGzBrQACrW0tbS0s7O0s7IEswG0AbQEtQAItra1tba1trYMtQW0BLMAA7S0
tAAEswG0AbMGtAAKtbS1tLSzs7SzsgSzAbQBtAS1AAi2trW1trW2tgy1BbQEswADtLS0AASzAAq0
s7S0tCAgIBYgAAAAHBYgKyAgtbW0tbS1tLS1tbS1tLOztLS0s7OztLUEtAAQtbS1tbW2tLW1tLS1
tLO0swS1AbQFtQG2AbYFtQAbtLS1tLW1tLW0tbS0tbW0tbSzs7S0tLOzs7S1AAS0ABC1tLW1tba0
tbW0tLW0s7SzBLUBtAW1AbYBtgW1AB+0tLW0tbW0tbS1tLS1tbS1tLOztLS0s7OztCArICArAAAA
AAkWISEWIbW0tLQABLMBtAG0BLUABbS0tbW0AAWzBrQAGbW1trW2tbW1tra1tba1tbW2tra1tba1
tbQACrUAA7S0tAAEswG0AbQEtQAFtLS1tbQABbMGtAAZtbW2tba1tbW2trW1trW1tba2trW1trW1
tAAKtQADtLS0AASzAbQBtAS1AAm0tLW1tLOzszgABCwAAAQhARcFtQARtLSztLOys7O0tLS2tba1
trYABbUABLS0tbQFtQAJtLW1tra1trW1AAe2AAa1trW2tbYLtQARtLSztLOys7O0tLS2tba1trYA
BbUABLS0tbQFtQAJtLW1tra1trW1AAe2AAa1trW2tbYLtQAWtLSztLOys7O0tLS2tba1trYXFyEh
IQAAAAUhISEXFwAJtgALtba2tbW0tLSzs7QABLUAC7a2t7e1trW2tbW1AAS0AbUEtgG3B7YBtwa2
AAO1tbUAC7YAC7W2trW1tLS0s7O0AAS1AAu2tre3tba1trW1tQAEtAG1BLYBtwe2AbcGtgADtbW1
AAu2ABK1tra1tbS0tLOztLW1ISEXFw4AAAAFFxchISEAD7YABre2tbOxsgSzAAa0tLS1tbUEtgAI
t7e2tbW2trUFtgG1BbYBtwi2AbUPtgAGt7a1s7GyBLMABrS0tLW1tQS2AAi3t7a1tba2tQW2AbUF
tgG3CLYBtQ+2AAy3trWzsbKzOUY5OTkAAAANIhciIhe2tba1tra1tQAGtgAHt7a3t7a2twAEtga1
AAO2tbUABLYABre3tre3txW2AAe1trW2trW1AAa2AAe3tre3tra3AAS2BrUAA7a1tQAEtgAGt7e2
t7e3FbYAB7W2tba2tbUABrYADbe2t7e2tre2GBgiIiIAAAAABS0iLSIiAAi2AAm1tba2tre2t7YA
BLcABra3t7a2tgW3AAW2t7W1tgAFtQS2AbcItgG1AbYFtQq2AAm1tba2tre2t7YABLcABra3t7a2
tgW3AAW2t7W1tgAFtQS2AbcItgG1AbYFtQq2AAm1tba2tre2t7YABLcBtgUYAAAADCIiIi0ttba1
tra2tQS2AbcEtgG3BbYABbe2tre2AAi3AbgFtwADtra2AAa1DLYACbW1tba1tra2tQAEtgG3BLYB
twW2AAW3tra3tgAItwG4BbcAA7a2tgAGtQy2AAm1tbW2tba2trUABLYBtwS2AbcFtgAFGCIiGC0A
AAAAESIjIiIjtre2tra1trW1trW3AAS2AbcLtg23AbgFtwi2AbUJtgALt7a2trW2tbW2tbcABLYB
twu2DbcBuAW3CLYBtQm2AAu3tra2tba1tba1twAEtgG3BbYFIgAAAAgjIxgYI7e3tgW3CLYEtwAR
tre3tre3t7a1tbW0tbW2trYABbcBuAG3CbgBtwG4C7cBtgW3CLYEtwARtre3tre3t7a1tbW0tbW2
trYABbcBuAG3CbgBtwG4C7cBtgW3CLYEtwG2AbcFIwAABQ8IuAe3AAa2tre2t7YEtwALtre3tra2
tbW0s7MABLQABbW1t7e3AAe4AAW5uLi4uQAPuAe3AAa2tre2t7YEtwALtre3tra2tbW0s7MABLQA
BbW1t7e3AAe4AAW5uLi4uQAPuAe3AAy2tre2t7a3IyMjLiMAAAAFGRkQGRAACLgBuQa4CbcBtgG2
C7cADba2tbW0tLW1trW2t7cABbgABbe2t7e3AAy4AbkGuAm3AbYBtgu3AA22trW1tLS1tba1tre3
AAW4AAW3tre3twAMuAG5BrgHtwAFIy4uLiMAAAAABi8vLyMZtwe4AAe5ubm4uLi5AAe4BrcBuAa3
AAe4uLe4t7e4AAS3BLYGtwS2AAW3t7e4twAHuAAHubm5uLi4uQAHuAa3AbgGtwAHuLi3uLe3uAAE
twS2BrcEtgAFt7e3uLcAB7gAB7m5ubi4uLkAB7gFIwAAAAkjJC88O7a3t7cACLgBtwa4B7kABLi5
uLcFuAS3BrgABLe3t7gGtwW4AAi3t7a2tre3twi4AbcGuAe5AAS4ubi3BbgEtwa4AAS3t7e4BrcF
uAAIt7e2tra3t7cIuAG3BrgACLm5uRAHEBAZAAAEGQEkBbcABLa3t7cMuAG5AbgFuQAFurm5uLkA
DLgBtxK4BbcABLa3t7cMuAG5AbgFuQAFurm5uLkADLgBtxK4BbcABLa3t7cMuAAGuRkQEBAHAAAA
BTwwMCQkAAe4AAe3uLe3t7i3AA64AbkBuAu5AbgBuQ64BbcJuAAHt7i3t7e4twAOuAG5AbgLuQG4
AbkOuAW3CbgAB7e4t7e3uLcACLgFJAAAAAclPEhIPLe3AAS4AAW5ubm4uQARuAm5AAi6urm5ubq6
ugS5BbgEuQG4AbgGtwS4AAW5ubm4uQARuAm5AAi6urm5ubq6ugS5BbgEuQG4AbgGtwS4AAW5ubm4
uQALuAAFJSQkJDAAAAAABRoaGiQaAAW4AAa3t7e4uLgHuQADuLm5AAW4AbcHuAW5AAO4uLkACLoO
uQW4AAa3t7e4uLgHuQADuLm5AAW4AbcHuAW5AAO4uLkACLoOuQW4AAa3t7e4uLgHuQAJuLm5uDA8
MDA9AAAABRoFuQi4AbkBuQW6BbkHuAAGt7e4t7i4CLkBuha5CLgBuQG5BboFuQe4AAa3t7i3uLgI
uQG6FrkIuAG5AbkFugAHubkaGhowMAAAAAAFJRsbGxoACbkAA7i4uAAFtwADuLi5AAa6AAi5urm5
urm5uQS4CLkFugS5AbgBuBC5AAO4uLgABbcAA7i4uQAGugAIubq5ubq5ubkEuAi5BboEuQG4AbgQ
uQADuLi4AAW3AAq4uLm6uhoREREbAAAABTExJiUlAA+5AA64uLe4uLm6urq7u7q7uwe6CLkAA7q6
uQAJuhe5AA64uLe4uLm6urq7u7q7uwe6CLkAA7q6uQAJuhe5AAy4uLe4uLm6EQgHCBEAAAAFPj4x
MRsABboABrm6urm5ug65AAq6urq7u7q6u7u7BroFuQAEuLm5uQe6BrkGugAGubq6ubm6DrkACrq6
uru7urq7u7sGugW5AAS4ubm5B7oGuQa6AAa5urq5uboLuQAFMTEmJRIAAAAACkpVXl5Jubm6u7oE
uwADurq6ABK5B7oGuwAGurq5ubm4BbkEugALubm4uLi5ubm6u7oABLsAA7q6ugASuQe6BrsABrq6
ubm5uAW5BLoAC7m5uLi4ubm5uru6AAS7AAO6uroACrkABTIyPj4+AAAAAAU+SkpVXgAFuAAEubq7
ugS7CboIuQy6AAe7u7q6u7u7AAm6BbkGuAAEubq7ugS7CboIuQy6AAe7u7q6u7u7AAm6BbkGuAAE
ubq7ugS7CboABT4+Pj9KAAAABDIADEq5ubm4uLe3uLm6ug27J7oEuQAIuLi3t7i5uroNuye6BLkA
CLi4t7e4ubq6C7sABRwcHCcmAAAAAAU/Pz8yPwAHugAHubm4uLm6ugAUuwq6AAS7uru7F7oAB7m5
uLi5uroAFLsKugAEu7q7uxe6AAe5ubi4ubq6AAi7BRIAAAAIMz9LVku6uroHuwi6ABC7u7u8u7y7
u7y7u7u8u7u8CrsIuga7CboHuwi6ABC7u7u8u7y7u7y7u7u8u7u8CrsIuga7CboHuwi6AAm7u7u8
CQMJCQkAAAABMwQnAAO7u7sABboKuwG6AboHuwADvLu7AA68F7sFugq7AboBuge7AAO8u7sADrwX
uwW6CrsACbq6u7snHRwcEwAAAAAFS1ZWTEsAHrsABLy8u7sEvAa7AAO8u7sABrwHuwG6AboguwAE
vLy7uwS8BrsAA7y7uwAGvAe7AboBuhi7AAUoMzNAQAAAAAAFHSgoNDMADrsAA7y8vAATuwADvLy8
AAi7AbwBuw28ELsAA7y8vAATuwADvLy8AAi7AbwBuw28ELsAA7y8vAAFuwAFTFdMTFYAAAAABQoK
CQoTAAS8DLsKvA27BbwBuwq8AbsBuwu8DLsKvA27BbwBuwq8AbsBuwu8DLsGvAAFNCg0NEEAAAAA
BUFMTEEoAAu8CbsQvAa7CLwAA7u8uwAIvAG7DbwJuxC8BrsIvAADu7y7AAi8AbsNvAm7AbwBvAQo
ATQAAAAFNEFNWFcACLwAA728vQAIvAG7AbszvAADvby9AAi8AbsBuzO8AAO9vL0ACLwACLu7vE1N
TTRBAAAABTU1NTQpAA28AAi9vL28vL29vQ68C70JvAG9FbwACL28vby8vb29DrwLvQm8Ab0VvAAO
vby9vLy9vb28Qk01NTUAAAAFNCkpNDUABr0IvAG9BbwLvQa8D70AA7y8vAAPvQi8Ab0FvAu9BrwP
vQADvLy8AA+9CLwBvQW8AAe9vQoKFBQeAAAAAWIEahG9BrwJvQa8K70GvAm9BrwrvQW8AAV6amNO
QgAAAAAFbnd9fYAAFr0BvAG8Pr0BvAG8Pr0ABYWGhIB6AAAAAAVrc3h7fQA1vQG+P70BviC9AAV0
eHd9fQAAAAAFbm90d3oAlr4ABXh4dHR0AAAAAAV0dHh4ewCWvgAFfoB7eHMAAAAABXh3d3h3ACq9
Ab4Bvj69Ab4Bviq9AAVvc3N0ZAAAAAAFc25jZGMAlr0ABXNuZGpZAAAABGoBYxS9AAa8vby8vbwO
vQS8KL0ABry9vLy9vA69BLwovQAHvL1ubm1tagAAAAFCBFgkvAG9E7wEvSi8Ab0TvAS9GrwABWpy
cnJ2AAAAAAY1KB4eHr0WvAu7AbwBuxi8Bb0WvAu7AbwBuxi8Bb0VvAAFbXV1cnUAAAAABWFoYldB
ABu8FbsAA7y8vAAEuwW8AbsevBW7AAO8vLwABLsFvAG7GbwABVhiYVhhAAAAAAVYaGxwbAAEuxe8
BrsAA7y7uwAEvBy7F7wGuwADvLu7AAS8HLsSvAU0AAAABVdANDRAAAi7B7wAB7u7u7y8u7sAC7wE
uwe8EbsBvAG8CbsHvAAHu7u7vLy7uwALvAS7B7wRuwG8AbwJuwe8AAy7u7u8vLu7MygoKB0AAAAF
NDMzMzQACrsBuha7AAS8u7u8BrsBvAG8HbsBuha7AAS8u7u8BrsBvAG8HbsBugu7AAVAQFdAQAAA
AAAFQEBMS0wAC7sWuhK7AbwBvBa7FroSuwG8AbwWuwu6AAVgVldgYAAAAAAFJzM/PzMABbsAA7q6
ugAGuwe6AbkBuQq6BbkEugG7B7oTuwADurq6AAa7B7oBuQG5CroFuQS6AbsHuhO7AAO6uroABrsH
ugAGuWdmZmBgAAAABT8zMzM/AAe6DLkJugAJubm6ubm6ubq6AAi5AAS6urq5BboFuwy6DLkJugAJ
ubm6ubm6ubq6AAi5AAS6urq5BboFuwy6DLkAA7q6ugAEVgFVAAAABUs/PzMyAAy6AbsEugG5HroA
A7m6uQAZugG7BLoBuR66AAO5urkAGboBuwS6AbkEugU/AAAEVQFKBboBuQS6AbkFugG7AbsWugAF
ubq5ubkACroABLm6uboFuQW6AbkEugG5BboBuwG7FroABbm6ubm5AAq6AAS5urm6BbkFugG5BLoB
uQW6AbsBuwS6AAUyMj4yPwAAAAAHJjIyPj+6ugAGuQG4CrkMugW5BboLuQq6AAS5ubq6BrkBuAq5
DLoFuQW6C7kKugAEubm6uga5AbgKuQAEurq6HAQmAAAABRsbHCYbAAW6AbsEuge5BrgGuQe6AAS5
urq5BLoAA7m5ugAEuQG4BLkNugG7BLoHuQa4BrkHugAEubq6uQS6AAO5uboABLkBuAS5DboBuwS6
B7kFuAAFVUpKPj4AAAAABUo+PjEbAAa6AbkFuge5BbgABLe4uLgGuQa6AbsHugADubq6AAW5BLgA
A7m5uQAHugG5BboHuQW4AAS3uLi4BrkGugG7B7oAA7m6ugAFuQS4AAO5ubkAB7oBuQW6B7kACLi4
uFRUXl1UAAAEVAAIPrm5ubq6ubkPugS5CrgFuQy6BLkHuAAHubm5urq5uQAPugS5CrgFuQy6BLkH
uAAHubm5urq5uQAPugAFJiUmPUkAAAAACCUxMT09uLi4BLkFugG5ELoFuQm4AAW5uLm5uQAIugG5
AboEuQW4BLkFugG5ELoFuQm4AAW5uLm5uQAIugG5AboEuQW4BLkFugG5CboABREIERERAAAAAAUa
GholJQAEuAG3BLgBuQi6AAa5ubm6ubkOugS5AbgBuQW4B7kBuge5BLgBtwS4AbkIugAGubm5urm5
DroEuQG4AbkFuAe5AboHuQS4AbcEuAG5CLoACbm5uboaGhERCAAAAAALMDAlJRq5ubi4t7cABLYB
twG4CbkAB7q5urq5urkACroABLm5uboGuQS4AAa3t7e4t7cFuAAHubm5uLi3twAEtgG3AbgJuQAH
urm6urm6uQAKugAEubm5uga5BLgABre3t7i3twW4AAe5ubm4uLe3AAS2AbcBuAm5AAa6ERAHERAA
AAAHSEhSSEi3twAGuAAIt7e2trW2t7cHuAS5AAy6urq5ubq5ubq5urkEugq5AAO4uLgABbcBtgS3
BrgACLe3tra1tre3B7gEuQAMurq6ubm6ubm6ubq5BLoKuQADuLi4AAW3AbYEtwa4AAi3t7a2tba3
twa4AAUlJBokEAAAAAAJGhokJCS4uLe3AAS4AAS3uLe3BLYBtwW4AbkJuAa5CroNuQW4AbcBtwS4
AAS3uLe3BLYBtwW4AbkJuAa5CroNuQW4AbcBtwS4AAS3uLe3BLYBtwW4AAUaJC8kMAAAAAUQAAO5
ubkABbgBtwi4AAW5uLi5uAAEuQG4AbkGuAG3BbgGuQG6FLkFuAG3CLgABbm4uLm4AAS5AbgBuQa4
AbcFuAa5AboUuQW4AbcIuAAKubi4ubgZGRkQGQAAARAEGQAKuLm4uLi5uLi5uQS4AAa3uLi4t7cH
uAAJubi5uLi5uLm5AAa4AAa3uLm4ubgJuQADuLi5AAW4AAm5uLi4ubi4ubkABLgABre4uLi3twe4
AAm5uLm4uLm4ubkABrgABre4ubi5uAm5AAO4uLkABbgACbm4uLi5uLi5uQAEuAANt7i4uLe3uLgZ
IxkZIwAAAAAGEBkZEBm4B7cLuAe3BrgAFLm4ubi4uLm5uLi5uLi4ubm5uLi5DbgHtwu4B7cGuAAU
ubi5uLi4ubm4uLm4uLi5ubm4uLkNuAe3C7gABLe3ty8EIwAABBkBEAa4BLcBtgW3AAa4uLm4ubkF
uAAEt7e4twW4AA63uLi5ubi5uLi5uLm5uRS4BLcBtgW3AAa4uLm4ubkFuAAEt7e4twW4AA63uLi5
ubi5uLi5uLm5uRS4BLcBtgW3AAu4uLm4ubkQEBkZGQAAAAAFGRkZDw8ADLgFtwAHtra3t7i4twAJ
uAe3DLgBuQi4AbcOuAW3AAe2tre3uLi3AAm4B7cMuAG5CLgBtw64BbcACra2t7e4GRkPDwYAAAAG
Dw8YGBi3B7gBtwi4AAe3tbS1tba1AAS2BLcAFLi3uLm4uLe3t7i3t7i3uLi3uLe3CbgEtwe4AbcI
uAAHt7W0tbW2tQAEtgS3ABS4t7i5uLi3t7e4t7e4t7i4t7i3twm4BLcHuAG3CLgACre1tLW1Ojou
Li4AAAUYAAS3t7e2CrcAB7i3uLi3t7gABrcEtgADt7a2AAS3AAa4uLe4uLgXtwG2CrcAB7i3uLi3
t7gABrcEtgADt7a2AAS3AAa4uLe4uLgXtwG2CrcADbi3uLi3t7i3GBgiIiIAAAAFIgy2ELcBuAW3
BLYACLW1tba3tre2BrcAA7a2twAVthC3AbgFtwS2AAi1tbW2t7a3tga3AAO2trcAFbYKtwUYAAAA
DCIiIi0ttba1tra1tRW2B7cAC7i3t7e2tra1tbW0AAS1DLYACbW1tba1tra1tQAVtge3AAu4t7e3
tra2tbW1tAAEtQy2AAm1tbW2tba2tbUAD7YABRgiIhgtAAAAAAwtLS0iLbW2tbW1tLUEtAALtrW1
tra2tbW1trYABbUMtgS3AAa2tre2tbYGtQAQtLW1trW1tba1tba1tbW0tQS0AAu2tbW2tra1tbW2
tgAFtQy2BLcABra2t7a1tga1ABC0tbW2tbW1trW1trW1tbS1BLQAELa1tba2trW1tba2LSItLS0A
AAAFIi0hISIACLUHtA21ABG0srOys7O0tLS1tba1tre2tgAHtwW2AbUBtg21B7QNtQARtLKzsrOz
tLS0tbW2tba3trYAB7cFtgG1AbYNtQe0B7UFLQAAAAUXDhcXFwAHtgADtbW1AAa0AAWztLO0swAE
tAAVs7S0tLOzs7Kwr6+wsLCxsrO0tLW1AAa2AAW3tra2twAOtgADtbW1AAa0AAWztLO0swAEtAAV
s7S0tLOzs7Kwr6+wsLCxsrO0tLW1AAa2AAW3tra2twAOtgADtbW1AAa0AAuztLO0s7QsLCw5LAAA
AAAFISEXIRcACLYAC7e2tra1tbW0tLS1AAS0ACSzs7O0tLS1tLW0tLSzs7OysbGwsLGxsrGytLW1
tba1tbSztLQFtQi2AAu3tra2tbW1tLS0tQAEtAAks7OztLS0tbS1tLS0s7OzsrGxsLCxsbKxsrS1
tbW2tbW0s7S0BbUItgAPt7a2trW1tbS0tLW0tLQsAAQ4AAAAB0U4ODgstLQABrUAB7a2trW1tbYA
BLUADrS1tLS0s7O0s7S0s7SzBbQAErW0s7S0tLOzsbGysrOztLS0swSyAAazs7O0tLQGtQAHtra2
tbW1tgAEtQAOtLW0tLSzs7SztLSztLMFtAAStbSztLS0s7OxsbKys7O0tLSzBLIABrOzs7S0tAa1
AAe2tra1tbW2AAS1AAi0tbQsLDg4LAAAAAksLEVRUbGysrIABbQEswADtLS0AAS1BLYAFLW1tLW0
s7O0s7S0s7Kzs7SztLS0CbMBsgGzBLQACbOzsrGxsbKysgAFtASzAAO0tLQABLUEtgAUtbW0tbSz
s7SztLSzsrOztLO0tLQJswGyAbMEtAAJs7OysbGxsrKyAAW0BLMAA7S0tAAEtQAHtrYWDRYWIAAA
AAQgAAMrs7MABbEBsgGyB7MAEbSzs7O0tLS1tbW2tra1tbS1AAS0CLMBsgyzBbQAA7OzswAFsQGy
AbIHswARtLOzs7S0tLW1tba2trW1tLUABLQIswGyDLMFtAADs7OzAAWxAbIBsgezAAu0s7OztLQg
FhYWDQAAAAAFRERENysABrMABbKxsrGwAAWyAAOzs7IABrMABrKzs7SztAi1AAS0tbO0BLMAA7Kz
sgAGswAHsrGxsbKxsgAHswAFsrGysbAABbIAA7OzsgAGswAGsrOztLO0CLUABLS1s7QEswADsrOy
AAazAAeysbGxsrGyAAezAAWysbKxsAAFsgALs7Oys7OzKysrNysAAAAAGTdEUFBEsbGysbKys7Oz
srOysrGxsrKxsrMABbIAEbOysrOzs7SztLS0tbW1tLW0AAS1AAm0tLOzsrOzs7QABLMAGbKwsLCx
sbGysbKys7OzsrOysrGxsrKxsrMABbIAEbOysrOzs7SztLS0tbW1tLW0AAS1AAm0tLOzsrOzs7QA
BLMAILKwsLCxsbGysbKys7OzsrOysrGxsrKxsrOysjcrKys3AAAAFx8fHyoqsrGxsLCwr7CxsbKz
s7O0s7OzAAWyAAewsbGwsLGxAASyBbMAA7KytAAFtQADtrS1AAa0AASzs7O0BLMAErKxsbCwsK+w
sbGys7OztLOzswWyAAewsbGwsLGxAASyBbMAA7KytAAFtQADtrS1AAa0AASzs7O0BLMAErKxsbCw
sK+wsbGys7OztLOzswSyAAU3RDc3RAAAAAUfBLMAELKxsbGwsLCxsbKztLS1tbQFswSxAAqwr7Cu
rq+vsLGyB7MABLSzs7QFswAHtLOzs7SztAAGswAQsrGxsbCwsLGxsrO0tLW1tAWzBLEACrCvsK6u
r6+wsbIHswAEtLOztAWzAAe0s7OztLO0AAazABeysbGxsLCwsbGys7S0tbW0s7MfHx82NgAAAAEq
BB8ABLOzsrMEsgALsbCwsK6uraytrrAABLMAA7S0tAAFswAbsrKysLGvsLGysbKzsrKys7O0s7Oz
srKxsLGxAASyBLMBsgGzBLIAC7GwsLCurq2sra6wAASzAAO0tLQABbMAG7KysrCxr7CxsrGys7Ky
srOztLOzs7KysbCxsQAEsgSzAbIBswSyABOxsLCwrq6trK2usLOzsxUMFRUfAAAAAAU2NiofHwAE
sgGwAbAEsQAWsqSxsaSjoqGioqSztLW2tbS2tbS0tASzBLIACrGysbKzs7Kzs7IEswADtLOyAASx
B7IBsAGwBLEAFrKksbGko6KhoqKks7S1trW0trW0tLQEswSyAAqxsrGys7Oys7OyBLMAA7SzsgAE
sQeyAbABsASxABGypLGxpKOioaKipLMMDAUMDAAAAAARQzY2Kh+np6eop6amp6WlpqYADKUADaam
qKipqaioqampqKgABKcBpQGlBKMABKSkpaYFpwAHpqWjpKSkpQAEpwAJqKempqelpaamAAylAA2m
pqioqamoqKmpqaioAASnAaUBpQSjAASkpKWmBacAB6alo6SkpKUABKcACainpqanpaWmpgAKpQAF
NioqHxUAAAAACU9bW1tDo6SmqQAFqAANp6elpaWkpaWkpaWkpQAFpAAGpaSlpqamBKcAEamqqKmp
qKempaSjoqOjpKSlAASmAAqjoqGhoaOjpKapBagADaenpaWlpKWlpKWlpKUABaQABqWkpaampgSn
ABGpqqipqainpqWko6Kjo6SkpQAEpgAKo6KhoaGjo6SmqQWoAA2np6WlpaSlpaSlpaSlAAU2AAAA
EDY2Q09blpWVl5ejpamnqKgFpwAYpqampaWlpKSko6OZpKSlpaWmpqWlpaSlBqcABainqaamAAel
ABGkpJmZl5eWlZWXl6OlqaeoqAAFpwAYpqampaWlpKSko6OZpKSlpaWmpqWlpaSlBqcABainqaam
AAelABGkpJmZl5eWlZWXl6OlqaeoqAAFpwALpqampaWlKjYqNjYAAAAAGR8qHyo2mZiXlZSTkpSY
mpyoqampqKiop6gABacAHZycm5uampuam5yam5ucm6ecpqacm6abnJubm5ycAASbAZoEmwAVmZmY
l5WUk5KUmJqcqKmpqaioqKeoAAWnAB2cnJubmpqbmpucmpubnJunnKamnJumm5ybm5ucnAAEmwGa
BJsAHJmZmJeVlJOSlJianKipqamoqKinqKenDBUVHxUAAAYqBB8ACjY2T09lZUMqHwwKBQAFDAUM
DAwABBUABB8fKjYFKgAKHxUfFRUfHyofHwUqATYGKgQfAAo2Nk9PZWVDKh8MCgUABQwFDAwMAAQV
AAQfHyo2BSoACh8VHxUVHx8qHx8FKgE2BioEHwAKNjZPT2VlQyofDAoFAQwBBQAAACQfKipDKioq
Hx8VFQwVFRUfHyoqNkMqKhUMDAUFAQUFAQUFBQEGBQAFDBUVDBUABB8AMSoqHzY2Kh8fFR8VHx8f
KipDKioqHx8VFQwVFRUfHyoqNkMqKhUMDAUFAQUFAQUFBQEABgUABQwVFQwVAAQfAC0qKh82Niof
HxUfFR8fHyoqQyoqKh8fFRUMFRUVHx8qKjZDKioVDAwFBQEFBQEAAAAHFQEfBSoABR8fFRUfAAQV
ABgqKiofFRUMBQwFBQwMBQEFAQUFAQEFAQEEBQUMAAkVFR8VHxUfHx8ABxUBHwUqAAUfHxUVHwAE
FQAYKioqHxUVDAUMBQUMDAUBBQEFBQEBBQEBBAUFDAAJFRUfFR8VHx8fAAcVAR8FKgAFHx8VFR8A
BBUACioqKh8VFQwFDAUAAAEqATYEKgAHHx8VFR8qKgAGHwADFRUVAAUfAAwVFRUqKh8fDAUFDAwE
BQALDB8fHxUMBQwMBQEABAUEDAAEFR8qNgQqAAcfHxUVHyoqAAYfAAMVFRUABR8ADBUVFSoqHx8M
BQUMDAQFAAsMHx8fFQwFDAwFAQAEBQQMAAQVHyo2BCoABx8fFRUfKioABh8AAxUVFQAFHwAFFRUV
KioAAAAABgUMDBUVHwYqBB8BDAEVBAwBFQQfASoBNgQqABU2NiofHx8VFQwMDBUqKiofHxUVDBUA
BQUACwEFAQEFBQwMFRUfAAYqBB8BDAEVBAwBFQQfASoBNgQqABU2NiofHx8VFQwMDBUqKiofHxUV
DBUABQUACwEFAQEFBQwMFRUfAAYqBB8BDAEVBAwBFQQfAAUqNioqKgAAAQ==
) );
}