diff --git a/fhem/FHEM/00_SIGNALduino.pm b/fhem/FHEM/00_SIGNALduino.pm index 5428fd988..8c52ef9f6 100644 --- a/fhem/FHEM/00_SIGNALduino.pm +++ b/fhem/FHEM/00_SIGNALduino.pm @@ -1,10 +1,10 @@ ############################################## # $Id$ # -# v3.2-dev -# The file is taken from the FHEMduino project and modified in serval ways for processing the incomming messages +# v3.3.0 (Development release 3.3) +# The module is inspired by the FHEMduino project and modified in serval ways for processing the incomming messages # see http://www.fhemwiki.de/wiki/SIGNALDuino -# It was modified also to provide support for raw message handling which it's send from the SIGNALduino +# It was modified also to provide support for raw message handling which can be send from the SIGNALduino # The purpos is to use it as addition to the SIGNALduino which runs on an arduno nano or arduino uno. # It routes Messages serval Modules which are already integrated in FHEM. But there are also modules which comes with it. # N. Butzek, S. Butzek, 2014-2015 @@ -22,29 +22,39 @@ use Scalar::Util qw(looks_like_number); #use POSIX qw( floor); # can be removed #use Math::Round qw(); + +use constant { + SDUINO_INIT_WAIT_XQ => 1.5, # wait disable device + SDUINO_INIT_WAIT => 2, + SDUINO_INIT_MAXRETRY => 3, + SDUINO_CMD_TIMEOUT => 10, + SDUINO_KEEPALIVE_TIMEOUT => 60, + SDUINO_KEEPALIVE_MAXRETRY => 3, + SDUINO_WRITEQUEUE_NEXT => 0.3, +}; + + sub SIGNALduino_Attr(@); -sub SIGNALduino_Clear($); -#sub SIGNALduino_HandleCurRequest($$); -#sub SIGNALduino_HandleWriteQueue($); +#sub SIGNALduino_Clear($); # wird nicht mehr benoetigt +sub SIGNALduino_HandleWriteQueue($); sub SIGNALduino_Parse($$$$@); sub SIGNALduino_Read($); -sub SIGNALduino_ReadAnswer($$$$); +#sub SIGNALduino_ReadAnswer($$$$); # wird nicht mehr benoetigt sub SIGNALduino_Ready($); sub SIGNALduino_Write($$$); - sub SIGNALduino_SimpleWrite(@); #my $debug=0; my %gets = ( # Name, Data to send to the SIGNALduino, Regexp for the answer - "version" => ["V", '^V\s.*SIGNALduino.*'], + "version" => ["V", 'V\s.*SIGNAL(duino|ESP).*'], "freeram" => ["R", '^[0-9]+'], "raw" => ["", '.*'], "uptime" => ["t", '^[0-9]+' ], "cmds" => ["?", '.*Use one of[ 0-9A-Za-z]+[\r\n]*$' ], "ITParms" => ["ip",'.*'], - "ping" => ["P",'OK\r\n'], - "config" => ["CG",'^MS.*MU.*MC.*\r\n'], + "ping" => ["P",'^OK$'], + "config" => ["CG",'^MS.*MU.*MC.*'], # "ITClock" => ["ic", '\d+'], # "FAParms" => ["fp", '.*' ], # "TCParms" => ["dp", '.*' ], @@ -56,6 +66,7 @@ my %sets = ( "raw" => '', "flash" => '', "reset" => 'noArg', + "close" => 'noArg', #"disablereceiver" => "", "ITClock" => 'slider,100,20,700', "enableMessagetype" => 'syncedMS,unsyncedMU,manchesterMC', @@ -73,10 +84,15 @@ my $clientsSIGNALduino = ":IT:" ."Hideki:" ."SD_WS07:" ."SD_WS09:" -# ."SD_WS:" + ."SD_WS:" ."RFXX10REC:" - ."SIGNALduino_un:" - ; + ."Dooya:" + ."SOMFY:" +# ."SD_UT:" ## BELL 201.2 TXA + ."SD_WS_Maverick:" +# ."BresserTemeo:" + ."SIGNALduino_un:" + ; ## default regex match List for dispatching message to logical modules, can be updated during runtime because it is referenced my %matchListSIGNALduino = ( @@ -89,8 +105,13 @@ my %matchListSIGNALduino = ( "7:Hideki" => "^P12#75[A-F0-9]+", "10:SD_WS07" => "^P7#[A-Fa-f0-9]{6}F[A-Fa-f0-9]{2}", "11:SD_WS09" => "^P9#[A-Fa-f0-9]+", -# "12:SD_WS" => '^W\d+#.*', + "12:SD_WS" => '^W\d+#.*', "13:RFXX10REC" => '^(20|29)[A-Fa-f0-9]+', + "14:Dooya" => '^P16#[A-Fa-f0-9]+', + "15:SOMFY" => '^YsA[0-9A-F]+', + "16:SD_WS_Maverick" => '^P47#[A-Fa-f0-9]+', +# "17:SD_UT" => '^u30#.*', ## BELL 201.2 TXA +# "44:BresserTemeo" => '^P44x{0,1}#[A-F0-9]{18}', # Bresser Temeo Trend (3CH Thermo-/Hygro) "X:SIGNALduino_un" => '^[uP]\d+#.*', ); @@ -125,10 +146,13 @@ my %ProtocolListSIGNALduino = ( preamble => 'r', # prepend to converted message postamble => '', # Append to converted message clientmodule => 'SIGNALduino_RSL', # not used now - #modulematch => '^r[A-Fa-f0-9]+', # not used now - length_min => '12', + modulematch => '^r[A-Fa-f0-9]+', # not used now + length_min => '23', + length_max => '24', + }, + "2" => { name => 'AS', # Self build arduino sensor @@ -263,7 +287,7 @@ my %ProtocolListSIGNALduino = ( }, "10" => ## Oregon Scientific 2 - { + { name => 'OSV2o3', id => '10', clockrange => [300,520], # min , max @@ -271,12 +295,11 @@ my %ProtocolListSIGNALduino = ( modulematch => '^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*', length_min => '64', length_max => '220', - method => \&SIGNALduino_OSV2 # Call to process this message - - + method => \&SIGNALduino_OSV2, # Call to process this message + polarity => 'invert', }, "11" => ## Arduino Sensor - { + { name => 'AS', id => '11', clockrange => [380,425], # min , max @@ -287,10 +310,9 @@ my %ProtocolListSIGNALduino = ( length_min => '52', length_max => '56', method => \&SIGNALduino_AS # Call to process this message - }, "12" => ## hideki - { + { name => 'Hideki protocol', id => '12', clockrange => [420,510], # min, max better for Bresser Sensors, OK for hideki/Hideki/TFA too @@ -300,10 +322,12 @@ my %ProtocolListSIGNALduino = ( modulematch => '^P12#75.+', # not used now length_min => '72', length_max => '104', - method => \&SIGNALduino_Hideki # Call to process this message - }, + method => \&SIGNALduino_Hideki, # Call to process this message + polarity => 'invert', + + }, "13" => ## FA21RF - { + { name => '21RF', id => '13', one => [1,-2], @@ -354,14 +378,14 @@ my %ProtocolListSIGNALduino = ( name => 'Dooya shutter', id => '16', one => [2,-1], - zero => [1,-2], - start => [16,-5], - clockabs => 300, + zero => [1,-3], + start => [17,-5], + clockabs => 280, format => 'twostate', - preamble => 'u16#', # prepend to converted message + preamble => 'P16#', # prepend to converted message #clientmodule => '', # not used now #modulematch => '', # not used now - length_min => '40', + length_min => '39', length_max => '40', }, "17" => @@ -373,6 +397,7 @@ my %ProtocolListSIGNALduino = ( #one => [1,-5], #zero => [1,-1], sync => [1,-10], + float => [1,-1,1,-1], clockabs => -1, # -1 = auto format => 'twostate', # tristate can't be migrated from bin into hex! preamble => 'i', # Append to converted message @@ -583,8 +608,8 @@ my %ProtocolListSIGNALduino = ( clockabs => 300, # ca 300 us format => 'twostate', # there is a pause puls between words preamble => 'u30#', # prepend to converted message - #clientmodule => '', # not used now - #modulematch => '', # not used now + clientmodule => 'SD_UT', # not used now + modulematch => '^u30', # not used now length_min => '12', length_max => '12', # message has only 10 bit but is paddet to 12 }, @@ -626,12 +651,12 @@ my %ProtocolListSIGNALduino = ( one => [1,-8], zero => [1,-4], sync => [1,-15], - clockabs => '500', # not used now - format => 'twostate', # not used now - preamble => 'u33#', # prepend to converted message - postamble => '', # Append to converted message - clientmodule => '', # not used now - #modulematch => '', # not used now + clockabs => '500', # not used now + format => 'twostate', # not used now + preamble => 'W33#', # prepend to converted message + postamble => '', # Append to converted message + clientmodule => '', # not used now + #modulematch => '', # not used now length_min => '42', length_max => '44', }, @@ -736,6 +761,175 @@ my %ProtocolListSIGNALduino = ( }, + "40" => ## Romotec + { + name => 'romotec', + id => '40', + one => [3,-2], + zero => [1,-3], + start => [1,-2], + clockabs => 250, + preamble => 'u40#', # prepend to converted message + clientmodule => '', # not used now + #modulematch => '', # not used now + length_min => '10', + }, + "41" => ## Elro (Smartwares) Doorbell DB200 + { + name => 'elro doorbell', + id => '41', + zero => [1,-3], + one => [3,-1], + sync => [1,-15], + clockabs => 450, + preamble => 'u41#', # prepend to converted message + clientmodule => '', # not used now + #modulematch => '', # not used now + length_min => '20', + }, + "42" => ## MKT Multi Kon Trade + { + name => 'MKT motionsensor', + id => '42', + zero => [1,-3], + one => [3,-1], + start => [-28], + clockabs => 550, + preamble => 'u42#', # prepend to converted message + clientmodule => '', # not used now + #modulematch => '', + length_min => '24', + }, + "43" => ## Somfy RTS + { + name => 'Somfy RTS', + id => '43', + clockrange => [610,670], # min , max + format => 'manchester', + preamble => 'Ys', + #clientmodule => '', # not used now + modulematch => '^YsA[0-9A-F]{13}', + length_min => '56', + length_max => '56', + method => \&SIGNALduino_SomfyRTS, # Call to process this message + msgIntro => 'SR;P0=-2560;P1=2560;P3=-640;D=10101010101010113;', + #msgOutro => 'SR;P0=-30415;D=0;', + }, + "44" => ## Bresser Temeo Trend + { + name => 'BresserTemeo', + id => '44', + clockabs => 500, + zero => [4,-4], + one => [4,-8], + start => [8,-8], + preamble => 'P44#', + clientmodule => 'BresserTemeo', + length_min => '64', + length_max => '72', + }, + "51" => ## Bresser Temeo Trend + { + name => 'BresserTemeo', + id => '44x', + clockabs => 500, + zero => [4,-4], + one => [4,-8], + start => [8,-12], + preamble => 'P44x#', + clientmodule => 'BresserTemeo', + length_min => '64', + length_max => '72', + }, + + "45" => + { + name => 'revolt', + id => '45', + one => [3,-1], + zero => [1,-3], + #float => [-1,3], # not full supported now later use + sync => [1,-24], + clockabs => -1, # -1=auto + format => 'twostate', # not used now + preamble => 'i', + clientmodule => 'IT', # not used now + modulematch => '^i......', # not used now + length_min => '24', + }, + "46" => + { + name => 'EKX1BE', + id => '46', + one => [1,-8], + zero => [8,-1], + clockabs => 250, # -1=auto + format => 'twostate', # not used now + preamble => 'u46#', + clientmodule => '', # not used now + #modulematch => '', # not used now + length_min => '16', + length_max => '18', + + }, + "47" => ## maverick + { + name => 'Maverick protocol', + id => '47', + clockrange => [220,260], + format => 'manchester', + preamble => 'P47#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^P47#.*', # not used now + length_min => '100', + length_max => '108', + method => \&SIGNALduino_Maverick # Call to process this message + }, + "48" => ## Joker Dostmann TFA + { + name => 'TFA Dostmann', + id => '48', + clockabs => 250, # In real it is 500 but this leads to unprceise demodulation + one => [-4,6], + zero => [-4,2], + start => [-6,2], + format => 'twostate', + preamble => 'U48#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^U48#.*', # not used now + length_min => '47', + length_max => '48', + }, + "49" => ## quigg / Aldi gt_9000 + { + name => 'quigg_gt9000', + id => '49', + clockabs => 400, + one => [2,-1], + zero => [1,-3], + start => [-15,2,-1], + format => 'twostate', + preamble => 'U49#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^U49#.*', # not used now + length_min => '22', + length_max => '28', + }, + "50" => ## Opus XT300 + { + name => 'optus_XT300', + id => '50', + clockabs => 500, + zero => [3,-2], + one => [1,-2], + # start => [1,-25], # Wenn das startsignal empfangen wird, fehlt das 1 bit + format => 'twostate', + preamble => 'W50#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^W50#.*', # not used now + length_min => '47', + length_max => '48', + }, ); @@ -768,10 +962,12 @@ SIGNALduino_Initialize($) ." flashCommand" ." hardware:nano328,uno,promini328" ." debug:0,1" - ." longids:0,1" + ." longids" ." minsecs" ." whitelist_IDs" - ." $readingFnAttributes"; + ." WS09_WSModel:undef,WH1080,CTW600" + ." WS09_CRCAUS:0,1" + ." $readingFnAttributes"; $hash->{ShutdownFn} = "SIGNALduino_Shutdown"; @@ -828,7 +1024,7 @@ SIGNALduino_Define($$) $dev .= "\@57600"; } - $hash->{CMDS} = ""; + #$hash->{CMDS} = ""; $hash->{Clients} = $clientsSIGNALduino; $hash->{MatchList} = \%matchListSIGNALduino; @@ -850,28 +1046,34 @@ SIGNALduino_Define($$) SIGNALduino_IdList($hash ,$name, $whitelistIDs); if($dev ne "none") { - $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit"); - - - if ($hash->{INACTIVE}==1){ - DevIo_CloseDev($hash); - return $ret ; - } - - $hash->{Interval} = "300"; - InternalTimer(gettimeofday()+$hash->{Interval}, "SIGNALduino_GetUpdate", $hash, 0); + $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit", 'SIGNALduino_Connect'); + } else { + $hash->{DevState} = 'initialized'; + readingsSingleUpdate($hash, "state", "opened", 1); } - $hash->{"DMSG"}="nothing"; - $hash->{"TIME"}=time(); + $hash->{DMSG}="nothing"; + $hash->{TIME}=time(); - Log3 $name, 3, "$name: Firmwareversion: ".$hash->{READINGS}{Version}{VAL} if ($hash->{READINGS}{Version}{VAL}); + Log3 $name, 3, "$name: Firmwareversion: ".$hash->{READINGS}{version}{VAL} if ($hash->{READINGS}{version}{VAL}); return $ret; } +############################### +sub SIGNALduino_Connect($$) +{ + my ($hash, $err) = @_; + + # damit wird die err-msg nur einmal ausgegeben + if (!defined($hash->{disConnFlag}) && $err) { + Log3($hash, 3, "SIGNALduino $hash->{NAME}: ${err}"); + $hash->{disConnFlag} = 1; + } +} + ##################################### sub SIGNALduino_Undef($$) @@ -902,7 +1104,7 @@ sub SIGNALduino_Shutdown($) { my ($hash) = @_; - SIGNALduino_SimpleWrite($hash, "X00"); # Switch reception off, it may hang up the SIGNALduino + SIGNALduino_SimpleWrite($hash, "XQ"); # Switch reception off, it may hang up the SIGNALduino return undef; } @@ -914,7 +1116,6 @@ SIGNALduino_Set($@) { my ($hash, @a) = @_; - return "\"set SIGNALduino\" needs at least one parameter" if(@a < 2); if (!defined($sets{$a[1]})) { my $arguments = ' '; @@ -924,15 +1125,17 @@ SIGNALduino_Set($@) #Log3 $hash, 3, "set arg = $arguments"; return "Unknown argument $a[1], choose one of " . $arguments; } - my $name = shift @a; + my $name = shift @a; my $cmd = shift @a; my $arg = join(" ", @a); + return "$name is not active, may firmware is not suppoted, please flash or reset" if ($cmd ne 'reset' && $cmd ne 'flash' && exists($hash->{DevState}) && $hash->{DevState} ne 'initialized'); if($cmd eq "raw") { Log3 $name, 4, "set $name $cmd $arg"; - SIGNALduino_SimpleWrite($hash, $arg); + #SIGNALduino_SimpleWrite($hash, $arg); + SIGNALduino_AddSendQueue($hash,$arg); } elsif( $cmd eq "flash" ) { my @args = split(' ', $arg); my $log = ""; @@ -998,13 +1201,17 @@ SIGNALduino_Set($@) $log .= "\n\nNo flashCommand found. Please define this attribute.\n\n"; } - DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit"); + DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit", 'SIGNALduino_Connect'); $log .= "$name opened\n"; return $log; } elsif ($cmd =~ m/reset/i) { - return SIGNALduino_ResetDevice($hash); + delete($hash->{initResetFlag}) if defined($hash->{initResetFlag}); + return SIGNALduino_ResetDevice($hash); + } elsif( $cmd eq "close" ) { + $hash->{DevState} = 'closed'; + return SIGNALduino_CloseDevice($hash); } elsif( $cmd eq "ITClock" ) { Log3 $name, 4, "set $name $cmd $arg"; my $clock = shift @a; @@ -1013,27 +1220,28 @@ SIGNALduino_Set($@) return "argument $arg is not numeric" if($clock !~ /^\d+$/); Log3 $name, 3, "$name: Setting ITClock to $clock (sending $arg)"; $arg="ic$clock"; - SIGNALduino_SimpleWrite($hash, $arg); - SIGNALduino_ReadAnswer($hash, "ITClock", 0, $arg); ## Receive the transmitted message + #SIGNALduino_SimpleWrite($hash, $arg); + SIGNALduino_AddSendQueue($hash,$arg); $hash->{$cmd}=$clock; } elsif( $cmd eq "disableMessagetype" ) { my $argm = 'CD' . substr($arg,-1,1); - SIGNALduino_SimpleWrite($hash, $argm); + #SIGNALduino_SimpleWrite($hash, $argm); + SIGNALduino_AddSendQueue($hash,$argm); Log3 $name, 4, "set $name $cmd $arg $argm";; } elsif( $cmd eq "enableMessagetype" ) { my $argm = 'CE' . substr($arg,-1,1); - SIGNALduino_SimpleWrite($hash, $argm); + #SIGNALduino_SimpleWrite($hash, $argm); + SIGNALduino_AddSendQueue($hash,$argm); Log3 $name, 4, "set $name $cmd $arg $argm"; } elsif( $cmd eq "sendMsg" ) { - my ($protocol,$data,$repeats) = split("#",$arg); + my ($protocol,$data,$repeats,$clock) = split("#",$arg); $protocol=~ s/[Pp](\d+)/$1/; # extract protocol num $repeats=~ s/[rR](\d+)/$1/; # extract repeat num - $repeats=1 if ($repeats eq ""); + $clock=~ s/[Cc](\d+)/$1/ if (defined($clock)); # extract ITClock num + $repeats=1 if (!defined($repeats)); return "$name: sendmsg, unknown protocol: $protocol" if (!exists($ProtocolListSIGNALduino{$protocol})); - Log3 $name, 5, "$name: sendmsg Preparing rawsend command for protocol=$protocol, repeats=$repeats, bits=$data"; - #print ("data = $data \n"); #print ("protocol = $protocol \n"); #print ("repeats = $repeats \n"); @@ -1042,51 +1250,90 @@ SIGNALduino_Set($@) my %patternHash; my $pattern=""; my $cnt=0; - my $clock=$ProtocolListSIGNALduino{$protocol}{clockabs} > 1 ?$ProtocolListSIGNALduino{$protocol}{clockabs}:$hash->{ITClock}; - foreach my $item (qw(sync start one zero)) + + + + my $sendData; + if ($ProtocolListSIGNALduino{$protocol}{format} eq 'manchester') { - #print ("item= $item \n"); - next if (!exists($ProtocolListSIGNALduino{$protocol}{$item})); - - foreach my $p (@{$ProtocolListSIGNALduino{$protocol}{$item}}) - { - #print (" p = $p \n"); - - if (!exists($patternHash{$p})) - { - $patternHash{$p}=$cnt; - $pattern.="P".$patternHash{$p}."=".$p*$clock.";"; - $cnt++; - } - $signalHash{$item}.=$patternHash{$p}; - #print (" signalHash{$item} = $signalHash{$item} \n"); + #$clock = (map { $clock += $_ } @{$ProtocolListSIGNALduino{$protocol}{clockrange}}) / 2 if (!defined($clock)); + + $clock += $_ for(@{$ProtocolListSIGNALduino{$protocol}{clockrange}}); + $clock = round($clock/2,0); + if ($protocol == 43) { + #$data =~ tr/0123456789ABCDEF/FEDCBA9876543210/; } + + my $intro = ""; + my $outro = ""; + + $intro = $ProtocolListSIGNALduino{$protocol}{msgIntro} if ($ProtocolListSIGNALduino{$protocol}{msgIntro}); + $outro = $ProtocolListSIGNALduino{$protocol}{msgOutro}.";" if ($ProtocolListSIGNALduino{$protocol}{msgOutro}); + + if ($intro ne "" || $outro ne "") + { + $intro = "SC;R=$repeats;" . $intro; + $repeats = 0; + } + + $sendData = $intro . "SM;" . ($repeats > 0 ? "R=$repeats;" : "") . "C=$clock;D=$data;" . $outro; # SM;R=2;C=400;D=AFAFAF; + Log3 $name, 5, "$name: sendmsg Preparing manchester protocol=$protocol, repeats=$repeats, clock=$clock data=$data"; + } else { + if ($protocol == 3) { + $data = SIGNALduino_ITV1_tristateToBit($data); + Log3 $name, 5, "$name: sendmsg IT V1 convertet tristate to bits=$data"; + } + if (!defined($clock)) { + $hash->{ITClock} = 250 if (!defined($hash->{ITClock})); # Todo: Klaeren wo ITClock verwendet wird und ob wir diesen Teil nicht auf Protokoll 3,4 und 17 minimieren + $clock=$ProtocolListSIGNALduino{$protocol}{clockabs} > 1 ?$ProtocolListSIGNALduino{$protocol}{clockabs}:$hash->{ITClock}; + } + + Log3 $name, 5, "$name: sendmsg Preparing rawsend command for protocol=$protocol, repeats=$repeats, clock=$clock bits=$data"; + + foreach my $item (qw(sync start one zero float)) + { + #print ("item= $item \n"); + next if (!exists($ProtocolListSIGNALduino{$protocol}{$item})); + + foreach my $p (@{$ProtocolListSIGNALduino{$protocol}{$item}}) + { + #print (" p = $p \n"); + + if (!exists($patternHash{$p})) + { + $patternHash{$p}=$cnt; + $pattern.="P".$patternHash{$p}."=".$p*$clock.";"; + $cnt++; + } + $signalHash{$item}.=$patternHash{$p}; + #print (" signalHash{$item} = $signalHash{$item} \n"); + } + } + my @bits = split("", $data); + + my %bitconv = (1=>"one", 0=>"zero", 'D'=> "float"); + my $SignalData="D="; + + $SignalData.=$signalHash{sync} if (exists($signalHash{sync})); + $SignalData.=$signalHash{start} if (exists($signalHash{start})); + foreach my $bit (@bits) + { + next if (!exists($bitconv{$bit})); + #Log3 $name, 5, "encoding $bit"; + $SignalData.=$signalHash{$bitconv{$bit}}; ## Add the signal to our data string + } + $sendData = "SR;R=$repeats;$pattern$SignalData;"; } + - my @bits = split("", $data); - - my %bitconv = (1=>"one", 0=>"zero"); - my $SignalData="D="; - - $SignalData.=$signalHash{sync} if (exists($signalHash{sync})); - $SignalData.=$signalHash{start} if (exists($signalHash{start})); - - - foreach my $bit (@bits) - { - next if (!exists($bitconv{$bit})); - #Log3 $name, 5, "encoding $bit"; - $SignalData.=$signalHash{$bitconv{$bit}}; ## Add the signal to our data string - } - - my $sendData = "SR;R=$repeats;$pattern$SignalData;"; - SIGNALduino_SimpleWrite($hash, $sendData); - Log3 $name, 4, "$name: sending via SendMsg: $sendData"; + #SIGNALduino_SimpleWrite($hash, $sendData); + SIGNALduino_AddSendQueue($hash,$sendData); + Log3 $name, 4, "$name/set: sending via SendMsg: $sendData"; } else { - Log3 $name, 5, "set $name $cmd $arg"; + Log3 $name, 5, "$name/set: set $name $cmd $arg"; #SIGNALduino_SimpleWrite($hash, $arg); - return "Unknown argument $cmd, choose one of ".$hash->{CMDS}; + return "Unknown argument $cmd, choose one of ". ReadingsVal($name,'cmd',' help me'); } return undef; @@ -1099,7 +1346,7 @@ SIGNALduino_Get($@) my ($hash, @a) = @_; my $type = $hash->{TYPE}; my $name = $hash->{NAME}; - return "$name is not active, may firmware is not suppoted, please flash" if (exists($hash->{INACTIVE}) && $hash->{INACTIVE}==1); + return "$name is not active, may firmware is not suppoted, please flash or reset" if (exists($hash->{DevState}) && $hash->{DevState} ne 'initialized'); #my $name = $a[0]; Log3 $name, 5, "\"get $type\" needs at least one parameter" if(@a < 2); @@ -1116,6 +1363,18 @@ SIGNALduino_Get($@) if (IsDummy($name)) { + if (($arg !~ m/;/) && ($arg !~ m/=/)) { + if ($arg =~ m/^V\d\.\d\..*/) { + Log3 $name, 4, "$name/msg get version: $arg"; + $hash->{version} = "V " . substr($arg,1); + return ""; + } + else { + Log3 $name, 4, "$name/msg get dispatch: $arg"; + Dispatch($hash, $arg, undef); + return ""; + } + } if ($arg =~ /^M[CSU];.*/) { $arg="\002$arg\003"; ## Add start end end marker if not already there @@ -1144,60 +1403,71 @@ SIGNALduino_Get($@) return "$a[0] $a[1] => $arg"; } - } - SIGNALduino_SimpleWrite($hash, $gets{$a[1]}[0] . $arg); - - ($err, $msg) = SIGNALduino_ReadAnswer($hash, $a[1], 0, $gets{$a[1]}[1]); - Log3 $name, 5, "$name: received message for gets: " . $msg if ($msg); + } - if(!defined($msg)) { - DevIo_Disconnected($hash); - $msg = "No answer"; - - } elsif($a[1] eq "cmds") { # nice it up - $msg =~ s/.*Use one of//g; - - } elsif($a[1] eq "uptime") { # decode it - $msg =~ s/[\r\n]//g; - #$msg = hex($msg); # /125; only for col or coc - $msg = sprintf("%d %02d:%02d:%02d", $msg/86400, ($msg%86400)/3600, ($msg%3600)/60, $msg%60); - } - - $msg =~ s/[\r\n]//g; - - #$hash->{READINGS}{$a[1]}{VAL} = $msg; - #$hash->{READINGS}{$a[1]}{TIME} = time(); - readingsSingleUpdate($hash, $a[1], $msg, 0); - return "$a[0] $a[1] => $msg"; - + #SIGNALduino_SimpleWrite($hash, $gets{$a[1]}[0] . $arg); + SIGNALduino_AddSendQueue($hash, $gets{$a[1]}[0] . $arg); + $hash->{getcmd}->{cmd}=$a[1]; + $hash->{getcmd}->{asyncOut}=$hash->{CL}; + $hash->{getcmd}->{timenow}=time(); + + return undef; # We will exit here, and give an output only, if asny output is supported. If this is not supported, only the readings are updated } -sub -SIGNALduino_Clear($) +sub SIGNALduino_parseResponse($$$) { - my $hash = shift; + my $hash = shift; + my $cmd = shift; + my $msg = shift; - # Clear the pipe - $hash->{RA_Timeout} = 0.1; - for(;;) { - my ($err, undef) = SIGNALduino_ReadAnswer($hash, "Clear", 0, undef); - last if($err && $err =~ m/^Timeout/); - } - delete($hash->{RA_Timeout}); + my $name=$hash->{NAME}; + + $msg =~ s/[\r\n]//g; + + if($cmd eq "cmds") + { # nice it up + $msg =~ s/$name cmds =>//g; + $msg =~ s/.*Use one of//g; + } + elsif($cmd eq "uptime") + { # decode it + #$msg = hex($msg); # /125; only for col or coc + $msg = sprintf("%d %02d:%02d:%02d", $msg/86400, ($msg%86400)/3600, ($msg%3600)/60, $msg%60); + } + + return $msg; } + ##################################### sub SIGNALduino_ResetDevice($) { my ($hash) = @_; + my $name = $hash->{NAME}; + Log3 $hash, 3, "$name reset"; DevIo_CloseDev($hash); - my $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit"); + my $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit", 'SIGNALduino_Connect'); return $ret; } +##################################### +sub +SIGNALduino_CloseDevice($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + + Log3 $hash, 2, "$name closed"; + RemoveInternalTimer($hash); + DevIo_CloseDev($hash); + readingsSingleUpdate($hash, "state", "closed", 1); + + return undef; +} + ##################################### sub SIGNALduino_DoInit($) @@ -1209,170 +1479,130 @@ SIGNALduino_DoInit($) my ($ver, $try) = ("", 0); #Dirty hack to allow initialisation of DirectIO Device for some debugging and tesing - Log3 $hash, 1, "define: ".$hash->{DEF}; - undef($hash->{INACTIVE}) if exists($hash->{INACTIVE}); + Log3 $hash, 1, "$name/define: ".$hash->{DEF}; + + delete($hash->{disConnFlag}) if defined($hash->{disConnFlag}); - + RemoveInternalTimer("HandleWriteQueue:$name"); + @{$hash->{QUEUE}} = (); if (($hash->{DEF} !~ m/\@DirectIO/) and ($hash->{DEF} !~ m/none/) ) { - Log3 $hash, 1, "init: ".$hash->{DEF}; + Log3 $hash, 1, "$name/init: ".$hash->{DEF}; + $hash->{initretry} = 0; + RemoveInternalTimer($hash); - SIGNALduino_Clear($hash); - - - # Try to get version from Arduino - while ($try++ < 3 && $ver !~ m/^V/) { - SIGNALduino_SimpleWrite($hash, "V"); - ($err, $ver) = SIGNALduino_ReadAnswer($hash, "Version", 0, undef); - return "$name: $err" if($err && ($err !~ m/Timeout/ || $try == 3)); - $ver = "" if(!$ver); - } - # Check received string - if($ver !~ m/SIGNALduino/) { - #$attr{$name}{dummy} = 1; ## Todo: Do not alter attribues, they belong to the user - $msg = "$name: Not an SIGNALduino device, setting attribute dummy=1 got for V: $ver"; - Log3 $hash, 1, $msg; - readingsSingleUpdate($hash, "state", "no SIGNALduino found", 1); - $hash->{INACTIVE}=1; - return $msg; - } - elsif($ver =~ m/3.1./) { - #$attr{$name}{dummy} = 1; - $msg = "$name: Version of your arduino is not compatible, pleas flash new firmware. (setting device to inactive) Got for V: $ver"; - readingsSingleUpdate($hash, "state", "unsupported firmware found", 1); - Log3 $hash, 1, $msg; - $hash->{INACTIVE}=1; - return $msg; - } - readingsSingleUpdate($hash, "Version", $ver, 0); - - #$hash->{VERSION} = $ver; - - $ver =~ s/[\r\n]//g; - - #$debug = AttrVal($name, "verbose", 3) == 5; - #Log3 $name, 3, "$name: setting debug to: " . $debug; - - - # Cmd-String feststellen - - my $cmds = SIGNALduino_Get($hash, $name, "cmds", 0); - $cmds =~ s/$name cmds =>//g; - $cmds =~ s/ //g; - $hash->{CMDS} = $cmds; - Log3 $hash, 3, "$name: Possible commands: " . $hash->{CMDS}; - readingsSingleUpdate($hash, "state", "Programming", 1); + #SIGNALduino_SimpleWrite($hash, "XQ"); # Disable receiver + InternalTimer(gettimeofday() + SDUINO_INIT_WAIT_XQ, "SIGNALduino_SimpleWrite_XQ", $hash, 0); + InternalTimer(gettimeofday() + SDUINO_INIT_WAIT, "SIGNALduino_StartInit", $hash, 0); } - # if( my $initCommandsString = AttrVal($name, "initCommands", undef) ) { - # my @initCommands = split(' ', $initCommandsString); - # foreach my $command (@initCommands) { - # SIGNALduino_SimpleWrite($hash, $command); - # } - # } - # $hash->{STATE} = "Initialized"; - readingsSingleUpdate($hash, "state", "Initialized", 1); - # Reset the counter delete($hash->{XMIT_TIME}); delete($hash->{NR_CMD_LAST_H}); - return undef; + return; + #return undef; } -##################################### -# This is a direct read for commands like get -# Anydata is used by read file to get the filesize -sub -SIGNALduino_ReadAnswer($$$$) +# Disable receiver +sub SIGNALduino_SimpleWrite_XQ($) { + my ($hash) = @_; + my $name = $hash->{NAME}; + + Log3 $hash, 3, "$name/init: disable receiver (XQ)"; + SIGNALduino_SimpleWrite($hash, "XQ"); +} + + +sub SIGNALduino_StartInit($) { - my ($hash, $arg, $anydata, $regexp) = @_; - my $type = $hash->{TYPE}; - my $name = $hash->{NAME}; - - while($hash->{TYPE} eq "SIGNALduino_RFR") { # Look for the first "real" SIGNALduino - $hash = $hash->{IODev}; - } - - return ("No FD", undef) - if(!$hash || ($^O !~ /Win/ && !defined($hash->{FD}))); - - my ($mSIGNALduinodata, $rin) = ("", ''); - my $buf; - my $idx; - my $cut = 0; - my $to = 3; # 3 seconds timeout - $to = $hash->{RA_Timeout} if($hash->{RA_Timeout}); # ...or less - for(;;) { - - if($^O =~ m/Win/ && $hash->{USBDev}) { - $hash->{USBDev}->read_const_time($to*1000); # set timeout (ms) - # Read anstatt input sonst funzt read_const_time nicht. - $buf = $hash->{USBDev}->read(999); - return ("Timeout reading answer for get $arg", undef) - if(length($buf) == 0); - - } else { - return ("Device lost when reading answer for get $arg", undef) - if(!$hash->{FD}); - - vec($rin, $hash->{FD}, 1) = 1; - my $nfound = select($rin, undef, undef, $to); - if($nfound < 0) { - next if ($! == EAGAIN() || $! == EINTR() || $! == 0); - my $err = $!; - DevIo_Disconnected($hash); - return("SIGNALduino_ReadAnswer $arg: $err", undef); - } - return ("Timeout reading answer for get $arg", undef) - if($nfound == 0); - $buf = DevIo_SimpleRead($hash); - return ("No data", undef) if(!defined($buf)); - - } - - if($buf) { - Log3 $hash->{NAME}, 5, "$name/RAW (ReadAnswer): $buf"; - $mSIGNALduinodata .= $buf; - } - $mSIGNALduinodata = SIGNALduino_RFR_DelPrefix($mSIGNALduinodata) if($type eq "SIGNALduino_RFR"); - - $idx = index($mSIGNALduinodata,"\003\n"); - if($idx != -1) { - $cut = 1; - if($mSIGNALduinodata =~ m/\002.*\003\n/) { # vollstaendige Signal Nachricht - Log3 $name, 4, "$name/RAW (ReadAnswerCut002003): $mSIGNALduinodata"; - #if(defined($regexp)) { # kein parse wenn von doInit aufgerufen - SIGNALduino_Parse($hash, $hash, $name, $mSIGNALduinodata); - #} - $mSIGNALduinodata =~ s/\002.*\003\n//; - } else { # Signal Nachricht ohne Anfang - Log3 $name, 4, "$name/RAW (ReadAnswerCut003 $idx): $mSIGNALduinodata"; - $mSIGNALduinodata = substr($mSIGNALduinodata, $idx+2); - } - Log3 $name, 4, "$name/RAW (ReadAnswerCutDone " . length($mSIGNALduinodata) . "): $mSIGNALduinodata"; - } - - # \n\n is socat special - if($mSIGNALduinodata =~ m/\r\n$/ || $anydata || $mSIGNALduinodata =~ m/\n\n$/ ) { - if(!defined($regexp) || $mSIGNALduinodata =~ m/$regexp/) { - if ($cut == 1) { - Log3 $name, 4, "$name/RAW (ReadAnswerCut): $mSIGNALduinodata"; - } - return (undef, $mSIGNALduinodata) - } - } - } - + my ($hash) = @_; + my $name = $hash->{NAME}; + $hash->{version} = undef; + + Log3 $name,3 , "$name/init: get version, retry = " . $hash->{initretry}; + if ($hash->{initretry} >= SDUINO_INIT_MAXRETRY) { + $hash->{DevState} = 'INACTIVE'; + # einmaliger reset, wenn danach immer noch 'init retry count reached', dann SIGNALduino_CloseDevice() + if (!defined($hash->{initResetFlag})) { + Log3 $name,2 , "$name/init retry count reached. Reset"; + $hash->{initResetFlag} = 1; + SIGNALduino_ResetDevice($hash); + } else { + Log3 $name,2 , "$name/init retry count reached. Closed"; + SIGNALduino_CloseDevice($hash); + } + return; + } + else { + $hash->{getcmd}->{cmd} = "version"; + SIGNALduino_SimpleWrite($hash, "V"); + $hash->{DevState} = 'waitInit'; + RemoveInternalTimer($hash); + InternalTimer(gettimeofday() + SDUINO_CMD_TIMEOUT, "SIGNALduino_CheckCmdResp", $hash, 0); + } } + +#################### +sub SIGNALduino_CheckCmdResp($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + my $msg = undef; + my $ver; + + if ($hash->{version}) { + $ver = $hash->{version}; + if ($ver !~ m/SIGNAL(duino|ESP)/) { + $msg = "$name: Not an SIGNALduino device, setting attribute dummy=1 got for V: $ver"; + Log3 $hash, 1, $msg; + readingsSingleUpdate($hash, "state", "no SIGNALduino found", 1); + $hash->{DevState} = 'INACTIVE'; + SIGNALduino_CloseDevice($hash); + } + elsif($ver =~ m/^V 3\.1\./) { + $msg = "$name: Version of your arduino is not compatible, pleas flash new firmware. (device closed) Got for V: $ver"; + readingsSingleUpdate($hash, "state", "unsupported firmware found", 1); + Log3 $hash, 1, $msg; + $hash->{DevState} = 'INACTIVE'; + SIGNALduino_CloseDevice($hash); + } + else { + readingsSingleUpdate($hash, "state", "opened", 1); + Log3 $name, 2, "$name: initialized"; + $hash->{DevState} = 'initialized'; + delete($hash->{initResetFlag}) if defined($hash->{initResetFlag}); + SIGNALduino_SimpleWrite($hash, "XE"); # Enable receiver + Log3 $hash, 3, "$name/init: enable receiver (XE)"; + delete($hash->{initretry}); + # initialize keepalive + $hash->{keepalive}{ok} = 0; + $hash->{keepalive}{retry} = 0; + InternalTimer(gettimeofday() + SDUINO_KEEPALIVE_TIMEOUT, "SIGNALduino_KeepAlive", $hash, 0); + } + } + else { + delete($hash->{getcmd}); + $hash->{initretry} ++; + #InternalTimer(gettimeofday()+1, "SIGNALduino_StartInit", $hash, 0); + SIGNALduino_StartInit($hash); + } +} + + ##################################### # Check if the 1% limit is reached and trigger notifies sub SIGNALduino_XmitLimitCheck($$) { my ($hash,$fn) = @_; + + + return if ($fn !~ m/^(is|SR).*/); + my $now = time(); + if(!$hash->{XMIT_TIME}) { $hash->{XMIT_TIME}[0] = $now; $hash->{NR_CMD_LAST_H} = 1; @@ -1397,60 +1627,83 @@ SIGNALduino_XmitLimitCheck($$) $hash->{NR_CMD_LAST_H} = int(@b); } - ##################################### +## API to logical modules: Provide as Hash of IO Device, type of function ; command to call ; message to send sub SIGNALduino_Write($$$) { my ($hash,$fn,$msg) = @_; - my $name = $hash->{NAME}; - Log3 $name, 5, "$name: sending $fn$msg"; - my $bstring = "$fn$msg"; + $fn="RAW" if $fn eq ""; - SIGNALduino_SimpleWrite($hash, $bstring); + Log3 $name, 5, "$name/write: adding to queue $fn $msg"; + #SIGNALduino_SimpleWrite($hash, $bstring); + + SIGNALduino_Set($hash,$name,$fn,$msg); + #SIGNALduino_AddSendQueue($hash,$bstring); + } -#sub -#SIGNALduino_SendFromQueue($$) -#{ -# my ($hash, $bstring) = @_; -# my $name = $hash->{NAME}; -# -# if($bstring ne "") { -# SIGNALduino_XmitLimitCheck($hash,$bstring); -# SIGNALduino_SimpleWrite($hash, $bstring); -# } + +sub SIGNALduino_AddSendQueue($$) +{ + my ($hash, $msg) = @_; + my $name = $hash->{NAME}; + + #Log3 $hash, 3,"AddSendQueue: " . $hash->{NAME} . ": $msg"; + + push(@{$hash->{QUEUE}}, $msg); + + #Log3 $hash , 5, Dumper($hash->{QUEUE}); + + InternalTimer(gettimeofday() + 0.1, "SIGNALduino_HandleWriteQueue", "HandleWriteQueue:$name", 1) if (@{$hash->{QUEUE}} == 1); +} + + +sub +SIGNALduino_SendFromQueue($$) +{ + my ($hash, $msg) = @_; + my $name = $hash->{NAME}; + + if($msg ne "") { + SIGNALduino_XmitLimitCheck($hash,$msg); + #DevIo_SimpleWrite($hash, $msg,2); + SIGNALduino_SimpleWrite($hash,$msg); + } ############## # Write the next buffer not earlier than 0.23 seconds - # = 3* (12*0.8+1.2+1.0*5*9+0.8+10) = 226.8ms - # else it will be sent too early by the SIGNALduino, resulting in a collision -# InternalTimer(gettimeofday()+0.3, "SIGNALduino_HandleWriteQueue", $hash, 1); -#} + # else it will be sent too early by the SIGNALduino, resulting in a collision, or may the last command is not finished + + InternalTimer(gettimeofday() + SDUINO_WRITEQUEUE_NEXT, "SIGNALduino_HandleWriteQueue", "HandleWriteQueue:$name", 1); +} -##################################### -#sub -#SIGNALduino_HandleWriteQueue($) -#{ -# my $hash = shift; -# my $arr = $hash->{QUEUE}; -# if(defined($arr) && @{$arr} > 0) { -# shift(@{$arr}); -# if(@{$arr} == 0) { -# delete($hash->{QUEUE}); -# return; -# } -# my $bstring = $arr->[0]; -# if($bstring eq "") { -# SIGNALduino_HandleWriteQueue($hash); -# } else { -# SIGNALduino_SendFromQueue($hash, $bstring); -# } -# } -#} +#################################### +sub +SIGNALduino_HandleWriteQueue($) +{ + my($param) = @_; + my(undef,$name) = split(':', $param); + my $hash = $defs{$name}; + + #my @arr = @{$hash->{QUEUE}}; + + if(@{$hash->{QUEUE}}) { + my $msg= shift(@{$hash->{QUEUE}}); + + if($msg eq "") { + SIGNALduino_HandleWriteQueue("x:$name"); + } else { + SIGNALduino_SendFromQueue($hash, $msg); + } + } else { + Log3 $name, 4, "$name/HandleWriteQueue: nothing to send, stopping timer"; + RemoveInternalTimer("HandleWriteQueue:$name"); + } +} ##################################### # called from the global loop, when the select for hash->{FD} reports data @@ -1473,22 +1726,69 @@ SIGNALduino_Read($) ($rmsg,$SIGNALduinodata) = split("\n", $SIGNALduinodata, 2); $rmsg =~ s/\r//; Log3 $name, 4, "$name/msg READ: $rmsg"; - - SIGNALduino_Parse($hash, $hash, $name, $rmsg) if($rmsg); + if ( $rmsg && !SIGNALduino_Parse($hash, $hash, $name, $rmsg) && $hash->{getcmd} ) + { + my $regexp=$gets{$hash->{getcmd}->{cmd}}[1]; + if(!defined($regexp) || $rmsg =~ m/$regexp/) { + if (defined($hash->{keepalive})) { + $hash->{keepalive}{ok} = 1; + $hash->{keepalive}{retry} = 0; + } + if ($hash->{getcmd}->{cmd} eq 'version') { + my $msg_start = index($rmsg, 'V 3.'); + if ($msg_start > 0) { + $rmsg = substr($rmsg, $msg_start); + Log3 $name, 4, "$name/read: cut chars at begin. msgstart = $msg_start msg = $rmsg"; + } + $hash->{version} = $rmsg; + if (defined($hash->{DevState}) && $hash->{DevState} eq 'waitInit') { + RemoveInternalTimer($hash); + SIGNALduino_CheckCmdResp($hash); + } + } + $rmsg = SIGNALduino_parseResponse($hash,$hash->{getcmd}->{cmd},$rmsg); + readingsSingleUpdate($hash, $hash->{getcmd}->{cmd}, $rmsg, 0); + if (defined($hash->{getcmd}->{asyncOut})) { + #Log3 $name, 4, "$name/msg READ: asyncOutput"; + my $ao = asyncOutput( $hash->{getcmd}->{asyncOut}, $hash->{getcmd}->{cmd}.": " . $rmsg ); + } + delete($hash->{getcmd}); + } else { + Log3 $name, 4, "$name/msg READ: Received answer ($rmsg) for ". $hash->{getcmd}->{cmd}." does not match $regexp"; + } + } } $hash->{PARTIAL} = $SIGNALduinodata; } -sub SIGNALduino_GetUpdate($){ +sub SIGNALduino_KeepAlive($){ my ($hash) = @_; my $name = $hash->{NAME}; - Log3 $name, 4, "$name: ping ..."; - SIGNALduino_Get($hash,$name, "ping"); + return if ($hash->{DevState} eq 'disconnected'); - InternalTimer(gettimeofday()+$hash->{Interval}, "SIGNALduino_GetUpdate", $hash, 1); + Log3 $name,4 , "$name/KeepAliveOk: " . $hash->{keepalive}{ok}; + if (!$hash->{keepalive}{ok}) { + delete($hash->{getcmd}); + if ($hash->{keepalive}{retry} >= SDUINO_KEEPALIVE_MAXRETRY) { + Log3 $name,4 , "$name/keepalive retry count reached. Reset"; + $hash->{DevState} = 'INACTIVE'; + SIGNALduino_ResetDevice($hash); + return; + } + else { + $hash->{keepalive}{retry} ++; + Log3 $name,4 , "$name/KeepAlive: get ping"; + $hash->{getcmd}->{cmd} = "ping"; + SIGNALduino_SimpleWrite($hash, "P"); + } + } + Log3 $name,4 , "$name/keepalive retry = " . $hash->{keepalive}{retry}; + $hash->{keepalive}{ok} = 0; + + InternalTimer(gettimeofday() + SDUINO_KEEPALIVE_TIMEOUT, "SIGNALduino_KeepAlive", $hash, 1); } @@ -1517,18 +1817,26 @@ sub SIGNALduino_inTol($$$) # Will return -1 if pattern is not found or a string, containing the indexes which are in tolerance and have the smallest gap to what we searched # =cut + +# 01232323242423 while ($message =~ /$pstr/g) { $count++ } + + sub SIGNALduino_PatternExists { - my ($hash,$search,$patternList) = @_; + my ($hash,$search,$patternList,$data) = @_; #my %patternList=$arg3; #Debug "plist: ".Dumper($patternList) if($debug); #Debug "searchlist: ".Dumper($search) if($debug); my $searchpattern; my $valid=1; - my $pstr=""; + my @pstr; my $debug = AttrVal($hash->{NAME},"debug",0); + my $i=0; + + my $maxcol=0; + foreach $searchpattern (@{$search}) # z.B. [1, -4] { #my $patt_id; @@ -1536,7 +1844,8 @@ sub SIGNALduino_PatternExists #my $tol=abs(abs($searchpattern)>=2 ?$searchpattern*0.3:$searchpattern*1.5); my $tol=abs(abs($searchpattern)>3 ? abs($searchpattern)>16 ? $searchpattern*0.17 : $searchpattern*0.3 : 1); #tol is minimum 1 or higer, depending on our searched pulselengh - Debug "tol (+- $tol) for ($searchpattern)" if($debug); + + Debug "tol: looking for ($searchpattern +- $tol)" if($debug); my %pattern_gap ; #= {}; # Find and store the gap of every pattern, which is in tolerance @@ -1545,19 +1854,26 @@ sub SIGNALduino_PatternExists { Debug "index => gap in tol (+- $tol) of pulse ($searchpattern) : ".Dumper(\%pattern_gap) if($debug); # Extract fist pattern, which is nearst to our searched value - my $closestidx = (sort {$pattern_gap{$a} <=> $pattern_gap{$b}} keys %pattern_gap)[0]; - - $pstr="$pstr$closestidx"; + my @closestidx = (sort {$pattern_gap{$a} <=> $pattern_gap{$b}} keys %pattern_gap); + + my $idxstr=""; + my $r=0; + + while (my ($item) = splice(@closestidx, 0, 1)) + { + $pstr[$i][$r]=$item; + $r++; + Debug "closest pattern has index: $item" if($debug); + } $valid=1; - Debug "closest pattern has index: $closestidx" if($debug); } else { - # search is not found, return - $valid=0; + # search is not found, return -1 + return -1; last; } + $i++; #return ($valid ? $pstr : -1); # return $pstr if $valid or -1 - #foreach $patt_id (keys %$patternList) { #Debug "$patt_id. chk ->intol $patternList->{$patt_id} $searchpattern $tol"; @@ -1572,8 +1888,23 @@ sub SIGNALduino_PatternExists #} #last if (!$valid); ## Exit loop if a complete iteration has not found anything } + my @results = (''); - return ($valid ? $pstr : -1); # return $pstr if $valid or -1 + foreach my $subarray (@pstr) + { + @results = map {my $res = $_; map $res.$_, @$subarray } @results; + } + + foreach my $search (@results) + { + Debug "looking for substr $search" if($debug); + + return $search if (index( ${$data}, $search) >= 0); + } + + return -1; + + #return ($valid ? @results : -1); # return @pstr if $valid or -1 } #SIGNALduino_MatchSignalPattern{$hash,@array, %hash, @array, $scalar}; not used >v3.1.3 @@ -1645,6 +1976,7 @@ sub SIGNALduino_Split_Message($$) my $syncidx; my $rawData; my $clockabs; + my $mcbitnum; my @msg_parts = SIGNALduino_splitMsg($rmsg,';'); ## Split message parts by ";" my %ret; @@ -1691,6 +2023,13 @@ sub SIGNALduino_Split_Message($$) #return undef if (!defined($patternList{$clockidx})); $ret{clockidx} = $clockidx; } + elsif($_ =~ m/^L=\d/) #### MC bit length + { + (undef, $mcbitnum) = split(/=/,$_); + Debug "$name: extracted number of $mcbitnum bits\n" if ($debug);; + $ret{mcbitnum} = $mcbitnum; + } + elsif($_ =~ m/^C=\d+/) #### Message from array { $_ =~ s/C=//; @@ -1711,11 +2050,17 @@ sub SIGNALduino_Split_Message($$) # Function which dispatches a message if needed. sub SIGNALduno_Dispatch($$$) { - my ($hash, $rmsg,$dmsg) = @_; + my ($hash, $rmsg, $dmsg) = @_; my $name = $hash->{NAME}; - Log3 $name, 5, "$name: converted Data to ($dmsg)"; + if (!defined($dmsg)) + { + Log3 $name, 5, "$name: (SIGNALduno_Dispatch) dmsg is undef. Skipping dispatch call"; + return; + } + Log3 $name, 5, "$name: converted Data to ($dmsg)"; + #Dispatch only if $dmsg is different from last $dmsg, or if 2 seconds are between transmits if ( ($hash->{DMSG} ne $dmsg) || ($hash->{TIME}+1 < time()) ) { $hash->{MSGCNT}++; @@ -1810,7 +2155,7 @@ SIGNALduino_Parse_MS($$$$%) my $pstr; my %patternLookupHash=(); - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{sync}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{sync}},\%patternList,\$rawData)) >=0; Debug "Found matched sync with indexes: ($pstr)" if ($debug && $valid); $patternLookupHash{$pstr}="" if ($valid); ## Append Sync to our lookuptable my $syncstr=$pstr; # Store for later start search @@ -1819,14 +2164,14 @@ SIGNALduino_Parse_MS($$$$%) next if (!$valid) ; - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData)) >=0; Debug "Found matched one with indexes: ($pstr)" if ($debug && $valid); $patternLookupHash{$pstr}="1" if ($valid); ## Append Sync to our lookuptable #Debug "added $pstr " if ($debug && $valid); Debug "one pattern not found" if ($debug && !$valid); - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData)) >=0; Debug "Found matched zero with indexes: ($pstr)" if ($debug && $valid); $patternLookupHash{$pstr}="0" if ($valid); ## Append Sync to our lookuptable Debug "zero pattern not found" if ($debug && !$valid); @@ -2041,19 +2386,22 @@ sub SIGNALduino_Parse_MU($$$$@) #Debug "phash:".Dumper(%patternLookupHash); my $pstr=""; - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData)) >=0; Debug "Found matched one" if ($debug && $valid); + + + $patternLookupHash{$pstr}="1" if ($valid); ## Append one to our lookuptable Debug "added $pstr " if ($debug && $valid); - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData)) >=0; Debug "Found matched zero" if ($debug && $valid); $patternLookupHash{$pstr}="0" if ($valid); ## Append zero to our lookuptable Debug "added $pstr " if ($debug && $valid); if (defined($ProtocolListSIGNALduino{$id}{float})) { - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{float}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{float}},\%patternList,\$rawData)) >=0; Debug "Found matched float" if ($debug && $valid); $patternLookupHash{$pstr}="F" if ($valid); ## Append float to our lookuptable Debug "added $pstr " if ($debug && $valid); @@ -2076,12 +2424,12 @@ sub SIGNALduino_Parse_MU($$$$@) my @msgStartLst; my $startStr=""; my $start_regex; - my $oneStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList); - my $zeroStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList); + my $oneStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData); + my $zeroStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData); if (@msgStartLst = SIGNALduino_getProtoProp($id,"start")) { - $startStr=SIGNALduino_PatternExists($hash,@msgStartLst,\%patternList); + $startStr=SIGNALduino_PatternExists($hash,@msgStartLst,\%patternList,\$rawData); } $start_regex="$startStr($oneStr|$zeroStr)"; $rawData =~ /$start_regex/; @@ -2178,8 +2526,9 @@ sub SIGNALduino_Parse_MU($$$$@) Debug "$name: searching new start with ($regex)\n" if ($debug); $rawData =~ /$regex/; - if (defined($-[0] && $-[0] > 0)) { + if (defined($-[0]) && ($-[0] > 0)) { $i=$-[0]+ $i+ length($startStr); + $i=$i-$signal_width if ($i>0 && length($startStr) == 0); #Todo: Debug "$name: found restart at Position $i ($regex)\n" if ($debug); } else { last; @@ -2228,9 +2577,11 @@ SIGNALduino_Parse_MC($$$$@) my $hlen = length($rawData); my $blen = $hlen * 4; - $bitData= unpack("B$blen", pack("H$hlen", $rawData)); - Debug "$name: extracted data $bitData (bin)\n" if ($debug); ## Convert Message from hex to bits my $id; + + my $rawDataInverted; + ($rawDataInverted = $rawData) =~ tr/0123456789ABCDEF/FEDCBA9876543210/; # Some Manchester Data is inverted + foreach $id (@{$hash->{mcIdList}}) { @@ -2239,6 +2590,17 @@ SIGNALduino_Parse_MC($$$$@) Debug "clock and min length matched" if ($debug); Log3 $name, 4, "$name: Found manchester Protocol id $id clock $clock -> $ProtocolListSIGNALduino{$id}{name}"; + + if (exists($ProtocolListSIGNALduino{$id}{polarity}) && ($ProtocolListSIGNALduino{$id}{polarity} eq 'invert') && (!defined($hash->{version}) || substr($hash->{version},0,6) ne 'V 3.2.')) + # todo && substr($hash->{version},0,6) ne 'V 3.2.') # bei version V 3.2. nicht invertieren + { + $bitData= unpack("B$blen", pack("H$hlen", $rawDataInverted)); + } else { + $bitData= unpack("B$blen", pack("H$hlen", $rawData)); + } + Debug "$name: extracted data $bitData (bin)\n" if ($debug); ## Convert Message from hex to bits + Log3 $name, 5, "$name: extracted data $bitData (bin)\n"; + my $method = $ProtocolListSIGNALduino{$id}{method}; if (!exists &$method) { @@ -2277,6 +2639,12 @@ SIGNALduino_Parse($$$$@) #print Dumper(\%ProtocolListSIGNALduino); return undef if !($rmsg=~ m/^\002M.;.*;\003/); ## Check if a Data Message arrived and if it's complete (start & end control char are received) + + if (defined($hash->{keepalive})) { + $hash->{keepalive}{ok} = 1; + $hash->{keepalive}{retry} = 0; + } + my $debug = AttrVal($iohash->{NAME},"debug",0); @@ -2295,12 +2663,12 @@ SIGNALduino_Parse($$$$@) Log3 $name, 3, "$name: You are using an outdated version of signalduino code on your arduino. Please update"; return undef; } - if (@{$hash->{msIdList}} && $rmsg=~ m/^MS;(P\d=-?\d+;){3,6}D=\d+;CP=\d;SP=\d;/) + if (@{$hash->{msIdList}} && $rmsg=~ m/^MS;(P\d=-?\d+;){3,8}D=\d+;CP=\d;SP=\d;/) { $dispatched= SIGNALduino_Parse_MS($hash, $iohash, $name, $rmsg,%signal_parts); } # Message unsynced type -> MU - elsif (@{$hash->{muIdList}} && $rmsg=~ m/^MU;(P\d=-?\d+;){3,6}D=\d+;CP=\d;/) + elsif (@{$hash->{muIdList}} && $rmsg=~ m/^MU;(P\d=-?\d+;){3,8}D=\d+;CP=\d;/) { $dispatched= SIGNALduino_Parse_MU($hash, $iohash, $name, $rmsg,%signal_parts); } @@ -2342,9 +2710,11 @@ SIGNALduino_Ready($) { my ($hash) = @_; - return DevIo_OpenDev($hash, 1, "SIGNALduino_DoInit") - if($hash->{STATE} eq "disconnected"); - + if ($hash->{STATE} eq 'disconnected') { + $hash->{DevState} = 'disconnected'; + return DevIo_OpenDev($hash, 1, "SIGNALduino_DoInit", 'SIGNALduino_Connect') + } + # This is relevant for windows/USB only my $po = $hash->{USBDev}; my ($BlockingFlags, $InBytes, $OutBytes, $ErrorFlags); @@ -2439,10 +2809,15 @@ sub SIGNALduino_IdList($$$) my $wflag = 0; if (defined($aVal) && length($aVal)>0) { - %WhitelistIDs = map { $_ => 1 } split(",", $aVal); - #my $w = join ', ' => map "$_" => keys %WhitelistIDs; - #Log3 $name, 3, "Attr whitelist $w"; - $wflag = 1; + if (substr($aVal,0 ,1) eq '#') { + Log3 $name, 3, "Attr whitelist deaktiviert: $aVal"; + } + else { + %WhitelistIDs = map { $_ => 1 } split(",", $aVal); + #my $w = join ', ' => map "$_" => keys %WhitelistIDs; + #Log3 $name, 3, "Attr whitelist $w"; + $wflag = 1; + } } my $id; foreach $id (keys %ProtocolListSIGNALduino) @@ -2532,6 +2907,17 @@ sub SIGNALduino_bit2Arctec } +sub SIGNALduino_ITV1_tristateToBit($) +{ + my ($msg) = @_; + # Convert 0 -> 00 1 -> 11 F => 01 to be compatible with IT Module + $msg =~ s/0/00/g; + $msg =~ s/1/11/g; + $msg =~ s/F/01/g; + $msg =~ s/D/10/g; + + return $msg; +} sub SIGNALduino_OSV2() @@ -2542,6 +2928,7 @@ sub SIGNALduino_OSV2() my $message_end; my $message_length; + #$bitData =~ tr/10/01/; if ($bitData =~ m/^.?(10){12,16}.?10011001/) { # Valid OSV2 detected! $preamble_pos=index($bitData,"10011001",24); @@ -2658,7 +3045,9 @@ sub SIGNALduino_OSV1() my $idx=0; my $osv1hex ;# ~hex('0x'.$rawData); - my $osv1bit = $bitData =~ tr/10/01/r; + #my $osv1bit = $bitData =~ tr/10/01/r; + my $osv1bit; + ($osv1bit = $bitData) =~ tr/10/01/; #Log3 $name, 5, "$name: OSV1 protocol converted from ($bitData) to bit: ($osv1bit)" ; $osv1hex=sprintf("%02X", length($rawData)*4, $osv1hex).SIGNALduino_b2h($osv1bit); @@ -2737,6 +3126,32 @@ sub SIGNALduino_Hideki() return (-1,""); } + +sub SIGNALduino_Maverick() +{ + my ($name,$bitData,$id) = @_; + my $debug = AttrVal($name,"debug",0); + + ## Todo: Some checks and may be a lengh filter or some checks + my $hex=SIGNALduino_b2h($bitData); + + + + return (1,$hex); ## Return the bits unchanged in hex + +} + +sub SIGNALduino_SomfyRTS() +{ + my ($name, $bitData, $rawData) = @_; + + #(my $negBits = $bitData) =~ tr/10/01/; # Todo: eventuell auf pack umstellen + my $encData = SIGNALduino_b2h($bitData); + + #Log3 $name, 4, "$name: Somfy RTS protocol enc: $encData"; + return (1, $encData); +} + # - - - - - - - - - - - - #=item SIGNALduino_filterSign() #This functons, will act as a filter function. It will remove the sign from the pattern, and compress message and pattern @@ -2889,6 +3304,8 @@ sub SIGNALduino_compPattern($$$%) 1; =pod +=item summary supports the same low-cost receiver for digital signals +=item summary_DE Unterstützt den gleichnamigen Low-Cost Empfaenger fuer digitale Signale =begin html @@ -2921,9 +3338,7 @@ sub SIGNALduino_compPattern($$$%)
- P
Example: P0#0101#R3
-
Will generate the raw send command for the message 0101 with protocol 0 and instruct the arduino to send this three times.
+ P
Example: P0#0101#R3#C500
+
Will generate the raw send command for the message 0101 with protocol 0 and instruct the arduino to send this three times and the clock is 500.
SR;R=3;P0=500;P1=-9000;P2=-4000;P3=-2000;D=03020302;
".int(@a) if(int(@a) < 3 );
+
+ $hash->{CODE} = $a[2];
+ $hash->{lastMSG} = "";
+ $hash->{bitMSG} = "";
+
+ $modules{SD_WS}{defptr}{$a[2]} = $hash;
+ $hash->{STATE} = "Defined";
+
+ my $name= $hash->{NAME};
+ return undef;
+}
+
+#####################################
+sub SD_WS_Undef($$)
+{
+ my ($hash, $name) = @_;
+ delete($modules{SD_WS}{defptr}{$hash->{CODE}})
+ if(defined($hash->{CODE}) && defined($modules{SD_WS}{defptr}{$hash->{CODE}}));
+ return undef;
+}
+
+
+###################################
+sub SD_WS_Parse($$)
+{
+ my ($iohash, $msg) = @_;
+ #my $rawData = substr($msg, 2);
+ my $name = $iohash->{NAME};
+ my ($protocol,$rawData) = split("#",$msg);
+ $protocol=~ s/^[WP](\d+)/$1/; # extract protocol
+
+
+
+ my $dummyreturnvalue= "Unknown, please report";
+ my $hlen = length($rawData);
+ my $blen = $hlen * 4;
+ my $bitData = unpack("B$blen", pack("H$hlen", $rawData));
+ my $bitData2;
+
+ my $model; # wenn im elsif Abschnitt definiert, dann wird der Sensor per AutoCreate angelegt
+ my $SensorTyp;
+ my $id;
+ my $bat;
+ my $channel;
+ my $rawTemp;
+ my $temp;
+ my $hum;
+ my $trend;
+
+ my %decodingSubs = (
+ 50 => # Protocol 50
+ # FF550545FF9E
+ # FF550541FF9A
+ # AABCDDEEFFGG
+ # A = Preamble, always FF
+ # B = TX type, always 5
+ # C = Address (5/6/7) > low 2 bits = 1/2/3
+ # D = Soil moisture 05%
+ # E = temperature
+ # F = security code, always F
+ # G = Checksum 55+05+45+FF=19E CRC value = 9E
+ { # subs to decode this
+ sensortype => 'XT300',
+ model => 'SD_WS_50_SM',
+ prematch => sub {my $msg = shift; return 1 if ($msg =~ /^FF5[0-9A-F]{5}FF[0-9A-F]{2}/); }, # prematch
+ crcok => sub {my $msg = shift; return 1 if ((hex(substr($msg,2,2))+hex(substr($msg,4,2))+hex(substr($msg,6,2))+hex(substr($msg,8,2))&0xFF) == (hex(substr($msg,10,2))) ); }, # crc
+ id => sub {my $msg = shift; return (hex(substr($msg,2,2)) &0x03 ); }, #id
+ #temp => sub {my $msg = shift; return (sprintf('%x',((hex(substr($msg,6,2)) <<4)/2/10))); }, #temp
+ #temphex => sub {my $msg = shift; return sprintf("%04X",((hex(substr($msg,6,2)))<<4)/2); }, #temp
+ temp => sub {my $msg = shift; return ((hex(substr($msg,6,2)))-40) }, #temp
+ #hum => sub {my $msg = shift; return (printf('%02x',hex(substr($msg,4,2)))); }, #hum
+ hum => sub {my $msg = shift; return hex(substr($msg,4,2)); }, #hum
+ channel => sub {my (undef,$bitData) = @_; return ( SD_WS_binaryToNumber($bitData,12,15)&0x03 ); }, #channel
+ },
+ 33 =>
+ {
+ sensortype => 's014/TFA 30.3200/TCM/Conrad',
+ model => 'SD_WS_33_TH',
+ prematch => sub {my $msg = shift; return 1 if ($msg =~ /^[0-9A-F]{10,11}/); }, # prematch
+ crcok => sub {return SD_WS_binaryToNumber($bitData,36,39); }, # crc
+ id => sub {my (undef,$bitData) = @_; return SD_WS_binaryToNumber($bitData,0,9); }, # id
+ # sendmode => sub {my (undef,$bitData) = @_; return SD_WS_binaryToNumber($bitData,10,11) eq "1" ? "manual" : "auto"; }
+ temp => sub {my (undef,$bitData) = @_; return (((SD_WS_binaryToNumber($bitData,22,25)*256 + SD_WS_binaryToNumber($bitData,18,21)*16 + SD_WS_binaryToNumber($bitData,14,17)) *10 -12200) /18)/10; }, #temp
+ hum => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,30,33)*16 + SD_WS_binaryToNumber($bitData,26,29)); }, #hum
+ channel => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,12,13)+1 ); }, #channel
+ bat => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,34) eq "1" ? "ok" : "critical");},
+ # sync => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,35,35) eq "1" ? "true" : "false");},
+ }
+
+
+ );
+
+
+ Log3 $name, 4, "SD_WS_Parse: Protocol: $protocol, rawData: $rawData";
+
+ if ($protocol == "37") # Bresser 7009994
+ {
+ # 0 7 8 9 10 12 22 25 31
+ # 01011010 0 0 01 01100001110 10 0111101 11001010
+ # ID B? T Kan Temp ?? Hum Pruefsumme?
+
+ # MU;P0=729;P1=-736;P2=483;P3=-251;P4=238;P5=-491;D=010101012323452323454523454545234523234545234523232345454545232345454545452323232345232340;CP=4;
+
+ $model = "SD_WS37_TH";
+ $SensorTyp = "Bresser 7009994";
+
+ $id = SD_WS_binaryToNumber($bitData,0,7);
+ #$bat = int(substr($bitData,8,1)) eq "1" ? "ok" : "low";
+ $channel = SD_WS_binaryToNumber($bitData,10,11);
+ $rawTemp = SD_WS_binaryToNumber($bitData,12,22);
+ $hum = SD_WS_binaryToNumber($bitData,25,31);
+
+ $id = sprintf('%02X', $id); # wandeln nach hex
+ $temp = ($rawTemp - 609.93) / 9.014;
+ $temp = sprintf("%.1f", $temp);
+
+ if ($hum < 10 || $hum > 99 || $temp < -30 || $temp > 70) {
+ return "";
+ }
+
+ $bitData2 = substr($bitData,0,8) . ' ' . substr($bitData,8,4) . ' ' . substr($bitData,12,11);
+ $bitData2 = $bitData2 . ' ' . substr($bitData,23,2) . ' ' . substr($bitData,25,7) . ' ' . substr($bitData,32,8);
+ Log3 $iohash, 4, "$name converted to bits: " . $bitData2;
+ Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) sensor id=$id, channel=$channel, rawTemp=$rawTemp, temp=$temp, hum=$hum";
+ }
+ elsif ($protocol != "37" && defined($decodingSubs{$protocol})) # alles was nicht Protokoll #37 ist, durch den hash decodieren
+ {
+
+ $SensorTyp=$decodingSubs{$protocol}{sensortype};
+
+ return "Prematch Error" && Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) prematch error" if (!$decodingSubs{$protocol}{prematch}->( $rawData ));
+ return "crc Error" && Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) crc error" if (!$decodingSubs{$protocol}{crcok}->( $rawData ));
+
+ $id=$decodingSubs{$protocol}{id}->( $rawData,$bitData );
+ #my $temphex=$decodingSubs{$protocol}{temphex}->( $rawData,$bitData );
+
+ $temp=$decodingSubs{$protocol}{temp}->( $rawData,$bitData );
+ $hum=$decodingSubs{$protocol}{hum}->( $rawData,$bitData );
+ $channel=$decodingSubs{$protocol}{channel}->( $rawData,$bitData );
+ $model = $decodingSubs{$protocol}{model};
+ $bat = $decodingSubs{$protocol}{bat};
+
+ Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) sensor id=$id, channel=$channel, temp=$temp, hum=$hum";
+
+ }
+ else {
+ Log3 $iohash, 4, "SD_WS_Parse_unknown: converted to bits: $bitData";
+ return $dummyreturnvalue;
+ }
+
+
+ if (!defined($model)) {
+ return $dummyreturnvalue;
+ }
+
+ my $deviceCode;
+
+ my $longids = AttrVal($iohash->{NAME},'longids',0);
+ if (($longids ne "0") && ($longids eq "1" || $longids eq "ALL" || (",$longids," =~ m/,$model,/)))
+ {
+ $deviceCode = $model . '_' . $id . $channel;
+ Log3 $iohash,4, "$name using longid: $longids model: $model";
+ } else {
+ $deviceCode = $model . "_" . $channel;
+ }
+
+ #print Dumper($modules{SD_WS}{defptr});
+
+ my $def = $modules{SD_WS}{defptr}{$iohash->{NAME} . "." . $deviceCode};
+ $def = $modules{SD_WS}{defptr}{$deviceCode} if(!$def);
+
+ if(!$def) {
+ Log3 $iohash, 1, 'SD_WS: UNDEFINED sensor ' . $model . ' detected, code ' . $deviceCode;
+ return "UNDEFINED $deviceCode SD_WS $deviceCode";
+ }
+ #Log3 $iohash, 3, 'SD_WS: ' . $def->{NAME} . ' ' . $id;
+
+ my $hash = $def;
+ $name = $hash->{NAME};
+ Log3 $name, 4, "SD_WS: $name ($rawData)";
+
+ if (!defined(AttrVal($hash->{NAME},"event-min-interval",undef)))
+ {
+ my $minsecs = AttrVal($iohash->{NAME},'minsecs',0);
+ if($hash->{lastReceive} && (time() - $hash->{lastReceive} < $minsecs)) {
+ Log3 $hash, 4, "$deviceCode Dropped due to short time. minsecs=$minsecs";
+ return "";
+ }
+ }
+
+ $hash->{lastReceive} = time();
+ $hash->{lastMSG} = $rawData;
+ if (defined($bitData2)) {
+ $hash->{bitMSG} = $bitData2;
+ } else {
+ $hash->{bitMSG} = $bitData;
+ }
+
+ my $state = "T: $temp" . ($hum > 0 ? " H: $hum":"");
+
+ readingsBeginUpdate($hash);
+ readingsBulkUpdate($hash, "state", $state);
+ readingsBulkUpdate($hash, "temperature", $temp) if (defined($temp));
+ readingsBulkUpdate($hash, "humidity", $hum) if (defined($hum) && $hum > 0);
+ readingsBulkUpdate($hash, "battery", $bat) if (defined($bat));
+ readingsBulkUpdate($hash, "channel", $channel) if (defined($channel));
+ readingsBulkUpdate($hash, "trend", $trend) if (defined($trend));
+
+ readingsEndUpdate($hash, 1); # Notify is done by Dispatch
+
+ return $name;
+
+}
+
+sub SD_WS_Attr(@)
+{
+ my @a = @_;
+
+ # Make possible to use the same code for different logical devices when they
+ # are received through different physical devices.
+ return if($a[0] ne "set" || $a[2] ne "IODev");
+ my $hash = $defs{$a[1]};
+ my $iohash = $defs{$a[3]};
+ my $cde = $hash->{CODE};
+ delete($modules{SD_WS}{defptr}{$cde});
+ $modules{SD_WS}{defptr}{$iohash->{NAME} . "." . $cde} = $hash;
+ return undef;
+}
+
+
+sub SD_WS_binaryToNumber
+{
+ my $binstr=shift;
+ my $fbit=shift;
+ my $lbit=$fbit;
+ $lbit=shift if @_;
+
+ return oct("0b".substr($binstr,$fbit,($lbit-$fbit)+1));
+}
+
+1;
+
+=pod
+=item summary Supports various weather stations
+=item summary_DE Unterstützt verschiedene Funk Wetterstationen
+=begin html
+
+
+Weather Sensors various protocols
+
+ The SD_WS module interprets temperature sensor messages received by a Device like CUL, CUN, SIGNALduino etc.
+
+ Known models:
+
+ - Bresser 7009994
+ - Opus XT300
+
+
+ New received device are add in fhem with autocreate.
+
+
+
+ Define
+ The received devices created automatically.
+ The ID of the defice is the cannel or, if the longid attribute is specified, it is a combination of channel and some random generated bits at powering the sensor and the channel.
+ If you want to use more sensors, than channels available, you can use the longid option to differentiate them.
+
+
+
+ Generated readings:
+
Some devices may not support all readings, so they will not be presented
+
+ - State (T: H:)
+ - temperature (°C)
+ - humidity: (The humidity (1-100 if available)
+ - battery: (low or ok)
+ - channel: (The Channelnumber (number if)
+
+
+ Attributes
+
+ - do_not_notify
+ - ignore
+ - showtime
+ - readingFnAttributes
+
+
+
+ Set N/A
+
+
+ Set N/A
+
+
+
+=end html
+
+=begin html_DE
+
+
+SD_WS
+
+ Das SD_WS Modul verarbeitet von einem IO Gerät (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.
+
+ Unterstützte Modelle:
+
+ - Bresser 7009994
+ - Opus XT300
+
+
+
+ Neu empfangene Sensoren werden in FHEM per autocreate angelegt.
+
+
+
+ Define
+ Die empfangenen Sensoren werden automatisch angelegt.
+ Die ID der angelgten Sensoren ist entweder der Kanal des Sensors, oder wenn das Attribut longid gesetzt ist, dann wird die ID aus dem Kanal und einer Reihe von Bits erzeugt, welche der Sensor beim Einschalten zufällig vergibt.
+
+
+
+ Generierte Readings:
+
+ - State (T: H:)
+ - temperature (°C)
+ - humidity: (Luftfeuchte (1-100)
+ - battery: (low oder ok)
+ - channel: (Der Sensor Kanal)
+
+
+ Attribute
+
+ - do_not_notify
+ - ignore
+ - showtime
+ - readingFnAttributes
+
+
+
+ Set N/A
+
+
+ Set N/A
+
+
+
+=end html_DE
+=cut
diff --git a/fhem/FHEM/14_SD_WS07.pm b/fhem/FHEM/14_SD_WS07.pm
index d213920e8..ea8881f6e 100644
--- a/fhem/FHEM/14_SD_WS07.pm
+++ b/fhem/FHEM/14_SD_WS07.pm
@@ -115,11 +115,11 @@ SD_WS07_Parse($$)
}
if ($hum > 100) {
- return undef; # Eigentlich muesste sowas wie ein skip rein, damit ggf. spaeter noch weitre Sensoren dekodiert werden koennen.
+ return ''; # Eigentlich muesste sowas wie ein skip rein, damit ggf. spaeter noch weitre Sensoren dekodiert werden koennen.
}
if ($temp > 700 && $temp < 3840) {
- return undef;
+ return '';
} elsif ($temp >= 3840) { # negative Temperaturen, muss noch ueberprueft und optimiert werden
$temp -= 4095;
}
@@ -201,6 +201,8 @@ sub SD_WS07_Attr(@)
=pod
+=item summary Supports weather sensors protocl 7 from SIGNALduino
+=item summary_DE Unterstützt Wettersensoren mit Protokol 7 vom SIGNALduino
=begin html
@@ -261,7 +263,7 @@ sub SD_WS07_Attr(@)
Das SD_WS07 Module verarbeitet von einem IO Geraet (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.
- Unterstuetze Modelle:
+ Unterstützte Modelle:
- Eurochon EAS800z
- Technoline WS6750/TX70DTH
diff --git a/fhem/FHEM/14_SD_WS09.pm b/fhem/FHEM/14_SD_WS09.pm
index ef9c8d8ea..45e7e13c7 100644
--- a/fhem/FHEM/14_SD_WS09.pm
+++ b/fhem/FHEM/14_SD_WS09.pm
@@ -10,6 +10,8 @@
use strict;
use warnings;
+ use Digest::CRC qw(crc);
+
#use Math::Round qw/nearest/;
sub SD_WS09_Initialize($)
@@ -25,7 +27,7 @@
."windKorrektur:-3,-2,-1,0,1,2,3 "
."$readingFnAttributes ";
$hash->{AutoCreate} =
- { "SD_WS09.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.* windKorrektur:.*:0", FILTER => "%NAME", GPLOT => "temp4hum4:Temp/Hum,", autocreateThreshold => "2:180"} };
+ { "SD_WS09.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.* windKorrektur:.*:0 " , FILTER => "%NAME", GPLOT => "temp4hum4:Temp/Hum,", autocreateThreshold => "2:180"} };
}
@@ -71,9 +73,12 @@
my $hlen = length($rawData);
my $blen = $hlen * 4;
my $bitData = unpack("B$blen", pack("H$hlen", $rawData));
+ my $bitData2;
+ my $bitData20;
my $rain = 0;
my $deviceCode = 0;
my $model = "undef"; # 0xFFA -> WS0101/WH1080 alles andere -> CTW600
+ my $modelattr ;
my $modelid;
my $windSpeed = 0;
my $windguest =0;
@@ -85,24 +90,80 @@
my $windDirection ;
my $windDirectionText;
-
- Log3 $name, 4, "SD_WS09_Parse HEX=$msg length: $hlen";
- my $syncpos= index($bitData,"11111110"); #7x1 1x0 preamble
- Log3 $iohash, 3, "SD_WS09_Parse Bin=$bitData syncp=$syncpos length:".length($bitData) ;
-
+ $modelattr = AttrVal($iohash->{NAME},'WS09_WSModel',0);
+ if ($modelattr eq '0'){
+ $modelattr = "undef";
+ }
+
+ my $crcwh1080 = AttrVal($iohash->{NAME},'WS09_CRCAUS',0);
+ Log3 $iohash, 3, "$name: SD_WS09_Parse CRC_AUS:$crcwh1080 Model=$modelattr" ;
+
+ my $syncpos= index($bitData,"11111110"); #7x1 1x0 preamble
+ Log3 $iohash, 3, "$name: SD_WS09_Parse0 Bin=$bitData syncp=$syncpos length:".length($bitData) ;
+
if ($syncpos ==-1 || length($bitData)-$syncpos < 78)
{
- Log3 $iohash, 3, "EXIT SD_WS09_Parse msg=$rawData syncp=$syncpos length:".length($bitData) ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse EXIT: msg=$rawData syncp=$syncpos length:".length($bitData) ;
return undef;
}
-
+
my $wh = substr($bitData,0,8);
- if($wh == "11111111") {
+ #CRC-Check bei WH1080/WS0101 WS09_CRCAUS=0 und WS09_WSModel = undef oder Wh1080
+ if(($crcwh1080 == 0) && ($modelattr ne "CTW600")) {
+ if($wh == "11111111") {
+ if ($syncpos == 0)
+ {
+ $hlen = length($rawData);
+ $blen = $hlen * 4;
+ $bitData2 = '11'.unpack("B$blen", pack("H$hlen", $rawData));
+ $bitData20 = substr($bitData2,0,length($bitData2)-2);
+ $blen = length($bitData20);
+ $hlen = $blen / 4;
+ $msg = 'P9#'.unpack("H$hlen", pack("B$blen", $bitData20));
+ $bitData = $bitData20;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse sync1 msg=$msg syncp=$syncpos length:".length($bitData) ;
+ }
+
+ if ($syncpos == 1)
+ {
+ $hlen = length($rawData);
+ $blen = $hlen * 4;
+ $bitData2 = '1'.unpack("B$blen", pack("H$hlen", $rawData));
+ $bitData20 = substr($bitData2,0,length($bitData2)-1);
+ $blen = length($bitData20);
+ $hlen = $blen / 4;
+ $msg = 'P9#'.unpack("H$hlen", pack("B$blen", $bitData20));
+ $bitData = $bitData20;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse sync2 msg=$msg syncp=$syncpos length:".length($bitData) ;
+ }
+
+
+ my $datacheck = pack( 'H*', substr($msg,5,length($msg)-5) );
+ my $crcmein = Digest::CRC->new(width => 8, poly => 0x31);
+ my $rr2 = $crcmein->add($datacheck)->hexdigest;
+ if ($rr2 eq "0"){
+ $model = "WH1080";
+ Log3 $iohash, 3, "$name: SD_WS09_Parse CRC_OK: CRC=$rr2 Model=$model attr=$modelattr" ;
+ }else{
+ Log3 $iohash, 3, "$name: SD_WS09_Parse CRC_Error: msg=$msg CRC=$rr2 " ;
+ return undef;
+ }
+ }else{
+ $model = "CTW600";
+ Log3 $iohash, 3, "$name: SD_WS09_Parse CTW600: Model=$model attr=$modelattr" ;
+ }
+ };
+
+ if( ($wh == "11111111") || ($model eq "WH1080")) {
+ if ($modelattr eq "CTW600"){
+ Log3 $iohash, 3, "$name: SD_WS09_WH1080 off=$modelattr Model=$model " ;
+ return undef;
+ }
$sensdata = substr($bitData,8);
my $whid = substr($sensdata,0,4);
if( $whid == "1010" ){ # A
- Log3 $iohash, 3, "WH SD_WS09_Parse WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ;
$model = "WH1080";
$id = SD_WS09_bin2dec(substr($sensdata,4,8));
$bat = (SD_WS09_bin2dec((substr($sensdata,64,4))) == 0) ? 'ok':'low' ; # decode battery = 0 --> ok
@@ -111,11 +172,11 @@
$windDirection = SD_WS09_bin2dec(substr($sensdata,68,4));
$windDirectionText = $winddir_name[$windDirection];
$windSpeed = round((SD_WS09_bin2dec(substr($sensdata,32,8))* 34)/100,01);
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ;
$windguest = round((SD_WS09_bin2dec(substr($sensdata,40,8)) * 34)/100,01);
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ;
$rain = SD_WS09_bin2dec(substr($sensdata,56,8)) * 0.3;
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,56,8)." Dec: " . $rain ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,56,8)." Dec: " . $rain ;
} else {
if( $whid == "1011" ){ # B DCF-77 Zeitmeldungen vom Sensor
my $hrs1 = substr($sensdata,16,8);
@@ -125,57 +186,70 @@
my $mday;
my $month;
my $year;
- Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse HRS1=$hrs1" ;
- # $hrs = SD_WS09_BCD2bin(substr($sensdata,16,8) & 0x3F) ; #h
+ $id = SD_WS09_bin2dec(substr($sensdata,4,8));
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung0: HRS1=$hrs1 id:$id" ;
$hrs = SD_WS09_BCD2bin(substr($sensdata,18,6) ) ; # Stunde
$mins = SD_WS09_BCD2bin(substr($sensdata,24,8)); # Minute
$sec = SD_WS09_BCD2bin(substr($sensdata,32,8)); # Sekunde
#day month year
$year = SD_WS09_BCD2bin(substr($sensdata,40,8)); # Jahr
- #$month = SD_WS09_BCD2bin(substr($sensdata,48,8) & 0x1f); #d
$month = SD_WS09_BCD2bin(substr($sensdata,51,5)); # Monat
$mday = SD_WS09_BCD2bin(substr($sensdata,56,8)); # Tag
- Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse msg=$rawData syncp=$syncpos length:".length($bitData) ;
- Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse HH:mm:ss - ".$hrs.":".$mins.":".$sec ;
- Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse dd:mm:yy - ".$mday.":".$month.":".$year ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung1: msg=$rawData syncp=$syncpos length:".length($bitData) ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung2: HH:mm:ss - ".$hrs.":".$mins.":".$sec ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung3: dd.mm.yy - ".$mday.":".$month.":".$year ;
+ return $name;
}
- Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse msg=$rawData syncp=$syncpos length:".length($sensdata) ;
- return undef;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung4: msg=$rawData syncp=$syncpos length:".length($sensdata) ;
+ return undef;
}
}else{
+ if ($modelattr eq "WH1080"){
+ Log3 $iohash, 3, "$name: SD_WS09_CTW600 off=$modelattr Model=$model " ;
+ return undef;
+ } else {
# eine CTW600 wurde erkannt
$sensdata = substr($bitData,$syncpos+8);
- Log3 $iohash, 3, "WH_2 SD_WS09_Parse WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse CTW WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ;
$model = "CTW600";
+ my $nn1 = substr($sensdata,10,2); # Keine Bedeutung
+ my $nn2 = substr($sensdata,62,4); # Keine Bedeutung
$modelid = substr($sensdata,0,4);
- Log3 $iohash, 3, "SD_WS09_Parse Id: ".$modelid." Bin-Sync=$sensdata syncp=$syncpos length:".length($sensdata) ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Id: ".$modelid." NN1:$nn1 NN2:$nn2" ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse Id: ".$modelid." Bin-Sync=$sensdata syncp=$syncpos length:".length($sensdata) ;
$bat = SD_WS09_bin2dec((substr($sensdata,0,3))) ;
$id = SD_WS09_bin2dec(substr($sensdata,4,6));
$temp = (SD_WS09_bin2dec(substr($sensdata,12,10)) - 400)/10;
- $hum = SD_WS09_bin2dec(substr($sensdata,22,8));
+ $hum = SD_WS09_bin2dec(substr($sensdata,22,8));
$windDirection = SD_WS09_bin2dec(substr($sensdata,66,4));
$windDirectionText = $winddir_name[$windDirection];
$windSpeed = round(SD_WS09_bin2dec(substr($sensdata,30,16))/240,01);
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ;
$windguest = round((SD_WS09_bin2dec(substr($sensdata,40,8)) * 34)/100,01);
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ;
$rain = round(SD_WS09_bin2dec(substr($sensdata,46,16)) * 0.3,01);
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,46,16)." Dec: " . $rain ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,46,16)." Dec: " . $rain ;
+ }
}
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." id:$id :$sensdata ";
- Log3 $iohash, 3, "SD_WS09_Parse ".$model." id:$id, bat:$bat, temp=$temp, hum=$hum, winddir=$windDirection:$windDirectionText wS=$windSpeed, wG=$windguest, rain=$rain";
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." id:$id :$sensdata ";
+ Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." id:$id, bat:$bat, temp=$temp, hum=$hum, winddir=$windDirection:$windDirectionText wS=$windSpeed, wG=$windguest, rain=$rain";
if($hum > 100 || $hum < 0) {
- Log3 $iohash, 3, "Hum SD_WS09_Parse hum=$hum msg=$rawData " ;
+ Log3 $iohash, 3, "$name: SD_WS09_Parse HUM: hum=$hum msg=$rawData " ;
return undef;
}
+ if($temp > 60 || $temp < -40) {
+ Log3 $iohash, 3, "$name: SD_WS09_Parse TEMP: Temp=$temp msg=$rawData " ;
+ return undef;
+ }
+
my $longids = AttrVal($iohash->{NAME},'longids',0);
if ( ($longids ne "0") && ($longids eq "1" || $longids eq "ALL" || (",$longids," =~ m/,$model,/)))
{
$deviceCode=$model."_".$id;
- Log3 $iohash,4, "$name using longid: $longids model: $model";
+ Log3 $iohash,4, "$name: SD_WS09_Parse using longid: $longids model: $model";
} else {
$deviceCode = $model;
}
@@ -184,14 +258,15 @@
$def = $modules{SD_WS09}{defptr}{$deviceCode} if(!$def);
if(!$def) {
- Log3 $iohash, 1, 'SD_WS09: UNDEFINED sensor ' . $model . ' detected, code ' . $deviceCode;
+ Log3 $iohash, 1, 'SD_WS09_Parse UNDEFINED sensor ' . $model . ' detected, code ' . $deviceCode;
return "UNDEFINED $deviceCode SD_WS09 $deviceCode";
}
-
- my $hash = $def;
- $name = $hash->{NAME};
+
+ my $hash = $def;
+ $name = $hash->{NAME};
Log3 $name, 4, "SD_WS09_Parse: $name ($rawData)";
+
my $windkorr = AttrVal($hash->{NAME},'windKorrektur',0);
if ($windkorr != 0 )
{
@@ -205,18 +280,15 @@
{
my $minsecs = AttrVal($iohash->{NAME},'minsecs',0);
if($hash->{lastReceive} && (time() - $hash->{lastReceive} < $minsecs)) {
- Log3 $hash, 4, "$deviceCode Dropped due to short time. minsecs=$minsecs";
+ Log3 $hash, 4, "SD_WS09_Parse $deviceCode Dropped due to short time. minsecs=$minsecs";
return "";
}
}
-
$def->{lastMSG} = $rawData;
- #$def->{bitMSG} = $bitData2;
-
+
my $state = "T: $temp ". ($hum>0 ? " H: $hum ":" ")." Ws: $windSpeed "." Wg: $windguest "." Wd: $windDirectionText "." R: $rain";
- # my $state = "T: $temp". ($hum>0 ? " H: $hum":"");
-
+
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "state", $state);
readingsBulkUpdate($hash, "temperature", $temp) if ($temp ne"");
@@ -228,7 +300,8 @@
readingsBulkUpdate($hash, "rain", $rain );
readingsBulkUpdate($hash, "windGust", $windguest );
readingsBulkUpdate($hash, "windSpeed", $windSpeed );
- readingsBulkUpdate($hash, "windDirectionDegree", $windDirection );
+ readingsBulkUpdate($hash, "windDirection", $windDirection );
+ readingsBulkUpdate($hash, "windDirectionDegree", $windDirection * 360 / 16);
readingsBulkUpdate($hash, "windDirectionText", $windDirectionText );
readingsEndUpdate($hash, 1); # Notify is done by Dispatch
@@ -272,11 +345,13 @@
return $flip;
}
- sub SD_WS09_BCD2bin($) {
- my $BCD = shift;
- return (10 * ($BCD >> 4 & 0xF) + ($BCD & 0xF));
- }
+ sub SD_WS09_BCD2bin($) {
+ my $binary = shift;
+ my $int = unpack("N", pack("B32", substr("0" x 32 . $binary, -32)));
+ my $BCD = sprintf("%x", $int );
+ return $BCD;
+ }
@@ -284,12 +359,18 @@
=pod
+=item summary Supports weather sensors protocl 9 from SIGNALduino
+=item summary_DE Unterstützt Wettersensoren mit Protokol 9 vom SIGNALduino
=begin html
Wether Sensors protocol #9
The SD_WS09 module interprets temperature sensor messages received by a Device like CUL, CUN, SIGNALduino etc.
+ Requires Perl-Modul Digest::CRC.
+
+ cpan install Digest::CRC or sudo apt-get install libdigest-crc-perl
+
Known models:
@@ -328,10 +409,9 @@
- ignore
- showtime
- readingFnAttributes
- - model
+ - Model
WH1080, CTW600
-
- windKorrektur
-3,-2,-1,0,1,2,3
@@ -353,6 +433,12 @@
Das SD_WS09 Module verarbeitet von einem IO Gerät (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.
+ Perl-Modul Digest::CRC erforderlich.
+
+ cpan install Digest::CRC oder auch
+ sudo apt-get install libdigest-crc-perl
+
+
Unterstütze Modelle:
- WS-0101 --> Model: WH1080
@@ -367,8 +453,8 @@
Define
Die empfangenen Sensoren werden automatisch angelegt.
- Die ID der angelegten Sensoren wird nach jedem Batteriewechsel geändert, welche der Sensor beim Einschalten zufällig vergibt.
- CRC Checksumme wird zur Zeit noch nicht überprüft, deshalb werden Sensoren bei denen die Luftfeuchte < 0 oder > 100 ist, nicht angelegt.
+ Die ID der angelegten Sensoren wird nach jedem Batteriewechsel geändert, welche der Sensor beim Einschalten zufällig vergibt.
+ CRC Checksumme wird zur Zeit noch nicht überprüft, deshalb werden Sensoren bei denen die Luftfeuchte < 0 oder > 100 ist, nicht angelegt.
@@ -389,10 +475,9 @@
- ignore
- showtime
- readingFnAttributes
- - model
+ - Model
WH1080, CTW600
-
- windKorrektur
Korrigiert die Nord-Ausrichtung des Windrichtungsmessers, wenn dieser nicht richtig nach Norden ausgerichtet ist.
-3,-2,-1,0,1,2,3
diff --git a/fhem/FHEM/14_SD_WS_Maverick.pm b/fhem/FHEM/14_SD_WS_Maverick.pm
new file mode 100644
index 000000000..2320e8c80
--- /dev/null
+++ b/fhem/FHEM/14_SD_WS_Maverick.pm
@@ -0,0 +1,298 @@
+##############################################
+# $Id$
+#
+# The purpose of this module is to support Maverick sensors
+# Sidey79 & Cruizer 2016
+#
+
+package main;
+
+
+use strict;
+use warnings;
+
+#use Data::Dumper;
+
+
+sub
+SD_WS_Maverick_Initialize($)
+{
+ my ($hash) = @_;
+
+ $hash->{Match} = "^P47#AA9995[A-Fa-f0-9]+";
+ $hash->{DefFn} = "SD_WS_Maverick_Define";
+ $hash->{UndefFn} = "SD_WS_Maverick_Undef";
+ $hash->{ParseFn} = "SD_WS_Maverick_Parse";
+ $hash->{AttrFn} = "SD_WS_Maverick_Attr";
+ $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:1,0 " .
+ "$readingFnAttributes ";
+ $hash->{AutoCreate} =
+ { "SD_WS_Maverick.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", FILTER => "%NAME", autocreateThreshold => "2:180"} };
+## Todo: Pruefen der Autocreate Einstellungen
+
+}
+
+#############################
+sub
+SD_WS_Maverick_Define($$)
+{
+ my ($hash, $def) = @_;
+ my @a = split("[ \t][ \t]*", $def);
+
+ return "wrong syntax: define SD_WS_Maverick ".int(@a)
+ if(int(@a) < 3 );
+
+ $hash->{CODE} = $a[2];
+ $hash->{lastMSG} = "";
+ # $hash->{bitMSG} = "";
+
+ $modules{SD_WS_Maverick}{defptr}{$a[2]} = $hash;
+ $hash->{STATE} = "Defined";
+
+ my $name= $hash->{NAME};
+ return undef;
+}
+
+#####################################
+sub
+SD_WS_Maverick_Undef($$)
+{
+ my ($hash, $name) = @_;
+ delete($modules{SD_WS_Maverick}{defptr}{$hash->{CODE}})
+ if(defined($hash->{CODE}) &&
+ defined($modules{SD_WS_Maverick}{defptr}{$hash->{CODE}}));
+ return undef;
+}
+
+
+###################################
+sub
+SD_WS_Maverick_Parse($$)
+{
+ my ($iohash, $msg) = @_;
+ #my $rawData = substr($msg, 2);
+ my $name = $iohash->{NAME};
+ my (undef ,$rawData) = split("#",$msg);
+ #$protocol=~ s/^P(\d+)/$1/; # extract protocol
+
+ my $model = "SD_WS_Maverick";
+ my $hlen = length($rawData);
+ #my $blen = $hlen * 4;
+ #my $bitData = unpack("B$blen", pack("H$hlen", $rawData));
+
+ Log3 $name, 3, "SD_WS_Maverick_Parse $model ($msg) length: $hlen";
+
+ #1 8 13 18 26
+ #AA999559 55555 95999 A9A9A669 Sensor 1 =21 2Grad
+ #AA999559 95996 55555 95A65565 Sensor 2 =22 2Grad
+ #
+ #Header Sen1 Sens2
+ #my $hashumidity = FALSE;
+
+ ## Todo: Change decoding per model into a foreach
+ #foreach $key (keys %models) {
+ # ....
+ #}
+
+ #
+ my $startup = substr($rawData,6,2);
+ my $temp_str1 = substr($rawData,8,5);
+ my $temp_str2 = substr($rawData,13,5);
+ my $unknown = substr($rawData,18);
+
+ Log3 $iohash, 4, "$model decoded protocolid: 47 sensor startup=$startup, temp1=$temp_str1, temp2=$temp_str2, unknown=$unknown";
+
+ # Convert
+ $temp_str1 =~ tr/569A/0123/;
+ $temp_str2 =~ tr/569A/0123/;
+
+ # Calculate temp from data
+ my $c;
+ my $temp1=-532;
+ for ( my $i = 0; $i < length($temp_str1); $i++ ) {
+ $c = substr( $temp_str1, $i, 1);
+ $temp1 += $c*4**(4-$i);
+ }
+
+ my $temp2=-532;
+ for ( my $i = 0; $i < length($temp_str2); $i++ ) {
+ $c = substr( $temp_str2, $i, 1);
+ $temp2 += $c*4**(4-$i);
+ }
+
+
+ Log3 $iohash, 4, "$model decoded protocolid: temp1=$temp1, temp2=$temp2;";
+
+
+
+
+
+
+ #print Dumper($modules{SD_WS_Maverick}{defptr});
+
+ my $def = $modules{SD_WS_Maverick}{defptr}{$iohash->{NAME} };
+ $def = $modules{SD_WS_Maverick}{defptr}{$model} if(!$def);
+
+ if(!$def) {
+ Log3 $iohash, 1, 'SD_WS_Maverick: UNDEFINED sensor ' . $model;
+ return "UNDEFINED $model SD_WS_Maverick $model";
+ }
+ #Log3 $iohash, 3, 'SD_WS_Maverick: ' . $def->{NAME} . ' ' . $id;
+
+ my $hash = $def;
+ $name = $hash->{NAME};
+ Log3 $name, 4, "SD_WS_Maverick: $name ($rawData)";
+
+ if (!defined(AttrVal($hash->{NAME},"event-min-interval",undef)))
+ {
+ my $minsecs = AttrVal($iohash->{NAME},'minsecs',0);
+ if($hash->{lastReceive} && (time() - $hash->{lastReceive} < $minsecs)) {
+ Log3 $hash, 4, "$model Dropped due to short time. minsecs=$minsecs";
+ return "";
+ }
+ }
+
+ $hash->{lastReceive} = time();
+ $hash->{lastMSG} = $rawData;
+ #$hash->{bitMSG} = $bitData2;
+
+ my $state = "T: $temp1"." T2: $temp2" ;
+
+ readingsBeginUpdate($hash);
+ readingsBulkUpdate($hash, "state", $state);
+ readingsBulkUpdate($hash, "messageType", $startup);
+
+ readingsBulkUpdate($hash, "temp1", $temp1) if ($temp1 ne"");
+ readingsBulkUpdate($hash, "temp2", $temp2) if ($temp2 ne"");
+
+ readingsEndUpdate($hash, 1); # Notify is done by Dispatch
+
+ return $name;
+
+}
+
+sub SD_WS_Maverick_Attr(@)
+{
+ my @a = @_;
+
+ # Make possible to use the same code for different logical devices when they
+ # are received through different physical devices.
+ return if($a[0] ne "set" || $a[2] ne "IODev");
+ my $hash = $defs{$a[1]};
+ my $iohash = $defs{$a[3]};
+ my $cde = $hash->{CODE};
+ delete($modules{SD_WS_Maverick}{defptr}{$cde});
+ $modules{SD_WS_Maverick}{defptr}{$iohash->{NAME} . "." . $cde} = $hash;
+ return undef;
+}
+
+
+1;
+
+
+=pod
+=item summary Supports maverick temperature sensors protocl 47 from SIGNALduino
+=item summary_DE Unterstützt Maverick Temperatursensoren mit Protokol 47 vom SIGNALduino
+=begin html
+
+
+Wether Sensors protocol #7
+
+ The SD_WS_Maverick module interprets temperature sensor messages received by a Device like CUL, CUN, SIGNALduino etc.
+
+ Known models:
+
+ - Eurochon EAS800z
+ - Technoline WS6750/TX70DTH
+
+
+ New received device are add in fhem with autocreate.
+
+
+
+ Define
+ The received devices created automatically.
+ The ID of the defice is the cannel or, if the longid attribute is specified, it is a combination of channel and some random generated bits at powering the sensor and the channel.
+ If you want to use more sensors, than channels available, you can use the longid option to differentiate them.
+
+
+
+ Generated readings:
+
Some devices may not support all readings, so they will not be presented
+
+ - State (T: H:)
+ - temperature (°C)
+ - humidity: (The humidity (1-100 if available)
+ - battery: (low or ok)
+ - channel: (The Channelnumber (number if)
+
+
+ Attributes
+
+ - do_not_notify
+ - ignore
+ - model ()
+ - showtime
+ - readingFnAttributes
+
+
+
+ Set N/A
+
+
+ Set N/A
+
+
+
+=end html
+
+=begin html_DE
+
+
+SD_WS_Maverick
+
+ Das SD_WS_Maverick Module verarbeitet von einem IO Geraet (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.
+
+ Unterstützte Modelle:
+
+ - Maverick
+
+
+ Neu empfangene Sensoren werden in FHEM per autocreate angelegt.
+
+
+
+ Define
+ Die empfangenen Sensoren werden automatisch angelegt.
+ Die ID der angelegten Sensoren ist entweder der Kanal des Sensors, oder wenn das Attribut longid gesetzt ist, dann wird die ID aus dem Kanal und einer Reihe von Bits erzeugt, welche der Sensor beim Einschalten zufällig vergibt.
+
+
+
+ Generierte Readings:
+
+ - State (T: H:)
+ - temperature (°C)
+ - humidity: (Luftfeuchte (1-100)
+ - battery: (low oder ok)
+ - channel: (Der Sensor Kanal)
+
+
+ Attribute
+
+ - do_not_notify
+ - ignore
+ - model ()
+ - showtime
+ - readingFnAttributes
+
+
+
+ Set N/A
+
+
+ Set N/A
+
+
+
+=end html_DE
+=cut
diff --git a/fhem/FHEM/90_SIGNALduino_un.pm b/fhem/FHEM/90_SIGNALduino_un.pm
index be1c42c43..6799e4ff8 100644
--- a/fhem/FHEM/90_SIGNALduino_un.pm
+++ b/fhem/FHEM/90_SIGNALduino_un.pm
@@ -382,6 +382,8 @@ SIGNALduino_un_binflip($)
1;
=pod
+=item summary Helper module for SIGNALduino
+=item summary_DE Unterstützungsmodul für SIGNALduino
=begin html
@@ -426,7 +428,7 @@ SIGNALduino_un_binflip($)
SIGNALduino_un
Das SIGNALduino_un module ist ein Hilfsmodul um unbekannte Nachrichten debuggen und analysieren zu koennen.
- Das Modul legt keinerlei Geraete oder aehnliches an.
+ Das Modul legt keinerlei Geräte oder ähnliches an.
@@ -437,7 +439,7 @@ SIGNALduino_un_binflip($)
Es ist moeglich ein Geraet manuell zu definieren, aber damit passiert ueberhaupt nichts.
Autocreate wird auch keinerlei Geraete aus diesem Modul anlegen.
- Die einzgeste Funktion dieses Modules ist, ab Verbose 4 Logmeldungen ueber die Empfangene Nachricht ins Log zu schreiben. Dabei kann man sich leider nicht darauf verlassen, dass die Nachricht korrekt dekodiert wurde.
+ Die einzgeste Funktion dieses Modules ist, ab Verbose 4 Logmeldungen über die Empfangene Nachricht ins Log zu schreiben. Dabei kann man sich leider nicht darauf verlassen, dass die Nachricht korrekt dekodiert wurde.
Dieses Modul wird alle Nachrichten verarbeiten, welche von anderen Modulen nicht verarbeitet wurden.
Set N/A
diff --git a/fhem/FHEM/98_Dooya.pm b/fhem/FHEM/98_Dooya.pm
new file mode 100644
index 000000000..221f7a739
--- /dev/null
+++ b/fhem/FHEM/98_Dooya.pm
@@ -0,0 +1,1251 @@
+######################################################
+# $Id$
+#
+# Dooya module for FHEM
+# Thanks for templates/coding from Somfy and SIGNALduino team
+#
+# Needs SIGNALduino.
+# Published under GNU GPL License, v2
+# History:
+# 0.10 2016-02-16 Jarnsen initial template
+# 0.20 2016-03-06 darkmission first functions, renamed from 10_ to 99_
+# 0.21 2016-03-06 darkmission Bug default channel corrected, changed attribute repetition to SignalRepeats
+# 0.22 2016-03-10 darkmission code cleaned, renamed from 99_ to 98_
+# 0.23 2016-03-11 Jarnsen AttrList cleaned and change priority
+# 1.00 2016-03-12 darkmission autocreate, parse communication from SIGNALduino for correct position when using remote from doooya
+# 1.10 2016-03-13 Ralf9 changed SendCommand with sendMsg
+# 1.11 2016-03-17 Ralf9 ID + Channel = DeviceCode
+# 1.12 2016-04-26 Jarnsen im Dooya parse cmd geändert
+#
+#TODOS:
+# - Groups, diff by channels
+#
+#
+######################################################
+
+
+package main;
+
+use strict;
+use warnings;
+
+#use List::Util qw(first max maxstr min minstr reduce shuffle sum);
+
+my %codes = (
+ "01010101" => "stop", # stop the current movement
+ "00010001" => "off", # go "up"
+ "00110011" => "on", # go "down"
+ "11001100" => "prog", # finish pairing
+);
+
+my %sets = (
+ "off" => "noArg",
+ "on" => "noArg",
+ "down"=> "noArg",
+ "stop" => "noArg",
+ "prog" => "noArg",
+# "on-for-timer" => "textField",
+# "off-for-timer" => "textField",
+ "pos" => "0,10,20,30,40,50,60,70,80,90,100" # Todo: Warum nicht als Slider?
+# "pos" => "slider,0,10,100"
+);
+
+my %sendCommands = (
+ "off" => "off",
+ "open" => "off",
+ "on" => "on",
+ "close" => "on",
+ "prog" => "prog",
+ "stop" => "stop"
+);
+
+my %dooya_c2b; # Todo: Als internal speichern
+my $dooya_updateFreq = 3; # Interval for State update # Todo: Als internal speichern
+
+# supported models (blinds and shutters)
+my %models = (
+ dooyablinds => 'blinds',
+ dooyashutter => 'shutter'
+);
+
+
+##################################################
+# new globals for new set
+#
+
+my $dooya_posAccuracy = 2; # Todo: Als internal speichern
+my $dooya_maxRuntime = 50; # Todo: Als internal speichern
+
+my %positions = (
+ "moving" => "50",
+ "open" => "0",
+ "off" => "0",
+ "down" => "150",
+ "closed" => "200",
+ "on" => "200"
+);
+
+my %translations = (
+ "0" => "open",
+ "10" => "10",
+ "20" => "20",
+ "30" => "30",
+ "40" => "40",
+ "50" => "50",
+ "60" => "60",
+ "70" => "70",
+ "80" => "80",
+ "90" => "90",
+ "100" => "100",
+ "150" => "down",
+ "200" => "closed"
+);
+
+######################################################
+# Forward declarations
+#
+sub Dooya_CalcCurrentPos($$$$);
+
+######################################################
+sub myUtilsDooya_Initialize($) {
+ $modules{Dooya}{LOADED} = 1;
+ my $hash = $modules{Dooya};
+
+ Dooya_Initialize($hash);
+} # end sub myUtilsDooya_initialize
+
+######################################################
+sub Dooya_Initialize($) {
+ my ($hash) = @_;
+
+ # map commands from web interface to codes used in Dooya
+ foreach my $k ( keys %codes ) {
+ $dooya_c2b{ $codes{$k} } = $k;
+ }
+
+ $hash->{SetFn} = "Dooya_Set";
+ #$hash->{StateFn} = "Dooya_SetState";
+ $hash->{DefFn} = "Dooya_Define";
+ $hash->{UndefFn} = "Dooya_Undef";
+ $hash->{ParseFn} = "Dooya_Parse";
+ $hash->{AttrFn} = "Dooya_Attr";
+ $hash->{Match} = "^P16#[A-Fa-f0-9]+";
+ $hash->{AttrList} = " IODev"
+ . " SignalRepeats:5,10,15,20"
+ . " channel:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
+ . " drive-down-time-to-100"
+ . " drive-down-time-to-close"
+ . " drive-up-time-to-100"
+ . " drive-up-time-to-open"
+ . " additionalPosReading"
+ . " $readingFnAttributes"
+ . " setList"
+ . " ignore:0,1"
+ . " dummy:1,0"
+# . " model:dooyablinds,dooyashutter"
+ . " loglevel:0,1,2,3,4,5,6";
+
+ $hash->{AutoCreate} =
+ { "Dooya.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*",
+ FILTER => "%NAME",
+ autocreateThreshold => "2:10" } };
+}
+
+######################################################
+sub Dooya_StartTime($) {
+ my ($d) = @_;
+
+ my ($s, $ms) = gettimeofday();
+
+ my $t = $s + ($ms / 1000000); # 10 msec
+ my $t1 = 0;
+ $t1 = $d->{'starttime'} if(exists($d->{'starttime'} ));
+ $d->{'starttime'} = $t;
+ my $dt = sprintf("%.2f", $t - $t1);
+
+ return $dt;
+} # end sub Dooya_StartTime
+
+######################################################
+sub Dooya_Define($$) {
+ my ( $hash, $def ) = @_;
+ my @a = split( "[ \t][ \t]*", $def );
+
+ my $u = "wrong syntax: define Dooya id ";
+
+ # fail early and display syntax help
+ if ( int(@a) < 3 ) {
+ return $u;
+ }
+
+ my ($id, $channel) = split('_', $a[2]);
+ Log3 $hash,4 ,"Dooya_Define: id = $id channel = $channel";
+
+ # check id format (28 binaer digits)
+ if ( ( $id !~ m/^[0-1]{28}$/i ) ) {
+ return "Define $a[0]: wrong address format: specify a 28 binaer id value "
+ }
+
+ # group devices by their id
+ my $name = $a[0];
+
+ $hash->{ID} = uc($id);
+ $hash->{CHANNEL} = $channel;
+
+ my $tn = TimeNow();
+
+ my $code = uc($a[2]);
+ my $ncode = 1;
+ $hash->{CODE}{ $ncode++ } = $code;
+ $modules{Dooya}{defptr}{$code}{$name} = $hash;
+ $hash->{move} = 'stop';
+ AssignIoPort($hash);
+}
+
+######################################################
+sub Dooya_Undef($$) {
+ my ( $hash, $name ) = @_;
+
+ foreach my $c ( keys %{ $hash->{CODE} } ) {
+ $c = $hash->{CODE}{$c};
+
+ # As after a rename the $name my be different from the $defptr{$c}{$n}
+ # we look for the hash.
+ foreach my $dname ( keys %{ $modules{Dooya}{defptr}{$c} } ) {
+ if ( $modules{Dooya}{defptr}{$c}{$dname} == $hash ) {
+ delete( $modules{Dooya}{defptr}{$c}{$dname} );
+ }
+ }
+ }
+ return undef;
+}
+
+######################################################
+sub Dooya_SendCommand($@){
+
+ my ($hash, @args) = @_;
+ my $ret = undef;
+ my $cmd = $args[0];
+ my $message;
+ my $chan;
+ my $channel;
+ my $SignalRepeats;
+ my $name = $hash->{NAME};
+ my $bin;
+ my $numberOfArgs = int(@args);
+
+ Log3($name,4,"Dooya_sendCommand: $name -> cmd :$cmd: ");
+
+ my $command = $dooya_c2b{ $cmd };
+
+ # eigentlich ueberfluessig, da oben schon auf Existenz geprueft wird -> %sets
+ if ( !defined($command) ) {
+ return "Unknown argument $cmd, choose one of "
+ . join( " ", sort keys %dooya_c2b );
+ }
+
+ my $io = $hash->{IODev};
+
+ $SignalRepeats = AttrVal($name,'SignalRepeats', '10');
+ Log3 $io,4, "Dooya set SignalRepeats: $SignalRepeats for $io->{NAME}";
+
+ $chan = AttrVal($name,'channel', undef);
+ if (!defined($chan)) {
+ $chan = $hash->{CHANNEL};
+ }
+ $channel = sprintf("%04b",$chan);
+ Log3 $io,4, "Dooya set channel: $chan ($channel) for $io->{NAME}";
+
+ my $value = $name ." ". join(" ", @args);
+
+ $bin = uc($hash->{ID}) . $channel . $command;
+ #print ("data = $bin \n");
+
+ Log3 $io, 4, "Dooya set value = $value";
+
+ ## Send Message to IODev using IOWrite
+ $message = 'P16#' . $bin . '#R' . $SignalRepeats;
+ Log3 $io, 4, "Dooya_sendCommand: $name -> message :$message: ";
+ IOWrite($hash, 'sendMsg', $message);
+
+ return $ret;
+} # end sub Dooya_SendCommand
+
+######################################################
+sub Dooya_Runden($) {
+ my ($v) = @_;
+ if ( ( $v > 105 ) && ( $v < 195 ) ) {
+ $v = 150;
+ } else {
+ $v = int(($v + 5) /10) * 10;
+ }
+
+ return sprintf("%d", $v );
+} # end sub Dooya_Runden
+
+######################################################
+sub Dooya_Translate($) {
+ my ($v) = @_;
+
+ if(exists($translations{$v})) {
+ $v = $translations{$v}
+ }
+
+ return $v
+} # end sub Dooya_Runden
+
+######################################################
+sub Dooya_Parse($$) {
+
+ my ($hash, $msg) = @_;
+ my (undef ,$rawData) = split("#",$msg);
+
+ my $hlen = length($rawData);
+ my $blen = $hlen * 4;
+ my $bitData = unpack("B$blen", pack("H$hlen", $rawData));
+
+ Log3 $hash, 4, "Dooya_Parse: rawData = $rawData length: $hlen";
+ Log3 $hash, 4, "Dooya_Parse: converted to bits: $bitData";
+
+ # get id, channel, cmd
+ my $id = substr($bitData, 0, 28);
+ my $BitChannel = substr($bitData, 28, 4); #noch nicht benoetigt
+ my $channel = oct("0b" . $BitChannel);
+ my $cmd = substr($bitData, 32, 4);
+ my $newstate = $codes{ $cmd . $cmd}; # set new state
+ my $deviceCode = $id . '_' . $channel;
+
+ Log3 $hash, 4, "Dooya_Parse: device ID: $id";
+ Log3 $hash, 4, "Dooya_Parse: Channel: $channel";
+ Log3 $hash, 4, "Dooya_Parse: Cmd: $cmd Newstate: $newstate";
+ Log3 $hash, 4, "Dooya_Parse: deviceCode: $deviceCode";
+
+ my $def = $modules{Dooya}{defptr}{$deviceCode};
+
+ if($def) {
+ my @list;
+ foreach my $name (keys %{ $def }) {
+ my $lh = $def->{$name};
+ $name = $lh->{NAME}; # It may be renamed
+
+ return "" if(IsIgnored($name)); # Little strange.
+
+ # update the state and log it
+ ### NEEDS to be deactivated due to the state being maintained by the timer
+ # readingsSingleUpdate($lh, "state", $newstate, 1);
+ readingsSingleUpdate($lh, "parsestate", $newstate, 1);
+
+ Log3 $name, 4, "Dooya_Parse $name $newstate";
+
+ push(@list, $name);
+ }
+ # return list of affected devices
+ return @list;
+
+ } else {
+ Log3 $hash, 3, "Dooya Unknown device $deviceCode, please define it";
+ return "UNDEFINED Dooya_$deviceCode Dooya $deviceCode";
+ }
+}
+
+######################################################
+sub Dooya_Attr(@) {
+ my ($cmd,$name,$aName,$aVal) = @_;
+ my $hash = $defs{$name};
+
+ return "\"Dooya Attr: \" $name does not exist" if (!defined($hash));
+
+ # $cmd can be "del" or "set"
+ # $name is device name
+ # aName and aVal are Attribute name and value
+ if ($cmd eq "set") {
+ if($aName eq 'drive-up-time-to-100') {
+ return "Dooya_attr: value must be >=0 and <= 100" if($aVal < 0 || $aVal > 100);
+ } elsif ($aName =~/drive-(down|up)-time-to.*/) {
+ # check name and value
+ return "Dooya_attr: value must be >0 and <= 100" if($aVal <= 0 || $aVal > 100);
+ }
+
+ if ($aName eq 'drive-down-time-to-100') {
+ $attr{$name}{'drive-down-time-to-100'} = $aVal;
+ $attr{$name}{'drive-down-time-to-close'} = $aVal if(!defined($attr{$name}{'drive-down-time-to-close'}) || ($attr{$name}{'drive-down-time-to-close'} < $aVal));
+
+ } elsif($aName eq 'drive-down-time-to-close') {
+ $attr{$name}{'drive-down-time-to-close'} = $aVal;
+ $attr{$name}{'drive-down-time-to-100'} = $aVal if(!defined($attr{$name}{'drive-down-time-to-100'}) || ($attr{$name}{'drive-down-time-to-100'} > $aVal));
+
+ } elsif($aName eq 'drive-up-time-to-100') {
+ $attr{$name}{'drive-up-time-to-100'} = $aVal;
+
+ } elsif($aName eq 'drive-up-time-to-open') {
+ $attr{$name}{'drive-up-time-to-open'} = $aVal;
+ $attr{$name}{'drive-up-time-to-100'} = 0 if(!defined($attr{$name}{'drive-up-time-to-100'}) || ($attr{$name}{'drive-up-time-to-100'} > $aVal));
+ }
+ }
+
+ return undef;
+}
+
+##################################################
+### New set (state) method (using internalset)
+###
+### Reimplemented calculations for position readings and state
+### Allowed sets to be done without sending actually commands to the blinds
+### syntax set [ ]
+### position and state are also updated on stop or other commands based on remaining time
+### position is handled between 0 and 100 blinds down but not completely closed and 200 completely closed
+### if timings for 100 and close are equal no position above 100 is used (then 100 == closed)
+### position is rounded to a value of 5 and state is rounded to a value of 10
+#
+### General assumption times are rather on the upper limit to reach desired state
+
+
+# Readings
+## state contains rounded (to 10) position and/or textField
+## position contains rounded position (limited detail)
+
+# STATE
+## might contain position or textual form of the state (same as STATE reading)
+
+
+######################################################
+# call with hash, name, [virtual/send], set-args (send is default if ommitted)
+sub Dooya_Set($@) {
+ my ( $hash, $name, @args ) = @_;
+
+ if ( lc($args[0]) =~m/(virtual|send)/ ) {
+ Dooya_InternalSet( $hash, $name, @args );
+ } else {
+ Dooya_InternalSet( $hash, $name, 'send', @args );
+ }
+}
+
+######################################################
+# call with hash, name, virtual/send, set-args
+sub Dooya_InternalSet($@) {
+ my ( $hash, $name, $mode, @args ) = @_;
+
+ ### Check Args
+ return "Dooya_InternalSet: mode must be virtual or send: $mode " if ( $mode !~m/(virtual|send)/ );
+
+ my $numberOfArgs = int(@args);
+ return "Dooya_set: No set value specified" if ( $numberOfArgs < 1 );
+
+ my $cmd = lc($args[0]);
+
+ # just a number provided, assume "pos" command
+ if ($cmd =~ m/\d{1,3}/) {
+ pop @args;
+ push @args, "pos";
+ push @args, $cmd;
+
+ $cmd = "pos";
+ $numberOfArgs = int(@args);
+ }
+
+ if(!exists($sets{$cmd})) {
+ my @cList;
+
+ # overwrite %sets with setList
+ my $atts = AttrVal($name,'setList',"");
+ my %setlist = split("[: ][ ]*", $atts);
+
+ foreach my $k (sort keys %sets) {
+ my $opts = undef;
+ $opts = $sets{$k};
+ $opts = $setlist{$k} if(exists($setlist{$k}));
+
+ if (defined($opts)) {
+ push(@cList,$k . ':' . $opts);
+ } else {
+ push (@cList,$k);
+ }
+ } # end foreach
+
+ return "Dooya_set: Unknown argument $cmd, choose one of " . join(" ", @cList);
+ } # error unknown cmd handling
+
+ my $arg1 = "";
+ if ( $numberOfArgs >= 2 ) {
+ $arg1 = $args[1];
+ }
+
+ return "Dooya_set: Bad time spec" if($cmd =~m/(on|off)-for-timer/ && $numberOfArgs == 2 && $arg1 !~ m/^\d*\.?\d+$/);
+
+ # read timing variables
+ my ($t1down100, $t1downclose, $t1upopen, $t1up100) = Dooya_getTimingValues($hash);
+ Log3($name,5,"Dooya_set: $name -> timings -> td1:$t1down100: tdc :$t1downclose: tuo :$t1upopen: tu1 :$t1up100: ");
+
+ my $model = AttrVal($name,'model',$models{dooyablinds});
+
+ if($cmd eq 'pos') {
+ return "Dooya_set: No pos specification" if(!defined($arg1));
+ return "Dooya_set: $arg1 must be > 0 and < 100 for pos" if($arg1 < 0 || $arg1 > 100);
+ return "Dooya_set: Please set attr drive-down-time-to-100, drive-down-time-to-close, etc"
+ if(!defined($t1downclose) || !defined($t1down100) || !defined($t1upopen) || !defined($t1up100));
+ }
+
+ ### initialize locals
+ my $drivetime = 0; # timings until halt command to be sent for on/off-for-timer and pos -> move by time
+ my $updatetime = 0; # timing until update of pos to be done for any unlimited move move to endpos or go-my / stop
+ my $move = $cmd;
+ my $newState;
+ my $updateState;
+
+ # get current infos
+ my $state = $hash->{STATE};
+ my $pos = ReadingsVal($name,'exact',undef);
+ if ( !defined($pos) ) {
+ $pos = ReadingsVal($name,'position',undef);
+ }
+
+ # translate state info to numbers - closed = 200 , open = 0 (correct missing values)
+ if ( !defined($pos) ) {
+ if(exists($positions{$state})) {
+ $pos = $positions{$state};
+ } else {
+ $pos = $state;
+ }
+ $pos = sprintf( "%d", $pos );
+ }
+
+ Log3($name,4,"Dooya_set: $name -> entering with mode :$mode: cmd :$cmd: arg1 :$arg1: pos :$pos: ");
+
+ # check timer running - stop timer if running and update detail pos
+ # recognize timer running if internal updateState is still set
+ if ( defined( $hash->{updateState} )) {
+ # timer is running so timer needs to be stopped and pos needs update
+ RemoveInternalTimer($hash);
+
+ $pos = Dooya_CalcCurrentPos( $hash, $hash->{move}, $pos, Dooya_UpdateStartTime($hash) );
+ delete $hash->{starttime};
+ delete $hash->{updateState};
+ delete $hash->{runningtime};
+ delete $hash->{runningcmd};
+ }
+
+ ################ No error returns after this point to avoid stopped timer causing confusion...
+
+ # calc posRounded
+ my $posRounded = Dooya_RoundInternal( $pos );
+
+ ### handle commands
+ if(!defined($t1downclose) || !defined($t1down100) || !defined($t1upopen) || !defined($t1up100)) {
+ #if timings not set
+
+ if($cmd eq 'on') {
+ $newState = 'closed';
+# $newState = 'moving';
+# $updatetime = $dooya_maxRuntime;
+# $updateState = 'closed';
+ } elsif($cmd eq 'off') {
+ $newState = 'open';
+# $newState = 'moving';
+# $updatetime = $dooya_maxRuntime;
+# $updateState = 'open';
+
+ } elsif($cmd eq 'on-for-timer') {
+ # elsif cmd == on-for-timer - time x
+ $move = 'on';
+ $newState = 'moving';
+ $drivetime = $arg1;
+ if ( $drivetime == 0 ) {
+ $move = 'stop';
+ } else {
+ $updateState = 'moving';
+ }
+
+ } elsif($cmd eq 'off-for-timer') {
+ # elsif cmd == off-for-timer - time x
+ $move = 'off';
+ $newState = 'moving';
+ $drivetime = $arg1;
+ if ( $drivetime == 0 ) {
+ $move = 'stop';
+ } else {
+ $updateState = 'moving';
+ }
+
+ } elsif($cmd =~m/stop|go-my/) {
+ $move = 'stop';
+ $newState = $state
+
+ } else {
+ $newState = $state;
+ }
+
+ ###else (here timing is set)
+ } else {
+ # default is roundedPos as new StatePos
+ $newState = $posRounded;
+
+ if($cmd eq 'on') {
+ if ( $posRounded == 200 ) {
+ # if pos == 200 - no state pos change / no timer
+ } elsif ( $posRounded >= 100 ) {
+ # elsif pos >= 100 - set timer for 100-to-closed --> update timer(newState 200)
+ my $remTime = ( $t1downclose - $t1down100 ) * ( (200-$pos) / 100 );
+ $updatetime = $remTime;
+
+ $updateState = 200;
+ } elsif ( $posRounded < 100 ) {
+ # elseif pos < 100 - set timer for remaining time to 100+time-to-close --> update timer( newState 200)
+ my $remTime = $t1down100 * ( (100 - $pos) / 100 );
+ $updatetime = ( $t1downclose - $t1down100 ) + $remTime;
+ $updateState = 200;
+ } else {
+ # else - unknown pos - assume pos 0 set timer for full time --> update timer( newState 200)
+ $newState = 0;
+ $updatetime = $t1downclose;
+ $updateState = 200;
+ }
+
+ } elsif($cmd eq 'off') {
+ if ( $posRounded == 0 ) {
+ # if pos == 0 - no state pos change / no timer
+ } elsif ( $posRounded <= 100 ) {
+ # elsif pos <= 100 - set timer for remaining time to 0 --> update timer( newState 0 )
+ my $remTime = ( $t1upopen - $t1up100 ) * ( $pos / 100 );
+ $updatetime = $remTime;
+ $updateState = 0;
+ } elsif ( $posRounded > 100 ) {
+ # elseif ( pos > 100 ) - set timer for remaining time to 100+time-to-open --> update timer( newState 0 )
+ my $remTime = $t1up100 * ( ($pos - 100 ) / 100 );
+ $updatetime = ( $t1upopen - $t1up100 ) + $remTime;
+ $updateState = 0;
+ } else {
+ # else - unknown pos assume pos 200 set time for full time --> update timer( newState 0 )
+ $newState = 200;
+ $updatetime = $t1upopen;
+ $updateState = 0;
+ }
+
+ } elsif($cmd eq 'pos') {
+ if ( $pos < $arg1 ) {
+ # if pos < x - set halt timer for remaining time to x / cmd close --> halt timer`( newState x )
+ $move = 'on';
+ my $remTime = $t1down100 * ( ( $arg1 - $pos ) / 100 );
+ $drivetime = $remTime;
+ $updateState = $arg1;
+ } elsif ( ( $pos >= $arg1 ) && ( $posRounded <= 100 ) ) {
+ # elsif pos <= 100 & pos > x - set halt timer for remaining time to x / cmd open --> halt timer ( newState x )
+ $move = 'off';
+ my $remTime = ( $t1upopen - $t1up100 ) * ( ( $pos - $arg1) / 100 );
+ $drivetime = $remTime;
+ if ( $drivetime == 0 ) {
+ # $move = 'stop'; # avoid sending stop to move to my-pos
+ $move = 'none';
+ } else {
+ $updateState = $arg1;
+ }
+ } elsif ( $pos > 100 ) {
+ # else if pos > 100 - set timer for remaining time to 100+time for 100-x / cmd open --> halt timer ( newState x )
+ $move = 'off';
+ my $remTime = ( $t1upopen - $t1up100 ) * ( ( 100 - $arg1) / 100 );
+ my $posTime = $t1up100 * ( ( $pos - 100) / 100 );
+ $drivetime = $remTime + $posTime;
+ $updateState = $arg1;
+ } else {
+ # else - send error (might be changed to first open completely then drive to pos x) / assume open
+ $newState = 0;
+ $move = 'on';
+ my $remTime = $t1down100 * ( ( $arg1 - 0 ) / 100 );
+ $drivetime = $remTime;
+ $updateState = $arg1;
+ ### return "Dooya_set: Pos not currently known please open or close first";
+ }
+
+ } elsif($cmd =~m/stop|go-my/) {
+ # update pos according to current detail pos
+ $move = 'stop';
+
+ } elsif($cmd eq 'off-for-timer') {
+ # calcPos at new time y / cmd close --> halt timer ( newState y )
+ $move = 'off';
+ $drivetime = $arg1;
+ if ( $drivetime == 0 ) {
+ $move = 'stop';
+ } else {
+ $updateState = Dooya_CalcCurrentPos( $hash, $move, $pos, $arg1 );
+ }
+
+ } elsif($cmd eq 'on-for-timer') {
+ # calcPos at new time y / cmd open --> halt timer ( newState y )
+ $move = 'on';
+ $drivetime = $arg1;
+ if ( $drivetime == 0 ) {
+ $move = 'stop';
+ } else {
+ $updateState = Dooya_CalcCurrentPos( $hash, $move, $pos, $arg1 );
+ }
+
+ }
+
+ ## special case close is at 100 ("markisen")
+ if( ( $t1downclose == $t1down100) && ( $t1up100 == 0 ) ) {
+ if ( defined( $updateState )) {
+ $updateState = min( 100, $updateState );
+ }
+ $newState = min( 100, $posRounded );
+ }
+ }
+
+ ### update hash / readings
+ Log3($name,3,"Dooya_set: handled command $cmd --> move :$move: newState :$newState: ");
+ if ( defined($updateState)) {
+ Log3($name,5,"Dooya_set: handled for drive/udpate: updateState :$updateState: drivet :$drivetime: updatet :$updatetime: ");
+ } else {
+ Log3($name,5,"Dooya_set: handled for drive/udpate: updateState :: drivet :$drivetime: updatet :$updatetime: ");
+ }
+
+ # bulk update should do trigger if virtual mode
+ Dooya_UpdateState( $hash, $newState, $move, $updateState, ( $mode eq 'virtual' ) );
+
+ ### send command
+ if ( $mode ne 'virtual' ) {
+ if(exists($sendCommands{$move})) {
+ $args[0] = $sendCommands{$move};
+ Dooya_SendCommand($hash,@args);
+ } elsif ( $move eq 'none' ) {
+ # do nothing if commmand / move is set to none
+ } else {
+ Log3($name,1,"Dooya_set: Error - unknown move for sendCommands: $move");
+ }
+ }
+
+ ### start timer
+ if ( $mode eq 'virtual' ) {
+ # in virtual mode define drivetime as updatetime only, so no commands will be send
+ if ( $updatetime == 0 ) {
+ $updatetime = $drivetime;
+ }
+ $drivetime = 0;
+ }
+
+ ### update time stamp
+ Dooya_UpdateStartTime($hash);
+ $hash->{runningtime} = 0;
+ if($drivetime > 0) {
+ $hash->{runningcmd} = 'stop';
+ $hash->{runningtime} = $drivetime;
+ } elsif($updatetime > 0) {
+ $hash->{runningtime} = $updatetime;
+ }
+
+ if($hash->{runningtime} > 0) {
+ # timer fuer stop starten
+ if ( defined( $hash->{runningcmd} )) {
+ Log3($name,4,"Dooya_set: $name -> stopping in $hash->{runningtime} sec");
+ } else {
+ Log3($name,4,"Dooya_set: $name -> update state in $hash->{runningtime} sec");
+ }
+ my $utime = $hash->{runningtime} ;
+ if($utime > $dooya_updateFreq) {
+ $utime = $dooya_updateFreq;
+ }
+ InternalTimer(gettimeofday()+$utime,"Dooya_TimedUpdate",$hash,0);
+ } else {
+ delete $hash->{runningtime};
+ delete $hash->{starttime};
+ }
+
+ return undef;
+} # end sub Dooya_setFN
+######################################################
+
+######################################################
+###
+### Helper for set routine
+###
+######################################################
+
+######################################################
+sub Dooya_RoundInternal($) { # Todo: kann das nicht die Round Funktion von FHEM?
+ my ($v) = @_;
+ return sprintf("%d", ($v + ($dooya_posAccuracy/2)) / $dooya_posAccuracy) * $dooya_posAccuracy;
+} # end sub Dooya_RoundInternal
+
+######################################################
+sub Dooya_UpdateStartTime($) {
+ my ($d) = @_;
+
+ my ($s, $ms) = gettimeofday();
+
+ my $t = $s + ($ms / 1000000); # 10 msec
+ my $t1 = 0;
+ $t1 = $d->{starttime} if(exists($d->{starttime} ));
+ $d->{starttime} = $t;
+ my $dt = sprintf("%.2f", $t - $t1);
+
+ return $dt;
+} # end sub Dooya_UpdateStartTime
+
+######################################################
+sub Dooya_TimedUpdate($) {
+ my ($hash) = @_;
+
+ Log3($hash->{NAME},4,"Dooya_TimedUpdate");
+
+ # get current infos
+ my $pos = ReadingsVal($hash->{NAME},'exact',undef);
+ Log3($hash->{NAME},5,"Dooya_TimedUpdate : pos so far : $pos");
+
+ my $dt = Dooya_UpdateStartTime($hash);
+ my $nowt = gettimeofday();
+
+ $pos = Dooya_CalcCurrentPos( $hash, $hash->{move}, $pos, $dt );
+# my $posRounded = Dooya_RoundInternal( $pos );
+
+ Log3($hash->{NAME},5,"Dooya_TimedUpdate : delta time : $dt new rounde pos (rounded): $pos ");
+
+ $hash->{runningtime} = $hash->{runningtime} - $dt;
+ if ( $hash->{runningtime} <= 0.1) {
+ if ( defined( $hash->{runningcmd} ) ) {
+ Dooya_SendCommand($hash, $hash->{runningcmd});
+ }
+ # trigger update from timer
+ Dooya_UpdateState( $hash, $hash->{updateState}, 'stop', undef, 1 );
+ delete $hash->{starttime};
+ delete $hash->{runningtime};
+ delete $hash->{runningcmd};
+ } else {
+ my $utime = $hash->{runningtime} ;
+ if($utime > $dooya_updateFreq) {
+ $utime = $dooya_updateFreq;
+ }
+ Dooya_UpdateState( $hash, $pos, $hash->{move}, $hash->{updateState}, 1 );
+ if ( defined( $hash->{runningcmd} )) {
+ Log3($hash->{NAME},4,"Dooya_TimedUpdate: $hash->{NAME} -> stopping in $hash->{runningtime} sec");
+ } else {
+ Log3($hash->{NAME},4,"Dooya_TimedUpdate: $hash->{NAME} -> update state in $hash->{runningtime} sec");
+ }
+ my $nstt = max($nowt+$utime-0.01, gettimeofday()+.1 );
+ Log3($hash->{NAME},5,"Dooya_TimedUpdate: $hash->{NAME} -> next time to stop: $nstt");
+ InternalTimer($nstt,"Dooya_TimedUpdate",$hash,0);
+ }
+
+ Log3($hash->{NAME},5,"Dooya_TimedUpdate DONE");
+} # end sub Dooya_TimedUpdate
+
+######################################################
+# Dooya_UpdateState( $hash, $newState, $move, $updateState );
+sub Dooya_UpdateState($$$$$) {
+ my ($hash, $newState, $move, $updateState, $doTrigger) = @_;
+
+ my $addtlPosReading = AttrVal($hash->{NAME},'additionalPosReading',undef);
+ if ( defined($addtlPosReading )) {
+ $addtlPosReading = undef if ( ( $addtlPosReading eq "" ) or ( $addtlPosReading eq "state" ) or ( $addtlPosReading eq "position" ) or ( $addtlPosReading eq "exact" ) );
+ }
+
+ readingsBeginUpdate($hash);
+
+ if(exists($positions{$newState})) {
+ readingsBulkUpdate($hash,"state",$newState);
+ $hash->{STATE} = $newState;
+
+ readingsBulkUpdate($hash,"position",$positions{$newState});
+ $hash->{position} = $positions{$newState};
+
+ readingsBulkUpdate($hash,$addtlPosReading,$positions{$newState}) if ( defined($addtlPosReading) );
+
+ } else {
+ my $rounded = Dooya_Runden( $newState );
+ my $stateTrans = Dooya_Translate( $rounded );
+ readingsBulkUpdate($hash,"state",$stateTrans);
+ $hash->{STATE} = $stateTrans;
+
+ readingsBulkUpdate($hash,"position",$rounded);
+ $hash->{position} = $rounded;
+
+ readingsBulkUpdate($hash,$addtlPosReading,$rounded) if ( defined($addtlPosReading) );
+
+
+ }
+
+ readingsBulkUpdate($hash,"exact",$newState);
+ $hash->{exact} = $newState;
+
+ if ( defined( $updateState ) ) {
+ $hash->{updateState} = $updateState;
+ } else {
+ delete $hash->{updateState};
+ }
+ $hash->{move} = $move;
+
+ readingsEndUpdate($hash,$doTrigger);
+} # end sub Dooya_UpdateState
+
+######################################################
+# Return timingvalues from attr and after correction
+sub Dooya_getTimingValues($) {
+ my ($hash) = @_;
+
+ my $name = $hash->{NAME};
+
+ my $t1down100 = AttrVal($name,'drive-down-time-to-100',undef);
+ my $t1downclose = AttrVal($name,'drive-down-time-to-close',undef);
+ my $t1upopen = AttrVal($name,'drive-up-time-to-open',undef);
+ my $t1up100 = AttrVal($name,'drive-up-time-to-100',undef);
+
+ return (undef, undef, undef, undef) if(!defined($t1downclose) || !defined($t1down100) || !defined($t1upopen) || !defined($t1up100));
+
+ if ( ( $t1downclose < 0 ) || ( $t1down100 < 0 ) || ( $t1upopen < 0 ) || ( $t1up100 < 0 ) ) {
+ Log3($name,1,"Dooya_getTimingValues: $name time values need to be positive values");
+ return (undef, undef, undef, undef);
+ }
+
+ if ( $t1downclose < $t1down100 ) {
+ Log3($name,1,"Dooya_getTimingValues: $name close time needs to be higher or equal than time to pos100");
+ return (undef, undef, undef, undef);
+ } elsif ( $t1downclose == $t1down100 ) {
+ $t1up100 = 0;
+ }
+
+ if ( $t1upopen <= $t1up100 ) {
+ Log3($name,1,"Dooya_getTimingValues: $name open time needs to be higher or equal than time to pos100");
+ return (undef, undef, undef, undef);
+ }
+
+ if ( $t1upopen < 1 ) {
+ Log3($name,1,"Dooya_getTimingValues: $name time to open needs to be at least 1 second");
+ return (undef, undef, undef, undef);
+ }
+
+ if ( $t1downclose < 1 ) {
+ Log3($name,1,"Dooya_getTimingValues: $name time to close needs to be at least 1 second");
+ return (undef, undef, undef, undef);
+ }
+
+ return ($t1down100, $t1downclose, $t1upopen, $t1up100);
+}
+
+######################################################
+# call with hash, translated state
+sub Dooya_CalcCurrentPos($$$$) {
+ my ($hash, $move, $pos, $dt) = @_;
+ my $name = $hash->{NAME};
+ my $newPos = $pos;
+
+ # Attributes for calculation
+ my ($t1down100, $t1downclose, $t1upopen, $t1up100) = Dooya_getTimingValues($hash);
+
+ if(defined($t1down100) && defined($t1downclose) && defined($t1up100) && defined($t1upopen)) {
+ if( ( $t1downclose == $t1down100) && ( $t1up100 == 0 ) ) {
+ $pos = min( 100, $pos );
+ if($move eq 'on') {
+ $newPos = min( 100, $pos );
+ if ( $pos < 100 ) {
+ # calc remaining time to 100%
+ my $remTime = ( 100 - $pos ) * $t1down100 / 100;
+ if ( $remTime > $dt ) {
+ $newPos = $pos + ( $dt * 100 / $t1down100 );
+ }
+ }
+
+ } elsif($move eq 'off') {
+ $newPos = max( 0, $pos );
+ if ( $pos > 0 ) {
+ $newPos = $dt * 100 / ( $t1upopen );
+ $newPos = max( 0, ($pos - $newPos) );
+ }
+ } else {
+ Log3($name,1,"Dooya_CalcCurrentPos: $name move wrong $move");
+ }
+ } else {
+ if($move eq 'on') {
+ if ( $pos >= 100 ) {
+ $newPos = $dt * 100 / ( $t1downclose - $t1down100 );
+ $newPos = min( 200, $pos + $newPos );
+ } else {
+ # calc remaining time to 100%
+ my $remTime = ( 100 - $pos ) * $t1down100 / 100;
+ if ( $remTime > $dt ) {
+ $newPos = $pos + ( $dt * 100 / $t1down100 );
+ } else {
+ $dt = $dt - $remTime;
+ $newPos = 100 + ( $dt * 100 / ( $t1downclose - $t1down100 ) );
+ }
+ }
+
+ } elsif($move eq 'off') {
+
+ if ( $pos <= 100 ) {
+ $newPos = $dt * 100 / ( $t1upopen - $t1up100 );
+ $newPos = max( 0, $pos - $newPos );
+ } else {
+ # calc remaining time to 100%
+ my $remTime = ( $pos - 100 ) * $t1up100 / 100;
+ if ( $remTime > $dt ) {
+ $newPos = $pos - ( $dt * 100 / $t1up100 );
+ } else {
+ $dt = $dt - $remTime;
+ $newPos = 100 - ( $dt * 100 / ( $t1upopen - $t1up100 ) );
+ }
+ }
+ } else {
+ Log3($name,1,"Dooya_CalcCurrentPos: $name move wrong $move");
+ }
+ }
+ } else {
+ ### no timings set so just assume it is always moving
+ $newPos = $positions{'moving'};
+ }
+
+ return $newPos;
+}
+
+######################################################
+######################################################
+######################################################
+
+1;
+
+
+=pod
+=item summary Supports rf shutters from dooya
+=item summary_DE Unterstützt dooya Funkrolladen
+=begin html
+
+
+Dooya protocol
+
+ The Dooya protocol is used by a wide range of devices,
+ which are either senders or receivers/actuators.
+ The RECIVING and SENDING of Dooya commands is implemented in the SIGNALduino, so this module currently supports
+ devices like blinds and shutters. The Dooya protocol is used from a lot of different shutter companies in Germanyr. Examples are Rohrmotor24 or Nobily.
+
+
+
+
+ 4: sduino/msg READ: MU;P0=4717;P1=-1577;P2=284;P3=-786;P4=649;P5=-423;D=01232345[......]445232;CP=2;
+ 4: sduino: Fingerprint for MU Protocol id 16 -> Dooya shutter matches, trying to demodulate
+ 4: sduino: decoded matched MU Protocol id 16 dmsg u16#370658E133 length 40
+ 4: SIGNALduino_unknown Protocol: 16
+ 4: SIGNALduino_unknown converted to bits: 0011011100000110010110001110000100110011
+ 4: SIGNALduino_unknown / shutter Dooya 0011011100000110010110001110000100110011 received
+ 4: 00110111000001100101100 1110 0001 0011 0011
+ 4: SIGNALduino_unknown found shutter from Dooya. id=3606104, remotetype=14, channel=1, direction=down, all_shutters=false
+
+
+
+
a SIGNALduino device (must be defined first)
+
+
+
+
+
+
+ Define
+
+
+ define <name> Dooya <id>_<channel>
+
+
+ The id is a 28-digit binar code, that uniquely identifies a single remote control.
+
+ Pairing is done by setting the shutter in programming mode, either by disconnecting/reconnecting the power,
+ and by pressing the program button on an already associated remote.
+
+ Once the shutter is in programming mode, send the "prog" command from within FHEM to complete the pairing.
+ The shutter will peep shortly to indicate completion.
+
+ You are now able to control this blind from FHEM, the receiver thinks it is just another remote control or the real exist remote.
+ For the shutter it´s the same.
+
+
+ <id> is a 28 digit binar number that uniquely identifies FHEM as a new remote control.
+
You can use a different one for each device definition, and group them using a structure. You can use the same ID for a couple of shutters
+ and you can give every one an other channel. (0 to 15, 0 ist the MASTER and conrols all other channels.)
+ If you set one of them, you need to pick the same address as an existing remote. You can create the Device with autocreate with a real remote or manuel without remote control.
+
+
+
+ Examples:
+
+ define Rollo_Master Dooya 0011011100000110010110001110_0
Rollo_Master channel 0 controls all shutters (channel 1 - 15) with the same ID, in this case Rollo_1 and Rollo_2
+
+ define Rollo_1 Dooya 0011011100000110010110001110_1
Rollo_1 channel 1
+ define Rollo_2 Dooya 0011011100000110010110101110_2
Rollo_2 channel 2
+
+
+
+
+
+ Set
+
+ set <name> <value> [<time>]
+
+ where value is one of:
+
+ on
+ off
+ stop
+ pos value (0..100) # see note
+ prog # Special, see note
+
+ Examples:
+
+ set rollo_1 on
+ set rollo_1 on,sleep 1,rollo_2 on,sleep 1,rollo_3 on
+ set rollo_1 off
+ set rollo_1 pos 50
+
+
+ Notes:
+
+ - prog is a special command used to pair the receiver to FHEM:
+ Set the receiver in programming mode and send the "prog" command from FHEM to finish pairing.
+ The shutter will peep shortly to indicate success.
+
+ - pos value
+
+ The position is variying between 0 completely open and 100 for covering the full window.
+ The position must be between 0 and 100 and the appropriate
+ attributes drive-down-time-to-100, drive-down-time-to-close,
+ drive-up-time-to-100 and drive-up-time-to-open must be set.
+
+
+
+ The position reading distinuishes between multiple cases
+
+ - Without timing values set only generic values are used for status and position:
open, closed, moving
are used
+
+ - With timing values set but drive-down-time-to-close equal to drive-down-time-to-100 and drive-up-time-to-100 equal 0
+ the device is considered to only vary between 0 and 100 (100 being completely closed)
+
+ - With full timing values set the device is considerd a window shutter (Rolladen) with a difference between
+ covering the full window (position 100) and being completely closed (position 200)
+
+
+
+
+
+
+ Get
+ N/A
+
+
+ Attributes
+
+
+ - IODev
+ Set the IO or physical device which should be used for sending signals
+ for this "logical" device. It must be the SIGNALduino.
+ Note: The IODev has to be set, otherwise no commands will be sent!
+
+
+
+ - channel
+ Set the channel of the remote. You can use 0 (MASTER) to 15.
+ Note: The MASTER conrols all remotes with the same ID!!!
+
+
+
+ - SignalRepeats
+ Set the repeats for sending signal. You can use 5, 10, 15 and 20.
+
+
+
+ - setList
+ Space separated list of commands, which will be returned upon "set name ?",
+ so the FHEMWEB frontend can construct the correct control and command dropdown. Specific controls can be added after a colon for each command
+
+
+
+
+ - additionalPosReading
+ Position of the shutter will be stored in the reading pos as numeric value.
+ Additionally this attribute might specify a name for an additional reading to be updated with the same value than the pos.
+
+
+
+
+
+
+ - eventMap
+ Replace event names and set arguments. The value of this attribute
+ consists of a list of space separated values, each value is a colon
+ separated pair. The first part specifies the "old" value, the second
+ the new/desired value. If the first character is slash(/) or comma(,)
+ then split not by space but by this character, enabling to embed spaces.
+ Examples:
+
+ attr store eventMap on:open off:closed
+ attr store eventMap /on-for-timer 10:open/off:closed/
+ set store open
+
+
+
+
+
+ - do_not_notify
+
+ - dummy
+ Set the device attribute dummy to define devices which should not
+ output any radio signals. Associated notifys will be executed if
+ the signal is received. Used e.g. to react to a code from a sender, but
+ it will not emit radio signal if triggered in the web frontend.
+
+
+ - loglevel
+
+ - showtime
+
+
+
+
+ - ignore
+ Ignore this device, e.g. if it belongs to your neighbour. The device
+ won't trigger any FileLogs/notifys, issued commands will silently
+ ignored (no RF signal will be sent out, just like for the dummy attribute). The device won't appear in the
+ list command (only if it is explicitely asked for it), nor will it
+ appear in commands which use some wildcard/attribute as name specifiers
+ (see devspec). You still get them with the
+ "ignored=1" special devspec.
+
+
+
+ - drive-down-time-to-100
+ The time the blind needs to drive down from "open" (pos 0) to pos 100.
+ In this position, the lower edge touches the window frame, but it is not completely shut.
+ For a mid-size window this time is about 12 to 15 seconds.
+
+
+
+ - drive-down-time-to-close
+ The time the blind needs to drive down from "open" (pos 0) to "close", the end position of the blind.
+ This is about 3 to 5 seonds more than the "drive-down-time-to-100" value.
+
+
+
+ - drive-up-time-to-100
+ The time the blind needs to drive up from "close" (endposition) to "pos 100".
+ This usually takes about 3 to 5 seconds.
+
+
+
+ - drive-up-time-to-open
+ The time the blind needs drive up from "close" (endposition) to "open" (upper endposition).
+ This value is usually a bit higher than "drive-down-time-to-close", due to the blind's weight.
+
+
+
+
+
+
+ Generated events:
+
+ From a Dooya device you can receive one of the following events.
+ - on
+ - off
+ - stop
+ Which event is sent is device dependent and can sometimes be configured on
+ the device.
+
+
+
+
+
+=end html
+=cut
diff --git a/fhem/FHEM/firmware/SIGNALduino_nano328.hex b/fhem/FHEM/firmware/SIGNALduino_nano328.hex
index 7e30baafe..7270f191c 100644
--- a/fhem/FHEM/firmware/SIGNALduino_nano328.hex
+++ b/fhem/FHEM/firmware/SIGNALduino_nano328.hex
@@ -1,1155 +1,1095 @@
-:100000000C9477000C949F130C94C6130C949F00CF
-:100010000C949F000C949F000C949F000C949F00E4
-:100020000C949F000C949F000C949F000C949F00D4
-:100030000C949F000C947F080C949F000C949F00DC
-:100040000C94ED130C949F000C94B1160C94E316D1
-:100050000C949F000C949F000C949F000C949F00A4
-:100060000C949F000C949F003B4D433D003B4D552D
-:100070003D004D533D00556E737570706F72746521
-:100080006420636F6D6D616E640020557365206F31
-:100090006E65206F6620000000000800020100006D
-:1000A0000304070000000000000000010204081023
-:1000B00020408001020408102001020408102004DE
+:100000000C9476000C94860D0C945F0D0C949E005D
+:100010000C949E000C949E000C949E000C949E00E8
+:100020000C949E000C949E000C949E000C949E00D8
+:100030000C949E000C94130E0C949E000C949E0045
+:100040000C94150D0C949E000C94270C0C94010C30
+:100050000C949E000C949E000C949E000C949E00A8
+:100060000C949E000C949E00556E737570706F72A8
+:1000700074656420636F6D6D616E640020557365F7
+:10008000206F6E65206F66200000000008000201EE
+:10009000000003040700000000000000003B4D4387
+:1000A0003D003B4D553D004D533D000000000025F7
+:1000B0000028002B0000000000240027002A000474
:1000C00004040404040404020202020202030303FF
-:1000D00003030300000000250028002B000000009F
-:1000E00000240027002A0000190813175C081124B7
-:1000F0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E081
-:10010000E6EFF6E402C005900D92A631B107D9F7EB
-:1001100024E0A6E1B2E001C01D92AB3AB207E1F7DC
-:1001200010E0CCEED0E004C02297FE010E949A1DA0
-:10013000C83ED107C9F70E9457170C946E230C9440
-:100140000000CF92DF92EF92FF920F931F930E94D5
-:10015000431400911D0210911E0220911F02309144
-:1001600020026B017C01C01AD10AE20AF30A97014E
-:10017000860160931D0270931E0280931F0290936C
-:1001800020020A3511052105310578F181E0C816F4
-:100190008DE7D806E104F10410F4960102C021E0D5
-:1001A0003DE74A9B03C03195219531098091620357
-:1001B0008B34D8F4809162038F5F809362038091C7
-:1001C0006303609161030E94421D90936303E09179
-:1001D0006303F0E0EE0FFF1FEB59FC4F31832083E8
-:1001E000809163038F5F809363031F910F91FF9052
-:1001F000EF90DF90CF9008950F931F9360912702A7
-:100200008DE00E943615109227020E94431400913F
-:100210001D0210911E0220911F0230912002601BCE
-:10022000710B820B930B62307D478105910520F0A5
-:100230001F910F910C94A1001F910F91089581E2DD
-:1002400092E00E94FF188BE593E00E94FF1885E57D
-:1002500093E00C94FF18CF93DF93EC01FB01248112
-:1002600035810E94421BCE01DF91CF91089541E07C
-:1002700050E061EA70E080E00C946D1380E00C9433
-:100280008D13CF93DF931F92CDB7DEB72B9A2091BA
-:10029000060130910701482F429FC001439F900DF6
-:1002A000112469830E948E142B98809106019091ED
-:1002B00007016981FC016E9FC0016F9F900D1124A1
-:1002C0000F90DF91CF910C948E14EF92FF920F93C9
-:1002D0001F93CF93DF93F82EE92E0E943E0100E09A
-:1002E00010E02091080130E0021713072CF56FE1B0
-:1002F00081E00E944101CF2DDE2D29912223C9F0FA
-:10030000213371F0263449F02033B9F763E081E0FE
-:100310000E94410163E081E009C063E081E002C026
-:1003200061E083E00E94410161E083E00E944101BD
-:10033000E4CF0F5F1F4FD5CFDF91CF911F910F916A
-:10034000FF90EF900C9437013F924F925F926F9223
-:100350007F928F929F92AF92BF92CF92DF92EF9255
-:10036000FF920F931F93CF93DF93082FEB01542E2F
-:10037000452E59010E9443146B017C0110E0812C31
-:10038000912CB401600F711FC617D707A8F1C501E2
-:100390000E94FA1A8053E52DF42DE80FF11DE80FA5
-:1003A000F11D90818181382E331C3324331C692E3A
-:1003B000782E31F077FE0CC071946194710808C0FA
-:1003C00077FE03C071946194710888E1681A71081E
-:1003D0000E9443146C157D058E059F05C8F33320DC
-:1003E00011F02B9801C02B9AC60CD71CE11CF11CF4
-:1003F0008FEF881A980AC5CF0E9443146C157D05AB
-:100400008E059F05C8F3DF91CF911F910F91FF904B
-:10041000EF90DF90CF90BF90AF909F908F907F90A4
-:100420006F905F904F903F9008954F925F926F92C0
-:100430007F928F929F92AF92BF92CF92DF92EF9274
-:10044000FF920F931F93CF93DF93982E862E2A014E
-:100450002B9A0E9443146B017C01662457FC609424
-:10046000762C891408F446C0692D70E081E292E090
-:100470000E94FA1A90ED980F9A3010F4892F01C05B
-:100480008753C4E0D0E008E0A82EBB24A7FCB094BA
-:100490000E9443146C157D058E059F05C8F310E07E
-:1004A00098012A213B21232B71F02B98C40CD51CD9
-:1004B000E61CF71C0E9443146C157D058E059F05F4
-:1004C000C8F32B9A0DC02B9AC40CD51CE61CF71C44
-:1004D0000E9443146C157D058E059F05C8F32B986B
-:1004E000C40CD51CE61CF71C15950795219781F6C1
-:1004F0009394B7CF0E9443146C157D058E059F051C
-:10050000C8F3DF91CF911F910F91FF90EF90DF9093
-:10051000CF90BF90AF909F908F907F906F905F90A3
-:100520004F900895CF92DF92EF92FF920F931F9317
-:10053000CF93DF9300D000D000D0CDB7DEB78C01D1
-:100540006B01FC01E080F1806DE071E0CE0101966D
-:100550000E946D19A701BE016F5F7F4F81E292E09B
-:100560000E94261B7C01CE0101960E94FF18FFEF1E
-:10057000EF16FF0601F1F801408151814F3FFFEF77
-:100580005F07C9F0970161E272E0CE0101960E9417
-:10059000421BBE016F5F7F4FC6010E94B919CE0199
-:1005A00001960E94FF188FEFE81AF80AF801F1820D
-:1005B000E08281E001C080E026960FB6F894DEBFAD
-:1005C0000FBECDBFDF91CF911F910F91FF90EF90A4
-:1005D000DF90CF900895BF92CF92DF92EF92FF927B
-:1005E0000F931F93CF93DF93CDB7DEB7C856D109D2
-:1005F0000FB6F894DEBF0FBECDBF67E072E0CE014C
-:100600008F599F4F0E946D196EE170E0CE018F5996
-:100610009F4F0E943019A9961FAE1EAEA9970E9447
-:100620003E011FEF01E042E1F42E59E0E52E62E0C9
-:10063000D62ECC24C394BE016F597F4FCE01895969
-:100640009F4F0E949202882309F44FC060E070E03F
-:10065000CE018F599F4F0E94FA1A833589F561E0C8
-:1006600070E0CE018F599F4F0E94FA1A833419F31C
-:1006700061E070E0CE018F599F4F0E94FA1A8D34CD
-:1006800059F41F5FE1E0F0E0EC0FFD1FF19EE00D7B
-:10069000F11D1124C282CFCF61E070E0CE018F59ED
-:1006A0009F4F0E94FA1A823531F61F5FE1E0F0E0B9
-:1006B000EC0FFD1FF19EE00DF11D1124D282BBCF86
-:1006C00060E070E0CE018F599F4F0E94FA1A80358A
-:1006D00009F068C062E070E0CE018F599F4F0E9420
-:1006E000FA1A8D3309F05EC082C0B12C32E1C32EFC
-:1006F000B016D1F1D12CED2CF12CCE9CA001CF9CC9
-:10070000500D1124E1E0F0E0EC0FFD1FE40FF51FA8
-:100710008281823079F44A5F5F4F21E030E02C0F14
-:100720003D1F420F531F6481758121E232E08381B6
-:100730000E94A401CE9CF001CF9CF00D112481E019
-:1007400090E08C0F9D1FE80FF91F8281813031F4FA
-:1007500040815181648183810E9415022B98D3943A
-:100760001D1548F6B394C4CF0E94370161E272E0D0
-:100770008AE094E00E94F217CE018F599F4F0E94A9
-:10078000FF18C859DF4F0FB6F894DEBF0FBECDBFBC
-:10079000DF91CF911F910F91FF90EF90DF90CF905D
-:1007A000BF90089560E070E0CE018F599F4F0E9486
-:1007B000FA1A823509F050C061E070E0CE018F591D
-:1007C0009F4F0E94FA1A8D3309F046C042E050E074
-:1007D000BE016F597F4FCE01855A9F4F0E942B015A
-:1007E000CE01855A9F4F0E94871B062F82C022E0B0
-:1007F00030E041E050E0BE016F597F4FCE01855A95
-:100800009F4F0E94421BCE01855A9F4F0E94871B1B
-:10081000B62ECE01855A9F4F0E94FF1843E050E04C
-:10082000BE016F597F4FCE01855A9F4F0E942B0109
-:10083000CE01855A9F4F0E94871BE19EF001112433
-:10084000EB0DF11D3396EE0FFF1F21E030E02C0F72
-:100850003D1FE20FF31F4BC060E070E0CE018F59E7
-:100860009F4F0E94FA1A8434B9F4A9968EAD9FADB9
-:10087000A997E1E0F0E0EC0FFD1FF19EE00DF11D06
-:10088000112421E0280FA6963FADA697231B2383B2
-:10089000029795838483CFCE60E070E0CE018F59BC
-:1008A0009F4F0E94FA1A833409F0C5CE61E070E0D0
-:1008B000CE018F599F4F0E94FA1A8D3309F0BBCE9B
-:1008C00042E050E0BE016F597F4FCE01855A9F4FE5
-:1008D0000E942B01CE01855A9F4F0E94871BE1E0A9
-:1008E000F0E0EC0FFD1FF19EE00DF11D112471836E
-:1008F0006083CE01855A9F4F0E94FF189CCE62E70D
-:1009000070E08AE094E00E94A41760912B0270E0EE
-:100910004AE050E08AE094E00E94B9186DE670E089
-:100920008AE094E00E94A4176091290270E04AE0F6
-:1009300050E08AE094E00E94B91868E670E08AE02E
-:1009400094E00E94A41760912A0270E04AE050E00F
-:100950008AE094E00C94C118CF93DF93CDB7DEB753
-:10096000AE970FB6F894DEBF0FBECDBF61E070E06A
-:1009700081E292E00E94FA1A843729F161E070E086
-:1009800081E292E00E94FA1A823721F542E050E0BB
-:1009900061E272E0CE0101960E942B0120E030E07E
-:1009A00043E050E0BE01675D7F4FCE0101960E949B
-:1009B000FC1ACE0101960E94FF18CE0189960E9472
-:1009C0008F1F8093080161E272E08AE094E00E9448
-:1009D000F21795C061E070E081E292E00E94FA1A9D
-:1009E0008337F1F42B9A42E050E061E272E0CE01ED
-:1009F00089960E942B0120E030E048E250E0BE01E1
-:100A00006F5F7F4FCE0189960E94FC1ACE018996B6
-:100A10000E94FF18CE0101960E9465012B98D3CF4A
-:100A200061E070E081E292E00E94FA1A8336A9F454
-:100A300042E050E061E272E0CE0101960E942B019B
-:100A4000CE0101960E94871B7093070160930601F7
-:100A5000CE0101960E94FF18B6CF61E070E081E2FE
-:100A600092E00E94FA1A803709F049C067E072E00C
-:100A7000CE0189960E946D1964E170E0CE018996DD
-:100A80000E9430196FE071E0CE0189960E94C5196D
-:100A90004AE060910801CE0101960E94DD19BE0175
-:100AA0006F5F7F4FCE0189960E94621ACE01019638
-:100AB0000E94FF1867E971E0CE0189960E94691AC9
-:100AC00060910601709107014AE0CE0101960E94F3
-:100AD0000A1ABE016F5F7F4FCE0189960E94621A8B
-:100AE000CE0101960E94FF18BE01675D7F4F8AE02C
-:100AF00094E00E94F217CE0189960E94FF18AE96EC
-:100B00000FB6F894DEBF0FBECDBFDF91CF91089531
-:100B1000CF93DF9300D0CDB7DEB72091A7043091FB
-:100B2000A8042115310511F42BEA34E0CE01019619
-:100B3000821B930B0F900F90DF91CF910895CF926E
-:100B4000DF92EF92FF920E9437146B017C0128EE36
-:100B500033E040E050E00E94761D809118029091B1
-:100B60001902A0911A02B0911B02C816D906EA0612
-:100B7000FB0648F48091160290911702019690931B
-:100B8000170280931602C0921802D0921902E092C6
-:100B90001A02F0921B02CA01B901FF90EF90DF9098
-:100BA000CF9008956AE171E08AE094E00E94041811
-:100BB00061E070E080E090E00C94661461E070E029
-:100BC00081E292E00E94FA1A813511F40E943E01FE
-:100BD00061E070E081E292E00E94FA1A853411F43B
-:100BE0000C9437010895262F220F330B94E049020D
-:100BF000B0011124682B622B81E090E00C947322E9
-:100C0000CF93DF9361E070E081E292E00E94FA1AF4
-:100C1000873421F4DF91CF910C947F0462E070E07F
-:100C200081E292E00E94FA1A833599F062E070E066
-:100C300081E292E00E94FA1A853571F062E070E07C
-:100C400081E292E00E94FA1A833441F4CAE2D2E0CF
-:100C500005C0CBE2D2E002C0C9E2D2E061E070E0C0
-:100C600081E292E00E94FA1A853419F481E08883C7
-:100C700009C061E070E081E292E00E94FA1A8434D7
-:100C800059F4188240912A026091290280912B0226
-:100C9000DF91CF910C94F305DF91CF91089560E03F
-:100CA00070E081E292E00E94FA1A803511F40C940F
-:100CB000D20560E070E081E292E00E94FA1A8F3380
-:100CC00009F072C06FE38AE094E00E94D5176AE8E9
-:100CD00070E08AE094E00E94A41766E58AE094E060
-:100CE0000E94D51760E28AE094E00E94D51769E679
-:100CF0008AE094E00E94D51760E28AE094E00E94C6
-:100D0000D51762E58AE094E00E94D51760E28AE098
-:100D100094E00E94D51764E78AE094E00E94D5171A
-:100D200060E28AE094E00E94D51768E58AE094E0EA
-:100D30000E94D51760E28AE094E00E94D51766E42D
-:100D40008AE094E00E94D51760E28AE094E00E9475
-:100D5000D51763E58AE094E00E94D51760E28AE047
-:100D600094E00E94D51760E58AE094E00E94D517D0
-:100D700060E28AE094E00E94D51763E48AE094E0A0
-:100D80000E94D51760E28AE094E00E94D51767E4DC
-:100D90008AE094E00E94D51760E28AE094E00E9425
-:100DA000D51767E072E00AC060E070E081E292E08F
-:100DB0000E94FA1A863531F46DE171E08AE094E020
-:100DC0000C94041860E070E081E292E00E94FA1A4C
-:100DD000823549F40E9488054AE050E0BC018AE06F
-:100DE00094E00C94C11860E070E081E292E00E940F
-:100DF000FA1A893641F488E292E00E94E408892BCD
-:100E000081F40C94AC0460E070E081E292E00E9416
-:100E1000FA1A833561F488E292E00E94E408892B93
-:100E200021F081E080931C0208950C94EB0260E0B5
-:100E300070E081E292E00E94FA1A843751F40E9435
-:100E40009F05AB01BC012AE030E08AE094E00C94FD
-:100E5000ED1860E070E081E292E00E94FA1A8835B5
-:100E600011F40C94DE0560E070E081E292E00E94F3
-:100E7000FA1A8634D1F060E070E081E292E00E94DC
-:100E8000FA1A833411F40C94000660E070E081E2F9
-:100E900092E00E94FA1A873411F40C947F0466E7FA
-:100EA00070E08AE094E00C94E01708951F93CF93CC
-:100EB000DF9300D0CDB7DEB780911C02882389F084
-:100EC00010921C020E944F0680911C02811106C0E4
-:100ED00067E072E081E292E00E94C51981E08093B0
-:100EE000270211E080916203882341F1809162031F
-:100EF00081508093620380916403609161030E943A
-:100F0000421D90936403E091640381E08E0F80930F
-:100F10006403F0E0EE0FFF1FEB59FC4F80819181DD
-:100F20009A838983BE016F5F7F4F88E292E00E94BF
-:100F30004B138823B9F210932702D4CF0F900F9050
-:100F4000DF91CF911F910895EF92FF920F931F931E
-:100F5000CF93DF93EC017B018A0181E090E00E9456
-:100F60006B22982F9170988381FB992790F9F70154
-:100F7000908382FB882780F9F8018083DF91CF91ED
-:100F80001F910F91FF90EF90089526E040E051EE01
-:100F900060E070E08AE094E00E944F1660E082E03A
-:100FA0000E94FD1461E08BE00E94FD1461E08DE081
-:100FB0000E94FD1480E1809381001092800082E005
-:100FC0008093FD0388E199E79093FF038093FE03EC
-:100FD000909387008093860082E1809381008CEF5C
-:100FE00090E09093FC038093FB0381E080936F007B
-:100FF00080E090E00E946B228B3049F44AE252E09C
-:1010000069E272E08BE292E00E94A4070AC06BE002
-:1010100080E090E00E94732267E081E090E00E940F
-:1010200073220E94370164E170E081E292E00C9447
-:1010300030190F931F93CF93DF938BE48093610359
-:10104000109262031092640310926303CBE3D3E027
-:10105000D0934003C0933F030DE313E0109342038A
-:101060000093410367E072E085E593E00E946D190B
-:1010700067E072E08BE593E00E946D19F801118240
-:1010800010821982188288E292E00E94A60867E026
-:1010900072E081E292E00E946D190E944314609315
-:1010A0001D0270931E0280931F0290932002DF9115
-:1010B000CF911F910F9108950C941F01CF93C1E020
-:1010C0008AE094E00E946C15892BB9F08AE094E0E4
-:1010D0000E9485158A3041F01CF4882329F007C04E
-:1010E0008D3011F0833219F4C0931C02E9CF682FC0
-:1010F00081E292E00E94791AE3CFCF9108951F9286
-:101100000F920FB60F9211242F933F934F935F933B
-:101110006F937F938F939F93AF93BF93EF93FF93BF
-:10112000E091FB03F091FC030995FF91EF91BF91D2
-:10113000AF919F918F917F916F915F914F913F916F
-:101140002F910F900FBE0F901F901895FC01E85F34
-:10115000FE4F1082B39610827B97108231961182D7
-:1011600010827B962FEF2083FC012083AC0120E0CE
-:1011700030E0FA01E15EFE4F11821082FC01E20FC5
-:10118000F31F14822F5F3F4F4E5F5F4F26303105B4
-:1011900081F7FC01E55FFE4F1082339626E930E0CF
-:1011A000318320833D964DEC5CEC6CE47EE3408320
-:1011B00051836283738372971082339610823196C3
-:1011C000108233971082089580E090E00895CF93C5
-:1011D000DF93FC01E55DFE4FD081C0E07D97CD1728
-:1011E000C1F0DC01A15EBE4F2D913C91AB01421BD1
-:1011F000530B9A0157FF03C031952195310902968F
-:10120000408151814217530714F08C2F03C0CF5FE8
-:10121000E6CF8FEFDF91CF910895FC011482158204
-:101220001682178210861186411104C0DC01A85F66
-:10123000BE4F4C91641780F4DF01A60FB11D1A96C2
-:101240008C91DF01A80FB11D14968C9114978F5FBC
-:1012500014968C936F5FEECF08952F923F924F922A
-:101260005F926F927F928F929F92AF92BF92CF9236
-:10127000DF92EF92FF920F931F93CF93DF93CDB73F
-:10128000DEB72E970FB6F894DEBF0FBECDBF9E8798
-:101290008D8740E060E00E940D09ED85FE85E55DEB
-:1012A000FE4F5080712C2D853E85255E3E4F3A873E
-:1012B00029878D859E85885F9E4F9C878B877514B7
-:1012C00009F4C3C044244394470C642C272C312CCC
-:1012D000C101880F991FAD85BE858A0F9B1FFC0138
-:1012E000E15EFE4FFA83E9832A0E3B1EF4E02F0EE7
-:1012F000311C29813A8138872F83651409F4A3C0F2
-:10130000862D90E09C838B83880F991F9E838D830D
-:10131000FC01AD85BE85EA0FFB1FE15EFE4F00813B
-:101320001181C80117FF04C088279927801B910BE2
-:10133000BC01882777FD8095982F0E942B1CE9859A
-:10134000FA8520813181428153810E94DF1C4B014B
-:101350005C01A981BA81CD90DC907801EC18FD0880
-:10136000F7FE03C0F194E194F10820E030E040E0A2
-:101370005FE3C501B4010E94DF1C9B01AC01C50104
-:10138000B4010E94941B0E94F81B6E157F050CF49B
-:1013900058C0EB85FC85208180E090E0821750F4F6
-:1013A000ED85FE85E80FF91F3285361101C0728682
-:1013B0000196F4CFD1014C91552747FD5095EB8113
-:1013C000FC812D853E85E20FF31FE481FF27E7FDB9
-:1013D000F0959A012E0F3F1F21153105E1F4C49EAF
-:1013E000C001C59E900DD49E900D1124B9010E949C
-:1013F000621D7B010E9FC0010F9F900D1E9F900DDF
-:101400001124B9010E94621DE60EF71EAF81B88556
-:10141000ED92FC920CC00C0D1D1D17FF02C00F5F5A
-:101420001F4F15950795E981FA8111830083ED819E
-:10143000FE812D853E85E20FF31FE15EFE4F118296
-:10144000108263945ACF742C3ACF2E960FB6F8942C
-:10145000DEBF0FBECDBFDF91CF911F910F91FF90E7
-:10146000EF90DF90CF90BF90AF909F908F907F9044
-:101470006F905F904F903F902F9008953F924F92C2
-:101480005F926F927F928F929F92AF92BF92CF9214
-:10149000DF92EF92FF920F931F93CF93DF93EC01B4
-:1014A0008FEF8883FE01E55DFE4F30806E0100E026
-:1014B00010E0EE24EA94FE2C4E0188EF881A8EEF9D
-:1014C000980A031508F06AC0F601E15EFE4F5F015D
-:1014D000FFEFEF16FF0639F5F5018081918197FD49
-:1014E00022C0FE01E00FF11F6481772767FD709530
-:1014F000872F972F0E942B1C2B013C01F401608148
-:1015000070E080E090E00E942B1C2BE734E14EE27B
-:101510005EE30E94DF1C9B01AC01C301B2010E948B
-:10152000DB1C1816A4F1F5012081318137FD30C094
-:10153000C701880F991F8C0F9D1FFC01E15EFE4FB4
-:1015400080819181281739071CF5FE01E00FF11FFA
-:101550006481772767FD7095872F972F0E942B1C3A
-:101560002B013C01F401608170E080E090E00E947A
-:101570002B1C2BE734E14EE25EE30E94DF1C9B0153
-:10158000AC01C301B2010E94DB1C18160CF47801F7
-:101590000F5F1F4FF2E0CF0ED11C93CF8FEFE816F5
-:1015A000F80641F0E882CF5EDE4F81E090E099835B
-:1015B000888301C080E0DF91CF911F910F91FF9050
-:1015C000EF90DF90CF90BF90AF909F908F907F90E3
-:1015D0006F905F904F903F9008958F929F92AF923F
-:1015E000BF92CF92DF92EF92FF920F931F93CF9310
-:1015F000DF93FC018C010F5E1E4FD8018D919C91F1
-:101600001197019709F07CC05A96BC90BA94C7E034
-:10161000AC2E6F01B8EFCB1ABEEFDB0AB7FC70C07F
-:101620002B2D332727FD3095C901880F991F8E0F69
-:101630009F1FDC01A15EBE4FCD91DC91D7FF5EC044
-:10164000D195C195D109C83682E4D80708F056C0B3
-:10165000E080FF24E7FCF094C701880F991F8E0FEC
-:101660009F1FDC01A15EBE4F8D909C90CE01B40106
-:101670000E944E1D6832710508F040C0A89CC00150
-:10168000A99C900D11248C179D07C0F5DF01A20FB6
-:10169000B31F14968C9186308CF5D6014C9150E096
-:1016A000BA0161507109912C892D90E08617970736
-:1016B00084F4DF01A80FB91F1B96CC911B97D0E0D3
-:1016C000C217D307C9F41A96AC91B0E0AE15BF05A6
-:1016D00099F4485251098417950784F4DF01A45DF9
-:1016E000BE4FBC9282E090E0D8018D939C93E75F5F
-:1016F000FE4F908281E009C09394D6CFBA948ECFEA
-:10170000E45DFE4F8FEF808380E0DF91CF911F91EA
-:101710000F91FF90EF90DF90CF90BF90AF909F9090
-:101720008F9008950F931F93CF93DF938A01E90160
-:101730008AE094E00E94C717B8018AE094E00E9412
-:10174000C717BE018AE094E0DF91CF911F910F91FE
-:101750000C94C717EF92FF920F931F93CF93DF93D1
-:10176000EC01F62EE42EB9018AE094E00E94C7173E
-:10177000EF1460F0FE01EF0DF11D4AE050E06285CC
-:101780008AE094E00E94E618F394F2CFB8018AE070
-:1017900094E00E94C71780E0DF91CF911F910F91D5
-:1017A000FF90EF90089570E0FC0126A1332727FDFC
-:1017B00030956217730751F027A1332727FD309525
-:1017C00081E06217730719F080E0089581E00895C1
-:1017D00070E0FC0120A5332727FD309562177307C1
-:1017E00051F021A5332727FD309581E0621773075B
-:1017F00019F080E0089581E008959F92AF92BF9222
-:10180000CF92DF92EF92FF920F931F93CF93DF93CC
-:1018100000D01F92CDB7DEB78C017B0120E330E30F
-:1018200040E029833A834B83FC01668DF3E06F9F90
-:10183000B0011124C7010E943019E114F10449F1EB
-:10184000912C87ECA82E81E0B82ECE0101966C0178
-:10185000F801868D8915E8F0F80183A1981620F427
-:10186000E90DF11D808101C08FEF1F928F93BF9210
-:10187000AF92DF92CF920E947720B601C7010E94FB
-:10188000691A93940F900F900F900F900F900F90F4
-:10189000DFCF0F900F900F90DF91CF911F910F919D
-:1018A000FF90EF90DF90CF90BF90AF909F90089502
-:1018B0000F931F93CF93DF938C01EB0160E270E0F5
-:1018C000CE010E943019209709F468C06CEC71E0D9
-:1018D000CE010E94691AF80184A195A126A1220FC8
-:1018E000330B820F931FFC01E15EFE4F608171811B
-:1018F000CE010E94B81A6BE3CE010E94791A60ED06
-:1019000071E0CE010E94691AF80184A195A127A176
-:10191000220F330B820F931FFC01E15EFE4F6081AB
-:101920007181CE010E94B81A6BE3CE010E94791A30
-:1019300064ED71E0CE010E94691AF80184A195A1BD
-:1019400020A5220F330B820F931FFC01E15EFE4F97
-:1019500060817181CE010E94B81A6BE3CE010E94B2
-:10196000791A68ED71E0CE010E94691AF80184A12C
-:1019700095A121A5220F330B820F931FFC01E15E7D
-:10198000FE4F60817181CE010E94B81A6BE3CE01D7
-:10199000DF91CF911F910F910C94791ADF91CF9124
-:1019A0001F910F9108950F931F93CF93DF938C0195
-:1019B000EB0167E070E0CE010E943019209799F0AA
-:1019C0006CED71E0CE010E94691AF80162A573A561
-:1019D000CE010E94B81A6BE3CE01DF91CF911F9127
-:1019E0000F910C94791ADF91CF911F910F91089567
-:1019F0004F925F926F927F928F929F92AF92BF921F
-:101A0000CF92DF92EF92FF920F931F93CF93DF93CA
-:101A1000EC010CA11DA1580185EDA81A8EEFB80AA2
-:101A2000F5018081843008F4C4C06801F8EFCF1A52
-:101A3000FEEFDF0AF601608170E080E090E00E9436
-:101A40002B1C2AE037ED43E25DE30E94DF1C0E947D
-:101A5000FD1B40E050E0912C812CEE24EA94FE2CFA
-:101A6000262F30E0F5018081481708F06BC0642F05
-:101A700070E0F801E60FF71FE4818E2F992787FDAC
-:101A80009095821793070CF45BC0660F771F600F69
-:101A9000711FDB01A15EBE4F6D917C91161617067A
-:101AA0004CF55E0F8394E60EF71EEFA1EF3F69F051
-:101AB0008E2F880F990B800F911FDC01A15EBE4F06
-:101AC0008D919C91861797070CF4E42FEFA3E9A55D
-:101AD000EF3F69F08E2F880F990B800F911FDC016B
-:101AE000A15EBE4F8D919C91681779070CF4E42F8D
-:101AF000E9A726C05E1B9394EEA1EF3F69F08E2FFD
-:101B0000880F990B800F911FDC01A15EBE4F8D9154
-:101B10009C91681779070CF4E42FEEA3E8A5EF3F3A
-:101B200069F08E2F880F990B800F911FDC01A15E49
-:101B3000BE4F8D919C91861797070CF4E42FE8A770
-:101B40004F5F90CF652F70E080E090E00E942B1CEB
-:101B50002B013C01F601608170E080E090E00E9482
-:101B60002B1C2AE037ED43EA5CE30E94DF1C9B015B
-:101B7000AC01C301B2010E94DB1C1816D4F098100E
-:101B800018C0C70163E070E00E94621D7BA76AA7CE
-:101B90009EA19F3F71F088A58F3F59F0981749F09B
-:101BA0002FA12F3F31F099A59F3F19F081E0291314
-:101BB00001C080E0DF91CF911F910F91FF90EF90D6
-:101BC000DF90CF90BF90AF909F908F907F906F905D
-:101BD0005F904F900895FC0183A12E2FDF019A2F73
-:101BE000921B981710F41D92FACF168E178E87E06D
-:101BF00082A3089524E1FC0124A70C94EB0D7F92AD
-:101C00008F929F92AF92BF92CF92DF92EF92FF920C
-:101C10000F931F93CF93DF93EC018CA19DA1FC0147
-:101C2000E45FFE4F108233971082D12CF12C812C6F
-:101C300037E0B32EAA24A3940CA11DA1F801E85FFC
-:101C4000FE4F8081881608F04DC0F11014C0F801D5
-:101C5000E80DF11DE2846E2DCE010E94D30B81119F
-:101C600006C06E2DCE010E94E80B8823C9F1F80151
-:101C7000E75FFE4F80820CA11DA1D1108FC0C8016B
-:101C8000885F9E4F7C01F801E80DF11DC2846C2D28
-:101C9000CE010E94D30B811161C0F70180818816AB
-:101CA00008F47AC05BC0672DCE010E94E80B782E45
-:101CB000811184C04F8D50E02CA5332727FD30952E
-:101CC000421753070CF0C8C07110B4C0CE010E9477
-:101CD000EB0DF12C4E8D8BA1481708F486C0DF2C3C
-:101CE0008394AACF88122DC0D801A75FBE4F4C9114
-:101CF000423038F12F8D30E08CA587FD8F5F8595C0
-:101D0000992787FD909582179307DCF4841A8082C7
-:101D10008CA19DA1FC01E85FFE4F408150E04F5F28
-:101D20005F4F3196608170E0665F7F4F680F791F6B
-:101D30000A960E94DD1FECA1FDA1E45FFE4F81E049
-:101D400080834F8D50E02CA5332727FD309581E00F
-:101D5000421753070CF0B5C080E0B3C0282DF7013F
-:101D600080818816B0F4C8018C0D911D8C0D911DD9
-:101D7000FC01E15EFE4F9180991C9924991CF801A9
-:101D8000E75FFE4F8080281949F020FF07C0839449
-:101D900005C0FF24F394A4CF839475CFE82CF12CD5
-:101DA0006801CE0CDF1CF6017284672DCE010E9403
-:101DB000D30B882309F477CF9A2414C0F801E85F85
-:101DC000FE4F208130E021503109E216F3060CF07D
-:101DD00071CFF6016385CE010E94E80B882309F4D8
-:101DE00069CF8394FF24F39475CF5AA1852F90E097
-:101DF000292D332727FD3095052E01C0220F0A9487
-:101E0000EAF7FE01E40FF11D3081322B30832F8D74
-:101E10002F5F2F8F28A1821B910997FD03C0521BB2
-:101E20005AA35DCFBAA24F5F4E8FFE01E40FF11DA2
-:101E3000108255CFF801E85FFE4F808190E0019756
-:101E4000E816F9060CF042CFF6016385CE010E9438
-:101E5000E80B882389F13ACFF801E65FFE4F8082D4
-:101E60008CA19DA1FC01E85FFE4FDC01A65FBE4F87
-:101E700020818C91281B20838CA19DA1FC01E85F0F
-:101E8000FE4F408150E04F5F5F4F3296608170E0BF
-:101E9000665F7F4F680F791F0A960E94DD1FECA1D5
-:101EA000FDA1E45FFE4F81E080834F8D50E02CA5C3
-:101EB000332727FD30954CCFF801E75FFE4F808038
-:101EC00005CFDF91CF911F910F91FF90EF90DF90A1
-:101ED000CF90BF90AF909F908F907F9008953F924A
-:101EE0004F925F926F927F928F929F92AF92BF922A
-:101EF000CF92DF92EF92FF920F931F93CF93DF93D6
-:101F0000CDB7DEB7E3970FB6F894DEBF0FBECDBFF7
-:101F10007C013C0188EF681A8EEF780AF30180811A
-:101F2000883208F474C2C7010E942D0940E060E0C5
-:101F3000C7010E940D09C7010E943E0AC7010E9405
-:101F4000ED0AF7018381882309F422C1EF5EFE4F79
-:101F500080819181029709F01BC14701F7EF8F1A29
-:101F6000FEEF9F0AF40160815701F6EFAF1AFEEF12
-:101F7000BF0A82E0860FF5018083F3017081872F0D
-:101F800090E00197D701A45DBE4FF5011081212F8C
-:101F900030E028173907FCF4F701E20FF31F4385FF
-:101FA00050E02C91332727FD30954217530779F4E1
-:101FB000428550E0F7012081332727FD30954217F5
-:101FC000530729F41150F501108311E005C01E5F7D
-:101FD000F5011083DACF10E0F5018081781708F45D
-:101FE0007083F5014081C7010E940D09112351F052
-:101FF000F501808190E0F4012081821B910988978E
-:1020000034F4C2C0F30140814E3F08F09EC0670126
-:10201000F3EDCF1AFEEFDF0A67E072E0C6010E941F
-:10202000C51987010D5C1E4F67E072E0C8010E9470
-:10203000C51962E0C6010E94791A6FED71E0C60110
-:102040000E94691A6BE3C6010E94791A312C37018C
-:1020500085ED681A8EEF780AF3018081381640F515
-:10206000432C512CF701E40DF51D84818823F1F0F8
-:1020700060E5C6010E94791A632DC6010E948C1A80
-:102080006DED71E0C6010E94691AC201880F991FA7
-:102090008E0D9F1DFC01E15EFE4F60817181C601C6
-:1020A0000E94B81A6BE3C6010E94791A3394D4CF08
-:1020B00062EE71E0C6010E94691A6BE3C8010E94DA
-:1020C000791A65EE71E0C8010E94691AF701608112
-:1020D000772767FD7095C8010E94B81A6BE3C801A5
-:1020E0000E94791A69EE71E0C8010E94691AF7012D
-:1020F000E45DFE4F6081772767FD7095C8010E94FF
-:10210000B81A6BE3C8010E94791AF701E35FFE4F2A
-:102110008081882349F06DEE71E0C8010E94691A40
-:102120006BE3C8010E94791A63E0C8010E94791A22
-:102130006AE0C8010E94791A9601F5014081F40114
-:102140006081C7010E94AA0BD1C0F4016081623096
-:10215000D8F0F501808190E08D3F9105ACF0461BF1
-:10216000F301408350E04F5F5F4F70E0665F7F4F49
-:102170006E0D7F1DC7010A960E94DD1F81E0F701E9
-:10218000E45FFE4F8083BBC0C7010E94A608B7C0B2
-:10219000F7018181811104C08281882309F4ABC0D9
-:1021A000F701EF5EFE4F80819181019709F0A3C096
-:1021B000F3018081883208F49EC06701F3EDCF1AE5
-:1021C000FEEFDF0A67E072E0C6010E94C5198701D1
-:1021D0000D5C1E4F67E072E0C8010E94C51962E005
-:1021E000C6010E94791A8EE18CA381E089A31AA20C
-:1021F000CE0101960E94EB0D29A187E090E0821BA1
-:1022000091097AA167E041E050E0262F30E0821783
-:1022100093074CF49A01062E01C0220F0A94EAF7A4
-:10222000722B6150F2CF7AA38FEF8FA388A789A773
-:102230008AA7FEA2EDA2CE0101960E94FA0DCE0160
-:1022400001960E94FA0D81E18DA7F7018281882312
-:1022500009F45FC0CE0101960E94F80C882309F4AE
-:1022600058C0CE0101960E94FF0D882309F451C089
-:1022700067E072E0CE018E960E946D1962EE71E009
-:10228000CE018E960E94C519BE01625D7F4FCE01C0
-:1022900001960E94FD0B62EF71E0C6010E94691A6F
-:1022A0006BE3C6010E94791AB601CE0101960E9425
-:1022B000580C6BE3C8010E94791AB801CE0101964F
-:1022C0000E94D30C63E0C8010E94791A6AE0C80139
-:1022D0000E94791A9801AE01425D5F4FB601C701B5
-:1022E0000E94920BCE018E960E94FF1881E0F701AA
-:1022F000E55FFE4F47CFF701E55FFE4F1082F70124
-:10230000E45FFE4F8081811182C0C7010E94A60850
-:102310007EC0F7018181882349F36FEE71E0C60129
-:102320000E94691A6BE3C6010E94791A512C570169
-:10233000F5EDAF1AFEEFBF0AF5018081581648F59A
-:10234000852C912CF701E80DF91D84818823F9F083
-:1023500060EC71E0C6010E94691A652DC6010E94F9
-:102360008C1A6DED71E0C6010E94691AC401880FD4
-:10237000991F8E0D9F1DFC01E15EFE4F60817181F2
-:10238000C6010E94B81A6BE3C6010E94791A5394E1
-:10239000D3CF62EE71E0C6010E94691A6BE3C801F7
-:1023A0000E94791A65EE71E0C8010E94691AF7016E
-:1023B0006081772767FD7095C8010E94B81A6BE3AA
-:1023C000C8010E94791AF701E35FFE4F80818823DC
-:1023D00049F06DEE71E0C8010E94691A6BE3C80113
-:1023E0000E94791A63E0C8010E94791A6AE0C80164
-:1023F0000E94791AF30140814150960160E0C701C3
-:102400000E94AA0BF701E45FFE4F10826FCFE396A4
-:102410000FB6F894DEBF0FBECDBFDF91CF911F91F5
-:102420000F91FF90EF90DF90CF90BF90AF909F9073
-:102430008F907F906F905F904F903F9008958F9214
-:102440009F92AF92BF92CF92DF92EF92FF920F9343
-:102450001F93CF93DF931F92CDB7DEB74C018C0152
-:10246000085F1E4FD8018C9190E08D3F910544F09C
-:1024700081E0F401E35FFE4F8083C4010E946F0F8F
-:10248000F401E05FFE4F10826401B9EECB1ABEEF9B
-:10249000DB0AD601ED91FC91119780819181129612
-:1024A0000D90BC91A02D2D913C91D8014C91509153
-:1024B00000047401B5EDEB1ABEEFFB0AD7016C9175
-:1024C000651708F45C93442361F082279327B92EA3
-:1024D000BB1CBB24BB1C81E04D3F09F480E0B8224B
-:1024E00005C0D7011C9210920004B12C608171814B
-:1024F000C40149830E94E708A82E498187FD2CC0AA
-:10250000F401E40FF11D8287423030F081858A1199
-:1025100003C0C4010E94A6088A2D880F990B880D5C
-:10252000991DFC01E15EFE4FD6018D919C912081A9
-:102530003181DC018D919C91280F391F37FF02C03A
-:102540002F5F3F4F3595279531832083F801808198
-:102550008F5F808320E012C040E060E0C4010E94F1
-:102560000D09D7018C91863041F480910004F4016B
-:10257000E80FF11D8481823024F421E0B1101DC0E8
-:1025800001C020E0F8018081A401455F5E4F5A013F
-:10259000883248F081E0DA018C93C4010E946F0F09
-:1025A000109200046AC0C40129830E94A608F501A4
-:1025B00010821092000429810BC0D8018C918832BE
-:1025C00038F083E090E0F401EF5EFE4F918380836A
-:1025D000222309F452C0F80140815091000480E0A8
-:1025E00090E0242F30E0F9013197280D391DBF010B
-:1025F000680F791F6F3FAFEF7A07E1F00197D901BC
-:10260000A80FB91F1A96AC91A513F1CFCB01019673
-:10261000481BD8014C9350E04F5F5F4F655F7F4F81
-:10262000680D791DC4010A960E94DD1FF8018081A2
-:102630008F5F808340910004D601ED91FC91208151
-:102640003181C401840F911D840F911DFC01E15E55
-:10265000FE4F31832083F8018081F401E80FF11DE2
-:1026600042878F5FD8018C934F5F409300044630C0
-:1026700021F410920004F70140830F90DF91CF9175
-:102680001F910F91FF90EF90DF90CF90BF90AF9090
-:102690009F908F900895CF93DF93EC01C55FDE4F3D
-:1026A0001882FC01E75EFE4F0190F081E02D208151
-:1026B0003181DC01A95EBE4F0D90BC91A02D2D9300
-:1026C0003C93DB012D913C91318320830E941F12AA
-:1026D0008881DF91CF91089508958230E8F4E82F42
-:1026E000F0E0EE0FFF1FE75FFE4F718360838130E4
-:1026F00041F0809169008C7F842B80936900E89A77
-:10270000089580916900440F551F440F551F837F22
-:10271000842B80936900E99A0895823078F481309F
-:1027200011F0E89801C0E998E82FF0E0EE0FFF1FE4
-:10273000E75FFE4F8CE693E19183808308951F92BB
-:102740000F920FB60F9211242F933F934F935F93E5
-:102750006F937F938F939F93AF93BF93EF93FF9369
-:10276000E0910901F0910A010995FF91EF91BF9164
-:10277000AF919F918F917F916F915F914F913F9119
-:102780002F910F900FBE0F901F9018951F920F92D0
-:102790000FB60F9211242F933F934F935F936F9334
-:1027A0007F938F939F93AF93BF93EF93FF93E091AA
-:1027B0000B01F0910C010995FF91EF91BF91AF9141
-:1027C0009F918F917F916F915F914F913F912F9149
-:1027D0000F900FBE0F901F9018951F920F920FB67B
-:1027E0000F9211242F933F938F939F93AF93BF9397
-:1027F0008091020490910304A0910404B091050417
-:102800003091010423E0230F2D3720F40196A11D00
-:10281000B11D05C026E8230F0296A11DB11D20930E
-:1028200001048093020490930304A0930404B093E2
-:1028300005048091060490910704A0910804B091CA
-:1028400009040196A11DB11D80930604909307040D
-:10285000A0930804B0930904BF91AF919F918F9109
-:102860003F912F910F900FBE0F901F9018952FB78B
-:10287000F894609102047091030480910404909193
-:1028800005042FBF08953FB7F894809106049091F6
-:102890000704A0910804B091090426B5A89B05C0BF
-:1028A0002F3F19F00196A11DB11D3FBF6627782F5C
-:1028B000892F9A2F620F711D811D911D42E0660FB5
-:1028C000771F881F991F4A95D1F70895CF92DF92FD
-:1028D000EF92FF92CF93DF936B017C010E94431430
-:1028E000EB01C114D104E104F10489F00E94921BB0
-:1028F0000E9443146C1B7D0B683E734090F381E093
-:10290000C81AD108E108F108C851DC4FEACFDF91BD
-:10291000CF91FF90EF90DF90CF9008958230910596
-:1029200038F0880F991F880F991F05970197F1F7C5
-:102930000895789484B5826084BD84B5816084BD37
-:1029400085B5826085BD85B5816085BDEEE6F0E028
-:10295000808181608083E1E8F0E010828081826084
-:102960008083808181608083E0E8F0E08081816005
-:102970008083E1EBF0E0808184608083E0EBF0E035
-:10298000808181608083EAE7F0E0808184608083D9
-:102990008081826080838081816080838081806883
-:1029A00080831092C1000895833081F028F4813033
-:1029B00099F08230A1F008958730A9F08830B9F0FD
-:1029C0008430D1F4809180008F7D03C0809180009D
-:1029D0008F7780938000089584B58F7702C084B587
-:1029E0008F7D84BD08958091B0008F7703C0809162
-:1029F000B0008F7D8093B0000895CF93DF9390E077
-:102A0000FC01E555FF4F2491FC01E154FF4F8491F7
-:102A1000882349F190E0880F991FFC01E352FF4F92
-:102A2000A591B4918D529F4FFC01C591D4919FB750
-:102A3000611108C0F8948C91209582238C93888131
-:102A400082230AC0623051F4F8948C91322F309571
-:102A500083238C938881822B888304C0F8948C9183
-:102A6000822B8C939FBFDF91CF9108950F931F937B
-:102A7000CF93DF931F92CDB7DEB7282F30E0F90157
-:102A8000E956FF4F8491F901E555FF4F1491F90183
-:102A9000E154FF4F04910023C9F0882321F069839A
-:102AA0000E94D4146981E02FF0E0EE0FFF1FED5279
-:102AB000FF4FA591B4919FB7F8948C91611103C019
-:102AC0001095812301C0812B8C939FBF0F90DF91C4
-:102AD000CF911F910F910895FC01818D228D90E07F
-:102AE000805C9F4F821B91098F7399270895FC0189
-:102AF000918D828D981731F0828DE80FF11D858DB3
-:102B000090E008958FEF9FEF0895FC01918D828DE5
-:102B1000981761F0828DDF01A80FB11D5D968C9131
-:102B2000928D9F5F9F73928F90E008958FEF9FEF3C
-:102B3000089589E097E1892B49F08EE598E0892B8B
-:102B400029F00E94091781110C945E080895FC0178
-:102B5000848DDF01A80FB11DA35ABF4F2C91848D26
-:102B600090E001968F739927848FA689B7892C935B
-:102B7000A089B1898C9180648C93938D848D9813F6
-:102B800006C00288F389E02D80818F7D80830895BF
-:102B9000CF93DF93EC01888D8823C9F0EA89FB8904
-:102BA000808185FD05C0A889B9898C9186FD0FC0FB
-:102BB0000FB607FCF5CF808185FFF2CFA889B989D0
-:102BC0008C9185FFEDCFCE010E94A715E7CFDF9155
-:102BD000CF910895CF92DF92FF920F931F93CF93DF
-:102BE000DF931F92CDB7DEB76C0181E0D601589616
-:102BF0008C9358975B969C915B975C968C915C97B5
-:102C0000981307C05096ED91FC915197808185FDF6
-:102C10002EC0F601038D10E00F5F1F4F0F731127B9
-:102C2000F02EF601848DF81211C00FB607FCF9CF13
-:102C3000D6015096ED91FC915197808185FFF1CF9F
-:102C4000C60169830E94A7156981EBCF838DE80FC8
-:102C5000F11DE35AFF4F6083D6015B960C935B979F
-:102C60005296ED91FC915397808180620CC0D60101
-:102C70005696ED91FC91579760835096ED91FC919B
-:102C8000519780818064808381E090E00F90DF9194
-:102C9000CF911F910F91FF90DF90CF900895BF9239
-:102CA000CF92DF92EF92FF92CF93DF93EC016A0114
-:102CB0007B01B22EE889F98982E08083411581EE9B
-:102CC000580761057105A1F060E079E08DE390E0BF
-:102CD000A70196010E94761D215031094109510931
-:102CE0005695479537952795211580E1380798F037
-:102CF000E889F989108260E874E88EE190E0A70124
-:102D000096010E94761D21503109410951095695BD
-:102D1000479537952795EC85FD853083EE85FF85B2
-:102D20002083188EEC89FD89B082EA89FB89808135
-:102D300080618083EA89FB89808188608083EA8959
-:102D4000FB89808180688083EA89FB8980818F7D0F
-:102D50008083DF91CF91FF90EF90DF90CF90BF9075
-:102D600008951F920F920FB60F9211242F938F93F5
-:102D70009F93EF93FF93E0911A04F0911B048081DD
-:102D8000E0912004F091210482FD12C09081809195
-:102D900023048F5F8F7320912404821751F0E091F8
-:102DA0002304F0E0E65FFB4F958F8093230401C07E
-:102DB0008081FF91EF919F918F912F910F900FBE86
-:102DC0000F901F9018951F920F920FB60F9211241B
-:102DD0002F933F934F935F936F937F938F939F9323
-:102DE000AF93BF93EF93FF938AE094E00E94A715FF
-:102DF000FF91EF91BF91AF919F918F917F916F91D3
-:102E00005F914F913F912F910F900FBE0F901F90A8
-:102E100018958AE094E00E946C1521E0892B09F452
-:102E200020E0822F089510920D0410920C0488EE79
-:102E300093E0A0E0B0E080930E0490930F04A09381
-:102E40001004B093110489EF91E090930B048093E8
-:102E50000A0485EC90E0909317048093160484ECA8
-:102E600090E0909319048093180480EC90E0909384
-:102E70001B0480931A0481EC90E090931D048093CE
-:102E80001C0482EC90E090931F0480931E0486EC57
-:102E900090E09093210480932004109223041092D8
-:102EA00024041092250410922604089508950E9487
-:102EB00099140E9456170E94C507C9E9D5E10E94DE
-:102EC00056072097E1F30E949915F9CFCF92DF9230
-:102ED000EF92FF920F931F93CF93DF937C016A01D0
-:102EE000EB0100E010E00C151D0571F06991D701B0
-:102EF000ED91FC910190F081E02DC7010995892B9E
-:102F000019F00F5F1F4FEFCFC801DF91CF911F91D5
-:102F10000F91FF90EF90DF90CF90089561157105AC
-:102F200081F0DB010D900020E9F7AD01415051091E
-:102F3000461B570BDC01ED91FC910280F381E02DE3
-:102F4000099480E090E00895EF92FF920F931F9311
-:102F5000CF93DF938C017B01C0E0D0E0F701EC0F51
-:102F6000FD1F6491662359F0F801A081B181ED91B4
-:102F7000FC91C8010995892B11F02196EFCFCE0164
-:102F8000DF91CF911F910F91FF90EF900895DC0199
-:102F9000ED91FC91DB0114964D915C9115976D912B
-:102FA0007C910280F381E02D0994DC01ED91FC918C
-:102FB0000190F081E02D099465E072E00C948E1789
-:102FC0000F931F93CF93DF93EC010E94A4178C0102
-:102FD000CE010E94DC17800F911FDF91CF911F91CE
-:102FE0000F9108950F931F93CF93DF93EC010E94ED
-:102FF000C7178C01CE010E94DC17800F911FDF9153
-:10300000CF911F910F9108950F931F93CF93DF934B
-:10301000EC010E948E178C01CE010E94DC17800FFC
-:10302000911FDF91CF911F910F9108958F929F92E1
-:10303000AF92BF92CF92DF92EF92FF920F931F93C6
-:10304000CF93DF93CDB7DEB7A1970FB6F894DEBF6D
-:103050000FBECDBF7C01C42EE52FCB01D22E19A20D
-:1030600021E02D1510F02AE0D22E8E010F5D1F4FAA
-:103070008D2C912CA12CB12C6C2D7E2FA5019401AF
-:103080000E94761D8C2DD29E8019112401501109A9
-:103090008A3014F4805D01C0895CF80180832115B9
-:1030A00031054105510521F0C22EE32FCA01E4CFBD
-:1030B000B801C7010E948E17A1960FB6F894DEBF23
-:1030C0000FBECDBFDF91CF911F910F91FF90EF9079
-:1030D000DF90CF90BF90AF909F908F900895CF9248
-:1030E000DF92EF92FF920F931F93CF93DF93EC0148
-:1030F0006A017B012115310579F4E881F98101909C
-:10310000F081E02D642FDF91CF911F910F91FF90FF
-:10311000EF90DF90CF9009942A303105E9F477FFE2
-:103120001AC06DE20E94D5178C0144275527BA01B9
-:103130004C195D096E097F092AE0CE010E9416181C
-:10314000800F911FDF91CF911F910F91FF90EF9012
-:10315000DF90CF9008952AE0B701A601CE01DF915C
-:10316000CF911F910F91FF90EF90DF90CF900C9433
-:1031700016189A01AB01662757FD6095762F0C94BF
-:103180006F180F931F93CF93DF93EC019A01AB015C
-:10319000662757FD6095762F0E946F188C01CE012F
-:1031A0000E94DC17800F911FDF91CF911F910F912B
-:1031B00008952115310541F4DC01ED91FC91019058
-:1031C000F081E02D642F09940C9416189A01462F73
-:1031D00050E060E070E00C94D9180F931F93CF93E8
-:1031E000DF93EC010E94D9188C01CE010E94DC17FC
-:1031F000800F911FDF91CF911F910F910895FC01D6
-:10320000808191810C94361ECF93DF93EC018881ED
-:103210009981009711F00E94361E198218821D8232
-:103220001C821B821A82DF91CF9108950F931F9306
-:10323000CF93DF93EC018B016F5F7F4F8881998182
-:103240000E94C51E009731F0998388831B830A83EF
-:1032500081E001C080E0DF91CF911F910F9108952F
-:10326000CF93DF93EC0188819981892B29F08A81A2
-:103270009B818617970760F4CE010E941619882358
-:1032800041F08C819D81892B19F4E881F9811082AC
-:1032900081E0DF91CF910895EF92FF920F931F93FA
-:1032A000CF93DF93EC017B018A01BA010E943019B0
-:1032B000811104C0CE010E94041907C01D830C8334
-:1032C000B701888199810E94EF1FCE01DF91CF91D4
-:1032D0001F910F91FF90EF900895FC0111821082D1
-:1032E00013821282158214826115710559F0FB0157
-:1032F00001900020E9F7AF0141505109461B570BDF
-:103300000C944C1908950F931F93CF93DF938C0166
-:10331000EB01FC0180819181009799F042815381FA
-:103320002C813D814217530750F0688179810E94BA
-:10333000EF1F8C819D81F8019583848313C00E94C7
-:10334000361E88819981F801918380838A819B81CF
-:10335000938382838C819D819583848319821882D3
-:103360001B821A821D821C82DF91CF911F910F91C7
-:103370000895CF93DF93EC018617970711F00E9411
-:103380008319CE01DF91CF910895CF93DF93EC01A4
-:103390006115710561F0FB0101900020E9F7AF01B3
-:1033A00041505109461B570B0E944C1902C00E9404
-:1033B0000419CE01DF91CF9108950F931F93CF93FE
-:1033C000DF93CDB7DEB729970FB6F894DEBF0FBEF7
-:1033D000CDBF8C01862FF8011182108213821282D8
-:1033E0001582148250E0BE016F5F7F4F90E00E9413
-:1033F0005220BE016F5F7F4FC8010E94C5192996F8
-:103400000FB6F894DEBF0FBECDBFDF91CF911F91F5
-:103410000F9108950F931F93CF93DF93CDB7DEB72E
-:1034200062970FB6F894DEBF0FBECDBF8C01CB0103
-:10343000F80111821082138212821582148250E0E8
-:10344000BE016F5F7F4F0E941F20BE016F5F7F4FE5
-:10345000C8010E94C51962960FB6F894DEBF0FBE70
-:10346000CDBFDF91CF911F910F910895EF92FF9201
-:103470000F931F93CF93DF93EC017B010C811D8190
-:103480006115710511F480E016C04115510591F0E8
-:10349000040F151FB8010E9430198823A1F3288159
-:1034A00039818C819D81B701820F931F0E94EF1F8C
-:1034B0001D830C8381E0DF91CF911F910F91FF90CD
-:1034C000EF900895FB0144815581608171810C94D6
-:1034D000361A6115710559F0FB0101900020E9F7DA
-:1034E000AF0141505109461B570B0C94361A80E02E
-:1034F0000895CF93DF9300D0CDB7DEB769831A82EA
-:1035000041E050E0BE016F5F7F4F0E94361A0F907E
-:103510000F90DF91CF910895EF92FF920F931F9339
-:10352000CF93DF9300D000D0CDB7DEB77C01862FDC
-:103530004AE08E010F5F1F4FB80190E00E942A20E1
-:10354000F80101900020E9F7AF0141505109401BFB
-:10355000510BB801C7010E94361A0F900F900F90BF
-:103560000F90DF91CF911F910F91FF90EF900895F1
-:10357000EF92FF920F931F93CF93DF93CDB7DEB7F8
-:1035800028970FB6F894DEBF0FBECDBF7C01CB01EC
-:103590004AE08E010F5F1F4FB8010E942A20F801F8
-:1035A00001900020E9F7AF0141505109401B510B38
-:1035B000B801C7010E94361A28960FB6F894DEBFEC
-:1035C0000FBECDBFDF91CF911F910F91FF90EF9074
-:1035D0000895FC01248135816217730748F48081C6
-:1035E0009181009729F0FC01E60FF71F8081089573
-:1035F00080E008950C94E91A0F931F93CF93DF9303
-:10360000EB0141155105E9F02097D9F0FC016481E7
-:10361000758126173707A0F4621B730B8A010150CE
-:1036200011096017710708F48B01FC016081718139
-:10363000620F731FA801CE010E94F61FC00FD11F99
-:103640001882DF91CF911F910F910895CF93DF934F
-:10365000FC01848195814817590778F4C081D18194
-:10366000FB0160817181CE01840F951F0E940520AE
-:10367000009719F08C1B9D0B02C08FEF9FEFDF911D
-:10368000CF910895BF92CF92DF92EF92FF920F9366
-:103690001F93CF93DF936C017B01EA01890124170B
-:1036A000350720F48D2FE901042F182F67E072E011
-:1036B000C6010E946D19D70114968D919C911597A2
-:1036C000C817D907C8F48017910708F48C01D701EF
-:1036D000ED91FC911197E00FF11FB08010826D9178
-:1036E0007C916C0F7D1FC6010E94C519D701ED9119
-:1036F000FC91E00FF11FB082C601DF91CF911F91C5
-:103700000F91FF90EF90DF90CF90BF900895FC0154
-:1037100080819181009711F00C94AD1F60E070E002
-:10372000CB01089508955058BB27AA270ED009C190
-:10373000FAD030F0FFD020F031F49F3F11F41EF4A6
-:10374000EFC00EF4E095E7FBE5C0E92F0BD180F365
-:10375000BA17620773078407950718F071F49EF58E
-:1037600023C10EF4E0950B2EBA2FA02D0B01B90149
-:1037700090010C01CA01A0011124FF27591B99F0E7
-:10378000593F50F4503E68F11A16F040A22F232FF3
-:10379000342F4427585FF3CF469537952795A79543
-:1037A000F0405395C9F77EF41F16BA0B620B730BEA
-:1037B000840BBAF09150A1F0FF0FBB1F661F771F5B
-:1037C000881FC2F70EC0BA0F621F731F841F48F410
-:1037D000879577956795B795F7959E3F08F0B3CF96
-:1037E0009395880F08F09927EE0F97958795089580
-:1037F00004D06894B111D9C00895BCD088F09F5707
-:1038000090F0B92F9927B751A0F0D1F0660F771F2C
-:10381000881F991F1AF0BA95C9F712C0B13081F00C
-:10382000C3D0B1E00895C0C0672F782F8827B85F54
-:1038300039F0B93FCCF3869577956795B395D9F76D
-:103840003EF490958095709561957F4F8F4F9F4F77
-:103850000895E89409C097FB3EF490958095709583
-:1038600061957F4F8F4F9F4F9923A9F0F92F96E9CC
-:10387000BB279395F695879577956795B795F11141
-:10388000F8CFFAF4BB0F11F460FF1BC06F5F7F4FDE
-:103890008F4F9F4F16C0882311F096E911C07723F0
-:1038A00021F09EE8872F762F05C0662371F096E8F9
-:1038B000862F70E060E02AF09A95660F771F881FC8
-:1038C000DAF7880F9695879597F90895990F00086C
-:1038D000550FAA0BE0E8FEEF16161706E807F907E2
-:1038E000C0F012161306E407F50798F0621B730B7D
-:1038F000840B950B39F40A2661F0232B242B252BFE
-:1039000021F408950A2609F4A140A6958FEF811DA0
-:10391000811D089597F99F6780E870E060E0089541
-:103920009FEF80EC089500240A94161617061806D7
-:103930000906089500240A941216130614060506B3
-:103940000895092E0394000C11F4882352F0BB0F44
-:1039500040F4BF2B11F460FF04C06F5F7F4F8F4FA7
-:103960009F4F089557FD9058440F551F59F05F3FE2
-:1039700071F04795880F97FB991F61F09F3F79F091
-:1039800087950895121613061406551FF2CF469513
-:10399000F1DF08C0161617061806991FF1CF869595
-:1039A0007105610508940895E894BB276627772779
-:1039B000CB0197F908958ADF08F48FEF08950BD0B3
-:1039C000C0CFB1DF28F0B6DF18F0952309F0A2CF01
-:1039D000A7CF1124EACFC6DFA0F3959FD1F3950FAF
-:1039E00050E0551F629FF001729FBB27F00DB11D83
-:1039F000639FAA27F00DB11DAA1F649F6627B00D13
-:103A0000A11D661F829F2227B00DA11D621F739FFB
-:103A1000B00DA11D621F839FA00D611D221F749F09
-:103A20003327A00D611D231F849F600D211D822F50
-:103A3000762F6A2F11249F5750408AF0E1F0882397
-:103A40004AF0EE0FFF1FBB1F661F771F881F9150A4
-:103A50005040A9F79E3F510570F05CCFA6CF5F3F65
-:103A6000ECF3983EDCF3869577956795B795F795D7
-:103A7000E7959F5FC1F7FE2B880F911D969587955F
-:103A800097F90895991B79E004C0991F961708F0DB
-:103A9000961B881F7A95C9F780950895AA1BBB1BB2
-:103AA00051E107C0AA1FBB1FA617B70710F0A61B3E
-:103AB000B70B881F991F5A95A9F780959095BC015F
-:103AC000CD01089597FB072E16F4009407D077FDDB
-:103AD00009D00E944E1D07FC05D03EF490958195BB
-:103AE0009F4F0895709561957F4F0895A1E21A2E1A
-:103AF000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F92
-:103B0000A217B307E407F50720F0A21BB30BE40BE1
-:103B1000F50B661F771F881F991F1A9469F7609528
-:103B20007095809590959B01AC01BD01CF010895E2
-:103B3000EE0FFF1F0590F491E02D0994CF93DF93D2
-:103B40008230910510F482E090E0E091A904F091B8
-:103B5000AA0420E030E0A0E0B0E0309739F14081E5
-:103B6000518148175907B8F04817590771F48281F5
-:103B70009381109729F013969C938E9312972CC0E3
-:103B80009093AA048093A90427C02115310531F030
-:103B90004217530718F0A901DB0101C0EF019A0198
-:103BA000BD01DF010280F381E02DD7CF2115310562
-:103BB000F9F0281B390B2430310580F48A819B8170
-:103BC0006115710521F0FB019383828304C09093FA
-:103BD000AA048093A904FE01329644C0FE01E20FBC
-:103BE000F31F8193919322503109398328833AC07E
-:103BF0002091A7043091A804232B41F420910201C5
-:103C0000309103013093A8042093A7042091000170
-:103C1000309101012115310541F42DB73EB7409196
-:103C2000040150910501241B350BE091A704F0918C
-:103C3000A804E217F307A0F42E1B3F0B281739073F
-:103C400078F0AC014E5F5F4F2417350748F04E0FF8
-:103C50005F1F5093A8044093A7048193919302C0DF
-:103C6000E0E0F0E0CF01DF91CF910895CF93DF93B3
-:103C7000009709F487C0FC01329713821282C09129
-:103C8000A904D091AA04209781F420813181280FC2
-:103C9000391F8091A7049091A8048217930779F5A2
-:103CA000F093A804E093A7046DC0DE0120E030E0AB
-:103CB000AE17BF0750F412964D915C9113979D017A
-:103CC0004115510509F1DA01F3CFB383A283408195
-:103CD0005181840F951F8A179B0771F48D919C91D8
-:103CE0001197840F951F02969183808312968D9170
-:103CF0009C911397938382832115310529F4F093C6
-:103D0000AA04E093A9043EC0D9011396FC93EE9354
-:103D100012974D915D91A40FB51FEA17FB0779F437
-:103D200080819181840F951F0296D90111969C93F1
-:103D30008E938281938113969C938E931297E0E0E9
-:103D4000F0E08A819B81009719F0FE01EC01F9CF28
-:103D5000CE01029628813981820F931F2091A704FA
-:103D60003091A8042817390769F4309729F4109284
-:103D7000AA041092A90402C013821282D093A8044C
-:103D8000C093A704DF91CF910895A0E0B0E0EBECE1
-:103D9000FEE10C943B23EC01CB01209719F40E9427
-:103DA0009E1DB8C0FE01E60FF71F9E01225031098B
-:103DB000E217F30708F4ACC0D9010D911C911197DB
-:103DC00006171707B8F00530110508F49FC0A801C1
-:103DD000445051094617570708F498C0025011097A
-:103DE000061B170B019311936D937C93CF010E94D7
-:103DF000361E8CC05B01A01AB10A4E01800E911EC6
-:103E0000A091A904B091AA04612C712C60E070E02B
-:103E1000109709F449C0A815B905C9F5ED90FC90B3
-:103E20001197670142E0C40ED11CCA14DB0478F17B
-:103E300047018A189B08640142E0C40ED11C129607
-:103E4000BC9012971396AC91B5E0CB16D10440F01C
-:103E5000B282A38391828082D9018D939C9309C001
-:103E60000E5F1F4F0E0D1F1DF90111830083EB2DF7
-:103E7000FA2F6115710531F0DB011396FC93EE9377
-:103E8000129744C0F093AA04E093A9043FC06D9137
-:103E90007C9111976616770608F43B01BD011296D6
-:103EA0000D90BC91A02DB4CF6091A7047091A8048F
-:103EB00068157905E9F468167906D0F44091000197
-:103EC000509101014115510541F44DB75EB7609124
-:103ED000040170910501461B570BE417F507C0F468
-:103EE000F093A804E093A704F901918380830EC0A6
-:103EF0000E949E1D7C01009759F0A801BE010E94FE
-:103F0000D41FCE010E94361EC70104C0CE0102C0DC
-:103F100080E090E0CDB7DEB7EEE00C945723FC01D3
-:103F200088279927E89421912032E9F3293010F06D
-:103F30002E30C8F32B3241F02D3239F4689404C08E
-:103F40000E944A20820F911D219120532A30C0F3F4
-:103F50001EF4909581959F4F08951F93FC0199271A
-:103F60008827BC01E89411911032E9F3193010F060
-:103F70001E30C8F31B3251F01D3249F4689406C05C
-:103F80000E943520610F711D811D911D11911053EB
-:103F90001A30B0F33EF490958095709561957F4FFF
-:103FA0008F4F9F4F1F910895FB01DC0102C00190CC
-:103FB0000D9241505040D8F708956817790768F47A
-:103FC000FB01DC01E40FF51FA40FB51F02C0029036
-:103FD0000E9241505040D8F708950C94D41FFB0125
-:103FE000DC0101900D920020E1F70895FB01DC0156
-:103FF0004150504048F001900D920020C9F701C097
-:104000001D9241505040E0F70895FB015191552316
-:10401000A9F0BF01DC014D9145174111E1F759F4B9
-:10402000CD010190002049F04D9140154111C9F397
-:10403000FB014111EFCF81E090E0019708954532F7
-:10404000510520F4423010F00C942A20FB0110821C
-:10405000CB010895BB274A3031F4992322F4BDE205
-:10406000909581959F4F0C945E20592F482F372FA4
-:10407000262F660F771F881F991F660F771F881FCF
-:10408000991F620F731F841F951F660F771F881F6C
-:10409000991F08957AE0979F902D879F802D910D0D
-:1040A000112408954532510520F4423010F00C944B
-:1040B0005D20FB011082CB010895BB27FB01552732
-:1040C000AA27880F991FAA1FA41710F0A41B839575
-:1040D0005051B9F7A05DAA3308F0A95DA1930097EC
-:1040E00079F7B111B1931192CB010C949722AEE004
-:1040F000B0E0EDE7F0E20C9445230D891E8986E0DF
-:104100008C831A8309838FEF9FE79E838D83AE0193
-:10411000475E5F4F6F89788DCE0101960E9499208E
-:10412000EF81F885E00FF11F10822E96E4E00C94E9
-:104130006123ACE0B0E0EFE9F0E20C9437237C01BE
-:104140006B018A01FC0117821682838181FFBDC148
-:10415000CE0101964C01F7019381F60193FD859103
-:1041600093FF81916F01882309F4ABC1853239F443
-:1041700093FD859193FF81916F01853229F4B701F9
-:1041800090E00E94A722E7CF512C312C20E0203272
-:10419000A0F48B3269F030F4803259F0833269F444
-:1041A00020612CC08D3239F0803339F4216026C073
-:1041B0002260246023C0286021C027FD27C030ED85
-:1041C000380F3A3078F426FF06C0FAE05F9E300DD3
-:1041D0001124532E13C08AE0389E300D1124332E43
-:1041E00020620CC08E3221F426FD6BC1206406C013
-:1041F0008C3611F4206802C0883641F4F60193FD34
-:10420000859193FF81916F018111C1CF982F9F7D7F
-:104210009554933028F40C5F1F4FFFE3F9830DC0D2
-:10422000833631F0833771F0833509F05BC022C0EB
-:10423000F801808189830E5F1F4F44244394512CE1
-:10424000540115C03801F2E06F0E711CF801A08016
-:10425000B18026FF03C0652D70E002C06FEF7FEFD5
-:10426000C5012C870E948C222C0183012C852F777D
-:10427000222E17C03801F2E06F0E711CF801A080E9
-:10428000B18026FF03C0652D70E002C06FEF7FEFA5
-:10429000C5012C870E9481222C012C852068222EAA
-:1042A000830123FC1BC0832D90E048165906B0F40F
-:1042B000B70180E290E00E94A7223A94F4CFF50182
-:1042C00027FC859127FE81915F01B70190E00E9454
-:1042D000A72231103A94F1E04F1A510841145104C9
-:1042E00071F7E5C0843611F0893639F5F80127FFFA
-:1042F00007C060817181828193810C5F1F4F08C06C
-:1043000060817181882777FD8095982F0E5F1F4F00
-:104310002F76B22E97FF09C0909580957095619584
-:104320007F4F8F4F9F4F2068B22E2AE030E0A401CC
-:104330000E94D922A82EA81844C0853729F42F7EC0
-:10434000B22E2AE030E025C0F22FF97FBF2E8F3643
-:10435000C1F018F4883579F0B4C0803719F0883787
-:1043600021F0AFC02F2F2061B22EB4FE0DC08B2DD7
-:104370008460B82E09C024FF0AC09F2F9660B92E12
-:1043800006C028E030E005C020E130E002C020E1B6
-:1043900032E0F801B7FE07C06081718182819381AC
-:1043A0000C5F1F4F06C06081718180E090E00E5F5E
-:1043B0001F4FA4010E94D922A82EA818FB2DFF7719
-:1043C000BF2EB6FE0BC02B2D2E7FA51450F4B4FECD
-:1043D0000AC0B2FC08C02B2D2E7E05C07A2C2B2DD6
-:1043E00003C07A2C01C0752C24FF0DC0FE01EA0D1C
-:1043F000F11D8081803311F4297E09C022FF06C09F
-:104400007394739404C0822F867809F0739423FD0B
-:1044100013C020FF06C05A2C731418F4530C5718FD
-:10442000732C731468F4B70180E290E02C870E942B
-:10443000A72273942C85F5CF731410F4371801C09C
-:10444000312C24FF12C0B70180E390E02C870E943A
-:10445000A7222C8522FF17C021FF03C088E590E02A
-:1044600002C088E790E0B7010CC0822F867859F02F
-:1044700021FD02C080E201C08BE227FD8DE2B70181
-:1044800090E00E94A722A51438F4B70180E390E0E1
-:104490000E94A7225A94F7CFAA94F401EA0DF11DC5
-:1044A0008081B70190E00E94A722A110F5CF3320B0
-:1044B00009F451CEB70180E290E00E94A7223A941D
-:1044C000F6CFF7018681978102C08FEF9FEF2C9680
-:1044D000E2E10C945323F999FECF92BD81BDF89A85
-:1044E000992780B50895262FF999FECF1FBA92BD5E
-:1044F00081BD20BD0FB6F894FA9AF99A0FBE0196C5
-:104500000895FC010590615070400110D8F7809526
-:1045100090958E0F9F1F0895FC016150704001908F
-:104520000110D8F7809590958E0F9F1F0895DC019C
-:10453000FC01672F71917723E1F7329704C07C91DA
-:104540006D9370836291AE17BF07C8F308950F9300
-:104550001F93CF93DF93182F092FEB018B8181FDE0
-:1045600003C08FEF9FEF20C082FF10C04E815F819C
-:104570002C813D81421753077CF4E881F9819F012A
-:104580002F5F3F4F39832883108306C0E885F98564
-:10459000812F0995892B29F72E813F812F5F3F4F6E
-:1045A0003F832E83812F902FDF91CF911F910F9109
-:1045B0000895FA01AA27283051F1203181F1E894B9
-:1045C0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E006
-:1045D0003ED0B4E03CD0670F781F891F9A1FA11D01
-:1045E000680F791F8A1F911DA11D6A0F711D811D02
-:1045F000911DA11D20D009F468943F912AE0269FC7
-:1046000011243019305D3193DEF6CF010895462F25
-:104610004770405D4193B3E00FD0C9F7F6CF462F06
-:104620004F70405D4A3318F0495D31FD405241936F
-:1046300002D0A9F7EACFB4E0A6959795879577952C
-:104640006795BA95C9F700976105710508959B01B3
-:10465000AC010A2E06945795479537952795BA953C
-:10466000C9F7620F731F841F951FA01D08952F9215
-:104670003F924F925F926F927F928F929F92AF92F2
-:10468000BF92CF92DF92EF92FF920F931F93CF933F
-:10469000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFD6
-:1046A0000FBECDBF09942A88398848885F846E84FC
-:1046B0007D848C849B84AA84B984C884DF80EE8046
-:1046C000FD800C811B81AA81B981CE0FD11D0FB64F
-:1046D000F894DEBF0FBECDBFED01089510E0CCEE23
-:1046E000D0E004C0FE010E949A1D2296CE3ED10762
-:0646F000C9F7F894FFCFAA
-:1046F6000000AB0480002C01066C136C133B0049D0
-:1047060054506172616D733A20004F4B005620334E
-:104716002E322E302D623132205349474E414C64A1
-:1047260075696E6F202D20636F6D70696C656420EE
-:1047360061742046656220313320323031362032B2
-:10474600313A33343A30390053796E633A200020D7
-:104756002D3E2053796E63466163743A20002C2007
-:10476600436C6F636B3A20002C20546F6C3A200028
-:104776002C20506174744C656E3A20002C205075C4
-:104786006C73653A20002C20002C206D53746172E6
-:10479600743A20005369676E616C3A20002E20003F
-:1047A600205B005D005061747465726E3A200020D3
-:1047B60050002A5B002C0025303258004C4C3D003E
-:1047C6004C483D00534C3D0053483D00433D004D91
-:1047D6005300443D0043503D0053503D004F004DB3
-:1047E60055004D430000000000EA1566176C15855C
-:1047F600157715C8150D0A006E616E00696E6600A4
-:064806006F7666002E0033
+:1000D00003030301020408102040800102040810F9
+:1000E0002001020408102000CB18BF1811241FBEE5
+:1000F000CFEFD8E0DEBFCDBF11E0A0E0B1E0E0EC93
+:10010000F3E402C005900D92AC39B107D9F724E0B1
+:10011000ACE9B1E001C01D92A435B207E1F710E0EF
+:10012000C5E7D0E004C02197FE010E94B419C4378E
+:10013000D107C9F70E949D110C94D3210C940000A3
+:100140000E949E1B2F923F924F925F926F927F92DE
+:100150008F929F92AF92BF92CF92DF92EF92FF92D7
+:100160000F931F93CF93DF93CDB7DEB7AF970FB643
+:10017000F894DEBF0FBECDBF8091E703811106C0AA
+:100180008091B103883210F40C94E7091092B40303
+:1001900060E080E00E94E70F8090D803882D90E017
+:1001A0009C01215031093E8F2D8F8091C403909185
+:1001B000C503A091C603B091C7038F8B988FA98FF9
+:1001C000BA8F9091B1039B8FF12C8F2D90E0ED8D24
+:1001D000FE8D8E179F070CF0AFC0FC01E955FD4F57
+:1001E0009F012C5F3F4F4481442309F4A3C0EE24B8
+:1001F000E394EF0C880F991FDC01A853BC4FBA8B16
+:10020000A98B3E8B2D8BE81408F094C02E2C312C3A
+:10021000F101E955FD4F9480992009F489C0E989DD
+:10022000FA89A080B180F101EE0FFF1FE853FC4F67
+:1002300000811181C8018A259B25990F880B982F71
+:10024000892B09F075C0B80117FF04C0662777270E
+:10025000601B710B072E000C880B990B0E945A2013
+:100260002F89388D498D5A8D0E94B9202B013C0170
+:100270006801CA18DB08D7FE03C0D194C194D10825
+:1002800020E030E040E05FE3C301B2010E94B9200A
+:100290009B01AC01C301B2010E94BB190E94991AD3
+:1002A0006C157D050CF444C0E3EBF2E08E2F23EBDC
+:1002B00032E0821B3B8D831730F480818E1101C0A8
+:1002C000F0823196F3CFAD89BE89DC90492D50E0A4
+:1002D000ED2DF0E09F01D5010E94AD19049F900122
+:1002E000059F300D149F300D11248901330F220B0F
+:1002F000330B600F711F821F931FE40FF51F9F01C7
+:10030000FF0F440B550B0E948E19E989FA8931833E
+:1003100020839D0CAD89BE899C92F101E955FD4F6A
+:100320001482F101EE0FFF1FE853FC4F118210827F
+:10033000E39469CFF39449CF60E080E00E94E70F37
+:100340008FEF8093A7026090D8037090B10358ECB0
+:10035000C52E53E0D52E00E010E0EE24EA94FE2CEA
+:10036000872C912CA12CB12C061508F059C0FFEF59
+:10037000EF16FF0611F5D6018D919C9197FD1DC0DA
+:10038000F801E955FD4F648170E080E090E00E9443
+:100390005A201B012C01C501B4010E945A202BE7F1
+:1003A00034E14EE25EE30E94B9209B01AC01C20140
+:1003B000B1010E94CF1A181664F1F6018081918173
+:1003C00097FD28C0F701EE0FFF1FE853FC4F208177
+:1003D000318182179307F4F4F801E955FD4F6481E8
+:1003E00070E080E090E00E945A201B012C01C501C2
+:1003F000B4010E945A202BE734E14EE25EE30E94F2
+:10040000B9209B01AC01C201B1010E94CF1A18169C
+:100410000CF478010F5F1F4FF2E0CF0ED11CA4CF78
+:100420002FEFE216F20641F0E092A70281E090E0A1
+:100430009093BB038093BA038091BA039091BB035E
+:10044000019709F074C04FEF460DE091A7020E2E00
+:10045000000CFF0B072D10E0480131E0831A9108D2
+:10046000CF01880F991FDC01A853BC4F7D0137E0F5
+:10047000632E085211094F3F09F457C0C42E042EB1
+:10048000000CDD08D601AA0FBB1FA853BC4F2D914D
+:100490003C9137FF48C03195219531092836B2E4A7
+:1004A0003B070CF040C0D701AD90BC90C901B5012D
+:1004B0000E94441968327105B0F56A9CC0016B9CBA
+:1004C000900D11248217930770F5D601A955BD4FE1
+:1004D00014968C918250863030F550E0852F90E054
+:1004E0008815990584F4DC01A955BD4F1D962C9102
+:1004F0001D9730E02C153D05A1F41C962C9130E0A1
+:100500002E173F0771F4801791076CF44093DA03BC
+:1005100082E090E09093BB038093BA035093B203C0
+:1005200006C05F5FDBCF4150A6CF4093DA038091D6
+:10053000AA02882309F427C18091BA039091BB03D2
+:10054000029709F020C1B7E2B71508F01CC18091ED
+:10055000B20392E0980F9093B3036091DA03062EF2
+:10056000000C770BA091A7020A2E000CBB0B472DA5
+:1005700050E041505109292F30E024173507A4F4E9
+:10058000F901E955FD4F258530E02617370751F46D
+:10059000248530E02A173B0729F491509093B30348
+:1005A00011E005C09E5FE7CF9093B30310E09091F8
+:1005B000B303791610F47092B3036091B3030E94F1
+:1005C000E70F112351F08091B30390E02091B20323
+:1005D000821B9109889734F4CFC08091B1038E3F7C
+:1005E00008F0B8C066E671E08BED93E00E941C1144
+:1005F00066E671E081EE93E00E941C1162E08BEDF3
+:1006000093E00E94CF1067E671E08BED93E00E94CB
+:10061000E2106BE38BED93E00E94CF1010E080912D
+:10062000D803181778F5212F30E0C901880F991FDA
+:10063000FC01E853FC4F7F0180819181892B01F1FE
+:10064000F901E955FD4F84818823D1F060E58BEDF8
+:1006500093E00E94CF10812F0E94C10F65E971E0E5
+:100660008BED93E00E94E210D7016D917C918BEDB0
+:1006700093E00E949F106BE38BED93E00E94CF10FC
+:100680001F5FCDCF6AE671E08BED93E00E94E21030
+:100690006BE381EE93E00E94CF106DE671E081EE96
+:1006A00093E00E94E2106091A702062E000C770BE7
+:1006B00081EE93E00E949F106BE381EE93E00E9435
+:1006C000CF1061E771E081EE93E00E94E21060914B
+:1006D000DA03062E000C770B81EE93E00E949F1048
+:1006E0006BE381EE93E00E94CF108091B6038823E4
+:1006F00059F065E771E081EE93E00E94E2106BE350
+:1007000081EE93E00E94CF1063E081EE93E00E94BF
+:10071000CF106AE081EE93E00E94CF100091B30306
+:100720001091B2038BED93E00E94B60E011768F0B2
+:10073000E12FF0E0E955FD4F648570E080E090E046
+:100740004AE00E94E70E1F5FF1CF81EE93E00E9426
+:10075000B60E16C06091B203623070F08091B303A0
+:1007600090E08D3F910544F087EA92E00E94FC0DF5
+:1007700081E08093B50307C087EA92E00E94BD0D37
+:1007800081E08093B4038091B403811120C68091ED
+:10079000A802811105C08091A902882309F417C617
+:1007A00066E671E08BED93E00E941C1166E671E055
+:1007B00081EE93E00E941C1162E08BED93E00E94B9
+:1007C000CF10B091A902BF8BBB2309F453C5809110
+:1007D000F301811148C082E38093E70181E08093B7
+:1007E000E4011092E5018FEA91E00E94AD0D809145
+:1007F000E40127E030E0281B31099091E50187E012
+:1008000061E070E0482F50E0241735074CF4AB014D
+:10081000082E01C0440F0A94EAF7942B8150F2CFBE
+:100820009093E5018FEF8093EA018093EB01809331
+:10083000EC018093ED011092F1011092F20187EA30
+:1008400092E09093E9018093E8011092EF011092F9
+:10085000EE0184E18093F0018FEA91E00E94AD0DFA
+:1008600081E08093F3018091E70381111BC08FEF3A
+:100870008093EA018093EB018093EC018093ED017A
+:100880001092F1011092F2011092EF011092EE011C
+:1008900084E18093F0018FEA91E00E94AD0D81E147
+:1008A0008093F0018091E703882381F08091E80133
+:1008B0009091E901FC01E25FFE4F108233971082B4
+:1008C000E12C912CF12CCC24C394D1C12090E801CF
+:1008D0003090E901F101EF5CFE4F1081143008F413
+:1008E000BEC4B797608170E080E090E00E945A201B
+:1008F0002AE037ED43E25DE30E94B9206B017C0101
+:1009000020E030E0A9010E94CF1A20E030E040E072
+:100910005FE387FD05C0C701B6010E94BB1904C093
+:10092000C701B6010E94BA190E94991A7101E4E048
+:10093000EE0EF11CD101AF5DBE4FC12C40E0F701BE
+:1009400081917F01861758F15C2D852F90E055230A
+:10095000F1F0FE01E80FF91F70819101270F311DA1
+:10096000270F311DF901EF5DFE4F2D913C9111973D
+:100970000190F081E02D2E173F074CF4E1E0F0E00C
+:10098000EC0FFD1FE80FF91F70835150DECFE1E03F
+:10099000F0E0EC0FFD1FE80FF91F4083C3944F5F99
+:1009A00012964113CCCF1091EA010091EC01E09036
+:1009B000EB01F090ED019E012F5F3F4F388B2F87A9
+:1009C0003E8F2D8F5F855DA7C101865F9E4F9FA7DC
+:1009D0008EA78D8D2F85821B8C1508F091C0AD8D53
+:1009E000BE8D2D91BE8FAD8FC101820F911D820FE3
+:1009F000911DFC01EF5DFE4F208131813C8F2B8FDB
+:100A00001216130634F7220F331F38A72FA3AE0197
+:100A10004F5F5F4F5CA34BA31FEF0FEFEE24EA94F1
+:100A2000FF24FA941A8A198A19A21AA28FEF9FEF4B
+:100A30009E8B8D8B2B8D3C8D032E000C440B550B08
+:100A400029A73AA74BA75CA78BA1FDA58F1B8C15E7
+:100A500008F0BFCFABA1BCA1DD90BCA3ABA3ED2D33
+:100A6000F0E0F8A3EF8FEE0FFF1FE20DF31DEF5D37
+:100A7000FE4F8080918069A57AA58BA59CA50E94D8
+:100A80005A202B013C019EA28DA297FE06C0222770
+:100A90003327281939093EA32DA3AB8CBC8C4DA15B
+:100AA0005EA1A41AB50AB7FE03C0B194A194B1081F
+:100AB00020E030E040E05FE3C301B2010E94B920D2
+:100AC0000E94991A6A157B050CF046C3AFA0B8A422
+:100AD0008DA19EA1A81AB90AB7FE03C0B194A19432
+:100AE000B1082DEC3CEC4CE45FE3C301B2010E9481
+:100AF000B9200E94991A6A157B050CF071C4A4CF25
+:100B0000F092ED01E092EB010093EC011093EA0109
+:100B1000A6C3D394D71408F0E5C0F801ED0DF11D7C
+:100B2000848590E08417950709F0F3C48F8862E00C
+:100B300070E0260E371E882061F3DF10FDC4DD2033
+:100B400009F4FAC443859801240F311D240F311D87
+:100B5000F901EF5DFE4F20813181B90137FF04C0FB
+:100B600066277727621B730B61304DE774070CF023
+:100B7000E3C4880F991F800F911FFC01EF5DFE4FAA
+:100B80008081918182279327990F880B982F892B39
+:100B900009F4D2C4072E000C880B990B0E945A202E
+:100BA0002B013C016091EE017091EF01072E000CCA
+:100BB000880B990B0E945A20698B7A8B8B8B9C8BAC
+:100BC0009B01AC01C301B2010E94271A4B015C01D9
+:100BD00020E030E0A9010E94CF1A20E030E040E0A0
+:100BE0005FE387FD9AC4C501B4010E94BB190E944E
+:100BF000991A623071050CF49FC4072E000C880B03
+:100C0000990B0E945A2029893A894B895C890E9454
+:100C1000B9209B01AC01C301B2010E94271A9B01BC
+:100C2000AC0160E070E080E89FE30E94BA194B01DC
+:100C30005C0120E030E0A9010E94CF1A18160CF0E8
+:100C400071C429E23CE54FE85DE3C501B4010E94AF
+:100C5000532018160CF470C4F801E55FFE4F808134
+:100C600081508083FF24F394FD0C99249394009188
+:100C7000E8011091E901F801E65FFE4F9081F91655
+:100C800008F081C08091F10181112CC0F801EF0DB5
+:100C9000F11D848590E04091EA01042E000C550B73
+:100CA000A091EC012091EB01A090ED018417950734
+:100CB00009F418C4622F022E000C770B86179707D1
+:100CC00009F410C46A2F0A2E000C770B86179707B9
+:100CD00009F408C46A2D0A2C000C770B86179707B5
+:100CE00009F400C48091F201882309F44AC080917C
+:100CF000F101882309F445C0AF2CB12CF801EA0DAD
+:100D0000FB1D848590E02091EC01022E000C330B3A
+:100D10008217930709F46FC32091ED01022E000C96
+:100D2000330B8217930709F466C32091EA01022E60
+:100D3000000C330B8217930709F4B7C32091EB0122
+:100D4000022E000C330B8217930709F4AEC3809177
+:100D5000F001082E000C990B2091E2013091E30183
+:100D60002817390708F04DC01092F1011092F201D6
+:100D70008FEA91E00E94AD0D912C8091F1018111DB
+:100D80003DC3F39474CFD801A45FBE4F81E0982691
+:100D90008F2D89198C932EEFF21249C09E3F09F0D6
+:100DA00046C011976C916230F0F08091F00187FDA0
+:100DB0008F5F8595082E000C990B2091E2013091F0
+:100DC000E3018217930778F4C8010E94FC0D80911B
+:100DD000E8019091E901FC01E25FFE4F21E02083F0
+:100DE000F29620833CC28C91811121C0D801A05C75
+:100DF000BE4F81E08C931082F801E25FFE4F80834A
+:100E00002EC2F801E45FFE4FEE24E3949E248F2D62
+:100E1000891980836F2DC8010E94FC0DE091E801C3
+:100E2000F091E901E25FFE4FE0821092F1018091C2
+:100E3000F001082E000C990B2091E2013091E301A2
+:100E40002817390708F40BC266E671E0CE0109964F
+:100E50000E9442116AE671E0CE0109960E941C11BF
+:100E600080E390E3A0E089839A83AB836091E20101
+:100E70007091E30176956795769567956E5F7F4FE4
+:100E8000CE0109960E944A10D12C8E010F5F1F4F90
+:100E900067E7A62E61E0B62E4091E10150E02D2DCE
+:100EA00030E08091E701ED2C0D2C000CFF0890E064
+:100EB00024173507F4F4E816F9062CF4F701E15588
+:100EC000FE4F808101C08FEF1F928F93BF92AF9230
+:100ED0001F930F930E94EE1BB801CE0109960E944A
+:100EE000E210D3940F900F900F900F900F900F90EF
+:100EF000D3CFE816F9062CF4F701E155FE4F8081B7
+:100F000001C08FEF82958F701F928F938CE791E0D5
+:100F10009F938F931F930F930E94EE1BB801CE01F6
+:100F200009960E94E2108091E2019091E30187709E
+:100F3000992701970F900F900F900F900F900F909F
+:100F4000049710F18091E70190E0E816F9062CF47F
+:100F5000F701E155FE4F808101C08FEF8F701F9226
+:100F60008F938CE791E09F938F931F930F930E9431
+:100F7000EE1BB801CE0109960E94E2100F900F906F
+:100F80000F900F900F900F9061E871E08BED93E060
+:100F90000E94E2106BE38BED93E00E94CF1060E2C1
+:100FA00070E08BED93E00E944A108BED93E0009788
+:100FB00009F472C064E871E00E94E2108091E801D7
+:100FC0009091E901E091EA01EE0FFF0BE80FF91FA4
+:100FD000EF5DFE4F608171818BED93E00E949F1069
+:100FE0006BE38BED93E00E94CF1068E871E08BED2E
+:100FF00093E00E94E2108091E8019091E901E09174
+:10100000EB01EE0FFF0BE80FF91FEF5DFE4F608164
+:1010100071818BED93E00E949F106BE38BED93E069
+:101020000E94CF106CE871E08BED93E00E94E2101B
+:101030008091E8019091E901E091EC01EE0FFF0B46
+:10104000E80FF91FEF5DFE4F608171818BED93E03A
+:101050000E949F106BE38BED93E00E94CF1060E93C
+:1010600071E08BED93E00E94E2108091E801909195
+:10107000E901E091ED01EE0FFF0BE80FF91FEF5DC5
+:10108000FE4F608171818BED93E00E949F106BE3B6
+:101090008BED93E00E94CF106BE381EE93E00E9412
+:1010A000CF1067E070E081EE93E00E944A1081EE7D
+:1010B00093E0009789F064E971E00E94E21060918A
+:1010C000EE017091EF0181EE93E00E949F106BE3BF
+:1010D00081EE93E00E94CF1065E871E081EE93E02D
+:1010E0000E94E2104AE0B8018091E2019091E30190
+:1010F0000E942920F80101900020E9F73197AF0103
+:10110000401B510BB80181EE93E00E9471106BE31C
+:1011100081EE93E00E94CF1063E081EE93E00E94A5
+:10112000CF106AE081EE93E00E94CF108BED93E048
+:101130000E94B60ECE0109960E94B60E81EE93E093
+:101140000E94B60E1092E70381E08093B403CE01B3
+:1011500009960E943D118EC0181419040CF0AAC102
+:10116000FD2CEF8DF8A1E20DF31D8481A989BA89C8
+:10117000A80FB11DBA8BA98BBAA1BF5FBAA3ED8925
+:10118000FE89E80DF91DFE8BED8B1F3F09F45CCC49
+:101190000F3F09F459CC5FEFE51609F455CCF5166D
+:1011A00009F452CC89889A8897FE03C0919481945F
+:1011B0009108092C000CAA08BB08AEA5BFA56C912C
+:1011C00070E080E090E00E945A202AE037ED43E290
+:1011D0005DE30E94B9202B013C0120E030E0A90131
+:1011E0000E94CF1A20E030E040E05FE387FDFEC0C0
+:1011F000C301B2010E94BB190E94991A68157905B2
+:101200008A059B050CF4E5CBB9A1EAA1BE13E1CB9D
+:101210001E1509F4DECB0F1509F4DBCB101709F40A
+:10122000D8CBEF1409F4D5CB1F1509F4D2CBE016B7
+:1012300009F4CFCBF092ED01E092EB010093EC01C9
+:101240001093EA018D899E8966E070E00E9458192A
+:101250007093EF016093EE013F89311127CB8091AC
+:10126000E703882339F08091B503882319F081E0E2
+:101270008093B4038091A802882309F4A8C08091C8
+:10128000BA039091BB03019709F0A1C08091B40308
+:1012900081119DC08091B103883208F498C067E93C
+:1012A00071E08BED93E00E94E2106BE38BED93E035
+:1012B0000E94CF1010E08091D803181788F5212FD5
+:1012C00030E0C901880F991FAC0148535C4F7A0187
+:1012D000DA018D919C91892B09F1F901E955FD4FB6
+:1012E00084818823D9F06AE971E08BED93E00E9454
+:1012F000E210812F0E94C10F65E971E08BED93E050
+:101300000E94E210F701608171818BED93E00E94F1
+:101310009F106BE38BED93E00E94CF101F5FCBCF4C
+:101320006AE671E08BED93E00E94E2106BE381EEE0
+:1013300093E00E94CF106DE671E081EE93E00E9491
+:10134000E2106091A702062E000C770B81EE93E06D
+:101350000E949F106BE381EE93E00E94CF1080917A
+:10136000B603882359F065E771E081EE93E00E94AF
+:10137000E2106BE381EE93E00E94CF1063E081EE18
+:1013800093E00E94CF106AE081EE93E00E94CF10BC
+:101390000091B10301508BED93E00E94B60E10E076
+:1013A000E12FF0E0E955FD4F648570E080E090E0CA
+:1013B0004AE00E94E70E1F5F011790F781EE93E06D
+:1013C0000E94B60E1092B50381E08093B403809121
+:1013D000B5038111C6C087EA92E00E94BD0DC1C06D
+:1013E000181419040CF07CC0ED2CBBCEC301B20163
+:1013F0000E94BA1901CFE92C9C24BFCCEE2009F43D
+:10140000C0CC8091E8019091E901FC01EA0DFB1D3F
+:101410002485820F911D820F911DFC01EF5DFE4F0F
+:1014200040815181E091E1018091E701E817D8F511
+:101430008091E6012091E2013091E301873051F47F
+:101440002115310539F0EF5FE093E101F0E0E1555E
+:10145000FE4F1082E091E101F0E0A82FB0E0E155ED
+:10146000FE4F61E070E01416150614F060E070E0C5
+:10147000082E01C0660F0A94EAF79081692B6083F9
+:101480002F5F3F4F3093E3012093E2019091E401FD
+:10149000A91BB109B7FD04C0891B8093E60103C0F5
+:1014A000E7E0E093E601E12C6CCCEE24E394992490
+:1014B000939463CC0D2DEF8DF8A1E20DF31D848183
+:1014C00029893A89281B31093A8B298B39A13F5F39
+:1014D00039A34D895E89481959095E8B4D8B55CECC
+:1014E0001D2DE9CFF801E55FFE4FF082C092F101BA
+:1014F000C092F20131977080022E000C330B0A2E3D
+:10150000000CBB0B0A2C000CBB08DF2C212C312C4F
+:1015100001CB82179307D1F409CBC501B4010E9416
+:10152000BA1965CB29E23CE54FE85DEBC501B40192
+:101530000E94CF1A87FF90CB51E025223324C101AE
+:10154000A1E08A27B82FB1709B2ECCCB8A179B07BE
+:1015500021F08A159B0509F0C5CB812C61E070E074
+:10156000E8CAAF960FB6F894DEBF0FBECDBFDF91CD
+:10157000CF911F910F91FF90EF90DF90CF90BF9090
+:10158000AF909F908F907F906F905F904F903F9023
+:101590002F900895FC01918D828D981761F0828DB6
+:1015A000DF01A80FB11D5D968C91928D9F5F9F7397
+:1015B000928F90E008958FEF9FEF0895FC01918D39
+:1015C000828D981731F0828DE80FF11D858D90E0A6
+:1015D00008958FEF9FEF0895FC01918D228D892F43
+:1015E00090E0805C9F4F821B91098F73992708952B
+:1015F00080E092E00E94EC0A21E0892B09F420E0CF
+:10160000822F0895FC01848DDF01A80FB11DA35A1C
+:10161000BF4F2C91848D90E001968F739927848F12
+:10162000A689B7892C93A089B1898C9180648C9309
+:10163000938D848D981306C00288F389E02D8081F4
+:101640008F7D80830895EF92FF920F931F93CF9326
+:10165000DF93EC0181E0888F9B8D8C8D981305C002
+:10166000E889F989808185FD24C0F62E0B8D10E074
+:101670000F5F1F4F0F731127E02E8C8DE8120CC0E7
+:101680000FB607FCFACFE889F989808185FFF5CF8D
+:10169000CE010E94020BF1CF8B8DFE01E80FF11DF0
+:1016A000E35AFF4FF0820B8FEA89FB8980818062C9
+:1016B00007C0EE89FF896083E889F98980818064A9
+:1016C000808381E090E0DF91CF911F910F91FF9097
+:1016D000EF900895CF93DF93EC01888D8823C9F0B4
+:1016E000EA89FB89808185FD05C0A889B9898C912B
+:1016F00086FD0FC00FB607FCF5CF808185FFF2CFC6
+:10170000A889B9898C9185FFEDCFCE010E94020B8B
+:10171000E7CFDF91CF910895089508952091A20118
+:10172000E6E9F0E09491E0EEF0E08491ECECF0E09A
+:10173000E491EE2309F43BC0992339F1933091F001
+:1017400038F49130A9F0923001F594B59F7D12C024
+:10175000973091F09830A1F09430B9F490918000D6
+:101760009F7D03C0909180009F77909380000DC073
+:1017700094B59F7794BD09C09091B0009F7703C046
+:101780009091B0009F7D9093B000F0E0EE0FFF1FAE
+:10179000E555FF4FA591B4919FB7F894EC912111B5
+:1017A00003C080958E2301C08E2B8C939FBF109217
+:1017B000A2010895CF93C1E080E092E00E94EC0A7C
+:1017C000892BB9F080E092E00E94CA0A8A3041F089
+:1017D0001CF4882329F007C08D3011F0833219F4EE
+:1017E000C093A301E9CF682F81EA92E00E94CF1055
+:1017F000E3CFCF9108950E94F80A81110C94DA0B7F
+:1018000008951F920F920FB60F9211242F933F93BA
+:101810004F935F936F937F938F939F93AF93BF93F8
+:10182000EF93FF9380E092E00E94020BFF91EF9113
+:10183000BF91AF919F918F917F916F915F914F91E8
+:101840003F912F910F900FBE0F901F9018951F92F0
+:101850000F920FB60F9211242F938F939F93EF93B4
+:10186000FF93E0911002F09111028081E091160245
+:10187000F091170282FD12C09081809119028F5F52
+:101880008F7320911A02821751F0E0911902F0E053
+:10189000E050FE4F958F8093190201C08081FF9127
+:1018A000EF919F918F912F910F900FBE0F901F90EE
+:1018B0001895CF93DF9390E0FC01ED52FF4F2491F8
+:1018C000FC01E154FF4F8491882361F190E0880F7F
+:1018D000991FFC01EB54FF4FC591D491FC01E555D4
+:1018E000FF4FA591B491611109C09FB7F894888109
+:1018F000209582238883EC912E230BC0623061F403
+:101900009FB7F8943881822F809583238883EC9148
+:101910002E2B2C939FBF06C08FB7F894E8812E2BF7
+:1019200028838FBFDF91CF9108953FB7F8948091BE
+:10193000FC019091FD01A091FE01B091FF0126B53F
+:10194000A89B05C02F3F19F00196A11DB11D3FBFF7
+:10195000BA2FA92F982F8827820F911DA11DB11D85
+:10196000BC01CD0142E0660F771F881F991F4A9581
+:10197000D1F70895CF92DF92EF92FF920F931F93CA
+:101980000E94950C00919D0210919E0220919F0251
+:101990003091A0026B017C01C01AD10AE20AF30A5D
+:1019A0009701860160939D0270939E0280939F022F
+:1019B0009093A0020A3511052105310578F181E0E7
+:1019C000C8168DE7D806E104F10410F4960102C0B0
+:1019D00021E03DE74A9B03C0319521953109809173
+:1019E000E9038233D8F48091E9038F5F8093E903A0
+:1019F0008091EA036091E8030E9438199093EA030A
+:101A0000E091EA03F0E0EE0FFF1FE451FC4F318359
+:101A100020838091EA038F5F8093EA031F910F91E7
+:101A2000FF90EF90DF90CF9008951F920F920FB626
+:101A30000F9211242F933F938F939F93AF93BF9354
+:101A400080919E0190919F01A091A001B091A10170
+:101A50003091FB0123E0230F2D3720F40196A11DC7
+:101A6000B11D05C026E8230F0296A11DB11D2093CC
+:101A7000FB0180939E0190939F01A093A001B093DE
+:101A8000A1018091FC019091FD01A091FE01B09116
+:101A9000FF010196A11DB11D8093FC019093FD01F2
+:101AA000A093FE01B093FF01BF91AF919F918F91E1
+:101AB0003F912F910F900FBE0F901F9018951F927E
+:101AC0000F920FB60F9211242F933F934F935F9372
+:101AD0006F937F938F939F93AF93BF93EF93FF93F6
+:101AE000E0910501F09106010995FF91EF91BF91F9
+:101AF000AF919F918F917F916F915F914F913F91A6
+:101B00002F910F900FBE0F901F9018951F920F925C
+:101B10000FB60F9211242F933F934F935F936F93C0
+:101B20007F938F939F93AF93BF93EF93FF93E09136
+:101B30000301F09104010995FF91EF91BF91AF91DD
+:101B40009F918F917F916F915F914F913F912F91D5
+:101B50000F900FBE0F901F901895FC0180AD2E2F97
+:101B6000DF019A2F921B981710F41D92FACF12AA38
+:101B700014AA13AA87E087AB0895CF93DF93FC01E3
+:101B8000E65FFE4F1082DC01AF5CBE4F1C92B89640
+:101B90001082B0971082319611821082B0962FEF8A
+:101BA0002083FC012083EF5DFE4FEC01249611920F
+:101BB00011921992EA17FB07D1F7FC01E35FFE4F80
+:101BC0001082339626E930E0318320833D964DEC38
+:101BD0005CEC6CE47EE34083518362837383729791
+:101BE00010823396108231961082F1961082F4970B
+:101BF0001082DF91CF910895FC01E65FFE4F408196
+:101C0000A42FB0E0262F30E02A173B075CF4461BD8
+:101C1000408350E0B901645F7F4F680F791F0C96D5
+:101C20000C94AC1B08951F920F920FB60F921124C3
+:101C30002F933F934F935F936F937F938F939F93D4
+:101C4000AF93BF93EF93FF93E0919C01F0919D01BF
+:101C50000995FF91EF91BF91AF919F918F917F91E6
+:101C60006F915F914F913F912F910F900FBE0F9009
+:101C70001F901895CF93DF9387EA90E00E94640F3E
+:101C8000C7EAD2E08B8190E00E94850F82EA90E063
+:101C90000E94640F898190E00E94850F8DE990E099
+:101CA0000E94640F8A8190E0DF91CF910C94330FF2
+:101CB0002B9A2091000130910101482F429FC001D1
+:101CC000439F900D11248230910538F0880F991FA1
+:101CD000880F991F05970197F1F72B982091000124
+:101CE00030910101629FC001639F900D11248230E9
+:101CF000910538F0880F991F880F991F0597019754
+:101D0000F1F70895E8988CE89BE0909304018093A4
+:101D1000030108958AEB9CE09093040180930301F2
+:101D2000E9E6F0E080818C7F81608083E89A089505
+:101D3000CF93DF93EC01FB01248135810E94571181
+:101D4000CE01DF91CF910895009769F0FC010190D9
+:101D50000020E9F73197AF01481B590BBC0180E027
+:101D600092E00C94031080E090E00895FC0144811F
+:101D700055816081718180E092E00C940310CF93D3
+:101D8000DF930E94B60EEC0184E691E00E94A40E5F
+:101D90008C0F9D1FDF91CF910895CF92DF92EF922C
+:101DA000FF920E94950C6B017C010E94950CDC0156
+:101DB000CB018C199D09AE09BF09883E9340A1054E
+:101DC000B10598F3FF90EF90DF90CF9008958F9238
+:101DD0009F92AF92BF920F931F93CF93DF93CDB794
+:101DE000DEB7A1970FB6F894DEBF0FBECDBF19A224
+:101DF000423008F44AE08E010F5D1F4F842E912C73
+:101E0000A12CB12CA50194010E946C19E62FB901F7
+:101E1000CA0101501109EA3014F4E05D01C0E95C27
+:101E2000D801EC93232B242B252B61F7C8010E94AA
+:101E3000A40EA1960FB6F894DEBF0FBECDBFDF9102
+:101E4000CF911F910F91BF90AF909F908F90089569
+:101E5000E0910002F09101020190F081E02D682FE5
+:101E600080E092E00994CF92DF92EF92FF92CF93BD
+:101E7000DF936C01990FEE08FF08F7FE12C08DE2A8
+:101E80000E94280FEC0166277727CB016C197D098A
+:101E90008E099F094AE00E94E70E7C01EC0EFD1EB0
+:101EA00006C04AE0C701B6010E94E70E7C0184E645
+:101EB00091E00E94A40E8E0D9F1DDF91CF91FF90A7
+:101EC000EF90DF90CF9008950F931F93CF93DF9300
+:101ED0008C01C0E0D0E0F801EC0FFD1F6491662397
+:101EE00071F0E0910002F09101020190F081E02D8B
+:101EF00080E092E00995892B11F02196ECCFCE017C
+:101F0000DF91CF911F910F910895CF92DF92EF92C1
+:101F1000FF92CF93DF936C01990FEE08FF08F7FE55
+:101F200017C08DE20E94280FEC0166277727CB01AE
+:101F30006C197D098E099F094AE00E94E70E8C0FFB
+:101F40009D1FDF91CF91FF90EF90DF90CF9008958C
+:101F50004AE0C701B601DF91CF91FF90EF90DF908B
+:101F6000CF900C94E70ECF93DF930E94A40EEC0168
+:101F700084E691E00E94A40E8C0F9D1FDF91CF910B
+:101F800008950F931F93CF93DF9300D000D0CDB768
+:101F9000DEB74AE08E010F5F1F4FB80190E00E944C
+:101FA0000120F80101900020E9F73197AF01401BB3
+:101FB000510BB8018BED93E00E9471100F900F90C0
+:101FC0000F900F90DF91CF911F910F910895EBEA41
+:101FD000F2E098E09E0F11929E13FDCF611102C0B6
+:101FE0006091B103861768F4E82FF0E0E955FD4FE2
+:101FF000E485F0E0E955FD4F94819F5F94838F5F06
+:10200000F1CF08950895CF92DF92EF92FF920F9350
+:102010001F93CF93DF936C017A018B01C0E0D0E076
+:10202000CE15DF0589F0D8016D918D01D601ED91B6
+:10203000FC910190F081E02DC6010995892B11F4E6
+:102040007E0102C02196ECCFC701DF91CF911F9195
+:102050000F91FF90EF90DF90CF900895FC01808169
+:102060009181009711F00C94DA1F60E070E0CB01D1
+:102070000895FC01248135816217730748F480813B
+:102080009181009729F0FC01E60FF71F80810895E8
+:1020900080E008950F931F93CF93DF93EC01888125
+:1020A0009981009729F02A813B812617370788F408
+:1020B0008B016F5F7F4F0E94D41A009761F0998364
+:1020C00088831B830A832C813D81232B11F4FC011F
+:1020D000108281E001C080E0DF91CF911F910F91CC
+:1020E0000895EF92FF920F931F93CF93DF93FC011C
+:1020F000248135816115710511F480E019C0411505
+:102100005105A9F07B01EC018A01020F131FB801F0
+:102110000E944A10882389F3288139818C819D810E
+:10212000B701820F931F0E94BE1B1D830C8381E0A9
+:10213000DF91CF911F910F91FF90EF900895EF9253
+:10214000FF920F931F93CF93DF93CDB7DEB72897FE
+:102150000FB6F894DEBF0FBECDBF7C01CB014AE0C5
+:102160008E010F5F1F4FB8010E940120F8010190FE
+:102170000020E9F73197AF01401B510BB801C701AF
+:102180000E94711028960FB6F894DEBF0FBECDBF27
+:10219000DF91CF911F910F91FF90EF900895CF9312
+:1021A000DF9300D0CDB7DEB769831A8241E050E0FB
+:1021B000BE016F5F7F4F0E9471100F900F90DF91F3
+:1021C000CF9108956115710551F0FB010190002038
+:1021D000E9F73197AF01461B570B0C94711080E063
+:1021E0000895EF92FF920F931F93CF93DF93EC012B
+:1021F0007B018A01BA010E944A102881398181112C
+:102200000DC02115310519F0C9010E94241F198242
+:1022100018821D821C821B821A8206C01D830C83B9
+:10222000B701C9010E94BE1BCE01DF91CF911F9162
+:102230000F91FF90EF900895CF93DF93EC0161151C
+:10224000710559F0FB0101900020E9F73197AF01CA
+:10225000461B570B0E94F1100CC088819981009792
+:1022600011F00E94241F198218821D821C821B8279
+:102270001A82CE01DF91CF910895FC018081918176
+:102280000C94241FFC011182108213821282158289
+:1022900014826115710551F0FB0101900020E9F7EE
+:1022A0003197AF01461B570B0C94F1100895BF9264
+:1022B000CF92DF92EF92FF920F931F93CF93DF9312
+:1022C0007C016B018A01E9012417350720F4812F75
+:1022D0008901C42FD82F66E671E0C7010E94421120
+:1022E000D60114968D919C91159708171907D0F473
+:1022F0008C179D0708F4EC01D601ED91FC91119724
+:10230000EC0FFD1FB08010824D915C91BA01600FFF
+:10231000711FC7010E941C11D601ED91FC91EC0FB9
+:10232000FD1FB082C701DF91CF911F910F91FF90E8
+:10233000EF90DF90CF90BF900895CF93DF93CDB70C
+:10234000DEB7C757D1090FB6F894DEBF0FBECDBFB9
+:10235000789484B5826084BD84B5816084BD85B580
+:10236000826085BD85B5816085BD80916E0081608C
+:1023700080936E0010928100809181008260809332
+:102380008100809181008160809381008091800034
+:102390008160809380008091B10084608093B1005F
+:1023A0008091B00081608093B00080917A00846059
+:1023B00080937A0080917A00826080937A00809185
+:1023C0007A00816080937A0080917A00806880939F
+:1023D0007A001092C100E0911002F091110212E017
+:1023E0001083E0911002F09111021082E0910C0232
+:1023F000F0910D021082E0910E02F0910F0200E1C7
+:10240000008310921802E0911402F091150286E008
+:102410008083E0911202F0911302808180618083B9
+:10242000E0911202F0911302808188608083E09134
+:102430001202F0911302808180688083E091120281
+:10244000F091130280818F7D808360E082E00E94A2
+:10245000590C61E08BE00E94590C61E08DE00E9414
+:10246000590C00938100109280001093A60188E11E
+:1024700099E79093A5018093A4019093870080939E
+:10248000860082E1809381008EE89BE090939D011D
+:1024900080939C0181E080936F0080E090E00E9437
+:1024A00077218B3099F481E090E00E947721982F7A
+:1024B00091709093AA0281FB992790F99093A802BA
+:1024C00082FB882780F98093A9020AC06BE080E034
+:1024D00090E00E947F2167E081E090E00E947F21F0
+:1024E0000E948A0E68E270E081EA92E00E944A103F
+:1024F0009E012F5F3F4F19018091A301882309F4AA
+:1025000090C41092A30160E070E081EA92E00E9422
+:102510003910803539F48DE191E00E94B30F0E94AB
+:10252000CD0E72C48F3309F045C00E94280F8CE78E
+:1025300090E00E94640F86E50E94280F80E20E94CE
+:10254000280F89E60E94280F80E20E94280F82E56A
+:102550000E94280F80E20E94280F84E70E94280F23
+:1025600080E20E94280F88E50E94280F80E20E94E6
+:10257000280F86E40E94280F80E20E94280F83E53E
+:102580000E94280F80E20E94280F80E50E94280FF9
+:1025900080E20E94280F83E40E94280F80E20E94BC
+:1025A000280F87E40E94280F80E20E94280F86E609
+:1025B00091E004C0863529F480E291E00E94B30FD7
+:1025C00023C4823579F4809150049091510400978E
+:1025D00011F484E594E0D101A81BB90BCD010E9450
+:1025E000330F12C4893609F02DC161E070E081EA31
+:1025F00092E00E943910843709F4A5C0823781F532
+:1026000042E050E061EA72E0C1010E94980E8D81C3
+:102610009E81009721F46C961FAE6C9716C00297AE
+:1026200018F002E010E002C001E010E069817A8158
+:10263000A801CE01855A9F4F0E94C51BEBE5F0E033
+:10264000EC0FFD1FE00FF11F1082C1010E943D1130
+:10265000CE01855A9F4F0E94BC1F8093020173C018
+:10266000833709F05DC02B9A42E050E061EA72E0E6
+:10267000CE01855A9F4F0E94980EA1960EAD1FADB8
+:10268000A1970115110511F4198211C00732110526
+:1026900010F007E210E06D966EAD7FAD6D97A8016A
+:1026A000C1010E94C51BF101E00FF11F1082CE0194
+:1026B000855A9F4F0E943D110E94820E00E010E05B
+:1026C0008091020190E00817190734F56FE181E06D
+:1026D0000E94580E7101F70181917F018823C9F092
+:1026E000813371F0863449F08033A9F763E081E0EB
+:1026F0000E94580E63E081E009C063E081E002C0FF
+:1027000061E083E00E94580E61E083E00E94580E71
+:10271000E2CF0F5F1F4FD4CF0E948A0E2B9813C0B9
+:102720008336B1F442E050E061EA72E0C1010E94F8
+:10273000980EC1010E942E10709301016093000158
+:10274000C1010E943D1181EA92E00E94BF0E5CC36C
+:10275000803709F059C366E671E0CE018F599F4F6B
+:102760000E94421164E170E0CE018F599F4F0E9498
+:102770004A1067E571E0CE018F599F4F0E941C11EE
+:10278000809102016D961FAE1EAE6D976F961FAEC3
+:102790001EAE6F97A1961FAE1EAEA1974AE0B10183
+:1027A00090E00E942920B101CE01855A9F4F0E94DE
+:1027B0001C11A1964EAD5FADA1976D966EAD7FAD2C
+:1027C0006D97CE018F599F4F0E947110CE01855A8F
+:1027D0009F4F0E943D1160E671E0CE018F599F4FDF
+:1027E0000E94E21080910001909101016D961FAE50
+:1027F0001EAE6D976F961FAE1EAE6F97A1961FAE61
+:102800001EAEA1974AE0B1010E940120B101CE01A4
+:10281000855A9F4F0E941C11A1964EAD5FADA197A6
+:102820006D966EAD7FAD6D97CE018F599F4F0E9413
+:102830007110CE01855A9F4F0E943D11CE018F59D4
+:102840009F4F3BC2833509F040C266E671E0CE017E
+:102850008F599F4F0E9442116EE170E0CE018F5957
+:102860009F4F0E944A100E94820EE12CF12CFFEF34
+:10287000A896FFAFA89721E0AE962FAFAE9731E0B4
+:10288000E0963FAFE09732E1D32ECC24C39449E0E9
+:10289000B42E52E0A52E62E671E0CE01855A9F4F1C
+:1028A0000E9442118091A5029091A602E816F906B5
+:1028B00098F48090A1029090A2026D966EAD7FADCB
+:1028C0006D97C4018E0D9F1D0E94D41B009721F0AF
+:1028D0008C010819190902C00FEF1FEFCE01855AAC
+:1028E0009F4F0E943D110F3F2FEF120721F4AF962B
+:1028F0001FAEAF970EC13FEFE316F306C1F3980189
+:10290000A70161EA72E0CE01855A9F4F0E945711DC
+:10291000A3968EAD9FADA3970097A9F06D966EAD6F
+:102920007FAD6D976115710561F0A5964EAD5FADF8
+:10293000A597A1962EAD3FADA1974217530708F07A
+:10294000ECC30E94241F6D968EAD9FAD6D97A3962C
+:102950009FAF8EAFA3976F968EAD9FAD6F97A596E5
+:102960009FAF8EAFA597A1968EAD9FADA197A7966D
+:102970009FAF8EAFA7976D961FAE1EAE6D976F96E9
+:102980001FAE1EAE6F97A1961FAE1EAEA197CE01D1
+:10299000855A9F4F0E943D1178018FEFE81AF80A7F
+:1029A00060E070E0CE018F599F4F0E94391083354F
+:1029B00059F561E070E0CE018F599F4F0E943910A8
+:1029C000833409F462C08D3471F4A8968FADA89752
+:1029D0008F5FA8968FAFA897F101D89EE00DF11DEB
+:1029E0001124C28258CF823509F055CFA8962FAD59
+:1029F000A8972F5FA8962FAFA897F101D29EE00D60
+:102A0000F11D1124A28241C0803509F024C362E087
+:102A100070E0CE018F599F4F0E9439108D3309F01D
+:102A20003ACF22E030E041E050E0BE016F597F4FE5
+:102A3000CE01855A9F4F0E945711CE01855A9F4F54
+:102A40000E942E10162FCE01855A9F4F0E943D11D5
+:102A500043E050E0BE016F597F4FCE01855A9F4F32
+:102A60000E94980ECE01855A9F4F0E942E10A89664
+:102A70006FACA897B69CF0011124E10FF11D3396BD
+:102A8000EE0FFF1FE20DF31D40C3AE961FAEAE97D3
+:102A900002CFA9967FACA997672C712CAB967FAE1D
+:102AA0006EAEAB97A9963FADA99722E1329F700118
+:102AB0001124F101EE0DFF1D82818230B9F182E116
+:102AC000AB966EAC7FACAB97869DF001879DF00D09
+:102AD0001124E20DF31D8281813009F46AC02B9824
+:102AE000A9963FADA9973F5FA9963FAFA997A89632
+:102AF0006FACA897631668F6AE967FACAE97711070
+:102B00000E94CD0EAF962FADAF972F5FAF962FAF30
+:102B1000AF97AF963FADAF97E0966FACE0973615A5
+:102B200009F4C7C0A9961FAEA997B3CF26E0E20E5D
+:102B3000F11CE20CF31C4480558003810E94950C2B
+:102B40004B015C0110E04016510658F1B80181EAD2
+:102B500092E00E9439108053F701E80FF11DE80F51
+:102B6000F11D60807180630177FE04C0CC24DD24F8
+:102B7000C618D7080E94950C681579058A059B052B
+:102B8000C8F377FE02C02B9801C02B9AC601DD0C5A
+:102B9000AA0BBB0B880E991EAA1EBB1E0F5F1F4FF0
+:102BA000D2CF0E94950C681579058A059B05C8F35C
+:102BB00086CFE080F1807480E1967FAEE19713814B
+:102BC0000E94950C4B015C01C701FF0CAA0BBB0BCB
+:102BD000AD968CAF9DAFAEAFBFAFAD97880F991FCD
+:102BE000AA1FBB1FE5968CAF9DAFAEAFBFAFE597F9
+:102BF000E1966FACE197611608F471CF612F70E038
+:102C000081EA92E00E9439108A3314F097E301C000
+:102C100090E3891B04E0C02ED12C08E0482F880FD8
+:102C2000550B2401350120E0E02EF12CE422F522A1
+:102C3000E114F10451F12B98AD968CAD9DADAEAD84
+:102C4000BFADAD97480E591E6A1E7B1EE6962FAF8C
+:102C5000E697E7964FAFE797E8965FAFE8970E9451
+:102C6000950CE6962FADE697E7964FADE797E89679
+:102C70005FADE897641575058605970538F3213033
+:102C800031F021E0E114F104B1F22B9AD5CFE596B1
+:102C90008CAD9DADAEADBFADE597880E991EAA1E59
+:102CA000BB1E069591E0C91AD10809F0BACF1F5F83
+:102CB0009FCF0E948A0E81EA92E00E94BF0ECE0151
+:102CC0008F599F4F0E943D119FC08437C1F58FB728
+:102CD000F894C0909E01D0909F01E090A001F090E8
+:102CE000A1018FBFC701B60128EE33E040E050E0FC
+:102CF0000E946C19CA01B9010091A9011091AA01A1
+:102D00002091AB013091AC01C016D106E206F3066A
+:102D100050F42091A7013091A8012F5F3F4F3093CD
+:102D2000A8012093A701C092A901D092AA01E09224
+:102D3000AB01F092AC014AE00E94E70E61C0883519
+:102D4000B1F461E070E081EA92E00E9439108135CF
+:102D500011F40E94820E61E070E081EA92E00E942C
+:102D60003910853409F050C00E948A0E4DC0863457
+:102D700009F44AC08334F1F561E070E081EA92E041
+:102D80000E943910182F873419F40E943A0E3CC063
+:102D900062E070E081EA92E00E943910833539F0F8
+:102DA000853541F0833449F4E9EAF2E008C0EAEA03
+:102DB000F2E005C0E8EAF2E002C0E0E0F0E015343D
+:102DC00019F481E0808303C01434F1F410828091FF
+:102DD000A802682F660F9091A90224E0929FC0017B
+:102DE0001124862B6091AA02682B81E090E00E945A
+:102DF0007F210AC0873449F288E690E00E94640F80
+:102E000084E691E00E94A40E8091A301811106C086
+:102E100066E671E081EA92E00E941C1181E08093F5
+:102E2000A201AA24A394B3E0CB2ED12C8091E90374
+:102E3000882309F40DC18091E90381508093E9034F
+:102E40008091EB036091E8030E9438199093EB03A3
+:102E5000E091EB0381E08E0F8093EB03F0E0EE0F47
+:102E6000FF1FE451FC4F808191819093AE018093CC
+:102E7000AD011092B403E091B103EE2369F0F0E0EC
+:102E8000E955FD4F838590E0880F991F88539C4F2B
+:102E90009093C3038093C2032091AD013091AE01A2
+:102EA000E091C003F091C103318320838091B1038D
+:102EB000882369F0E091C203F091C30340815181FE
+:102EC00042275327452F441F4427441F01C041E098
+:102ED00051E0211533480CF450E091E08E3F09F4A5
+:102EE00090E0952311F0411109C091E08E3F09F067
+:102EF00090E09093B6030E94A20006C0883221F4AD
+:102F0000D092BB03C092BA03E090C003F090C1031B
+:102F1000D7010D911C91B80117FF04C066277727D0
+:102F2000601B710B072E000C880B990B0E945A2016
+:102F30002DEC3CEC4CE45EE30E94B9200E94A01A08
+:102F4000AB017093B8036093B7036091D803E8ECCA
+:102F5000F3E0B12CB616D9F0819191919C01202714
+:102F60003127330F220B322F232B79F4009769F08E
+:102F70003801681A790AC30177FE03C091958195DB
+:102F80009109481759070CF0D3C0B394E3CF6830C8
+:102F900041F560E080E00E94E70FE091D803F0E0A7
+:102FA000E955FD4F8481833010F00E94A2006091AA
+:102FB000B10370E0615071098091D90316161706AC
+:102FC00084F4FB01E955FD4F9485981307C06F5FAA
+:102FD0007F4F87EA92E00E94FC0D03C061507109A7
+:102FE000EDCFB090D903E091C003F091C10380818F
+:102FF0009181EB2DF0E0EE0FFF1FE853FC4F918322
+:10300000808381E08B0D883019F08093D90306C04E
+:103010001092D9038093D8031092E7038091D903CB
+:103020009091D803981710F48093D8038091B1033E
+:10303000E82FF0E0E955FD4FB4868F5F8093B10330
+:103040008091B403882309F4F1CEA092A201EECEC0
+:103050000E94FB0B51CA8235E9F461E070E0CE01B9
+:103060008F599F4F0E9439108D3309F014CC42E0E4
+:1030700050E0BE016F597F4FCE01855A9F4F0E948D
+:10308000980ECE01855A9F4F0E942E10E0966FAF8A
+:10309000E0973DC08434A9F4F101A8967FACA897CD
+:1030A000D79CE00DF11D1124A6968FADA6978C2C10
+:1030B000881A882D8E0D838301501109158304838E
+:1030C000EACB833409F0E7CB61E070E0CE018F59A1
+:1030D0009F4F0E9439108D3309F0DDCB42E050E064
+:1030E000BE016F597F4FCE01855A9F4F0E94980EA7
+:1030F000CE01855A9F4F0E942E10F101A8967FACF9
+:10310000A897D79CE00DF11D112471836083CE0137
+:10311000855A9F4F0E943D11BECB0E94BE1BA196B7
+:103120008EAD9FADA197A7969FAF8EAFA7972BCCE3
+:10313000B7FC2DCF0B2D000F110B08531C4FD801DE
+:103140006D917C91AB01770F660B770BF701808156
+:103150009181092E000CAA0BBB0B3A014B01680EA2
+:10316000791E8A1E9B1EC401B30122E030E040E0BC
+:1031700050E00E948E19D8012D933C9357CF81EADD
+:1031800092E00E943D1181EE93E00E943D118BED93
+:1031900093E00C943D110F931F93CF93DF93E0E0E6
+:1031A000F2E01382128288EE93E0A0E0B0E0848324
+:1031B0009583A683B78381E191E09183808385EC39
+:1031C00090E09587848784EC90E09787868780ECF1
+:1031D00090E0918B808B81EC90E0938B828B82ECE2
+:1031E00090E0958B848B86EC90E0978B868B118E8C
+:1031F000128E138E148EE8EEF3E082E38083118248
+:1032000013821282CCEBD3E0D093C103C093C003EE
+:103210000EEB13E01093C3030093C20366E671E064
+:103220008BED93E00E94421166E671E081EE93E03F
+:103230000E944211F801118210821982188287EAD5
+:1032400092E00E94BD0D66E671E081EA92E00E9484
+:1032500042110E94950C60939D0270939E02809390
+:103260009F029093A002DF91CF911F910F9108953B
+:10327000991B79E004C0991F961708F0961B881FC8
+:103280007A95C9F780950895AA1BBB1B51E107C029
+:10329000AA1FBB1FA617B70710F0A61BB70B881FE6
+:1032A000991F5A95A9F780959095BC01CD01089575
+:1032B00097FB072E16F4009407D077FD09D00E94E3
+:1032C000441907FC05D03EF4909581959F4F0895D1
+:1032D000709561957F4F0895A1E21A2EAA1BBB1B22
+:1032E000FD010DC0AA1FBB1FEE1FFF1FA217B307D2
+:1032F000E407F50720F0A21BB30BE40BF50B661FE8
+:10330000771F881F991F1A9469F7609570958095AB
+:1033100090959B01AC01BD01CF010895052E97FB4F
+:103320001EF400940E94A51957FD07D00E946C1945
+:1033300007FC03D04EF40C94A51950954095309598
+:1033400021953F4F4F4F5F4F089590958095709511
+:1033500061957F4F8F4F9F4F08950E94C421B7FF03
+:103360000895821B930B0895EE0FFF1F0590F491B3
+:10337000E02D09945058BB27AA270E94D2190C941B
+:103380003D210E942F2138F00E94362120F039F48F
+:103390009F3F19F426F40C942C210EF4E095E7FBE2
+:1033A0000C942621E92F0E944E2158F3BA17620788
+:1033B00073078407950720F079F4A6F50C94702123
+:1033C0000EF4E0950B2EBA2FA02D0B01B901900140
+:1033D0000C01CA01A0011124FF27591B99F0593F84
+:1033E00050F4503E68F11A16F040A22F232F342FCC
+:1033F0004427585FF3CF469537952795A795F0401A
+:103400005395C9F77EF41F16BA0B620B730B840B2E
+:10341000BAF09150A1F0FF0FBB1F661F771F881FE6
+:10342000C2F70EC0BA0F621F731F841F48F487953E
+:1034300077956795B795F7959E3F08F0B0CF939530
+:10344000880F08F09927EE0F9795879508950E94A9
+:103450003B1A0C943D210E94362158F00E942F21E6
+:1034600040F029F45F3F29F00C94262151110C946F
+:1034700071210C942C210E944E2168F39923B1F301
+:10348000552391F3951B550BBB27AA27621773078A
+:10349000840738F09F5F5F4F220F331F441FAA1F1E
+:1034A000A9F335D00E2E3AF0E0E832D091505040DA
+:1034B000E695001CCAF72BD0FE2F29D0660F771F88
+:1034C000881FBB1F261737074807AB07B0E809F06E
+:1034D000BB0B802DBF01FF2793585F4F3AF09E3FF3
+:1034E000510578F00C9426210C9471215F3FE4F390
+:1034F000983ED4F3869577956795B795F7959F5F36
+:10350000C9F7880F911D9695879597F90895E1E081
+:10351000660F771F881FBB1F621773078407BA07E0
+:1035200020F0621B730B840BBA0BEE1F88F7E0953B
+:1035300008950E94A01A6894B1110C947121089505
+:103540000E94562188F09F5798F0B92F9927B751BC
+:10355000B0F0E1F0660F771F881F991F1AF0BA9537
+:10356000C9F714C0B13091F00E947021B1E0089504
+:103570000C947021672F782F8827B85F39F0B93FF6
+:10358000CCF3869577956795B395D9F73EF49095EA
+:103590008095709561957F4F8F4F9F4F08950E9442
+:1035A000952008F48FEF0895A0E0B0E0EAEDFAE18D
+:1035B0000C949121EC01009721F4CB010E948F1E05
+:1035C000B8C0FC01E60FF71F9C0122503109E21739
+:1035D000F30708F4ACC0D9010D911C91119706179F
+:1035E0001707B0F00530110508F49FC0C801049713
+:1035F0008617970708F499C002501109061B170B8C
+:10360000019311936D937C93CF010E94241F8DC071
+:103610005B01A01AB10A4C01800E911EA0915204C8
+:10362000B091530440E050E0E12CF12C109709F4E4
+:103630004AC0A815B905D1F56D907C90119763012A
+:1036400082E0C80ED11CCA14DB0480F1A3014A1920
+:103650005B096A0182E0C80ED11C1296BC901297D9
+:103660001396AC91B5E0CB16D10440F0B282A3839F
+:1036700051834083D9016D937C930AC00E5F1F4F25
+:10368000C301800F911FF90191838083EB2DFA2FE5
+:10369000E114F10431F0D7011396FC93EE931297E5
+:1036A00044C0F0935304E09352043FC08D919C9129
+:1036B00011974817590708F4AC017D0112960D9037
+:1036C000BC91A02DB3CF80915004909151048815E6
+:1036D0009905E1F446175707C8F4809107019091C6
+:1036E0000801009741F48DB79EB740910B015091AE
+:1036F0000C01841B950BE817F907C8F4F0935104EB
+:10370000E0935004F901718360830FC0CB010E94E4
+:103710008F1E7C01009759F0A801BE010E94A31BD7
+:10372000CE010E94241FC70104C0CE0102C080E068
+:1037300090E0CDB7DEB7EEE00C94AD2181E090E0F3
+:10374000F8940C94D321FB01DC0102C001900D928E
+:1037500041505040D8F708956817790768F4FB0185
+:10376000DC01E40FF51FA40FB51F02C002900E92FA
+:1037700041505040D8F708950C94A31BFB01DC0185
+:1037800001900D920020E1F70895FB01DC0141500A
+:10379000504048F001900D920020C9F701C01D92E1
+:1037A00041505040E0F70895FB0151915523A9F095
+:1037B000BF01DC014D9145174111E1F759F4CD01ED
+:1037C0000190002049F04D9140154111C9F3FB01D2
+:1037D0004111EFCF81E090E001970895AEE0B0E0B5
+:1037E000E4EFFBE10C949B210D891E8986E08C831C
+:1037F0001A8309838FEF9FE79E838D83AE01475E17
+:103800005F4F6F89788DCE0101960E94111C2F8128
+:103810003885F801E20FF31F10822E96E4E00C9435
+:10382000B721ACE0B0E0E7E1FCE10C948D217C0134
+:103830006B018A01FC0117821682838181FFBDC161
+:10384000CE0101964C01F7019381F60193FD85911C
+:1038500093FF81916F01882309F4ABC1853239F45C
+:1038600093FD859193FF81916F01853229F4B70112
+:1038700090E00E94F91DE7CF512C312C20E020323E
+:10388000A0F48B3269F030F4803259F0833269F45D
+:1038900020612CC08D3239F0803339F4216026C08C
+:1038A0002260246023C0286021C027FD27C030ED9E
+:1038B000380F3A3078F426FF06C0FAE05F9E300DEC
+:1038C0001124532E13C08AE0389E300D1124332E5C
+:1038D00020620CC08E3221F426FD6BC1206406C02C
+:1038E0008C3611F4206802C0883641F4F60193FD4D
+:1038F000859193FF81916F018111C1CF982F9F7D99
+:103900009554933028F40C5F1F4FFFE3F9830DC0EB
+:10391000833631F0833771F0833509F05BC022C004
+:10392000F801808189830E5F1F4F44244394512CFA
+:10393000540115C03801F2E06F0E711CF801A0802F
+:10394000B18026FF03C0652D70E002C06FEF7FEFEE
+:10395000C5012C870E94EE1D2C0183012C852F7739
+:10396000222E17C03801F2E06F0E711CF801A08002
+:10397000B18026FF03C0652D70E002C06FEF7FEFBE
+:10398000C5012C870E94E31D2C012C852068222E66
+:10399000830123FC1BC0832D90E048165906B0F428
+:1039A000B70180E290E00E94F91D3A94F4CFF5014E
+:1039B00027FC859127FE81915F01B70190E00E946D
+:1039C000F91D31103A94F1E04F1A51084114510495
+:1039D00071F7E5C0843611F0893639F5F80127FF13
+:1039E00007C060817181828193810C5F1F4F08C085
+:1039F00060817181072E000C880B990B0E5F1F4FA1
+:103A00002F76722E97FF09C09095809570956195DD
+:103A10007F4F8F4F9F4F2068722E2AE030E0A40125
+:103A20000E94311EA82EA81844C0853729F42F7E85
+:103A3000B22E2AE030E025C0F22FF97FBF2E8F365C
+:103A4000C1F018F4883579F0B4C0803719F08837A0
+:103A500021F0AFC02F2F2061B22EB4FE0DC08B2DF0
+:103A60008460B82E09C024FF0AC09F2F9660B92E2B
+:103A700006C028E030E005C020E130E002C020E1CF
+:103A800032E0F801B7FE07C06081718182819381C5
+:103A90000C5F1F4F06C06081718180E090E00E5F77
+:103AA0001F4FA4010E94311EA82EA818FB2DFF77DE
+:103AB0007F2E76FE0BC0372D3E7FA51450F474FE8A
+:103AC0000AC072FC08C0372D3E7E05C0BA2C372DC7
+:103AD00003C0BA2C01C0B52C34FF0DC0FE01EA0DA5
+:103AE000F11D8081803311F4397E09C032FF06C098
+:103AF000B394B39404C0832F867809F0B39433FD54
+:103B000013C030FF06C05A2CB31418F4530C5B18C2
+:103B1000B32CB31468F4B70180E290E03C870E94B4
+:103B2000F91DB3943C85F5CFB31410F43B1801C0D4
+:103B3000312C34FF12C0B70180E390E03C870E9433
+:103B4000F91D3C8532FF17C031FD03C088E790E0C6
+:103B500002C088E590E0B7010CC0832F867859F049
+:103B600031FF02C08BE201C080E237FD8DE2B70178
+:103B700090E00E94F91DA51438F4B70180E390E0AD
+:103B80000E94F91D5A94F7CFAA94F401EA0DF11D91
+:103B90008081B70190E00E94F91DA110F5CF33207C
+:103BA00009F451CEB70180E290E00E94F91D3A94E9
+:103BB000F6CFF7018681978102C08FEF9FEF2C9699
+:103BC000E2E10C94A921FC010590615070400110C4
+:103BD000D8F7809590958E0F9F1F0895FC01615036
+:103BE000704001900110D8F7809590958E0F9F1F1F
+:103BF00008950F931F93CF93DF93FB01238121FD42
+:103C000003C08FEF9FEF28C022FF16C04681578167
+:103C1000248135814217530744F4A081B1819D016D
+:103C20002F5F3F4F318320838C93268137812F5F15
+:103C30003F4F3783268310C0EB01092F182F0084D4
+:103C4000F185E02D0995892BE1F68E819F81019602
+:103C50009F838E83812F902FDF91CF911F910F91A2
+:103C60000895FA01AA27283051F1203181F1E89412
+:103C70006F936E7F6E5F7F4F8F4F9F4FAF4FB1E05F
+:103C80003ED0B4E03CD0670F781F891F9A1FA11D5A
+:103C9000680F791F8A1F911DA11D6A0F711D811D5B
+:103CA000911DA11D20D009F468943F912AE0269F20
+:103CB00011243019305D3193DEF6CF010895462F7F
+:103CC0004770405D4193B3E00FD0C9F7F6CF462F60
+:103CD0004F70405D4A3318F0495D31FD40524193C9
+:103CE00002D0A9F7EACFB4E0A69597958795779586
+:103CF0006795BA95C9F700976105710508959B010D
+:103D0000AC010A2E06945795479537952795BA9595
+:103D1000C9F7620F731F841F951FA01D0895CF93CD
+:103D2000DF938230910510F482E090E0E09152043C
+:103D3000F091530420E030E0C0E0D0E0309711F182
+:103D40004081518148175907C0F04817590761F45D
+:103D500082819381209719F09B838A832BC0909353
+:103D600053048093520426C02115310519F04217DF
+:103D7000530718F49A01BE01DF01EF010280F381BD
+:103D8000E02DDCCF2115310509F1281B390B24303A
+:103D9000310590F412968D919C91139761157105E0
+:103DA00021F0FB019383828304C09093530480939A
+:103DB0005204FD01329644C0FD01E20FF31F8193CE
+:103DC0009193225031092D933C933AC02091500495
+:103DD00030915104232B41F42091090130910A01C3
+:103DE0003093510420935004209107013091080131
+:103DF0002115310541F42DB73EB740910B0150918B
+:103E00000C01241B350BE0915004F0915104E21792
+:103E1000F307A0F42E1B3F0B2817390778F0AC01ED
+:103E20004E5F5F4F2417350748F04E0F5F1F5093CA
+:103E30005104409350048193919302C0E0E0F0E07C
+:103E4000CF01DF91CF9108950F931F93CF93DF930D
+:103E5000009709F48CC0FC01329713821282009102
+:103E60005204109153040115110581F42081318110
+:103E7000820F931F20915004309151042817390765
+:103E800079F5F0935104E093500471C0D80140E0FB
+:103E900050E0AE17BF0750F412962D913C91139746
+:103EA000AD012115310509F1D901F3CF9D01DA01E9
+:103EB0003383228360817181860F971F8217930756
+:103EC00069F4EC0128813981260F371F2E5F3F4F9F
+:103ED000318320838A819B8193838283452B29F4BC
+:103EE000F0935304E093520442C01396FC93EE9374
+:103EF0001297ED01499159919E01240F351FE21748
+:103F0000F30771F480819181840F951F02961196B9
+:103F10009C938E938281938113969C938E93129798
+:103F2000E0E0F0E0D80112968D919C9113970097F4
+:103F300019F0F8018C01F6CF8D919C9198012E5FBC
+:103F40003F4F820F931F2091500430915104281746
+:103F5000390769F4309729F41092530410925204EF
+:103F600002C0138212821093510400935004DF9117
+:103F7000CF911F910F910895FC0188279927E8940C
+:103F800021912032E9F3293010F02E30C8F32B3282
+:103F900041F02D3239F4689404C00E942120820F30
+:103FA000911D219120532A30C0F31EF490958195E4
+:103FB0009F4F08951F93FC0199278827BC01E8941F
+:103FC00011911032E9F3193010F01E30C8F31B3292
+:103FD00051F01D3249F4689406C00E940C20610F14
+:103FE000711D811D911D119110531A30B0F33EF4D3
+:103FF00090958095709561957F4F8F4F9F4F1F9142
+:104000000895BB274A3031F4992322F4BDE29095FC
+:1040100081959F4F0C942A20592F482F372F262FF8
+:10402000660F771F881F991F660F771F881F991FBC
+:10403000620F731F841F951F660F771F881F991FBC
+:1040400008957AE0979F902D879F802D910D1124E0
+:104050000895BB27FB015527AA27880F991FAA1F80
+:10406000A41710F0A41B83955051B9F7A05DAA3393
+:1040700008F0A95DA193009779F7B111B19311925E
+:10408000CB010C944320DC01FC01672F7191772355
+:10409000E1F7329704C07C916D9370836291AE1703
+:1040A000BF07C8F308950E94952008F481E00895A1
+:1040B000E89409C097FB3EF49095809570956195C2
+:1040C0007F4F8F4F9F4F9923A9F0F92F96E9BB2778
+:1040D0009395F695879577956795B795F111F8CFF4
+:1040E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5F
+:1040F0009F4F16C0882311F096E911C0772321F055
+:104100009EE8872F762F05C0662371F096E8862FEC
+:1041100070E060E02AF09A95660F771F881FDAF743
+:10412000880F9695879597F90895990F0008550F70
+:10413000AA0BE0E8FEEF16161706E807F907C0F02D
+:1041400012161306E407F50798F0621B730B840B35
+:10415000950B39F40A2661F0232B242B252B21F40F
+:1041600008950A2609F4A140A6958FEF811D811DAF
+:1041700008950E94CC200C943D210E942F2138F0FC
+:104180000E94362120F0952311F00C9426210C94E6
+:104190002C2111240C9471210E944E2170F3959FC3
+:1041A000C1F3950F50E0551F629FF001729FBB272E
+:1041B000F00DB11D639FAA27F00DB11DAA1F649FCA
+:1041C0006627B00DA11D661F829F2227B00DA11D7D
+:1041D000621F739FB00DA11D621F839FA00D611D03
+:1041E000221F749F3327A00D611D231F849F600D24
+:1041F000211D822F762F6A2F11249F5750409AF04D
+:10420000F1F088234AF0EE0FFF1FBB1F661F771FD8
+:10421000881F91505040A9F79E3F510580F00C94A3
+:1042200026210C9471215F3FE4F3983ED4F38695E8
+:1042300077956795B795F795E7959F5FC1F7FE2B43
+:10424000880F911D9695879597F9089597F99F671F
+:1042500080E870E060E008959FEF80EC089500240E
+:104260000A941616170618060906089500240A94DB
+:1042700012161306140605060895092E0394000C61
+:1042800011F4882352F0BB0F40F4BF2B11F460FFF0
+:1042900004C06F5F7F4F8F4F9F4F089557FD905819
+:1042A000440F551F59F05F3F71F04795880F97FBFA
+:1042B000991F61F09F3F79F08795089512161306B4
+:1042C0001406551FF2CF4695F1DF08C016161706E3
+:1042D0001806991FF1CF8695710561050894089518
+:1042E000E894BB2766277727CB0197F90895F999BA
+:1042F000FECF92BD81BDF89A992780B50895262FEB
+:10430000F999FECF1FBA92BD81BD20BD0FB6F894BA
+:10431000FA9AF99A0FBE019608952F923F924F9202
+:104320005F926F927F928F929F92AF92BF92CF9245
+:10433000DF92EF92FF920F931F93CF93DF93CDB74E
+:10434000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFC6
+:1043500009942A88398848885F846E847D848C8497
+:104360009B84AA84B984C884DF80EE80FD800C81A0
+:104370001B81AA81B981CE0FD11D0FB6F894DEBF83
+:104380000FBECDBFED010895A29FB001B39FC00144
+:10439000A39F700D811D1124911DB29F700D811D71
+:1043A0001124911D089510E0C5E7D0E004C0FE017E
+:1043B0000E94B4192196C637D107C9F7F894FFCFE8
+:1043C0002C01068C0B8C0B000054048000000000B4
+:1043D00000230B0310EC0ACA0ADE0A6A0B4F4B00DB
+:1043E0005620332E332E30205349474E414C6475AE
+:1043F000696E6F202D20636F6D70696C656420613C
+:1044000074205365702031382032303136203030FE
+:104410003A32383A3238004954506172616D733A19
+:1044200020003B000D0A004D5300443D0043503D29
+:104430000053503D004F0025303258002530315890
+:10444000004D43004C4C3D004C483D00534C3D005A
+:0C44500053483D00433D004D5500500016
:00000001FF
diff --git a/fhem/FHEM/firmware/SIGNALduino_promini328.hex b/fhem/FHEM/firmware/SIGNALduino_promini328.hex
index db8898393..446e0942b 100644
--- a/fhem/FHEM/firmware/SIGNALduino_promini328.hex
+++ b/fhem/FHEM/firmware/SIGNALduino_promini328.hex
@@ -1,1154 +1,1095 @@
-:100000000C9477000C949F130C94C6130C949F00CF
-:100010000C949F000C949F000C949F000C949F00E4
-:100020000C949F000C949F000C949F000C949F00D4
-:100030000C949F000C947F080C949F000C949F00DC
-:100040000C94ED130C949F000C94A9160C94DB16E1
-:100050000C949F000C949F000C949F000C949F00A4
-:100060000C949F000C949F003B4D433D003B4D552D
-:100070003D004D533D00556E737570706F72746521
-:100080006420636F6D6D616E640020557365206F31
-:100090006E65206F6620000000000800020100006D
-:1000A0000304070000000000000000010204081023
-:1000B00020408001020408102001020408102004DE
+:100000000C9476000C94860D0C945F0D0C949E005D
+:100010000C949E000C949E000C949E000C949E00E8
+:100020000C949E000C949E000C949E000C949E00D8
+:100030000C949E000C94130E0C949E000C949E0045
+:100040000C94150D0C949E000C94270C0C94010C30
+:100050000C949E000C949E000C949E000C949E00A8
+:100060000C949E000C949E00556E737570706F72A8
+:1000700074656420636F6D6D616E640020557365F7
+:10008000206F6E65206F66200000000008000201EE
+:10009000000003040700000000000000003B4D4387
+:1000A0003D003B4D553D004D533D000000000025F7
+:1000B0000028002B0000000000240027002A000474
:1000C00004040404040404020202020202030303FF
-:1000D00003030300000000250028002B000000009F
-:1000E00000240027002A000019080B175C081124BF
-:1000F0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E081
-:10010000E6EEF6E402C005900D92A631B107D9F7EC
-:1001100024E0A6E1B2E001C01D92AB3AB207E1F7DC
-:1001200010E0CCEED0E004C02297FE010E94921DA8
-:10013000C83ED107C9F70E944F170C9466230C9450
-:100140000000CF92DF92EF92FF920F931F930E94D5
-:10015000431400911D0210911E0220911F02309144
-:1001600020026B017C01C01AD10AE20AF30A97014E
-:10017000860160931D0270931E0280931F0290936C
-:1001800020020A3511052105310578F181E0C816F4
-:100190008DE7D806E104F10410F4960102C021E0D5
-:1001A0003DE74A9B03C03195219531098091620357
-:1001B0008B34D8F4809162038F5F809362038091C7
-:1001C0006303609161030E943A1D90936303E09181
-:1001D0006303F0E0EE0FFF1FEB59FC4F31832083E8
-:1001E000809163038F5F809363031F910F91FF9052
-:1001F000EF90DF90CF9008950F931F9360912702A7
-:100200008DE00E943415109227020E944314009141
-:100210001D0210911E0220911F0230912002601BCE
-:10022000710B820B930B62307D478105910520F0A5
-:100230001F910F910C94A1001F910F91089581E2DD
-:1002400092E00E94F7188BE593E00E94F71885E58D
-:1002500093E00C94F718CF93DF93EC01FB0124811A
-:1002600035810E943A1BCE01DF91CF91089541E084
-:1002700050E061EA70E080E00C946D1380E00C9433
-:100280008D13CF93DF931F92CDB7DEB72B9A2091BA
-:10029000060130910701482F429FC001439F900DF6
-:1002A000112469830E948E142B98809106019091ED
-:1002B00007016981FC016E9FC0016F9F900D1124A1
-:1002C0000F90DF91CF910C948E14EF92FF920F93C9
-:1002D0001F93CF93DF93F82EE92E0E943E0100E09A
-:1002E00010E02091080130E0021713072CF56FE1B0
-:1002F00081E00E944101CF2DDE2D29912223C9F0FA
-:10030000213371F0263449F02033B9F763E081E0FE
-:100310000E94410163E081E009C063E081E002C026
-:1003200061E083E00E94410161E083E00E944101BD
-:10033000E4CF0F5F1F4FD5CFDF91CF911F910F916A
-:10034000FF90EF900C9437013F924F925F926F9223
-:100350007F928F929F92AF92BF92CF92DF92EF9255
-:10036000FF920F931F93CF93DF93082FEB01542E2F
-:10037000452E59010E9443146B017C0110E0812C31
-:10038000912CB401600F711FC617D707A8F1C501E2
-:100390000E94F21A8053E52DF42DE80FF11DE80FAD
-:1003A000F11D90818181382E331C3324331C692E3A
-:1003B000782E31F077FE0CC071946194710808C0FA
-:1003C00077FE03C071946194710888E1681A71081E
-:1003D0000E9443146C157D058E059F05C8F33320DC
-:1003E00011F02B9801C02B9AC60CD71CE11CF11CF4
-:1003F0008FEF881A980AC5CF0E9443146C157D05AB
-:100400008E059F05C8F3DF91CF911F910F91FF904B
-:10041000EF90DF90CF90BF90AF909F908F907F90A4
-:100420006F905F904F903F9008954F925F926F92C0
-:100430007F928F929F92AF92BF92CF92DF92EF9274
-:10044000FF920F931F93CF93DF93982E862E2A014E
-:100450002B9A0E9443146B017C01662457FC609424
-:10046000762C891408F446C0692D70E081E292E090
-:100470000E94F21A90ED980F9A3010F4892F01C063
-:100480008753C4E0D0E008E0A82EBB24A7FCB094BA
-:100490000E9443146C157D058E059F05C8F310E07E
-:1004A00098012A213B21232B71F02B98C40CD51CD9
-:1004B000E61CF71C0E9443146C157D058E059F05F4
-:1004C000C8F32B9A0DC02B9AC40CD51CE61CF71C44
-:1004D0000E9443146C157D058E059F05C8F32B986B
-:1004E000C40CD51CE61CF71C15950795219781F6C1
-:1004F0009394B7CF0E9443146C157D058E059F051C
-:10050000C8F3DF91CF911F910F91FF90EF90DF9093
-:10051000CF90BF90AF909F908F907F906F905F90A3
-:100520004F900895CF92DF92EF92FF920F931F9317
-:10053000CF93DF9300D000D000D0CDB7DEB78C01D1
-:100540006B01FC01E080F1806DE071E0CE0101966D
-:100550000E946519A701BE016F5F7F4F81E292E0A3
-:100560000E941E1B7C01CE0101960E94F718FFEF2E
-:10057000EF16FF0601F1F801408151814F3FFFEF77
-:100580005F07C9F0970161E272E0CE0101960E9417
-:100590003A1BBE016F5F7F4FC6010E94B119CE01A9
-:1005A00001960E94F7188FEFE81AF80AF801F18215
-:1005B000E08281E001C080E026960FB6F894DEBFAD
-:1005C0000FBECDBFDF91CF911F910F91FF90EF90A4
-:1005D000DF90CF900895BF92CF92DF92EF92FF927B
-:1005E0000F931F93CF93DF93CDB7DEB7C856D109D2
-:1005F0000FB6F894DEBF0FBECDBF67E072E0CE014C
-:100600008F599F4F0E9465196EE170E0CE018F599E
-:100610009F4F0E942819A9961FAE1EAEA9970E944F
-:100620003E011FEF01E042E1F42E59E0E52E62E0C9
-:10063000D62ECC24C394BE016F597F4FCE01895969
-:100640009F4F0E949202882309F44FC060E070E03F
-:10065000CE018F599F4F0E94F21A833589F561E0D0
-:1006600070E0CE018F599F4F0E94F21A833419F324
-:1006700061E070E0CE018F599F4F0E94F21A8D34D5
-:1006800059F41F5FE1E0F0E0EC0FFD1FF19EE00D7B
-:10069000F11D1124C282CFCF61E070E0CE018F59ED
-:1006A0009F4F0E94F21A823531F61F5FE1E0F0E0C1
-:1006B000EC0FFD1FF19EE00DF11D1124D282BBCF86
-:1006C00060E070E0CE018F599F4F0E94F21A803592
-:1006D00009F068C062E070E0CE018F599F4F0E9420
-:1006E000F21A8D3309F05EC082C0B12C32E1C32E04
-:1006F000B016D1F1D12CED2CF12CCE9CA001CF9CC9
-:10070000500D1124E1E0F0E0EC0FFD1FE40FF51FA8
-:100710008281823079F44A5F5F4F21E030E02C0F14
-:100720003D1F420F531F6481758121E232E08381B6
-:100730000E94A401CE9CF001CF9CF00D112481E019
-:1007400090E08C0F9D1FE80FF91F8281813031F4FA
-:1007500040815181648183810E9415022B98D3943A
-:100760001D1548F6B394C4CF0E94370161E272E0D0
-:100770008AE094E00E94EA17CE018F599F4F0E94B1
-:10078000F718C859DF4F0FB6F894DEBF0FBECDBFC4
-:10079000DF91CF911F910F91FF90EF90DF90CF905D
-:1007A000BF90089560E070E0CE018F599F4F0E9486
-:1007B000F21A823509F050C061E070E0CE018F5925
-:1007C0009F4F0E94F21A8D3309F046C042E050E07C
-:1007D000BE016F597F4FCE01855A9F4F0E942B015A
-:1007E000CE01855A9F4F0E947F1B062F82C022E0B8
-:1007F00030E041E050E0BE016F597F4FCE01855A95
-:100800009F4F0E943A1BCE01855A9F4F0E947F1B2B
-:10081000B62ECE01855A9F4F0E94F71843E050E054
-:10082000BE016F597F4FCE01855A9F4F0E942B0109
-:10083000CE01855A9F4F0E947F1BE19EF00111243B
-:10084000EB0DF11D3396EE0FFF1F21E030E02C0F72
-:100850003D1FE20FF31F4BC060E070E0CE018F59E7
-:100860009F4F0E94F21A8434B9F4A9968EAD9FADC1
-:10087000A997E1E0F0E0EC0FFD1FF19EE00DF11D06
-:10088000112421E0280FA6963FADA697231B2383B2
-:10089000029795838483CFCE60E070E0CE018F59BC
-:1008A0009F4F0E94F21A833409F0C5CE61E070E0D8
-:1008B000CE018F599F4F0E94F21A8D3309F0BBCEA3
-:1008C00042E050E0BE016F597F4FCE01855A9F4FE5
-:1008D0000E942B01CE01855A9F4F0E947F1BE1E0B1
-:1008E000F0E0EC0FFD1FF19EE00DF11D112471836E
-:1008F0006083CE01855A9F4F0E94F7189CCE62E715
-:1009000070E08AE094E00E949C1760912B0270E0F6
-:100910004AE050E08AE094E00E94B1186DE670E091
-:100920008AE094E00E949C176091290270E04AE0FE
-:1009300050E08AE094E00E94B11868E670E08AE036
-:1009400094E00E949C1760912A0270E04AE050E017
-:100950008AE094E00C94B918CF93DF93CDB7DEB75B
-:10096000AE970FB6F894DEBF0FBECDBF61E070E06A
-:1009700081E292E00E94F21A843729F161E070E08E
-:1009800081E292E00E94F21A823721F542E050E0C3
-:1009900061E272E0CE0101960E942B0120E030E07E
-:1009A00043E050E0BE01675D7F4FCE0101960E949B
-:1009B000F41ACE0101960E94F718CE0189960E9482
-:1009C000871F8093080161E272E08AE094E00E9450
-:1009D000EA1795C061E070E081E292E00E94F21AAD
-:1009E0008337F1F42B9A42E050E061E272E0CE01ED
-:1009F00089960E942B0120E030E048E250E0BE01E1
-:100A00006F5F7F4FCE0189960E94F41ACE018996BE
-:100A10000E94F718CE0101960E9465012B98D3CF52
-:100A200061E070E081E292E00E94F21A8336A9F45C
-:100A300042E050E061E272E0CE0101960E942B019B
-:100A4000CE0101960E947F1B7093070160930601FF
-:100A5000CE0101960E94F718B6CF61E070E081E206
-:100A600092E00E94F21A803709F049C067E072E014
-:100A7000CE0189960E94651964E170E0CE018996E5
-:100A80000E9428196FE071E0CE0189960E94BD197D
-:100A90004AE060910801CE0101960E94D519BE017D
-:100AA0006F5F7F4FCE0189960E945A1ACE01019640
-:100AB0000E94F71867E971E0CE0189960E94611AD9
-:100AC00060910601709107014AE0CE0101960E94F3
-:100AD000021ABE016F5F7F4FCE0189960E945A1A9B
-:100AE000CE0101960E94F718BE01675D7F4F8AE034
-:100AF00094E00E94EA17CE0189960E94F718AE96FC
-:100B00000FB6F894DEBF0FBECDBFDF91CF91089531
-:100B1000CF93DF9300D0CDB7DEB72091A7043091FB
-:100B2000A8042115310511F42BEA34E0CE01019619
-:100B3000821B930B0F900F90DF91CF910895CF926E
-:100B4000DF92EF92FF920E9437146B017C0128EE36
-:100B500033E040E050E00E946E1D809118029091B9
-:100B60001902A0911A02B0911B02C816D906EA0612
-:100B7000FB0648F48091160290911702019690931B
-:100B8000170280931602C0921802D0921902E092C6
-:100B90001A02F0921B02CA01B901FF90EF90DF9098
-:100BA000CF9008956AE171E08AE094E00E94FC171A
-:100BB00061E070E080E090E00C94661461E070E029
-:100BC00081E292E00E94F21A813511F40E943E0106
-:100BD00061E070E081E292E00E94F21A853411F443
-:100BE0000C9437010895262F220F330B94E049020D
-:100BF000B0011124682B622B81E090E00C946B22F1
-:100C0000CF93DF9361E070E081E292E00E94F21AFC
-:100C1000873421F4DF91CF910C947F0462E070E07F
-:100C200081E292E00E94F21A833599F062E070E06E
-:100C300081E292E00E94F21A853571F062E070E084
-:100C400081E292E00E94F21A833441F4CAE2D2E0D7
-:100C500005C0CBE2D2E002C0C9E2D2E061E070E0C0
-:100C600081E292E00E94F21A853419F481E08883CF
-:100C700009C061E070E081E292E00E94F21A8434DF
-:100C800059F4188240912A026091290280912B0226
-:100C9000DF91CF910C94F305DF91CF91089560E03F
-:100CA00070E081E292E00E94F21A803511F40C9417
-:100CB000D20560E070E081E292E00E94F21A8F3388
-:100CC00009F072C06FE38AE094E00E94CD176AE8F1
-:100CD00070E08AE094E00E949C1766E58AE094E068
-:100CE0000E94CD1760E28AE094E00E94CD1769E689
-:100CF0008AE094E00E94CD1760E28AE094E00E94CE
-:100D0000CD1762E58AE094E00E94CD1760E28AE0A8
-:100D100094E00E94CD1764E78AE094E00E94CD172A
-:100D200060E28AE094E00E94CD1768E58AE094E0F2
-:100D30000E94CD1760E28AE094E00E94CD1766E43D
-:100D40008AE094E00E94CD1760E28AE094E00E947D
-:100D5000CD1763E58AE094E00E94CD1760E28AE057
-:100D600094E00E94CD1760E58AE094E00E94CD17E0
-:100D700060E28AE094E00E94CD1763E48AE094E0A8
-:100D80000E94CD1760E28AE094E00E94CD1767E4EC
-:100D90008AE094E00E94CD1760E28AE094E00E942D
-:100DA000CD1767E072E00AC060E070E081E292E097
-:100DB0000E94F21A863531F46DE171E08AE094E028
-:100DC0000C94FC1760E070E081E292E00E94F21A5D
-:100DD000823549F40E9488054AE050E0BC018AE06F
-:100DE00094E00C94B91860E070E081E292E00E9417
-:100DF000F21A893641F488E292E00E94E408892BD5
-:100E000081F40C94AC0460E070E081E292E00E9416
-:100E1000F21A833561F488E292E00E94E408892B9B
-:100E200021F081E080931C0208950C94EB0260E0B5
-:100E300070E081E292E00E94F21A843751F40E943D
-:100E40009F05AB01BC012AE030E08AE094E00C94FD
-:100E5000E51860E070E081E292E00E94F21A8835C5
-:100E600011F40C94DE0560E070E081E292E00E94F3
-:100E7000F21A8634D1F060E070E081E292E00E94E4
-:100E8000F21A833411F40C94000660E070E081E201
-:100E900092E00E94F21A873411F40C947F0466E702
-:100EA00070E08AE094E00C94D81708951F93CF93D4
-:100EB000DF9300D0CDB7DEB780911C02882389F084
-:100EC00010921C020E944F0680911C02811106C0E4
-:100ED00067E072E081E292E00E94BD1981E08093B8
-:100EE000270211E080916203882341F1809162031F
-:100EF00081508093620380916403609161030E943A
-:100F00003A1D90936403E091640381E08E0F809317
-:100F10006403F0E0EE0FFF1FEB59FC4F80819181DD
-:100F20009A838983BE016F5F7F4F88E292E00E94BF
-:100F30004B138823B9F210932702D4CF0F900F9050
-:100F4000DF91CF911F910895EF92FF920F931F931E
-:100F5000CF93DF93EC017B018A0181E090E00E9456
-:100F60006322982F9170988381FB992790F9F7015C
-:100F7000908382FB882780F9F8018083DF91CF91ED
-:100F80001F910F91FF90EF90089526E040E051EE01
-:100F900060E070E08AE094E00E944D1660E082E03C
-:100FA0000E94FB1461E08BE00E94FB1461E08DE085
-:100FB0000E94FB1480E1809381001092800082E007
-:100FC0008093FD038CE89CE39093FF038093FE03E2
-:100FD000909387008093860082E1809381008CEF5C
-:100FE00090E09093FC038093FB0381E080936F007B
-:100FF00080E090E00E9463228B3049F44AE252E0A4
-:1010000069E272E08BE292E00E94A4070AC06BE002
-:1010100080E090E00E946B2267E081E090E00E9417
-:101020006B220E94370164E170E081E292E00C944F
-:1010300028190F931F93CF93DF938BE48093610361
-:10104000109262031092640310926303CBE3D3E027
-:10105000D0934003C0933F030DE313E0109342038A
-:101060000093410367E072E085E593E00E94651913
-:1010700067E072E08BE593E00E946519F801118248
-:1010800010821982188288E292E00E94A60867E026
-:1010900072E081E292E00E9465190E94431460931D
-:1010A0001D0270931E0280931F0290932002DF9115
-:1010B000CF911F910F9108950C941F01CF93C1E020
-:1010C0008AE094E00E946A15892BB9F08AE094E0E6
-:1010D0000E9483158A3041F01CF4882329F007C050
-:1010E0008D3011F0833219F4C0931C02E9CF682FC0
-:1010F00081E292E00E94711AE3CFCF9108951F928E
-:101100000F920FB60F9211242F933F934F935F933B
-:101110006F937F938F939F93AF93BF93EF93FF93BF
-:10112000E091FB03F091FC030995FF91EF91BF91D2
-:10113000AF919F918F917F916F915F914F913F916F
-:101140002F910F900FBE0F901F901895FC01E85F34
-:10115000FE4F1082B39610827B97108231961182D7
-:1011600010827B962FEF2083FC012083AC0120E0CE
-:1011700030E0FA01E15EFE4F11821082FC01E20FC5
-:10118000F31F14822F5F3F4F4E5F5F4F26303105B4
-:1011900081F7FC01E55FFE4F1082339626E930E0CF
-:1011A000318320833D964DEC5CEC6CE47EE3408320
-:1011B00051836283738372971082339610823196C3
-:1011C000108233971082089580E090E00895CF93C5
-:1011D000DF93FC01E55DFE4FD081C0E07D97CD1728
-:1011E000C1F0DC01A15EBE4F2D913C91AB01421BD1
-:1011F000530B9A0157FF03C031952195310902968F
-:10120000408151814217530714F08C2F03C0CF5FE8
-:10121000E6CF8FEFDF91CF910895FC011482158204
-:101220001682178210861186411104C0DC01A85F66
-:10123000BE4F4C91641780F4DF01A60FB11D1A96C2
-:101240008C91DF01A80FB11D14968C9114978F5FBC
-:1012500014968C936F5FEECF08952F923F924F922A
-:101260005F926F927F928F929F92AF92BF92CF9236
-:10127000DF92EF92FF920F931F93CF93DF93CDB73F
-:10128000DEB72E970FB6F894DEBF0FBECDBF9E8798
-:101290008D8740E060E00E940D09ED85FE85E55DEB
-:1012A000FE4F5080712C2D853E85255E3E4F3A873E
-:1012B00029878D859E85885F9E4F9C878B877514B7
-:1012C00009F4C3C044244394470C642C272C312CCC
-:1012D000C101880F991FAD85BE858A0F9B1FFC0138
-:1012E000E15EFE4FFA83E9832A0E3B1EF4E02F0EE7
-:1012F000311C29813A8138872F83651409F4A3C0F2
-:10130000862D90E09C838B83880F991F9E838D830D
-:10131000FC01AD85BE85EA0FFB1FE15EFE4F00813B
-:101320001181C80117FF04C088279927801B910BE2
-:10133000BC01882777FD8095982F0E94231CE985A2
-:10134000FA8520813181428153810E94D71C4B0153
-:101350005C01A981BA81CD90DC907801EC18FD0880
-:10136000F7FE03C0F194E194F10820E030E040E0A2
-:101370005FE3C501B4010E94D71C9B01AC01C5010C
-:10138000B4010E948C1B0E94F01B6E157F050CF4AB
-:1013900058C0EB85FC85208180E090E0821750F4F6
-:1013A000ED85FE85E80FF91F3285361101C0728682
-:1013B0000196F4CFD1014C91552747FD5095EB8113
-:1013C000FC812D853E85E20FF31FE481FF27E7FDB9
-:1013D000F0959A012E0F3F1F21153105E1F4C49EAF
-:1013E000C001C59E900DD49E900D1124B9010E949C
-:1013F0005A1D7B010E9FC0010F9F900D1E9F900DE7
-:101400001124B9010E945A1DE60EF71EAF81B8855E
-:10141000ED92FC920CC00C0D1D1D17FF02C00F5F5A
-:101420001F4F15950795E981FA8111830083ED819E
-:10143000FE812D853E85E20FF31FE15EFE4F118296
-:10144000108263945ACF742C3ACF2E960FB6F8942C
-:10145000DEBF0FBECDBFDF91CF911F910F91FF90E7
-:10146000EF90DF90CF90BF90AF909F908F907F9044
-:101470006F905F904F903F902F9008953F924F92C2
-:101480005F926F927F928F929F92AF92BF92CF9214
-:10149000DF92EF92FF920F931F93CF93DF93EC01B4
-:1014A0008FEF8883FE01E55DFE4F30806E0100E026
-:1014B00010E0EE24EA94FE2C4E0188EF881A8EEF9D
-:1014C000980A031508F06AC0F601E15EFE4F5F015D
-:1014D000FFEFEF16FF0639F5F5018081918197FD49
-:1014E00022C0FE01E00FF11F6481772767FD709530
-:1014F000872F972F0E94231C2B013C01F401608150
-:1015000070E080E090E00E94231C2BE734E14EE283
-:101510005EE30E94D71C9B01AC01C301B2010E9493
-:10152000D31C1816A4F1F5012081318137FD30C09C
-:10153000C701880F991F8C0F9D1FFC01E15EFE4FB4
-:1015400080819181281739071CF5FE01E00FF11FFA
-:101550006481772767FD7095872F972F0E94231C42
-:101560002B013C01F401608170E080E090E00E947A
-:10157000231C2BE734E14EE25EE30E94D71C9B0163
-:10158000AC01C301B2010E94D31C18160CF47801FF
-:101590000F5F1F4FF2E0CF0ED11C93CF8FEFE816F5
-:1015A000F80641F0E882CF5EDE4F81E090E099835B
-:1015B000888301C080E0DF91CF911F910F91FF9050
-:1015C000EF90DF90CF90BF90AF909F908F907F90E3
-:1015D0006F905F904F903F9008958F929F92AF923F
-:1015E000BF92CF92DF92EF92FF920F931F93CF9310
-:1015F000DF93FC018C010F5E1E4FD8018D919C91F1
-:101600001197019709F07CC05A96BC90BA94C7E034
-:10161000AC2E6F01B8EFCB1ABEEFDB0AB7FC70C07F
-:101620002B2D332727FD3095C901880F991F8E0F69
-:101630009F1FDC01A15EBE4FCD91DC91D7FF5EC044
-:10164000D195C195D109C83682E4D80708F056C0B3
-:10165000E080FF24E7FCF094C701880F991F8E0FEC
-:101660009F1FDC01A15EBE4F8D909C90CE01B40106
-:101670000E94461D6832710508F040C0A89CC00158
-:10168000A99C900D11248C179D07C0F5DF01A20FB6
-:10169000B31F14968C9186308CF5D6014C9150E096
-:1016A000BA0161507109912C892D90E08617970736
-:1016B00084F4DF01A80FB91F1B96CC911B97D0E0D3
-:1016C000C217D307C9F41A96AC91B0E0AE15BF05A6
-:1016D00099F4485251098417950784F4DF01A45DF9
-:1016E000BE4FBC9282E090E0D8018D939C93E75F5F
-:1016F000FE4F908281E009C09394D6CFBA948ECFEA
-:10170000E45DFE4F8FEF808380E0DF91CF911F91EA
-:101710000F91FF90EF90DF90CF90BF90AF909F9090
-:101720008F9008950F931F93CF93DF938A01E90160
-:101730008AE094E00E94BF17B8018AE094E00E941A
-:10174000BF17BE018AE094E0DF91CF911F910F9106
-:101750000C94BF17EF92FF920F931F93CF93DF93D9
-:10176000EC01F62EE42EB9018AE094E00E94BF1746
-:10177000EF1460F0FE01EF0DF11D4AE050E06285CC
-:101780008AE094E00E94DE18F394F2CFB8018AE078
-:1017900094E00E94BF1780E0DF91CF911F910F91DD
-:1017A000FF90EF90089570E0FC0126A1332727FDFC
-:1017B00030956217730751F027A1332727FD309525
-:1017C00081E06217730719F080E0089581E00895C1
-:1017D00070E0FC0120A5332727FD309562177307C1
-:1017E00051F021A5332727FD309581E0621773075B
-:1017F00019F080E0089581E008959F92AF92BF9222
-:10180000CF92DF92EF92FF920F931F93CF93DF93CC
-:1018100000D01F92CDB7DEB78C017B0120E330E30F
-:1018200040E029833A834B83FC01668DF3E06F9F90
-:10183000B0011124C7010E942819E114F10449F1F3
-:10184000912C87ECA82E81E0B82ECE0101966C0178
-:10185000F801868D8915E8F0F80183A1981620F427
-:10186000E90DF11D808101C08FEF1F928F93BF9210
-:10187000AF92DF92CF920E946F20B601C7010E9403
-:10188000611A93940F900F900F900F900F900F90FC
-:10189000DFCF0F900F900F90DF91CF911F910F919D
-:1018A000FF90EF90DF90CF90BF90AF909F90089502
-:1018B0000F931F93CF93DF938C01EB0160E270E0F5
-:1018C000CE010E942819209709F468C06CEC71E0E1
-:1018D000CE010E94611AF80184A195A126A1220FD0
-:1018E000330B820F931FFC01E15EFE4F608171811B
-:1018F000CE010E94B01A6BE3CE010E94711A60ED16
-:1019000071E0CE010E94611AF80184A195A127A17E
-:10191000220F330B820F931FFC01E15EFE4F6081AB
-:101920007181CE010E94B01A6BE3CE010E94711A40
-:1019300064ED71E0CE010E94611AF80184A195A1C5
-:1019400020A5220F330B820F931FFC01E15EFE4F97
-:1019500060817181CE010E94B01A6BE3CE010E94BA
-:10196000711A68ED71E0CE010E94611AF80184A13C
-:1019700095A121A5220F330B820F931FFC01E15E7D
-:10198000FE4F60817181CE010E94B01A6BE3CE01DF
-:10199000DF91CF911F910F910C94711ADF91CF912C
-:1019A0001F910F9108950F931F93CF93DF938C0195
-:1019B000EB0167E070E0CE010E942819209799F0B2
-:1019C0006CED71E0CE010E94611AF80162A573A569
-:1019D000CE010E94B01A6BE3CE01DF91CF911F912F
-:1019E0000F910C94711ADF91CF911F910F9108956F
-:1019F0004F925F926F927F928F929F92AF92BF921F
-:101A0000CF92DF92EF92FF920F931F93CF93DF93CA
-:101A1000EC010CA11DA1580185EDA81A8EEFB80AA2
-:101A2000F5018081843008F4C4C06801F8EFCF1A52
-:101A3000FEEFDF0AF601608170E080E090E00E9436
-:101A4000231C2AE037ED43E25DE30E94D71C0E948D
-:101A5000F51B40E050E0912C812CEE24EA94FE2C02
-:101A6000262F30E0F5018081481708F06BC0642F05
-:101A700070E0F801E60FF71FE4818E2F992787FDAC
-:101A80009095821793070CF45BC0660F771F600F69
-:101A9000711FDB01A15EBE4F6D917C91161617067A
-:101AA0004CF55E0F8394E60EF71EEFA1EF3F69F051
-:101AB0008E2F880F990B800F911FDC01A15EBE4F06
-:101AC0008D919C91861797070CF4E42FEFA3E9A55D
-:101AD000EF3F69F08E2F880F990B800F911FDC016B
-:101AE000A15EBE4F8D919C91681779070CF4E42F8D
-:101AF000E9A726C05E1B9394EEA1EF3F69F08E2FFD
-:101B0000880F990B800F911FDC01A15EBE4F8D9154
-:101B10009C91681779070CF4E42FEEA3E8A5EF3F3A
-:101B200069F08E2F880F990B800F911FDC01A15E49
-:101B3000BE4F8D919C91861797070CF4E42FE8A770
-:101B40004F5F90CF652F70E080E090E00E94231CF3
-:101B50002B013C01F601608170E080E090E00E9482
-:101B6000231C2AE037ED43EA5CE30E94D71C9B016B
-:101B7000AC01C301B2010E94D31C1816D4F0981016
-:101B800018C0C70163E070E00E945A1D7BA76AA7D6
-:101B90009EA19F3F71F088A58F3F59F0981749F09B
-:101BA0002FA12F3F31F099A59F3F19F081E0291314
-:101BB00001C080E0DF91CF911F910F91FF90EF90D6
-:101BC000DF90CF90BF90AF909F908F907F906F905D
-:101BD0005F904F900895FC0183A12E2FDF019A2F73
-:101BE000921B981710F41D92FACF168E178E87E06D
-:101BF00082A3089524E1FC0124A70C94EB0D7F92AD
-:101C00008F929F92AF92BF92CF92DF92EF92FF920C
-:101C10000F931F93CF93DF93EC018CA19DA1FC0147
-:101C2000E45FFE4F108233971082D12CF12C812C6F
-:101C300037E0B32EAA24A3940CA11DA1F801E85FFC
-:101C4000FE4F8081881608F04DC0F11014C0F801D5
-:101C5000E80DF11DE2846E2DCE010E94D30B81119F
-:101C600006C06E2DCE010E94E80B8823C9F1F80151
-:101C7000E75FFE4F80820CA11DA1D1108FC0C8016B
-:101C8000885F9E4F7C01F801E80DF11DC2846C2D28
-:101C9000CE010E94D30B811161C0F70180818816AB
-:101CA00008F47AC05BC0672DCE010E94E80B782E45
-:101CB000811184C04F8D50E02CA5332727FD30952E
-:101CC000421753070CF0C8C07110B4C0CE010E9477
-:101CD000EB0DF12C4E8D8BA1481708F486C0DF2C3C
-:101CE0008394AACF88122DC0D801A75FBE4F4C9114
-:101CF000423038F12F8D30E08CA587FD8F5F8595C0
-:101D0000992787FD909582179307DCF4841A8082C7
-:101D10008CA19DA1FC01E85FFE4F408150E04F5F28
-:101D20005F4F3196608170E0665F7F4F680F791F6B
-:101D30000A960E94D51FECA1FDA1E45FFE4F81E051
-:101D400080834F8D50E02CA5332727FD309581E00F
-:101D5000421753070CF0B5C080E0B3C0282DF7013F
-:101D600080818816B0F4C8018C0D911D8C0D911DD9
-:101D7000FC01E15EFE4F9180991C9924991CF801A9
-:101D8000E75FFE4F8080281949F020FF07C0839449
-:101D900005C0FF24F394A4CF839475CFE82CF12CD5
-:101DA0006801CE0CDF1CF6017284672DCE010E9403
-:101DB000D30B882309F477CF9A2414C0F801E85F85
-:101DC000FE4F208130E021503109E216F3060CF07D
-:101DD00071CFF6016385CE010E94E80B882309F4D8
-:101DE00069CF8394FF24F39475CF5AA1852F90E097
-:101DF000292D332727FD3095052E01C0220F0A9487
-:101E0000EAF7FE01E40FF11D3081322B30832F8D74
-:101E10002F5F2F8F28A1821B910997FD03C0521BB2
-:101E20005AA35DCFBAA24F5F4E8FFE01E40FF11DA2
-:101E3000108255CFF801E85FFE4F808190E0019756
-:101E4000E816F9060CF042CFF6016385CE010E9438
-:101E5000E80B882389F13ACFF801E65FFE4F8082D4
-:101E60008CA19DA1FC01E85FFE4FDC01A65FBE4F87
-:101E700020818C91281B20838CA19DA1FC01E85F0F
-:101E8000FE4F408150E04F5F5F4F3296608170E0BF
-:101E9000665F7F4F680F791F0A960E94D51FECA1DD
-:101EA000FDA1E45FFE4F81E080834F8D50E02CA5C3
-:101EB000332727FD30954CCFF801E75FFE4F808038
-:101EC00005CFDF91CF911F910F91FF90EF90DF90A1
-:101ED000CF90BF90AF909F908F907F9008953F924A
-:101EE0004F925F926F927F928F929F92AF92BF922A
-:101EF000CF92DF92EF92FF920F931F93CF93DF93D6
-:101F0000CDB7DEB7E3970FB6F894DEBF0FBECDBFF7
-:101F10007C013C0188EF681A8EEF780AF30180811A
-:101F2000883208F474C2C7010E942D0940E060E0C5
-:101F3000C7010E940D09C7010E943E0AC7010E9405
-:101F4000ED0AF7018381882309F422C1EF5EFE4F79
-:101F500080819181029709F01BC14701F7EF8F1A29
-:101F6000FEEF9F0AF40160815701F6EFAF1AFEEF12
-:101F7000BF0A82E0860FF5018083F3017081872F0D
-:101F800090E00197D701A45DBE4FF5011081212F8C
-:101F900030E028173907FCF4F701E20FF31F4385FF
-:101FA00050E02C91332727FD30954217530779F4E1
-:101FB000428550E0F7012081332727FD30954217F5
-:101FC000530729F41150F501108311E005C01E5F7D
-:101FD000F5011083DACF10E0F5018081781708F45D
-:101FE0007083F5014081C7010E940D09112351F052
-:101FF000F501808190E0F4012081821B910988978E
-:1020000034F4C2C0F30140814E3F08F09EC0670126
-:10201000F3EDCF1AFEEFDF0A67E072E0C6010E941F
-:10202000BD1987010D5C1E4F67E072E0C8010E9478
-:10203000BD1962E0C6010E94711A6FED71E0C60120
-:102040000E94611A6BE3C6010E94711A312C37019C
-:1020500085ED681A8EEF780AF3018081381640F515
-:10206000432C512CF701E40DF51D84818823F1F0F8
-:1020700060E5C6010E94711A632DC6010E94841A90
-:102080006DED71E0C6010E94611AC201880F991FAF
-:102090008E0D9F1DFC01E15EFE4F60817181C601C6
-:1020A0000E94B01A6BE3C6010E94711A3394D4CF18
-:1020B00062EE71E0C6010E94611A6BE3C8010E94E2
-:1020C000711A65EE71E0C8010E94611AF701608122
-:1020D000772767FD7095C8010E94B01A6BE3C801AD
-:1020E0000E94711A69EE71E0C8010E94611AF7013D
-:1020F000E45DFE4F6081772767FD7095C8010E94FF
-:10210000B01A6BE3C8010E94711AF701E35FFE4F3A
-:102110008081882349F06DEE71E0C8010E94611A48
-:102120006BE3C8010E94711A63E0C8010E94711A32
-:102130006AE0C8010E94711A9601F5014081F4011C
-:102140006081C7010E94AA0BD1C0F4016081623096
-:10215000D8F0F501808190E08D3F9105ACF0461BF1
-:10216000F301408350E04F5F5F4F70E0665F7F4F49
-:102170006E0D7F1DC7010A960E94D51F81E0F701F1
-:10218000E45FFE4F8083BBC0C7010E94A608B7C0B2
-:10219000F7018181811104C08281882309F4ABC0D9
-:1021A000F701EF5EFE4F80819181019709F0A3C096
-:1021B000F3018081883208F49EC06701F3EDCF1AE5
-:1021C000FEEFDF0A67E072E0C6010E94BD198701D9
-:1021D0000D5C1E4F67E072E0C8010E94BD1962E00D
-:1021E000C6010E94711A8EE18CA381E089A31AA214
-:1021F000CE0101960E94EB0D29A187E090E0821BA1
-:1022000091097AA167E041E050E0262F30E0821783
-:1022100093074CF49A01062E01C0220F0A94EAF7A4
-:10222000722B6150F2CF7AA38FEF8FA388A789A773
-:102230008AA7FEA2EDA2CE0101960E94FA0DCE0160
-:1022400001960E94FA0D81E18DA7F7018281882312
-:1022500009F45FC0CE0101960E94F80C882309F4AE
-:1022600058C0CE0101960E94FF0D882309F451C089
-:1022700067E072E0CE018E960E94651962EE71E011
-:10228000CE018E960E94BD19BE01625D7F4FCE01C8
-:1022900001960E94FD0B62EF71E0C6010E94611A77
-:1022A0006BE3C6010E94711AB601CE0101960E942D
-:1022B000580C6BE3C8010E94711AB801CE01019657
-:1022C0000E94D30C63E0C8010E94711A6AE0C80141
-:1022D0000E94711A9801AE01425D5F4FB601C701BD
-:1022E0000E94920BCE018E960E94F71881E0F701B2
-:1022F000E55FFE4F47CFF701E55FFE4F1082F70124
-:10230000E45FFE4F8081811182C0C7010E94A60850
-:102310007EC0F7018181882349F36FEE71E0C60129
-:102320000E94611A6BE3C6010E94711A512C570179
-:10233000F5EDAF1AFEEFBF0AF5018081581648F59A
-:10234000852C912CF701E80DF91D84818823F9F083
-:1023500060EC71E0C6010E94611A652DC6010E9401
-:10236000841A6DED71E0C6010E94611AC401880FE4
-:10237000991F8E0D9F1DFC01E15EFE4F60817181F2
-:10238000C6010E94B01A6BE3C6010E94711A5394F1
-:10239000D3CF62EE71E0C6010E94611A6BE3C801FF
-:1023A0000E94711A65EE71E0C8010E94611AF7017E
-:1023B0006081772767FD7095C8010E94B01A6BE3B2
-:1023C000C8010E94711AF701E35FFE4F80818823E4
-:1023D00049F06DEE71E0C8010E94611A6BE3C8011B
-:1023E0000E94711A63E0C8010E94711A6AE0C80174
-:1023F0000E94711AF30140814150960160E0C701CB
-:102400000E94AA0BF701E45FFE4F10826FCFE396A4
-:102410000FB6F894DEBF0FBECDBFDF91CF911F91F5
-:102420000F91FF90EF90DF90CF90BF90AF909F9073
-:102430008F907F906F905F904F903F9008958F9214
-:102440009F92AF92BF92CF92DF92EF92FF920F9343
-:102450001F93CF93DF931F92CDB7DEB74C018C0152
-:10246000085F1E4FD8018C9190E08D3F910544F09C
-:1024700081E0F401E35FFE4F8083C4010E946F0F8F
-:10248000F401E05FFE4F10826401B9EECB1ABEEF9B
-:10249000DB0AD601ED91FC91119780819181129612
-:1024A0000D90BC91A02D2D913C91D8014C91509153
-:1024B00000047401B5EDEB1ABEEFFB0AD7016C9175
-:1024C000651708F45C93442361F082279327B92EA3
-:1024D000BB1CBB24BB1C81E04D3F09F480E0B8224B
-:1024E00005C0D7011C9210920004B12C608171814B
-:1024F000C40149830E94E708A82E498187FD2CC0AA
-:10250000F401E40FF11D8287423030F081858A1199
-:1025100003C0C4010E94A6088A2D880F990B880D5C
-:10252000991DFC01E15EFE4FD6018D919C912081A9
-:102530003181DC018D919C91280F391F37FF02C03A
-:102540002F5F3F4F3595279531832083F801808198
-:102550008F5F808320E012C040E060E0C4010E94F1
-:102560000D09D7018C91863041F480910004F4016B
-:10257000E80FF11D8481823024F421E0B1101DC0E8
-:1025800001C020E0F8018081A401455F5E4F5A013F
-:10259000883248F081E0DA018C93C4010E946F0F09
-:1025A000109200046AC0C40129830E94A608F501A4
-:1025B00010821092000429810BC0D8018C918832BE
-:1025C00038F083E090E0F401EF5EFE4F918380836A
-:1025D000222309F452C0F80140815091000480E0A8
-:1025E00090E0242F30E0F9013197280D391DBF010B
-:1025F000680F791F6F3FAFEF7A07E1F00197D901BC
-:10260000A80FB91F1A96AC91A513F1CFCB01019673
-:10261000481BD8014C9350E04F5F5F4F655F7F4F81
-:10262000680D791DC4010A960E94D51FF8018081AA
-:102630008F5F808340910004D601ED91FC91208151
-:102640003181C401840F911D840F911DFC01E15E55
-:10265000FE4F31832083F8018081F401E80FF11DE2
-:1026600042878F5FD8018C934F5F409300044630C0
-:1026700021F410920004F70140830F90DF91CF9175
-:102680001F910F91FF90EF90DF90CF90BF90AF9090
-:102690009F908F900895CF93DF93EC01C55FDE4F3D
-:1026A0001882FC01E75EFE4F0190F081E02D208151
-:1026B0003181DC01A95EBE4F0D90BC91A02D2D9300
-:1026C0003C93DB012D913C91318320830E941F12AA
-:1026D0008881DF91CF91089508958230E8F4E82F42
-:1026E000F0E0EE0FFF1FE75FFE4F718360838130E4
-:1026F00041F0809169008C7F842B80936900E89A77
-:10270000089580916900440F551F440F551F837F22
-:10271000842B80936900E99A0895823078F481309F
-:1027200011F0E89801C0E998E82FF0E0EE0FFF1FE4
-:10273000E75FFE4F8CE693E19183808308951F92BB
-:102740000F920FB60F9211242F933F934F935F93E5
-:102750006F937F938F939F93AF93BF93EF93FF9369
-:10276000E0910901F0910A010995FF91EF91BF9164
-:10277000AF919F918F917F916F915F914F913F9119
-:102780002F910F900FBE0F901F9018951F920F92D0
-:102790000FB60F9211242F933F934F935F936F9334
-:1027A0007F938F939F93AF93BF93EF93FF93E091AA
-:1027B0000B01F0910C010995FF91EF91BF91AF9141
-:1027C0009F918F917F916F915F914F913F912F9149
-:1027D0000F900FBE0F901F9018951F920F920FB67B
-:1027E0000F9211242F933F938F939F93AF93BF9397
-:1027F0008091020490910304A0910404B091050417
-:102800003091010426E0230F2D3720F40296A11DFC
-:10281000B11D05C029E8230F0396A11DB11D20930A
-:1028200001048093020490930304A0930404B093E2
-:1028300005048091060490910704A0910804B091CA
-:1028400009040196A11DB11D80930604909307040D
-:10285000A0930804B0930904BF91AF919F918F9109
-:102860003F912F910F900FBE0F901F9018952FB78B
-:10287000F894609102047091030480910404909193
-:1028800005042FBF08953FB7F894809106049091F6
-:102890000704A0910804B091090426B5A89B05C0BF
-:1028A0002F3F19F00196A11DB11D3FBF6627782F5C
-:1028B000892F9A2F620F711D811D911D43E0660FB4
-:1028C000771F881F991F4A95D1F70895CF92DF92FD
-:1028D000EF92FF92CF93DF936B017C010E94431430
-:1028E000EB01C114D104E104F10489F00E948A1BB8
-:1028F0000E9443146C1B7D0B683E734090F381E093
-:10290000C81AD108E108F108C851DC4FEACFDF91BD
-:10291000CF91FF90EF90DF90CF9008958330910595
-:1029200028F0880F991F04970197F1F7089578947C
-:1029300084B5826084BD84B5816084BD85B58260C4
-:1029400085BD85B5816085BDEEE6F0E08081816062
-:102950008083E1E8F0E01082808182608083808162
-:1029600081608083E0E8F0E0808181608083E1EB3A
-:10297000F0E0808184608083E0EBF0E08081816022
-:102980008083EAE7F0E080818460808380818260D8
-:10299000808380818E7F8083808180688083109295
-:1029A000C1000895833081F028F4813099F082309D
-:1029B000A1F008958730A9F08830B9F08430D1F4BF
-:1029C000809180008F7D03C0809180008F778093FD
-:1029D0008000089584B58F7702C084B58F7D84BD53
-:1029E00008958091B0008F7703C08091B0008F7DF3
-:1029F0008093B0000895CF93DF9390E0FC01E555FC
-:102A0000FF4F2491FC01E154FF4F8491882349F149
-:102A100090E0880F991FFC01E352FF4FA591B491FC
-:102A20008D529F4FFC01C591D4919FB7611108C091
-:102A3000F8948C91209582238C93888182230AC0FC
-:102A4000623051F4F8948C91322F309583238C931B
-:102A50008881822B888304C0F8948C91822B8C937C
-:102A60009FBFDF91CF9108950F931F93CF93DF9373
-:102A70001F92CDB7DEB7282F30E0F901E956FF4F9E
-:102A80008491F901E555FF4F1491F901E154FF4F8D
-:102A900004910023C9F0882321F069830E94D21495
-:102AA0006981E02FF0E0EE0FFF1FED52FF4FA5917F
-:102AB000B4919FB7F8948C91611103C01095812354
-:102AC00001C0812B8C939FBF0F90DF91CF911F91FD
-:102AD0000F910895FC01818D228D90E0805C9F4FC5
-:102AE000821B91098F7399270895FC01918D828D26
-:102AF000981731F0828DE80FF11D858D90E00895D3
-:102B00008FEF9FEF0895FC01918D828D981761F0F2
-:102B1000828DDF01A80FB11D5D968C91928D9F5F14
-:102B20009F73928F90E008958FEF9FEF089581E05B
-:102B300097E1892B49F08EE598E0892B29F00E94D6
-:102B4000011781110C945E080895FC01848DDF014A
-:102B5000A80FB11DA35ABF4F2C91848D90E0019610
-:102B60008F739927848FA689B7892C93A089B189FF
-:102B70008C9180648C93938D848D981306C0028809
-:102B8000F389E02D80818F7D80830895CF93DF933B
-:102B9000EC01888D8823C9F0EA89FB89808185FD55
-:102BA00005C0A889B9898C9186FD0FC00FB607FCB6
-:102BB000F5CF808185FFF2CFA889B9898C9185FFF7
-:102BC000EDCFCE010E94A515E7CFDF91CF910895FB
-:102BD000CF92DF92FF920F931F93CF93DF931F92B9
-:102BE000CDB7DEB76C0181E0D60158968C9358972B
-:102BF0005B969C915B975C968C915C97981307C051
-:102C00005096ED91FC915197808185FD2EC0F60183
-:102C1000038D10E00F5F1F4F0F731127F02EF60189
-:102C2000848DF81211C00FB607FCF9CFD60150966B
-:102C3000ED91FC915197808185FFF1CFC6016983A9
-:102C40000E94A5156981EBCF838DE80FF11DE35A32
-:102C5000FF4F6083D6015B960C935B975296ED9184
-:102C6000FC915397808180620CC0D6015696ED91FD
-:102C7000FC91579760835096ED91FC91519780811C
-:102C80008064808381E090E00F90DF91CF911F916D
-:102C90000F91FF90DF90CF900895BF92CF92DF9277
-:102CA000EF92FF92CF93DF93EC016A017B01B22E8A
-:102CB00060E874E88EE190E0A70196010E946E1D25
-:102CC0002150310941095109569547953795279566
-:102CD000E889F98982E08083211580E1380798F03E
-:102CE000E889F989108260E472E48FE090E0A7013E
-:102CF00096010E946E1D21503109410951095695D6
-:102D0000479537952795EC85FD853083EE85FF85C2
-:102D10002083188EEC89FD89B082EA89FB89808145
-:102D200080618083EA89FB89808188608083EA8969
-:102D3000FB89808180688083EA89FB8980818F7D1F
-:102D40008083DF91CF91FF90EF90DF90CF90BF9085
-:102D500008951F920F920FB60F9211242F938F9305
-:102D60009F93EF93FF93E0911A04F0911B048081ED
-:102D7000E0912004F091210482FD12C090818091A5
-:102D800023048F5F8F7320912404821751F0E09108
-:102D90002304F0E0E65FFB4F958F8093230401C08E
-:102DA0008081FF91EF919F918F912F910F900FBE96
-:102DB0000F901F9018951F920F920FB60F9211242B
-:102DC0002F933F934F935F936F937F938F939F9333
-:102DD000AF93BF93EF93FF938AE094E00E94A51511
-:102DE000FF91EF91BF91AF919F918F917F916F91E3
-:102DF0005F914F913F912F910F900FBE0F901F90B9
-:102E000018958AE094E00E946A1521E0892B09F464
-:102E100020E0822F089510920D0410920C0488EE89
-:102E200093E0A0E0B0E080930E0490930F04A09391
-:102E30001004B093110489EF91E090930B048093F8
-:102E40000A0485EC90E0909317048093160484ECB8
-:102E500090E0909319048093180480EC90E0909394
-:102E60001B0480931A0481EC90E090931D048093DE
-:102E70001C0482EC90E090931F0480931E0486EC67
-:102E800090E09093210480932004109223041092E8
-:102E900024041092250410922604089508950E9497
-:102EA00097140E944E170E94C507C7E9D5E10E94FA
-:102EB00056072097E1F30E949715F9CFCF92DF9242
-:102EC000EF92FF920F931F93CF93DF937C016A01E0
-:102ED000EB0100E010E00C151D0571F06991D701C0
-:102EE000ED91FC910190F081E02DC7010995892BAE
-:102EF00019F00F5F1F4FEFCFC801DF91CF911F91E6
-:102F00000F91FF90EF90DF90CF90089561157105BC
-:102F100081F0DB010D900020E9F7AD01415051092E
-:102F2000461B570BDC01ED91FC910280F381E02DF3
-:102F3000099480E090E00895EF92FF920F931F9321
-:102F4000CF93DF938C017B01C0E0D0E0F701EC0F61
-:102F5000FD1F6491662359F0F801A081B181ED91C4
-:102F6000FC91C8010995892B11F02196EFCFCE0174
-:102F7000DF91CF911F910F91FF90EF900895DC01A9
-:102F8000ED91FC91DB0114964D915C9115976D913B
-:102F90007C910280F381E02D0994DC01ED91FC919C
-:102FA0000190F081E02D099465E072E00C948617A1
-:102FB0000F931F93CF93DF93EC010E949C178C011A
-:102FC000CE010E94D417800F911FDF91CF911F91E6
-:102FD0000F9108950F931F93CF93DF93EC010E94FD
-:102FE000BF178C01CE010E94D417800F911FDF9173
-:102FF000CF911F910F9108950F931F93CF93DF935C
-:10300000EC010E9486178C01CE010E94D417800F1C
-:10301000911FDF91CF911F910F9108958F929F92F1
-:10302000AF92BF92CF92DF92EF92FF920F931F93D6
-:10303000CF93DF93CDB7DEB7A1970FB6F894DEBF7D
-:103040000FBECDBF7C01C42EE52FCB01D22E19A21D
-:1030500021E02D1510F02AE0D22E8E010F5D1F4FBA
-:103060008D2C912CA12CB12C6C2D7E2FA5019401BF
-:103070000E946E1D8C2DD29E8019112401501109C1
-:103080008A3014F4805D01C0895CF80180832115C9
-:1030900031054105510521F0C22EE32FCA01E4CFCD
-:1030A000B801C7010E948617A1960FB6F894DEBF3B
-:1030B0000FBECDBFDF91CF911F910F91FF90EF9089
-:1030C000DF90CF90BF90AF909F908F900895CF9258
-:1030D000DF92EF92FF920F931F93CF93DF93EC0158
-:1030E0006A017B012115310579F4E881F9810190AC
-:1030F000F081E02D642FDF91CF911F910F91FF9010
-:10310000EF90DF90CF9009942A303105E9F477FFF2
-:103110001AC06DE20E94CD178C0144275527BA01D1
-:103120004C195D096E097F092AE0CE010E940E1834
-:10313000800F911FDF91CF911F910F91FF90EF9022
-:10314000DF90CF9008952AE0B701A601CE01DF916C
-:10315000CF911F910F91FF90EF90DF90CF900C9443
-:103160000E189A01AB01662757FD6095762F0C94D7
-:1031700067180F931F93CF93DF93EC019A01AB0174
-:10318000662757FD6095762F0E9467188C01CE0147
-:103190000E94D417800F911FDF91CF911F910F9143
-:1031A00008952115310541F4DC01ED91FC91019068
-:1031B000F081E02D642F09940C940E189A01462F8B
-:1031C00050E060E070E00C94D1180F931F93CF9300
-:1031D000DF93EC010E94D1188C01CE010E94D4171C
-:1031E000800F911FDF91CF911F910F910895FC01E6
-:1031F000808191810C942E1ECF93DF93EC01888106
-:103200009981009711F00E942E1E198218821D824A
-:103210001C821B821A82DF91CF9108950F931F9316
-:10322000CF93DF93EC018B016F5F7F4F8881998192
-:103230000E94BD1E009731F0998388831B830A8307
-:1032400081E001C080E0DF91CF911F910F9108953F
-:10325000CF93DF93EC0188819981892B29F08A81B2
-:103260009B818617970760F4CE010E940E19882370
-:1032700041F08C819D81892B19F4E881F9811082BC
-:1032800081E0DF91CF910895EF92FF920F931F930A
-:10329000CF93DF93EC017B018A01BA010E942819C8
-:1032A000811104C0CE010E94FC1807C01D830C834D
-:1032B000B701888199810E94E71FCE01DF91CF91EC
-:1032C0001F910F91FF90EF900895FC0111821082E1
-:1032D00013821282158214826115710559F0FB0167
-:1032E00001900020E9F7AF0141505109461B570BEF
-:1032F0000C94441908950F931F93CF93DF938C017F
-:10330000EB01FC0180819181009799F0428153810A
-:103310002C813D814217530750F0688179810E94CA
-:10332000E71F8C819D81F8019583848313C00E94DF
-:103330002E1E88819981F801918380838A819B81E7
-:10334000938382838C819D819583848319821882E3
-:103350001B821A821D821C82DF91CF911F910F91D7
-:103360000895CF93DF93EC018617970711F00E9421
-:103370007B19CE01DF91CF910895CF93DF93EC01BC
-:103380006115710561F0FB0101900020E9F7AF01C3
-:1033900041505109461B570B0E94441902C00E941C
-:1033A000FC18CE01DF91CF9108950F931F93CF9317
-:1033B000DF93CDB7DEB729970FB6F894DEBF0FBE07
-:1033C000CDBF8C01862FF8011182108213821282E8
-:1033D0001582148250E0BE016F5F7F4F90E00E9423
-:1033E0004A20BE016F5F7F4FC8010E94BD19299618
-:1033F0000FB6F894DEBF0FBECDBFDF91CF911F9106
-:103400000F9108950F931F93CF93DF93CDB7DEB73E
-:1034100062970FB6F894DEBF0FBECDBF8C01CB0113
-:10342000F80111821082138212821582148250E0F8
-:10343000BE016F5F7F4F0E941720BE016F5F7F4FFD
-:10344000C8010E94BD1962960FB6F894DEBF0FBE88
-:10345000CDBFDF91CF911F910F910895EF92FF9211
-:103460000F931F93CF93DF93EC017B010C811D81A0
-:103470006115710511F480E016C04115510591F0F8
-:10348000040F151FB8010E9428198823A1F3288171
-:1034900039818C819D81B701820F931F0E94E71FA4
-:1034A0001D830C8381E0DF91CF911F910F91FF90DD
-:1034B000EF900895FB0144815581608171810C94E6
-:1034C0002E1A6115710559F0FB0101900020E9F7F2
-:1034D000AF0141505109461B570B0C942E1A80E046
-:1034E0000895CF93DF9300D0CDB7DEB769831A82FA
-:1034F00041E050E0BE016F5F7F4F0E942E1A0F9097
-:103500000F90DF91CF910895EF92FF920F931F9349
-:10351000CF93DF9300D000D0CDB7DEB77C01862FEC
-:103520004AE08E010F5F1F4FB80190E00E942220F9
-:10353000F80101900020E9F7AF0141505109401B0B
-:10354000510BB801C7010E942E1A0F900F900F90D7
-:103550000F90DF91CF911F910F91FF90EF90089501
-:10356000EF92FF920F931F93CF93DF93CDB7DEB708
-:1035700028970FB6F894DEBF0FBECDBF7C01CB01FC
-:103580004AE08E010F5F1F4FB8010E942220F80110
-:1035900001900020E9F7AF0141505109401B510B48
-:1035A000B801C7010E942E1A28960FB6F894DEBF04
-:1035B0000FBECDBFDF91CF911F910F91FF90EF9084
-:1035C0000895FC01248135816217730748F48081D6
-:1035D0009181009729F0FC01E60FF71F8081089583
-:1035E00080E008950C94E11A0F931F93CF93DF931B
-:1035F000EB0141155105E9F02097D9F0FC016481F8
-:10360000758126173707A0F4621B730B8A010150DE
-:1036100011096017710708F48B01FC016081718149
-:10362000620F731FA801CE010E94EE1FC00FD11FB1
-:103630001882DF91CF911F910F910895CF93DF935F
-:10364000FC01848195814817590778F4C081D181A4
-:10365000FB0160817181CE01840F951F0E94FD1FC7
-:10366000009719F08C1B9D0B02C08FEF9FEFDF912D
-:10367000CF910895BF92CF92DF92EF92FF920F9376
-:103680001F93CF93DF936C017B01EA01890124171B
-:10369000350720F48D2FE901042F182F67E072E021
-:1036A000C6010E946519D70114968D919C911597BA
-:1036B000C817D907C8F48017910708F48C01D701FF
-:1036C000ED91FC911197E00FF11FB08010826D9188
-:1036D0007C916C0F7D1FC6010E94BD19D701ED9131
-:1036E000FC91E00FF11FB082C601DF91CF911F91D5
-:1036F0000F91FF90EF90DF90CF90BF900895FC0165
-:1037000080819181009711F00C94A51F60E070E01A
-:10371000CB01089508955058BB27AA270ED009C1A0
-:10372000FAD030F0FFD020F031F49F3F11F41EF4B6
-:10373000EFC00EF4E095E7FBE5C0E92F0BD180F375
-:10374000BA17620773078407950718F071F49EF59E
-:1037500023C10EF4E0950B2EBA2FA02D0B01B90159
-:1037600090010C01CA01A0011124FF27591B99F0F7
-:10377000593F50F4503E68F11A16F040A22F232F03
-:10378000342F4427585FF3CF469537952795A79553
-:10379000F0405395C9F77EF41F16BA0B620B730BFA
-:1037A000840BBAF09150A1F0FF0FBB1F661F771F6B
-:1037B000881FC2F70EC0BA0F621F731F841F48F420
-:1037C000879577956795B795F7959E3F08F0B3CFA6
-:1037D0009395880F08F09927EE0F97958795089590
-:1037E00004D06894B111D9C00895BCD088F09F5717
-:1037F00090F0B92F9927B751A0F0D1F0660F771F3D
-:10380000881F991F1AF0BA95C9F712C0B13081F01C
-:10381000C3D0B1E00895C0C0672F782F8827B85F64
-:1038200039F0B93FCCF3869577956795B395D9F77D
-:103830003EF490958095709561957F4F8F4F9F4F87
-:103840000895E89409C097FB3EF490958095709593
-:1038500061957F4F8F4F9F4F9923A9F0F92F96E9DC
-:10386000BB279395F695879577956795B795F11151
-:10387000F8CFFAF4BB0F11F460FF1BC06F5F7F4FEE
-:103880008F4F9F4F16C0882311F096E911C0772300
-:1038900021F09EE8872F762F05C0662371F096E809
-:1038A000862F70E060E02AF09A95660F771F881FD8
-:1038B000DAF7880F9695879597F90895990F00087C
-:1038C000550FAA0BE0E8FEEF16161706E807F907F2
-:1038D000C0F012161306E407F50798F0621B730B8D
-:1038E000840B950B39F40A2661F0232B242B252B0E
-:1038F00021F408950A2609F4A140A6958FEF811DB1
-:10390000811D089597F99F6780E870E060E0089551
-:103910009FEF80EC089500240A94161617061806E7
-:103920000906089500240A941216130614060506C3
-:103930000895092E0394000C11F4882352F0BB0F54
-:1039400040F4BF2B11F460FF04C06F5F7F4F8F4FB7
-:103950009F4F089557FD9058440F551F59F05F3FF2
-:1039600071F04795880F97FB991F61F09F3F79F0A1
-:1039700087950895121613061406551FF2CF469523
-:10398000F1DF08C0161617061806991FF1CF8695A5
-:103990007105610508940895E894BB276627772789
-:1039A000CB0197F908958ADF08F48FEF08950BD0C3
-:1039B000C0CFB1DF28F0B6DF18F0952309F0A2CF11
-:1039C000A7CF1124EACFC6DFA0F3959FD1F3950FBF
-:1039D00050E0551F629FF001729FBB27F00DB11D93
-:1039E000639FAA27F00DB11DAA1F649F6627B00D23
-:1039F000A11D661F829F2227B00DA11D621F739F0C
-:103A0000B00DA11D621F839FA00D611D221F749F19
-:103A10003327A00D611D231F849F600D211D822F60
-:103A2000762F6A2F11249F5750408AF0E1F08823A7
-:103A30004AF0EE0FFF1FBB1F661F771F881F9150B4
-:103A40005040A9F79E3F510570F05CCFA6CF5F3F75
-:103A5000ECF3983EDCF3869577956795B795F795E7
-:103A6000E7959F5FC1F7FE2B880F911D969587956F
-:103A700097F90895991B79E004C0991F961708F0EB
-:103A8000961B881F7A95C9F780950895AA1BBB1BC2
-:103A900051E107C0AA1FBB1FA617B70710F0A61B4E
-:103AA000B70B881F991F5A95A9F780959095BC016F
-:103AB000CD01089597FB072E16F4009407D077FDEB
-:103AC00009D00E94461D07FC05D03EF490958195D3
-:103AD0009F4F0895709561957F4F0895A1E21A2E2A
-:103AE000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA2
-:103AF000A217B307E407F50720F0A21BB30BE40BF2
-:103B0000F50B661F771F881F991F1A9469F7609538
-:103B10007095809590959B01AC01BD01CF010895F2
-:103B2000EE0FFF1F0590F491E02D0994CF93DF93E2
-:103B30008230910510F482E090E0E091A904F091C8
-:103B4000AA0420E030E0A0E0B0E0309739F14081F5
-:103B5000518148175907B8F04817590771F4828105
-:103B60009381109729F013969C938E9312972CC0F3
-:103B70009093AA048093A90427C02115310531F040
-:103B80004217530718F0A901DB0101C0EF019A01A8
-:103B9000BD01DF010280F381E02DD7CF2115310572
-:103BA000F9F0281B390B2430310580F48A819B8180
-:103BB0006115710521F0FB019383828304C090930A
-:103BC000AA048093A904FE01329644C0FE01E20FCC
-:103BD000F31F8193919322503109398328833AC08E
-:103BE0002091A7043091A804232B41F420910201D5
-:103BF000309103013093A8042093A7042091000181
-:103C0000309101012115310541F42DB73EB74091A6
-:103C1000040150910501241B350BE091A704F0919C
-:103C2000A804E217F307A0F42E1B3F0B281739074F
-:103C300078F0AC014E5F5F4F2417350748F04E0F08
-:103C40005F1F5093A8044093A7048193919302C0EF
-:103C5000E0E0F0E0CF01DF91CF910895CF93DF93C3
-:103C6000009709F487C0FC01329713821282C09139
-:103C7000A904D091AA04209781F420813181280FD2
-:103C8000391F8091A7049091A8048217930779F5B2
-:103C9000F093A804E093A7046DC0DE0120E030E0BB
-:103CA000AE17BF0750F412964D915C9113979D018A
-:103CB0004115510509F1DA01F3CFB383A2834081A5
-:103CC0005181840F951F8A179B0771F48D919C91E8
-:103CD0001197840F951F02969183808312968D9180
-:103CE0009C911397938382832115310529F4F093D6
-:103CF000AA04E093A9043EC0D9011396FC93EE9365
-:103D000012974D915D91A40FB51FEA17FB0779F447
-:103D100080819181840F951F0296D90111969C9301
-:103D20008E938281938113969C938E931297E0E0F9
-:103D3000F0E08A819B81009719F0FE01EC01F9CF38
-:103D4000CE01029628813981820F931F2091A7040A
-:103D50003091A8042817390769F4309729F4109294
-:103D6000AA041092A90402C013821282D093A8045C
-:103D7000C093A704DF91CF910895A0E0B0E0E3ECF9
-:103D8000FEE10C943323EC01CB01209719F40E943F
-:103D9000961DB8C0FE01E60FF71F9E0122503109A3
-:103DA000E217F30708F4ACC0D9010D911C911197EB
-:103DB00006171707B8F00530110508F49FC0A801D1
-:103DC000445051094617570708F498C0025011098A
-:103DD000061B170B019311936D937C93CF010E94E7
-:103DE0002E1E8CC05B01A01AB10A4E01800E911EDE
-:103DF000A091A904B091AA04612C712C60E070E03C
-:103E0000109709F449C0A815B905C9F5ED90FC90C3
-:103E10001197670142E0C40ED11CCA14DB0478F18B
-:103E200047018A189B08640142E0C40ED11C129617
-:103E3000BC9012971396AC91B5E0CB16D10440F02C
-:103E4000B282A38391828082D9018D939C9309C011
-:103E50000E5F1F4F0E0D1F1DF90111830083EB2D07
-:103E6000FA2F6115710531F0DB011396FC93EE9387
-:103E7000129744C0F093AA04E093A9043FC06D9147
-:103E80007C9111976616770608F43B01BD011296E6
-:103E90000D90BC91A02DB4CF6091A7047091A8049F
-:103EA00068157905E9F468167906D0F440910001A7
-:103EB000509101014115510541F44DB75EB7609134
-:103EC000040170910501461B570BE417F507C0F478
-:103ED000F093A804E093A704F901918380830EC0B6
-:103EE0000E94961D7C01009759F0A801BE010E9416
-:103EF000CC1FCE010E942E1EC70104C0CE0102C0FD
-:103F000080E090E0CDB7DEB7EEE00C944F23FC01EB
-:103F100088279927E89421912032E9F3293010F07D
-:103F20002E30C8F32B3241F02D3239F4689404C09E
-:103F30000E944220820F911D219120532A30C0F30C
-:103F40001EF4909581959F4F08951F93FC0199272A
-:103F50008827BC01E89411911032E9F3193010F070
-:103F60001E30C8F31B3251F01D3249F4689406C06C
-:103F70000E942D20610F711D811D911D1191105303
-:103F80001A30B0F33EF490958095709561957F4F0F
-:103F90008F4F9F4F1F910895FB01DC0102C00190DC
-:103FA0000D9241505040D8F708956817790768F48A
-:103FB000FB01DC01E40FF51FA40FB51F02C0029046
-:103FC0000E9241505040D8F708950C94CC1FFB013D
-:103FD000DC0101900D920020E1F70895FB01DC0166
-:103FE0004150504048F001900D920020C9F701C0A7
-:103FF0001D9241505040E0F70895FB015191552327
-:10400000A9F0BF01DC014D9145174111E1F759F4C9
-:10401000CD010190002049F04D9140154111C9F3A7
-:10402000FB014111EFCF81E090E001970895453207
-:10403000510520F4423010F00C942220FB01108234
-:10404000CB010895BB274A3031F4992322F4BDE215
-:10405000909581959F4F0C945620592F482F372FBC
-:10406000262F660F771F881F991F660F771F881FDF
-:10407000991F620F731F841F951F660F771F881F7C
-:10408000991F08957AE0979F902D879F802D910D1D
-:10409000112408954532510520F4423010F00C945B
-:1040A0005520FB011082CB010895BB27FB0155274A
-:1040B000AA27880F991FAA1FA41710F0A41B839585
-:1040C0005051B9F7A05DAA3308F0A95DA1930097FC
-:1040D00079F7B111B1931192CB010C948F22AEE01C
-:1040E000B0E0E5E7F0E20C943D230D891E8986E0FF
-:1040F0008C831A8309838FEF9FE79E838D83AE01A4
-:10410000475E5F4F6F89788DCE0101960E949120A6
-:10411000EF81F885E00FF11F10822E96E4E00C94F9
-:104120005923ACE0B0E0E7E9F0E20C942F237C01E6
-:104130006B018A01FC0117821682838181FFBDC158
-:10414000CE0101964C01F7019381F60193FD859113
-:1041500093FF81916F01882309F4ABC1853239F453
-:1041600093FD859193FF81916F01853229F4B70109
-:1041700090E00E949F22E7CF512C312C20E020328A
-:10418000A0F48B3269F030F4803259F0833269F454
-:1041900020612CC08D3239F0803339F4216026C083
-:1041A0002260246023C0286021C027FD27C030ED95
-:1041B000380F3A3078F426FF06C0FAE05F9E300DE3
-:1041C0001124532E13C08AE0389E300D1124332E53
-:1041D00020620CC08E3221F426FD6BC1206406C023
-:1041E0008C3611F4206802C0883641F4F60193FD44
-:1041F000859193FF81916F018111C1CF982F9F7D90
-:104200009554933028F40C5F1F4FFFE3F9830DC0E2
-:10421000833631F0833771F0833509F05BC022C0FB
-:10422000F801808189830E5F1F4F44244394512CF1
-:10423000540115C03801F2E06F0E711CF801A08026
-:10424000B18026FF03C0652D70E002C06FEF7FEFE5
-:10425000C5012C870E9484222C0183012C852F7795
-:10426000222E17C03801F2E06F0E711CF801A080F9
-:10427000B18026FF03C0652D70E002C06FEF7FEFB5
-:10428000C5012C870E9479222C012C852068222EC2
-:10429000830123FC1BC0832D90E048165906B0F41F
-:1042A000B70180E290E00E949F223A94F4CFF5019A
-:1042B00027FC859127FE81915F01B70190E00E9464
-:1042C0009F2231103A94F1E04F1A510841145104E1
-:1042D00071F7E5C0843611F0893639F5F80127FF0A
-:1042E00007C060817181828193810C5F1F4F08C07C
-:1042F00060817181882777FD8095982F0E5F1F4F11
-:104300002F76B22E97FF09C0909580957095619594
-:104310007F4F8F4F9F4F2068B22E2AE030E0A401DC
-:104320000E94D122A82EA81844C0853729F42F7ED8
-:10433000B22E2AE030E025C0F22FF97FBF2E8F3653
-:10434000C1F018F4883579F0B4C0803719F0883797
-:1043500021F0AFC02F2F2061B22EB4FE0DC08B2DE7
-:104360008460B82E09C024FF0AC09F2F9660B92E22
-:1043700006C028E030E005C020E130E002C020E1C6
-:1043800032E0F801B7FE07C06081718182819381BC
-:104390000C5F1F4F06C06081718180E090E00E5F6E
-:1043A0001F4FA4010E94D122A82EA818FB2DFF7731
-:1043B000BF2EB6FE0BC02B2D2E7FA51450F4B4FEDD
-:1043C0000AC0B2FC08C02B2D2E7E05C07A2C2B2DE6
-:1043D00003C07A2C01C0752C24FF0DC0FE01EA0D2C
-:1043E000F11D8081803311F4297E09C022FF06C0AF
-:1043F0007394739404C0822F867809F0739423FD1C
-:1044000013C020FF06C05A2C731418F4530C57180D
-:10441000732C731468F4B70180E290E02C870E943B
-:104420009F2273942C85F5CF731410F4371801C0B4
-:10443000312C24FF12C0B70180E390E02C870E944A
-:104440009F222C8522FF17C021FF03C088E590E042
-:1044500002C088E790E0B7010CC0822F867859F03F
-:1044600021FD02C080E201C08BE227FD8DE2B70191
-:1044700090E00E949F22A51438F4B70180E390E0F9
-:104480000E949F225A94F7CFAA94F401EA0DF11DDD
-:104490008081B70190E00E949F22A110F5CF3320C8
-:1044A00009F451CEB70180E290E00E949F223A9435
-:1044B000F6CFF7018681978102C08FEF9FEF2C9690
-:1044C000E2E10C944B23F999FECF92BD81BDF89A9D
-:1044D000992780B50895262FF999FECF1FBA92BD6E
-:1044E00081BD20BD0FB6F894FA9AF99A0FBE0196D5
-:1044F0000895FC010590615070400110D8F7809537
-:1045000090958E0F9F1F0895FC016150704001909F
-:104510000110D8F7809590958E0F9F1F0895DC01AC
-:10452000FC01672F71917723E1F7329704C07C91EA
-:104530006D9370836291AE17BF07C8F308950F9310
-:104540001F93CF93DF93182F092FEB018B8181FDF0
-:1045500003C08FEF9FEF20C082FF10C04E815F81AC
-:104560002C813D81421753077CF4E881F9819F013A
-:104570002F5F3F4F39832883108306C0E885F98574
-:10458000812F0995892B29F72E813F812F5F3F4F7E
-:104590003F832E83812F902FDF91CF911F910F9119
-:1045A0000895FA01AA27283051F1203181F1E894C9
-:1045B0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E016
-:1045C0003ED0B4E03CD0670F781F891F9A1FA11D11
-:1045D000680F791F8A1F911DA11D6A0F711D811D12
-:1045E000911DA11D20D009F468943F912AE0269FD7
-:1045F00011243019305D3193DEF6CF010895462F36
-:104600004770405D4193B3E00FD0C9F7F6CF462F16
-:104610004F70405D4A3318F0495D31FD405241937F
-:1046200002D0A9F7EACFB4E0A6959795879577953C
-:104630006795BA95C9F700976105710508959B01C3
-:10464000AC010A2E06945795479537952795BA954C
-:10465000C9F7620F731F841F951FA01D08952F9225
-:104660003F924F925F926F927F928F929F92AF9202
-:10467000BF92CF92DF92EF92FF920F931F93CF934F
-:10468000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFE6
-:104690000FBECDBF09942A88398848885F846E840C
-:1046A0007D848C849B84AA84B984C884DF80EE8056
-:1046B000FD800C811B81AA81B981CE0FD11D0FB65F
-:1046C000F894DEBF0FBECDBFED01089510E0CCEE33
-:1046D000D0E004C0FE010E94921D2296CE3ED1077A
-:0646E000C9F7F894FFCFBA
-:1046E6000000AB0480002C01066C136C133B0049E0
-:1046F60054506172616D733A20004F4B005620335F
-:104706002E322E302D623132205349474E414C64B1
-:1047160075696E6F202D20636F6D70696C656420FE
-:1047260061742046656220313320323031362032C2
-:10473600313A33383A33340053796E633A200020E5
-:104746002D3E2053796E63466163743A20002C2017
-:10475600436C6F636B3A20002C20546F6C3A200038
-:104766002C20506174744C656E3A20002C205075D4
-:104776006C73653A20002C20002C206D53746172F6
-:10478600743A20005369676E616C3A20002E20004F
-:10479600205B005D005061747465726E3A200020E3
-:1047A60050002A5B002C0025303258004C4C3D004E
-:1047B6004C483D00534C3D0053483D00433D004DA1
-:1047C6005300443D0043503D0053503D004F004DC3
-:1047D60055004D430000000000E8155E176A15837A
-:1047E600157515C6150D0A006E616E00696E6600B8
-:0647F6006F7666002E0044
+:1000D00003030301020408102040800102040810F9
+:1000E0002001020408102000CB18BF1811241FBEE5
+:1000F000CFEFD8E0DEBFCDBF11E0A0E0B1E0E0EC93
+:10010000F3E402C005900D92AC39B107D9F724E0B1
+:10011000ACE9B1E001C01D92A435B207E1F710E0EF
+:10012000C5E7D0E004C02197FE010E94B419C4378E
+:10013000D107C9F70E949D110C94D3210C940000A3
+:100140000E949E1B2F923F924F925F926F927F92DE
+:100150008F929F92AF92BF92CF92DF92EF92FF92D7
+:100160000F931F93CF93DF93CDB7DEB7AF970FB643
+:10017000F894DEBF0FBECDBF8091E703811106C0AA
+:100180008091B103883210F40C94E7091092B40303
+:1001900060E080E00E94E70F8090D803882D90E017
+:1001A0009C01215031093E8F2D8F8091C403909185
+:1001B000C503A091C603B091C7038F8B988FA98FF9
+:1001C000BA8F9091B1039B8FF12C8F2D90E0ED8D24
+:1001D000FE8D8E179F070CF0AFC0FC01E955FD4F57
+:1001E0009F012C5F3F4F4481442309F4A3C0EE24B8
+:1001F000E394EF0C880F991FDC01A853BC4FBA8B16
+:10020000A98B3E8B2D8BE81408F094C02E2C312C3A
+:10021000F101E955FD4F9480992009F489C0E989DD
+:10022000FA89A080B180F101EE0FFF1FE853FC4F67
+:1002300000811181C8018A259B25990F880B982F71
+:10024000892B09F075C0B80117FF04C0662777270E
+:10025000601B710B072E000C880B990B0E945A2013
+:100260002F89388D498D5A8D0E94B9202B013C0170
+:100270006801CA18DB08D7FE03C0D194C194D10825
+:1002800020E030E040E05FE3C301B2010E94B9200A
+:100290009B01AC01C301B2010E94BB190E94991AD3
+:1002A0006C157D050CF444C0E3EBF2E08E2F23EBDC
+:1002B00032E0821B3B8D831730F480818E1101C0A8
+:1002C000F0823196F3CFAD89BE89DC90492D50E0A4
+:1002D000ED2DF0E09F01D5010E94AD19049F900122
+:1002E000059F300D149F300D11248901330F220B0F
+:1002F000330B600F711F821F931FE40FF51F9F01C7
+:10030000FF0F440B550B0E948E19E989FA8931833E
+:1003100020839D0CAD89BE899C92F101E955FD4F6A
+:100320001482F101EE0FFF1FE853FC4F118210827F
+:10033000E39469CFF39449CF60E080E00E94E70F37
+:100340008FEF8093A7026090D8037090B10358ECB0
+:10035000C52E53E0D52E00E010E0EE24EA94FE2CEA
+:10036000872C912CA12CB12C061508F059C0FFEF59
+:10037000EF16FF0611F5D6018D919C9197FD1DC0DA
+:10038000F801E955FD4F648170E080E090E00E9443
+:100390005A201B012C01C501B4010E945A202BE7F1
+:1003A00034E14EE25EE30E94B9209B01AC01C20140
+:1003B000B1010E94CF1A181664F1F6018081918173
+:1003C00097FD28C0F701EE0FFF1FE853FC4F208177
+:1003D000318182179307F4F4F801E955FD4F6481E8
+:1003E00070E080E090E00E945A201B012C01C501C2
+:1003F000B4010E945A202BE734E14EE25EE30E94F2
+:10040000B9209B01AC01C201B1010E94CF1A18169C
+:100410000CF478010F5F1F4FF2E0CF0ED11CA4CF78
+:100420002FEFE216F20641F0E092A70281E090E0A1
+:100430009093BB038093BA038091BA039091BB035E
+:10044000019709F074C04FEF460DE091A7020E2E00
+:10045000000CFF0B072D10E0480131E0831A9108D2
+:10046000CF01880F991FDC01A853BC4F7D0137E0F5
+:10047000632E085211094F3F09F457C0C42E042EB1
+:10048000000CDD08D601AA0FBB1FA853BC4F2D914D
+:100490003C9137FF48C03195219531092836B2E4A7
+:1004A0003B070CF040C0D701AD90BC90C901B5012D
+:1004B0000E94441968327105B0F56A9CC0016B9CBA
+:1004C000900D11248217930770F5D601A955BD4FE1
+:1004D00014968C918250863030F550E0852F90E054
+:1004E0008815990584F4DC01A955BD4F1D962C9102
+:1004F0001D9730E02C153D05A1F41C962C9130E0A1
+:100500002E173F0771F4801791076CF44093DA03BC
+:1005100082E090E09093BB038093BA035093B203C0
+:1005200006C05F5FDBCF4150A6CF4093DA038091D6
+:10053000AA02882309F427C18091BA039091BB03D2
+:10054000029709F020C1B7E2B71508F01CC18091ED
+:10055000B20392E0980F9093B3036091DA03062EF2
+:10056000000C770BA091A7020A2E000CBB0B472DA5
+:1005700050E041505109292F30E024173507A4F4E9
+:10058000F901E955FD4F258530E02617370751F46D
+:10059000248530E02A173B0729F491509093B30348
+:1005A00011E005C09E5FE7CF9093B30310E09091F8
+:1005B000B303791610F47092B3036091B3030E94F1
+:1005C000E70F112351F08091B30390E02091B20323
+:1005D000821B9109889734F4CFC08091B1038E3F7C
+:1005E00008F0B8C066E671E08BED93E00E941C1144
+:1005F00066E671E081EE93E00E941C1162E08BEDF3
+:1006000093E00E94CF1067E671E08BED93E00E94CB
+:10061000E2106BE38BED93E00E94CF1010E080912D
+:10062000D803181778F5212F30E0C901880F991FDA
+:10063000FC01E853FC4F7F0180819181892B01F1FE
+:10064000F901E955FD4F84818823D1F060E58BEDF8
+:1006500093E00E94CF10812F0E94C10F65E971E0E5
+:100660008BED93E00E94E210D7016D917C918BEDB0
+:1006700093E00E949F106BE38BED93E00E94CF10FC
+:100680001F5FCDCF6AE671E08BED93E00E94E21030
+:100690006BE381EE93E00E94CF106DE671E081EE96
+:1006A00093E00E94E2106091A702062E000C770BE7
+:1006B00081EE93E00E949F106BE381EE93E00E9435
+:1006C000CF1061E771E081EE93E00E94E21060914B
+:1006D000DA03062E000C770B81EE93E00E949F1048
+:1006E0006BE381EE93E00E94CF108091B6038823E4
+:1006F00059F065E771E081EE93E00E94E2106BE350
+:1007000081EE93E00E94CF1063E081EE93E00E94BF
+:10071000CF106AE081EE93E00E94CF100091B30306
+:100720001091B2038BED93E00E94B60E011768F0B2
+:10073000E12FF0E0E955FD4F648570E080E090E046
+:100740004AE00E94E70E1F5FF1CF81EE93E00E9426
+:10075000B60E16C06091B203623070F08091B303A0
+:1007600090E08D3F910544F087EA92E00E94FC0DF5
+:1007700081E08093B50307C087EA92E00E94BD0D37
+:1007800081E08093B4038091B403811120C68091ED
+:10079000A802811105C08091A902882309F417C617
+:1007A00066E671E08BED93E00E941C1166E671E055
+:1007B00081EE93E00E941C1162E08BED93E00E94B9
+:1007C000CF10B091A902BF8BBB2309F453C5809110
+:1007D000F301811148C082E38093E70181E08093B7
+:1007E000E4011092E5018FEA91E00E94AD0D809145
+:1007F000E40127E030E0281B31099091E50187E012
+:1008000061E070E0482F50E0241735074CF4AB014D
+:10081000082E01C0440F0A94EAF7942B8150F2CFBE
+:100820009093E5018FEF8093EA018093EB01809331
+:10083000EC018093ED011092F1011092F20187EA30
+:1008400092E09093E9018093E8011092EF011092F9
+:10085000EE0184E18093F0018FEA91E00E94AD0DFA
+:1008600081E08093F3018091E70381111BC08FEF3A
+:100870008093EA018093EB018093EC018093ED017A
+:100880001092F1011092F2011092EF011092EE011C
+:1008900084E18093F0018FEA91E00E94AD0D81E147
+:1008A0008093F0018091E703882381F08091E80133
+:1008B0009091E901FC01E25FFE4F108233971082B4
+:1008C000E12C912CF12CCC24C394D1C12090E801CF
+:1008D0003090E901F101EF5CFE4F1081143008F413
+:1008E000BEC4B797608170E080E090E00E945A201B
+:1008F0002AE037ED43E25DE30E94B9206B017C0101
+:1009000020E030E0A9010E94CF1A20E030E040E072
+:100910005FE387FD05C0C701B6010E94BB1904C093
+:10092000C701B6010E94BA190E94991A7101E4E048
+:10093000EE0EF11CD101AF5DBE4FC12C40E0F701BE
+:1009400081917F01861758F15C2D852F90E055230A
+:10095000F1F0FE01E80FF91F70819101270F311DA1
+:10096000270F311DF901EF5DFE4F2D913C9111973D
+:100970000190F081E02D2E173F074CF4E1E0F0E00C
+:10098000EC0FFD1FE80FF91F70835150DECFE1E03F
+:10099000F0E0EC0FFD1FE80FF91F4083C3944F5F99
+:1009A00012964113CCCF1091EA010091EC01E09036
+:1009B000EB01F090ED019E012F5F3F4F388B2F87A9
+:1009C0003E8F2D8F5F855DA7C101865F9E4F9FA7DC
+:1009D0008EA78D8D2F85821B8C1508F091C0AD8D53
+:1009E000BE8D2D91BE8FAD8FC101820F911D820FE3
+:1009F000911DFC01EF5DFE4F208131813C8F2B8FDB
+:100A00001216130634F7220F331F38A72FA3AE0197
+:100A10004F5F5F4F5CA34BA31FEF0FEFEE24EA94F1
+:100A2000FF24FA941A8A198A19A21AA28FEF9FEF4B
+:100A30009E8B8D8B2B8D3C8D032E000C440B550B08
+:100A400029A73AA74BA75CA78BA1FDA58F1B8C15E7
+:100A500008F0BFCFABA1BCA1DD90BCA3ABA3ED2D33
+:100A6000F0E0F8A3EF8FEE0FFF1FE20DF31DEF5D37
+:100A7000FE4F8080918069A57AA58BA59CA50E94D8
+:100A80005A202B013C019EA28DA297FE06C0222770
+:100A90003327281939093EA32DA3AB8CBC8C4DA15B
+:100AA0005EA1A41AB50AB7FE03C0B194A194B1081F
+:100AB00020E030E040E05FE3C301B2010E94B920D2
+:100AC0000E94991A6A157B050CF046C3AFA0B8A422
+:100AD0008DA19EA1A81AB90AB7FE03C0B194A19432
+:100AE000B1082DEC3CEC4CE45FE3C301B2010E9481
+:100AF000B9200E94991A6A157B050CF071C4A4CF25
+:100B0000F092ED01E092EB010093EC011093EA0109
+:100B1000A6C3D394D71408F0E5C0F801ED0DF11D7C
+:100B2000848590E08417950709F0F3C48F8862E00C
+:100B300070E0260E371E882061F3DF10FDC4DD2033
+:100B400009F4FAC443859801240F311D240F311D87
+:100B5000F901EF5DFE4F20813181B90137FF04C0FB
+:100B600066277727621B730B61304DE774070CF023
+:100B7000E3C4880F991F800F911FFC01EF5DFE4FAA
+:100B80008081918182279327990F880B982F892B39
+:100B900009F4D2C4072E000C880B990B0E945A202E
+:100BA0002B013C016091EE017091EF01072E000CCA
+:100BB000880B990B0E945A20698B7A8B8B8B9C8BAC
+:100BC0009B01AC01C301B2010E94271A4B015C01D9
+:100BD00020E030E0A9010E94CF1A20E030E040E0A0
+:100BE0005FE387FD9AC4C501B4010E94BB190E944E
+:100BF000991A623071050CF49FC4072E000C880B03
+:100C0000990B0E945A2029893A894B895C890E9454
+:100C1000B9209B01AC01C301B2010E94271A9B01BC
+:100C2000AC0160E070E080E89FE30E94BA194B01DC
+:100C30005C0120E030E0A9010E94CF1A18160CF0E8
+:100C400071C429E23CE54FE85DE3C501B4010E94AF
+:100C5000532018160CF470C4F801E55FFE4F808134
+:100C600081508083FF24F394FD0C99249394009188
+:100C7000E8011091E901F801E65FFE4F9081F91655
+:100C800008F081C08091F10181112CC0F801EF0DB5
+:100C9000F11D848590E04091EA01042E000C550B73
+:100CA000A091EC012091EB01A090ED018417950734
+:100CB00009F418C4622F022E000C770B86179707D1
+:100CC00009F410C46A2F0A2E000C770B86179707B9
+:100CD00009F408C46A2D0A2C000C770B86179707B5
+:100CE00009F400C48091F201882309F44AC080917C
+:100CF000F101882309F445C0AF2CB12CF801EA0DAD
+:100D0000FB1D848590E02091EC01022E000C330B3A
+:100D10008217930709F46FC32091ED01022E000C96
+:100D2000330B8217930709F466C32091EA01022E60
+:100D3000000C330B8217930709F4B7C32091EB0122
+:100D4000022E000C330B8217930709F4AEC3809177
+:100D5000F001082E000C990B2091E2013091E30183
+:100D60002817390708F04DC01092F1011092F201D6
+:100D70008FEA91E00E94AD0D912C8091F1018111DB
+:100D80003DC3F39474CFD801A45FBE4F81E0982691
+:100D90008F2D89198C932EEFF21249C09E3F09F0D6
+:100DA00046C011976C916230F0F08091F00187FDA0
+:100DB0008F5F8595082E000C990B2091E2013091F0
+:100DC000E3018217930778F4C8010E94FC0D80911B
+:100DD000E8019091E901FC01E25FFE4F21E02083F0
+:100DE000F29620833CC28C91811121C0D801A05C75
+:100DF000BE4F81E08C931082F801E25FFE4F80834A
+:100E00002EC2F801E45FFE4FEE24E3949E248F2D62
+:100E1000891980836F2DC8010E94FC0DE091E801C3
+:100E2000F091E901E25FFE4FE0821092F1018091C2
+:100E3000F001082E000C990B2091E2013091E301A2
+:100E40002817390708F40BC266E671E0CE0109964F
+:100E50000E9442116AE671E0CE0109960E941C11BF
+:100E600080E390E3A0E089839A83AB836091E20101
+:100E70007091E30176956795769567956E5F7F4FE4
+:100E8000CE0109960E944A10D12C8E010F5F1F4F90
+:100E900067E7A62E61E0B62E4091E10150E02D2DCE
+:100EA00030E08091E701ED2C0D2C000CFF0890E064
+:100EB00024173507F4F4E816F9062CF4F701E15588
+:100EC000FE4F808101C08FEF1F928F93BF92AF9230
+:100ED0001F930F930E94EE1BB801CE0109960E944A
+:100EE000E210D3940F900F900F900F900F900F90EF
+:100EF000D3CFE816F9062CF4F701E155FE4F8081B7
+:100F000001C08FEF82958F701F928F938CE791E0D5
+:100F10009F938F931F930F930E94EE1BB801CE01F6
+:100F200009960E94E2108091E2019091E30187709E
+:100F3000992701970F900F900F900F900F900F909F
+:100F4000049710F18091E70190E0E816F9062CF47F
+:100F5000F701E155FE4F808101C08FEF8F701F9226
+:100F60008F938CE791E09F938F931F930F930E9431
+:100F7000EE1BB801CE0109960E94E2100F900F906F
+:100F80000F900F900F900F9061E871E08BED93E060
+:100F90000E94E2106BE38BED93E00E94CF1060E2C1
+:100FA00070E08BED93E00E944A108BED93E0009788
+:100FB00009F472C064E871E00E94E2108091E801D7
+:100FC0009091E901E091EA01EE0FFF0BE80FF91FA4
+:100FD000EF5DFE4F608171818BED93E00E949F1069
+:100FE0006BE38BED93E00E94CF1068E871E08BED2E
+:100FF00093E00E94E2108091E8019091E901E09174
+:10100000EB01EE0FFF0BE80FF91FEF5DFE4F608164
+:1010100071818BED93E00E949F106BE38BED93E069
+:101020000E94CF106CE871E08BED93E00E94E2101B
+:101030008091E8019091E901E091EC01EE0FFF0B46
+:10104000E80FF91FEF5DFE4F608171818BED93E03A
+:101050000E949F106BE38BED93E00E94CF1060E93C
+:1010600071E08BED93E00E94E2108091E801909195
+:10107000E901E091ED01EE0FFF0BE80FF91FEF5DC5
+:10108000FE4F608171818BED93E00E949F106BE3B6
+:101090008BED93E00E94CF106BE381EE93E00E9412
+:1010A000CF1067E070E081EE93E00E944A1081EE7D
+:1010B00093E0009789F064E971E00E94E21060918A
+:1010C000EE017091EF0181EE93E00E949F106BE3BF
+:1010D00081EE93E00E94CF1065E871E081EE93E02D
+:1010E0000E94E2104AE0B8018091E2019091E30190
+:1010F0000E942920F80101900020E9F73197AF0103
+:10110000401B510BB80181EE93E00E9471106BE31C
+:1011100081EE93E00E94CF1063E081EE93E00E94A5
+:10112000CF106AE081EE93E00E94CF108BED93E048
+:101130000E94B60ECE0109960E94B60E81EE93E093
+:101140000E94B60E1092E70381E08093B403CE01B3
+:1011500009960E943D118EC0181419040CF0AAC102
+:10116000FD2CEF8DF8A1E20DF31D8481A989BA89C8
+:10117000A80FB11DBA8BA98BBAA1BF5FBAA3ED8925
+:10118000FE89E80DF91DFE8BED8B1F3F09F45CCC49
+:101190000F3F09F459CC5FEFE51609F455CCF5166D
+:1011A00009F452CC89889A8897FE03C0919481945F
+:1011B0009108092C000CAA08BB08AEA5BFA56C912C
+:1011C00070E080E090E00E945A202AE037ED43E290
+:1011D0005DE30E94B9202B013C0120E030E0A90131
+:1011E0000E94CF1A20E030E040E05FE387FDFEC0C0
+:1011F000C301B2010E94BB190E94991A68157905B2
+:101200008A059B050CF4E5CBB9A1EAA1BE13E1CB9D
+:101210001E1509F4DECB0F1509F4DBCB101709F40A
+:10122000D8CBEF1409F4D5CB1F1509F4D2CBE016B7
+:1012300009F4CFCBF092ED01E092EB010093EC01C9
+:101240001093EA018D899E8966E070E00E9458192A
+:101250007093EF016093EE013F89311127CB8091AC
+:10126000E703882339F08091B503882319F081E0E2
+:101270008093B4038091A802882309F4A8C08091C8
+:10128000BA039091BB03019709F0A1C08091B40308
+:1012900081119DC08091B103883208F498C067E93C
+:1012A00071E08BED93E00E94E2106BE38BED93E035
+:1012B0000E94CF1010E08091D803181788F5212FD5
+:1012C00030E0C901880F991FAC0148535C4F7A0187
+:1012D000DA018D919C91892B09F1F901E955FD4FB6
+:1012E00084818823D9F06AE971E08BED93E00E9454
+:1012F000E210812F0E94C10F65E971E08BED93E050
+:101300000E94E210F701608171818BED93E00E94F1
+:101310009F106BE38BED93E00E94CF101F5FCBCF4C
+:101320006AE671E08BED93E00E94E2106BE381EEE0
+:1013300093E00E94CF106DE671E081EE93E00E9491
+:10134000E2106091A702062E000C770B81EE93E06D
+:101350000E949F106BE381EE93E00E94CF1080917A
+:10136000B603882359F065E771E081EE93E00E94AF
+:10137000E2106BE381EE93E00E94CF1063E081EE18
+:1013800093E00E94CF106AE081EE93E00E94CF10BC
+:101390000091B10301508BED93E00E94B60E10E076
+:1013A000E12FF0E0E955FD4F648570E080E090E0CA
+:1013B0004AE00E94E70E1F5F011790F781EE93E06D
+:1013C0000E94B60E1092B50381E08093B403809121
+:1013D000B5038111C6C087EA92E00E94BD0DC1C06D
+:1013E000181419040CF07CC0ED2CBBCEC301B20163
+:1013F0000E94BA1901CFE92C9C24BFCCEE2009F43D
+:10140000C0CC8091E8019091E901FC01EA0DFB1D3F
+:101410002485820F911D820F911DFC01EF5DFE4F0F
+:1014200040815181E091E1018091E701E817D8F511
+:101430008091E6012091E2013091E301873051F47F
+:101440002115310539F0EF5FE093E101F0E0E1555E
+:10145000FE4F1082E091E101F0E0A82FB0E0E155ED
+:10146000FE4F61E070E01416150614F060E070E0C5
+:10147000082E01C0660F0A94EAF79081692B6083F9
+:101480002F5F3F4F3093E3012093E2019091E401FD
+:10149000A91BB109B7FD04C0891B8093E60103C0F5
+:1014A000E7E0E093E601E12C6CCCEE24E394992490
+:1014B000939463CC0D2DEF8DF8A1E20DF31D848183
+:1014C00029893A89281B31093A8B298B39A13F5F39
+:1014D00039A34D895E89481959095E8B4D8B55CECC
+:1014E0001D2DE9CFF801E55FFE4FF082C092F101BA
+:1014F000C092F20131977080022E000C330B0A2E3D
+:10150000000CBB0B0A2C000CBB08DF2C212C312C4F
+:1015100001CB82179307D1F409CBC501B4010E9416
+:10152000BA1965CB29E23CE54FE85DEBC501B40192
+:101530000E94CF1A87FF90CB51E025223324C101AE
+:10154000A1E08A27B82FB1709B2ECCCB8A179B07BE
+:1015500021F08A159B0509F0C5CB812C61E070E074
+:10156000E8CAAF960FB6F894DEBF0FBECDBFDF91CD
+:10157000CF911F910F91FF90EF90DF90CF90BF9090
+:10158000AF909F908F907F906F905F904F903F9023
+:101590002F900895FC01918D828D981761F0828DB6
+:1015A000DF01A80FB11D5D968C91928D9F5F9F7397
+:1015B000928F90E008958FEF9FEF0895FC01918D39
+:1015C000828D981731F0828DE80FF11D858D90E0A6
+:1015D00008958FEF9FEF0895FC01918D228D892F43
+:1015E00090E0805C9F4F821B91098F73992708952B
+:1015F00080E092E00E94EC0A21E0892B09F420E0CF
+:10160000822F0895FC01848DDF01A80FB11DA35A1C
+:10161000BF4F2C91848D90E001968F739927848F12
+:10162000A689B7892C93A089B1898C9180648C9309
+:10163000938D848D981306C00288F389E02D8081F4
+:101640008F7D80830895EF92FF920F931F93CF9326
+:10165000DF93EC0181E0888F9B8D8C8D981305C002
+:10166000E889F989808185FD24C0F62E0B8D10E074
+:101670000F5F1F4F0F731127E02E8C8DE8120CC0E7
+:101680000FB607FCFACFE889F989808185FFF5CF8D
+:10169000CE010E94020BF1CF8B8DFE01E80FF11DF0
+:1016A000E35AFF4FF0820B8FEA89FB8980818062C9
+:1016B00007C0EE89FF896083E889F98980818064A9
+:1016C000808381E090E0DF91CF911F910F91FF9097
+:1016D000EF900895CF93DF93EC01888D8823C9F0B4
+:1016E000EA89FB89808185FD05C0A889B9898C912B
+:1016F00086FD0FC00FB607FCF5CF808185FFF2CFC6
+:10170000A889B9898C9185FFEDCFCE010E94020B8B
+:10171000E7CFDF91CF910895089508952091A20118
+:10172000E6E9F0E09491E0EEF0E08491ECECF0E09A
+:10173000E491EE2309F43BC0992339F1933091F001
+:1017400038F49130A9F0923001F594B59F7D12C024
+:10175000973091F09830A1F09430B9F490918000D6
+:101760009F7D03C0909180009F77909380000DC073
+:1017700094B59F7794BD09C09091B0009F7703C046
+:101780009091B0009F7D9093B000F0E0EE0FFF1FAE
+:10179000E555FF4FA591B4919FB7F894EC912111B5
+:1017A00003C080958E2301C08E2B8C939FBF109217
+:1017B000A2010895CF93C1E080E092E00E94EC0A7C
+:1017C000892BB9F080E092E00E94CA0A8A3041F089
+:1017D0001CF4882329F007C08D3011F0833219F4EE
+:1017E000C093A301E9CF682F81EA92E00E94CF1055
+:1017F000E3CFCF9108950E94F80A81110C94DA0B7F
+:1018000008951F920F920FB60F9211242F933F93BA
+:101810004F935F936F937F938F939F93AF93BF93F8
+:10182000EF93FF9380E092E00E94020BFF91EF9113
+:10183000BF91AF919F918F917F916F915F914F91E8
+:101840003F912F910F900FBE0F901F9018951F92F0
+:101850000F920FB60F9211242F938F939F93EF93B4
+:10186000FF93E0911002F09111028081E091160245
+:10187000F091170282FD12C09081809119028F5F52
+:101880008F7320911A02821751F0E0911902F0E053
+:10189000E050FE4F958F8093190201C08081FF9127
+:1018A000EF919F918F912F910F900FBE0F901F90EE
+:1018B0001895CF93DF9390E0FC01ED52FF4F2491F8
+:1018C000FC01E154FF4F8491882361F190E0880F7F
+:1018D000991FFC01EB54FF4FC591D491FC01E555D4
+:1018E000FF4FA591B491611109C09FB7F894888109
+:1018F000209582238883EC912E230BC0623061F403
+:101900009FB7F8943881822F809583238883EC9148
+:101910002E2B2C939FBF06C08FB7F894E8812E2BF7
+:1019200028838FBFDF91CF9108953FB7F8948091BE
+:10193000FC019091FD01A091FE01B091FF0126B53F
+:10194000A89B05C02F3F19F00196A11DB11D3FBFF7
+:10195000BA2FA92F982F8827820F911DA11DB11D85
+:10196000BC01CD0142E0660F771F881F991F4A9581
+:10197000D1F70895CF92DF92EF92FF920F931F93CA
+:101980000E94950C00919D0210919E0220919F0251
+:101990003091A0026B017C01C01AD10AE20AF30A5D
+:1019A0009701860160939D0270939E0280939F022F
+:1019B0009093A0020A3511052105310578F181E0E7
+:1019C000C8168DE7D806E104F10410F4960102C0B0
+:1019D00021E03DE74A9B03C0319521953109809173
+:1019E000E9038233D8F48091E9038F5F8093E903A0
+:1019F0008091EA036091E8030E9438199093EA030A
+:101A0000E091EA03F0E0EE0FFF1FE451FC4F318359
+:101A100020838091EA038F5F8093EA031F910F91E7
+:101A2000FF90EF90DF90CF9008951F920F920FB626
+:101A30000F9211242F933F938F939F93AF93BF9354
+:101A400080919E0190919F01A091A001B091A10170
+:101A50003091FB0123E0230F2D3720F40196A11DC7
+:101A6000B11D05C026E8230F0296A11DB11D2093CC
+:101A7000FB0180939E0190939F01A093A001B093DE
+:101A8000A1018091FC019091FD01A091FE01B09116
+:101A9000FF010196A11DB11D8093FC019093FD01F2
+:101AA000A093FE01B093FF01BF91AF919F918F91E1
+:101AB0003F912F910F900FBE0F901F9018951F927E
+:101AC0000F920FB60F9211242F933F934F935F9372
+:101AD0006F937F938F939F93AF93BF93EF93FF93F6
+:101AE000E0910501F09106010995FF91EF91BF91F9
+:101AF000AF919F918F917F916F915F914F913F91A6
+:101B00002F910F900FBE0F901F9018951F920F925C
+:101B10000FB60F9211242F933F934F935F936F93C0
+:101B20007F938F939F93AF93BF93EF93FF93E09136
+:101B30000301F09104010995FF91EF91BF91AF91DD
+:101B40009F918F917F916F915F914F913F912F91D5
+:101B50000F900FBE0F901F901895FC0180AD2E2F97
+:101B6000DF019A2F921B981710F41D92FACF12AA38
+:101B700014AA13AA87E087AB0895CF93DF93FC01E3
+:101B8000E65FFE4F1082DC01AF5CBE4F1C92B89640
+:101B90001082B0971082319611821082B0962FEF8A
+:101BA0002083FC012083EF5DFE4FEC01249611920F
+:101BB00011921992EA17FB07D1F7FC01E35FFE4F80
+:101BC0001082339626E930E0318320833D964DEC38
+:101BD0005CEC6CE47EE34083518362837383729791
+:101BE00010823396108231961082F1961082F4970B
+:101BF0001082DF91CF910895FC01E65FFE4F408196
+:101C0000A42FB0E0262F30E02A173B075CF4461BD8
+:101C1000408350E0B901645F7F4F680F791F0C96D5
+:101C20000C94AC1B08951F920F920FB60F921124C3
+:101C30002F933F934F935F936F937F938F939F93D4
+:101C4000AF93BF93EF93FF93E0919C01F0919D01BF
+:101C50000995FF91EF91BF91AF919F918F917F91E6
+:101C60006F915F914F913F912F910F900FBE0F9009
+:101C70001F901895CF93DF9387EA90E00E94640F3E
+:101C8000C7EAD2E08B8190E00E94850F82EA90E063
+:101C90000E94640F898190E00E94850F8DE990E099
+:101CA0000E94640F8A8190E0DF91CF910C94330FF2
+:101CB0002B9A2091000130910101482F429FC001D1
+:101CC000439F900D11248230910538F0880F991FA1
+:101CD000880F991F05970197F1F72B982091000124
+:101CE00030910101629FC001639F900D11248230E9
+:101CF000910538F0880F991F880F991F0597019754
+:101D0000F1F70895E8988CE89BE0909304018093A4
+:101D1000030108958AEB9CE09093040180930301F2
+:101D2000E9E6F0E080818C7F81608083E89A089505
+:101D3000CF93DF93EC01FB01248135810E94571181
+:101D4000CE01DF91CF910895009769F0FC010190D9
+:101D50000020E9F73197AF01481B590BBC0180E027
+:101D600092E00C94031080E090E00895FC0144811F
+:101D700055816081718180E092E00C940310CF93D3
+:101D8000DF930E94B60EEC0184E691E00E94A40E5F
+:101D90008C0F9D1FDF91CF910895CF92DF92EF922C
+:101DA000FF920E94950C6B017C010E94950CDC0156
+:101DB000CB018C199D09AE09BF09883E9340A1054E
+:101DC000B10598F3FF90EF90DF90CF9008958F9238
+:101DD0009F92AF92BF920F931F93CF93DF93CDB794
+:101DE000DEB7A1970FB6F894DEBF0FBECDBF19A224
+:101DF000423008F44AE08E010F5D1F4F842E912C73
+:101E0000A12CB12CA50194010E946C19E62FB901F7
+:101E1000CA0101501109EA3014F4E05D01C0E95C27
+:101E2000D801EC93232B242B252B61F7C8010E94AA
+:101E3000A40EA1960FB6F894DEBF0FBECDBFDF9102
+:101E4000CF911F910F91BF90AF909F908F90089569
+:101E5000E0910002F09101020190F081E02D682FE5
+:101E600080E092E00994CF92DF92EF92FF92CF93BD
+:101E7000DF936C01990FEE08FF08F7FE12C08DE2A8
+:101E80000E94280FEC0166277727CB016C197D098A
+:101E90008E099F094AE00E94E70E7C01EC0EFD1EB0
+:101EA00006C04AE0C701B6010E94E70E7C0184E645
+:101EB00091E00E94A40E8E0D9F1DDF91CF91FF90A7
+:101EC000EF90DF90CF9008950F931F93CF93DF9300
+:101ED0008C01C0E0D0E0F801EC0FFD1F6491662397
+:101EE00071F0E0910002F09101020190F081E02D8B
+:101EF00080E092E00995892B11F02196ECCFCE017C
+:101F0000DF91CF911F910F910895CF92DF92EF92C1
+:101F1000FF92CF93DF936C01990FEE08FF08F7FE55
+:101F200017C08DE20E94280FEC0166277727CB01AE
+:101F30006C197D098E099F094AE00E94E70E8C0FFB
+:101F40009D1FDF91CF91FF90EF90DF90CF9008958C
+:101F50004AE0C701B601DF91CF91FF90EF90DF908B
+:101F6000CF900C94E70ECF93DF930E94A40EEC0168
+:101F700084E691E00E94A40E8C0F9D1FDF91CF910B
+:101F800008950F931F93CF93DF9300D000D0CDB768
+:101F9000DEB74AE08E010F5F1F4FB80190E00E944C
+:101FA0000120F80101900020E9F73197AF01401BB3
+:101FB000510BB8018BED93E00E9471100F900F90C0
+:101FC0000F900F90DF91CF911F910F910895EBEA41
+:101FD000F2E098E09E0F11929E13FDCF611102C0B6
+:101FE0006091B103861768F4E82FF0E0E955FD4FE2
+:101FF000E485F0E0E955FD4F94819F5F94838F5F06
+:10200000F1CF08950895CF92DF92EF92FF920F9350
+:102010001F93CF93DF936C017A018B01C0E0D0E076
+:10202000CE15DF0589F0D8016D918D01D601ED91B6
+:10203000FC910190F081E02DC6010995892B11F4E6
+:102040007E0102C02196ECCFC701DF91CF911F9195
+:102050000F91FF90EF90DF90CF900895FC01808169
+:102060009181009711F00C94DA1F60E070E0CB01D1
+:102070000895FC01248135816217730748F480813B
+:102080009181009729F0FC01E60FF71F80810895E8
+:1020900080E008950F931F93CF93DF93EC01888125
+:1020A0009981009729F02A813B812617370788F408
+:1020B0008B016F5F7F4F0E94D41A009761F0998364
+:1020C00088831B830A832C813D81232B11F4FC011F
+:1020D000108281E001C080E0DF91CF911F910F91CC
+:1020E0000895EF92FF920F931F93CF93DF93FC011C
+:1020F000248135816115710511F480E019C0411505
+:102100005105A9F07B01EC018A01020F131FB801F0
+:102110000E944A10882389F3288139818C819D810E
+:10212000B701820F931F0E94BE1B1D830C8381E0A9
+:10213000DF91CF911F910F91FF90EF900895EF9253
+:10214000FF920F931F93CF93DF93CDB7DEB72897FE
+:102150000FB6F894DEBF0FBECDBF7C01CB014AE0C5
+:102160008E010F5F1F4FB8010E940120F8010190FE
+:102170000020E9F73197AF01401B510BB801C701AF
+:102180000E94711028960FB6F894DEBF0FBECDBF27
+:10219000DF91CF911F910F91FF90EF900895CF9312
+:1021A000DF9300D0CDB7DEB769831A8241E050E0FB
+:1021B000BE016F5F7F4F0E9471100F900F90DF91F3
+:1021C000CF9108956115710551F0FB010190002038
+:1021D000E9F73197AF01461B570B0C94711080E063
+:1021E0000895EF92FF920F931F93CF93DF93EC012B
+:1021F0007B018A01BA010E944A102881398181112C
+:102200000DC02115310519F0C9010E94241F198242
+:1022100018821D821C821B821A8206C01D830C83B9
+:10222000B701C9010E94BE1BCE01DF91CF911F9162
+:102230000F91FF90EF900895CF93DF93EC0161151C
+:10224000710559F0FB0101900020E9F73197AF01CA
+:10225000461B570B0E94F1100CC088819981009792
+:1022600011F00E94241F198218821D821C821B8279
+:102270001A82CE01DF91CF910895FC018081918176
+:102280000C94241FFC011182108213821282158289
+:1022900014826115710551F0FB0101900020E9F7EE
+:1022A0003197AF01461B570B0C94F1100895BF9264
+:1022B000CF92DF92EF92FF920F931F93CF93DF9312
+:1022C0007C016B018A01E9012417350720F4812F75
+:1022D0008901C42FD82F66E671E0C7010E94421120
+:1022E000D60114968D919C91159708171907D0F473
+:1022F0008C179D0708F4EC01D601ED91FC91119724
+:10230000EC0FFD1FB08010824D915C91BA01600FFF
+:10231000711FC7010E941C11D601ED91FC91EC0FB9
+:10232000FD1FB082C701DF91CF911F910F91FF90E8
+:10233000EF90DF90CF90BF900895CF93DF93CDB70C
+:10234000DEB7C757D1090FB6F894DEBF0FBECDBFB9
+:10235000789484B5826084BD84B5816084BD85B580
+:10236000826085BD85B5816085BD80916E0081608C
+:1023700080936E0010928100809181008260809332
+:102380008100809181008160809381008091800034
+:102390008160809380008091B10084608093B1005F
+:1023A0008091B00081608093B00080917A00846059
+:1023B00080937A0080917A00826080937A00809185
+:1023C0007A00816080937A0080917A00806880939F
+:1023D0007A001092C100E0911002F091110212E017
+:1023E0001083E0911002F09111021082E0910C0232
+:1023F000F0910D021082E0910E02F0910F0200E1C7
+:10240000008310921802E0911402F091150286E008
+:102410008083E0911202F0911302808180618083B9
+:10242000E0911202F0911302808188608083E09134
+:102430001202F0911302808180688083E091120281
+:10244000F091130280818F7D808360E082E00E94A2
+:10245000590C61E08BE00E94590C61E08DE00E9414
+:10246000590C00938100109280001093A60188E11E
+:1024700099E79093A5018093A4019093870080939E
+:10248000860082E1809381008EE89BE090939D011D
+:1024900080939C0181E080936F0080E090E00E9437
+:1024A00077218B3099F481E090E00E947721982F7A
+:1024B00091709093AA0281FB992790F99093A802BA
+:1024C00082FB882780F98093A9020AC06BE080E034
+:1024D00090E00E947F2167E081E090E00E947F21F0
+:1024E0000E948A0E68E270E081EA92E00E944A103F
+:1024F0009E012F5F3F4F19018091A301882309F4AA
+:1025000090C41092A30160E070E081EA92E00E9422
+:102510003910803539F48DE191E00E94B30F0E94AB
+:10252000CD0E72C48F3309F045C00E94280F8CE78E
+:1025300090E00E94640F86E50E94280F80E20E94CE
+:10254000280F89E60E94280F80E20E94280F82E56A
+:102550000E94280F80E20E94280F84E70E94280F23
+:1025600080E20E94280F88E50E94280F80E20E94E6
+:10257000280F86E40E94280F80E20E94280F83E53E
+:102580000E94280F80E20E94280F80E50E94280FF9
+:1025900080E20E94280F83E40E94280F80E20E94BC
+:1025A000280F87E40E94280F80E20E94280F86E609
+:1025B00091E004C0863529F480E291E00E94B30FD7
+:1025C00023C4823579F4809150049091510400978E
+:1025D00011F484E594E0D101A81BB90BCD010E9450
+:1025E000330F12C4893609F02DC161E070E081EA31
+:1025F00092E00E943910843709F4A5C0823781F532
+:1026000042E050E061EA72E0C1010E94980E8D81C3
+:102610009E81009721F46C961FAE6C9716C00297AE
+:1026200018F002E010E002C001E010E069817A8158
+:10263000A801CE01855A9F4F0E94C51BEBE5F0E033
+:10264000EC0FFD1FE00FF11F1082C1010E943D1130
+:10265000CE01855A9F4F0E94BC1F8093020173C018
+:10266000833709F05DC02B9A42E050E061EA72E0E6
+:10267000CE01855A9F4F0E94980EA1960EAD1FADB8
+:10268000A1970115110511F4198211C00732110526
+:1026900010F007E210E06D966EAD7FAD6D97A8016A
+:1026A000C1010E94C51BF101E00FF11F1082CE0194
+:1026B000855A9F4F0E943D110E94820E00E010E05B
+:1026C0008091020190E00817190734F56FE181E06D
+:1026D0000E94580E7101F70181917F018823C9F092
+:1026E000813371F0863449F08033A9F763E081E0EB
+:1026F0000E94580E63E081E009C063E081E002C0FF
+:1027000061E083E00E94580E61E083E00E94580E71
+:10271000E2CF0F5F1F4FD4CF0E948A0E2B9813C0B9
+:102720008336B1F442E050E061EA72E0C1010E94F8
+:10273000980EC1010E942E10709301016093000158
+:10274000C1010E943D1181EA92E00E94BF0E5CC36C
+:10275000803709F059C366E671E0CE018F599F4F6B
+:102760000E94421164E170E0CE018F599F4F0E9498
+:102770004A1067E571E0CE018F599F4F0E941C11EE
+:10278000809102016D961FAE1EAE6D976F961FAEC3
+:102790001EAE6F97A1961FAE1EAEA1974AE0B10183
+:1027A00090E00E942920B101CE01855A9F4F0E94DE
+:1027B0001C11A1964EAD5FADA1976D966EAD7FAD2C
+:1027C0006D97CE018F599F4F0E947110CE01855A8F
+:1027D0009F4F0E943D1160E671E0CE018F599F4FDF
+:1027E0000E94E21080910001909101016D961FAE50
+:1027F0001EAE6D976F961FAE1EAE6F97A1961FAE61
+:102800001EAEA1974AE0B1010E940120B101CE01A4
+:10281000855A9F4F0E941C11A1964EAD5FADA197A6
+:102820006D966EAD7FAD6D97CE018F599F4F0E9413
+:102830007110CE01855A9F4F0E943D11CE018F59D4
+:102840009F4F3BC2833509F040C266E671E0CE017E
+:102850008F599F4F0E9442116EE170E0CE018F5957
+:102860009F4F0E944A100E94820EE12CF12CFFEF34
+:10287000A896FFAFA89721E0AE962FAFAE9731E0B4
+:10288000E0963FAFE09732E1D32ECC24C39449E0E9
+:10289000B42E52E0A52E62E671E0CE01855A9F4F1C
+:1028A0000E9442118091A5029091A602E816F906B5
+:1028B00098F48090A1029090A2026D966EAD7FADCB
+:1028C0006D97C4018E0D9F1D0E94D41B009721F0AF
+:1028D0008C010819190902C00FEF1FEFCE01855AAC
+:1028E0009F4F0E943D110F3F2FEF120721F4AF962B
+:1028F0001FAEAF970EC13FEFE316F306C1F3980189
+:10290000A70161EA72E0CE01855A9F4F0E945711DC
+:10291000A3968EAD9FADA3970097A9F06D966EAD6F
+:102920007FAD6D976115710561F0A5964EAD5FADF8
+:10293000A597A1962EAD3FADA1974217530708F07A
+:10294000ECC30E94241F6D968EAD9FAD6D97A3962C
+:102950009FAF8EAFA3976F968EAD9FAD6F97A596E5
+:102960009FAF8EAFA597A1968EAD9FADA197A7966D
+:102970009FAF8EAFA7976D961FAE1EAE6D976F96E9
+:102980001FAE1EAE6F97A1961FAE1EAEA197CE01D1
+:10299000855A9F4F0E943D1178018FEFE81AF80A7F
+:1029A00060E070E0CE018F599F4F0E94391083354F
+:1029B00059F561E070E0CE018F599F4F0E943910A8
+:1029C000833409F462C08D3471F4A8968FADA89752
+:1029D0008F5FA8968FAFA897F101D89EE00DF11DEB
+:1029E0001124C28258CF823509F055CFA8962FAD59
+:1029F000A8972F5FA8962FAFA897F101D29EE00D60
+:102A0000F11D1124A28241C0803509F024C362E087
+:102A100070E0CE018F599F4F0E9439108D3309F01D
+:102A20003ACF22E030E041E050E0BE016F597F4FE5
+:102A3000CE01855A9F4F0E945711CE01855A9F4F54
+:102A40000E942E10162FCE01855A9F4F0E943D11D5
+:102A500043E050E0BE016F597F4FCE01855A9F4F32
+:102A60000E94980ECE01855A9F4F0E942E10A89664
+:102A70006FACA897B69CF0011124E10FF11D3396BD
+:102A8000EE0FFF1FE20DF31D40C3AE961FAEAE97D3
+:102A900002CFA9967FACA997672C712CAB967FAE1D
+:102AA0006EAEAB97A9963FADA99722E1329F700118
+:102AB0001124F101EE0DFF1D82818230B9F182E116
+:102AC000AB966EAC7FACAB97869DF001879DF00D09
+:102AD0001124E20DF31D8281813009F46AC02B9824
+:102AE000A9963FADA9973F5FA9963FAFA997A89632
+:102AF0006FACA897631668F6AE967FACAE97711070
+:102B00000E94CD0EAF962FADAF972F5FAF962FAF30
+:102B1000AF97AF963FADAF97E0966FACE0973615A5
+:102B200009F4C7C0A9961FAEA997B3CF26E0E20E5D
+:102B3000F11CE20CF31C4480558003810E94950C2B
+:102B40004B015C0110E04016510658F1B80181EAD2
+:102B500092E00E9439108053F701E80FF11DE80F51
+:102B6000F11D60807180630177FE04C0CC24DD24F8
+:102B7000C618D7080E94950C681579058A059B052B
+:102B8000C8F377FE02C02B9801C02B9AC601DD0C5A
+:102B9000AA0BBB0B880E991EAA1EBB1E0F5F1F4FF0
+:102BA000D2CF0E94950C681579058A059B05C8F35C
+:102BB00086CFE080F1807480E1967FAEE19713814B
+:102BC0000E94950C4B015C01C701FF0CAA0BBB0BCB
+:102BD000AD968CAF9DAFAEAFBFAFAD97880F991FCD
+:102BE000AA1FBB1FE5968CAF9DAFAEAFBFAFE597F9
+:102BF000E1966FACE197611608F471CF612F70E038
+:102C000081EA92E00E9439108A3314F097E301C000
+:102C100090E3891B04E0C02ED12C08E0482F880FD8
+:102C2000550B2401350120E0E02EF12CE422F522A1
+:102C3000E114F10451F12B98AD968CAD9DADAEAD84
+:102C4000BFADAD97480E591E6A1E7B1EE6962FAF8C
+:102C5000E697E7964FAFE797E8965FAFE8970E9451
+:102C6000950CE6962FADE697E7964FADE797E89679
+:102C70005FADE897641575058605970538F3213033
+:102C800031F021E0E114F104B1F22B9AD5CFE596B1
+:102C90008CAD9DADAEADBFADE597880E991EAA1E59
+:102CA000BB1E069591E0C91AD10809F0BACF1F5F83
+:102CB0009FCF0E948A0E81EA92E00E94BF0ECE0151
+:102CC0008F599F4F0E943D119FC08437C1F58FB728
+:102CD000F894C0909E01D0909F01E090A001F090E8
+:102CE000A1018FBFC701B60128EE33E040E050E0FC
+:102CF0000E946C19CA01B9010091A9011091AA01A1
+:102D00002091AB013091AC01C016D106E206F3066A
+:102D100050F42091A7013091A8012F5F3F4F3093CD
+:102D2000A8012093A701C092A901D092AA01E09224
+:102D3000AB01F092AC014AE00E94E70E61C0883519
+:102D4000B1F461E070E081EA92E00E9439108135CF
+:102D500011F40E94820E61E070E081EA92E00E942C
+:102D60003910853409F050C00E948A0E4DC0863457
+:102D700009F44AC08334F1F561E070E081EA92E041
+:102D80000E943910182F873419F40E943A0E3CC063
+:102D900062E070E081EA92E00E943910833539F0F8
+:102DA000853541F0833449F4E9EAF2E008C0EAEA03
+:102DB000F2E005C0E8EAF2E002C0E0E0F0E015343D
+:102DC00019F481E0808303C01434F1F410828091FF
+:102DD000A802682F660F9091A90224E0929FC0017B
+:102DE0001124862B6091AA02682B81E090E00E945A
+:102DF0007F210AC0873449F288E690E00E94640F80
+:102E000084E691E00E94A40E8091A301811106C086
+:102E100066E671E081EA92E00E941C1181E08093F5
+:102E2000A201AA24A394B3E0CB2ED12C8091E90374
+:102E3000882309F40DC18091E90381508093E9034F
+:102E40008091EB036091E8030E9438199093EB03A3
+:102E5000E091EB0381E08E0F8093EB03F0E0EE0F47
+:102E6000FF1FE451FC4F808191819093AE018093CC
+:102E7000AD011092B403E091B103EE2369F0F0E0EC
+:102E8000E955FD4F838590E0880F991F88539C4F2B
+:102E90009093C3038093C2032091AD013091AE01A2
+:102EA000E091C003F091C103318320838091B1038D
+:102EB000882369F0E091C203F091C30340815181FE
+:102EC00042275327452F441F4427441F01C041E098
+:102ED00051E0211533480CF450E091E08E3F09F4A5
+:102EE00090E0952311F0411109C091E08E3F09F067
+:102EF00090E09093B6030E94A20006C0883221F4AD
+:102F0000D092BB03C092BA03E090C003F090C1031B
+:102F1000D7010D911C91B80117FF04C066277727D0
+:102F2000601B710B072E000C880B990B0E945A2016
+:102F30002DEC3CEC4CE45EE30E94B9200E94A01A08
+:102F4000AB017093B8036093B7036091D803E8ECCA
+:102F5000F3E0B12CB616D9F0819191919C01202714
+:102F60003127330F220B322F232B79F4009769F08E
+:102F70003801681A790AC30177FE03C091958195DB
+:102F80009109481759070CF0D3C0B394E3CF6830C8
+:102F900041F560E080E00E94E70FE091D803F0E0A7
+:102FA000E955FD4F8481833010F00E94A2006091AA
+:102FB000B10370E0615071098091D90316161706AC
+:102FC00084F4FB01E955FD4F9485981307C06F5FAA
+:102FD0007F4F87EA92E00E94FC0D03C061507109A7
+:102FE000EDCFB090D903E091C003F091C10380818F
+:102FF0009181EB2DF0E0EE0FFF1FE853FC4F918322
+:10300000808381E08B0D883019F08093D90306C04E
+:103010001092D9038093D8031092E7038091D903CB
+:103020009091D803981710F48093D8038091B1033E
+:10303000E82FF0E0E955FD4FB4868F5F8093B10330
+:103040008091B403882309F4F1CEA092A201EECEC0
+:103050000E94FB0B51CA8235E9F461E070E0CE01B9
+:103060008F599F4F0E9439108D3309F014CC42E0E4
+:1030700050E0BE016F597F4FCE01855A9F4F0E948D
+:10308000980ECE01855A9F4F0E942E10E0966FAF8A
+:10309000E0973DC08434A9F4F101A8967FACA897CD
+:1030A000D79CE00DF11D1124A6968FADA6978C2C10
+:1030B000881A882D8E0D838301501109158304838E
+:1030C000EACB833409F0E7CB61E070E0CE018F59A1
+:1030D0009F4F0E9439108D3309F0DDCB42E050E064
+:1030E000BE016F597F4FCE01855A9F4F0E94980EA7
+:1030F000CE01855A9F4F0E942E10F101A8967FACF9
+:10310000A897D79CE00DF11D112471836083CE0137
+:10311000855A9F4F0E943D11BECB0E94BE1BA196B7
+:103120008EAD9FADA197A7969FAF8EAFA7972BCCE3
+:10313000B7FC2DCF0B2D000F110B08531C4FD801DE
+:103140006D917C91AB01770F660B770BF701808156
+:103150009181092E000CAA0BBB0B3A014B01680EA2
+:10316000791E8A1E9B1EC401B30122E030E040E0BC
+:1031700050E00E948E19D8012D933C9357CF81EADD
+:1031800092E00E943D1181EE93E00E943D118BED93
+:1031900093E00C943D110F931F93CF93DF93E0E0E6
+:1031A000F2E01382128288EE93E0A0E0B0E0848324
+:1031B0009583A683B78381E191E09183808385EC39
+:1031C00090E09587848784EC90E09787868780ECF1
+:1031D00090E0918B808B81EC90E0938B828B82ECE2
+:1031E00090E0958B848B86EC90E0978B868B118E8C
+:1031F000128E138E148EE8EEF3E082E38083118248
+:1032000013821282CCEBD3E0D093C103C093C003EE
+:103210000EEB13E01093C3030093C20366E671E064
+:103220008BED93E00E94421166E671E081EE93E03F
+:103230000E944211F801118210821982188287EAD5
+:1032400092E00E94BD0D66E671E081EA92E00E9484
+:1032500042110E94950C60939D0270939E02809390
+:103260009F029093A002DF91CF911F910F9108953B
+:10327000991B79E004C0991F961708F0961B881FC8
+:103280007A95C9F780950895AA1BBB1B51E107C029
+:10329000AA1FBB1FA617B70710F0A61BB70B881FE6
+:1032A000991F5A95A9F780959095BC01CD01089575
+:1032B00097FB072E16F4009407D077FD09D00E94E3
+:1032C000441907FC05D03EF4909581959F4F0895D1
+:1032D000709561957F4F0895A1E21A2EAA1BBB1B22
+:1032E000FD010DC0AA1FBB1FEE1FFF1FA217B307D2
+:1032F000E407F50720F0A21BB30BE40BF50B661FE8
+:10330000771F881F991F1A9469F7609570958095AB
+:1033100090959B01AC01BD01CF010895052E97FB4F
+:103320001EF400940E94A51957FD07D00E946C1945
+:1033300007FC03D04EF40C94A51950954095309598
+:1033400021953F4F4F4F5F4F089590958095709511
+:1033500061957F4F8F4F9F4F08950E94C421B7FF03
+:103360000895821B930B0895EE0FFF1F0590F491B3
+:10337000E02D09945058BB27AA270E94D2190C941B
+:103380003D210E942F2138F00E94362120F039F48F
+:103390009F3F19F426F40C942C210EF4E095E7FBE2
+:1033A0000C942621E92F0E944E2158F3BA17620788
+:1033B00073078407950720F079F4A6F50C94702123
+:1033C0000EF4E0950B2EBA2FA02D0B01B901900140
+:1033D0000C01CA01A0011124FF27591B99F0593F84
+:1033E00050F4503E68F11A16F040A22F232F342FCC
+:1033F0004427585FF3CF469537952795A795F0401A
+:103400005395C9F77EF41F16BA0B620B730B840B2E
+:10341000BAF09150A1F0FF0FBB1F661F771F881FE6
+:10342000C2F70EC0BA0F621F731F841F48F487953E
+:1034300077956795B795F7959E3F08F0B0CF939530
+:10344000880F08F09927EE0F9795879508950E94A9
+:103450003B1A0C943D210E94362158F00E942F21E6
+:1034600040F029F45F3F29F00C94262151110C946F
+:1034700071210C942C210E944E2168F39923B1F301
+:10348000552391F3951B550BBB27AA27621773078A
+:10349000840738F09F5F5F4F220F331F441FAA1F1E
+:1034A000A9F335D00E2E3AF0E0E832D091505040DA
+:1034B000E695001CCAF72BD0FE2F29D0660F771F88
+:1034C000881FBB1F261737074807AB07B0E809F06E
+:1034D000BB0B802DBF01FF2793585F4F3AF09E3FF3
+:1034E000510578F00C9426210C9471215F3FE4F390
+:1034F000983ED4F3869577956795B795F7959F5F36
+:10350000C9F7880F911D9695879597F90895E1E081
+:10351000660F771F881FBB1F621773078407BA07E0
+:1035200020F0621B730B840BBA0BEE1F88F7E0953B
+:1035300008950E94A01A6894B1110C947121089505
+:103540000E94562188F09F5798F0B92F9927B751BC
+:10355000B0F0E1F0660F771F881F991F1AF0BA9537
+:10356000C9F714C0B13091F00E947021B1E0089504
+:103570000C947021672F782F8827B85F39F0B93FF6
+:10358000CCF3869577956795B395D9F73EF49095EA
+:103590008095709561957F4F8F4F9F4F08950E9442
+:1035A000952008F48FEF0895A0E0B0E0EAEDFAE18D
+:1035B0000C949121EC01009721F4CB010E948F1E05
+:1035C000B8C0FC01E60FF71F9C0122503109E21739
+:1035D000F30708F4ACC0D9010D911C91119706179F
+:1035E0001707B0F00530110508F49FC0C801049713
+:1035F0008617970708F499C002501109061B170B8C
+:10360000019311936D937C93CF010E94241F8DC071
+:103610005B01A01AB10A4C01800E911EA0915204C8
+:10362000B091530440E050E0E12CF12C109709F4E4
+:103630004AC0A815B905D1F56D907C90119763012A
+:1036400082E0C80ED11CCA14DB0480F1A3014A1920
+:103650005B096A0182E0C80ED11C1296BC901297D9
+:103660001396AC91B5E0CB16D10440F0B282A3839F
+:1036700051834083D9016D937C930AC00E5F1F4F25
+:10368000C301800F911FF90191838083EB2DFA2FE5
+:10369000E114F10431F0D7011396FC93EE931297E5
+:1036A00044C0F0935304E09352043FC08D919C9129
+:1036B00011974817590708F4AC017D0112960D9037
+:1036C000BC91A02DB3CF80915004909151048815E6
+:1036D0009905E1F446175707C8F4809107019091C6
+:1036E0000801009741F48DB79EB740910B015091AE
+:1036F0000C01841B950BE817F907C8F4F0935104EB
+:10370000E0935004F901718360830FC0CB010E94E4
+:103710008F1E7C01009759F0A801BE010E94A31BD7
+:10372000CE010E94241FC70104C0CE0102C080E068
+:1037300090E0CDB7DEB7EEE00C94AD2181E090E0F3
+:10374000F8940C94D321FB01DC0102C001900D928E
+:1037500041505040D8F708956817790768F4FB0185
+:10376000DC01E40FF51FA40FB51F02C002900E92FA
+:1037700041505040D8F708950C94A31BFB01DC0185
+:1037800001900D920020E1F70895FB01DC0141500A
+:10379000504048F001900D920020C9F701C01D92E1
+:1037A00041505040E0F70895FB0151915523A9F095
+:1037B000BF01DC014D9145174111E1F759F4CD01ED
+:1037C0000190002049F04D9140154111C9F3FB01D2
+:1037D0004111EFCF81E090E001970895AEE0B0E0B5
+:1037E000E4EFFBE10C949B210D891E8986E08C831C
+:1037F0001A8309838FEF9FE79E838D83AE01475E17
+:103800005F4F6F89788DCE0101960E94111C2F8128
+:103810003885F801E20FF31F10822E96E4E00C9435
+:10382000B721ACE0B0E0E7E1FCE10C948D217C0134
+:103830006B018A01FC0117821682838181FFBDC161
+:10384000CE0101964C01F7019381F60193FD85911C
+:1038500093FF81916F01882309F4ABC1853239F45C
+:1038600093FD859193FF81916F01853229F4B70112
+:1038700090E00E94F91DE7CF512C312C20E020323E
+:10388000A0F48B3269F030F4803259F0833269F45D
+:1038900020612CC08D3239F0803339F4216026C08C
+:1038A0002260246023C0286021C027FD27C030ED9E
+:1038B000380F3A3078F426FF06C0FAE05F9E300DEC
+:1038C0001124532E13C08AE0389E300D1124332E5C
+:1038D00020620CC08E3221F426FD6BC1206406C02C
+:1038E0008C3611F4206802C0883641F4F60193FD4D
+:1038F000859193FF81916F018111C1CF982F9F7D99
+:103900009554933028F40C5F1F4FFFE3F9830DC0EB
+:10391000833631F0833771F0833509F05BC022C004
+:10392000F801808189830E5F1F4F44244394512CFA
+:10393000540115C03801F2E06F0E711CF801A0802F
+:10394000B18026FF03C0652D70E002C06FEF7FEFEE
+:10395000C5012C870E94EE1D2C0183012C852F7739
+:10396000222E17C03801F2E06F0E711CF801A08002
+:10397000B18026FF03C0652D70E002C06FEF7FEFBE
+:10398000C5012C870E94E31D2C012C852068222E66
+:10399000830123FC1BC0832D90E048165906B0F428
+:1039A000B70180E290E00E94F91D3A94F4CFF5014E
+:1039B00027FC859127FE81915F01B70190E00E946D
+:1039C000F91D31103A94F1E04F1A51084114510495
+:1039D00071F7E5C0843611F0893639F5F80127FF13
+:1039E00007C060817181828193810C5F1F4F08C085
+:1039F00060817181072E000C880B990B0E5F1F4FA1
+:103A00002F76722E97FF09C09095809570956195DD
+:103A10007F4F8F4F9F4F2068722E2AE030E0A40125
+:103A20000E94311EA82EA81844C0853729F42F7E85
+:103A3000B22E2AE030E025C0F22FF97FBF2E8F365C
+:103A4000C1F018F4883579F0B4C0803719F08837A0
+:103A500021F0AFC02F2F2061B22EB4FE0DC08B2DF0
+:103A60008460B82E09C024FF0AC09F2F9660B92E2B
+:103A700006C028E030E005C020E130E002C020E1CF
+:103A800032E0F801B7FE07C06081718182819381C5
+:103A90000C5F1F4F06C06081718180E090E00E5F77
+:103AA0001F4FA4010E94311EA82EA818FB2DFF77DE
+:103AB0007F2E76FE0BC0372D3E7FA51450F474FE8A
+:103AC0000AC072FC08C0372D3E7E05C0BA2C372DC7
+:103AD00003C0BA2C01C0B52C34FF0DC0FE01EA0DA5
+:103AE000F11D8081803311F4397E09C032FF06C098
+:103AF000B394B39404C0832F867809F0B39433FD54
+:103B000013C030FF06C05A2CB31418F4530C5B18C2
+:103B1000B32CB31468F4B70180E290E03C870E94B4
+:103B2000F91DB3943C85F5CFB31410F43B1801C0D4
+:103B3000312C34FF12C0B70180E390E03C870E9433
+:103B4000F91D3C8532FF17C031FD03C088E790E0C6
+:103B500002C088E590E0B7010CC0832F867859F049
+:103B600031FF02C08BE201C080E237FD8DE2B70178
+:103B700090E00E94F91DA51438F4B70180E390E0AD
+:103B80000E94F91D5A94F7CFAA94F401EA0DF11D91
+:103B90008081B70190E00E94F91DA110F5CF33207C
+:103BA00009F451CEB70180E290E00E94F91D3A94E9
+:103BB000F6CFF7018681978102C08FEF9FEF2C9699
+:103BC000E2E10C94A921FC010590615070400110C4
+:103BD000D8F7809590958E0F9F1F0895FC01615036
+:103BE000704001900110D8F7809590958E0F9F1F1F
+:103BF00008950F931F93CF93DF93FB01238121FD42
+:103C000003C08FEF9FEF28C022FF16C04681578167
+:103C1000248135814217530744F4A081B1819D016D
+:103C20002F5F3F4F318320838C93268137812F5F15
+:103C30003F4F3783268310C0EB01092F182F0084D4
+:103C4000F185E02D0995892BE1F68E819F81019602
+:103C50009F838E83812F902FDF91CF911F910F91A2
+:103C60000895FA01AA27283051F1203181F1E89412
+:103C70006F936E7F6E5F7F4F8F4F9F4FAF4FB1E05F
+:103C80003ED0B4E03CD0670F781F891F9A1FA11D5A
+:103C9000680F791F8A1F911DA11D6A0F711D811D5B
+:103CA000911DA11D20D009F468943F912AE0269F20
+:103CB00011243019305D3193DEF6CF010895462F7F
+:103CC0004770405D4193B3E00FD0C9F7F6CF462F60
+:103CD0004F70405D4A3318F0495D31FD40524193C9
+:103CE00002D0A9F7EACFB4E0A69597958795779586
+:103CF0006795BA95C9F700976105710508959B010D
+:103D0000AC010A2E06945795479537952795BA9595
+:103D1000C9F7620F731F841F951FA01D0895CF93CD
+:103D2000DF938230910510F482E090E0E09152043C
+:103D3000F091530420E030E0C0E0D0E0309711F182
+:103D40004081518148175907C0F04817590761F45D
+:103D500082819381209719F09B838A832BC0909353
+:103D600053048093520426C02115310519F04217DF
+:103D7000530718F49A01BE01DF01EF010280F381BD
+:103D8000E02DDCCF2115310509F1281B390B24303A
+:103D9000310590F412968D919C91139761157105E0
+:103DA00021F0FB019383828304C09093530480939A
+:103DB0005204FD01329644C0FD01E20FF31F8193CE
+:103DC0009193225031092D933C933AC02091500495
+:103DD00030915104232B41F42091090130910A01C3
+:103DE0003093510420935004209107013091080131
+:103DF0002115310541F42DB73EB740910B0150918B
+:103E00000C01241B350BE0915004F0915104E21792
+:103E1000F307A0F42E1B3F0B2817390778F0AC01ED
+:103E20004E5F5F4F2417350748F04E0F5F1F5093CA
+:103E30005104409350048193919302C0E0E0F0E07C
+:103E4000CF01DF91CF9108950F931F93CF93DF930D
+:103E5000009709F48CC0FC01329713821282009102
+:103E60005204109153040115110581F42081318110
+:103E7000820F931F20915004309151042817390765
+:103E800079F5F0935104E093500471C0D80140E0FB
+:103E900050E0AE17BF0750F412962D913C91139746
+:103EA000AD012115310509F1D901F3CF9D01DA01E9
+:103EB0003383228360817181860F971F8217930756
+:103EC00069F4EC0128813981260F371F2E5F3F4F9F
+:103ED000318320838A819B8193838283452B29F4BC
+:103EE000F0935304E093520442C01396FC93EE9374
+:103EF0001297ED01499159919E01240F351FE21748
+:103F0000F30771F480819181840F951F02961196B9
+:103F10009C938E938281938113969C938E93129798
+:103F2000E0E0F0E0D80112968D919C9113970097F4
+:103F300019F0F8018C01F6CF8D919C9198012E5FBC
+:103F40003F4F820F931F2091500430915104281746
+:103F5000390769F4309729F41092530410925204EF
+:103F600002C0138212821093510400935004DF9117
+:103F7000CF911F910F910895FC0188279927E8940C
+:103F800021912032E9F3293010F02E30C8F32B3282
+:103F900041F02D3239F4689404C00E942120820F30
+:103FA000911D219120532A30C0F31EF490958195E4
+:103FB0009F4F08951F93FC0199278827BC01E8941F
+:103FC00011911032E9F3193010F01E30C8F31B3292
+:103FD00051F01D3249F4689406C00E940C20610F14
+:103FE000711D811D911D119110531A30B0F33EF4D3
+:103FF00090958095709561957F4F8F4F9F4F1F9142
+:104000000895BB274A3031F4992322F4BDE29095FC
+:1040100081959F4F0C942A20592F482F372F262FF8
+:10402000660F771F881F991F660F771F881F991FBC
+:10403000620F731F841F951F660F771F881F991FBC
+:1040400008957AE0979F902D879F802D910D1124E0
+:104050000895BB27FB015527AA27880F991FAA1F80
+:10406000A41710F0A41B83955051B9F7A05DAA3393
+:1040700008F0A95DA193009779F7B111B19311925E
+:10408000CB010C944320DC01FC01672F7191772355
+:10409000E1F7329704C07C916D9370836291AE1703
+:1040A000BF07C8F308950E94952008F481E00895A1
+:1040B000E89409C097FB3EF49095809570956195C2
+:1040C0007F4F8F4F9F4F9923A9F0F92F96E9BB2778
+:1040D0009395F695879577956795B795F111F8CFF4
+:1040E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5F
+:1040F0009F4F16C0882311F096E911C0772321F055
+:104100009EE8872F762F05C0662371F096E8862FEC
+:1041100070E060E02AF09A95660F771F881FDAF743
+:10412000880F9695879597F90895990F0008550F70
+:10413000AA0BE0E8FEEF16161706E807F907C0F02D
+:1041400012161306E407F50798F0621B730B840B35
+:10415000950B39F40A2661F0232B242B252B21F40F
+:1041600008950A2609F4A140A6958FEF811D811DAF
+:1041700008950E94CC200C943D210E942F2138F0FC
+:104180000E94362120F0952311F00C9426210C94E6
+:104190002C2111240C9471210E944E2170F3959FC3
+:1041A000C1F3950F50E0551F629FF001729FBB272E
+:1041B000F00DB11D639FAA27F00DB11DAA1F649FCA
+:1041C0006627B00DA11D661F829F2227B00DA11D7D
+:1041D000621F739FB00DA11D621F839FA00D611D03
+:1041E000221F749F3327A00D611D231F849F600D24
+:1041F000211D822F762F6A2F11249F5750409AF04D
+:10420000F1F088234AF0EE0FFF1FBB1F661F771FD8
+:10421000881F91505040A9F79E3F510580F00C94A3
+:1042200026210C9471215F3FE4F3983ED4F38695E8
+:1042300077956795B795F795E7959F5FC1F7FE2B43
+:10424000880F911D9695879597F9089597F99F671F
+:1042500080E870E060E008959FEF80EC089500240E
+:104260000A941616170618060906089500240A94DB
+:1042700012161306140605060895092E0394000C61
+:1042800011F4882352F0BB0F40F4BF2B11F460FFF0
+:1042900004C06F5F7F4F8F4F9F4F089557FD905819
+:1042A000440F551F59F05F3F71F04795880F97FBFA
+:1042B000991F61F09F3F79F08795089512161306B4
+:1042C0001406551FF2CF4695F1DF08C016161706E3
+:1042D0001806991FF1CF8695710561050894089518
+:1042E000E894BB2766277727CB0197F90895F999BA
+:1042F000FECF92BD81BDF89A992780B50895262FEB
+:10430000F999FECF1FBA92BD81BD20BD0FB6F894BA
+:10431000FA9AF99A0FBE019608952F923F924F9202
+:104320005F926F927F928F929F92AF92BF92CF9245
+:10433000DF92EF92FF920F931F93CF93DF93CDB74E
+:10434000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFC6
+:1043500009942A88398848885F846E847D848C8497
+:104360009B84AA84B984C884DF80EE80FD800C81A0
+:104370001B81AA81B981CE0FD11D0FB6F894DEBF83
+:104380000FBECDBFED010895A29FB001B39FC00144
+:10439000A39F700D811D1124911DB29F700D811D71
+:1043A0001124911D089510E0C5E7D0E004C0FE017E
+:1043B0000E94B4192196C637D107C9F7F894FFCFE8
+:1043C0002C01068C0B8C0B000054048000000000B4
+:1043D00000230B0310EC0ACA0ADE0A6A0B4F4B00DB
+:1043E0005620332E332E30205349474E414C6475AE
+:1043F000696E6F202D20636F6D70696C656420613C
+:1044000074205365702031382032303136203030FE
+:104410003A32313A3439004954506172616D733A1D
+:1044200020003B000D0A004D5300443D0043503D29
+:104430000053503D004F0025303258002530315890
+:10444000004D43004C4C3D004C483D00534C3D005A
+:0C44500053483D00433D004D5500500016
:00000001FF
diff --git a/fhem/FHEM/firmware/SIGNALduino_uno.hex b/fhem/FHEM/firmware/SIGNALduino_uno.hex
index 3c251a980..4d86edd20 100644
--- a/fhem/FHEM/firmware/SIGNALduino_uno.hex
+++ b/fhem/FHEM/firmware/SIGNALduino_uno.hex
@@ -1,1155 +1,1095 @@
-:100000000C9477000C949F130C94C6130C949F00CF
-:100010000C949F000C949F000C949F000C949F00E4
-:100020000C949F000C949F000C949F000C949F00D4
-:100030000C949F000C947F080C949F000C949F00DC
-:100040000C94ED130C949F000C94B1160C94E316D1
-:100050000C949F000C949F000C949F000C949F00A4
-:100060000C949F000C949F003B4D433D003B4D552D
-:100070003D004D533D00556E737570706F72746521
-:100080006420636F6D6D616E640020557365206F31
-:100090006E65206F6620000000000800020100006D
-:1000A0000304070000000000000000010204081023
-:1000B00020408001020408102001020408102004DE
+:100000000C9476000C94860D0C945F0D0C949E005D
+:100010000C949E000C949E000C949E000C949E00E8
+:100020000C949E000C949E000C949E000C949E00D8
+:100030000C949E000C94130E0C949E000C949E0045
+:100040000C94150D0C949E000C94270C0C94010C30
+:100050000C949E000C949E000C949E000C949E00A8
+:100060000C949E000C949E00556E737570706F72A8
+:1000700074656420636F6D6D616E640020557365F7
+:10008000206F6E65206F66200000000008000201EE
+:10009000000003040700000000000000003B4D4387
+:1000A0003D003B4D553D004D533D000000000025F7
+:1000B0000028002B0000000000240027002A000474
:1000C00004040404040404020202020202030303FF
-:1000D00003030300000000250028002B000000009F
-:1000E00000240027002A0000190813175C081124B7
-:1000F0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E081
-:10010000E6EFF6E402C005900D92A631B107D9F7EB
-:1001100024E0A6E1B2E001C01D92AB3AB207E1F7DC
-:1001200010E0CCEED0E004C02297FE010E949A1DA0
-:10013000C83ED107C9F70E9457170C946E230C9440
-:100140000000CF92DF92EF92FF920F931F930E94D5
-:10015000431400911D0210911E0220911F02309144
-:1001600020026B017C01C01AD10AE20AF30A97014E
-:10017000860160931D0270931E0280931F0290936C
-:1001800020020A3511052105310578F181E0C816F4
-:100190008DE7D806E104F10410F4960102C021E0D5
-:1001A0003DE74A9B03C03195219531098091620357
-:1001B0008B34D8F4809162038F5F809362038091C7
-:1001C0006303609161030E94421D90936303E09179
-:1001D0006303F0E0EE0FFF1FEB59FC4F31832083E8
-:1001E000809163038F5F809363031F910F91FF9052
-:1001F000EF90DF90CF9008950F931F9360912702A7
-:100200008DE00E943615109227020E94431400913F
-:100210001D0210911E0220911F0230912002601BCE
-:10022000710B820B930B62307D478105910520F0A5
-:100230001F910F910C94A1001F910F91089581E2DD
-:1002400092E00E94FF188BE593E00E94FF1885E57D
-:1002500093E00C94FF18CF93DF93EC01FB01248112
-:1002600035810E94421BCE01DF91CF91089541E07C
-:1002700050E061EA70E080E00C946D1380E00C9433
-:100280008D13CF93DF931F92CDB7DEB72B9A2091BA
-:10029000060130910701482F429FC001439F900DF6
-:1002A000112469830E948E142B98809106019091ED
-:1002B00007016981FC016E9FC0016F9F900D1124A1
-:1002C0000F90DF91CF910C948E14EF92FF920F93C9
-:1002D0001F93CF93DF93F82EE92E0E943E0100E09A
-:1002E00010E02091080130E0021713072CF56FE1B0
-:1002F00081E00E944101CF2DDE2D29912223C9F0FA
-:10030000213371F0263449F02033B9F763E081E0FE
-:100310000E94410163E081E009C063E081E002C026
-:1003200061E083E00E94410161E083E00E944101BD
-:10033000E4CF0F5F1F4FD5CFDF91CF911F910F916A
-:10034000FF90EF900C9437013F924F925F926F9223
-:100350007F928F929F92AF92BF92CF92DF92EF9255
-:10036000FF920F931F93CF93DF93082FEB01542E2F
-:10037000452E59010E9443146B017C0110E0812C31
-:10038000912CB401600F711FC617D707A8F1C501E2
-:100390000E94FA1A8053E52DF42DE80FF11DE80FA5
-:1003A000F11D90818181382E331C3324331C692E3A
-:1003B000782E31F077FE0CC071946194710808C0FA
-:1003C00077FE03C071946194710888E1681A71081E
-:1003D0000E9443146C157D058E059F05C8F33320DC
-:1003E00011F02B9801C02B9AC60CD71CE11CF11CF4
-:1003F0008FEF881A980AC5CF0E9443146C157D05AB
-:100400008E059F05C8F3DF91CF911F910F91FF904B
-:10041000EF90DF90CF90BF90AF909F908F907F90A4
-:100420006F905F904F903F9008954F925F926F92C0
-:100430007F928F929F92AF92BF92CF92DF92EF9274
-:10044000FF920F931F93CF93DF93982E862E2A014E
-:100450002B9A0E9443146B017C01662457FC609424
-:10046000762C891408F446C0692D70E081E292E090
-:100470000E94FA1A90ED980F9A3010F4892F01C05B
-:100480008753C4E0D0E008E0A82EBB24A7FCB094BA
-:100490000E9443146C157D058E059F05C8F310E07E
-:1004A00098012A213B21232B71F02B98C40CD51CD9
-:1004B000E61CF71C0E9443146C157D058E059F05F4
-:1004C000C8F32B9A0DC02B9AC40CD51CE61CF71C44
-:1004D0000E9443146C157D058E059F05C8F32B986B
-:1004E000C40CD51CE61CF71C15950795219781F6C1
-:1004F0009394B7CF0E9443146C157D058E059F051C
-:10050000C8F3DF91CF911F910F91FF90EF90DF9093
-:10051000CF90BF90AF909F908F907F906F905F90A3
-:100520004F900895CF92DF92EF92FF920F931F9317
-:10053000CF93DF9300D000D000D0CDB7DEB78C01D1
-:100540006B01FC01E080F1806DE071E0CE0101966D
-:100550000E946D19A701BE016F5F7F4F81E292E09B
-:100560000E94261B7C01CE0101960E94FF18FFEF1E
-:10057000EF16FF0601F1F801408151814F3FFFEF77
-:100580005F07C9F0970161E272E0CE0101960E9417
-:10059000421BBE016F5F7F4FC6010E94B919CE0199
-:1005A00001960E94FF188FEFE81AF80AF801F1820D
-:1005B000E08281E001C080E026960FB6F894DEBFAD
-:1005C0000FBECDBFDF91CF911F910F91FF90EF90A4
-:1005D000DF90CF900895BF92CF92DF92EF92FF927B
-:1005E0000F931F93CF93DF93CDB7DEB7C856D109D2
-:1005F0000FB6F894DEBF0FBECDBF67E072E0CE014C
-:100600008F599F4F0E946D196EE170E0CE018F5996
-:100610009F4F0E943019A9961FAE1EAEA9970E9447
-:100620003E011FEF01E042E1F42E59E0E52E62E0C9
-:10063000D62ECC24C394BE016F597F4FCE01895969
-:100640009F4F0E949202882309F44FC060E070E03F
-:10065000CE018F599F4F0E94FA1A833589F561E0C8
-:1006600070E0CE018F599F4F0E94FA1A833419F31C
-:1006700061E070E0CE018F599F4F0E94FA1A8D34CD
-:1006800059F41F5FE1E0F0E0EC0FFD1FF19EE00D7B
-:10069000F11D1124C282CFCF61E070E0CE018F59ED
-:1006A0009F4F0E94FA1A823531F61F5FE1E0F0E0B9
-:1006B000EC0FFD1FF19EE00DF11D1124D282BBCF86
-:1006C00060E070E0CE018F599F4F0E94FA1A80358A
-:1006D00009F068C062E070E0CE018F599F4F0E9420
-:1006E000FA1A8D3309F05EC082C0B12C32E1C32EFC
-:1006F000B016D1F1D12CED2CF12CCE9CA001CF9CC9
-:10070000500D1124E1E0F0E0EC0FFD1FE40FF51FA8
-:100710008281823079F44A5F5F4F21E030E02C0F14
-:100720003D1F420F531F6481758121E232E08381B6
-:100730000E94A401CE9CF001CF9CF00D112481E019
-:1007400090E08C0F9D1FE80FF91F8281813031F4FA
-:1007500040815181648183810E9415022B98D3943A
-:100760001D1548F6B394C4CF0E94370161E272E0D0
-:100770008AE094E00E94F217CE018F599F4F0E94A9
-:10078000FF18C859DF4F0FB6F894DEBF0FBECDBFBC
-:10079000DF91CF911F910F91FF90EF90DF90CF905D
-:1007A000BF90089560E070E0CE018F599F4F0E9486
-:1007B000FA1A823509F050C061E070E0CE018F591D
-:1007C0009F4F0E94FA1A8D3309F046C042E050E074
-:1007D000BE016F597F4FCE01855A9F4F0E942B015A
-:1007E000CE01855A9F4F0E94871B062F82C022E0B0
-:1007F00030E041E050E0BE016F597F4FCE01855A95
-:100800009F4F0E94421BCE01855A9F4F0E94871B1B
-:10081000B62ECE01855A9F4F0E94FF1843E050E04C
-:10082000BE016F597F4FCE01855A9F4F0E942B0109
-:10083000CE01855A9F4F0E94871BE19EF001112433
-:10084000EB0DF11D3396EE0FFF1F21E030E02C0F72
-:100850003D1FE20FF31F4BC060E070E0CE018F59E7
-:100860009F4F0E94FA1A8434B9F4A9968EAD9FADB9
-:10087000A997E1E0F0E0EC0FFD1FF19EE00DF11D06
-:10088000112421E0280FA6963FADA697231B2383B2
-:10089000029795838483CFCE60E070E0CE018F59BC
-:1008A0009F4F0E94FA1A833409F0C5CE61E070E0D0
-:1008B000CE018F599F4F0E94FA1A8D3309F0BBCE9B
-:1008C00042E050E0BE016F597F4FCE01855A9F4FE5
-:1008D0000E942B01CE01855A9F4F0E94871BE1E0A9
-:1008E000F0E0EC0FFD1FF19EE00DF11D112471836E
-:1008F0006083CE01855A9F4F0E94FF189CCE62E70D
-:1009000070E08AE094E00E94A41760912B0270E0EE
-:100910004AE050E08AE094E00E94B9186DE670E089
-:100920008AE094E00E94A4176091290270E04AE0F6
-:1009300050E08AE094E00E94B91868E670E08AE02E
-:1009400094E00E94A41760912A0270E04AE050E00F
-:100950008AE094E00C94C118CF93DF93CDB7DEB753
-:10096000AE970FB6F894DEBF0FBECDBF61E070E06A
-:1009700081E292E00E94FA1A843729F161E070E086
-:1009800081E292E00E94FA1A823721F542E050E0BB
-:1009900061E272E0CE0101960E942B0120E030E07E
-:1009A00043E050E0BE01675D7F4FCE0101960E949B
-:1009B000FC1ACE0101960E94FF18CE0189960E9472
-:1009C0008F1F8093080161E272E08AE094E00E9448
-:1009D000F21795C061E070E081E292E00E94FA1A9D
-:1009E0008337F1F42B9A42E050E061E272E0CE01ED
-:1009F00089960E942B0120E030E048E250E0BE01E1
-:100A00006F5F7F4FCE0189960E94FC1ACE018996B6
-:100A10000E94FF18CE0101960E9465012B98D3CF4A
-:100A200061E070E081E292E00E94FA1A8336A9F454
-:100A300042E050E061E272E0CE0101960E942B019B
-:100A4000CE0101960E94871B7093070160930601F7
-:100A5000CE0101960E94FF18B6CF61E070E081E2FE
-:100A600092E00E94FA1A803709F049C067E072E00C
-:100A7000CE0189960E946D1964E170E0CE018996DD
-:100A80000E9430196FE071E0CE0189960E94C5196D
-:100A90004AE060910801CE0101960E94DD19BE0175
-:100AA0006F5F7F4FCE0189960E94621ACE01019638
-:100AB0000E94FF1867E971E0CE0189960E94691AC9
-:100AC00060910601709107014AE0CE0101960E94F3
-:100AD0000A1ABE016F5F7F4FCE0189960E94621A8B
-:100AE000CE0101960E94FF18BE01675D7F4F8AE02C
-:100AF00094E00E94F217CE0189960E94FF18AE96EC
-:100B00000FB6F894DEBF0FBECDBFDF91CF91089531
-:100B1000CF93DF9300D0CDB7DEB72091A7043091FB
-:100B2000A8042115310511F42BEA34E0CE01019619
-:100B3000821B930B0F900F90DF91CF910895CF926E
-:100B4000DF92EF92FF920E9437146B017C0128EE36
-:100B500033E040E050E00E94761D809118029091B1
-:100B60001902A0911A02B0911B02C816D906EA0612
-:100B7000FB0648F48091160290911702019690931B
-:100B8000170280931602C0921802D0921902E092C6
-:100B90001A02F0921B02CA01B901FF90EF90DF9098
-:100BA000CF9008956AE171E08AE094E00E94041811
-:100BB00061E070E080E090E00C94661461E070E029
-:100BC00081E292E00E94FA1A813511F40E943E01FE
-:100BD00061E070E081E292E00E94FA1A853411F43B
-:100BE0000C9437010895262F220F330B94E049020D
-:100BF000B0011124682B622B81E090E00C947322E9
-:100C0000CF93DF9361E070E081E292E00E94FA1AF4
-:100C1000873421F4DF91CF910C947F0462E070E07F
-:100C200081E292E00E94FA1A833599F062E070E066
-:100C300081E292E00E94FA1A853571F062E070E07C
-:100C400081E292E00E94FA1A833441F4CAE2D2E0CF
-:100C500005C0CBE2D2E002C0C9E2D2E061E070E0C0
-:100C600081E292E00E94FA1A853419F481E08883C7
-:100C700009C061E070E081E292E00E94FA1A8434D7
-:100C800059F4188240912A026091290280912B0226
-:100C9000DF91CF910C94F305DF91CF91089560E03F
-:100CA00070E081E292E00E94FA1A803511F40C940F
-:100CB000D20560E070E081E292E00E94FA1A8F3380
-:100CC00009F072C06FE38AE094E00E94D5176AE8E9
-:100CD00070E08AE094E00E94A41766E58AE094E060
-:100CE0000E94D51760E28AE094E00E94D51769E679
-:100CF0008AE094E00E94D51760E28AE094E00E94C6
-:100D0000D51762E58AE094E00E94D51760E28AE098
-:100D100094E00E94D51764E78AE094E00E94D5171A
-:100D200060E28AE094E00E94D51768E58AE094E0EA
-:100D30000E94D51760E28AE094E00E94D51766E42D
-:100D40008AE094E00E94D51760E28AE094E00E9475
-:100D5000D51763E58AE094E00E94D51760E28AE047
-:100D600094E00E94D51760E58AE094E00E94D517D0
-:100D700060E28AE094E00E94D51763E48AE094E0A0
-:100D80000E94D51760E28AE094E00E94D51767E4DC
-:100D90008AE094E00E94D51760E28AE094E00E9425
-:100DA000D51767E072E00AC060E070E081E292E08F
-:100DB0000E94FA1A863531F46DE171E08AE094E020
-:100DC0000C94041860E070E081E292E00E94FA1A4C
-:100DD000823549F40E9488054AE050E0BC018AE06F
-:100DE00094E00C94C11860E070E081E292E00E940F
-:100DF000FA1A893641F488E292E00E94E408892BCD
-:100E000081F40C94AC0460E070E081E292E00E9416
-:100E1000FA1A833561F488E292E00E94E408892B93
-:100E200021F081E080931C0208950C94EB0260E0B5
-:100E300070E081E292E00E94FA1A843751F40E9435
-:100E40009F05AB01BC012AE030E08AE094E00C94FD
-:100E5000ED1860E070E081E292E00E94FA1A8835B5
-:100E600011F40C94DE0560E070E081E292E00E94F3
-:100E7000FA1A8634D1F060E070E081E292E00E94DC
-:100E8000FA1A833411F40C94000660E070E081E2F9
-:100E900092E00E94FA1A873411F40C947F0466E7FA
-:100EA00070E08AE094E00C94E01708951F93CF93CC
-:100EB000DF9300D0CDB7DEB780911C02882389F084
-:100EC00010921C020E944F0680911C02811106C0E4
-:100ED00067E072E081E292E00E94C51981E08093B0
-:100EE000270211E080916203882341F1809162031F
-:100EF00081508093620380916403609161030E943A
-:100F0000421D90936403E091640381E08E0F80930F
-:100F10006403F0E0EE0FFF1FEB59FC4F80819181DD
-:100F20009A838983BE016F5F7F4F88E292E00E94BF
-:100F30004B138823B9F210932702D4CF0F900F9050
-:100F4000DF91CF911F910895EF92FF920F931F931E
-:100F5000CF93DF93EC017B018A0181E090E00E9456
-:100F60006B22982F9170988381FB992790F9F70154
-:100F7000908382FB882780F9F8018083DF91CF91ED
-:100F80001F910F91FF90EF90089526E040E051EE01
-:100F900060E070E08AE094E00E944F1660E082E03A
-:100FA0000E94FD1461E08BE00E94FD1461E08DE081
-:100FB0000E94FD1480E1809381001092800082E005
-:100FC0008093FD0388E199E79093FF038093FE03EC
-:100FD000909387008093860082E1809381008CEF5C
-:100FE00090E09093FC038093FB0381E080936F007B
-:100FF00080E090E00E946B228B3049F44AE252E09C
-:1010000069E272E08BE292E00E94A4070AC06BE002
-:1010100080E090E00E94732267E081E090E00E940F
-:1010200073220E94370164E170E081E292E00C9447
-:1010300030190F931F93CF93DF938BE48093610359
-:10104000109262031092640310926303CBE3D3E027
-:10105000D0934003C0933F030DE313E0109342038A
-:101060000093410367E072E085E593E00E946D190B
-:1010700067E072E08BE593E00E946D19F801118240
-:1010800010821982188288E292E00E94A60867E026
-:1010900072E081E292E00E946D190E944314609315
-:1010A0001D0270931E0280931F0290932002DF9115
-:1010B000CF911F910F9108950C941F01CF93C1E020
-:1010C0008AE094E00E946C15892BB9F08AE094E0E4
-:1010D0000E9485158A3041F01CF4882329F007C04E
-:1010E0008D3011F0833219F4C0931C02E9CF682FC0
-:1010F00081E292E00E94791AE3CFCF9108951F9286
-:101100000F920FB60F9211242F933F934F935F933B
-:101110006F937F938F939F93AF93BF93EF93FF93BF
-:10112000E091FB03F091FC030995FF91EF91BF91D2
-:10113000AF919F918F917F916F915F914F913F916F
-:101140002F910F900FBE0F901F901895FC01E85F34
-:10115000FE4F1082B39610827B97108231961182D7
-:1011600010827B962FEF2083FC012083AC0120E0CE
-:1011700030E0FA01E15EFE4F11821082FC01E20FC5
-:10118000F31F14822F5F3F4F4E5F5F4F26303105B4
-:1011900081F7FC01E55FFE4F1082339626E930E0CF
-:1011A000318320833D964DEC5CEC6CE47EE3408320
-:1011B00051836283738372971082339610823196C3
-:1011C000108233971082089580E090E00895CF93C5
-:1011D000DF93FC01E55DFE4FD081C0E07D97CD1728
-:1011E000C1F0DC01A15EBE4F2D913C91AB01421BD1
-:1011F000530B9A0157FF03C031952195310902968F
-:10120000408151814217530714F08C2F03C0CF5FE8
-:10121000E6CF8FEFDF91CF910895FC011482158204
-:101220001682178210861186411104C0DC01A85F66
-:10123000BE4F4C91641780F4DF01A60FB11D1A96C2
-:101240008C91DF01A80FB11D14968C9114978F5FBC
-:1012500014968C936F5FEECF08952F923F924F922A
-:101260005F926F927F928F929F92AF92BF92CF9236
-:10127000DF92EF92FF920F931F93CF93DF93CDB73F
-:10128000DEB72E970FB6F894DEBF0FBECDBF9E8798
-:101290008D8740E060E00E940D09ED85FE85E55DEB
-:1012A000FE4F5080712C2D853E85255E3E4F3A873E
-:1012B00029878D859E85885F9E4F9C878B877514B7
-:1012C00009F4C3C044244394470C642C272C312CCC
-:1012D000C101880F991FAD85BE858A0F9B1FFC0138
-:1012E000E15EFE4FFA83E9832A0E3B1EF4E02F0EE7
-:1012F000311C29813A8138872F83651409F4A3C0F2
-:10130000862D90E09C838B83880F991F9E838D830D
-:10131000FC01AD85BE85EA0FFB1FE15EFE4F00813B
-:101320001181C80117FF04C088279927801B910BE2
-:10133000BC01882777FD8095982F0E942B1CE9859A
-:10134000FA8520813181428153810E94DF1C4B014B
-:101350005C01A981BA81CD90DC907801EC18FD0880
-:10136000F7FE03C0F194E194F10820E030E040E0A2
-:101370005FE3C501B4010E94DF1C9B01AC01C50104
-:10138000B4010E94941B0E94F81B6E157F050CF49B
-:1013900058C0EB85FC85208180E090E0821750F4F6
-:1013A000ED85FE85E80FF91F3285361101C0728682
-:1013B0000196F4CFD1014C91552747FD5095EB8113
-:1013C000FC812D853E85E20FF31FE481FF27E7FDB9
-:1013D000F0959A012E0F3F1F21153105E1F4C49EAF
-:1013E000C001C59E900DD49E900D1124B9010E949C
-:1013F000621D7B010E9FC0010F9F900D1E9F900DDF
-:101400001124B9010E94621DE60EF71EAF81B88556
-:10141000ED92FC920CC00C0D1D1D17FF02C00F5F5A
-:101420001F4F15950795E981FA8111830083ED819E
-:10143000FE812D853E85E20FF31FE15EFE4F118296
-:10144000108263945ACF742C3ACF2E960FB6F8942C
-:10145000DEBF0FBECDBFDF91CF911F910F91FF90E7
-:10146000EF90DF90CF90BF90AF909F908F907F9044
-:101470006F905F904F903F902F9008953F924F92C2
-:101480005F926F927F928F929F92AF92BF92CF9214
-:10149000DF92EF92FF920F931F93CF93DF93EC01B4
-:1014A0008FEF8883FE01E55DFE4F30806E0100E026
-:1014B00010E0EE24EA94FE2C4E0188EF881A8EEF9D
-:1014C000980A031508F06AC0F601E15EFE4F5F015D
-:1014D000FFEFEF16FF0639F5F5018081918197FD49
-:1014E00022C0FE01E00FF11F6481772767FD709530
-:1014F000872F972F0E942B1C2B013C01F401608148
-:1015000070E080E090E00E942B1C2BE734E14EE27B
-:101510005EE30E94DF1C9B01AC01C301B2010E948B
-:10152000DB1C1816A4F1F5012081318137FD30C094
-:10153000C701880F991F8C0F9D1FFC01E15EFE4FB4
-:1015400080819181281739071CF5FE01E00FF11FFA
-:101550006481772767FD7095872F972F0E942B1C3A
-:101560002B013C01F401608170E080E090E00E947A
-:101570002B1C2BE734E14EE25EE30E94DF1C9B0153
-:10158000AC01C301B2010E94DB1C18160CF47801F7
-:101590000F5F1F4FF2E0CF0ED11C93CF8FEFE816F5
-:1015A000F80641F0E882CF5EDE4F81E090E099835B
-:1015B000888301C080E0DF91CF911F910F91FF9050
-:1015C000EF90DF90CF90BF90AF909F908F907F90E3
-:1015D0006F905F904F903F9008958F929F92AF923F
-:1015E000BF92CF92DF92EF92FF920F931F93CF9310
-:1015F000DF93FC018C010F5E1E4FD8018D919C91F1
-:101600001197019709F07CC05A96BC90BA94C7E034
-:10161000AC2E6F01B8EFCB1ABEEFDB0AB7FC70C07F
-:101620002B2D332727FD3095C901880F991F8E0F69
-:101630009F1FDC01A15EBE4FCD91DC91D7FF5EC044
-:10164000D195C195D109C83682E4D80708F056C0B3
-:10165000E080FF24E7FCF094C701880F991F8E0FEC
-:101660009F1FDC01A15EBE4F8D909C90CE01B40106
-:101670000E944E1D6832710508F040C0A89CC00150
-:10168000A99C900D11248C179D07C0F5DF01A20FB6
-:10169000B31F14968C9186308CF5D6014C9150E096
-:1016A000BA0161507109912C892D90E08617970736
-:1016B00084F4DF01A80FB91F1B96CC911B97D0E0D3
-:1016C000C217D307C9F41A96AC91B0E0AE15BF05A6
-:1016D00099F4485251098417950784F4DF01A45DF9
-:1016E000BE4FBC9282E090E0D8018D939C93E75F5F
-:1016F000FE4F908281E009C09394D6CFBA948ECFEA
-:10170000E45DFE4F8FEF808380E0DF91CF911F91EA
-:101710000F91FF90EF90DF90CF90BF90AF909F9090
-:101720008F9008950F931F93CF93DF938A01E90160
-:101730008AE094E00E94C717B8018AE094E00E9412
-:10174000C717BE018AE094E0DF91CF911F910F91FE
-:101750000C94C717EF92FF920F931F93CF93DF93D1
-:10176000EC01F62EE42EB9018AE094E00E94C7173E
-:10177000EF1460F0FE01EF0DF11D4AE050E06285CC
-:101780008AE094E00E94E618F394F2CFB8018AE070
-:1017900094E00E94C71780E0DF91CF911F910F91D5
-:1017A000FF90EF90089570E0FC0126A1332727FDFC
-:1017B00030956217730751F027A1332727FD309525
-:1017C00081E06217730719F080E0089581E00895C1
-:1017D00070E0FC0120A5332727FD309562177307C1
-:1017E00051F021A5332727FD309581E0621773075B
-:1017F00019F080E0089581E008959F92AF92BF9222
-:10180000CF92DF92EF92FF920F931F93CF93DF93CC
-:1018100000D01F92CDB7DEB78C017B0120E330E30F
-:1018200040E029833A834B83FC01668DF3E06F9F90
-:10183000B0011124C7010E943019E114F10449F1EB
-:10184000912C87ECA82E81E0B82ECE0101966C0178
-:10185000F801868D8915E8F0F80183A1981620F427
-:10186000E90DF11D808101C08FEF1F928F93BF9210
-:10187000AF92DF92CF920E947720B601C7010E94FB
-:10188000691A93940F900F900F900F900F900F90F4
-:10189000DFCF0F900F900F90DF91CF911F910F919D
-:1018A000FF90EF90DF90CF90BF90AF909F90089502
-:1018B0000F931F93CF93DF938C01EB0160E270E0F5
-:1018C000CE010E943019209709F468C06CEC71E0D9
-:1018D000CE010E94691AF80184A195A126A1220FC8
-:1018E000330B820F931FFC01E15EFE4F608171811B
-:1018F000CE010E94B81A6BE3CE010E94791A60ED06
-:1019000071E0CE010E94691AF80184A195A127A176
-:10191000220F330B820F931FFC01E15EFE4F6081AB
-:101920007181CE010E94B81A6BE3CE010E94791A30
-:1019300064ED71E0CE010E94691AF80184A195A1BD
-:1019400020A5220F330B820F931FFC01E15EFE4F97
-:1019500060817181CE010E94B81A6BE3CE010E94B2
-:10196000791A68ED71E0CE010E94691AF80184A12C
-:1019700095A121A5220F330B820F931FFC01E15E7D
-:10198000FE4F60817181CE010E94B81A6BE3CE01D7
-:10199000DF91CF911F910F910C94791ADF91CF9124
-:1019A0001F910F9108950F931F93CF93DF938C0195
-:1019B000EB0167E070E0CE010E943019209799F0AA
-:1019C0006CED71E0CE010E94691AF80162A573A561
-:1019D000CE010E94B81A6BE3CE01DF91CF911F9127
-:1019E0000F910C94791ADF91CF911F910F91089567
-:1019F0004F925F926F927F928F929F92AF92BF921F
-:101A0000CF92DF92EF92FF920F931F93CF93DF93CA
-:101A1000EC010CA11DA1580185EDA81A8EEFB80AA2
-:101A2000F5018081843008F4C4C06801F8EFCF1A52
-:101A3000FEEFDF0AF601608170E080E090E00E9436
-:101A40002B1C2AE037ED43E25DE30E94DF1C0E947D
-:101A5000FD1B40E050E0912C812CEE24EA94FE2CFA
-:101A6000262F30E0F5018081481708F06BC0642F05
-:101A700070E0F801E60FF71FE4818E2F992787FDAC
-:101A80009095821793070CF45BC0660F771F600F69
-:101A9000711FDB01A15EBE4F6D917C91161617067A
-:101AA0004CF55E0F8394E60EF71EEFA1EF3F69F051
-:101AB0008E2F880F990B800F911FDC01A15EBE4F06
-:101AC0008D919C91861797070CF4E42FEFA3E9A55D
-:101AD000EF3F69F08E2F880F990B800F911FDC016B
-:101AE000A15EBE4F8D919C91681779070CF4E42F8D
-:101AF000E9A726C05E1B9394EEA1EF3F69F08E2FFD
-:101B0000880F990B800F911FDC01A15EBE4F8D9154
-:101B10009C91681779070CF4E42FEEA3E8A5EF3F3A
-:101B200069F08E2F880F990B800F911FDC01A15E49
-:101B3000BE4F8D919C91861797070CF4E42FE8A770
-:101B40004F5F90CF652F70E080E090E00E942B1CEB
-:101B50002B013C01F601608170E080E090E00E9482
-:101B60002B1C2AE037ED43EA5CE30E94DF1C9B015B
-:101B7000AC01C301B2010E94DB1C1816D4F098100E
-:101B800018C0C70163E070E00E94621D7BA76AA7CE
-:101B90009EA19F3F71F088A58F3F59F0981749F09B
-:101BA0002FA12F3F31F099A59F3F19F081E0291314
-:101BB00001C080E0DF91CF911F910F91FF90EF90D6
-:101BC000DF90CF90BF90AF909F908F907F906F905D
-:101BD0005F904F900895FC0183A12E2FDF019A2F73
-:101BE000921B981710F41D92FACF168E178E87E06D
-:101BF00082A3089524E1FC0124A70C94EB0D7F92AD
-:101C00008F929F92AF92BF92CF92DF92EF92FF920C
-:101C10000F931F93CF93DF93EC018CA19DA1FC0147
-:101C2000E45FFE4F108233971082D12CF12C812C6F
-:101C300037E0B32EAA24A3940CA11DA1F801E85FFC
-:101C4000FE4F8081881608F04DC0F11014C0F801D5
-:101C5000E80DF11DE2846E2DCE010E94D30B81119F
-:101C600006C06E2DCE010E94E80B8823C9F1F80151
-:101C7000E75FFE4F80820CA11DA1D1108FC0C8016B
-:101C8000885F9E4F7C01F801E80DF11DC2846C2D28
-:101C9000CE010E94D30B811161C0F70180818816AB
-:101CA00008F47AC05BC0672DCE010E94E80B782E45
-:101CB000811184C04F8D50E02CA5332727FD30952E
-:101CC000421753070CF0C8C07110B4C0CE010E9477
-:101CD000EB0DF12C4E8D8BA1481708F486C0DF2C3C
-:101CE0008394AACF88122DC0D801A75FBE4F4C9114
-:101CF000423038F12F8D30E08CA587FD8F5F8595C0
-:101D0000992787FD909582179307DCF4841A8082C7
-:101D10008CA19DA1FC01E85FFE4F408150E04F5F28
-:101D20005F4F3196608170E0665F7F4F680F791F6B
-:101D30000A960E94DD1FECA1FDA1E45FFE4F81E049
-:101D400080834F8D50E02CA5332727FD309581E00F
-:101D5000421753070CF0B5C080E0B3C0282DF7013F
-:101D600080818816B0F4C8018C0D911D8C0D911DD9
-:101D7000FC01E15EFE4F9180991C9924991CF801A9
-:101D8000E75FFE4F8080281949F020FF07C0839449
-:101D900005C0FF24F394A4CF839475CFE82CF12CD5
-:101DA0006801CE0CDF1CF6017284672DCE010E9403
-:101DB000D30B882309F477CF9A2414C0F801E85F85
-:101DC000FE4F208130E021503109E216F3060CF07D
-:101DD00071CFF6016385CE010E94E80B882309F4D8
-:101DE00069CF8394FF24F39475CF5AA1852F90E097
-:101DF000292D332727FD3095052E01C0220F0A9487
-:101E0000EAF7FE01E40FF11D3081322B30832F8D74
-:101E10002F5F2F8F28A1821B910997FD03C0521BB2
-:101E20005AA35DCFBAA24F5F4E8FFE01E40FF11DA2
-:101E3000108255CFF801E85FFE4F808190E0019756
-:101E4000E816F9060CF042CFF6016385CE010E9438
-:101E5000E80B882389F13ACFF801E65FFE4F8082D4
-:101E60008CA19DA1FC01E85FFE4FDC01A65FBE4F87
-:101E700020818C91281B20838CA19DA1FC01E85F0F
-:101E8000FE4F408150E04F5F5F4F3296608170E0BF
-:101E9000665F7F4F680F791F0A960E94DD1FECA1D5
-:101EA000FDA1E45FFE4F81E080834F8D50E02CA5C3
-:101EB000332727FD30954CCFF801E75FFE4F808038
-:101EC00005CFDF91CF911F910F91FF90EF90DF90A1
-:101ED000CF90BF90AF909F908F907F9008953F924A
-:101EE0004F925F926F927F928F929F92AF92BF922A
-:101EF000CF92DF92EF92FF920F931F93CF93DF93D6
-:101F0000CDB7DEB7E3970FB6F894DEBF0FBECDBFF7
-:101F10007C013C0188EF681A8EEF780AF30180811A
-:101F2000883208F474C2C7010E942D0940E060E0C5
-:101F3000C7010E940D09C7010E943E0AC7010E9405
-:101F4000ED0AF7018381882309F422C1EF5EFE4F79
-:101F500080819181029709F01BC14701F7EF8F1A29
-:101F6000FEEF9F0AF40160815701F6EFAF1AFEEF12
-:101F7000BF0A82E0860FF5018083F3017081872F0D
-:101F800090E00197D701A45DBE4FF5011081212F8C
-:101F900030E028173907FCF4F701E20FF31F4385FF
-:101FA00050E02C91332727FD30954217530779F4E1
-:101FB000428550E0F7012081332727FD30954217F5
-:101FC000530729F41150F501108311E005C01E5F7D
-:101FD000F5011083DACF10E0F5018081781708F45D
-:101FE0007083F5014081C7010E940D09112351F052
-:101FF000F501808190E0F4012081821B910988978E
-:1020000034F4C2C0F30140814E3F08F09EC0670126
-:10201000F3EDCF1AFEEFDF0A67E072E0C6010E941F
-:10202000C51987010D5C1E4F67E072E0C8010E9470
-:10203000C51962E0C6010E94791A6FED71E0C60110
-:102040000E94691A6BE3C6010E94791A312C37018C
-:1020500085ED681A8EEF780AF3018081381640F515
-:10206000432C512CF701E40DF51D84818823F1F0F8
-:1020700060E5C6010E94791A632DC6010E948C1A80
-:102080006DED71E0C6010E94691AC201880F991FA7
-:102090008E0D9F1DFC01E15EFE4F60817181C601C6
-:1020A0000E94B81A6BE3C6010E94791A3394D4CF08
-:1020B00062EE71E0C6010E94691A6BE3C8010E94DA
-:1020C000791A65EE71E0C8010E94691AF701608112
-:1020D000772767FD7095C8010E94B81A6BE3C801A5
-:1020E0000E94791A69EE71E0C8010E94691AF7012D
-:1020F000E45DFE4F6081772767FD7095C8010E94FF
-:10210000B81A6BE3C8010E94791AF701E35FFE4F2A
-:102110008081882349F06DEE71E0C8010E94691A40
-:102120006BE3C8010E94791A63E0C8010E94791A22
-:102130006AE0C8010E94791A9601F5014081F40114
-:102140006081C7010E94AA0BD1C0F4016081623096
-:10215000D8F0F501808190E08D3F9105ACF0461BF1
-:10216000F301408350E04F5F5F4F70E0665F7F4F49
-:102170006E0D7F1DC7010A960E94DD1F81E0F701E9
-:10218000E45FFE4F8083BBC0C7010E94A608B7C0B2
-:10219000F7018181811104C08281882309F4ABC0D9
-:1021A000F701EF5EFE4F80819181019709F0A3C096
-:1021B000F3018081883208F49EC06701F3EDCF1AE5
-:1021C000FEEFDF0A67E072E0C6010E94C5198701D1
-:1021D0000D5C1E4F67E072E0C8010E94C51962E005
-:1021E000C6010E94791A8EE18CA381E089A31AA20C
-:1021F000CE0101960E94EB0D29A187E090E0821BA1
-:1022000091097AA167E041E050E0262F30E0821783
-:1022100093074CF49A01062E01C0220F0A94EAF7A4
-:10222000722B6150F2CF7AA38FEF8FA388A789A773
-:102230008AA7FEA2EDA2CE0101960E94FA0DCE0160
-:1022400001960E94FA0D81E18DA7F7018281882312
-:1022500009F45FC0CE0101960E94F80C882309F4AE
-:1022600058C0CE0101960E94FF0D882309F451C089
-:1022700067E072E0CE018E960E946D1962EE71E009
-:10228000CE018E960E94C519BE01625D7F4FCE01C0
-:1022900001960E94FD0B62EF71E0C6010E94691A6F
-:1022A0006BE3C6010E94791AB601CE0101960E9425
-:1022B000580C6BE3C8010E94791AB801CE0101964F
-:1022C0000E94D30C63E0C8010E94791A6AE0C80139
-:1022D0000E94791A9801AE01425D5F4FB601C701B5
-:1022E0000E94920BCE018E960E94FF1881E0F701AA
-:1022F000E55FFE4F47CFF701E55FFE4F1082F70124
-:10230000E45FFE4F8081811182C0C7010E94A60850
-:102310007EC0F7018181882349F36FEE71E0C60129
-:102320000E94691A6BE3C6010E94791A512C570169
-:10233000F5EDAF1AFEEFBF0AF5018081581648F59A
-:10234000852C912CF701E80DF91D84818823F9F083
-:1023500060EC71E0C6010E94691A652DC6010E94F9
-:102360008C1A6DED71E0C6010E94691AC401880FD4
-:10237000991F8E0D9F1DFC01E15EFE4F60817181F2
-:10238000C6010E94B81A6BE3C6010E94791A5394E1
-:10239000D3CF62EE71E0C6010E94691A6BE3C801F7
-:1023A0000E94791A65EE71E0C8010E94691AF7016E
-:1023B0006081772767FD7095C8010E94B81A6BE3AA
-:1023C000C8010E94791AF701E35FFE4F80818823DC
-:1023D00049F06DEE71E0C8010E94691A6BE3C80113
-:1023E0000E94791A63E0C8010E94791A6AE0C80164
-:1023F0000E94791AF30140814150960160E0C701C3
-:102400000E94AA0BF701E45FFE4F10826FCFE396A4
-:102410000FB6F894DEBF0FBECDBFDF91CF911F91F5
-:102420000F91FF90EF90DF90CF90BF90AF909F9073
-:102430008F907F906F905F904F903F9008958F9214
-:102440009F92AF92BF92CF92DF92EF92FF920F9343
-:102450001F93CF93DF931F92CDB7DEB74C018C0152
-:10246000085F1E4FD8018C9190E08D3F910544F09C
-:1024700081E0F401E35FFE4F8083C4010E946F0F8F
-:10248000F401E05FFE4F10826401B9EECB1ABEEF9B
-:10249000DB0AD601ED91FC91119780819181129612
-:1024A0000D90BC91A02D2D913C91D8014C91509153
-:1024B00000047401B5EDEB1ABEEFFB0AD7016C9175
-:1024C000651708F45C93442361F082279327B92EA3
-:1024D000BB1CBB24BB1C81E04D3F09F480E0B8224B
-:1024E00005C0D7011C9210920004B12C608171814B
-:1024F000C40149830E94E708A82E498187FD2CC0AA
-:10250000F401E40FF11D8287423030F081858A1199
-:1025100003C0C4010E94A6088A2D880F990B880D5C
-:10252000991DFC01E15EFE4FD6018D919C912081A9
-:102530003181DC018D919C91280F391F37FF02C03A
-:102540002F5F3F4F3595279531832083F801808198
-:102550008F5F808320E012C040E060E0C4010E94F1
-:102560000D09D7018C91863041F480910004F4016B
-:10257000E80FF11D8481823024F421E0B1101DC0E8
-:1025800001C020E0F8018081A401455F5E4F5A013F
-:10259000883248F081E0DA018C93C4010E946F0F09
-:1025A000109200046AC0C40129830E94A608F501A4
-:1025B00010821092000429810BC0D8018C918832BE
-:1025C00038F083E090E0F401EF5EFE4F918380836A
-:1025D000222309F452C0F80140815091000480E0A8
-:1025E00090E0242F30E0F9013197280D391DBF010B
-:1025F000680F791F6F3FAFEF7A07E1F00197D901BC
-:10260000A80FB91F1A96AC91A513F1CFCB01019673
-:10261000481BD8014C9350E04F5F5F4F655F7F4F81
-:10262000680D791DC4010A960E94DD1FF8018081A2
-:102630008F5F808340910004D601ED91FC91208151
-:102640003181C401840F911D840F911DFC01E15E55
-:10265000FE4F31832083F8018081F401E80FF11DE2
-:1026600042878F5FD8018C934F5F409300044630C0
-:1026700021F410920004F70140830F90DF91CF9175
-:102680001F910F91FF90EF90DF90CF90BF90AF9090
-:102690009F908F900895CF93DF93EC01C55FDE4F3D
-:1026A0001882FC01E75EFE4F0190F081E02D208151
-:1026B0003181DC01A95EBE4F0D90BC91A02D2D9300
-:1026C0003C93DB012D913C91318320830E941F12AA
-:1026D0008881DF91CF91089508958230E8F4E82F42
-:1026E000F0E0EE0FFF1FE75FFE4F718360838130E4
-:1026F00041F0809169008C7F842B80936900E89A77
-:10270000089580916900440F551F440F551F837F22
-:10271000842B80936900E99A0895823078F481309F
-:1027200011F0E89801C0E998E82FF0E0EE0FFF1FE4
-:10273000E75FFE4F8CE693E19183808308951F92BB
-:102740000F920FB60F9211242F933F934F935F93E5
-:102750006F937F938F939F93AF93BF93EF93FF9369
-:10276000E0910901F0910A010995FF91EF91BF9164
-:10277000AF919F918F917F916F915F914F913F9119
-:102780002F910F900FBE0F901F9018951F920F92D0
-:102790000FB60F9211242F933F934F935F936F9334
-:1027A0007F938F939F93AF93BF93EF93FF93E091AA
-:1027B0000B01F0910C010995FF91EF91BF91AF9141
-:1027C0009F918F917F916F915F914F913F912F9149
-:1027D0000F900FBE0F901F9018951F920F920FB67B
-:1027E0000F9211242F933F938F939F93AF93BF9397
-:1027F0008091020490910304A0910404B091050417
-:102800003091010423E0230F2D3720F40196A11D00
-:10281000B11D05C026E8230F0296A11DB11D20930E
-:1028200001048093020490930304A0930404B093E2
-:1028300005048091060490910704A0910804B091CA
-:1028400009040196A11DB11D80930604909307040D
-:10285000A0930804B0930904BF91AF919F918F9109
-:102860003F912F910F900FBE0F901F9018952FB78B
-:10287000F894609102047091030480910404909193
-:1028800005042FBF08953FB7F894809106049091F6
-:102890000704A0910804B091090426B5A89B05C0BF
-:1028A0002F3F19F00196A11DB11D3FBF6627782F5C
-:1028B000892F9A2F620F711D811D911D42E0660FB5
-:1028C000771F881F991F4A95D1F70895CF92DF92FD
-:1028D000EF92FF92CF93DF936B017C010E94431430
-:1028E000EB01C114D104E104F10489F00E94921BB0
-:1028F0000E9443146C1B7D0B683E734090F381E093
-:10290000C81AD108E108F108C851DC4FEACFDF91BD
-:10291000CF91FF90EF90DF90CF9008958230910596
-:1029200038F0880F991F880F991F05970197F1F7C5
-:102930000895789484B5826084BD84B5816084BD37
-:1029400085B5826085BD85B5816085BDEEE6F0E028
-:10295000808181608083E1E8F0E010828081826084
-:102960008083808181608083E0E8F0E08081816005
-:102970008083E1EBF0E0808184608083E0EBF0E035
-:10298000808181608083EAE7F0E0808184608083D9
-:102990008081826080838081816080838081806883
-:1029A00080831092C1000895833081F028F4813033
-:1029B00099F08230A1F008958730A9F08830B9F0FD
-:1029C0008430D1F4809180008F7D03C0809180009D
-:1029D0008F7780938000089584B58F7702C084B587
-:1029E0008F7D84BD08958091B0008F7703C0809162
-:1029F000B0008F7D8093B0000895CF93DF9390E077
-:102A0000FC01E555FF4F2491FC01E154FF4F8491F7
-:102A1000882349F190E0880F991FFC01E352FF4F92
-:102A2000A591B4918D529F4FFC01C591D4919FB750
-:102A3000611108C0F8948C91209582238C93888131
-:102A400082230AC0623051F4F8948C91322F309571
-:102A500083238C938881822B888304C0F8948C9183
-:102A6000822B8C939FBFDF91CF9108950F931F937B
-:102A7000CF93DF931F92CDB7DEB7282F30E0F90157
-:102A8000E956FF4F8491F901E555FF4F1491F90183
-:102A9000E154FF4F04910023C9F0882321F069839A
-:102AA0000E94D4146981E02FF0E0EE0FFF1FED5279
-:102AB000FF4FA591B4919FB7F8948C91611103C019
-:102AC0001095812301C0812B8C939FBF0F90DF91C4
-:102AD000CF911F910F910895FC01818D228D90E07F
-:102AE000805C9F4F821B91098F7399270895FC0189
-:102AF000918D828D981731F0828DE80FF11D858DB3
-:102B000090E008958FEF9FEF0895FC01918D828DE5
-:102B1000981761F0828DDF01A80FB11D5D968C9131
-:102B2000928D9F5F9F73928F90E008958FEF9FEF3C
-:102B3000089589E097E1892B49F08EE598E0892B8B
-:102B400029F00E94091781110C945E080895FC0178
-:102B5000848DDF01A80FB11DA35ABF4F2C91848D26
-:102B600090E001968F739927848FA689B7892C935B
-:102B7000A089B1898C9180648C93938D848D9813F6
-:102B800006C00288F389E02D80818F7D80830895BF
-:102B9000CF93DF93EC01888D8823C9F0EA89FB8904
-:102BA000808185FD05C0A889B9898C9186FD0FC0FB
-:102BB0000FB607FCF5CF808185FFF2CFA889B989D0
-:102BC0008C9185FFEDCFCE010E94A715E7CFDF9155
-:102BD000CF910895CF92DF92FF920F931F93CF93DF
-:102BE000DF931F92CDB7DEB76C0181E0D601589616
-:102BF0008C9358975B969C915B975C968C915C97B5
-:102C0000981307C05096ED91FC915197808185FDF6
-:102C10002EC0F601038D10E00F5F1F4F0F731127B9
-:102C2000F02EF601848DF81211C00FB607FCF9CF13
-:102C3000D6015096ED91FC915197808185FFF1CF9F
-:102C4000C60169830E94A7156981EBCF838DE80FC8
-:102C5000F11DE35AFF4F6083D6015B960C935B979F
-:102C60005296ED91FC915397808180620CC0D60101
-:102C70005696ED91FC91579760835096ED91FC919B
-:102C8000519780818064808381E090E00F90DF9194
-:102C9000CF911F910F91FF90DF90CF900895BF9239
-:102CA000CF92DF92EF92FF92CF93DF93EC016A0114
-:102CB0007B01B22EE889F98982E08083411581EE9B
-:102CC000580761057105A1F060E079E08DE390E0BF
-:102CD000A70196010E94761D215031094109510931
-:102CE0005695479537952795211580E1380798F037
-:102CF000E889F989108260E874E88EE190E0A70124
-:102D000096010E94761D21503109410951095695BD
-:102D1000479537952795EC85FD853083EE85FF85B2
-:102D20002083188EEC89FD89B082EA89FB89808135
-:102D300080618083EA89FB89808188608083EA8959
-:102D4000FB89808180688083EA89FB8980818F7D0F
-:102D50008083DF91CF91FF90EF90DF90CF90BF9075
-:102D600008951F920F920FB60F9211242F938F93F5
-:102D70009F93EF93FF93E0911A04F0911B048081DD
-:102D8000E0912004F091210482FD12C09081809195
-:102D900023048F5F8F7320912404821751F0E091F8
-:102DA0002304F0E0E65FFB4F958F8093230401C07E
-:102DB0008081FF91EF919F918F912F910F900FBE86
-:102DC0000F901F9018951F920F920FB60F9211241B
-:102DD0002F933F934F935F936F937F938F939F9323
-:102DE000AF93BF93EF93FF938AE094E00E94A715FF
-:102DF000FF91EF91BF91AF919F918F917F916F91D3
-:102E00005F914F913F912F910F900FBE0F901F90A8
-:102E100018958AE094E00E946C1521E0892B09F452
-:102E200020E0822F089510920D0410920C0488EE79
-:102E300093E0A0E0B0E080930E0490930F04A09381
-:102E40001004B093110489EF91E090930B048093E8
-:102E50000A0485EC90E0909317048093160484ECA8
-:102E600090E0909319048093180480EC90E0909384
-:102E70001B0480931A0481EC90E090931D048093CE
-:102E80001C0482EC90E090931F0480931E0486EC57
-:102E900090E09093210480932004109223041092D8
-:102EA00024041092250410922604089508950E9487
-:102EB00099140E9456170E94C507C9E9D5E10E94DE
-:102EC00056072097E1F30E949915F9CFCF92DF9230
-:102ED000EF92FF920F931F93CF93DF937C016A01D0
-:102EE000EB0100E010E00C151D0571F06991D701B0
-:102EF000ED91FC910190F081E02DC7010995892B9E
-:102F000019F00F5F1F4FEFCFC801DF91CF911F91D5
-:102F10000F91FF90EF90DF90CF90089561157105AC
-:102F200081F0DB010D900020E9F7AD01415051091E
-:102F3000461B570BDC01ED91FC910280F381E02DE3
-:102F4000099480E090E00895EF92FF920F931F9311
-:102F5000CF93DF938C017B01C0E0D0E0F701EC0F51
-:102F6000FD1F6491662359F0F801A081B181ED91B4
-:102F7000FC91C8010995892B11F02196EFCFCE0164
-:102F8000DF91CF911F910F91FF90EF900895DC0199
-:102F9000ED91FC91DB0114964D915C9115976D912B
-:102FA0007C910280F381E02D0994DC01ED91FC918C
-:102FB0000190F081E02D099465E072E00C948E1789
-:102FC0000F931F93CF93DF93EC010E94A4178C0102
-:102FD000CE010E94DC17800F911FDF91CF911F91CE
-:102FE0000F9108950F931F93CF93DF93EC010E94ED
-:102FF000C7178C01CE010E94DC17800F911FDF9153
-:10300000CF911F910F9108950F931F93CF93DF934B
-:10301000EC010E948E178C01CE010E94DC17800FFC
-:10302000911FDF91CF911F910F9108958F929F92E1
-:10303000AF92BF92CF92DF92EF92FF920F931F93C6
-:10304000CF93DF93CDB7DEB7A1970FB6F894DEBF6D
-:103050000FBECDBF7C01C42EE52FCB01D22E19A20D
-:1030600021E02D1510F02AE0D22E8E010F5D1F4FAA
-:103070008D2C912CA12CB12C6C2D7E2FA5019401AF
-:103080000E94761D8C2DD29E8019112401501109A9
-:103090008A3014F4805D01C0895CF80180832115B9
-:1030A00031054105510521F0C22EE32FCA01E4CFBD
-:1030B000B801C7010E948E17A1960FB6F894DEBF23
-:1030C0000FBECDBFDF91CF911F910F91FF90EF9079
-:1030D000DF90CF90BF90AF909F908F900895CF9248
-:1030E000DF92EF92FF920F931F93CF93DF93EC0148
-:1030F0006A017B012115310579F4E881F98101909C
-:10310000F081E02D642FDF91CF911F910F91FF90FF
-:10311000EF90DF90CF9009942A303105E9F477FFE2
-:103120001AC06DE20E94D5178C0144275527BA01B9
-:103130004C195D096E097F092AE0CE010E9416181C
-:10314000800F911FDF91CF911F910F91FF90EF9012
-:10315000DF90CF9008952AE0B701A601CE01DF915C
-:10316000CF911F910F91FF90EF90DF90CF900C9433
-:1031700016189A01AB01662757FD6095762F0C94BF
-:103180006F180F931F93CF93DF93EC019A01AB015C
-:10319000662757FD6095762F0E946F188C01CE012F
-:1031A0000E94DC17800F911FDF91CF911F910F912B
-:1031B00008952115310541F4DC01ED91FC91019058
-:1031C000F081E02D642F09940C9416189A01462F73
-:1031D00050E060E070E00C94D9180F931F93CF93E8
-:1031E000DF93EC010E94D9188C01CE010E94DC17FC
-:1031F000800F911FDF91CF911F910F910895FC01D6
-:10320000808191810C94361ECF93DF93EC018881ED
-:103210009981009711F00E94361E198218821D8232
-:103220001C821B821A82DF91CF9108950F931F9306
-:10323000CF93DF93EC018B016F5F7F4F8881998182
-:103240000E94C51E009731F0998388831B830A83EF
-:1032500081E001C080E0DF91CF911F910F9108952F
-:10326000CF93DF93EC0188819981892B29F08A81A2
-:103270009B818617970760F4CE010E941619882358
-:1032800041F08C819D81892B19F4E881F9811082AC
-:1032900081E0DF91CF910895EF92FF920F931F93FA
-:1032A000CF93DF93EC017B018A01BA010E943019B0
-:1032B000811104C0CE010E94041907C01D830C8334
-:1032C000B701888199810E94EF1FCE01DF91CF91D4
-:1032D0001F910F91FF90EF900895FC0111821082D1
-:1032E00013821282158214826115710559F0FB0157
-:1032F00001900020E9F7AF0141505109461B570BDF
-:103300000C944C1908950F931F93CF93DF938C0166
-:10331000EB01FC0180819181009799F042815381FA
-:103320002C813D814217530750F0688179810E94BA
-:10333000EF1F8C819D81F8019583848313C00E94C7
-:10334000361E88819981F801918380838A819B81CF
-:10335000938382838C819D819583848319821882D3
-:103360001B821A821D821C82DF91CF911F910F91C7
-:103370000895CF93DF93EC018617970711F00E9411
-:103380008319CE01DF91CF910895CF93DF93EC01A4
-:103390006115710561F0FB0101900020E9F7AF01B3
-:1033A00041505109461B570B0E944C1902C00E9404
-:1033B0000419CE01DF91CF9108950F931F93CF93FE
-:1033C000DF93CDB7DEB729970FB6F894DEBF0FBEF7
-:1033D000CDBF8C01862FF8011182108213821282D8
-:1033E0001582148250E0BE016F5F7F4F90E00E9413
-:1033F0005220BE016F5F7F4FC8010E94C5192996F8
-:103400000FB6F894DEBF0FBECDBFDF91CF911F91F5
-:103410000F9108950F931F93CF93DF93CDB7DEB72E
-:1034200062970FB6F894DEBF0FBECDBF8C01CB0103
-:10343000F80111821082138212821582148250E0E8
-:10344000BE016F5F7F4F0E941F20BE016F5F7F4FE5
-:10345000C8010E94C51962960FB6F894DEBF0FBE70
-:10346000CDBFDF91CF911F910F910895EF92FF9201
-:103470000F931F93CF93DF93EC017B010C811D8190
-:103480006115710511F480E016C04115510591F0E8
-:10349000040F151FB8010E9430198823A1F3288159
-:1034A00039818C819D81B701820F931F0E94EF1F8C
-:1034B0001D830C8381E0DF91CF911F910F91FF90CD
-:1034C000EF900895FB0144815581608171810C94D6
-:1034D000361A6115710559F0FB0101900020E9F7DA
-:1034E000AF0141505109461B570B0C94361A80E02E
-:1034F0000895CF93DF9300D0CDB7DEB769831A82EA
-:1035000041E050E0BE016F5F7F4F0E94361A0F907E
-:103510000F90DF91CF910895EF92FF920F931F9339
-:10352000CF93DF9300D000D0CDB7DEB77C01862FDC
-:103530004AE08E010F5F1F4FB80190E00E942A20E1
-:10354000F80101900020E9F7AF0141505109401BFB
-:10355000510BB801C7010E94361A0F900F900F90BF
-:103560000F90DF91CF911F910F91FF90EF900895F1
-:10357000EF92FF920F931F93CF93DF93CDB7DEB7F8
-:1035800028970FB6F894DEBF0FBECDBF7C01CB01EC
-:103590004AE08E010F5F1F4FB8010E942A20F801F8
-:1035A00001900020E9F7AF0141505109401B510B38
-:1035B000B801C7010E94361A28960FB6F894DEBFEC
-:1035C0000FBECDBFDF91CF911F910F91FF90EF9074
-:1035D0000895FC01248135816217730748F48081C6
-:1035E0009181009729F0FC01E60FF71F8081089573
-:1035F00080E008950C94E91A0F931F93CF93DF9303
-:10360000EB0141155105E9F02097D9F0FC016481E7
-:10361000758126173707A0F4621B730B8A010150CE
-:1036200011096017710708F48B01FC016081718139
-:10363000620F731FA801CE010E94F61FC00FD11F99
-:103640001882DF91CF911F910F910895CF93DF934F
-:10365000FC01848195814817590778F4C081D18194
-:10366000FB0160817181CE01840F951F0E940520AE
-:10367000009719F08C1B9D0B02C08FEF9FEFDF911D
-:10368000CF910895BF92CF92DF92EF92FF920F9366
-:103690001F93CF93DF936C017B01EA01890124170B
-:1036A000350720F48D2FE901042F182F67E072E011
-:1036B000C6010E946D19D70114968D919C911597A2
-:1036C000C817D907C8F48017910708F48C01D701EF
-:1036D000ED91FC911197E00FF11FB08010826D9178
-:1036E0007C916C0F7D1FC6010E94C519D701ED9119
-:1036F000FC91E00FF11FB082C601DF91CF911F91C5
-:103700000F91FF90EF90DF90CF90BF900895FC0154
-:1037100080819181009711F00C94AD1F60E070E002
-:10372000CB01089508955058BB27AA270ED009C190
-:10373000FAD030F0FFD020F031F49F3F11F41EF4A6
-:10374000EFC00EF4E095E7FBE5C0E92F0BD180F365
-:10375000BA17620773078407950718F071F49EF58E
-:1037600023C10EF4E0950B2EBA2FA02D0B01B90149
-:1037700090010C01CA01A0011124FF27591B99F0E7
-:10378000593F50F4503E68F11A16F040A22F232FF3
-:10379000342F4427585FF3CF469537952795A79543
-:1037A000F0405395C9F77EF41F16BA0B620B730BEA
-:1037B000840BBAF09150A1F0FF0FBB1F661F771F5B
-:1037C000881FC2F70EC0BA0F621F731F841F48F410
-:1037D000879577956795B795F7959E3F08F0B3CF96
-:1037E0009395880F08F09927EE0F97958795089580
-:1037F00004D06894B111D9C00895BCD088F09F5707
-:1038000090F0B92F9927B751A0F0D1F0660F771F2C
-:10381000881F991F1AF0BA95C9F712C0B13081F00C
-:10382000C3D0B1E00895C0C0672F782F8827B85F54
-:1038300039F0B93FCCF3869577956795B395D9F76D
-:103840003EF490958095709561957F4F8F4F9F4F77
-:103850000895E89409C097FB3EF490958095709583
-:1038600061957F4F8F4F9F4F9923A9F0F92F96E9CC
-:10387000BB279395F695879577956795B795F11141
-:10388000F8CFFAF4BB0F11F460FF1BC06F5F7F4FDE
-:103890008F4F9F4F16C0882311F096E911C07723F0
-:1038A00021F09EE8872F762F05C0662371F096E8F9
-:1038B000862F70E060E02AF09A95660F771F881FC8
-:1038C000DAF7880F9695879597F90895990F00086C
-:1038D000550FAA0BE0E8FEEF16161706E807F907E2
-:1038E000C0F012161306E407F50798F0621B730B7D
-:1038F000840B950B39F40A2661F0232B242B252BFE
-:1039000021F408950A2609F4A140A6958FEF811DA0
-:10391000811D089597F99F6780E870E060E0089541
-:103920009FEF80EC089500240A94161617061806D7
-:103930000906089500240A941216130614060506B3
-:103940000895092E0394000C11F4882352F0BB0F44
-:1039500040F4BF2B11F460FF04C06F5F7F4F8F4FA7
-:103960009F4F089557FD9058440F551F59F05F3FE2
-:1039700071F04795880F97FB991F61F09F3F79F091
-:1039800087950895121613061406551FF2CF469513
-:10399000F1DF08C0161617061806991FF1CF869595
-:1039A0007105610508940895E894BB276627772779
-:1039B000CB0197F908958ADF08F48FEF08950BD0B3
-:1039C000C0CFB1DF28F0B6DF18F0952309F0A2CF01
-:1039D000A7CF1124EACFC6DFA0F3959FD1F3950FAF
-:1039E00050E0551F629FF001729FBB27F00DB11D83
-:1039F000639FAA27F00DB11DAA1F649F6627B00D13
-:103A0000A11D661F829F2227B00DA11D621F739FFB
-:103A1000B00DA11D621F839FA00D611D221F749F09
-:103A20003327A00D611D231F849F600D211D822F50
-:103A3000762F6A2F11249F5750408AF0E1F0882397
-:103A40004AF0EE0FFF1FBB1F661F771F881F9150A4
-:103A50005040A9F79E3F510570F05CCFA6CF5F3F65
-:103A6000ECF3983EDCF3869577956795B795F795D7
-:103A7000E7959F5FC1F7FE2B880F911D969587955F
-:103A800097F90895991B79E004C0991F961708F0DB
-:103A9000961B881F7A95C9F780950895AA1BBB1BB2
-:103AA00051E107C0AA1FBB1FA617B70710F0A61B3E
-:103AB000B70B881F991F5A95A9F780959095BC015F
-:103AC000CD01089597FB072E16F4009407D077FDDB
-:103AD00009D00E944E1D07FC05D03EF490958195BB
-:103AE0009F4F0895709561957F4F0895A1E21A2E1A
-:103AF000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F92
-:103B0000A217B307E407F50720F0A21BB30BE40BE1
-:103B1000F50B661F771F881F991F1A9469F7609528
-:103B20007095809590959B01AC01BD01CF010895E2
-:103B3000EE0FFF1F0590F491E02D0994CF93DF93D2
-:103B40008230910510F482E090E0E091A904F091B8
-:103B5000AA0420E030E0A0E0B0E0309739F14081E5
-:103B6000518148175907B8F04817590771F48281F5
-:103B70009381109729F013969C938E9312972CC0E3
-:103B80009093AA048093A90427C02115310531F030
-:103B90004217530718F0A901DB0101C0EF019A0198
-:103BA000BD01DF010280F381E02DD7CF2115310562
-:103BB000F9F0281B390B2430310580F48A819B8170
-:103BC0006115710521F0FB019383828304C09093FA
-:103BD000AA048093A904FE01329644C0FE01E20FBC
-:103BE000F31F8193919322503109398328833AC07E
-:103BF0002091A7043091A804232B41F420910201C5
-:103C0000309103013093A8042093A7042091000170
-:103C1000309101012115310541F42DB73EB7409196
-:103C2000040150910501241B350BE091A704F0918C
-:103C3000A804E217F307A0F42E1B3F0B281739073F
-:103C400078F0AC014E5F5F4F2417350748F04E0FF8
-:103C50005F1F5093A8044093A7048193919302C0DF
-:103C6000E0E0F0E0CF01DF91CF910895CF93DF93B3
-:103C7000009709F487C0FC01329713821282C09129
-:103C8000A904D091AA04209781F420813181280FC2
-:103C9000391F8091A7049091A8048217930779F5A2
-:103CA000F093A804E093A7046DC0DE0120E030E0AB
-:103CB000AE17BF0750F412964D915C9113979D017A
-:103CC0004115510509F1DA01F3CFB383A283408195
-:103CD0005181840F951F8A179B0771F48D919C91D8
-:103CE0001197840F951F02969183808312968D9170
-:103CF0009C911397938382832115310529F4F093C6
-:103D0000AA04E093A9043EC0D9011396FC93EE9354
-:103D100012974D915D91A40FB51FEA17FB0779F437
-:103D200080819181840F951F0296D90111969C93F1
-:103D30008E938281938113969C938E931297E0E0E9
-:103D4000F0E08A819B81009719F0FE01EC01F9CF28
-:103D5000CE01029628813981820F931F2091A704FA
-:103D60003091A8042817390769F4309729F4109284
-:103D7000AA041092A90402C013821282D093A8044C
-:103D8000C093A704DF91CF910895A0E0B0E0EBECE1
-:103D9000FEE10C943B23EC01CB01209719F40E9427
-:103DA0009E1DB8C0FE01E60FF71F9E01225031098B
-:103DB000E217F30708F4ACC0D9010D911C911197DB
-:103DC00006171707B8F00530110508F49FC0A801C1
-:103DD000445051094617570708F498C0025011097A
-:103DE000061B170B019311936D937C93CF010E94D7
-:103DF000361E8CC05B01A01AB10A4E01800E911EC6
-:103E0000A091A904B091AA04612C712C60E070E02B
-:103E1000109709F449C0A815B905C9F5ED90FC90B3
-:103E20001197670142E0C40ED11CCA14DB0478F17B
-:103E300047018A189B08640142E0C40ED11C129607
-:103E4000BC9012971396AC91B5E0CB16D10440F01C
-:103E5000B282A38391828082D9018D939C9309C001
-:103E60000E5F1F4F0E0D1F1DF90111830083EB2DF7
-:103E7000FA2F6115710531F0DB011396FC93EE9377
-:103E8000129744C0F093AA04E093A9043FC06D9137
-:103E90007C9111976616770608F43B01BD011296D6
-:103EA0000D90BC91A02DB4CF6091A7047091A8048F
-:103EB00068157905E9F468167906D0F44091000197
-:103EC000509101014115510541F44DB75EB7609124
-:103ED000040170910501461B570BE417F507C0F468
-:103EE000F093A804E093A704F901918380830EC0A6
-:103EF0000E949E1D7C01009759F0A801BE010E94FE
-:103F0000D41FCE010E94361EC70104C0CE0102C0DC
-:103F100080E090E0CDB7DEB7EEE00C945723FC01D3
-:103F200088279927E89421912032E9F3293010F06D
-:103F30002E30C8F32B3241F02D3239F4689404C08E
-:103F40000E944A20820F911D219120532A30C0F3F4
-:103F50001EF4909581959F4F08951F93FC0199271A
-:103F60008827BC01E89411911032E9F3193010F060
-:103F70001E30C8F31B3251F01D3249F4689406C05C
-:103F80000E943520610F711D811D911D11911053EB
-:103F90001A30B0F33EF490958095709561957F4FFF
-:103FA0008F4F9F4F1F910895FB01DC0102C00190CC
-:103FB0000D9241505040D8F708956817790768F47A
-:103FC000FB01DC01E40FF51FA40FB51F02C0029036
-:103FD0000E9241505040D8F708950C94D41FFB0125
-:103FE000DC0101900D920020E1F70895FB01DC0156
-:103FF0004150504048F001900D920020C9F701C097
-:104000001D9241505040E0F70895FB015191552316
-:10401000A9F0BF01DC014D9145174111E1F759F4B9
-:10402000CD010190002049F04D9140154111C9F397
-:10403000FB014111EFCF81E090E0019708954532F7
-:10404000510520F4423010F00C942A20FB0110821C
-:10405000CB010895BB274A3031F4992322F4BDE205
-:10406000909581959F4F0C945E20592F482F372FA4
-:10407000262F660F771F881F991F660F771F881FCF
-:10408000991F620F731F841F951F660F771F881F6C
-:10409000991F08957AE0979F902D879F802D910D0D
-:1040A000112408954532510520F4423010F00C944B
-:1040B0005D20FB011082CB010895BB27FB01552732
-:1040C000AA27880F991FAA1FA41710F0A41B839575
-:1040D0005051B9F7A05DAA3308F0A95DA1930097EC
-:1040E00079F7B111B1931192CB010C949722AEE004
-:1040F000B0E0EDE7F0E20C9445230D891E8986E0DF
-:104100008C831A8309838FEF9FE79E838D83AE0193
-:10411000475E5F4F6F89788DCE0101960E9499208E
-:10412000EF81F885E00FF11F10822E96E4E00C94E9
-:104130006123ACE0B0E0EFE9F0E20C9437237C01BE
-:104140006B018A01FC0117821682838181FFBDC148
-:10415000CE0101964C01F7019381F60193FD859103
-:1041600093FF81916F01882309F4ABC1853239F443
-:1041700093FD859193FF81916F01853229F4B701F9
-:1041800090E00E94A722E7CF512C312C20E0203272
-:10419000A0F48B3269F030F4803259F0833269F444
-:1041A00020612CC08D3239F0803339F4216026C073
-:1041B0002260246023C0286021C027FD27C030ED85
-:1041C000380F3A3078F426FF06C0FAE05F9E300DD3
-:1041D0001124532E13C08AE0389E300D1124332E43
-:1041E00020620CC08E3221F426FD6BC1206406C013
-:1041F0008C3611F4206802C0883641F4F60193FD34
-:10420000859193FF81916F018111C1CF982F9F7D7F
-:104210009554933028F40C5F1F4FFFE3F9830DC0D2
-:10422000833631F0833771F0833509F05BC022C0EB
-:10423000F801808189830E5F1F4F44244394512CE1
-:10424000540115C03801F2E06F0E711CF801A08016
-:10425000B18026FF03C0652D70E002C06FEF7FEFD5
-:10426000C5012C870E948C222C0183012C852F777D
-:10427000222E17C03801F2E06F0E711CF801A080E9
-:10428000B18026FF03C0652D70E002C06FEF7FEFA5
-:10429000C5012C870E9481222C012C852068222EAA
-:1042A000830123FC1BC0832D90E048165906B0F40F
-:1042B000B70180E290E00E94A7223A94F4CFF50182
-:1042C00027FC859127FE81915F01B70190E00E9454
-:1042D000A72231103A94F1E04F1A510841145104C9
-:1042E00071F7E5C0843611F0893639F5F80127FFFA
-:1042F00007C060817181828193810C5F1F4F08C06C
-:1043000060817181882777FD8095982F0E5F1F4F00
-:104310002F76B22E97FF09C0909580957095619584
-:104320007F4F8F4F9F4F2068B22E2AE030E0A401CC
-:104330000E94D922A82EA81844C0853729F42F7EC0
-:10434000B22E2AE030E025C0F22FF97FBF2E8F3643
-:10435000C1F018F4883579F0B4C0803719F0883787
-:1043600021F0AFC02F2F2061B22EB4FE0DC08B2DD7
-:104370008460B82E09C024FF0AC09F2F9660B92E12
-:1043800006C028E030E005C020E130E002C020E1B6
-:1043900032E0F801B7FE07C06081718182819381AC
-:1043A0000C5F1F4F06C06081718180E090E00E5F5E
-:1043B0001F4FA4010E94D922A82EA818FB2DFF7719
-:1043C000BF2EB6FE0BC02B2D2E7FA51450F4B4FECD
-:1043D0000AC0B2FC08C02B2D2E7E05C07A2C2B2DD6
-:1043E00003C07A2C01C0752C24FF0DC0FE01EA0D1C
-:1043F000F11D8081803311F4297E09C022FF06C09F
-:104400007394739404C0822F867809F0739423FD0B
-:1044100013C020FF06C05A2C731418F4530C5718FD
-:10442000732C731468F4B70180E290E02C870E942B
-:10443000A72273942C85F5CF731410F4371801C09C
-:10444000312C24FF12C0B70180E390E02C870E943A
-:10445000A7222C8522FF17C021FF03C088E590E02A
-:1044600002C088E790E0B7010CC0822F867859F02F
-:1044700021FD02C080E201C08BE227FD8DE2B70181
-:1044800090E00E94A722A51438F4B70180E390E0E1
-:104490000E94A7225A94F7CFAA94F401EA0DF11DC5
-:1044A0008081B70190E00E94A722A110F5CF3320B0
-:1044B00009F451CEB70180E290E00E94A7223A941D
-:1044C000F6CFF7018681978102C08FEF9FEF2C9680
-:1044D000E2E10C945323F999FECF92BD81BDF89A85
-:1044E000992780B50895262FF999FECF1FBA92BD5E
-:1044F00081BD20BD0FB6F894FA9AF99A0FBE0196C5
-:104500000895FC010590615070400110D8F7809526
-:1045100090958E0F9F1F0895FC016150704001908F
-:104520000110D8F7809590958E0F9F1F0895DC019C
-:10453000FC01672F71917723E1F7329704C07C91DA
-:104540006D9370836291AE17BF07C8F308950F9300
-:104550001F93CF93DF93182F092FEB018B8181FDE0
-:1045600003C08FEF9FEF20C082FF10C04E815F819C
-:104570002C813D81421753077CF4E881F9819F012A
-:104580002F5F3F4F39832883108306C0E885F98564
-:10459000812F0995892B29F72E813F812F5F3F4F6E
-:1045A0003F832E83812F902FDF91CF911F910F9109
-:1045B0000895FA01AA27283051F1203181F1E894B9
-:1045C0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E006
-:1045D0003ED0B4E03CD0670F781F891F9A1FA11D01
-:1045E000680F791F8A1F911DA11D6A0F711D811D02
-:1045F000911DA11D20D009F468943F912AE0269FC7
-:1046000011243019305D3193DEF6CF010895462F25
-:104610004770405D4193B3E00FD0C9F7F6CF462F06
-:104620004F70405D4A3318F0495D31FD405241936F
-:1046300002D0A9F7EACFB4E0A6959795879577952C
-:104640006795BA95C9F700976105710508959B01B3
-:10465000AC010A2E06945795479537952795BA953C
-:10466000C9F7620F731F841F951FA01D08952F9215
-:104670003F924F925F926F927F928F929F92AF92F2
-:10468000BF92CF92DF92EF92FF920F931F93CF933F
-:10469000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFD6
-:1046A0000FBECDBF09942A88398848885F846E84FC
-:1046B0007D848C849B84AA84B984C884DF80EE8046
-:1046C000FD800C811B81AA81B981CE0FD11D0FB64F
-:1046D000F894DEBF0FBECDBFED01089510E0CCEE23
-:1046E000D0E004C0FE010E949A1D2296CE3ED10762
-:0646F000C9F7F894FFCFAA
-:1046F6000000AB0480002C01066C136C133B0049D0
-:1047060054506172616D733A20004F4B005620334E
-:104716002E322E302D623132205349474E414C64A1
-:1047260075696E6F202D20636F6D70696C656420EE
-:1047360061742046656220313320323031362032B2
-:10474600313A33373A33330053796E633A200020D7
-:104756002D3E2053796E63466163743A20002C2007
-:10476600436C6F636B3A20002C20546F6C3A200028
-:104776002C20506174744C656E3A20002C205075C4
-:104786006C73653A20002C20002C206D53746172E6
-:10479600743A20005369676E616C3A20002E20003F
-:1047A600205B005D005061747465726E3A200020D3
-:1047B60050002A5B002C0025303258004C4C3D003E
-:1047C6004C483D00534C3D0053483D00433D004D91
-:1047D6005300443D0043503D0053503D004F004DB3
-:1047E60055004D430000000000EA1566176C15855C
-:1047F600157715C8150D0A006E616E00696E6600A4
-:064806006F7666002E0033
+:1000D00003030301020408102040800102040810F9
+:1000E0002001020408102000CB18BF1811241FBEE5
+:1000F000CFEFD8E0DEBFCDBF11E0A0E0B1E0E0EC93
+:10010000F3E402C005900D92AC39B107D9F724E0B1
+:10011000ACE9B1E001C01D92A435B207E1F710E0EF
+:10012000C5E7D0E004C02197FE010E94B419C4378E
+:10013000D107C9F70E949D110C94D3210C940000A3
+:100140000E949E1B2F923F924F925F926F927F92DE
+:100150008F929F92AF92BF92CF92DF92EF92FF92D7
+:100160000F931F93CF93DF93CDB7DEB7AF970FB643
+:10017000F894DEBF0FBECDBF8091E703811106C0AA
+:100180008091B103883210F40C94E7091092B40303
+:1001900060E080E00E94E70F8090D803882D90E017
+:1001A0009C01215031093E8F2D8F8091C403909185
+:1001B000C503A091C603B091C7038F8B988FA98FF9
+:1001C000BA8F9091B1039B8FF12C8F2D90E0ED8D24
+:1001D000FE8D8E179F070CF0AFC0FC01E955FD4F57
+:1001E0009F012C5F3F4F4481442309F4A3C0EE24B8
+:1001F000E394EF0C880F991FDC01A853BC4FBA8B16
+:10020000A98B3E8B2D8BE81408F094C02E2C312C3A
+:10021000F101E955FD4F9480992009F489C0E989DD
+:10022000FA89A080B180F101EE0FFF1FE853FC4F67
+:1002300000811181C8018A259B25990F880B982F71
+:10024000892B09F075C0B80117FF04C0662777270E
+:10025000601B710B072E000C880B990B0E945A2013
+:100260002F89388D498D5A8D0E94B9202B013C0170
+:100270006801CA18DB08D7FE03C0D194C194D10825
+:1002800020E030E040E05FE3C301B2010E94B9200A
+:100290009B01AC01C301B2010E94BB190E94991AD3
+:1002A0006C157D050CF444C0E3EBF2E08E2F23EBDC
+:1002B00032E0821B3B8D831730F480818E1101C0A8
+:1002C000F0823196F3CFAD89BE89DC90492D50E0A4
+:1002D000ED2DF0E09F01D5010E94AD19049F900122
+:1002E000059F300D149F300D11248901330F220B0F
+:1002F000330B600F711F821F931FE40FF51F9F01C7
+:10030000FF0F440B550B0E948E19E989FA8931833E
+:1003100020839D0CAD89BE899C92F101E955FD4F6A
+:100320001482F101EE0FFF1FE853FC4F118210827F
+:10033000E39469CFF39449CF60E080E00E94E70F37
+:100340008FEF8093A7026090D8037090B10358ECB0
+:10035000C52E53E0D52E00E010E0EE24EA94FE2CEA
+:10036000872C912CA12CB12C061508F059C0FFEF59
+:10037000EF16FF0611F5D6018D919C9197FD1DC0DA
+:10038000F801E955FD4F648170E080E090E00E9443
+:100390005A201B012C01C501B4010E945A202BE7F1
+:1003A00034E14EE25EE30E94B9209B01AC01C20140
+:1003B000B1010E94CF1A181664F1F6018081918173
+:1003C00097FD28C0F701EE0FFF1FE853FC4F208177
+:1003D000318182179307F4F4F801E955FD4F6481E8
+:1003E00070E080E090E00E945A201B012C01C501C2
+:1003F000B4010E945A202BE734E14EE25EE30E94F2
+:10040000B9209B01AC01C201B1010E94CF1A18169C
+:100410000CF478010F5F1F4FF2E0CF0ED11CA4CF78
+:100420002FEFE216F20641F0E092A70281E090E0A1
+:100430009093BB038093BA038091BA039091BB035E
+:10044000019709F074C04FEF460DE091A7020E2E00
+:10045000000CFF0B072D10E0480131E0831A9108D2
+:10046000CF01880F991FDC01A853BC4F7D0137E0F5
+:10047000632E085211094F3F09F457C0C42E042EB1
+:10048000000CDD08D601AA0FBB1FA853BC4F2D914D
+:100490003C9137FF48C03195219531092836B2E4A7
+:1004A0003B070CF040C0D701AD90BC90C901B5012D
+:1004B0000E94441968327105B0F56A9CC0016B9CBA
+:1004C000900D11248217930770F5D601A955BD4FE1
+:1004D00014968C918250863030F550E0852F90E054
+:1004E0008815990584F4DC01A955BD4F1D962C9102
+:1004F0001D9730E02C153D05A1F41C962C9130E0A1
+:100500002E173F0771F4801791076CF44093DA03BC
+:1005100082E090E09093BB038093BA035093B203C0
+:1005200006C05F5FDBCF4150A6CF4093DA038091D6
+:10053000AA02882309F427C18091BA039091BB03D2
+:10054000029709F020C1B7E2B71508F01CC18091ED
+:10055000B20392E0980F9093B3036091DA03062EF2
+:10056000000C770BA091A7020A2E000CBB0B472DA5
+:1005700050E041505109292F30E024173507A4F4E9
+:10058000F901E955FD4F258530E02617370751F46D
+:10059000248530E02A173B0729F491509093B30348
+:1005A00011E005C09E5FE7CF9093B30310E09091F8
+:1005B000B303791610F47092B3036091B3030E94F1
+:1005C000E70F112351F08091B30390E02091B20323
+:1005D000821B9109889734F4CFC08091B1038E3F7C
+:1005E00008F0B8C066E671E08BED93E00E941C1144
+:1005F00066E671E081EE93E00E941C1162E08BEDF3
+:1006000093E00E94CF1067E671E08BED93E00E94CB
+:10061000E2106BE38BED93E00E94CF1010E080912D
+:10062000D803181778F5212F30E0C901880F991FDA
+:10063000FC01E853FC4F7F0180819181892B01F1FE
+:10064000F901E955FD4F84818823D1F060E58BEDF8
+:1006500093E00E94CF10812F0E94C10F65E971E0E5
+:100660008BED93E00E94E210D7016D917C918BEDB0
+:1006700093E00E949F106BE38BED93E00E94CF10FC
+:100680001F5FCDCF6AE671E08BED93E00E94E21030
+:100690006BE381EE93E00E94CF106DE671E081EE96
+:1006A00093E00E94E2106091A702062E000C770BE7
+:1006B00081EE93E00E949F106BE381EE93E00E9435
+:1006C000CF1061E771E081EE93E00E94E21060914B
+:1006D000DA03062E000C770B81EE93E00E949F1048
+:1006E0006BE381EE93E00E94CF108091B6038823E4
+:1006F00059F065E771E081EE93E00E94E2106BE350
+:1007000081EE93E00E94CF1063E081EE93E00E94BF
+:10071000CF106AE081EE93E00E94CF100091B30306
+:100720001091B2038BED93E00E94B60E011768F0B2
+:10073000E12FF0E0E955FD4F648570E080E090E046
+:100740004AE00E94E70E1F5FF1CF81EE93E00E9426
+:10075000B60E16C06091B203623070F08091B303A0
+:1007600090E08D3F910544F087EA92E00E94FC0DF5
+:1007700081E08093B50307C087EA92E00E94BD0D37
+:1007800081E08093B4038091B403811120C68091ED
+:10079000A802811105C08091A902882309F417C617
+:1007A00066E671E08BED93E00E941C1166E671E055
+:1007B00081EE93E00E941C1162E08BED93E00E94B9
+:1007C000CF10B091A902BF8BBB2309F453C5809110
+:1007D000F301811148C082E38093E70181E08093B7
+:1007E000E4011092E5018FEA91E00E94AD0D809145
+:1007F000E40127E030E0281B31099091E50187E012
+:1008000061E070E0482F50E0241735074CF4AB014D
+:10081000082E01C0440F0A94EAF7942B8150F2CFBE
+:100820009093E5018FEF8093EA018093EB01809331
+:10083000EC018093ED011092F1011092F20187EA30
+:1008400092E09093E9018093E8011092EF011092F9
+:10085000EE0184E18093F0018FEA91E00E94AD0DFA
+:1008600081E08093F3018091E70381111BC08FEF3A
+:100870008093EA018093EB018093EC018093ED017A
+:100880001092F1011092F2011092EF011092EE011C
+:1008900084E18093F0018FEA91E00E94AD0D81E147
+:1008A0008093F0018091E703882381F08091E80133
+:1008B0009091E901FC01E25FFE4F108233971082B4
+:1008C000E12C912CF12CCC24C394D1C12090E801CF
+:1008D0003090E901F101EF5CFE4F1081143008F413
+:1008E000BEC4B797608170E080E090E00E945A201B
+:1008F0002AE037ED43E25DE30E94B9206B017C0101
+:1009000020E030E0A9010E94CF1A20E030E040E072
+:100910005FE387FD05C0C701B6010E94BB1904C093
+:10092000C701B6010E94BA190E94991A7101E4E048
+:10093000EE0EF11CD101AF5DBE4FC12C40E0F701BE
+:1009400081917F01861758F15C2D852F90E055230A
+:10095000F1F0FE01E80FF91F70819101270F311DA1
+:10096000270F311DF901EF5DFE4F2D913C9111973D
+:100970000190F081E02D2E173F074CF4E1E0F0E00C
+:10098000EC0FFD1FE80FF91F70835150DECFE1E03F
+:10099000F0E0EC0FFD1FE80FF91F4083C3944F5F99
+:1009A00012964113CCCF1091EA010091EC01E09036
+:1009B000EB01F090ED019E012F5F3F4F388B2F87A9
+:1009C0003E8F2D8F5F855DA7C101865F9E4F9FA7DC
+:1009D0008EA78D8D2F85821B8C1508F091C0AD8D53
+:1009E000BE8D2D91BE8FAD8FC101820F911D820FE3
+:1009F000911DFC01EF5DFE4F208131813C8F2B8FDB
+:100A00001216130634F7220F331F38A72FA3AE0197
+:100A10004F5F5F4F5CA34BA31FEF0FEFEE24EA94F1
+:100A2000FF24FA941A8A198A19A21AA28FEF9FEF4B
+:100A30009E8B8D8B2B8D3C8D032E000C440B550B08
+:100A400029A73AA74BA75CA78BA1FDA58F1B8C15E7
+:100A500008F0BFCFABA1BCA1DD90BCA3ABA3ED2D33
+:100A6000F0E0F8A3EF8FEE0FFF1FE20DF31DEF5D37
+:100A7000FE4F8080918069A57AA58BA59CA50E94D8
+:100A80005A202B013C019EA28DA297FE06C0222770
+:100A90003327281939093EA32DA3AB8CBC8C4DA15B
+:100AA0005EA1A41AB50AB7FE03C0B194A194B1081F
+:100AB00020E030E040E05FE3C301B2010E94B920D2
+:100AC0000E94991A6A157B050CF046C3AFA0B8A422
+:100AD0008DA19EA1A81AB90AB7FE03C0B194A19432
+:100AE000B1082DEC3CEC4CE45FE3C301B2010E9481
+:100AF000B9200E94991A6A157B050CF071C4A4CF25
+:100B0000F092ED01E092EB010093EC011093EA0109
+:100B1000A6C3D394D71408F0E5C0F801ED0DF11D7C
+:100B2000848590E08417950709F0F3C48F8862E00C
+:100B300070E0260E371E882061F3DF10FDC4DD2033
+:100B400009F4FAC443859801240F311D240F311D87
+:100B5000F901EF5DFE4F20813181B90137FF04C0FB
+:100B600066277727621B730B61304DE774070CF023
+:100B7000E3C4880F991F800F911FFC01EF5DFE4FAA
+:100B80008081918182279327990F880B982F892B39
+:100B900009F4D2C4072E000C880B990B0E945A202E
+:100BA0002B013C016091EE017091EF01072E000CCA
+:100BB000880B990B0E945A20698B7A8B8B8B9C8BAC
+:100BC0009B01AC01C301B2010E94271A4B015C01D9
+:100BD00020E030E0A9010E94CF1A20E030E040E0A0
+:100BE0005FE387FD9AC4C501B4010E94BB190E944E
+:100BF000991A623071050CF49FC4072E000C880B03
+:100C0000990B0E945A2029893A894B895C890E9454
+:100C1000B9209B01AC01C301B2010E94271A9B01BC
+:100C2000AC0160E070E080E89FE30E94BA194B01DC
+:100C30005C0120E030E0A9010E94CF1A18160CF0E8
+:100C400071C429E23CE54FE85DE3C501B4010E94AF
+:100C5000532018160CF470C4F801E55FFE4F808134
+:100C600081508083FF24F394FD0C99249394009188
+:100C7000E8011091E901F801E65FFE4F9081F91655
+:100C800008F081C08091F10181112CC0F801EF0DB5
+:100C9000F11D848590E04091EA01042E000C550B73
+:100CA000A091EC012091EB01A090ED018417950734
+:100CB00009F418C4622F022E000C770B86179707D1
+:100CC00009F410C46A2F0A2E000C770B86179707B9
+:100CD00009F408C46A2D0A2C000C770B86179707B5
+:100CE00009F400C48091F201882309F44AC080917C
+:100CF000F101882309F445C0AF2CB12CF801EA0DAD
+:100D0000FB1D848590E02091EC01022E000C330B3A
+:100D10008217930709F46FC32091ED01022E000C96
+:100D2000330B8217930709F466C32091EA01022E60
+:100D3000000C330B8217930709F4B7C32091EB0122
+:100D4000022E000C330B8217930709F4AEC3809177
+:100D5000F001082E000C990B2091E2013091E30183
+:100D60002817390708F04DC01092F1011092F201D6
+:100D70008FEA91E00E94AD0D912C8091F1018111DB
+:100D80003DC3F39474CFD801A45FBE4F81E0982691
+:100D90008F2D89198C932EEFF21249C09E3F09F0D6
+:100DA00046C011976C916230F0F08091F00187FDA0
+:100DB0008F5F8595082E000C990B2091E2013091F0
+:100DC000E3018217930778F4C8010E94FC0D80911B
+:100DD000E8019091E901FC01E25FFE4F21E02083F0
+:100DE000F29620833CC28C91811121C0D801A05C75
+:100DF000BE4F81E08C931082F801E25FFE4F80834A
+:100E00002EC2F801E45FFE4FEE24E3949E248F2D62
+:100E1000891980836F2DC8010E94FC0DE091E801C3
+:100E2000F091E901E25FFE4FE0821092F1018091C2
+:100E3000F001082E000C990B2091E2013091E301A2
+:100E40002817390708F40BC266E671E0CE0109964F
+:100E50000E9442116AE671E0CE0109960E941C11BF
+:100E600080E390E3A0E089839A83AB836091E20101
+:100E70007091E30176956795769567956E5F7F4FE4
+:100E8000CE0109960E944A10D12C8E010F5F1F4F90
+:100E900067E7A62E61E0B62E4091E10150E02D2DCE
+:100EA00030E08091E701ED2C0D2C000CFF0890E064
+:100EB00024173507F4F4E816F9062CF4F701E15588
+:100EC000FE4F808101C08FEF1F928F93BF92AF9230
+:100ED0001F930F930E94EE1BB801CE0109960E944A
+:100EE000E210D3940F900F900F900F900F900F90EF
+:100EF000D3CFE816F9062CF4F701E155FE4F8081B7
+:100F000001C08FEF82958F701F928F938CE791E0D5
+:100F10009F938F931F930F930E94EE1BB801CE01F6
+:100F200009960E94E2108091E2019091E30187709E
+:100F3000992701970F900F900F900F900F900F909F
+:100F4000049710F18091E70190E0E816F9062CF47F
+:100F5000F701E155FE4F808101C08FEF8F701F9226
+:100F60008F938CE791E09F938F931F930F930E9431
+:100F7000EE1BB801CE0109960E94E2100F900F906F
+:100F80000F900F900F900F9061E871E08BED93E060
+:100F90000E94E2106BE38BED93E00E94CF1060E2C1
+:100FA00070E08BED93E00E944A108BED93E0009788
+:100FB00009F472C064E871E00E94E2108091E801D7
+:100FC0009091E901E091EA01EE0FFF0BE80FF91FA4
+:100FD000EF5DFE4F608171818BED93E00E949F1069
+:100FE0006BE38BED93E00E94CF1068E871E08BED2E
+:100FF00093E00E94E2108091E8019091E901E09174
+:10100000EB01EE0FFF0BE80FF91FEF5DFE4F608164
+:1010100071818BED93E00E949F106BE38BED93E069
+:101020000E94CF106CE871E08BED93E00E94E2101B
+:101030008091E8019091E901E091EC01EE0FFF0B46
+:10104000E80FF91FEF5DFE4F608171818BED93E03A
+:101050000E949F106BE38BED93E00E94CF1060E93C
+:1010600071E08BED93E00E94E2108091E801909195
+:10107000E901E091ED01EE0FFF0BE80FF91FEF5DC5
+:10108000FE4F608171818BED93E00E949F106BE3B6
+:101090008BED93E00E94CF106BE381EE93E00E9412
+:1010A000CF1067E070E081EE93E00E944A1081EE7D
+:1010B00093E0009789F064E971E00E94E21060918A
+:1010C000EE017091EF0181EE93E00E949F106BE3BF
+:1010D00081EE93E00E94CF1065E871E081EE93E02D
+:1010E0000E94E2104AE0B8018091E2019091E30190
+:1010F0000E942920F80101900020E9F73197AF0103
+:10110000401B510BB80181EE93E00E9471106BE31C
+:1011100081EE93E00E94CF1063E081EE93E00E94A5
+:10112000CF106AE081EE93E00E94CF108BED93E048
+:101130000E94B60ECE0109960E94B60E81EE93E093
+:101140000E94B60E1092E70381E08093B403CE01B3
+:1011500009960E943D118EC0181419040CF0AAC102
+:10116000FD2CEF8DF8A1E20DF31D8481A989BA89C8
+:10117000A80FB11DBA8BA98BBAA1BF5FBAA3ED8925
+:10118000FE89E80DF91DFE8BED8B1F3F09F45CCC49
+:101190000F3F09F459CC5FEFE51609F455CCF5166D
+:1011A00009F452CC89889A8897FE03C0919481945F
+:1011B0009108092C000CAA08BB08AEA5BFA56C912C
+:1011C00070E080E090E00E945A202AE037ED43E290
+:1011D0005DE30E94B9202B013C0120E030E0A90131
+:1011E0000E94CF1A20E030E040E05FE387FDFEC0C0
+:1011F000C301B2010E94BB190E94991A68157905B2
+:101200008A059B050CF4E5CBB9A1EAA1BE13E1CB9D
+:101210001E1509F4DECB0F1509F4DBCB101709F40A
+:10122000D8CBEF1409F4D5CB1F1509F4D2CBE016B7
+:1012300009F4CFCBF092ED01E092EB010093EC01C9
+:101240001093EA018D899E8966E070E00E9458192A
+:101250007093EF016093EE013F89311127CB8091AC
+:10126000E703882339F08091B503882319F081E0E2
+:101270008093B4038091A802882309F4A8C08091C8
+:10128000BA039091BB03019709F0A1C08091B40308
+:1012900081119DC08091B103883208F498C067E93C
+:1012A00071E08BED93E00E94E2106BE38BED93E035
+:1012B0000E94CF1010E08091D803181788F5212FD5
+:1012C00030E0C901880F991FAC0148535C4F7A0187
+:1012D000DA018D919C91892B09F1F901E955FD4FB6
+:1012E00084818823D9F06AE971E08BED93E00E9454
+:1012F000E210812F0E94C10F65E971E08BED93E050
+:101300000E94E210F701608171818BED93E00E94F1
+:101310009F106BE38BED93E00E94CF101F5FCBCF4C
+:101320006AE671E08BED93E00E94E2106BE381EEE0
+:1013300093E00E94CF106DE671E081EE93E00E9491
+:10134000E2106091A702062E000C770B81EE93E06D
+:101350000E949F106BE381EE93E00E94CF1080917A
+:10136000B603882359F065E771E081EE93E00E94AF
+:10137000E2106BE381EE93E00E94CF1063E081EE18
+:1013800093E00E94CF106AE081EE93E00E94CF10BC
+:101390000091B10301508BED93E00E94B60E10E076
+:1013A000E12FF0E0E955FD4F648570E080E090E0CA
+:1013B0004AE00E94E70E1F5F011790F781EE93E06D
+:1013C0000E94B60E1092B50381E08093B403809121
+:1013D000B5038111C6C087EA92E00E94BD0DC1C06D
+:1013E000181419040CF07CC0ED2CBBCEC301B20163
+:1013F0000E94BA1901CFE92C9C24BFCCEE2009F43D
+:10140000C0CC8091E8019091E901FC01EA0DFB1D3F
+:101410002485820F911D820F911DFC01EF5DFE4F0F
+:1014200040815181E091E1018091E701E817D8F511
+:101430008091E6012091E2013091E301873051F47F
+:101440002115310539F0EF5FE093E101F0E0E1555E
+:10145000FE4F1082E091E101F0E0A82FB0E0E155ED
+:10146000FE4F61E070E01416150614F060E070E0C5
+:10147000082E01C0660F0A94EAF79081692B6083F9
+:101480002F5F3F4F3093E3012093E2019091E401FD
+:10149000A91BB109B7FD04C0891B8093E60103C0F5
+:1014A000E7E0E093E601E12C6CCCEE24E394992490
+:1014B000939463CC0D2DEF8DF8A1E20DF31D848183
+:1014C00029893A89281B31093A8B298B39A13F5F39
+:1014D00039A34D895E89481959095E8B4D8B55CECC
+:1014E0001D2DE9CFF801E55FFE4FF082C092F101BA
+:1014F000C092F20131977080022E000C330B0A2E3D
+:10150000000CBB0B0A2C000CBB08DF2C212C312C4F
+:1015100001CB82179307D1F409CBC501B4010E9416
+:10152000BA1965CB29E23CE54FE85DEBC501B40192
+:101530000E94CF1A87FF90CB51E025223324C101AE
+:10154000A1E08A27B82FB1709B2ECCCB8A179B07BE
+:1015500021F08A159B0509F0C5CB812C61E070E074
+:10156000E8CAAF960FB6F894DEBF0FBECDBFDF91CD
+:10157000CF911F910F91FF90EF90DF90CF90BF9090
+:10158000AF909F908F907F906F905F904F903F9023
+:101590002F900895FC01918D828D981761F0828DB6
+:1015A000DF01A80FB11D5D968C91928D9F5F9F7397
+:1015B000928F90E008958FEF9FEF0895FC01918D39
+:1015C000828D981731F0828DE80FF11D858D90E0A6
+:1015D00008958FEF9FEF0895FC01918D228D892F43
+:1015E00090E0805C9F4F821B91098F73992708952B
+:1015F00080E092E00E94EC0A21E0892B09F420E0CF
+:10160000822F0895FC01848DDF01A80FB11DA35A1C
+:10161000BF4F2C91848D90E001968F739927848F12
+:10162000A689B7892C93A089B1898C9180648C9309
+:10163000938D848D981306C00288F389E02D8081F4
+:101640008F7D80830895EF92FF920F931F93CF9326
+:10165000DF93EC0181E0888F9B8D8C8D981305C002
+:10166000E889F989808185FD24C0F62E0B8D10E074
+:101670000F5F1F4F0F731127E02E8C8DE8120CC0E7
+:101680000FB607FCFACFE889F989808185FFF5CF8D
+:10169000CE010E94020BF1CF8B8DFE01E80FF11DF0
+:1016A000E35AFF4FF0820B8FEA89FB8980818062C9
+:1016B00007C0EE89FF896083E889F98980818064A9
+:1016C000808381E090E0DF91CF911F910F91FF9097
+:1016D000EF900895CF93DF93EC01888D8823C9F0B4
+:1016E000EA89FB89808185FD05C0A889B9898C912B
+:1016F00086FD0FC00FB607FCF5CF808185FFF2CFC6
+:10170000A889B9898C9185FFEDCFCE010E94020B8B
+:10171000E7CFDF91CF910895089508952091A20118
+:10172000E6E9F0E09491E0EEF0E08491ECECF0E09A
+:10173000E491EE2309F43BC0992339F1933091F001
+:1017400038F49130A9F0923001F594B59F7D12C024
+:10175000973091F09830A1F09430B9F490918000D6
+:101760009F7D03C0909180009F77909380000DC073
+:1017700094B59F7794BD09C09091B0009F7703C046
+:101780009091B0009F7D9093B000F0E0EE0FFF1FAE
+:10179000E555FF4FA591B4919FB7F894EC912111B5
+:1017A00003C080958E2301C08E2B8C939FBF109217
+:1017B000A2010895CF93C1E080E092E00E94EC0A7C
+:1017C000892BB9F080E092E00E94CA0A8A3041F089
+:1017D0001CF4882329F007C08D3011F0833219F4EE
+:1017E000C093A301E9CF682F81EA92E00E94CF1055
+:1017F000E3CFCF9108950E94F80A81110C94DA0B7F
+:1018000008951F920F920FB60F9211242F933F93BA
+:101810004F935F936F937F938F939F93AF93BF93F8
+:10182000EF93FF9380E092E00E94020BFF91EF9113
+:10183000BF91AF919F918F917F916F915F914F91E8
+:101840003F912F910F900FBE0F901F9018951F92F0
+:101850000F920FB60F9211242F938F939F93EF93B4
+:10186000FF93E0911002F09111028081E091160245
+:10187000F091170282FD12C09081809119028F5F52
+:101880008F7320911A02821751F0E0911902F0E053
+:10189000E050FE4F958F8093190201C08081FF9127
+:1018A000EF919F918F912F910F900FBE0F901F90EE
+:1018B0001895CF93DF9390E0FC01ED52FF4F2491F8
+:1018C000FC01E154FF4F8491882361F190E0880F7F
+:1018D000991FFC01EB54FF4FC591D491FC01E555D4
+:1018E000FF4FA591B491611109C09FB7F894888109
+:1018F000209582238883EC912E230BC0623061F403
+:101900009FB7F8943881822F809583238883EC9148
+:101910002E2B2C939FBF06C08FB7F894E8812E2BF7
+:1019200028838FBFDF91CF9108953FB7F8948091BE
+:10193000FC019091FD01A091FE01B091FF0126B53F
+:10194000A89B05C02F3F19F00196A11DB11D3FBFF7
+:10195000BA2FA92F982F8827820F911DA11DB11D85
+:10196000BC01CD0142E0660F771F881F991F4A9581
+:10197000D1F70895CF92DF92EF92FF920F931F93CA
+:101980000E94950C00919D0210919E0220919F0251
+:101990003091A0026B017C01C01AD10AE20AF30A5D
+:1019A0009701860160939D0270939E0280939F022F
+:1019B0009093A0020A3511052105310578F181E0E7
+:1019C000C8168DE7D806E104F10410F4960102C0B0
+:1019D00021E03DE74A9B03C0319521953109809173
+:1019E000E9038233D8F48091E9038F5F8093E903A0
+:1019F0008091EA036091E8030E9438199093EA030A
+:101A0000E091EA03F0E0EE0FFF1FE451FC4F318359
+:101A100020838091EA038F5F8093EA031F910F91E7
+:101A2000FF90EF90DF90CF9008951F920F920FB626
+:101A30000F9211242F933F938F939F93AF93BF9354
+:101A400080919E0190919F01A091A001B091A10170
+:101A50003091FB0123E0230F2D3720F40196A11DC7
+:101A6000B11D05C026E8230F0296A11DB11D2093CC
+:101A7000FB0180939E0190939F01A093A001B093DE
+:101A8000A1018091FC019091FD01A091FE01B09116
+:101A9000FF010196A11DB11D8093FC019093FD01F2
+:101AA000A093FE01B093FF01BF91AF919F918F91E1
+:101AB0003F912F910F900FBE0F901F9018951F927E
+:101AC0000F920FB60F9211242F933F934F935F9372
+:101AD0006F937F938F939F93AF93BF93EF93FF93F6
+:101AE000E0910501F09106010995FF91EF91BF91F9
+:101AF000AF919F918F917F916F915F914F913F91A6
+:101B00002F910F900FBE0F901F9018951F920F925C
+:101B10000FB60F9211242F933F934F935F936F93C0
+:101B20007F938F939F93AF93BF93EF93FF93E09136
+:101B30000301F09104010995FF91EF91BF91AF91DD
+:101B40009F918F917F916F915F914F913F912F91D5
+:101B50000F900FBE0F901F901895FC0180AD2E2F97
+:101B6000DF019A2F921B981710F41D92FACF12AA38
+:101B700014AA13AA87E087AB0895CF93DF93FC01E3
+:101B8000E65FFE4F1082DC01AF5CBE4F1C92B89640
+:101B90001082B0971082319611821082B0962FEF8A
+:101BA0002083FC012083EF5DFE4FEC01249611920F
+:101BB00011921992EA17FB07D1F7FC01E35FFE4F80
+:101BC0001082339626E930E0318320833D964DEC38
+:101BD0005CEC6CE47EE34083518362837383729791
+:101BE00010823396108231961082F1961082F4970B
+:101BF0001082DF91CF910895FC01E65FFE4F408196
+:101C0000A42FB0E0262F30E02A173B075CF4461BD8
+:101C1000408350E0B901645F7F4F680F791F0C96D5
+:101C20000C94AC1B08951F920F920FB60F921124C3
+:101C30002F933F934F935F936F937F938F939F93D4
+:101C4000AF93BF93EF93FF93E0919C01F0919D01BF
+:101C50000995FF91EF91BF91AF919F918F917F91E6
+:101C60006F915F914F913F912F910F900FBE0F9009
+:101C70001F901895CF93DF9387EA90E00E94640F3E
+:101C8000C7EAD2E08B8190E00E94850F82EA90E063
+:101C90000E94640F898190E00E94850F8DE990E099
+:101CA0000E94640F8A8190E0DF91CF910C94330FF2
+:101CB0002B9A2091000130910101482F429FC001D1
+:101CC000439F900D11248230910538F0880F991FA1
+:101CD000880F991F05970197F1F72B982091000124
+:101CE00030910101629FC001639F900D11248230E9
+:101CF000910538F0880F991F880F991F0597019754
+:101D0000F1F70895E8988CE89BE0909304018093A4
+:101D1000030108958AEB9CE09093040180930301F2
+:101D2000E9E6F0E080818C7F81608083E89A089505
+:101D3000CF93DF93EC01FB01248135810E94571181
+:101D4000CE01DF91CF910895009769F0FC010190D9
+:101D50000020E9F73197AF01481B590BBC0180E027
+:101D600092E00C94031080E090E00895FC0144811F
+:101D700055816081718180E092E00C940310CF93D3
+:101D8000DF930E94B60EEC0184E691E00E94A40E5F
+:101D90008C0F9D1FDF91CF910895CF92DF92EF922C
+:101DA000FF920E94950C6B017C010E94950CDC0156
+:101DB000CB018C199D09AE09BF09883E9340A1054E
+:101DC000B10598F3FF90EF90DF90CF9008958F9238
+:101DD0009F92AF92BF920F931F93CF93DF93CDB794
+:101DE000DEB7A1970FB6F894DEBF0FBECDBF19A224
+:101DF000423008F44AE08E010F5D1F4F842E912C73
+:101E0000A12CB12CA50194010E946C19E62FB901F7
+:101E1000CA0101501109EA3014F4E05D01C0E95C27
+:101E2000D801EC93232B242B252B61F7C8010E94AA
+:101E3000A40EA1960FB6F894DEBF0FBECDBFDF9102
+:101E4000CF911F910F91BF90AF909F908F90089569
+:101E5000E0910002F09101020190F081E02D682FE5
+:101E600080E092E00994CF92DF92EF92FF92CF93BD
+:101E7000DF936C01990FEE08FF08F7FE12C08DE2A8
+:101E80000E94280FEC0166277727CB016C197D098A
+:101E90008E099F094AE00E94E70E7C01EC0EFD1EB0
+:101EA00006C04AE0C701B6010E94E70E7C0184E645
+:101EB00091E00E94A40E8E0D9F1DDF91CF91FF90A7
+:101EC000EF90DF90CF9008950F931F93CF93DF9300
+:101ED0008C01C0E0D0E0F801EC0FFD1F6491662397
+:101EE00071F0E0910002F09101020190F081E02D8B
+:101EF00080E092E00995892B11F02196ECCFCE017C
+:101F0000DF91CF911F910F910895CF92DF92EF92C1
+:101F1000FF92CF93DF936C01990FEE08FF08F7FE55
+:101F200017C08DE20E94280FEC0166277727CB01AE
+:101F30006C197D098E099F094AE00E94E70E8C0FFB
+:101F40009D1FDF91CF91FF90EF90DF90CF9008958C
+:101F50004AE0C701B601DF91CF91FF90EF90DF908B
+:101F6000CF900C94E70ECF93DF930E94A40EEC0168
+:101F700084E691E00E94A40E8C0F9D1FDF91CF910B
+:101F800008950F931F93CF93DF9300D000D0CDB768
+:101F9000DEB74AE08E010F5F1F4FB80190E00E944C
+:101FA0000120F80101900020E9F73197AF01401BB3
+:101FB000510BB8018BED93E00E9471100F900F90C0
+:101FC0000F900F90DF91CF911F910F910895EBEA41
+:101FD000F2E098E09E0F11929E13FDCF611102C0B6
+:101FE0006091B103861768F4E82FF0E0E955FD4FE2
+:101FF000E485F0E0E955FD4F94819F5F94838F5F06
+:10200000F1CF08950895CF92DF92EF92FF920F9350
+:102010001F93CF93DF936C017A018B01C0E0D0E076
+:10202000CE15DF0589F0D8016D918D01D601ED91B6
+:10203000FC910190F081E02DC6010995892B11F4E6
+:102040007E0102C02196ECCFC701DF91CF911F9195
+:102050000F91FF90EF90DF90CF900895FC01808169
+:102060009181009711F00C94DA1F60E070E0CB01D1
+:102070000895FC01248135816217730748F480813B
+:102080009181009729F0FC01E60FF71F80810895E8
+:1020900080E008950F931F93CF93DF93EC01888125
+:1020A0009981009729F02A813B812617370788F408
+:1020B0008B016F5F7F4F0E94D41A009761F0998364
+:1020C00088831B830A832C813D81232B11F4FC011F
+:1020D000108281E001C080E0DF91CF911F910F91CC
+:1020E0000895EF92FF920F931F93CF93DF93FC011C
+:1020F000248135816115710511F480E019C0411505
+:102100005105A9F07B01EC018A01020F131FB801F0
+:102110000E944A10882389F3288139818C819D810E
+:10212000B701820F931F0E94BE1B1D830C8381E0A9
+:10213000DF91CF911F910F91FF90EF900895EF9253
+:10214000FF920F931F93CF93DF93CDB7DEB72897FE
+:102150000FB6F894DEBF0FBECDBF7C01CB014AE0C5
+:102160008E010F5F1F4FB8010E940120F8010190FE
+:102170000020E9F73197AF01401B510BB801C701AF
+:102180000E94711028960FB6F894DEBF0FBECDBF27
+:10219000DF91CF911F910F91FF90EF900895CF9312
+:1021A000DF9300D0CDB7DEB769831A8241E050E0FB
+:1021B000BE016F5F7F4F0E9471100F900F90DF91F3
+:1021C000CF9108956115710551F0FB010190002038
+:1021D000E9F73197AF01461B570B0C94711080E063
+:1021E0000895EF92FF920F931F93CF93DF93EC012B
+:1021F0007B018A01BA010E944A102881398181112C
+:102200000DC02115310519F0C9010E94241F198242
+:1022100018821D821C821B821A8206C01D830C83B9
+:10222000B701C9010E94BE1BCE01DF91CF911F9162
+:102230000F91FF90EF900895CF93DF93EC0161151C
+:10224000710559F0FB0101900020E9F73197AF01CA
+:10225000461B570B0E94F1100CC088819981009792
+:1022600011F00E94241F198218821D821C821B8279
+:102270001A82CE01DF91CF910895FC018081918176
+:102280000C94241FFC011182108213821282158289
+:1022900014826115710551F0FB0101900020E9F7EE
+:1022A0003197AF01461B570B0C94F1100895BF9264
+:1022B000CF92DF92EF92FF920F931F93CF93DF9312
+:1022C0007C016B018A01E9012417350720F4812F75
+:1022D0008901C42FD82F66E671E0C7010E94421120
+:1022E000D60114968D919C91159708171907D0F473
+:1022F0008C179D0708F4EC01D601ED91FC91119724
+:10230000EC0FFD1FB08010824D915C91BA01600FFF
+:10231000711FC7010E941C11D601ED91FC91EC0FB9
+:10232000FD1FB082C701DF91CF911F910F91FF90E8
+:10233000EF90DF90CF90BF900895CF93DF93CDB70C
+:10234000DEB7C757D1090FB6F894DEBF0FBECDBFB9
+:10235000789484B5826084BD84B5816084BD85B580
+:10236000826085BD85B5816085BD80916E0081608C
+:1023700080936E0010928100809181008260809332
+:102380008100809181008160809381008091800034
+:102390008160809380008091B10084608093B1005F
+:1023A0008091B00081608093B00080917A00846059
+:1023B00080937A0080917A00826080937A00809185
+:1023C0007A00816080937A0080917A00806880939F
+:1023D0007A001092C100E0911002F091110212E017
+:1023E0001083E0911002F09111021082E0910C0232
+:1023F000F0910D021082E0910E02F0910F0200E1C7
+:10240000008310921802E0911402F091150286E008
+:102410008083E0911202F0911302808180618083B9
+:10242000E0911202F0911302808188608083E09134
+:102430001202F0911302808180688083E091120281
+:10244000F091130280818F7D808360E082E00E94A2
+:10245000590C61E08BE00E94590C61E08DE00E9414
+:10246000590C00938100109280001093A60188E11E
+:1024700099E79093A5018093A4019093870080939E
+:10248000860082E1809381008EE89BE090939D011D
+:1024900080939C0181E080936F0080E090E00E9437
+:1024A00077218B3099F481E090E00E947721982F7A
+:1024B00091709093AA0281FB992790F99093A802BA
+:1024C00082FB882780F98093A9020AC06BE080E034
+:1024D00090E00E947F2167E081E090E00E947F21F0
+:1024E0000E948A0E68E270E081EA92E00E944A103F
+:1024F0009E012F5F3F4F19018091A301882309F4AA
+:1025000090C41092A30160E070E081EA92E00E9422
+:102510003910803539F48DE191E00E94B30F0E94AB
+:10252000CD0E72C48F3309F045C00E94280F8CE78E
+:1025300090E00E94640F86E50E94280F80E20E94CE
+:10254000280F89E60E94280F80E20E94280F82E56A
+:102550000E94280F80E20E94280F84E70E94280F23
+:1025600080E20E94280F88E50E94280F80E20E94E6
+:10257000280F86E40E94280F80E20E94280F83E53E
+:102580000E94280F80E20E94280F80E50E94280FF9
+:1025900080E20E94280F83E40E94280F80E20E94BC
+:1025A000280F87E40E94280F80E20E94280F86E609
+:1025B00091E004C0863529F480E291E00E94B30FD7
+:1025C00023C4823579F4809150049091510400978E
+:1025D00011F484E594E0D101A81BB90BCD010E9450
+:1025E000330F12C4893609F02DC161E070E081EA31
+:1025F00092E00E943910843709F4A5C0823781F532
+:1026000042E050E061EA72E0C1010E94980E8D81C3
+:102610009E81009721F46C961FAE6C9716C00297AE
+:1026200018F002E010E002C001E010E069817A8158
+:10263000A801CE01855A9F4F0E94C51BEBE5F0E033
+:10264000EC0FFD1FE00FF11F1082C1010E943D1130
+:10265000CE01855A9F4F0E94BC1F8093020173C018
+:10266000833709F05DC02B9A42E050E061EA72E0E6
+:10267000CE01855A9F4F0E94980EA1960EAD1FADB8
+:10268000A1970115110511F4198211C00732110526
+:1026900010F007E210E06D966EAD7FAD6D97A8016A
+:1026A000C1010E94C51BF101E00FF11F1082CE0194
+:1026B000855A9F4F0E943D110E94820E00E010E05B
+:1026C0008091020190E00817190734F56FE181E06D
+:1026D0000E94580E7101F70181917F018823C9F092
+:1026E000813371F0863449F08033A9F763E081E0EB
+:1026F0000E94580E63E081E009C063E081E002C0FF
+:1027000061E083E00E94580E61E083E00E94580E71
+:10271000E2CF0F5F1F4FD4CF0E948A0E2B9813C0B9
+:102720008336B1F442E050E061EA72E0C1010E94F8
+:10273000980EC1010E942E10709301016093000158
+:10274000C1010E943D1181EA92E00E94BF0E5CC36C
+:10275000803709F059C366E671E0CE018F599F4F6B
+:102760000E94421164E170E0CE018F599F4F0E9498
+:102770004A1067E571E0CE018F599F4F0E941C11EE
+:10278000809102016D961FAE1EAE6D976F961FAEC3
+:102790001EAE6F97A1961FAE1EAEA1974AE0B10183
+:1027A00090E00E942920B101CE01855A9F4F0E94DE
+:1027B0001C11A1964EAD5FADA1976D966EAD7FAD2C
+:1027C0006D97CE018F599F4F0E947110CE01855A8F
+:1027D0009F4F0E943D1160E671E0CE018F599F4FDF
+:1027E0000E94E21080910001909101016D961FAE50
+:1027F0001EAE6D976F961FAE1EAE6F97A1961FAE61
+:102800001EAEA1974AE0B1010E940120B101CE01A4
+:10281000855A9F4F0E941C11A1964EAD5FADA197A6
+:102820006D966EAD7FAD6D97CE018F599F4F0E9413
+:102830007110CE01855A9F4F0E943D11CE018F59D4
+:102840009F4F3BC2833509F040C266E671E0CE017E
+:102850008F599F4F0E9442116EE170E0CE018F5957
+:102860009F4F0E944A100E94820EE12CF12CFFEF34
+:10287000A896FFAFA89721E0AE962FAFAE9731E0B4
+:10288000E0963FAFE09732E1D32ECC24C39449E0E9
+:10289000B42E52E0A52E62E671E0CE01855A9F4F1C
+:1028A0000E9442118091A5029091A602E816F906B5
+:1028B00098F48090A1029090A2026D966EAD7FADCB
+:1028C0006D97C4018E0D9F1D0E94D41B009721F0AF
+:1028D0008C010819190902C00FEF1FEFCE01855AAC
+:1028E0009F4F0E943D110F3F2FEF120721F4AF962B
+:1028F0001FAEAF970EC13FEFE316F306C1F3980189
+:10290000A70161EA72E0CE01855A9F4F0E945711DC
+:10291000A3968EAD9FADA3970097A9F06D966EAD6F
+:102920007FAD6D976115710561F0A5964EAD5FADF8
+:10293000A597A1962EAD3FADA1974217530708F07A
+:10294000ECC30E94241F6D968EAD9FAD6D97A3962C
+:102950009FAF8EAFA3976F968EAD9FAD6F97A596E5
+:102960009FAF8EAFA597A1968EAD9FADA197A7966D
+:102970009FAF8EAFA7976D961FAE1EAE6D976F96E9
+:102980001FAE1EAE6F97A1961FAE1EAEA197CE01D1
+:10299000855A9F4F0E943D1178018FEFE81AF80A7F
+:1029A00060E070E0CE018F599F4F0E94391083354F
+:1029B00059F561E070E0CE018F599F4F0E943910A8
+:1029C000833409F462C08D3471F4A8968FADA89752
+:1029D0008F5FA8968FAFA897F101D89EE00DF11DEB
+:1029E0001124C28258CF823509F055CFA8962FAD59
+:1029F000A8972F5FA8962FAFA897F101D29EE00D60
+:102A0000F11D1124A28241C0803509F024C362E087
+:102A100070E0CE018F599F4F0E9439108D3309F01D
+:102A20003ACF22E030E041E050E0BE016F597F4FE5
+:102A3000CE01855A9F4F0E945711CE01855A9F4F54
+:102A40000E942E10162FCE01855A9F4F0E943D11D5
+:102A500043E050E0BE016F597F4FCE01855A9F4F32
+:102A60000E94980ECE01855A9F4F0E942E10A89664
+:102A70006FACA897B69CF0011124E10FF11D3396BD
+:102A8000EE0FFF1FE20DF31D40C3AE961FAEAE97D3
+:102A900002CFA9967FACA997672C712CAB967FAE1D
+:102AA0006EAEAB97A9963FADA99722E1329F700118
+:102AB0001124F101EE0DFF1D82818230B9F182E116
+:102AC000AB966EAC7FACAB97869DF001879DF00D09
+:102AD0001124E20DF31D8281813009F46AC02B9824
+:102AE000A9963FADA9973F5FA9963FAFA997A89632
+:102AF0006FACA897631668F6AE967FACAE97711070
+:102B00000E94CD0EAF962FADAF972F5FAF962FAF30
+:102B1000AF97AF963FADAF97E0966FACE0973615A5
+:102B200009F4C7C0A9961FAEA997B3CF26E0E20E5D
+:102B3000F11CE20CF31C4480558003810E94950C2B
+:102B40004B015C0110E04016510658F1B80181EAD2
+:102B500092E00E9439108053F701E80FF11DE80F51
+:102B6000F11D60807180630177FE04C0CC24DD24F8
+:102B7000C618D7080E94950C681579058A059B052B
+:102B8000C8F377FE02C02B9801C02B9AC601DD0C5A
+:102B9000AA0BBB0B880E991EAA1EBB1E0F5F1F4FF0
+:102BA000D2CF0E94950C681579058A059B05C8F35C
+:102BB00086CFE080F1807480E1967FAEE19713814B
+:102BC0000E94950C4B015C01C701FF0CAA0BBB0BCB
+:102BD000AD968CAF9DAFAEAFBFAFAD97880F991FCD
+:102BE000AA1FBB1FE5968CAF9DAFAEAFBFAFE597F9
+:102BF000E1966FACE197611608F471CF612F70E038
+:102C000081EA92E00E9439108A3314F097E301C000
+:102C100090E3891B04E0C02ED12C08E0482F880FD8
+:102C2000550B2401350120E0E02EF12CE422F522A1
+:102C3000E114F10451F12B98AD968CAD9DADAEAD84
+:102C4000BFADAD97480E591E6A1E7B1EE6962FAF8C
+:102C5000E697E7964FAFE797E8965FAFE8970E9451
+:102C6000950CE6962FADE697E7964FADE797E89679
+:102C70005FADE897641575058605970538F3213033
+:102C800031F021E0E114F104B1F22B9AD5CFE596B1
+:102C90008CAD9DADAEADBFADE597880E991EAA1E59
+:102CA000BB1E069591E0C91AD10809F0BACF1F5F83
+:102CB0009FCF0E948A0E81EA92E00E94BF0ECE0151
+:102CC0008F599F4F0E943D119FC08437C1F58FB728
+:102CD000F894C0909E01D0909F01E090A001F090E8
+:102CE000A1018FBFC701B60128EE33E040E050E0FC
+:102CF0000E946C19CA01B9010091A9011091AA01A1
+:102D00002091AB013091AC01C016D106E206F3066A
+:102D100050F42091A7013091A8012F5F3F4F3093CD
+:102D2000A8012093A701C092A901D092AA01E09224
+:102D3000AB01F092AC014AE00E94E70E61C0883519
+:102D4000B1F461E070E081EA92E00E9439108135CF
+:102D500011F40E94820E61E070E081EA92E00E942C
+:102D60003910853409F050C00E948A0E4DC0863457
+:102D700009F44AC08334F1F561E070E081EA92E041
+:102D80000E943910182F873419F40E943A0E3CC063
+:102D900062E070E081EA92E00E943910833539F0F8
+:102DA000853541F0833449F4E9EAF2E008C0EAEA03
+:102DB000F2E005C0E8EAF2E002C0E0E0F0E015343D
+:102DC00019F481E0808303C01434F1F410828091FF
+:102DD000A802682F660F9091A90224E0929FC0017B
+:102DE0001124862B6091AA02682B81E090E00E945A
+:102DF0007F210AC0873449F288E690E00E94640F80
+:102E000084E691E00E94A40E8091A301811106C086
+:102E100066E671E081EA92E00E941C1181E08093F5
+:102E2000A201AA24A394B3E0CB2ED12C8091E90374
+:102E3000882309F40DC18091E90381508093E9034F
+:102E40008091EB036091E8030E9438199093EB03A3
+:102E5000E091EB0381E08E0F8093EB03F0E0EE0F47
+:102E6000FF1FE451FC4F808191819093AE018093CC
+:102E7000AD011092B403E091B103EE2369F0F0E0EC
+:102E8000E955FD4F838590E0880F991F88539C4F2B
+:102E90009093C3038093C2032091AD013091AE01A2
+:102EA000E091C003F091C103318320838091B1038D
+:102EB000882369F0E091C203F091C30340815181FE
+:102EC00042275327452F441F4427441F01C041E098
+:102ED00051E0211533480CF450E091E08E3F09F4A5
+:102EE00090E0952311F0411109C091E08E3F09F067
+:102EF00090E09093B6030E94A20006C0883221F4AD
+:102F0000D092BB03C092BA03E090C003F090C1031B
+:102F1000D7010D911C91B80117FF04C066277727D0
+:102F2000601B710B072E000C880B990B0E945A2016
+:102F30002DEC3CEC4CE45EE30E94B9200E94A01A08
+:102F4000AB017093B8036093B7036091D803E8ECCA
+:102F5000F3E0B12CB616D9F0819191919C01202714
+:102F60003127330F220B322F232B79F4009769F08E
+:102F70003801681A790AC30177FE03C091958195DB
+:102F80009109481759070CF0D3C0B394E3CF6830C8
+:102F900041F560E080E00E94E70FE091D803F0E0A7
+:102FA000E955FD4F8481833010F00E94A2006091AA
+:102FB000B10370E0615071098091D90316161706AC
+:102FC00084F4FB01E955FD4F9485981307C06F5FAA
+:102FD0007F4F87EA92E00E94FC0D03C061507109A7
+:102FE000EDCFB090D903E091C003F091C10380818F
+:102FF0009181EB2DF0E0EE0FFF1FE853FC4F918322
+:10300000808381E08B0D883019F08093D90306C04E
+:103010001092D9038093D8031092E7038091D903CB
+:103020009091D803981710F48093D8038091B1033E
+:10303000E82FF0E0E955FD4FB4868F5F8093B10330
+:103040008091B403882309F4F1CEA092A201EECEC0
+:103050000E94FB0B51CA8235E9F461E070E0CE01B9
+:103060008F599F4F0E9439108D3309F014CC42E0E4
+:1030700050E0BE016F597F4FCE01855A9F4F0E948D
+:10308000980ECE01855A9F4F0E942E10E0966FAF8A
+:10309000E0973DC08434A9F4F101A8967FACA897CD
+:1030A000D79CE00DF11D1124A6968FADA6978C2C10
+:1030B000881A882D8E0D838301501109158304838E
+:1030C000EACB833409F0E7CB61E070E0CE018F59A1
+:1030D0009F4F0E9439108D3309F0DDCB42E050E064
+:1030E000BE016F597F4FCE01855A9F4F0E94980EA7
+:1030F000CE01855A9F4F0E942E10F101A8967FACF9
+:10310000A897D79CE00DF11D112471836083CE0137
+:10311000855A9F4F0E943D11BECB0E94BE1BA196B7
+:103120008EAD9FADA197A7969FAF8EAFA7972BCCE3
+:10313000B7FC2DCF0B2D000F110B08531C4FD801DE
+:103140006D917C91AB01770F660B770BF701808156
+:103150009181092E000CAA0BBB0B3A014B01680EA2
+:10316000791E8A1E9B1EC401B30122E030E040E0BC
+:1031700050E00E948E19D8012D933C9357CF81EADD
+:1031800092E00E943D1181EE93E00E943D118BED93
+:1031900093E00C943D110F931F93CF93DF93E0E0E6
+:1031A000F2E01382128288EE93E0A0E0B0E0848324
+:1031B0009583A683B78381E191E09183808385EC39
+:1031C00090E09587848784EC90E09787868780ECF1
+:1031D00090E0918B808B81EC90E0938B828B82ECE2
+:1031E00090E0958B848B86EC90E0978B868B118E8C
+:1031F000128E138E148EE8EEF3E082E38083118248
+:1032000013821282CCEBD3E0D093C103C093C003EE
+:103210000EEB13E01093C3030093C20366E671E064
+:103220008BED93E00E94421166E671E081EE93E03F
+:103230000E944211F801118210821982188287EAD5
+:1032400092E00E94BD0D66E671E081EA92E00E9484
+:1032500042110E94950C60939D0270939E02809390
+:103260009F029093A002DF91CF911F910F9108953B
+:10327000991B79E004C0991F961708F0961B881FC8
+:103280007A95C9F780950895AA1BBB1B51E107C029
+:10329000AA1FBB1FA617B70710F0A61BB70B881FE6
+:1032A000991F5A95A9F780959095BC01CD01089575
+:1032B00097FB072E16F4009407D077FD09D00E94E3
+:1032C000441907FC05D03EF4909581959F4F0895D1
+:1032D000709561957F4F0895A1E21A2EAA1BBB1B22
+:1032E000FD010DC0AA1FBB1FEE1FFF1FA217B307D2
+:1032F000E407F50720F0A21BB30BE40BF50B661FE8
+:10330000771F881F991F1A9469F7609570958095AB
+:1033100090959B01AC01BD01CF010895052E97FB4F
+:103320001EF400940E94A51957FD07D00E946C1945
+:1033300007FC03D04EF40C94A51950954095309598
+:1033400021953F4F4F4F5F4F089590958095709511
+:1033500061957F4F8F4F9F4F08950E94C421B7FF03
+:103360000895821B930B0895EE0FFF1F0590F491B3
+:10337000E02D09945058BB27AA270E94D2190C941B
+:103380003D210E942F2138F00E94362120F039F48F
+:103390009F3F19F426F40C942C210EF4E095E7FBE2
+:1033A0000C942621E92F0E944E2158F3BA17620788
+:1033B00073078407950720F079F4A6F50C94702123
+:1033C0000EF4E0950B2EBA2FA02D0B01B901900140
+:1033D0000C01CA01A0011124FF27591B99F0593F84
+:1033E00050F4503E68F11A16F040A22F232F342FCC
+:1033F0004427585FF3CF469537952795A795F0401A
+:103400005395C9F77EF41F16BA0B620B730B840B2E
+:10341000BAF09150A1F0FF0FBB1F661F771F881FE6
+:10342000C2F70EC0BA0F621F731F841F48F487953E
+:1034300077956795B795F7959E3F08F0B0CF939530
+:10344000880F08F09927EE0F9795879508950E94A9
+:103450003B1A0C943D210E94362158F00E942F21E6
+:1034600040F029F45F3F29F00C94262151110C946F
+:1034700071210C942C210E944E2168F39923B1F301
+:10348000552391F3951B550BBB27AA27621773078A
+:10349000840738F09F5F5F4F220F331F441FAA1F1E
+:1034A000A9F335D00E2E3AF0E0E832D091505040DA
+:1034B000E695001CCAF72BD0FE2F29D0660F771F88
+:1034C000881FBB1F261737074807AB07B0E809F06E
+:1034D000BB0B802DBF01FF2793585F4F3AF09E3FF3
+:1034E000510578F00C9426210C9471215F3FE4F390
+:1034F000983ED4F3869577956795B795F7959F5F36
+:10350000C9F7880F911D9695879597F90895E1E081
+:10351000660F771F881FBB1F621773078407BA07E0
+:1035200020F0621B730B840BBA0BEE1F88F7E0953B
+:1035300008950E94A01A6894B1110C947121089505
+:103540000E94562188F09F5798F0B92F9927B751BC
+:10355000B0F0E1F0660F771F881F991F1AF0BA9537
+:10356000C9F714C0B13091F00E947021B1E0089504
+:103570000C947021672F782F8827B85F39F0B93FF6
+:10358000CCF3869577956795B395D9F73EF49095EA
+:103590008095709561957F4F8F4F9F4F08950E9442
+:1035A000952008F48FEF0895A0E0B0E0EAEDFAE18D
+:1035B0000C949121EC01009721F4CB010E948F1E05
+:1035C000B8C0FC01E60FF71F9C0122503109E21739
+:1035D000F30708F4ACC0D9010D911C91119706179F
+:1035E0001707B0F00530110508F49FC0C801049713
+:1035F0008617970708F499C002501109061B170B8C
+:10360000019311936D937C93CF010E94241F8DC071
+:103610005B01A01AB10A4C01800E911EA0915204C8
+:10362000B091530440E050E0E12CF12C109709F4E4
+:103630004AC0A815B905D1F56D907C90119763012A
+:1036400082E0C80ED11CCA14DB0480F1A3014A1920
+:103650005B096A0182E0C80ED11C1296BC901297D9
+:103660001396AC91B5E0CB16D10440F0B282A3839F
+:1036700051834083D9016D937C930AC00E5F1F4F25
+:10368000C301800F911FF90191838083EB2DFA2FE5
+:10369000E114F10431F0D7011396FC93EE931297E5
+:1036A00044C0F0935304E09352043FC08D919C9129
+:1036B00011974817590708F4AC017D0112960D9037
+:1036C000BC91A02DB3CF80915004909151048815E6
+:1036D0009905E1F446175707C8F4809107019091C6
+:1036E0000801009741F48DB79EB740910B015091AE
+:1036F0000C01841B950BE817F907C8F4F0935104EB
+:10370000E0935004F901718360830FC0CB010E94E4
+:103710008F1E7C01009759F0A801BE010E94A31BD7
+:10372000CE010E94241FC70104C0CE0102C080E068
+:1037300090E0CDB7DEB7EEE00C94AD2181E090E0F3
+:10374000F8940C94D321FB01DC0102C001900D928E
+:1037500041505040D8F708956817790768F4FB0185
+:10376000DC01E40FF51FA40FB51F02C002900E92FA
+:1037700041505040D8F708950C94A31BFB01DC0185
+:1037800001900D920020E1F70895FB01DC0141500A
+:10379000504048F001900D920020C9F701C01D92E1
+:1037A00041505040E0F70895FB0151915523A9F095
+:1037B000BF01DC014D9145174111E1F759F4CD01ED
+:1037C0000190002049F04D9140154111C9F3FB01D2
+:1037D0004111EFCF81E090E001970895AEE0B0E0B5
+:1037E000E4EFFBE10C949B210D891E8986E08C831C
+:1037F0001A8309838FEF9FE79E838D83AE01475E17
+:103800005F4F6F89788DCE0101960E94111C2F8128
+:103810003885F801E20FF31F10822E96E4E00C9435
+:10382000B721ACE0B0E0E7E1FCE10C948D217C0134
+:103830006B018A01FC0117821682838181FFBDC161
+:10384000CE0101964C01F7019381F60193FD85911C
+:1038500093FF81916F01882309F4ABC1853239F45C
+:1038600093FD859193FF81916F01853229F4B70112
+:1038700090E00E94F91DE7CF512C312C20E020323E
+:10388000A0F48B3269F030F4803259F0833269F45D
+:1038900020612CC08D3239F0803339F4216026C08C
+:1038A0002260246023C0286021C027FD27C030ED9E
+:1038B000380F3A3078F426FF06C0FAE05F9E300DEC
+:1038C0001124532E13C08AE0389E300D1124332E5C
+:1038D00020620CC08E3221F426FD6BC1206406C02C
+:1038E0008C3611F4206802C0883641F4F60193FD4D
+:1038F000859193FF81916F018111C1CF982F9F7D99
+:103900009554933028F40C5F1F4FFFE3F9830DC0EB
+:10391000833631F0833771F0833509F05BC022C004
+:10392000F801808189830E5F1F4F44244394512CFA
+:10393000540115C03801F2E06F0E711CF801A0802F
+:10394000B18026FF03C0652D70E002C06FEF7FEFEE
+:10395000C5012C870E94EE1D2C0183012C852F7739
+:10396000222E17C03801F2E06F0E711CF801A08002
+:10397000B18026FF03C0652D70E002C06FEF7FEFBE
+:10398000C5012C870E94E31D2C012C852068222E66
+:10399000830123FC1BC0832D90E048165906B0F428
+:1039A000B70180E290E00E94F91D3A94F4CFF5014E
+:1039B00027FC859127FE81915F01B70190E00E946D
+:1039C000F91D31103A94F1E04F1A51084114510495
+:1039D00071F7E5C0843611F0893639F5F80127FF13
+:1039E00007C060817181828193810C5F1F4F08C085
+:1039F00060817181072E000C880B990B0E5F1F4FA1
+:103A00002F76722E97FF09C09095809570956195DD
+:103A10007F4F8F4F9F4F2068722E2AE030E0A40125
+:103A20000E94311EA82EA81844C0853729F42F7E85
+:103A3000B22E2AE030E025C0F22FF97FBF2E8F365C
+:103A4000C1F018F4883579F0B4C0803719F08837A0
+:103A500021F0AFC02F2F2061B22EB4FE0DC08B2DF0
+:103A60008460B82E09C024FF0AC09F2F9660B92E2B
+:103A700006C028E030E005C020E130E002C020E1CF
+:103A800032E0F801B7FE07C06081718182819381C5
+:103A90000C5F1F4F06C06081718180E090E00E5F77
+:103AA0001F4FA4010E94311EA82EA818FB2DFF77DE
+:103AB0007F2E76FE0BC0372D3E7FA51450F474FE8A
+:103AC0000AC072FC08C0372D3E7E05C0BA2C372DC7
+:103AD00003C0BA2C01C0B52C34FF0DC0FE01EA0DA5
+:103AE000F11D8081803311F4397E09C032FF06C098
+:103AF000B394B39404C0832F867809F0B39433FD54
+:103B000013C030FF06C05A2CB31418F4530C5B18C2
+:103B1000B32CB31468F4B70180E290E03C870E94B4
+:103B2000F91DB3943C85F5CFB31410F43B1801C0D4
+:103B3000312C34FF12C0B70180E390E03C870E9433
+:103B4000F91D3C8532FF17C031FD03C088E790E0C6
+:103B500002C088E590E0B7010CC0832F867859F049
+:103B600031FF02C08BE201C080E237FD8DE2B70178
+:103B700090E00E94F91DA51438F4B70180E390E0AD
+:103B80000E94F91D5A94F7CFAA94F401EA0DF11D91
+:103B90008081B70190E00E94F91DA110F5CF33207C
+:103BA00009F451CEB70180E290E00E94F91D3A94E9
+:103BB000F6CFF7018681978102C08FEF9FEF2C9699
+:103BC000E2E10C94A921FC010590615070400110C4
+:103BD000D8F7809590958E0F9F1F0895FC01615036
+:103BE000704001900110D8F7809590958E0F9F1F1F
+:103BF00008950F931F93CF93DF93FB01238121FD42
+:103C000003C08FEF9FEF28C022FF16C04681578167
+:103C1000248135814217530744F4A081B1819D016D
+:103C20002F5F3F4F318320838C93268137812F5F15
+:103C30003F4F3783268310C0EB01092F182F0084D4
+:103C4000F185E02D0995892BE1F68E819F81019602
+:103C50009F838E83812F902FDF91CF911F910F91A2
+:103C60000895FA01AA27283051F1203181F1E89412
+:103C70006F936E7F6E5F7F4F8F4F9F4FAF4FB1E05F
+:103C80003ED0B4E03CD0670F781F891F9A1FA11D5A
+:103C9000680F791F8A1F911DA11D6A0F711D811D5B
+:103CA000911DA11D20D009F468943F912AE0269F20
+:103CB00011243019305D3193DEF6CF010895462F7F
+:103CC0004770405D4193B3E00FD0C9F7F6CF462F60
+:103CD0004F70405D4A3318F0495D31FD40524193C9
+:103CE00002D0A9F7EACFB4E0A69597958795779586
+:103CF0006795BA95C9F700976105710508959B010D
+:103D0000AC010A2E06945795479537952795BA9595
+:103D1000C9F7620F731F841F951FA01D0895CF93CD
+:103D2000DF938230910510F482E090E0E09152043C
+:103D3000F091530420E030E0C0E0D0E0309711F182
+:103D40004081518148175907C0F04817590761F45D
+:103D500082819381209719F09B838A832BC0909353
+:103D600053048093520426C02115310519F04217DF
+:103D7000530718F49A01BE01DF01EF010280F381BD
+:103D8000E02DDCCF2115310509F1281B390B24303A
+:103D9000310590F412968D919C91139761157105E0
+:103DA00021F0FB019383828304C09093530480939A
+:103DB0005204FD01329644C0FD01E20FF31F8193CE
+:103DC0009193225031092D933C933AC02091500495
+:103DD00030915104232B41F42091090130910A01C3
+:103DE0003093510420935004209107013091080131
+:103DF0002115310541F42DB73EB740910B0150918B
+:103E00000C01241B350BE0915004F0915104E21792
+:103E1000F307A0F42E1B3F0B2817390778F0AC01ED
+:103E20004E5F5F4F2417350748F04E0F5F1F5093CA
+:103E30005104409350048193919302C0E0E0F0E07C
+:103E4000CF01DF91CF9108950F931F93CF93DF930D
+:103E5000009709F48CC0FC01329713821282009102
+:103E60005204109153040115110581F42081318110
+:103E7000820F931F20915004309151042817390765
+:103E800079F5F0935104E093500471C0D80140E0FB
+:103E900050E0AE17BF0750F412962D913C91139746
+:103EA000AD012115310509F1D901F3CF9D01DA01E9
+:103EB0003383228360817181860F971F8217930756
+:103EC00069F4EC0128813981260F371F2E5F3F4F9F
+:103ED000318320838A819B8193838283452B29F4BC
+:103EE000F0935304E093520442C01396FC93EE9374
+:103EF0001297ED01499159919E01240F351FE21748
+:103F0000F30771F480819181840F951F02961196B9
+:103F10009C938E938281938113969C938E93129798
+:103F2000E0E0F0E0D80112968D919C9113970097F4
+:103F300019F0F8018C01F6CF8D919C9198012E5FBC
+:103F40003F4F820F931F2091500430915104281746
+:103F5000390769F4309729F41092530410925204EF
+:103F600002C0138212821093510400935004DF9117
+:103F7000CF911F910F910895FC0188279927E8940C
+:103F800021912032E9F3293010F02E30C8F32B3282
+:103F900041F02D3239F4689404C00E942120820F30
+:103FA000911D219120532A30C0F31EF490958195E4
+:103FB0009F4F08951F93FC0199278827BC01E8941F
+:103FC00011911032E9F3193010F01E30C8F31B3292
+:103FD00051F01D3249F4689406C00E940C20610F14
+:103FE000711D811D911D119110531A30B0F33EF4D3
+:103FF00090958095709561957F4F8F4F9F4F1F9142
+:104000000895BB274A3031F4992322F4BDE29095FC
+:1040100081959F4F0C942A20592F482F372F262FF8
+:10402000660F771F881F991F660F771F881F991FBC
+:10403000620F731F841F951F660F771F881F991FBC
+:1040400008957AE0979F902D879F802D910D1124E0
+:104050000895BB27FB015527AA27880F991FAA1F80
+:10406000A41710F0A41B83955051B9F7A05DAA3393
+:1040700008F0A95DA193009779F7B111B19311925E
+:10408000CB010C944320DC01FC01672F7191772355
+:10409000E1F7329704C07C916D9370836291AE1703
+:1040A000BF07C8F308950E94952008F481E00895A1
+:1040B000E89409C097FB3EF49095809570956195C2
+:1040C0007F4F8F4F9F4F9923A9F0F92F96E9BB2778
+:1040D0009395F695879577956795B795F111F8CFF4
+:1040E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5F
+:1040F0009F4F16C0882311F096E911C0772321F055
+:104100009EE8872F762F05C0662371F096E8862FEC
+:1041100070E060E02AF09A95660F771F881FDAF743
+:10412000880F9695879597F90895990F0008550F70
+:10413000AA0BE0E8FEEF16161706E807F907C0F02D
+:1041400012161306E407F50798F0621B730B840B35
+:10415000950B39F40A2661F0232B242B252B21F40F
+:1041600008950A2609F4A140A6958FEF811D811DAF
+:1041700008950E94CC200C943D210E942F2138F0FC
+:104180000E94362120F0952311F00C9426210C94E6
+:104190002C2111240C9471210E944E2170F3959FC3
+:1041A000C1F3950F50E0551F629FF001729FBB272E
+:1041B000F00DB11D639FAA27F00DB11DAA1F649FCA
+:1041C0006627B00DA11D661F829F2227B00DA11D7D
+:1041D000621F739FB00DA11D621F839FA00D611D03
+:1041E000221F749F3327A00D611D231F849F600D24
+:1041F000211D822F762F6A2F11249F5750409AF04D
+:10420000F1F088234AF0EE0FFF1FBB1F661F771FD8
+:10421000881F91505040A9F79E3F510580F00C94A3
+:1042200026210C9471215F3FE4F3983ED4F38695E8
+:1042300077956795B795F795E7959F5FC1F7FE2B43
+:10424000880F911D9695879597F9089597F99F671F
+:1042500080E870E060E008959FEF80EC089500240E
+:104260000A941616170618060906089500240A94DB
+:1042700012161306140605060895092E0394000C61
+:1042800011F4882352F0BB0F40F4BF2B11F460FFF0
+:1042900004C06F5F7F4F8F4F9F4F089557FD905819
+:1042A000440F551F59F05F3F71F04795880F97FBFA
+:1042B000991F61F09F3F79F08795089512161306B4
+:1042C0001406551FF2CF4695F1DF08C016161706E3
+:1042D0001806991FF1CF8695710561050894089518
+:1042E000E894BB2766277727CB0197F90895F999BA
+:1042F000FECF92BD81BDF89A992780B50895262FEB
+:10430000F999FECF1FBA92BD81BD20BD0FB6F894BA
+:10431000FA9AF99A0FBE019608952F923F924F9202
+:104320005F926F927F928F929F92AF92BF92CF9245
+:10433000DF92EF92FF920F931F93CF93DF93CDB74E
+:10434000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFC6
+:1043500009942A88398848885F846E847D848C8497
+:104360009B84AA84B984C884DF80EE80FD800C81A0
+:104370001B81AA81B981CE0FD11D0FB6F894DEBF83
+:104380000FBECDBFED010895A29FB001B39FC00144
+:10439000A39F700D811D1124911DB29F700D811D71
+:1043A0001124911D089510E0C5E7D0E004C0FE017E
+:1043B0000E94B4192196C637D107C9F7F894FFCFE8
+:1043C0002C01068C0B8C0B000054048000000000B4
+:1043D00000230B0310EC0ACA0ADE0A6A0B4F4B00DB
+:1043E0005620332E332E30205349474E414C6475AE
+:1043F000696E6F202D20636F6D70696C656420613C
+:1044000074205365702031362032303136203233FB
+:104410003A32343A3037004954506172616D733A20
+:1044200020003B000D0A004D5300443D0043503D29
+:104430000053503D004F0025303258002530315890
+:10444000004D43004C4C3D004C483D00534C3D005A
+:0C44500053483D00433D004D5500500016
:00000001FF