diff --git a/.gitignore b/.gitignore index e9d123f..4c40fb5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ # # Resource files are binaries containing manifest, project icon and version info. # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. -#*.res +*.res # # Type library file (binary). In old Delphi versions it should be stored. # Since Delphi 2009 it is produced from .ridl file and can safely be ignored. @@ -16,29 +16,17 @@ # # Visual LiveBindings file. Added in Delphi XE2. # Uncomment this if you are not using LiveBindings Designer. -#*.vlb +*.vlb # # Deployment Manager configuration file for your project. Added in Delphi XE2. # Uncomment this if it is not mobile development and you do not use remote debug feature. -#*.deployproj +*.deployproj # # C++ object files produced when C/C++ Output file generation is configured. # Uncomment this if you are not using external objects (zlib library for example). #*.obj # -# Default Delphi compiler directories -# Content of this directories are generated with each Compile/Construct of a project. -# Most of the time, files here have not there place in a code repository. -#Win32/ -#Win64/ -#OSX64/ -#OSXARM64/ -#Android/ -#Android64/ -#iOSDevice64/ -#Linux64/ - # Delphi compiler-generated binaries (safe to delete) *.exe *.dll @@ -77,7 +65,18 @@ __recovery/ # Castalia statistics file (since XE7 Castalia is distributed with Delphi) *.stat +.gitignore +*.log -# Boss dependency manager vendor folder https://github.com/HashLoad/boss -modules/ +*.7z +*.skincfg +*.json + + +_old/ +bak/ +core/ +defsX/ +_plgPlan/bak/ +_plgPlan/pictDS/ diff --git a/ComObjekt.pas b/ComObjekt.pas new file mode 100644 index 0000000..a160d39 --- /dev/null +++ b/ComObjekt.pas @@ -0,0 +1,884 @@ +unit ComObjekt; + +INTERFACE + +uses System.Types, System.SysUtils, Win.ComObj, System.Classes, + ddPlugin_TLB, plgKonfig; + +//{$DEFINE IHePlugin3} + +const + plgHDCRTNParams_class: TGUID = '{FEDE87D4-E557-48DD-9A35-B13DEF5FE1BB}'; + CRLF = #13#10; + +type + TPlgHDCRootvinParams = class (TComObject, IHePlugin) + private + procedure Run (const Helios: IHelios); safecall; + end; + +// !!! pri zmene IHePluginXX upravit take v plgAbout - info o jadru !!! + TPlgHDCRootvin = class(TComObject, {$IFDEF IHePlugin3} IHePlugin3 {$ELSE} IHePlugin {$ENDIF}) + private + FHelios : IHelios; + function PartnerIdentification: WideString; safecall; + function DelphiCompilerVersion: Single; safecall; + procedure OnException(Sender: TObject; E: Exception); + procedure Run (const Helios: IHelios); safecall; +// procedure Work (const Helios: IHelios); safecall; +// procedure About (const Helios: IHelios); safecall; + procedure Install (const Helios: IHelios); safecall; + procedure ZkotrolujDefiniceSQL (const Helios: IHelios); + function NactiKonfig (const Helios: IHelios): boolean; + end; + + + +IMPLEMENTATION + +uses Vcl.Controls, System.Win.ComServ, Winapi.Windows, Vcl.Graphics, Vcl.Forms, Vcl.Dialogs, System.Variants, + System.StrUtils, System.Hash, System.AnsiStrings, + plgType, plgMain, plgSpravce, +// [RK 13.04.2012] nove komponenty DevExpress toto vyzaduji, jinak zatuhne Helios + dxGDIPlusAPI{!initialization!}, + NativeXml, datMod, helUtils, helTabsBIDs, frmPekarna, frmPlan, frmRamcovyPlan; + + +var oVar1, oVar2: OleVariant; + LocalFormatSettings: TFormatSettings; + apiMod, jeTest: boolean; + apiServer, plgHDCRTN_Name: string; + + tBid, fId: integer; + delkaRC, idKZrodic, idDZrodic, cOrgRodic, cOrgMU, cOrgPrijem, dpzOZ: integer; + radaDZ: string; + + + function TPlgHDCRootvin.DelphiCompilerVersion: Single; + begin + Result:= System.CompilerVersion; + end; + + + + + function TPlgHDCRootvin.PartnerIdentification: WideString; + begin + Result:= 'HEOR0400-00044'; + end; + + + procedure TPlgHDCRootvin.OnException (Sender: TObject; E: Exception); + begin + try + LockWindowUpdate (0); + FHelios.Error (plgPrelozException(E.Message)); + except + Vcl.Forms.Application.ShowException(E); //pro jistotu + end; + end; + + +{ + procedure TPlgHDCRootvin.Work (const Helios: IHelios); + var s: WideString; + begin + s := Concat('Nacházíte se v tabulce ', Helios.MainBrowseTable(), '.'); + Helios.Info(s); + end; + + + + + procedure TPlgHDCRootvin.About (const Helios: IHelios); + var s: WideString; + begin + s := 'Tento plugin je určen pro testování základních funkcí HELIOS iNuvio Interface.'; + Helios.Info(s); + end; +} + + procedure TPlgHDCRootvin.Install (const Helios: IHelios); + var s: WideString; + begin + ZkotrolujDefiniceSQL (Helios); + s := 'Instalace proběhla úspěšně.'; + Helios.Info(s); + end; + + + + + function TPlgHDCRootvin.NactiKonfig (const Helios: IHelios): Boolean; + var xml: TNativeXml; + r, n1, n2: TXmlNode; + fn: string; + begin + result:= true; + datMod.phServer:= 'http://rootvin.datazone.cloud/helios/api'; + + fn:= GetModuleName(HInstance); + fn:= ChangeFileExt(fn, '.xml'); + + if (FileExists(fn)) then + begin + xml:= TNativeXml.Create(nil); + try + xml.LoadFromFile(fn); + if not(xml.IsEmpty) then + begin + r:= xml.Root; + if (r<>nil) then + begin + n1:= r.NodeByName('cfgPluginHDCRTN'); + if (n1<>nil) then + datMod.phServer:= n1.ReadAttributeString('phServer', ''); + end; + end; + finally + xml.Free; + end; + end; + + + end; + + + + + procedure TPlgHDCRootvin.ZkotrolujDefiniceSQL (const Helios: IHelios); + var lSQL, lSQL2, lSQLX, errMsg, srcNazev, objectNazev, trgName, sqlDefDB, sqlDefPlg: string; + rs: TResourceStream; + ms: TMemoryStream; + arrDefs: TStringList; + i, pCRLF: integer; + canCont, canCont2: boolean; + hash1, hash2: string; + + function LoadStringFromStream (const AStream: TStream): String; + var lenX: Integer; + begin + AStream.Seek(0,0); + lenX:= AStream.Size - AStream.Position; + SetLength(Result, lenX); + if (lenX>0) then + AStream.ReadBuffer(Result[1], lenX); + end; + function MemoryStreamToAnsiString (const M: TMemoryStream): AnsiString; + begin + SetString(Result, PAnsiChar(M.Memory), M.Size); + end; + + begin + lSQL:= helUtils.getHeliosStrVal(Helios, '', 'SELECT DATEPART(week, CONVERT(datetime, N''11.12.2023'', 104))'); + lSQL2:= helUtils.getHeliosStrVal(Helios, '', 'SELECT DATEPART(iso_week, CONVERT(datetime, N''11.12.2023'', 104))'); + if (lSQL='51') and (lSQL2='50') then + datMod.sqlLang:= 'czech' + else + datMod.sqlLang:= 'english'; + + + + arrDefs:= TStringList.Create; + + arrDefs.Add('tbl_hdc_ph_Log'); + arrDefs.Add('tbl_hdc_ph_PrijataJsonData'); + arrDefs.Add('trg__hdc_ph_PrijataJsonData_D'); + arrDefs.Add('ef_GetDatumASmenu'); + arrDefs.Add('ef_Bit2Int'); + + arrDefs.Add('col_TabEvidRozpracOperR_EXT'); + arrDefs.Add('col_TabStavSkladu_EXT'); + arrDefs.Add('col_TabVazbyPrikazu_EXT'); + arrDefs.Add('col_TabKmenZbozi_EXT'); + arrDefs.Add('col_TabPohybyZbozi_EXT'); + arrDefs.Add('col_TabDokladyyZbozi_EXT'); + + arrDefs.Add('tbl__TabVyrobaVydejMatSarze'); + arrDefs.Add('tbl__TabVyrobaPalety'); + arrDefs.Add('tbl__TabVyrobaPaletyUkonceni'); + arrDefs.Add('tbl__TabVyrobaPaletyPohybOZ'); + arrDefs.Add('tbl__TabVyrobaStrojCinnost'); + arrDefs.Add('tbl__TabVyrobaTestoVyroba'); + arrDefs.Add('tbl__TabVyrobaTestoSpotreba'); + + arrDefs.Add('ef_Vyroba_VratNovyPaletovyList'); + arrDefs.Add('ef_Vyroba_VratCisloSarze'); + arrDefs.Add('ef_Kmen_VratPocetKsVKartonu'); + arrDefs.Add('tbl__TabVyrobaObjednavky'); +// arrDefs.Add('tbl__TabVyrobaOperaceStartStop'); + + arrDefs.Add('ep_P01_HDC1'); + arrDefs.Add('ep_P01'); + arrDefs.Add('ep_P03_HDC1'); + arrDefs.Add('ep_P03'); + + arrDefs.Add('ep_V03_HDC1'); + arrDefs.Add('ep_V03'); + + + arrDefs.Add('ep_Vyroba_VyrobaMimoPlan'); + arrDefs.Add('ep_Vyroba_Doklady_Micharna'); + arrDefs.Add('ep_Vyroba_GenVydejZeMzdy'); + arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy'); + arrDefs.Add('ep_Vyroba_DoplnSkladProVydejDleDokl'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper'); + arrDefs.Add('ep_Vyroba_PrijemNestandard'); + arrDefs.Add('ep_Vyroba_VyrobaMimoPlan'); + arrDefs.Add('ep_HDC_PZ_ZapisPolozek'); + arrDefs.Add('ep_Vyroba_GenerujPalety'); + arrDefs.Add('ep_Vyroba_GenSouhrnnyVydej'); + arrDefs.Add('tbl__TabVyrobaVzorky'); + arrDefs.Add('tbl__TabKontrolyCCP1'); + arrDefs.Add('tbl__TabVyrobaOdpadPek'); + +// planovani + arrDefs.Add('col_Prikaz_EXT'); + arrDefs.Add('col_AdvKPDavky_EXT'); + arrDefs.Add('tbl__TabVyrobaPlanRozpad'); + arrDefs.Add('ef_Vyroba_GenerujRozpadCasu'); + arrDefs.Add('ep_Vyroba_ZapisDoPlanu'); + arrDefs.Add('ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu'); + arrDefs.Add('ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'); + arrDefs.Add('trg__TabPlan_HDC_D'); + arrDefs.Add('trg__TabAdvKPDavky_HDC_D'); + + +// arrDefs.Add('spec_Clear'); + arrDefs.Add('trg__TabVyrobaObjednavky_IU'); + arrDefs.Add('trg__TabVyrobaObjednavky_Pol_D'); + arrDefs.Add('trg__TabVyrobaPalety_IU'); + arrDefs.Add('trg__TabVyrobaPalety_D'); + arrDefs.Add('trg__TabPohybyZbozi_HDC_IU'); + arrDefs.Add('trg__TabPohybyZbozi_HDC_D'); + arrDefs.Add('trg__TabVyrCP_HDC_IU'); + arrDefs.Add('trg__TabVyrCP_HDC_D'); + arrDefs.Add('trg__TabVyrobaPaletyUkonceni_D'); + arrDefs.Add('trg__TabVyrobaVydejMatSarze_IU'); + arrDefs.Add('trg__TabVyrCisPrikaz_HDC_D'); + + for i:=0 to arrDefs.Count-1 do + begin + ms:= TMemoryStream.Create; + try + srcNazev:= arrDefs.Strings[i]; + canCont:= true; + + + if (canCont) then + begin + rs:= TResourceStream.Create(HInstance, srcNazev.ToUpper, RT_RCDATA); + ms.CopyFrom(rs, rs.Size); + + lSQL:= MemoryStreamToAnsiString(ms); + objectNazev:= LeftStr(lSQL, lSQL.IndexOf(Chr(13))).Replace('-- ', ''); + + + if (srcNazev.StartsWith('ep_', true)) or (srcNazev.StartsWith('ef_', true)) or (srcNazev.StartsWith('trg_')) then + begin + canCont:= false; + hash1:= ''; + hash2:= ''; + + if (srcNazev.StartsWith('trg_')) then + lSQLX:= 'SELECT m.definition FROM ' + Helios.CurrentDB + '.sys.triggers t INNER JOIN ' + Helios.CurrentDB + '.sys.objects o on t.object_id = o.object_id' + + ' INNER JOIN ' + Helios.CurrentDB + '.sys.sql_modules m on m.object_id = o.object_id WHERE t.name=N' + objectNazev.Replace('dbo.','').QuotedString + else + lSQLX:= 'SELECT OBJECT_DEFINITION(OBJECT_ID(N' + (Helios.CurrentDB + '.' + objectNazev).QuotedString + '))'; + + sqlDefDB:= helUtils.getHeliosStrVal(Helios, '', lSQLX); + if (sqlDefDB<>'') then + begin + sqlDefDB:= sqlDefDB.Replace('/*' + plgHDCRTN_Name + '*/', ''); + hash1:= THashMD5.GetHashString(sqlDefDB); + if (srcNazev.StartsWith('trg_')) then + sqlDefPlg:= MidStr(lSQL, lSQL.IndexOf(Chr(13))+3, lSQL.Length) + else + sqlDefPlg:= lSQL; + if (sqlDefPlg.StartsWith(CRLF)) then + sqlDefPlg:= MidStr(sqlDefPlg, 3, sqlDefPlg.Length); + if (sqlDefPlg.EndsWith(CRLF)) then + sqlDefPlg:= LeftStr(sqlDefPlg, sqlDefPlg.Length-2); + hash2:= THashMD5.GetHashString(sqlDefPlg); + if (hash1<>hash2) then + canCont:= true; + end + else + canCont:= true; + end; + + if not(canCont) then + Continue; + + if (srcNazev.StartsWith('ep_', true)) then + Helios.ExecSQL ('DROP PROCEDURE IF EXISTS dbo.' + srcNazev); + if (srcNazev.StartsWith('ef_', true)) then + Helios.ExecSQL ('DROP FUNCTION IF EXISTS dbo.' + srcNazev); + + + if (srcNazev.StartsWith('trg_')) then + begin + if (lSQL.StartsWith('-- ')) then + lSQL:= MidStr(lSQL, lSQL.IndexOf(Chr(13))+3, lSQL.Length); + trgName:= LeftStr(lSQL, lSQL.IndexOf(' ON dbo.')); + trgName:= trgName.Replace ('CREATE TRIGGER ', ''); + Helios.ExecSQL ('DROP TRIGGER IF EXISTS ' + trgName); + end; + + if (srcNazev.StartsWith('tbl_', true)) then + lSQL:= lSQL.Trim; + + if (lSQL<>'') then + try + Helios.ExecSQL (lSQL); + except on E:Exception do + if not(E.Message.Contains('already')) then + Helios.Error(#1'Chyba definice ' + srcNazev + #1 + CRLF + E.Message); + end; + + end; + finally + ms.Free; + rs.Free; + end; + end; + + arrDefs.Free; + end; + + + + + procedure TPlgHDCRootvin.Run (const Helios: IHelios); + const HeliosMinVersion = $030020240620; + BrowseID_PluginInfo = 871; + var extId: Integer; + errMsg: String; + typAkce: integer; + browID, cRec, cntID, l_loop, idDZ, dpz, cOrg, newBid: integer; + lSQL, lSQLx, autor, radDokl, IDcka, params, paramsBak, vlastPar, vlastPar2, contInfo, sz, rc, podm, sTemp: string; + iTemp, iTemp2: integer; + arrId: TArray; + term: boolean; + i: Integer; + + Browse: TplgBrowse; + GUIDAkce: String; + Q: IHeQuery; + Porovnani: TplgPorovnaniVerzi; + VerzeDB: String; + ZmenyOK: Boolean; + MinVerze: Int64; + PomHandle: THandle; + SlepaProcName: string; + SlepaProcGUID: string; + SlepaProcBrowse: string; + + fPekarna: TformPekarna; + fPlan: TformPlan; + fRamcovyPlan: TformRamcovyPlan; + begin + UseLatestCommonDialogs:= true; + LocalFormatSettings:= TFormatSettings.Create; + + try + FHelios:= Helios; + SpravceHeliosu.PridejHelios (FHelios); + try + Application.OnException:= Self.OnException; + + // [RK 10.04.2006] zavedeni PomHandle, problemy s realokaci ikonky + // [RK 02.04.2009] doplneno pretypovani na THandle + PomHandle := THandle(FHelios.MainApplicationHandle); + if PomHandle <> Application.Handle then + Application.Handle := PomHandle; + + PomHandle := THandle(FHelios.MainApplicationIconHandle); + if PomHandle <> Application.Icon.Handle then + Application.Icon.Handle := PomHandle; + + with Application.DefaultFont do + begin + CharSet := FHelios.Charset; + Name := FHelios.Font; + Height := FHelios.FontHeight; + + Screen.MenuFont.CharSet := CharSet; + Screen.MenuFont.Name := Name; + Screen.MenuFont.Height := Height; + end; + +// ### INICIALIZACE ### + InicializaceJadraPluginu (FHelios); + PluginKonfig.VlastniInicializacePluginu (FHelios); + + VerzeDB:= plgNactiVerziPluginuZDB (FHelios, ZmenyOK); + Porovnani:= plgPorovnejVerziPluginuSVerziDB (VerzeDB); + + +// ### INSTALACE PLUGINU ### + if (FHelios.BrowseID = BrowseID_PluginInfo) and plgExtKomIDInstalace(FHelios) then + begin + InstalacePluginu (FHelios, (FHelios.ExtKomID = Cplg_ExtKomID_TichaInstalace)); + Exit; + end; + + + + + NactiKonfig (Helios); + + if (Helios.HeVersion'') then + if not(TryStrToInt(params, typAkce)) then + typAkce:= -1; + end; + + + if (browID>0) then + if (Helios.BrowseID<>browID) then + begin + typAkce:= 0; + Helios.Error('Tento plugin lze volat pouze z přehledu: '#1 + IntToStr(browID) + #1'.'); + Exit; + end; + + + IDcka:= ''; + cRec:= 0; + if (Helios.SelectedRecordIDs<>'') then + IDcka:= Helios.SelectedRecordIDs + else + if not VarIsNull(Helios.CurrentRecordID) then + begin + cRec:= StrToInt(VarToStr(Helios.CurrentRecordID)); + IDcka:= IntToStr(cRec); + end; + + if (IDcka<>'') then + begin + cntID:= 1 + Length(IDcka)-Length(StringReplace(IDcka,',','',[rfReplaceAll])); + SetLength(arrID,cntID); + for l_loop:=0 to cntID-1 do + begin + if Pos(',',IDcka)>0 then + begin + arrID[l_loop]:= StrToInt(LeftStr(IDcka,Pos(',',IDcka)-1)); + IDcka:= MidStr(IDcka,Pos(',',IDcka)+1,262140) // 65535 * 4 (max. delka pole) + end + else + arrID[l_loop]:= StrToInt(IDcka); + end; + cRec:= arrID[0]; + end; + + + idDZrodic:= -1; + idDZ:= -1; + cOrgRodic:= -1; + cOrg:= -1; + cOrgMU:= -1; + cOrgPrijem:= -1; + dpzOZ:= -1; + if (Helios.HeliosVlastnik<>nil) then + begin + if (Helios.HeliosVlastnik.QueryEdit<>nil) then + begin + try + if (Helios.HeliosVlastnik.QueryEdit.FieldByName('ID')<>nil) then + if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('ID')), idDZrodic)) then + idDZrodic:= -1; + finally + end; + try + dpzOZ:= VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('DruhPohybuZbo')).ToInteger; + finally + end; + try + radaDZ:= VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('RadaDokladu')); + finally + end; + try + if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('CisloOrg')), cOrgRodic)) then + cOrgRodic:= -1; + finally + end; + try + if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('MistoUrceni')), cOrgMU)) then + cOrgMU:= -1; + finally + end; + try + if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('Prijemce')), cOrgPrijem)) then + cOrgPrijem:= -1; + finally + end; + end; + + if (Helios.QueryEdit<>nil) then + begin + try + if (Helios.QueryEdit.FieldByName('ID')<>nil) then + if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('ID').Value), idDZ)) then + idDZ:= -1; + finally + end; + + if (browID<>959) and (browID<>962) then // ne pro DObj + begin + try + dpzOZ:= VarToStr(Helios.QueryEdit.FieldByName('DruhPohybuZbo').Value).ToInteger; + finally + end; + try + radaDZ:= VarToStr(Helios.QueryEdit.FieldByName('RadaDokladu').Value); + finally + end; + end; + + try + if (Helios.QueryEdit.FieldByName('CisloOrg')<>nil) then + if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('CisloOrg').Value), cOrg)) then + cOrg:= -1; + finally + end; + try + if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('MistoUrceni').Value), cOrgMU)) then + cOrgMU:= -1; + finally + end; + try + if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('Prijemce').Value), cOrgPrijem)) then + cOrgPrijem:= -1; + finally + end; + end; + end; + + + + if FHelios.ExtKomID = Cplg_ExtKomID_EditorController then + SpustControllerEditoru (FHelios) + else + if FHelios.ExtKomID = Cplg_ExtKomID_Zpravy then + PluginKonfig.ExtKomIDJeRovnoNule (FHelios) + else + if FHelios.ExtKomID = Cplg_ExtKomID_Konfigurace then + PluginKonfig.PluginConfiguration (FHelios) + else + begin + apiMod:= false; + datMod.apiMod:= apiMod; + apiServer:= ''; + datMod.apiServer:= apiServer; + with Helios.OpenSQL('SELECT CONVERT(nvarchar(255), Poznamka) AS Poznamka FROM ' + tblExtKomPar + ' WHERE IdExtKom=' + extId.ToString + ' AND Popis=N''APIServer''') do + if (RecordCount=1) then + if (VarToStr(FieldByNameValues('Poznamka'))<>'') then + begin + datMod.apiMod:= true; + datMod.apiServer:= VarToStr(FieldByNameValues('Poznamka')); + // fPekarna.apiMod:= datMod.apiMod; + // fPekarna.apiServer:= datMod.apiServer; + end; + + + + case typAkce of + -1: begin + Install (Helios) + { + else if extId = -2 then + About (Helios) + else + Work (Helios); + } + end; + + 1: begin + fPekarna:= TformPekarna.Create(nil); + try + try + fPekarna.Helios:= Helios; + fPekarna.apiMod:= apiMod; + fPekarna.apiServer:= apiServer; + fPekarna.ShowModal; + except on E:Exception do + if not(term) then + begin + errMsg:= 'Chyba fPekarna: ' + E.Message; + Helios.Error(errMsg); + raise Exception.Create(errMsg); + end; + end; + finally + fPekarna.Free; + end; + end; + + 2: begin + if not((dpzOZ=4) and (radaDZ='231')) then + Helios.Error(#1'Akci můžete spustit jen nad dokladem Výdejky/převodky řady 231'#1) + else + begin + tBid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Micharna_PozadavkyObj'''); + if (tBid>0) then + begin + lSQL:= 'DROP TABLE IF EXISTS #TabZapisPolozekOZ' + CRLF + 'CREATE TABLE #TabZapisPolozekOZ (ID INT IDENTITY(1,1) NOT NULL, IDPolozky INT NOT NULL, PRIMARY KEY (ID))' + CRLF; + podm:= '(hvw_Vyroba_Micharna_PozadavkyObj.Blokovano=0 OR hvw_Vyroba_Micharna_PozadavkyObj.MnozKVydeji>0) AND hvw_Vyroba_Micharna_PozadavkyObj.Splneno=0'; + if Helios.Prenos2 (tBid, 'ID', 'ID', oVar1, oVar2, podm, 'Vyberte položky', false, true, false, 1) then + begin + arrId:= helUtils.StrToArrayInt (VarToStr(oVar1), ','); + for i:=Low(arrId) to High(arrId) do + lSQL:= lSQL + 'INSERT #TabZapisPolozekOZ (IDPolozky) SELECT ' + arrId[i].ToString + CRLF; + end; + if (helUtils.SQLObjectExists(Helios, 'dbo.ep_HDC_PZ_ZapisPolozek')) and (Length(arrId)>0) then + begin + lSQL:= lSQL + 'EXEC dbo.ep_HDC_PZ_ZapisPolozek @typ=1, @idDokladOZDst=' + idDZ.ToString; // 1=zapis z dbo._TabVyroba_Objednavky do dokladu OZ + try + Helios.ExecSQL(lSQL); + except on E:Exception do + Helios.Error(#1'Chyba zápisu položek:'#1 + CRLF + E.Message); + end; + end; + end; + end; + end; + + 3: begin + fRamcovyPlan:= TformRamcovyPlan.Create (nil); + try + fRamcovyPlan.Helios:= Helios; + fRamcovyPlan.ShowModal; + finally + fRamcovyPlan.Free; + end; + end; + + + 101: begin + fPlan:= TformPlan.Create (nil); + try + try + fPlan.Helios:= Helios; + fPlan.ShowModal; + except on E:Exception do + if not(term) then + begin + errMsg:= 'Chyba fPlan: ' + E.Message; + Helios.Error(errMsg); + raise Exception.Create(errMsg); + end; + end; + finally + FreeAndNil(fPlan); + end; + end; + + end; + + + Helios.Refresh(true); + if (contInfo='NULL') then + Helios.ExecSQL('SET CONTEXT_INFO 0x') + else + Helios.ExecSQL('SET CONTEXT_INFO 0x' + contInfo); + + // ukoncit Helios, lze pouzit v Automatech + if (term) then + Application.Terminate; + end; + + + + finally + SpravceHeliosu.OdeberHelios (FHelios); + end; + except + // neni to pres Application.HandleException() kvuli probublani vyjimky + // do Heliosu (konkretni pouziti napr. v Automatu) + on E: EExternal do + begin + LockWindowUpdate(0); // jistota, kdyby nekde zustalo viset + raise EExternal.Create(E.Message); + end; + + on E: Exception do + begin + LockWindowUpdate(0); // jistota, kdyby nekde zustalo viset + E.Message:= plgPrelozException(E.Message); + raise; + end; + end; + + end; + + + + +// param plugin ???? + procedure TPlgHDCRootvinParams.Run (const Helios: IHelios); + var lSQL: string; + begin + lSQL:= 'DECLARE @p1 NVARCHAR(10)=N''''' + CRLF + + 'IF OBJECT_ID(N''tempdb..#TabExtKomParPlugin'',''U'') IS NOT NULL' + CRLF + + ' SELECT TOP(1) @p1=HIQPar1 FROM #TabExtKomParPlugin' + CRLF + + 'SELECT @p1 AS Par1'; + with Helios.OpenSQL(lSQL) do + Helios.Info('Par1: ' + VarToStr(FieldByName('Par1').Value)); + end; + + + + + + + +{ =========================================================================== } + +function PluginGetSysAndClassName(Vysl: PAnsiChar): DWORD; stdcall; +begin + with PluginKonfig do + begin + Result := Length(PluginSystemoveJmeno + '.' + PluginClassName); + if Assigned(Vysl) then + System.AnsiStrings.StrPCopy(Vysl, AnsiString(PluginSystemoveJmeno + '.' + PluginClassName)); + end; +end; + +{ --------------------------------------------------------------------------- } +(* +procedure PluginGetDelphiVersion(Vysl: PAnsiChar); stdcall; + var + LVer: AnsiString; +begin + if Assigned(Vysl) then + begin + {$IFDEF VER220} { Embarcadero Delphi 15 XE} + LVer := 'XE'; + {$ELSE} + {$IFDEF VER240} { Embarcadero Delphi 17 XE3} + LVer := 'XE3'; + {$ELSE} + LVer := '??'; + {$ENDIF} + {$ENDIF} + + StrPCopy(Vysl, LVer); + end; +end; +*) +{ --------------------------------------------------------------------------- } + +procedure PluginReadyForSilentInstall; stdcall; +begin + // nic, pouze flag pro pouziti tiche instalace +end; + +{ --------------------------------------------------------------------------- } + +// AJ, 8.12.2015 - Administrátorská podpora v HeO +procedure PluginReadyForSuperSilentInstall; stdcall; +begin + // nic, pouze flag pro použití super tiché instalace (tj. instalace, která požírá SQL raiserrory, hlášky a chyby a vše zaloguje do logu) +end; + +{ --------------------------------------------------------------------------- } + +exports + DllGetClassObject, + DllCanUnloadNow, + DllRegisterServer, + DllUnregisterServer, + PluginGetSysAndClassName, +// PluginGetDelphiVersion, + PluginReadyForSilentInstall, + PluginReadyForSuperSilentInstall // AJ, 8.12.2015 - Administrátorská podpora v HeO + ; + +initialization + TComObjectFactory.Create(ComServer, TPlgHDCRootvin, PluginKonfig.PluginClass_ID, PluginKonfig.PluginClassName, '', ciMultiInstance, tmSingle); +// TComObjectFactory.Create(ComServer, TPlgHDCRootvin, plgHDCRTN_class, 'run', '', ciMultiInstance, tmSingle); +// TComObjectFactory.Create(ComServer, TPlgHDCRootvinParams, plgHDCRTNParams_class, 'params', '', ciMultiInstance, tmSingle); +END. diff --git a/PluginHDCRTN.dpr b/PluginHDCRTN.dpr new file mode 100644 index 0000000..f847eb3 --- /dev/null +++ b/PluginHDCRTN.dpr @@ -0,0 +1,74 @@ +library PluginHDCRTN; + + + +uses + madExcept, + madLinkDisAsm, + madListHardware, + madListProcesses, + madListModules, + ComServ, + System.Types, + AnsiStrings, + ComObjekt in 'ComObjekt.pas', + frmPekarna in 'frmPekarna.pas' {formPekarna}, + datMod in 'datMod.pas' {dm: TDataModule}, + frmPrijemNestandard in 'frmPrijemNestandard.pas' {formPrijemNestandard}, + uUtils in 'uUtils.pas' {frmAbout}, + frmKontrolaCCP1 in 'frmKontrolaCCP1.pas' {formKontrolaCCP1}, + frmKontrolaCCP1edt in 'frmKontrolaCCP1edt.pas' {formKontrolaCCP1edt}, + frmTiskKAStitku in 'frmTiskKAStitku.pas' {formTiskKAStitku}, + frmAktSarze in 'frmAktSarze.pas' {formAktSarze}, + frmTiskyNahledy in 'frmTiskyNahledy.pas' {formTiskyNahledy}, + frmPLZakazky in 'frmPLZakazky.pas' {formPLZakazky}, + frmZahajeniPalety in 'frmZahajeniPalety.pas' {formZahajeniPalety}, + frmUkonceniPalety in 'frmUkonceniPalety.pas' {formUkonceniPalety}, + frmVyrobniDenik in 'frmVyrobniDenik.pas' {formVyrobniDenik}, + frmPredvyroba in 'frmPredvyroba.pas' {formPredvyroba}, + frmPredvyrobaDetail in 'frmPredvyrobaDetail.pas' {formPredvyrobaDetail}, + frmVyrobaMimoPlan in 'frmVyrobaMimoPlan.pas' {formVyrobaMimoPlan}, + frmVyberPL in 'frmVyberPL.pas' {formVyberPL}, + frmVyberCinnostiStroje in 'frmVyberCinnostiStroje.pas' {formVyberCinnostiStroje}, + frmZasobaObjednavky in 'frmZasobaObjednavky.pas' {formZasobaObjednavky}, + frmObjednavkaMat in 'frmObjednavkaMat.pas' {formObjednavkaMat}, + frmOdpady in 'frmOdpady.pas' {formOdpady}, + frmSeznamPalet in 'frmSeznamPalet.pas' {formSeznamPalet}, + frmPrehledMicharna in 'frmPrehledMicharna.pas' {formPrehledMicharna}, + frmSpravaVzorku in 'frmSpravaVzorku.pas' {formSpravaVzorku}, + frmVyberSarze in 'frmVyberSarze.pas' {formVyberSarze}, + frmSarzeVydej in 'frmSarzeVydej.pas' {formSarzeVydej}, + frmPlan in '_plgPlan\frmPlan.pas' {formPlan}, + frmKmen in '_plgPlan\frmKmen.pas' {formKmen}, + datMod2 in '_plgPlan\datMod2.pas' {dm2: TDataModule}, + frmZavady in '_plgPlan\frmZavady.pas' {formZavady}, + frmVyrobniTyden in '_plgPlan\frmVyrobniTyden.pas' {formVyberTydne}, + frmRamcovyPlan in '_plgPlan\frmRamcovyPlan.pas' {formRamcovyPlan}, + plgMain in 'libSys\plgMain.pas', + frmPlanPaletListy in '_plgPlan\frmPlanPaletListy.pas' {formPlanPaletListy}; + +// Dokumentace se odkazuje na PChar, ale zda se neaktualni. Je mozne, ze byla napsana pred zmenou definice na UTF-16? + +function PluginGetSysAndClassName (Vysl: PAnsiChar): DWORD; stdcall; +const C_ProgID: AnsiString = 'PluginHDCRTN.run'; +begin + Result:= Length(C_ProgID); + if Assigned(Vysl) then + StrPCopy(Vysl, C_ProgID); +end; + + + +exports + DllGetClassObject, + DllCanUnloadNow, + DllRegisterServer, + DllUnregisterServer, + PluginGetSysAndClassName; + +{$R *.RES} +{$R PluginHDCRTNResource.RES} + + +BEGIN +END. diff --git a/PluginHDCRTN.dproj b/PluginHDCRTN.dproj new file mode 100644 index 0000000..2591811 --- /dev/null +++ b/PluginHDCRTN.dproj @@ -0,0 +1,1164 @@ + + + {8D5A19A9-6950-45EA-A251-8916AC7B1FB9} + PluginHDCRTN.dpr + True + Release + PluginHDCRTN + 1 + Library + VCL + 20.3 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + false + false + false + false + false + 00400000 + true + PluginHDCRTN + 1029 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= + System;Xml;Data;Datasnap;Web;Soap;TMS;System.Win;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + .\extCtrls;.\lib;.\libSys;$(DCC_UnitSearchPath) + + + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34 + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + Winapi;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=3.0.2024.1114;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 3 + 2024 + 1114 + true + (None) + none + D:\Data\Helios\HeliosMain.exe + D:\Data\Helios + + + RELEASE;$(DCC_Define) + 0 + false + 0 + + + CompanyName=;FileDescription=Helios iNuvio plugin pro Rootvin;FileVersion=3.0.2025.519;InternalName=;LegalCopyright=HD Consulting Strakonice, T.Buzin;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.3.1;ProgramID=com.embarcadero.$(MSBuildProjectName);LastCompiledTime=2025.05.21 19:06:43 + madExcept;$(DCC_Define) + 3 + 2 + true + true + 3 + 2025 + 519 + true + + + DEBUG;$(DCC_Define) + false + true + true + true + + + Debug + + + true + true + true + 1033 + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);LastCompiledTime=2025.05.21 14:33:39 + (None) + none + madExcept;$(DCC_Define) + 3 + + + + MainSource + + + +
formPekarna
+
+ +
dm
+ TDataModule +
+ +
formPrijemNestandard
+
+ +
frmAbout
+
+ +
formKontrolaCCP1
+
+ +
formKontrolaCCP1edt
+
+ +
formTiskKAStitku
+
+ +
formAktSarze
+
+ +
formTiskyNahledy
+
+ +
formPLZakazky
+
+ +
formZahajeniPalety
+
+ +
formUkonceniPalety
+
+ +
formVyrobniDenik
+
+ +
formPredvyroba
+
+ +
formPredvyrobaDetail
+
+ +
formVyrobaMimoPlan
+
+ +
formVyberPL
+
+ +
formVyberCinnostiStroje
+
+ +
formZasobaObjednavky
+
+ +
formObjednavkaMat
+
+ +
formOdpady
+
+ +
formSeznamPalet
+
+ +
formPrehledMicharna
+
+ +
formSpravaVzorku
+
+ +
formVyberSarze
+
+ +
formSarzeVydej
+
+ +
formPlan
+
+ +
formKmen
+
+ +
dm2
+ TDataModule +
+ +
formZavady
+
+ +
formVyberTydne
+ dfm +
+ +
formRamcovyPlan
+ dfm +
+ + +
formPlanPaletListy
+ dfm +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + + + + + PluginHDCRTN.dpr + + + Ethea SVGIconImageList VCL components + TurboPack Essentials Delphi Runtime package + Png Components for Delphi + DMVCFramework - CopyRight (2010-2024) Daniele Teti and the DMVCFramework Team + Ethea SVGIconImageList FMX components + Helios Orange Components + Express Cross Platform Library Icon Library by Developer Express Inc. + TurboPack LockBox 3 Delphi runtime package + Embarcadero Standard Components + TurboPack Orpheus Delphi datataware designtime package + TurboPack LockBox 3 VCL designtime package + TurboPack LockBox Delphi designtime package + Ethea IconFontsImageList VCL components + Ethea IconFontsImageList FMX components + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + False + False + False + True + False + + + + + PluginHDCRTN.dll + true + + + + + PluginHDCRTN.dll + true + + + + + 1 + + + 0 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 1 + + + 1 + + + + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + + + + + + + + + + + + + 12 + + + + +
diff --git a/PluginHDCRTN.mes b/PluginHDCRTN.mes new file mode 100644 index 0000000..3548167 --- /dev/null +++ b/PluginHDCRTN.mes @@ -0,0 +1,163 @@ +[GeneralSettings] +MesVersion=4 +HandleExceptions=1 +LinkInCode=1 +AppendMapFileToBinary=1 +NoOwnMadExceptSettings=0 +CheckFileCrc=1 +CheckForFrozenMainThread=1 +FreezeTimeout=60000 +ReportLeaks=0 +WindowsLogo=0 +CrashOnBuffer=0 +CrashOnUnderrun=0 +AutomaticallySaveBugReport=0 +AutoSaveBugReportIfNotSent=1 +AutomaticallyMailBugReport=0 +AutoMailProgressBox=0 +CopyBugReportToClipboard=0 +SuspendAllRunningThreads=0 +ShowPleaseWaitBox=1 +PleaseWaitIcon=plwait1 +AutomaticallyContinueApplication=1 +AutomaticallyRestartApplication=0 +AutomaticallyCloseApplication=0 +SendInBackground=0 +SendHelper=196864 +Send32Icon=send321 +UploadViaHttp=0 +HttpServer= +HttpSsl=0 +HttpPort=0 +HttpAccount= +HttpPassword= +UploadToFogBugz=0 +UploadToBugZilla=0 +UploadToMantis=0 +BugTrackerAccount= +BugTrackerPassword= +BugTrackerProject= +BugTrackerArea= +BugTrackerAssignTo= +MailAsSmtpServer=0 +MailAsSmtpClient=1 +SmtpServer=smtp.forpsi.com +SmtpSsl=0 +SmtpTls=1 +SmtpPort=0 +SmtpAccount=helios_info@hdconsulting.cz +SmtpPassword=SVKrFWa9/396BZ3oRdkq9/KgphAaE0+i +MailViaMapi=0 +MailViaMailto=0 +MailAddress=tomas.buzin@hdconsulting.cz +BugReportFile=bugreport.txt +AttachBugReport=1 +AttachBugReportFile=1 +DeleteBugReportFile=1 +BugReportSendAs=bugreport.txt +BugReportZip= +ScreenShotDepth=8 +ScreenShotAppOnly=0 +ScreenShotSendAs=screenshot.png +ScreenShotZip= +AdditionalAttachments= +AppendBugReports=1 +BugReportFileSize=200000 +DontSaveDuplicateExceptions=1 +DontSaveDuplicateFreezings=1 +DuplicateExceptionDefinition=1 +DuplicateFreezeDefinition=2 +ShowExceptionBox=1 +OkBtnText=&OK +DetailsBtnText=&Details +PleaseWaitTitle=Information +PleaseWaitText=Please wait a moment... +BugTrackerTitle=%25appname%25, %25exceptMsg%25 +BugTrackerDescr=error details: %0d%0a%25errorDetails%25 +MailSubject=bug report +MailBody=please find the bug report attached +SendBoxTitle=Sending bug report... +PrepareAttachMsg=Preparing attachments... +MxLookupMsg=Searching for mail server... +ConnectMsg=Connecting to server... +SendMailMsg=Sending mail... +FieldsMsg=Setting fields... +SendAttachMsg=Sending attachments... +SendFinalizeMsg=Finalizing... +MailFailureMsg=Sorry, sending the bug report didn't work. +VersionVariable= +[ExceptionBox] +ShowButtonMailBugReport=0 +ShowButtonSaveBugReport=0 +ShowButtonPrintBugReport=0 +ShowButtonShowBugReport=1 +ShowButtonContinueApplication=1 +ShowButtonRestartApplication=1 +ShowButtonCloseApplication=1 +IconButtonSendBugReport=send1 +IconButtonSaveBugReport=save1 +IconButtonPrintBugReport=print1 +IconButtonShowBugReport=show1 +IconButtonContinueApplication=continue1 +IconButtonCantContinueApplication=cantContinue1 +IconButtonRestartApplication=restart1 +IconButtonCloseApplication=close1 +FocusedButton=4 +SendAssistant=SendAssistant +SaveAssistant=SaveAssistant +PrintAssistant=PrintAssistant +AutomaticallyShowBugReport=0 +NoOwnerDrawButtons=0 +BigExceptionIcon=big1 +TitleBar=%25appname%25 +ExceptionMessage=An error occurred in the application. +FrozenMessage=The application seems to be frozen. +BitFaultMsg=The file "%25modname%25" seems to be corrupt! +MailBugReportText=send bug report +SaveBugReportText=save bug report +PrintBugReportText=print bug report +ShowBugReportText=show bug report +ContinueApplicationText=continue application +RestartApplicationText=restart application +CloseApplicationText=close application +[BugReport] +ListThreads=1 +ListModules=1 +ListHardware=1 +ShowCpuRegisters=1 +ShowStackDump=1 +Disassembly=1 +HideUglyItems=0 +ShowRelativeAddrs=1 +ShowRelativeLines=1 +FormatDisassembly=0 +LimitDisassembly=5 +EnabledPlugins=modules|processes|hardware +[Filters] +Filter1ExceptionClasses=EDBEditError +Filter1DontCreateBugReport=0 +Filter1DontCreateScreenshot=0 +Filter1DontSuspendThreads=1 +Filter1DontCallHandlers=0 +Filter1ShowBox=4 +Filter1Assis= +Filter2ExceptionClasses= +Filter2DontCreateBugReport=0 +Filter2DontCreateScreenshot=0 +Filter2DontSuspendThreads=0 +Filter2DontCallHandlers=0 +Filter2ShowBox=0 +Filter2Assis= +GeneralDontCreateBugReport=0 +GeneralDontCreateScreenshot=0 +GeneralDontSuspendThreads=0 +GeneralDontCallHandlers=0 +GeneralShowBox=0 +GeneralAssis= +[Assistants] +Assistant1=SendAssistant|Send Assistant|ContactForm|DetailsForm|ScrShotForm +Assistant2=SaveAssistant|Save Assistant|ContactForm|DetailsForm +Assistant3=PrintAssistant|Print Assistant|ContactForm|DetailsForm +Forms1=TPF0%0eTMEContactForm%0bContactForm%07Message%0c%13%00%00%00Contact Information%08MinWidth%04%00%00%00%00%08OnAction%0c%1b%00%00%00madExcept.HandleContactForm%05Timer%04%00%00%00%00%00%09INVButton%0bContinueBtn%07Caption%0c%08%00%00%00Continue%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%07SkipBtn%07Caption%0c%04%00%00%00Skip%07Enabled%08%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%09CancelBtn%07Caption%0c%06%00%00%00Cancel%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%08INVLabel%06Label1%07Caption%0c%0a%00%00%00your name:%07Enabled%09%07Spacing%04%00%00%00%00%00%00%07INVEdit%08NameEdit%07Colored%09%07Enabled%09%05Lines%04%01%00%00%00%08Optional%09%0aOutputName%0c%0c%00%00%00contact name%0aOutputType%07%09nvoHeader%07Spacing%04%00%00%00%00%04Text%0c%00%00%00%00%05Valid%09%00%00%08INVLabel%06Label2%07Caption%0c%0b%00%00%00your email:%07Enabled%09%07Spacing%04%00%00%00%00%00%00%07INVEdit%09EmailEdit%07Colored%09%07Enabled%09%05Lines%04%01%00%00%00%08Optional%08%0aOutputName%0c%0d%00%00%00contact email%0aOutputType%07%09nvoHeader%07Spacing%04%00%00%00%00%04Text%0c%00%00%00%00%05Valid%09%00%00%0bINVCheckBox%08MemCheck%07Caption%0c%0b%00%00%00remember me%07Checked%08%07Enabled%09%0aOutputName%0c%00%00%00%00%07Spacing%04%00%00%00%00%00%00%00 +Forms2=TPF0%0eTMEDetailsForm%0bDetailsForm%07Message%0c%0d%00%00%00Error Details%08MinWidth%04%00%00%00%00%08OnAction%0c%00%00%00%00%05Timer%04%00%00%00%00%00%09INVButton%0bContinueBtn%07Caption%0c%08%00%00%00Continue%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%07SkipBtn%07Caption%0c%04%00%00%00Skip%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%09CancelBtn%07Caption%0c%06%00%00%00Cancel%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%08INVLabel%06Label1%07Caption%0c,%00%00%00what were you doing when the error occurred?%07Enabled%09%07Spacing%04%00%00%00%00%00%00%07INVEdit%0bDetailsMemo%07Colored%09%07Enabled%09%05Lines%04%09%00%00%00%08Optional%08%0aOutputName%0c%0d%00%00%00error details%0aOutputType%07%0dnvoOwnSection%07Spacing%04%00%00%00%00%04Text%0c%00%00%00%00%05Valid%09%00%00%00 +Forms3=TPF0%0eTMEScrShotForm%0bScrShotForm%0dActiveControl%07%0bContinueBtn%07Message%0c%18%00%00%00Screenshot Configuration%08MinWidth%04%00%00%00%00%08OnAction%0c%1e%00%00%00madExcept.HandleScreenshotForm%05Timer%04%fa%00%00%00%00%09INVButton%0bContinueBtn%07Caption%0c%08%00%00%00Continue%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%07SkipBtn%07Caption%0c%04%00%00%00Skip%07Enabled%08%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%09CancelBtn%07Caption%0c%06%00%00%00Cancel%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%0bINVCheckBox%0bAttachCheck%07Caption%0c%25%00%00%00attach a screenshot to the bug report%07Checked%09%07Enabled%09%0aOutputName%0c%00%00%00%00%07Spacing%04%00%00%00%00%00%00%08INVImage%0aScrShotImg%06Border%09%09Clickable%09%07Enabled%09%04File%0c%00%00%00%00%06Height%04%00%00%00%00%07Spacing%04%00%00%00%00%05Width%04%00%00%00%00%00%00%08INVLabel%06Label1%07Caption%0c%15%00%00%00(click to edit image)%07Enabled%09%07Spacing%04%00%00%00%00%00%00%00 diff --git a/PluginHDCRTN.otares b/PluginHDCRTN.otares new file mode 100644 index 0000000..447d5c1 Binary files /dev/null and b/PluginHDCRTN.otares differ diff --git a/PluginHDCRTN.xml b/PluginHDCRTN.xml new file mode 100644 index 0000000..9d3798e --- /dev/null +++ b/PluginHDCRTN.xml @@ -0,0 +1,4 @@ + + + + diff --git a/_plgPlan/col_AdvKPDavky_EXT.sql b/_plgPlan/col_AdvKPDavky_EXT.sql new file mode 100644 index 0000000..1f71d63 --- /dev/null +++ b/_plgPlan/col_AdvKPDavky_EXT.sql @@ -0,0 +1,12 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabAdvKPDavky_EXT', N'_MnozstviKs') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabAdvKPDavky', @NazevAtrSys=N'_MnozstviKs', @Skupina=N'Plugin Plnovn', @NazevAtrVer=N'Mnostv plnu (ks)', + @NazevAtrVerZkr=N'', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'A', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Mnostv ks zobrazen v pluginu Plnovn', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + +IF (COL_LENGTH(N'dbo.TabAdvKPDavky_EXT', N'_VazbaPlgPlan') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabAdvKPDavky', @NazevAtrSys=N'_VazbaPlgPlan', @Skupina=N'Plugin Plnovn', @NazevAtrVer=N'ID plnu pluginu', + @NazevAtrVerZkr=N'', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'ID sady dvek zaloench v pluginu Plnovn', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=0 diff --git a/_plgPlan/col_Prikaz_EXT.sql b/_plgPlan/col_Prikaz_EXT.sql new file mode 100644 index 0000000..6c307af --- /dev/null +++ b/_plgPlan/col_Prikaz_EXT.sql @@ -0,0 +1,14 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPrikaz_EXT', N'_PlanZahajeni') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrikaz', @NazevAtrSys=N'_PlanZahajeni', @Skupina=N'Plugin Plnovn', @NazevAtrVer=N'Plnovan zahjen', + @NazevAtrVerZkr=N'', @TypAtr=N'DATETIME', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'DATETIME', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Plnovan zahjen z pluginu Plnovn', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + + +IF (COL_LENGTH(N'dbo.TabPrikaz_EXT', N'_PlanUkonceni') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrikaz', @NazevAtrSys=N'_PlanUkonceni', @Skupina=N'Plugin Plnovn', @NazevAtrVer=N'Plnovan ukonen', + @NazevAtrVerZkr=N'', @TypAtr=N'DATETIME', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'DATETIME', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Plnovan ukonen z pluginu Plnovn', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + diff --git a/_plgPlan/compileZdroje.cmd b/_plgPlan/compileZdroje.cmd new file mode 100644 index 0000000..3642d43 --- /dev/null +++ b/_plgPlan/compileZdroje.cmd @@ -0,0 +1,4 @@ +@echo off +"C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" PluginHDCRTNPlanResource.rc + + diff --git a/_plgPlan/datMod2.dfm b/_plgPlan/datMod2.dfm new file mode 100644 index 0000000..6d3bb2d --- /dev/null +++ b/_plgPlan/datMod2.dfm @@ -0,0 +1,4766 @@ +object dm2: Tdm2 + OnCreate = DataModuleCreate + Height = 480 + Width = 640 + object vtRozpis: TFDMemTable + Active = True + FieldDefs = < + item + Name = 'colID' + DataType = ftInteger + end + item + Name = 'colDatum' + DataType = ftDate + end + item + Name = 'colHodOd' + DataType = ftSmallint + end + item + Name = 'colHodDo' + DataType = ftSmallint + end + item + Name = 'colSkupZbo' + DataType = ftString + Size = 3 + end + item + Name = 'colRegCis' + DataType = ftString + Size = 30 + end + item + Name = 'colNazev' + DataType = ftString + Size = 100 + end + item + Name = 'colPrikaz' + DataType = ftString + Size = 15 + end + item + Name = 'colMnoz' + DataType = ftSmallint + end + item + Name = 'colMnozHotovo' + DataType = ftSmallint + end + item + Name = 'colIDDavkaAdvPlan' + DataType = ftInteger + end + item + Name = 'colIdKmen' + DataType = ftInteger + end + item + Name = 'colIdPrikaz' + DataType = ftInteger + end + item + Name = 'colIDPlan' + DataType = ftInteger + end + item + Name = 'colJeUdrzba' + DataType = ftSmallint + end> + IndexDefs = <> + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + StoreDefs = True + Left = 136 + Top = 76 + object vtRozpiscolID: TIntegerField + FieldName = 'colID' + end + object vtRozpiscolDatum: TDateField + DisplayLabel = 'Datum' + DisplayWidth = 12 + FieldName = 'colDatum' + end + object vtRozpiscolHodOd: TSmallintField + DisplayLabel = 'Od' + DisplayWidth = 3 + FieldName = 'colHodOd' + end + object vtRozpiscolHodDo: TSmallintField + DisplayLabel = 'Do' + DisplayWidth = 3 + FieldName = 'colHodDo' + end + object vtRozpiscolSkupZbo: TStringField + DisplayLabel = 'SK' + DisplayWidth = 3 + FieldName = 'colSkupZbo' + Size = 3 + end + object vtRozpiscolRegCis: TStringField + DisplayLabel = 'Reg.'#269'.' + DisplayWidth = 8 + FieldName = 'colRegCis' + Size = 30 + end + object vtRozpiscolNazev: TStringField + DisplayLabel = 'V'#253'robek' + DisplayWidth = 19 + FieldName = 'colNazev' + Size = 100 + end + object vtRozpiscolPrikaz: TStringField + DisplayLabel = 'P'#345#237'kaz' + DisplayWidth = 8 + FieldName = 'colPrikaz' + Size = 15 + end + object vtRozpiscolMnoz: TSmallintField + DisplayLabel = 'ks' + DisplayWidth = 5 + FieldName = 'colMnoz' + end + object vtRozpiscolMnozHotovo: TSmallintField + DisplayLabel = 'Hotovo' + DisplayWidth = 6 + FieldName = 'colMnozHotovo' + end + object vtRozpiscolIDDavkaAdvPlan: TIntegerField + FieldName = 'colIDDavkaAdvPlan' + Visible = False + end + object vtRozpiscolIdKmen: TIntegerField + FieldName = 'colIdKmen' + end + object vtRozpiscolIdPrikaz: TIntegerField + FieldName = 'colIdPrikaz' + end + object vtRozpiscolIDPlan: TIntegerField + FieldName = 'colIDPlan' + Visible = False + end + object vtRozpiscolJeUdrzba: TSmallintField + DefaultExpression = '0' + DisplayLabel = #218'dr'#382'ba' + FieldName = 'colJeUdrzba' + end + end + object dsRozpis: TDataSource + AutoEdit = False + DataSet = vtRozpis + Left = 138 + Top = 22 + end + object dsKalendar: TDataSource + AutoEdit = False + DataSet = vtKalendar + Left = 44 + Top = 22 + end + object vtKalendar: TFDMemTable + Active = True + FieldDefs = < + item + Name = 'colIDStroj' + DataType = ftInteger + end + item + Name = 'colKodStroj' + DataType = ftString + Size = 10 + end + item + Name = 'colStroj' + DataType = ftString + Size = 50 + end + item + Name = 'colNe' + DataType = ftSmallint + end + item + Name = 'colPo' + DataType = ftSmallint + end + item + Name = 'colUt' + DataType = ftSmallint + end + item + Name = 'colSt' + DataType = ftSmallint + end + item + Name = 'colCt' + DataType = ftSmallint + end + item + Name = 'colPa' + DataType = ftSmallint + end + item + Name = 'colSo' + DataType = ftSmallint + end> + IndexDefs = <> + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + StoreDefs = True + Left = 44 + Top = 78 + object vtKalendarcolIDStroj: TIntegerField + FieldName = 'colIDStroj' + end + object vtKalendarcolKodStroj: TStringField + DisplayWidth = 10 + FieldName = 'colKodStroj' + Size = 10 + end + object vtKalendarcolStroj: TStringField + DisplayLabel = 'Stroj' + DisplayWidth = 23 + FieldName = 'colStroj' + Size = 50 + end + object vtKalendarcolNe: TSmallintField + DefaultExpression = '0' + DisplayLabel = 'Ne' + DisplayWidth = 4 + FieldName = 'colNe' + end + object vtKalendarcolPo: TSmallintField + DefaultExpression = '0' + DisplayLabel = 'Po' + DisplayWidth = 5 + FieldName = 'colPo' + end + object vtKalendarcolUt: TSmallintField + DefaultExpression = '0' + DisplayLabel = #218't' + DisplayWidth = 4 + FieldName = 'colUt' + end + object vtKalendarcolSt: TSmallintField + DefaultExpression = '0' + DisplayLabel = 'St' + DisplayWidth = 4 + FieldName = 'colSt' + end + object vtKalendarcolCt: TSmallintField + DefaultExpression = '0' + DisplayLabel = #268't' + DisplayWidth = 5 + FieldName = 'colCt' + end + object vtKalendarcolPa: TSmallintField + DefaultExpression = '0' + DisplayLabel = 'P'#225 + DisplayWidth = 4 + FieldName = 'colPa' + end + object vtKalendarcolSo: TSmallintField + DefaultExpression = '0' + DisplayLabel = 'So' + DisplayWidth = 4 + FieldName = 'colSo' + end + end + object dsKmen: TDataSource + DataSet = vtKmen + Left = 212 + Top = 28 + end + object vtKmen: TFDMemTable + Active = True + OnCalcFields = vtKmenCalcFields + FieldDefs = < + item + Name = 'colID' + DataType = ftInteger + end + item + Name = 'colSZ' + DataType = ftString + Size = 3 + end + item + Name = 'colRegCis' + DataType = ftString + Size = 30 + end + item + Name = 'colNazev1' + DataType = ftString + Size = 100 + end + item + Name = 'colMJEvid' + DataType = ftString + Size = 10 + end + item + Name = 'colDilec' + DataType = ftBoolean + end + item + Name = 'colMaterial' + DataType = ftBoolean + end + item + Name = 'colSluzba' + DataType = ftBoolean + end + item + Name = 'colSKP' + DataType = ftString + Size = 30 + end + item + Name = 'colIDZaklad' + DataType = ftInteger + end + item + Name = 'colZaklad' + DataType = ftString + Size = 100 + end + item + Name = 'colIDZakModifDilce' + DataType = ftInteger + end + item + Name = 'colIDZakModif' + DataType = ftInteger + end + item + Name = 'colZakModif' + DataType = ftString + Size = 50 + end + item + Name = 'colKSvKA' + DataType = ftInteger + end + item + Name = 'colKAnaPAL' + DataType = ftInteger + end> + IndexDefs = <> + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + StoreDefs = True + Left = 212 + Top = 88 + object vtKmencolID: TIntegerField + FieldName = 'colID' + end + object vtKmencolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtKmencolRegCis: TStringField + FieldName = 'colRegCis' + Size = 30 + end + object vtKmencolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtKmencolMJEvid: TStringField + FieldName = 'colMJEvid' + Size = 10 + end + object vtKmencolDilec: TBooleanField + FieldName = 'colDilec' + end + object vtKmencolMaterial: TBooleanField + FieldName = 'colMaterial' + end + object vtKmencolSluzba: TBooleanField + FieldName = 'colSluzba' + end + object vtKmencolSKP: TStringField + FieldName = 'colSKP' + Size = 30 + end + object vtKmenIDZaklad: TIntegerField + FieldName = 'colIDZaklad' + Visible = False + end + object vtKmencolZaklad: TStringField + FieldName = 'colZaklad' + Size = 100 + end + object vtKmencolIDStroj: TIntegerField + FieldName = 'colIDZakModifDilce' + end + object vtKmencolIDZakModif: TIntegerField + FieldName = 'colIDZakModif' + end + object vtKmencolStroj: TStringField + FieldName = 'colZakModif' + Size = 50 + end + object vtKmencolKSvKA: TIntegerField + FieldName = 'colKSvKA' + DisplayFormat = '#,##0.#' + end + object vtKmencolKAnaPAL: TIntegerField + FieldName = 'colKAnaPAL' + DisplayFormat = '#,##0.#' + end + object vtKmencolKSnaPAL: TIntegerField + FieldKind = fkCalculated + FieldName = 'colKSnaPAL' + DisplayFormat = '#,##0.#' + Calculated = True + end + end + object imgCol: TImageCollection + Images = < + item + Name = 'Item1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 87000002C14944415478DAED984B4C13511486CF9C960E6B5897928875E7A386 + 15D5050F91BA28766B45A3491B4DB4D64DB5610149092B69C2CAA6EAA6989068 + 0A8184F880906A772AD485C606AA60BA86F5687B8F33536BAC33B89A297792FE + C9A49DFB279DFFCB9DDE73CF150808AC2CA105D00268019803C0BEED106C6D01 + 2002B8DD805D4EC13200ECCA5582F57540A1969991FC8CC141C0278F0D87301C + 80F947090B057DAFB717F0F93343218C9F0157F7FF7F7077875F0056FA4AD8DF + 7FA0AF3CE9E7EA2A388EF61806D1B41950062BF2D5C6F30C1C04500F0F560060 + 5D2EAAAF3EFF86575623F1FB2EE700EE638492A409AF7AEDED2016BF700E70F2 + 14E1FEBE26BCEA757480B8B9C139409F97847259135E113A9D60CBBFE51BA07A + 6E9858B1A819B7CB17295B8AD7AFF8069046E54ABCD9588995F04A6AE6F1002E + 643907B81424CCE735E11531AF17F0E91CE700D7AE13AEAD69C2AB004343808F + D29C0344EE102E2E6AC2AB0081006072866F801FB17BD4363F0F7A2959300838 + 95E01BA09A98225B3AADEBB17018307E9F6F00F66086707656DF8B4400EF4639 + 077898229C9ED6F7E271C070887380CC1CE1F8B8BE9748005E0E720E905D208C + 46F5BD64123070917380172F09E53FABAE974A019E1FE61C20F786706C4CDFCB + 6400CF9EE11CE0C306A15CB0F454CD66C176DAC33940E123A1DFAF19571B7A19 + C0C13DC0A7CF843E9F26BCD21FB0A525104F1CE71B408538D24358A93486B7DB + 412C6DF37F32A702FC2E660D0D7D2C06E2CD1BD60050549597D3CAF272ED467E + A5C40B3EEB1CEE3653A601481393442B2BEA771C1901C7E484756640BA759B50 + 5E71EA521B7A139A19F300FE3A9DFBD3D013011A7C2A670A80B45D221C186808 + 5F17CBE500BB5DFCD701A9CF4B8E72B931BCD30968F0A1966900D577EF490885 + 00F7F66AE13B3B01E436130DDE4698065097B2B5563E8DDE42370DA0196A011C + B65A0087AD5FE6E569E020FCB4470000000049454E44AE426082} + end> + end + item + Name = 'Item2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 87000002A84944415478DAEDD9DD4B537118C0F167EFAF8DB5E974CE96259961 + 4574D58510913965AD65F662D96D410A11DDF657B4B002EBB28B5E66A5732FDA + CA3463249A642F866024C9CC4CD6DA7676B6B1D3BC085AE4618F44E7317CE0DC + FDBE67E7733817BFB323E28083D53CA235C0FF0070DD6AE73CCF3A51CDC1DA33 + 70BEB5434402507F4ECE9DBDD806EBD62B0B5A1FFFC6C24D5727F45E8ED10134 + 9F3A8D6ABAEFDE865E579C0EA0A9A515D578DC7768010E9F38896A7ABBEED102 + 1C3AD6826A7C0FDCB4008EE6E3A8C6DF7D9F16C0DE7414D5043C0FC14B09D0E8 + 3C826AFABD3DB400368713D504FD5E5A80037607AA7912F083F70A21C0FE463B + AA79DA1FC801127400FB6C0DA86628F88816606F5D3DAA191E78FCF70137BA2E + 713D83D78161BFA34F5467B701CB640A5AAB504961A02F08997461EB7F9DDF77 + B17900E70523576BDB033A831A44887B938C678089A58189A70B5AAFD2C840A9 + 91E60E19EA77E2D114F8DC3EE8BB965A1EB07DF70E9048A5E83BF3AF263434C8 + 0FD8B6AB06241289D0D7B9EC8C3C1FE6076CDD594D1A301A0AF103B6D4549106 + BC1C79C10FD85C5D491AF06A6C941F505155411AF07A7C9C1F60ADDC0062C280 + 771313FC80F24D16108BE902DEBF7DC30F28DB68CE01C4425FE7B2333539C90F + 28293791064C4F4DF1038ACB8CA4011FA73F40E02AFB67C04A37734B608BD58A + 6A666766209BCDA201BC9BB9954E43BB9233975B504DF8D32CF83B9234DE076C + 3940A9D98C6AE6C261089001B42938536909AA999FFB9CF72C0B0E283215A39A + 85F92FB400862223AA595CF84A0BA037E8514D6431420BA0D3EB504D3412A505 + D0EAB4A826168DD10268B46A54138F256801546A15AA61120C25809C53AA0AFB + C0F773924C320748D1002CFD33A7502A500D9B64F376958203E40A19AA49B169 + 3A8055FFA15BC85903083D3F007C29A9E02A3D1D7B0000000049454E44AE4260 + 82} + end> + end + item + Name = 'Item3' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 87000004864944415478DADD99DD6FDB6414877FCE7716E7AB29135AD7B564ED + 7657DA81106C12EA2A548640DBB8812BA4697748E36A821BE0823F817F814B90 + 1065422B096ACB60D3DAA49055CB5AC456FAB94E43ADD6A649E3C6F68B5F674E + DC3A76DD244E1B8E6AD5F9F0C9F3D8AF5F9F63330404CD1CCCFF4A20319322DF + FF7E033EBB170CC3186E48B722A2A04D68B3436FCB132F1EC747173E344E5C8B + 403C39468612C312184181DBC6769E03A97080087D93281AA554C53F03F1536D + 27F1F995EBD60BA84179AE002EBF2D498935C11F88803A5C5E37DC3EB70469D3 + 26B131BAF05C96C3D3F995831728EE790237EB45201C84C3EDA09B1BC2D3C865 + B2587C3077B0020ABCF25509192E9F07FE4800EE231EC31F387081DDF0CF0DE8 + 8097F77CF085307C21F6700AEC054FC31F09C2DF123025D02D097CD1280133F0 + FB11A0F9BA8FBD842FAF7ED680EB804978B3020BE97FE45CDD6D6581FCFC28F1 + 749CAF594623F0C3C44DD3F06604B21B9B584CCF8126EC6E8BCA02B9F1AF8883 + 5F83EBDCD7F515882546C8D0C4B069F8BD04E891CCAE6F62697A4E7EDDD3DE8E + 8FA32B706DA4415A7AE03A5B6781E1F15FC88D44CC34BC910085A725091D4254 + A0D5CDE37AF4318E7AB6684A88612B04EE4A02C99869783D01059E1ECA5C2607 + E7C20CAE752E21E412C054814C47342F965F8BA11EF8DE2CCA571630095F4940 + 0D4FA3233B8B4BF62978EDA42EF0F27B92C0115D81C99806FE8D8E33087AFCC5 + EFFCF5ABAEC06EF833C223F4F35370DA5037781AF6484F6902D09E039371CD9E + BFFADA07C8705964F29BBA026A78465A0624F05E61168E3AC3D37CEA0940330B + FD988C6936A2027F2EA7E56577500136EC2FC1BB20E0DDC204A2E2134BE0774F + 00A68A39230156DAFB6CC82FC3B384C3FBFC6D1C15D72D83A75137013A6CD870 + 401A42C5F34311388675CBE0EB26A0941B6C4BB02440A72FB74DC0457E0227C5 + 154BE0AB16509FC4EA5A898D2802E5E6869EC46FF129F449B350BDE1AB12504F + A33767C676D44AECF359A85267F68AF0509A8D52301A4DFB85AF4AA0FC63DA2A + 950A045A83BA17BDCEEC235CB6DF838B112BE4DB3F7CD5027A25B6BF35848024 + A117B41672CE4FE393CE45049C822A5F75F0550918F5070149C04C43D3EA2AE0 + D3AEC7D2FF9C9CAA10289703B544CD3DF17E5ACA97DB4FE05A7419C2DAFD1D05 + 99650256F5C4B4A121DC9AB50256F7C4F9F911A9A51C90D7F9D5B18A77981D91 + 7E86DF9C25E01634EB86028DE889D52183551260A38C905F23847FA659D71568 + 444FBCF7C0301F0DED892D17B0B2276E8C80453D715180C1A9F62E6BEFCC55D3 + 137B58AFBC68E18B416FAFFFBBF044CE79FA7897B5F746F57A62A3D8DEE2C049 + 8B026FF4F0C3F29BBB7A3DB11901334F6E2C17B89B4E926F46BF83CD6EFE377C + 0E2FFC4ED6D4033FCB1FF229F1EDAD2172E7C1387822EE99E042DF00DE7B7DB0 + AE50350B28F1D3789C8C4DDDC6169FAFF8391D366FF7F6E3E2D9770EA7801223 + A9DF483C750B99ADCC0E787AC51EEC3D8F4BE70EB9801277A613243E398AA71B + ABA57263B0AF890494F8E3EF29F27372144BABCBCD29A0C4BD87F74941E0F1EA + E9DEE614380CD1F402FF01B631060D82D3E8CE0000000049454E44AE426082} + end> + end + item + Name = 'Item4' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 870000036C4944415478DAC599CB6BD4401CC77F59BBF562A15A7041853E7C62 + B50F4FA2D4D2BB17114450A45D456CBBBAE21E2CE845454F427D9D74B7DE96EA + 7AF22FF0492BADD448F175D25359B1962AD8EAE28E336926A6D924F3C864F3BD + EC5E927C3E49667EF39B680810B845EF1D441BFA8E4043F71E0D22CC97FC2334 + 3F31056DC3575D39343781D78792E8C7F824A0DA38B4E76E472641E03F0E5D86 + 1AFC3F71703FB40E5FABE0A810A0F0345149D8E1E985D7BA482C1370C24725E1 + 064FE394B004BCE0AB2DE107EF266108B0E069CA5862C7BD1B90E8E90A458207 + DE29A14D1D1B44734F9E314F4E9E5399FC59590B3BB33721D1BD57A984083CCD + FA1347419B1D9B407AEF00C0C222139E8E16E37552F82464E057D4D743E76876 + E915FA3E36E929E18407F3221A96E850302682C0D76DDFA25983D84DC20B3E66 + FE061DD841E10D1EFB346A9760C15B9292122AE02B04A8C41B2C513625FCE065 + 2554C1BB0A907C7DF10AE9C74F5BAF931FBCA8844A784F01BB84862558F0BC12 + AAE17D05A8C4B429C11B2F8930E09902247E53AC579C153B2C782E0151093A7B + 95CD62B738530429F88739A8DBB69979089700C9ECF371F4369902F8FD87096F + 55EC781CA0541282AF59B31A3A4609FC26AE43B80548642A36EF04402272E7A5 + 04BC24A2829712704A44092F2D4025442BB66AF840022432155B257C600192E2 + D397484F9E81189E6D44E17715EEC3AAAD1B032DC7030BC8142923B8B36BCBDD + 81867DBBA31390863783B044EB5DDC9EF6C8B7A7D20281E1C1D6630790901250 + 054FAFAC05901016500D0FE6796258A25D624C080984064FCF2731B0B9056497 + C47F177E190B40EE8A4D2446B044179F049780F47A1E17A9D2DC3C08576C8127 + C11408024F2BAC54C52612D95BCC1EDB5740053C4D183DB6AF804A78BB84AA1E + DB57200C781A153DB6AF4098F03212CE1EDB29B14CA01AF022123CBBE2964035 + E179247877C50D8128E0FD244476C5B5CFF94264F06E12A2BBE29A9EB980BE15 + 1E0BEDDB743E1809DC493943F69DF4640ACAE6B2C30F9EA6F97C7AE915FA3074 + 05CDE40BCC8BA8BEF3CE8854ECC673FDD072B6FFFF171A9644D8F04E09BF8A4D + E10D49FB34EA25512D78BB8457C5B6C35708B849541B9EC66D766ACC0C404BFA + 14FB0BCDBBCC4554C4033BAC01CB1BFB8672532605CDE993FC5F683E5DBA8ED6 + 1D3E1019BC5DE2E7F47B68EAEF73E5F807BA232B09E979793B0000000049454E + 44AE426082} + end> + end + item + Name = 'Item5' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 8700000C304944415478DABD5A095893471A7E13488020F721609043AD562A1E + 5D6D15B914B550AC17D5BAB5585414C5A38A6EB5B55AABB240BD0FC46A3DAA56 + 2C2C5EE08152A15E5544C4AA15454411041510817084909D994024904002EC7E + 8F79F833FF1CEF3BDF37DF3191939EF1973439E50AEAA4750097038DA54E8A3A + 25CD5CF2795154049E161FAB572E69C3C4EA0967E6BC25D2ECEC27E4A90D6B48 + A52DCCFC763E2B2B731CD8BDED7F42821310B4509AFB2C1F7D9C7A4228B4517F + 640B3BDFA0C9338917E41C85D6D6D8BB6B638793E004CC5E24CDCDCD43C8FC59 + F868A467872EE0337E8A545C532BFF6E6F27C4AEEDEB3A748DFF0B017D436354 + BC79CDDA7AF5EC81ADEB5777D83A0A043C3DDDF0B24AACB2B394D8835842DE37 + B61D62333C2D1E31F9E698664D9D811A42C063D274DC4E3E8DE2C27CD63EC0D9 + 09E1A1DF7508090502EE1E6E28ACAA55DA91829748C8BBC6E79640D0D2D2560A + 9E4A7040206AAA6B1801331B5B9CFB25126F8A5EB0770307F445E80FCBDA4D42 + 2D026D014F656EC04C545757330216423B324F1D4EEFD9828A9222F67EE8E00F + B072F9A276916895405BC15359143417656FCA30D87712843D9D589B8498E0E9 + 9F37A3F24D29FBEEE9EE826FFE35BFCD249412484C388DD327E2C962CD1DA57E + 277D2C5CBA18965656381E1B87E4C424E251A5E0F1B4E11F381DCEFDFBCAFB6E + FD71036EA767C0B2AB03DCFCA632E6D23A09C46231CEECDD8C9A8A0AD66F8CEF + 28CC9D3DAD4D249412085FB51659F733550E0A983D1343DC8662E3BF7FC4BDBF + EEC8DBC74DF283CF98D1F2EF99F7EE63FDDA30A645532B216C8916740506EC5D + ADA40637CFC7432A91B0A0F7CF4FC72260EA671A93504A20ECFB357894F9003E + 6ED6F8D0D9BCC16AB02DFA210A8BAA111014C808548A44C8C9CE6111599BC743 + B777BA83CBE52A2C90742611D1BF1C521DB5EBCD90923C9F70A4FD040A2AC508 + A7041E3C44A05F378CF6B061F0B5B538085E9B86C779157202EA0805F6F86116 + 527EBF80674F7221125540664A75644E2D886BC5282E96C58873F1D1ED23E0E6 + EE8AFC8A2AAC5B1DD6884017069E1ED8396B6E281010111B7E4235D044CC2DCD + 61D1B973AB0E40A0055493846FDA9C451D4160265C86BAA0906860DD9AB704C6 + 0D17CABD4D53021B42C3F1F79D7BCD26E5F3F95817B9193C3EAF55EF555A5880 + C50BBF6E2781A7CFB0686E205C08A817E40C34109835B13BC60E13CA3B372510 + 1F771C4989E750D7C45BD939D82338643EB4B85A2D82A752F8BC00CB43DA4380 + 66A344035FCD9B01575757050241937A608C671795049489A671A3BCBC1C4BE6 + CC87AE8E1E8E1ED9DD0104AA2981701901A2014D08B435E895BF7C81F7BAD9B6 + 310E047D4508E433026E6E6E78259622E28750641137DA1A011AA4AE5DBE0209 + F1283C6D6DF87CE24B0EAFA552F0AF4B5EE34EC66D14BD7A8592A262F075F830 + 343482D0CE1683FAF5818D49A7F611A067C07D9807D1804416C8D42010BA6215 + 1E6765CB7DFC485F6F8C9BE8A700FE3E39E427FE73148F882B95AA8805DA84BC + EBD00FF1E5643FD874B1D288889C40C8021A07DCDF4662350850F069A9A92C49 + D3E26AC36DB8078C8D8D19789AC4ED8DDA8D8CB474F97803132358D85A41DFA8 + 132462092A4ADFE079761EC958AB656088BBF6FF6C02A64CF6539B84FC0C842C + 08524C25088169631DE1ED6A2DEFBC785D3A9E3C17C909A8B2F992E2126C89D8 + 8082FCE7CC7C1C9D7B62E0882104BC75330092DA5AE4DCCDC2B55329287AFE92 + B5B90C1984EFBF0D518B84BC266E960B1102AA841218ECEAA2143CCDFF692AF2 + 3C2F1F7C5D1D8CF21F0B7BA7EEAD02A1AEF86A42326E265D652639D2CB134B16 + 06B54A42692EB47FD71E5CBA90A27400CD7596ACF806F68EF64ABD4DD4E66DB8 + 79FD06033F61813FCC6D2C5BC3C0345947933A22772EDDC41F7189EC999E4B6F + 6FAF164928255047BC4AD1AB22A5036894D5EF24500A3EEBFE0344AC0E654DA3 + 0327C2FEBD1EAD9B00F9B85A39D04B0E5C2FCC4125C98D5262CEE0EED55BE43C + 1921E6D04F9A136869A75AF2F30DA98583530FF8CE9CC84CE1E8F65FF132AF80 + 75D5D5D3C5D8E0CF6168662C9F8F43900FB77D077C3247B9B81A17F31EA1AAAA + 1ABFAC8944B5A80AB3A64D81DF785F8EC604AAAA2A1552041978497DEAAC4D34 + A1A3009E46D490A0794C7B7E5FF9C3DAC19699C5EEE59B1810B618E947CDCADA + 41A8603686240A0F215AD026E6995D568CCCD72F70E5E405A49DBF82DEBD7A62 + F3BA559A1188FDF508CEC69F6ABCF54D4671F0C58C00B87ABACB236CEAD56BF8 + 696B240406FA98BE7A813CCF179596A3A840E65D04460630B3325700DF208E46 + E670B614424C36E0EC93BF51909387DF36EE654B9F4F88D68CC0C19FF72125E9 + 8272F0F532C9FF7378798F927F3F75FC24C96562D1F55D478C099ADCA2193605 + 4F4587C787B7436FA2540E52F2B250222A47644838EB1FB5250CDD1CED959250 + 4A800E2A26793AAD89E962D246464F17A007D9D4DC4C61225A75D1EAABD7C03E + 1831E5138DC0734961433539D2EE5DE81293BC569083425119762DDB882A52F5 + 85AE5A8A81EFF7539FC05B9B573F318B8B8E611701DDFBBF0BEF2FC72335F112 + AE9FB9F8F61C35D2A43989C613E64D811649211AC053F1B17762E7E0CAF36CBC + AAACC08E2511A8AD11637DD80A38BFD75B7D02959522928D66B10BDCC6E0B95C + AD66E005FA02D8393A20E9EC3944EF3F08434B1BF4F39D8CFBC90978917D5FA5 + 197EBE7C364C2C4CE5F399E80AE06AD38DED57223903A5656F9806A8EC8BDA88 + 2E426BF508D09A78C7A6AD4827C1A8796FE56769F6E210428E83ED11EBC0213B + D8DF2F88E546A2D26202BE8E7D280709F1F19949B16CCC17DFCD813121D02083 + ACEC602530243B5F4E34F0180FD3EFE1CCBEA3D0271B74ECC81EF50E71D39A98 + ABCD271F6E3D76E57308F40DE132FE0B083A19E0C48E08D45489E0F081172CBA + 3B3333A4F7400D522BAEC2ADD89DECD97F45308CCC4DEA95CBC1101B0798EA08 + 7099984F31992361570CB2EF3C80A7DB90162FBE5AAC899D3D3FC23B0386B47A + 03D720B72E9CC2C39B7F822F30409FD101CD14564B02D5ADD828A6497FA2014A + C0C5C6119D783AF823EF21A342233175A1B19BF6B30D085BB50CEFBFDFB71502 + 2A6AE2BEC37C0881C16A81A7524DCECEA9DD1B515B5D0533C7DE44132314DED3 + 6BC5F4981D320DD413F010F68080683A293713D5C469D490281CB3613F8A0B5F + B21F5D3684AF6A259568A126D6333486AE405F2DF0D4F69DDD46A1ACF825D212 + 8FB3366BA741E8D2E743B6E31C5AE093B3901613C9FE4E5F43EA6081005CF24E + 8BC325014CC222F6C1D02888CA2A58C516B93114765D851A12203571D4A6EDC8 + B899AE16F0C632CCE7630CF7F1417CCC6FB89A9CCCDACC1DBAA1E7D011D03390 + 5D29D29BE9CE161CD87657AC0DF21FE522E9F049BC7E59C2BEEBE9F231921448 + AF8A8B690CC0C71F79A9F0424A6AE2F2B27252EFDE225E430275854F1674EEDF + 0F7C1E8FD9EEC9B8E32C2EB0DC89CF6301CED1B9172CBB5A434F5F8FE54CA237 + E5789AF9183748CC287DF5BA1EB80EEB5F565AA630FF84B13E080A9CDA8C84D2 + 9A58535115F4EE66FC85189257D1BB9FC64203584362D8580690E27EEEAC6938 + 7BFE771C893DC1DAFA3AF746C66DD9E599DFB8D19835638A0209A535F11F49C9 + 389B708ADD5F36167AA51EBC6881ECC6AD15F00D119B02BD7EE54FDCB8964A0A + FCBBA8A9A95198D380985659996CB71B2EB6D6466C9126A75C96FD9EB6610D67 + FB8E7DD263F1A7D959FA749C2F664E7F4B42694D1CB5691BD2AEA736DB695A8D + 856D5E0F133353B5C037155AFF969696923CAB84E4533C18191BB31BEEEF162F + 552070F1F29FD21F426551D86B983BBE0E99C3D9B9FB8034F658026B6B4C4269 + 4D5C41727B7AB7DF5403E69D2D60E7E0D026F0AAE4494E0ED67CB39299D3B946 + D7EBBFC51C97FEB4F7109BCB83D4DFDF2E9DCFD977205A7AE8C831F67EC2686F + 04CD9ACAD1A82253D76C3411F6FB01C9A1CC4D8D71F8C04E85C1B17127A53BF7 + 1C62CFC33D8662E9E2B99C3DFB0E4B0FC7CADCF4D721C19A95941D0DFED9D35C + 847DBF9A04C02A953F33C5C6C5131207D973435AB160F14AE9BDFB9918E1E9F6 + 96C0C07FF485D0B62B2A25752A1764B90D4BCE14C1734820D214FC8B8242A4A7 + A6313335333541F481289513342621EC628567F53536DD744EE0DC25D2C7394F + 5B5F51CDFFD8A1B6D4CF6763638515CB16AAACB89491A0E2EBED8505C133389C + 8B57AE497F4FB9D4F26275F41F5D5071EBB9AC48D01C3B9D4F8FA411FDFAF4C2 + 082F0FB5D9A7A6DD925E4FBDC9DCEB704F5736EEBF21472C53AE1A4C58000000 + 0049454E44AE426082} + end> + end + item + Name = 'Item6' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 870000048C4944415478DAED997B6C53551CC7BFB78FBBDED61556B2871B95C1 + D6C510304397018E874FE2140C13343A75BE46AC4C10C43FD4A146A64B80F887 + 62880AB291C870090417952882612412418838BA618B621DEDB696216CEDFA58 + D75ECFBD9715BB6EB1BB5D6D6BFA4D969EF5B4E7FC3E3DBFF3FBFDCE3D140B16 + C92C2A05F07F03305FF2B2ED562F3ABABDE05ECF5A3CB03986505F918DAA0519 + 544201182EBA5983F59AA15D1EB4933FA777741BE768691C5C9F1F3F8013BF0D + B046DB204C3D5E9CB178D176D10D5F4012F144B3F3681CDAF01F017CD3E660CF + DBBC30F60CE2178B0BE7ED3E509434AA89620E50DD60658F995C707863B3A963 + 0AD072BA8FD5EFB1C5C4F061CDCA95E1CB35DA09194B4251A069191504683E71 + 955DD76C8F2D005981FDFA9C091B8FA16590CB6554D202A4C9A4484B93A70052 + 004903C028A4D06955E33492C2BA854A9468E5F107A0A4124854CCB8BF57964F + 63C7C3E9C909A0A429BC75AF0ACB66A6C51EA074BA02BB9ECA81D1E6C3A39F74 + C1E70FCDE809B50716E918E8B269349DEC877B503074EBCA4C3C56AAE6DB77BD + D7091301893B00C9D8D065D1F8A3D717FC458B88E187D64F854C42A1E1873EBC + D1D2CBBFDF549D8B4545828BCCA933E392C31F3256011967EB2399E33412289C + 221DA32F028057CB3578F1CE0CFC64F6A062BB957F6FE30353A05F3C996FF7BB + 03B8F51D333C3E16DF6FD0F27083432C0A6A2F801D51138ADDC4CFCF63F01289 + 44A200F6AECAC5429D30E9ECB7CD7010834FD6DE84AC7459F033354D36B49C71 + E2DCA6E9485748F0E7651FCA367786AFA648807B74727CB05C2D0E60CB8A4C54 + CE15BEBC6C9B051A9514BB9FBD31E433478D2EAC26956C0701E0F4E3050F567E + 640D1B4B43A097144F1A97F14A12FE9FBC8D41AE3AFCE01411C0EA3B32F0FAFD + 1ABEBDF6733B96CC5462E92D37F0FF0F05587E1FF80364924FBBD044568BD381 + 9F9D58B337BC348FCB26BE6F960A3BAB844977910DFB04590DAE0CBF32E047F3 + 2947702F1CFFDD8DDB0B04F7D87EF40AEA0FFE95180037E7D038FCB27008E1C2 + 2543534198C6E3FD687D45CB47AA7F8A8B4A5C741A29312EC41017AA8AC68538 + 834D7533C28C2C7FDF82B3562FBEA8C943C9344548DF73BB7BF06DFB40D85862 + 37F1DD8534B65544514A9CAA9D869C49D7A30E97A0B844C5E971E2529B5784C6 + F661B88902D0CF67B07681C830CA699F3E0FF3665CFF95EBBEBE8C8F5BAFF26D + 35099BA737E6075D8B53F126337A9DFEB071C424320571A1024D14898CD31652 + 22545E2B11B8C853FA6E27EC8EA160FF8795D9585E2C44A6B19218A7B8D54235 + 2413BF562E84D2C3E75C78BAA13BA47F7191127BAA85DC3056128B2BC05C5265 + EE7F218F6F3FD3D88DEF3A5C21FDC4B5718444AA42E2225FB539A1FF6CF4C733 + 62CBE9374939FD60B4E5741989F152E28AC74CEE51FBB3D532CC27FBE4C8AF2E + 383C810903E0E74E94038D9823A5424E91424E8592A9B2B0BED4A13E05900248 + 72809087BB49FF789DD3AA462BDB6A4CD20B8E914ACA2BA67F53525DF245AAB6 + 4E377F27CC5DAF1ABAC8ABC503A72F41AF5923D5F045773B013290953274BB61 + EF0BA0FEA1ACC4BBE84E04A500E2ADBF01FA42C8EFEBB54FD10000000049454E + 44AE426082} + end> + end + item + Name = 'Item7' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 870000024A4944415478DAEDD8CD4E1A511806E06FF8D901095E84B5B1A176CB + 1AEC4A981FD444585808DC0435032CE026A0D69050864142AAD642BD00761593 + 5AAF4222B08104BEF64C0395DAC6518799A139EF8E61CEE17D383384390C02C2 + 2287A1000AA0000AA0000A58E43C1820F002369B4DE8F7FB9A1671381CE0F3F9 + 2097CBC1CAF315662E8025F712763A1D4D8BFF19B7DB0DD79D6BED01E49BAFD5 + 6A732D3F49281402B92AAB42A806381D4ED4FAB2F9E767399DD0ED75B50530E4 + D45BF9394EF532CF737E0AA08045035CB42FD0F3D27367EC4200A4B284E17018 + 92C924A433E999F1A607943F94311289C06834525EA75229105322F3D4F97501 + 1CBC3FC068340AE3F1787ACC6AB542BBDD86D517AB8C6900E75FCF71EDD5DACC + F1FD77FB188BC500F1F77052BE542AC1D6F696795660EFED1E66B35928140AB0 + FB665779AF902F603C1E9F296FB158A0582CC24E78C73CF740269D4151147F9D + C73090CFE795CB259148CC94B7D96C204912F0026F9E5FA1CB6F97E8F178A637 + E70471BB3889DD6E874AA5022CC7320F995F971538FA7884E41FE47038FCEBD8 + FBCA1B0E2039393E414110603018DC292FCB3204D920F394F9E70E2039FD748A + 1CC74D11A47CB55A854030706F195300481A9F1BC8B2AC721393F21B810D7545 + CC022039FB728604B0FE7A5DFDA3A199008F0905FCF7003D1FEA5D2E17DC746F + B405702C87F57A5D1700CFF370583BD41670F5FD0ABD5E2FE8B1B1D56AB560F9 + D9B2B6804936439BD86834A0D7EB695A9CEC05F9FD7E656B516DF94701CC160A + 303A14607428C0E85080D15978C00FDEE5A2E0EEFC2DDB0000000049454E44AE + 426082} + end> + end + item + Name = 'Item15' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000300000003008060000005702F9 + 87000002434944415478DAEDD8FF4B13711CC7F1F7110612CE98A44C495C8148 + 2311067E0187D31F266984583FF45B7F4ED06F82DF7E50414DF407F51745B024 + 8962FA83C9B082A5A546E15A142AD8D4C6EDEDDED0C0ADBBCF7D6EDE9D77F079 + FEB4EDC66D8F711B2F2621205003E3CF311EFF094657EAF1187ECE3BB76E43B0 + A95EA2DB5206403DEB1BC4C471C2D6803277093CBC179232F7B300BF7EEFE3C0 + E818C829D996806B8585F0A4BB4B3AFF581680DADADEC18999D9F41149D7C9CD + 065C49BF9FEEF610DC2871B301D47278055F87576C03906519DA03CD50EDADFA + EF53550450E3D333F865F7AB2D007E9F0F1AEA6A152F095500D533348CFB0787 + 970AA8AA28878E608BEAF5CC04504F7B7AF134F9F75200EE62173CBEDFC9FC32 + 6A02BEEDC57064720A10D9CF331A70B5A0001EA5BFB4D78B5D170350EF36DEE3 + DCCB25803C10F900E8551EB406E166B947F3A7900B40CD2FBDC2B548C41240C0 + EF87BB35D55CBFE3DC002A9FB9A117707E26180EA0F4CE0D3D80DC99600A40EF + DCE00528CD045300949EB9C103509B09A60128DEB9A10560CD04530114CFDCD0 + 02B06682E9004A6B6EB0005A33C11200C59A1B6A009E9960198035379400BC33 + C13200A5363772017A6682A5004A696EE402F4CC04CB0154FFC464D6096B2ABD + 59C7DB028D86BD790110000110000110000110000110000110000110003B0156 + D72318894621F5EFDF09C701A8EFB11FB8F8E62D9C2693CE04649A5E7881EE22 + 977301D45E2C8E9F3E6FA75F457226803A3AFA831FA25B90383E712620D3C7E8 + 26FA0CFC578E3A0397E98FE050B60A900000000049454E44AE426082} + end> + end> + Left = 40 + Top = 190 + end + object imgList: TVirtualImageList + Images = < + item + CollectionIndex = 0 + CollectionName = 'Item1' + Name = 'Item1' + end + item + CollectionIndex = 1 + CollectionName = 'Item2' + Name = 'Item2' + end + item + CollectionIndex = 2 + CollectionName = 'Item3' + Name = 'Item3' + end + item + CollectionIndex = 3 + CollectionName = 'Item4' + Name = 'Item4' + end + item + CollectionIndex = 4 + CollectionName = 'Item5' + Name = 'Item5' + end + item + CollectionIndex = 5 + CollectionName = 'Item6' + Name = 'Item6' + end + item + CollectionIndex = 6 + CollectionName = 'Item7' + Name = 'Item7' + end + item + CollectionIndex = 7 + CollectionName = 'Item15' + Name = 'Item8' + end> + ImageCollection = imgCol + Width = 24 + Height = 24 + Left = 98 + Top = 190 + end + object ImageList1: TImageList + Height = 48 + Width = 48 + Left = 182 + Top = 188 + Bitmap = { + 494C010108000C00040030003000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000C000000090000000010020000000000000B0 + 0100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C9C6C3008D8781008D8781008D87 + 81008D8781008D8781008D8781008D8781008D8781008D8581008C857F008B85 + 7F008B857F008B857F008C857F008D8581008D8781008D8781008D8781008D87 + 81008D8781008D8781008D8781008D8781008D8781008D8781008D8781008D87 + 81008D8781008D858100978F8A00BFBCBA000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFCD + CA009D989400C2BFBC0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD9D8 + D400000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF756C6500574C4400574C4400574C + 4400574C4400574C4400574C4400574C4400574C4400574C4400564B4400564B + 4400564B4400564B4400564B4400564B4400564B4400574C4400574C4400574C + 4400574C4400574C4400574C4400574C4400574C4400574C4400574C4400574C + 4400574C4400574C4400564B4400564B44006E655E00DFDEDC00000000000000 + 0000000000000000000000000000000000000000000000000000B3AEAB00574C + 4400574C4400574C44009B959000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFF4F4F300CFCCC700C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C440086807900A49D + 9500A29A8C00A29A8C00A29A8C00A29A8C00A29A8C00A29A8C00A29A8C00A199 + 8B009F988A009F978A009F978A009F978A009F988A00A1998B00A29A8C00A29A + 8C00A29A8C00A29A8C00A29A8C00A29A8C00A29A8C00A29A8C00A29A8C00A29A + 8C00A29A8C00A29A8C008B827600584D4500564B4400675D5700000000000000 + 00000000000000000000000000000000000000000000B3AEAB00574C4400574C + 44006F676000574C4400574C4400BEBAB7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFE8E7E500C6C3BE00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00DBD4C3005E544B00564B44009D9793000000 + 000000000000000000000000000000000000B3AEAB00574C4400574C4400918A + 8500000000007E746E00574C4400958D89000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F8EBDF00F1D0B400EAB68900E39A5D00DA813100D8721B00EEC4A1000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FFB9B6AB00C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1 + DE00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00B2AA9C00564B4400665D58000000 + 0000000000000000000000000000B2AEAB00574C4400574C4400938C87000000 + 0000A6A09D00574C4400574C4400C2BFBB000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F6E2D100EFC7A600E7AD7B00E0934F00D877 + 2400D9721800D9721800D9721800D9721800D9721800D9721800DF8F49000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFE7E7E300ABAA9C00A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100574C4400BEBAB700FCFA + F600F8F2DF00ECE6D400C4BCAD00C2BAAC00C2BAAC00C2BAAC00C2BAAC00D7D1 + C000F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EE + DB00F7F1DE00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00D8D2C000574C4400564B44000000 + 00000000000000000000B0ABA900554A4300564B44009188840000000000A7A3 + 9F00574C4400574C4400A0999700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F4DCC800EEC5 + A100E7AD7B00E0914B00D7741D00D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D45000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFCFCEC700A7A69700A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100564B4400BEBAB700FCFA + F600F8F2DF008C827700574C4400574C4400574C4400574C4400574C4400594E + 4600E6DFCE00F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3ED + DB00F3EEDB00F7F1DE00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F4EE + DC00E5DFCD00D4CCBB00D9D2C100E9E2D000DFD8C700574C4400574C44000000 + 000000000000C7C5C200564B4400564B4400958D880000000000A29C9800574C + 4400574C4400A39D990000000000000000000000000000000000000000000000 + 000000000000F2D2B700EBBB9200E5A36B00DB873C00D6711700D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D45000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF70686100564B4400BDBAB700FCFA + F600F8F2DF00B8AFA1006E645A006C6259006C6259006C6259006C625900847A + 6F00F3ECDA00F8F2DF00F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3ED + DB00F3EDDB00F3EEDB00F7F1DE00F8F2DF00F5EFDC00BDB5A600887E72005D52 + 4A00574C4400574C4400574C4400574C440064595100574C4400574C44000000 + 000000000000918A8400564B44007B726C00000000009F979400564B4400574C + 4400A39D99000000000000000000000000000000000000000000E4A06400DA79 + 2500D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D45000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF70686100564B4400BBB7B600FBF9 + F500F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3ED + DB00F3EDDB00F3EDDB00F3EEDB00C6BFB0006F655B00574C4400574C4400574C + 4400574C44005B504700584D4400574C4400574C4400574C4400574C4400847C + 7600E6E3E200A49F9B00564B4400564B440080797300564B4400564B4400A39C + 98000000000000000000000000000000000000000000F0CDB000D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DD8C4400FAF9 + F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9 + F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9 + F700FAF9F700FBFAF90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF70686100564B4400BAB8B400F8F6 + F200F7F1DE00EBE4D200BBB3A400B8AFA100B8AFA100B8AFA100B8AFA100B8AF + A100B8AFA100B8AFA100B8AFA100B8AFA100B8AFA100B8AFA100BEB7A700EEE8 + D500F3EDDB00F2ECDA00A39A8D00574C4400564B44005B51480088867000B0B4 + 9200C9D2A800D2DDB100D0DBAF00C4CDA500A3A6870067605300574C4400574C + 44005E544D00635A5100564B4400564B4400564B4400564B4400A09B97000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FBFBFA00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100564B4400BAB8B400F7F5 + F100F3EEDB00887E7300574C4400574C4400574C4400574C4400574C4400574C + 4400574C4400574C4400574C4400574C4400574C4400574C4400574C4400A296 + 8600ECE0C900968B7D00564B4400564B4400796C5800BEA87F00CBB58800CBB5 + 8800B8A47D00B9B99400D2DDB100D2DDB100D2DDB100D2DDB100B5BA97006861 + 5400574C4400574C44005D544D009D9793008B857F00BBB8B400000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000545454000D0D0D0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000D0D0D005252 + 5200D9D9D9000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100564B4400BAB8B400F7F5 + F100F3EDDB007B716700564B440066594D007163550071635500716355007163 + 550071635500716355007163550071635500716355007163550073655600BAA3 + 8400A5917700564B4400564B44008C765D00C4A37800C5A47800C8A67900C6A5 + 79005C5046005A4F4600C8D3A900D2DDB100D3DEB300D5DFB600D2DDB100CAD3 + AA0062594E00574C44005D534A00E3E2E0000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D7D7D7001111 + 1100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000011111100D9D9D90000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100564B4400BBB7B600F7F5 + F100F3EDDB007B716700564B4400A08D7300D9BF9900D9BF9900D9BF9900D9BF + 9900D9BF9900D9BF9900D9BF9900D9BF9900D9BF9900D9BF9900D9BF9900CFB6 + 92005E524800564B4400806D5700C5A47800C5A47800C5A47800C5A47800C0A1 + 7500574C4400574C4400C1C9A200D2DDB100F7F9F100FDFDFB00D6E0B800D2DD + B100CBD5AB006C635600574C44007E7771000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000505050000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000005252520000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BDBAB700F8F6 + F200F3EDDB007B716700564B44009E8C7200D8BE9800D9BF9900D9BF9900D9BF + 9900D9BF9900D9BF9900D9BF9900D9BF9900D9BF9900D9BF9900D9BF99008F7E + 6900574C440064564A00C5A37700C5A47800C5A47800C5A47800C5A47800BE9F + 7400564B4400574C4400C1C9A200D2DDB100F4F7EC00FBFCF800D6E1BA00D7E1 + BA00D2DDB100B7BD9900584D4500574C4400D0CDCC0000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000C0C0C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000E0E0E0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FBF9 + F500F3EEDB007B716700564B44005C4F46005E5348005E5348005F5449005F54 + 49005F5449005F5449005F5449005F5449006D5F5300CAB18E00D7BD98006154 + 4A00574C44009B836500C9A77A00C8A67900C5A47800C5A47800C5A47800BD9F + 7400564B4400564B4400C1C9A200D2DDB100D2DDB100D3DDB200F4F7EC00FEFE + FE00DCE5C300D2DDB1007D786600574C4400918A850000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DC7A2100E797 + 4600E7974600E7974600E7974600E7974600E7974600E7974600E7974600E797 + 4600E7974600E7974600E7974600E89C4E00F3D9BD00F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F7F1DE008A817500564B4400564B4400564B4400564B4400564B4400574C + 4400574C4400574C4400574C4400574C4400574C4400CAC0AD00CBC2AF00574C + 4400594E4500C1A27600C5A47900B3956F00B1946F00AF936F00AF926E00AA8E + 6B00564B4400564B4400C0C8A100D2DDB100D2DDB100D2DDB100F1F5E700FFFF + FF00F3F6EB00D2DDB100A8AC8C00574C440061574F0000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800E2955300E2985600D972 + 1800D9721800D9721800D9721800D9721800D9721800DD802F00E5A26800DB7A + 2500D9721800D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E4801B00EAA05600F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00EEE9D600CAC3B300C9C1B300C9C1B300C9C1B300C9C2B300CCC4 + B500CDC5B600CDC5B600CDC5B600CDC5B600D7D0C000F8F2DF00B3AB9C00574C + 440071625200CAAE82007F6E5A00574C4400574C4400564B4400564B4400564B + 4400564B4400564B4400BFC79F00D1DCB000D2DDB100D2DDB100DCE5C200FFFF + FF00FFFFFE00D6E0B800C8D3A900574C4400574C4400E6E4E400000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800E1934F00FCFCFC00FCFCFC00E39C + 5D00D9721800D9721800D9721800D9721800D9741B00F6E6D800FCFCFC00F0CE + B000D9721800D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E5862500F0CBA300F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EE + DB00F7F1DE00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00A39A8D00574C + 4400807D6800D2DDB10096977C00594F4600574C4400574C4400564B4400564B + 4400564B44006E685800CAD5AB00CED9AE00D1DCB000D2DDB100D2DDB100FDFD + FB00FFFFFF00DDE6C500D2DDB1005C524800574C4400D5D4D100000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800EAB38300FCFCFC00FCFCFC00F2D3 + B800D9721800D9721800D9721800D9721800E3985700FCFCFC00FCFCFC00F7E9 + DD00D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BBBBBB00B9B9B900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F7F1DE00E4DECC00E2DBC900DFD8C700DED8C600DED8C600DED8 + C600DFD8C700E5DECD00F8F2DF00F8F2DF00F8F2DF00F8F2DF009D948700574C + 440084816C00D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D1DC + B000CED9AE00CED9AE00CED9AE00CED9AE00CED9AE00D1DCB000D2DDB100FBFC + F700FFFFFF00DFE7C800D2DDB10061564C00574C4400CFCDCA00000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800EEC6A200FCFCFC00FCFCFC00FBFA + F800DD7F2E00D9721800D9721800D9721800F0CCAC00FCFCFC00FCFCFC00FBF8 + F600D9731900D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B8B8B8000808080006060600B2B2B2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00988F8300574C4400574C4400564B4400564B4400564B4400564B + 4400564B4400564B4400B1A99B00F8F2DF00F8F2DF00F8F2DF00ABA39500574C + 440079756200D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D2DD + B100D1DCB000CED9AE00CED9AE00CED9AE00CED9AE00CED9AE00D4DEB500FEFF + FE00FFFFFF00DBE4C000CFDAAF00584D4500574C4400DFDEDC00000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800F4DAC400FCFCFC00FCFCFC00FCFC + FC00E9B17F00D9721800D9721800DB7A2600FBF6F300FCFCFC00FCFCFC00FCFC + FC00DC7E2C00D9721800D9721800D9721800D9721800D9721800DF883B00F4DE + C600F4DEC600F4DEC600F4DEC600F4DEC600F4DEC600F4DEC600F4DEC600F4DE + C600F4DEC600F4DEC600F4DEC600F4E3CE00F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000B6B6 + B60007070700000000000000000005050500B1B1B10000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00A1988B00574C4400574C4400574C4400564B4400564B4400564B + 4400564B4400574C4400B8B0A100F7F1DE00F8F2DF00F8F2DF00C1B9AA00574C + 440062594E00D1DCB100D2DDB100D2DDB100C6CEA700B1B69400B1B69400BEC5 + 9E00D2DDB100D1DCB000CED9AE00CED9AE00CED9AE00CED9AE00E2E8D000FEFE + FE00FCFCF900D3DDB200B8BD9A00574C4400574B430000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800F8EDE400FCFCFC00FCFCFC00FCFC + FC00F7E5D600D9721800D9721800E7A97300FCFCFC00FCFCFC00FCFCFC00FCFC + FC00E08D4500D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E4801B00EDB98300F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000B4B4B4000707 + 07000000000000000000000000000000000005050500B0B0B000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00EFEAD700EDE7D500EDE7D500EDE7D500ECE6D400E9E3 + D100E8E2D100ECE7D500F3EDDB00F3EEDB00F7F1DE00F8F2DF00ECE6D300594E + 4600574C4400B5BC9800D2DDB100CFDAAF005F564B00574C4400574C4400584D + 4500B6BC9800D2DDB100D1DCB000CED9AE00CED9AE00D7E0BC00F8F8F600FAFA + FA00E8EDD800D2DDB10091907700574C44007E746E0000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800DA782100FCFBFB00FCFCFC00FCFCFC00FCFC + FC00FCFCFC00E08D4500D9721800F4DDC800FCFCFC00FCFCFC00FCFCFC00FCFC + FC00E49D5F00D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E4801B00EAA45E00F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B2B2B200060606000000 + 0000000000000000000000000000000000000000000005050500AFAFAF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1 + DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2DF008178 + 6D00574C44007C776500D2DDB100D1DCB100777160005F564B005F564B00675F + 5300C2CAA300D2DDB100D2DDB100D1DCB000D0DAB100F6F7F400FAFAFA00F3F5 + EE00D0DAB100C9D2A9005F564B00574C4400B3AEAB0000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800DF8A4000FCFCFC00FCFCFC00FBF6F300FCFC + FC00FCFCFC00EDC19A00DF873A00FCFBFB00FCFCFC00FCFCFC00FCFCFC00FCFC + FC00E8AD7900D9721800D9721800D9721800D9721800D9721800DD7F2A00ECAF + 7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF + 7000ECAF7000ECAF7000ECAF7000ECB47900F5E7D700F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D5D5D50003030300000000000000 + 000000000000010101000000000000000000000000000000000005050500AFAF + AF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F6F0DD00E3DCCA00E3DCCA00E3DCCA00E3DCCA00E3DCCA00E3DC + CA00E9E2D000F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00D1C9 + BA00574C4400574C4400ADB19100D2DDB100D2DDB100D2DDB100D2DDB100D2DD + B100D2DDB100D2DDB100D2DDB100D2DDB100D2DDB200F3F5EF00F3F4ED00D3DD + B700CED9AE0086846F00564B4400655B54000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800E49E6000FCFCFC00FCFCFC00EDC19A00FBF8 + F600FCFCFC00F9F1EB00ECBD9400FCFCFC00FCFCFC00F3D9C200FCFCFC00FCFC + FC00EBBC9200D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000081818100000000000000 + 0000010101009D9D9D009B9B9B00010101000000000000000000000000000404 + 0400ADADAD000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00968D8000574C4400574C4400574C4400574C4400574C4400574C + 4400594E4600D3CCBB00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1 + DE008B827600574C44005E544A00BCC39D00D2DDB100D2DDB100D2DDB100D2DD + B100D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D1DCB000CED9AE00CED9 + AE009C9D8200564B4400564B4400BBB7B6000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800EAB28200FCFCFC00FCFCFC00E6A46A00F0CE + B000FCFCFC00FCFCFC00FBFAF800FCFCFC00FCFAF900E2975600FCFCFC00FCFC + FC00F0CBAB00D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007C7C7C000202 + 02009F9F9F0000000000000000009C9C9C000101010000000000000000000000 + 000002020200A5A5A50000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100574C4400BEBAB700FCFA + F600F8F2DF007D736800574C4400574C4400574C4400574C4400574C4400574C + 4400574C4400BCB4A500F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EE + DB00EDE7D50071675D00574C44005E544A00AEB29100D2DDB100D2DDB100D2DD + B100D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D2DDB100D0DAAF00908F + 7600574C4400564B4400978F8A00000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800EEC5A200FCFCFC00FCFCFC00E08F4900E39A + 5B00FCFCFC00FCFCFC00FCFCFC00FCFCFC00F2D5BC00DB7A2600FCFCFC00FCFC + FC00F4DAC400D9721800D9721800D9721800D9721800D9721800DD7F2A00ECAF + 7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF7000ECAF + 7000ECAF7000ECAF7000ECAF7000ECB47A00F5E7D700F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFCF + CF00000000000000000000000000000000009E9E9E0001010100000000000000 + 00000000000003030300A9A9A900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFA6A59500A6A59500A6A59500A6A59500C7C3BD00C7C3BD00C7C3BD00C7C3 + BD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100564B4400BEBAB700FCFA + F600F8F2DF007D736800574C4400799CA60092D9EF0092D9EF0092D9EF006165 + 6300574C4400BCB4A500F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3ED + DB00F3EEDB00E2DCCA0070665C00574C4400584D45007F7B6700B9C09C00D2DD + B100D2DDB100D2DDB100D2DDB100D2DDB100CED9AE00AAAE8E006B645700564B + 4400564B44008C857F0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800F3D7BF00FCFCFC00FCFCFC00DC7D2900DA74 + 1C00F8EFE600FCFCFC00FCFCFC00FCFCFC00E5A26700D9721800FAF4EF00FCFC + FC00F7E9DD00D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E4801B00E9A55F00F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000A0A0A000020202000000 + 0000000000000000000003030300D4D4D4000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFBDBC + B3008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500D9D8D200000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF70686100564B4400BDBAB700FCFA + F600F8F2DF007D736800574C44007BA2AC0096E3FB0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF00D6CEBE00A1998B009F988A00A39A8D00E3DD + CB00F3EDDB00F3EEDB00ECE7D400887F7300574C4400574C4400574C4400665D + 51007E7A66008A89710087846E00797563005E534A00574C4400574C4400584F + 4500ABA7A3000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800EBBB9000FCFCFC00F4DCC700D9721800D972 + 1800ECBD9400FCFCFC00FCFCFC00FAF3EE00DA772000D9721800F6E5D600FCFC + FC00FBF8F600D9731900D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E4801B00EDB88200F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A7A7A7000303 + 0300000000000000000080808000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FFD2D2CC008E8D + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59400E6E6E200000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF70686100564B4400BBB7B600FBF9 + F500F8F2DF007D736800574C44007BA2AC0096E3FB0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF0079706500574C4400564B4400564B44009F97 + 8A00F3EDDB00F3EDDB00F3EEDB00F7F1DE00CDC5B6007C726800584D4500574C + 4400574C4400574C4400574C4400574C4400574C44005B504800938C8500E7E5 + E500000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9731900DF893E00DA751D00D9721800D972 + 1800DF893E00FBFAF800FCFCFC00EDC19B00D9721800D9721800F3D6BE00FCFC + FC00FCFCFC00DC7F2D00D9721800D9721800D9721800D9721800DF883B00F4DE + C600F4DEC600F4DEC600F4DEC600F4DEC600F4DEC600F4DEC600F4DEC600F4DE + C600F4DEC600F4DEC600F4DEC600F4E2CD00F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000A8A8 + A800030303007E7E7E0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFE6E6E2008E8D80008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500ABAA9B00F1F1EF00000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF70686100564B4400BAB8B400F8F6 + F200F7F1DE007D736800574C44007BA2AC0096E3FB0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF00C9C1B1008F867A008D84770091887C00DDD6 + C600F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2DF00E8E1CF00BAB2 + A300A69E9000948B7F009A928500A9A09300C6BFAF00F3EFE500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800E2975600E8AE7B00DA782100D9721800D9721800EEC6A300FCFC + FC00FCFCFC00DE893E00D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D1D1D1000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF939186008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500B4B4A700000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100564B4400BAB8B400F7F5 + F100F3EEDB007C726700574C44007BA2AC0096E3FB0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1 + DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00E2DDD300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800E1934E00F9F2 + EC00F4DBC500DA751D00D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF9C9C90008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500C0C0B500000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF71686100564B4400BAB8B400F7F5 + F100F3EDDB007B716700564B44007BA2AC0096E3FB0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00ECE6D3005A504800635750000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E5862500F0CBA400F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FFACACA2008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500D1D0C800000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100564B4400BBB7B600F7F5 + F100F3EDDB007B716700564B44007AA1AB0096E3FB0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF00A9A09300645A500062574E0062574E006257 + 4E0062574E0082786D00F0EBD800F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1 + DE00F8F2DF00F8F2DF00F8F2DF00F8F2DF00E0D9C800574C4400574C44000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DB751900E480 + 1B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E4801B00E480 + 1B00E4801B00E4801B00E4801B00E4801B00EAA05600F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FFC6C6BE008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A3A29200DFDFD900000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BDBAB700F8F6 + F200F3EDDB007B716700564B4400799FA90095E2FA0096E3FB0096E3FB006267 + 6500574C4400BCB4A500F8F2DF0081786D00574C4400574C4400574C4400574C + 4400574C44005D524A00EEE8D600F3EEDB00F3EDDB00F3EDDB00F3EDDB00F3EE + DB00F7F1DE00F8F2DF00F8F2DF00F8F2DF00E0DBD000574C4400574C44000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DC7A2100E797 + 4600E7974600E7974600E7974600E7974600E7974600E7974600E7974600E797 + 4600E7974600E7974600E7974600E89B4D00F2D8BD00F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFDEDEDA008C8B7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A7A69800EDEDEA000000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FBF9 + F500F3EEDB007B716700564B4400799FA90094DFF60095E2FA0096E3FB006267 + 6500574C4400BCB4A500F8F2DF00EDE7D500CDC5B600CDC5B600CDC5B600CDC5 + B600CDC5B600E1DBCA00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3EDDB00F3ED + DB00F3EEDB00F7F1DE00F8F2DF00F8F5E900E5E2E200574C4400574C44000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000C0C0C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000D0D0D0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFEEEDEB00908E82008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500AFAEA0000000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F7F1DE007B716700564B4400799FA90093DFF60094DFF60095E2FA006267 + 6500574C4400BCB4A500F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1DE00D3CCBD00928A7E00756B + 62006A6158006B615800695F57006C625B00675E5600574C4400574C44000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000525252000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000005454540000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF979589008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500B9B7 + AC00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF007C726700564B44006F898E0083B7C60083B7C60083B7C7005E5F + 5B00574C4400BCB4A500F8F2DF00EEE8D600CEC6B600CDC5B600D2CABA00F6F0 + DD00F8F2DF00F8F2DF00F8F2DF00F8F2DF00B2AA9C00574C4400564B4400564B + 4400564B4400564B4400564B4400564B4400574C4400574C4400564B43000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001111 + 1100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000111111000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFA3A3 + 96008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500C9C7BF00000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF007D736800564B4400564B4400564B4400564B4400564B4400564B + 4400564B4400BCB4A500F8F2DF0083796E00574C4400574C4400574C4400ABA3 + 9500F8F2DF00F8F2DF00F8F2DF00D0C8B800584D4500574C4400736456009E8B + 7300AB957B00AB957B00A5927700594E4500564B4400574C4400A7A19E000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FAF9F800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000525252000C0C0C0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000C0C0C005050 + 5000D7D7D7000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FFBDBCB3008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500D9D8D200000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00AFA799006359500061564D0061564D0061564D0061564D006156 + 4D006C625800E0DAC900F8F2DF00A69E90006358500062574E00665C5300C9C1 + B100F8F2DF00F8F2DF00F8F2DF00867D7200574C4400786A5A00D7BE9800D8BE + 9800D5BC9700D0B7920061564A00564B4400564B44009D979300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFC9A800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D4400F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5F100F7F5 + F100F7F5F100F7F5F100FBFBFA00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFD2D2CC008E8D7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59400E6E6E200000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3EDDB00F3ED + DB00F3EDDB00F3EEDB00F7F1DE00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF00645A5100574C4400AE987D00D9BF9900D9BF + 9900D4BC960065594D00564B4400564B4400918A850000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F0CDB000D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DD8C4400FAF9 + F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9 + F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9F700FAF9 + F700FAF9F700FBFAF90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFE6E6E2008E8D80008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500ABAA9B00F1F1EF00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1DE00F3EEDB00F3ED + DB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2DF00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF005E534B00574C4400BAA38400D9BF9900D7BE + 9800695C4F00564B4400564B44008D8480000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000E49F6300DA79 + 2500D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D45000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF939186008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500B4B4A700000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFA + F600F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F8F2DF00F7F1DE00F3EE + DB00F3EDDB00F3EDDB00F3EDDB00F3EEDB00F7F1DE00F8F2DF00F8F2DF00F8F2 + DF00F8F2DF00F8F2DF00F8F2DF005D534A00574C4400BAA38400D7BD97006D5F + 5200574C4400574C4400867E7900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F2D2B700EBBB9200E5A36B00DB873C00D6711700D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D45000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF9C9C90008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500C0C0B500000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB700FCFB + F800F7F3E300F7F3E300F7F3E300F7F3E300F7F3E300F7F3E300F7F3E300F6F2 + E200F1EFDD00F1EDDD00F1EDDD00F1EDDD00F1EFDD00F6F2E200F7F3E300F7F3 + E300F7F3E300F7F3E300F7F3E3005B524A00574C4400BAA3840071635600574C + 4400574C4400827A760000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F4DCC800EEC5 + A100E7AD7B00E0914B00D7741D00D9721800D9721800D9721800D9721800D972 + 1800D9721800D9721800D9721800D9721800D9721800D9721800DF8D45000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FFACACA2008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500D1D0C800000000FF0000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB7000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005B524900574C4400675A4F00574C4400574C + 44007C736C000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F6E3D300EFC8A700E8AD7C00E0934F00D879 + 2400D9721800D9721800D9721800D9721800D9721800D9721800DF8F49000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFC6C6BE008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A3A29200DFDFD9000000 + 00FF000000FF000000FF000000FF000000FF72696100574C4400BEBAB7000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005B524900574C4400574C4400574C4400736B + 6400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F8EBDF00F1D0B400EAB78A00E39C5F00DB803200D7731B00EEC4A1000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FFDEDEDA008C8B7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A7A69800EDED + EA00000000FF000000FF000000FF000000FF71686100574C44007E7771009893 + 8D0098938D0098938D0098938D0098938D0098938D0098938D0098938D009893 + 8D0098938D0098938D0097918D0097918B0097918B0097918B0097918B009791 + 8B0097918D0098938D0098938D00574D4500574C4400574C4400706560000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FFEEED + EB00908E82008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500AFAE + A000000000FF000000FF000000FF000000FF756D6600564B4400574C4400574C + 4400574C4400574C4400574C4400574C4400574C4400574C4400574C4400574C + 4400574C4400574C4400574C4400564B4400564B4400564B4400564B4400564B + 4400564B4400564B4400574C4400574C4400574C44006B645C00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF9795 + 89008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500B9B7AC00000000FF000000FF000000FFD3D1CF0099928F0097918D009893 + 8D0098938D0098938D0098938D0098938D0098938D0098938D0098938D009893 + 8D0098938D0098938D0098938D0098938D0097918D0097918B0097918B009791 + 8B0097918B0097918B0097918D00847E77008A817C0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FFA3A396008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C7F008D8C + 7F008D8C7F008D8C7F008D8C7F008D8C7F00A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A59500A6A5 + 9500A6A59500C9C7BF00000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008B81D900DCD9F3000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C7C3EC009E97DF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007B73D5002D1EBE003E30C200DCD9F30000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C7C3EC003325BE002D1EBE009991DE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D3DCD000CFD9CB0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00008278D7002D1EBE002D1EBE002D1EBE003D2EC100DAD8F200000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000CBC7ED003527BE002D1EBE002D1EBE002D1EBE009791 + DD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000006AA59100056945000569 + 4500056945000569450005694500056945000569450005694500056945000569 + 450005694500056945006AA59100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D1DBCD0090A7860075946A00B6C5B00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008278 + D7002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F2000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C8C4E9003527BD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE009690DD000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945000A704B000A70 + 4B000A704B000A704B000A704B000A704B000A704B000A704B000A704B000A70 + 4B000A704B000A704B0005694500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CAD7 + C50089A4800076966A0075956A0075946A00B6C5B00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000008278D7002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8 + F200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C8C4E9003527BA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE009690DD0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000B8B8FD00B8B8FD0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945000C714C000C71 + 4C000C714C000C714C000C714C000C714C000C714C000C714C000C714C000C71 + 4C000C714C000C714C0005694500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000C2D0BD0084A078007797 + 6B0077976B0077976B0076966A0075956A00B6C5B00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000008278D7002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2E + C100DAD8F2000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000C8C4 + E9003527BA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE009690DD00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CBCBFC003131FD001F1FFF001F1FFF003232FD00CDCDFD000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056A46000D734E000D73 + 4E000D734E000D734E000D734E000D734E000D734E000D734E000D734E000D73 + 4E000D734E000D734E00056A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000BAC9B4007F9B740077976B0077976B007797 + 6B0077976B0077976B0077976B0076966A00B6C6B10000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007B73D1002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE003E30C200DCD9F30000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000C7C3EC003325 + BD002D1EBB002D1EBA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE009C95DF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000003B3BF8001F1FFE001F1FFF001F1FFF001F1FFF003C3CFD000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A46000F744F000F74 + 4F000F744F000F744F000F744F000F744F000F744F000F744F000F744F000F74 + 4F000F744F000F744F00066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000B0C2A90079986F0077976B0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B00B9C8B30000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE003D2EC100DAD8F200000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CBC7ED003527BE002D1E + BE002D1EBD002D1EBB002D1EBA002D1EBA002D1EBA002D1EBB002D1EBD002D1E + BE002D1EBE002D1EBE003224BD00C5C1EC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DCDCF8001F1FFA001F1FFA001F1FFE001F1FFF001F1FFF001F1FFF00E0E0 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A4600107651001076 + 5100107651001076510010765100107651001076510010765100107651001076 + 51001076510010765100066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CBD5 + C7007694690077976B0077976B0077976B0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B00809B76008CA08300899E8200899E + 8200899E8200899E8200899E82008CA083008CA084008CA084008CA08400A8B8 + A200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000ABA6E0002D1EB9002D1E + BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003D2EC100DAD8F2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000CBC7ED003527BE002D1EBE002D1E + BE002D1EBE002D1EBD002D1EBB002D1EBA002D1EBA002D1EBA002D1EBB002D1E + BD002D1EBE003224BD00C5C1EC00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001E1EF8001F1FFA001F1FFA001F1FFE001F1FFF001E1EFD000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A4600127852001278 + 5200127852001278520012785200127852001278520012785200127852001278 + 52001278520012785200066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC9 + B70076966A0077976B0077976B0077976B0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B00708E650069855E0068845D006883 + 5D0067835D0067835D0067835D0068835D0068845D0069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000ABA6E0002D1E + B9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F20000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000CBC7ED003527BE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBD002D1EBB002D1EBA002D1EBA002D1EBA002D1E + BB003224BC00C5C1EC0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000006D6DF8001F1FFA001F1FFA001F1FFA001F1FFE007171FD000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A4600147A5400147A + 5400147A5400147A5400147A5400147A5400147A5400147A5400147A5400147A + 5400147A5400147A5400066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC8 + B70075956A0076966A0077976B0077976B0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B00708E650069855E0069855E006884 + 5D0068835D0067835D0067835D0067835D0068835D0068845D0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000ABA6 + E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F200000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000CBC7ED003527BE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBD002D1EBB002D1EBA002D1EBA003224 + B900C2BFE8000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008080F8003636F7003636F7007F7FF900000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A4600167C5600167C + 5600167C5600167C5600167C5600167C5600167C5600167C5600167C5600167C + 5600167C5600167C5600066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC8 + B70075946A0075956A0076966A0077976B0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B0080A3730089AF7B0089AF7B0089AF + 7B0088AE7A0087AC790087AC790087AC790080A1720068835D0068845D008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F2000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CBC7ED003527BE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBD002D1EBB003224B900C2BF + E800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A4600197E5800197E + 5800197E5800197E5800197E5800197E5800197E5800197E5800197E5800197E + 5800197E5800197E5800066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC8 + B70075946A0075946A0075956A0076966A0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850093BB840092B9830091B9830087AC790067835D0068835D008CA0 + 8300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8 + F200000000000000000000000000000000000000000000000000000000000000 + 0000CBC7ED003527BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224BC00C2BFE8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000B8B8FC006B6BF8006B6BF800B5B5F800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A46001B805A001B80 + 5A001B805A001B805A001B805A001B805A001B805A001B805A001B805A001B80 + 5A001B805A001B805A00066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC9 + B70075946A0075946A0075946A0075956A0076966A0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850093BB840092B9830087AC790067835D0067835D00899E + 8200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2E + C100DAD8F200000000000000000000000000000000000000000000000000C8C4 + E9003527BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE003224BD00C5C1EC00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000009898FD001F1FFF001F1FFE001F1FFA001F1FFA009696F8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000066A46001D825C001D82 + 5C001D825C001D825C001D825C001D825C001D825C001D825C001D825C001D82 + 5C001D825C001D825C00066A4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BDCB + B90075956A0075946A0075946A0075946A0075956A0076966A0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850093BB840087AC790067835D0067835D00899E + 8200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE003D2EC100DAD8F20000000000000000000000000000000000C8C4E9003527 + BA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE003224BD00C5C1EC0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000002323FD001F1FFF001F1FFF001F1FFE001F1FFA002323F8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000076B460020845E002084 + 5E0020845E0020845E0020845E0020845E0020845E0020845E0020845E002084 + 5E0020845E0020845E00076B4600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0076966A0075956A0075946A0075946A0075946A0075956A0076966A007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850088AE7A0068835D0067835D00899E + 8200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE003D2EC100DAD8F2000000000000000000C8C4E9003527BA002D1E + BA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003325BE00C5C1EC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D5D5FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFE001F1FFA00D1D1 + F800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000076B4700228760002287 + 6000228760002287600022876000228760002287600022876000228760002287 + 60002287600022876000076B4700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0076966A0075956A0075946A0075946A0075946A0075956A007696 + 6A0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0068845D0068835D00899E + 82000000000000000000000000000000000000000000DDF4FB00DDF4FB00DDF4 + FB00DDF4FB00DDF4FB00DDF4FB0000000000EDF8FC00DDF4FB0000000000EDF8 + FC00DDF4FB000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000ABA6E0002D1EB9002D1E + BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003D2EC100DAD8F200CBC7ED003527BD002D1EBB002D1E + BA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE003325BE00C7C2EC00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D0D0FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFE00CDCD + F900000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000007AAE + 9B0012704E000569450005694500056945000569450005694500056945000569 + 45000569450005694500056945000569450005694500076B4700258962002589 + 6200258962002589620025896200258962002589620025896200258962002589 + 62002589620025896200076B4700056945000569450005694500056945000569 + 4500056945000569450005694500056945000569450005694500056945000569 + 45006AA59100000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0076966A0075956A0075946A0075946A0075946A007595 + 6A0076966A0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0068845D00899E + 82000000000000000000BDE1F7000000000000000000BFEDFB00BFEDFB00BFED + FB00BFEDFB00BFEDFB00BFEDFB0000000000DDF4FB00BFEDFB0000000000DDF4 + FB00BFEDFB000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000ABA6E0002D1E + B9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE003D2EC1003325BE002D1EBE002D1EBD002D1E + BB002D1EBA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1E + BE003325BE00C7C3EC0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000CDCDFD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF00CDCD + FC00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E00258A6300278C6500278C6500278C6500278C6500278C6500278C6500278C + 6500278C6500278C6500278C6500278C6500278C6500278C6500278C6500278C + 6500278C6500278C6500278C6500278C6500278C6500278C6500278C6500278C + 6500278C6500278C6500278C6500278C6500278C6500278C6500278C6500278C + 6500278C6500278C6500278C6500278C6500278C6500278C6500278C6500278C + 6500066A4600000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0076966A0075956A0075946A0075946A007594 + 6A0075956A0076966A0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0069855E008CA0 + 83000000000080C9F5006EC2F400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000ABA6 + E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BD002D1EBB002D1EBA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE003325 + BE00C7C2EC000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C1C1FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF00C2C2 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E00288C65002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E + 67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E + 67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E + 67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E + 67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E67002A8E + 670005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0076966A0075956A0075946A007594 + 6A0075946A0075956A0076966A0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0069855E0087A2 + 8D006CC4F90040B2F6006EC2F400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBD002D1EBB002D1EBA002D1EBA002D1EBA002D1EBB003325BD00C7C2 + EC00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B8B8FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF00B8B8 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E002B8F68002D916A002D916A002D916A002D916A002D916A002D916A002D91 + 6A002D916A002D916A002D916A002D916A002D916A002D916A002D916A002D91 + 6A002D916A002D916A002D916A002D916A002D916A002D916A002D916A002D91 + 6A002D916A002D916A002D916A002D916A002D916A002D916A002D916A002D91 + 6A002D916A002D916A002D916A002D916A002D916A002D916A002D916A002D91 + 6A0005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B0076966A0075956A007594 + 6A0075946A0075946A0075956A0076966A0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E00648B72004AAF + E70040B5FB0040B4FA006EC2F500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBD002D1EBB002D1EBA002D1EBA003325BB00C4BFE8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000AEAEFD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF00AEAE + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E002D916A0030936C0030936C0030936C0030936C0030936C0030936C003093 + 6C0030936C0030936C0030936C0030936C0030936C0030936C0030936C003093 + 6C0030936C0030936C0030936C0030936C0030936C0030936C0030936C003093 + 6C0030936C0030936C0030936C0030936C0030936C0030936C0030936C003093 + 6C0030936C0030936C0030936C0030936C0030936C0030936C0030936C003093 + 6C0005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B0077976B0076966A007595 + 6A0075946A0075946A0075946A0075956A0085A9770094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B006090800043B0ED0040B5 + FB0040B5FB0040B5FB0040B4FA0040B2F60040B2F60040B2F60040B2F60040B2 + F60040B4FA0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBD002D1EBB003325BB00C4BFE800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000A3A3FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF00A3A3 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E002F936C0032966E0032966E0032966E0032966E0032966E0032966E003296 + 6E0032966E0032966E0032966E0032966E0032966E0032966E0032966E003296 + 6E0032966E0032966E0032966E0032966E0032966E0032966E0032966E003296 + 6E0032966E0032966E0032966E0032966E0032966E0032966E0032966E003296 + 6E0032966E0032966E0032966E0032966E0032966E0032966E0032966E003296 + 6E0005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B0077976B0077976B007696 + 6A0075956A0075946A0075946A0075946A0084A7760093BB840094BC850094BC + 850094BC850094BC850094BC850094BC850071B1A50042B4F50040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2F60040B2F60040B2F60040B2 + F60040B2F60040B4FA0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE003325BD00C4BFE80000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00009898FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF009999 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E0032966E003599710035997100359971003599710035997100359971003599 + 7100359971003599710035997100359971003599710035997100359971003599 + 7100359971003599710035997100359971003599710035997100359971003599 + 7100359971003599710035997100359971003599710035997100359971003599 + 7100359971003599710035997100359971003599710035997100359971003599 + 710005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B00A9B6A400B6BEB300B6BE + B30076966A0075956A0075946A0075946A0084A7760092B9830093BB840094BC + 850094BC850094BC850094BC850070B9B80040B5FA0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2F60040B2F60040B2 + F60040B2F60040B2F60040B4FA0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003325BE00C7C2EC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00008D8DFD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF008E8E + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E0035987000389B7300389B7300389B7300389B7300389B7300389B7300389B + 7300389B7300389B7300389B7300389B7300389B7300389B7300389B7300389B + 7300389B7300389B7300389B7300389B7300389B7300389B7300389B7300389B + 7300389B7300389B7300389B7300389B7300389B7300389B7300389B7300389B + 7300389B7300389B7300389B7300389B7300389B7300389B7300389B7300389B + 730005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B00CDCDCD00C2C6C000B6BE + B30077976B0076966A0075956A0075946A0084A7760091B9830092B9830093BB + 840094BC850093BC860063B8CA0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2F60040B2 + F60040B2F60040B2F60040B2F60040B4FA0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C4C1E8003223B9002D1EBB002D1E + BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003D2EC100DCD9F3000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00008484FC001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF008686 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E00389B73003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E + 76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E + 76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E + 76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E + 76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E76003B9E + 760005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B00CDCDCD00A2B29C007797 + 6B0077976B0077976B0076966A0075956A0084A7760091B9830091B9830092B9 + 83008FBB8A0059B7D80040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2 + F60040B2F60040B2F60040B2F60040B2F60040B4FA0040B5FB0040B5FB0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C8C4E9003527BA002D1EBA002D1EBA002D1E + BB002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F20000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007777F9001F1FFE001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF007B7B + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E003A9E75003DA178003DA178003DA178003DA178003DA178003DA178003DA1 + 78003DA178003DA178003DA178003DA178003DA178003DA178003DA178003DA1 + 78003DA178003DA178003DA178003DA178003DA178003DA178003DA178003DA1 + 78003DA178003DA178003DA178003DA178003DA178003DA178003DA178003DA1 + 78003DA178003DA178003DA178003DA178003DA178003DA178003DA178003DA1 + 780005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B00CDCDCD00A2B29C007797 + 6B0077976B0077976B0077976B0076966A0084A7760091B9830091B983008AB8 + 8F004FB4E00040B4FA0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B4 + FA0040B2F60040B2F60040B2F60040B2F60040B2F60040B4FA0040B5FB0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000CBC7ED003527BD002D1EBB002D1EBA002D1EBA002D1E + BA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F200000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006F6FF8001F1FFA001F1FFE001F1FFF001F1FFF001F1FFF001F1FFF007171 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E003DA0770040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A3 + 7A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A3 + 7A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A3 + 7A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A3 + 7A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A37A0040A3 + 7A0005694500000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B00CDCDCD00A2B29C007797 + 6B0077976B0077976B0077976B0077976B0085A9770092B9830091B983008AB8 + 8F004FB4E00040B2F60040B4FA0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B4FA0040B2F60040B2F60040B2F60040B2F60040B2F60040B4FA0040B5 + FB0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CBC7ED003527BE002D1EBE002D1EBD002D1EBB002D1EBA002D1E + BA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8F2000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006262F8001F1FFA001F1FFA001F1FFE001F1FFF001F1FFF001F1FFF006464 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E003FA27A0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A6 + 7D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A6 + 7D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A6 + 7D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A6 + 7D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A67D0043A6 + 7D0005694500000000000000000000000000000000000000000000000000BDCB + B90077976B0077976B0077976B0077976B0077976B00CDCDCD00A2B29C007797 + 6B0077976B0077976B0077976B0077976B0086AA780093BB840092B9830091B9 + 83008EB9890058B4D40040B2F60040B4FA0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B4FA0040B2F60040B2F60040B2F60040B2F60040B2F60040B4 + FA0040B5FB006EC6F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000CBC7ED003527BE002D1EBE002D1EBE002D1EBE002D1EBD002D1EBB002D1E + BA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100DAD8 + F200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005B5BF8001F1FFA001F1FFA001F1FFA001F1FFE001F1FFF001F1FFF005B5B + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001270 + 4E004AB78A0054C9980054CA990054CA990054CA990054CA990054CA990054CA + 990054CA990054CA990054CA990054CA990054CA990050BF91004BB3880046A8 + 7F0046A87F0046A87F0046A87F0046A87F0046A87F0046A87F0046A87F0046A8 + 7F0046A87F004BB388004FBE900054C9980054CA990054CA990054CA990054CA + 990054CA990054CA990054CA990054CA990054CA990054CA990054CA99004EBC + 8E0005694500000000000000000000000000000000000000000000000000BBC9 + B70076966A0077976B0077976B0077976B0077976B00CDCDCD00C2C6C000B6BE + B30077976B0077976B0077976B0077976B0086AA780094BC850093BB840092B9 + 830091B9830090B9840062B5C60040B2F60040B4FA0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B4FA0040B2F60040B2F60040B2F60040B2F60040B2 + F60040B4FA006EC6F90000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CBC7 + ED003527BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBD002D1E + BB002D1EBA002D1EBA002D1EBA002D1EBB002D1EBD002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2E + C100DAD8F2000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00004F50F8001F1FFA001F1FFA001F1FFA001F1FFA001F1FFE001F1FFF005151 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000007AAE + 9B0012704E000569450005694500056945000569450005694500056945000569 + 45000569450005694500056945000569450005694500056945004CB4890048AB + 820048AB820048AB820048AB820048AB820048AB820048AB820048AB820048AB + 820048AB82004CB48900096E4900056945000569450005694500056945000569 + 4500056945000569450005694500056945000569450005694500056945000569 + 45006AA59100000000000000000000000000000000000000000000000000BBC8 + B70075956A0076966A0077976B0077976B0077976B00A9B6A400B6BEB300B6BE + B30077976B0077976B0077976B0077976B0086AA780094BC850094BC850093BB + 840092B9830091B9830091B983006EB6B50040B2F50040B4FA0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2F60040B2F60040B2F60040B2 + F60040B2F6006EC5F90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000C7C3EC003325 + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BD002D1EBB002D1EBA002D1EBA003223B9002D1EB9002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE003E30C200DBD8F20000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00004646FC001F1FFA001F1FFA001F1FFA001F1FFA001F1FFA001F1FFE004545 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945004BAD84004BAD + 84004BAD84004BAD84004BAD84004BAD84004BAD84004BAD84004BAD84004BAD + 84004BAD84004BAD8400096D4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC8 + B70075946A0075956A0076966A0077976B0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850093BB840092B9830091B9830091B983006FAEA20041B1F10040B4FA0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2F60040B2F60040B2 + F60040B2F6006EC2F50000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CBC7ED003527BE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBD002D1EBB003224B900C2BFE800ABA6E0002D1EB9002D1EBD002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE003D2EC100DAD8F200000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003B3BFD001F1FFE001F1FFA001F1FFA001F1FFA001F1FFA001F1FFA003C3C + FC00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945004DB086004DB0 + 86004DB086004DB086004DB086004DB086004DB086004DB086004DB086004DB0 + 86004DB086004DB08600096D4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC8 + B70075946A0075946A0075956A0076966A0077976B0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850093BB840092B9830091B9830087AC79005F8E7E0043AEEA0040B4 + FA0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5 + FB0040B5FB0040B5FB0040B5FB0040B5FB0040B5FB0040B4FA0040B2F60040B2 + F60040B2F6006EC2F40000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000CBC7ED003527BE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE003224BC00C2BFE8000000000000000000ABA6E0002D1EB9002D1E + BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003D2EC100D9D6F2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003030FD001F1FFF001F1FFE001F1FFA001F1FFA001F1FFA001F1FFA003131 + F800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450050B2880050B2 + 880050B2880050B2880050B2880050B2880050B2880050B2880050B2880050B2 + 880050B2880050B28800096D4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BBC9 + B70075946A0075946A0075946A0075956A0076966A0077976B0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850093BB840092B9830087AC790067835D00638A710049AC + E40040B4FA0040B5FB006EC6F900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C8C4E9003527BD002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE003224BD00C5C1EC0000000000000000000000000000000000ABA6E0002D1E + B9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE003D2EC100D9D6F20000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00002626FD001F1FFF001F1FFF001F1FFE001F1FFA001F1FFA001F1FFA002727 + F800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450052B48A0052B4 + 8A0052B48A0052B48A0052B48A0052B48A0052B48A0052B48A0052B48A0052B4 + 8A0052B48A0052B48A000A6D4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BDCB + B90075956A0075946A0075946A0075946A0075956A0076966A0077976B007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850093BB840087AC790067835D0067835D0084A0 + 8B006BC2F40040B4FA006EC6F900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C8C4E9003527BA002D1EBB002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224 + BD00C5C1EC00000000000000000000000000000000000000000000000000ABA6 + E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100D9D6F200000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001E1EFD001F1FFF001F1FFF001F1FFF001F1FFE001F1FFA001F1FFA001E1E + F800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450054B68C0054B6 + 8C0054B68C0054B68C0054B68C0054B68C0054B68C0054B68C0054B68C0054B6 + 8C0054B68C0054B68C000A6E4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0076966A0075956A0075946A0075946A0075946A0075956A0076966A007797 + 6B0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850088AE7A0068835D0067835D00899E + 82000000000080C9F5006EC5F900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C8C4E9003527BA002D1EBA002D1EBA002D1EBB002D1EBD002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224BD00C5C1 + EC00000000000000000000000000000000000000000000000000000000000000 + 0000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100D9D6F2000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFE001F1FFA001F1F + FA00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450057B88E0057B8 + 8E0057B88E0057B88E0057B88E0057B88E0057B88E0057B88E0057B88E0057B8 + 8E0057B88E0057B88E000A6E4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0076966A0075956A0075946A0075946A0075946A0075956A007696 + 6A0077976B0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0068845D0068835D00899E + 82000000000000000000BEE1F700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000CBC7ED003527BD002D1EBB002D1EBA002D1EBA002D1EBA002D1EBB002D1E + BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224BD00C5C1EC000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2EC100D9D6 + F200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFE001F1F + FA00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450059BA900059BA + 900059BA900059BA900059BA900059BA900059BA900059BA900059BA900059BA + 900059BA900059BA90000A6E4900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0076966A0075956A0075946A0075946A0075946A007595 + 6A0076966A0077976B0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0068845D00899E + 8200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CBC7 + ED003527BE002D1EBE002D1EBD002D1EBB002D1EBA002D1EBA002D1EBA002D1E + BB002D1EBD002D1EBE002D1EBE002D1EBE003224BD00C5C1EC00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003D2E + C100D9D6F2000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000DDDD + FD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1F + FE00DBDBF9000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945005BBC92005BBC + 92005BBC92005BBC92005BBC92005BBC92005BBC92005BBC92005BBC92005BBC + 92005BBC92005BBC92000A6E4A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0076966A0075956A0075946A0075946A007594 + 6A0075956A0076966A0077976B0077976B0086AA780094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0069855E008CA0 + 8300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CBC7ED003527 + BE002D1EBE002D1EBE002D1EBE002D1EBD002D1EBB002D1EBA002D1EBA002D1E + BA002D1EBB002D1EBD002D1EBE003224BD00C5C1EC0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE003D2EC100D9D6F20000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1F + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945005DBE93005DBE + 93005DBE93005DBE93005DBE93005DBE93005DBE93005DBE93005DBE93005DBE + 93005DBE93005DBE93000A6E4A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0076966A0075956A0075946A007594 + 6A0075946A0075956A0076966A0077976B0088AC7A0094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CBC7ED003527BE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBD002D1EBB002D1EBA002D1E + BA002D1EBA002D1EBB003224BC00C5C1EC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ABA6E0002D1EB9002D1EBD002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE003D2EC100D9D6F200000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00004F4FFD001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF001F1FFF005454 + FD00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945005EC095005EC0 + 95005EC095005EC095005EC095005EC095005EC095005EC095005EC095005EC0 + 95005EC095005EC095000A6E4A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B0076966A0075956A007594 + 6A0075946A0076946B007E9F71008CB27E0094BC850094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000CBC7ED003527BE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBD002D1EBB002D1E + BA002D1EBA003224B900C2BFE800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000ABA6E0002D1EB9002D1E + BD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE003D2EC100D9D6F2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000005F5FFD001E1EFD001F1FFF001F1FFF001E1EFD006262FD000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450060C1960060C1 + 960060C1960060C1960060C1960060C1960060C1960060C1960060C1960060C1 + 960060C1960060C196000A6E4A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B0077976B0076966A007595 + 6A007EA171008DB27F0091B9830092B9830093BB840094BC850094BC850094BC + 850094BC850094BC850094BC850094BC850089AF7B0069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000006B5ECF002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBD002D1E + BB003325BB00C4C1E80000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000ABA6E0002D1E + B9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE008982D9000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000DFDFFD00BABAFD00BCBCFD00E2E2FD00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000569450061C3980061C3 + 980061C3980061C3980061C3980061C3980061C3980061C3980061C3980061C3 + 980061C3980061C398000A6E4A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0077976B0077976B0077976B007EA0710085AB + 780087AC790087AC790087AC790087AC790087AC790088AE7A0089AF7B0089AF + 7B0089AF7B0089AF7B0089AF7B0089AF7B0082A4740069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000006156CC002D1EBE002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224 + BC00C2BFE8000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000ABA6 + E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE002D1EBE007971D400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000056945006FDBAB0077EC + B80077ECB80077ECB80077ECB80077ECB80077ECB80077ECB80077ECB80077EC + B80077ECB80070DDAD000B6F4A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0077976B0077976B0076966A00718F66006B875F0069855E006985 + 5E0068845D0068835D0067835D0067835D0067835D0068835D0068845D006985 + 5E0069855E0069855E0069855E0069855E0069855E0069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000006156CC002D1E + BE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224BD00C5C1 + EC00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1EBE002D1E + BE002D1EBE007971D40000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000006AA59100056945000569 + 4500056945000569450005694500056945000569450005694500056945000569 + 450005694500056945006AA59100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFCC + BA0077976B0076956A00708E650069865F0069855E0069855E0069855E006985 + 5E0069855E0068845D0068835D0067835D0067835D0067835D0068835D006884 + 5D0069855E0069855E0069855E0069855E0069855E0069855E0069855E008CA0 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006156 + CC002D1EBE002D1EBE002D1EBE002D1EBE002D1EBE003224BD00C5C1EC000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE002D1EBE002D1E + BE007971D4000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFD8 + CA00829C78008B9F83008CA084008CA084008CA084008CA084008CA084008CA0 + 84008CA084008CA084008CA08300899E8200899E8200899E8200899E8200899E + 82008CA083008CA084008CA084008CA084008CA084008CA084008CA08400A8B8 + A200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006156CC002D1EBE002D1EBE002D1EBE003224BD00C5C1EC00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000ABA6E0002D1EB9002D1EBD002D1EBE002D1EBE007971 + D400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000006156CC002D1EBE003224BD00C5C1EC0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000ABA6E0002D1EB9002D1EBD007971D4000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000006A60D000C5C1EC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ABA6E0007A71D100000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 28000000C0000000900000000100010000000000800D00000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000FFE3FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFEFFFFF000000003FC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFF + 000000003F80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF000000001F08FFFF + F01FFFFFFFFFFFFFFFFFFFFFFE0FFFFF000000001E10FFFE001FFFFFFFFFFFFF + FFFFFFFFF80FFFFF000000001C21FFC0001FFFFFFFFFFFFFFFFFFFFFF00FFFFF + 000000001843F800001FFFFFFFFFFFFFFFFFFFFFF00FFFFF000000001887C000 + 001FFFFFFFFFFFFFFFFFFFFFF00FFFFF00000000000F800000000003FFFFFFFF + FFFFFFFFF00FFFFF00000000001F800000000001FFFFFFFFFFFFFFFFF00FFFFF + 00000000003F800000000001FFF0000007FFFFFFF00FFFFF0000000000FF8000 + 00000001FFC0000003FFFFFFF00FFFFF0000000000FF800000000001FFC00000 + 03FFFFFFF00FFFFF00000000007F800000000001FFC0000003FFFFFFF00FFFFF + 00000000007F800000000001FFC3FFFFC3FFFFFFF00FFFFF00000000007F8000 + 00000001FFC3FFFFC3FFFFFFF00FFFFF00000000003F800000000001FFC3FFFF + C3FFFFFFF00FFFFF00000000003F800000000001FFC3F9FFC3FFFFFFF00FFFFF + 00000000003F800000000001FFC3F0FFC3FFFFFFF00FFFFF00000000003F8000 + 00000001FFC3E07FC3FFFFFFF00FFFFF00000000007F800000000001FFC3C03F + C3FFFFFFF00FFFFF00000000007F800000000001FFC3801FC3FFFFFFF00FFFFF + 00000000007F800000000001FFC3000FC3FFFFFFF00FFFFF0000000000FF8000 + 00000001FFC38007C3FFFFFFF00FFFFF0000000000FF800000000001FFC3C603 + C3FFFFFFF00FFFFF0000000001FF800000000001FFC3EF01C3FFFFFFF00FFFFF + 0000000003FF800000000001FFC3FF80C3FFFFFFE007FFFF0000000007FF8000 + 00000001FFC3FFC1C3FFFFFFC003FFFF000000000FFF800000000001FFC3FFE3 + C3FFFFFF8001FFFF000000003FFF800000000001FFC3FFF7C3FFFFFF8001FFFF + 000000003FFF800000000001FFC3FFFFC3FFFFFF0000FFFF000000001FFF8000 + 00000001FFC3FFFFC3FFFFFE00007FFF000000001FFF800000000001FFC3FFFF + C3FFFFFC00003FFF000000001FFF800000000001FFC3FFFFC3FFFFF800001FFF + 000000001FFF800000000001FFC0000003FFFFF000001FFF000000001FFF8000 + 00000001FFC0000003FFFFF000000FFF000000001FFF800000000001FFE00000 + 07FFFFE0000007FF000000001FFF800000000001FFF0000007FFFFC0000003FF + 000000003FFF800000000001FFFFFFFFFFFFFF80000001FF000000007FFF8000 + 00000003FFFFFFFFFFFFFF00000000FF00000000FFFFC000001FFFFFFFFFFFFF + FFFFFF00000000FF00000001FFFFF800001FFFFFFFFFFFFFFFFFFE000000007F + 00000003FFFFFFC0001FFFFFFFFFFFFFFFFFFC000000003F1FFFFE07FFFFFFFE + 001FFFFFFFFFFFFFFFFFF8000000001F1FFFFE0FFFFFFFFFF01FFFFFFFFFFFFF + FFFFF0000000000F0000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0000000000F + 0000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000000000070000007FFFFFFFFF + FFFFFFFFFFFFFFFFFFFFC00000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFCFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87FFFFFFE1F + FFFFFFFFFFFFFFFFFFFFFFFFFFFE7FFFFFFFF03FFFFFFC0FFFFFFFFFFFFFFFFF + 8001FFFFFFF87FFFFFFFE01FFFFFF807FFFFFFFFFFFFFFFF8001FFFFFFE07FFF + FFFFC00FFFFFF003FFFFFE7FFFFFFFFF8001FFFFFF807FFFFFFF8007FFFFE001 + FFFFF81FFFFFFFFF8001FFFFFE007FFFFFFF0003FFFFC000FFFFF81FFFFFFFFF + 8001FFFFF8007FFFFFFF0001FFFF8000FFFFF00FFFFFFFFF8001FFFFE000000F + FFFF8000FFFF0001FFFFF81FFFFFFFFF8001FFFFE000000FFFFFC0007FFE0003 + FFFFF81FFFFFFFFF8001FFFFE000000FFFFFE0003FFC0007FFFFFC3FFFFFFFFF + 8001FFFFE000000FFFFFF0001FF8000FFFFFFFFFFFFFFFFF8001FFFFE000000F + FFFFF8000FF0001FFFFFFC3FFFFFFFFF8001FFFFE000000FFFFFFC0007E0003F + FFFFF81FFFFFFFFF8001FFFFE000000FFFFFFE0003C0007FFFFFF81FFFFFFFFF + 8001FFFFE000000FFFFFFF00018000FFFFFFF00FFFFFFFFF8001FFFFE000000F + 8127FF80000001FFFFFFF00FFFFFE00000000007E000000D8127FFC0000003FF + FFFFF00FFFFFE00000000007E0000009FFFFFFE0000007FFFFFFF00FFFFFE000 + 00000007E0000001FFFFFFF000000FFFFFFFF00FFFFFE00000000007E0000001 + FFFFFFF800001FFFFFFFF00FFFFFE00000000007E00000000003FFFC00003FFF + FFFFF00FFFFFE00000000007E00000000003FFFE00007FFFFFFFF00FFFFFE000 + 00000007E00000000003FFFF0000FFFFFFFFF00FFFFFE00000000007E0000000 + 0003FFFF0000FFFFFFFFF00FFFFFE00000000007E00000000003FFFE00007FFF + FFFFF00FFFFFE00000000007E00000000003FFFC00003FFFFFFFF00FFFFFE000 + 00000007E00000000003FFF800001FFFFFFFF00FFFFFE00000000007E0000000 + 0003FFF000000FFFFFFFF00FFFFFE00000000007E00000000003FFE0000007FF + FFFFF00FFFFFE00000000007E00000000003FFC0000003FFFFFFF00FFFFFFFFF + 8001FFFFE00000000003FF80000001FFFFFFF00FFFFFFFFF8001FFFFE0000000 + 0003FF00018000FFFFFFF00FFFFFFFFF8001FFFFE0000001FFFFFE0003C0007F + FFFFF00FFFFFFFFF8001FFFFE0000001FFFFFC0007E0003FFFFFF00FFFFFFFFF + 8001FFFFE0000009FFFFF8000FF0001FFFFFF00FFFFFFFFF8001FFFFE000000D + FFFFF0001FF8000FFFFFF00FFFFFFFFF8001FFFFE000000FFFFFE0003FFC0007 + FFFFE007FFFFFFFF8001FFFFE000000FFFFFC0007FFE0003FFFFF00FFFFFFFFF + 8001FFFFE000000FFFFF8000FFFF0001FFFFF00FFFFFFFFF8001FFFFE000000F + FFFF0001FFFF8000FFFFF81FFFFFFFFF8001FFFFE000000FFFFF0003FFFFC000 + FFFFFC3FFFFFFFFF8001FFFFE000000FFFFF8007FFFFE001FFFFFFFFFFFFFFFF + 8001FFFFE000000FFFFFC00FFFFFF003FFFFFFFFFFFFFFFF8001FFFFE000000F + FFFFE01FFFFFF807FFFFFFFFFFFFFFFFFFFFFFFFE000000FFFFFF03FFFFFFC0F + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87FFFFFFE1FFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFCFFFFFFFF3F00000000000000000000000000000000 + 000000000000} + end + object dsZavady: TDataSource + DataSet = vtZavady + Left = 276 + Top = 30 + end + object vtZavady: TFDMemTable + Active = True + FieldDefs = < + item + Name = 'colID' + DataType = ftInteger + end + item + Name = 'colKod' + DataType = ftString + Size = 15 + end + item + Name = 'colTyp' + DataType = ftInteger + end + item + Name = 'colNazev' + DataType = ftString + Size = 80 + end + item + Name = 'colIDPrikaz' + DataType = ftInteger + end> + IndexDefs = <> + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + StoreDefs = True + Left = 276 + Top = 86 + object vtZavadycolID: TIntegerField + FieldName = 'colID' + Visible = False + end + object vtZavadycolKod: TStringField + FieldName = 'colKod' + Size = 15 + end + object vtZavadycolTyp: TIntegerField + FieldName = 'colTyp' + Visible = False + end + object vtZavadycolNazev: TStringField + FieldName = 'colNazev' + Size = 80 + end + object vtZavadycolIDPrikaz: TIntegerField + FieldName = 'colIDPrikaz' + end + end + object vtVyrobniTyden: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 374 + Top = 86 + object vtVyrobniTydencolRok: TIntegerField + FieldName = 'colRok' + Visible = False + end + object vtVyrobniTydencolTyden: TIntegerField + FieldName = 'colTyden' + end + object vtVyrobniTydencolDatumOd: TDateField + FieldName = 'colDatumOd' + end + object vtVyrobniTydencolDatumDo: TDateField + FieldName = 'colDatumDo' + end + end + object dsVyrobniTyden: TDataSource + DataSet = vtVyrobniTyden + Left = 374 + Top = 34 + end + object dsRamcovyPlan: TDataSource + DataSet = vtRamcovyPlan + Left = 380 + Top = 178 + end + object vtRamcovyPlan: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 380 + Top = 232 + object vtRamcovyPlanID: TIntegerField + FieldName = 'ID' + Visible = False + end + object vtRamcovyPlanIDKmen: TIntegerField + FieldName = 'IDKmen' + Visible = False + end + object vtRamcovyPlanSZ: TStringField + FieldName = 'SZ' + Size = 3 + end + object vtRamcovyPlanRegCis: TStringField + FieldName = 'RegCis' + Size = 30 + end + object vtRamcovyPlanNazev1: TStringField + FieldName = 'Nazev1' + Size = 100 + end + object vtRamcovyPlanMJ: TStringField + FieldName = 'MJ' + Size = 10 + end + object vtRamcovyPlanKs: TIntegerField + FieldName = 'Ks' + end + object vtRamcovyPlanKA: TIntegerField + FieldName = 'KA' + end + object vtRamcovyPlanCisloOrg: TIntegerField + FieldName = 'CisloOrg' + end + object vtRamcovyPlanM01: TIntegerField + FieldName = 'M01' + end + object vtRamcovyPlanM02: TIntegerField + FieldName = 'M02' + end + object vtRamcovyPlanM03: TIntegerField + FieldName = 'M03' + end + object vtRamcovyPlanM04: TIntegerField + FieldName = 'M04' + end + object vtRamcovyPlanM05: TIntegerField + FieldName = 'M05' + end + object vtRamcovyPlanM06: TIntegerField + FieldName = 'M06' + end + object vtRamcovyPlanM07: TIntegerField + FieldName = 'M07' + end + object vtRamcovyPlanM08: TIntegerField + FieldName = 'M08' + end + object vtRamcovyPlanM09: TIntegerField + FieldName = 'M09' + end + object vtRamcovyPlanM10: TIntegerField + FieldName = 'M10' + end + object vtRamcovyPlanM11: TIntegerField + FieldName = 'M11' + end + object vtRamcovyPlanM12: TIntegerField + FieldName = 'M12' + end + object vtRamcovyPlanSumace: TIntegerField + FieldName = 'Sumace' + end + object vtRamcovyPlanVyroba: TIntegerField + FieldName = 'Vyroba' + end + object vtRamcovyPlanZbyva: TIntegerField + FieldName = 'Zbyva' + end + object vtRamcovyPlanSklRoo: TIntegerField + FieldName = 'SklRoo' + end + object vtRamcovyPlanSklTvin: TIntegerField + FieldName = 'SklTvin' + end + object vtRamcovyPlanSklAlter: TIntegerField + FieldName = 'Alter' + end + object vtRamcovyPlanSklMimoPlan: TBooleanField + FieldName = 'MimoPlan' + end + end + object dsRPlanAlter: TDataSource + DataSet = vtRPlanAlter + Left = 472 + Top = 182 + end + object vtRPlanAlter: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 472 + Top = 244 + object vtRPlanAlterID: TIntegerField + FieldName = 'ID' + Visible = False + end + object vtRPlanAlterKalibr: TStringField + FieldName = 'Kalibr' + Size = 30 + end + object vtRPlanAlterDelkaJm: TFloatField + FieldName = 'DelkaJm' + end + object vtRPlanAlterStroj: TStringField + FieldName = 'Stroj' + Size = 30 + end + object vtRPlanAlterIDStroj: TIntegerField + FieldName = 'IDStroj' + Visible = False + end + end + object dsPlanPL: TDataSource + DataSet = vtPlanPL + Left = 568 + Top = 186 + end + object vtPlanPL: TFDMemTable + Active = True + FieldDefs = < + item + Name = 'IDPrikaz' + Attributes = [faRequired] + DataType = ftInteger + end + item + Name = 'IDVCPrikaz' + Attributes = [faRequired] + DataType = ftInteger + end + item + Name = 'CisloPL' + DataType = ftString + Size = 100 + end + item + Name = 'DatVyrobaZadano' + DataType = ftDateTime + end + item + Name = 'DatVyrobaStart' + DataType = ftDateTime + end + item + Name = 'DatExpedice' + DataType = ftDateTime + end + item + Name = 'KAnaPal' + DataType = ftFloat + end + item + Name = 'Kusu' + DataType = ftInteger + end + item + Name = 'DatExpirace' + DataType = ftDateTime + end + item + Name = 'CisloExtZak' + DataType = ftString + Size = 100 + end> + IndexDefs = <> + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + StoreDefs = True + Left = 562 + Top = 252 + object vtPlanPLIDPrikaz: TIntegerField + FieldName = 'IDPrikaz' + Required = True + Visible = False + end + object vtPlanPLIDVCPrikaz: TIntegerField + FieldName = 'IDVCPrikaz' + Required = True + Visible = False + end + object vtPlanPLCisloPL: TStringField + Alignment = taCenter + DisplayLabel = 'Ev.'#269'.palety' + DisplayWidth = 9 + FieldName = 'CisloPL' + Size = 100 + end + object vtPlanPLDatVyrobaZadano: TDateTimeField + DisplayLabel = 'Zad'#225'no' + DisplayWidth = 11 + FieldName = 'DatVyrobaZadano' + end + object vtPlanPLDatVyrobaStart: TDateTimeField + DisplayLabel = 'V'#253'roba' + DisplayWidth = 10 + FieldName = 'DatVyrobaStart' + end + object vtPlanPLDatExpedice: TDateTimeField + DisplayLabel = 'Expedice' + DisplayWidth = 14 + FieldName = 'DatExpedice' + end + object vtPlanPLKAnaPal: TFloatField + Alignment = taCenter + DisplayLabel = 'KA' + DisplayWidth = 6 + FieldName = 'KAnaPal' + end + object vtPlanPLKusu: TIntegerField + Alignment = taCenter + DisplayLabel = 'Ks' + DisplayWidth = 6 + FieldName = 'Kusu' + end + object vtPlanPLDatExpirace: TDateTimeField + FieldName = 'DatExpirace' + Visible = False + end + object vtPlanPLCisloExtZak: TStringField + FieldName = 'CisloExtZak' + Visible = False + Size = 100 + end + end +end diff --git a/_plgPlan/datMod2.pas b/_plgPlan/datMod2.pas new file mode 100644 index 0000000..f35e988 --- /dev/null +++ b/_plgPlan/datMod2.pas @@ -0,0 +1,821 @@ +unit datMod2; + +interface + +uses + System.SysUtils, System.Classes, + ddPlugin_TLB, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, + FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, Data.DB, FireDAC.Comp.DataSet, + FireDAC.Comp.Client, + frmPlan, frmRamcovyPlan, Vcl.BaseImageCollection, Vcl.ImageCollection, System.ImageList, Vcl.ImgList, + Vcl.VirtualImageList, Vcl.Controls; + +{$I iConsts.inc} + +type + TGridColWidthKoefs = record + fieldName: string; + widthKoef: Extended; + end; + + TDavkaPrikazOdv = record + cislo: integer; + idPrikaz: integer; + idDavka: integer; + mnozOdvPrikaz: extended; + mnozZapsane: Extended; + mnozOdvPredchozi: extended; + end; + + + Tdm2 = class(TDataModule) + vtRozpis: TFDMemTable; + dsRozpis: TDataSource; + dsKalendar: TDataSource; + vtKalendar: TFDMemTable; + vtRozpiscolDatum: TDateField; + vtRozpiscolID: TIntegerField; + vtRozpiscolHodOd: TSmallintField; + vtRozpiscolHodDo: TSmallintField; + vtRozpiscolSkupZbo: TStringField; + vtRozpiscolRegCis: TStringField; + vtRozpiscolNazev: TStringField; + vtRozpiscolPrikaz: TStringField; + vtRozpiscolMnoz: TSmallintField; + vtRozpiscolMnozHotovo: TSmallintField; + vtKalendarcolIDStroj: TIntegerField; + vtKalendarcolStroj: TStringField; + vtKalendarcolNe: TSmallintField; + vtKalendarcolPo: TSmallintField; + vtKalendarcolUt: TSmallintField; + vtKalendarcolSt: TSmallintField; + vtKalendarcolCt: TSmallintField; + vtKalendarcolPa: TSmallintField; + vtKalendarcolSo: TSmallintField; + vtKalendarcolKodStroj: TStringField; + dsKmen: TDataSource; + vtKmen: TFDMemTable; + vtKmencolID: TIntegerField; + vtKmencolSZ: TStringField; + vtKmencolRegCis: TStringField; + vtKmencolNazev1: TStringField; + vtKmencolMJEvid: TStringField; + vtKmencolDilec: TBooleanField; + vtKmencolMaterial: TBooleanField; + vtKmencolSluzba: TBooleanField; + vtKmencolSKP: TStringField; + imgCol: TImageCollection; + imgList: TVirtualImageList; + ImageList1: TImageList; + vtKmenIDZaklad: TIntegerField; + vtKmencolZaklad: TStringField; + vtKmencolIDStroj: TIntegerField; + vtKmencolStroj: TStringField; + vtKmencolKSvKA: TIntegerField; + vtKmencolKAnaPAL: TIntegerField; + vtKmencolKSnaPAL: TIntegerField; + vtKmencolIDZakModif: TIntegerField; + dsZavady: TDataSource; + vtZavady: TFDMemTable; + vtZavadycolID: TIntegerField; + vtZavadycolKod: TStringField; + vtZavadycolTyp: TIntegerField; + vtZavadycolNazev: TStringField; + vtRozpiscolIDDavkaAdvPlan: TIntegerField; + vtRozpiscolIdKmen: TIntegerField; + vtRozpiscolIdPrikaz: TIntegerField; + vtVyrobniTyden: TFDMemTable; + dsVyrobniTyden: TDataSource; + vtVyrobniTydencolTyden: TIntegerField; + vtVyrobniTydencolDatumOd: TDateField; + vtVyrobniTydencolDatumDo: TDateField; + vtVyrobniTydencolRok: TIntegerField; + dsRamcovyPlan: TDataSource; + vtRamcovyPlan: TFDMemTable; + vtRamcovyPlanID: TIntegerField; + vtRamcovyPlanIDKmen: TIntegerField; + vtRamcovyPlanSZ: TStringField; + vtRamcovyPlanRegCis: TStringField; + vtRamcovyPlanNazev1: TStringField; + vtRamcovyPlanMJ: TStringField; + vtRamcovyPlanKs: TIntegerField; + vtRamcovyPlanKA: TIntegerField; + vtRamcovyPlanCisloOrg: TIntegerField; + vtRamcovyPlanM01: TIntegerField; + vtRamcovyPlanM02: TIntegerField; + vtRamcovyPlanM03: TIntegerField; + vtRamcovyPlanM04: TIntegerField; + vtRamcovyPlanM05: TIntegerField; + vtRamcovyPlanM06: TIntegerField; + vtRamcovyPlanM07: TIntegerField; + vtRamcovyPlanM08: TIntegerField; + vtRamcovyPlanM09: TIntegerField; + vtRamcovyPlanM10: TIntegerField; + vtRamcovyPlanM11: TIntegerField; + vtRamcovyPlanM12: TIntegerField; + vtRamcovyPlanSumace: TIntegerField; + vtRamcovyPlanVyroba: TIntegerField; + vtRamcovyPlanZbyva: TIntegerField; + vtRamcovyPlanSklRoo: TIntegerField; + vtRamcovyPlanSklTvin: TIntegerField; + vtRamcovyPlanSklAlter: TIntegerField; + vtRamcovyPlanSklMimoPlan: TBooleanField; + dsRPlanAlter: TDataSource; + vtRPlanAlter: TFDMemTable; + vtRPlanAlterID: TIntegerField; + vtRPlanAlterKalibr: TStringField; + vtRPlanAlterDelkaJm: TFloatField; + vtRPlanAlterStroj: TStringField; + vtRPlanAlterIDStroj: TIntegerField; + dsPlanPL: TDataSource; + vtPlanPL: TFDMemTable; + vtPlanPLIDVCPrikaz: TIntegerField; + vtPlanPLCisloPL: TStringField; + vtPlanPLDatVyrobaZadano: TDateTimeField; + vtPlanPLDatVyrobaStart: TDateTimeField; + vtPlanPLDatExpedice: TDateTimeField; + vtPlanPLKAnaPal: TFloatField; + vtPlanPLKusu: TIntegerField; + vtPlanPLIDPrikaz: TIntegerField; + vtPlanPLDatExpirace: TDateTimeField; + vtRozpiscolIDPlan: TIntegerField; + vtPlanPLCisloExtZak: TStringField; + vtRozpiscolJeUdrzba: TSmallintField; + vtZavadycolIDPrikaz: TIntegerField; + procedure DataModuleCreate (Sender: TObject); + procedure vtKmenCalcFields(DataSet: TDataSet); + private + public + Helios: IHelios; + function VratPrepocetMJ (idKmen: integer; hlavniMJ, odvozenaMJ: string; sloupec: string='PocetOdvozene'): Extended; + procedure VymazRozpis (f: TformPlan); safecall; + procedure NactiRozpis (f: TformPlan; prazdny: boolean=false); safecall; + procedure NactiDavkyPlanu (f: TformPlan; idStroj: Integer=0); safecall; + procedure GenerujRozpis (odData: TDateTime; pocetDnu: integer=14); safecall; + procedure NactiKalendar (f: TformPlan; idStroj: integer=0); safecall; + procedure NactiKmenZbozi (podm: string=''); safecall; + procedure NactiUdrzbu (kodModif: string=''; podm: string=''); safecall; + procedure NactiVyrobniTydny (rok: integer); + procedure PlanPalListyNactiSarzePrikazu (idPrikaz, ksVKA: integer; var externiZak: string); + end; + +var + dm2: Tdm2; + dmCreated, apiMod: boolean; + apiServer, phServer, url, sqlLang: string; + idAdvKPl, bidPalety: integer; + +implementation +{%CLASSGROUP 'Vcl.Controls.TControl'} +uses System.Variants, System.StrUtils, Winapi.Windows, System.DateUtils, + helTabsBIDs, helUtils; +{$R *.dfm} + + + procedure Tdm2.DataModuleCreate (Sender: TObject); + begin + dmCreated:= true; + end; + + + + + function Tdm2.VratPrepocetMJ (idKmen: integer; hlavniMJ, odvozenaMJ: string; sloupec: string='PocetOdvozene'): Extended; + var lSQL: string; + begin + result:= 0; + sloupec:= sqlSanitize (sloupec); + lSQL:= 'SELECT ' + sloupec + ' FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND LOWER(KodMJ1)=N' + hlavniMJ.ToLower.QuotedString + + ' AND LOWER(KodMJ2)=N' + odvozenaMJ.ToLower.QuotedString; + try + result:= helUtils.getHeliosFloatVal (Helios, 0, lSQL); + finally + end; + end; + + + + + procedure Tdm2.NactiUdrzbu (kodModif: string=''; podm: string=''); + var lSQL, kod: string; + idPrPost: Integer; + begin + if not(vtZavady.Active) then + vtZavady.Open; + +// lehka sanitizace SQL + podm:= podm.Replace(';', '').Replace('--',''); + + lSQL:= 'SELECT TOP(1) pp.ID, pp.Nazev, pp.IDPrikaz, pp.operace FROM ' + tblPrPost + ' pp INNER JOIN ' + tblVPr + ' vp ON (vp.ID=pp.IDPrikaz AND pp.IDOdchylkyDo IS NULL AND pp.priorita=0)' + + ' INNER JOIN ' + tblZakazModif + ' m ON (m.ID=vp.IDZakazModif) INNER JOIN ' + tblPrikazRada + ' vpr ON (vpr.Rada=vp.Rada) WHERE pp.Typ=0 AND vp.StavPrikazu=30 AND m.Kod=N' + + kodModif.QuotedString + ' AND vpr.nazev LIKE N''%drb%'''; + +{ lSQL:= 'SELECT ID, Kod, Nazev, Typ FROM ' + tblCZavad; + if (podm<>'') then + lSQL:= lSQL + ' WHERE ' + podm; +} + lSQL:= lSQL + ' ORDER BY pp.Nazev'; + try + with Helios.OpenSQL (lSQL) do + begin + First; + while not(EOF) do + begin + vtZavady.Append; + idPrPost:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtZavady.FieldByName('colID').AsInteger:= idPrPost; + vtZavady.FieldByName('colNazev').AsString:= VarToStr(FieldByNameValues('Nazev')); + vtZavady.FieldByName('colIDPrikaz').AsInteger:= VarToStr(FieldByNameValues('IDPrikaz')).ToInteger; + vtZavady.FieldByName('colKod').AsString:= VarToStr(FieldByNameValues('operace')).Trim; +// vtZavady.FieldByName('colTyp').AsInteger:= VarToStr(FieldByNameValues('Typ')).ToInteger; + vtZavady.Post; + Next; + end; + end; + finally + end; + + end; + + + + + procedure Tdm2.NactiKmenZbozi (podm: string=''); + var lSQL, mjEvid: string; + idKZ, idZakazModif, idZakazModifDilce: Integer; + begin + if not(vtKmen.Active) then + vtKmen.Open; + +// lehka sanitizace SQL + podm:= podm.Replace(';', '').Replace('--',''); + + lSQL:= 'SELECT k.ID, k.SkupZbo, k.RegCis, k.Nazev1, k.SKP, k.MJEvidence, k.Material, k.Dilec, k.Sluzba, zm.Nazev AS NazevModif, zmd.ID AS IdZMD, zm.ID AS IdZM' + + ', ISNULL( (SELECT TOP(1) kN.Nazev1 FROM ' + tblKVaz + ' v INNER JOIN ' + tblKZ + ' kN ON (kN.ID=v.nizsi) WHERE v.vyssi=k.ID' + + ' AND v.ZmenaDo IS NULL AND v.IDZakazModif=zm.ID AND kN.SkupZbo=N''702''), N'''') AS Zaklad' + + ' FROM ' + tblZakazModifDilce + ' zmd INNER JOIN ' + tblZakazModif + ' zm ON (zm.ID=zmd.IDZakazModif) INNER JOIN ' + tblKZ + + ' k ON (k.ID=zmd.IDKmenZbozi)'; + if (podm<>'') then + lSQL:= lSQL + ' WHERE ' + podm; + lSQL:= lSQL + ' ORDER BY k.SkupZbo, k.RegCis, zm.Nazev'; + try + with Helios.OpenSQL (lSQL) do + begin + First; + while not(EOF) do + begin + vtKmen.Append; + idKZ:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtKmen.FieldByName('colID').AsInteger:= idKZ; + vtKmen.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtKmen.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtKmen.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtKmen.FieldByName('colSKP').AsString:= VarToStr(FieldByNameValues('SKP')); + mjEvid:= VarToStr(FieldByNameValues('MJEvidence')); + vtKmen.FieldByName('colMJEvid').AsString:= mjEvid; + vtKmen.FieldByName('colMaterial').AsBoolean:= FieldByNameValues('Material'); + vtKmen.FieldByName('colDilec').AsString:= FieldByNameValues('Dilec'); // TrueBoolStrs + vtKmen.FieldByName('colSluzba').AsBoolean:= FieldByNameValues('Sluzba'); + vtKmen.FieldByName('colZaklad').AsString:= VarToStr(FieldByNameValues('Zaklad')); + + if (mjEvid='KA') then + begin + lSQL:= 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''ks'''; + vtKmen.FieldByName('colKSvKA').AsInteger:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + + lSQL:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Pal'''; + vtKmen.FieldByName('colKAnaPAL').AsInteger:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + end; + + vtKmen.FieldByName('colIDZakModifDilce').AsInteger:= VarToStr(FieldByNameValues('IdZMD')).ToInteger; + vtKmen.FieldByName('colIDZakModif').AsInteger:= VarToStr(FieldByNameValues('IdZM')).ToInteger; + vtKmen.FieldByName('colZakModif').AsString:= VarToStr(FieldByNameValues('NazevModif')); + + vtKmen.Post; + Next; + end; + end; + finally + end; + end; + + + + + procedure Tdm2.NactiKalendar (f: TformPlan; idStroj: Integer=0); + var lSQL: string; + dStart, dAkt, dNedele, dTesty, dNow, d1: TDateTime; + datumNe, datumTesty: string; + dAktD, dAktM, dAktR, dTestD, dTestM, dTestR: integer; + i, cnt, cntNe, cntPo, cntUt, cntSt, cntCt, cntPa, cntSo: integer; + begin + if not(vtKalendar.Active) then + vtKalendar.Open; + vtKalendar.EmptyDataSet; + + idAdvKPl:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT TOP(1) ID FROM ' + tblAdvKPlan + ' WHERE Kod=N''99'''); + + dNedele:= 0; + dNow:= Now; + d1:= dNow; + if (f.sgCas.Cells[2,1]<>'') then // datumOd + begin + d1:= StrToDateTime(f.sgCas.Cells[2,1]); + dNedele:= d1; + end; + + dStart:= StartOfTheWeek (d1); + if (dNow=d1) and (dNedele=0) then + dNedele:= IncDay (dStart, -1); + dAkt:= d1; + dAktD:= DayOf (dAkt); + dAktM:= MonthOf (dAkt); + dAktR:= YearOf (dAkt); + + lSQL:= 'SELECT cs.ID, cs.Kod, cs.Nazev FROM ' + tblCStroju + ' cs LEFT JOIN ' + tblCStrojuE + ' cse ON (cse.ID=cs.ID) WHERE cs.Blokovano=0'; + lSQL:= lSQL + IfThen(idStroj>0, ' AND cs.ID=' + idStroj.ToString, '') + ' AND ISNULL(cse._Planovani,0)=1 ORDER BY cs.Nazev'; + try + with Helios.OpenSQL (lSQL) do + begin + First; + while not(EOF) do + begin + dTesty:= dNedele; + vtKalendar.Append; + idStroj:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtKalendar.FieldByName('colIDStroj').AsInteger:= idStroj; + vtKalendar.FieldByName('colKodStroj').AsString:= VarToStr(FieldByNameValues('Kod')); + vtKalendar.FieldByName('colStroj').AsString:= VarToStr(FieldByNameValues('Nazev')); + + for i:=0 to 6 do + begin +// datumTesty:= FormatDateTime ('dd.MM.yyyy', dTesty); + dTestD:= DayOf (dTesty); + dTestM:= MonthOf (dTesty); + dTestR:= YearOf (dTesty); + + lSQL:= 'SELECT COUNT(d.ID) FROM ' + tblAdvKPlanDavky + ' d INNER JOIN ' + tblVPr + ' p ON (p.ID=d.IDPrikaz) WHERE d.IdAdvKapacPlan=' + idAdvKPl.ToString + + IfThen(idStroj=0, '', ' AND d.IDStroje=' + idStroj.ToString) + ' AND p.StavPrikazu IN (30,40) AND d.CasOd_D=' + dTestD.ToString + + ' AND d.CasOd_M=' + dTestM.ToString + ' AND d.CasOd_Y=' + dTestR.ToString; + cnt:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + case i of + 0: begin vtKalendar.FieldByName('colNe').AsInteger:= cnt; cntNe:= cnt; end; + 1: begin vtKalendar.FieldByName('colPo').AsInteger:= cnt; cntPo:= cnt; end; + 2: begin vtKalendar.FieldByName('colUt').AsInteger:= cnt; cntUt:= cnt; end; + 3: begin vtKalendar.FieldByName('colSt').AsInteger:= cnt; cntSt:= cnt; end; + 4: begin vtKalendar.FieldByName('colCt').AsInteger:= cnt; cntCt:= cnt; end; + 5: begin vtKalendar.FieldByName('colPa').AsInteger:= cnt; cntPa:= cnt; end; + 6: begin vtKalendar.FieldByName('colSo').AsInteger:= cnt; cntSo:= cnt; end; + end; + dTesty:= IncDay (dTesty, 1); + end; + + vtKalendar.Post; + Next; + end; + end; + finally + end; + end; + + + + + procedure Tdm2.VymazRozpis (f: TformPlan); + var i: integer; + d: string; + h: integer; + begin + if not(vtRozpis.Active) then + vtRozpis.Open; + + d:= FormatDateTime ('dd.MM.yyyy', Now); + h:= HourOf(Now); + + vtRozpis.DisableControls; + vtRozpis.First; + while not(vtRozpis.Eof) do + begin + vtRozpis.Edit; + vtRozpis.FieldByName('colID').AsInteger:= 0; + vtRozpis.FieldByName('colIDDavkaAdvPlan').AsInteger:= 0; + vtRozpis.FieldByName('colPrikaz').AsString:= ''; + vtRozpis.FieldByName('colSkupZbo').AsString:= ''; + vtRozpis.FieldByName('colRegCis').AsString:= ''; + vtRozpis.FieldByName('colNazev').AsString:= ''; + vtRozpis.FieldByName('colMnoz').AsInteger:= 0; + vtRozpis.Post; + vtRozpis.Next; + end; + vtRozpis.EnableControls; + vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([d, h]), []); + end; + + + + + + procedure Tdm2.NactiDavkyPlanu (f: TformPlan; idStroj: Integer = 0); + var lSQL: string; + datum, hodiny, radaPrikaz, prikaz, mj, sz, regCis, nazev1, altPrP, nazevOper: string; + prvniDatum, prvniHod: string; + colID, idVPr, idKmen, idVPrOld, casOd, doklPrP, doklPrPOld, jeUdrzba: integer; + cislo, iTemp: integer; + mnoz, kusyCisteVPr, mnozOdv, mnozProZapis, mnozZapsane, ksVKA: extended; + fnd: boolean; + d, d2: TDateTime; + aDavkaVPrOdv: TArray; + + function SumaZapsanehoMnozstviPred (a: TArray; idPrikaz: integer; predCislem: integer=0): extended; + var i, c: integer; + begin + result:= 0; + for i:=0 to Length(a)-1 do + begin + if (a[i].idPrikaz=idPrikaz) then + if (a[i].cislo'') then + d:= StrToDate(f.sgCas.Cells[2,1]); + GenerujRozpis (d, 7); + vtRozpis.EmptyDataSet; + + prvniDatum:= ''; + prvniHod:= ''; + + lSQL:= 'SELECT MIN(da.CasOd) FROM ' + tblAdvKPlanDavky + ' da INNER JOIN ' + tblAdvKPlan + ' kp ON (kp.ID=da.IDAdvKapacPlan) INNER JOIN ' + + tblVPr + ' vp ON (vp.ID=da.IDPrikaz) WHERE kp.Kod=N''99'' AND da.IDStroje=' + idStroj.ToString + ' AND vp.StavPrikazu IN (30,40)'; + if (f.sgCas.Cells[2,1]<>'') then + lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)>=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[2,1].QuotedString + ',104))'; + if (f.sgCas.Cells[3,1]<>'') then + lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)<=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[3,1].QuotedString + ',104))'; + datum:= helUtils.getHeliosDateTimeVal (Helios, 0, lSQL).ToString; + if (datum<>'30.12.1899') then + begin + if (datum.IndexOf(' ')>-1) then + begin + prvniDatum:= LeftStr(datum, datum.IndexOf(' ')); + prvniHod:= MidStr(datum, datum.IndexOf(' ')+1, 255); + if (prvniHod.IndexOf(':')>-1) then + prvniHod:= LeftStr(prvniHod, prvniHod.IndexOf(':')).Trim; + end + else + begin + prvniDatum:= datum; + prvniHod:= '0'; + end; + if (datum.IndexOf(' ')>-1) then + datum:= LeftStr(datum, datum.IndexOf(' ')); + GenerujRozpis (StrToDateTime(datum), 7); + vtRozpis.IndexFieldNames:= 'colDatum;colHodOd'; + vtRozpis.Refresh; + NactiRozpis (f); + vtRozpis.Refresh; + end; + + + lSQL:= 'SELECT da.ID, da.CasOd, da.CasDo, ISNULL(dae._MnozstviKs,0) AS MnozstviKs, vp.RadaPrikaz, vp.Prikaz, vp.ID AS IDPrikaz, k.ID AS IDKmen' + + ', k.SkupZbo, k.RegCis, k.Nazev1, ISNULL(vp.IDPlan,0) AS IDPlan, da.DokladPrPostup, da.AltPrPostup' + + ', CONVERT(int, CASE WHEN vpr.nazev LIKE N''%drb%'' THEN 1 ELSE 0 END) AS JeUdrzba' + + ' FROM ' + tblAdvKPlanDavky + ' da LEFT JOIN ' + tblAdvKPlanDavky_E + + ' dae ON (dae.ID=da.ID) INNER JOIN ' + tblAdvKPlan + ' kp ON (kp.ID=da.IDAdvKapacPlan) INNER JOIN ' + tblVPr + ' vp ON (vp.ID=da.IDPrikaz) INNER JOIN ' + + tblPrikazRada + ' vpr ON (vpr.Rada=vp.Rada) INNER JOIN ' + + tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE kp.Kod=N''99'' AND da.IDStroje=' + idStroj.ToString + ' AND vp.StavPrikazu IN (30,40)'; + if (f.sgCas.Cells[2,1]<>'') then + lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)>=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[2,1].QuotedString + ',104))'; + if (f.sgCas.Cells[3,1]<>'') then + lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)<=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[3,1].QuotedString + ',104))'; + lSQL:= lSQL + ' ORDER BY da.CasOd'; + with Helios.OpenSQL (lSQL) do + begin + First; + while not(EOF) do + begin + colID:= FieldByNameValues('ID'); + datum:= VarToStr(FieldByNameValues('CasOd')); + + idVPr:= VarToStr(FieldByNameValues('IDPrikaz')).ToInteger; + doklPrP:= VarToStr(FieldByNameValues('DokladPrPostup')).ToInteger; + altPrP:= VarToStr(FieldByNameValues('AltPrPostup')); + + lSQL:= 'SELECT TOP(1) nazev FROM ' + tblPrPost + ' WHERE IDPrikaz=' + idVpr.ToString + ' AND Doklad=' + doklPrP.ToString + ' AND Alt=N' + altPrP.QuotedString + + ' AND IDOdchylkyDo IS NULL AND Priorita=0'; + nazevOper:= helUtils.getHeliosStrVal(Helios, '', lSQL); + + + Inc(cislo); + if (idVPr<>idVPrOld) then + begin + cislo:= 1; + idKmen:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString); + mj:= helUtils.getHeliosStrVal (Helios, '', 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + ksVKA:= helUtils.getHeliosFloatVal (Helios, 0, 'SELECT dbo.ef_Kmen_VratPocetKsVKartonu (' + idKmen.ToString + ')'); + + kusyCisteVPr:= helUtils.getHeliosFloatVal (Helios, 0, 'SELECT kusy_ciste FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString); + lSQL:= 'SELECT SUM(kusy_odv+kusy_zmet_opr+kusy_zmet_neopr) FROM ' + tblPMZ + ' WHERE IDPrikaz=' + idVPr.ToString + ' AND DokladPrPostup=' + doklPrP.ToString; + mnozOdv:= helUtils.getHeliosFloatVal (Helios, 0, lSQL); + if (mj.ToUpper='KA') then + begin + kusyCisteVPr:= kusyCisteVPr * ksVKA; + mnozOdv:= mnozOdv * ksVKA; + end; + idVPrOld:= idVPr; + end; + +// idVPrOld:= idVPr; + + +{ + mnoz:= FieldByNameValues('MnzstviKs'); + radaPrikaz:= FieldByNameValues('RadaPrikaz'); + prikaz:= FieldByNameValues('Prikaz'); + regCis:= FieldByNameValues('RegCis'); + nazev1:= FieldByNameValues('Nazev1'); +} + if (datum<>'') then + begin + if (datum.IndexOf(' ')=-1) then + datum:= datum + ' 00:00:00'; + if (datum.IndexOf(' ')>-1) then + begin + hodiny:= MidStr(datum, datum.IndexOf(' ')+1, 255).Trim; + casOd:= LeftStr(hodiny, hodiny.IndexOf(':')).ToInteger; + datum:= LeftStr(datum, datum.IndexOf(' ')); + + mnozProZapis:= VarToStr(FieldByNameValues('MnozstviKs')).ToExtended; + + SetLength (aDavkaVPrOdv, iTemp+1); + aDavkaVPrOdv[iTemp].idPrikaz:= idVPr; + aDavkaVPrOdv[iTemp].cislo:= cislo; + aDavkaVPrOdv[iTemp].idDavka:= colID; + + + fnd:= vtRozpis.Locate ('colIDDavkaAdvPlan', VarArrayOf ([colID]), []); // colID / colDatum / colHodOd + if not(fnd) then + begin + fnd:= vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([datum, casOd]), []); + if (fnd) then + begin + vtRozpis.Edit; + vtRozpis.FieldByName('colID').AsInteger:= colID; + vtRozpis.FieldByName('colIDDavkaAdvPlan').AsInteger:= colID; + vtRozpis.FieldByName('colIdKmen').AsString:= VarToStr (FieldByNameValues('IDKmen')); + vtRozpis.FieldByName('colPrikaz').AsString:= VarToStr (FieldByNameValues('RadaPrikaz')); + vtRozpis.FieldByName('colIdPrikaz').AsString:= VarToStr (FieldByNameValues('IDPrikaz')); + vtRozpis.FieldByName('colSkupZbo').AsString:= VarToStr (FieldByNameValues('SkupZbo')); + vtRozpis.FieldByName('colRegCis').AsString:= VarToStr (FieldByNameValues('RegCis')); + vtRozpis.FieldByName('colNazev').AsString:= VarToStr (FieldByNameValues('Nazev1')); + vtRozpis.FieldByName('colMnoz').AsExtended:= mnozProZapis; + vtRozpis.FieldByName('colIDPlan').AsInteger:= VarToStr (FieldByNameValues('IDPlan')).ToInteger; + + jeUdrzba:= VarToStr(FieldByNameValues('JeUdrzba')).ToInteger; + vtRozpis.FieldByName('colJeUdrzba').AsInteger:= jeUdrzba; + if (jeUdrzba=1) then + vtRozpis.FieldByName('colNazev').AsString:= nazevOper; + + + if (mnozOdv>0) then + begin + mnozZapsane:= SumaZapsanehoMnozstviPred (aDavkaVPrOdv, idVPr, cislo); + mnozOdv:= mnozOdv - mnozZapsane; + if (mnozOdv>mnozProZapis) then + begin + vtRozpis.FieldByName('colMnozHotovo').AsExtended:= mnozProZapis; + aDavkaVPrOdv[iTemp].cislo:= cislo; + aDavkaVPrOdv[iTemp].idPrikaz:= idVPr; + aDavkaVPrOdv[iTemp].mnozZapsane:= mnozProZapis; + end + else + begin + vtRozpis.FieldByName('colMnozHotovo').AsExtended:= mnozOdv; + aDavkaVPrOdv[iTemp].cislo:= cislo; + aDavkaVPrOdv[iTemp].idPrikaz:= idVPr; + aDavkaVPrOdv[iTemp].mnozZapsane:= mnozOdv; + mnozOdv:= 0; + end; + Inc (iTemp); + end; + + vtRozpis.Post; + end; + end; + end; + end; + + Next; + end; + end; + + if (vtRozpis.RecordCount=0) then + NactiRozpis (f, true); + + vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([FormatDateTime ('dd.MM.yyyy', d), HourOf(d)]), []); + + if (prvniDatum<>'') and (prvniHod<>'') then + vtRozpis.Locate('colDatum;colHodOd', VarArrayOf ([prvniDatum, prvniHod]), []); + + end; + + + + + procedure Tdm2.NactiVyrobniTydny (rok: integer); + var i: integer; + d: TDateTime; + den1ledna: byte; + begin + den1ledna:= DayOfWeek(EncodeDate(rok, 1, 1)); + + if not(vtVyrobniTyden.Active) then + vtVyrobniTyden.Open; + for i:=1 to WeeksInAYear(rok) do + begin + vtVyrobniTyden.Append; + vtVyrobniTyden.FieldByName('colRok').AsInteger:= rok; + vtVyrobniTyden.FieldByName('colTyden').AsInteger:= i; + d:= IncDay(StartOfAWeek (rok, i, 1), -1); + vtVyrobniTyden.FieldByName('colDatumOd').AsDateTime:= d; + vtVyrobniTyden.FieldByName('colDatumDo').AsDateTime:= IncDay(d, 6); + vtVyrobniTyden.Post; + end; + end; + + + + + procedure Tdm2.NactiRozpis (f: TformPlan; prazdny: boolean=false); + var lSQL, where, datum: string; + hDo, casOd: integer; + fnd: boolean; + begin + if not(vtRozpis.Active) then + vtRozpis.Open; + +// lSQL:= 'SELECT Datum FROM ' + tblPlanRozpad + ' WHERE Datum>=DATEADD(day, -2, dbo.hf_TruncDate(GETDATE())) ORDER BY Datum'; + where:= ''; + + lSQL:= 'SELECT Datum, CasOd FROM ' + tblPlanRozpad; + if not(prazdny) then + begin + where:= 'Datum>=dbo.hf_TruncDate( ISNULL( (SELECT MIN(d.CasOd) FROM ' + tblAdvKPlanDavky + ' d INNER JOIN ' + tblVPr; + where:= where + ' p ON (p.ID=d.IDPrikaz) WHERE p.StavPrikazu IN (30,40) AND d.IdAdvKapacPlan=' + idAdvKPl.ToString + '), DATEADD(day, -2, dbo.hf_TruncDate(GETDATE()))) )'; + end; + + if (f.sgCas.Cells[2,1]<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'dbo.hf_TruncDate(Datum)>=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[2,1].QuotedString + ',104))'; + if (f.sgCas.Cells[3,1]<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'dbo.hf_TruncDate(Datum)<=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[3,1].QuotedString + ',104))'; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY Datum, CasOd'; + + try + with Helios.OpenSQL (lSQL) do + begin + First; + while not(EOF) do + begin + datum:= VarToStr(FieldByNameValues('Datum')); + if (datum.IndexOf(' ')>-1) then + datum:= LeftStr(datum, datum.IndexOf(' ')); + casOd:= VarToStr(FieldByNameValues('CasOd')).ToInteger; + fnd:= vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([datum, casOd]), []); + if not(fnd) then + begin + vtRozpis.Append; + vtRozpis.FieldByName('colDatum').AsString:= datum; // FormatDateTime('dd.mm.yyyy', FieldByNameValues('Datum')); + vtRozpis.FieldByName('colHodOd').AsInteger:= casOd; // FormatDateTime('h', FieldByNameValues('Datum')); +// hDo:= vtRozpis.FieldByName('colHodOd').AsInteger + 1; + hDo:= casOd + 1; +// if (hDo>=24) then hDo:= 0; + vtRozpis.FieldByName('colHodDo').AsInteger:= hDo; + vtRozpis.Post; + end; + Next; + end; + end; + finally + end; + + end; + + + + + procedure Tdm2.vtKmenCalcFields (DataSet: TDataSet); + var ksVKar, karNaPal: integer; + begin + ksVKar:= 0; + if not (DataSet.FieldByName('colKSvKA').IsNull) then + ksVKar:= DataSet.FieldByName('colKSvKA').AsInteger; + + karNaPal:= 0; + if not (DataSet.FieldByName('colKAnaPAL').IsNull) then + karNaPal:= DataSet.FieldByName('colKAnaPAL').AsInteger; + + DataSet.FieldByName('colKSnaPAL').AsInteger:= ksVKar * karNaPal; + end; + + + + + procedure Tdm2.GenerujRozpis (odData: TDateTime; pocetDnu: integer=14); + var lSQL, d: string; + c: integer; + begin + if (pocetDnu<0) or (pocetDnu>14) then + pocetDnu:= 14; + + if (helUtils.SQLObjectExists (Helios, 'dbo.ef_Vyroba_GenerujRozpadCasu')) + and (helUtils.SQLObjectExists (Helios, tblPlanRozpad)) then + begin +// rozpad na 14 dnu dopredu, po 60 minutach + lSQL:= 'DECLARE @d DATETIME=NULL' + CRLF + 'DROP TABLE IF EXISTS #Tab' + CRLF + 'CREATE TABLE #Tab (Datum DATETIME)' + CRLF + + IfThen(odData>0, 'SET @d = CONVERT(datetime, N' + FormatDateTime ('dd.mm.yyyy', odData).QuotedString + ', 104)', '') + CRLF + + 'INSERT #Tab (Datum) SELECT * FROM dbo.ef_Vyroba_GenerujRozpadCasu (@d, ' + pocetDnu.ToString + ', 60)' + CRLF + + 'SELECT CAST(Datum AS DATETIME) AS Datum FROM #Tab ORDER BY Datum'; + try + with Helios.OpenSQL (lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + d:= VarToStr(FieldByNameValues('Datum')); + if not(d.Contains('00:00')) then + d:= d + ' 00:00:00'; + c:= MidStr(d, d.IndexOf(' ')+1, 20).Length; + if (c=8) then + d:= d.Replace(' ', ' 0'); + lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblPlanRozpad + ' WHERE Datum=CONVERT(datetime, N' + d.QuotedString + ', 104) )' + CRLF + + 'INSERT ' + tblPlanRozpad + ' (Datum) SELECT CONVERT(datetime, N' + d.QuotedString + ', 104)'; + Helios.ExecSQL (lSQL); + Next; + end; + end; + finally + end; + end; + + end; + + + + + procedure Tdm2.PlanPalListyNactiSarzePrikazu (idPrikaz, ksVKA: Integer; var externiZak: string); + var lSQL: string; + idVC: integer; + + begin + if not(vtPlanPL.Active) then + vtPlanPL.Open; + vtPlanPL.EmptyDataSet; + + lSQL:= 'SELECT ID, VyrCislo, Popis, DatExpirace, Mnozstvi FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' ORDER BY VyrCislo'; + try + with Helios.OpenSQL (lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + vtPlanPL.Append; + vtPlanPL.FieldByName('idPrikaz').AsInteger:= idPrikaz; + idVC:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtPlanPL.FieldByName('IDVCPrikaz').AsInteger:= idVC; + vtPlanPL.FieldByName('CisloPL').AsString:= VarToStr(FieldByNameValues('VyrCislo')); + vtPlanPL.FieldByName('KAnaPal').AsInteger:= VarToStr(FieldByNameValues('Mnozstvi')).ToInteger; + vtPlanPL.FieldByName('kusu').AsInteger:= vtPlanPL.FieldByName('KAnaPal').AsInteger * ksVKA; + vtPlanPL.FieldByName('DatExpirace').AsString:= VarToStr(FieldByNameValues('DatExpirace')); + externiZak:= VarToStr(FieldByNameValues('Popis')); + + with Helios.OpenSQL('SELECT DatZahajeni FROM ' + tblPalety + ' WHERE IDVyrCisPrikaz=' + idVC.ToString) do + if (RecordCount=1) then + begin + vtPlanPL.FieldByName('DatVyrobaZadano').AsString:= VarToStr(FieldByNameValues('DatZahajeni')); + end; + + vtPlanPL.Post; + Next; + end; + end; + finally + + end; + + end; + + +end. diff --git a/_plgPlan/ep_Vyroba_AdvPlan_ArchivujDavky.sql b/_plgPlan/ep_Vyroba_AdvPlan_ArchivujDavky.sql new file mode 100644 index 0000000..d150f9f --- /dev/null +++ b/_plgPlan/ep_Vyroba_AdvPlan_ArchivujDavky.sql @@ -0,0 +1,10 @@ +-- dbo.ep_Vyroba_AdvPlan_ArchivujDavky +CREATE PROCEDURE dbo.ep_Vyroba_AdvPlan_ArchivujDavky + @IDAdvKapacPlan INT=NULL +AS + +SET NOCOUNT ON + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro planovani + diff --git a/_plgPlan/ep_Vyroba_AdvPlan_ZapisDavkyPrikazu.sql b/_plgPlan/ep_Vyroba_AdvPlan_ZapisDavkyPrikazu.sql new file mode 100644 index 0000000..c7f3944 --- /dev/null +++ b/_plgPlan/ep_Vyroba_AdvPlan_ZapisDavkyPrikazu.sql @@ -0,0 +1,556 @@ +-- dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu +CREATE PROCEDURE dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu + @datumStart DATETIME=NULL, + @casOd TINYINT=NULL +AS + +SET NOCOUNT ON + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro planovani + +IF OBJECT_ID('tempdb..#TabPrikazyProKapacPlan', 'U') IS NULL + RETURN + +DECLARE + @errMsg NVARCHAR(500), + @tranPred INT, + @majorSqlVer TINYINT, + @jeSql2022 BIT=0, + @cnt INT, + @canCont BIT=0, + @sql NVARCHAR(max), + @debugXml XML +DECLARE + @idSadaDavek INT, + @idVPr INT, + @pocetVlastOper INT, + @dokl INT, + @alt NCHAR(1), + @dilec INT, + @mjEvid NVARCHAR(10), + @kodZakazModif NVARCHAR(20), + @idZakazModif INT, + @idStroj INT=NULL, + @idKalendarStroje INT, + @cntOpProZapis INT, + @doklProZapis INT, + @altProZapis NCHAR(1), + @ksZaHod NUMERIC(19,6), + @kaZaHod NUMERIC(19,6), + @kusyZad NUMERIC(19,6), + @mnozKs NUMERIC(19,6), + @mnozKa NUMERIC(19,6), + @mnozKsVKA NUMERIC(19,6), + @mnozKAnaPal NUMERIC(19,6), + @mnoz NUMERIC(19,6), + @pocetDavek INT, + @cisloDavky INT, + @locId INT, + @planStartPrikaz DATETIME, + @planKonecPrikaz DATETIME, + @secCnt INT, + @planStart DATETIME, + @prepoctiPlanStart BIT, + @planStartEnd DATETIME, + @planKonec DATETIME, + @ksZbytek NUMERIC(19,6), + @cas DATETIME, + @jeTesto BIT=0 +DECLARE + @idAdvKPl INT, + @idDavky INT, + @idVypoctu INT, + @idPrac INT, + @podm NVARCHAR(80), + @idDavkyOld INT, + @startOdOld DATETIME, + @poradCislo INT +DECLARE + @jeUdrzba BIT, + @pocetHodUdrzba NUMERIC(19,6), + @idPrPUdrzba INT -- TabPrPostup.ID z prikazu udrzby + +DECLARE @davky TABLE (ID INT NOT NULL, CasOd DATETIME, CasDo DATETIME, Zamek BIT DEFAULT 0, PoradoveCislo INT) + + + +BEGIN TRY +SET @tranPred = @@TRANCOUNT +IF (@tranPred=0) + BEGIN TRAN + + +-- cisteni SQL seedu +SET @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabAdvKPVypocty), 1) +DBCC CHECKIDENT(TabAdvKPVypocty, RESEED, @cnt) +SET @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabAdvKPDavky), 1) +DBCC CHECKIDENT(TabAdvKPDavky, RESEED, @cnt) + + + +SET @majorSqlVer = CONVERT(tinyint, SERVERPROPERTY('ProductMajorVersion')) +SET @jeSql2022 = CONVERT(bit, IIF(@majorSqlVer>=16, 1, 0)) + + +SELECT @idAdvKPl=ID FROM dbo.TabAdvKapacPlan WHERE Kod=N'99' +SET @idVypoctu=(SELECT TOP(1) ID FROM dbo.TabAdvKPVypocty WHERE IDAdvKapacPlan=@idAdvKPl ORDER BY CisloVypoctu DESC) +IF (@idVypoctu IS NULL) + BEGIN + INSERT dbo.TabAdvKPVypocty (IDAdvKapacPlan, CisloVypoctu, Akce, IDLastMzdy) VALUES (@idAdvKPl, 1, 3, 0) + SET @idVypoctu = SCOPE_IDENTITY() + END + +SET @casOd = ISNULL(@casOd, 0) + + + +SET @idSadaDavek = 1 + ISNULL( (SELECT MAX(_VazbaPlgPlan) FROM dbo.TabAdvKPDavky_EXT WHERE _VazbaPlgPlan IS NOT NULL), 0) + + +DECLARE c CURSOR LOCAL FOR + SELECT ID, JeUdrzba, PocetHodin, IDPrPostup FROM #TabPrikazyProKapacPlan +OPEN c +WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idVPr, @jeUdrzba, @pocetHodUdrzba, @idPrPUdrzba + IF (@@FETCH_STATUS<>0) BREAK + + IF (@jeUdrzba=1) + BEGIN + SET @idPrPUdrzba = ISNULL(@idPrPUdrzba, 0) + SET @pocetHodUdrzba = ISNULL(@pocetHodUdrzba, 0) + IF (@idPrPUdrzba>0) AND (@pocetHodUdrzba>0) + BEGIN + IF (@datumStart IS NOT NULL) + SET @planStart = DATEADD(hour, @casOd, dbo.hf_TruncDate(@datumStart)) + ELSE + SET @planStart = DATEADD(hour, @casOd, dbo.hf_TruncDate(GETDATE())) + + SELECT @idVPr=IDPrikaz, @doklProZapis=Doklad, @altProZapis=Alt, @idPrac=pracoviste, @idStroj=IDStroje + FROM dbo.TabPrPostup WHERE ID=@idPrPUdrzba AND IDOdchylkyDo IS NULL + SELECT @dilec=IdTabKmen, @idZakazModif=IdZakazModif, @kusyZad=Kusy_zad + FROM dbo.TabPrikaz WHERE ID=@idVPr + SET @idKalendarStroje = (SELECT IDPlanKalend FROM dbo.TabCisStroju WHERE ID=@idStroj) + + SET @pocetDavek = @pocetHodUdrzba + SET @cisloDavky = 1 + + -- pokud neni nektera davka daneho prikazu uzamcena, smaz je vsechny + -- jinak nastav aby se planovani toho prikazu pri privnim pruchodu WHILE ukoncilo +/* + IF NOT EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDPrikaz=@idVPr AND IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1) + DELETE FROM dbo.TabAdvKPDavky WHERE IDPrikaz=@idVPr AND IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj + ELSE + SET @cisloDavky=@pocetDavek +*/ + WHILE (1=1) + BEGIN + IF (@cisloDavky>@pocetDavek) BREAK + + DELETE FROM @davky + IF EXISTS (SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND CasOd>=@planStart AND Zamek=0) + BEGIN + ;WITH d AS ( + SELECT ROW_NUMBER() OVER (ORDER BY CasOd) AS AutoInc, + ID, CasOd, CasDo, Zamek + FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND CasOd>=@planStart AND Zamek=0 + ) + INSERT @davky (ID, CasOd, CasDo, Zamek, PoradoveCislo) + SELECT ID, CasOd, CasDo, Zamek, AutoInc FROM d; + END + SET @debugXml = (SELECT * FROM @davky FOR XML AUTO) + + -- begin: test data/casu zahajeni na kalendar stroje + IF (@idKalendarStroje IS NULL) -- pokud kalendar nemam, per to tam + BEGIN + SET @cnt = 0 + WHILE EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @planStart BETWEEN CasOd AND CasDo) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @planStart = DATEADD(hour, 1, @planStart) + SET @cnt = @cnt + 1 + END + SET @planStartEnd = DATEADD(second, -1, DATEADD(hour, 1, @planStart)) + END + ELSE + BEGIN -- pokud kalendar mam, zkontroluj jestli neni na dany datum/cas vyjimka + SET @cnt = 0 + WHILE (EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @planStart BETWEEN CasOd AND CasDo) + OR EXISTS(SELECT 1 FROM dbo.TabPlanKalendPol WHERE IDStroje=@idStroj AND @planStart BETWEEN CasOd AND CasDo) + ) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @planStart = DATEADD(hour, 1, @planStart) + SET @cnt = @cnt + 1 + END + SET @planStartEnd = DATEADD(second, -1, DATEADD(hour, 1, @planStart)) + END + -- end: test data/casu zahajeni na kalendar stroje + + + IF OBJECT_ID('dbo.ep_Vyroba_AdvPlan_ArchivujDavky', 'P') IS NOT NULL + EXEC dbo.ep_Vyroba_AdvPlan_ArchivujDavky @IDAdvKapacPlan=@idAdvKPl + + SET @podm = N'IdAdvKapacPlan=' + CONVERT(nvarchar, @idAdvKPl) + EXEC @locId=dbo.hp_NajdiPrvniVolny @Tabulka=N'TabAdvKPDavky', @Atribut=N'LocalID', @Where=@podm, @Odkud=1, @Kam=999999999, @Returnem=1 + + SET @mnoz = 0 + INSERT dbo.TabAdvKPDavky (IDAdvKapacPlan, LocalID, IDVypoctu, ZpusobVznikuDavkyKP, DatumPripadu, IDPrikaz, Dilec, DokladPrPostup, AltPrPostup, + IDPrac, IDStroje, CasOd, CasDo, Mnozstvi, PrepravniCas, MeziOperCas, DeadTime, BlokaceZdroje, ProcSplneni, Mnozstvi_Zive) + SELECT @idAdvKPl, @locId, @idVypoctu, 0, @planStart, @idVPr, @dilec, @doklProZapis, @altProZapis, @idPrac, @idStroj, @planStart, @planStartEnd, + @mnoz, 0, 0, 0, 1, 0, @mnoz + SET @idDavky = SCOPE_IDENTITY() + IF (@idDavky IS NOT NULL) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabAdvKPDavky_EXT WHERE ID=@idDavky) + INSERT dbo.TabAdvKPDavky_EXT (ID) VALUES (@idDavky) + UPDATE dbo.TabAdvKPDavky_EXT SET _VazbaPlgPlan=@idSadaDavek WHERE ID=@idDavky + END + + + -- begin: posun nasledujicich davek + DECLARE dav CURSOR LOCAL FOR + SELECT ID, CasOd, PoradoveCislo + FROM @davky + OPEN dav + WHILE (1=1) + BEGIN + FETCH NEXT FROM dav INTO @idDavkyOld, @startOdOld, @poradCislo + IF (@@FETCH_STATUS<>0) BREAK + + IF (@poradCislo=1) + SET @startOdOld = DATEADD(hour, 1, @planStart) + ELSE + SET @startOdOld = DATEADD(hour, 1, (SELECT CasOd FROM @davky WHERE PoradoveCislo=@poradCislo-1)) + + IF (@idKalendarStroje IS NULL) + BEGIN + SET @cnt = 0 + WHILE EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @startOdOld BETWEEN CasOd AND CasDo) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @startOdOld = DATEADD(hour, 1, @startOdOld) + SET @cnt = @cnt + 1 + END + END + ELSE + BEGIN + SET @cnt = 0 + WHILE (EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @startOdOld BETWEEN CasOd AND CasDo) + OR EXISTS(SELECT 1 FROM dbo.TabPlanKalendPol WHERE IDStroje=@idStroj AND @planStart BETWEEN CasOd AND CasDo) + ) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @startOdOld = DATEADD(hour, 1, @startOdOld) + SET @cnt = @cnt + 1 + END + END + UPDATE @davky SET CasOd=@startOdOld, CasDo=DATEADD(second, -1, DATEADD(hour, 1, @startOdOld)) WHERE PoradoveCislo=@poradCislo + UPDATE dbo.TabAdvKPDavky SET CasOd=@startOdOld, CasDo=DATEADD(second, -1, DATEADD(hour, 1, @startOdOld)) WHERE ID=@idDavkyOld + END + CLOSE dav + DEALLOCATE dav + -- end: posun nasledujicich davek + + SET @cisloDavky = @cisloDavky + 1 + END + + END -- @idPrPUdrzba>0 + END + ELSE + BEGIN -- @jeUdrzba=0 + SET @pocetVlastOper = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND priorita=0 AND typ<2), 0) + SELECT @dilec=IdTabKmen, @idZakazModif=IdZakazModif, @kusyZad=Kusy_zad, @planStart=Plan_zadani, @planKonec=Plan_Ukonceni + FROM dbo.TabPrikaz WHERE ID=@idVPr + SET @planStartPrikaz = @planStart + SET @planKonecPrikaz = @planKonec + + IF (@planStartPrikaz0) AND (@doklProZapis IS NOT NULL) + BEGIN + SET @kaZaHod=0 + IF (@mjEvid=N'ka') + SET @kaZaHod = ROUND(@ksZaHod/@mnozKsVKA, 2) + + + -- SET @planStart=NULL + IF (COL_LENGTH('dbo.TabPrikaz_EXT', '_PlanZahajeni') IS NOT NULL) + SET @planStart=(SELECT _PlanZahajeni FROM dbo.TabPrikaz_EXT WHERE ID=@idVPr) + IF (@planStart IS NULL) + BEGIN + /* + IF (@jeSql2022=1) + SET @planStart=DATEADD(hour, 1, DATETRUNC(hour,GETDATE())) + ELSE + */ + SET @planStart=DATEADD(hour, 1, CONVERT(datetime, FORMAT(@planStartPrikaz, 'dd.MM.yyyy HH', 'de-de') + N':00:00', 104)) + SET @prepoctiPlanStart=1 + END + + SET @prepoctiPlanStart=0 + + IF (@datumStart IS NOT NULL) + SET @planStart = DATEADD(hour, @casOd, dbo.hf_TruncDate(@datumStart)) + + -- SET @planKonec=NULL + IF (COL_LENGTH('dbo.TabPrikaz_EXT', '_PlanUkonceni') IS NOT NULL) + SET @planKonec=(SELECT _PlanUkonceni FROM dbo.TabPrikaz_EXT WHERE ID=@idVPr) + IF (@planKonec IS NULL) + SET @planKonec=DATEADD(minute, 60.0 * ROUND(@mnozKs/@ksZaHod,2), @planStart) + + IF (@prepoctiPlanStart=1) + /* + BEGIN + IF (@jeSql2022=1) + SET @planKonec=DATEADD(second, -1, DATEADD(hour, 1, DATETRUNC(hour,@planKonec))) + ELSE + */ + -- SET @planStart=DATEADD(hour, 1, CEILING(DATEDIFF(hour, 0, @planKonec)/60.0)*60) + SET @planStart=DATEADD(hour, 1, CONVERT(datetime, FORMAT(@planKonec, 'dd.MM.yyyy HH', 'de-de') + N':00:00', 104)) + -- END + + + SET @pocetDavek = CEILING(@mnozKs/@ksZaHod) + IF (@pocetDavek>0) + BEGIN + SET @cisloDavky = 1 + + -- pokud neni nektera davka daneho prikazu uzamcena, smaz je vsechny + -- jinak nastav aby se planovani toho prikazu pri privnim pruchodu WHILE ukoncilo + IF NOT EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDPrikaz=@idVPr AND IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1) + DELETE FROM dbo.TabAdvKPDavky WHERE IDPrikaz=@idVPr AND IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj + ELSE + SET @cisloDavky=@pocetDavek + + WHILE (1=1) + BEGIN + IF (@cisloDavky>@pocetDavek) BREAK + + DELETE FROM @davky + IF EXISTS (SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND CasOd>=@planStart AND Zamek=0) + BEGIN + ;WITH d AS ( + SELECT ROW_NUMBER() OVER (ORDER BY CasOd) AS AutoInc, + ID, CasOd, CasDo, Zamek + FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND CasOd>=@planStart AND Zamek=0 + ) + INSERT @davky (ID, CasOd, CasDo, Zamek, PoradoveCislo) + SELECT ID, CasOd, CasDo, Zamek, AutoInc FROM d; + END + SET @debugXml = (SELECT * FROM @davky FOR XML AUTO) + + -- begin: test data/casu zahajeni na kalendar stroje + IF (@idKalendarStroje IS NULL) -- pokud kalendar nemam, per to tam + BEGIN + SET @cnt = 0 + WHILE EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @planStart BETWEEN CasOd AND CasDo) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @planStart = DATEADD(hour, 1, @planStart) + SET @cnt = @cnt + 1 + END + SET @planStartEnd = DATEADD(second, -1, DATEADD(hour, 1, @planStart)) + END + ELSE + BEGIN -- pokud kalendar mam, zkontroluj jestli neni na dany datum/cas vyjimka + SET @cnt = 0 + WHILE (EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @planStart BETWEEN CasOd AND CasDo) + OR EXISTS(SELECT 1 FROM dbo.TabPlanKalendPol WHERE IDStroje=@idStroj AND @planStart BETWEEN CasOd AND CasDo) + ) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @planStart = DATEADD(hour, 1, @planStart) + SET @cnt = @cnt + 1 + END + SET @planStartEnd = DATEADD(second, -1, DATEADD(hour, 1, @planStart)) + END + -- end: test data/casu zahajeni na kalendar stroje + + + IF (@cisloDavky=@pocetDavek) + BEGIN + SET @ksZaHod = @mnozKs - ( @ksZaHod * (@cisloDavky-1)) + SET @kaZaHod = ROUND(@ksZaHod/@mnozKsVKA, 2) + END + + SET @mnoz = CASE @mjEvid WHEN N'ka' THEN @kaZaHod WHEN N'ks' THEN @ksZaHod END + + IF OBJECT_ID('dbo.ep_Vyroba_AdvPlan_ArchivujDavky', 'P') IS NOT NULL + EXEC dbo.ep_Vyroba_AdvPlan_ArchivujDavky @IDAdvKapacPlan=@idAdvKPl + + SET @podm = N'IdAdvKapacPlan=' + CONVERT(nvarchar, @idAdvKPl) + EXEC @locId=dbo.hp_NajdiPrvniVolny @Tabulka=N'TabAdvKPDavky', @Atribut=N'LocalID', @Where=@podm, @Odkud=1, @Kam=999999999, @Returnem=1 + + INSERT dbo.TabAdvKPDavky (IDAdvKapacPlan, LocalID, IDVypoctu, ZpusobVznikuDavkyKP, DatumPripadu, IDPrikaz, Dilec, DokladPrPostup, AltPrPostup, + IDPrac, IDStroje, CasOd, CasDo, Mnozstvi, PrepravniCas, MeziOperCas, DeadTime, BlokaceZdroje, ProcSplneni, Mnozstvi_Zive) + SELECT @idAdvKPl, @locId, @idVypoctu, 0, @planStart, @idVPr, @dilec, @doklProZapis, @altProZapis, @idPrac, @idStroj, @planStart, @planStartEnd, + @mnoz, 0, 0, 0, 1, 0, @mnoz + SET @idDavky = SCOPE_IDENTITY() + IF (@idDavky IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky_EXT WHERE ID=@idDavky) + INSERT dbo.TabAdvKPDavky_EXT (ID) VALUES (@idDavky) + UPDATE dbo.TabAdvKPDavky_EXT SET _VazbaPlgPlan=@idSadaDavek WHERE ID=@idDavky + END + + IF NOT EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky_EXT WHERE ID=@idDavky) + INSERT dbo.TabAdvKPDavky_EXT (ID) VALUES (@idDavky) + UPDATE dbo.TabAdvKPDavky_EXT SET _MnozstviKs=CASE @mjEvid WHEN N'ka' THEN @ksZaHod WHEN N'ks' THEN @ksZaHod ELSE NULL END WHERE ID=@idDavky + + -- begin: posun nasledujicich davek + DECLARE dav CURSOR LOCAL FOR + SELECT ID, CasOd, PoradoveCislo + FROM @davky + OPEN dav + WHILE (1=1) + BEGIN + FETCH NEXT FROM dav INTO @idDavkyOld, @startOdOld, @poradCislo + IF (@@FETCH_STATUS<>0) BREAK + + IF (@poradCislo=1) + SET @startOdOld = DATEADD(hour, 1, @planStart) + ELSE + SET @startOdOld = DATEADD(hour, 1, (SELECT CasOd FROM @davky WHERE PoradoveCislo=@poradCislo-1)) + + IF (@idKalendarStroje IS NULL) + BEGIN + SET @cnt = 0 + WHILE EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @startOdOld BETWEEN CasOd AND CasDo) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @startOdOld = DATEADD(hour, 1, @startOdOld) + SET @cnt = @cnt + 1 + END + END + ELSE + BEGIN + SET @cnt = 0 + WHILE (EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKPl AND IDStroje=@idStroj AND Zamek=1 AND @startOdOld BETWEEN CasOd AND CasDo) + OR EXISTS(SELECT 1 FROM dbo.TabPlanKalendPol WHERE IDStroje=@idStroj AND @planStart BETWEEN CasOd AND CasDo) + ) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @startOdOld = DATEADD(hour, 1, @startOdOld) + SET @cnt = @cnt + 1 + END + END + UPDATE @davky SET CasOd=@startOdOld, CasDo=DATEADD(second, -1, DATEADD(hour, 1, @startOdOld)) WHERE PoradoveCislo=@poradCislo + UPDATE dbo.TabAdvKPDavky SET CasOd=@startOdOld, CasDo=DATEADD(second, -1, DATEADD(hour, 1, @startOdOld)) WHERE ID=@idDavkyOld + END + CLOSE dav + DEALLOCATE dav + -- end: posun nasledujicich davek + + + SET @planStart = DATEADD(hour, 1, @planStart) + SET @cisloDavky = @cisloDavky + 1 + END + END + END -- @ksZaHod<>0 + END -- @jeUdrzba=0 + + END +CLOSE c +DEALLOCATE c + + + +IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + +END TRY +BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_MESSAGE() +END CATCH + diff --git a/_plgPlan/ep_Vyroba_ZapisDoPlanu.sql b/_plgPlan/ep_Vyroba_ZapisDoPlanu.sql new file mode 100644 index 0000000..0580805 --- /dev/null +++ b/_plgPlan/ep_Vyroba_ZapisDoPlanu.sql @@ -0,0 +1,133 @@ +-- dbo.ep_Vyroba_ZapisDoPlanu +CREATE PROCEDURE dbo.ep_Vyroba_ZapisDoPlanu + @dilec INT=NULL, + @idZakazModif INT=NULL, + @datum NVARCHAR(15)=N'', + @hodinaOd TINYINT=0, + @pocetKs NUMERIC(19,6)=0.0, + @pocetKA NUMERIC(19,6)=0.0, + @pocetPal NUMERIC(19,6)=0.0, + @datumPlanKonec DATETIME=NULL OUT, + @errMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro planovani + +SET NOCOUNT ON + +DECLARE + @idPlan INT, + @datumPlanStart DATETIME, + @planHodin NUMERIC(19,6), + @radaPlanu NVARCHAR(10), + @mjEvid NVARCHAR(10), + @mnoz NUMERIC(19,6), + @mnozKs NUMERIC(19,6) + +DECLARE + @kodZakazModif NVARCHAR(20), + @idStroj INT, + @ksZaHod NUMERIC(19,6), + @ksVKA NUMERIC(19,6) + + + +IF (@dilec IS NULL) + RETURN + +SET @pocetKs = ISNULL(@pocetKs, 0) +SET @pocetKA = ISNULL(@pocetKA, 0) +SET @pocetPal = ISNULL(@pocetPal, 0) + +IF (@pocetKs=0) AND (@pocetKA=0) AND (@pocetPal=0) + RETURN + +BEGIN TRY + SET @datum = TRIM(ISNULL(@datum, N'')) + SET @hodinaOd = ISNULL(@hodinaOd, 0) + IF (@datum=N'') + SET @datumPlanStart = GETDATE() + ELSE + SET @datumPlanStart = ISNULL( TRY_CONVERT(DATETIME, @datum), GETDATE()) + SET @datumPlanStart = DATEADD(hour, @hodinaOd, dbo.hf_TruncDate(@datumPlanStart) ) +END TRY +BEGIN CATCH + SET @datumPlanStart = DATEADD(hour, @hodinaOd, dbo.hf_TruncDate(GETDATE()) ) +END CATCH + + +SET @idStroj = NULL +SET @ksZaHod = 0 +SET @kodZakazModif = (SELECT Kod FROM dbo.TabZakazModif WHERE ID=@idZakazModif) +IF (@kodZakazModif IS NOT NULL) + BEGIN + SET @idStroj = (SELECT ID FROM dbo.TabCisStroju WHERE Kod=LEFT(@kodZakazModif,10) AND Blokovano=0) + IF (@idStroj IS NOT NULL) + SET @ksZaHod = ISNULL( (SELECT _KapacitaKsZaHod FROM dbo.TabCisStroju_EXT WHERE ID=@idStroj), 0) + END + + + +SET @mnoz = 0 +SET @mnozKs = 0 +SET @ksVKA = 0 + +IF (@pocetKs>0) + SET @mnozKs = @pocetKs + +SELECT @mjEvid=MJEvidence FROM dbo.TabKmenZbozi WHERE ID=@dilec +IF (@mjEvid=N'KA') + BEGIN + SET @ksVKA = ISNULL( (SELECT PocetOdvozene FROM dbo.TabMJZbozi WHERE IDKmenZbozi=@dilec AND LOWER(KodMJ1)=N'KA' AND LOWER(KodMJ2)=N'ks'), 1) + IF (@pocetKA>0) + BEGIN + SET @mnoz = @pocetKA + SET @mnozKs = @mnoz * @ksVKA + END + END + +IF (@mnoz=0) + BEGIN + IF (@pocetKs>0) AND (@mjEvid=N'KA') + SET @mnoz = CEILING(@pocetKs / @ksVKA) + IF (@pocetPal>0) AND (@mjEvid=N'KA') + BEGIN + SET @mnoz = CEILING(@pocetPal * ISNULL( (SELECT PocetHlavni FROM dbo.TabMJZbozi WHERE IDKmenZbozi=@dilec AND LOWER(KodMJ1)=N'ka' AND LOWER(KodMJ2)=N'pal'), 0)) + SET @mnozKs = @mnoz * @ksVKA + END + END -- mnoz=0, najdi prepocet ks a pal + + +IF (@datumPlanKonec IS NULL) + BEGIN + SET @planHodin = 0 + IF (@ksZaHod<>0) + SET @planHodin = ROUND(@mnozKs/@ksZaHod, 2) + IF (@planHodin=0) + EXEC dbo.hp_GetPlanovanyTerminDokonceniVyroby @IDFinal=@dilec, @IDZakazModif=@idZakazModif, @Mnozstvi=@mnoz, + @DatumZahajeni=@datumPlanStart, @DatumUkonceni=@datumPlanKonec OUT + ELSE + SET @datumPlanKonec=DATEADD(minute, @planHodin*60.0, @datumPlanStart) + END + + +SET @radaPlanu=(SELECT ISNULL(pkz.RadaVyrPlanu,sz.ParD_RadaVyrPlanu) FROM dbo.TabKmenZbozi k + INNER JOIN dbo.TabParKmZ pkz ON (pkz.IDKmenZbozi=k.ID) + INNER JOIN dbo.TabSkupinyZbozi sz ON (sz.SkupZbo=k.SkupZbo) + WHERE k.ID=@dilec) + +SET @idPlan=0 +IF (@radaPlanu IS NOT NULL) AND (@mnoz>0) + BEGIN + BEGIN TRY + EXEC @idPlan=dbo.hp_NewVyrobniPlan @Rada=@radaPlanu, @IDDilce=@dilec, @IDZakazModif=@idZakazModif, @mnozstvi=@mnoz, @PlanUkonceni=@datumPlanKonec + END TRY + BEGIN CATCH + SET @errMsg=ERROR_MESSAGE() + SET @idPlan=0 + END CATCH + END + +RETURN @idPlan + diff --git a/_plgPlan/ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu.sql b/_plgPlan/ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu.sql new file mode 100644 index 0000000..a2d6dd0 --- /dev/null +++ b/_plgPlan/ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu.sql @@ -0,0 +1,198 @@ +-- dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu +CREATE PROCEDURE dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu + @idAdvKP INT=NULL, + @idVPrFin INT=NULL, + @idStroj INT=NULL, + @jeUdrzba BIT=0, + @idSadaDavek INT=NULL, + @errorMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro planovani + +SET NOCOUNT ON + +IF (@idAdvKP IS NULL) + BEGIN + SET @errorMsg = N'Neni speficikovan kapacitni plan' + RETURN + END +IF (@idStroj IS NULL) + BEGIN + SET @errorMsg = N'Neni specifikovan stroj' + RETURN + END + + +DECLARE + @tranPred INT, + @cnt INT, + @iTemp INT, + @xml XML, + @retVal INT, + @idVPr INT, + @idPlan INT, + @minCasDo DATETIME=NULL, + @maxCasDo DATETIME=NULL, + @idDavka INT, + @casOd DATETIME, + @casOdNew DATETIME, + @casDo DATETIME, + @idKalendarStroje INT + + +DECLARE @davkyZa TABLE (ID INT, IDPrikaz INT, Mnozstvi NUMERIC(19,6), CasOd DATETIME, CasDo DATETIME) +DECLARE @sadaDavek TABLE (ID INT NOT NULL) + +SET @idKalendarStroje = (SELECT IDPlanKalend FROM dbo.TabCisStroju WHERE ID=@idStroj) +SET @maxCasDo = CONVERT(datetime, N'1.1.2020', 104) +SET @maxCasDo = @minCasDo -- CONVERT(datetime, N'1.1.2020', 104) + + + +DELETE FROM @sadaDavek +IF (@idSadaDavek IS NOT NULL) + INSERT @sadaDavek (ID) SELECT ID FROM dbo.TabAdvKPDavky_EXT WHERE _VazbaPlgPlan=@idSadaDavek + + + +BEGIN TRY + +SET @tranPred=@@TRANCOUNT +IF( @tranPred=0) + BEGIN TRAN + +DECLARE vp CURSOR LOCAL FOR + SELECT ID, IDPlan + FROM dbo.TabPrikaz + WHERE IDPrikazRidici=@idVPrFin + AND StavPrikazu<40 + ORDER BY UrovenVnoreni DESC +OPEN vp +WHILE (1=1) + BEGIN + FETCH NEXT FROM vp INTO @idVPr, @idPlan + IF (@@FETCH_STATUS<>0) BREAK + + + IF EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE Zamek=1 AND IDAdvKapacPlan=@idAdvKP AND IDPrikaz=@idVPr AND IDStroje=@idStroj) + CONTINUE + + IF EXISTS(SELECT ID FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDPrikaz=@idVPr AND IDStroje=@idStroj AND CasDo>@maxCasDo) + SET @maxCasDo = (SELECT MAX(CasDo) FROM dbo.TabAdvKPDavky WHERE Zamek=0 AND IDAdvKapacPlan=@idAdvKP AND IDPrikaz=@idVPr AND IDStroje=@idStroj AND CasDo>@maxCasDo) + +-- zkontroluje zda je neco z prikazu uz odvedeno a pripadne smaze vsechny vazby (kusovnik, operace, VC, naradi, OPN, davky advKP, kalk/plan naklady...) + EXEC @retVal = dbo.hp_TabPrikaz_TriggerBeforeDelete @ID=@idVPr, @PouzeTestPredZrusenimStavuZadano=0 + IF (@@ERROR=0) AND (@retVal=0) + DELETE FROM dbo.TabPrikaz WHERE ID=@idVPr +-- EXEC @retVal=dbo.hp_TabPlan_TriggerBeforeDelete @ID=@idPlan +-- IF (@@ERROR=0) AND (@retVal=0) +-- IF NOT EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE IDPlan=@idPlan) +-- DELETE FROM dbo.TabPlan WHERE ID=@idPlan + END +CLOSE vp +DEALLOCATE vp + + + +SET @minCasDo = DATEADD(hour, 1, DATEADD(hour, DATEDIFF(hour, 0, @minCasDo), 0)) +-- SET @maxCasDo = @minCasDo -- CONVERT(datetime, N'1.1.2020', 104) +IF EXISTS (SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDStroje=@idStroj AND CasDo<@maxCasDo) + BEGIN + SELECT @minCasDo=MAX(CasDo) FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDStroje=@idStroj AND CasDo<@maxCasDo + SET @casOdNew = DATEADD(second, 1, @minCasDo) + END + +IF EXISTS (SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDPrikaz=@idVPrFin AND IDStroje=@idStroj AND CasDo>@maxCasDo) + SET @maxCasDo = (SELECT MAX(CasDo) FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDPrikaz=@idVPrFin AND IDStroje=@idStroj AND CasDo>@maxCasDo) + + + + + +SELECT @idPlan=IDPlan FROM dbo.TabPrikaz WHERE ID=@idVPrFin +-- zkontroluje zda je neco z prikazu uz odvedeno a pripadne smaze vsechny vazby (kusovnik, operace, VC, naradi, OPN, davky advKP, kalk/plan naklady...) +EXEC @retVal = dbo.hp_TabPrikaz_TriggerBeforeDelete @ID=@idVPrFin, @PouzeTestPredZrusenimStavuZadano=0 +DELETE FROM dbo.TabPrikaz WHERE ID=@idVPrFin +EXEC @retVal=dbo.hp_TabPlan_TriggerBeforeDelete @ID=@idPlan +IF (@@ERROR=0) AND (@retVal=0) + DELETE FROM dbo.TabPlan WHERE ID=@idPlan + + + +-- nasledujici neblokovane davky +INSERT @davkyZa (ID, CasOd, CasDo) + SELECT ID, CasOd, CasDo FROM dbo.TabAdvKPDavky WHERE Zamek=0 AND IDAdvKapacPlan=@idAdvKP AND IDStroje=@idStroj AND CasOd>@maxCasDo +SET @xml=(SELECT * FROM @davkyZa FOR XML AUTO) + +-- presun je dopredu, na konec predchozi prace na tom samem stroji, pokud ma stroj kalendar, koukej i na nej +DECLARE dav CURSOR LOCAL FOR + SELECT ID, CasOd, CasDo + FROM @davkyZa + ORDER BY CasOd +OPEN dav +WHILE (1=1) + BEGIN + FETCH NEXT FROM dav INTO @idDavka, @casOd, @casDo + IF (@@FETCH_STATUS<>0) BREAK + + SET @casOd = @casOdNew +-- begin: test data/casu zahajeni na kalendar stroje + IF (@idKalendarStroje IS NULL) -- pokud kalendar nemam, per to tam + BEGIN + SET @cnt = 0 + WHILE EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDStroje=@idStroj AND Zamek=1 AND @casOd BETWEEN CasOd AND CasDo) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @casOd = DATEADD(hour, 1, @casOd) + SET @cnt = @cnt + 1 + END + SET @casDo = DATEADD(second, -1, DATEADD(hour, 1, @casOd)) + END + ELSE + BEGIN -- pokud kalendar mam, zkontroluj jestli neni na dany datum/cas vyjimka + SET @cnt = 0 + WHILE (EXISTS(SELECT 1 FROM dbo.TabAdvKPDavky WHERE IDAdvKapacPlan=@idAdvKP AND IDStroje=@idStroj AND Zamek=1 AND @casOd BETWEEN CasOd AND CasDo) + OR EXISTS(SELECT 1 FROM dbo.TabPlanKalendPol WHERE IDStroje=@idStroj AND @casOd BETWEEN CasOd AND CasDo) + ) + AND (@cnt<=3000) -- kvuli zamrznuti + BEGIN + SET @casOd = DATEADD(hour, 1, @casOd) + SET @cnt = @cnt + 1 + END + SET @casDo = DATEADD(second, -1, DATEADD(hour, 1, @casOd)) + END +-- end: test data/casu zahajeni na kalendar stroje + UPDATE dbo.TabAdvKPDavky SET CasOd=@casOd, CasDo=@casDo WHERE ID=@idDavka + + + END +CLOSE dav +DEALLOCATE dav + + + +IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + +END TRY + +BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errorMsg = ERROR_MESSAGE() + + IF (CURSOR_STATUS('local','dav')>=-1) + BEGIN + CLOSE dav + DEALLOCATE dav + END + + IF (CURSOR_STATUS('local','vp')>=-1) + BEGIN + CLOSE vp + DEALLOCATE vp + END + +END CATCH diff --git a/_plgPlan/frmKmen.dfm b/_plgPlan/frmKmen.dfm new file mode 100644 index 0000000..d112a33 --- /dev/null +++ b/_plgPlan/frmKmen.dfm @@ -0,0 +1,294 @@ +object formKmen: TformKmen + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + Caption = ' Vyberte polo'#382'ku do pl'#225'nu' + ClientHeight = 800 + ClientWidth = 1203 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnShow = FormShow + TextHeight = 21 + object grd1: TGridPanel + Left = 0 + Top = 0 + Width = 1203 + Height = 800 + Align = alClient + Caption = 'grd1' + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Panel1 + Row = 1 + end + item + Column = 0 + Control = grd2 + Row = 0 + end> + RowCollection = < + item + Value = 5.000000000000000000 + end + item + Value = 95.000000000000000000 + end> + TabOrder = 0 + object Panel1: TPanel + Left = 1 + Top = 41 + Width = 1201 + Height = 758 + Align = alClient + Anchors = [] + TabOrder = 0 + object grdKmen: TJvDBGrid + Left = 1 + Top = 1 + Width = 1199 + Height = 756 + Align = alClient + DataSource = dm2.dsKmen + DrawingStyle = gdsClassic + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdKmenDrawColumnCell + OnDblClick = grdKmenDblClick + ScrollBars = ssVertical + SelectColumnsDialogStrings.Caption = 'Vyberte sloupce' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'Mus'#237' b'#253't viditeln'#253' aspo'#328' jeden sloupec !' + CanDelete = False + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colID' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SK' + Width = 35 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRegCis' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Width = 109 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Width = 352 + Visible = True + end + item + Expanded = False + FieldName = 'colZaklad' + Title.Alignment = taCenter + Title.Caption = 'Z'#225'klad' + Width = 232 + Visible = True + end + item + Expanded = False + FieldName = 'colZakModif' + Title.Alignment = taCenter + Title.Caption = 'Stroj' + Width = 135 + Visible = True + end + item + Expanded = False + FieldName = 'colKSvKA' + Title.Alignment = taCenter + Title.Caption = 'Ks v KA' + Width = 74 + Visible = True + end + item + Expanded = False + FieldName = 'colKAnaPAL' + Title.Alignment = taCenter + Title.Caption = 'KA na Pal' + Width = 76 + Visible = True + end + item + Expanded = False + FieldName = 'colKSnaPAL' + Title.Alignment = taCenter + Title.Caption = 'KS na Pal' + Width = 83 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJEvid' + Title.Alignment = taCenter + Title.Caption = 'bal' + Width = 54 + Visible = True + end> + end + end + object grd2: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 1195 + Height = 34 + Align = alClient + ColumnCollection = < + item + Value = 4.000000000000000000 + end + item + Value = 9.199999999999999000 + end + item + Value = 29.400000000000000000 + end + item + Value = 19.700000000000000000 + end + item + Value = 11.200000000000000000 + end + item + Value = 26.500000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnClear + Row = 0 + end + item + Column = 1 + Control = edtRegCis + Row = 0 + end + item + Column = 2 + Control = edtNazev + Row = 0 + end + item + Column = 3 + Control = edtZaklad + Row = 0 + end + item + Column = 4 + Control = edtStroj + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + object btnClear: TBitBtn + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 42 + Height = 26 + Align = alClient + ImageIndex = 3 + ImageName = 'Item4' + Images = dm2.imgList + TabOrder = 0 + OnClick = btnClearClick + end + object edtRegCis: TRzEdit + AlignWithMargins = True + Left = 52 + Top = 4 + Width = 103 + Height = 26 + Text = '' + Align = alClient + Color = clSkyBlue + MaxLength = 30 + TabOrder = 1 + OnChange = edtRegCisChange + OnKeyPress = edtRegCisKeyPress + ExplicitHeight = 29 + end + object edtNazev: TRzEdit + AlignWithMargins = True + Left = 161 + Top = 4 + Width = 345 + Height = 26 + Text = '' + Align = alClient + Color = clSkyBlue + MaxLength = 100 + TabOrder = 2 + OnChange = edtNazevChange + ExplicitHeight = 29 + end + object edtZaklad: TRzEdit + AlignWithMargins = True + Left = 512 + Top = 4 + Width = 229 + Height = 26 + Text = '' + Align = alClient + Color = clSkyBlue + MaxLength = 100 + TabOrder = 3 + OnChange = edtZakladChange + ExplicitHeight = 29 + end + object edtStroj: TRzEdit + AlignWithMargins = True + Left = 747 + Top = 4 + Width = 128 + Height = 26 + Text = '' + Align = alClient + Color = clSkyBlue + MaxLength = 50 + TabOrder = 4 + OnChange = edtStrojChange + ExplicitHeight = 29 + end + end + end +end diff --git a/_plgPlan/frmKmen.pas b/_plgPlan/frmKmen.pas new file mode 100644 index 0000000..4fc6264 --- /dev/null +++ b/_plgPlan/frmKmen.pas @@ -0,0 +1,226 @@ +unit frmKmen; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, + JvDBGrid, ddPlugin_TLB, Vcl.ComCtrls, JvExComCtrls, JvHeaderControl, Vcl.StdCtrls, Vcl.Buttons, + Vcl.Mask, RzEdit; + +type + TformKmen = class(TForm) + Panel1: TPanel; + grdKmen: TJvDBGrid; + grd1: TGridPanel; + grd2: TGridPanel; + btnClear: TBitBtn; + edtRegCis: TRzEdit; + edtNazev: TRzEdit; + edtZaklad: TRzEdit; + edtStroj: TRzEdit; + procedure FormShow (Sender: TObject); + procedure grdKmenDblClick (Sender: TObject); + procedure FormClose (Sender: TObject; var Action: TCloseAction); + procedure btnClearClick (Sender: TObject); + procedure edtStrojChange (Sender: TObject); + procedure edtRegCisKeyPress (Sender: TObject; var Key: Char); + procedure grdKmenDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure edtRegCisChange (Sender: TObject); + procedure edtNazevChange (Sender: TObject); + procedure edtZakladChange (Sender: TObject); + private + procedure Filtruj; + public + Helios: IHelios; + retVal: integer; + idKmen: integer; + idZakModif: integer; + filtrKodStroj: string; + end; + +var + formKmen: TformKmen; + +implementation +uses System.StrUtils, + helUtils, datMod2; + +{$R *.dfm} + + + procedure TformKmen.edtNazevChange (Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformKmen.edtRegCisChange (Sender: TObject); + begin + Filtruj; + end; + + + + procedure TformKmen.edtRegCisKeyPress (Sender: TObject; var Key: Char); + begin + Filtruj; + end; + + + + + procedure TformKmen.edtStrojChange (Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformKmen.edtZakladChange (Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformKmen.Filtruj; + var filtr: string; + begin + filtr:= ''; + if (edtRegCis.Text<>'') then + filtr:= 'UPPER(colRegCis) LIKE ''%' + edtRegCis.Text.ToUpper + '%'''; + + if (edtNazev.Text<>'') then + filtr:= filtr + IfThen(filtr<>'', ' AND ', '') + 'UPPER(colNazev1) LIKE ''%' + edtNazev.Text.ToUpper + '%'''; + + if (edtZaklad.Text<>'') then + filtr:= filtr + IfThen(filtr<>'', ' AND ', '') + 'UPPER(colZaklad) LIKE ''%' + edtZaklad.Text.ToUpper + '%'''; + + if (edtStroj.Text<>'') then + filtr:= filtr + IfThen(filtr<>'', ' AND ', '') + 'UPPER(colZakModif) LIKE ''%' + edtStroj.Text.ToUpper + '%'''; + + grdKmen.LockDrawing; + dm2.vtKmen.Filtered:= false; + if (filtr<>'') then + begin + dm2.vtKmen.Filter:= filtr; + dm2.vtKmen.Filtered:= true; + end; + + grdKmen.UnlockDrawing; + + end; + + + + + procedure TformKmen.btnClearClick (Sender: TObject); + begin + edtRegCis.Text:= ''; + edtNazev.Text:= ''; + edtZaklad.Text:= ''; + edtStroj.Text:= ''; + Filtruj; + end; + + + + + procedure TformKmen.FormClose (Sender: TObject; var Action: TCloseAction); + begin + Action:= TCloseAction.caFree; + end; + + + + + procedure TformKmen.FormShow (Sender: TObject); + var pomHandle: THandle; + filtr: string; + begin + retVal:= 0; + + + pomHandle:= THandle(Helios.MainApplicationHandle); + if (pomHandle<>Application.Handle) then + Application.Handle:= pomHandle; + + pomHandle:= THandle(Helios.MainApplicationIconHandle); + if (pomHandle<>Application.Icon.Handle) then + Application.Icon.Handle:= pomHandle; + + with Application.DefaultFont do + begin + Name:= Helios.Font; + Height:= Helios.FontHeight; + Charset:= Helios.Charset; + + Screen.MenuFont.Charset:= Charset; + Screen.MenuFont.Name:= Name; + Screen.MenuFont.Height:= Height; + end; + + self.Font:= Application.DefaultFont; + + + if not(dm2.vtKmen.Active) then + dm2.vtKmen.Open; + + dm2.vtKmen.EmptyDataSet; + dm2.vtKmen.Filtered:= false; + + grdKmen.LockDrawing; + filtr:= 'k.Dilec=1 AND k.MJEvidence=N''KA'''; + if (filtrKodStroj<>'') then + filtr:= filtr + ' AND k.ID IN (SELECT zmd.IDKmenZbozi FROM ' + tblZakazModifDilce + ' zmd INNER JOIN ' + tblZakazModif + + ' zm ON (zm.ID=zmd.IDZakazModif) WHERE zm.Schvaleno=1 AND zm.Kod=N' + filtrKodStroj.QuotedString + ')'; + dm2.NactiKmenZbozi (filtr); + dm2.vtKmen.First; + grdKmen.UnlockDrawing; + + helUtils.waitEnd; + + end; + + + + procedure TformKmen.grdKmenDblClick (Sender: TObject); + var i, zm: integer; + sz,rc,naz: string; + begin + i:= dm2.vtKmen.FieldByName('colID').AsInteger; + sz:= dm2.vtKmen.FieldByName('colSZ').AsString; + rc:= dm2.vtKmen.FieldByName('colRegCis').AsString; + naz:= dm2.vtKmen.FieldByName('colNazev1').AsString; + zm:= dm2.vtKmen.FieldByName('colIDZakModif').AsInteger; + + if (Helios.YesNo('Chcete vybrat ' + sz + ' ' + rc + ' ' + naz, true)) then + begin + idKmen:= i; + idZakModif:= zm; + retVal:= 10; + Close; + end; + end; + + + + + procedure TformKmen.grdKmenDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + TJvDBGrid(Sender).Canvas.Brush.Color:= $00B8C4C8; // RGB C8C4B8 - seda + if (Column.FieldName='colNazev1') then + TJvDBGrid(Sender).Canvas.Brush.Color:= $00C6FECF; // RGB CFFEC6 - svetle zelena + + if (gdSelected in State) then + TJvDBGrid(Sender).Canvas.Font.Color:= clBlack; + + TJvDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + +end. diff --git a/_plgPlan/frmPlan.dfm b/_plgPlan/frmPlan.dfm new file mode 100644 index 0000000..bb726a2 --- /dev/null +++ b/_plgPlan/frmPlan.dfm @@ -0,0 +1,1500 @@ +object formPlan: TformPlan + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + Caption = ' P L '#193' N O V '#193' N '#205 + ClientHeight = 790 + ClientWidth = 1467 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnDestroy = FormDestroy + OnResize = FormResize + OnShow = FormShow + TextHeight = 17 + object pnl1: TGridPanel + Left = 0 + Top = 0 + Width = 1467 + Height = 790 + Align = alClient + ColumnCollection = < + item + Value = 1.000000000000000000 + end + item + Value = 46.000000000000000000 + end + item + Value = 2.000000000000000000 + end + item + Value = 50.000000000000000000 + end + item + Value = 1.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = grdKalendar + Row = 2 + end + item + Column = 3 + Control = grdRozpis + Row = 2 + end + item + Column = 1 + Control = grd2 + Row = 0 + end + item + Column = 1 + Control = pnl2 + Row = 3 + end + item + Column = 3 + Control = grd4 + Row = 3 + end> + RowCollection = < + item + Value = 7.000000000000000000 + end + item + Value = 2.000000000000000000 + end + item + Value = 66.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 0 + object grdKalendar: TJvDBGrid + Left = 16 + Top = 72 + Width = 674 + Height = 520 + Align = alClient + DataSource = dm2.dsKalendar + DrawingStyle = gdsClassic + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleHotTrack] + ParentFont = False + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -13 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + OnCellClick = grdKalendarCellClick + OnDrawColumnCell = grdKalendarDrawColumnCell + OnTitleClick = grdKalendarTitleClick + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 21 + TitleRowHeight = 21 + end + object grdRozpis: TJvDBGrid + Left = 719 + Top = 72 + Width = 732 + Height = 520 + Align = alClient + DataSource = dm2.dsRozpis + DrawingStyle = gdsClassic + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleHotTrack] + ParentFont = False + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -13 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + OnCellClick = grdRozpisCellClick + OnDrawColumnCell = grdRozpisDrawColumnCell + OnDblClick = grdRozpisDblClick + OnMouseDown = grdRozpisMouseDown + OnTitleClick = grdRozpisTitleClick + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 21 + TitleRowHeight = 21 + end + object grd2: TGridPanel + Left = 16 + Top = 1 + Width = 674 + Height = 55 + Align = alClient + ColumnCollection = < + item + Value = 15.000000000000000000 + end + item + Value = 5.000000000000000000 + end + item + Value = 80.000000000000000000 + end> + ControlCollection = < + item + Column = 2 + Control = sgCas + Row = 0 + end + item + Column = 0 + Control = btnKonec + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + object sgCas: TJvStringGrid + Left = 135 + Top = 1 + Width = 538 + Height = 53 + Align = alClient + Color = clActiveBorder + ColCount = 4 + DefaultColAlignment = taCenter + FixedCols = 0 + ScrollBars = ssNone + TabOrder = 0 + OnDblClick = sgCasDblClick + OnDrawCell = sgCasDrawCell + OnSelectCell = sgCasSelectCell + Alignment = taLeftJustify + FixedFont.Charset = DEFAULT_CHARSET + FixedFont.Color = clWindowText + FixedFont.Height = -12 + FixedFont.Name = 'Segoe UI' + FixedFont.Style = [] + ColWidths = ( + 70 + 73 + 114 + 121) + end + object btnKonec: TButton + Left = 1 + Top = 1 + Width = 57 + Height = 47 + ImageAlignment = iaCenter + ImageIndex = 2 + ImageName = 'Item3' + Images = dm2.imgList + TabOrder = 1 + OnClick = btnKonecClick + end + end + object pnl2: TGridPanel + Left = 16 + Top = 592 + Width = 674 + Height = 197 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = pnl3 + Row = 0 + end + item + Column = 0 + Control = grd7 + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 3 + object pnl3: TGridPanel + Left = 1 + Top = 1 + Width = 672 + Height = 98 + Align = alClient + ColumnCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 4 + Control = Label1 + Row = 0 + end + item + Column = 0 + Control = Label2 + Row = 1 + end + item + Column = 1 + Control = NumberBox1 + Row = 1 + end + item + Column = 2 + Control = Label3 + Row = 1 + end + item + Column = 3 + Control = nHodPlanZacatek + Row = 1 + end + item + Column = 0 + ColumnSpan = 2 + Control = Label4 + Row = 2 + end + item + Column = 2 + ColumnSpan = 2 + Control = Label5 + Row = 2 + end + item + Column = 0 + ColumnSpan = 2 + Control = edtVyrobniZakazka + Row = 3 + end + item + Column = 2 + ColumnSpan = 2 + Control = edtUdrzba + Row = 3 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 672 + 98) + object Label1: TLabel + Left = 272 + Top = 4 + Width = 127 + Height = 17 + Anchors = [] + Caption = 'Zad'#225'n'#237' pl'#225'nu v'#253'roby' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitLeft = 248 + ExplicitTop = 6 + end + object Label2: TLabel + Left = 131 + Top = 25 + Width = 38 + Height = 24 + Margins.Top = 0 + Align = alRight + Alignment = taRightJustify + Caption = 'Hodin:' + ExplicitHeight = 17 + end + object NumberBox1: TNumberBox + AlignWithMargins = True + Left = 179 + Top = 25 + Width = 147 + Height = 24 + Margins.Left = 10 + Margins.Top = 0 + Margins.Right = 10 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + Color = 14738918 + TabOrder = 0 + ExplicitHeight = 25 + end + object Label3: TLabel + Left = 420 + Top = 25 + Width = 84 + Height = 24 + Margins.Top = 0 + Align = alRight + Caption = 'Za'#269#225'tek v hod:' + ExplicitHeight = 17 + end + object nHodPlanZacatek: TNumberBox + AlignWithMargins = True + Left = 506 + Top = 25 + Width = 75 + Height = 24 + Margins.Left = 2 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alLeft + Alignment = taCenter + AutoSize = False + Color = 14738918 + TabOrder = 1 + end + object Label4: TLabel + Left = 118 + Top = 52 + Width = 100 + Height = 17 + Anchors = [] + Caption = 'V'#253'robn'#237' zak'#225'zka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitLeft = 99 + ExplicitTop = 42 + end + object Label5: TLabel + Left = 482 + Top = 52 + Width = 43 + Height = 17 + Anchors = [] + Caption = #218'dr'#382'ba' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitLeft = 365 + ExplicitTop = 40 + end + object edtVyrobniZakazka: TEdit + AlignWithMargins = True + Left = 26 + Top = 73 + Width = 284 + Height = 25 + Margins.Top = 0 + Margins.Bottom = 0 + Alignment = taCenter + Anchors = [] + Color = 13041359 + ReadOnly = True + TabOrder = 2 + OnDblClick = edtVyrobniZakazkaDblClick + end + object edtUdrzba: TEdit + Left = 487 + Top = 73 + Width = 184 + Height = 24 + Margins.Top = 0 + Margins.Bottom = 0 + Align = alRight + Alignment = taCenter + Color = 13041359 + ReadOnly = True + TabOrder = 3 + OnDblClick = edtUdrzbaDblClick + ExplicitHeight = 25 + end + end + object grd7: TGridPanel + Left = 1 + Top = 99 + Width = 672 + Height = 97 + Align = alClient + ColumnCollection = < + item + Value = 24.000000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 16.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label6 + Row = 0 + end + item + Column = 1 + Control = Label7 + Row = 0 + end + item + Column = 2 + Control = Label8 + Row = 0 + end + item + Column = 3 + Control = Label9 + Row = 0 + end + item + Column = 4 + Control = Label10 + Row = 0 + end + item + Column = 6 + Control = Label12 + Row = 0 + end + item + Column = 0 + Control = lblOznaceni + Row = 1 + end + item + Column = 1 + Control = edtVyrobaKs + Row = 1 + end + item + Column = 2 + Control = edtVyrobaKA + Row = 1 + end + item + Column = 3 + Control = edtVyrobaPal + Row = 1 + end + item + Column = 4 + Control = edtKsZaHod + Row = 1 + end + item + Column = 6 + Control = edtHodUdrzba + Row = 1 + end + item + Column = 0 + Control = Label13 + Row = 2 + end + item + Column = 0 + Control = edtMJZakazka + Row = 3 + end + item + Column = 3 + ColumnSpan = 2 + Control = btnPridatZakazku + Row = 2 + RowSpan = 2 + end + item + Column = 5 + ColumnSpan = 2 + Control = btnUdrzba + Row = 2 + RowSpan = 2 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 672 + 97) + object Label6: TLabel + Left = 18 + Top = 4 + Width = 126 + Height = 17 + Anchors = [] + Caption = 'Ozna'#269'en'#237' ('#269#237'slo zbo'#382#237')' + ExplicitLeft = 20 + end + object Label7: TLabel + Left = 173 + Top = 4 + Width = 58 + Height = 17 + Anchors = [] + Caption = 'V'#253'roba ks' + ExplicitLeft = 106 + ExplicitTop = 2 + end + object Label8: TLabel + Left = 274 + Top = 4 + Width = 16 + Height = 17 + Anchors = [] + Caption = 'KA' + ExplicitLeft = 215 + ExplicitTop = 2 + end + object Label9: TLabel + Left = 356 + Top = 4 + Width = 14 + Height = 17 + Anchors = [] + Caption = 'Pa' + ExplicitLeft = 303 + ExplicitTop = 2 + end + object Label10: TLabel + Left = 423 + Top = 4 + Width = 40 + Height = 17 + Anchors = [] + Caption = 'ks/hod' + ExplicitLeft = 378 + ExplicitTop = 2 + end + object Label12: TLabel + Left = 578 + Top = 4 + Width = 79 + Height = 17 + Anchors = [] + Caption = 'Hodin '#250'dr'#382'by' + ExplicitLeft = 533 + ExplicitTop = 2 + end + object lblOznaceni: TLabel + Left = 79 + Top = 28 + Width = 4 + Height = 17 + Anchors = [] + ExplicitLeft = 11 + ExplicitTop = 21 + end + object edtVyrobaKs: TNumberBox + AlignWithMargins = True + Left = 167 + Top = 25 + Width = 70 + Height = 24 + Margins.Left = 5 + Margins.Top = 0 + Margins.Right = 5 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + TabOrder = 0 + ExplicitHeight = 25 + end + object edtVyrobaKA: TNumberBox + AlignWithMargins = True + Left = 250 + Top = 25 + Width = 65 + Height = 24 + Margins.Left = 8 + Margins.Top = 0 + Margins.Right = 8 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + TabOrder = 1 + ExplicitHeight = 25 + end + object edtVyrobaPal: TNumberBox + AlignWithMargins = True + Left = 331 + Top = 25 + Width = 64 + Height = 24 + Margins.Left = 8 + Margins.Top = 0 + Margins.Right = 8 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + TabOrder = 2 + ExplicitHeight = 25 + end + object edtKsZaHod: TNumberBox + AlignWithMargins = True + Left = 411 + Top = 25 + Width = 64 + Height = 24 + Margins.Left = 8 + Margins.Top = 0 + Margins.Right = 8 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + Color = 14738918 + ReadOnly = True + TabOrder = 3 + ExplicitHeight = 25 + end + object edtHodUdrzba: TNumberBox + AlignWithMargins = True + Left = 572 + Top = 25 + Width = 91 + Height = 24 + Margins.Left = 8 + Margins.Top = 0 + Margins.Right = 8 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + TabOrder = 4 + ExplicitHeight = 25 + end + object Label13: TLabel + Left = 73 + Top = 52 + Width = 17 + Height = 17 + Anchors = [] + Caption = 'MJ' + ExplicitLeft = 38 + ExplicitTop = 40 + end + object edtMJZakazka: TEdit + AlignWithMargins = True + Left = 11 + Top = 72 + Width = 141 + Height = 24 + Margins.Left = 10 + Margins.Top = 0 + Margins.Right = 10 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + Color = 14738918 + ReadOnly = True + TabOrder = 5 + ExplicitHeight = 25 + end + object btnPridatZakazku: TBitBtn + Left = 341 + Top = 64 + Width = 124 + Height = 32 + Anchors = [akBottom] + Caption = 'P'#345'idat zak'#225'zku' + ImageIndex = 1 + ImageName = 'Item2' + Images = dm2.imgList + TabOrder = 6 + OnClick = btnPridatZakazkuClick + end + object btnUdrzba: TBitBtn + Left = 546 + Top = 66 + Width = 125 + Height = 30 + Anchors = [akRight, akBottom] + Caption = #218'drzba' + ImageIndex = 1 + ImageName = 'Item2' + Images = dm2.imgList + TabOrder = 7 + OnClick = btnUdrzbaClick + end + end + end + object grd4: TGridPanel + Left = 719 + Top = 592 + Width = 732 + Height = 197 + Align = alClient + ColumnCollection = < + item + Value = 70.000000000000000000 + end + item + Value = 30.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grd5 + Row = 0 + end + item + Column = 1 + Control = grd9 + Row = 0 + end + item + Column = 0 + Control = grd6 + Row = 1 + end + item + Column = 1 + Control = btnKontrolaVyrobene + Row = 1 + end + item + Column = 1 + Control = GridPanel1 + Row = 2 + end + item + Column = 0 + Control = GridPanel3 + Row = 2 + end> + RowCollection = < + item + Value = 36.000000000000000000 + end + item + Value = 34.000000000000000000 + end + item + Value = 30.000000000000000000 + end> + TabOrder = 4 + object grd5: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 505 + Height = 64 + Align = alClient + ColumnCollection = < + item + Value = 30.000000000000000000 + end + item + Value = 50.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 10.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 4 + Control = Label14 + Row = 0 + end + item + Column = 0 + Control = edtVyrobekCislo + Row = 1 + end + item + Column = 1 + Control = edtVyrobekNazev + Row = 1 + end + item + Column = 2 + Control = edtRozpisKsVKA + Row = 1 + end + item + Column = 3 + Control = edtRozpisKAnaPal + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 505 + 64) + object Label14: TLabel + Left = 228 + Top = 8 + Width = 48 + Height = 17 + Anchors = [] + Caption = 'V'#253'robek' + ExplicitLeft = 38 + ExplicitTop = 6 + end + object edtVyrobekCislo: TEdit + AlignWithMargins = True + Left = 4 + Top = 35 + Width = 145 + Height = 25 + Align = alClient + Alignment = taCenter + Color = 14738918 + ReadOnly = True + TabOrder = 0 + end + object edtVyrobekNazev: TEdit + AlignWithMargins = True + Left = 155 + Top = 35 + Width = 245 + Height = 25 + Align = alClient + Alignment = taCenter + Color = 14738918 + ReadOnly = True + TabOrder = 1 + end + object edtRozpisKsVKA: TNumberBox + Left = 403 + Top = 32 + Width = 51 + Height = 31 + Hint = 'Po'#269'et ks v kartonu' + Align = alClient + Alignment = taRightJustify + Color = 14738918 + ParentShowHint = False + ReadOnly = True + ShowHint = True + TabOrder = 2 + ExplicitHeight = 25 + end + object edtRozpisKAnaPal: TNumberBox + Left = 454 + Top = 32 + Width = 50 + Height = 31 + Hint = 'Po'#269'et karton'#367' na palet'#283 + Align = alClient + Alignment = taRightJustify + Color = 14738918 + ParentShowHint = False + ReadOnly = True + ShowHint = True + TabOrder = 3 + ExplicitHeight = 25 + end + end + object grd9: TGridPanel + Left = 512 + Top = 1 + Width = 219 + Height = 70 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = Label11 + Row = 0 + end + item + Column = 0 + Control = edtRozpisPalet1 + Row = 1 + end + item + Column = 1 + Control = edtRozpisPalet2 + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 219 + 70) + object Label11: TLabel + Left = 95 + Top = 9 + Width = 28 + Height = 17 + Anchors = [] + Caption = 'Palet' + ExplicitLeft = 39 + end + object edtRozpisPalet1: TNumberBox + AlignWithMargins = True + Left = 17 + Top = 39 + Width = 76 + Height = 25 + Alignment = taRightJustify + Anchors = [akTop, akBottom] + Color = 14738918 + DisplayFormat = '#,##0.##' + ReadOnly = True + TabOrder = 0 + end + object edtRozpisPalet2: TNumberBox + AlignWithMargins = True + Left = 119 + Top = 39 + Width = 88 + Height = 25 + Alignment = taRightJustify + Anchors = [akTop, akBottom] + Color = 13041146 + DisplayFormat = '#,##0.##' + ReadOnly = True + TabOrder = 1 + end + end + object grd6: TGridPanel + Left = 1 + Top = 71 + Width = 511 + Height = 66 + Align = alClient + ColumnCollection = < + item + Value = 18.000000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 17.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 17.000000000000000000 + end + item + Value = 5.000000000000000000 + end + item + Value = 5.000000000000000000 + end + item + Value = 5.000000000000000000 + end + item + Value = 5.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label15 + Row = 0 + end + item + Column = 2 + Control = Label16 + Row = 0 + end + item + Column = 5 + Control = Label17 + Row = 0 + end + item + Column = 6 + Control = Label18 + Row = 0 + end + item + Column = 7 + Control = Label19 + Row = 0 + end + item + Column = 8 + Control = Label20 + Row = 0 + end + item + Column = 4 + Control = Label21 + Row = 0 + end + item + Column = 3 + Control = Label22 + Row = 0 + end + item + Column = 2 + Control = lblRozpisCelkemKs + Row = 1 + end + item + Column = 0 + Control = edtZakazka + Row = 1 + end + item + Column = 3 + Control = lblRozpisPalet + Row = 1 + end + item + Column = 4 + Control = lblRozpisMJ + Row = 1 + end + item + Column = 8 + Control = chbU + Row = 1 + end + item + Column = 7 + Control = chbF + Row = 1 + end + item + Column = 6 + Control = chbT + Row = 1 + end + item + Column = 5 + Control = chbPL + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 2 + DesignSize = ( + 511 + 66) + object Label15: TLabel + Left = 24 + Top = 8 + Width = 46 + Height = 17 + Anchors = [] + Caption = 'Zak'#225'zka' + ExplicitLeft = 5 + ExplicitTop = 6 + end + object Label16: TLabel + Left = 198 + Top = 8 + Width = 58 + Height = 17 + Anchors = [] + Caption = 'Ks celkem' + ExplicitLeft = 141 + ExplicitTop = 6 + end + object Label17: TLabel + Left = 414 + Top = 8 + Width = 13 + Height = 17 + Anchors = [] + Caption = 'PL' + ExplicitLeft = 302 + ExplicitTop = 6 + end + object Label18: TLabel + Left = 443 + Top = 8 + Width = 7 + Height = 17 + Anchors = [] + Caption = 'T' + ExplicitLeft = 329 + ExplicitTop = 6 + end + object Label19: TLabel + Left = 469 + Top = 8 + Width = 6 + Height = 17 + Anchors = [] + Caption = 'F' + ExplicitLeft = 430 + ExplicitTop = 6 + end + object Label20: TLabel + Left = 493 + Top = 8 + Width = 9 + Height = 17 + Anchors = [] + Caption = 'U' + ExplicitLeft = 423 + ExplicitTop = 6 + end + object Label21: TLabel + Left = 331 + Top = 8 + Width = 67 + Height = 17 + Anchors = [] + Caption = 'MJ v'#253'robku' + ExplicitLeft = 235 + ExplicitTop = 6 + end + object Label22: TLabel + Left = 282 + Top = 8 + Width = 28 + Height = 17 + Anchors = [] + Caption = 'Palet' + ExplicitLeft = 106 + ExplicitTop = 6 + end + object lblRozpisCelkemKs: TLabel + Left = 225 + Top = 40 + Width = 4 + Height = 17 + Alignment = taCenter + Anchors = [] + ExplicitLeft = 169 + end + object edtZakazka: TEdit + Left = 1 + Top = 33 + Width = 92 + Height = 25 + Align = alTop + Alignment = taCenter + Color = 13041359 + Enabled = False + TabOrder = 0 + OnDblClick = edtZakazkaDblClick + end + object lblRozpisPalet: TLabel + Left = 294 + Top = 40 + Width = 4 + Height = 17 + Alignment = taCenter + Anchors = [] + ExplicitLeft = 250 + end + object lblRozpisMJ: TLabel + Left = 363 + Top = 40 + Width = 4 + Height = 17 + Alignment = taCenter + Anchors = [] + ExplicitLeft = 300 + end + object chbU: TJvCheckBox + Left = 491 + Top = 40 + Width = 13 + Height = 17 + Anchors = [] + TabOrder = 1 + LinkedControls = <> + ReadOnly = True + end + object chbF: TJvCheckBox + Left = 465 + Top = 40 + Width = 13 + Height = 17 + Hint = 'Fixace zak'#225'zky' + Anchors = [] + ParentShowHint = False + ShowHint = True + TabOrder = 2 + LinkedControls = <> + ReadOnly = True + end + object chbT: TJvCheckBox + Left = 440 + Top = 40 + Width = 13 + Height = 17 + Anchors = [] + TabOrder = 3 + LinkedControls = <> + ReadOnly = True + end + object chbPL: TJvCheckBox + Left = 414 + Top = 40 + Width = 13 + Height = 17 + Hint = 'Rezervovan'#233' PL' + Anchors = [] + ParentShowHint = False + ShowHint = True + TabOrder = 4 + LinkedControls = <> + ReadOnly = True + end + end + object btnKontrolaVyrobene: TBitBtn + AlignWithMargins = True + Left = 522 + Top = 81 + Width = 199 + Height = 46 + Margins.Left = 10 + Margins.Top = 10 + Margins.Right = 10 + Margins.Bottom = 10 + Align = alClient + Caption = 'Kontrola vyrobeno' + Enabled = False + ImageIndex = 0 + ImageName = 'Item1' + Images = dm2.imgList + TabOrder = 3 + WordWrap = True + OnClick = btnKontrolaVyrobeneClick + end + object GridPanel1: TGridPanel + Left = 512 + Top = 137 + Width = 219 + Height = 59 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnRezervacePL + Row = 1 + end + item + Column = 0 + Control = edtCisloZakNaPL + Row = 0 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 4 + DesignSize = ( + 219 + 59) + object btnRezervacePL: TJvBitBtn + Left = 40 + Top = 29 + Width = 138 + Height = 30 + Anchors = [] + Caption = 'Rezervovat PL' + Enabled = False + ImageIndex = 5 + ImageName = 'Item6' + Images = dm2.imgList + TabOrder = 0 + OnClick = btnRezervacePLClick + end + object edtCisloZakNaPL: TLabeledEdit + Left = 118 + Top = 2 + Width = 81 + Height = 25 + Alignment = taCenter + EditLabel.Width = 114 + EditLabel.Height = 25 + EditLabel.Caption = #268#237'slo zak'#225'zky na PL:' + Enabled = False + LabelPosition = lpLeft + TabOrder = 1 + Text = '' + end + end + object GridPanel3: TGridPanel + Left = 1 + Top = 137 + Width = 511 + Height = 59 + Align = alClient + ColumnCollection = < + item + Value = 19.000000000000000000 + end + item + Value = 27.000000000000000000 + end + item + Value = 8.000000000000000000 + end + item + Value = 27.000000000000000000 + end + item + Value = 19.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = btnZrusitZakazku + Row = 1 + end + item + Column = 3 + Control = btnFixovatZakazku + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 5 + DesignSize = ( + 511 + 59) + object btnZrusitZakazku: TJvBitBtn + Left = 104 + Top = 29 + Width = 125 + Height = 30 + Anchors = [] + Caption = 'Zru'#353'it zak'#225'zku' + Enabled = False + ImageIndex = 3 + ImageName = 'Item4' + Images = dm2.imgList + TabOrder = 0 + OnClick = btnZrusitZakazkuClick + end + object btnFixovatZakazku: TJvBitBtn + Left = 282 + Top = 29 + Width = 124 + Height = 30 + Anchors = [] + Caption = 'Fixovat zak'#225'zku' + Enabled = False + ImageIndex = 6 + ImageName = 'Item7' + Images = dm2.imgList + TabOrder = 1 + OnClick = btnFixovatZakazkuClick + end + end + end + end +end diff --git a/_plgPlan/frmPlan.pas b/_plgPlan/frmPlan.pas new file mode 100644 index 0000000..d360536 --- /dev/null +++ b/_plgPlan/frmPlan.pas @@ -0,0 +1,1436 @@ +unit frmPlan; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, + Vcl.Dialogs, JvExDBGrids, JvDBGrid, JvStringGrid, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, JvExGrids, + ddPlugin_TLB, Vcl.StdCtrls, Vcl.NumberBox, Vcl.Buttons, RzDBGrid, JvExStdCtrls, JvCheckBox, + JvExButtons, JvBitBtn, Vcl.Mask; + +type + TformPlan = class(TForm) + pnl1: TGridPanel; + grdKalendar: TJvDBGrid; + grdRozpis: TJvDBGrid; + grd2: TGridPanel; + sgCas: TJvStringGrid; + pnl2: TGridPanel; + pnl3: TGridPanel; + Label1: TLabel; + Label2: TLabel; + NumberBox1: TNumberBox; + Label3: TLabel; + nHodPlanZacatek: TNumberBox; + Label4: TLabel; + Label5: TLabel; + edtVyrobniZakazka: TEdit; + edtUdrzba: TEdit; + grd7: TGridPanel; + Label6: TLabel; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + Label10: TLabel; + Label12: TLabel; + lblOznaceni: TLabel; + edtVyrobaKs: TNumberBox; + edtVyrobaKA: TNumberBox; + edtVyrobaPal: TNumberBox; + edtKsZaHod: TNumberBox; + edtHodUdrzba: TNumberBox; + Label13: TLabel; + edtMJZakazka: TEdit; + btnPridatZakazku: TBitBtn; + btnUdrzba: TBitBtn; + grd4: TGridPanel; + grd5: TGridPanel; + grd9: TGridPanel; + grd6: TGridPanel; + btnKontrolaVyrobene: TBitBtn; + Label14: TLabel; + edtVyrobekCislo: TEdit; + edtVyrobekNazev: TEdit; + edtRozpisKsVKA: TNumberBox; + edtRozpisKAnaPal: TNumberBox; + Label15: TLabel; + Label16: TLabel; + Label17: TLabel; + Label18: TLabel; + Label19: TLabel; + Label20: TLabel; + Label21: TLabel; + Label22: TLabel; + lblRozpisCelkemKs: TLabel; + edtZakazka: TEdit; + lblRozpisPalet: TLabel; + lblRozpisMJ: TLabel; + chbU: TJvCheckBox; + chbF: TJvCheckBox; + chbT: TJvCheckBox; + chbPL: TJvCheckBox; + GridPanel1: TGridPanel; + GridPanel3: TGridPanel; + btnZrusitZakazku: TJvBitBtn; + btnRezervacePL: TJvBitBtn; + btnFixovatZakazku: TJvBitBtn; + edtCisloZakNaPL: TLabeledEdit; + Label11: TLabel; + edtRozpisPalet1: TNumberBox; + edtRozpisPalet2: TNumberBox; + btnKonec: TButton; + procedure FormShow (Sender: TObject); + procedure sgCasDrawCell (Sender: TObject; ACol, ARow: LongInt; Rect: TRect; State: TGridDrawState); + procedure sgCasSelectCell (Sender: TObject; ACol, ARow: LongInt; var CanSelect: Boolean); + procedure grdRozpisDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure grdKalendarTitleClick (Column: TColumn); + procedure grdRozpisTitleClick (Column: TColumn); + procedure FormResize (Sender: TObject); + procedure grdKalendarDrawColumnTitle (Sender: TObject; ACanvas: TCanvas; ARect: TRect; + AColumn: TColumn; var ASortMarker: TJvDBGridBitmap; IsDown: Boolean; var Offset: Integer; + var DefaultDrawText, DefaultDrawSortMarker: Boolean); + procedure grdKalendarDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure edtVyrobniZakazkaDblClick (Sender: TObject); + procedure grdRozpisCellClick (Column: TColumn); + procedure btnPridatZakazkuClick (Sender: TObject); + procedure edtUdrzbaDblClick (Sender: TObject); + procedure btnUdrzbaClick (Sender: TObject); + procedure grdKalendarCellClick (Column: TColumn); + procedure FormClose (Sender: TObject; var Action: TCloseAction); + procedure FormDestroy (Sender: TObject); + procedure btnRezervacePLClick (Sender: TObject); + procedure sgCasDblClick (Sender: TObject); + procedure grdRozpisMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure btnFixovatZakazkuClick(Sender: TObject); + procedure btnZrusitZakazkuClick(Sender: TObject); + procedure edtZakazkaDblClick(Sender: TObject); + procedure btnKonecClick(Sender: TObject); + procedure grdRozpisDblClick(Sender: TObject); + procedure btnKontrolaVyrobeneClick(Sender: TObject); + private + function TestPrikazuPredZrusenimZakazky (idPrikaz: integer): boolean; + procedure ResizeGrids; + procedure NulujUdajeVyrobku; + procedure NactiDataGridu; + public + Helios: IHelios; + procedure RozpadPrikazuNaDavkyKP (datum: string=''; hodinaOd: integer=-1; arrID: TArray=nil); + end; + + +implementation +uses System.DateUtils, System.StrUtils, System.Math, + frmKmen, frmZavady, frmVyrobniTyden, frmPlanPaletListy, + uUtils, datMod2, helUtils; +{$R *.dfm} +var + formPlan: TformPlan; + g1ColWidthKoefs, g2ColWidthKoefs: TArray; + idKmenProPlan, idZakModif, idStroj, ksZaHod: integer; + idPrPUdrzba: integer; + idAdVKP, selIdDavka, selIdVPr, selIdPlan: integer; + rozpisAktDatum: string; + rozpisAktCasOd: integer; + kalendarAktStroj: integer; + kalendarKodStroj: string; + pressedAlt, pressedShift: boolean; + + + + procedure TformPlan.ResizeGrids; + var i, i2: integer; + begin + for i:=0 to grdKalendar.Columns.Count-1 do + for i2:=0 to Length(g1ColWidthKoefs)-1 do + if SameText(grdKalendar.Columns.Items[i].FieldName, g1ColWidthKoefs[i2].fieldName) then + grdKalendar.Columns.Items[i].Width:= Trunc(grdKalendar.Width * g1ColWidthKoefs[i2].widthKoef); + + for i:=0 to grdRozpis.Columns.Count-1 do + for i2:=0 to Length(g2ColWidthKoefs)-1 do + if SameText(grdRozpis.Columns.Items[i].FieldName, g2ColWidthKoefs[i2].fieldName) then + grdRozpis.Columns.Items[i].Width:= Trunc(grdRozpis.Width * g2ColWidthKoefs[i2].widthKoef); + end; + + + + + function TformPlan.TestPrikazuPredZrusenimZakazky (idPrikaz: Integer): Boolean; + begin + result:= true; // lze zrusit + + if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPMZ + ' WHERE IDPrikaz=' + idPrikaz.ToString)) then + result:= false; + + if (result) then + if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblDZ + ' WHERE IDPrikaz=' + idPrikaz.ToString)) then + result:= false; + + if (result) then + if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPZ + ' WHERE IDPrikaz=' + idPrikaz.ToString)) then + result:= false; + + end; + + + + + procedure TformPlan.NulujUdajeVyrobku; + begin + edtVyrobniZakazka.Text:= ''; + lblOznaceni.Caption:= ''; + edtVyrobaKs.ValueInt:= 0; + edtVyrobaKA.ValueInt:= 0; + edtVyrobaPal.ValueInt:= 0; + edtKsZaHod.ValueInt:= 0; + edtMJZakazka.Text:= ''; + + nHodPlanZacatek.Value:= 0; + + idKmenProPlan:= 0; + end; + + + + procedure TformPlan.RozpadPrikazuNaDavkyKP (datum: string=''; hodinaOd: integer=-1; arrID: TArray=nil); + var lSQL: string; + i: integer; + begin + if (idAdVKP>0) then + begin + helUtils.ReseedTable (Helios, tblAdvKPlanDavky); + + lSQL:= 'DROP TABLE IF EXISTS #TabPrikazyProKapacPlan' + CRLF + 'CREATE TABLE #TabPrikazyProKapacPlan (ID INT NOT NULL, JeUdrzba BIT NOT NULL DEFAULT 0' + + ', DatStart DATETIME, PocetHodin NUMERIC(19,6) NOT NULL DEFAULT 0, IDPrPostup INT)' + CRLF; + for i:=0 to Length(arrID)-1 do + if (arrID[i]>0) then + lSQL:= lSQL + 'INSERT #TabPrikazyProKapacPlan (ID) SELECT ' + arrID[i].ToString + CRLF; + + lSQL:= lSQL + 'DECLARE @dt DATETIME, @casStart TINYINT' + CRLF; + if (datum<>'') then + lSQL:= lSQL + 'SET @dt = CONVERT(datetime, N' + datum.QuotedString + ', 104)' + CRLF; + if (hodinaOd>=0) then + lSQL:= lSQL + 'SET @casStart=' + hodinaOd.ToString + CRLF; + lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'; + lSQL:= lSQL + ' @datumStart=@dt, @casOd=@casStart'; + Helios.ExecSQL (lSQL); + end; + end; + + + + + procedure TformPlan.btnFixovatZakazkuClick (Sender: TObject); + var lSQL, lSQL2, idcka: string; + jeUdrzba: boolean; + idLoc: integer; + begin + lSQL:= 'SELECT 1 FROM ' + tblVPr + ' vp INNER JOIN ' + tblPrikazRada +' vpr ON (vpr.Rada=vp.Rada) WHERE vpr.nazev LIKE N''%drb%'' AND vp.ID=' + selIdVPr.ToString; + jeUdrzba:= helUtils.sqlExistsTestGeneral(Helios, lSQL); + + lSQL:= ''; + lSQL2:= ''; + + idLoc:= 0; + if (selIdDavka>0) then + idLoc:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT _VazbaPlgPlan FROM ' + tblAdvKPlanDavky_E + ' WHERE ID=' + selIdDavka.ToString); + + if (selIdVPr>0) and (idAdVKP>0) then + begin + lSQL:= 'UPDATE ' + tblAdvKPlanDavky + ' SET Zamek=0 WHERE IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; + if (idLoc>0) then + lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; + + lSQL2:= 'SELECT ID FROM ' + tblAdvKPlanDavky + ' WHERE IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; + if (idLoc>0) then + lSQL2:= lSQL2 + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; + end; + + if (jeUdrzba) and (lSQL<>'') then + begin + if (chbF.Checked) then + begin + if Helios.YesNo('Zruit fixaci ?', false) then + begin + Helios.ExecSQL (lSQL); + lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=NULL WHERE ID IN (' + lSQL2 + ')'; + Helios.ExecSQL (lSQL); + chbF.Checked:= false; + end; + end + else + begin + lSQL:= lSQL.Replace('Zamek=0', 'Zamek=1'); + Helios.ExecSQL (lSQL); + lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=GETDATE() WHERE ID IN (' + lSQL2 + ')'; + Helios.ExecSQL (lSQL); + chbF.Checked:= true; + end; + end + else + begin + if (edtVyrobekCislo.Text<>'') and (lSQL<>'') then + begin + if (chbF.Checked) then + begin + if Helios.YesNo('Zruit fixaci ?', false) then + begin + Helios.ExecSQL (lSQL); + lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=NULL WHERE ID IN (' + lSQL2 + ')'; + Helios.ExecSQL (lSQL); + chbF.Checked:= false; + end; + end + else + begin + lSQL:= lSQL.Replace('Zamek=0', 'Zamek=1'); + Helios.ExecSQL (lSQL); + lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=GETDATE() WHERE ID IN (' + lSQL2 + ')'; + Helios.ExecSQL (lSQL); + chbF.Checked:= true; + end; + end; + end; + + end; + + + + + procedure TformPlan.btnKonecClick(Sender: TObject); + begin + Close; + end; + + + + + procedure TformPlan.btnKontrolaVyrobeneClick(Sender: TObject); + begin + if (kalendarAktStroj>0) and (grdKalendar.DataSource.DataSet.RecordCount>0) then + grdKalendarCellClick (grdKalendar.Columns.Items [uUtils.GetFirstVisibleColIndex(grdKalendar)]); + end; + + + + procedure TformPlan.btnPridatZakazkuClick (Sender: TObject); + var lSQL, kodStroje, planKonec, sz, rc, nazevDilce, radaVPr, prikazVPr, szV, szF, kodModif1, kodModif2: string; + errMsg: string; + i, idZakModifTemp: integer; + idZMDleKodu, idPlan, idPrikaz, idDilce, idZakModif, idKmenPr, idPrikazVyssi, idPrikazFinal: integer; + arrIdVPr: TArray; + canCont, delPrikaz: boolean; + begin + if (idKmenProPlan>0) then + begin + if ((edtVyrobaKs.ValueInt=0) and (edtVyrobaKA.ValueInt=0) and (edtVyrobaPal.ValueInt=0)) or (edtKsZaHod.ValueInt=0) or (lblOznaceni.Caption.Trim='') then + Helios.Error(#1'Chyb nkter ze zkladnch parametr (poet ks/poet KA/poet PAL/hodnota ks/hod), nemu pokraovat.'#1) + else + begin + idZMDleKodu:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblZakazModif + ' WHERE Kod=N' + kalendarKodStroj.QuotedString); + lSQL:= 'SELECT 1 FROM ' + tblZakazModifDilce + ' WHERE IDKmenZbozi=' + idKmenProPlan.ToString + ' AND IDZakazModif=' + idZMDleKodu.ToString; + if not(helUtils.sqlExistsTestGeneral (Helios, lSQL)) then + Helios.Error(#1'Na tento vrobek a stroj nen zavedena norma. Nelze uloit do plnu.'#1) + else + begin + helUtils.waitStart (btnPridatZakazku.GetParentComponent, 'Zpis plnu a generovn pkaz...'); + lSQL:= 'DECLARE @eMsg NVARCHAR(500)=N'''', @idPlan INT=0, @datPlanKonec DATETIME=NULL' + CRLF + + 'IF OBJECT_ID(''dbo.ep_Vyroba_ZapisDoPlanu'', ''P'') IS NOT NULL EXEC @idPlan=dbo.ep_Vyroba_ZapisDoPlanu @dilec=' + idKmenProPlan.ToString + + ', @idZakazModif=' + idZMDleKodu.ToString + ', @datum=N' + rozpisAktDatum.QuotedString + ', @hodinaOd=' + rozpisAktCasOd.ToString + + ', @pocetKs=' + edtVyrobaKs.Value.ToString.Replace(',','.') + ', @pocetKA=' + edtVyrobaKA.Value.ToString.Replace(',','.') + + ', @pocetPal=' + edtVyrobaPal.Value.ToString.Replace(',','.') + ', @datumPlanKonec=@datPlanKonec OUT, @errMsg=@eMsg OUT' + CRLF + + 'SELECT @eMsg AS ErrMsg, @idPlan AS IDPlan, @datPlanKonec AS DatumPlanKonec'; + try + try + with Helios.OpenSQL (lSQL) do + begin + idPlan:= VarToStr(FieldByNameValues('IDPlan')).ToInteger; + planKonec:= VarToStr(FieldByNameValues('DatumPlanKonec')); + if (VarToStr(FieldByNameValues('ErrMsg'))<>'') then + Helios.Error(#1 + VarToStr(FieldByNameValues('ErrMsg')) + #1) + else + begin + helUtils.ReseedTable (Helios, tblVPr); + helUtils.ReseedTable (Helios, tblPrPost); + helUtils.ReseedTable (Helios, tblPrKVaz); + lSQL:= 'DROP TABLE IF EXISTS #TabPomSeznamVyrPlanuProZaplanovani' + CRLF + 'DROP TABLE IF EXISTS #TabGenVyrPrikazy' + CRLF + + 'CREATE TABLE #TabPomSeznamVyrPlanuProZaplanovani (ID INT NOT NULL)' + CRLF + 'CREATE TABLE #TabGenVyrPrikazy (ID INT NOT NULL)' + CRLF + + 'INSERT #TabPomSeznamVyrPlanuProZaplanovani (ID) SELECT ' + idPlan.ToString + CRLF + + 'EXEC dbo.hp_VyrPlan_ZaplanujSeznam @RadaVyrPrikazu=NULL, @GenPlanovaneVyroby=0, @G_PovolitRespektovaniMnozSS=0' + CRLF + + 'SELECT ID FROM #TabGenVyrPrikazy ORDER BY ID DESC'; + with Helios.OpenSQL (lSQL) do + begin + idPrikazFinal:= 0; + + First; + kodModif1:= ''; + SetLength (arrIdVPr, RecordCount); + i:= 0; + while not(EOF) do + begin + canCont:= true; + delPrikaz:= false; + + idPrikaz:= VarToStr(FieldByNameValues('ID')).ToInteger; + if (idPrikazFinal=0) and (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString + ' AND UrovenVnoreni=0')) then + idPrikazFinal:= idPrikaz; + + if (kodModif1='') then + begin + lSQL:= 'SELECT TOP(1) ISNULL(zm.Kod, N'''') AS KodZakModif FROM ' + tblVPr + ' vp LEFT JOIN ' + tblZakazModif + + ' zm ON (zm.ID=vp.IDZakazModif) WHERE vp.ID=' + idPrikaz.ToString + ' AND vp.UrovenVnoreni=0'; + kodModif1:= helUtils.getHeliosStrVal (Helios, '', lSQL); + end; + + idZakModif:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDZakazModif FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); + if (idZakModif>0) then + begin + kodModif2:= helUtils.getHeliosStrVal (Helios, '', 'SELECT Kod FROM ' + tblZakazModif + ' WHERE ID=' + idZakModif.ToString); +// pokud nejsou stejne modifikace, prikaz smaz + if (kodModif1<>kodModif2) then + delPrikaz:= true; + end; + +// smaz prikazy, ktere nesly zadat do vyroby, typicky nemaji v TPV kusovnik nebo operace + idDilce:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); + lSQL:= 'SELECT 1 FROM ' + tblPostup + ' WHERE dilec=' + idDilce.ToString + IfThen(idZakModif>0, ' AND ZmenaDo IS NULL AND IDZakazModif=' + idZakModif.ToString, ''); + if not(helUtils.sqlExistsTestGeneral(Helios,lSQL)) then + delPrikaz:= true; + + lSQL:= 'SELECT 1 FROM ' + tblKVaz + ' WHERE vyssi=' + idDilce.ToString + IfThen(idZakModif>0, ' AND ZmenaDo IS NULL AND IDZakazModif=' + idZakModif.ToString, ''); + if not(helUtils.sqlExistsTestGeneral(Helios,lSQL)) then + delPrikaz:= true; + +// mam prikaz smazat ? + if (delPrikaz) then + begin + try + try + canCont:= false; + Helios.ExecSQL('EXEC dbo.hp_TabPrikaz_TriggerBeforeDelete @ID=' + idPrikaz.ToString + ', @PouzeTestPredZrusenimStavuZadano=0'); + Helios.ExecSQL('DELETE FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); + except on E:Exception do + errMsg:= E.Message; + end + finally + end; + end; + + if (canCont) then + begin + + lSQL:= 'SELECT k.SkupZbo, k.ID AS IDKmen, ISNULL(p.IDPrikazVyssi,0) AS IDPrikazVyssi, ISNULL(kv.SkupZbo,N'''') AS SZv, p.IDPrikazRidici, kf.SkupZbo AS SZFin' + + ' FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) INNER JOIN ' + tblVPr + ' pf ON (pf.ID=p.IDPrikazRidici)' + + ' INNER JOIN ' + tblKZ + ' kf ON (kf.ID=pf.IDTabKmen) LEFT JOIN ' + tblVPr + ' pv ON (pv.ID=p.IDPrikazVyssi)' + + ' LEFT JOIN ' + tblKZ + ' kv ON (kv.ID=pv.IDTabKmen) WHERE p.ID=' + idPrikaz.ToString; + with Helios.OpenSQL (lSQL) do + begin + sz:= VarToStr(FieldByNameValues('SkupZbo')); + szV:= VarToStr(FieldByNameValues('SZv')); + szF:= VarToStr(FieldByNameValues('SZFin')); + idKmenPr:= VarToStr(FieldByNameValues('IDKmen')).ToInteger; + idPrikazVyssi:= VarToStr(FieldByNameValues('IDPrikazVyssi')).ToInteger; + idPrikazFinal:= VarToStr(FieldByNameValues('IDPrikazRidici')).ToInteger; + end; + +{ + lSQL:= 'SELECT 1 FROM ' + tblZakazModifDilce + ' WHERE IDKmenZbozi=' + idKmenPr.ToString; + if not(helUtils.sqlExistsTestGeneral(Helios, lSQL + ' AND IDZakazModif=' + idZakModif.ToString)) then + if (1=helUtils.SQLGetRowCount(Helios, lSQL.Replace(' 1 ', ' ID '))) then + begin + idZakModifTemp:= helUtils.getHeliosIntVal (Helios, 0, lSQL.Replace(' 1 ', ' IDZakazModif ')); + if (idZakModifTemp>0) then + Helios.ExecSQL('UPDATE ' + tblVPr + ' SET IDZakazModif=' + idZakModifTemp.ToString + ' WHERE ID=' + idPrikaz.ToString); + end; +} + + try + lSQL:= 'DECLARE @iChyba INT' + CRLF + 'EXEC @iChyba=dbo.hp_ZadaniPrikazuDoVyroby @IDPrikaz=' + idPrikaz.ToString; + Helios.ExecSQL (lSQL); + except on E:Exception do + begin + radaVPr:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Rada FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); + prikazVPr:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Prikaz FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); + rc:= helUtils.getHeliosStrVal(Helios, '', 'SELECT RegCis FROM ' + tblKZ+ ' WHERE ID=' + idKmenPr.ToString); + nazevDilce:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev1 FROM ' + tblKZ+ ' WHERE ID=' + idKmenPr.ToString); + Helios.Error('Chyba: ' + E.Message + CRLF + '(pkaz ' + radaVPr + '/' + prikazVPr + ', dlec ' + sz + ' ' + rc + ' / ' + nazevDilce + ' )'); + end; + end; + // do pole dej jen prikaz finalu + if (idKmenPr=idKmenProPlan) then + begin + arrIdVPr[i]:= idPrikaz; + if (helUtils.SQLObjectExists (Helios, tblVPrE)) then + begin + lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblVPrE + ' WHERE ID=' + idPrikaz.ToString + ') INSERT ' + tblVPrE + ' (ID) SELECT ' + idPrikaz.ToString; + Helios.ExecSQL (lSQL); + Helios.ExecSQL ('UPDATE ' + tblVPrE + ' SET _PlanUkonceni=CONVERT(datetime, N' + planKonec.QuotedString + ', 104) WHERE ID=' + idPrikaz.ToString); + lSQL:= 'UPDATE ' + tblVPrE + ' SET _PlanZahajeni=CONVERT(datetime, N' + (rozpisAktDatum + ' ' + rozpisAktCasOd.ToString + ':00:00').QuotedString + + ', 104) WHERE ID=' + idPrikaz.ToString; + Helios.ExecSQL (lSQL); + end; + Inc(i); + end; + end; + + Next; + end; + end; + + if (edtKsZaHod.ValueInt>0) and (Length(arrIdVPr)>0) then + begin + helUtils.ReseedTable (Helios, tblAdvKPlanDavky); + RozpadPrikazuNaDavkyKP (rozpisAktDatum, rozpisAktCasOd, arrIdVPr); + end; + end; + end; + except on E:Exception do + Helios.Error('Chyba: ' + E.Message); + end; + finally + end; + + helUtils.waitEnd; + end; + + NactiDataGridu; + + grdKalendar.DataSource.DataSet.DisableControls; + if (grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf([kalendarAktStroj]), [loPartialKey])) then + begin + grdKalendar.Refresh; + grdKalendarCellClick (grdKalendar.Columns.Items [uUtils.GetFirstVisibleColIndex(grdKalendar)]); + end; + grdKalendar.DataSource.DataSet.EnableControls; + +// NulujUdajeVyrobku; +// dm2.NactiDavkyPlanu (self, kalendarAktStroj); + end; + end; + end; + + + + + procedure TformPlan.btnRezervacePLClick (Sender: TObject); + var lSQL, radaVPr, sk, mj, noveVC: string; + idKZ: integer; + i: integer; + mnozVPr, mnozPal, pocVC, koef: extended; + begin + i:= 0; + if (selIdVPr>0) then + begin + sk:= ''; + mj:= ''; + idKZ:= 0; + mnozVPr:= 0; + mnozPal:= 0; + edtCisloZakNaPL.Text:= edtCisloZakNaPL.Text.Trim; + + lSQL:= 'SELECT p.Rada, p.kusy_zad, k.SkupZbo, k.MJEvidence, p.IdTabKmen FROM ' + tblVPr + ' p INNER JOIN ' + + tblKZ + ' k ON (k.ID=p.IdTabKmen) WHERE p.ID=' + selIdVPr.ToString; + with Helios.OpenSQL (lSQL) do + if (RecordCount=1) then + begin + mj:= VarToStr(FieldByNameValues('MJEvidence')); + mnozVPr:= FieldByNameValues('kusy_zad'); + sk:= VarToStr(FieldByNameValues('SkupZbo')); + idKZ:= VarToStr(FieldByNameValues('IdTabKmen')).ToInteger; + end; + + mj:= mj.ToLower; + if (mj='pal') then + mnozPal:= mnozVPr; + + koef:= 0; + if (mj='ka') then + koef:= dm2.VratPrepocetMJ (idKZ, mj, 'Pal', 'PocetHlavni'); + + if (koef<>0) then + mnozPal:= System.Math.Floor(mnozVPr/koef); + + pocVC:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT COUNT(ID) FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString); + + if (pocVC'') then + begin + lSQL:= 'IF NOT EXISTS(SELECT 1 FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString + ' AND VyrCislo=N' + noveVC.QuotedString + ')' + + ' INSERT ' + tblPrikazVC + ' (IDPrikaz, VyrCislo, Popis, Mnozstvi) SELECT ' + selIdVPr.ToString + ', N' + noveVC.QuotedString + + ', N' + edtCisloZakNaPL.Text.QuotedString + ', ' + edtRozpisKAnaPal.Value.ToString.Replace(',','.'); + Helios.ExecSQL (lSQL); + end; + end; + end; + end; + + chbPL.Checked:= (i>0); + end; + + + + + procedure TformPlan.btnUdrzbaClick (Sender: TObject); + var lSQL: string; + aktStr: integer; + begin + if (idPrPUdrzba>0) then + begin + if (edtHodUdrzba.ValueInt=0) and (edtUdrzba.Text.Trim='') then + Helios.Error (#1'Chyb nkter ze zkladnch parametr, nemu pokraovat.'#1) + else + begin + lSQL:= 'DROP TABLE IF EXISTS #TabPrikazyProKapacPlan' + CRLF + 'CREATE TABLE #TabPrikazyProKapacPlan (ID INT NOT NULL, JeUdrzba BIT NOT NULL DEFAULT 0' + + ', DatStart DATETIME, PocetHodin NUMERIC(19,6) NOT NULL DEFAULT 0, IDPrPostup INT)' + CRLF + + 'INSERT #TabPrikazyProKapacPlan (ID, JeUdrzba, PocetHodin, IDPrPostup) SELECT 0, 1, ' + edtHodUdrzba.ValueInt.ToString + ', ' + idPrPUdrzba.ToString + CRLF; + lSQL:= lSQL + 'DECLARE @dt DATETIME, @casStart TINYINT' + CRLF; + if (rozpisAktDatum<>'') then + lSQL:= lSQL + 'SET @dt = CONVERT(datetime, N' + rozpisAktDatum.QuotedString + ', 104)' + CRLF; + if (rozpisAktCasOd>=0) then + lSQL:= lSQL + 'SET @casStart=' + rozpisAktCasOd.ToString + CRLF; + lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'; + lSQL:= lSQL + ' @datumStart=@dt, @casOd=@casStart'; + try + Helios.ExecSQL (lSQL); + except + end; + + aktStr:= kalendarAktStroj; + grdKalendar.DataSource.DataSet.DisableControls; + NactiDataGridu; + if (grdKalendar.DataSource.DataSet.RecordCount>0) then + if (grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf([aktStr]), [])) then + grdKalendarCellClick (grdKalendar.Columns.Items [uUtils.GetFirstVisibleColIndex(grdKalendar)]); + grdKalendar.DataSource.DataSet.EnableControls; + end; + idPrPUdrzba:= 0; + selIdDavka:= 0; + selIdPlan:= 0; + selIdVPr:= 0; + end; + end; + + + + + procedure TformPlan.btnZrusitZakazkuClick (Sender: TObject); + var lSQL, lSQL2, errMsg: string; + idLoc, aktStr: integer; + jeUdrzba: boolean; + begin + lSQL:= 'SELECT 1 FROM ' + tblVPr + ' vp INNER JOIN ' + tblPrikazRada +' vpr ON (vpr.Rada=vp.Rada) WHERE vpr.nazev LIKE N''%drb%'' AND vp.ID=' + selIdVPr.ToString; + jeUdrzba:= helUtils.sqlExistsTestGeneral(Helios, lSQL); + + idLoc:= 0; + if (selIdDavka>0) then + idLoc:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT _VazbaPlgPlan FROM ' + tblAdvKPlanDavky_E + ' WHERE ID=' + selIdDavka.ToString); + + + if (jeUdrzba) then + begin + if (chbF.Checked) then + Helios.Error(#1'Fixovan drba nelze zruit'#1) + else + begin + if Helios.YesNo('Opravdu zruit drbu ?', false) then + begin + lSQL:= 'DECLARE @em NVARCHAR(500)=N''''' + CRLF + 'IF OBJECT_ID(N''dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu'', N''P'') IS NOT NULL' + + ' EXEC dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu @idAdvKP=' + idAdVKP.ToString + ', @idVPrFin=' + selIdVPr.ToString + ', @idStroj=' + kalendarAktStroj.ToString + + ', @jeUdrzba=1, @idSadaDavek=' + IfThen(idLoc=0, 'NULL', idLoc.ToString) + ', @errorMsg=@em OUT' + CRLF + 'SELECT @em AS ErrMsg'; + try + with Helios.OpenSQL (lSQL) do + begin + First; + errMsg:= VarToStr(FieldByNameValues('ErrMsg')); + end; + // Helios.ExecSQL('DELETE FROM ' + tblPlan + ' WHERE ID=' + selIdPlan.ToString); + except on E:Exception do + errMsg:= 'CHYBA: ' + E.Message; + end; + end; + end; + end + else + begin + if (chbF.Checked) then + Helios.Error(#1'Fixovan zakzka nelze zruit'#1) + else + begin + if not(TestPrikazuPredZrusenimZakazky(selIdVPr)) then + Helios.Error(#1'Zakzka nelze zruit, pkaz u byl pouit (odveden materil/evidovna prce...)'#1) + else + begin + if (edtVyrobekCislo.Text<>'') and (selIdVPr>0) and (idAdVKP>0) then + if Helios.YesNo('Opravdu zruit zakzku ?', false) then + begin + lSQL:= 'DECLARE @em NVARCHAR(500)=N''''' + CRLF + 'IF OBJECT_ID(N''dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu'', N''P'') IS NOT NULL' + + ' EXEC dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu @idAdvKP=' + idAdVKP.ToString + ', @idVPrFin=' + selIdVPr.ToString + + ', @idStroj=' + kalendarAktStroj.ToString + ', @idSadaDavek=' + IfThen(idLoc=0, 'NULL', idLoc.ToString) + ', @errorMsg=@em OUT' + CRLF + 'SELECT @em AS ErrMsg'; + try + with Helios.OpenSQL (lSQL) do + begin + First; + errMsg:= VarToStr(FieldByNameValues('ErrMsg')); + end; + // Helios.ExecSQL('DELETE FROM ' + tblPlan + ' WHERE ID=' + selIdPlan.ToString); + except on E:Exception do + errMsg:= 'CHYBA: ' + E.Message; + end; + end; + end; + end; + end; + + helUtils.ReseedTable (Helios, tblAdvKPlanDavky); + helUtils.ReseedTable (Helios, tblPrKVaz); + helUtils.ReseedTable (Helios, tblPrPost); + helUtils.ReseedTable (Helios, tblVPr); + helUtils.ReseedTable (Helios, tblPlan); + + aktStr:= kalendarAktStroj; + NactiDataGridu; + if (grdKalendar.DataSource.DataSet.RecordCount>0) then + if (grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf([aktStr]), [])) then + grdKalendarCellClick (grdKalendar.Columns.Items[ uUtils.GetFirstVisibleColIndex (grdKalendar)]); + end; + + + + + procedure TformPlan.edtUdrzbaDblClick (Sender: TObject); + var f: TformZavady; + begin + f:= TformZavady.Create (nil); + try + f.Helios:= Helios; + f.kodModif:= kalendarKodStroj; + helUtils.waitStart (nil, 'Natm data...'); + f.ShowModal; + if (f.retVal=10) then + begin + idPrPUdrzba:= f.idPrP; + edtUdrzba.Text:= f.Nazev; + edtVyrobniZakazka.Text:= ''; + edtVyrobaKs.Value:= 0; + edtVyrobaKA.Value:= 0; + edtVyrobaPal.Value:= 0; + edtKsZaHod.Value:= 0; + idKmenProPlan:= 0; + idZakModif:= 0; + lblOznaceni.Caption:= ''; + edtMJZakazka.Text:= ''; + if (edtHodUdrzba.CanFocus) then + edtHodUdrzba.SetFocus; + end; + finally + f.Free; + end; + end; + + + + + procedure TformPlan.edtVyrobniZakazkaDblClick (Sender: TObject); + var f: TformKmen; + lSQL, kodZakModif, operace: string; + idPostup: integer; + begin + idKmenProPlan:= 0; + f:= TformKmen.Create (nil); + try + f.Helios:= Helios; + f.filtrKodStroj:= kalendarKodStroj; + helUtils.waitStart (nil, 'Natm data...'); + f.ShowModal; + if (f.retVal=10) then + begin + edtUdrzba.Text:= ''; + idPrPUdrzba:= 0; + edtHodUdrzba.Value:= 0; + + + idKmenProPlan:= f.idKmen; + with Helios.OpenSQL ('SELECT SkupZbo,RegCis,Nazev1,MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmenProPlan.ToString) do + begin + edtVyrobniZakazka.Text:= VarToStr(FieldByNameValues('Nazev1')).Trim; + lblOznaceni.Caption:= VarToStr(FieldByNameValues('SkupZbo')).Trim + ' ' + VarToStr(FieldByNameValues('RegCis')).Trim; + edtMJZakazka.Text:= VarToStr(FieldByNameValues('MJEvidence')); + end; + + idZakModif:= f.idZakModif; + kodZakModif:= helUtils.getHeliosStrVal (Helios, '', 'SELECT Kod FROM ' + tblZakazModif + ' WHERE ID=' + idZakModif.ToString); + ksZaHod:= 0; + idStroj:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblCStroju + ' WHERE Blokovano=0 AND Kod=N' + kodZakModif.QuotedString); + if (idStroj>0) then + ksZaHod:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ISNULL(_KapacitaKsZaHod,0) AS KsZaHod FROM ' + tblCStrojuE + ' WHERE ID=' + idStroj.ToString); + + operace:= ''; + if (kalendarKodStroj.IndexOf('COKO-K')>=0) then + operace:= 'Men'; + if (kalendarKodStroj.IndexOf('COKO-T')>=0) then + operace:= 'Polvn'; + + idPostup:= 0; + if (operace<>'') then + begin + lSQL:= 'SELECT ID FROM ' + tblPostup + ' WHERE IDZakazModif=' + idZakModif.ToString + ' AND Dilec=' + idKmenProPlan.ToString + + ' AND ZmenaDo IS NULL AND typ<2 AND nazev=N' + operace.QuotedString; + idPostup:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + end; + if (idPostup>0) then + ksZaHod:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ISNULL(_RychlostOperKsHod,0) AS KsZaHod FROM ' + tblPostupE + ' WHERE ID=' + idPostup.ToString); + + + if (kalendarKodStroj.IndexOf('PRO1')>=0) or (kalendarKodStroj.IndexOf('PRO2')>=0) or (kalendarKodStroj.IndexOf('WJ')>=0) + or (kalendarKodStroj.IndexOf('EWA65')>=0) + then + if (helUtils.SQLColumnExists (Helios, tblZakazModifE, '_TypModifikace')) then + if (helUtils.getHeliosStrVal(Helios, '', 'SELECT ISNULL(_TypModifikace, N'''') AS Typ FROM ' + tblZakazModifE + ' WHERE ID=' + idZakModif.ToString)='PECENI') then + begin + end; + + + edtKsZaHod.ValueInt:= ksZaHod; + + edtVyrobaKs.ValueInt:= 0; + edtVyrobaKA.ValueInt:= 0; + edtVyrobaPal.ValueInt:= 0; + + if (edtVyrobaPal.CanFocus) then + edtVyrobaPal.SetFocus; + + end; + finally + f.Free; + end; + end; + + + + + procedure TformPlan.edtZakazkaDblClick (Sender: TObject); + begin + grdRozpisDblClick (Sender); +{ + if (edtZakazka.Text='') then + Helios.Error(#1'Vyberte zakzku k zobrazen pirazench paletovch list'#1) + else + begin + + end; +} + end; + + + + + procedure TformPlan.FormClose (Sender: TObject; var Action: TCloseAction); + begin + Helios.ExecSQL ('DROP TABLE IF EXISTS #TabPrikazyProKapacPlan'); + + Action:= TCloseAction.caFree; + end; + + + + + procedure TformPlan.FormResize (Sender: TObject); + begin + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colStroj')].Width:= Trunc(grdKalendar.Width * 0.38); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colNe')].Width:= Trunc(grdKalendar.Width * 0.078); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colPo')].Width:= Trunc(grdKalendar.Width * 0.078); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colUt')].Width:= Trunc(grdKalendar.Width * 0.078); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colSt')].Width:= Trunc(grdKalendar.Width * 0.078); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colCt')].Width:= Trunc(grdKalendar.Width * 0.078); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colPa')].Width:= Trunc(grdKalendar.Width * 0.078); + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colSo')].Width:= Trunc(grdKalendar.Width * 0.078); + + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colDatum')].Width:= Trunc(grdRozpis.Width * 0.12); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colHodOd')].Width:= Trunc(grdRozpis.Width * 0.037); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colHodDo')].Width:= Trunc(grdRozpis.Width * 0.037); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colSkupZbo')].Width:= Trunc(grdRozpis.Width * 0.05); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colRegCis')].Width:= Trunc(grdRozpis.Width * 0.12); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colNazev')].Width:= Trunc(grdRozpis.Width * 0.30); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colPrikaz')].Width:= Trunc(grdRozpis.Width * 0.11); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colMnoz')].Width:= Trunc(grdRozpis.Width * 0.07); + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colMnozHotovo')].Width:= Trunc(grdRozpis.Width * 0.08); + end; + + + + + procedure TformPlan.FormShow (Sender: TObject); + var i, i2, gWidth: integer; + d, h: string; + pomHandle: THandle; + begin +// vytvor data modul + if not(Assigned(datMod2.dm2)) then + datMod2.dm2:= Tdm2.Create(self); + + + + + pomHandle:= THandle(Helios.MainApplicationHandle); + if (pomHandle<>Application.Handle) then + Application.Handle:= pomHandle; + + pomHandle:= THandle(Helios.MainApplicationIconHandle); + if (pomHandle<>Application.Icon.Handle) then + Application.Icon.Handle:= pomHandle; + + with Application.DefaultFont do + begin + Name:= Helios.Font; + Height:= Helios.FontHeight; + Charset:= Helios.Charset; + + Screen.MenuFont.Charset:= Charset; + Screen.MenuFont.Name:= Name; + Screen.MenuFont.Height:= Height; + end; + + + SetWindowLong(btnKontrolaVyrobene.Handle, GWL_STYLE, GetWindowLong((btnKontrolaVyrobene as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + + + + idAdvKP:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblAdvKPlan + ' WHERE Kod=N''99'''); + datMod2.idAdvKPl:= idAdvKP; + + datMod2.bidPalety:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Palety'''); + + + + if not(dm2.vtKalendar.Active) then + dm2.vtKalendar.Open; + + if not(dm2.vtRozpis.Active) then + dm2.vtRozpis.Open; + + if not(dm2.vtKmen.Active) then + dm2.vtKmen.Open; + + if not(dm2.vtZavady.Active) then + dm2.vtZavady.Open; + + + +// uloz koeficienty pro sirku sloupcu gridu + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colIDStroj') ].Visible:= false; + grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colKodStroj') ].Visible:= false; + SetLength (g1ColWidthKoefs, uUtils.GetVisibleColsCount (grdKalendar) ); + gWidth:= uUtils.ColWidthSum (grdKalendar, true); + i2:= 0; + for i:=0 to grdKalendar.Columns.Count-1 do + begin + if (grdKalendar.Columns.Items[i].Visible) then + begin + g1ColWidthKoefs[i2].fieldName:= grdKalendar.Columns.Items[i].FieldName; + g1ColWidthKoefs[i2].widthKoef:= grdKalendar.Columns.Items[i].Width / gWidth; + Inc (i2); + end; + end; + + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colID') ].Visible:= false; + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colIdPrikaz') ].Visible:= false; + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colIdKmen') ].Visible:= false; + grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colJeUdrzba') ].Visible:= false; + SetLength (g2ColWidthKoefs, uUtils.GetVisibleColsCount (grdRozpis) ); + gWidth:= uUtils.ColWidthSum (grdRozpis, true); + i2:= 0; + for i:=0 to grdRozpis.Columns.Count-1 do + begin + if (grdRozpis.Columns.Items[i].Visible) then + begin + g2ColWidthKoefs[i2].fieldName:= grdRozpis.Columns.Items[i].FieldName; + g2ColWidthKoefs[i2].widthKoef:= grdRozpis.Columns.Items[i].Width / gWidth; + Inc (i2); + end; + end; + +// ResizeGrids; // resize gridy podle koeficientu + + + sgCas.Alignment:= taCenter; + + sgCas.ColAlignments[0]:= taCenter; + sgCas.Cells[0,0]:= 'Rok'; + sgCas.Cells[0,1]:= YearOf(Now).ToString; + + sgCas.ColAlignments[1]:= taCenter; + sgCas.Cells[1,0]:= 'Tden'; + sgCas.Cells[1,1]:= WeekOfTheYear(Now).ToString; + + sgCas.ColAlignments[2]:= taCenter; + sgCas.Cells[2,0]:= 'Od'; + sgCas.Cells[2,1]:= FormatDateTime('dd.mm.yyyy', IncDay(StartOfTheWeek(Now), -1)); + + + sgCas.ColAlignments[3]:= taCenter; + sgCas.Cells[3,0]:= 'Do'; + sgCas.Cells[3,1]:= FormatDateTime('dd.mm.yyyy', IncDay(EndOfTheWeek(Now), -1)); + + + selIdVPr:= 0; + NactiDataGridu; + end; + + + + + procedure TformPlan.NactiDataGridu; + var d: string; + begin + NulujUdajeVyrobku; + + if (Assigned(datMod2.dm2)) then + begin + dm2.Helios:= Helios; + + if (dm2.vtKalendar<>nil) then + if (dm2.vtKalendar.Active) then + dm2.vtKalendar.Open; + + Screen.Cursor:= crHourGlass; + grdKalendar.DataSource.DataSet.DisableControls; + grdKalendar.LockDrawing; + dm2.NactiKalendar (self, 0); // idStroj + grdKalendar.DataSource.DataSet.First; + grdKalendar.UnlockDrawing; + grdKalendar.DataSource.DataSet.EnableControls; + + grdKalendarCellClick (grdKalendar.Columns.Items[ uUtils.GetFirstVisibleColIndex (grdKalendar)]); + + dm2.GenerujRozpis (0); + if (dm2.vtRozpis<>nil) then + if (dm2.vtRozpis.Active) then + dm2.vtRozpis.Open; + grdRozpis.LockDrawing; + dm2.NactiRozpis (self); + d:= FormatDateTime('dd.mm.yyyy', Now); +// h:= FormatDateTime('hh', Now); + grdRozpis.DataSource.DataSet.Locate ('colDatum;colHodOd', VarArrayOf([d, 0]), [loCaseInsensitive]); + + grdRozpis.UnlockDrawing; + Screen.Cursor:= crDefault; + end; + end; + + + + + procedure TformPlan.grdKalendarCellClick (Column: TColumn); + begin + kalendarAktStroj:= dm2.vtKalendar.FieldByName('colIDStroj').AsInteger; + kalendarKodStroj:= dm2.vtKalendar.FieldByName('colKodStroj').AsString; + + if (dm2.vtRozpis.Active) then + begin + Screen.Cursor:= crHourGlass; + grdRozpis.LockDrawing; + + dm2.VymazRozpis (self); + dm2.NactiDavkyPlanu (self, kalendarAktStroj); + + grdRozpis.UnlockDrawing; + Screen.Cursor:= crDefault; + end; + + + selIdVPr:= 0; + selIdDavka:= 0; + selIdPlan:= 0; + idPrPUdrzba:= 0; + +// polozky na detailu rozpisu + edtZakazka.Text:= ''; + edtVyrobekCislo.Text:= ''; + edtVyrobekNazev.Text:= ''; + lblRozpisCelkemKs.Caption:= ''; + lblRozpisPalet.Caption:= ''; + lblRozpisMJ.Caption:= ''; + edtCisloZakNaPL.Text:= ''; + chbPL.Checked:= false; + chbT.Checked:= false; + chbF.Checked:= false; + chbU.Checked:= false; + + + end; + + + + + procedure TformPlan.grdKalendarDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (gdSelected in State) then + grdKalendar.Canvas.Font.Color:= clBlack; + + if (Assigned(Column.Field) and not(SameText(Column.FieldName, 'colStroj'))) then + begin + if (Column.Field.AsInteger=0) then + grdKalendar.Canvas.Brush.Color:= $00C6FECF; // RGB CFFEC6 - svetle zelena + + if (Column.Field.AsInteger>0) and (Column.Field.AsInteger<=23) then + grdKalendar.Canvas.Brush.Color:= $0085FCF4; // RGB F4FC85 - svetle zluta + + if (Column.Field.AsInteger=24) then + grdKalendar.Canvas.Brush.Color:= $00BEC2FD; // RGB FDC2BE - divna cervena + end; + + grdKalendar.DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + procedure TformPlan.grdKalendarDrawColumnTitle (Sender: TObject; ACanvas: TCanvas; ARect: TRect; + AColumn: TColumn; var ASortMarker: TJvDBGridBitmap; IsDown: Boolean; var Offset: Integer; + var DefaultDrawText, DefaultDrawSortMarker: Boolean); + begin + ACanvas.Brush.Color:= $00B8C4C8; // RGB C8C4B8 - seda + DefaultDrawText:= true; + DefaultDrawSortMarker:= true; + end; + + + + + procedure TformPlan.grdKalendarTitleClick (Column: TColumn); + begin + Helios.Info (Column.FieldName + ' >> koef. ' + (Column.Width/grdKalendar.Width).ToString ); + end; + + + + + procedure TformPlan.grdRozpisCellClick (Column: TColumn); + var lSQL, mjEvid, radaPrikaz, podm: string; + idKZ, aStrojBak, jeUdrzba, idLoc: integer; + mnozKs, ksNaPal: Extended; + oVar: OleVariant; + arrID: TArray; + begin + rozpisAktCasOd:= dm2.vtRozpis.FieldByName('colHodOd').AsInteger; + nHodPlanZacatek.ValueInt:= rozpisAktCasOd; + rozpisAktDatum:= dm2.vtRozpis.FieldByName('colDatum').AsString; + + if (idAdVKP=0) and (datMod2.idAdvKPl>0) then + idAdVKP:= datMod2.idAdvKPl; + + jeUdrzba:= dm2.vtRozpis.FieldByName('colJeUdrzba').AsInteger; + + selIdPlan:= dm2.vtRozpis.FieldByName('colIDPlan').AsInteger; + selIdVPr:= dm2.vtRozpis.FieldByName('colIdPrikaz').AsInteger; + selIdDavka:= dm2.vtRozpis.FieldByName('colID').AsInteger; + idLoc:= 0; + if (selIdDavka>0) then + idLoc:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT _VazbaPlgPlan FROM ' + tblAdvKPlanDavky_E + ' WHERE ID=' + selIdDavka.ToString); + + + btnKontrolaVyrobene.Enabled:= (jeUdrzba=0); + btnRezervacePL.Enabled:= btnKontrolaVyrobene.Enabled; + edtCisloZakNaPL.Enabled:= btnKontrolaVyrobene.Enabled; + btnZrusitZakazku.Caption:= 'Zruit zakzku'; + btnFixovatZakazku.Caption:= 'Fixovat zakzku'; + + if (jeUdrzba=0) then + begin + chbPL.Checked:= helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString); + lSQL:= 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; + if (idLoc>0) then + lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; + chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, lSQL); + + btnKontrolaVyrobene.Enabled:= (selIdVPr>0); + btnRezervacePL.Enabled:= btnKontrolaVyrobene.Enabled; + edtCisloZakNaPL.Enabled:= btnKontrolaVyrobene.Enabled; + btnZrusitZakazku.Enabled:= btnKontrolaVyrobene.Enabled; + btnFixovatZakazku.Enabled:= btnKontrolaVyrobene.Enabled; + edtZakazka.Enabled:= btnKontrolaVyrobene.Enabled; + + if (chbPL.Checked) then + begin + btnRezervacePL.Enabled:= false; + btnRezervacePL.Enabled:= false; + end; + + end; + + + if (jeUdrzba=1) then + begin + edtZakazka.Enabled:= false; + btnZrusitZakazku.Enabled:= true; + btnFixovatZakazku.Enabled:= btnZrusitZakazku.Enabled; + + btnZrusitZakazku.Caption:= 'Zruit drbu'; + btnFixovatZakazku.Caption:= 'Fixovat drbu'; + + edtVyrobekCislo.Text:= ''; + edtVyrobekNazev.Text:= dm2.vtRozpis.FieldByName('colNazev').AsString; +// edtZakazka.Text:= dm2.vtRozpis.FieldByName('colPrikaz').AsString; + edtZakazka.Text:= ''; + lblRozpisCelkemKs.Caption:= ''; + lblRozpisPalet.Caption:= ''; + edtRozpisPalet1.Value:= 0; + edtRozpisKsVKA.Value:= 0; + edtRozpisKAnaPal.Value:= 0; + chbPL.Checked:= false; + chbT.Checked:= false; + chbU.Checked:= false; + lSQL:= 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; + if (idLoc>0) then + lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; + chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, lSQL); + end + else + begin // jeUdrzba=0 + idKZ:= dm2.vtRozpis.FieldByName('colIdKmen').AsInteger; + + mjEvid:= helUtils.getHeliosStrVal (Helios, '', 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString); + edtVyrobekCislo.Text:= dm2.vtRozpis.FieldByName('colSkupZbo').AsString + ' ' + dm2.vtRozpis.FieldByName('colRegCis').AsString; + edtVyrobekNazev.Text:= dm2.vtRozpis.FieldByName('colNazev').AsString; + + edtRozpisKsVKA.Value:= 0; + edtRozpisKAnaPal.Value:= 0; + + if (System.SysUtils.SameText(mjEvid, 'ka')) then + begin + edtRozpisKsVKA.Value:= dm2.VratPrepocetMJ (idKZ, 'KA', 'ks', 'PocetOdvozene'); + edtRozpisKAnaPal.Value:= dm2.VratPrepocetMJ (idKZ, 'KA', 'pal', 'PocetHlavni'); + end; + + edtZakazka.Text:= dm2.vtRozpis.FieldByName('colPrikaz').AsString; + selIdVPr:= dm2.vtRozpis.FieldByName('colIdPrikaz').AsInteger; + radaPrikaz:= helUtils.getHeliosStrVal (Helios, '', 'SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE ID=' + selIdVPr.ToString); + + lSQL:= 'SELECT SUM(de._MnozstviKs) FROM ' + tblAdvKPlanDavky + ' d INNER JOIN ' + tblAdvKPlanDavky_E + ' de ON (de.ID=d.ID) WHERE d.IDPrikaz=' + selIdVPr.ToString + + ' AND d.IdAdvKapacPlan=' + idAdVKP.ToString; + mnozKs:= helUtils.getHeliosFloatVal (Helios, 0, lSQL); + lblRozpisCelkemKs.Caption:= mnozKs.ToString; + + + edtRozpisPalet1.Value:= 0; + lblRozpisPalet.Caption:= ''; + ksNaPal:= edtRozpisKsVKA.Value * edtRozpisKAnaPal.Value; + if (ksNaPal<>0) then + begin + lblRozpisPalet.Caption:= (mnozKs/ksNaPal).ToString; + edtRozpisPalet1.Value:= (mnozKs/ksNaPal); + end; + + + chbT.Checked:= false; + chbU.Checked:= false; + chbPL.Checked:= helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString); +// chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString); + lSQL:= 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; + if (idLoc>0) then + lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; + chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, lSQL); + + + if (pressedAlt) and (pressedShift) then + begin + aStrojBak:= kalendarAktStroj; + podm:= 'TabPrikaz.StavPrikazu=30 AND TabPrikaz.IDZakazModif=(SELECT ID FROM ' + tblZakazModif + ' WHERE Kod=N' + kalendarKodStroj.QuotedString + ')'; + podm:= podm + ' AND TabPrikaz.IDTabKmen NOT IN (SELECT ID FROM ' + tblKZ + ' WHERE SkupZbo=N''701'' OR Sluzba=1)'; + podm:= podm + ' AND TabPrikaz.ID NOT IN (SELECT IDPrikaz FROM ' + tblAdvKPlanDavky + ' WHERE IDStroje=' + kalendarAktStroj.ToString + ')'; + podm:= podm + ' AND TabPrikaz.Rada NOT IN (SELECT Rada FROM ' + tblPrikazRada + ' WHERE nazev LIKE N''%drb%'')'; + if (Helios.Prenos (bidVyrPrik, 'TabPrikaz.ID', oVar, podm, 'Vyberte pkaz', false)) then + begin + selIdVPr:= oVar; + SetLength(arrID, 1); + arrID[0]:= selIdVPr; + RozpadPrikazuNaDavkyKP (rozpisAktDatum, rozpisAktCasOd, arrID); + + NactiDataGridu; + grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf ([aStrojBak]), []); + + Screen.Cursor:= crHourGlass; + grdRozpis.LockDrawing; + + dm2.VymazRozpis (self); + kalendarAktStroj:= aStrojBak; + dm2.NactiDavkyPlanu (self, kalendarAktStroj); + + grdRozpis.UnlockDrawing; + Screen.Cursor:= crDefault; + end; + end; + end; // jeUdrzba=0 + + end; + + + + + procedure TformPlan.grdRozpisDblClick (Sender: TObject); + var f: TformPlanPaletListy; + begin + edtVyrobekCislo.Text:= edtVyrobekCislo.Text.Trim; + if (edtVyrobekCislo.Text<>'') then + begin + f:= TformPlanPaletListy.Create(self); + try + f.Helios:= Helios; + f.cisloZbo:= edtVyrobekCislo.Text; + f.cisloPrikazu:= edtZakazka.Text; + f.nazev:= edtVyrobekNazev.Text; + f.idPrikaz:= grdRozpis.DataSource.DataSet.FieldByName('colIDPrikaz').AsInteger; + f.ksVKA:= edtRozpisKsVKA.ValueInt; + f.KAnaPal:= edtRozpisKAnaPal.ValueInt; + f.ShowModal; + finally + FreeAndNil (f); + end; + end; + end; + + + + + procedure TformPlan.grdRozpisDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + TJvDBGrid(Sender).Canvas.Brush.Color:= $00E0E4E5; // RGB E5E4E0 + + if (Column.FieldName='colMnozHotovo') then + begin + if (gdSelected in State) then + TJvDBGrid(Sender).Canvas.Font.Color:= clBlack; + TJvDBGrid(Sender).Canvas.Brush.Color:= $00C7FCF9; // RGB F9FCC7 + end; + + TJvDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformPlan.grdRozpisMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pressedShift:= (Shift * [ssShift, ssAlt, ssCtrl] = [ssShift]); + pressedAlt:= (Shift * [ssShift, ssAlt, ssCtrl] = [ssAlt]); + if (Shift * [ssShift, ssAlt, ssCtrl] = [ssShift] + [ssAlt]) then + begin + pressedShift:= true; + pressedAlt:= true; + end; + end; + + + + + + procedure TformPlan.grdRozpisTitleClick (Column: TColumn); + begin + Helios.Info (Column.FieldName + ' >> koef. ' + (Column.Width/grdRozpis.Width).ToString ); + end; + + + + + procedure TformPlan.sgCasDblClick (Sender: TObject); + var f: TformVyberTydne; + begin + if (sgCas.Col=1) and (sgCas.Row=1) then + begin + f:= TformVyberTydne.Create (nil); + try + if (sgCas.Cells[0,1]<>'') then + f.rok:= sgCas.Cells[0,1].ToInteger; + if (sgCas.Cells[1,1]<>'') then + f.tyden:= sgCas.Cells[1,1].ToInteger; + f.retVal:= 0; + f.ShowModal; + if (f.retVal=10) then + begin + sgCas.Cells[0,1]:= f.rok.ToString; + sgCas.Cells[1,1]:= f.tyden.ToString; + sgCas.Cells[2,1]:= f.datOd; + sgCas.Cells[3,1]:= f.datDo; + sgCas.Invalidate; + NactiDataGridu; + end; + finally + f.Free; + end; + end; + + end; + + + + + procedure TformPlan.sgCasDrawCell (Sender: TObject; ACol, ARow: LongInt; Rect: TRect; State: TGridDrawState); + var mamBarvu: boolean; + s: string; + TextFormat: TTextFormatFlags; + tW, tH, x, y: Integer; + begin + mamBarvu:= false; + with Sender as TJvStringGrid do + begin + s:= Cells[ACol, ARow]; + tW:= Canvas.TextWidth (s); + tH:= Canvas.TextHeight (s); + x:= Rect.Left + (Rect.Width - tW) div 2; + y:= Rect.Top + (Rect.Height - tH) div 2; + + Canvas.Brush.Color := Color; // Set to grid background color + Canvas.FillRect(Rect); + + if (ARow=0) then + begin + Canvas.Brush.Color:= $00B8C4C8; // Set your desired color - RGB C8C4B8 - seda + mamBarvu:= true; + end + else + if (ACol=1) then + begin + Canvas.Brush.Color:= $C6FECF; // Set your desired color here + mamBarvu:= true; + end + else + begin + Canvas.Brush.Color:= $E5E4DF; + mamBarvu:= true; + end; + + if (mamBarvu) then + begin + Canvas.FillRect(Rect); // Fill the cell background (clear cell) + Canvas.TextOut(x, y, s); // Draw the cell text + end; + + DefaultDrawCell (ACol, ARow, Rect, State); +// Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]); + end; + end; + + + + + procedure TformPlan.sgCasSelectCell (Sender: TObject; ACol, ARow: LongInt; var CanSelect: Boolean); + begin + CanSelect:= ((ACol=1) and (ARow=1)); + end; + + + + + procedure TformPlan.FormDestroy (Sender: TObject); + begin + if (datMod2.dm2<>nil) then + FreeAndNil (datMod2.dm2); + end; + + +end. diff --git a/_plgPlan/frmPlanPaletListy.dfm b/_plgPlan/frmPlanPaletListy.dfm new file mode 100644 index 0000000..36f6090 --- /dev/null +++ b/_plgPlan/frmPlanPaletListy.dfm @@ -0,0 +1,1101 @@ +object formPlanPaletListy: TformPlanPaletListy + Left = 0 + Top = 0 + Caption = 'Paletov'#233' listy zak'#225'zky' + ClientHeight = 795 + ClientWidth = 604 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 15 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 604 + Height = 795 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel2 + Row = 0 + end + item + Column = 0 + Control = GridPanel3 + Row = 1 + end> + RowCollection = < + item + Value = 60.000000000000000000 + end + item + Value = 40.000000000000000000 + end> + TabOrder = 0 + object GridPanel2: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 596 + Height = 470 + Align = alClient + ColumnCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 40.000000000000000000 + end + item + Value = 40.000000000000000000 + end + item + Value = 10.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + ColumnSpan = 2 + Control = GridPanel4 + Row = 1 + end + item + Column = 1 + ColumnSpan = 2 + Control = GridPanel5 + Row = 2 + end + item + Column = 0 + ColumnSpan = 4 + Control = GridPanel6 + Row = 0 + end> + RowCollection = < + item + Value = 36.000000000000000000 + end + item + Value = 32.000000000000000000 + end + item + Value = 32.000000000000000000 + end> + TabOrder = 0 + object GridPanel4: TGridPanel + AlignWithMargins = True + Left = 63 + Top = 172 + Width = 470 + Height = 144 + Align = alClient + ColumnCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 46.000000000000000000 + end + item + Value = 22.000000000000000000 + end + item + Value = 22.000000000000000000 + end> + ControlCollection = < + item + Column = 2 + Control = pnlKATiskSarzeAno + Row = 0 + end + item + Column = 3 + Control = pnlKATiskSarzeNe + Row = 0 + end + item + Column = 2 + Control = pnlKATiskExpiraceAno + Row = 1 + end + item + Column = 3 + Control = pnlKATiskExpiraceNe + Row = 1 + end + item + Column = 2 + ColumnSpan = 2 + Control = btnKATisk + Row = 2 + end + item + Column = 0 + Control = Label1 + Row = 0 + RowSpan = 3 + end + item + Column = 1 + Control = Label2 + Row = 0 + end + item + Column = 1 + Control = Label3 + Row = 1 + end> + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + RowCollection = < + item + Value = 37.537009144953850000 + end + item + Value = 37.537009144953850000 + end + item + Value = 24.925981710092300000 + end> + TabOrder = 0 + DesignSize = ( + 470 + 144) + object pnlKATiskSarzeAno: TPanel + Left = 263 + Top = 1 + Width = 103 + Height = 53 + Align = alClient + Color = clMoneyGreen + ParentBackground = False + TabOrder = 0 + OnClick = pnlKATiskSarzeAnoClick + object rbKATiskSarzeAno: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 95 + Height = 45 + Align = alClient + Caption = 'Ano' + Checked = True + TabOrder = 0 + TabStop = True + OnClick = rbKATiskSarzeAnoClick + end + end + object pnlKATiskSarzeNe: TPanel + Left = 366 + Top = 1 + Width = 103 + Height = 53 + Align = alClient + FullRepaint = False + ParentBackground = False + TabOrder = 1 + OnClick = pnlKATiskSarzeNeClick + object rbKATiskSarzeNe: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 95 + Height = 45 + Align = alClient + Caption = 'Ne' + TabOrder = 0 + OnClick = rbKATiskSarzeNeClick + end + end + object pnlKATiskExpiraceAno: TPanel + Left = 263 + Top = 54 + Width = 103 + Height = 54 + Align = alClient + Color = clMoneyGreen + ParentBackground = False + TabOrder = 2 + OnClick = pnlKATiskExpiraceAnoClick + object rbKATiskExpiraceAno: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 95 + Height = 46 + Align = alClient + Caption = 'Ano' + Checked = True + TabOrder = 0 + TabStop = True + OnClick = rbKATiskExpiraceAnoClick + end + end + object pnlKATiskExpiraceNe: TPanel + Left = 366 + Top = 54 + Width = 103 + Height = 54 + Align = alClient + FullRepaint = False + ParentBackground = False + TabOrder = 3 + OnClick = pnlKATiskExpiraceNeClick + object rbKATiskExpiraceNe: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 95 + Height = 46 + Align = alClient + Caption = 'Ne' + TabOrder = 0 + OnClick = rbKATiskExpiraceNeClick + end + end + object btnKATisk: TButton + Left = 318 + Top = 108 + Width = 96 + Height = 37 + Anchors = [] + Caption = 'Tisk' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 4 + OnClick = btnKATiskClick + end + object Label1: TLabel + Left = 5 + Top = 55 + Width = 38 + Height = 33 + Anchors = [] + Caption = 'KA' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -27 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitLeft = 1 + ExplicitTop = 46 + end + object Label2: TLabel + AlignWithMargins = True + Left = 51 + Top = 16 + Width = 46 + Height = 25 + Anchors = [akLeft] + Caption = #352'ar'#382'e' + ExplicitTop = 17 + end + object Label3: TLabel + AlignWithMargins = True + Left = 51 + Top = 70 + Width = 134 + Height = 25 + Anchors = [akLeft] + Caption = 'Datum spot'#345'eby' + end + end + object GridPanel5: TGridPanel + AlignWithMargins = True + Left = 63 + Top = 322 + Width = 470 + Height = 144 + Align = alClient + ColumnCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 46.000000000000000000 + end + item + Value = 22.000000000000000000 + end + item + Value = 22.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label4 + Row = 0 + RowSpan = 2 + end + item + Column = 1 + Control = lblPaPopis1 + Row = 0 + end + item + Column = 1 + Control = lblPaPopis2 + Row = 1 + end + item + Column = 2 + ColumnSpan = 2 + Control = btnTiskPA1 + Row = 0 + end + item + Column = 2 + ColumnSpan = 2 + Control = btnTiskPA2 + Row = 1 + end> + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 470 + 144) + object Label4: TLabel + Left = 5 + Top = 58 + Width = 38 + Height = 28 + Anchors = [] + Caption = 'Pa' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -27 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitTop = 50 + end + object lblPaPopis1: TLabel + AlignWithMargins = True + Left = 51 + Top = 25 + Width = 96 + Height = 25 + Anchors = [akLeft] + Caption = 'lblPaPopis1' + ExplicitTop = 18 + end + object lblPaPopis2: TLabel + AlignWithMargins = True + Left = 51 + Top = 96 + Width = 96 + Height = 25 + Anchors = [akLeft] + Caption = 'lblPaPopis2' + ExplicitTop = 18 + end + object btnTiskPA1: TButton + Left = 318 + Top = 18 + Width = 96 + Height = 37 + Anchors = [] + Caption = 'Tisk' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 0 + end + object btnTiskPA2: TButton + Left = 318 + Top = 89 + Width = 96 + Height = 37 + Anchors = [] + Caption = 'Tisk' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 1 + end + end + object GridPanel6: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 588 + Height = 162 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel7 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel8 + Row = 1 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel9 + Row = 2 + end> + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -21 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + RowCollection = < + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333310000 + end> + TabOrder = 2 + object GridPanel7: TGridPanel + Left = 1 + Top = 1 + Width = 586 + Height = 53 + Align = alClient + ColumnCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = Label5 + Row = 0 + end + item + Column = 3 + Control = Label6 + Row = 0 + end + item + Column = 1 + Control = edtZakazka + Row = 1 + end + item + Column = 3 + Control = edtExtZakazka + Row = 1 + end + item + Column = 0 + Control = btnKonec + Row = 0 + RowSpan = 2 + end> + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + RowCollection = < + item + Value = 35.000000000000000000 + end + item + Value = 65.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 586 + 53) + object Label5: TLabel + AlignWithMargins = True + Left = 150 + Top = 1 + Width = 140 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = 'Zak'#225'zka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 46 + end + object Label6: TLabel + AlignWithMargins = True + Left = 442 + Top = 1 + Width = 140 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = 'Extern'#237' zak'#225'zka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 88 + end + object edtZakazka: TEdit + AlignWithMargins = True + Left = 159 + Top = 19 + Width = 121 + Height = 33 + Margins.Top = 0 + Alignment = taCenter + Anchors = [] + Color = 15132390 + ReadOnly = True + TabOrder = 0 + end + object edtExtZakazka: TEdit + AlignWithMargins = True + Left = 451 + Top = 19 + Width = 121 + Height = 33 + Margins.Top = 0 + Alignment = taCenter + Anchors = [] + Color = 15132390 + ReadOnly = True + TabOrder = 1 + end + object btnKonec: TButton + Left = 1 + Top = 1 + Width = 58 + Height = 41 + ImageAlignment = iaCenter + ImageIndex = 2 + ImageName = 'Item3' + Images = dm2.imgList + TabOrder = 2 + OnClick = btnKonecClick + end + end + object GridPanel8: TGridPanel + Left = 1 + Top = 54 + Width = 586 + Height = 54 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = Label7 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = edtNazev + Row = 1 + end> + RowCollection = < + item + Value = 35.000000000000000000 + end + item + Value = 65.000000000000000000 + end> + TabOrder = 1 + object Label7: TLabel + AlignWithMargins = True + Left = 4 + Top = 1 + Width = 578 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = 'N'#225'zev' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 36 + end + object edtNazev: TEdit + AlignWithMargins = True + Left = 21 + Top = 19 + Width = 544 + Height = 31 + Margins.Left = 20 + Margins.Top = 0 + Margins.Right = 20 + Align = alClient + Color = 15132390 + ReadOnly = True + TabOrder = 0 + ExplicitHeight = 38 + end + end + object GridPanel9: TGridPanel + Left = 1 + Top = 108 + Width = 586 + Height = 53 + Align = alClient + ColumnCollection = < + item + Value = 16.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 16.000000000000000000 + end + item + Value = 16.000000000000000000 + end + item + Value = 37.000000000000000000 + end + item + Value = 5.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = Label8 + Row = 0 + end + item + Column = 2 + Control = Label9 + Row = 0 + end + item + Column = 3 + Control = Label10 + Row = 0 + end + item + Column = 4 + Control = Label11 + Row = 0 + end + item + Column = 4 + Control = edtBarvaStitku + Row = 1 + end + item + Column = 3 + Control = edtStitkuNaA4 + Row = 1 + end + item + Column = 2 + Control = edtRegCis + Row = 1 + end + item + Column = 1 + Control = edtSZ + Row = 1 + end> + RowCollection = < + item + Value = 35.000000000000000000 + end + item + Value = 65.000000000000000000 + end> + TabOrder = 2 + object Label8: TLabel + AlignWithMargins = True + Left = 97 + Top = 1 + Width = 53 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = 'SK' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 15 + end + object Label9: TLabel + AlignWithMargins = True + Left = 156 + Top = 1 + Width = 87 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = 'RegCis' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 40 + end + object Label10: TLabel + AlignWithMargins = True + Left = 249 + Top = 1 + Width = 88 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = #352't'#237'tk'#367'/A4' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 51 + end + object Label11: TLabel + AlignWithMargins = True + Left = 343 + Top = 1 + Width = 210 + Height = 17 + Margins.Top = 0 + Margins.Bottom = 1 + Align = alClient + Alignment = taCenter + Caption = 'Barva '#353't'#237'tk'#367 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ExplicitWidth = 66 + end + object edtBarvaStitku: TEdit + AlignWithMargins = True + Left = 343 + Top = 19 + Width = 210 + Height = 30 + Margins.Top = 0 + Align = alClient + Alignment = taCenter + Color = 15132390 + ReadOnly = True + TabOrder = 0 + ExplicitHeight = 38 + end + object edtStitkuNaA4: TEdit + AlignWithMargins = True + Left = 249 + Top = 19 + Width = 88 + Height = 30 + Margins.Top = 0 + Align = alClient + Alignment = taCenter + Color = 15132390 + ReadOnly = True + TabOrder = 1 + ExplicitHeight = 38 + end + object edtRegCis: TEdit + AlignWithMargins = True + Left = 156 + Top = 19 + Width = 87 + Height = 30 + Margins.Top = 0 + Align = alClient + Alignment = taCenter + Color = 15132390 + ReadOnly = True + TabOrder = 2 + ExplicitHeight = 38 + end + object edtSZ: TEdit + AlignWithMargins = True + Left = 97 + Top = 19 + Width = 53 + Height = 30 + Margins.Top = 0 + Align = alClient + Alignment = taCenter + Color = 15132390 + ReadOnly = True + TabOrder = 3 + ExplicitHeight = 38 + end + end + end + end + object GridPanel3: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 480 + Width = 596 + Height = 311 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdPL + Row = 1 + end + item + Column = 0 + Control = GridPanel10 + Row = 0 + end> + RowCollection = < + item + Value = 15.000000000000000000 + end + item + Value = 85.000000000000000000 + end> + TabOrder = 1 + object grdPL: TJvDBGrid + Left = 1 + Top = 47 + Width = 594 + Height = 263 + Align = alClient + DataSource = dm2.dsPlanPL + DrawingStyle = gdsClassic + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit] + ParentFont = False + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -13 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnCellClick = grdPLCellClick + ScrollBars = ssVertical + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + AutoSizeRows = False + RowsHeight = 30 + TitleRowHeight = 30 + Delphi2010OptionsMigrated = True + end + object GridPanel10: TGridPanel + Left = 1 + Top = 1 + Width = 594 + Height = 46 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = Button3 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel11 + Row = 1 + end> + RowCollection = < + item + Value = 65.069746634674030000 + end + item + Value = 34.930253365325960000 + end> + TabOrder = 1 + DesignSize = ( + 594 + 46) + object Button3: TButton + AlignWithMargins = True + Left = 183 + Top = 1 + Width = 228 + Height = 27 + Margins.Top = 0 + Anchors = [] + Caption = 'Kontrola Label Zebra' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 0 + end + object GridPanel11: TGridPanel + Left = 1 + Top = 30 + Width = 592 + Height = 15 + Align = alClient + ColumnCollection = < + item + Value = 15.000000000000000000 + end + item + Value = 58.000000000000000000 + end + item + Value = 21.000000000000000000 + end + item + Value = 6.000000000000000000 + end> + ControlCollection = < + item + Column = 2 + Control = Label12 + Row = 0 + end + item + Column = 1 + Control = Label13 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 592 + 15) + object Label12: TLabel + Left = 467 + Top = 1 + Width = 53 + Height = 15 + Anchors = [] + Caption = 'Na palet'#283':' + ExplicitLeft = 486 + end + object Label13: TLabel + Left = 238 + Top = 1 + Width = 45 + Height = 15 + Anchors = [] + Caption = 'Datumy:' + ExplicitLeft = 239 + end + end + end + end + end +end diff --git a/_plgPlan/frmPlanPaletListy.pas b/_plgPlan/frmPlanPaletListy.pas new file mode 100644 index 0000000..2d4cc96 --- /dev/null +++ b/_plgPlan/frmPlanPaletListy.pas @@ -0,0 +1,312 @@ +unit frmPlanPaletListy; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, + JvDBGrid, Vcl.StdCtrls, ddPlugin_TLB; + +type + TformPlanPaletListy = class(TForm) + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + grdPL: TJvDBGrid; + GridPanel4: TGridPanel; + GridPanel5: TGridPanel; + pnlKATiskSarzeAno: TPanel; + pnlKATiskSarzeNe: TPanel; + rbKATiskSarzeAno: TRadioButton; + rbKATiskSarzeNe: TRadioButton; + pnlKATiskExpiraceAno: TPanel; + rbKATiskExpiraceAno: TRadioButton; + rbKATiskExpiraceNe: TRadioButton; + pnlKATiskExpiraceNe: TPanel; + btnKATisk: TButton; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + lblPaPopis1: TLabel; + lblPaPopis2: TLabel; + btnTiskPA1: TButton; + btnTiskPA2: TButton; + GridPanel6: TGridPanel; + GridPanel7: TGridPanel; + GridPanel8: TGridPanel; + GridPanel9: TGridPanel; + Label5: TLabel; + Label6: TLabel; + edtZakazka: TEdit; + edtExtZakazka: TEdit; + Label7: TLabel; + edtNazev: TEdit; + Label8: TLabel; + Label9: TLabel; + Label10: TLabel; + Label11: TLabel; + edtBarvaStitku: TEdit; + edtStitkuNaA4: TEdit; + edtRegCis: TEdit; + edtSZ: TEdit; + GridPanel10: TGridPanel; + Button3: TButton; + GridPanel11: TGridPanel; + Label12: TLabel; + Label13: TLabel; + btnKonec: TButton; + procedure btnKonecClick (Sender: TObject); + procedure FormShow (Sender: TObject); + procedure rbKATiskSarzeAnoClick (Sender: TObject); + procedure rbKATiskSarzeNeClick (Sender: TObject); + procedure rbKATiskExpiraceAnoClick (Sender: TObject); + procedure rbKATiskExpiraceNeClick (Sender: TObject); + procedure pnlKATiskSarzeAnoClick (Sender: TObject); + procedure pnlKATiskSarzeNeClick (Sender: TObject); + procedure pnlKATiskExpiraceAnoClick (Sender: TObject); + procedure pnlKATiskExpiraceNeClick (Sender: TObject); + procedure grdPLCellClick (Column: TColumn); + procedure btnKATiskClick (Sender: TObject); + private + procedure BarvyTlacitekDleRB; + public + Helios: IHelios; + cisloZbo, nazev, cisloPrikazu: string; + idRadekAdvPL, idPrikaz: integer; + ksVKA: integer; + KAnaPal: integer; + end; + +var + formPlanPaletListy: TformPlanPaletListy; + idKZ, selIdVCPrikaz: integer; + idStitekKA, idStitekPL, idPLList: integer; + +implementation +uses System.DateUtils, System.StrUtils, System.Math, + frmKmen, frmZavady, frmVyrobniTyden, + uUtils, datMod2, helUtils; + +{$R *.dfm} + + + procedure TformPlanPaletListy.BarvyTlacitekDleRB; + begin + if (rbKATiskExpiraceAno.Checked) then + begin + pnlKATiskExpiraceAno.Color:= clMoneyGreen; + rbKATiskSarzeAno.Color:= clMoneyGreen; + end + else + begin + pnlKATiskExpiraceAno.Color:= clBtnFace; + rbKATiskSarzeAno.Color:= clBtnFace; + end; + + if (rbKATiskExpiraceNe.Checked) then + begin + pnlKATiskExpiraceNe.Color:= $005B5BFF; + rbKATiskExpiraceNe.Color:= $005B5BFF; + end + else + begin + pnlKATiskExpiraceNe.Color:= clBtnFace; + rbKATiskExpiraceNe.Color:= clBtnFace; + end; + + + if (rbKATiskSarzeAno.Checked) then + begin + pnlKATiskSarzeAno.Color:= clMoneyGreen; + rbKATiskSarzeAno.Color:= clMoneyGreen; + end + else + begin + pnlKATiskSarzeAno.Color:= clBtnFace; + rbKATiskSarzeAno.Color:= clBtnFace; + end; + + if (rbKATiskSarzeNe.Checked) then + begin + pnlKATiskSarzeNe.Color:= $005B5BFF; + rbKATiskSarzeNe.Color:= $005B5BFF; + end + else + begin + pnlKATiskSarzeNe.Color:= clBtnFace; + rbKATiskSarzeNe.Color:= clBtnFace; + end; + end; + + + + + procedure TformPlanPaletListy.btnKATiskClick (Sender: TObject); + var lSQL: string; + begin + if (selIdVCPrikaz>0) then + begin + lSQL:= 'IF OBJECT_ID(N''tempdb..#TabParamTiskStitkuKA'', N''U'') IS NOT NULL INSERT #TabParamTiskStitkuKA (TiskSarze, TiskExpirace) SELECT ' + + IfThen(rbKATiskSarzeAno.Checked, '1', '0') + ', ' + IfThen(rbKATiskExpiraceAno.Checked, '1', '0'); + Helios.ExecSQL (lSQL); + + if (idStitekKA>0) then + Helios.PrintForm3 (datMod2.bidPalety, idStitekKA, 'hvw_Vyroba_Palety.IDVyrCisPrikaz=' + selIdVCPrikaz.ToString); + end; + end; + + + + + procedure TformPlanPaletListy.btnKonecClick (Sender: TObject); + begin + Close; + end; + + + + + procedure TformPlanPaletListy.FormShow (Sender: TObject); + var lSQL, externiZak: string; + + begin + selIdVCPrikaz:= 0; + idStitekKA:= 0; + idStitekPL:= 0; + idPLList:= 0; + + + lSQL:= 'DROP TABLE IF EXISTS #TabParamTiskStitkuKA' + CRLF + 'CREATE TABLE #TabParamTiskStitkuKA (ID INT IDENTITY(1,1) NOT NULL' + + ', PocetKopii SMALLINT DEFAULT 1 NOT NULL, TiskSarze BIT DEFAULT 1 NOT NULL, TiskExpirace BIT DEFAULT 1 NOT NULL)'; + Helios.ExecSQL (lSQL); + + + edtNazev.Text:= nazev; + if (cisloZbo<>'') then + begin + edtSZ.Text:= LeftStr(cisloZbo,3); + edtRegCis.Text:= MidStr(cisloZbo, 5, 30); + end; + edtZakazka.Text:= cisloPrikazu; + + externiZak:= ''; + if (idPrikaz>0) then + begin + dm2.PlanPalListyNactiSarzePrikazu (idPrikaz, ksVKA, externiZak); + idKZ:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idPrikaz.ToString); + if (idKZ>0) then + begin + with Helios.OpenSQL('SELECT * FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString) do + begin + end; + with Helios.OpenSQL('SELECT * FROM ' + tblKZe + ' WHERE ID=' + idKZ.ToString) do + begin + edtBarvaStitku.Text:= VarToStr(FieldByNameValues('_ASOL_BarvaStitku')); + edtStitkuNaA4.Text:= VarToStr(FieldByNameValues('_ASOL_PocetA4')); + +// KA stitek + if not(TryStrToInt (VarToStr(FieldByNameValues('_KL')), idStitekKA)) then + idStitekKA:= 0; +// PL stitek + if not(TryStrToInt (VarToStr(FieldByNameValues('_PalStitek')), idStitekPL)) then + idStitekPL:= 0; +// PL list + if not(TryStrToInt (VarToStr(FieldByNameValues('_PLKK')), idPLList)) then + idPLList:= 0; + end; + end; + end; + + + if (externiZak<>'') then + edtExtZakazka.Text:= externiZak; + +// edtStitkuNaA4.Text:= + end; + + + + + procedure TformPlanPaletListy.grdPLCellClick (Column: TColumn); + begin + selIdVCPrikaz:= grdPL.DataSource.DataSet.FieldByName('IDVCPrikaz').AsInteger; + end; + + + + + procedure TformPlanPaletListy.pnlKATiskExpiraceAnoClick (Sender: TObject); + begin + rbKATiskExpiraceAno.Checked:= not rbKATiskExpiraceAno.Checked; + rbKATiskExpiraceNe.Checked:= not rbKATiskExpiraceNe.Checked; + end; + + + + + procedure TformPlanPaletListy.pnlKATiskExpiraceNeClick (Sender: TObject); + begin + rbKATiskExpiraceAno.Checked:= not rbKATiskExpiraceAno.Checked; + rbKATiskExpiraceNe.Checked:= not rbKATiskExpiraceNe.Checked; + end; + + + + + procedure TformPlanPaletListy.pnlKATiskSarzeAnoClick (Sender: TObject); + begin + rbKATiskSarzeAno.Checked:= not rbKATiskSarzeAno.Checked; + rbKATiskSarzeNe.Checked:= not rbKATiskSarzeNe.Checked; + end; + + + + + procedure TformPlanPaletListy.pnlKATiskSarzeNeClick (Sender: TObject); + begin + rbKATiskSarzeAno.Checked:= not rbKATiskSarzeAno.Checked; + rbKATiskSarzeNe.Checked:= not rbKATiskSarzeNe.Checked; + end; + + + + + procedure TformPlanPaletListy.rbKATiskExpiraceAnoClick (Sender: TObject); + begin + if (rbKATiskExpiraceAno.Checked) then + rbKATiskExpiraceNe.Checked:= false; + BarvyTlacitekDleRB; + end; + + + + + procedure TformPlanPaletListy.rbKATiskExpiraceNeClick (Sender: TObject); + begin + if (rbKATiskExpiraceNe.Checked) then + rbKATiskExpiraceAno.Checked:= false; + BarvyTlacitekDleRB; + end; + + + + + procedure TformPlanPaletListy.rbKATiskSarzeAnoClick (Sender: TObject); + begin + if (rbKATiskSarzeAno.Checked) then + rbKATiskSarzeNe.Checked:= false; + BarvyTlacitekDleRB; + end; + + + + + procedure TformPlanPaletListy.rbKATiskSarzeNeClick (Sender: TObject); + begin + if (rbKATiskSarzeNe.Checked) then + rbKATiskSarzeAno.Checked:= false; + BarvyTlacitekDleRB; + end; + +end. diff --git a/_plgPlan/frmRamcovyPlan.dfm b/_plgPlan/frmRamcovyPlan.dfm new file mode 100644 index 0000000..24699ee --- /dev/null +++ b/_plgPlan/frmRamcovyPlan.dfm @@ -0,0 +1,1245 @@ +object formRamcovyPlan: TformRamcovyPlan + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' R'#225'mcov'#253' pl'#225'n v'#253'roby' + ClientHeight = 803 + ClientWidth = 1382 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + TextHeight = 21 + object GridPanel1: TGridPanel + AlignWithMargins = True + Left = 5 + Top = 5 + Width = 1372 + Height = 793 + Margins.Left = 5 + Margins.Top = 5 + Margins.Right = 5 + Margins.Bottom = 5 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel2 + Row = 0 + end + item + Column = 0 + Control = JvDBGrid1 + Row = 3 + end + item + Column = 0 + Control = Label4 + Row = 1 + end + item + Column = 0 + Control = GridPanel6 + Row = 2 + end> + RowCollection = < + item + Value = 18.000000000000000000 + end + item + Value = 5.000000000000000000 + end + item + Value = 4.000000000000000000 + end + item + Value = 73.000000000000000000 + end> + TabOrder = 0 + object GridPanel2: TGridPanel + AlignWithMargins = True + Left = 6 + Top = 6 + Width = 1360 + Height = 132 + Margins.Left = 5 + Margins.Top = 5 + Margins.Right = 5 + Margins.Bottom = 5 + Align = alClient + ColumnCollection = < + item + Value = 15.000000000000000000 + end + item + Value = 15.000000000000000000 + end + item + Value = 45.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 4.999999999999996000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel3 + Row = 0 + end + item + Column = 1 + Control = GridPanel4 + Row = 0 + end + item + Column = 2 + Control = GridPanel5 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + object GridPanel3: TGridPanel + Left = 1 + Top = 1 + Width = 204 + Height = 130 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label1 + Row = 0 + end + item + Column = 0 + Control = cbAkce + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 204 + 130) + object Label1: TLabel + AlignWithMargins = True + Left = 84 + Top = 22 + Width = 36 + Height = 21 + Margins.Bottom = 3 + Alignment = taCenter + Anchors = [] + Caption = 'Akce:' + ExplicitLeft = 87 + ExplicitTop = 25 + end + object cbAkce: TRzComboBox + AlignWithMargins = True + Left = 22 + Top = 84 + Width = 160 + Height = 29 + Margins.Top = 0 + Anchors = [] + Style = csDropDownList + TabOrder = 0 + end + end + object GridPanel4: TGridPanel + Left = 205 + Top = 1 + Width = 203 + Height = 130 + Align = alClient + ColumnCollection = < + item + Value = 30.000000000000000000 + end + item + Value = 70.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label2 + Row = 0 + end + item + Column = 1 + Control = cbSezona + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 203 + 130) + object Label2: TLabel + AlignWithMargins = True + Left = 6 + Top = 54 + Width = 53 + Height = 21 + Margins.Right = 0 + Margins.Bottom = 3 + Alignment = taCenter + Anchors = [] + Caption = 'Sezona:' + ExplicitLeft = 12 + ExplicitTop = 57 + end + object cbSezona: TRzComboBox + AlignWithMargins = True + Left = 77 + Top = 53 + Width = 106 + Height = 29 + Margins.Left = 0 + Anchors = [] + Style = csDropDownList + TabOrder = 0 + end + end + object GridPanel5: TGridPanel + AlignWithMargins = True + Left = 411 + Top = 4 + Width = 606 + Height = 124 + Align = alClient + ColumnCollection = < + item + Value = 20.000000000000000000 + end + item + Value = 12.500000000000000000 + end + item + Value = 11.700000000000000000 + end + item + Value = 23.000000000000000000 + end + item + Value = 32.800000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label3 + Row = 0 + end + item + Column = 4 + Control = BitBtn1 + Row = 0 + end + item + Column = 1 + ColumnSpan = 3 + Control = grdAlternativy + Row = 1 + end + item + Column = 1 + Control = edtKalibr + Row = 0 + end + item + Column = 2 + Control = edtDelkaJm + Row = 0 + end + item + Column = 3 + Control = edtStroj + Row = 0 + end> + RowCollection = < + item + Value = 30.000000000000000000 + end + item + Value = 70.000000000000000000 + end> + TabOrder = 2 + DesignSize = ( + 606 + 124) + object Label3: TLabel + Left = 24 + Top = 9 + Width = 75 + Height = 21 + Anchors = [] + Caption = 'Alternativa' + ExplicitLeft = 33 + ExplicitTop = 12 + end + object BitBtn1: TBitBtn + Left = 407 + Top = 1 + Width = 25 + Height = 37 + Align = alLeft + ImageIndex = 7 + ImageName = 'Item8' + Images = dm2.imgList + TabOrder = 0 + end + object grdAlternativy: TJvDBGrid + Left = 122 + Top = 38 + Width = 285 + Height = 85 + Align = alClient + DataSource = dm2.dsRPlanAlter + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 19 + Columns = < + item + Expanded = False + FieldName = 'Kalibr' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 70 + Visible = True + end + item + Expanded = False + FieldName = 'DelkaJm' + Title.Alignment = taCenter + Title.Caption = 'D'#233'lka jm.' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 70 + Visible = True + end + item + Expanded = False + FieldName = 'Stroj' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 145 + Visible = True + end> + end + object edtKalibr: TEdit + AlignWithMargins = True + Left = 122 + Top = 4 + Width = 72 + Height = 31 + Margins.Left = 0 + Align = alClient + MaxLength = 15 + TabOrder = 2 + ExplicitHeight = 29 + end + object edtDelkaJm: TEdit + AlignWithMargins = True + Left = 197 + Top = 4 + Width = 68 + Height = 31 + Margins.Left = 0 + Align = alClient + MaxLength = 15 + TabOrder = 3 + ExplicitHeight = 29 + end + object edtStroj: TEdit + AlignWithMargins = True + Left = 268 + Top = 4 + Width = 136 + Height = 31 + Margins.Left = 0 + Align = alClient + MaxLength = 30 + TabOrder = 4 + ExplicitHeight = 29 + end + end + end + object JvDBGrid1: TJvDBGrid + AlignWithMargins = True + Left = 4 + Top = 218 + Width = 1364 + Height = 571 + Align = alClient + DataSource = dm2.dsRamcovyPlan + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 19 + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'SZ' + Title.Alignment = taCenter + Title.Caption = 'SK' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 36 + Visible = True + end + item + Expanded = False + FieldName = 'RegCis' + Title.Alignment = taCenter + Title.Caption = #268#237'slo' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 96 + Visible = True + end + item + Expanded = False + FieldName = 'Nazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 240 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'MJ' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 31 + Visible = True + end + item + Expanded = False + FieldName = 'Ks' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 45 + Visible = True + end + item + Expanded = False + FieldName = 'KA' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 46 + Visible = True + end + item + Expanded = False + FieldName = 'CisloOrg' + Title.Alignment = taCenter + Title.Caption = 'Odb'#283'ratel' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 65 + Visible = True + end + item + Expanded = False + FieldName = 'M01' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M02' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M03' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M04' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M05' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M06' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M07' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M08' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M09' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M10' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M11' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'M12' + Title.Alignment = taCenter + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 35 + Visible = True + end + item + Expanded = False + FieldName = 'Sumace' + Title.Alignment = taCenter + Title.Caption = 'Suma' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 55 + Visible = True + end + item + Expanded = False + FieldName = 'Vyroba' + Title.Alignment = taCenter + Title.Caption = 'V'#253'roba' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 58 + Visible = True + end + item + Expanded = False + FieldName = 'Zbyva' + Title.Alignment = taCenter + Title.Caption = 'Zb'#253'va' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 55 + Visible = True + end + item + Expanded = False + FieldName = 'SklRoo' + Title.Alignment = taCenter + Title.Caption = 'Roo' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 53 + Visible = True + end + item + Expanded = False + FieldName = 'SklTvin' + Title.Alignment = taCenter + Title.Caption = 'Tvin' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 57 + Visible = True + end + item + Expanded = False + FieldName = 'Alter' + Title.Alignment = taCenter + Title.Caption = 'Alter.' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 41 + Visible = True + end + item + Expanded = False + FieldName = 'MimoPlan' + Title.Alignment = taCenter + Title.Caption = ' ' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -12 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 22 + Visible = True + end> + end + object Label4: TLabel + Left = 1343 + Top = 119 + Width = 18 + Height = 59 + Align = alCustom + Alignment = taCenter + Caption = 'Mimo pl'#225'n' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + end + object GridPanel6: TGridPanel + Left = 1 + Top = 183 + Width = 1370 + Height = 32 + Align = alClient + ColumnCollection = < + item + Value = 1.000000000000000000 + end + item + Value = 3.000000000000000000 + end + item + Value = 7.050000000000000000 + end + item + Value = 17.500000000000000000 + end + item + Value = 2.450000000000000000 + end + item + Value = 3.200000000000000000 + end + item + Value = 3.500000000000000000 + end + item + Value = 4.850000000000000000 + end + item + Value = 2.600000000000000000 + end + item + Value = 2.600000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.650000000000000000 + end + item + Value = 2.600000000000000000 + end + item + Value = 2.600000000000000000 + end + item + Value = 25.850000000000010000 + end> + ControlCollection = < + item + Column = 1 + Control = edtSK + Row = 0 + end + item + Column = 2 + Control = edtRegCis + Row = 0 + end + item + Column = 3 + Control = edtNazev1 + Row = 0 + end + item + Column = 4 + Control = edtMJ + Row = 0 + end + item + Column = 5 + Control = edtKs + Row = 0 + end + item + Column = 6 + Control = edtKA + Row = 0 + end + item + Column = 7 + Control = edtOdber + Row = 0 + end + item + Column = 8 + Control = edtM01 + Row = 0 + end + item + Column = 9 + Control = edtM02 + Row = 0 + end + item + Column = 10 + Control = edtM03 + Row = 0 + end + item + Column = 11 + Control = edtM04 + Row = 0 + end + item + Column = 12 + Control = edtM05 + Row = 0 + end + item + Column = 13 + Control = edtM06 + Row = 0 + end + item + Column = 14 + Control = edtM07 + Row = 0 + end + item + Column = 15 + Control = edtM08 + Row = 0 + end + item + Column = 16 + Control = edtM09 + Row = 0 + end + item + Column = 17 + Control = edtM10 + Row = 0 + end + item + Column = 18 + Control = edtM11 + Row = 0 + end + item + Column = 19 + Control = edtM12 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + object edtSK: TEdit + AlignWithMargins = True + Left = 15 + Top = 1 + Width = 41 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 3 + TabOrder = 0 + ExplicitHeight = 29 + end + object edtRegCis: TEdit + AlignWithMargins = True + Left = 56 + Top = 1 + Width = 96 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 30 + TabOrder = 1 + ExplicitHeight = 29 + end + object edtNazev1: TEdit + AlignWithMargins = True + Left = 152 + Top = 1 + Width = 240 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 100 + TabOrder = 2 + ExplicitHeight = 29 + end + object edtMJ: TEdit + AlignWithMargins = True + Left = 392 + Top = 1 + Width = 33 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + MaxLength = 10 + TabOrder = 3 + ExplicitHeight = 29 + end + object edtKs: TEdit + AlignWithMargins = True + Left = 425 + Top = 1 + Width = 44 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + MaxLength = 8 + TabOrder = 4 + ExplicitHeight = 29 + end + object edtKA: TEdit + AlignWithMargins = True + Left = 469 + Top = 1 + Width = 48 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + MaxLength = 8 + TabOrder = 5 + ExplicitHeight = 29 + end + object edtOdber: TEdit + AlignWithMargins = True + Left = 517 + Top = 1 + Width = 66 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + MaxLength = 6 + TabOrder = 6 + ExplicitHeight = 29 + end + object edtM01: TEdit + AlignWithMargins = True + Left = 583 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 7 + ExplicitHeight = 29 + end + object edtM02: TEdit + AlignWithMargins = True + Left = 619 + Top = 1 + Width = 35 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 8 + ExplicitHeight = 29 + end + object edtM03: TEdit + AlignWithMargins = True + Left = 654 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 9 + ExplicitHeight = 29 + end + object edtM04: TEdit + AlignWithMargins = True + Left = 690 + Top = 1 + Width = 37 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 10 + ExplicitHeight = 29 + end + object edtM05: TEdit + AlignWithMargins = True + Left = 727 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 11 + ExplicitHeight = 29 + end + object edtM06: TEdit + AlignWithMargins = True + Left = 763 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 12 + ExplicitHeight = 29 + end + object edtM07: TEdit + AlignWithMargins = True + Left = 799 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 13 + ExplicitHeight = 29 + end + object edtM08: TEdit + AlignWithMargins = True + Left = 835 + Top = 1 + Width = 37 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 14 + ExplicitHeight = 29 + end + object edtM09: TEdit + AlignWithMargins = True + Left = 872 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 15 + ExplicitHeight = 29 + end + object edtM10: TEdit + AlignWithMargins = True + Left = 908 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 16 + ExplicitHeight = 29 + end + object edtM11: TEdit + AlignWithMargins = True + Left = 944 + Top = 1 + Width = 36 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 17 + ExplicitHeight = 29 + end + object edtM12: TEdit + AlignWithMargins = True + Left = 980 + Top = 1 + Width = 35 + Height = 30 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Align = alClient + MaxLength = 8 + TabOrder = 18 + ExplicitHeight = 29 + end + end + end +end diff --git a/_plgPlan/frmRamcovyPlan.pas b/_plgPlan/frmRamcovyPlan.pas new file mode 100644 index 0000000..8ce448f --- /dev/null +++ b/_plgPlan/frmRamcovyPlan.pas @@ -0,0 +1,63 @@ +unit frmRamcovyPlan; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, RzCmboBx, Vcl.Buttons, Data.DB, + Vcl.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid, ddPlugin_TLB; + +type + TformRamcovyPlan = class(TForm) + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + Label1: TLabel; + cbAkce: TRzComboBox; + GridPanel4: TGridPanel; + Label2: TLabel; + cbSezona: TRzComboBox; + GridPanel5: TGridPanel; + Label3: TLabel; + BitBtn1: TBitBtn; + grdAlternativy: TJvDBGrid; + JvDBGrid1: TJvDBGrid; + edtKalibr: TEdit; + edtDelkaJm: TEdit; + edtStroj: TEdit; + Label4: TLabel; + GridPanel6: TGridPanel; + edtSK: TEdit; + edtRegCis: TEdit; + edtNazev1: TEdit; + edtMJ: TEdit; + edtKs: TEdit; + edtKA: TEdit; + edtOdber: TEdit; + edtM01: TEdit; + edtM02: TEdit; + edtM03: TEdit; + edtM04: TEdit; + edtM05: TEdit; + edtM06: TEdit; + edtM07: TEdit; + edtM08: TEdit; + edtM09: TEdit; + edtM10: TEdit; + edtM11: TEdit; + edtM12: TEdit; + private + public + Helios: IHelios; + end; + +var + formRamcovyPlan: TformRamcovyPlan; + +implementation +uses System.StrUtils, + datMod2, helUtils; + +{$R *.dfm} + +end. diff --git a/_plgPlan/frmVyrobniTyden.dfm b/_plgPlan/frmVyrobniTyden.dfm new file mode 100644 index 0000000..f9e6683 --- /dev/null +++ b/_plgPlan/frmVyrobniTyden.dfm @@ -0,0 +1,93 @@ +object formVyberTydne: TformVyberTydne + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' V'#253'robn'#237' t'#253'den' + ClientHeight = 473 + ClientWidth = 311 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnShow = FormShow + TextHeight = 21 + object grdTydny: TJvDBGrid + Left = 4 + Top = 51 + Width = 303 + Height = 395 + DataSource = dm2.dsVyrobniTyden + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDblClick = grdTydnyDblClick + ScrollBars = ssVertical + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colRok' + Visible = False + end + item + Alignment = taCenter + Color = 13041359 + Expanded = False + FieldName = 'colTyden' + Title.Alignment = taCenter + Title.Caption = 'T'#253'den' + Width = 59 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatumOd' + Title.Alignment = taCenter + Title.Caption = 'Datum od' + Width = 100 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatumDo' + Title.Alignment = taCenter + Title.Caption = 'Datum do' + Width = 107 + Visible = True + end> + end + object cbRok: TComboBox + Left = 8 + Top = 12 + Width = 99 + Height = 29 + Style = csDropDownList + TabOrder = 1 + OnChange = cbRokChange + end + object btnDnes: TButton + Left = 196 + Top = 8 + Width = 105 + Height = 36 + Caption = 'Dnes' + TabOrder = 2 + OnClick = btnDnesClick + end +end diff --git a/_plgPlan/frmVyrobniTyden.pas b/_plgPlan/frmVyrobniTyden.pas new file mode 100644 index 0000000..d223d2f --- /dev/null +++ b/_plgPlan/frmVyrobniTyden.pas @@ -0,0 +1,118 @@ +unit frmVyrobniTyden; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid, + Vcl.StdCtrls; + +type + TformVyberTydne = class(TForm) + grdTydny: TJvDBGrid; + cbRok: TComboBox; + btnDnes: TButton; + procedure FormShow (Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure grdTydnyDblClick(Sender: TObject); + procedure cbRokChange(Sender: TObject); + procedure btnDnesClick(Sender: TObject); + private + procedure NactiKalendar (rok: integer; tyden: byte=0; autoIns: boolean=false); + public + rok, tyden: integer; + datOd, datDo: string; + retVal: integer; + end; + +var + formVyberTydne: TformVyberTydne; + +implementation +uses System.DateUtils, + helUtils, datMod2; +{$R *.dfm} + + + + procedure TformVyberTydne.btnDnesClick (Sender: TObject); + var t: integer; + begin + t:= System.DateUtils.WeekOf(Now); + grdTydny.DataSource.DataSet.Locate('colRok;colTyden', VarArrayOf([cbRok.Text, t]), []); + end; + + + + + procedure TformVyberTydne.cbRokChange (Sender: TObject); + begin + NactiKalendar (cbRok.Text.ToInteger); + end; + + + + + procedure TformVyberTydne.FormClose (Sender: TObject; var Action: TCloseAction); + begin + Action:= TCloseAction.caFree; + end; + + + + + procedure TformVyberTydne.NactiKalendar (rok: Integer; tyden: byte=0; autoIns: boolean=false); + var rNow, m: integer; + begin + retVal:= 0; + datOd:= ''; + datDo:= ''; + + rNow:= YearOf(Now); + if (autoIns) then + begin + cbRok.Items.Clear; + cbRok.Items.Add((rok-1).ToString); + cbRok.Items.Add(rok.ToString); + cbRok.Items.Add((rok+1).ToString); + cbRok.ItemIndex:= cbRok.Items.IndexOf(rok.ToString); + end; + + if (Assigned(datMod2.dm2)) then + begin + if (dm2.vtVyrobniTyden<>nil) then + dm2.NactiVyrobniTydny (rok); + + if (rok=rNow) then + m:= WeekOf(Now) + else + m:= System.DateUtils.WeeksInAYear (rok); + + if (tyden>0) then + m:= tyden; + dm2.vtVyrobniTyden.Locate ('colRok;colTyden', VarArrayOf ([rok, m]), []); + end; + end; + + + + + procedure TformVyberTydne.FormShow (Sender: TObject); + begin + NactiKalendar (YearOf(Now), tyden, true); + end; + + + + + procedure TformVyberTydne.grdTydnyDblClick (Sender: TObject); + begin + retVal:= 10; + tyden:= dm2.vtVyrobniTyden.FieldByName('colTyden').AsInteger; + rok:= dm2.vtVyrobniTyden.FieldByName('colRok').AsInteger; + datOd:= dm2.vtVyrobniTyden.FieldByName('colDatumOd').AsString; + datDo:= dm2.vtVyrobniTyden.FieldByName('colDatumDo').AsString; + Close; + end; + +end. diff --git a/_plgPlan/frmZavady.dfm b/_plgPlan/frmZavady.dfm new file mode 100644 index 0000000..d95afba --- /dev/null +++ b/_plgPlan/frmZavady.dfm @@ -0,0 +1,113 @@ +object formZavady: TformZavady + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + Caption = ' Vyberte '#250'dr'#382'bu' + ClientHeight = 470 + ClientWidth = 482 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnShow = FormShow + TextHeight = 21 + object grd1: TGridPanel + Left = 0 + Top = 0 + Width = 482 + Height = 470 + Align = alClient + Caption = 'grd1' + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Panel1 + Row = 1 + end> + RowCollection = < + item + Value = 5.000000000000000000 + end + item + Value = 95.000000000000000000 + end> + TabOrder = 0 + object Panel1: TPanel + Left = 1 + Top = 24 + Width = 480 + Height = 445 + Align = alClient + Anchors = [] + TabOrder = 0 + object grdZavady: TJvDBGrid + Left = 1 + Top = 1 + Width = 478 + Height = 443 + Align = alClient + DataSource = dm2.dsZavady + DrawingStyle = gdsClassic + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdZavadyDrawColumnCell + OnDblClick = grdZavadyDblClick + ScrollBars = ssVertical + SelectColumnsDialogStrings.Caption = 'Vyberte sloupce' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'Mus'#237' b'#253't viditeln'#253' aspo'#328' jeden sloupec !' + CanDelete = False + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colID' + Visible = False + end + item + Expanded = False + FieldName = 'colTyp' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKod' + Title.Alignment = taCenter + Title.Caption = 'Kod' + Width = 98 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Width = 352 + Visible = True + end + item + Expanded = False + FieldName = 'colIDPrikaz' + Visible = False + end> + end + end + end +end diff --git a/_plgPlan/frmZavady.pas b/_plgPlan/frmZavady.pas new file mode 100644 index 0000000..3ad524c --- /dev/null +++ b/_plgPlan/frmZavady.pas @@ -0,0 +1,124 @@ +unit frmZavady; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, + JvDBGrid, ddPlugin_TLB, Vcl.ComCtrls, JvExComCtrls, JvHeaderControl, Vcl.StdCtrls, Vcl.Buttons, + Vcl.Mask, RzEdit; + +type + TformZavady = class(TForm) + Panel1: TPanel; + grdZavady: TJvDBGrid; + grd1: TGridPanel; + procedure FormShow (Sender: TObject); + procedure grdZavadyDblClick (Sender: TObject); + procedure FormClose (Sender: TObject; var Action: TCloseAction); + procedure grdZavadyDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + private + public + Helios: IHelios; + retVal: integer; + idPrP: integer; + nazev: string; + kodModif: string; + end; + +var + formZavady: TformZavady; + +implementation +uses System.StrUtils, + helUtils, datMod2; + +{$R *.dfm} + + procedure TformZavady.FormClose (Sender: TObject; var Action: TCloseAction); + begin + Action:= TCloseAction.caFree; + end; + + + + + procedure TformZavady.FormShow (Sender: TObject); + var pomHandle: THandle; + begin + retVal:= 0; + + + pomHandle:= THandle(Helios.MainApplicationHandle); + if (pomHandle<>Application.Handle) then + Application.Handle:= pomHandle; + + pomHandle:= THandle(Helios.MainApplicationIconHandle); + if (pomHandle<>Application.Icon.Handle) then + Application.Icon.Handle:= pomHandle; + + with Application.DefaultFont do + begin + Name:= Helios.Font; + Height:= Helios.FontHeight; + Charset:= Helios.Charset; + + Screen.MenuFont.Charset:= Charset; + Screen.MenuFont.Name:= Name; + Screen.MenuFont.Height:= Height; + end; + + self.Font:= Application.DefaultFont; + + + if not(dm2.vtZavady.Active) then + dm2.vtZavady.Open; + + dm2.vtZavady.EmptyDataSet; + dm2.vtZavady.Filtered:= false; + + grdZavady.LockDrawing; + dm2.NactiUdrzbu (kodModif, 'Typ=3'); // prostoj stroje + dm2.vtZavady.First; + grdZavady.UnlockDrawing; + + helUtils.waitEnd; + + end; + + + + procedure TformZavady.grdZavadyDblClick (Sender: TObject); + var i, zm: integer; + sz,rc,naz: string; + begin + i:= dm2.vtZavady.FieldByName('colID').AsInteger; + naz:= dm2.vtZavady.FieldByName('colNazev').AsString; + + if (Helios.YesNo('Chcete vybrat ' + #1 + naz + #1 + ' ?', true)) then + begin + idPrP:= i; + nazev:= naz; + retVal:= 10; + Close; + end; + end; + + + + + procedure TformZavady.grdZavadyDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (gdSelected in State) then + grdZavady.Canvas.Font.Color:= clBlack; + + grdZavady.Canvas.Brush.Color:= $00B8C4C8; // RGB C8C4B8 - seda + if (Assigned(Column.Field) and (SameText(Column.FieldName, 'colNazev'))) then +// if (Column.FieldName='colNazev') then + grdZavady.Canvas.Brush.Color:= $00C6FECF; // RGB CFFEC6 - svetle zelena + + + grdZavady.DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + +end. diff --git a/_plgPlan/iConsts.inc b/_plgPlan/iConsts.inc new file mode 100644 index 0000000..415b2b1 --- /dev/null +++ b/_plgPlan/iConsts.inc @@ -0,0 +1,4 @@ +const + CRLF = #13#10; + tblPalety = '[dbo].[_TabVyroba_Palety]'; + tblPlanRozpad = '[dbo].[_TabVyroba_PlanRozpad]'; diff --git a/_plgPlan/tbl__TabVyrobaPlanRozpad.sql b/_plgPlan/tbl__TabVyrobaPlanRozpad.sql new file mode 100644 index 0000000..5ea419a --- /dev/null +++ b/_plgPlan/tbl__TabVyrobaPlanRozpad.sql @@ -0,0 +1,21 @@ +IF OBJECT_ID(N'dbo._TabVyroba_PlanRozpad', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_PlanRozpad ( + ID int IDENTITY(1, 1) NOT NULL, + Datum DATETIME NOT NULL, + CasOd AS DATEPART(hour, Datum), + Datum_D AS DATEPART(day, Datum), + Datum_M AS DATEPART(month ,Datum), + Datum_Y AS DATEPART(year, Datum), + Datum_W AS DATEPART(week, Datum), + Datum_V AS DATEPART(iso_week, Datum), + Datum_Y_ISO AS DATEPART(year, DATEADD(day, 26-DATEPART(iso_week, Datum), Datum)), + IDAdvKPDavka int NULL, + IDPrikaz int NULL, + DatPorizeni DATETIME NOT NULL DEFAULT GETDATE(), + Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME(), + CONSTRAINT PK__TabVyroba_PlanRozpad PRIMARY KEY CLUSTERED (ID DESC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + +DROP INDEX IF EXISTS EI__TabVyroba_PlanRozpad_Datum ON dbo._TabVyroba_PlanRozpad + CREATE NONCLUSTERED INDEX EI__TabVyroba_PlanRozpad_Datum ON dbo._TabVyroba_PlanRozpad (Datum) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_plgPlan/trg__TabAdvKPDavky_HDC_D.sql b/_plgPlan/trg__TabAdvKPDavky_HDC_D.sql new file mode 100644 index 0000000..90796c3 --- /dev/null +++ b/_plgPlan/trg__TabAdvKPDavky_HDC_D.sql @@ -0,0 +1,23 @@ +-- dbo.ET_TabAdvKPDavky_HDC_D +CREATE TRIGGER dbo.ET_TabAdvKPDavky_HDC_D ON dbo.TabAdvKPDavky +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + + DECLARE + @id INT + + + + + +-- cisteni + IF EXISTS (SELECT 1 FROM dbo.TabAdvKPDavky) + BEGIN + SELECT @id=MAX(ID) FROM dbo.TabAdvKPDavky + DBCC CHECKIDENT (TabAdvKPDavky, RESEED, @id) + END + +END diff --git a/_plgPlan/trg__TabPlan_HDC_D.sql b/_plgPlan/trg__TabPlan_HDC_D.sql new file mode 100644 index 0000000..1dda90f --- /dev/null +++ b/_plgPlan/trg__TabPlan_HDC_D.sql @@ -0,0 +1,23 @@ +-- dbo.ET_TabPlan_HDC_D +CREATE TRIGGER dbo.ET_TabPlan_HDC_D ON dbo.TabPlan +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + + DECLARE + @id INT + + + + + +-- cisteni + IF EXISTS (SELECT 1 FROM dbo.TabPlan) + BEGIN + SELECT @id=MAX(ID) FROM dbo.TabPlan + DBCC CHECKIDENT (TabPlan, RESEED, @id) + END + +END diff --git a/_sql/2UT/2UT.sql b/_sql/2UT/2UT.sql new file mode 100644 index 0000000..a2f7283 --- /dev/null +++ b/_sql/2UT/2UT.sql @@ -0,0 +1,549 @@ +SET NOCOUNT ON + +DECLARE + @iTemp INT, + @sql NVARCHAR(3000), + @idTab INT, + @sysTabName NVARCHAR(128), + @hvwName NVARCHAR(128), + @idCol INT, + @trigger NVARCHAR(max) + + +SET @sysTabName = '_TabVyroba_Palety' +SET @hvwName = 'hvw_Vyroba_Palety' + + +SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabDefTabUzivTabulka), 1) +DBCC CHECKIDENT (TabDefTabUzivTabulka, RESEED, @iTemp) +SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabDefTabUzivAtributy), 1) +DBCC CHECKIDENT (TabDefTabUzivAtributy, RESEED, @iTemp) +SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabDefTabUzivConstraint), 1) +DBCC CHECKIDENT (TabDefTabUzivConstraint, RESEED, @iTemp) + + + +-- tabulka +SET @idTab = (SELECT ID FROM dbo.TabDefTabUzivTabulka WHERE NazevTabulky=@sysTabName) +IF (@idTab IS NULL) + BEGIN + INSERT dbo.TabDefTabUzivTabulka (Skupina, Popis, NazevTabulky, NazevPrehledu) + SELECT N'', 'Vyroben palety', @sysTabName, @hvwName + SET @idTab = SCOPE_IDENTITY() + END + + + + + + + +-- sloupce +IF (@idTab IS NOT NULL) + BEGIN +/* + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUHeliosAttr, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrEditor, EdAtrPoradi, EdAtrHlidat, EdAtrSkrytyPrenos, EdAtrInfoAtr1, EdAtrInfoAtr2, EdAtrPrenosDPSN, EdAtrPrenosIDFiltr, EdAtrPodminka) +*/ + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'Typ') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 1, N'Typ', N'Typ', 2, 0, 0, N'''0''', 0, + NULL, NULL, N'0=nedefinovano +1=vyrobek pekarna (vlastni) +2=vyrobek pekarna (externi) +3=material +4=zbozi +5=nestandard', 20, N'', 1, 1, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'Typ') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD Typ TINYINT NOT NULL DEFAULT 0' + EXEC sp_executesql @sql + END + + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'CisloPalety') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 2, N'CisloPalety', N'Oznaen/slo palety', 6, 50, 0, N'', 0, + NULL, NULL, NULL, 20, N'', 1, 1, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'CisloPalety') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD CisloPalety NVARCHAR(50) NOT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'Sarze') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 3, N'Sarze', N'are', 6, 30, 1, N'', 0, + NULL, NULL, NULL, 30, N'', 1, 1, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'Sarze') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD Sarze NVARCHAR(30) NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'CisloOrg') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 4, N'CisloOrg', N'Organizace', 0, 0, 1, N'', 0, + NULL, NULL, NULL, 20, N'', 1, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'CisloOrg') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD CisloOrg INT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDPrikaz') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 5, N'IDPrikaz', N'Vrobn pkaz', 0, 0, 1, N'', 0, + NULL, NULL, NULL, 20, N'', 0, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'IDPrikaz') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD IDPrikaz INT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDStroj') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 6, N'IDStroj', N'Stroj', 0, 0, 1, N'', 0, + NULL, NULL, NULL, 20, N'', 0, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'IDStroj') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD IDStroj INT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'DatZahajeni') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 7, N'DatZahajeni', N'Datum zahjen vroby', 9, 0, 1, N'', 0, + NULL, NULL, NULL, 70, N'', 1, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'DatZahajeni') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD DatZahajeni DATETIME NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'DatUkonceni') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 8, N'DatUkonceni', N'Datum ukonen vroby', 9, 0, 1, N'', 0, + NULL, NULL, NULL, 70, N'', 1, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'DatUkonceni') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD DatUkonceni DATETIME NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'Mnozstvi') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 9, N'Mnozstvi', N'Mnostv KA', 1, 0, 0, N'0', 0, + NULL, NULL, NULL, 60, N'', 1, 0, 1, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'Mnozstvi') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD Mnozstvi SMALLINT NOT NULL DEFAULT 0' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'MnozstviKA') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 10, N'MnozstviKA', N'Mnostv KA', 1, 0, 0, N'0', 0, + NULL, NULL, NULL, 60, N'', 1, 0, 1, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'MnozstviKA') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD MnozstviKA SMALLINT NOT NULL DEFAULT 0' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'MnozstviPlneKA') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 11, N'MnozstviPlneKA', N'Mnostv plnch KA na nepln palet', 1, 0, 0, N'0', 0, + NULL, NULL, NULL, 60, N'', 1, 0, 1, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'MnozstviPlneKA') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD MnozstviPlneKA SMALLINT NOT NULL DEFAULT 0' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'MnozstviPosledniKA') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 12, N'MnozstviPosledniKA', N'Mnostv ks v poslednm KA', 1, 0, 0, N'0', 0, + NULL, NULL, NULL, 60, N'', 1, 0, 1, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'MnozstviPosledniKA') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD MnozstviPosledniKA SMALLINT NOT NULL DEFAULT 0' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'DatPorizeni') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 13, N'DatPorizeni', N'Datum pozen', 9, 0, 0, N'GETDATE()', 0, + NULL, NULL, NULL, 70, N'', 1, 1, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'DatPorizeni') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD DatPorizeni DATETIME NOT NULL DEFAULT GETDATE()' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'JeCislo') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 14, N'JeCislo', N'Oznaen palety je slo', 5, 0, 0, N'', 1, + N'CONVERT(bit, CASE WHEN ISNUMERIC(CisloPalety)=1 THEN 1 ELSE 0 END)', NULL, NULL, 20, N'', 1, 1, 0, 1, 0, + 0, 0, N'' + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDKmen') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 15, N'IDKmen', N'Kmenov karta', 0, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'IDKmen') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD IDKmen INT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDVyrCisPrikaz') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 16, N'IDVyrCisPrikaz', N'V z pkazu', 0, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'IDVyrCisPrikaz') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD IDVyrCisPrikaz INT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'KusuVKA') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 17, N'KusuVKA', N'Poet ks v KA', 1, 0, 0, N'0', 0, + NULL, NULL, NULL, 40, N'', 1, 1, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'KusuVKA') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD KusuVKA SMALLINT NOT NULL DEFAULT 0' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'DatExpirace') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 18, N'DatExpirace', N'Datum expirace', 9, 0, 1, N'', 0, + NULL, NULL, NULL, 70, N'', 1, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'DatExpirace') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD DatExpirace DATETIME NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDPlanRozpis') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 19, N'IDPlanRozpis', N'ID kapac.plnu', 0, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'IDPlanRozpis') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD IDPlanRozpis INT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'DatPlan') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 20, N'DatPlan', N'Datum plnovan vroby', 9, 0, 1, N'', 0, + NULL, NULL, NULL, 70, N'', 1, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'DatPlan') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD DatPlan DATETIME NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'HodinaPlan') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 21, N'HodinaPlan', N'Hodina plnovan vroby', 2, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 1, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'HodinaPlan') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD HodinaPlan TINYINT NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'JSONDataStart') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 22, N'JSONDataStart', N'JSON odeslan PH pi startu palety', 14, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 0, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'JSONDataStart') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD JSONDataStart NVARCHAR(max) NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'JSONDataKonec') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 23, N'JSONDataKonec', N'JSON odeslan PH pi ukonen palety', 14, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 0, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'JSONDataKonec') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD JSONDataKonec NVARCHAR(max) NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'JSONStartResp') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 24, N'JSONStartResp', N'JSON pijat od PH pi startu palety', 14, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 0, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'JSONStartResp') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD JSONStartResp NVARCHAR(max) NULL' + EXEC sp_executesql @sql + END + + + SET @idCol = (SELECT ID FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'JSONKonecResp') + IF (@idCol IS NULL) + INSERT dbo.TabDefTabUzivAtributy + (IDDefinice, Poradi, DTUAtrJmenoSys, DTUAtrJmenoVerejne, DTUAtrTyp, DTUAtrDelka, DTUAtrNull, DTUAtrServerDefault, DTUAtrDruh, + DTUAtrPocitany, DTUAtrErrTextStr, DTUAtrKonverze, DTUAtrSirkaSloupce, DTUAtrMaska, DTUAtrVerejny, DTUAtrVyzadovany, DTUAtrSumovat, DTUAtrTisk, DTUEditovatelny, + DTUReadOnly, DTUHromadneZmeny, EdAtrPrenosDPSN) + SELECT @idTab, 25, N'JSONKonecResp', N'JSON pijat od PH pi ukonen palety', 14, 0, 1, N'', 0, + NULL, NULL, NULL, 40, N'', 0, 0, 0, 0, 0, + 0, 0, N'' + IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS where table_name=@sysTabName AND column_name=N'JSONKonecResp') + BEGIN + SET @sql = N'ALTER TABLE ' + @sysTabName + ' ADD JSONKonecResp NVARCHAR(max) NULL' + EXEC sp_executesql @sql + END + + END + + + + +-- indexy +IF (@idTab IS NOT NULL) + IF NOT EXISTS (SELECT 1 FROM dbo.TabDefTabUzivConstraint WHERE IDDefinice=@idTab AND Typ=1 AND JmenoSys=N'PK__' + @sysTabName + N'__ID') + INSERT dbo.TabDefTabUzivConstraint + (IDDefinice, JmenoSys, Typ, MojeAtributy, CiziTabulka, CiziAtributy, IncludedAttr, VazbaNazevMoje, VazbaNazevMojeSys, VazbaNazevCizi, VazbaNazevCiziSys) + SELECT @idTab, N'PK__' + @sysTabName + N'__ID', 1, N'ID', N'', N'', N'', N'', N'', N'', N'' + +IF (@idTab IS NOT NULL) AND EXISTS (SELECT 1 FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'Typ') + IF NOT EXISTS (SELECT 1 FROM dbo.TabDefTabUzivConstraint WHERE IDDefinice=@idTab AND Typ=0 AND JmenoSys=N'IX__' + @sysTabName + N'__Typ') + INSERT dbo.TabDefTabUzivConstraint + (IDDefinice, JmenoSys, Typ, MojeAtributy, CiziTabulka, CiziAtributy, IncludedAttr, VazbaNazevMoje, VazbaNazevMojeSys, VazbaNazevCizi, VazbaNazevCiziSys) + SELECT @idTab, N'IX__' + @sysTabName + N'__Typ', 0, N'Typ', N'', N'', N'', N'', N'', N'', N'' + +IF (@idTab IS NOT NULL) AND EXISTS (SELECT 1 FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDPrikaz') + IF NOT EXISTS (SELECT 1 FROM dbo.TabDefTabUzivConstraint WHERE IDDefinice=@idTab AND Typ=0 AND JmenoSys=N'IX__' + @sysTabName + N'__IDPrikaz') + INSERT dbo.TabDefTabUzivConstraint + (IDDefinice, JmenoSys, Typ, MojeAtributy, CiziTabulka, CiziAtributy, IncludedAttr, VazbaNazevMoje, VazbaNazevMojeSys, VazbaNazevCizi, VazbaNazevCiziSys) + SELECT @idTab, N'IX__' + @sysTabName + N'__IDPrikaz', 0, N'IDPrikaz', N'', N'', N'', N'', N'', N'', N'' + +IF (@idTab IS NOT NULL) AND EXISTS (SELECT 1 FROM dbo.TabDefTabUzivAtributy WHERE IDDefinice=@idTab AND DTUAtrJmenoSys=N'IDStroj') + IF NOT EXISTS (SELECT 1 FROM dbo.TabDefTabUzivConstraint WHERE IDDefinice=@idTab AND Typ=0 AND JmenoSys=N'IX__' + @sysTabName + N'__IDStroj') + INSERT dbo.TabDefTabUzivConstraint + (IDDefinice, JmenoSys, Typ, MojeAtributy, CiziTabulka, CiziAtributy, IncludedAttr, VazbaNazevMoje, VazbaNazevMojeSys, VazbaNazevCizi, VazbaNazevCiziSys) + SELECT @idTab, N'IX__' + @sysTabName + N'__IDStroj', 0, N'IDStroj', N'', N'', N'', N'', N'', N'', N'' + + + + +-- trigger I/U/D +IF (@idTab IS NOT NULL) + BEGIN + SET @trigger=N'CREATE TRIGGER ht_TabVyroba_Palety_DIU ON _TabVyroba_Palety +FOR DELETE,INSERT,UPDATE +AS + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + +IF @@ROWCOUNT = 0 RETURN +SET NOCOUNT ON + +-- 1..insert, -1..delete, 0..update +DECLARE @JakaAkce INT +SET @JakaAkce = 0 +IF EXISTS(SELECT*FROM INSERTED) SET @JakaAkce = @JakaAkce + 1 +IF EXISTS(SELECT*FROM DELETED) SET @JakaAkce = @JakaAkce - 1 + + +DECLARE + @errMsg NVARCHAR(500), + @id INT + + +-- delete cast +IF (@JakaAkce=-1) + BEGIN + DECLARE c CURSOR LOCAL FOR + SELECT d.ID + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id + IF (@@FETCH_STATUS<>0) BREAK + + IF OBJECT_ID(N''dbo._TabVyroba_PaletyUkonceni'', N''U'') IS NOT NULL + DELETE FROM dbo._TabVyroba_PaletyUkonceni WHERE IDPalety=@id + + IF OBJECT_ID(N''dbo._TabVyroba_PaletyPohybOZ'', N''U'') IS NOT NULL + DELETE FROM dbo._TabVyroba_PaletyPohybOZ WHERE IDPalety=@id + + END + CLOSE c + DEALLOCATE c +END + + +-- cisteni +BEGIN TRY + IF EXISTS(SELECT 1 FROM dbo._TabVyroba_Palety) + BEGIN + SELECT @id=MAX(ID) FROM dbo._TabVyroba_Palety + DBCC CHECKIDENT(_TabVyroba_Palety, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._TabVyroba_Palety +END TRY +BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() +END CATCH + +' + UPDATE dbo.TabDefTabUzivTabulka SET DefiniceTriggeru=@trigger WHERE ID=@idTab + END diff --git a/_sql/_temp b/_sql/_temp new file mode 100644 index 0000000..950b3cb --- /dev/null +++ b/_sql/_temp @@ -0,0 +1,42 @@ + + + +-- dopln z dokladu posledni sarzi na stav skladu + +SET NOCOUNT ON + +DECLARE + @idPZ INT, + @idSS INT, + @idKZ INT, + @sarze NVARCHAR(100), + @paletList NVARCHAR(100) + + +MERGE dbo._hdc_PZ_PuvodniVC AS T + USING dbo.TabPohybyZbozi AS S ON (S.ID=T.IDPohybZbozi) + WHEN MATCHED THEN UPDATE SET T.IDZboSklad=S.IDZboSklad; + +DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT IDPohybZbozi, IDZboSklad, Sarze, PaletovyList FROM dbo._hdc_PZ_PuvodniVC + WHERE IDPohybZbozi IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=29) +OPEN c +WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idPZ, @idSS, @sarze, @paletList + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idSS IS NULL) + SET @idSS = (SELECT IDZboSklad FROM dbo.TabPohybyZbozi WHERE ID=@idPZ) + IF (@idSS IS NOT NULL) + SET @idKZ = (SELECT IDKmenZbozi FROM dbo.TabStavSkladu WHERE ID=@idSS) + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=N'211') + + IF NOT EXISTS (SELECT 1 FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) + INSERT dbo.TabStavSkladu_EXT (ID) VALUES (@idSS) + UPDATE dbo.TabStavSkladu_EXT SET _Prevod_PosledniSarze=@sarze WHERE ID=@idSS + + END +CLOSE c +DEALLOCATE c + diff --git a/_sql/col_DokladyZbozi_EXT.sql b/_sql/col_DokladyZbozi_EXT.sql new file mode 100644 index 0000000..7152718 --- /dev/null +++ b/_sql/col_DokladyZbozi_EXT.sql @@ -0,0 +1,30 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabDokladyZbozi_EXT', N'_Vyroba_HmotTesta') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabDokladyZbozi', @NazevAtrSys=N'_Vyroba_HmotTesta', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Hmotnost vyrobenho tsta (kg)', + @NazevAtrVerZkr=N'Hm. tsta', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=8, @SumovatAtr=N'A', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabDokladyZbozi_EXT', N'_Vyroba_ZadatSarze') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabDokladyZbozi', @NazevAtrSys=N'_Vyroba_ZadatSarze', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Vdej z vroby - zadat are', + @NazevAtrVerZkr=N'', @TypAtr=N'SMALLINT', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'SMALLINT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Identifikace zda na vdejce z vroby byly zadny are (1=poloka s potebou are, 2=ve zadno)', @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabDokladyZbozi_EXT', N'_Vyroba_DenSmena') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabDokladyZbozi', @NazevAtrSys=N'_Vyroba_DenSmena', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Vdej z vroby - den/smna', + @NazevAtrVerZkr=N'', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(10)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'ddmmyyyy/s', @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabDokladyZbozi_EXT', N'_Vyroba_IDPuvodniDoklad') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabDokladyZbozi', @NazevAtrSys=N'_Vyroba_IDPuvodniDoklad', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'ID pvodnho dokladu pevodu/vdeje', + @NazevAtrVerZkr=N'', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabDokladyZbozi_EXT', N'_HDCAPI_PHident') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabDokladyZbozi', @NazevAtrSys=N'_HDCAPI_PHident', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'HDC API PH identifiktor pro sync', + @NazevAtrVerZkr=N'', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=10, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL diff --git a/_sql/col_EvidRozpracOperR_EXT.sql b/_sql/col_EvidRozpracOperR_EXT.sql new file mode 100644 index 0000000..687336d --- /dev/null +++ b/_sql/col_EvidRozpracOperR_EXT.sql @@ -0,0 +1,12 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabEvidRozpracOperR_EXT', N'_Sarze') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabEvidRozpracOperR', @NazevAtrSys=N'_Sarze', @Skupina=NULL, @NazevAtrVer=N'are', + @NazevAtrVerZkr=N'', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=12, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(30)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabEvidRozpracOperR_EXT', N'_KoefMnoz') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabEvidRozpracOperR', @NazevAtrSys=N'_KoefMnoz', @Skupina=NULL, @NazevAtrVer=N'Koeficient mnostv', + @NazevAtrVerZkr=N'', @TypAtr=N'NUMERIC', @MaskaAtr=N'0.####', @VerejnyAtr=N'A', @SirkaSloupceAtr=12, @SumovatAtr=N'A', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL diff --git a/_sql/col_KmenZbozi_EXT.sql b/_sql/col_KmenZbozi_EXT.sql new file mode 100644 index 0000000..97d36ea --- /dev/null +++ b/_sql/col_KmenZbozi_EXT.sql @@ -0,0 +1,14 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabKmenZbozi_EXT', N'_Vyroba_ZadavatSarzi') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabKmenZbozi', @NazevAtrSys=N'_Vyroba_ZadavatSarzi', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Vroba - vyadovat ari', + @NazevAtrVerZkr=N'Vdej are', @TypAtr=N'BIT', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'BIT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Pi vdeji ve vrob vyadovat zadn are', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + + +IF (COL_LENGTH(N'dbo.TabKmenZbozi_EXT', N'_Prevod_PosledniSarze') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabKmenZbozi', @NazevAtrSys=N'_Prevod_PosledniSarze', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Vroba - posledn peveden are', + @NazevAtrVerZkr=N'Posledn are', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'are z posledn pevodky-pjemky mezi sklady', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + diff --git a/_sql/col_PohybyZbozi_EXT.sql b/_sql/col_PohybyZbozi_EXT.sql new file mode 100644 index 0000000..511419c --- /dev/null +++ b/_sql/col_PohybyZbozi_EXT.sql @@ -0,0 +1,51 @@ +DECLARE @errMsg NVARCHAR(255), @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_HDCAPI_PHident') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPohybyZbozi', @NazevAtrSys=N'_HDCAPI_PHident', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'HDC API PH identifiktor pro sync', + @NazevAtrVerZkr=N'HDCAPIPHid', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=1, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Vyroba_PrikazMnoz') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPohybyZbozi', @NazevAtrSys=N'_Vyroba_PrikazMnoz', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Mnostv poadavku z pkazu (norma)', + @NazevAtrVerZkr=N'Pkaz mno.', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=8, @SumovatAtr=N'A', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Vyroba_Sarze') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPohybyZbozi', @NazevAtrSys=N'_Vyroba_Sarze', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'are materilu', + @NazevAtrVerZkr=N'are', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=12, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + + +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Vyroba_PaletList') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPohybyZbozi', @NazevAtrSys=N'_Vyroba_PaletList', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Paletov list', + @NazevAtrVerZkr=N'Palet. list', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(30)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Mouka_Silo') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPohybyZbozi', @NazevAtrSys=N'_Mouka_Silo', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Silo umstn mouky', + @NazevAtrVerZkr=N'Silo', @TypAtr=N'SMALLINT', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=12, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'SMALLINT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Vyroba_MnozSouhrVydej') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPohybyZbozi', @NazevAtrSys=N'_Vyroba_MnozSouhrVydej', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Mnostv zapsan na souhrnnou vdejku', + @NazevAtrVerZkr=N'Mn.souhr.vdej', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=12, @SumovatAtr=N'A', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL + +/* +BEGIN TRY +IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Mouka_Silo') IS NOT NULL) + BEGIN + DELETE FROM dbo.TabUzivAtr WHERE NazevTabulkySys=N'TabPohybyZbozi' AND NazevAtrSys=N'_Mouka_Silo' + IF (COL_LENGTH(N'dbo.TabPohybyZbozi_EXT', N'_Mouka_Silo') IS NOT NULL) + ALTER TABLE dbo.TabPohybyZbozi_EXT DROP COLUMN _Mouka_Silo + END +END TRY +BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() +END CATCH +*/ \ No newline at end of file diff --git a/_sql/col_TabStavSkladu_EXT.sql b/_sql/col_TabStavSkladu_EXT.sql new file mode 100644 index 0000000..c165ab8 --- /dev/null +++ b/_sql/col_TabStavSkladu_EXT.sql @@ -0,0 +1,21 @@ +DECLARE @currDat DATETIME=GETDATE() + +/* +IF (COL_LENGTH(N'dbo.TabStavSkladu_EXT', N'_HDCApi_PoslPrevedSarze') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabStavSkladu', @NazevAtrSys=N'_HDCApi_PoslPrevedSarze', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Posledn peveden are', + @NazevAtrVerZkr=N'Posl. are', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 +*/ + +IF (COL_LENGTH(N'dbo.TabStavSkladu_EXT', N'_Prevod_PosledniSarze') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabStavSkladu', @NazevAtrSys=N'_Prevod_PosledniSarze', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Vroba - posledn peveden are', + @NazevAtrVerZkr=N'Posledn are', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'are z posledn pevodky-pjemky mezi sklady', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + +IF (COL_LENGTH(N'dbo.TabStavSkladu_EXT', N'_Prevod_PosledniPaletList') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabStavSkladu', @NazevAtrSys=N'_Prevod_PosledniPaletList', @Skupina=N'Plugin Pekrna', @NazevAtrVer=N'Vroba - posledn peveden paletov list', + @NazevAtrVerZkr=N'Posledn PalList', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Paletov list z posledn pevodky-pjemky mezi sklady', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 diff --git a/_sql/col_VazbyPrikazu_EXT.sql b/_sql/col_VazbyPrikazu_EXT.sql new file mode 100644 index 0000000..eaa577f --- /dev/null +++ b/_sql/col_VazbyPrikazu_EXT.sql @@ -0,0 +1,6 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabVazbyPrikazu_EXT', N'_MnozstviOdv') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabVazbyPrikazu', @NazevAtrSys=N'_MnozstviOdv', @Skupina=NULL, @NazevAtrVer=N'Mnostv odveden na vy pkaz', + @NazevAtrVerZkr=N'Mnostv odv.', @TypAtr=N'NUMERIC', @MaskaAtr=N'#,##0.###', @VerejnyAtr=N'V', @SirkaSloupceAtr=14, @SumovatAtr=N'A', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL diff --git a/_sql/ef_Bit2Int.sql b/_sql/ef_Bit2Int.sql new file mode 100644 index 0000000..0a3e6cc --- /dev/null +++ b/_sql/ef_Bit2Int.sql @@ -0,0 +1,9 @@ +-- dbo.ef_Bit2Int +CREATE FUNCTION dbo.ef_Bit2Int (@inBool BIT) RETURNS TINYINT +AS +BEGIN + +-- !! funkci neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + + RETURN CONVERT(tinyint, CASE WHEN @inBool=1 THEN 1 ELSE 0 END) +END \ No newline at end of file diff --git a/_sql/ef_DilecGetStroj.sql b/_sql/ef_DilecGetStroj.sql new file mode 100644 index 0000000..0a8ce0e --- /dev/null +++ b/_sql/ef_DilecGetStroj.sql @@ -0,0 +1,30 @@ +-- dbo.ef_DilecGetStroj +CREATE FUNCTION dbo.ef_DilecGetStroj (@IDKmen INT=NULL, @NazevOp NVARCHAR(100)=NULL) + RETURNS INT +AS +BEGIN + +-- !! funkci neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + + DECLARE + @retVal INT=NULL + + IF (@IDKmen IS NULL) + RETURN @retVal + SET @NazevOp = ISNULL(@NazevOp, N'') + + + IF (@NazevOp<>N'') + BEGIN + IF 1=(SELECT COUNT(ID) FROM dbo.TabPostup WHERE Dilec=@IDKmen AND ZmenaDo IS NULL AND IDStroje IS NOT NULL AND Nazev LIKE @NazevOp + N'%') + SELECT @retVal=IDStroje FROM dbo.TabPostup WHERE Dilec=@IDKmen AND ZmenaDo IS NULL AND IDStroje IS NOT NULL AND Nazev LIKE @NazevOp + N'%' + END + ELSE + BEGIN + IF 1=(SELECT COUNT(ID) FROM dbo.TabPostup WHERE Dilec=@IDKmen AND ZmenaDo IS NULL AND IDStroje IS NOT NULL) + SELECT @retVal=IDStroje FROM dbo.TabPostup WHERE Dilec=@IDKmen AND ZmenaDo IS NULL AND IDStroje IS NOT NULL + END + + RETURN @retVal + +END diff --git a/_sql/ef_GetDatumASmenu.sql b/_sql/ef_GetDatumASmenu.sql new file mode 100644 index 0000000..1ec7e77 --- /dev/null +++ b/_sql/ef_GetDatumASmenu.sql @@ -0,0 +1,25 @@ +-- dbo.ef_GetDatumASmenu +CREATE FUNCTION dbo.ef_GetDatumASmenu (@Datum DATETIME) + RETURNS @retTab TABLE (Datum DATE, Smena TINYINT) +AS +BEGIN + +-- !! funkci neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + + DECLARE + @hod TINYINT, + @lDatum DATE, + @smena SMALLINT + + SET @lDatum = @Datum + SET @hod = DATEPART(hour, @Datum) + SET @smena = IIF(@hod BETWEEN 0 AND 5, -1, IIF(@hod BETWEEN 6 AND 13, 1, IIF(@hod BETWEEN 14 AND 21, 2, 3))) + IF (@smena=-1) + BEGIN + SET @smena = 3 + SET @lDatum = DATEADD(day, -1, @Datum) + END + INSERT @retTab SELECT @lDatum, @smena + RETURN + +END diff --git a/_sql/ef_Kmen_VratPocetKsVKartonu.sql b/_sql/ef_Kmen_VratPocetKsVKartonu.sql new file mode 100644 index 0000000..61b5891 --- /dev/null +++ b/_sql/ef_Kmen_VratPocetKsVKartonu.sql @@ -0,0 +1,9 @@ +-- dbo.ef_Kmen_VratPocetKsVKartonu +CREATE FUNCTION dbo.ef_Kmen_VratPocetKsVKartonu (@IDKmenZbozi INT) +RETURNS NUMERIC(19,6) +AS +BEGIN + DECLARE @retVal NUMERIC(19,6) + SET @retVal = ISNULL( (SELECT PocetOdvozene FROM dbo.TabMJZbozi WHERE IDKmenZbozi=@IDKmenZbozi AND KodMJ1=N'KA' AND KodMJ2=N'ks'), 0) + RETURN @retVal +END diff --git a/_sql/ef_Vyroba_GenerujRozpadCasu.sql b/_sql/ef_Vyroba_GenerujRozpadCasu.sql new file mode 100644 index 0000000..4fa7e93 --- /dev/null +++ b/_sql/ef_Vyroba_GenerujRozpadCasu.sql @@ -0,0 +1,40 @@ +-- ef_Vyroba_GenerujRozpadCasu +CREATE FUNCTION dbo.ef_Vyroba_GenerujRozpadCasu ( + @datStart DATETIME=NULL, + @numOfDays SMALLINT=3, + @stepMinutes SMALLINT=60 +) + +/* +RETURNS TABLE +AS +RETURN +( + WITH Recursive_CTE AS + ( + SELECT dbo.hf_TruncDate(ISNULL(@datStart, GETDATE())) AS TimestampUtc + UNION ALL + SELECT DATEADD(MINUTE, @stepMinutes, TimestampUtc) + FROM Recursive_CTE + WHERE TimestampUtc < DATEADD(ms, -3, dbo.hf_TruncDate(DATEADD(DAY, @numOfDays, DATEADD(DAY, 1, ISNULL(@datStart, GETDATE()))))) + ) + SELECT * + FROM Recursive_CTE +) +*/ +RETURNS @Result TABLE (TimestampUtc DATETIME) +AS +BEGIN + DECLARE @currentTimestamp DATETIME = dbo.hf_TruncDate(ISNULL(@datStart, GETDATE())); + DECLARE @endTimestamp DATETIME = DATEADD(ms, -3, dbo.hf_TruncDate(DATEADD(DAY, @numOfDays, DATEADD(DAY, 1, ISNULL(@datStart, GETDATE()))))); + + WHILE @currentTimestamp <= @endTimestamp + BEGIN + INSERT INTO @Result (TimestampUtc) + VALUES (@currentTimestamp); + + SET @currentTimestamp = DATEADD(MINUTE, @stepMinutes, @currentTimestamp); + END; + + RETURN; +END \ No newline at end of file diff --git a/_sql/ef_Vyroba_VratCisloSarze.sql b/_sql/ef_Vyroba_VratCisloSarze.sql new file mode 100644 index 0000000..bc78eaa --- /dev/null +++ b/_sql/ef_Vyroba_VratCisloSarze.sql @@ -0,0 +1,43 @@ +-- dbo.ef_Vyroba_VratCisloSarze +CREATE FUNCTION dbo.ef_Vyroba_VratCisloSarze (@Datum DATETIME=NULL, @Typ TINYINT=1, @iso BIT=1) +RETURNS NVARCHAR(5) +AS +BEGIN + +DECLARE + @smena TINYINT=0, + @pracDen NCHAR(1)=N'', + @tyden NCHAR(2)=N'', + @retVal NVARCHAR(5), + @den TINYINT, + @NYden TINYINT + + +SET @Datum = ISNULL(@Datum, GETDATE()) +SELECT @smena=Smena, @Datum=Datum FROM dbo.ef_GetDatumASmenu (@Datum) + +SET @NYden = DATEPART(weekday, '20240101') -- pondeli + +--SET @pracDen = CONVERT(nchar(1), (DATEPART(weekday, @Datum) + @@DATEFIRST - 2) % 7 + 1) +SET @den = DATEPART(weekday, @Datum) +IF (@NYden=1) -- system ma nastaveno pondeli=1, Rootvin potrebuje nedele=1 + BEGIN + IF (@den=7) -- nedele=7 -> nedele=1 + SET @den = 1 + ELSE + SET @den = @den + 1 + END +SET @pracDen = CONVERT(nchar(1), @den) + + +IF (@typ=1) + SET @tyden = IIF(@iso=0, FORMAT(DATEPART(week, @Datum), '00', 'cs-cz'), FORMAT(DATEPART(iso_week, @Datum), '00', 'cs-cz')) + +IF (@typ=2) + SET @tyden = IIF(@iso=0, FORMAT(DATEPART(week, @Datum), '00', 'en-gb'), FORMAT(DATEPART(iso_week, @Datum), '00', 'en-gb')) + + +SET @retVal = RIGHT(FORMAT(@Datum, 'yy'), 1) + @tyden + @pracDen + FORMAT(@smena, '0') +RETURN @retVal + +END \ No newline at end of file diff --git a/_sql/ef_Vyroba_VratNovyPaletovyList.sql b/_sql/ef_Vyroba_VratNovyPaletovyList.sql new file mode 100644 index 0000000..a9bd217 --- /dev/null +++ b/_sql/ef_Vyroba_VratNovyPaletovyList.sql @@ -0,0 +1,108 @@ +-- dbo.ef_Vyroba_VratNovyPaletovyList +CREATE FUNCTION dbo.ef_Vyroba_VratNovyPaletovyList (@typ TINYINT=1, @radaVPr NVARCHAR(10)=N'', @cisloOrg INT=NULL, @idKmenZbozi INT=NULL) +RETURNS NVARCHAR(50) +AS +BEGIN + +-- funkci neupravujte, stejne bude prepsana pri spusteni pluginu pro Planovani nebo Windows sluzbou HDC API + + DECLARE + @retVal NVARCHAR(15), + @bi BIGINT, + @maska NVARCHAR(100)=NULL, + @delka TINYINT, + @sz NVARCHAR(3) + + DECLARE + @skladNestd NVARCHAR(30)=N'211', + @radaPrijemNestd NVARCHAR(3)='270' -- vyrobky PEK + + + SET @bi = 1 + ISNULL( (SELECT MAX(TRY_PARSE(VyrCislo AS BIGINT)) FROM dbo.TabVyrCisPrikaz WHERE VyrCislo LIKE N'5%'), 0) + IF (@bi = 1) + SET @bi = 5200001 + SET @retVal = CONVERT(nvarchar, @bi) + + IF EXISTS(SELECT 1 FROM Information_schema.Routines WHERE Specific_schema=N'dbo' AND specific_name=N'ef_Vyroba_VratNovyPaletovyList1' AND Routine_Type=N'FUNCTION') + SET @retVal = dbo.ef_Vyroba_VratNovyPaletovyList1 (@typ, @radaVPr, @cisloOrg, @idKmenZbozi) + + + +/* + + IF (@typ=2) + BEGIN + SET @delka = 0 + IF (@radaVPr<>N'') + BEGIN + SET @maska=(SELECT MaskaProGenVyrCis FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr) + IF (@maska IS NOT NULL) + IF (@maska LIKE N'#%C') + SET @delka = CONVERT(tinyint, LEFT(SUBSTRING(@maska, 2, 50), CHARINDEX(N'C', SUBSTRING(@maska, 2, 50))-1)) + END + + SELECT @bi = 1 + MAX(ISNULL(TRY_PARSE(VyrCislo AS BIGINT), 0)) FROM dbo.TabVyrCisPrikaz + SET @retVal = CONVERT(nvarchar, @bi) + + IF (@maska IS NULL) AND (@typ=2) + BEGIN + SELECT @bi = 1 + MAX(ISNULL(TRY_PARSE(VyrCislo AS BIGINT), 23000000)) FROM dbo.TabVyrCisPrikaz + SET @retVal = CONVERT(nvarchar, @bi) + END + ELSE + IF (@delka>0) + SET @retVal = REPLICATE(N'0', @delka - LEN(@retVal)) + @retVal + END + + + IF (@typ=3) + BEGIN + SET @bi = 1 + ISNULL( (SELECT MAX(TRY_PARSE(CisloPalety AS BIGINT)) FROM dbo._TabVyroba_Palety WHERE Typ=1), 23000000) + SET @retVal = CONVERT(nvarchar, @bi) + END + + + + + + + + IF (@typ=1) -- prijem nestandard + BEGIN + SELECT @bi = 1 + ISNULL(MAX(x.num), 8200000) + FROM (SELECT TRY_PARSE(vcs.Nazev1 AS BIGINT) AS num FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) INNER JOIN dbo.TabVyrCS vcs ON (vcs.IDStavSkladu=p.IDZboSklad) + WHERE k.Nazev1 LIKE N'%nestandart%' AND CONVERT(nvarchar, p.Poznamka)=N'Pjem nestandard' AND d.DruhPohybuZbo=0 + AND d.IDSklad=@skladNestd AND ISNUMERIC(vcs.Nazev1)=1 AND d.RadaDokladu=@radaPrijemNestd + ) x + SET @retVal = CONVERT(nvarchar, @bi) + END + + + IF (@idKmenZbozi IS NOT NULL) AND (@typ<>1) + BEGIN + SELECT @sz=SkupZbo FROM dbo.TabKmenZbozi WHERE ID=@idKmenZbozi + + IF (@sz LIKE N'7%' AND @sz NOT LIKE N'70%') + SET @bi = 1 + ISNULL( (SELECT MAX(TRY_PARSE(CisloPalety AS BIGINT)) FROM dbo._TabVyroba_Palety WHERE Typ=1), 5200000) + + IF (@sz LIKE N'6%') + SET @bi = 1 + ISNULL( (SELECT MAX(TRY_PARSE(CisloPalety AS BIGINT)) FROM dbo._TabVyroba_Palety WHERE Typ=2), 6200000) + + IF (@sz LIKE N'1%') + SET @bi = 1 + ISNULL( (SELECT MAX(TRY_PARSE(CisloPalety AS BIGINT)) FROM dbo._TabVyroba_Palety WHERE Typ=3), 7200000) + + IF (@sz LIKE N'60%') + SET @bi = 1 + ISNULL( (SELECT MAX(TRY_PARSE(CisloPalety AS BIGINT)) FROM dbo._TabVyroba_Palety WHERE Typ=4), 8200000) + + SET @retVal = CONVERT(nvarchar, @bi) + END + +*/ + + RETURN @retVal + + +END diff --git a/_sql/ep_HDC_PZ_ZapisPolozek.sql b/_sql/ep_HDC_PZ_ZapisPolozek.sql new file mode 100644 index 0000000..e32f5ba --- /dev/null +++ b/_sql/ep_HDC_PZ_ZapisPolozek.sql @@ -0,0 +1,117 @@ +-- dbo.ep_HDC_PZ_ZapisPolozek +CREATE PROCEDURE dbo.ep_HDC_PZ_ZapisPolozek + @typ INT, + @idDokladOZDst INT=NULL + +AS + +SET NOCOUNT ON + + + +DECLARE + @idPol INT, + @idPHIdent INT, + @idPHIdent2 INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @idKmen INT, + @idStav INT, + @idPZ INT, + @idVCK INT, + @idVCS INT, + @idVCP INT, + @sklad NVARCHAR(30), + @mnoz NUMERIC(19,6), + @paletList NVARCHAR(50), + @sarze NVARCHAR(50) + +DECLARE + @dpz TINYINT, + @cisOrg INT, + @vstC TINYINT, + @jednM INT, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6) + +IF OBJECT_ID(N'tempdb..#TabTempUziv', N'U') IS NULL + CREATE TABLE #TabTempUziv (Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL) + + + + + +IF (@typ=1) -- zapis z dbo._TabVyroba_Objednavky do dokladu výdejky + BEGIN + IF (@idDokladOZDst IS NULL) + RETURN + IF OBJECT_ID(N'tempdb..#TabZapisPolozekOZ', N'U') IS NULL + RETURN + + SELECT @cisOrg=CisloOrg, @dpz=DruhPohybuZbo, @vstC=VstupniCena, @jednM=JednotkaMeny, @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @sklad=IDSklad + FROM dbo.TabDokladyZbozi WHERE ID=@idDokladOZDst + + DECLARE c CURSOR LOCAL FOR + SELECT IDPolozky FROM #TabZapisPolozekOZ ORDER BY ID + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idPol + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idPHIdent=IdPHIdent, @idPHIdent2=IdPHIdent2, @idKmen=IDKmenZbozi, @sz=SkupZbo, @rc=RegCis, @mnoz=Mnozstvi, @paletList=PaletovyList, @sarze=Sarze + FROM dbo._TabVyroba_Objednavky WHERE ID=@idPol + SET @paletList = ISNULL(@paletList, N'') + + IF (@idKmen IS NOT NULL) + BEGIN + SET @idStav = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklad AND IDKmenZbozi=@idKmen) + IF (@idStav IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKmen, @IDSklad=@sklad, @IDZboSklad=@idStav OUT + IF (@idStav IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDokladOZDst, @DruhPohybu=@dpz, @CisloOrg=@cisOrg, @IDZboSklad=@idStav, @Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzE, + @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=NULL, @VstupniCena=@vstC, @Mnozstvi=@mnoz, @PovolitDuplicitu=1 + IF (@idPZ IS NOT NULL) + BEGIN + UPDATE dbo._TabVyroba_Objednavky SET Blokovano=1 WHERE ID=@idPol + + UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPol WHERE ID=@idPZ + IF (@@ROWCOUNT=0) + INSERT dbo.TabPohybyZbozi_EXT (ID, _HDCAPI_PHident) SELECT @idPZ, @idPol + + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@sarze, _Vyroba_PaletList=@paletList WHERE ID=@idPZ + +/* + SET @idVCK=(SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKmen AND Nazev1=@paletList) + IF (@idVCK IS NULL) + EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKmen, @Selectem=0, @Nazev1=@paletList + IF (@idVCK IS NOT NULL) + BEGIN + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idStav AND Nazev1=@paletList) + IF (@idVCS IS NULL) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idStav, @Nazev1=@paletList + IF (@idVCS IS NOT NULL) + BEGIN + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz + SET @idVCP = SCOPE_IDENTITY() + END + END -- @idVCK +*/ + + INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, IDVyrCP, Mnozstvi, Sarze) VALUES (@idPol, @idDokladOZDst, @idPZ, @idVCP, @mnoz, @paletList) + + END -- @idPZ + END -- @idStav + END -- @idKmen + + UPDATE dbo._TabVyroba_Objednavky SET Blokovano=0, + MnozKVydeji=Mnozstvi - ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idPol), 0) + WHERE ID=@idPol + + END + CLOSE c + DEALLOCATE c + + END diff --git a/_sql/ep_P01.sql b/_sql/ep_P01.sql new file mode 100644 index 0000000..c81a246 --- /dev/null +++ b/_sql/ep_P01.sql @@ -0,0 +1,68 @@ +/* HELIOS iNuvio | NTB-T | 2024-06-04 11:20:15 */ + +SET NOCOUNT ON +DECLARE @GUID BINARY(16),@Id INT,@Popis NVARCHAR(255),@UP NVARCHAR(255),@Parametry NVARCHAR(255),@IdBrowse INT,@Poznamka NVARCHAR(MAX),@Autor NVARCHAR(255),@DatPorizeni DATETIME,@Zmenil NVARCHAR(255),@DatZmeny DATETIME,@ParamHe INT,@Typ INT,@BidNavBrowse INT,@TextNavBrowse INT,@ZobrUkonceni BIT,@VerejnaAkce BIT,@ObnovitPoUkonceni BIT,@eServer BIT, @ZobrazitEditorPar BIT, @ObsluznyPlugin NVARCHAR(255), @BlokovaniEditoru SMALLINT,@TextBrowse INT,@CyklickyEditor BIT,@SelectoTvurceVlastnikId BIT,@VstupneID NVARCHAR(255),@PosunPoZaznamech INT,@TechnickyPopis NVARCHAR(MAX),@Napoveda NVARCHAR(255),@Hotkey INT,@NavaznaAkce INT,@NavaznaAkceGUID BINARY(16),@Skupina NVARCHAR(255),@NazevPodmenu NVARCHAR(255),@PoradiVPodmenu INT,@err NVARCHAR(2047),@IdExtKom INT,@GUIDFiltr BINARY(16),@IDFiltr INT,@ErrStr NVARCHAR(2047),@SkriptPredSpustenim NVARCHAR(MAX),@Automatizace BIT + + +SELECT @Id=9999, @Popis=N'Spec - realizace pjemky (po)', @UP=N'dbo.ep_P01', @Parametry=N'', @IdBrowse=990990 +SELECT @Poznamka=N'CREATE PROCEDURE dbo.ep_P01 + @IDDoklad INT +AS + + +-- doplnk realizace skladovych prijmu, vola se na konci procesu realizace prijmu. +-- Vstupni parametr ID dokladu, vystup neni + + +SET NOCOUNT ON + +DECLARE + @rada NVARCHAR(3), + @idSklad NVARCHAR(30) + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury +IF OBJECT_ID(N''dbo.ep_P01_HDC1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_P01_HDC1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury pro API +IF OBJECT_ID(N''dbo.ep_P01_HDCDZApi1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_P01_HDCDZApi1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + + +' +SELECT @Autor=N'Import HDC',@DatPorizeni='20240604 11:20:15.450',@Zmenil=NULL,@DatZmeny=NULL,@ParamHe=0,@Typ=0,@BidNavBrowse=NULL,@TextNavBrowse=NULL,@ZobrUkonceni=0,@VerejnaAkce=0 +SELECT @NavaznaAkceGUID=CAST(NULL AS UNIQUEIDENTIFIER),@BlokovaniEditoru=NULL,@TextBrowse=990990,@CyklickyEditor=0,@SelectoTvurceVlastnikId=0,@VstupneID=NULL,@TechnickyPopis=NULL +SELECT @Napoveda=NULL,@Hotkey=0,@GUID=CAST(N'D2A38F2E-BB3C-41CC-AFF2-B3F63D9A0720' AS UNIQUEIDENTIFIER),@Skupina=N'',@NazevPodmenu=N'',@PoradiVPodmenu=0,@GUIDFiltr=CAST(NULL AS UNIQUEIDENTIFIER) +SELECT @eServer=0,@ZobrazitEditorPar=1,@ObsluznyPlugin=N'',@PosunPoZaznamech=0,@ObnovitPoUkonceni=1,@SkriptPredSpustenim=NULL,@Automatizace=0 + +SET @NavaznaAkce = NULL +SET @IDFiltr = NULL + +IF NOT EXISTS(SELECT * FROM dbo.TabExtKom WHERE [UP]=N'dbo.ep_P01') +INSERT dbo.TabExtKom ([GUID], Popis, [UP], Parametry, IdBrowse, Poznamka, Autor, +DatPorizeni, Zmenil, DatZmeny, ParamHe, Typ, BidNavBrowse, TextNavBrowse, +ZobrUkonceni, VerejnaAkce, BlokovaniEditoru, TextBrowse, CyklickyEditor, +SelectoTvurceVlastnikId, VstupneID, TechnickyPopis, Napoveda, Hotkey, +NavaznaAkce, Skupina, NazevPodmenu, PoradiVPodmenu, IDFiltr, +eServer, ZobrazitEditorPar, ObsluznyPlugin, PosunPoZaznamech, +ObnovitPoUkonceni, SkriptPredSpustenim, Automatizace) +VALUES (@GUID, @Popis, @UP, @Parametry, @IdBrowse, @Poznamka, @Autor, @DatPorizeni, +@Zmenil, @DatZmeny, @ParamHe, @Typ, @BidNavBrowse, @TextNavBrowse, @ZobrUkonceni, +@VerejnaAkce, @BlokovaniEditoru, @TextBrowse, @CyklickyEditor, @SelectoTvurceVlastnikId, +@VstupneID, @TechnickyPopis, @Napoveda, @Hotkey, @NavaznaAkce, @Skupina, @NazevPodmenu, +@PoradiVPodmenu, @IDFiltr, @eServer, @ZobrazitEditorPar, @ObsluznyPlugin, @PosunPoZaznamech, +@ObnovitPoUkonceni, @SkriptPredSpustenim, @Automatizace) + +SET @IdExtKom=(SELECT Id FROM dbo.TabExtKom WHERE GUID=@GUID) +DELETE dbo.TabExtKomPar WHERE IdExtKom=@IdExtKom + + +IF OBJECT_ID(N'dbo.ep_P01', N'P') IS NULL + EXEC sp_executesql @Poznamka + diff --git a/_sql/ep_P01_HDC1.sql b/_sql/ep_P01_HDC1.sql new file mode 100644 index 0000000..14e0c42 --- /dev/null +++ b/_sql/ep_P01_HDC1.sql @@ -0,0 +1,160 @@ +-- dbo.ep_P01_HDC1 +CREATE PROCEDURE dbo.ep_P01_HDC1 + @IDDoklad INT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro pekarnu nebo Windows sluzby HDCDZApi !! +-- vola se na konci procesu realizace prijemky (po uskutecneni prijmu ale pred konecnym COMMIT TRAN) +-- nastaveni skladu lze ovlivnit pres #HDCTabDefiniceProP01 (HlavniSkladMat NVARCHAR(30), TechnologickySklad NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30) ) + +-- pred finalizaci prijemky smaz vyrobni cisla (sarze hlida aplikace ProHoldingu, ale zapis si sarze do ext.info skladove karty +-- puvodni prirazeni VC k polozkam dokladu zapis do pomocne tabulice _hdc_PZ_PuvodniVC + + +SET NOCOUNT ON + +DECLARE + @errMsg NVARCHAR(500), + @bChyba BIT, + @iTemp INT + +DECLARE + @radaTechPrijem NVARCHAR(30)=N'251', + @sklTechnolog NVARCHAR(30), + @sklMatHlavni NVARCHAR(30), + @sklPekarna NVARCHAR(30) + +DECLARE + @idDZDst INT, + @cOrg INT, + @dpz TINYINT, + @dpzOld TINYINT, + @datReal DATETIME, + @dzDatum DATETIME, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6), + @jednM INT, + @vstC TINYINT, + @radaDokl NVARCHAR(3), + @idSklad NVARCHAR(30), + @idSkladOld NVARCHAR(30), + @strChyba NVARCHAR(max)=N'' + +DECLARE + @idPZ INT, + @idPZOld INT, + @idPZNew INT, + @idSS INT, + @idKZ INT, + @idVCP INT, + @vyrCis NVARCHAR(100), + @poslVyrCis NVARCHAR(100), + @popisVC NVARCHAR(100), -- paletovy list + @moukaSilo SMALLINT, + @mnoz NUMERIC(19,6), + @mnozVCP NUMERIC(19,6), + @sz NVARCHAR(3), + @nazev1 NVARCHAR(100) + + + + +IF OBJECT_ID(N'tempdb..#HDCTabDefiniceProP01', N'U') IS NOT NULL + SELECT TOP(1) @sklMatHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #HDCTabDefiniceProP01 +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavn sklad - Materil' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' AND CisloStr LIKE N'2%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna' +DROP TABLE IF EXISTS #HDCTabDefiniceProP01 + + +SELECT @dpz=DruhPohybuZbo, @radaDokl=RadaDokladu, @idSklad=IDSklad, @vstC=VstupniCena, @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, + @jednM=JednotkaMeny, @cOrg=CisloOrg, @dzDatum=DatPorizeni, @datReal=DatRealizace + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + +MERGE dbo._hdc_PZ_PuvodniVC AS T + USING dbo.TabPohybyZbozi AS S ON (S.ID=T.IDPohybZbozi) + WHEN MATCHED AND T.IDDoklad IS NULL THEN UPDATE SET T.IDDoklad=S.IDDoklad; + + + +-- na hlavnim sklade - prijemky a storna prijmu na hlavnim skladu - kopie puvodnich VC +IF (@radaDokl IN (N'251', N'259', N'261', N'269')) AND (@idSklad=@sklMatHlavni) + BEGIN + INSERT dbo._hdc_PZ_PuvodniVC (IDPohybZbozi, IDDoklad, IDZboSklad, VyrCis, IDVyrCis, Mnozstvi, Sarze, PaletovyList, IDUmisteni) + SELECT p.ID, p.IDDoklad, p.IDZboSklad, vcp.Nazev, vcp.IDVyrCis, vcp.Mnozstvi, vcp.Nazev, vcs.Nazev1, p.IDUmisteni + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) + INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@IDDoklad + ORDER BY p.Poradi, vcp.ID +-- smaz vyrobni cisla, jejich evidenci vede ProHolding + DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad) + SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) + DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) + END + + + + +-- prevodka/prijemka na sklad Pekarna +-- zapis posledni prevedene sarze +IF (@dpz=0) AND (@radaDokl=N'281') + BEGIN + DECLARE p CURSOR LOCAL FOR + SELECT p.ID, p.IDZboSklad, s.IDKmenZbozi, p.IDOldPolozka + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@IDDoklad + AND k.Sluzba=0 + ORDER BY p.Poradi + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPZ, @idSS, @idKZ, @idPZOld + IF (@@FETCH_STATUS<>0) BREAK + + SET @vyrCis = (SELECT ISNULL(peN._Vyroba_Sarze, peO._Vyroba_Sarze) + FROM dbo.TabPohybyZbozi_EXT peN, dbo.TabPohybyZbozi_EXT peO WHERE peN.ID=@idPZ AND peO.ID=@idPZOld) + IF (@vyrCis IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@vyrCis WHERE ID=@idPZ + END +-- zapis posledni prevedenou sarzi + IF NOT EXISTS(SELECT 1 FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) + INSERT dbo.TabStavSkladu_EXT (ID) VALUES (@idSS) + UPDATE dbo.TabStavSkladu_EXT SET _Prevod_PosledniSarze=@vyrCis WHERE ID=@idSS + + + SET @popisVC = (SELECT ISNULL(peN._Vyroba_PaletList, peO._Vyroba_PaletList) + FROM dbo.TabPohybyZbozi_EXT peN, dbo.TabPohybyZbozi_EXT peO WHERE peN.ID=@idPZ AND peO.ID=@idPZOld) + IF (@popisVC IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=@popisVC WHERE ID=@idPZ + END + + + SET @moukaSilo = (SELECT ISNULL(peN._Mouka_Silo, peO._Mouka_Silo) + FROM dbo.TabPohybyZbozi_EXT peN, dbo.TabPohybyZbozi_EXT peO WHERE peN.ID=@idPZ AND peO.ID=@idPZOld) + IF (@moukaSilo IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@moukaSilo WHERE ID=@idPZ + END + + END + CLOSE p + DEALLOCATE p + END -- @radaDokl 281 + diff --git a/_sql/ep_P03.sql b/_sql/ep_P03.sql new file mode 100644 index 0000000..a527c42 --- /dev/null +++ b/_sql/ep_P03.sql @@ -0,0 +1,67 @@ +/* HELIOS iNuvio | NTB-T | 2024-06-04 11:20:15 */ + +SET NOCOUNT ON +DECLARE @GUID BINARY(16),@Id INT,@Popis NVARCHAR(255),@UP NVARCHAR(255),@Parametry NVARCHAR(255),@IdBrowse INT,@Poznamka NVARCHAR(MAX),@Autor NVARCHAR(255),@DatPorizeni DATETIME,@Zmenil NVARCHAR(255),@DatZmeny DATETIME,@ParamHe INT,@Typ INT,@BidNavBrowse INT,@TextNavBrowse INT,@ZobrUkonceni BIT,@VerejnaAkce BIT,@ObnovitPoUkonceni BIT,@eServer BIT, @ZobrazitEditorPar BIT, @ObsluznyPlugin NVARCHAR(255), +@BlokovaniEditoru SMALLINT,@TextBrowse INT,@CyklickyEditor BIT,@SelectoTvurceVlastnikId BIT,@VstupneID NVARCHAR(255),@PosunPoZaznamech INT,@TechnickyPopis NVARCHAR(MAX),@Napoveda NVARCHAR(255),@Hotkey INT,@NavaznaAkce INT,@NavaznaAkceGUID BINARY(16),@Skupina NVARCHAR(255),@NazevPodmenu NVARCHAR(255),@PoradiVPodmenu INT,@err NVARCHAR(2047),@IdExtKom INT,@GUIDFiltr BINARY(16),@IDFiltr INT,@ErrStr NVARCHAR(2047),@SkriptPredSpustenim NVARCHAR(MAX),@Automatizace BIT + + +SELECT @Id=9998, @Popis=N'Spec - realizace pjemky (ped)', @UP=N'dbo.ep_P03', @Parametry=N'', @IdBrowse=990990 +SELECT @Poznamka=N'CREATE PROCEDURE dbo.ep_P03 + @IDDoklad INT +AS + +-- ped realizaci prijemky, po standardnich kontrolach, bezi uz v triggeru + + +SET NOCOUNT ON + +DECLARE + @rada NVARCHAR(3), + @idSklad NVARCHAR(30) + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury +IF OBJECT_ID(N''dbo.ep_P03_HDC1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_P03_HDC1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury pro API +IF OBJECT_ID(N''dbo.ep_P03_HDCDZApi1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_P03_HDCDZApi1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + + +' +SELECT @Autor=N'Import HDC',@DatPorizeni='20240604 11:20:15.450',@Zmenil=NULL,@DatZmeny=NULL,@ParamHe=0,@Typ=0,@BidNavBrowse=NULL,@TextNavBrowse=NULL,@ZobrUkonceni=0,@VerejnaAkce=0 +SELECT @NavaznaAkceGUID=CAST(NULL AS UNIQUEIDENTIFIER),@BlokovaniEditoru=NULL,@TextBrowse=990990,@CyklickyEditor=0,@SelectoTvurceVlastnikId=0,@VstupneID=NULL,@TechnickyPopis=NULL +SELECT @Napoveda=NULL,@Hotkey=0,@GUID=CAST(N'36FB0DA8-4645-4853-9684-71E17897692A' AS UNIQUEIDENTIFIER),@Skupina=N'',@NazevPodmenu=N'',@PoradiVPodmenu=0,@GUIDFiltr=CAST(NULL AS UNIQUEIDENTIFIER) +SELECT @eServer=0,@ZobrazitEditorPar=1,@ObsluznyPlugin=N'',@PosunPoZaznamech=0,@ObnovitPoUkonceni=1,@SkriptPredSpustenim=NULL,@Automatizace=0 + +SET @NavaznaAkce = NULL +SET @IDFiltr = NULL + +IF NOT EXISTS(SELECT * FROM dbo.TabExtKom WHERE [UP]=N'dbo.ep_P03') +INSERT dbo.TabExtKom ([GUID], Popis, [UP], Parametry, IdBrowse, Poznamka, Autor, +DatPorizeni, Zmenil, DatZmeny, ParamHe, Typ, BidNavBrowse, TextNavBrowse, +ZobrUkonceni, VerejnaAkce, BlokovaniEditoru, TextBrowse, CyklickyEditor, +SelectoTvurceVlastnikId, VstupneID, TechnickyPopis, Napoveda, Hotkey, +NavaznaAkce, Skupina, NazevPodmenu, PoradiVPodmenu, IDFiltr, +eServer, ZobrazitEditorPar, ObsluznyPlugin, PosunPoZaznamech, +ObnovitPoUkonceni, SkriptPredSpustenim, Automatizace) +VALUES (@GUID, @Popis, @UP, @Parametry, @IdBrowse, @Poznamka, @Autor, @DatPorizeni, +@Zmenil, @DatZmeny, @ParamHe, @Typ, @BidNavBrowse, @TextNavBrowse, @ZobrUkonceni, +@VerejnaAkce, @BlokovaniEditoru, @TextBrowse, @CyklickyEditor, @SelectoTvurceVlastnikId, +@VstupneID, @TechnickyPopis, @Napoveda, @Hotkey, @NavaznaAkce, @Skupina, @NazevPodmenu, +@PoradiVPodmenu, @IDFiltr, @eServer, @ZobrazitEditorPar, @ObsluznyPlugin, @PosunPoZaznamech, +@ObnovitPoUkonceni, @SkriptPredSpustenim, @Automatizace) + +SET @IdExtKom=(SELECT Id FROM dbo.TabExtKom WHERE GUID=@GUID) +DELETE dbo.TabExtKomPar WHERE IdExtKom=@IdExtKom + + +IF OBJECT_ID(N'dbo.ep_P03', N'P') IS NULL + EXEC sp_executesql @Poznamka + diff --git a/_sql/ep_P03_HDC1.sql b/_sql/ep_P03_HDC1.sql new file mode 100644 index 0000000..088b69e --- /dev/null +++ b/_sql/ep_P03_HDC1.sql @@ -0,0 +1,170 @@ +-- dbo.ep_P03_HDC1 +CREATE PROCEDURE dbo.ep_P03_HDC1 + @IDDoklad INT +AS + + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro pekarnu nebo Windows sluzby HDCDZApi !! +-- vol se ped realizac pjemky, po standardnch kontrolch, b u v triggeru + + +SET NOCOUNT ON + + +DECLARE + @errMsg NVARCHAR(500), + @iTemp INT + +DECLARE + @rada NVARCHAR(3), + @idSklad NVARCHAR(30), + @sklMatHlavni NVARCHAR(30)=N'311', + @sklPekarna NVARCHAR(30)=N'211', + @sklTechnolog NVARCHAR(30), + @idPZ INT, + @idSS INT, + @idKZ INT, + @poslVyrCis NVARCHAR(100), + @idVCP INT, + @vyrCis NVARCHAR(100), + @siloMouka SMALLINT + + + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) ) + + + +IF OBJECT_ID(N'tempdb..#TabDefiniceProP03', N'U') IS NOT NULL + SELECT TOP(1) @sklMatHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #TabDefiniceProP03 +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavn sklad - Materil' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' AND CisloStr LIKE N'2%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna' +DROP TABLE IF EXISTS #TabDefiniceProP03 + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + + +-- prijemka/prevodka na sklad Pekarna, zkontroluj zda mouka ma umisteni (ext.info pohybu OZ) +IF (@rada IN (N'251', N'261', N'281')) AND (@idSklad=@sklPekarna) + BEGIN + IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@IDDoklad AND k.SkupZbo=N'101' AND k.Nazev1 LIKE N'%mouka%' AND p.IDUmisteni IS NULL) + BEGIN + SET @errMsg = N'Mouka zadan na pjemce mus mt zadno umstn (Silo) ! (ep_P03)' + INSERT #TabExtKom (Typ, Poznamka) SELECT 3, LEFT(@errMsg, 255) + RAISERROR (@errMsg, 16, 1) + END + +-- zapis posledni prevedene sarze na skladovou kartu skladu Pekarna + DECLARE p CURSOR LOCAL FOR + SELECT p.ID, p.IDZboSklad, s.IDKmenZbozi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@IDDoklad + AND k.Sluzba=0 + ORDER BY p.Poradi + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPZ, @idSS, @idKZ + IF (@@FETCH_STATUS<>0) BREAK + + SET @poslVyrCis = N'' + DECLARE v CURSOR LOCAL FOR + SELECT ID, Nazev + FROM dbo.TabVyrCP + WHERE IDPolozkaDokladu=@idPZ + AND TRIM(ISNULL(Nazev,N''))<>N'' + ORDER BY ID + OPEN v + WHILE (1=1) + BEGIN + FETCH NEXT FROM v INTO @idVCP, @vyrCis + IF (@@FETCH_STATUS<>0) BREAK + SET @poslVyrCis = @vyrCis + END + CLOSE v + DEALLOCATE v + + IF (@poslVyrCis<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) + INSERT dbo.TabStavSkladu_EXT (ID) VALUES (@idSS) + UPDATE dbo.TabStavSkladu_EXT SET _Prevod_PosledniSarze=@poslVyrCis WHERE ID=@idSS + END + + END + CLOSE p + DEALLOCATE p + + + DECLARE c CURSOR LOCAL FOR + SELECT p.ID, CONVERT(smallint, u.Kod) + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + INNER JOIN dbo.TabUmisteni u ON (u.ID=p.IDUmisteni) + WHERE p.IDDoklad=@IDDoklad AND k.SkupZbo=N'101' AND k.Nazev1 LIKE N'%mouka%' AND p.IDUmisteni IS NOT NULL + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idPZ, @siloMouka + IF (@@FETCH_STATUS<>0) BREAK + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@siloMouka WHERE ID=@idPZ + END + CLOSE c + DEALLOCATE c + + +-- pro info zapis informaci o prevadenych VC + INSERT dbo._hdc_PZ_PuvodniVC (IDPohybZbozi, IDDoklad, IDZboSklad, VyrCis, IDVyrCis, Mnozstvi, Sarze, PaletovyList, IDUmisteni) + SELECT p.ID, p.IDDoklad, p.IDZboSklad, vcp.Nazev, vcp.IDVyrCis, vcp.Mnozstvi, vcp.Nazev, vcs.Nazev1, p.IDUmisteni + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) + INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@IDDoklad + ORDER BY p.Poradi, vcp.ID + +-- odstran umisteni, delalo by problem pri vydeji + UPDATE dbo.TabPohybyZbozi SET IDUmisteni=NULL WHERE IDDoklad=@IDDoklad +-- smaz vyrobni cisla, jejich evidenci vede ProHolding + DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad) + SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) + DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) + + END + + + + +-- prijemky a storna na hlavni sklad +IF (@rada IN (N'251', N'259', N'261', N'269')) AND (@idSklad=@sklMatHlavni) + BEGIN + INSERT dbo._hdc_PZ_PuvodniVC (IDPohybZbozi, IDDoklad, IDZboSklad, VyrCis, IDVyrCis, Mnozstvi, Sarze, PaletovyList, IDUmisteni) + SELECT p.ID, p.IDDoklad, p.IDZboSklad, vcp.Nazev, vcp.IDVyrCis, vcp.Mnozstvi, vcp.Nazev, vcs.Nazev1, p.IDUmisteni + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) + INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@IDDoklad + ORDER BY p.Poradi, vcp.ID +-- odstran umisteni, delalo by problem pri vydeji + UPDATE dbo.TabPohybyZbozi SET IDUmisteni=NULL WHERE IDDoklad=@IDDoklad +-- smaz vyrobni cisla, jejich evidenci vede ProHolding + DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad) + SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) + DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) + END + diff --git a/_sql/ep_V01.sql b/_sql/ep_V01.sql new file mode 100644 index 0000000..ba653f3 --- /dev/null +++ b/_sql/ep_V01.sql @@ -0,0 +1,68 @@ +/* HELIOS iNuvio | NTB-T.Rootvin | 2024-09-18 09:28:15 */ + +DECLARE @GUID BINARY(16),@Id INT,@Popis NVARCHAR(255),@UP NVARCHAR(255),@Parametry NVARCHAR(255),@IdBrowse INT,@Poznamka NVARCHAR(MAX),@Autor NVARCHAR(255),@DatPorizeni DATETIME,@Zmenil NVARCHAR(255),@DatZmeny DATETIME,@ParamHe INT,@Typ INT,@BidNavBrowse INT,@TextNavBrowse INT,@ZobrUkonceni BIT,@VerejnaAkce BIT,@ObnovitPoUkonceni BIT,@eServer BIT, @ZobrazitEditorPar BIT, @ObsluznyPlugin NVARCHAR(255), +@BlokovaniEditoru SMALLINT,@TextBrowse INT,@CyklickyEditor BIT,@SelectoTvurceVlastnikId BIT,@VstupneID NVARCHAR(255),@PosunPoZaznamech INT,@TechnickyPopis NVARCHAR(MAX),@Napoveda NVARCHAR(255),@Hotkey INT,@NavaznaAkce INT,@NavaznaAkceGUID BINARY(16),@Skupina NVARCHAR(255),@NazevPodmenu NVARCHAR(255),@PoradiVPodmenu INT,@err NVARCHAR(2047),@IdExtKom INT,@GUIDFiltr BINARY(16),@IDFiltr INT,@ErrStr NVARCHAR(2047),@SkriptPredSpustenim NVARCHAR(MAX),@Automatizace BIT + +SELECT @Id=6,@Popis=N'Spec - realizace vdejky (po)',@UP=N'dbo.ep_V01',@Parametry=N'',@IdBrowse=990990,@Poznamka=N'CREATE PROCEDURE dbo.ep_V01 + @IDDoklad INT +AS + +SET NOCOUNT ON + +-- doplnk realizace skladovch vdej. Vol se na konci procesu realizace vdej. Vstupn parametr ID dokladu, vstup nen. + + + +DECLARE + @rada NVARCHAR(3), + @idSklad NVARCHAR(30) + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury +IF OBJECT_ID(N''dbo.ep_V01_HDC1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_V01_HDC1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + +',@Autor=N'Import HDC',@DatPorizeni='20240918 09:23:37.193',@Zmenil=NULL,@DatZmeny=NULL,@ParamHe=0,@Typ=0,@BidNavBrowse=NULL,@TextNavBrowse=NULL,@ZobrUkonceni=0,@VerejnaAkce=0,@NavaznaAkceGUID=CAST(NULL AS UNIQUEIDENTIFIER),@BlokovaniEditoru=NULL,@TextBrowse=990990,@CyklickyEditor=0,@SelectoTvurceVlastnikId=0,@VstupneID=NULL,@TechnickyPopis=NULL,@Napoveda=NULL,@Hotkey=0,@GUID=CAST(N'5C642FF2-6E25-4FD8-AB32-F27EC5B249A3' AS UNIQUEIDENTIFIER),@Skupina=N'',@NazevPodmenu=N'',@PoradiVPodmenu=0,@GUIDFiltr=CAST(NULL AS UNIQUEIDENTIFIER),@eServer=0,@ZobrazitEditorPar=1,@ObsluznyPlugin=N'',@PosunPoZaznamech=0,@ObnovitPoUkonceni=0,@SkriptPredSpustenim=NULL,@Automatizace=0 +IF @NavaznaAkceGUID IS NULL +SET @NavaznaAkce = NULL +ELSE +BEGIN +SET @NavaznaAkce=(SELECT Id FROM dbo.TabExtKom WHERE GUID=@NavaznaAkceGUID) +IF @NavaznaAkce IS NULL +BEGIN +SET @err=CAST(CAST(@NavaznaAkceGUID AS UNIQUEIDENTIFIER)AS NVARCHAR(36)) +SET @ErrStr = dbo.hf_FormatError(75037, @err) +RAISERROR(@ErrStr, 16, 1) +RETURN +END +END +IF @GUIDFiltr IS NULL +SET @IDFiltr = NULL +ELSE +SELECT @IDFiltr = ID FROM TabFiltr WHERE GUID = @GUIDFiltr + +IF NOT EXISTS(SELECT * FROM dbo.TabExtKom WHERE [UP]=N'dbo.ep_V01') +INSERT dbo.TabExtKom (GUID,Popis,UP,Parametry,IdBrowse,Poznamka,Autor, +DatPorizeni,Zmenil,DatZmeny,ParamHe,Typ,BidNavBrowse,TextNavBrowse, +ZobrUkonceni,VerejnaAkce,BlokovaniEditoru,TextBrowse,CyklickyEditor, +SelectoTvurceVlastnikId,VstupneID,TechnickyPopis,Napoveda,Hotkey, +NavaznaAkce,Skupina,NazevPodmenu,PoradiVPodmenu,IDFiltr, +eServer, ZobrazitEditorPar, ObsluznyPlugin, PosunPoZaznamech, +ObnovitPoUkonceni,SkriptPredSpustenim,Automatizace) +VALUES (@GUID,@Popis,@UP,@Parametry,@IdBrowse,@Poznamka,@Autor,@DatPorizeni, +@Zmenil,@DatZmeny,@ParamHe,@Typ,@BidNavBrowse,@TextNavBrowse,@ZobrUkonceni, +@VerejnaAkce,@BlokovaniEditoru,@TextBrowse,@CyklickyEditor,@SelectoTvurceVlastnikId, +@VstupneID,@TechnickyPopis,@Napoveda,@Hotkey,@NavaznaAkce,@Skupina,@NazevPodmenu, +@PoradiVPodmenu,@IDFiltr,@eServer,@ZobrazitEditorPar,@ObsluznyPlugin,@PosunPoZaznamech, +@ObnovitPoUkonceni,@SkriptPredSpustenim,@Automatizace) + +SET @IdExtKom=(SELECT Id FROM dbo.TabExtKom WHERE GUID=@GUID) +DELETE dbo.TabExtKomPar WHERE IdExtKom=@IdExtKom + +IF OBJECT_ID(N'dbo.ep_V01', N'P') IS NULL + EXEC sp_executesql @Poznamka diff --git a/_sql/ep_V01_HDC1.sql b/_sql/ep_V01_HDC1.sql new file mode 100644 index 0000000..bee6e2c --- /dev/null +++ b/_sql/ep_V01_HDC1.sql @@ -0,0 +1,93 @@ +-- dbo.ep_V01_HDC1 +CREATE PROCEDURE dbo.ep_V01_HDC1 + @IDDoklad INT=NULL +AS + +SET NOCOUNT ON + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro pekarnu nebo Windows sluzby HDCDZApi !! +-- doplnk realizace skladovch vdej. Vol se na konci procesu realizace vdej. Vstupn parametr ID dokladu, vstup nen. + + +IF (@IDDoklad IS NULL) -- jistota je jistota + RETURN + + +DECLARE + @errMsg NVARCHAR(500), + @iTemp INT, + @bChyba BIT, + @iChyba INT + +DECLARE + @rada NVARCHAR(3), + @dpz TINYINT, + @idSklad NVARCHAR(30), + @radaPrev NVARCHAR(3), + @idSkladPrev NVARCHAR(30), + @sklMatHlavni NVARCHAR(30)=N'311', + @sklPekarna NVARCHAR(30)=N'211', + @sklTechnolog NVARCHAR(30), + @paletList NVARCHAR(100), + @sarze NVARCHAR(100), + @siloMouka SMALLINT, + @idPZ INT, + @idPZNew INT + + + + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) ) + + +IF OBJECT_ID(N'tempdb..#HDCTabDefiniceProV01', N'U') IS NOT NULL + SELECT TOP(1) @sklMatHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #HDCTabDefiniceProV01 +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavn sklad - Materil' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' AND CisloStr LIKE N'2%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna' +DROP TABLE IF EXISTS #HDCTabDefiniceProV01 + + + + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad, @dpz=DruhPohybuZbo, @idSkladPrev=IdSkladPrevodu, @radaPrev=TypPrevodky + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +-- pri prevodce na polozky nasledujici prijemky zapis sarzi/paletovy list/cislo sila u mouky +IF (@rada=N'231') AND (@idSklad=@sklMatHlavni) AND (@radaPrev=N'281') AND (@idSkladPrev=@sklPekarna) + BEGIN + DECLARE c CURSOR LOCAL FOR + SELECT p.ID, pe._Vyroba_Sarze, pe._Vyroba_PaletList, pe._Mouka_Silo + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabPohybyZbozi_EXT pe ON (pe.ID=p.ID) + INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + WHERE p.IDDoklad=@IDDoklad + AND d.RadaDokladu=N'231' + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idPZ, @sarze, @paletList, @siloMouka + IF (@@FETCH_STATUS<>0) BREAK + +-- dohledej polozku "protilehle" prijemky + SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + WHERE d.RadaDokladu=N'281' AND d.DruhPohybuZbo=0 AND p.IDOldPolozka=@idPZ) + IF (@idPZNew IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZNew) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZNew) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@sarze, _Vyroba_PaletList=@paletList, _Mouka_Silo=@siloMouka WHERE ID=@idPZNew + END + END + CLOSE c + DEALLOCATE c + END -- vydejka/prevodka 231 z hlavniho skladu na pekarnu + diff --git a/_sql/ep_V03.sql b/_sql/ep_V03.sql new file mode 100644 index 0000000..5b965d7 --- /dev/null +++ b/_sql/ep_V03.sql @@ -0,0 +1,67 @@ +SET NOCOUNT ON +DECLARE @GUID BINARY(16),@Id INT,@Popis NVARCHAR(255),@UP NVARCHAR(255),@Parametry NVARCHAR(255),@IdBrowse INT,@Poznamka NVARCHAR(MAX),@Autor NVARCHAR(255),@DatPorizeni DATETIME,@Zmenil NVARCHAR(255),@DatZmeny DATETIME,@ParamHe INT,@Typ INT,@BidNavBrowse INT,@TextNavBrowse INT,@ZobrUkonceni BIT,@VerejnaAkce BIT,@ObnovitPoUkonceni BIT,@eServer BIT, @ZobrazitEditorPar BIT, @ObsluznyPlugin NVARCHAR(255), +@BlokovaniEditoru SMALLINT,@TextBrowse INT,@CyklickyEditor BIT,@SelectoTvurceVlastnikId BIT,@VstupneID NVARCHAR(255),@PosunPoZaznamech INT,@TechnickyPopis NVARCHAR(MAX),@Napoveda NVARCHAR(255),@Hotkey INT,@NavaznaAkce INT,@NavaznaAkceGUID BINARY(16),@Skupina NVARCHAR(255),@NazevPodmenu NVARCHAR(255),@PoradiVPodmenu INT,@err NVARCHAR(2047),@IdExtKom INT,@GUIDFiltr BINARY(16),@IDFiltr INT,@ErrStr NVARCHAR(2047),@SkriptPredSpustenim NVARCHAR(MAX),@Automatizace BIT + + +SELECT @Id=9998, @Popis=N'Spec - realizace vdejky (ped)', @UP=N'dbo.ep_V03', @Parametry=N'', @IdBrowse=990990 +SELECT @Poznamka=N'CREATE PROCEDURE dbo.ep_V03 + @IDDoklad INT=NULL +AS + +-- doplnek realizace skladovych vydeju, vola se na zacatku transakce v prubehu procesu realizace vydeju +-- vstupni parametr @ID INT -- ID hlavicky realizovaneho dokladu; vystup neni +-- Pozadovana funkcnost: napr. doplneni vazby do vyroby a napocet NV + + +SET NOCOUNT ON + +DECLARE + @rada NVARCHAR(3), + @idSklad NVARCHAR(30) + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury +IF OBJECT_ID(N''dbo.ep_V03_HDC1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_V03_HDC1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + +-- pro reseni HDC Strakonice, moznost dalsi slepe procedury pro API +IF OBJECT_ID(N''dbo.ep_V03_HDCDZApi1'', N''P'') IS NOT NULL + EXEC sp_executesql N''EXEC dbo.ep_V03_HDCDZApi1 @IDDoklad'', N''@IDDoklad INT'', @IDDoklad + + +' +SELECT @Autor=N'Import HDC',@DatPorizeni='20240822 11:20:15.450',@Zmenil=NULL,@DatZmeny=NULL,@ParamHe=0,@Typ=0,@BidNavBrowse=NULL,@TextNavBrowse=NULL,@ZobrUkonceni=0,@VerejnaAkce=0 +SELECT @NavaznaAkceGUID=CAST(NULL AS UNIQUEIDENTIFIER),@BlokovaniEditoru=NULL,@TextBrowse=990990,@CyklickyEditor=0,@SelectoTvurceVlastnikId=0,@VstupneID=NULL,@TechnickyPopis=NULL +SELECT @Napoveda=NULL,@Hotkey=0,@GUID=CAST(N'CA4BC316-F9EB-4A68-B6D5-ED93911426E2' AS UNIQUEIDENTIFIER),@Skupina=N'',@NazevPodmenu=N'',@PoradiVPodmenu=0,@GUIDFiltr=CAST(NULL AS UNIQUEIDENTIFIER) +SELECT @eServer=0,@ZobrazitEditorPar=1,@ObsluznyPlugin=N'',@PosunPoZaznamech=0,@ObnovitPoUkonceni=1,@SkriptPredSpustenim=NULL,@Automatizace=0 + +SET @NavaznaAkce = NULL +SET @IDFiltr = NULL + +IF NOT EXISTS(SELECT * FROM dbo.TabExtKom WHERE [UP]=N'dbo.ep_V03') +INSERT dbo.TabExtKom ([GUID], Popis, [UP], Parametry, IdBrowse, Poznamka, Autor, +DatPorizeni, Zmenil, DatZmeny, ParamHe, Typ, BidNavBrowse, TextNavBrowse, +ZobrUkonceni, VerejnaAkce, BlokovaniEditoru, TextBrowse, CyklickyEditor, +SelectoTvurceVlastnikId, VstupneID, TechnickyPopis, Napoveda, Hotkey, +NavaznaAkce, Skupina, NazevPodmenu, PoradiVPodmenu, IDFiltr, +eServer, ZobrazitEditorPar, ObsluznyPlugin, PosunPoZaznamech, +ObnovitPoUkonceni, SkriptPredSpustenim, Automatizace) +VALUES (@GUID, @Popis, @UP, @Parametry, @IdBrowse, @Poznamka, @Autor, @DatPorizeni, +@Zmenil, @DatZmeny, @ParamHe, @Typ, @BidNavBrowse, @TextNavBrowse, @ZobrUkonceni, +@VerejnaAkce, @BlokovaniEditoru, @TextBrowse, @CyklickyEditor, @SelectoTvurceVlastnikId, +@VstupneID, @TechnickyPopis, @Napoveda, @Hotkey, @NavaznaAkce, @Skupina, @NazevPodmenu, +@PoradiVPodmenu, @IDFiltr, @eServer, @ZobrazitEditorPar, @ObsluznyPlugin, @PosunPoZaznamech, +@ObnovitPoUkonceni, @SkriptPredSpustenim, @Automatizace) + +SET @IdExtKom=(SELECT Id FROM dbo.TabExtKom WHERE GUID=@GUID) +DELETE dbo.TabExtKomPar WHERE IdExtKom=@IdExtKom + + +IF OBJECT_ID(N'dbo.ep_V03', N'P') IS NULL + EXEC sp_executesql @Poznamka + diff --git a/_sql/ep_V03_HDC1.sql b/_sql/ep_V03_HDC1.sql new file mode 100644 index 0000000..5e4a659 --- /dev/null +++ b/_sql/ep_V03_HDC1.sql @@ -0,0 +1,103 @@ +-- dbo.ep_V03_HDC1 +CREATE PROCEDURE dbo.ep_V03_HDC1 + @IDDoklad INT +AS + + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro pekarnu nebo Windows sluzby HDCDZApi !! +-- doplnek realizace skladovch vdeju, vola se na zacatku transakce v prubehu procesu realizace vdeju +-- vstupni parametr @ID INT -- ID hlavicky realizovaneho dokladu; vstup neni +-- Pozadovana funkcnost: napr. doplneni vazby do vyroby a napocet NV. + + +SET NOCOUNT ON + + +DECLARE + @errMsg NVARCHAR(500), + @iTemp INT + +DECLARE + @dpz TINYINT, + @rada NVARCHAR(3), + @idPZ INT, + @idSklad NVARCHAR(30), + @idSkladPrev NVARCHAR(30), + @radaPrev NVARCHAR(3), + @sklMatHlavni NVARCHAR(30)=N'311', + @sklPekarna NVARCHAR(30)=N'211', + @sklTechnolog NVARCHAR(30), + @paletList NVARCHAR(100), + @sarze NVARCHAR(100) + + + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) ) + + + +IF OBJECT_ID(N'tempdb..#HDCTabDefiniceProV03', N'U') IS NOT NULL + SELECT TOP(1) @sklMatHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #HDCTabDefiniceProV03 +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavn sklad - Materil' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' AND CisloStr LIKE N'2%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna' +DROP TABLE IF EXISTS #HDCTabDefiniceProV03 + + + +SELECT @rada=RadaDokladu, @idSklad=IDSklad, @dpz=DruhPohybuZbo, @idSkladPrev=IdSkladPrevodu, @radaPrev=TypPrevodky + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + + +-- vydejka/prevodka na sklad Pekarna +IF (@rada IN (N'231')) AND (@idSklad=@sklMatHlavni) AND (@idSkladPrev=@sklPekarna) AND (@radaPrev=N'281') + BEGIN + +-- zapis VC na externi info + DECLARE p CURSOR LOCAL FOR + SELECT p.ID, vcs.Nazev1, vcp.Nazev + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + INNER JOIN dbo.TabVyrCP vcp ON (p.ID=vcp.IDPolozkaDokladu) + INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@IDDoklad + AND k.Sluzba=0 + ORDER BY p.Poradi + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPZ, @paletList, @sarze + IF (@@FETCH_STATUS<>0) BREAK + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=ISNULL(_Vyroba_Sarze, IIF(_Vyroba_Sarze IS NOT NULL, N',', N'') + @sarze) WHERE ID=@idPZ + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=ISNULL(_Vyroba_PaletList, IIF(_Vyroba_PaletList IS NOT NULL, N',', N'') + @paletList) WHERE ID=@idPZ + END + CLOSE p + DEALLOCATE p + +-- zapis do pomocne tabulky + INSERT dbo._hdc_PZ_PuvodniVC (IDPohybZbozi, IDDoklad, IDZboSklad, VyrCis, IDVyrCis, Mnozstvi, Sarze, PaletovyList, IDUmisteni) + SELECT p.ID, p.IDDoklad, p.IDZboSklad, vcp.Nazev, vcp.IDVyrCis, vcp.Mnozstvi, vcp.Nazev, vcs.Nazev1, p.IDUmisteni + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) + INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@IDDoklad + ORDER BY p.Poradi, vcp.ID +-- odstran umisteni, delalo by problem pri vydeji + UPDATE dbo.TabPohybyZbozi SET IDUmisteni=NULL WHERE IDDoklad=@IDDoklad + +-- smaz vyrobni cisla, jejich evidenci vede ProHolding + DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad) + SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) + DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) + END + diff --git a/_sql/ep_Vyroba_Doklady_Micharna.sql b/_sql/ep_Vyroba_Doklady_Micharna.sql new file mode 100644 index 0000000..c7db455 --- /dev/null +++ b/_sql/ep_Vyroba_Doklady_Micharna.sql @@ -0,0 +1,1551 @@ +-- dbo.ep_Vyroba_Doklady_Micharna +CREATE PROCEDURE dbo.ep_Vyroba_Doklady_Micharna + @idJson INT=NULL +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! +-- sklady/rady lze ovlivnit nastavenim tabulky #HDCTabDefiniceProZapisJSON +-- CREATE TABLE #HDCTabDefiniceProZapisJSON (HlavniSkladMat NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30), TechnologickySklad NVARCHAR(30), SkladVyrobky NVARCHAR(30), +-- RadaTechnologickyVydej NVARCHAR(3) ) + + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT, + @errMsg NVARCHAR(500), + @bChyba BIT, + @iChyba INT, + @debugXml XML, + @gKV XML, + @kv XML, + @odv XML, + @aktDatum DATETIME=GETDATE(), + @logTyp TINYINT, + @logText NVARCHAR(500), + @logInt INT, + @logStr NVARCHAR(255), + @log4Mail BIT=0 + +DECLARE + @jsonString NVARCHAR(MAX), + @jsonString2 NVARCHAR(MAX), + @typDokum NVARCHAR(50), + @subtypDokum NVARCHAR(50), + @akce NVARCHAR(50) + +DECLARE + @cOrg INT, + @sklMat NVARCHAR(30), + @sklTechnicky NVARCHAR(30), + @sklPek NVARCHAR(30), + @sklProFin NVARCHAR(30)=N'312', + @sklProPolo NVARCHAR(30)=N'311', + @radaTechVydej NVARCHAR(30)=N'223', + @radaTechPrijem NVARCHAR(30)=N'', + @sklVydejMat NVARCHAR(30), + @radaDZVydejka NVARCHAR(3)=NULL, + @radaDZPrevodV NVARCHAR(3)=NULL, + @prevodka BIT=0, + @parZnak NVARCHAR(20) + +DECLARE + @idPHIdent BIGINT, + @idPHIdentBak BIGINT, + @idPHIdent2 BIGINT, + @idPHObj INT, + @idPHObjPol INT + +DECLARE + @datPorizeni DATETIME, + @idVPr INT, + @idZakazModif INT, + @radaVPr NVARCHAR(10), + @cisloPrikazu NVARCHAR(20), + @idVPrNizsi INT, + @radaVPrNizsi NVARCHAR(10), + @idVPrVyssi INT, + @radaVPrVyssi NVARCHAR(10), + @dilec INT, + @dilecVyssi INT, + @idZakazka INT, + @cisloZak NVARCHAR(30), + @casStart DATETIME, + @vyrobniDen DATETIME, + @smena TINYINT, + @casStartOld DATETIME, + @viskoz TINYINT, + @vodaLitry NUMERIC(12,3), + @moukaKgNorma NUMERIC(19,6), + @moukaKgFin NUMERIC(19,6), + @moukaSilo TINYINT, + @jsemMouka BIT, + @hmotTesta NUMERIC(19,6), + @idMzda INT, + @idMezd NVARCHAR(max), + @nazevDilce NVARCHAR(100), + @skCasSek INT, + @casKonec DATETIME, + @idSS INT, + @rDoklVyd NVARCHAR(3), + @idDZ INT, + @idDZDst INT, + @idPZ INT, + @datumDZ DATETIME, + @datReal DATETIME, + @menaDZ NVARCHAR(3), + @kurzDZ NUMERIC(19,6), + @kurzEDZ NUMERIC(19,6), + @dpz TINYINT, + @jednM INT, + @vstC TINYINT + +DECLARE + @mnDavkaPred NUMERIC(19,6), + @mnDavkaPo NUMERIC(19,6), + @procZtrat NUMERIC(19,6), + @mnBezZtrat NUMERIC(19,6), + @mnSeZtrat NUMERIC(19,6) + +DECLARE + @doklKV INT, + @idPrKVazby INT, + @doklPrV INT, + @altPrV NCHAR(1), + @oper NVARCHAR(4), + @popisOper NVARCHAR(100), + @jeOdvOperace BIT, + @pozice NVARCHAR(100), + @idKZ INT, + @nazev1 NVARCHAR(100), + @idVCK INT, + @idVCS INT, + @idVCP INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @idUmist INT, + @sarze NVARCHAR(30), + @paletList NVARCHAR(30), + @mnozDilec NUMERIC(19,6), + @mnoz NUMERIC(19,6), + @mnoz2 NUMERIC(19,6), + @mnozVyd NUMERIC(19,6), + @mnozReq NUMERIC(19,6), + @mnozNew NUMERIC(19,6), + @mnozEvid NUMERIC(19,6), + @idVazVP INT, + @mnozVyssiReq NUMERIC(19,6), + @mnozVyssiOdv NUMERIC(19,6) + +DECLARE + @idStartStopOp INT, + @idPracoviste INT, + @idPracovisteOld INT, + @idStroj INT, + @strojPec NVARCHAR(40), + @statusStroje NVARCHAR(50), + @idEvROp INT, + @idEvROpR INT, + @cisZam INT, + @idZam INT, + @doklPrP INT, + @altPrP NCHAR(1) + +DECLARE + @retVal INT, + @RespekExistDoklady BIT=0, + @NekontrolMnozOdvedFinal BIT, + @idUziv INT + +DECLARE + @idKZv INT, + @idKZn INT, + @idPrKVazbyPolot INT, + @idPrKVazbyNova INT, + @novaPriorita INT, + @mnozVaz NUMERIC(19,6), + @mnozZadVaz NUMERIC(19,6), + @procZtrVaz NUMERIC(19,6), + @idOdchylVaz INT + +DECLARE + @idDZPomocPrij INT, + @radaPrijem NVARCHAR(3)='292', + @menaPrij NVARCHAR(3), + @kurzPrij NUMERIC(19,6), + @kurzPrijE NUMERIC(19,6), + @vstCPrij TINYINT, + @jednMPrij INT, + @idPZPomocPrij INT, + @idSSPomocPrij INT, + @mnozSklad NUMERIC(19,6), + @mnozVydej NUMERIC(19,6), + @mnozPrij NUMERIC(19,6) + + + + +DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent BIGINT ) +DECLARE @PrKVazby TABLE (ID INT NOT NULL, Sklad NVARCHAR(30), IDKmenZbozi INT, Mnozstvi NUMERIC(19,6) DEFAULT 0.0 ) +DECLARE @TabPolozky TABLE (ID INT IDENTITY(1,1) NOT NULL, IDKmen INT, Sarze NVARCHAR(100), PaletList NVARCHAR(100) ) +DECLARE @TabIDMzdy TABLE (ID INT NOT NULL) + + +-- tabulky pro generovani vydejky a odvodu +DROP TABLE IF EXISTS #TabOdved +CREATE TABLE #TabOdved ( + ID INT IDENTITY NOT NULL, + IDPrikaz INT NOT NULL, + IDDilec INT NOT NULL, + IDZakazModif INT NULL, + IDZakazka INT NULL, + maxMnozstvi NUMERIC(19,6) NULL, + mnozstvi NUMERIC(19,6) NOT NULL, + EvidJednotka NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + KodUmisteni NVARCHAR(15) NULL, + IDPohZbo INT NULL, + PomVnoreni INT NULL, + StavPrikazu TINYINT NULL, + PRIMARY KEY(ID) +) + +DROP TABLE IF EXISTS #TabOdved_IDMzdy +CREATE TABLE #TabOdved_IDMzdy (IDPrikaz int, IDMzdy int) + +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +CREATE TABLE #TabVyrCisProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + MaxMnozstvi NUMERIC(19,6) NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + +DROP TABLE IF EXISTS #TabPolotovProGenOdv +CREATE TABLE #TabPolotovProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + Doklad INT NOT NULL, + IDDilec INT NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + MaxMnozstvi NUMERIC(19,6) NULL, + PRIMARY KEY(ID) +) + +DROP TABLE IF EXISTS #TabGenPrijem +CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID)) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGen +CREATE TABLE #TabPrKVazbyGen ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NVARCHAR(max) NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + MJ NVARCHAR(10) NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +CREATE TABLE #TabPrKVazbyGen_IDMzdy (IDPrikaz int, Doklad int, IDMzdy int) + +DROP TABLE IF EXISTS #TabPrKVazbyGenVC +CREATE TABLE #TabPrKVazbyGenVC ( + ID INT IDENTITY NOT NULL, + IDPolozky INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + IDKmenZbozi INT NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + +DROP TABLE IF EXISTS #TabGenRezVyd +CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID)) + + +-- reseed +SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabPohybyZbozi), 0) +DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @cnt) +SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabDokladyZbozi), 0) +DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @cnt) +SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabPrikazMzdyAZmetky), 0) +DBCC CHECKIDENT (TabPrikazMzdyAZmetky, RESEED, @cnt) +SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabEvidRozpracOper), 0) +DBCC CHECKIDENT (TabEvidRozpracOper, RESEED, @cnt) +SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabEvidRozpracOperR), 0) +DBCC CHECKIDENT (TabEvidRozpracOperR, RESEED, @cnt) + + +-- vytvor pomocnou tabulku +DROP TABLE IF EXISTS #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) + + +-- odlinkuj neplatna data +UPDATE dbo._hdc_ph_PrijataJsonData SET IDDoklad=NULL WHERE IDDoklad NOT IN (SELECT ID FROM dbo.TabDokladyZbozi) +UPDATE dbo._hdc_ph_PrijataJsonData SET IDMzda=NULL WHERE IDMzda NOT IN (SELECT ID FROM dbo.TabPrikazMzdyAZmetky) + + + +IF OBJECT_ID(N'tempdb..#HDCTabDefiniceProZapisJSON', N'U') IS NOT NULL + SELECT TOP(1) @sklMat=HlavniSkladMat, @sklPek=SkladVyrobaPekarna, @sklTechnicky=TechnologickySklad, @radaTechVydej=RadaTechnologickyVydej, @sklProFin=SkladVyrobky + FROM #HDCTabDefiniceProZapisJSON +DROP TABLE IF EXISTS #HDCTabDefiniceProZapisJSON + +IF (@sklMat IS NULL) + SELECT @sklMat=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavn sklad - Materil' +SET @sklProPolo = @sklMat +IF (@sklTechnicky IS NULL) + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' AND CisloStr LIKE N'2%' +IF (@sklPek IS NULL) + SELECT @sklPek=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna' +IF (@sklTechnicky IS NULL) AND (@sklPek IS NOT NULL) + SET @sklTechnicky=@sklPek +IF (@sklProFin IS NULL) + SELECT @sklProFin=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Hlavn sklad - Vrobky / Zbo' + +IF (@radaTechVydej IS NOT NULL) + SET @radaDZVydejka = @radaTechVydej + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + + +IF (@idJson IS NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, Akce + FROM dbo._hdc_ph_PrijataJsonData + WHERE DatZpracovani IS NULL + AND ISNULL(JSONData, N'')<>N'' + AND DatPorizeni>CONVERT(datetime,N'18.3.2025',104) + ORDER BY DatPorizeni ASC + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, Akce + FROM dbo._hdc_ph_PrijataJsonData + WHERE ID=@idJson +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString, @akce + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + CONTINUE + + IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3 + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) WHERE ID=@idJson + CONTINUE + END + + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL WHERE ID=@idJson + + SET @logTyp = 0 + SET @logInt = NULL + SET @logStr = N'' + SET @log4Mail = 0 + SET @logText = N'' + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + + BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + +-- BEGIN: SPOTREBA/ODPIS + IF (@akce=N'vyroba_spotreba') + BEGIN + DELETE FROM @PrKVazby + SET @radaDZVydejka = N'223' + + + SELECT @typDokum=u2.typ, @subtypDokum=ISNULL(u2.subtyp, N''), @idPHIdent=u2.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId BIGINT) AS u2; + + IF (@idPHIdent IS NOT NULL) + UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson; + + +-- SPOTREBA PLUS UKONCENI OPERACE MICHANI ---------------------------------------------------- + IF (@typDokum='vyroba') + BEGIN + SET @mnozEvid = NULL + + IF (@subtypDokum='michani') + BEGIN + SET @vodaLitry = 0 + SET @moukaKgNorma = 0 + SET @moukaKgFin = 0 + SET @moukaSilo = 0 + + SELECT @idStroj=u3.heliosId, @idPHIdent=u2.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (datazoneId BIGINT, stroj NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (stroj) + WITH (heliosId INT) u3; + + SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec, @viskoz=u3.viskozita, @moukaSilo=u3.silo + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (prikaz) + WITH (heliosId INT, datazoneId BIGINT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME, viskozita TINYINT, silo TINYINT) u3; + END -- michani + + + IF (@subtypDokum='maceni') OR (@subtypDokum='baleni') + BEGIN + SELECT @idPHIdent=u2.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (datazoneId BIGINT, stroj NVARCHAR(MAX) AS JSON) AS u2; + + SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (prikaz) + WITH (heliosId INT, datazoneId BIGINT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME) u3; + END -- maceni/baleni + + +-- je prikaz zadany ? Pokud ne, pokracuj na dalsi json + IF EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu NOT IN (30)) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Pikaz je ji uzaven' WHERE ID=@idJson + CONTINUE + END + + + + SET @idPHIdentBak = @idPHIdent + SELECT @vyrobniDen=Datum, @smena=Smena FROM dbo.ef_GetDatumASmenu(@casStart) + + SELECT @idStartStopOp=ID FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrikaz=@idVPr AND IDPHIdent=@idPHIdent + + SELECT @dilec=IdTabKmen, @radaVPr=Rada, @idZakazModif=IDZakazModif, @idZakazka=IDZakazka, @mnozDilec=kusy_zad FROM dbo.TabPrikaz WHERE ID=@idVPr + SELECT @cisloZak=CisloZakazky FROM dbo.TabZakazka WHERE ID=@idZakazka + IF (@radaDZVydejka IS NULL) + SET @radaDZVydejka = ISNULL( (SELECT RadaDokl_GenerRezVyd_Mat FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr), @radaDZVydejka) +-- SET @sklMat = ISNULL( (SELECT VydejMatPol_SkladProGenHlavDZ FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr), @sklMat) + +-- povol evidenci a odvod vice ks nez je na prikazu + UPDATE dbo.TabRadyPrikazu SET NekontrolMnozEvidMezd=1 WHERE Rada=@radaVPr AND NekontrolMnozEvidMezd=0 + UPDATE dbo.TabRadyPrikazu SET NekontrolMnozOdvedFinal=1 WHERE Rada=@radaVPr AND NekontrolMnozOdvedFinal=0 + + + SET @idDZ = (SELECT IDDoklad FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson) + IF (@idDZ IS NULL) -- @idDZ uz existuje ? Ne, udelej vydejku na prikaz + BEGIN + + DELETE FROM @TabPolozky + + SELECT @jsonString2=u2.vydej + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH (akce NVARCHAR(50), [data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH ( vydej NVARCHAR(MAX) AS JSON) AS u2 + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString2 + DECLARE p CURSOR LOCAL FOR + SELECT u.nazev, u.skupzbo, u.regcis, u.sarze, u.paletovylist, u.mnozstvi, u.mnozstviVychozi, u.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ( nazev NVARCHAR(100), skupzbo NVARCHAR(3), regcis NVARCHAR(30), sarze NVARCHAR(30), paletovyList NVARCHAR(30), mnozstvi NUMERIC(19,6), mnozstviVychozi NUMERIC(19,6), datazoneId INT) AS u + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @nazev1, @sz, @rc, @sarze, @paletList, @mnoz, @mnoz2, @idPHIdent + IF (@@FETCH_STATUS<>0) BREAK + + SET @paletList = ISNULL(@paletList, N'') + + IF (@sz=N'921') AND (@rc=N'001000') + SET @vodaLitry = @mnoz + IF (@sz=N'101') AND (@nazev1 LIKE N'%mouka%') + BEGIN + SET @moukaKgFin = @mnoz + SET @moukaKgNorma = @mnoz2 + END + + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo<>N'921' AND SkupZbo=@sz AND RegCis=@rc AND (Material=1 OR Dilec=1) AND Sluzba=0) + IF (@idKZ IS NOT NULL) + BEGIN + INSERT @TabPolozky (IDKmen, Sarze, PaletList) SELECT @idKZ, @sarze, @paletList +-- najdi vazbu vc. kontroly jestli polozka neni rezijni material + SET @idPrKVazby = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND vyssi=@dilec AND nizsi=@idKZ AND IDOdchylkyDo IS NULL AND RezijniMat=0) + +-- pokud neni material v pozadavcich prikazu, pridej ho (neni v TPV) + IF (@idPrKVazby IS NULL) AND (@mnoz>0) + EXEC @idPrKVazby=dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz, @Mnoz_zad=@mnoz, @VychoziSklad=@sklTechnicky + + IF (@idPrKVazby IS NOT NULL) + BEGIN + INSERT @PrKVazby (ID, Sklad, IDKmenZbozi, Mnozstvi) + SELECT ID, Sklad, @idKZ, @mnoz FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby + UPDATE dbo.TabPrKVazby SET Sklad=@sklTechnicky WHERE ID=@idPrKVazby + + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklTechnicky) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklTechnicky, @IDZboSklad=@idSS OUT + END -- @idPrKVazby IS NOT NULL + END -- @idKZ IS NOT NULL + END + CLOSE p + DEALLOCATE p + SET @kv = (SELECT * FROM @PrKVazby FOR XML AUTO) + + + IF (@subtypDokum='michani') OR (@subtypDokum=N'') + BEGIN + SET @mnozEvid = ISNULL(@mnozEvid, 1) +-- UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnoz>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnoz END WHERE IDPrikaz=@idVPr + UPDATE #tabOdved SET mnozstvi=@mnoz WHERE IDPrikaz=@idVPr + IF (@@ROWCOUNT=0) + INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu) + SELECT P.ID, + CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END, + ZMD.IDZakazModif, + P.IDZakazka, + NULL, -- nekontrolovat odvedene mnozstvi + P.EvidJednotka, + @mnozEvid, -- u michani by mela byt vzdy jen jedna davka + @sklTechnicky, + P.StavPrikazu + FROM dbo.TabPrikaz P + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen) + LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID) + LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen) + WHERE P.ID=@idVPr + END + ELSE + BEGIN -- ne michani +-- UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnoz>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnoz END WHERE IDPrikaz=@idVPr + UPDATE #tabOdved SET mnozstvi=@mnoz WHERE IDPrikaz=@idVPr + IF (@@ROWCOUNT=0) + INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu) + SELECT P.ID, + CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END, + ZMD.IDZakazModif, + P.IDZakazka, + CASE WHEN @NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END, + P.EvidJednotka, + @mnoz, + P.sklad, + P.StavPrikazu + FROM dbo.TabPrikaz P + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen) + LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID) + LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen) + WHERE P.ID=@idVPr AND + (CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnoz>P.kusy_zive THEN P.kusy_zive ELSE @mnoz END)>0 + END + SET @odv = (SELECT * FROM #TabOdved FOR XML AUTO) + + SET @RespekExistDoklady=0 + SET @NekontrolMnozOdvedFinal=1 + + INSERT INTO #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, + Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, + mnozstviSeZtratou, Prirez, Poznamka) + SELECT PrKV.ID, + PrKV.mnoz_zad*O.mnozstvi/P.kusy_zad + - CASE WHEN @RespekExistDoklady=1 THEN (PrKV.VydanoRefMnoz-PrKV.Mnoz_nepotrebne) + + (SELECT ISNULL(SUM(PZ2.prepmnozstvi*(PZ2.mnozstvi-PZ2.MnOdebrane) * PrKV2.RefMnoz / PrKV2.mnoz_zad), 0.0) + FROM TabPohybyZbozi PZ2 + INNER JOIN TabDokladyZbozi DZ2 ON (DZ2.ID=PZ2.IDDoklad AND DZ2.splneno=0) + INNER JOIN TabStavSkladu SS2 ON (SS2.ID=PZ2.IDZboSklad) + INNER JOIN TabPrKVazby PrKV2 ON (PrKV2.IDPrikaz=PZ2.IDPrikaz AND PrKV2.Doklad=PZ2.DokladPrikazu AND PrKV2.nizsi=SS2.IDKmenZbozi AND PrKV2.IDOdchylkyDo IS NULL) + WHERE PZ2.TypVyrobnihoDokladu=1 AND PZ2.IDPrikaz=PrKV.IDPrikaz AND PZ2.DokladPrikazu=PrKV.Doklad AND PZ2.Splneno=0 AND + PZ2.druhPohybuZbo IN (2,4,9,10) AND PZ2.SkutecneDatReal IS NULL) + ELSE 0.0 END, + CASE WHEN @RespekExistDoklady=0 THEN O.mnozstvi END, CASE WHEN @RespekExistDoklady=0 THEN P.kusy_zad END, + PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane, PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, + PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka + FROM (SELECT IDPrikaz=O1.IDPrikaz, + Mnozstvi=SUM(O1.mnozstvi) + + CASE WHEN @RespekExistDoklady=1 THEN MAX(P1.kusy_odved+P1.kusy_ztrac+P1.kusy_zmet) + + (SELECT ISNULL(SUM(PZ1.prepmnozstvi*PZ1.mnozstvi), 0.0) + FROM TabPohybyZbozi PZ1 WHERE PZ1.TypVyrobnihoDokladu=0 AND PZ1.IDPrikaz=O1.IDPrikaz AND PZ1.druhPohybuZbo=0 AND PZ1.SkutecneDatReal IS NULL) + ELSE 0.0 END + FROM #tabOdved O1 + INNER JOIN TabPrikaz P1 ON (P1.ID=O1.IDPrikaz) + GROUP BY O1.IDPrikaz) O + INNER JOIN TabPrikaz P ON (P.ID=O.IDPrikaz AND P.StavPrikazu IN (20,30,50)) + INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN TabPrKVazby PrKV ON (PrKV.IDPrikaz=O.IDPrikaz AND /*PrKV.predzpracovano=0 AND*/ PrKV.prednastaveno=1 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND PrKV.IDOdchylkyDo IS NULL) + INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) + SET @gKV = (SELECT * FROM #TabPrKVazbyGen FOR XML AUTO) + + +-- co neni v datech PH JSON, vymaz (pokud mam v kusovniku neco navic, ale standardne se to nepridava, tj. napr. pridavky do testa) + DELETE FROM #TabPrKVazbyGen WHERE IDPrKV NOT IN (SELECT ID FROM @PrKVazby) + + + UPDATE G SET MnozstviMax = CASE WHEN RP.NekontrolovatMnozMatPol=1 OR ISNULL(PKZ.VyraditZKontrMaxVydanehoMnozDoVyroby,0)=1 THEN NULL + ELSE (CASE WHEN PrKV.splneno=1 THEN 0.0 ELSE PrKV.mnoz_zad-PrKV.VydanoRefMnoz*PrKV.mnoz_zad/PrKV.RefMnoz END) END + FROM #TabPrKVazbyGen G + INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) + INNER JOIN TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada) + LEFT OUTER JOIN TabParametryKmeneZbozi PKZ ON (PKZ.IDKmenZbozi=PrKV.nizsi) + + UPDATE G SET MnozstviPoz=ROUND(MnozstviPoz,4,1), MnozstviMax=ROUND(MnozstviMax,4,1) + FROM #TabPrKVazbyGen G + INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) + INNER JOIN TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada AND RP.GenerVydejVMJEvid=1) + + UPDATE #TabPrKVazbyGen SET mnozstviPoz=CEILING(mnozstviPoz) + FROM #TabPrKVazbyGen G + INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) + INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi) + INNER JOIN TabMJ MJ ON (MJ.kod=KZ.MJEvidence AND MJ.nedelitelna=1) + WHERE G.PoKorekciDat=0 + UPDATE #TabPrKVazbyGen SET mnozstviPoz=MnozstviMax WHERE MnozstviMax IS NOT NULL AND mnozstviPoz>MnozstviMax + + DELETE #TabPrKVazbyGen WHERE MnozstviPoz<=0.0 AND PoKorekciDat=0 + + UPDATE #TabPrKVazbyGen SET PuvodniMnozstviPoz=mnozstviPoz WHERE PuvodniMnozstviPoz IS NULL + + UPDATE G SET Dodavatel=CO.ID + FROM #TabPrKVazbyGen G + INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) + INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi) + INNER JOIN TabCisOrg CO ON (CO.CisloOrg=KZ.Aktualni_Dodavatel) + WHERE G.PoKorekciDat=0 AND G.Dodavatel IS NULL + UPDATE #TabPrKVazbyGen SET PoKorekciDat=1 WHERE PoKorekciDat=0 + + UPDATE #TabPrKVazbyGen SET Generuj=1 + SET @gKV = (SELECT * FROM #TabPrKVazbyGen FOR XML AUTO) + +-- u michani odmaz vodu + IF (@subtypDokum='michani') OR (@subtypDokum=N'') + BEGIN + DELETE FROM #TabPrKVazbyGen WHERE nizsi=(SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'921' AND RegCis=N'001000') + MERGE #TabPrKVazbyGen AS T USING @PrKVazby AS S ON (T.IDPrKV=T.ID) WHEN MATCHED THEN UPDATE SET T.Mnozstvi=S.Mnozstvi, T.MnozstviPoz=S.Mnozstvi; + END + SET @gKV = (SELECT * FROM #TabPrKVazbyGen FOR XML AUTO) + + +-- generuj vydejku + BEGIN TRY + EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=@radaDZVydejka, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0, + @IDExistDoklad=0, @SekejOperace=0 + IF (@retVal=0) + BEGIN + DECLARE vy CURSOR LOCAL FOR + SELECT ID FROM #TabGenRezVyd + OPEN vy + WHILE (1=1) + BEGIN + FETCH NEXT FROM vy INTO @idDZ + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @sklVydejMat=IDSklad FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + + IF NOT EXISTS(SELECT ID FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) + UPDATE dbo.TabDokladyZbozi_EXT SET _HDCAPI_PHident=@idPHIdentBak WHERE ID=@idDZ + +-- dopln na ext.info polozky cislo posledni sarze + DECLARE vyPol CURSOR LOCAL FOR + SELECT p.ID, k.ID + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idDZ AND k.Sluzba=0 AND k.SkupZbo<>'921' + OPEN vyPol + WHILE (1=1) + BEGIN + FETCH NEXT FROM vyPol INTO @idPZ, @idKZ + IF (@@FETCH_STATUS<>0) BREAK + + SET @paletList = ISNULL( (SELECT TOP(1) PaletList FROM @TabPolozky WHERE IDKmen=@idKZ), N'') + SET @sarze = ISNULL( (SELECT TOP(1) Sarze FROM @TabPolozky WHERE IDKmen=@idKZ), N'') + IF (@sarze=N'') + SET @sarze = ISNULL( (SELECT TOP(1) se._Prevod_PosledniSarze FROM dbo.TabStavSkladu s INNER JOIN dbo.TabStavSkladu_EXT se ON (se.ID=s.ID) + WHERE s.IDKmenZbozi=@idKZ AND s.IDSklad=@sklTechnicky), N'') + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=IIF(@sarze=N'', NULL, @sarze), _Vyroba_PaletList=IIF(@paletList=N'', NULL, @paletList) WHERE ID=@idPZ + +-- u michani a mouky zadat i silo + IF (@subtypDokum='michani') OR (@subtypDokum=N'') + BEGIN + SELECT @jsemMouka = CONVERT(bit, CASE WHEN Nazev1 LIKE N'%mouka%' AND SkupZbo=N'101' THEN 1 ELSE 0 END) FROM dbo.TabKmenZbozi WHERE ID=@idKZ + IF (@jsemMouka=1) + UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@moukaSilo WHERE ID=@idPZ + END + + END + CLOSE vyPol + DEALLOCATE vyPol + UPDATE dbo._hdc_ph_PrijataJsonData SET IDDoklad=@idDZ WHERE ID=@idJson + + +-- begin: pomocna prijemka nedostatecneho materialu (jen materialu !!!) + SET @idDZPomocPrij=NULL + DECLARE pomPrij CURSOR LOCAL FOR + SELECT p.IDZboSklad, p.Mnozstvi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idDZ -- doklad vydejky + AND k.Material=1 AND k.Sluzba=0 + OPEN pomPrij + WHILE (1=1) + BEGIN + FETCH NEXT FROM pomPrij INTO @idSSPomocPrij, @mnozVydej + IF (@@FETCH_STATUS<>0) BREAK + +-- spocitej jestli mam skladem mnozstvi na realizaci vydejky + SET @mnozSklad = ISNULL( (SELECT Mnozstvi+MnozstviKPrijmu-MnozstviKVydeji FROM dbo.TabStavSkladu WHERE ID=@idSSPomocPrij), 0) + IF (@mnozVydej>@mnozSklad) + BEGIN + SET @mnozPrij = @mnozVydej - @mnozSklad + IF (@idDZPomocPrij IS NULL) -- uz existuje doklad pomocne prijemky na sklade 261 (technologicky) ? + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZPomocPrij OUT, @Sklad=@sklTechnicky, @DruhPohybu=0, @RadaDokladu=@radaPrijem, @CisloOrg=0 + SELECT @menaPrij=Mena, @kurzPrij=Kurz, @kurzPrijE=KurzEuro, @jednMPrij=JednotkaMeny, @vstCPrij=VstupniCena + FROM dbo.TabDokladyZbozi WHERE ID=@idDZPomocPrij + END + IF (@idDZPomocPrij IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZPomocPrij OUT, @IDDoklad=@idDZPomocPrij, @DruhPohybu=0, @CisloOrg=0, @IDZboSklad=@idSSPomocPrij, + @Mena=@menaPrij, @Kurz=@kurzPrij, @KurzEuro=@kurzPrijE, @JednotkaMeny=@jednMPrij, @SazbaSD=NULL, @SazbaDPH=NULL, + @ZakazanoDPH=NULL, @VstupniCena=@vstCPrij, @Mnozstvi=@mnozPrij, @PovolitDuplicitu=1 + END + END + END + CLOSE pomPrij + DEALLOCATE pomPrij + IF (@idDZPomocPrij IS NOT NULL) -- pokud mam pomocnou prijemku, zkus ji realizovat nez budes realizovat vydejku + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Prijem @ID=@idDZPomocPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + END +-- end: pomocna prijemka nedostatecneho materialu + + + BEGIN TRY + EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + END TRY + BEGIN CATCH + SET @errMsg = N'Chyba realizace vdejky pkazu: ' + ERROR_MESSAGE() + IF (CHARINDEX(N'71553', @errMsg)>0) + SET @errMsg = @errMsg + N' / nedostatek mnozstvi' + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, IdJsonData) SELECT 51, @errMsg, @idDZ, @IdJson + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson + END CATCH + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ AND BlokovaniEditoru IS NOT NULL + END + CLOSE vy + DEALLOCATE vy + END + END TRY + BEGIN CATCH + SET @errMsg = 'Chyba generovani vydeje prikazu: ' + ERROR_MESSAGE() + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, IdJsonData) SELECT 50, @errMsg, @idVPr, @idJson + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson + END CATCH + + + IF (@idDZ IS NOT NULL) AND ((@subtypDokum='michani') OR (@subtypDokum=N'')) + BEGIN + SET @hmotTesta = ISNULL( (SELECT SUM(p.Mnozstvi) FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=@idDZ AND k.Sluzba=0), 0) + IF (@hmotTesta>0) + BEGIN + SET @hmotTesta = ROUND(@hmotTesta, 2) + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_HmotTesta=@hmotTesta WHERE ID=@idDZ + END +-- EXEC dbo.hp_VypCenOZPolozek_IDDokladu @idDZ, 0 +-- UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END + + END -- @idDZ uz existuje ? + + +-- konec operace + SET @idMzda = NULL + DELETE FROM @TabIDMzdy + + SET @idPHIdent = @idPHIdentBak + IF (@idStartStopOp IS NOT NULL) + BEGIN + IF (@idDZ IS NOT NULL) + UPDATE dbo._TabVyroba_OperaceStartStop SET IDDokladOZ=@idDZ WHERE ID=@idStartStopOp + + SELECT @idEvROp=IDEvidRozpracOper FROM dbo._TabVyroba_OperaceStartStop WHERE ID=@idStartStopOp + IF (@idEvROp IS NOT NULL) + BEGIN + SELECT @idPracovisteOld=IDPracoviste, @idZam=IDZamestnance FROM dbo.TabEvidRozpracOper WHERE ID=@idEvROp + IF (@idZam IS NULL) + BEGIN + IF (ISNULL( (SELECT COUNT(ID) FROM dbo.TabCisZam), 0)=1) + SELECT TOP(1) @idZam=ID FROM dbo.TabCisZam + IF (@idZam IS NOT NULL) + UPDATE dbo.TabEvidRozpracOper SET IDZamestnance=@idZam WHERE ID=@idEvROp + END + UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=(SELECT Cislo FROM dbo.TabCisZam WHERE ID=@idZam) WHERE ID=@idJson AND CisloZam IS NULL + + SET @skCasSek = DATEDIFF(s, @casStart, @casKonec) + + UPDATE dbo.TabEvidRozpracOperR SET Mnoz_odv=1, + Sk_cas=CASE Sk_Cas_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END, + Sk_cas_Obsluhy=CASE Sk_Cas_Obsluhy_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END + WHERE IDEvidRozpracOper=@idEvROp + UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@casKonec, CelkovyCas_T=0, CelkovyCas=DATEDIFF(s, @casStart, @casKonec) WHERE ID=@idEvROp + EXEC dbo.hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvROp, @CelkovyCas_S=@skCasSek, @KVO=1 + + IF (@idPracovisteOld IS NOT NULL) + EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=@idEvROp, @GenerovatEvidenciOperaci=1 + ELSE + EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=@idEvROp, @GenerovatEvidenciOperaci=0 + INSERT @TabIDMzdy (ID) SELECT m.ID FROM dbo.TabPrikazMzdyAZmetky m INNER JOIN dbo.TabEvidRozpracOperR er ON (er.ID=m.IDEvidRozpracOperR) + WHERE er.IDEvidRozpracOper=@idEvROp + + SET @idMzda = NULL + SET @idMezd = NULL + IF EXISTS (SELECT * FROM @TabIDMzdy) + BEGIN + IF (1=(SELECT COUNT(*) FROM @TabIDMzdy)) + SET @idMzda = (SELECT TOP(1) ID FROM @TabIDMzdy) + ELSE + SELECT @idMezd=STRING_AGG(ID,N',') FROM @TabIDMzdy + END + + UPDATE dbo._TabVyroba_OperaceStartStop SET CasKonec=@casKonec, Ukonceno=1, IDMzda=@idMzda WHERE ID=@idStartStopOp + UPDATE dbo._hdc_ph_PrijataJsonData SET IDMzda=@idMzda, IDMezd=@idMezd WHERE ID=@idJson + END + END -- @idStartStopOp IS NOT NULL + + +-- pripoj vydejku, resp. jeji polozky, k evidenci operace + IF (@idMzda IS NOT NULL) AND (@idDZ IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanaMatVydejka=1 AND ID=@idMzda) + BEGIN + INSERT dbo.TabPrikazMzdyAZmetkyGenPZ (IDMzdy, TypGen, IDPohybu) + SELECT @idMzda, 0, ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZ + UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@idMzda AND GenerovanaMatVydejka=0 + END + END + + SET @jeOdvOperace = 0 + IF (@idMzda IS NOT NULL) + SET @jeOdvOperace = (SELECT pp.Odvadeci FROM dbo.TabPrikazMzdyAZmetky pmz + INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=pmz.IDPrikaz AND pp.Doklad=pmz.DokladPrPostup AND pp.Alt=pmz.AltPrPostup) + WHERE pp.IDOdchylkyDo IS NULL AND pmz.ID=@idMzda) + + +-- odved na vyssi prikaz +-- zatim v pripade jen jednoho vyssiho + IF (@subtypDokum=N'michani') OR (@subtypDokum=N'') + BEGIN + + DECLARE vazP CURSOR LOCAL FOR + SELECT vp.ID, vp.IDPrikazVyssi, vp.Mnozstvi, ISNULL(vpe._MnozstviOdv, 0) + FROM dbo.TabVazbyPrikazu vp + LEFT JOIN dbo.TabVazbyPrikazu_EXT vpe ON (vpe.ID=vp.ID) + WHERE vp.IDPrikaz=@idVPr + AND (1=0) -- !!! VYPNUTO !!! + OPEN vazP + WHILE (1=1) + BEGIN + FETCH FROM vazP INTO @idVazVP, @idVPrVyssi, @mnozVyssiReq, @mnozVyssiOdv + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @dilecVyssi=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPrVyssi + SELECT @dilec=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr +-- pokud jsem testo, odved me na vyssi prikaz + IF EXISTS (SELECT 1 FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701' AND ID=@dilec) + BEGIN + SELECT TOP(1) @doklKV=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 + +-- v pripade necelociselneho mnozstvi davky testa to na vyssim prikazu zaokrouhli vcetne vypoctu ztrat + IF (@doklKV IS NOT NULL) + AND EXISTS (SELECT 1 FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad)) + BEGIN + SELECT TOP(1) @mnDavkaPred=mnoz_zad, @mnDavkaPo=CEILING(mnoz_zad), @mnBezZtrat=mnozstvi, @mnSeZtrat=mnozstviSeZtratou + FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) + SET @mnSeZtrat = ROUND(@mnSeZtrat * (@mnDavkaPo/@mnDavkaPred), 6) + UPDATE dbo.TabPrKVazby SET mnoz_zad=CEILING(mnoz_zad), mnozstviSeZtratou=@mnSeZtrat, ProcZtrat= ROUND(100*((@mnSeZtrat/@mnBezZtrat)-1), 2) + WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) + +-- uprav i vazbu prikazu testa na vyssi + UPDATE dbo.TabVazbyPrikazu SET Mnozstvi=CEILING(Mnozstvi) WHERE ID=@idVazVP AND Mnozstvi<>CEILING(Mnozstvi) + END + +-- pripoj to k evidenci operace + IF (@idMzda IS NOT NULL) + BEGIN + DELETE FROM #TabOdved_IDMzdy + INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idVPr, @idMzda + END +/* + EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idVPr, @IDPrikazCil=@IDVPrVyssi, + @Doklad=@doklKV, @IDDilec=@dilec, @mnozstvi=1, @IDOdvedeniVC=0, @IDZakazModif=@idZakazModif + IF (@idPZ>0) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabVazbyPrikazu_EXT WHERE ID=@idVazVP) + INSERT dbo.TabVazbyPrikazu_EXT (ID) VALUES (@idVazVP) + UPDATE dbo.TabVazbyPrikazu_EXT SET _MnozstviOdv = 1 + ISNULL(_MnozstviOdv,0) WHERE ID=@idVazVP + END + DELETE FROM #TabOdved_IDMzdy +*/ + END -- jsem SZ 701 + END + CLOSE vazP + DEALLOCATE vazP + + + + + IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVazbyPrikazu WHERE IDPrikaz=@idVPr), 0) + BEGIN + SELECT @idVazVP=ID, @idVPrVyssi=IDPrikazVyssi FROM dbo.TabVazbyPrikazu WHERE IDPrikaz=@idVPr + SELECT @dilecVyssi=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPrVyssi + SELECT @dilec=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr +-- pokud jsem testo, odved me na vyssi prikaz + IF EXISTS (SELECT 1 FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701' AND ID=@dilec) + BEGIN + SELECT TOP(1) @doklKV=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 + +-- v pripade necelociselneho mnozstvi davky testa to na vyssim prikazu zaokrouhli vcetne vypoctu ztrat + IF (@doklKV IS NOT NULL) + AND EXISTS (SELECT 1 FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad)) + BEGIN + SELECT TOP(1) @mnDavkaPred=mnoz_zad, @mnDavkaPo=CEILING(mnoz_zad), @mnBezZtrat=mnozstvi, @mnSeZtrat=mnozstviSeZtratou + FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) + SET @mnSeZtrat = ROUND(@mnSeZtrat * (@mnDavkaPo/@mnDavkaPred), 6) + UPDATE dbo.TabPrKVazby SET mnoz_zad=CEILING(mnoz_zad), mnozstviSeZtratou=@mnSeZtrat, ProcZtrat= ROUND(100*((@mnSeZtrat/@mnBezZtrat)-1), 2) + WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) + END + +-- pripoj to k evidenci operace + IF (@idMzda IS NOT NULL) + BEGIN + DELETE FROM #TabOdved_IDMzdy + INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idVPr, @idMzda + END + + EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idVPr, @IDPrikazCil=@IDVPrVyssi, + @Doklad=@doklKV, @IDDilec=@dilec, @mnozstvi=1, @IDOdvedeniVC=0, @IDZakazModif=@idZakazModif + IF (@idPZ>0) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabVazbyPrikazu_EXT WHERE ID=@idVazVP) + INSERT dbo.TabVazbyPrikazu_EXT (ID) VALUES (@idVazVP) + UPDATE dbo.TabVazbyPrikazu_EXT SET _MnozstviOdv = 1 + ISNULL(_MnozstviOdv,0) WHERE ID=@idVazVP + END + DELETE FROM #TabOdved_IDMzdy + END -- jsem SZ 701 + END -- jen 1 nadrizeny prikaz + +-- zapis pro pocitani spotreby testa + INSERT dbo._TabVyroba_TestoVyroba (IdPHIdent, IDPrikaz, IDDokladVydejMat, IDKmenZbozi, SkupZbo, RegCis, DatPriprava, VyrobniDen, Smena, DatVypousteni, + IDStrojPek, Viskozita, VodaLitry, MoukaHmot, MoukaSilo) + SELECT @idPHIdent, @idVPr, @idDZ, @dilec, SkupZbo, RegCis, @casStart, @vyrobniDen, @smena, @casKonec, + @idStroj, @viskoz, @vodaLitry, @moukaKgFin, @moukaSilo FROM dbo.TabKmenZbozi WHERE ID=@dilec + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDDoklad=@idDZ WHERE ID=@idJson + + IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData + + END -- @subtypDokum michani + + + IF (@subtypDokum IN (N'maceni', N'baleni')) AND (@jeOdvOperace=1) AND (@idMzda IS NOT NULL) + BEGIN + SELECT @nazevDilce=k.Nazev1 FROM dbo.TabPrikazMzdyAZmetky pmz INNER JOIN dbo.TabKmenZbozi k ON (k.ID=pmz.IDTabKmen) WHERE pmz.ID=@idMzda + IF (@nazevDilce LIKE N'%polotovar%') + EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda, @bezVyrCis=0, @radaOdvod=N'283', @skladOdvod=@sklProPolo, @realizujPrijem=1, @errMsg=@errMsg OUT + ELSE + EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda, @bezVyrCis=0, @radaOdvod=N'273', @skladOdvod=@sklProFin, @realizujPrijem=1, @errMsg=@errMsg OUT + IF (@errMsg<>N'') + BEGIN + IF (CHARINDEX(N'2003283', @errMsg)>0) + SET @errMsg = @errMsg + N' / nenalezena rada dokladu' + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba='Odvod: ' + @errMsg WHERE ID=@idJson + END + END + + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE() WHERE ID=@idJson + END -- typ spotreba + + + +-- ODPIS ----------------------------------------------------------------- + IF (@typDokum='odpis') + BEGIN + SET @sklMat = N'211' -- odpis ze skladu Pekarna nebo z 311 - sklad Material ??????? + SET @radaDZVydejka = N'242' + SET @dpz=4 + + SELECT @jsonString2=u2.vydej + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH (akce NVARCHAR(50), [data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH ( vydej NVARCHAR(MAX) AS JSON) AS u2 + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString2 + DECLARE p CURSOR LOCAL FOR + SELECT u.skupzbo, u.regcis, u.sarze, u.paletovylist, u.mnozstvi, u.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ( skupzbo NVARCHAR(3), regcis NVARCHAR(30), sarze NVARCHAR(30), paletovyList NVARCHAR(30), mnozstvi NUMERIC(19,6), datazoneId INT) AS u + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @sz, @rc, @sarze, @paletList, @mnoz, @idPHIdent + IF (@@FETCH_STATUS<>0) BREAK + + SET @paletList = ISNULL(@paletList, N'') + SET @sarze = ISNULL(@sarze, N'') + + IF (@idDZ IS NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklMat, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, @CisloOrg=0 + SELECT @datumDZ=DatPorizeni, @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @parZnak=ParovaciZnak + FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=0 WHERE ID=@idDZ + END + IF (@idDZ IS NOT NULL) + BEGIN + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + BEGIN + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklMat) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklMat, @IDZboSklad=@idSS OUT + IF (@idSS IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, + @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + + IF (ISNULL(@sarze,N'')=N'') + SET @sarze = (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) + UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent, _Vyroba_Sarze=@sarze WHERE ID=@idPZ + + IF (@paletList<>N'') + BEGIN + SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKZ AND Nazev1=@paletList) + IF (@idVCK IS NULL) + EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKZ, @Nazev1=@paletList, @Selectem=0 + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idSS AND Nazev1=@paletList) + IF (@idVCS IS NULL) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idSS + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz + END + + END -- @idPZ IS NOT NULL + END -- @idSS IS NOT NULL + END -- @idKZ IS NOT NULL + END -- @idDZ IS NOT NULL + + END + CLOSE p + DEALLOCATE p + + IF (@idDZ IS NOT NULL) + BEGIN + EXEC dbo.hp_VypCenOZPolozek_IDDokladu @idDZ, 0 + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + + +-- musim odepsat i z technologickeho skladu + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, + @Mena=@menaDZ, @CisloOrg=0, @DatumPorizeni=@datumDZ + IF (@idDZDst IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZDst) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZDst) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_IDPuvodniDoklad=@idDZ WHERE ID=@idDZDst + SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@idDZ, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=@menaDZ, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=0 + IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst) AND EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1 AND ID=@idDZ) + EXEC dbo.hp_Realizuj_Vydej @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @Hlidat=0, @BylaChyba=@bChyba OUT, @RealMnoz=1, @RealFin=1 + END + + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDDoklad=@idDZ WHERE ID=@idJson + END + + IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData + + END -- typ odpis + + END -- akce: vyroba_spotreba +-- END: SPOTREBA/ODPIS + + + + + + + + +-- BEGIN: OBJEDNAVKA + IF (@akce=N'objednavka') + BEGIN +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + DELETE FROM @TabPHObj + + DECLARE p CURSOR LOCAL FOR + SELECT u2.datazoneId, u3.datazoneId, u2.paletovyList, u2.created, u2.skupzbo, u2.regcis, u3.sarze, u3.mnozstvi, u2.typ, u2.subtyp + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), paletovyList NVARCHAR(50), created DATETIME, items NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (items) + WITH ( datazoneId BIGINT, heliosId INT, sarze NVARCHAR(30), mnozstvi NUMERIC(19,6) ) AS u3 + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPHIdent, @idPHIdent2, @paletList, @datPorizeni, @sz, @rc, @sarze, @mnoz, @typDokum, @subtypDokum + IF (@@FETCH_STATUS<>0) BREAK + + INSERT dbo._TabVyroba_Objednavky (IDPrijataDataJson, IdPHIdent, IdPHIdent2, SkupZbo, RegCis, PaletovyList, Sarze, Mnozstvi, DatPorizeni) + SELECT @idJson, @idPHIdent, @idPHIdent2, @sz, @rc, @paletList, @sarze, @mnoz, @datPorizeni + SET @idPHObj = SCOPE_IDENTITY() + INSERT @TabPHObj (ID, IDPHIdent) VALUES (@idPHObj, @idPHIdent) + IF (@typDokum='micharna') AND (@subtypDokum='nocni') + UPDATE dbo._TabVyroba_Objednavky SET NocniObjednavka=1 WHERE ID=@idPHObj + END + CLOSE p + DEALLOCATE p + + IF (@typDokum='micharna') AND (@subtypDokum='nocni') AND EXISTS (SELECT 1 FROM @TabPHObj) + BEGIN + SET @idDZ = NULL + SET @prevodka = 1 + SET @radaDZPrevodV = N'231' + SET @dpz = 4 + + DECLARE p CURSOR LOCAL FOR + SELECT ID, IDPHIdent FROM @TabPHObj + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPHObj, @idPHIdent + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idDZ IS NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklMat, @DruhPohybu=@dpz, @RadaDokladu=@radaDZPrevodV, @CisloOrg=0 + UPDATE dbo.TabDokladyZbozi SET DruhPohybuPrevod=0, TypPrevodky=N'281', IdSkladPrevodu=@sklPek, PrevodRealizovat=1 WHERE ID=@idDZ + SELECT @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @parZnak=ParovaciZnak FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=0, Poznamka=N'Non vdej' WHERE ID=@idDZ + UPDATE dbo._TabVyroba_Objednavky SET IDDokladOZ=@idDZ WHERE ID=@idPHObj + END + + IF (@idDZ IS NOT NULL) + BEGIN + SELECT @sz=SkupZbo, @rc=RegCis, @paletList=PaletovyList, @sarze=Sarze FROM dbo._TabVyroba_Objednavky WHERE ID=@idPHObj + SET @sarze = ISNULL(@sarze, N'') + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + BEGIN + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklMat) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklMat, @IDZboSklad=@idSS OUT + IF (@idSS IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, + @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent WHERE ID=@idPZ + + IF (@sarze<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabKmenZbozi_EXT WHERE ID=@idKZ) + INSERT dbo.TabKmenZbozi_EXT (ID) VALUES (@idKZ) + UPDATE dbo.TabKmenZbozi_EXT SET _Prevod_PosledniSarze=@sarze WHERE ID=@idKZ + END + + SET @idVCP = NULL + IF (@paletList<>N'') + BEGIN + SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKZ AND Nazev1=@paletList) + IF (@idVCK IS NULL) + EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKZ, @Nazev1=@paletList, @Selectem=0 + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idSS AND Nazev1=@paletList) + IF (@idVCS IS NULL) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idSS + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz + SET @idVCP = SCOPE_IDENTITY() + END + + INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, IDVyrCP, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis) + SELECT @idPHObj, @idDZ, @idPZ, @idVCP, @mnoz, @sarze, @paletList, @sz, @rc + SET @idPHObjPol = SCOPE_IDENTITY() + + END -- @idPZ IS NOT NULL + END -- @idSS IS NOT NULL + END -- @idKZ IS NOT NULL + END -- @idDZ IS NOT NULL + + END + CLOSE p + DEALLOCATE p + + IF (@idDZ IS NOT NULL) + BEGIN + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + SET @logTyp=3 + SET @logInt=@idDZ + SET @logStr = @parZnak + SET @log4Mail = 1 + SET @logText = N'Nelze realizovat vdejka non pevodky' + + SET @aktDatum = GETDATE() + EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ, @DatumRealizace=@aktDatum, @Uzivatel=0, @Hlidat=0, @BylaChyba=@bChyba OUT + IF (@bChyba=0) + BEGIN +-- je vygenerovana prijemka na druhe strane ? pokud ne, vygeneruj ji + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDOldPolozka IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZ)) + BEGIN + SET @aktDatum = GETDATE() + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklPek, @DruhPohybu=0, @RadaDokladu='281', + @Mena=@menaDZ, @CisloOrg=0, @DatumPorizeni=@aktDatum + IF (@idDZDst IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZDst) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZDst) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_IDPuvodniDoklad=@idDZ WHERE ID=@idDZDst + SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@idDZ, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=@menaDZ, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=1, @VytvaretPolozkovouVazbu=1, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=1 + IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst) + AND EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1 AND ID=@idDZ) + EXEC dbo.hp_Realizuj_Prijem @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @BylaChyba=@bChyba OUT, @RealMnoz=1, @RealFin=1, @VypnoutUpozorneniPriZajistovani=1 + END + END + + SET @logTyp=0 + SET @logInt=0 + SET @logStr = N'' + SET @log4Mail = 0 + SET @logText = N'' + END + END + END -- @subtypDokum='nocni' + + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), Blokovano=0, IDDoklad=@idDZ WHERE ID=@idJson + + END -- akce: objednavka +-- END: OBJEDNAVKA + + + + + + +-- BEGIN: ZAHAJENI OPERACE + IF (@akce=N'vyroba_zacatek') + BEGIN + + SELECT @typDokum=u2.typ, @subtypDokum=ISNULL(u2.subtyp, N''), @idPHIdent=u2.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId BIGINT) AS u2; + + IF (@idPHIdent IS NOT NULL) + UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson; + + + SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (prikaz) + WITH (heliosId INT, datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME) u3; + + +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + IF (1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabCisZam), 0)) + UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=(SELECT TOP(1)Cislo FROM dbo.TabCisZam) WHERE ID=@idJson AND CisloZam IS NULL + ELSE + UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=999999 WHERE ID=@idJson AND CisloZam IS NULL + + SET @cisZam = NULL + SET @idZam = NULL + + SELECT @typDokum=u2.typ, @idVPr=u3.heliosId, @idPHIdent=u2.datazoneId, @idPracoviste=u4.idprac, @idStroj=u4.heliosId, @statusStroje=u3.[status], + @casStart=u3.zacatek, @sz=u3.skupzbo, @rc=u3.regcis, @idPHIdent2=u4.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH ( typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON, datazoneId INT, stroj NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (prikaz) + WITH ( heliosId INT, datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), [status] NVARCHAR(20), zacatek DATETIME, konec DATETIME ) AS u3 + CROSS APPLY OPENJSON (stroj) + WITH ( heliosId INT, datazoneId INT, idprac INT, kod NVARCHAR(20) ) AS u4; + + IF (@cisZam IS NULL) + SELECT @cisZam=CisloZam FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson + IF (@cisZam IS NOT NULL) + SELECT @idZam=ID FROM dbo.TabCisZam WHERE Cislo=@cisZam + + IF (@idVPr IS NOT NULL) AND (@idPracoviste IS NULL) + BEGIN + IF (@subtypDokum=N'maceni') + SET @idPracoviste = (SELECT TOP(1) pracoviste FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Typ=1 + AND priorita=0 AND IDStroje IN (SELECT se.ID FROM dbo.TabCisStroju s INNER JOIN dbo.TabCisStroju_EXT se ON (se.ID=s.ID) + WHERE s.Blokovano=0 AND se._MaceciStroj=1)) + IF (@subtypDokum=N'baleni') + SET @idPracoviste = (SELECT TOP(1) pracoviste FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Typ=0 + AND priorita=0 AND LOWER(Nazev) LIKE N'%balen%') + END + + IF (@idVPr IS NOT NULL) AND (@idPracoviste IS NOT NULL) + BEGIN +-- INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 1, N'Zpracovavam PrijataJsonData jako Vyroba_zacatek', @idJson + SET @doklPrP = NULL + SET @altPrP = NULL + + SELECT @cisloPrikazu = RadaPrikaz FROM dbo.TabPrikaz WHERE ID=@idVPr + + SET @idStartStopOp = (SELECT ID FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrijataDataJson=@idJson AND IdPHIdent=@idPHIdent) + IF (@idStartStopOp IS NULL) + BEGIN + INSERT dbo._TabVyroba_OperaceStartStop (IDPrijataDataJson, IdPHIdent, IdPHIdent2, IDPrikaz, SkupZbo, RegCis, IDStroj, IDPracoviste, CasStart) + SELECT @idJson, @idPHIdent, @idPHIdent2, @idVPr, @sz, @rc, @idStroj, @idPracoviste, @casStart + SET @idStartStopOp = SCOPE_IDENTITY() + END + + IF EXISTS (SELECT 1 FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrijataDataJson=@idJson AND IDEvidRozpracOper IS NULL) + BEGIN + SELECT @strojPec = Nazev FROM dbo.TabCisStroju WHERE ID=@idStroj + + SET @doklPrP = NULL + + IF (@subtypDokum=N'michani') + IF (@sz='701') + SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste, @popisOper=N'Mchn pro stroj ' FROM dbo.TabPrPostup + WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND priorita=0 AND LOWER(nazev) LIKE N'%mchn%' AND Typ=1 + + IF (@subtypDokum=N'maceni') + SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste, @popisOper=N'Men ' FROM dbo.TabPrPostup + WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND priorita=0 AND LOWER(Nazev) LIKE N'%men%' AND Typ=1 + + IF (@subtypDokum=N'baleni') + SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste, @popisOper=N'Balen ' FROM dbo.TabPrPostup + WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND priorita=0 AND LOWER(Nazev) LIKE N'%balen%' AND Typ=0 + + IF (@doklPrP IS NOT NULL) + BEGIN + INSERT dbo.TabEvidRozpracOper (IDZamestnance, IDPracoviste, IDStroje, CasZahajeni, Poznamka) + SELECT @idZam, @idPracoviste, NULL, @casStart, @popisOper + ISNULL(@strojPec, N'') + N' *** pkaz ' + ISNULL(@cisloPrikazu, N'') + SET @idEvROp = SCOPE_IDENTITY() + + INSERT dbo.TabEvidRozpracOperR (IDEvidRozpracOper, IDPrikaz, DokladPrPostup, AltPrPostup, Mnoz_odv) SELECT @idEvROp, @idVPr, @doklPrP, @altPrP, 1 + UPDATE dbo._TabVyroba_OperaceStartStop SET IDEvidRozpracOper=@idEvROp, DokladPrP=@doklPrP, AltPrP=@altPrP WHERE ID=@idStartStopOp + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), Blokovano=0, IDEvidRozpOp=@idEvROp WHERE ID=@idJson + END + END + END + + + END -- akce: vyroba_zacatek +-- END: ZAHAJENI OPERACE + + +-- BEGIN: ZAHAJENI OPERACE + IF (@akce=N'prikaz_zamena_material') + BEGIN + SELECT @idVPr=u2.Id, @sz=u3.skupzbo, @rc=u3.regcis + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([prikaz] NVARCHAR(MAX) AS JSON, [material] NVARCHAR(max) AS JSON) AS u + CROSS APPLY OPENJSON (prikaz) + WITH (id INT) AS u2 + CROSS APPLY OPENJSON (material) + WITH (skupzbo NVARCHAR(3), regcis NVARCHAR(30), nazev NVARCHAR(100)) AS u3; + IF EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu=30) + BEGIN + SET @idKZn = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + SELECT @idKZv = (SELECT IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr) + IF (@idVPr IS NOT NULL) AND (@idKZn IS NOT NULL) AND (@idKZn<>@idKZv) + BEGIN + SET @idPrKVazbyPolot = (SELECT v.ID FROM dbo.TabPrKVazby v INNER JOIN dbo.TabKmenZbozi vn ON (vn.ID=v.nizsi) + WHERE v.IDPrikaz=@idVPr AND v.IDOdchylkyDo IS NULL AND v.Priorita=0 AND vn.Dilec=1) + SET @idPrKVazbyNova = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND vyssi=@idKZv AND nizsi=@idKZn) + IF (@idPrKVazbyNova IS NULL) AND (@idPrKVazbyPolot IS NOT NULL) + BEGIN + SELECT @doklPrV=Doklad, @mnozVaz=Mnozstvi, @mnozZadVaz=mnoz_zad, @idOdchylVaz=IdOdchylkyOd, @procZtrVaz=ProcZtrat + FROM dbo.TabPrKVazby WHERE ID=@idPrKVazbyPolot + EXEC @idPrKVazbyNova=dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZn, @Alt_K_Dokladu=@doklPrV, @Mnozstvi=@mnozVaz, + @Mnoz_zad=@mnozZadVaz, @ProcZtrat=@procZtrVaz, @IDOdchylky=@idOdchylVaz + END + IF (@idPrKVazbyNova IS NOT NULL) + BEGIN + SELECT @novaPriorita=Priorita FROM dbo.TabPrKVazby WHERE ID=@idPrKVazbyNova + IF (@novaPriorita>0) + BEGIN + UPDATE dbo.TabPrKVazby SET priorita=CASE WHEN priorita=@novaPriorita THEN @novaPriorita-1 ELSE @novaPriorita END + WHERE IDPrikaz=@idVPr AND Doklad=@doklPrV AND (priorita=@novaPriorita OR priorita=@novaPriorita-1) + UPDATE dbo.TabPrKVazby SET prednastaveno=0 WHERE IDPrikaz=@idVPr AND Doklad=@doklPrV + UPDATE dbo.TabPrKVazby SET prednastaveno=1 WHERE IDPrikaz=@idVPr AND Doklad=@doklPrV AND nizsi=@idKZn + END + END -- (@idPrKVazbyNova IS NOT NULL) + END -- (@idVPr IS NOT NULL) AND (@idKZn IS NOT NULL) + END -- prikaz ve stavu 30 + END -- akce: +-- END: ZAHAJENI OPERACE + + + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_PROCEDURE() + N'/r.' + CONVERT(nvarchar, ERROR_LINE()) + N' >> ' + ERROR_MESSAGE() + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson + + IF (@logTyp>0) + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail) + SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1 + END CATCH + SET @logTyp=0 + + END +CLOSE j +DEALLOCATE j + + + + +-- cisteni +DROP TABLE IF EXISTS #TabGenPrijem +DROP TABLE IF EXISTS #TabPolotovProGenOdv +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +DROP TABLE IF EXISTS #TabOdved_IDMzdy +DROP TABLE IF EXISTS #TabOdved + +DROP TABLE IF EXISTS #TabPrKVazbyGen +DROP TABLE IF EXISTS #TabGenRezVyd +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +DROP TABLE IF EXISTS #TabPrKVazbyGenVC + + + +-- pro jistotu +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData + + diff --git a/_sql/ep_Vyroba_Doklady_Micharna.sql.bak b/_sql/ep_Vyroba_Doklady_Micharna.sql.bak new file mode 100644 index 0000000..7db33d5 --- /dev/null +++ b/_sql/ep_Vyroba_Doklady_Micharna.sql.bak @@ -0,0 +1,832 @@ +-- dbo.ep_Vyroba_Doklady_Micharna +CREATE PROCEDURE dbo.ep_Vyroba_Doklady_Micharna + @idJson INT=NULL +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT, + @errMsg NVARCHAR(500), + @bChyba BIT, + @iChyba INT, + @debugXml XML, + @aktDatum DATETIME, + @logTyp TINYINT, + @logText NVARCHAR(500), + @logInt INT, + @logStr NVARCHAR(255), + @log4Mail BIT=0 + +DECLARE + @jsonString NVARCHAR(MAX), + @jsonString2 NVARCHAR(MAX), + @typDokum NVARCHAR(50), + @subtypDokum NVARCHAR(50), + @akce NVARCHAR(50) + +DECLARE + @cOrg INT, + @sklMat NVARCHAR(30), + @sklTechnicky NVARCHAR(30), + @sklPek NVARCHAR(30), + @radaTechVydej NVARCHAR(30)=N'222', + @radaDZVydejka NVARCHAR(3)=N'', + @radaDZPrevodV NVARCHAR(3)=N'', + @prevodka BIT=0, + @parZnak NVARCHAR(20) + +DECLARE + @idPHIdent INT, + @idPHIdentBak INT, + @idPHIdent2 INT, + @idPHObj INT, + @idPHObjPol INT + +DECLARE + @datPorizeni DATETIME, + @idVPr INT, + @radaVPr NVARCHAR(10), + @cisloPrikazu NVARCHAR(20), + @idVPrNizsi INT, + @radaVPrNizsi NVARCHAR(10), + @idVPrVyssi INT, + @radaVPrVyssi NVARCHAR(10), + @dilec INT, + @idZakazka INT, + @cisloZak NVARCHAR(30), + @casStart DATETIME, + @vyrobniDen DATETIME, + @smena TINYINT, + @casStartOld DATETIME, + @viskoz TINYINT, + @vodaLitry NUMERIC(12,3), + @moukaKgNorma NUMERIC(19,6), + @moukaKgFin NUMERIC(19,6), + @moukaSilo TINYINT, + @hmotTesta NUMERIC(19,6), + @idMzda INT, + @skCasSek INT, + @casKonec DATETIME, + @idSS INT, + @rDoklVyd NVARCHAR(3), + @idDZ INT, + @idDZDst INT, + @idPZ INT, + @datumDZ DATETIME, + @datReal DATETIME, + @menaDZ NVARCHAR(3), + @kurzDZ NUMERIC(19,6), + @kurzEDZ NUMERIC(19,6), + @dpz TINYINT, + @jednM INT, + @vstC TINYINT + +DECLARE + @idPrKVazby INT, + @doklPrV INT, + @altPrV NCHAR(1), + @oper NVARCHAR(4), + @pozice NVARCHAR(100), + @idKZ INT, + @nazev1 NVARCHAR(100), + @idVCK INT, + @idVCS INT, + @idVCP INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @idUmist INT, + @sarze NVARCHAR(30), + @paletList NVARCHAR(30), + @mnozDilec NUMERIC(19,6), + @mnoz NUMERIC(19,6), + @mnoz2 NUMERIC(19,6), + @mnozVyd NUMERIC(19,6), + @mnozReq NUMERIC(19,6), + @mnozNew NUMERIC(19,6) + +DECLARE + @idStartStopOp INT, + @idPracoviste INT, + @idPracovisteOld INT, + @idStroj INT, + @strojPec NVARCHAR(40), + @statusStroje NVARCHAR(50), + @idEvROp INT, + @idEvROpR INT, + @cisZam INT, + @idZam INT, + @doklPrP INT, + @altPrP NCHAR(1) + + + +DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent INT ) +DECLARE @PrKVazby TABLE (ID INT NOT NULL, Sklad NVARCHAR(30) ) + + + +-- vytvor pomocnou tabulku +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) + + + +IF OBJECT_ID(N'tempdb..#TabDefiniceProMicharnu', N'U') IS NOT NULL + SELECT TOP(1) @sklMat=HlavniSkladMat, @sklPek=SkladVyrobaPekarna, @sklTechnicky=TechnologickySklad, @radaTechVydej=RadaTechnologickyVydej + FROM #TabDefiniceProMicharnu +IF (@sklMat IS NULL) + SELECT @sklMat=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavn sklad - Materil' +IF (@sklTechnicky IS NULL) + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' +IF (@sklPek IS NULL) + SELECT @sklPek=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna' +IF (@sklTechnicky IS NULL) AND (@sklPek IS NOT NULL) + SET @sklTechnicky=@sklPek +DROP TABLE IF EXISTS #TabDefiniceProMicharnu + + + +IF (@radaTechVydej IS NOT NULL) + SET @radaDZVydejka = @radaTechVydej + + + +IF (@idJson IS NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, Akce + FROM dbo._hdc_ph_PrijataJsonData + WHERE DatZpracovani IS NULL + AND ISNULL(JSONData, N'')<>N'' + ORDER BY DatPorizeni ASC + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, Akce + FROM dbo._hdc_ph_PrijataJsonData + WHERE ID=@idJson +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString, @akce + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + CONTINUE + + IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3 + BEGIN + IF EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson AND ISNULL(PosledniChyba,N'')=N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) WHERE ID=@idJson + CONTINUE + END + + + SET @logTyp = 0 + SET @logInt = NULL + SET @logStr = N'' + SET @log4Mail = 0 + SET @logText = N'' + + + BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + +-- BEGIN: SPOTREBA/ODPIS + IF (@akce=N'vyroba_spotreba') + BEGIN + DELETE FROM @PrKVazby + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + SELECT @typDokum=u2.typ, @subtypDokum=u2.subtyp + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), subtyp NVARCHAR(50)) AS u2 + +-- SPOTREBA PLUS UKONCENI OPERACE MICHANI ---------------------------------------------------- + IF (@typDokum='vyroba') + BEGIN + SET @vodaLitry = 0 + SET @moukaKgNorma = 0 + SET @moukaKgFin = 0 + SET @moukaSilo = 0 + + SELECT @idStroj=u3.heliosId, @idPHIdent=u2.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (datazoneId INT, stroj NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (stroj) + WITH (heliosId INT) u3 + + SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec, @viskoz=u3.viskozita, @moukaSilo=u3.silo + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (prikaz) + WITH (heliosId INT, datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME, viskozita TINYINT, silo TINYINT) u3 + + SET @idPHIdentBak = @idPHIdent + SELECT @vyrobniDen=Datum, @smena=Smena FROM dbo.ef_GetDatumASmenu(@casStart) + + SELECT @idStartStopOp=ID FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrikaz=@idVPr AND IDPHIdent=@idPHIdent + + SELECT @dilec=IdTabKmen, @radaVPr=Rada, @idZakazka=IDZakazka, @mnozDilec=kusy_zad FROM dbo.TabPrikaz WHERE ID=@idVPr + SELECT @cisloZak=CisloZakazky FROM dbo.TabZakazka WHERE ID=@idZakazka + IF (@radaDZVydejka IS NULL) + SET @radaDZVydejka = ISNULL( (SELECT RadaDokl_GenerRezVyd_Mat FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr), @radaDZVydejka) +-- SET @sklMat = ISNULL( (SELECT VydejMatPol_SkladProGenHlavDZ FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr), @sklMat) + +-- povol evidenci a odvod vice ks nez je na prikazu + UPDATE dbo.TabRadyPrikazu SET NekontrolMnozEvidMezd=1 WHERE Rada=@radaVPr AND NekontrolMnozEvidMezd=0 + UPDATE dbo.TabRadyPrikazu SET NekontrolMnozOdvedFinal=1 WHERE Rada=@radaVPr AND NekontrolMnozOdvedFinal=0 + + + SET @idDZ = (SELECT IDDoklad FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson) + IF (@idDZ IS NULL) -- @idDZ uz existuje ? Ne, udelej vydejku na prikaz + BEGIN + + SELECT @jsonString2=u2.vydej + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH (akce NVARCHAR(50), [data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH ( vydej NVARCHAR(MAX) AS JSON) AS u2 + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString2 + DECLARE p CURSOR LOCAL FOR + SELECT u.nazev, u.skupzbo, u.regcis, u.sarze, u.paletovylist, u.mnozstvi, u.mnozstviVychozi, u.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ( nazev NVARCHAR(100), skupzbo NVARCHAR(3), regcis NVARCHAR(30), sarze NVARCHAR(30), paletovyList NVARCHAR(30), mnozstvi NUMERIC(19,6), mnozstviVychozi NUMERIC(19,6), datazoneId INT) AS u + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @nazev1, @sz, @rc, @sarze, @paletList, @mnoz, @mnoz2, @idPHIdent + IF (@@FETCH_STATUS<>0) BREAK + + SET @paletList = ISNULL(@paletList, N'') + IF (@sz=N'101') AND (@rc=N'001000') + SET @vodaLitry = @mnoz + IF (@sz=N'101') AND (@nazev1 LIKE N'%mouka%') + BEGIN + SET @moukaKgFin = @mnoz + SET @moukaKgNorma = @mnoz2 + END + + IF (@idDZ IS NULL) + BEGIN + SET @dpz = 4 + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, @CisloOrg=0 + IF (@idDZ IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) + UPDATE dbo.TabDokladyZbozi_EXT SET _HDCAPI_PHident=@idJson WHERE ID=@idDZ + + SELECT @datumDZ=DatPorizeni, @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena + FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + UPDATE dbo.TabDokladyZbozi SET IDPrikaz=@idVPr, BlokovaniEditoru=0 WHERE ID=@idDZ + IF (@cisloZak IS NOT NULL) + UPDATE dbo.TabDokladyZbozi SET CisloZakazky=@cisloZak WHERE ID=@idDZ + END + END + + IF (@idDZ IS NOT NULL) + BEGIN + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE Nazev1 NOT LIKE N'%Voda%' AND SkupZbo=@sz AND RegCis=@rc AND (Material=1 OR Dilec=1) AND Sluzba=0) + IF (@idKZ IS NOT NULL) + BEGIN +-- najdi vazbu vc. kontroly jestli polozka neni rezijni material + SET @idPrKVazby = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND vyssi=@dilec AND nizsi=@idKZ AND IDOdchylkyDo IS NULL AND RezijniMat=0) + +-- pokud neni material v pozadavcich prikazu, pridej ho (neni v TPV) + IF (@idPrKVazby IS NULL) AND (@mnoz>0) + BEGIN + EXEC @idPrKVazby=dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz, @Mnoz_zad=@mnoz, @VychoziSklad=@sklMat + END + +-- pridej do vydejky + IF (@idPrKVazby IS NOT NULL) + BEGIN + INSERT @PrKVazby (ID, Sklad) SELECT ID, Sklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby + UPDATE dbo.TabPrKVazby SET Sklad=@sklTechnicky WHERE ID=@idPrKVazby + + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklTechnicky) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklTechnicky, @IDZboSklad=@idSS OUT + IF (@idSS IS NOT NULL) + BEGIN +-- mnoz = mnozstvi realne spotrebovane / mnoz2 = mnozstvi vychozi normovane +/* + UPDATE dbo.TabPrKVazby SET mnozstvi=@mnoz, mnoz_zad=@mnoz*@mnozDilec WHERE ID=@idPrKVazby AND mnozstvi<>@mnoz +*/ + +/* + SELECT @mnozReq=mnoz_zad, @doklPrV=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby + SET @mnozVyd = ISNULL( (SELECT SUM(pz.Mnozstvi) FROM dbo.TabPohybyZbozi pz INNER JOIN dbo.TabDokladyZbozi dz ON (dz.ID=pz.IDDoklad) + WHERE dz.DruhPohybuZbo=@dpz AND dz.RadaDokladu=@radaDZVydejka AND pz.IDPrikaz=@idVPr AND pz.TypVyrobnihoDokladu=0), 0) + SET @mnozNew = @mnozReq - @mnozVyd - @mnoz + IF (@mnozNew<=0) + BEGIN + SET @mnozNew = @mnozVyd + @mnoz + UPDATE dbo.TabPrKVazby SET mnoz_zad = @mnozNew WHERE ID=@idPrKVazby + END +*/ + + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, + @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + + IF (@sz=N'101') AND (@nazev1 LIKE N'%mouka%') AND (@moukaSilo IS NOT NULL) + BEGIN + UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@moukaSilo WHERE ID=@idPZ +/* + SET @idUmist = (SELECT ID FROM dbo.TabUmisteni WHERE Kod=CONVERT(nvarchar,@moukaSilo) AND IDSklad=@sklTechnicky) + IF (@idUmist IS NOT NULL) + UPDATE dbo.TabPohybyZbozi SET IdUmisteni=@idUmist WHERE ID=@idPZ +*/ + END + + INSERT dbo._TabVyroba_OperaceStartStopVydej (IDHlava, IDKmenZbozi, Mnozstvi, MnozstviPuvodni, IDPohybZbozi) + SELECT @idStartStopOp, @idKZ, @mnoz, @mnoz2, @idPZ + + UPDATE dbo.TabPohybyZbozi SET IDPrikaz=@idVPr, TypVyrobnihoDokladu=1, DokladPrikazu=@doklPrV WHERE ID=@idPZ + UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent WHERE ID=@idPZ + + IF (ISNULL(@sarze,N'')=N'') + SET @sarze = (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) + + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PrikazMnoz=@mnoz2, _Vyroba_Sarze=@sarze, _Vyroba_PaletList=@paletList WHERE ID=@idPZ + END -- @idPZ IS NOT NULL + END -- @idSS IS NOT NULL + END -- @idPrKVazby IS NOT NULL + END -- @idKZ IS NOT NULL + END -- @idDZ IS NOT NULL + + END + CLOSE p + DEALLOCATE p + + IF (@idDZ IS NOT NULL) + BEGIN + SET @hmotTesta = ISNULL( (SELECT SUM(p.Mnozstvi) FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=@idDZ AND k.Sluzba=0), 0) + IF (@hmotTesta>0) + BEGIN + SET @hmotTesta = ROUND(@hmotTesta, 2) + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_HmotTesta=@hmotTesta WHERE ID=@idDZ + END + EXEC dbo.hp_VypCenOZPolozek_IDDokladu @idDZ, 0 + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END + END -- @idDZ uz existuje ? + +-- konec operace + SET @idPHIdent = @idPHIdentBak + IF (@idStartStopOp IS NOT NULL) + BEGIN + IF (@idDZ IS NOT NULL) + UPDATE dbo._TabVyroba_OperaceStartStop SET IDDokladOZ=@idDZ WHERE ID=@idStartStopOp + SELECT @idEvROp=IDEvidRozpracOper FROM dbo._TabVyroba_OperaceStartStop WHERE ID=@idStartStopOp + IF (@idEvROp IS NOT NULL) + BEGIN + SELECT @idPracovisteOld=IDPracoviste, @idZam=IDZamestnance FROM dbo.TabEvidRozpracOper WHERE ID=@idEvROp + IF (@idZam IS NULL) + BEGIN + IF (ISNULL( (SELECT COUNT(ID) FROM dbo.TabCisZam), 0)=1) + SELECT TOP(1) @idZam=ID FROM dbo.TabCisZam + IF (@idZam IS NOT NULL) + UPDATE dbo.TabEvidRozpracOper SET IDZamestnance=@idZam WHERE ID=@idEvROp + END + UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=(SELECT Cislo FROM dbo.TabCisZam WHERE ID=@idZam) WHERE ID=@idJson AND CisloZam IS NULL + + SET @skCasSek = DATEDIFF(s, @casStart, @casKonec) + + UPDATE dbo.TabEvidRozpracOperR SET Mnoz_odv=1, + Sk_cas=CASE Sk_Cas_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END, + Sk_cas_Obsluhy=CASE Sk_Cas_Obsluhy_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END + WHERE IDEvidRozpracOper=@idEvROp + UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@casKonec, CelkovyCas_T=0, CelkovyCas=DATEDIFF(s, @casStart, @casKonec) WHERE ID=@idEvROp + EXEC dbo.hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvROp, @CelkovyCas_S=@skCasSek, @KVO=1 + + IF (@idPracovisteOld IS NOT NULL) + EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=@idEvROp, @GenerovatEvidenciOperaci=1 + ELSE + EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=@idEvROp, @GenerovatEvidenciOperaci=0 + SET @idMzda=NULL + IF (1=(SELECT COUNT(ID) FROM dbo.TabEvidRozpracOperR WHERE IDEvidRozpracOper=@idEvROp)) + SET @idMzda = (SELECT TOP(1) m.ID FROM dbo.TabPrikazMzdyAZmetky m INNER JOIN dbo.TabEvidRozpracOperR er ON (er.ID=m.IDEvidRozpracOperR) + WHERE er.IDEvidRozpracOper=@idEvROp) + UPDATE dbo._TabVyroba_OperaceStartStop SET CasKonec=@casKonec, Ukonceno=1, IDMzda=@idMzda WHERE ID=@idStartStopOp + UPDATE dbo._hdc_ph_PrijataJsonData SET IDMzda=@idMzda WHERE ID=@idJson + END + END + + MERGE dbo.TabPrKVazby AS T + USING @PrKVazby AS S ON (T.ID=S.ID) + WHEN MATCHED THEN UPDATE SET T.Sklad=S.Sklad; + +-- zapis pro pocitani spotreby testa + INSERT dbo._TabVyroba_TestoVyroba (IdPHIdent, IDPrikaz, IDDokladVydejMat, IDKmenZbozi, SkupZbo, RegCis, DatPriprava, VyrobniDen, Smena, DatVypousteni, + IDStrojPek, Viskozita, VodaLitry, MoukaHmot, MoukaSilo) + SELECT @idPHIdent, @idVPr, @idDZ, @dilec, SkupZbo, RegCis, @casStart, @vyrobniDen, @smena, @casKonec, + @idStroj, @viskoz, @vodaLitry, @moukaKgFin, @moukaSilo FROM dbo.TabKmenZbozi WHERE ID=@dilec + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDDoklad=@idDZ WHERE ID=@idJson + + IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData + + END -- typ spotreba + + + +-- ODPIS ----------------------------------------------------------------- + IF (@typDokum='odpis') + BEGIN + SET @sklMat = N'211' -- odpis ze skladu Pekarna nebo z 311 - sklad Material ??????? + SET @radaDZVydejka = N'242' + SET @dpz=4 + + SELECT @jsonString2=u2.vydej + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH (akce NVARCHAR(50), [data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH ( vydej NVARCHAR(MAX) AS JSON) AS u2 + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString2 + DECLARE p CURSOR LOCAL FOR + SELECT u.skupzbo, u.regcis, u.sarze, u.paletovylist, u.mnozstvi, u.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ( skupzbo NVARCHAR(3), regcis NVARCHAR(30), sarze NVARCHAR(30), paletovyList NVARCHAR(30), mnozstvi NUMERIC(19,6), datazoneId INT) AS u + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @sz, @rc, @sarze, @paletList, @mnoz, @idPHIdent + IF (@@FETCH_STATUS<>0) BREAK + + SET @paletList = ISNULL(@paletList, N'') + SET @sarze = ISNULL(@sarze, N'') + + IF (@idDZ IS NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklMat, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, @CisloOrg=0 + SELECT @datumDZ=DatPorizeni, @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @parZnak=ParovaciZnak + FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=0 WHERE ID=@idDZ + END + IF (@idDZ IS NOT NULL) + BEGIN + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + BEGIN + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklMat) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklMat, @IDZboSklad=@idSS OUT + IF (@idSS IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, + @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + + IF (ISNULL(@sarze,N'')=N'') + SET @sarze = (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) + UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent, _Vyroba_Sarze=@sarze WHERE ID=@idPZ + + IF (@paletList<>N'') + BEGIN + SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKZ AND Nazev1=@paletList) + IF (@idVCK IS NULL) + EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKZ, @Nazev1=@paletList, @Selectem=0 + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idSS AND Nazev1=@paletList) + IF (@idVCS IS NULL) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idSS + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz + END + + END -- @idPZ IS NOT NULL + END -- @idSS IS NOT NULL + END -- @idKZ IS NOT NULL + END -- @idDZ IS NOT NULL + + END + CLOSE p + DEALLOCATE p + + IF (@idDZ IS NOT NULL) + BEGIN + EXEC dbo.hp_VypCenOZPolozek_IDDokladu @idDZ, 0 + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + + +-- musim odepsat i z technologickeho skladu + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, + @Mena=@menaDZ, @CisloOrg=0, @DatumPorizeni=@datumDZ + IF (@idDZDst IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZDst) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZDst) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_IDPuvodniDoklad=@idDZ WHERE ID=@idDZDst + SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@idDZ, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=@menaDZ, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=1 + IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst) AND EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1 AND ID=@idDZ) + EXEC dbo.hp_Realizuj_Vydej @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @Hlidat=0, @BylaChyba=@bChyba OUT, @RealMnoz=1, @RealFin=1 + END + + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDDoklad=@idDZ WHERE ID=@idJson + END + + IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData + + END -- typ odpis + + END -- akce: vyroba_spotreba +-- END: SPOTREBA/ODPIS + + + + + + + + +-- BEGIN: OBJEDNAVKA + IF (@akce=N'objednavka') + BEGIN +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + DELETE FROM @TabPHObj + + DECLARE p CURSOR LOCAL FOR + SELECT u2.datazoneId, u3.datazoneId, u2.paletovyList, u2.created, u2.skupzbo, u2.regcis, u3.sarze, u3.mnozstvi, u2.typ, u2.subtyp + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), paletovyList NVARCHAR(50), created DATETIME, items NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (items) + WITH ( datazoneId INT, heliosId INT, sarze NVARCHAR(30), mnozstvi NUMERIC(19,6) ) AS u3 + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPHIdent, @idPHIdent2, @paletList, @datPorizeni, @sz, @rc, @sarze, @mnoz, @typDokum, @subtypDokum + IF (@@FETCH_STATUS<>0) BREAK + INSERT dbo._TabVyroba_Objednavky (IDPrijataDataJson, IdPHIdent, IdPHIdent2, SkupZbo, RegCis, PaletovyList, Sarze, Mnozstvi, DatPorizeni) + SELECT @idJson, @idPHIdent, @idPHIdent2, @sz, @rc, @paletList, @sarze, @mnoz, @datPorizeni + SET @idPHObj = SCOPE_IDENTITY() + INSERT @TabPHObj (ID, IDPHIdent) VALUES (@idPHObj, @idPHIdent) + IF (@typDokum='micharna') AND (@subtypDokum='nocni') + UPDATE dbo._TabVyroba_Objednavky SET NocniObjednavka=1 WHERE ID=@idPHObj + END + CLOSE p + DEALLOCATE p + + IF (@typDokum='micharna') AND (@subtypDokum='nocni') AND EXISTS (SELECT 1 FROM @TabPHObj) + BEGIN + SET @idDZ = NULL + SET @prevodka = 1 + SET @radaDZPrevodV = N'231' + SET @dpz = 4 + + DECLARE p CURSOR LOCAL FOR + SELECT ID, IDPHIdent FROM @TabPHObj + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPHObj, @idPHIdent + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idDZ IS NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklMat, @DruhPohybu=@dpz, @RadaDokladu=@radaDZPrevodV, @CisloOrg=0 + UPDATE dbo.TabDokladyZbozi SET DruhPohybuPrevod=0, TypPrevodky=N'281', IdSkladPrevodu=@sklPek, PrevodRealizovat=1 WHERE ID=@idDZ + SELECT @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @parZnak=ParovaciZnak FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=0 WHERE ID=@idDZ + END + IF (@idDZ IS NOT NULL) + BEGIN + SELECT @sz=SkupZbo, @rc=RegCis, @paletList=PaletovyList, @sarze=Sarze FROM dbo._TabVyroba_Objednavky WHERE ID=@idPHObj + SET @sarze = ISNULL(@sarze, N'') + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + BEGIN + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklMat) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklMat, @IDZboSklad=@idSS OUT + IF (@idSS IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, + @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) + BEGIN + UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent WHERE ID=@idPZ + IF (@@ROWCOUNT=0) + INSERT dbo.TabPohybyZbozi_EXT (ID, _HDCAPI_PHident) SELECT @idPZ, @idPHIdent + + IF (@sarze<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabKmenZbozi_EXT WHERE ID=@idKZ) + INSERT dbo.TabKmenZbozi_EXT (ID) SELECT @idKZ + UPDATE dbo.TabKmenZbozi_EXT SET _Prevod_PosledniSarze=@sarze WHERE ID=@idKZ + END + + SET @idVCP = NULL + IF (@paletList<>N'') + BEGIN + SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKZ AND Nazev1=@paletList) + IF (@idVCK IS NULL) + EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKZ, @Nazev1=@paletList, @Selectem=0 + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idSS AND Nazev1=@paletList) + IF (@idVCS IS NULL) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idSS + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz + SET @idVCP = SCOPE_IDENTITY() + END + INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, IDVyrCP, Mnozstvi, Sarze) + SELECT @idPHObj, @idDZ, @idPZ, @idVCP, @mnoz, @paletList + SET @idPHObjPol = SCOPE_IDENTITY() + + END -- @idPZ IS NOT NULL + END -- @idSS IS NOT NULL + END -- @idKZ IS NOT NULL + END -- @idDZ IS NOT NULL + + END + CLOSE p + DEALLOCATE p + + IF (@idDZ IS NOT NULL) + BEGIN + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + SET @logTyp=3 + SET @logInt=@idDZ + SET @logStr = @parZnak + SET @log4Mail = 1 + SET @logText = N'Nelze realizovat vdejka non pevodky' + + SET @aktDatum = GETDATE() + EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ, @DatumRealizace=@aktDatum, @Uzivatel=0, @Hlidat=0, @BylaChyba=@bChyba OUT + IF (@bChyba=0) + BEGIN + SET @logTyp=0 + SET @logInt=0 + SET @logStr = N'' + SET @log4Mail = 0 + SET @logText = N'' + END + END + END -- @subtypDokum='nocni' + + + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), Blokovano=0 WHERE ID=@idJson + + END -- akce: objednavka +-- END: OBJEDNAVKA + + + + + + +-- BEGIN: ZAHAJENI OPERACE + IF (@akce=N'vyroba_zacatek') + BEGIN +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + IF (1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabCisZam), 0)) + UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=(SELECT TOP(1)Cislo FROM dbo.TabCisZam) WHERE ID=@idJson AND CisloZam IS NULL + ELSE + UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=999999 WHERE ID=@idJson AND CisloZam IS NULL + + SET @cisZam = NULL + SET @idZam = NULL + + SELECT @typDokum=u2.typ, @idVPr=u3.heliosId, @idPHIdent=u2.datazoneId, @idPracoviste=u4.idprac, @idStroj=u4.heliosId, @statusStroje=u3.[status], + @casStart=u3.zacatek, @sz=u3.skupzbo, @rc=u3.regcis, @idPHIdent2=u4.datazoneId + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, '$') + WITH ([data] NVARCHAR(MAX) AS JSON) AS u + CROSS APPLY OPENJSON ([data]) + WITH ( typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON, datazoneId INT, stroj NVARCHAR(MAX) AS JSON) AS u2 + CROSS APPLY OPENJSON (prikaz) + WITH ( heliosId INT, datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), [status] NVARCHAR(20), zacatek DATETIME, konec DATETIME ) AS u3 + CROSS APPLY OPENJSON (stroj) + WITH ( heliosId INT, datazoneId INT, idprac INT, kod NVARCHAR(20) ) AS u4 + + IF (@cisZam IS NULL) + SELECT @cisZam=CisloZam FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson + IF (@cisZam IS NOT NULL) + SELECT @idZam=ID FROM dbo.TabCisZam WHERE Cislo=@cisZam + + + IF (@idVPr IS NOT NULL) AND (@idPracoviste IS NOT NULL) + BEGIN +-- INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 1, N'Zpracovavam PrijataJsonData jako Vyroba_zacatek', @idJson + SET @doklPrP = NULL + SET @altPrP = NULL + + SELECT @cisloPrikazu = RadaPrikaz FROM dbo.TabPrikaz WHERE ID=@idVPr + + SET @idStartStopOp = (SELECT ID FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrijataDataJson=@idJson AND IdPHIdent=@idPHIdent) + IF (@idStartStopOp IS NULL) + BEGIN + INSERT dbo._TabVyroba_OperaceStartStop (IDPrijataDataJson, IdPHIdent, IdPHIdent2, IDPrikaz, SkupZbo, RegCis, IDStroj, IDPracoviste, CasStart) + SELECT @idJson, @idPHIdent, @idPHIdent2, @idVPr, @sz, @rc, @idStroj, @idPracoviste, @casStart + SET @idStartStopOp = SCOPE_IDENTITY() + END + + IF EXISTS (SELECT 1 FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrijataDataJson=@idJson AND IDEvidRozpracOper IS NULL) + BEGIN + SELECT @strojPec = Nazev FROM dbo.TabCisStroju WHERE ID=@idStroj + + SET @doklPrP = NULL + IF (@sz='701') + SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste FROM dbo.TabPrPostup + WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND nazev=N'Mchn' + + IF (@doklPrP IS NOT NULL) + BEGIN + INSERT dbo.TabEvidRozpracOper (IDZamestnance, IDPracoviste, IDStroje, CasZahajeni, Poznamka) + SELECT @idZam, @idPracoviste, NULL, @casStart, N'Mchn pro stroj ' + ISNULL(@strojPec, N'') + N' *** pkaz ' + ISNULL(@cisloPrikazu, N'') + SET @idEvROp = SCOPE_IDENTITY() + INSERT dbo.TabEvidRozpracOperR (IDEvidRozpracOper, IDPrikaz, DokladPrPostup, AltPrPostup, Mnoz_odv) SELECT @idEvROp, @idVPr, @doklPrP, @altPrP, 1 + UPDATE dbo._TabVyroba_OperaceStartStop SET IDEvidRozpracOper=@idEvROp, DokladPrP=@doklPrP, AltPrP=@altPrP WHERE ID=@idStartStopOp + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), Blokovano=0, IDEvidRozpOp=@idEvROp WHERE ID=@idJson + END + END + END + + + END -- akce: vyroba_zacatek +-- END: ZAHAJENI OPERACE + + + + + + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_PROCEDURE() + N'/r.' + CONVERT(nvarchar, ERROR_LINE()) + N' >> ' + ERROR_MESSAGE() + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson + + IF (@logTyp>0) + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail) + SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1 + END CATCH + SET @logTyp=0 + + END +CLOSE j +DEALLOCATE j + + + + +-- pro jistotu +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData diff --git a/_sql/ep_Vyroba_GenSouhrnnyVydej.sql b/_sql/ep_Vyroba_GenSouhrnnyVydej.sql new file mode 100644 index 0000000..0fb0313 --- /dev/null +++ b/_sql/ep_Vyroba_GenSouhrnnyVydej.sql @@ -0,0 +1,162 @@ +-- dbo.ep_Vyroba_GenSouhrnnyVydej +CREATE PROCEDURE dbo.ep_Vyroba_GenSouhrnnyVydej + @datum DATETIME=NULL, + @radaVydej NVARCHAR(3)=NULL, + @idSklad NVARCHAR(30)=NULL, + @errorMsg NVARCHAR(500)=N'' OUT +AS + + +-- HD Consulting Strakonice, T. Buzin +-- generuje souhrnnou vydejku (z vydejek prikazu, storna, rucnich korekci zaslanych z terminalu od PH) do jedne vydejky za dany den +-- data z technologickeho/pomocneho skladu, vydejka na sklad Pekarna 211 (lze ovlivnit parametrem idSklad) + +-- pokud neni @datum zadane, bere se vcerejsek + + + +SET NOCOUNT ON + + +DECLARE + @errMsg NVARCHAR(500), + @tranPred INT, + @debugXml XML, + @iTemp INT, + @bTemp BIT + +DECLARE + @idObd INT, + @datumOd DATETIME, + @datumDo DATETIME, + @sklMatHlavni NVARCHAR(30)=N'311', + @sklPekarna NVARCHAR(30)=N'211', + @sklTechnolog NVARCHAR(30), + @idDZ INT, + @idPZ INT, + @idSS INT, + @idKZ INT, + @mnoz NUMERIC(19,6), + @cOrg INT=0, + @dzMena NUMERIC(19,6), + @dpz TINYINT=4, -- vydej v evid.cene + @vstC TINYINT, + @jednM INT, + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6) + +DECLARE @vydeje TABLE (SkupZbo NVARCHAR(3) NOT NULL, RegCis NVARCHAR(30) NOT NULL, IDKmenZbozi INT, IDPohybZbozi INT, IDPrikaz INT, Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0.0, + PRIMARY KEY (SkupZbo,RegCis) ) + + + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) ) + + + +SET @sklTechnolog=(SELECT TOP(1) Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%ne%' AND CisloStr LIKE N'2%') +IF (@sklTechnolog IS NULL) + SET @sklTechnolog = N'261' +SET @sklPekarna=(SELECT TOP(1) Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Vroba - Pekrna') +IF (@sklPekarna IS NULL) + SET @sklPekarna = N'211' + + +IF (@idSklad IS NULL) + SET @idSklad = @sklPekarna + + +IF (@datum IS NULL) + SET @datum = DATEADD(second, -1, dbo.hf_TruncDate(GETDATE())) -- vcerejsi pulnoc +SET @datumOd = dbo.hf_TruncDate(@datum) -- 00:00:00 daneho dne +SET @datumDo = DATEADD(second, -1, DATEADD(day, 1, @datumOd)) -- 23:59:59 daneho dne + +EXEC @idObd = dbo.hp_GetObdobiDleDatumu @Datum=@datumOd, @JakyDatum=0, @HlasitUzavreno=0 + + +IF (@radaVydej IS NULL) + SET @radaVydej = (SELECT TOP(1) RadaDokladu FROM dbo.TabDruhDokZbo WHERE DruhPohybuZbo=4 AND Nazev LIKE N'%eba PEK' + AND ID NOT IN (SELECT d.IDDruhDZ FROM dbo.TabDruhDokZboDef d WHERE d.IdObdobi=@idObd AND d.Blokovano=1) ) +IF (@radaVydej IS NULL) + SET @radaVydej = (SELECT TOP(1) RadaDokladu FROM dbo.TabDruhDokZbo WHERE DruhPohybuZbo=4 AND Nazev LIKE N'%eba PEK') +IF (@radaVydej IS NULL) + SET @radaVydej = N'223' -- vyrobni spotreba PEK + + + + +INSERT @vydeje (SkupZbo, RegCis, IDKmenZbozi, IDPohybZbozi, IDPrikaz, Mnozstvi) + SELECT p.SkupZbo, p.RegCis, k.ID, p.ID, ISNULL(p.IDPrikaz, d.IDPrikaz), p.MnozstviDruhove + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE d.DatPorizeni BETWEEN @datumOd AND @datumDo + AND d.RadaDokladu IN (@radaVydej, N'229', N'292') -- standardne by melo byt: 223 vydej spotreba PEK, 229 Storno vydej spotreba, 292 Prijem vyrovnani do normy + AND d.DruhPohybuZbo IN (0,1,3,4) + AND s.IDSklad=@sklTechnolog + AND p.Mnozstvi>0 + AND k.Sluzba=0 + ORDER BY d.ParovaciZnak, p.Poradi + + + +MERGE @vydeje AS T + USING dbo.TabKmenZbozi AS S ON (S.SkupZbo=T.SkupZbo AND S.RegCis=T.RegCis) + WHEN MATCHED AND T.IDKmenZbozi IS NULL THEN UPDATE SET T.IDKmenZbozi=S.ID; +SET @debugXml=(SELECT * FROM @vydeje FOR XML AUTO) + + + +BEGIN TRY +SET @tranPred = @@TRANCOUNT +IF (@tranPred=0) + BEGIN TRAN + + +IF EXISTS (SELECT 1 FROM @vydeje WHERE Mnozstvi<>0 AND IDKmenZbozi IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@idSklad, @DruhPohybuZbo=@dpz, @RadaDokladu=@radaVydej, @CisloOrg=@cOrg, @DatumPorizeni=@datumDo + IF (@idDZ IS NOT NULL) + BEGIN + SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + + DECLARE p CURSOR LOCAL FOR + SELECT DISTINCT(IDKmenZbozi), SUM(Mnozstvi) + FROM @vydeje + WHERE IDKmenZbozi IS NOT NULL + GROUP BY IDKmenZbozi + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idKZ, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklPekarna AND IDKmenZbozi=@idKZ) + IF (@idSS IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklPekarna, @IDZboSklad=@idSS OUT + IF (@idSS IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=@cOrg, @IDZboSklad=@idSS, @Mena=@dzMena, + @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, + @VstupniCena=@vstC, @PovolitDuplicitu=1, @PovolitBlokovane=1, @Mnozstvi=@mnoz + END -- @idSS IS NOT NULL + END + CLOSE p + DEALLOCATE p + END -- @idDZ IS NOT NULL + END -- mam neco v tabulici @vydeje + + + +IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN +END TRY + +BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_MESSAGE() + N' / ' + ERROR_PROCEDURE() + N' / r. ' + CONVERT(nvarchar, ERROR_LINE()) +END CATCH + diff --git a/_sql/ep_Vyroba_GenerujPalety.sql b/_sql/ep_Vyroba_GenerujPalety.sql new file mode 100644 index 0000000..a374955 --- /dev/null +++ b/_sql/ep_Vyroba_GenerujPalety.sql @@ -0,0 +1,10 @@ +-- dbo.ep_Vyroba_GenerujPalety +CREATE PROCEDURE dbo.ep_Vyroba_GenerujPalety + @idPrikaz INT=NULL, + @pocetStitku INT=0, + @pocetPaletListu INT=0, + @paletaStart NVARCHAR(25)=NULL, + @sarze NVARCHAR(15)=NULL +AS + +SET NOCOUNT ON diff --git a/_sql/ep_Vyroba_PrijemNestandard.sql b/_sql/ep_Vyroba_PrijemNestandard.sql new file mode 100644 index 0000000..ee2fd9d --- /dev/null +++ b/_sql/ep_Vyroba_PrijemNestandard.sql @@ -0,0 +1,101 @@ +-- dbo.ep_Vyroba_PrijemNestandard +CREATE PROCEDURE dbo.ep_Vyroba_PrijemNestandard +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + +SET NOCOUNT ON + +IF OBJECT_ID(N'tempdb..#TabPrijemNestandard', N'U') IS NULL + RETURN + + + +DECLARE + @sklad NVARCHAR(30)=N'211', + @radaPrijem NVARCHAR(3)='270', + @vstC TINYINT, + @dpz TINYINT=0, + @jednM INT, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6), + @idDZ INT, + @idPZ INT, + @idStav INT, + @mjEvid NVARCHAR(10), + @mnoz NUMERIC(19,6), + @mnozKS NUMERIC(19,6), + @ksVKA NUMERIC(19,6), + @idVCK INT, + @idVCS INT, + @idVCP INT + +DECLARE + @idKmen INT, + @pocetKA SMALLINT, + @paletList NVARCHAR(50), + @sarze NVARCHAR(50), + @datVyroby DATETIME, + @datExpirace DATETIME, + @smena TINYINT, + @idStroj INT + + + + +SELECT TOP(1) @idKmen=IDKmen, + @mnoz=MnozstviKg, + @paletList=PaletovyList, + @sarze=Sarze, + @datVyroby=DatumVyroby, + @datExpirace=DatumExpirace, + @smena=Smena, + @idStroj=IDStroje + FROM #TabPrijemNestandard + + +IF (@idKmen IS NULL) OR (@mnoz<=0) + RETURN + + +SET @paletList = ISNULL(@paletList, N'') +SET @sarze = ISNULL(@sarze, N'') + + +SELECT @mjEvid=MJEvidence FROM dbo.TabKmenZbozi WHERE ID=@idKmen +SET @ksVKA = 1 +IF (@mjEvid=N'KA') + SET @ksVKA = ISNULL( (SELECT PocetOdvozene FROM dbo.TabMJZbozi WHERE KodMJ1=N'KA' AND KodMJ2=N'Ks' AND IDKmenZbozi=@idKmen), 0) + + +SET @idStav = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklad AND IDKmenZbozi=@idKmen) +IF (@idStav IS NULL) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKmen, @IDSklad=@sklad, @IDZboSklad=@idStav OUT + +IF (@idStav IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklad, @DruhPohybu=@dpz, @RadaDokladu=@radaPrijem, @CisloOrg=0 + SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena FROM dbo.TabDokladyZbozi WHERE ID=@idDZ + IF (@idDZ IS NOT NULL) + BEGIN +-- SET @mnoz = @pocetKA + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idStav, @Mena=@dzMena, @Kurz=@dzKurz, + @JednotkaMeny=@jednM, @KurzEuro=@dzKurzE, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) AND (@sarze<>N'') + BEGIN + UPDATE dbo.TabPohybyZbozi SET Poznamka=N'Pjem nestandard' WHERE ID=@idPZ + SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKmen AND Nazev1=@paletList) + IF (@idVCK IS NULL) + EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKmen, @Nazev1=@paletList, @Selectem=0, @DatVyroby=@datVyroby, @DatExpirace=@datExpirace, @Poznamka=N'Nestandard' + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idStav AND Nazev1=@paletList) + IF (@idVCS IS NULL) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idStav + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi, DatExpirace) SELECT @idPZ, @idVCS, @sarze, @mnoz, @datExpirace + + IF NOT EXISTS(SELECT 1 FROM dbo._TabVyroba_Palety WHERE Typ=5 AND CisloPalety=@paletList AND Sarze=@sarze) + INSERT dbo._TabVyroba_Palety (Typ, CisloPalety, Sarze, DatZahajeni, DatUkonceni, Mnozstvi, MnozstviKA, IDKmen) + SELECT 5, @paletList, @sarze, GETDATE(), GETDATE(), @pocetKA*@ksVKA, @pocetKA, @idKmen + END + END + END diff --git a/_sql/ep_Vyroba_VyrobaMimoPlan.sql b/_sql/ep_Vyroba_VyrobaMimoPlan.sql new file mode 100644 index 0000000..2a5f8f4 --- /dev/null +++ b/_sql/ep_Vyroba_VyrobaMimoPlan.sql @@ -0,0 +1,116 @@ +-- dbo.ep_Vyroba_VyrobaMimoPlan +CREATE PROCEDURE dbo.ep_Vyroba_VyrobaMimoPlan + @IDKmen INT=NULL, + @IDStroj INT=NULL, + @IDZamest INT=NULL +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + +SET NOCOUNT ON + +IF ((@IDKmen IS NULL) OR (@IDStroj IS NULL)) AND OBJECT_ID(N'tempdb..#TabVyrobaMimoPlan', N'U') IS NULL + RETURN + + +DECLARE + @errMsg NVARCHAR(500), + @tranPred INT + +DECLARE + @idEvROp INT, + @uroven INT, + @maxUroven INT, + @iChyba INT, + @mamPolotovar BIT, + @idPlan INT, + @IDPracoviste INT, + @idVPr INT, + @prpD INT, + @szKmen NVARCHAR(3), + @prpA NCHAR(1)=N'A', + @mn NUMERIC(19,6), + @mj NVARCHAR(10), + @szVyr NVARCHAR(3), + @rcVyr NVARCHAR(30) + + + + + +IF (@IDKmen IS NULL) + DECLARE v CURSOR LOCAL FOR + SELECT IDKmen, IDStroj, IDZamest FROM #TabVyrobaMimoPlan ORDER BY ID + ELSE + DECLARE v CURSOR LOCAL FOR + SELECT @IDKmen, @IDStroj, @IDZamest +OPEN v +WHILE (1=1) + BEGIN + FETCH NEXT FROM v INTO @IDKmen, @IDStroj, @IDZamest + IF (@@FETCH_STATUS<>0) BREAK + + IF (@IDZamest IS NULL) + SELECT TOP(1) ID FROM dbo.TabCisZam + SELECT @szVyr=SkupZbo, @rcVyr=RegCis, @mj=MJEvidence FROM dbo.TabKmenZbozi WHERE ID=@IDKmen + SET @mn = ISNULL( (SELECT PocetHlavni FROM dbo.TabMJZbozi WHERE IDKmenZbozi=@IDKmen AND KodMJ1=N'KA' AND KodMJ2='Pal'), 1) + IF (@mn=0) + SET @mn = 1 + SELECT @IDPracoviste=IDPrac FROM dbo.TabCisStroju WHERE ID=@IDStroj + + EXEC @idPlan=dbo.hp_NewVyrobniPlan @IDDilce=@IDKmen, @mnozstvi=@mn, @Poznamka=N'Vroba mimo pln', @ZdrojPozadavku=0 + IF (@idPlan>0) + BEGIN + UPDATE dbo.TabPlan SET Datum=dbo.hf_TruncDate(GETDATE()) WHERE ID=@idPlan + + IF OBJECT_ID(N'tempdb..#TabPomSeznamVyrPlanuProZaplanovani', N'U') IS NULL + CREATE TABLE #TabPomSeznamVyrPlanuProZaplanovani (ID INT NOT NULL) + IF OBJECT_ID(N'tempdb..#TabGenVyrPrikazy', N'U') IS NULL + CREATE TABLE #TabGenVyrPrikazy (ID INT NOT NULL, UrovenVnoreni INT NULL) + INSERT #TabPomSeznamVyrPlanuProZaplanovani (ID) SELECT @idPlan + EXEC dbo.hp_VyrPlan_ZaplanujSeznam @GenPlanovaneVyroby=0 + + IF EXISTS (SELECT 1 FROM #TabGenVyrPrikazy) + BEGIN + UPDATE t SET t.UrovenVnoreni=s.UrovenVnoreni FROM #TabGenVyrPrikazy t, dbo.TabPrikaz s WHERE s.ID=t.ID + SET @maxUroven=(SELECT MAX(UrovenVnoreni) FROM #TabGenVyrPrikazy) + + DECLARE c CURSOR LOCAL FOR + SELECT ID, UrovenVnoreni FROM #TabGenVyrPrikazy + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idVPr, @uroven + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idKmen=p.IDTabKmen, @szKmen=k.SkupZbo FROM dbo.TabPrikaz p INNER JOIN dbo.TabKmenZbozi k ON (k.ID=p.IDTabKmen) WHERE p.ID=@idVPr + SET @mamPolotovar=0 + + IF EXISTS (SELECT 1 FROM dbo.TabPrKVazby v INNER JOIN dbo.TabKmenZbozi n ON (v.nizsi=n.ID) + WHERE v.IDOdchylkyDo IS NULL AND v.IDPrikaz=@idVPr AND n.SkupZbo LIKE N'7%' AND n.SkupZbo<>N'701') + SET @mamPolotovar=1 + + IF (@szKmen NOT IN (N'701')) AND (@mamPolotovar=0) + UPDATE dbo.TabPrPostup SET pracoviste=@IDPracoviste, IDStroje=@IDStroj WHERE IDOdchylkyDo IS NULL AND Nazev LIKE N'Pee%' AND IDPrikaz=@idVPr + + EXEC @iChyba=dbo.hp_ZadaniPrikazuDoVyroby @IDPrikaz=@idVPr, @OnlyPredzpracovani=0 +/* + IF (@iChyba=0) AND (@szKmen NOT IN (N'701')) + BEGIN + EXEC @idEvROp=dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=@idZamest, @IDPracoviste=@IDPracoviste, @IDStroje=@IDStroj + IF (@idEvROp>0) + BEGIN + SELECT TOP(1) @prpD=Doklad, @prpA=Alt FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr + EXEC dbo.ep_Vyroba_InsertEvidRozpracOperPol @IdEvidRozpOper=@idEvROp, @IdPrikaz=@idVPr, @doklPrPost=@prpD, @altPrPost=@prpA + END + END +*/ + END + CLOSE c + DEALLOCATE c + END + END + + END +CLOSE v +DEALLOCATE v diff --git a/_sql/ep_Vyroba_ZapisCCP1.sql b/_sql/ep_Vyroba_ZapisCCP1.sql new file mode 100644 index 0000000..fe7eead --- /dev/null +++ b/_sql/ep_Vyroba_ZapisCCP1.sql @@ -0,0 +1,49 @@ +-- dbo.ep_Vyroba_ZapisCCP1 +CREATE PROCEDURE dbo.ep_Vyroba_ZapisCCP1 +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + +SET NOCOUNT ON + + +DECLARE + @id INT, + @idVPr INT, + @idKZ INT, + @idStroj INT, + @smena TINYINT, + @dat DATETIME=GETDATE(), + @teplota NUMERIC(15,2), + @rychlost NUMERIC(15,2), + @hmotnost NUMERIC(15,2), + @delka NUMERIC(15,2), + @prumer NUMERIC(15,2), + @naprava NVARCHAR(255) + + + +IF OBJECT_ID(N'tempdb..#InsertCCP1Zaznamy', N'U') IS NULL + RETURN + + + + +DECLARE c CURSOR LOCAL FOR + SELECT IDStroj, IDPrikaz, Smena, Teplota, Rychlost, Hmotnost, Delka, Prumer, NapravneOpatreni + FROM #InsertCCP1Zaznamy + ORDER BY ID +OPEN c +WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idStroj, @idVPr, @smena, @teplota, @rychlost, @hmotnost, @delka, @prumer, @naprava + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idKZ=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr + + INSERT dbo._TabVyroba_KontrolyCCP1 (IDStroj, Smena, Teplota, Rychlost, Hmotnost, Delka, Prumer, IDKmenZbozi, NapravneOpatreni) + SELECT @idStroj, @smena, @teplota, @rychlost, @hmotnost, @delka, @prumer, @idKZ, @naprava + + END +CLOSE c +DEALLOCATE c diff --git a/_sql/parseIntervalToHours.sql b/_sql/parseIntervalToHours.sql new file mode 100644 index 0000000..1cfe788 --- /dev/null +++ b/_sql/parseIntervalToHours.sql @@ -0,0 +1,36 @@ +DROP TABLE IF EXISTS #tempPeceni + +CREATE TABLE #tempPeceni +( +EventID VARCHAR(8) NOT NULL, +StartDateTime DATETIME NOT NULL, +EndDateTime DATETIME NOT NULL +) + + + +INSERT INTO #tempPeceni +VALUES +('peceni', 'september 17, 2023 7:0:00', 'september 18, 2023 02:26:18'); + + + + +select hr.ld AS CasDavky, + 60 - case when e.startdatetime > hr.ld then datepart(minute, e.startdatetime) else 0 end + + case when e.enddatetime < hr.ud then datepart(minute, e.enddatetime)-60 else 0 end as allocatedminutes +from #tempPeceni as e +cross apply +( + select + dateadd(hour, datepart(hour,e.startdatetime)+t.rn-1, cast(cast(e.startdatetime as date) as datetime)) as ld, + dateadd(hour, datepart(hour,e.startdatetime)+t.rn, cast(cast(e.startdatetime as date) as datetime)) as ud, + rn + from + ( + -- a tally, max 100 rows .. max 100 hours duration + select top (1+datediff(hour,e.startdatetime,dateadd(minute, -1, e.enddatetime))) row_number() over(order by @@spid) as rn + from (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) as a(n) + cross join (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) as b(n) + ) as t +) as hr; diff --git a/_sql/spec_Clear.sql b/_sql/spec_Clear.sql new file mode 100644 index 0000000..bd9927f --- /dev/null +++ b/_sql/spec_Clear.sql @@ -0,0 +1,10 @@ +DROP TRIGGER IF EXISTS dbo.ET_TabVyroba_Objednavky_IU +DROP TRIGGER IF EXISTS dbo.ET_TabVyroba_Objednavky_Pol_D +DROP TRIGGER IF EXISTS dbo.ET_TabPohybyZbozi_HDC_IU +DROP TRIGGER IF EXISTS dbo.ET_TabPohybyZbozi_HDC_D +DROP TRIGGER IF EXISTS dbo.ET_TabVyrCP_HDC_IU +DROP TRIGGER IF EXISTS dbo.ET_TabVyrCP_HDC_D +DROP TRIGGER IF EXISTS dbo.ET_TabVyroba_Palety_IU +DROP TRIGGER IF EXISTS dbo.ET_TabVyroba_Palety_D +DROP TRIGGER IF EXISTS dbo.ET_TabVyroba_PaletyUkonceni_D +DROP TRIGGER IF EXISTS dbo.ET_TabVyroba_VydejMatSarze_IU \ No newline at end of file diff --git a/_sql/tbl__TabVyrobaObjednavky.sql b/_sql/tbl__TabVyrobaObjednavky.sql new file mode 100644 index 0000000..533886d --- /dev/null +++ b/_sql/tbl__TabVyrobaObjednavky.sql @@ -0,0 +1,103 @@ +IF OBJECT_ID(N'dbo._TabVyroba_Objednavky', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_Objednavky ( + ID int IDENTITY(1, 1) NOT NULL, + IDPrijataDataJson int NULL, + IdPHIdent bigint NULL, + IdPHIdent2 bigint NULL, + PHOznaceni nvarchar(50) COLLATE Czech_CI_AS NULL, + IDDokladOZ INT, + Poznamka nvarchar(255) COLLATE Czech_CI_AS NULL, + SkupZbo nvarchar(3) COLLATE Czech_CI_AS NULL, + RegCis nvarchar(30) COLLATE Czech_CI_AS NULL, + IDKmenZbozi int NULL, + Mnozstvi numeric(19, 6) DEFAULT 0.0 NOT NULL, + MnozKVydeji numeric(19, 6) DEFAULT 0.0 NOT NULL, + PaletovyList nvarchar(50) COLLATE Czech_CI_AS NULL, + Sarze nvarchar(30) COLLATE Czech_CI_AS NULL, + NocniObjednavka BIT NOT NULL DEFAULT 0, + Storno BIT NOT NULL DEFAULT 0, + Vratka BIT NOT NULL DEFAULT 0, + Splneno BIT NOT NULL DEFAULT 0, + PocetPohybuOZ SMALLINT NOT NULL DEFAULT 0, + Blokovano bit DEFAULT 0 NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME(), + DatZpracovani datetime NULL, + CONSTRAINT PK__TabVyroba_Objednavky PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) + +DROP INDEX IF EXISTS EI_TabVyroba_Objednavky_IdPrijataDataJson ON dbo._TabVyroba_Objednavky + CREATE NONCLUSTERED INDEX EI_TabVyroba_Objednavky_IdPrijataDataJson ON dbo._TabVyroba_Objednavky (IDPrijataDataJson) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_Objednavky_idPH ON dbo._TabVyroba_Objednavky + CREATE NONCLUSTERED INDEX EI_TabVyroba_Objednavky_idPH ON dbo._TabVyroba_Objednavky (IdPHIdent) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + + + +/* 10.11.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'IDDokladOZ') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD IDDokladOZ INT NULL + +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'IDPohybOZ') IS NOT NULL ALTER TABLE dbo._TabVyroba_Objednavky DROP COLUMN IDPohybOZ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'DatReportuPH') IS NOT NULL ALTER TABLE dbo._TabVyroba_Objednavky DROP COLUMN DatReportuPH +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'PocetPohybuOZ') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD PocetPohybuOZ SMALLINT NOT NULL DEFAULT 0 + + +/* 12.11.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'Storno') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD Storno BIT NOT NULL DEFAULT 0 +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'Vratka') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD Vratka BIT NOT NULL DEFAULT 0 +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'Autor') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME() + +/* 14.11.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'NocniObjednavka') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD NocniObjednavka BIT NOT NULL DEFAULT 0 + +/* 23.11.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'Splneno') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD Splneno BIT NOT NULL DEFAULT 0 +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky', N'MnozKVydeji') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky ADD MnozKVydeji NUMERIC(19,6) NOT NULL DEFAULT 0.0 + + + + +IF OBJECT_ID(N'dbo._TabVyroba_Objednavky_Pol', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_Objednavky_Pol ( + ID INT IDENTITY(1, 1) NOT NULL, + IDHlava INT NULL, + IDDokladOZ INT NULL, + IDPohybOZ INT NULL, + IDVyrCP INT NULL, + SkupZbo NVARCHAR(3), + RegCis NVARCHAR(100), + Mnozstvi numeric(19, 6) DEFAULT 0.0 NOT NULL, + Sarze NVARCHAR(100) NULL, + PaletovyList NVARCHAR(100) NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + CONSTRAINT PK__TabVyroba_Objednavky_Pol PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) + + +DROP INDEX IF EXISTS EI_TabVyroba_Objednavky_Pol_idHlava ON dbo._TabVyroba_Objednavky_Pol + CREATE NONCLUSTERED INDEX EI_TabVyroba_Objednavky_Pol_idHlava ON dbo._TabVyroba_Objednavky_Pol (IDHlava) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_Objednavky_Pol_idPZ ON dbo._TabVyroba_Objednavky_Pol + CREATE NONCLUSTERED INDEX EI_TabVyroba_Objednavky_Pol_idPZ ON dbo._TabVyroba_Objednavky_Pol (IDPohybOZ) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_Objednavky_Pol_idDZ ON dbo._TabVyroba_Objednavky_Pol + CREATE NONCLUSTERED INDEX EI_TabVyroba_Objednavky_Pol_idDZ ON dbo._TabVyroba_Objednavky_Pol (IDDokladOZ) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + + +/* 13.11.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky_Pol', N'IDVyrCP') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky_Pol ADD IDVyrCP INT NULL + +/* 9.9.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky_Pol', N'Sarze') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky_Pol ADD Sarze NVARCHAR(100) NULL + +/* 17.9.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky_Pol', N'PaletovyList') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky_Pol ADD PaletovyList NVARCHAR(100) NULL +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky_Pol', N'SkupZbo') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky_Pol ADD SkupZbo NVARCHAR(3) NULL +IF COL_LENGTH(N'dbo._TabVyroba_Objednavky_Pol', N'RegCis') IS NULL ALTER TABLE dbo._TabVyroba_Objednavky_Pol ADD RegCis NVARCHAR(30) NULL diff --git a/_sql/tbl__TabVyrobaOperaceStartStop.sql b/_sql/tbl__TabVyrobaOperaceStartStop.sql new file mode 100644 index 0000000..f6d3428 --- /dev/null +++ b/_sql/tbl__TabVyrobaOperaceStartStop.sql @@ -0,0 +1,52 @@ +IF OBJECT_ID(N'dbo._TabVyroba_OperaceStartStop', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_OperaceStartStop ( + ID int IDENTITY(1, 1) NOT NULL, + IDPrijataDataJson int NOT NULL, + IdPHIdent bigint NULL, + IdPHIdent2 bigint NULL, + IDPrikaz int NULL, + Nazev NVARCHAR(50) NULL, + DokladPrP int NULL, + AltPrP nchar(1) COLLATE Czech_CI_AS NULL, + SkupZbo nvarchar(3) COLLATE Czech_CI_AS NULL, + RegCis nvarchar(30) COLLATE Czech_CI_AS NULL, + IDKmenZbozi int NULL, + IDStroj int NULL, + IDPracoviste int NULL, + CasStart datetime NULL, + CasKonec datetime NULL, + IDDokladOZ INT NULL, + CONSTRAINT PK___TabVyrobaOperaceStartStop PRIMARY KEY CLUSTERED (ID DESC) + WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) + + +DROP INDEX IF EXISTS EI_TabVyroba_OperaceStartStop_IdPrijataDataJson ON dbo._TabVyroba_OperaceStartStop + CREATE NONCLUSTERED INDEX EI_TabVyroba_OperaceStartStop_IdPrijataDataJson ON dbo._TabVyroba_OperaceStartStop (IDPrijataDataJson) + WITH (PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_OperaceStartStop_Prikaz ON dbo._TabVyroba_OperaceStartStop + CREATE NONCLUSTERED INDEX EI_TabVyroba_OperaceStartStop_Prikaz ON dbo._TabVyroba_OperaceStartStop (IDPrikaz) + WITH (PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_OperaceStartStop_Stroj ON dbo._TabVyroba_OperaceStartStop + CREATE NONCLUSTERED INDEX EI_TabVyroba_OperaceStartStop_Stroj ON dbo._TabVyroba_OperaceStartStop (IDStroj) + WITH (PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + + +/* 26.10.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_OperaceStartStop', N'PosledniChyba') IS NULL ALTER TABLE dbo._TabVyroba_OperaceStartStop ADD PosledniChyba NVARCHAR(255) NULL + + +/* 28.10.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_OperaceStartStop', N'IDMzda') IS NULL ALTER TABLE dbo._TabVyroba_OperaceStartStop ADD IDMzda INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_OperaceStartStop', N'IDEvidRozpracOper') IS NULL ALTER TABLE dbo._TabVyroba_OperaceStartStop ADD IDEvidRozpracOper INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_OperaceStartStop', N'Ukonceno') IS NULL ALTER TABLE dbo._TabVyroba_OperaceStartStop ADD Ukonceno BIT NOT NULL DEFAULT 0 + +/* 13.10.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_OperaceStartStop', N'IDDokladOZ') IS NULL ALTER TABLE dbo._TabVyroba_OperaceStartStop ADD IDDokladOZ INT NULL + +/* 7.10.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_OperaceStartStop', N'Nazev') IS NULL ALTER TABLE dbo._TabVyroba_OperaceStartStop ADD Nazev NVARCHAR(50) NULL + diff --git a/_sql/tbl__TabVyrobaOperaceStartStopVydej.sql b/_sql/tbl__TabVyrobaOperaceStartStopVydej.sql new file mode 100644 index 0000000..d79c82a --- /dev/null +++ b/_sql/tbl__TabVyrobaOperaceStartStopVydej.sql @@ -0,0 +1,25 @@ +IF OBJECT_ID(N'dbo._TabVyroba_OperaceStartStopVydej', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_OperaceStartStopVydej ( + ID int IDENTITY(1, 1) NOT NULL, + IDHlava int NOT NULL, + IDKmenZbozi int NOT NULL, + Mnozstvi numeric(19, 6) DEFAULT 0.0 NOT NULL, + MnozstviPuvodni numeric(19, 6) DEFAULT 0.0 NOT NULL, + IDPohybZbozi int NOT NULL, + CONSTRAINT PK__TabVyroba_OperaceStartStopVydej PRIMARY KEY CLUSTERED (ID DESC) + WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + + +DROP INDEX IF EXISTS EI__TabVyroba_OperaceStartStopVydej_IDHlava ON dbo._TabVyroba_OperaceStartStopVydej + CREATE NONCLUSTERED INDEX EI__TabVyroba_OperaceStartStopVydej_IDHlava ON dbo._TabVyroba_OperaceStartStopVydej (IDHlava) + WITH (PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI__TabVyroba_OperaceStartStopVydej_IDKmen ON dbo._TabVyroba_OperaceStartStopVydej + CREATE NONCLUSTERED INDEX EI__TabVyroba_OperaceStartStopVydej_IDKmen ON dbo._TabVyroba_OperaceStartStopVydej (IDKmenZbozi) + WITH (PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI__TabVyroba_OperaceStartStopVydej_PohybOZ ON dbo._TabVyroba_OperaceStartStopVydej + CREATE NONCLUSTERED INDEX EI__TabVyroba_OperaceStartStopVydej_PohybOZ ON dbo._TabVyroba_OperaceStartStopVydej (IDPohybZbozi) + WITH (PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__TabVyrobaPalety.sql b/_sql/tbl__TabVyrobaPalety.sql new file mode 100644 index 0000000..68d824c --- /dev/null +++ b/_sql/tbl__TabVyrobaPalety.sql @@ -0,0 +1,82 @@ +IF OBJECT_ID(N'dbo._TabVyroba_Palety', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_Palety ( + ID int IDENTITY(1, 1) NOT NULL, + Typ tinyint DEFAULT 0 NOT NULL, + CisloPalety nvarchar(50) NOT NULL, + Sarze nvarchar(30) NULL, + CisloOrg int NULL, + IDPrikaz int NULL, + IDKmen int NULL, + IDStroj int NULL, + IDVyrCisPrikaz int NULL, + IDPlanRozpis INT NULL, + DatPlan datetime NULL, + HodinaPlan smallint NULL, + DatZahajeni datetime NULL, + DatUkonceni datetime NULL, + Mnozstvi int DEFAULT 0 NOT NULL, + MnozstviKA smallint DEFAULT 0 NOT NULL, + MnozstviPlneKA smallint DEFAULT 0 NOT NULL, + MnoztviPosledniKA smallint DEFAULT 0 NOT NULL, + KusuVKA smallint DEFAULT 0 NOT NULL, + JSONDataStart nvarchar(max) NULL, + JSONStartResp nvarchar(max) NULL, + JSONDataKonec nvarchar(max) NULL, + JSONKonecResp nvarchar(max) NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + JeCislo AS CONVERT([bit],case when isnumeric([CisloPalety])=(1) then (1) else (0) end), + CONSTRAINT PK__TabVyroba_Palety PRIMARY KEY CLUSTERED (ID DESC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + + + +/* 25.11.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'IDKmen') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD IDKmen INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'IDVyrCisPrikaz') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD IDVyrCisPrikaz INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'KusuVKA') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD KusuVKA SMALLINT DEFAULT 0 NOT NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'DatExpirace') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD DatExpirace DATETIME NULL + + +/* 29.10.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'IDPlanRozpis') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD IDPlanRozpis INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'DatPlan') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD DatPlan DATETIME NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'HodinaPlan') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD HodinaPlan TINYINT NULL + +/* 7.12.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'JSONDataStart') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD JSONDataStart NVARCHAR(max) NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'JSONDataKonec') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD JSONDataKonec NVARCHAR(max) NULL + +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'JSONStartResp') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD JSONStartResp NVARCHAR(max) NULL +IF COL_LENGTH(N'dbo._TabVyroba_Palety', N'JSONKonecResp') IS NULL ALTER TABLE dbo._TabVyroba_Palety ADD JSONKonecResp NVARCHAR(max) NULL + +IF EXISTS (SELECT 1 FROM sys.extended_properties WHERE [name]='MS_Description' AND major_id=OBJECT_ID(N'dbo._TabVyroba_Palety', N'U')) + EXEC sp_dropextendedproperty @name='MS_Description', @level0type='schema', @level0name='dbo', @level1type='table', @level1name='_TabVyroba_Palety', @level2type='column', @level2name='Typ' +EXEC sp_addextendedproperty @name='MS_Description', @value=N'0-nedefinovano +1-vyrobek pekarna (vlastni) +2-vyrobek pekarna (externi) +3-material +4-zbozi +5-nestandard', @level0type='schema', @level0name='dbo', @level1type='table', @level1name='_TabVyroba_Palety', @level2type='column', @level2name='Typ' + + + +DROP INDEX IF EXISTS EI__TabVyroba_Palety_Typ ON dbo._TabVyroba_Palety + CREATE NONCLUSTERED INDEX EI__TabVyroba_Palety_Typ ON dbo._TabVyroba_Palety (Typ) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +DROP INDEX IF EXISTS EI__TabVyroba_Palety_IdPrikaz ON dbo._TabVyroba_Palety + CREATE NONCLUSTERED INDEX EI__TabVyroba_Palety_IdPrikaz ON dbo._TabVyroba_Palety (IDPrikaz) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +DROP INDEX IF EXISTS EI__TabVyroba_Palety_IdStroj ON dbo._TabVyroba_Palety + CREATE NONCLUSTERED INDEX EI__TabVyroba_Palety_IdStroj ON dbo._TabVyroba_Palety (IDStroj) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +DROP INDEX IF EXISTS EI__TabVyroba_Palety_CisloOrg ON dbo._TabVyroba_Palety + CREATE NONCLUSTERED INDEX EI__TabVyroba_Palety_CisloOrg ON dbo._TabVyroba_Palety (CisloOrg) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + diff --git a/_sql/tbl__TabVyrobaPaletyPohybOZ.sql b/_sql/tbl__TabVyrobaPaletyPohybOZ.sql new file mode 100644 index 0000000..e0c5605 --- /dev/null +++ b/_sql/tbl__TabVyrobaPaletyPohybOZ.sql @@ -0,0 +1,22 @@ +IF OBJECT_ID(N'dbo._TabVyroba_PaletyPohybOZ', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_PaletyPohybOZ ( + ID int IDENTITY(1, 1) NOT NULL, + IDPalety int NOT NULL, + IDPohybOZ int NOT NULL, + Sarze nvarchar(30) COLLATE Czech_CI_AS NULL, + Mnozstvi int NULL, + MnozstviKA smallint NULL, + CONSTRAINT PK_TabVyroba_PaletyPohybOZ PRIMARY KEY CLUSTERED (ID DESC) + WITH ( + PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, + ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +DROP INDEX IF EXISTS EI_TabVyroba_PaletyPohybOZ_Paleta ON dbo._TabVyroba_PaletyPohybOZ + CREATE NONCLUSTERED INDEX EI_TabVyroba_PaletyPohybOZ_Paleta ON dbo._TabVyroba_PaletyPohybOZ (IDPalety) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_PaletyPohybOZ_PohybZbozi ON dbo._TabVyroba_PaletyPohybOZ + CREATE NONCLUSTERED INDEX EI_TabVyroba_PaletyPohybOZ_PohybZbozi ON dbo._TabVyroba_PaletyPohybOZ (IDPohybOZ) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__TabVyrobaPaletyUkonceni.sql b/_sql/tbl__TabVyrobaPaletyUkonceni.sql new file mode 100644 index 0000000..f0045d4 --- /dev/null +++ b/_sql/tbl__TabVyrobaPaletyUkonceni.sql @@ -0,0 +1,37 @@ +IF OBJECT_ID(N'dbo._TabVyroba_PaletyUkonceni', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_PaletyUkonceni ( + ID int IDENTITY(1, 1) NOT NULL, + IDPalety INT, + IDPrikaz INT, + IDMzda INT, + IDMezd NVARCHAR(max) NULL, + PocetKs NUMERIC(19,6) DEFAULT 0.0 NOT NULL, + PocetKA NUMERIC(19,6) DEFAULT 0.0 NOT NULL, + NeuplnaPalPocetKA NUMERIC(19,6) DEFAULT 0.0 NOT NULL, + NeuplnaPalKsVPoslKA NUMERIC(19,6) DEFAULT 0.0 NOT NULL, + ErrMsg NVARCHAR(255) NULL, + Autor nvarchar(80) DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + PRIMARY KEY (ID DESC) + ) + + +/* 20.3.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_PaletyUkonceni', N'IDPrikaz') IS NULL ALTER TABLE dbo._TabVyroba_PaletyUkonceni ADD IDPrikaz INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_PaletyUkonceni', N'IDMzda') IS NULL ALTER TABLE dbo._TabVyroba_PaletyUkonceni ADD IDMzda INT NULL + + + +DROP INDEX IF EXISTS EI__TabVyroba_PaletyUkonceni_IDPalety ON dbo._TabVyroba_PaletyUkonceni + CREATE NONCLUSTERED INDEX EI__TabVyroba_PaletyUkonceni_IDPalety ON dbo._TabVyroba_PaletyUkonceni (IDPalety) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI__TabVyroba_PaletyUkonceni_IDPrikaz ON dbo._TabVyroba_PaletyUkonceni + CREATE NONCLUSTERED INDEX EI__TabVyroba_PaletyUkonceni_IDPrikaz ON dbo._TabVyroba_PaletyUkonceni (IDPrikaz) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +/* 8.10.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_PaletyUkonceni', N'IDMezd') IS NULL ALTER TABLE dbo._TabVyroba_PaletyUkonceni ADD IDMezd NVARCHAR(MAX) NULL + +/* 10.12.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_PaletyUkonceni', N'ErrMsg') IS NULL ALTER TABLE dbo._TabVyroba_PaletyUkonceni ADD ErrMsg NVARCHAR(255) NULL diff --git a/_sql/tbl__TabVyrobaStrojCinnost.sql b/_sql/tbl__TabVyrobaStrojCinnost.sql new file mode 100644 index 0000000..7f8994e --- /dev/null +++ b/_sql/tbl__TabVyrobaStrojCinnost.sql @@ -0,0 +1,32 @@ +IF OBJECT_ID(N'dbo._TabVyroba_StrojCinnost', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_StrojCinnost + (ID INT IDENTITY(1,1) NOT NULL, + IDStroje INT NOT NULL, + Datum DATETIME NOT NULL DEFAULT CONVERT(datetime, CONVERT(int, CONVERT(float, GETDATE()))), + Smena TINYINT NOT NULL DEFAULT 1, + Cinnost NVARCHAR(50) NOT NULL, + IdCinnost INT, -- pro budouci pouziti + DatKonec DATETIME NULL, + DatPorizeni DATETIME NOT NULL DEFAULT GETDATE(), + PRIMARY KEY (ID DESC) + ) + + + +/* 12.12.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_StrojCinnost', N'DatKonec') IS NULL ALTER TABLE dbo._TabVyroba_StrojCinnost ADD DatKonec DATETIME NULL + + + + +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPrikazMzdyAZmetky_EXT', N'_TestoViskozita') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrikazMzdyAZmetky', @NazevAtrSys=N'_TestoViskozita', @Skupina=NULL, @NazevAtrVer=N'Viskozita tsta', + @NazevAtrVerZkr=N'Viskozita', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=10, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=1, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL +IF (COL_LENGTH(N'dbo.TabPrikazMzdyAZmetky_EXT', N'_TestoViskozita2') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrikazMzdyAZmetky', @NazevAtrSys=N'_TestoViskozita2', @Skupina=NULL, @NazevAtrVer=N'Viskozita tsta 2', + @NazevAtrVerZkr=N'Viskozita 2', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=10, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=1, + @KonverzeAtr=NULL, @ExtEd_Poradi=2, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL diff --git a/_sql/tbl__TabVyrobaVydejMatSarze.sql b/_sql/tbl__TabVyrobaVydejMatSarze.sql new file mode 100644 index 0000000..d5f0c1c --- /dev/null +++ b/_sql/tbl__TabVyrobaVydejMatSarze.sql @@ -0,0 +1,26 @@ +IF OBJECT_ID(N'dbo._TabVyroba_VydejMatSarze', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_VydejMatSarze ( + ID INT IDENTITY(1,1) NOT NULL, + IDPohybZbozi INT, + Sarze NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) DEFAULT 0.0 NOT NULL, + Autor nvarchar(80) DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + PRIMARY KEY (ID DESC) + ) + + + +/* 14.5.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_VydejMatSarze', N'IDKmenZbozi') IS NULL ALTER TABLE dbo._TabVyroba_VydejMatSarze ADD IDKmenZbozi INT NULL + + + +DROP INDEX IF EXISTS EI__TabVyroba_VydejMatSarze_IDPohybZbozi ON dbo._TabVyroba_VydejMatSarze + CREATE NONCLUSTERED INDEX EI__TabVyroba_VydejMatSarze_IDPohybZbozi ON dbo._TabVyroba_VydejMatSarze (IDPohybZbozi) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +DROP INDEX IF EXISTS EI__TabVyroba_VydejMatSarze_IDKmenZbozi ON dbo._TabVyroba_VydejMatSarze + CREATE NONCLUSTERED INDEX EI__TabVyroba_VydejMatSarze_IDKmenZbozi ON dbo._TabVyroba_VydejMatSarze (IDKmenZbozi) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__TabVyroba_CCP1.sql b/_sql/tbl__TabVyroba_CCP1.sql new file mode 100644 index 0000000..1915daf --- /dev/null +++ b/_sql/tbl__TabVyroba_CCP1.sql @@ -0,0 +1,38 @@ +IF OBJECT_ID(N'dbo._TabVyroba_KontrolyCCP1', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_KontrolyCCP1 ( + ID int IDENTITY(1, 1) NOT NULL, + IDStroj int NULL, + Smena tinyint NULL, + Teplota numeric(8, 2) NULL, + Rychlost numeric(15, 2) NULL, + Hmotnost numeric(19, 6) NULL, + Delka numeric(19, 6) NULL, + Prumer numeric(19, 6) NULL, + OdpovidaPredpisu bit DEFAULT 0 NULL, + IDKmenZbozi int NOT NULL, + NapravneOpatreni nvarchar(255) COLLATE Czech_CI_AS NULL, + Uzavreno bit DEFAULT 0 NULL, + Autor nvarchar(100) COLLATE Czech_CI_AS DEFAULT suser_sname() NOT NULL, + Zmenil nvarchar(100) COLLATE Czech_CI_AS NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + DatPorizeni_X AS CONVERT([datetime],CONVERT([int],CONVERT([float],[DatPorizeni]))), + DatPorizeni_D AS datepart(day,[DatPorizeni]), + DatPorizeni_M AS datepart(month,[DatPorizeni]), + DatPorizeni_Y AS datepart(year,[DatPorizeni]), + DatPorizeni_W AS datepart(week,[DatPorizeni]), + DatZmeny datetime NULL, + VyrobniDen date NULL, + CONSTRAINT PK__TabVyroba_KontrolyCCP1 PRIMARY KEY CLUSTERED (ID DESC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._TabVyroba_KontrolyCCP1') AND name=N'EI__TabVyroba_KontrolyCCP1_Kmen') + CREATE NONCLUSTERED INDEX EI__TabVyroba_KontrolyCCP1_Kmen ON dbo._TabVyroba_KontrolyCCP1 (IDKmenZbozi) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._TabVyroba_KontrolyCCP1') AND name=N'EI__TabVyroba_KontrolyCCP1_Stroj') + CREATE NONCLUSTERED INDEX EI__TabVyroba_KontrolyCCP1_Stroj ON dbo._TabVyroba_KontrolyCCP1 (IDStroj) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + diff --git a/_sql/tbl__TabVyroba_OdpadPek.sql b/_sql/tbl__TabVyroba_OdpadPek.sql new file mode 100644 index 0000000..7da4820 --- /dev/null +++ b/_sql/tbl__TabVyroba_OdpadPek.sql @@ -0,0 +1,16 @@ +IF OBJECT_ID(N'dbo._TabVyroba_OdpadPekarna', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_OdpadPekarna ( + ID int IDENTITY(1, 1) NOT NULL, IDStroje int NOT NULL, Datum datetime NOT NULL, Smena tinyint NOT NULL, OdpadSuchy numeric(19, 6) DEFAULT 0 NOT NULL, + OdpadMokry numeric(19, 6) DEFAULT 0 NOT NULL, Poznamka nvarchar(500) COLLATE Czech_CI_AS NULL, Datum_X AS CONVERT([datetime],CONVERT([int],CONVERT([float],[Datum]))), + Datum_D AS datepart(day,[Datum]), Datum_W AS datepart(week,[Datum]), Datum_M AS datepart(month,[Datum]), Datum_Q AS datepart(quarter,[Datum]), Datum_Y AS datepart(year,[Datum]), + Autor nvarchar(80) COLLATE Czech_CI_AS DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + Zmenil nvarchar(80) COLLATE Czech_CI_AS NULL, + DatZmeny datetime NULL, + CONSTRAINT PK_TabVyroba_OdpadPekarna PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._TabVyroba_OdpadPekarna') AND name=N'EI_TabVyroba_OdpadPekarna_Stroj') + CREATE NONCLUSTERED INDEX EI_TabVyroba_OdpadPekarna_Stroj ON dbo._TabVyroba_OdpadPekarna (IDStroje) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__TabVyroba_TestoSpotreba.sql b/_sql/tbl__TabVyroba_TestoSpotreba.sql new file mode 100644 index 0000000..17bce1d --- /dev/null +++ b/_sql/tbl__TabVyroba_TestoSpotreba.sql @@ -0,0 +1,38 @@ +IF OBJECT_ID(N'dbo._TabVyroba_TestoSpotreba', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_TestoSpotreba ( + ID int IDENTITY(1, 1) NOT NULL, + IDHlava int NULL, + IDPrikaz int NULL, + IDPrPostup INT, + IDDoklad int NULL, + Mnozstvi numeric(19, 6) DEFAULT 0.0 NOT NULL, + DokladPrP int NULL, + AltPrP nchar(1) COLLATE Czech_CI_AS NULL, + PaletovyList nvarchar(50) NULL, + Sarze nvarchar(30) NULL, + DeviceID nvarchar(50) COLLATE Czech_CI_AS NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + CONSTRAINT PK__TabVyroba_TestoSpotreba PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + + +/* 20.3.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_TestoSpotreba', N'IDHlava') IS NOT NULL ALTER TABLE dbo._TabVyroba_TestoSpotreba ALTER COLUMN IDHlava INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoSpotreba', N'IDPrikaz') IS NOT NULL ALTER TABLE dbo._TabVyroba_TestoSpotreba ALTER COLUMN IDPrikaz INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoSpotreba', N'IDPrikaz') IS NULL ALTER TABLE dbo._TabVyroba_TestoSpotreba ADD IDPrikaz INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoSpotreba', N'IDPrPostup') IS NULL ALTER TABLE dbo._TabVyroba_TestoSpotreba ADD IDPrPostup INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoSpotreba', N'IDDoklad') IS NULL ALTER TABLE dbo._TabVyroba_TestoSpotreba ADD IDDoklad INT NULL + + +DROP INDEX IF EXISTS EI_TabVyroba_TestoSpotreba_IDHlava ON dbo._TabVyroba_TestoSpotreba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoSpotreba_IDHlava ON dbo._TabVyroba_TestoSpotreba (IDHlava) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_TestoSpotreba_IDPrikaz ON dbo._TabVyroba_TestoSpotreba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoSpotreba_IDPrikaz ON dbo._TabVyroba_TestoSpotreba (IDPrikaz) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_TestoSpotreba_IDPrPostup ON dbo._TabVyroba_TestoSpotreba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoSpotreba_IDPrPostup ON dbo._TabVyroba_TestoSpotreba (IDPrPostup) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__TabVyroba_TestoVyroba.sql b/_sql/tbl__TabVyroba_TestoVyroba.sql new file mode 100644 index 0000000..25b57cc --- /dev/null +++ b/_sql/tbl__TabVyroba_TestoVyroba.sql @@ -0,0 +1,73 @@ +IF OBJECT_ID(N'dbo._TabVyroba_TestoVyroba', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_TestoVyroba ( + ID int IDENTITY(1, 1) NOT NULL, + IdPHIdent int NULL, + IDPrikaz int NULL, + IDDokladVydejMat int NULL, + IDStrojPek INT NULL, + IDKmenZbozi int NULL, + SkupZbo NVARCHAR(3) NULL, + RegCis NVARCHAR(30) NULL, + MoukaHmot NUMERIC(10,2) NOT NULL DEFAULT 0.0, + MoukaSilo TINYINT NULL, + VodaLitry NUMERIC(10,2) NOT NULL DEFAULT 0.0, + VodaPridavek NUMERIC(10,2) NOT NULL DEFAULT 0.0, + Viskozita TINYINT NOT NULL DEFAULT 0, + Viskozita2 TINYINT NOT NULL DEFAULT 0, + DatPriprava DATETIME NULL, + VyrobniDen DATETIME, + Smena TINYINT, + DatVypousteni DATETIME NULL, + Spotrebovano numeric(10, 6) DEFAULT 0.0 NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + DatPorizeni_H AS datepart(hour,[DatPorizeni]), + DatPorizeni_N AS datepart(minute,[DatPorizeni]), + DatPorizeni_D AS datepart(day,[DatPorizeni]), + DatPorizeni_T AS datepart(week,[DatPorizeni]), + DatPorizeni_M AS datepart(month,[DatPorizeni]), + DatPorizeni_Q AS datepart(quarter,[DatPorizeni]), + DatPorizeni_Y AS datepart(year,[DatPorizeni]), + DatPriprava_X AS CONVERT(datetime, CONVERT(int, CONVERT(float, DatPriprava))), + CONSTRAINT PK__TabVyroba_TestoVyroba PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +/* 10.12.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'IDStrojPek') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD IDStrojPek INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'MoukaHmot') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD MoukaHmot NUMERIC(10,2) NOT NULL DEFAULT 0.0 +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'MoukaSilo') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD MoukaSilo TINYINT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'VodaLitry') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD VodaLitry NUMERIC(10,2) NOT NULL DEFAULT 0.0 +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'VodaPridavek') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD VodaPridavek NUMERIC(10,2) NOT NULL DEFAULT 0.0 +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'Viskozita') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD Viskozita TINYINT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'Viskozita2') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD Viskozita2 TINYINT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'DatPriprava') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD DatPriprava DATETIME NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'DatVypousteni') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD DatVypousteni DATETIME NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'DatPriprava_X') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD DatPriprava_X AS CONVERT(datetime, CONVERT(int, CONVERT(float, DatPriprava))) + +/* 11.12.2023 */ +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'VyrobniDen') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD VyrobniDen DATETIME +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'Smena') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD Smena TINYINT + +/* 20.3.2024 */ +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'IDPrikaz') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD IDPrikaz INT NULL +IF COL_LENGTH(N'dbo._TabVyroba_TestoVyroba', N'IDDokladVydejMat') IS NULL ALTER TABLE dbo._TabVyroba_TestoVyroba ADD IDDokladVydejMat INT NULL + + + + +DROP INDEX IF EXISTS EI_TabVyroba_TestoVyroba_IdPH ON dbo._TabVyroba_TestoVyroba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoVyroba_IdPH ON dbo._TabVyroba_TestoVyroba (IdPHIdent) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_TestoVyroba_IdKmen ON dbo._TabVyroba_TestoVyroba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoVyroba_IdKmen ON dbo._TabVyroba_TestoVyroba (IDKmenZbozi) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_TestoVyroba_IdStroj ON dbo._TabVyroba_TestoVyroba +DROP INDEX IF EXISTS EI_TabVyroba_TestoVyroba_IdStrojPek ON dbo._TabVyroba_TestoVyroba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoVyroba_IdStrojPek ON dbo._TabVyroba_TestoVyroba (IDStrojPek) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +DROP INDEX IF EXISTS EI_TabVyroba_TestoVyroba_MoukaSilo ON dbo._TabVyroba_TestoVyroba + CREATE NONCLUSTERED INDEX EI_TabVyroba_TestoVyroba_MoukaSilo ON dbo._TabVyroba_TestoVyroba (MoukaSilo) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__TabVyroba_Vzorky.sql b/_sql/tbl__TabVyroba_Vzorky.sql new file mode 100644 index 0000000..e6d31b5 --- /dev/null +++ b/_sql/tbl__TabVyroba_Vzorky.sql @@ -0,0 +1,53 @@ +IF OBJECT_ID(N'dbo._TabVyroba_Vzorky', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_Vzorky ( + ID int IDENTITY(1, 1) NOT NULL, + IDArchiv int NOT NULL, + IDStroj int NOT NULL, + IDKmenZbozi int NOT NULL, + CisloZamMistr int NULL, + KArchivaci bit DEFAULT 0 NULL, + Ukonceno bit DEFAULT 0 NULL, + Vyrazeno bit DEFAULT 0 NULL, + Autor nvarchar(128) COLLATE Czech_CI_AS DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + DatPorizeni_X AS CONVERT([datetime],CONVERT([int],CONVERT([float],[DatPorizeni]))), + DatPorizeni_D AS datepart(day,[DatPorizeni]), + DatPorizeni_M AS datepart(month,[DatPorizeni]), + DatPorizeni_Q AS datepart(quarter,[DatPorizeni]), + DatPorizeni_T AS datepart(week,[DatPorizeni]), + DatPorizeni_Y AS datepart(year,[DatPorizeni]), + CONSTRAINT PK__TabVyroba_Vzorky PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._TabVyroba_Vzorky') AND name=N'EI__TabVyroba_Vzorky_Archiv') + CREATE NONCLUSTERED INDEX EI__TabVyroba_Vzorky_Archiv ON dbo._TabVyroba_Vzorky (IDArchiv) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + + + + +IF OBJECT_ID(N'dbo._TabVyroba_VzorkyArchiv', N'U') IS NULL + CREATE TABLE dbo._TabVyroba_VzorkyArchiv ( + ID int IDENTITY(1, 1) NOT NULL, + Archiv nvarchar(50) COLLATE Czech_CI_AS DEFAULT N'' NOT NULL, + Autor nvarchar(128) COLLATE Czech_CI_AS DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + DatPorizeni_X AS CONVERT([datetime],CONVERT([int],CONVERT([float],[DatPorizeni]))), + DatPorizeni_D AS datepart(day,[DatPorizeni]), + DatPorizeni_M AS datepart(month,[DatPorizeni]), + DatPorizeni_Q AS datepart(quarter,[DatPorizeni]), + DatPorizeni_T AS datepart(week,[DatPorizeni]), + DatPorizeni_Y AS datepart(year,[DatPorizeni]), + DatUkonceni datetime NULL, + DatUkonceni_X AS CONVERT([datetime],CONVERT([int],CONVERT([float],[DatUkonceni]))), + DatUkonceni_D AS datepart(day,[DatUkonceni]), + DatUkonceni_M AS datepart(month,[DatUkonceni]), + DatUkonceni_T AS datepart(week,[DatUkonceni]), + DatUkonceni_Y AS datepart(year,[DatUkonceni]), + DatUkonceni_Q AS datepart(quarter,[DatUkonceni]), + CONSTRAINT PK__TabVyroba_VzorkyArchiv PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) + diff --git a/_sql/tbl__hdc_PZ_PuvodniVC.sql b/_sql/tbl__hdc_PZ_PuvodniVC.sql new file mode 100644 index 0000000..9e9ea43 --- /dev/null +++ b/_sql/tbl__hdc_PZ_PuvodniVC.sql @@ -0,0 +1,43 @@ +IF OBJECT_ID(N'dbo._hdc_PZ_PuvodniVC', N'U') IS NULL + CREATE TABLE dbo._hdc_PZ_PuvodniVC ( + ID int IDENTITY(1, 1) NOT NULL, + IDPohybZbozi int NOT NULL, + IDDoklad int NULL, + IDZboSklad int NULL, + VyrCis nvarchar(100) COLLATE Czech_CI_AS NOT NULL, + IDVyrCis int NOT NULL, + Mnozstvi numeric(19, 6) NOT NULL, + Sarze NVARCHAR(100) NULL, + PaletovyList NVARCHAR(100) NULL, + IDUmisteni INT NULL, + Autor nvarchar(128) COLLATE Czech_CI_AS CONSTRAINT DF___hdc_PZ_PuvodniVC__Autor DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime CONSTRAINT DF___hdc_PZ_PuvodniVC__DatPorizeni DEFAULT getdate() NOT NULL, + BlokovaniEditoru smallint NULL, + CONSTRAINT PK___hdc_PZ_PuvodniVC__ID PRIMARY KEY CLUSTERED (ID DESC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +/* 9.9.2024 */ +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'Sarze') IS NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC ADD Sarze NVARCHAR(100) NULL +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'PaletovyList') IS NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC ADD PaletovyList NVARCHAR(100) NULL +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'IDUmisteni') IS NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC ADD IDUmisteni INT NULL +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'IDZboSklad') IS NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC ADD IDZboSklad INT NULL +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'IDDoklad') IS NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC ADD IDDoklad INT NULL + +/* 13.11.2023 */ +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'Zmenil') IS NOT NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC DROP COLUMN Zmenil +IF COL_LENGTH(N'dbo._hdc_PZ_PuvodniVC', N'DatZmeny') IS NOT NULL ALTER TABLE dbo._hdc_PZ_PuvodniVC DROP COLUMN DatZmeny + + + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._hdc_PZ_PuvodniVC') AND name=N'EI__hdc_PZ_PuvodniVC__IDPohybZbozi') + CREATE NONCLUSTERED INDEX EI__hdc_PZ_PuvodniVC__IDPohybZbozi ON dbo._hdc_PZ_PuvodniVC (IDPohybZbozi) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._hdc_PZ_PuvodniVC') AND name=N'EI__hdc_PZ_PuvodniVC__IDVyrCis') + CREATE NONCLUSTERED INDEX EI__hdc_PZ_PuvodniVC__IDVyrCis ON dbo._hdc_PZ_PuvodniVC (IDVyrCis) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('dbo._hdc_PZ_PuvodniVC') AND name=N'EI__hdc_PZ_PuvodniVC__IDDoklad') + CREATE NONCLUSTERED INDEX EI__hdc_PZ_PuvodniVC__IDDoklad ON dbo._hdc_PZ_PuvodniVC (IDDoklad) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) diff --git a/_sql/tbl__hdc_ph_Log.sql b/_sql/tbl__hdc_ph_Log.sql new file mode 100644 index 0000000..957d76b --- /dev/null +++ b/_sql/tbl__hdc_ph_Log.sql @@ -0,0 +1,24 @@ +-- dbo._hdc_ph_Log +IF OBJECT_ID(N'dbo._hdc_ph_Log', N'U') IS NULL + CREATE TABLE dbo._hdc_ph_Log ( + ID int IDENTITY(1, 1) NOT NULL, + LogText nvarchar(500) NULL, + Typ tinyint NULL, + IntValue int NULL, + NumValue numeric(19, 6) NULL, + StrValue nvarchar(255) NULL, + DatValue datetime NULL, + ForMail BIT NOT NULL DEFAULT 0, + MailSent DATETIME NULL, + IdJsonData INT NULL, + Autor nvarchar(80) DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + PRIMARY KEY (ID DESC) + ) + + +/* 14.11.2023 */ +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'ForMail') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD ForMail BIT NOT NULL DEFAULT 0 +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'MailSent') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD MailSent DATETIME NULL +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'IdJsonData') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD IdJsonData INT NULL + diff --git a/_sql/trg__TabDokladyZbozi_HDC_D.sql b/_sql/trg__TabDokladyZbozi_HDC_D.sql new file mode 100644 index 0000000..6786298 --- /dev/null +++ b/_sql/trg__TabDokladyZbozi_HDC_D.sql @@ -0,0 +1,51 @@ +-- dbo.ET_TabDokladyZbozi_HDC_D +CREATE TRIGGER dbo.ET_TabDokladyZbozi_HDC_D ON dbo.TabDokladyZbozi +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN nebo Windows sluzby HDCDZApi !! + + DECLARE + @id INT, + @dpz TINYINT, + @rada NVARCHAR(3), + @sklad NVARCHAR(30) + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT d.ID, d.DruhPohybuZbo, d.RadaDokladu, d.IDSklad + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @dpz, @rada, @sklad + IF (@@FETCH_STATUS<>0) BREAK + + +-- sync informace pro reseni ASol/ProHolding/HDC +-- vydejky + IF (@dpz=4) + BEGIN + IF OBJECT_ID(N'dbo._hdc_ph_PrijataJsonData', N'U') IS NOT NULL + UPDATE dbo._hdc_ph_PrijataJsonData SET IDDoklad=NULL WHERE IDDoklad=@id + + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky_Pol', N'U') IS NOT NULL + BEGIN + DELETE FROM dbo._TabVyroba_Objednavky_Pol WHERE IDDokladOZ=@id + DELETE FROM dbo._TabVyroba_Objednavky WHERE IDDokladOZ=@id + END + END + + IF OBJECT_ID(N'dbo._hdc_PZ_PuvodniVC', N'U') IS NOT NULL + DELETE FROM dbo._hdc_PZ_PuvodniVC WHERE IDDoklad=@id + + + END + CLOSE c + DEALLOCATE c + +END diff --git a/_sql/trg__TabPohybyZbozi_HDC_D.sql b/_sql/trg__TabPohybyZbozi_HDC_D.sql new file mode 100644 index 0000000..e1ddf74 --- /dev/null +++ b/_sql/trg__TabPohybyZbozi_HDC_D.sql @@ -0,0 +1,71 @@ +-- dbo.ET_TabPohybyZbozi_HDC_D +CREATE TRIGGER dbo.ET_TabPohybyZbozi_HDC_D ON dbo.TabPohybyZbozi +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN nebo sluzby HDCDZApi !! + + DECLARE + @id INT, + @dpz TINYINT, + @idPHId INT, + @idPHIdent1 INT, + @idPHIdent2 INT, + @idObjHlav INT + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT d.ID, d.DruhPohybuZbo + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @dpz + IF (@@FETCH_STATUS<>0) BREAK + + +-- sync informace pro reseni ASol/ProHolding/HDC + IF (@dpz=4) + BEGIN + + IF OBJECT_ID(N'dbo._TabVyroba_VydejMatSarze', N'U') IS NOT NULL + DELETE FROM dbo._TabVyroba_VydejMatSarze WHERE IDPohybZbozi=@id + + + IF OBJECT_ID(N'dbo.TabPohybyZbozi_EXT', N'U') IS NOT NULL + BEGIN + SET @idPHId=(SELECT _HDCAPI_PHident FROM dbo.TabPohybyZbozi_EXT WHERE ID=@id) + IF (@idPHId IS NOT NULL) + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky', N'U') IS NOT NULL + SELECT @idPHIdent1=IdPHIdent, @idPHIdent2=IdPHIdent2 FROM dbo._TabVyroba_Objednavky WHERE ID=@idPHId + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky_Pol', N'U') IS NOT NULL + BEGIN + SELECT @idObjHlav=IDHlava FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ=@id + DELETE FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ=@id + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky', N'U') IS NOT NULL + UPDATE dbo._TabVyroba_Objednavky SET MnozKVydeji=Mnozstvi - ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObjHlav), 0) + WHERE ID=@idObjHlav + END + END + END + + + IF (@dpz=0) + BEGIN + IF OBJECT_ID(N'dbo._TabVyroba_PaletyPohybOZ', N'U') IS NOT NULL + UPDATE dbo._TabVyroba_PaletyPohybOZ SET IDPohybOZ=NULL WHERE IDPohybOZ=@id + END + + IF OBJECT_ID(N'dbo._hdc_PZ_PuvodniVC', N'U') IS NOT NULL + DELETE FROM dbo._hdc_PZ_PuvodniVC WHERE IDPohybZbozi=@id + + + END + CLOSE c + DEALLOCATE c + +END diff --git a/_sql/trg__TabPohybyZbozi_HDC_IU.sql b/_sql/trg__TabPohybyZbozi_HDC_IU.sql new file mode 100644 index 0000000..066ad68 --- /dev/null +++ b/_sql/trg__TabPohybyZbozi_HDC_IU.sql @@ -0,0 +1,51 @@ +-- dbo.ET_TabPohybyZbozi_HDC_IU +CREATE TRIGGER dbo.ET_TabPohybyZbozi_HDC_IU ON dbo.TabPohybyZbozi +WITH EXECUTE AS CALLER +FOR INSERT,UPDATE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN nebo slozby HDCDZApi !! + + DECLARE + @id INT, + @dpz TINYINT, + @mnoz NUMERIC(19,6), + @idObjHlav INT, + @idObjPol INT + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT i.ID, i.DruhPohybuZbo, i.Mnozstvi + FROM inserted i + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @dpz, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + +-- sync informace pro reseni ASol/ProHolding/HDC + IF (@dpz=4) + BEGIN + IF UPDATE(Mnozstvi) + BEGIN + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky_Pol', N'U') IS NOT NULL + BEGIN + SELECT @idObjHlav=IDHlava, @idObjPol=ID FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ=@id + UPDATE dbo._TabVyroba_Objednavky_Pol SET Mnozstvi=@mnoz WHERE ID=@idObjPol + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky', N'U') IS NOT NULL + UPDATE dbo._TabVyroba_Objednavky SET MnozKVydeji=Mnozstvi - ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObjHlav), 0) + WHERE ID=@idObjHlav + END + END + END + + + END + CLOSE c + DEALLOCATE c + +END diff --git a/_sql/trg__TabVyrCP_HDC_D.sql b/_sql/trg__TabVyrCP_HDC_D.sql new file mode 100644 index 0000000..12c0db1 --- /dev/null +++ b/_sql/trg__TabVyrCP_HDC_D.sql @@ -0,0 +1,47 @@ +-- dbo.ET_TabVyrCP_HDC_D +CREATE TRIGGER dbo.ET_TabVyrCP_HDC_D ON dbo.TabVyrCP +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT, + @idPZ INT, + @idObjHlav INT, + @idObjPol INT + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT d.ID, d.IDPolozkaDokladu + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @idPZ + IF (@@FETCH_STATUS<>0) BREAK + + +-- sync informace pro reseni ASol/ProHolding/HDC + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky_Pol', N'U') IS NOT NULL + BEGIN + SELECT @idObjHlav=IDHlava FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ=@idPZ AND IDVyrCP=@id + DELETE FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ=@idPZ AND IDVyrCP=@id + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky', N'U') IS NOT NULL + UPDATE dbo._TabVyroba_Objednavky SET MnozKVydeji=Mnozstvi - ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObjHlav), 0) + WHERE ID=@idObjHlav + END + + + END + CLOSE c + DEALLOCATE c + + + + +END \ No newline at end of file diff --git a/_sql/trg__TabVyrCP_HDC_IU.sql b/_sql/trg__TabVyrCP_HDC_IU.sql new file mode 100644 index 0000000..cb73642 --- /dev/null +++ b/_sql/trg__TabVyrCP_HDC_IU.sql @@ -0,0 +1,39 @@ +-- dbo.ET_TabVyrCP_HDC_IU +CREATE TRIGGER dbo.ET_TabVyrCP_HDC_IU ON dbo.TabVyrCP +WITH EXECUTE AS CALLER +FOR INSERT, UPDATE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT, + @idPZ INT, + @mnoz NUMERIC(19,6) + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT i.ID, i.IDPolozkaDokladu, i.Mnozstvi + FROM inserted i + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @idPZ, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + +-- sync informace pro reseni ASol/ProHolding/HDC + IF OBJECT_ID(N'dbo._TabVyroba_Objednavky_Pol', N'U') IS NOT NULL + BEGIN + UPDATE dbo._TabVyroba_Objednavky_Pol SET Mnozstvi=@mnoz WHERE IDPohybOZ=@idPZ AND IDVyrCP=@id + END + + + END + CLOSE c + DEALLOCATE c + + +END diff --git a/_sql/trg__TabVyrCisPrikaz_HDC_D.sql b/_sql/trg__TabVyrCisPrikaz_HDC_D.sql new file mode 100644 index 0000000..e6a2604 --- /dev/null +++ b/_sql/trg__TabVyrCisPrikaz_HDC_D.sql @@ -0,0 +1,43 @@ +-- dbo.ET_TabVyrCisPrikaz_HDC_D +CREATE TRIGGER dbo.ET_TabVyrCisPrikaz_HDC_D ON dbo.TabVyrCisPrikaz +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + + DECLARE + @id INT, + @idVPr INT, + @vyrCis NVARCHAR(100), + @popis NVARCHAR(100) + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT d.ID, d.IDPrikaz, d.VyrCislo, d.Popis + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @idVPr, @vyrCis, @popis + IF (@@FETCH_STATUS<>0) BREAK + +-- begin: reseni HDC/DZ API + IF OBJECT_ID(N'dbo._TabVyroba_Palety', N'U') IS NOT NULL + DELETE FROM dbo._TabVyroba_Palety WHERE IDPrikaz=@idVPr AND CisloPalety=@vyrCis AND Sarze=@popis +-- end: reseni HDC/DZ API + + END + CLOSE c + DEALLOCATE c + + + +-- cisteni seedu + IF EXISTS(SELECT 1 FROM dbo.TabVyrCisPrikaz) + BEGIN + SELECT @id=ISNULL(MAX(ID),1) FROM dbo.TabVyrCisPrikaz + DBCC CHECKIDENT (TabVyrCisPrikaz, RESEED, @id) + END + +END diff --git a/_sql/trg__TabVyrobaObjednavky_D.sql b/_sql/trg__TabVyrobaObjednavky_D.sql new file mode 100644 index 0000000..5a5b8fb --- /dev/null +++ b/_sql/trg__TabVyrobaObjednavky_D.sql @@ -0,0 +1,40 @@ +-- dbo.ET__TabVyroba_Objednavky_D +CREATE TRIGGER dbo.ET__TabVyroba_Objednavky_D ON dbo._TabVyroba_Objednavky +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + + DECLARE + @id INT + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT d.ID + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id + IF (@@FETCH_STATUS<>0) BREAK + + DELETE FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@id + + END + CLOSE c + DEALLOCATE c + + +-- cisteni seedu + IF NOT EXISTS(SELECT 1 FROM dbo._TabVyroba_Objednavky) + TRUNCATE TABLE dbo._TabVyroba_Objednavky + ELSE + BEGIN + SELECT @id=MAX(ID) FROM dbo._TabVyroba_Objednavky + DBCC CHECKIDENT(_TabVyroba_Objednavky, RESEED, @id) + END + + + +END diff --git a/_sql/trg__TabVyrobaObjednavky_IU.sql b/_sql/trg__TabVyrobaObjednavky_IU.sql new file mode 100644 index 0000000..be2b3a3 --- /dev/null +++ b/_sql/trg__TabVyrobaObjednavky_IU.sql @@ -0,0 +1,39 @@ +-- dbo.ET_TabVyroba_Objednavky_IU +CREATE TRIGGER dbo.ET_TabVyroba_Objednavky_IU ON dbo._TabVyroba_Objednavky +WITH EXECUTE AS CALLER +FOR INSERT, UPDATE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @idKZ INT, + @sarze NVARCHAR(50) + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT i.ID, i.SkupZbo, i.RegCis, i.IDKmenZbozi + FROM inserted i + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @sz, @rc, @idKZ + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idKZ IS NULL) + BEGIN + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + UPDATE dbo._TabVyroba_Objednavky SET IDKmenZbozi=@idKZ WHERE ID=@id + END + + END + CLOSE c + DEALLOCATE c + +END diff --git a/_sql/trg__TabVyrobaObjednavky_Pol_D.sql b/_sql/trg__TabVyrobaObjednavky_Pol_D.sql new file mode 100644 index 0000000..42ca63c --- /dev/null +++ b/_sql/trg__TabVyrobaObjednavky_Pol_D.sql @@ -0,0 +1,26 @@ +-- dbo.ET_TabVyroba_Objednavky_Pol_D +CREATE TRIGGER dbo.ET_TabVyroba_Objednavky_Pol_D ON dbo._TabVyroba_Objednavky_Pol +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT + + + + +-- cisteni + IF EXISTS(SELECT 1 FROM dbo._TabVyroba_Objednavky_Pol) + BEGIN + SELECT @id=MAX(ID) FROM dbo._TabVyroba_Objednavky_Pol + DBCC CHECKIDENT(_TabVyroba_Objednavky_Pol, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._TabVyroba_Objednavky_Pol + +END diff --git a/_sql/trg__TabVyrobaOperaceStartStop_D.sql b/_sql/trg__TabVyrobaOperaceStartStop_D.sql new file mode 100644 index 0000000..df205a3 --- /dev/null +++ b/_sql/trg__TabVyrobaOperaceStartStop_D.sql @@ -0,0 +1,25 @@ +-- dbo.ET_TabVyroba_OperaceStartStop_D +CREATE TRIGGER dbo.ET_TabVyroba_OperaceStartStop_D ON dbo._TabVyroba_OperaceStartStop +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT + + + +-- cisteni seedu + IF EXISTS(SELECT 1 FROM dbo._TabVyroba_OperaceStartStop) + BEGIN + SELECT @id=MAX(ID) FROM dbo._TabVyroba_OperaceStartStop + DBCC CHECKIDENT(_TabVyroba_OperaceStartStop, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._TabVyroba_OperaceStartStop + +END diff --git a/_sql/trg__TabVyrobaPaletyUkonceni_D.sql b/_sql/trg__TabVyrobaPaletyUkonceni_D.sql new file mode 100644 index 0000000..d79487c --- /dev/null +++ b/_sql/trg__TabVyrobaPaletyUkonceni_D.sql @@ -0,0 +1,37 @@ +-- dbo.ET_TabVyroba_PaletyUkonceni_D +CREATE TRIGGER dbo.ET_TabVyroba_PaletyUkonceni_D ON dbo._TabVyroba_PaletyUkonceni +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT + + DECLARE c CURSOR LOCAL FOR + SELECT d.ID + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id + IF (@@FETCH_STATUS<>0) BREAK + END + CLOSE c + DEALLOCATE c + + + +-- cisteni + IF EXISTS(SELECT 1 FROM dbo._TabVyroba_PaletyUkonceni) + BEGIN + SELECT @id=MAX(ID) FROM dbo._TabVyroba_PaletyUkonceni + DBCC CHECKIDENT(_TabVyroba_PaletyUkonceni, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._TabVyroba_PaletyUkonceni + +END \ No newline at end of file diff --git a/_sql/trg__TabVyrobaPalety_D.sql b/_sql/trg__TabVyrobaPalety_D.sql new file mode 100644 index 0000000..6be7277 --- /dev/null +++ b/_sql/trg__TabVyrobaPalety_D.sql @@ -0,0 +1,44 @@ +-- dbo.ET_TabVyroba_Palety_D +CREATE TRIGGER dbo.ET_TabVyroba_Palety_D ON dbo._TabVyroba_Palety +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT + + DECLARE c CURSOR LOCAL FOR + SELECT d.ID + FROM deleted d + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id + IF (@@FETCH_STATUS<>0) BREAK + + IF OBJECT_ID(N'dbo._TabVyroba_PaletyUkonceni', N'U') IS NOT NULL + DELETE FROM dbo._TabVyroba_PaletyUkonceni WHERE IDPalety=@id + + IF OBJECT_ID(N'dbo._TabVyroba_PaletyPohybOZ', N'U') IS NOT NULL + DELETE FROM dbo._TabVyroba_PaletyPohybOZ WHERE IDPalety=@id + + END + CLOSE c + DEALLOCATE c + + + +-- cisteni + IF EXISTS(SELECT 1 FROM dbo._TabVyroba_Palety) + BEGIN + SELECT @id=MAX(ID) FROM dbo._TabVyroba_Palety + DBCC CHECKIDENT(_TabVyroba_Palety, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._TabVyroba_Palety + +END diff --git a/_sql/trg__TabVyrobaPalety_IU.sql b/_sql/trg__TabVyrobaPalety_IU.sql new file mode 100644 index 0000000..94f5da2 --- /dev/null +++ b/_sql/trg__TabVyrobaPalety_IU.sql @@ -0,0 +1,38 @@ +-- dbo.ET_TabVyroba_Palety_IU +CREATE TRIGGER dbo.ET_TabVyroba_Palety_IU ON dbo._TabVyroba_Palety +WITH EXECUTE AS CALLER +FOR INSERT, UPDATE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT, + @idVPr INT, + @idKmen INT + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT i.ID, i.IDPrikaz, i.IDKmen + FROM inserted i + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @idVPr, @idKmen + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idKmen IS NULL) + BEGIN + SELECT @idKmen=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr + UPDATE dbo._TabVyroba_Palety SET IDKmen=@idKmen WHERE ID=@id + END + + + END + CLOSE c + DEALLOCATE c + +END diff --git a/_sql/trg__TabVyrobaVydejMatSarze_IU.sql b/_sql/trg__TabVyrobaVydejMatSarze_IU.sql new file mode 100644 index 0000000..8ddf9a2 --- /dev/null +++ b/_sql/trg__TabVyrobaVydejMatSarze_IU.sql @@ -0,0 +1,38 @@ +-- dbo.ET_TabVyroba_VydejMatSarze_IU +CREATE TRIGGER dbo.ET_TabVyroba_VydejMatSarze_IU ON dbo._TabVyroba_VydejMatSarze +WITH EXECUTE AS CALLER +FOR INSERT, UPDATE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN !! + + DECLARE + @id INT, + @idPZ INT, + @idKmen INT + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT i.ID, i.IDPohybZbozi, i.IDKmenZbozi + FROM inserted i + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @idPZ, @idKmen + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idKmen IS NULL) + BEGIN + SELECT @idKmen=s.IDKmenZbozi FROM dbo.TabPoybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) WHERE p.ID=@idPZ + UPDATE dbo._TabVyroba_VydejMatSarze SET IDKmenZbozi=@idKmen WHERE ID=@id + END + + + END + CLOSE c + DEALLOCATE c + +END diff --git a/_sql/trg__hdc_PZ_PuvodniVC_D.sql b/_sql/trg__hdc_PZ_PuvodniVC_D.sql new file mode 100644 index 0000000..8092f5c --- /dev/null +++ b/_sql/trg__hdc_PZ_PuvodniVC_D.sql @@ -0,0 +1,25 @@ +-- dbo.ET__hdc_PZ_PuvodniVC_D +CREATE TRIGGER dbo.ET__hdc_PZ_PuvodniVC_D ON dbo._hdc_PZ_PuvodniVC +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + + DECLARE + @id INT + + + + + +-- cisteni + IF EXISTS (SELECT 1 FROM dbo._hdc_PZ_PuvodniVC) + BEGIN + SELECT @id=MAX(ID) FROM dbo._hdc_PZ_PuvodniVC + DBCC CHECKIDENT (_hdc_PZ_PuvodniVC, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._hdc_PZ_PuvodniVC + +END diff --git a/_tisk b/_tisk new file mode 100644 index 0000000..f631cd0 --- /dev/null +++ b/_tisk @@ -0,0 +1,2 @@ +1 - vyrobni denik +2 - prehled CCP1 diff --git a/compileZdroje.cmd b/compileZdroje.cmd new file mode 100644 index 0000000..28ace25 --- /dev/null +++ b/compileZdroje.cmd @@ -0,0 +1,4 @@ +@echo off +"C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" PluginHDCRTNResource.rc + + diff --git a/datMod.dfm b/datMod.dfm new file mode 100644 index 0000000..6eea4bb --- /dev/null +++ b/datMod.dfm @@ -0,0 +1,18719 @@ +object dm: Tdm + OnCreate = DataModuleCreate + Height = 672 + Width = 1130 + object dsPlanDnes: TDataSource + DataSet = vtPlanDnes + Left = 43 + Top = 35 + end + object vtPlanDnes: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 41 + Top = 93 + object vtPlanDnesfIDPlan2: TIntegerField + FieldName = 'fIDPlan' + end + object vtPlanDnesfRegCis: TStringField + FieldName = 'fRegCis' + Size = 30 + end + object vtPlanDnesfVyrobek: TStringField + FieldName = 'fVyrobek' + Size = 100 + end + object vtPlanDnesfHotovo: TFloatField + FieldName = 'fHotovo' + DisplayFormat = '0.##' + end + object vtPlanDnesfZakazka: TStringField + FieldName = 'fZakazka' + end + object vtPlanDnesfDatPlanZadani: TDateField + FieldName = 'fDatPlanZadani' + end + object vtPlanDnesfMnozZive: TFloatField + FieldName = 'fMnozZive' + end + end + object dsStroje: TDataSource + DataSet = vtStroje + Left = 322 + Top = 34 + end + object vtStroje: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 322 + Top = 96 + object vtStrojefIDStroj: TIntegerField + FieldName = 'fIDStroj' + Visible = False + end + object vtStrojefStroj: TStringField + FieldName = 'fStroj' + Size = 100 + end + object vtStrojefVyrobek: TStringField + DisplayLabel = 'V'#253'robek' + FieldName = 'fVyrobek' + Size = 100 + end + object vtStrojefAktPaletList: TStringField + DisplayLabel = 'Aktu'#225'ln'#237' PL' + FieldName = 'fAktPaletList' + end + object vtStrojefVyrobenoKA: TFloatField + DisplayLabel = 'Vyr. KA' + FieldName = 'fVyrobenoKA' + DisplayFormat = '0.##' + end + object vtStrojefZakazka: TStringField + DisplayLabel = 'Zak'#225'zka' + FieldName = 'fZakazka' + end + object vtStrojefCinnost: TStringField + DisplayLabel = #268'innost' + FieldName = 'fCinnost' + Size = 50 + end + object vtStrojefCCP: TBooleanField + DisplayLabel = 'CCP1' + FieldName = 'fCCP1' + DisplayValues = 'X;' + end + object vtStrojefVZ: TSmallintField + DisplayLabel = 'Vz.' + FieldName = 'fVZ' + end + object vtStrojefIDEvidRozpOper: TIntegerField + FieldName = 'fIDEvidRozpOper' + Visible = False + end + object vtStrojefIDPrikaz: TIntegerField + FieldName = 'fIDPrikaz' + Visible = False + end + object vtStrojefVyrCisloZbozi: TStringField + FieldName = 'fCisloZbozi' + Visible = False + Size = 33 + end + object vtStrojefIDKmen: TIntegerField + FieldName = 'fIDKmen' + end + object vtStrojefSarze: TStringField + FieldName = 'fSarze' + Size = 50 + end + end + object vtPlanZitra: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 143 + Top = 89 + object vtPlanZitrafIDPlan2: TIntegerField + FieldName = 'fIDPlan' + end + object vtPlanZitrafVyrobek: TStringField + FieldName = 'fVyrobek' + Size = 100 + end + object vtPlanZitrafHotovo: TFloatField + FieldName = 'fHotovo' + DisplayFormat = '0.##' + end + object vtPlanZitrafZakazka: TStringField + FieldName = 'fZakazka' + end + end + object dsPlanZitra: TDataSource + DataSet = vtPlanZitra + Left = 143 + Top = 35 + end + object vtRozpracPL: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 238 + Top = 90 + object vtRozpracPLfIDEvidRozp: TIntegerField + FieldName = 'fIDEvidRozp' + end + object vtRozpracPLfIDStroj: TIntegerField + FieldName = 'fIDStroj' + end + object vtRozpracPLfStroj: TStringField + FieldName = 'fStroj' + Size = 100 + end + object vtRozpracPLfCisloZbozi: TStringField + FieldName = 'fCisloZbozi' + Size = 33 + end + object vtRozpracPLfAktPaletList: TStringField + FieldName = 'fAktPaletList' + Size = 30 + end + object vtRozpracPLfDatStart: TDateTimeField + FieldName = 'fDatStart' + end + object vtRozpracPLfColR: TBooleanField + FieldName = 'fColR' + DisplayValues = 'X;' + end + object vtRozpracPLfVyrobek: TStringField + FieldName = 'fVyrobek' + Size = 100 + end + object vtRozpracPLfSZ: TStringField + FieldName = 'fSZ' + Size = 3 + end + object vtRozpracPLfRC: TStringField + FieldName = 'fRC' + Size = 30 + end + object vtRozpracPLfRadaPrikaz: TStringField + FieldName = 'fRadaPrikaz' + end + object vtRozpracPLfIDPrikaz: TIntegerField + FieldName = 'fIDPrikaz' + Required = True + end + end + object dsRozpracPL: TDataSource + DataSet = vtRozpracPL + Left = 238 + Top = 34 + end + object imgColl: TImageCollection + Images = < + item + Name = 'Ikony\Item1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61 + CB000015834944415478DAED5D079813D5DA7E273DD9965D761759E982A2204D + 5040401115B15CB150C4C28F70057F9A2B458A8A14A528D2960514694AB10057 + BDF71715A4833CA28048B1FD17BD8202CBB235D9D473CFC9EE64934D36992433 + C984F03ECFB24B66E69D6FBEF7CDCC39DFCC39C311105C6EB0FF7996384E9F86 + F3AF3370FC7916B60BE7E02C2A84B3A404A03F4EAB052ABB1D4A9BC5B5BE53A3 + 01546A706A2DB8B4542852D3C01933A0A85B178AEC7A50D4CB81B6D3AD5CAC8F + 4B0A709783012CBB7712FB89A3B09F3C09E7E95FC0994DAECF093D3407FBED79 + C0F447C97E8721A743AF071A3787F2DA1650B56C8DE4DBEF887B53C4A501ACDF + 7D43ACDF7C0DFB370780DF4FFB5D476CF16BE353356A02F5CD5DE84F2768DADE + 147786881B03580F1D24D6DDDB61DDBB0B8AB2D280EB464BFC9A7C4E7AE9D0DC + 7A1B34B7F584A67DC7B83083EC0D60DEB896547CBA051CBD8E0B41ACC4F7D92E + A30E3477F442D23323656D04591AC07AF204B17CB80ED67D3BA00C213CB988EF + 09075D4F737B2FE8063C097593A6B23383AC0C60FAE620B1AD5F0972FC58C8DB + CA517C4FD89D80A25B77E8FA3E05C30D37C8C608B23040F9D1A3A462CD72288E + 1D91855852F239E87F341DBB40FFC420E85BB68EB911626E80A2456F10CB279B + A1E1E42796947C6C81F6B61E4879E9B5989A20660628FD783331AD5E0E256DD1 + CB5D2C29F958114AFFC450E8073C11132344DD00A613278879C93C387F3A1977 + 6249CAD7A43992C64E82FADA16513542540D50F2FE3A625AB90C4AA723BEC592 + 888FF518F4039F8661D0D0A899206A06289C944B1C870E0A4E466D908B5852F2 + 296EEE8CD499F3A26202C90D603EFE3D297BED15E0FC5F6125C31372144B2A3E + 92910DC3E457A06DDD565223486A80920D6B8969D5327731472EC98D173EAB42 + 01FDE061481DF0A4642690CC00C5F9F38975CB87A22543EE6249C9A7BEAF0F8C + CF4D90C4049218A068FA1462DBB3439264242A9FA67377A44E9F2DBA09443740 + E18431C471F81B499391B07CADDBC3F8469EA82610D50005C30711F2EBCFD149 + 4682F271CD5B206DC94AD14C209A012E8E18425871279AC948543EAED97548CB + 5F258A094431C0457ADA775E39ED47974FA4CB41C406B8346D0AB1EFBDD2E08B + 059FAAFB1D487E7166442688C8004579F388EDE34DB24846A2F2B12E62D298F0 + BB88611B8015792C2B97C92A1989CAA77966340C8F0E08CB046119C0FCFD1152 + 3C7E24944EA7EC9291887CAC62983C673192DAB60B99212C03143CD6879082F3 + B24C46C2F2D5C946D6C67F486F80C217C711C7C1FDF24E4682F2293B7446C6AC + D0EE228664809275AB8965F55B71918C44E5D30D1F05FD238F0966156C00F624 + 4F49EE33AEEB7EBC242311F91C0A2552F35641DDAC992076C106E02B7DF1948C + 44E553B46C8DD4F9CBC43340E9279B49C5E237E2321989CAA7CB9D0C5DEFFB83 + EE499001CE3DDC9B284B8BE3361989C8E74C4E41C6E6CF2337C0A5D9D38963FB + D6B84E46A2F2A97AFF0DC9B91303AE15D0006CC44ED9D8E1D0D03DC57B321291 + CF41374C5DBC02EA16B50F450B68808BB9CF12C50F476312BCB2C93550DF710F + 14D73407A7D7C371FE1C9B1700D65D5F82982B629E5CBF7C4A25B84EDDA0BEA5 + 0B9475AF02B1DBC1FD761A8EFDBBE13C7E2426F171ED6E42DA9CC5A11BC074F8 + 10B14C181DFDE4D224EA868E84AE4F5FDA9C5554F111D8693219D8342FE6E50B + 61DFB94D56E23B73EA433F793AD4D4B83C542A15E5AB24B41EF90EA679AF02E7 + FF8C7A7CFA3979D0B66BEF77CB5A0D509C3B8CC46294AEF699D1D03F32C083AF + 5A7C4FD8D6AF8675FDAAA8C7E78FCFD9B03192672D80C298EEFEDC537C1E8E8B + 05281D319836AC2E4637BE1BDBA2CE9BF9C20DC0C6E79BC60C8D7A72154D9B23 + 357FB57BE5DAC4E7936B5EBB0296752BA3169F3F3ED2A021925EA3E267D4F189 + CF1F4CDB3E47C5ECA950281551898FE74B9A970F839F31067E0D503A633271EC + D919F6CEC20D5E3BFA05E8EF7BB08A2FB0F83CCCEF5213BC17DC0492887F757D + 18662D84B24E66ADF1F9C0E9C4D9FB7B4267357B9940EA06A4AA5B0FA4BFFCAA + 30035CECD585C462668E94D51F4259EF6AC1E2F30876269044FC7A3930D06FBE + 32BB6ED0F86AA260FC1854ECDB058341E73241347A0F4ECA53F78BFDC10D605A + F336B1AE137E6D1533F8B47FEE62590C497C1EB59940926B2A6DE1B3D3BEF2AA + 7A82E3F344E18C9750FE7F9FBAD6D719B4AEC66E34BA8EDA41436178E2692F56 + 1F03140DEC435075AF3F929D85137CCA475BE1D4E97D3E179ADC9A2690E49B9F + 955D79DAA7678050E3E37161EC4854ECDFEB8A8B7D33F5EC4C50D5E391B26B4B + E8D92AFDBD2DB51B804DC5669A9C2BCACEC2095E3D631EB4ED3B787D1E6A7279 + 1348227E9D3A30CCA6E2E734083B3ED60638D3BB071C25C5AEF850150F338192 + 9A40EAAEAD61EE62AFF90CBD0C50366F16B17FFEA9683B0B357874BB036913A7 + 869FDC2AD0CB184CF43226AAF8E91995E2D76F18517CA6ED5FA0E0C5096EF1DD + F1519A1466023FBD03A1F91372BC6ADAC84E1AF3827F03143EDC8BC472124642 + 990C33E959A0DD4D618BCF3720CDB46760D9B04694F89C46A3ABC1C76605E511 + 4E7CC46CC29F4FF683E5CC1F3ECB587C0A4AC7370CC3C91F8F40C7EB4C4945C6 + A6ADBE0660D3AF9A268E117567E1044F0C4930BE9E074DF3EBC2E0F3EE3D98E9 + A5C0BA7E4D64E2A7A6568A5F4B854F30178DAB60F23894F9E95E2BABF288AA38 + 859A205C3D0CAFE743D3A6B226E03640F9F245C4B669A3E83B0B87CFA9372065 + 0EBD56B5B83E043EFF5D47FB471B6059BD4C308F677CCEE4241866BC09D5B52D + DC9F872DFE94F128DBBDC36799A7F8EE3C507E3DED1D04BA1C44A287A6FF5330 + 0C19EE6D80A2210309FE735AF49D85CBE7D0093741B0BA41C5C67751B16A6948 + F1399398F8F3A0BAEE7A1FBE908E3544F1DDF908608288F5B8A6198C4BD7D630 + C0DD5DFC967E62798B53880984168D849AC025BE4E07C3B4B950B56A532B9FA0 + 630D537C775EFC984094E96B29499D2F0F541BC0B2673B31CF78C96F32627D7F + 3B900942AD180633814B7CAD168657E640D5BA5D50BE80C71AA1F8EEFC789840 + 4C3DF45367437B6B77CE6580F2650B896DF3FB3EC988B5F83C2A4DB0889AE006 + 0FBED0C4E751F13E35C14A5F13548B3F9B8ADF5E309FDF6315497C779EAAEA04 + 44C48AA1EA91C7913C6C44A5018AC70C27E4E4F75EC9908BF83C3CCF04E18ACF + C34CCF04168F33812B3EB51A862933A1EED829643EAF6315597C54E5CD595536 + 568A543174B66A8D3AF397551AA0B04F4FA23099AB93017989CF83992079F642 + 289A5DEBB32C54B1F8CB812B3E15137FBAEBCD1FE1F2B98E5522F1A5A8183A0C + 7AD4FD783BC7D9CEFE8794FD4F3FAF8572149FE7B3EAF448A6FD72CD759175CD + 184C1BD6C2F4EE0A18264D83BA53D788F8A416DF9D3F1A57323D13A844A81826 + AFFE005CC5817DC43C755C5C88CFF339935290326B01D4B43B1369C5D0F1C7EF + 1197775DE2BF380165BBBEF25926A6F83C9F42409D2050FE7818A6CD0167DAF2 + 01A9C89F1F37E2F360770D8DB461A8BDBE65187C91B521BCB8A2F4CDAFC92746 + C5D0306A2CB8D2FC05A462CBFB7125BE1415C37812DF9D87082B869ABE8F832B + 9C3689D8F7EEF4592877F1A5A81886145B8CC577E723828AA1A26B4F7005B9C3 + 88F387EFFD2637A4E02F938AA1A0D86422BE3B2FE1560C5BB707777E707F02DA + 108A57F1798859310C189BCCC477E7278C8A21D7B8293540BFFB0877A930AEC5 + E7E1CF048920BE3B4F213E63483232C19DFB5B4FA2369BE25E7C1E62560CBD62 + 93B9F83C5F281543A72189B601EEED4E94765BE83B93A1F8EE034B4A4532ED22 + 728D9BF82CBB9CC5AFAE18569A4015A462E8546BA801EEEA4C9421EE51CEE2F3 + 7CB654238CABDE07A7D3B93F0FB7687469F19B285ABFD6E773398AEFCE9F808A + 211B3D1CB201E2417C07155A3FE165D78B9C79445231B45E2CC0F9E7FE17768F + 99D0E52C3ECF17AC62E832C0C5FBBA13854DD8252011C5778F4A2EBA84F3B923 + 5C268807F1AB2B86B59BC0412F115CE1833D09471B8182928BC4149F87B3AC14 + 97A8096C3F9E0C9D0FD1179F476D2660F9E20AFBDF4BBB8197822717892D3ECF + 47A8092E8C1E0EEBA913C2F9103BF179F833017B6B2977E9EF03097EFB77E0E4 + E28AF89E7CCED212C1269083F83C6A9A80A465802B7AFE59427EF03F7DC915F1 + 6BE71362023989CFC3CB040D9B822B9931C9EF5C0057C40FCE17C80472149F07 + 5F27E0DA760057B67401B16D91EF03A1B5F2C5587C1EFE4C2067F1793E56314C + EAD6ADF28110CBD2F9DEC9451C883FFE2568BADEEEFE3CDC0A1F13DF5F7243E1 + 737511470D83ED979FE2427C9E4FDBA64DF52361EEE4220EC417E19BCF97771D + 361B3266CC06A7D146C4C7CE04CC04663F5D44398ACF90FC48DFCA81216C5450 + 228ACFD7F6B5377746E66BAFBB4C1051C5909E092ED4A813C8557C863A336757 + 1AE0E2837711622A4F48F179E86EEE84BA731640E171EF40787C1E1543D62678 + 7EA4CB0472169FA1C9D7472AC7055C1C339C384F540F0C4934F1F9E4EADADE84 + AC371783D31B42882F3E2B860A9ABF467B0F551AA088F504367FE05A90A8E2F3 + 6CDA36EDA809F2C0199204C417BF1543555626723EDD566980B29D5F11F3AB2F + 26BCF83CB437B641E6FC7C28926A3741BC570C75EDDA226BE96ACE3D3CFCDC9D + 9D89AC66058F91F83CD840D4AC854BA1484DF3135FFC570C53070D41DAB3A338 + 41134404DCD965283E0FCDB52D90B568191469468FF8E2BF62C87ED7A70D40D7 + DFEE2962DE5A426C1FAD0B6D6797B1F83CD4CDAF4336338131FDB2A918722929 + A8FFE51E6F03588F7C4B4C134609DF99447503CDD011D03FD42FA4E4FA70893C + 564F7D4D736452139094549F65A1C4E72828C0B9A707C271E17C4C2B86BACE5D + 90353FDFDB000C171FBD87284B4A82EF4C22F1B9A6CD90BA68859B440EE2F3C9 + 55346E82CC37F3A1CC0C6162683F60B38517BCF4424CCBC59933E7427FE7DDBE + 06289B3F9BD83FFB24F0CE24AC186A478E83BEF703612757EA51BACA068D90BD + 809A202B3BFC8AA1C381DFEFBB13CE62EF8770A2253E9B65A4E1FEEFDC8BBCA7 + 8A0D3257A0D4E5E29415EB5DB385CB517C1EAAABEBA35EDEDB50794C142DFC78 + 2BDB1005139F47C5FE3D92C4178C8F4DC299BDF41DFF0660B8F4F84384BB70CE + 4FF0D2DF2B48FBC736A8F57AD98ACFF3A973AE46163381C784D1C18FB7BA0159 + F8DA2B306DFD9764F105E2CBCA7F0BBAF637D76E00D3DA7788F5BD776A041F9D + 1B45E99BB642E9A7A115902BCAE2F37CECA550D94BA809AE6E109CAF46EFE1C2 + 8431B07CBD3FEAE273A9C9A8FFC55EAF5582BE30229A7709D934ECDA9B3A0AE7 + 8A91F8EECF685B209B9D091A360A70BC35BA8EEC8D210FDC0DAEB438EA378A52 + 1E7808C62953831BA074D634E2D8F179D49F0FE0BADF89B429D38571C5587CF7 + 32DA2BC85AFC36D47E86A1F9AB1B98776C43D1D4495117DF41B76EFCF5519FD5 + FC1AC076FADFA478E8E32ED668DE2276CD16CECE0235DE19E0C32513F1DDEB64 + D4A126580E35EDC6561FAFAFF8A4C28482C18FC3E167B67029E363D077B80599 + 79CB851980A170DA44E2D8BBBB7A4544E74691539F84A469735D77E5FC7299CA + 71818A5F7E605FD8C9103BB90C8AB43464CE59E08ADBAFF8E672FACD9F42AFFD + FB04328A179F9312E46CFA04EAFA0D851BC074EA04291939044A768308D1119F + 879D7050DDFB1092FB3D06156D71BB782C1698BEFA12C5CBF36039F757D8C910 + 3BB95EC9A4DDD7A487FB41F7487F770F81C56DDEB91DE52B96C2E127EE68C4A7 + 69D5127557ACF3BB7AC057C7164E1A4B9C870EC4E416B1DDE6404585150ADAD0 + 62B765ED67CEC069B5C4C70397F4E0149959AEB81D67CF4241E38E657CD9AB37 + 42DBA245E806301F3B4ACA738743A508E719B9C81B902E1398AD202071F5B4AD + 9CF8B4ED3A207BE98A5A3709FAFAF8B25953897DC797A1052F62EF8199C04C4D + 60F71367AC932B773E42BFB80DF71F0EB849500330143ED08328E8B54CD04E25 + E83A5AECD567827093E1E6833CC592822FB9EF63481FFB42E406306F7C8F5856 + E6070F5EC2BA819D9AC0526502392457EE7CECC1D6FA3BF607DD4C9001188A9E + 1D4CF0EB8FB5071F85A291839AC0464D0081317BF141BE6289CFC72163D65C24 + F5B84B3C03D87E3A454A460F85D2E9F40D3E8A1543879FCB41503EC8592CF1F9 + F45DBB23F38D458236156C0006F307EB8965459E77F0311851E4D93B08CA0779 + 8B25361F68D7B3C1F67D82370DC9000C252F8D27CE8395D5AC580E27136202B9 + 8B253A1FDD2863413E926FE9229D01188A063E48C8850B311F4B5869028BDF23 + 90BD5812F0E9FBF647D6D849216D1E9601AC278E93C2DCE1B43D507D08B11A54 + E2EF4C100F6289CDA76AD50A392BDE0B79F3B00CC050B2F15D6279A7F2C54BB1 + 1E5194E81543926E44A3CF7686D56408DB000C45F9F3897DCB87B2184E96A815 + 43BB5A85ABD66F81A14183E81B80A174E6CBC4B17B5BE8C14B5631F46E13C849 + 2CB1F96C3451D9F31623A54BD7B0C46788D8000CA5937289E3DB83C283BF5231 + 8C98CFC65EFF3AF55518EFBD3F6CF11944310043F1E8BF1372EA78F0E0AF540C + 23E6B3D17F33A74C43DA037D22129F41340330148F789A909F4FD51E7CD42B86 + 96908E2E1EC477D00D8DA3C721FDB1272216DF952F310DC050DBE5E04AC53072 + 3E1BFD2763FC44A43F3A4014F15D3913DB000CA573A713C7B6ADD5C15FA91846 + CC67A31B66CE9885B43B7B8B26BE2B6F521880A16CF96262DFB4411653CF0532 + 413C886F572A91B56009523A7612557C57EEA4320083E9A38DA4F4ED3C283CEE + 20C6B662E8DD268807F189D188ACFC7760687A8DE8E233486A0006D3D1C3C434 + 7B1A48C17999540C2B4D2077F11954B77441BD85F99208CF437203F0B8346D32 + C1DE9D572A8642F8380552C74E8051C4C65E6D889A0118CC9B3610D3DBF95E37 + 91822623C12A86AA460D619CBF0CFA9C1CC9C56788AA0118ECBF9D26E54BDE00 + 39F25DD07513A962C8266E300E1B85D44183A3223C8FA81B8047C567FF24A615 + B48158EA7F4A9AE8550C853DEDECC307F1C467B376672F5F1355E179C4CC003C + CAF3E6918A8F37C1F3D57589F28CA1EAAABA489FFA2A74ED3AC4447C571E626D + 0006DBA913C4B46A29C8E16F13A262A8CACC44DAA87130F4BA2766C2BB732107 + 03F0B01C3D42CAD6BC05E7B1EA771845B76218F8DE4144E2D3159457E5C0F8DC + 04186EBB3DE6C2BBC392930178987E38462C9B37C2BA77073424BE9F3174ED33 + 870AFFFC24E8BB76938DF0EEF8E468004F9837AE2515FFFA18DCB93F056F2387 + 670CD9B83C5DCB1B611C331E9A5637CA4E78775EE46E001E6C2653DBAE6DA8D8 + B3038126B38C69C5907EA0C8CC466ADFFE48796A886C45F70A395E0CE009EB91 + C3C47EE800ACDF7E0DC72F3FBB26B16010BF626881DDCF324FF19DF40F35BDB6 + 1BBAF78031777C5C88EE89B834404D58F6ED26B6634761F9F138ECFFFF2B14A6 + F2CA8383F815439556CBA65A81869EDE0D77F782AEC32D7127BA272E0B03D484 + F9CC1FC4F9DB6970E7FF8293B51D2E9C83A3B010282B81B3A418A4A28295025D + 3377F0604FDA70FA247A0E5700294690E46470A946D8CC2610B51ADA8E9D90DE + 6F605C8BED0FFF05F471BC372A704A670000000049454E44AE426082} + end> + end + item + Name = 'Ikony\Item2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61 + CB0000104A4944415478DAED9D095414C716866F2302229B626000890A885151 + 4414048D1AC52D2E2C2AC617B7E42526C6A8D1447C1AA3262E51316234892F26 + BE6C266A4471414090288A443615E37610C50D01118303A2C8528FC20C0E304B + F74C774F1533FF399CE3E9E9FEFBD6BD9F33DDD555D50C0204CD4D05D26BE876 + E925282CCF85824737E07ED94D28A92886D2A7455056F9002AAB9E40153C854A + A6BC6E7F13640EC62D4C6AFFCCC0CAD4162C4C6CA18DA91DB46BE50C76E61D41 + 62EE02ED2DBB82C4CA95D175DBF816D31C0038796B37BAFCE014E4FC9D0EB71E + 5E800A5456B71DE1A6D528A89911024683529A800574B0F000B7367DA14B5B3F + 18E432997A20A80420F36E2CCABC170B670AE36AFF975F55B80FDFC557E6E760 + D119BC25A3C0CB7E24783B8CA40E086A0048CF3B8492F37E87B4BB07E0092A55 + B9AF58C56FEC67D6C20A7C258130C02914FA388DA10206A201C87B988D126F6E + 87C49B3F82B4EA1EAB637455FCC6B232B683FECE936078C799D0D1C683581888 + 04E062E149B437671D9CC93F0C4C0BF6C79152FCC672B7F18710F745E0EB348E + 38108802E0E48D3D28327B35DC7A94C5F958528B2FEFD7C1A21784BA7F0CFD3B + 4E200604220048BD158D765F5906D7CBCE12532C21FD3A597AC1E46E9F828FB3 + EEAF13740A406EF145F4D3858570AE288ED86209E9D7B3DD5078B34704746CD3 + 436720E80C80EF32E7A3986B5B0019D550512CA1FC18640CE35CE7C30CCFF53A + 8140740032EEC4A16FCFBD07454F6E344906173587E2CBCBDED41566F5FE163C + 254345054154007E381386F6E76C00C6487532D449D7C512CA0F55030CEBF436 + CCF6DE261A04A2009053948922D2A7425EF915D6C9509A24428A25A49F736B0F + 58E0B35394FE03C10138766D07DA7AF61D780A8F354A86BC482C96507E2D1833 + 78B7E7560870992128048202B02D631E8AB9B145EB6460915C2C21FDC674FA00 + DEF2DE2818048201B0F654283A9D1FC96B329A484FFC7CECC6C2928107048140 + 10003E393E0CFD753F519064E8AB5FF7768360F5E063BC43C03B00F3E2BDD04D + 69A3AE5CC2934B8B5F27ABDEB0716826AF10F0064061692E5A766218143EBE2E + 4A32F4D54F62EE062BFCE3C1DEB2132F20F006C0AC982E28BFF1E00CCA924B8B + DF0BAD5C60DBC86BE40060F8DA17DFAF83450FD834ECBCD610680DC0D26301E8 + 42F11F3A4D86BEFA79B41D0C2B07697761A815006B4F4DA8BDD5DB474432F4D5 + AFAF5D202CE9BF5F63083406C0D0C9438EDF389785F086864F13350220F1DA2F + 68CBD9E94426431FFD50254098EF1E8D461A7106003FD8599CF43254C2132293 + A1AF7EE6C66D60C3E07470B471E1E4C4198039B11EE8F6A34B4427435FFDDCAC + FAC086E169C201B0357D363A72732B15C9D057BF10B73098D6731D6B57D600E0 + 913C2B4F8D02A605434D32647EB6ADDAD78DBDF3B21B01AD8C2D55FA95574AE1 + 6CFE11D871F963C82FCB11253E3EFDF0A092952F1F831EF68359B9B30660E661 + 5774EF712E55C9C0C2C5DFF44A165898B465E187A0AAAAAAEEDF654F1FC047C7 + BDA1F8C95DAADA8BE564DE15BE1A71893F00F000CEC3B95F8A123CDF7E0B7DF6 + 80BFE304167ECF8B2FD39F772361E3997F51D55E99A6755D07C12F85A93D935A + 0072EF9F470B8E790362AAA92B3ED66F63A46ABFF615151FEB297A045362DA50 + D55E995A422BF83DB85C7B00961F1F81B2EE2750597CACA820A4C64F71F18D8D + 8D6BFD1808E6D8C9A6EBF6CACB4F321EC2FC2255EEA512003C63E7F3B471D416 + 1F4B1500EA8A8FC5050012DADB58CBFD12A0972440E9DE2A01981FDF07E59665 + 525B7C2C6500B0293E165B0048696F63B95BFBC1BA2129DC01C01335BF38134A + 75F1B11401C0B6F8586C0020A9BD8AB4D23F093CEC072A3C522900F3E27BA1E6 + 304BB731005C8A8FA50E00D2DAABC8AF47DB00583938813D0067F313D067A787 + 1311BCB67EF200702D3E962A00486CAF32BF35034E4137895F13178500AC481E + 89B28A8E1013BC367E320034293E963200486DAF32BF3E766360E9C083EA01C0 + CBB2CC4EE8D22C56E6C0C200685A7C2C450090DC5E657EA81AC1D69157C1D1DA + ADC1074D00F8312B0C1DB81E4E54F0DAF8ED0BACD1B8F8588D0120BDBDAAFC26 + 745E0C537AAC510DC0F4C312247D5A485CF09AFAED19F3B4C976B6C5C7920780 + 86F6AAF2B332B1879F461728072035EF205A9B164864F09AFAED1957D1603B97 + E263C900A0A5BDEAFC96FAC680B7E3A8FA2D0D00F8226D0A4ACEFB95D8E035F1 + 9307806BF1B1300034B5579DDF60A7E930CFE747C5004CDE6F85485D8451533F + 19009A141F2B288AA1AABDEAFC5A1959C36F81254D01C0CBAFAE4A7D95E8E035 + F1C300685A7C7CF710BC4FC1ED10C1ED65E3B7CC2F1EBC24C3EAF6A80760DBB9 + B92836778BD28348099EAB5F5448B5C6C5C7770F130F9A52D55E367E635D16C0 + 9B9E5F340460D691CEA8A03C47E1012405CFD56F7F30F761EFF2FD060D00A0A0 + BD6CFCE4470CD503101CC528CC1469C173F553371EA0A95FC34EA37A0028692F + 5B4505A3E7009CB8B50B45644EA626782E7E5C0050D46358070045ED65AB8FFA + EC81FECE13983A0014FDFE931C3C173FB60028EB2E9E186D42557BD96A74C70F + E02DAF886700841DF343574B4E53133C173F3600A87A561072C048EDF124B597 + AD9FBB951FAC0F48790640E8010B5459F3889AE00D6302B5F7336B6109BB821F + 32CC1D69367A3FD19DAAE0B9F8E9FB9840557E5F0FCD06E674DE81BAFE7FDA82 + 67EBA7EF630255F92DF6D90FCCC1EC4D68FB850FA80B9EAD9F614CA072BF999E + 5F01F3DDB9F9283A6793A8C17399ABA7CD600E1AFC1E579542D6BD04F8F9D27F + 20BFECAAA83005BA7D04CCE7C921E8744194E027D376AE9E26C9A5C90FCF459C + 97D8138ACBEFAACC1FB7F840653DFA394C0466D1D181E84AC949C14F26933673 + F5344D2E2D7E276FED828D19AFABCC1F7B3F505B0FBCC814F35E4C5754BF8C3B + E173F5482A96107EE5950F617AAC9DCAFCB1F30356F5C04BCD31D30E4AD0433C + 048C92FB724D934B8B9F98CF1EDAB674046652141E0422A5E6BE9C5B7CF4F989 + F9ECC1DCC806989028335423BFE09340279349DBFB72F6F1D1E927E6B3073C85 + 9C09DC678418A646F093C9A4ED7D39BBF8E8F513F3D9034246DC01D0F55C3DF5 + F1D1ED27E6B3873A00C6EF3743D588DD4F000973F554C747BF9F98CF1EEA7E02 + 5E3B587B11582D15FC6432693B574F797CCDC34FCC670F75178133A21D504965 + BEE0279349DBB97A8AE36B3E7E623E7B6863EA04CCFB09DDD19DB28B829F4CA6 + 1DA34BC004CC5925838D9A53F17147D0EB876DD4F8016FF570B6EC09CC92E383 + D0A5BF93043F99CC6FA1F7EFE0E310247A7269F04BB91B09E1691355E68FCF7A + 78B41D02CCBA3FC7A33F0BF60A7E32999FA34567583520092C4D6C454D2EE97E + F8615058922FE43F126F687E3FFB89C06CCF9A8F0E5D8F10FC64F27EB6668E30 + DD231CBC1D5F85D62DAD054F2EC97EE5555238772F1E765C5C2C6AF1B1DF3897 + 0F813974F54BB4FDC23CC14FA62B3FC39840E57EFFF6F81298B4BC83680D5E0B + 90B2E0D9FA19C6042AF7FBD8E70030F9D21C342BD18DBAE0D9FA19C6042AF7FB + 2620E7D9CCA0D7F0B4F0AA32AA8267EB671813A8D8AF7E5878DDC490043F94FD + 30959AE0B9F819D60954ECD7C5D61FD6BD92FCCFD4B08CB928E6C657D4046F58 + 27507BBF71AECFA688D70190747D278A38F33A35C11BD609D4DE6F61DFBDE0DF + 3E84A99F1E1E1459FB0925C17391619D40C57E0DA68763BD1BE78E0A1F5F657B + 0E6A92615827B0A99F73EB6EB079F8C586007C7F6E1E3A9CBB99F8E0B9FA19D6 + 096CEA877B00DFF0DCD01080CCFC38B4EAF428E283E7EA675827B0A99FFC4B24 + 1A2E1377D05AD4C12162F819D6096CB849E93271589BD2A6A1A4BC5F880D5E13 + 3FC33A810D35C4F90D98D3E77F8A01C8C88B46ABD3C6121BBC267E8675021BEA + 937E71D0DB61846200B0A6473B2069650191C16BE2675827F0B9D42E168DF5F3 + F94528EADA7AE282D7D4CFB04EE07385745E02533D56AB06204F7A15CD8E77AF + 7F610429C16BEA675827F09FE3AA01FE3B3C072456AEAA01C0FA2CF95574B628 + 9698E0B5F133AC13F84CDE2F8C81A5030E35D94B210059058968794A0031C16B + E3675827F09956F64F020FBB81EC00C09A17EF856E4A1BBD368EB2E26319D609 + 0470B3F281F0A1A90AF7540AC0A91B91283C2354E7C16BEB67181308B0C4371A + FA3A8EE60600D682785F745D9A4E6DF1B1F47D4CA0AB751FD830245DE9DE2A01 + 48BB1D8DD6A48FA5B6F858FA3E267085DF51F0940CD50C002CD91D812E82E7C3 + 4F9FC704FA3B84C2C27EBB551EA11600DC2F3027B17BED5E95A206CF97DFAF63 + 1E82B9B1959C1FB973F5F8F433652C605750A9DA23D40280C5F6659224266391 + CF5EE8E718F28F1FD973F5F8F49BD16D030476F9901F00B0DE8D71438515D7A8 + 4B86A3853BAC1D9802162DDB123F578FB759BF72237ED4893500759D43C9010A + DF294C7232B0DA9A3AC1F46EE1E06937BCC1CF016973F5F8F043B53EAB061C07 + 0FFB81FC0280A568D818C9C9D047BF10D7C530B5E71AD6477202006BEE514F74 + BBF43C15C9D0373F576BDFDA7BFED39C8EE40CC08D920B68D11FBE5001E54427 + 43DFFC5A1BD942F8A07470B0E9242C005829B7F7A17529E36BAF071A9D8B9064 + E89B5F4DD5B3BB1DFF0E219C8FD60800ACEF3317A0E85CB9F70C10920C7DF40B + 725904337AADD5E0682D00C05A9F1C8A520A22894A86BEF9F94926C122FF5D1A + 151F4B2B00B0969F1881CE17C713910C7DF3EB663318D60C39A671F1B1B40600 + 6B41A237CA959ED16932F4CDAF93456F88189EA955F1B1780100EBBDB82E28FF + 71B64E92A16F7E76A62EB06DF435AD8B8FC51B0085A5B96845CA7050F60672A1 + 92A16F7EF6666EB0CC2F169CDAB89105804C0B8FF5433925A94DB6D3905CD2FD + F8FADA9717EF0060AD38390265DD7F7E6148437249F7E3E3824F910401002B3C + F5359472773715C925DDCFC72E08960C88E2BDF858820180F5435618DA7F25DC + D063A8450F5F7067CD3B79D8485000B032EEC4A1CD19D3415A55A45532482F96 + 107DFBEF7B6D877E2F060A567C2CC101C0CA2FC945111953205B9A42447249F7 + EB64D5173EECFD6BED957E67418B8F250A0032EDBCB81CEDBEB21218232ED3B5 + 80E862F13A98A31A6094EB1C78C76BB3E08597495400B0FE2A3C8EBECB9A0DB7 + 1F5D529F10828BC5B79F736B0F98E9F935EB913C7C49740064C2AFADFFEDD227 + 5081CA147E4E72B1F8F4C32F6E0A765F0893BB7F2A6AE165D219003245A44D45 + 27F27634D8466AB1F8F6F3B21B0DCBFA47EBA4F032E91C00AC730547D1EECB9F + C2959264628BC5A79F9B8D2F4CE9BA5AE58C1DB144040032FD559884222FAD86 + ACE2A30D3F6826C577B5EE0B935E5AAE74A2A62E4414003265DFCB40877236C1 + 89BC9DC0B4A8A1BAF8F8CABEA7DD5018ED3A177C9DC6115378998804405E9157 + D6A2D8EBDFC0838ADBAC8F21A1F8562D2530F4C56910D0F16D70B4E2E7C99D10 + 221E009932EFC6A2E43BBB21357F3F3CAE79A8743F5D161FBF89D3D73108FAB7 + 9F04DE0E23892DBABCA801405E67F3E3D1D97B7170A6200EF2CA2FD76FD7D5C2 + CBBDEC478217FE930CA3A2E8F2A21280C63A753B125DBE7F0AB28B53E156E945 + 78525DFAFC439E5FB3D2C1A607B8B7E90B5D6D0780BFF378EA0ADE58CD0280C6 + BAF3F75594577A198A6AAF1B8A1EDF80FBE5B7405A710F4A9F16436945712D20 + E5508DAAEA3BA1F054EA168C716D81CDC1D2D4165AB7B4AD5B54B19D597BB033 + EF0012F38EE068F992287DF362EBFF56785844CDFD4E010000000049454E44AE + 426082} + end> + end + item + Name = 'Item5' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61 + CB00000BE14944415478DAED9D797814E519C0DFD92B9B4D424241834FA0058A + 2D144C21D46A85D48247B9E49023458E5A8E04251E8F0A1E4FAA5504047C4A31 + 0185700690534AB150CB2160238D228A145049D4A74551304A20BBB9F6783B5F + 58C34E766676F69C4DBEF7F74F92D9CDCCECBCBFFDE6FDBEF90E010181E01781 + 04E01B1280734800CE2101388704E01C1280734800CE2101388704E01C128073 + 4800CE2101388704E01C1280737411E0ED0A271EAE7035FE3EA88709B27E6416 + F4BE10BC12730126ACB6E3AB1FB8AF6E4037E4675BA030279924D081980A3074 + 5935EEF9C823FBDAF29C04C8ED6F2509624CCC04500B3E232B4380634FB42101 + 624C4C0408147C468AD90397FFDC96048831511760F82B767CFD943BE0FB124D + 1EA8594C02C49AA80AA035F80C12401FA226C00831F8BB34069F91687443CD5F + 7E4002C498A808106CF001512C011A4401AE2501624CC4050825F802B8C1CA4A + 80252440AC89A800A1069FFDB4B21C80048839111360E4723BFEED6468C16790 + 00FA101101C20D3EC36AF6500EA003610B1089E0832088258040B5001D084B80 + 60829FFB2B23AC38E2920D3E821112CD48ED003A10B200A3C4E0EF0C22F8CBEF + 49160CF9DFA25CF0D94F6A08D28790040826F8D36F36C18A09498D8135CCACBC + 7A309FE03348007D085A80DFADB2E396E3C1079FD12440B3E03348007D084A80 + 60823F4D0C7EB14FF0198D02C8049F4102E8836601C20D3E83E50072C1679000 + FAA04980F1ABEDB8F983F082DF78B0FC2A940B3E8304D08780020413FCA93799 + 60E5C424C5200A0F5C523C1809A00FAA024432F88D072301E20E4501C68AF7FC + ED2166FB8A075311C024B8E19101D6AB1BC46C013D6E107CCE8FB5210A06F91C + 22203AEC2FC922C075A902A4A70890916A80BE9DE3AFFBBBAC00E38AAB71DB09 + 8FA61DA8DDF3FD0EA622800485E662A504B2A5ECCF886EE8DEC108599D4CD0AF + AB11F2B2F5EF05ED27C08B7B6B71D6EB0D9AFE594BB12F39981601E2245831D9 + 9F28445647230CEF25C0A41BCDD0353D31E642F80990F5C265FCE0CBC0719A72 + B311564D086E30474001E2395851DE1FFB39A4A705F26E498061BD6D3113C14F + 80B447ABF05283FAF13BB541F8DFDCB4A04F5255801614AC68EF2FABA3019E1F + 6685C1BD2C5117C14F809B1656E1BB67031C573CE991BD00FE3A233809140568 + C1C18AE6FEFA773140D1582BFCBC53F492473F015694D661DE967A4D273FE206 + A32881F6AA9BAC00AD2458D1DA1FAB1D3D718715E6DC159DDB826C2D60C62607 + 2E3FE2D274F223334DB0234F5B49E027402B0B5634F7F7B37401B6FEC1063D33 + 4C111541B11D20EF553BAEF8B7EF285EE5931F2D4AB03D377042281140667F73 + 862680318C7AB9DBC3CED7F7F30871B1BF06F1BBE4A8F7C0777617945F70C3E9 + 0B2EA87418829629D9E48135936C30262B216212A8B604E66E746071994B93B9 + 637A1B61DBD4646D2D810AFBF314B5D3BD5E1C4B761EAFC3DDA7DCB0E79413CE + 556BFCE862D5B1E0CE0498335C7BF55B8D80CF027237D8716559BDA6622B9004 + 8D02A8C88445C1D72C5A0B473F7762D15B0DB0E9583D38D1A8FC46EFF5BBAF9F + 11968E0FFF7A697A1A38BDA40A57BDE3CD0902145B63330DB0757A8AE2D340B5 + 92040B53B915C0972777D6E0B2D206B85CDFEC7234FBF24CBED1046BEF0D4F02 + CDFD01EEDB5885CBC59C40CB3D6BB4583B90CB09D4FA04367E3E1240C2A4B5D5 + B8E198B7495EA1E4CCBDC502AFDC9312F2750BAA4710BB1D14BFA3ED01D1B8DE + 06D832557A626A7D021B3F2309E0C73F4F35E0FD9B1DF0F9458F62C9B978A405 + 1EBE2DB466E4A0FB044E1713C395652E4DEFCD117382CD3E39815A9F400609A0 + CC6F977C8BFBCE7863D5ECFA09626D65575E320CCB0CBEE530A45EC1F76F71E0 + CBA51A24108D1D9D09E2ED20ED6AAF60951C820450E7F1ED9770D12197ECF56B + 67F340E582E0FB53843C2E206049E073CF1AC74A82E96D05B53E818DFF420204 + 64E9C15ACC7FAD56BC86FE3585DBAE37C0FE0783CB07C21A19A428814CC232E2 + 0613EC3C09AA092409A08DF96FD4E253BBE51FD9BF7477023C30407B3F83B0C7 + 06FADD0EC268EE2401B4336B470DBE78D0E9B73DCD8A707191F6AA614446074F + DBE0B8D24E1066DB3909101C4A6333B576D163446C7E8069EBEDB8FA1D6D2D86 + 4A9000C1D3E1C92A3C6F975E36562BF8CF5329D03323F063E488CE10D2D85874 + 445B8BA11C2440F0B07682412FDBA549A1F8259C9405503225F0AD20E273044D + 2DA9C235EF6A6B316C0E09101A53378AA56F99F756E0BD0D9B04277C5C901AB0 + 9F6154660963B78355EF0631698417122074AC0F5FC47A9720C9C11E1B608685 + 6352632F00E3BE4D0E7CE588B616C346583F7B8E9F0686CB835BEC58F42F690E + D62105E0DC0BEDF51180A159026FB1C55B7F8048637BE802D6B90C57FEF0E660 + 07F26D30B0BB721371D4E70A96DC9FE4F0A93A7A96B62701C2E0DEB5555872D4 + 2549C0038ED78CC56CE18A12F804DF64704143610712200CF67CE8C061C57592 + 04BC632AC2D9E7D3F41580E12741B346A35EE900279EA612205C3A3CF11D9E77 + 489F1394172441B774F9CEA4315D31644A8903D71C956F315C362E0166DC1A7A + C706E20A0FB064B0545ADA16E724C03485D55862BE66D0E33B1CB8F0804314E0 + 4AB2C244987DBB15E68FA22A6024D8FE7E3D8E5D5327D9A63A69871EAB867D72 + AE160F975FA91D647733438F0CFD47C9B6163EAF7461D7671D926DD99D0578EB + D136F12300115DAE997D112B6B0D4D7F7748F6C057F3DB9200BC7047E165DC7F + A6D9202C85565612A01532719D1D37BE274D043F7B2609BAB4F7AF099000AD10 + B99AC087B36D902933CA980468853CB3BB069F7B43DA5BA8F4A144E8D7CD4202 + F0C0A27DB5387B974F9F4144F847AE050665DA48001E28D8558373F7794B006F + A3DBA1FC44F8757712800B666E71E0B252698BEBB15936E8D39904E082C6093E + DF972ECE71863D0FB82E9104E081018B2FE3E14F9D4DC14774032E4BA776005E + 487BE41BF41D5A9E910A70765E7B1280074E7F5987BDE6D9AF6E1004F84D3733 + BCF9303D0BE0820D65769CBCDEFB34D0DB3368463F33BC3C3E8E9E0612D1A369 + 36179F6E61EB265861F2CD0924000FB47BEC025EAC336A9E7985046845EC78CF + 8E63D6D64B82FFE37608157F8A833E8144F419BFB20A371F07C988ACFCFE4628 + CC4926015A3BE55FD561CF790E708249B2FDED876C704B373309D0DA99CA4667 + 371B8ED7A52DC067CFE934348C881D15E79DD8636E35B89A4D30F9F420333C3B + D44602B476725655E3D6E3D2257EB42EC24502B470E4BA8133668AC95F518E86 + 09BC4980964DDB59555855278DB35970C3C7056DA0EBB581A79627015A300397 + 54E3C10AFFD5DDD8BC008BEED6B6C00409D042511A707BADCD03E78398309204 + 68813CF25A0D2E3EE4947D4DADDD5F0E12A08521D7E3F77B9466695783046841 + FC7E9D034BDE939F71252305E18B79212CE54702B40C7EB9E0121EFD42FE358B + 98F5EF7F3019B2BBC568B67022769494D5E3A33B6AC077B0A70474C3FA494930 + F1A6D016922201E294F2AF9D38735B0DEC3BA3FEBEE7065BE08F43425F739804 + 88338EFFB7160BDF72C386A30DD0A0B67894C8EC816658302ABC052549803861 + E73136EB7A3DEC65C3BA0DA680EF9F33C4020583C35F6D9C04D089535FD46169 + 8513769F76C1814F9C50EB366A9A5E972D25BB64B40DEEBF3532B3AA9000229B + 8ED6E3A9AFDCE0949BCE90CD60EA7183E0739DD8802B41E30AA20D1E0047DD95 + FFFDC68EF0D1D74EF8B4D2096E8F4F52A771626DD6CAB7754A12DCFAD3C8AD2A + CEBD00BF10AB57C714AA57F1B476B0DA3C3FE1C0B500B7BD548D6F967BE45F8C + 93E0B3F582178C4C8C5891DF1C6E05387ED6897D16D6C8BF180FC117EBF7E3FA + 98FDD65E8C34DC0AF0F7130D785771ADFF0B7110FCC1DD0D3077B815FA740ABC + E247B8702BC0E9732EEC395F3A9F9E9EC14F327B607C5F0BCCE86781BE9DA31F + F8A6D3E15500C6ED620E70A05C7D6DDE68063FC1E88181D79B6044A619F2B2F5 + 992C936B011877165EC27D9FC426F8A9560364FDD004591D8DD0BFAB1146F40E + ADFD3E92702F0063EF49079E38E786FAA627AD021835D6F3FD1083EEF6B00605 + 8436E2973A43ACB95DD3C608D93F09BFD52E1A90009C4302700E09C0392400E7 + 90009C4302700E09C0392400E790009C4302700E09C0392400E790009C430270 + 0E09C039FF074D6311EAA0E8A49F0000000049454E44AE426082} + end> + end + item + Name = 'Item7' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61 + CB000017CE4944415478DAED5D09781445167E5C81847013904303E10A20870A + C27E0A2A0B08AB02820B22A7A0C2AADC87E150408E5540768515F403E5123954 + F0E3F0424044458E841C84234050E4561010080849EFFC95D4A4BAA7BBA7BB67 + 7A8ECCFCDF37994C75F555EFAF57AF5E55BD2A24914461842E0A850910DA0813 + 20C411264088C3E704D8BA656B81655CE9D2A5A959F36685FCFD1C66E053021C + 3D72545AB56A15DD79E79DECB724A9DFBB52A54A54BE7C79CAC8C8A0DBB76FCB + 8EF17394E78ABFB58EA9DD4FEF985EBA1A4A962C4975EAD4A1071E7C206848E0 + 5302A4A5A6496BD7AEA561C386B914BCF89D95954565CA94A1BFFEFA8B727272 + 9CE7EB9D237EDB99570FD7AF5FA75F7FFD9511BC49D3264141029F1220352595 + 1160F8F0E1ECB75641A320CB962D4B376FDE342C1C5F08DF1D118A152B461111 + 11B473E74E6AD4A811D5AD5737E049E017028C183142B7C03901A001F03B5848 + 50A448118A8A8AA2ECEC6CFAEEBBEFA8E7333DC304100102AC5BB7CEAD06B876 + ED9A8C007A79FD217C2D12142E5C98A2A3A3D971D82EDBB66DA33E7DFB043409 + FCA201468E1CE95603C006B875EB96290D60248FDD24007161B7E083E7DFBE7D + 7B4093C02F1A406C028060D5006A242857AE1C4BE724B871E3066B0EFAF5EF17 + 9024F039013EFBEC3346000E5EC3C5421509C0D38C7CDB95D70C09D07D053801 + F0B97AF52AEDDEBD9B7AF5EE157024F03B013878AD015060A849E80588C7F5BE + 8DE4B19B3040850A15D837DE45D4047FFCF107EDDFBF9FBAF7E81E5024081802 + 00BCC0024D0398C90B0D80DE80A801F87B9D397386F9093A77E91C3024F02901 + 92F7254BEBD7AFD72400C7952B571801B81108F0EF63C78E3182E875C7F4BC84 + 66F2400B55AC58D1258FDE3734000820D67E91083FFFFC335DBE7C993A74EC10 + 1024084802FCF9E79FCE5E002016F0F9F3E7996125A68B70E72A364306B8764B + 952AA57ABED6370853A850AE6C95CD00FFC0C50D92B46ADDCAEF24F00B01E007 + E08574F4E8515648709F96285182A581005A1AC0D73680D9EBC6C4C4C8DE59D9 + 0CF04F4A4A0ACBEBEFC123BF12006D3C9C25F1F1F16C0028323292E50301A07E + D56C0090820F1059B1D2ED3400E108BAE38E3B5CDE5B8B04BB76EDA27AF5EA51 + 83860DFC4602BF1180DDDC4182EFBFFF9EA9DAB8B838A6F6014E00089AF70C78 + 411F397284398A8CA872BD74773680151B03046ED2A489EA396A46213E3B76EC + A0FBEFBF9F6AC6D5F40B097C4A80A4C42469E3C68D4E02B007709000BE73B489 + 1C6A04005070E84EF1EEA1A73680BB3C66AF0F0254AF5E5DF3FDD58C42BCE3B7 + DF7E4BBDFBF40E0D026CD8B0416604725B408448005E701C81DC05C46820371A + D5C01D5E4A22A002F86BDCC0EF04600FA120819200A2A7F0975F7E614D004F57 + C21B5D4033E788E9E801DC75D75DBA65C009A02402B41A5CC67DFBF5F5290902 + 8200EC410412280900702D70F2E4493661C453C17A4202ADBC3064AB54A9A2F9 + FE4A97B79208F06F602E812F3541C010803D4C1E09D40820169E98A6FCDF9F5D + 403401458B167531F6A0E24557373F07BD06FECD9D47172F5EA443870EF96C2E + 814F0990B83791198156080088B6004720D90056F38AF8FDF7DFE9EBAFBFA649 + 9327851E01D80339486086001CC1E630529EC371E9D225DAB469134D9E323934 + 0900F0D140B519C1CA020361FC3D0AE8ADBC409800A44D00404F0B00FE12A8B7 + B4459800A44F80D3A74FCBE609A8C18AF56FA61700870F9FF9A3757DAB240813 + 80720980C12058CF4A60240DDD2577B0D2B7379A172E6BDEDDF3B6B680A7334C + 803C024003A8790AD56C0135F8D3A8F34403A08CC204D020007A08CA31022330 + 2B7CBBF2BA9B5F000D50A009C01D416A359B4324007B48212F9A00ADD1402D58 + 75199BC96BF47A583BA8CCA3D40028A3024F0076730D12280920E645FBCF6D03 + 335AC088063093D78A06C03B60E5905E1EAE010AAC23C8C868A01E0150505608 + C0E1EB2EA0329DBB7CB5AEC335408124C0DE3D7B5D6C00A304E0797913A02C58 + 33B032106426AF561E3C7FDDBA7565696A1AA04013002F87A561B2875090408B + 00007CE5CAF5025648209E2F7E1B39E6C9391831D4CACB3500664D851401D883 + 0824D02380322F60A5290002AD0B88E6011A00CBE7C204D020C0A953A79CD3C2 + 4558D50256BC8656F3E21D31FB596C1220747C308C0CFCF6DB6F84282A214700 + 5E20801E01B0B0023680520B78A319D04BF3465710BF310B980B5D7C074E9073 + E7CED19A356BE8B549AF153C02ECDEB55B829B538B00EC811C85E0AE0910F38A + F0C41EB043FDE3F9F0E1133EF86F3D173434C0EAD5AB0B2E01D00B18356A946E + 3EBE36508D006823F97A01F6025E2481F23A6ADFCAE3FC7F2E5CFE4C7CB68FF2 + 385F39A4F58C58F91452044041C0AAE7AB82003D02605D803818A4E54CF2964D + A095260ADBCCFDB16E8013422D0FB70142860098095BB97265AA56AD1A0BAF02 + E80D07832C4AAB5FCFAD6C462388421585A46CABD5EEA12650B5BC7CF593569E + 90220054391645C03F8E75724608A0F92285CC9797DA394604E92909D4CEE528 + D004D8F9E34EE98B2FBE9069004CF346B70EDDA3E2C58BB334BB0960852CDEF0 + 16BA3300016E04BEFADAAB0593009F7FFE398D1E3D5A371F27001682DA25586F + 90402B4D2D5D6C4A8CF4020A240136ACDF206145EC98316374F38904600F1904 + 2430ABFEF57A012B56ACA0679E7986EAC5D7B39D049609F0CDE66FA413274EB0 + 07C66206ACF0C5C2082D60040FEA1ED3A9264C98A07B6D2501D883E6098B3B82 + 745FCAA4603149C3DD922E116A2ADD5B24800678E79D7758E069DE24027CA109 + CA065E438C29C07846AFC293E5E5A609C067F5A0CDC6C816FAB5F8E8091F407B + 9E9494C49643BBF303E811003176D45CC1960BC0715D9017BD102379D5FAFF9E + 92403C070458B97225F5E9D3C7197452F941081D0C8AA1F2252727536C6C2C0D + 7C6EA025129822C082F90B2438621E7BEC31AA51A386CBF1EC1C892E5DBD49B7 + 6EBB0ECE800069A9C9949EBCC761039827001780E117B331AF1E09C47425F4F2 + F27410E0C30F3FA28E9DFFE92400EFF64697284225228AC8C88032FAE1871F28 + 3D3D9D3A75EA643A52B961022C59BC44821A7FF2C927656BF96FDECAA6EDC967 + E887F43354AB6A79AA12134D154B97A0C2850BB12BF377CD7610E0407A329D3D + 9A4463C718370295500E077B4BB0A60A4DC79A17A196079A468F04A8D58B162F + A7D87BFF4191910E02E4C9E7C6CDDB74F1CA0DBA70F9BAA37C23A8ED3D95E88E + 72259C4400713EF9E4137AE18517A8769DDA865FDC1001767CB74342248FE79F + 7F5EA6EAAF5CFF8B66AF4AA57AB115A84BEBDA141D598C095CCA7DA3FC2B3BFE + B9E5204062E25EDAB963ABA52680834708312A283BE0CE31244279BC69D3A6BA + 9A00045FBAFC237AB8630F8A8A2EE5AC403C6F8EE3FBF0898BB42DF104F56D1B + 4B75ABE53713870F1F66AB8BA74E9BEA5D024C9C30511A306080330822C71B1F + 2553C9A8081AD4B90915CE7B217EB56BD7AED3C7AB3FA213BFFCCC7E673BD4D8 + B9B367A9765C2C8D1F3F5EF77E7A04E0C6901561D995D7A8E3880FFFEAE50501 + FEFBF65C3AF3FB558A2E5D965A3DD281626BD51188C0FE52FAF10B947AF43C8D + EA5A87A28AE787A5FBE69B6FD838C4A0C1830CBD8C5B02AC59BD4642AD6FD3A6 + 8D2C3D2DF322BDF3593A25F4B99F2A958D12D47DEE159FE8D0869293F6BA5C0F + 9B454C993245F79E7A04F0545876E5B5325CAC960E024C9B368D962C59C27E97 + AB1043F3967D4125A34BE769D6DC12CECE9668FDF7C7A8DD3D31F44083F24E2D + 005B0BE7BE39F34DEF1060C2F80912DA150CCE8858B8F1209DB97883863C758F + 5CE53BFE64655DA726F177A9AEEC01016047E80133671171139135DDF9FDC5DF + 7AC7CCFEB672AEDE208F5A5E355CB87081B982390180C9FF5D49B5E21BE5093F + 1FFB32CE53D1C239F442875899618870338856D6E5C92E6E49A04B00F8EEF7EC + D943BD7BF7763936656922552E5F923AB7AA9DCFCC3C76E27BD6F45769D907EF + BA9C87BE2B8F06A605F481A175E05FF0C6D0AE5DD05AB564145AA38C20013E40 + ADF8A634E6DF8B65C3CB1C99A72FB1A662E2D37565048016C1C49B37DE7CC333 + 02FC6FDEFFA4FBEEBB8F1A3468204BCF7174F786CCFD81EE6F50855A37AD9E77 + 63CA6B06789F98E8D891430E215EE05661EE719E47D6A6E5138714D7E0CF2749 + E4D20E8AE749F92738EFE3CC9BA79DC4268A04B28A35CBA9CD847B3BF33AAF47 + B2E7CB7F1CD772101ECB795DA38874A8FDEA35EA6A1E3F77E11A1D3D7589C674 + ABC5BA88220930ABA86BD7AED4A871235D12E812E095B1AF4898C2AD1CC23CF7 + 47164D5ABC971E7208BF71ED98FCC2125E5ED40624A6C9F2CAD394C2920B4825 + AF4A9A8C3CA2E09DFF0BD79714CF2C3C27A9A589F791E5554BB31FF0B91C3D79 + 89FAB7AD4E352A45CA08805E1B16B03ED1E909EB0498FAFA5469E8D0A12EE9A9 + 991768FE6707A8CD7D77518D2A65E485AB55380A21C904A3210475612A6A9986 + 503485AF47229DF7506AA5406899E01B800678BC79256A56A78C8C0008C18B88 + 6A43860EB146803DBBF748703376EFDEDDE5D8AE83E769F11787A955E36A5435 + 263AAF605C0B5EB356496221EBD562655E7592B8084B4B1BB87D3ED76B0632E0 + 79CD3C7D995AD42B4B1DEEAD28230016D17EFAE9A7346BF62C6B0458B7769D84 + 4187D6AD5BBB1CDB997E8E967E9541F7C557A62A0E43108595A35688949B4E2A + 0256FDED46989AE7680A59EB1ABE55D576E2E46F7F52DC1D51D4EBA12A2E6306 + CB962DB34E807717BC2BDD7BEFBD6C1AB312DFA79DA50F371FA106352B504CD9 + 48B90A3520B41C450DCF91E43536474F986ED27348209C24057C2DF614700F97 + 2C5E9886758A75210036E7E8D6AD9BEE68A1260166BE3953C2A08F5AECDBED29 + A769E5966354D3D1FE972D55DCBD50DCD4789110EE849F23234AC1A8C59EE0FA + 8DDB743B3B8712BAD5A0A2450AC908F0D5575F310DDEA2650BF30498F4DA24E6 + FE553A80806DFB4ED1EA6D9954B95C144547452804945B03E1BEC97F18B129D0 + 16728EA45DD3C35007840F5BE0F9F6D5A8529962320260CBBA860D1BD2DFDBFE + DD3C01468D1C258D1B374E759C9FDB0025238B5164F1A2AA42CB516902725408 + 11AEC5DEC1932D63A8C19D25650480130F1ED5AEDDBA9A2740C22B098C006AC8 + 3C7D8566AE4AA162450B5344B122DA2A5FA51710863D68DFB43C35AB5D4A4600 + EC528699D703060E304F802993A748625C7F11D7B26ED1A8053FB1FFD9B87F58 + C07E47EB8665E9C1FA659CA3A5F860832D84D51B3A6CA879024C9B3A4D1A3264 + 88E60D47CDDF49D76E189FB61D86BDE8D2A222D5AF1E25D300999999CC193472 + D448F30498317D86F4D24B2F69DE70F5B6630E63F0B4BFDF3B0C074A4715A1C1 + 8F56258732961100C28716183D66B439021CCF3C2E613061F0E0C19A37CDBA79 + 9BDEDB70900E9DB8E4EFF70F69542D1F41DDFE16E3321884A6001368117A3E61 + 5C8239021C3B7A4C821B71D0A041BA3787B1F7CBD9AB9471F2121D3979992E5E + B9C9BA24BC6B8251C3B06940824FD94D7948F9B9D08B62E597D7A38A285AC821 + E4A254D2216808BB546451AA5B359211406DE6303E98867FE0C0011A377E9C39 + 02641CCE60BB7B610E6018E680F17CD110D3FB78339F5A1E18806969693461E2 + 0473043874F0105BC23570E0407F976750C22E219BCD8B1955FBF6EDD35D68AA + 4A8003E907A4CD9B3753FFFEFDFD5D9641075FD67A77F930C51C4BF15E9FFABA + 3902EC4FDB2F6DDDBA95FAF5EBE7EFF20C3AD8559BAD3403981A864523D3674C + 37478094E414B60E406D2E6018DAF055AD379A17732A117F416F6EA02A01F625 + ED937EFAE927B642350CE3B0DBA8339B174127B76CD9423367CD3447002C00C5 + 4042CF9E3DFD5DA641035F1875668973F9F265B603D95B73DE324700C4F34B4C + 4CA4A79F7EDADFE51AF030DAEDF347D7304C001FC1DF82D6CA8765E46102D80C + 5FF7ED8D6A1B204C001FC00E417B830C409800362390DA7B311F47980036C31F + C69F91BC1C6102D808BBDB7BABC4111126804DF0656D369B4F44980036C11F46 + 9D91BC4A840960037C59F3CD10470D6102D8006F0BCF9BDD3E25C204F032FC61 + D499E9F6290102605EC7ECB7668709E00902699A97D1DA0F80008817647A38D8 + 9B04C078342697F80B7A0564F53A62C12BBFD58E2B8F19CD8F10B008A865B4DB + A7046204A0EC4D13C05BC3C10808F9FEFBEF7B4500A10AC467C23A7FB3B51F00 + 01B023CBB4E9D3CC11202931898575F774420876024108533D60F571FDFAF555 + A3608502B07A079337B58072C1326F445633237C004D00A684999E1398BC2F59 + C2899E4E0943AC3A7791BD113B17B1034371F611764F9933670E1D3C7850371F + 34407C7CBCDB6E9F12980F004DAEB7F9842A01D252D324180F9E4E0AAD5AB5AA + DBB8BE8D1A35A219336650FBF6EDBD52A8DE6AF37D01ACDF9F38712213921E40 + 00446A3153FB0144764F4D4D35BF32287D7FBA8498B39E4E0B4713206EF1A606 + 044F9E3B772E6378A801351F2BB0B18F02879A703FF8E0038A8B8B33257C0093 + 42710FD36B030F1E38287DF9E5978408219EE0A1871E62717F45200A2876B9E0 + 403833EC91834D1B0A02CC0808D14051C67CEF059CFBE38F3FCA36C604D04CF0 + 3D87CD5E1FE53B7CC4707304C83C96297DFCF1C7BA8B438D00BB5E283500B63A + 41E02200C7962F5FCE08104CAADB5B405BDEB97367660321221BCA60D1A245AC + EDE6401AA2AB23C4AED932C23EC4581BF0DCF3CF995F1E3E2E619C949090E0D1 + 0B4E9E3CD9C506C0FE3C2D5BB664FF63F1E2DEBD7B69F6ECD9F6967400A36FDF + BED4A3470F67FC64685E74DF44613FFBECB32C7ABA5902A087815D473A77E96C + 9E00E3C78D975E7CF1452630AB40D46BB1178050E6F8D4AA558BFDC6C245ECFE + F1F2CB2FFBA0A8F5E18906F2E4DCB163C7B20AC1A3B1717B4034F8DAB66DEBDC + 54D30C50BE8D1B37A6967F6B699E00B366CE923A74E8606A372D25B08F8D18F3 + 1FEA088609D80CC049819E42BB76ED2CDF430F76362BDEBAF67BEFBDC73C7EF0 + 8500C78F1F671B73F08D25D04CA0C2B8DB944B0D2013F679A8DFA0BE79022CFE + 60B104CB1356BA55607162565696B3B010B4088E0DFE3208648868E46AC128AD + 201804AE04543E0CE0E6CD9BB3DFA824D82E0E0E32DC13E31068FFAD6C7F83D5 + 5D23468EB0162974DBD66D12428CB8DBDC410F50F72000775CA0C68BBB84A37B + 038350B9154D28800B147BFCA0A7F4F0C30FB3DF68325166BC67101111C13E66 + 81A615B19EF57A00EC39249D9815D82D047182BCD5455BB76E9DB32D0329DE7E + FB6D42283AE53E3A460AAEA020252585F5D51F7FFC71671ABA6F7C7329AB9A27 + 232323B7796DDFCE3A01D67EBA56829FBA57AF5E1E173CB68F41DC216C320960 + E122C2D0C008F227FC4D2858EA9B366D920DBC9D3D7B969A356B6659F8E84662 + 773577A1E2D9FB4B6EA2F8CC9B3B8F6D1A0583901B6F5680B60D2B5511B992BF + 388C444F7D0D8106B384C260D9BC79F3D87E7F1CE81EB768D1C2F4BD41188485 + C1E7D1471F35B4F7B0A16DE3B04F300687E0AC0009F8C81D7F59BE09921A63F9 + 31382560CD721B00F30D90CEF723F0774DF417D04BC2AE2C7009F33240683754 + 3A1883621973A8FD8F26151E44EC12D2BD4777EFEE1B280211C494821685AF35 + 8B65F7EEDDB2CDA2A00D10C858B91D9DB7104C848216844B98DB5AD0969807C0 + AD7F54387CE313572BCEAB2FE6B3EDE3972F5B2E897B0FA1FD47BB77F7DD77FB + E4FE6E0BC28F841939722473F640E0002C780CA5EB45F9F6DA7BFB8A00D88082 + 1B80C0C2850BD93030B709421953A74E65BE10EE21E578EA9F4F151C0260E7F1 + 989818F63FDABDF9F3E7D3D2A54B834A55DB85050B16B0BEBEE874C34059BFFE + FD0A060130C7105E40DEC6C1F2C57C83501E041281EE31BADB0F3EF8A0330DBE + 00A3FBFF7A029F1060D3C64D124605796DC72ED7786177BB88870A6010630E26 + BA6E1C300407FF6B70C120C0AA95ABD80E641CF051C31EC0306818C45CB6987F + 819D3E39A00130A126BE7EBCAD24F00901162D5C24897B0F6100049B19B56AD5 + CAF67B070330E682593F981BC0013B093D8147DA3C12FC0450F60056AC58C154 + 5CA84E0557828FFA2937E8405AB7A7BA05370110781A5147450D008F95D1A9CD + A10471A414C0C860EF3EBD839B009BBFDE2C6112889911BF3072E10B43D07602 + AC59BD460AAB7A6B281004787FD1FB923806108671407362BE60E3268D6D2381 + ED04F8CF9CFF486177AF35600E0546F73AFEA363F01200DBD0AB2D6AE4A386A2 + 3128A6F174BDFF5140FC7FF17CE5FF621E3D884D151F8553FE1687C2F9FF3C5D + EFB7F27ACA343EDAA74C43E5A91957337809E00D601733E5DA78E5B03317B01A + D9D4D6E4BB148462DC5DFC56FB8843B4E26F6F0FD7DA8DA020801E3839D4022C + 582180F8BF1609ECAC91BE46D013200CCFF07FE7318F8E00C808350000000049 + 454E44AE426082} + end> + end> + Left = 84 + Top = 410 + end + object imgList: TVirtualImageList + Images = < + item + CollectionIndex = 0 + CollectionName = 'Ikony\Item1' + Name = 'imgDel' + end + item + CollectionIndex = 1 + CollectionName = 'Ikony\Item2' + Name = 'imgAdd' + end + item + CollectionIndex = 2 + CollectionName = 'Item5' + Name = 'Item5' + end + item + CollectionIndex = 3 + CollectionName = 'Item7' + Name = 'imgPrinter' + end> + ImageCollection = imgColl + Left = 16 + Top = 412 + end + object imgList2: TImageList + Height = 128 + Width = 128 + Left = 152 + Top = 406 + Bitmap = { + 494C010104000C00040080008000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000000200000001000001002000000000000000 + 0800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000E3E5F600C3C6F400ABB0F5009299F3007B84F3006972F0005B66 + F0004C58EE004450ED00404CED003946EF003946EF003946EF003947EC004450 + ED004652ED00565FED00626BEC007279ED006870E8006D75E700A5AAEE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000DAEFE300B1E2C80094DBB30074D29E0056C88A0040C17C002DBB + 6F001AB4620010B15A000CB0570000AF500000AF50000CB0570010B15A001AB4 + 62002DBB6F0040C07A0057C6880073CE9C0092D8B200B2E2CA00DAEFE4000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000C1C5F8009298F3006771 + EC00444FE8003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003641E7002F38DF002F38DE002F38DE002F38 + DE00363FE200545BE7008186ED00C8CCF7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000ABE3C40070CF9B0039BC + 75000EAF570001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F000EAF + 57003BBF760070D09C00ACE3C500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFDEDEDE00DDDDDD00DCDCDC00DCDC + DC00DBDBDB00DADADA00DADADA00D9D9D900D9D9D900D8D8D800D8D8D800D7D7 + D700D7D7D700D7D7D700D7D7D700D7D7D700D7D7D700D7D7D700D8D8D800D8D8 + D800D8D8D800D9D9D900D9D9D900DADADA00DADADA00DBDBDB00DCDCDC00DDDD + DD00DEDEDE00000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CED0F900959CF5005D69EF003845EC003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003641EB002F38E2002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F39E0004951E5008A8FEF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000B9E7CE0071D19D0029B96B0000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF50002ABA6D0072D19D00BAE8CE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFDEDEDE00DDDDDD00DBDB + DB00DADADA00D9D9D900D7D7D700D6D6D600D5D5D500D4D4D400D2D2D200D2D2 + D200D1D1D100D0D0D000CFCFCF00CECECE00CECECE00CDCDCD00CDCDCD00CCCC + CC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CDCDCD00CDCD + CD00CECECE00CECECE00CFCFCF00CFCFCF00D0D0D000D1D1D100D2D2D200D3D3 + D300D4D4D400D5D5D500D7D7D700D8D8D800D9D9D900DADADA00DCDCDC00DDDD + DD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CCD0F9008891 + F4004754EC003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003641EB002F38E3002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F39 + E200454DE4009CA2F20000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000B6E6CC005FCA + 90000FB1590000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500010B1 + 5A0060CB9100B7E7CC0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFCACACA00C9C9C900C8C8C800C7C7 + C700C6C6C600C6C6C600C4C4C400C3C3C300C1C1C100C1C1C100C1C1C100BFBF + BF00BEBEBE00BCBCBC00BABABA00BABABA00B8B8B800B6B6B600B6B6B600B4B4 + B400B2B2B200B2B2B200B0B0B000ADADAD00ADADAD00ABABAB00ABABAB00A9A9 + A900A8A8A800A8A8A800A6A6A600A5A5A500A5A5A500A5A5A500A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A5A5 + A500A5A5A500A5A5A500A6A6A600A8A8A800A8A8A800A8A8A800A9A9A900ABAB + AB00ADADAD00ADADAD00AEAEAE00B0B0B000B0B0B000B2B2B200B4B4B400B6B6 + B600B6B6B600B8B8B800BABABA00BCBCBC00BCBCBC00BEBEBE00BFBFBF00C1C1 + C100C1C1C100C1C1C100C3C3C300C4C4C400C6C6C600C6C6C600C7C7C700C8C8 + C800C9C9C900CBCBCB00CBCBCB00CCCCCC00DEDEDE00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000A1A8F600525DEE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003641EB003038E3002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E200303AE1005D65E900D2D4F90000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000087D8AB001DB6620000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500018B45E0076D2A100DBF2E50000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF8E8E8E00A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0 + A000A0A0A000A0A0A000A0A0A0009D9D9D00B6B6B600000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D2D4F5007A82EE003946E8003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003641 + EB002F38E3002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E3004952E600C2C4F6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CBEAD9005BC68C0002AB4E0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AC4F0043C27D00B1E5C8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF9C9C9C00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB0099999900D1D1D100000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFD1 + F8006972EC003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003641EB002F38 + E3002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F39E2004951 + E500BFC1F5000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000C0E9 + D20045BF7E0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500035BE + 7300B4E6CA000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFA9A9A900ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB0097979700000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000D5D8FA006C77F0003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003641EB003038E3002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E200434CE600B7B9F500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BBE8CF003CBF780000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500037BF7400BCE8D000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFBABABA00A8A8A800ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABABAB00ABAB + AB00ABABAB00ABABAB00ABABAB0097979700000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008C94F4003945EC003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003641EB003038E3002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2004650E600CBCFF70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000005CCA8E0000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF50004BC581000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFD7D7D7009B9B9B00ABABAB00ABAB + AB00ABABAB00A5A5A500A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3 + A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300A3A3A300ABAB + AB00ABABAB00ABABAB00ABABAB00A3A3A300000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000B3B7F7004753ED003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003641E7002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2005E67E900000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008FDAB1000CB0570000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500009AF55007ED5A600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF97979700ABABAB00ABAB + AB00ABABAB00505050003C3C3C003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E + 3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003D3D3D003E3E3E00ABAB + AB00ABABAB00ABABAB00ABABAB00ACACAC00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DFE1FB006B76F0003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003641E6003038DF002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E200313AE1009EA1 + F100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFE9D2002ABA6D0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF50002CBA6D00C1E9 + D300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF9B9B9B00ABABAB00ABAB + AB00ABABAB0063636300A1A1A100DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00BFBFBF004D4D4D00ABAB + AB00ABABAB00ABABAB00A6A6A600BEBEBE00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000A6AD + F6003C48EC003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003641E7002F38DF002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2004D57E600E5E6F60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000007ED5 + A60001AD4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AC + 4F006DCF98000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFA7A7A700ABABAB00ABAB + AB00ABABAB007373730087878700DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00AEAEAE0059595900ABAB + AB00ABABAB00ABABAB0098989800D7D7D700000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007981EE003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003641EB003038E2002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2003139E100A7ACEF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000DEF0E6003ABC750000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500035BD7100DAEFE400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFB4B4B400AAAAAA00ABAB + AB00ABABAB00848484006B6B6B00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE009B9B9B0064646400ABAB + AB00ABABAB00ABABAB0097979700000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000CED1F5004F59EB003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003641 + EB002F38E3002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E200696FE6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000B7E4CB0016B05D0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500013B15B00B0E2C7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFCCCCCC00A0A0A000ABAB + AB00ABABAB009696960052525200DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00888888006F6F6F00ABAB + AB00ABABAB00ABABAB0098989800000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000A7ACF5003B47E8003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003641EB002F38 + E3002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1003F48E000DCDEF500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000075D19E0000A94E0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AB4E0077D09F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF96969600ABAB + AB00ABABAB00A6A6A6003C3C3C00DDDDDD00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00757575007B7B7B00ABAB + AB00ABABAB00ABABAB00A0A0A000000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000009299F3003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003641EB003038E3002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E100323BDD00C7CBF2000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000057C98A0000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0050C48500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F4D4B900F1BA8B00F1B6 + 8400F1B68400F2B68400F5B88700F6B98700F6B98700F6B98700F6B98700F6B9 + 8700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F6B9 + 8700F5B88700F2B68400F1B68400F2BE9200F3CCAD00F6DAC200000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF97979700ABAB + AB00ABABAB00ABABAB0046464600CCCCCC00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE006161610088888800ABAB + AB00ABABAB00ABABAB00ABABAB00000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000818AF2003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003641EB003038E3002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F39DC00B6BC + F000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000046C37F0000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0040BE79000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F0934500EF6C0000EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EE74 + 1000F2924200F5AE7400F8D0B000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FFA2A2A200ABAB + AB00ABABAB00ABABAB0058585800B1B1B100DDDDDD00DDDDDD00DDDDDD00DDDD + DD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDD + DD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDD + DD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDD + DD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DDDDDD00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE005050500094949400ABAB + AB00ABABAB00A4A4A400BCBCBC00000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007079F2003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003641EB003038E3002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F37 + DC00A7ACEE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000037BF740000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0032BA + 7000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F2924300F06D0000F06D0000EF6C0000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C + 0100EF6C0000F06D0000F06D0000EE700700F2954900F7C39800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFDCDCDC00DBDBDB00DBDBDB00DBDBDB00DBDBDB00DADADA00D9D9D900D9D9 + D900D7D7D700D6D6D600D5D5D500D4D4D400D3D3D300D2D2D2009C9C9C00ABAB + AB00ABABAB00ABABAB006868680093939300D5D5D500D5D5D500D5D5D500D5D5 + D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5 + D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5 + D500D5D5D500D5D5D500D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D6003E3E3E00A0A0A000ABAB + AB00ABABAB0097979700C1C1C100D8D8D800D9D9D900DBDBDB00DCDCDC00DDDD + DD00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000616B + F0003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003641EB002F38E3002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F39DE00A3A7EE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000DEF3E80024B9 + 680000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0024B66600DBEFE40000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FBE6D500F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000EE720B00F4A5 + 6400FAE0CC000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFBBBBBB00808080008484 + 8400959595009797970097979700989898009898980099999900989898009797 + 970097979700979797009797970097979700989898009797970080808000A3A3 + A300ABABAB00ABABAB007878780077777700CDCDCD00CDCDCD00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00C9C9C9003A3A3A00AAAAAA00ABAB + AB00ABABAB00888888008D8D8D00949494009595950095959500969696009696 + 9600969696009797970097979700979797009898980098989800969696009090 + 9000A9A9A900000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000646EF0003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003641E7003038E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002E38DC00AFB3F000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000026B8690000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0022B5650000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F9D2B300F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F2954900FAE3CE00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF9292920097979700DFDFDF00F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000DCDCDC009999 + 9900ABABAB00ABABAB00898989005E5E5E00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7 + C700C7C7C700C7C7C700C7C7C700C7C7C700B2B2B20045454500ABABAB00ABAB + AB00ABABAB008F8F8F00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C5C5 + C500ABABAB0091919100D8D8D800000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007079F2003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003641E6003038DF002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002E37DC00B3B6EF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000032BD710000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0032BA7000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FAE3CF00F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000ED6C0000F29D56000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FFADADAD0094949400EFEFEF00F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EDEDED009797 + 9700ABABAB00ABABAB009B9B9B0048484800BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF009D9D9D0052525200ABABAB00ABAB + AB00ABABAB0093939300C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600B7B7B70092929200000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007D84F2003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003641 + E7002F38DF002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1003039DC00C3C6F20000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000046C27E0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0040BE79000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F2924200F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C + 0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000EE710C00F7C19500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF7A7A7A00E5E5E500F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F0009F9F + 9F00ABABAB00ABABAB00A9A9A9003A3A3A00B3B3B300B6B6B600B6B6B600B6B6 + B600B6B6B600B6B6B600B6B6B600B6B6B600B6B6B600B6B6B600B6B6B600B6B6 + B600B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7 + B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7 + B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7 + B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7 + B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7 + B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7B700B7B7 + B700B7B7B700B7B7B700B7B7B700B7B7B700888888005F5F5F00ABABAB00ABAB + AB00ABABAB0098989800C8C8C800C7C7C700C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600A0A0A000BABABA00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000008E96EF003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003641EB003038 + E2002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E100333DDD00E2E3F500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000055C4890001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0057C6880000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F0893300F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F18D3D000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FFBEBEBE009F9F9F00F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000ECECEC00E3E3E300E1E1E100E1E1E100A3A3 + A300ABABAB00ABABAB00ABABAB00494949009C9C9C00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAFAF00AFAF + AF00AFAFAF00AFAFAF00B0B0B000B0B0B000777777006B6B6B00ABABAB00ABAB + AB00A3A3A3009A9A9A00BABABA00BABABA00C0C0C000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600BFBFBF008F8F8F00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000A2A8F1003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003641EB003038E3002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1003F49E000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000071CD9B0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0077D09F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F8CBA600F5B27B00F5AF + 7600F5AF7600F5AF7600F5AF7600F5AF7600F4AE7600F1AC7500F0AC7600F0AC + 7600F0AC7600F1AC7500F4AE7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF + 7600F5AF7600F5AF7600F5AF7600F5AF7600F5AD7000F4A56500F4A56500F399 + 5000EE812700E96D0400EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE77 + 1600F9D9C0000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF9E9E9E00C0C0C000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000DADADA00D1D1D100D0D0D000D0D0D000A4A4 + A400A6A6A600ABABAB00ABABAB005B5B5B008E8E8E00B5B5B500B5B5B500B5B5 + B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5 + B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5B500B5B5B500B4B4 + B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4 + B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4 + B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B4B4B400B3B3B300B3B3 + B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3 + B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3B300B3B3 + B300B3B3B300B3B3B300B3B3B300B3B3B3006B6B6B0076767600ABABAB00ABAB + AB00979797009E9E9E00AEAEAE00ADADAD00AEAEAE00C5C5C500C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6008E8E8E00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D4D6F9003C47E7003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003641EB003038E3002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1005B64E5000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000ADE3C50000A94E0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AB4E00ADE1C5000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F7E4D400F2C09800EE964D00E96F0A00EC6C0100EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000ED6E0400F7C1950000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF8A8A8A00D2D2D200F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000C5C5C500C0C0C000C0C0C000C0C0C000ACAC + AC009A9A9A00ABABAB00ABABAB006D6D6D0087878700CCCCCC00CCCCCC00CCCC + CC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCC + CC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCC + CC00CCCCCC00CCCCCC00CCCCCC00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCB + CB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCB + CB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCB + CB00CBCBCB00CBCBCB00CACACA00CACACA00CACACA00CACACA00CACACA00CACA + CA00CACACA00CACACA00CACACA00CACACA00CACACA00CACACA00CACACA00CACA + CA00CACACA00CACACA00CACACA00CACACA006363630082828200ABABAB00ABAB + AB008A8A8A009D9D9D00A0A0A000A0A0A0009E9E9E00C1C1C100C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60094949400D6D6D600000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000004E5AEF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003641EB002F38E3002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E100868D + EA00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D3F0DF000AAE560000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500013B15B00DEF0 + E600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F4CDAF00ED91 + 4600EC6B0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F6B78300000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF79797900E3E3E300F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000989898009090900090909000909090008C8C + 8C0088888800ABABAB00ABABAB007E7E7E0077777700E3E3E300E3E3E300E3E3 + E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3 + E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3 + E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3 + E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E3E3E300E2E2E200E2E2 + E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2 + E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2E200E1E1E100E1E1E100E1E1 + E100E1E1E100E1E1E100E1E1E100E1E1E100E1E1E100E1E1E100E1E1E100E1E1 + E100E1E1E100E1E1E100E1E1E100E1E1E100575757008F8F8F00ABABAB00ABAB + AB007979790079797900787878007777770076767600BABABA00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60099999900C7C7C700000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000747DF1003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003641EB003038E3002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F39 + E100C5C9F3000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00002EBC6D0000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500037BE + 7300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F6E1CF00F3A36200ED6E0600F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F5AF76000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF78787800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000707070006666660066666600666666006666 + 660073737300ABABAB00ABABAB008F8F8F005B5B5B00E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700454545009C9C9C00ABABAB00ABAB + AB006363630056565600555555005555550055555500B6B6B600C7C7C700C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600A4A4A400B0B0B000000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000A5AA + F6003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003641EB003038E3002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2003A43E2000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006ED0 + 9B0000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500079D2A2000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FAE8DA00F0934500F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F6B6820000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFDDDDDD0088888800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F0004D4D4D004242420042424200424242004242 + 420058585800ABABAB00ABABAB00A0A0A00043434300ECECEC00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEBEB00EBEB + EB00EBEBEB00EBEBEB00EBEBEB00E9E9E90038383800A7A7A700ABABAB00AAAA + AA004646460037373700373737003737370036363600B0B0B000C7C7C700C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600AFAFAF009B9B9B00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D7DAFA003B48 + EC003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003641EB003038E3002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2006D74EB0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BCE8D00000AC + 4F0000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF50001BB66200A6E0C100ECF6 + F000FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F1FBF500ABE5C50024BA690000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500001AD4F00C1E9D30000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F8C8A100EE761400F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000ED6C0000F8C9A300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD6D6D6008E8E8E00F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F0002F2F2F002323230023232300232323002323 + 2300313131006060600060606000606060003C3C3C00E5E5E500F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00DCDCDC003E3E3E005E5E5E005E5E5E005D5D + 5D00232323001D1D1D001D1D1D001D1D1D001D1D1D00ABABAB00C8C8C800C7C7 + C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B3B3B3008F8F8F00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000000000006069EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003641 + E7003038E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2003038E200BABFF400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000023B6670000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500026BB6A00ECF9F200FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EDF9F30024BA690000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF50002ABA6D0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F0893500F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000ED6E0600F9DCC2000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD4D4D40090909000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000151515000A0A0A000A0A0A000A0A0A000A0A + 0A000A0A0A000A0A0A000A0A0A000A0A0A003A3A3A00CCCCCC00F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4F400F4F4 + F400F4F4F400F4F4F400F4F4F400CBCBCB003B3B3B0009090900090909000909 + 09000808080008080800080808000808080008080800A6A6A600C8C8C800C7C7 + C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B4B4B4008B8B8B00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000A3A8F6003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003641E6003038 + DF002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2003941E300000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000075D19F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000ADE5C700FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00ABE5C50000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF50008CD9B000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F4A1 + 5E00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF7A1B000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD2D2D20091919100F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F0000A0A0A000000000000000000000000000000 + 0000000000000000000000000000000000002D2D2D00B3B3B300F9F9F900F9F9 + F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9 + F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9F900F9F9 + F900F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8 + F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8 + F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8 + F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8 + F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8F800F8F8 + F800F8F8F800F8F8F800F8F8F800B9B9B9003535350000000000000000000000 + 00000000000000000000000000000000000000000000A2A2A200C9C9C900C8C8 + C800C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B5B5B50087878700000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000404DED003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003641E7003038DF002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E200888DEE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000DAF2E40005AF510000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000F1FBF500FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F0FAF50000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF50000CB05700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F5B57E00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F39A + 5300000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCFCFCF0094949400F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000080808000000000000000000000000000000 + 0000000000000000000000000000000000001B1B1B008A8A8A00E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4E400E4E4 + E400E4E4E400E4E4E400E4E4E4009B9B9B002929290000000000000000000000 + 00000000000000000000000000000000000000000000A2A2A200CACACA00C9C9 + C900C8C8C800C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B7B7B70082828200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000007E87F3003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003641EB003038E2002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E200303AE1000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000049C4810000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500056C88A000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F5AD7100F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F8C8A1000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCDCDCD0096969600F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000151515000000000000000000000000000000 + 00000000000000000000000000000000000010101000393939003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B3B003B3B + 3B003B3B3B003B3B3B003B3B3B003B3B3B001919190000000000000000000000 + 00000000000000000000000000000000000002020200BBBBBB00CACACA00C9C9 + C900C8C8C800C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B8007D7D7D00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000D0D3F6003844EB003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003641EB003038E3002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2006369E90000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000B3E3C90000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000BCE8D00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F3A56200F06D0000F06D0000F06D0000F06D0000F06D + 0000EE7716000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCCCCCC0097979700F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000636363000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002A2A2A00CCCCCC00CBCBCB00CACA + CA00C9C9C900C8C8C800C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B9B9B9007B7B7B00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000007279ED003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003641EB003039E300464EE5005159E700363EE3002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE003039DE00454DE0005058E200363EDF002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E200D7D8F800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000036BA710001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500034BE730000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F2914100F06D0000F06D0000F06D0000F06D + 0000F06D0000F5AE740000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000B0B0B0006E6E6E006E6E6E006E6E + 6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E + 6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E + 6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E6E006E6E + 6E006E6E6E006E6E6E006E6E6E006E6E6E006D6D6D006D6D6D006D6D6D006D6D + 6D006D6D6D006D6D6D006D6D6D006D6D6D006D6D6D006D6D6D006D6D6D006D6D + 6D006D6D6D006D6D6D006D6D6D006D6D6D006D6D6D006D6D6D006C6C6C006C6C + 6C006C6C6C006B6B6B006A6A6A006A6A6A006969690069696900686868006868 + 6800686868006767670066666600666666006565650064646400646464006464 + 6400636363006363630062626200626262006262620061616100606060006060 + 60005F5F5F005E5E5E005E5E5E007D7D7D00CECECE00CDCDCD00CCCCCC00CBCB + CB00C9C9C900C8C8C800C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B9B9B90077777700000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000D5D8F5003844E7003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003A45EB008B8FEF00E4E5FB00FFFFFF00FFFFFF00F8F8FE00B3B6 + F400474FE5002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E200333C + E300898EEE00E0E1F600FAFAFA00FAFAFA00F3F3F900B0B3F000474FE5002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2005A64E800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000ABE0C40001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF5000B4E6CA00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000EF751000F06D0000F06D0000F06D + 0000F06D0000ED6E0500FBEADD00000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F1F1F100EFEFEF00EEEE + EE00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9E900E8E8E800E7E7E700E6E6 + E600E4E4E400E3E3E300E2E2E200E1E1E100E0E0E000DFDFDF00DEDEDE00DDDD + DD00DCDCDC00DBDBDB00D9D9D900D8D8D800D7D7D700D6D6D600D5D5D500D4D4 + D400D3D3D300D2D2D200D1D1D100CFCFCF00CECECE00CDCDCD00CCCCCC00CBCB + CB00CACACA00C9C9C900C8C8C800C7C7C700C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80077777700000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000000000007781ED003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF00444FED00CED0F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F4F5FE006A71E9002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2003E47E400CED0 + F800FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00EFF1F9006A70 + E9002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F37E000E1E4FA000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000030BA6E0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500036BD7400000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F8CEAB00F06D0000F06D0000F06D + 0000F06D0000F06D0000F3A96B00000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEF + EF00EEEEEE00EDEDED00ECECEC00EBEBEB00EAEAEA00E8E8E800E7E7E700E6E6 + E600E5E5E500E4E4E400E3E3E300E2E2E200E1E1E100E0E0E000DEDEDE00DDDD + DD00DCDCDC00DBDBDB00DADADA00D9D9D900D8D8D800D7D7D700D6D6D600D5D5 + D500D3D3D300D2D2D200D1D1D100D0D0D000CFCFCF00CECECE00CDCDCD00CCCC + CC00CBCBCB00CACACA00C9C9C900C7C7C700C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80073737300000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000DEE0FA003944EB003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003A46 + EE00CBCDF800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FBFBFE007177EA002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E200424AE500DBDDFA00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00F0F2 + F9004B53E5002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E200666CEB000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BCE8D00000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF5000C1EAD3000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F29D5600F06D0000F06D + 0000F06D0000F06D0000EE710900000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9E900E8E8E800E7E7 + E700E6E6E600E5E5E500E3E3E300E2E2E200E1E1E100E0E0E000DFDFDF00DEDE + DE00DDDDDD00DCDCDC00DBDBDB00DADADA00D9D9D900D7D7D700D6D6D600D5D5 + D500D4D4D400D3D3D300D2D2D200D1D1D100D0D0D000CFCFCF00CECECE00CCCC + CC00CBCBCB00CACACA00C9C9C900C8C8C800C7C7C700C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000008087F2003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF007D84 + F000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FBFBFE007177EA002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E200434CE500DEDFFA00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00B6B9F1002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002E38DF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000049C4810000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF50004CC483000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FAE9DB00ED6E0400F06D + 0000F06D0000F06D0000F06D0000F5B57E000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EEEEEE00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9E900E7E7 + E700E6E6E600E5E5E500E4E4E400E3E3E300E2E2E200E1E1E100E0E0E000DFDF + DF00DEDEDE00DDDDDD00DBDBDB00DADADA00D9D9D900D8D8D800D7D7D700D6D6 + D600D5D5D500D4D4D400D3D3D300D1D1D100D0D0D000CFCFCF00CECECE00CDCD + CD00CCCCCC00CBCBCB00CACACA00C9C9C900C8C8C800C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000003947EC003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE00CACC + F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007177EA002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E200454DE500E0E1FB00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00F8F8FA003E45E0002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2008085 + EF00000000000000000000000000000000000000000000000000000000000000 + 0000DAF2E40000AC4F0000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AC4F00DCF2 + E700000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F3A36200F06D + 0000F06D0000F06D0000F06D0000F07E21000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000EFEFEF00EEEEEE00EDEDED00EBEBEB00EAEAEA00E9E9E900E8E8 + E800E7E7E700E6E6E600E5E5E500E4E4E400E3E3E300E1E1E100E0E0E000DFDF + DF00DEDEDE00DDDDDD00DCDCDC00DBDBDB00DADADA00D9D9D900D8D8D800D6D6 + D600D5D5D500D4D4D400D3D3D300D2D2D200D1D1D100D0D0D000CFCFCF00CECE + CE00CDCDCD00CCCCCC00CACACA00C9C9C900C8C8C800C7C7C700C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00009CA2F5003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB00F1F2 + FC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007177EA002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E200474FE500E2E4FB00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA006970E5002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2003B46 + E300000000000000000000000000000000000000000000000000000000000000 + 000076D2A10000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF50007AD4 + A200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F7E7DA00EC6D + 0500F06D0000F06D0000F06D0000F06D0000FADCC50000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000EFEFEF00EEEEEE00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9 + E900E8E8E800E6E6E600E5E5E500E4E4E400E3E3E300E2E2E200E1E1E100E0E0 + E000DFDFDF00DEDEDE00DDDDDD00DCDCDC00DADADA00D9D9D900D8D8D800D7D7 + D700D6D6D600D5D5D500D4D4D400D3D3D300D2D2D200D1D1D100CFCFCF00CECE + CE00CDCDCD00CCCCCC00CBCBCB00CACACA00C9C9C900C8C8C800C7C7C700C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000505BEE003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA00F5F5 + F900FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007177EA002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1004A52E600E5E6FB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA007A80E8002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E200C9CEF7000000000000000000000000000000000000000000000000000000 + 000018B45E0000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500017B5 + 5E00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000EF9C + 5800EF6C0000F06D0000F06D0000F06D0000F3A96C0000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000EFEFEF00EEEEEE00EDEDED00ECECEC00EAEAEA00E9E9 + E900E8E8E800E7E7E700E6E6E600E5E5E500E4E4E400E3E3E300E2E2E200E1E1 + E100E0E0E000DEDEDE00DDDDDD00DCDCDC00DBDBDB00DADADA00D9D9D900D8D8 + D800D7D7D700D6D6D600D4D4D400D3D3D300D2D2D200D1D1D100D0D0D000CFCF + CF00CECECE00CDCDCD00CCCCCC00CBCBCB00C9C9C900C8C8C800C7C7C700C6C6 + C600C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000000000000000000000CACE + F9003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA00DFE1 + F700FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007177 + EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE004B53E200E6E7FB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA006C72E6002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2006269E900000000000000000000000000000000000000000000000000B3E5 + CB0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 5000B8E7CD000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F3CC + AD00EC6C0100EF6C0000F06D0000F06D0000EF80230000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000EEEEEE00EDEDED00ECECEC00EBEBEB00EAEA + EA00E9E9E900E8E8E800E7E7E700E6E6E600E4E4E400E3E3E300E2E2E200E1E1 + E100E0E0E000DFDFDF00DEDEDE00DDDDDD00DCDCDC00DBDBDB00D9D9D900D8D8 + D800D7D7D700D6D6D600D5D5D500D4D4D400D3D3D300D2D2D200D1D1D100D0D0 + D000CFCFCF00CDCDCD00CCCCCC00CBCBCB00CACACA00C9C9C900C8C8C800C7C7 + C700C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000000000000000000000878F + F3003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA00ADB1 + F100FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFB + FE007177EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE004E55 + E100E4E5F700FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FCFCFE004047E0002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E200313AE1000000000000000000000000000000000000000000000000005DCA + 8F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500061CC92000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000E9741200EC6C0100EF6C0000F06D0000F06D000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000EFEFEF00EEEEEE00EDEDED00ECECEC00EBEB + EB00EAEAEA00E8E8E800E7E7E700E6E6E600E5E5E500E4E4E400E3E3E300E2E2 + E200E1E1E100E0E0E000DFDFDF00DDDDDD00DCDCDC00DBDBDB00DADADA00D9D9 + D900D8D8D800D7D7D700D6D6D600D5D5D500D4D4D400D2D2D200D1D1D100D0D0 + D000CFCFCF00CECECE00CDCDCD00CCCCCC00CBCBCB00CACACA00C9C9C900C7C7 + C700C6C6C600C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000004754 + EC003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB005D67 + EC00F9F9FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FBFBFE007177EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1005058E300E6E6 + F700FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00B8BBF5002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E200B9BCF60000000000000000000000000000000000000000000EB2 + 580000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 50000FB159000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000EFA26400EB6B0100EC6C0100EF6C0000F06D0000F8C8A100000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EDEDED00ECECEC00EBEB + EB00EAEAEA00E9E9E900E8E8E800E7E7E700E6E6E600E5E5E500E4E4E400E3E3 + E300E1E1E100E0E0E000DFDFDF00DEDEDE00DDDDDD00DCDCDC00DBDBDB00DADA + DA00D9D9D900D7D7D700D6D6D600D5D5D500D4D4D400D3D3D300D2D2D200D1D1 + D100D0D0D000CFCFCF00CECECE00CCCCCC00CBCBCB00CACACA00C9C9C900C8C8 + C800C7C7C700C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000CCD0F9003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB00A4A9F100FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FBFBFE007177EA002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E200545BE700ECEDFB00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EBEB + FC00454DE5002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2006971EA0000000000000000000000000000000000B7E7CC0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF5000BBE8CF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F3C8A300EB6B0100EB6B0100EC6C0100EF6C0000F4A76800000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EEEEEE00EDEDED00ECEC + EC00EBEBEB00EAEAEA00E9E9E900E7E7E700E6E6E600E5E5E500E4E4E400E3E3 + E300E2E2E200E1E1E100E0E0E000DFDFDF00DEDEDE00DDDDDD00DBDBDB00DADA + DA00D9D9D900D8D8D800D7D7D700D6D6D600D5D5D500D4D4D400D3D3D300D2D2 + D200D0D0D000CFCFCF00CECECE00CDCDCD00CCCCCC00CBCBCB00CACACA00C9C9 + C900C8C8C800C6C6C600C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000949AF4003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E200565DE700EEEFFD00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F2FD005960 + E8002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2003C45E300000000000000000000000000000000006ED09B0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500073D19E0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F7E5D500EB6B0100EB6B0100EB6B0100EC6C0100F1904100000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EEEEEE00EDED + ED00EBEBEB00EAEAEA00E9E9E900E8E8E800E7E7E700E6E6E600E5E5E500E4E4 + E400E3E3E300E2E2E200E0E0E000DFDFDF00DEDEDE00DDDDDD00DCDCDC00DBDB + DB00DADADA00D9D9D900D8D8D800D7D7D700D5D5D500D4D4D400D3D3D300D2D2 + D200D1D1D100D0D0D000CFCFCF00CECECE00CDCDCD00CCCCCC00CACACA00C9C9 + C900C8C8C800C7C7C700C6C6C600B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000000000005963EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E200575EE800EFF0FD00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F2FD005960E8002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E3000000000000000000000000000000000025B8670000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF50002ABA6D0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000EA720F00EB6B0100EB6B0100EB6B0100EB7A1C00000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCBCBCB0098989800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F1F1F100EFEFEF00EEEEEE00EDED + ED00ECECEC00EBEBEB00EAEAEA00E9E9E900E8E8E800E7E7E700E5E5E500E4E4 + E400E3E3E300E2E2E200E1E1E100E0E0E000DFDFDF00DEDEDE00DDDDDD00DCDC + DC00DADADA00D9D9D900D8D8D800D7D7D700D6D6D600D5D5D500D4D4D400D3D3 + D300D2D2D200D1D1D100CFCFCF00CECECE00CDCDCD00CCCCCC00CBCBCB00CACA + CA00C9C9C900C8C8C800C7C7C700B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000000000003844E8003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2005960E800F0F1FD00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F2FD005960E8002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2009297F00000000000000000000000000001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F18F4000EC6C0100EB6B0100EB6B0100E86A0000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCCCCCC0097979700F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EEEE + EE00EDEDED00ECECEC00EAEAEA00E9E9E900E8E8E800E7E7E700E6E6E600E5E5 + E500E4E4E400E3E3E300E2E2E200E1E1E100E0E0E000DEDEDE00DDDDDD00DCDC + DC00DBDBDB00DADADA00D9D9D900D8D8D800D7D7D700D6D6D600D5D5D500D3D3 + D300D2D2D200D1D1D100D0D0D000CFCFCF00CECECE00CDCDCD00CCCCCC00CBCB + CB00C9C9C900C8C8C800C7C7C700B8B8B80072727200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000BDC0F3003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2005E65E900F4F4FD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00F1F2FD005960E8002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2005F69EA000000000000000000A6DEC00001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF5000ADE4C500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F39E5800EF6C0000EC6C0100EB6B0100EB6B0100F6E7DB000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFCECECE0096969600F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EEEE + EE00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9E900E8E8E800E7E7E700E6E6 + E600E5E5E500E3E3E300E2E2E200E1E1E100E0E0E000DFDFDF00DEDEDE00DDDD + DD00DCDCDC00DBDBDB00D9D9D900D8D8D800D7D7D700D6D6D600D5D5D500D4D4 + D400D3D3D300D2D2D200D1D1D100D0D0D000CFCFCF00CDCDCD00CCCCCC00CBCB + CB00CACACA00C9C9C900C8C8C800B8B8B80075757500000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000008F97EF003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003D49EB00BBBFF400FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076 + EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2006067E900F4F5FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00F1F2FD005960E8002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E100434DE50000000000000000006DCC990001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0072D19D00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F4A96A00F06D0000EF6C0000EC6C0100EB6B0100F5E0CE000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD0D0D00094949400F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEF + EF00EEEEEE00EDEDED00ECECEC00EBEBEB00EAEAEA00E8E8E800E7E7E700E6E6 + E600E5E5E500E4E4E400E3E3E300E2E2E200E1E1E100E0E0E000DFDFDF00DDDD + DD00DCDCDC00DBDBDB00DADADA00D9D9D900D8D8D800D7D7D700D6D6D600D5D5 + D500D4D4D400D3D3D300D1D1D100D0D0D000CFCFCF00CECECE00CDCDCD00CCCC + CC00CBCBCB00CACACA00C9C9C900B7B7B70077777700000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000676FEC003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003D49EB00BBBFF400FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFB + FE007076EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1006268 + E900F5F6FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00EDEEF800585FE7002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE00333CE000000000000000000038BB750001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F003BBF7600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F5B27B00F06D0000F06D0000EF6C0000EC6C0100F5D8C1000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD3D3D30091919100F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9E900E8E8E800E7E7 + E700E6E6E600E5E5E500E4E4E400E3E3E300E1E1E100E0E0E000DFDFDF00DEDE + DE00DDDDDD00DCDCDC00DBDBDB00DADADA00D9D9D900D8D8D800D6D6D600D5D5 + D500D4D4D400D3D3D300D2D2D200D1D1D100D0D0D000CFCFCF00CECECE00CCCC + CC00CBCBCB00CACACA00C9C9C900B5B5B5007A7A7A00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000444FEC003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003D49EB00BBBF + F400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38DE00676EE600F7F7 + FD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00ECEDF800585FE3002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE0000000000000000000DB0570001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F000EAF5700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F6BB8A00F06D0000F06D0000F06D0000EF6C0000F5D2B7000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD5D5D50090909000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EEEEEE00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9E900E8E8 + E800E6E6E600E5E5E500E4E4E400E3E3E300E2E2E200E1E1E100E0E0E000DFDF + DF00DEDEDE00DDDDDD00DBDBDB00DADADA00D9D9D900D8D8D800D7D7D700D6D6 + D600D5D5D500D4D4D400D3D3D300D2D2D200D0D0D000CFCFCF00CECECE00CDCD + CD00CCCCCC00CBCBCB00CACACA00B4B4B4007D7D7D00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003D49 + EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FBFBFE007076EA002F38DE002F38DE00686EE500F3F4F900FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00EDEE + F800585FE3002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE00B7BCF100DCF2E70000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F00DDF0E5000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F5B57E00F06D0000F06D0000F06D0000F06D0000F9DCC4000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD7D7D7008D8D8D00F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000EFEFEF00EEEEEE00EDEDED00EBEBEB00EAEAEA00E9E9E900E8E8 + E800E7E7E700E6E6E600E5E5E500E4E4E400E3E3E300E2E2E200E0E0E000DFDF + DF00DEDEDE00DDDDDD00DCDCDC00DBDBDB00DADADA00D9D9D900D8D8D800D7D7 + D700D6D6D600D4D4D400D3D3D300D2D2D200D1D1D100D0D0D000CFCFCF00CECE + CE00CDCDCD00CCCCCC00CBCBCB00B2B2B20081818100000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFC5C7F8003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FBFBFE007076EA006B71E700F3F4F900FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F2FD00585F + E7002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE00848BEA00B2E5CA0000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F00B2E2CA000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F3A96C00F06D0000F06D0000F06D0000F06D0000FAE3D1000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFD9D9D9008B8B8B00F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F1F1F100EFEFEF00EEEEEE00EDEDED00ECECEC00EBEBEB00EAEAEA00E9E9 + E900E8E8E800E7E7E700E6E6E600E4E4E400E3E3E300E2E2E200E1E1E100E0E0 + E000DFDFDF00DEDEDE00DDDDDD00DCDCDC00DBDBDB00D9D9D900D8D8D800D7D7 + D700D6D6D600D5D5D500D4D4D400D3D3D300D2D2D200D1D1D100CFCFCF00CECE + CE00CDCDCD00CCCCCC00CBCBCB00B1B1B10084848400000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFAAAFF6003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003D49EB00BABEF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FBFBFE00FAFAFD00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EEEFFD00555CE7002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE005E67E50091DBB30000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0092D8B2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F3A15B00F06D0000F06D0000F06D0000F06D0000FBECDE000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFDCDCDC0089898900F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000EFEFEE00E3D7CF00D3BBA900C49F8400BD91 + 7200BC8F6F00BA8C6B00B98A6800B8886600B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8886500B8886500B888 + 6500B8886500B8886500B8886500B8886500B8886500B8876500B8876500B787 + 6500B7876400B7876400B7876400B7876400B7876400B7876400B7876400B786 + 6400B7866400B6866300B6856100B5835F00B4825E00B4815C00B5856200B98D + 6E00BC957900BF9D8500C3A69200CCC0B800D2D2D200D1D1D100D0D0D000CFCF + CF00CECECE00CDCDCD00CCCCCC00B0B0B00086868600000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF9097F4003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F2FD005960E8002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1003039DF006D76EA0071D19D0000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F001BB46200A6E0C100F0FAF400FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1FBF500ABE5C50024BA690000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0074CE9D000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F1934400F06D0000F06D0000F06D0000F06D0000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FFDEDEDE0088888800F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000ECE9E700C39C8000B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B9907200CEC9C500D1D1D100D0D0 + D000CFCFCF00CECECE00CCCCCC00AFAFAF0087878700000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF7983F2003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F1F2FD005960E8002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2003039E3003743EB006B73EC0053C7890000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0026B86900E7F4ED00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDF9F30024BA + 690000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0055C587000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000EE761400F06D0000F06D0000F06D0000EE791800000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF85858500F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000CDAF9900B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B6886600D0CFCE00D0D0 + D000CFCFCF00CECECE00CDCDCD00AEAEAE008B8B8B00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF6972F0003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003D49EB00BBBFF400FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F1F2FD005960E8002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2003039E3003743EC003946EF005B64EF003FC07A0000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F00AAE1C400FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ABE5 + C50000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500042C17C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F6E6D800F2C19900F2C19900F7E5D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FBECDE00F06D0000F06D0000F06D0000F06D0000F18D3D00000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF83838300F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000B7866300B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800C7B5A800D1D1 + D100D0D0D000CFCFCF00CECECE00ACACAC008D8D8D00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF5A65EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003D49EB00BBBFF400FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00F1F2FD005960E8002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2003039 + E3003743EC003946EF003946EF004B55EE002BBB6C0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000F0FAF400FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0FA + F50000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF50002EBC6D000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F4AE7600E96B0000EB6B0100EB6B0100E86B0200F0AF7800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F8CEAB00F06D0000F06D0000F06D0000F06D0000F4A56400000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF80808000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000EBE7E500B37E5800B37E5800B4805A00B37F5900B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800C3A99600D2D2 + D200D0D0D000CFCFCF00CECECE00ABABAB0091919100000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF4A57EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003D49EB00BBBF + F400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00F1F2FD005960E8002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2003039E3003743 + EC003946EF003946EF003946EF003F4CED0019B4600000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF50001BB661000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F4A2 + 6100F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100F2C197000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F3A96C00F06D0000F06D0000F06D0000F06D0000F7C49B00000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF77777700F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E2D6CE00B37E5800B5825D00B8876300B7866200B7856100B684 + 6000B6835F00B5825D00B5815C00B4805B00B4805A00B37F5900B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800C5AE9E00D2D2 + D200D1D1D100D0D0D000CFCFCF00A3A3A3009D9D9D00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF434FEE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003D49 + EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00EDEE + F800585FE7002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2003039E3003743EC003946 + EF003946EF003946EF003946EF003D4AEC000EB2580000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500010B15A000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F3A56200F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB822D000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000ED781700F06D0000F06D0000F06D0000F06D0000FBE9DB00000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF72727200EBEBEB00F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000D9C5B700B37E5800B8876300BC8E6C00BB8D6B00BB8C6A00BA8B + 6900BA8A6800B9896700B9886500B8876400B8866300B7866200B7856100B684 + 5F00B5835E00B5825D00B4815B00B4805B00B37F5900B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E + 5800B37E5800B37E5800B37E5800B37E5800B37E5800B37E5800C8B6A900D3D3 + D300D2D2D200D1D1D100D0D0D0009B9B9B00ADADAD00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3E4BED003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00E9EAF800545B + E2002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2003039E3003743EC003946EF003946 + EF003946EF003946EF003946EF003B48EC0008B0530000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500009AF55000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F3A56200F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100E76D05000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F4D1 + B500EC6C0100EF6C0000F06D0000F06D0000EF7C1C0000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF7E7E7E00E0E0E000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000D5BFAF00B37E5800BD8F6F00C3997B00C2987A00C2977900C196 + 7800C0957600C0947600C0947400BF937300BE927200BE917100BD906F00BD8F + 6F00BC8E6E00BC8D6C00BB8C6B00BB8B6A00BA8A6900BA8A6800B9896700B988 + 6500B8876400B8866300B7856200B7846100B6836000B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B6835F00B683 + 5F00B6835F00B6835F00B6835F00B6835F00B4805B00B37E5800CEC4BD00D3D3 + D300D2D2D200D1D1D100D0D0D00091919100BCBCBC00000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3945EC003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003D49EB00BBBFF400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00EAEBF800545BE2002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1003039E3003743EC003946EF003946EF003946 + EF003946EF003946EF003946EF003945EC0002AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500002AE4F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F3A56200F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B01000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000EFA0 + 5F00EB6B0100EC6C0100EF6C0000F06D0000F4A4630000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF89898900D4D4D400F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000D6C1B100B37E5800C2977900C9A48900C8A38800C8A28700C7A1 + 8600C7A18500C6A08400C69F8300C59E8200C59D8100C49C7F00C49B7E00C39B + 7D00C39A7C00C2997B00C2987A00C1977900C1967800C0957600C0957600BF94 + 7500BF937300BE927200BE917100BD907000BD906F00BC8F6E00BC8E6D00BB8D + 6C00BB8C6A00BA8B6900BA8B6900B98A6700B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B9896600B9896600B9896600B989 + 6600B9896600B9896600B9896600B9896600B5815C00B37E5800D3D1D000D4D4 + D400D3D3D300D2D2D200D1D1D1008A8A8A00C8C8C800000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3945EC003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE004953E900F2F2F900FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008D92EE002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE003039DF003743EB003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EC0002AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500002AE4F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F4A76800F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C01000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000E96F + 0900EB6B0100EB6B0100EC6C0100EF6C0000F9D8BD0000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF97979700C9C9C900F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000D8C3B400B37E5800C69F8200CFAF9700CFAE9600CFAD9500CEAC + 9400CEAB9300CDAB9200CDAA9100CCA99000CCA88F00CBA88E00CBA78D00CAA6 + 8C00CAA58B00C9A48900C9A48900C8A38800C8A28700C7A18500C7A08400C69F + 8300C69F8300C69E8100C59D8000C59C7F00C49B7E00C49B7D00C39A7C00C399 + 7B00C2987A00C2977900C1967800C1967700C0957600C0947500BF937400BF92 + 7300BE927100BE917100BE907000BD8F6F00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00BD8F + 6E00BD8F6E00BD8F6E00BD8F6E00BD8F6E00B5815C00B7886700D6D6D600D5D5 + D500D4D4D400D3D3D300D2D2D20082828200D5D5D500000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3E4AEC003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF004751ED00D9DAF900FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE003039DF003743E7003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003F4BED0008AF520000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500009AF55000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F4A76800F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F3A96D00EC6C + 0100EB6B0100EB6B0100EB6B0100EB7819000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FFAEAEAE00B2B2B200F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000D9C5B700B37E5800CAA68B00D5B8A400D5B7A300D4B6A100D4B5 + A000D3B5A000D3B49F00D2B39E00D2B39D00D1B29B00D1B19B00D1B09A00D0B0 + 9900D0AF9800CFAE9700CFAD9600CEAD9500CEAC9400CDAB9300CDAA9200CCA9 + 9100CCA89000CCA88F00CBA78E00CBA68D00CAA68C00CAA58B00C9A48A00C9A3 + 8900C8A38800C8A28700C7A18600C7A08500C69F8400C69F8300C69E8200C59D + 8100C59C8000C49B7F00C49B7E00C39A7D00C3997C00C2997B00C2987A00C197 + 7900C1967800C1967700C0957600C0947500C0947500C0947500C0947500C094 + 7500C0947500C0947500C0947500C0947500C0947500C0947500C0947500C094 + 7500C0947500C0947500C0947500C0947500C0947500C0947500C0947500C094 + 7500C0947500C0947500C0947500C0947500C0947500C0947500C0947500C094 + 7500C0947500C0947500C0947500C0947500C0947500C0947500C0947500C094 + 7500C0947500C0947500C0947500C0947500C0947500C0947500C0947500C094 + 7500C0947500C0947500C0947500C0947500B37F5900BD977B00D6D6D600D5D5 + D500D4D4D400D3D3D300D2D2D20074747400000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF434EE9003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF00434EEC00D6D7F900FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076 + EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1003039DF003743E7003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF004450ED000EAF570000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500010B15A000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F3A36300F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000EE700700EF6C + 0000EC6C0100EB6B0100EB6B0100F0AC75000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FFCACACA009A9A9A00F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000DAC7B900B37E5800CEAC9500DAC1AF00DAC1AF00D9C0AE00D9BF + AD00D8BEAC00D8BEAB00D8BDAA00D7BCA900D7BCA800D6BBA700D6BAA600D6BA + A600D5B9A500D5B8A400D4B7A300D4B6A200D3B6A100D3B5A000D3B49F00D2B4 + 9E00D2B39D00D1B29C00D1B29C00D0B19B00D0B09A00CFAF9900CFAE9800CFAE + 9700CEAD9600CEAD9500CDAC9400CDAB9300CCAA9200CCA99100CCA99000CBA8 + 8F00CBA78E00CAA78D00CAA68C00C9A58B00C9A58B00C9A48A00C8A38900C8A2 + 8800C7A18700C7A18600C7A08500C69F8400C69F8300C59E8200C59D8100C49D + 8100C49C8000C39B7F00C39A7E00C39A7D00C39A7D00C39A7D00C39A7D00C39A + 7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A + 7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A + 7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A + 7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A7D00C39A + 7D00C39A7D00C39A7D00C39A7D00C2987A00B37E5800C3A58F00D7D7D700D6D6 + D600D5D5D500D4D4D400C7C7C70074747400000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF4B56EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00434E + EC00D6D7F900FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFB + FE007076EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2003039 + E3003743EB003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF004D58EE0018B25E0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 5000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF50001AB462000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000EFA26200EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F3A56200F06D0000F06D + 0000EF6C0000EC6C0100E76D0500F6E9DD000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF82828200F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000DDCEC200B37E5800D1B19A00E0CABA00DFC9BA00DFC9B900DEC8 + B800DEC7B700DEC7B600DDC6B500DDC5B400DCC5B400DCC4B300DCC3B200DBC3 + B100DBC2B000DAC1AF00DAC1AE00DAC0AD00D9BFAD00D9BEAC00D9BEAB00D8BD + AA00D8BDA900D7BCA800D7BBA700D6BAA600D6BAA600D6B9A500D5B8A400D5B8 + A300D4B7A200D4B6A100D4B6A000D3B59F00D3B49F00D2B49E00D2B39D00D2B3 + 9C00D1B29B00D1B19A00D0B09900D0B09800D0AF9700CFAE9700CFAE9600CEAD + 9500CEAC9400CEAB9300CDAB9200CDAA9100CCAA9100CCA99000CCA88F00CBA7 + 8E00CBA78D00CAA68C00CAA58B00CAA58A00C9A48900C9A38800C8A28700C8A2 + 8700C8A18600C7A18500C7A08400C7A08400C7A08400C7A08400C7A08400C7A0 + 8400C7A08400C7A08400C7A08400C7A08400C7A08400C7A08400C7A08400C7A0 + 8400C7A08400C7A08400C7A08400C7A08400C7A08400C7A08400C7A08400C7A0 + 8400C7A08400C7A08400C7A08400C7A08400C7A08400C7A08400C7A08400C7A0 + 8400C7A08400C7A08400C7A08400C3997C00B37E5800C9B3A400D8D8D800D7D7 + D700D6D6D600D5D5D500B1B1B10092929200000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF5761EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF00434EEC00D6D7 + F900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2003039E3003743 + EC003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF005B66F00029B66A0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 5000F2FBF600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00EBF5 + F00001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF50002DBB6F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000EFA5 + 6800EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F9D5B800ED6C0000F06D0000F06D + 0000F06D0000EF6C0000EF9E5D00000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF76767600E7E7E700F0F0F000F0F0F000F0F0 + F000F0F0F000E7DFD900B37E5800CFAE9700E4D2C500E4D1C400E3D1C300E3D0 + C300E3D0C200E2CFC100E2CEC000E1CEBF00E1CDBE00E1CDBE00E0CCBD00E0CB + BC00E0CABB00DFCABA00DFC9BA00DEC9B900DEC8B800DEC7B700DDC7B600DDC6 + B500DCC5B500DCC5B400DCC4B300DBC4B200DBC3B100DBC2B100DAC2B000DAC1 + AF00DAC0AE00D9C0AD00D9BFAC00D8BFAC00D8BEAB00D8BDAA00D7BDA900D7BC + A800D6BBA700D6BBA700D6BAA600D5B9A500D5B9A400D5B8A300D4B7A300D4B7 + A200D3B6A100D3B6A000D3B59F00D2B49E00D2B39E00D2B39D00D1B29C00D1B2 + 9B00D0B19A00D0B09900D0B09900CFAF9800CFAF9700CEAE9600CEAD9500CEAC + 9500CDAC9400CDAB9300CDAB9200CCAA9100CCA99000CBA99000CBA88F00CBA8 + 8E00CAA78D00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA6 + 8C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA6 + 8C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA68C00CAA6 + 8C00CAA68C00CAA68C00CAA68C00C39A7C00B37E5800CFC2B800D8D8D800D7D7 + D700D6D6D600D5D5D50099999900B2B2B200000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF6771EC003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF00434EEC00D6D7F900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2003039E3003743EC003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF006B74EF003EBC770001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 5000ABE5C500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00A6E0 + C10001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500040C17C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F3A36300EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000EF791700F06D0000F06D0000F06D + 0000F06D0000ED6B0100FAE5D400000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF93939300C6C6C600F0F0F000F0F0F000F0F0 + F000F0F0F000EFEEEE00B4805B00CDAA9100E9DACF00E8D9CE00E8D8CD00E8D8 + CC00E7D7CB00E7D7CB00E7D6CA00BFB1A700AC9F9500AC9E9500AB9E9500AB9E + 9400AB9E9300AA9D9200AA9C9200AA9C9200AA9B9100AA9B9100A99B9000A99A + 8F00A99A8F00A8998E00A8998E00A8988D00A7988C00A7988C00A7978B00A796 + 8A00A7968A00A7958900A6958900A6958900A5958800A5948700A5948600A493 + 8600A4928600A4928500A4928400A4928400A4918300A3908300A3908200A38F + 8100A28F8100A28F8000A28E8000A18E7F00A18D7E00A18C7E00A18C7D00A18C + 7D00A18C7C00A08B7C00A08A7B009F8A7A009F8A7A009F897A009E8979009E89 + 78009E8877009E8777009E8777009E8676009D8675009D8674009D8574009C85 + 74009C8473009C8472009B8371009B8371009B8371009B8270009B826F009A81 + 6F009A806E009A806E009A806E009A806E009A806E009A806E009A806E009A80 + 6E009A806E009A806E009A806E00A88C7700CEAC9300CEAC9300CEAC9300CEAC + 9300CEAC9300CEAC9300CEAC9300C3997C00B37E5800D6D1CD00D9D9D900D8D8 + D800D7D7D700D6D6D60080808000D2D2D200000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF7981EE003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF00434EEC00D6D7F900FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2003039E3003743EC003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF007C82F10052C4870001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 50001CB86300EDF9F300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDF9F3001BB6 + 620001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500055C888000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F4A46300F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F3994F00F06D0000F06D0000F06D0000F06D + 0000F06D0000F4A5650000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FFC9C9C90094949400F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000BD917100C8A38800ECE0D700ECE0D600ECDFD600ECDE + D500EBDED400EBDDD30068625E00000000000000000000000000000000000000 + 0000171717002626260026262600262626002626260026262600262626002626 + 2600262626003434340039393900272727002626260026262600262626002626 + 2600262626002626260026262600262626002626260026262600262626002626 + 2600262626002626260026262600262626002626260026262600262626002626 + 2600262626002626260026262600262626002626260026262600262626002626 + 2600262626002626260026262600262626002626260026262600262626002626 + 2600262626002626260026262600272727002727270027272700272727002727 + 2700262626002626260026262600262626002626260026262600262626002626 + 2600262626002626260026262600252525002525250025252500252525002525 + 25002626260013131300000000000000000030282300CFAF9800D1B19A00D1B1 + 9A00D1B19A00D1B19A00D1B19A00C1977800B5835F00DBDBDB00DADADA00D9D9 + D900D8D8D800C4C4C40077777700000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF9096F3003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE00434EEC00D6D7F900FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2003039E3003743EC003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE00949AF40071D09B0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF50001CB86300ABE5C500F2FBF600FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F2FBF600ADE5C70025BB690000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0074D29E000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F4A96900F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F5AE7400F06D0000F06D0000F06D0000F06D0000F06D + 0000EF7510000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF7A7A7A00E0E0E000F0F0F000F0F0 + F000F0F0F000F0F0F000C7A48B00BF927200F0E6DF00F0E6DE00EFE5DE00EFE5 + DD00EFE4DD00E5DBD40003030300000000000000000000000000000000000000 + 00006F6F6F00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000CACACA00DCDCDC00C3C3C300C1C1C100C1C1C100C1C1C100C1C1 + C100C2C2C200C2C2C200C2C2C200C2C2C200C3C3C300C3C3C300C3C3C300C4C4 + C400C4C4C400C4C4C400C4C4C400C5C5C500C5C5C500C5C5C500C5C5C500C6C6 + C600C6C6C600C6C6C600C6C6C600C7C7C700C7C7C700C7C7C700C7C7C700C8C8 + C800C8C8C800C8C8C800C9C9C900C9C9C900C9C9C900C9C9C900CACACA00CACA + CA00CACACA00CACACA00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CCCCCC00CBCB + CB00CCCCCC00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCB + CB00CBCBCB00CCCCCC00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCB + CB00B8B8B80060606000000000000000000000000000A7908000D4B8A300D4B7 + A300D4B7A200D4B7A200D4B7A200BE917100BC937500DBDBDB00DADADA00D9D9 + D900D8D8D80097979700AFAFAF00000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFAAAFF6003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA00424DE800D4D6F800FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F39E3003743ED003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB00ACB2F50090DAB20000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0095DBB5000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F4A56400F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EF985000EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F6B88600F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F7BF92000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFA9A9A900AEAEAE00F0F0F000F0F0 + F000F0F0F000F0F0F000DECEC300B37E5800E9DBD000F3EBE600F3EBE500F3EA + E400F2EAE400F2EAE30034323000000000000000000000000000000000000000 + 00006F6F6F00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2F200F2F2F200F2F2 + F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F4F4F400F4F4F400F4F4F400F3F3F300F3F3 + F300F3F3F300F3F3F300F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F0F0F000F0F0F000F0F0 + F000DCDCDC0060606000000000000000000015131100CCB5A400DAC1AF00DAC1 + AE00DAC0AE00D9C0AD00D8BDAA00B5815C00CAB2A100DCDCDC00DBDBDB00DADA + DA00D6D6D60076767600000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFC5C7F8003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA004650E800D6D7F500FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00DCDEF700FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007177EA002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1003039E3003743EC003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA00C2C6F400B1E5C80000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F00B1E2C8000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F4A56400F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EE9B570000000000EC6C + 0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F6BF9400ED6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F292 + 4300000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF7B7B7B00DDDDDD00F0F0 + F000F0F0F000F0F0F000F0F0F000C0967800C6A08300F5EFEA00F6F0EC00F5EF + EB00F5EFEA00F5EFEA00EBE4DF00918D8A00716E6C00716E6C006F6C69005754 + 520076767600F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EEEEEE00EDEDED00EDEDED00EDEDED00EDEDED00EDEDED00EDEDED00EDED + ED00EDEDED00EDEDED00EDEDED00EDEDED00EEEEEE00EEEEEE00EEEEEE00EEEE + EE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EDEDED00EDEDED00EEEE + EE00F1F1F100F1F1F100F1F1F100F1F1F100F0F0F000F0F0F000F0F0F000F0F0 + F000DCDCDC006E6D6C006259530072675F00BAA89C00DFCBBB00DFCABA00DFCA + BA00DFC9B900DEC9B900CBA88E00B5846000DAD6D300DDDDDD00DCDCDC00DADA + DA009696960098989800000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFE3E6FB003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE00424DE800D2D3F400FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00A1A6F5003D49EB00BEC2F500FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076 + EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F38DE002F38 + DE003039DF003743EB003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA00E3E5F600DAF2E40000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F00DBEFE4000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F4A96900F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EF9A53000000000000000000EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F0AC + 7600EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000EE7713000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFC2C2C20086868600EBEB + EB00F0F0F000F0F0F000F0F0F000EAE6E200BC8E6E00CFAD9500F3EBE500F8F4 + F100F8F3F000F8F3EF00F7F2EF00F7F2EE00F7F2EE00F7F1EE00F3EDE900BFBA + B6007D7D7D00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000CBCBCB00C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C1C1C100C1C1C100C2C2C200C2C2C200C2C2C200C2C2C200C2C2 + C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2 + C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2C200C2C2 + C200C2C2C200C3C3C300C3C3C300C3C3C300C2C2C200C2C2C200C2C2C200C2C2 + C200C2C2C200C2C2C200C2C2C200C2C2C200C1C1C100C1C1C100C1C1C100C1C1 + C100F1F1F100F0F0F000F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000EFEF + EF00DBDBDB00817E7C00D8C7BC00E5D3C600E5D2C500E5D2C500E4D1C400E4D1 + C400E3D0C200D1B29B00B37F5A00D2C3B800DEDEDE00DDDDDD00DCDCDC00B5B5 + B5007C7C7C00000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000004250ED003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00434E + EC00D4D6F800FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A2A7F7003946EF003945EE003E49EB00C0C4F500FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFB + FE007076EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E1002F38DE002F38DE002F39 + DF003743E8003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB00424FE80000000000000000000BB1550000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F000EAF5700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F4A56400F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F39D5700000000000000000000000000EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000EC914600EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000ED6B0100F9D2B3000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF9F9F9F009C9C + 9C00EDEDED00F0F0F000F0F0F000F0F0F000EDEBE900D4BBAA00BB906F00CDAA + 9200D9BFAB00E1CDBF00E2CFC100E2CFC000E2CEBF00E2CEBF00DECABC00AE9F + 92007C7B7A00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000DCDCDC00D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5D500D5D5 + D500D5D5D500D5D5D500D5D5D500D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D7D7D700D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D5D5D500D5D5D500D5D5D500D5D5D500D5D5 + D500F0F0F000F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00F0F0 + F000DADADA007D797600C7AB9500D3B49E00D2B49D00D2B49D00CEAD9500C69F + 8300BC907000C29E8400D8CFC800E0E0E000DFDFDF00DEDEDE00C9C9C9007575 + 7500DBDBDB00000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000676FF0003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF00434EEC00D6D7 + F900FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00A2A7F6003946EF003946EF003946EF003945EE003E4AEB00C2C5 + F500FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38 + E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38E1003039DF003743 + E7003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE006771EC00000000000000000038BF750000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0039BC7500000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F3A4 + 6500F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F29D560000000000000000000000000000000000EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F9D5B800EE7D2200EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F6BD8F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF9696 + 960085858500D0D0D000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEE + ED00E8E2DD00E6DED800E6DED800E6DED800E6DED800E6DED800E2DAD400B2AC + A7007D7C7C00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F0F0F000F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F3F3F300F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F4F4F400F3F3F300F3F3F300F3F3F300F2F2F200F3F3F300F2F2F200F2F2 + F200F2F2F200F2F2F200F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F0F0 + F000F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00F0F0F000EFEF + EF00DADADA00807E7E00D5CDC700E1D9D300E0D8D200DED6D000DED6D000E1DE + DC00E4E4E400E3E3E300E2E2E200E1E1E100DCDCDC00A1A1A10076767600C4C4 + C400000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000009098F4003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF00434EEC00D5D7F900FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00A2A8F7003946EF003946EF003946EF003946EF003946EF003945EE00404C + EC00C8CCF600FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38DE002F38 + DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2002F38E2002F39E3003743EC003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF009499F30000000000000000006DD0990000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500070CF9B00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000EFA56800EC6C + 0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F39A53000000000000000000000000000000000000000000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F2A05C00F06D0000F06D0000EF6C0000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100F2A6670000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFCCCCCC00808080009D9D9D00C3C3C300D7D7D700EBEBEB00F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000ECECEC00BABA + BA007D7D7D00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F1F1F100F1F1 + F100D4D4D400CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCC + CC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CCCC + CC00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CDCDCD00D8D8D800F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F4F4 + F400F3F3F300F3F3F300F3F3F300F2F2F200F3F3F300F2F2F200F2F2F200F1F1 + F100F2F2F200F1F1F100F1F1F100F1F1F100F1F1F100F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00F0F0F000EFEFEF00EFEF + EF00DADADA0081818100DEDEDE00EAEAEA00E9E9E900E8E8E800E7E7E700E6E6 + E600E5E5E500D7D7D700C3C3C300ADADAD007D7D7D009C9C9C00000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000BCC3F8003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF00434EEC00D6D7F900FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2A7 + F7003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE00404CEC00C9CCF600FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38DE002F38 + DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2002F38E2003039E3003743EC003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF00C1C5F8000000000000000000A7E2C10000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF5000ABE3C400000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFA26400EB6B0100EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F29B5500000000000000000000000000000000000000000000000000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F5B07800EF740E00F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EFA05F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FFBBBBBB009D9D9D008787870075757500808080008585 + 8500858585008585850085858500858585008585850085858500828282006666 + 660075757500F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F0F0F000F1F1F100F1F1 + F100D1D1D100C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7 + C700C7C7C700C8C8C800C8C8C800C8C8C800C8C8C800C8C8C800C8C8C800C8C8 + C800C8C8C800C8C8C800C8C8C800C8C8C800C8C8C800D5D5D500F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F3F3F300F2F2F200F2F2F200F3F3F300F2F2F200F2F2F200F1F1F100F2F2 + F200F1F1F100F1F1F100F1F1F100F1F1F100F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00DADADA006F6F6F007D7D7D00848484008484840084848400828282008181 + 810075757500797979008F8F8F00A6A6A600D5D5D500000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000000000003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF00434EEC00D6D7F900FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00A2A7F7003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE00414DEC00CBCEF600FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38DE002F38 + DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2002F38E2003039E3003743EC003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003845EC000000000000000000000000000000000000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F3A46500EC6C0100EB6B0100EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F39D + 540000000000000000000000000000000000000000000000000000000000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FADFCA00F4A1 + 5E00ED6E0500F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EFA76A00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFB2B2 + B2007B7B7B00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F0F0F000F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200F2F2F200F2F2F200F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F1F1F100F2F2F200F1F1 + F100F1F1F100F1F1F100F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00D9D9D9007E7E7E00D8D8D800000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000000000005963EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF00434EEC00D6D7F900FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00A2A7F7003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE004450EC00D1D3F600FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38DE002F38 + DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38E2002F38 + E2002F38E2002F38E2003039E3003743EC003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF005D69EF000000000000000000000000000000000024B9680000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500029B96B0000000000000000000000000000000000000000000000 + 0000000000000000000000000000F4A56500F06D0000EF6C0000EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F39D54000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C01000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F7D0AF00F4A56400EF7A1A00F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000ED6C0000F4B27C0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC6C6 + C6007C7C7C00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E4E4E400F5F5F500F0F0F000F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2 + F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200F2F2F200F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F2F2 + F200F2F2F200F2F2F200F2F2F200F2F2F200F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00F0F0 + F000F0F0F000EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EEEE + EE00D9D9D90082828200000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF00000000000000009199F4003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE00434EEC00D6D7F900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00A1A6F6003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE004451EC00D2D4F600FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE007076EA002F38 + DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38E2002F38 + E2002F38E2003039E3003743EC003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF00979DF500000000000000000000000000000000006DD0990000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500072D19D0000000000000000000000000000000000000000000000 + 00000000000000000000F3A66600F06D0000F06D0000F06D0000EF6C0000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F39A5300000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100F2B6 + 8400F5B88700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F6B9 + 8700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F5B88700F2B6 + 8400F1B68400F1B68400F1B68400F2B68400F5B88700F6B98700F6B98700F6B9 + 8700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F6B9 + 8700F6B98700F6B98700F5B88700F2B68400F1B68400F1B68400F1B68400F2B6 + 8400F5B88700F6B98700F6B98700F6B98700F6B98700F6B98700F6B98700F6B9 + 8700F6B98700F6B98700F6B98700F6B98700F6B98700F6B58100F4AE7600F0A2 + 6400ED8C3F00E9761500EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE71 + 0C00F8CEAB000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC6C6 + C6007D7D7D00F0F0F000F0F0F000F0F0F000D4D4D400CCCCCC00E9E9E900F0F0 + F000F0F0F000E4E4E400F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2F200F2F2 + F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F3F3F300F2F2F200F2F2 + F200F2F2F200F2F2F200F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00F0F0 + F000EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EEEEEE00EEEE + EE00D9D9D90082828200000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000CACEF9003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA00444FE900D8DAF900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00989FF1003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE004753EC00D7D9F600FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBFBFE006F75 + EA002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F38E2002F38 + E2002F39E3003743ED003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF00CFD1F90000000000000000000000000000000000B6E6CC0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF5000BAE8CE0000000000000000000000000000000000000000000000 + 000000000000F4A76700F06D0000F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EF99510000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F1842A00FBE5 + D400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC9C9 + C9007D7D7D00F0F0F000F0F0F000EAEAEA00AAAAAA00CFCFCF00E4E4E400F0F0 + F000F0F0F000E4E4E400F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2F200F2F2 + F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200F2F2F200F2F2F200F3F3F300F3F3F300F3F3F300F3F3F300F3F3 + F300F4F4F400F3F3F300F3F3F300F3F3F300F3F3F300F2F2F200F2F2F200F2F2 + F200F2F2F200F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F0F0F000F1F1 + F100F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EEEEEE00EEEEEE00EEEE + EE00D9D9D90081818100000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000004652 + ED003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003A45 + E900C7C9F300FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00989EF1003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE004955EC00D9DBF600FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F5F6 + FE004B53E5002F38DE002F38DE002F38DE002F38DE002F38DE002F38E1002F39 + E3003743ED003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF004753ED000000000000000000000000000000000000000000000000000DB0 + 580000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 50000FB159000000000000000000000000000000000000000000000000000000 + 0000F7C49900F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EE9850000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000ED6E0400F5B37C00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC9C9 + C9007D7D7D00F0F0F000F0F0F000F0F0F000B2B2B200C9C9C900E4E4E400F0F0 + F000F0F0F000E4E4E400F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100EAEAEA00E8E8E800E8E8E800E8E8E800E8E8E800E9E9E900E9E9E900E9E9 + E900E9E9E900E9E9E900E9E9E900E9E9E900E8E8E800E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E8E8 + E800E8E8E800E9E9E900E8E8E800E9E9E900E8E8E800E9E9E900E9E9E900E9E9 + E900E8E8E800E8E8E800E8E8E800E8E8E800E8E8E800E7E7E700E8E8E800E7E7 + E700E7E7E700E7E7E700E7E7E700E6E6E600E6E6E600E6E6E600E6E6E600E6E6 + E600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EEEEEE00EEEEEE00EEEEEE00EEEE + EE00D9D9D90081818100000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000000000000000000000868D + F3003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB007B82 + EB00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF009AA0F5003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE004B56ED00DCDE + F700FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00B9BCF5002F38E1002F38DE002F38DE002F38DE002F38DE002F39DF003743 + EC003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF008891F4000000000000000000000000000000000000000000000000005BCA + 8C0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 50005FCA90000000000000000000000000000000000000000000000000000000 + 0000EF8A3600F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EF985000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C + 0000F06D0000F06D0000F06D0000F28E3C00FAE3D00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC9C9 + C9007D7D7D00F0F0F000F0F0F000F0F0F000EFEFEF00E8E8E800F0F0F000F0F0 + F000F0F0F000E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100CCCCCC00C1C1C100C1C1C100C1C1C100C2C2C200C2C2C200C2C2C200C2C2 + C200C2C2C200C2C2C200C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1 + C100C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00C0C0C000C0C0C000C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C1C1C100C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 + C000EFEFEF00EEEEEE00EFEFEF00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEE + EE00D9D9D90081818100000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000000000000000000000C8CC + F9003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE00C6C8 + F300FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF009BA1F6003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE004C58 + ED00DDE0F700FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FDFDFF003E46E4002F38E1002F38DE002F38DE002F39DF003743E8003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF00CCD0F900000000000000000000000000000000000000000000000000B1E5 + C80000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 5000B6E6CC000000000000000000000000000000000000000000000000000000 + 0000EF730F00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF7B1D0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C + 0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C + 0100EF6C0000F1883200F9D4B600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC9C9 + C9007D7D7D00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100E0E0E000DADADA00DADADA00DADADA00DBDBDB00DBDBDB00DBDBDB00DBDB + DB00DADADA00D9D9D900D9D9D900D9D9D900D9D9D900D9D9D900D9D9D900D9D9 + D900D9D9D900D9D9D900D9D9D900D9D9D900D9D9D900D9D9D900D9D9D900D9D9 + D900D9D9D900D9D9D900D8D8D800D8D8D800D7D7D700D7D7D700D6D6D600D6D6 + D600D6D6D600D6D6D600D5D5D500D5D5D500D5D5D500D4D4D400D5D5D500D6D6 + D600D6D6D600D7D7D700D9D9D900D9D9D900D9D9D900D8D8D800D9D9D900DADA + DA00EEEEEE00EFEFEF00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEE + EE00D8D8D80081818100000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00004F5AEF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00F1F2 + FC00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009BA1 + F6003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE004F5AED00E0E1F700FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF006B72EA002F38E2002F38E1002F39DF003743E8003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF00505C + EE00000000000000000000000000000000000000000000000000000000000000 + 000017B55E0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500017B5 + 5E00000000000000000000000000000000000000000000000000000000000000 + 0000F1883100F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F3A56200000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100E86B0200EE96 + 4C00F5D0B3000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFC9C9 + C9007E7E7E00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F1F1F100F1F1F100F2F2F200F2F2F200F2F2F200F2F2F200F1F1 + F100F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEF + EF00EFEFEF00EEEEEE00EEEEEE00EDEDED00EDEDED00ECECEC00ECECEC00EBEB + EB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E9E9E900E8E8E800E8E8 + E800E7E7E700E7E7E700E6E6E600E7E7E700E8E8E800EAEAEA00EDEDED00EEEE + EE00EFEFEF00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEEEE00EDED + ED00D8D8D80081818100000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00009AA1F5003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00FAFA + FE00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009BA1F6003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE00515CEC00E1E2F700FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF007C82ED002F38E2003039E3003743EB003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE009DA4 + F500000000000000000000000000000000000000000000000000000000000000 + 000075D19F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0079D3 + A300000000000000000000000000000000000000000000000000000000000000 + 0000F6BA8B00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F4A463000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000ED6C0000F0883200F1B48000F6E9DD000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCBCB + CB007E7E7E00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100D1D1D100C7C7C700C8C8C800C8C8C800C8C8C800C8C8C800C7C7C700C7C7 + C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7 + C700C7C7C700C7C7C700C7C7C700C7C7C700C7C7C700C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C5C5C500C5C5C500C5C5C500C5C5C500C4C4C400C4C4 + C400C4C4C400C4C4C400C3C3C300C3C3C300C3C3C300C3C3C300C3C3C300C2C2 + C200C2C2C200C2C2C200C2C2C200C1C1C100C1C1C100C1C1C100C1C1C100C0C0 + C000E7E7E700EAEAEA00EDEDED00EEEEEE00EEEEEE00EEEEEE00EDEDED00EEEE + EE00D7D7D70081818100000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000003947EC003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00E4E6 + FC00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009BA1F6003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE00535EED00E3E4F700FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF006E74EB002F39E3003743ED003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003946E8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D9F1E40000AC4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0000A94E00DBF1 + E500000000000000000000000000000000000000000000000000000000000000 + 000000000000F29B5500F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F4A5640000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000ED6C + 0300F0842B00F4A15D00F7C39800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCBCB + CB007E7E7E00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100D6D6D600CECECE00CECECE00CECECE00CECECE00CECECE00CDCDCD00CDCD + CD00CDCDCD00CDCDCD00CDCDCD00CDCDCD00CDCDCD00CDCDCD00CDCDCD00CDCD + CD00CDCDCD00CDCDCD00CDCDCD00CDCDCD00CCCCCC00CCCCCC00CCCCCC00CCCC + CC00CBCBCB00CBCBCB00CBCBCB00CACACA00CACACA00CACACA00CACACA00C9C9 + C900C9C9C900C9C9C900C9C9C900C8C8C800C8C8C800C8C8C800C7C7C700C7C7 + C700C7C7C700C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C5C5C500C6C6 + C600E3E3E300E2E2E200E2E2E200E3E3E300E6E6E600E9E9E900EDEDED00EDED + ED00D8D8D80080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000007983F2003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00B0B4 + F600FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF009BA2F6003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE005560ED00E6E7F700FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FDFDFF004049E5003743ED003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA007A82EE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000047C47F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F004DC283000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F39D5400F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F4A56500000000000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000ED6E0400F5AF + 7600F5AF7600F5AF7600F4AE7600F1AC7500F0AC7600F0AC7600F0AC7600F1AC + 7500F4AE7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF + 7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F4AE7600F1AC + 7500F0AC7600F0AC7600F0AC7600F1AC7500F4AE7600F5AF7600F5AF7600F5AF + 7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF7600F5AF + 7600F5AF7600F5AF7600F4AE7600F1AC7500F0AC7600F0AC7600F0AC7600F1AC + 7500F4AE7600F5AF7600F5AF7600F6B58100F7C49A00F8D1B100FAE0CC000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCBCB + CB007E7E7E00F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100F2F2F200F2F2F200F2F2F200F2F2F200F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDED + ED00EDEDED00EDEDED00ECECEC00ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEA + EA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E7E7E700E6E6 + E600E6E6E600E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3E300E2E2 + E200E2E2E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00E2E2 + E200D1D1D10080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000D5D7F9003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF005E68 + F100FEFEFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF009BA1F6003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE005762ED00E7E8F800FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00B8BBF5003743ED003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA00CFD2F5000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BAE7CE0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F00C6E8D5000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F39E5800F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F4A463000000 + 000000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCBCB + CB007E7E7E00F0F0F000F0F0F000F0F0F000F0F0F000F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100DDDDDD00D6D6D600D6D6D600D6D6D600D5D5D500D4D4D400D4D4D400D4D4 + D400D4D4D400D4D4D400D4D4D400D4D4D400D4D4D400D4D4D400D4D4D400D4D4 + D400D4D4D400D4D4D400D4D4D400D4D4D400D3D3D300D3D3D300D2D2D200D2D2 + D200D2D2D200D2D2D200D2D2D200D1D1D100D1D1D100D0D0D000D0D0D000D0D0 + D000D0D0D000CFCFCF00CFCFCF00CECECE00CECECE00CECECE00CECECE00CECE + CE00CDCDCD00CDCDCD00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CBCBCB00CBCB + CB00E1E1E100E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDE + DE00CECECE0080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000000000006671F0003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF00A7ACF600FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA009AA0F5003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE005963EC00E9EAF800FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EBEC + FC004C57EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE006972EC00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000002FBA6E0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0044C07C00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F39E5800F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F4A4 + 630000000000000000000000000000000000000000000000000000000000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCBCB + CB007F7F7F00F0F0F000F0F0F000F0F0F000F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F1F1F100F2F2 + F200CCCCCC00C2C2C200C2C2C200C2C2C200C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C0C0C000C0C0C000C0C0C000C0C0C000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BCBCBC00BCBCBC00BCBCBC00BCBC + BC00BCBCBC00BBBBBB00BBBBBB00BBBBBB00BBBBBB00BABABA00BABABA00BBBB + BB00E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDE + DE00CDCDCD0080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000CBCFF5003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003C49EF00A8ADF700FDFDFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00ECECF8007D85EF003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE00555FEC00D7D9 + F500FAFAFA00FAFAFA00FAFAFA00FEFEFE00FFFFFF00FFFFFF00CDCFF900525C + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF00CDCFF800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000AAE0C20000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF5000C1E9D300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F39E5800F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F4A56400000000000000000000000000000000000000000000000000EF6C + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC007F7F7F00F0F0F000F0F0F000F0F0F000F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F2F2F200F2F2 + F200F1F1F100EEEEEE00EEEEEE00ECECEC00ECECEC00ECECEC00ECECEC00ECEC + EC00ECECEC00ECECEC00ECECEC00ECECEC00ECECEC00ECECEC00ECECEC00ECEC + EC00EBEBEB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8 + E800E7E7E700E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5E500E4E4 + E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1E100E1E1 + E100E0E0E000E0E0E000DFDFDF00DFDFDF00DFDFDF00DFDFDF00DEDEDE00DEDE + DE00E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDD + DD00CDCDCD0080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000006871EC003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF005C67F200A4A9F700C9CCF900D2D5FA00BBBFF700868D + F100414EEB003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003C48 + EB007980EC00B3B7F100CBCEF400C7CAF300A7ABF4006971F1003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF006C77F00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000033BA700000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FEFEFE00FFFFFF00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500039BE760000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F39D5700F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F4A564000000000000000000000000000000000000000000EC6C + 0100EF6C0000F06D0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC007F7F7F00F0F0F000F0F0F000F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F1F1F100F2F2F200F2F2 + F200E7E7E700E4E4E400E4E4E400E2E2E200E2E2E200E2E2E200E2E2E200E2E2 + E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2E200E2E2E200E1E1E100E1E1 + E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DDDDDD00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDB + DB00DADADA00DADADA00D9D9D900D9D9D900D9D9D900D9D9D900D9D9D900D8D8 + D800D8D8D800D7D7D700D7D7D700D6D6D600D6D6D600D5D5D500D5D5D500D6D6 + D600E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDD + DD00CCCCCC0080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000D0D1F4003844E8003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EC00D5D8FA0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000B3E2C80001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FEFEFE00FFFFFF00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF5000BBE8CF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F39D + 5700F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F4A5640000000000000000000000000000000000EB6B + 0100EC6C0100EF6C0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC007F7F7F00F0F0F000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F1F1F100F2F2F200F2F2F200F2F2 + F200CCCCCC00C2C2C200C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BEBEBE00BEBE + BE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BCBCBC00BCBCBC00BCBCBC00BCBCBC00BCBCBC00BBBBBB00BBBB + BB00BBBBBB00BBBBBB00BABABA00BABABA00BABABA00BABABA00BABABA00BABA + BA00DFDFDF00DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDC + DC00CCCCCC007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000008188EE003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF00878FF3000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000046C07E0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF5000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FEFEFE00FFFFFF0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500053C789000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F39D5700F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F4A56500000000000000000000000000EB6B + 0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F2F2F200F2F2F200F2F2F200F2F2 + F200E5E5E500E1E1E100DFDFDF00DFDFDF00DFDFDF00DFDFDF00DFDFDF00DFDF + DF00DFDFDF00DFDFDF00DFDFDF00DFDFDF00DFDFDF00DFDFDF00DEDEDE00DEDE + DE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADA + DA00DADADA00DADADA00DADADA00DADADA00D9D9D900D9D9D900D8D8D800D8D8 + D800D7D7D700D7D7D700D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D5D5 + D500D5D5D500D4D4D400D4D4D400D3D3D300D3D3D300D2D2D200D2D2D200D2D2 + D200DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDC + DC00CBCBCB007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000000000000000000000000000000000004852E8003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF004652ED00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D1ECDE0004AB500001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF5000F2FBF600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFAFA00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00EFF9F40000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500009AF5500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F3995000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F4A565000000000000000000EB6B + 0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F1F1F100F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200F1F1F100F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDED + ED00EDEDED00EDEDED00ECECEC00ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEA + EA00E9E9E900E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6 + E600E6E6E600E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3E300E3E3 + E300E2E2E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDF + DF00DEDEDE00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDB + DB00CBCBCB007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000ADB2F2003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF00B3B7F700000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000070CD9A0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF5000ABE5C500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00FAFA + FA00FAFAFA00FAFAFA00FAFAFA00A6E0C10000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500089D8AE00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F3995000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F3A6660000000000EC6C + 0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F5F5F500F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200CCCCCC00C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C1C1 + C100C1C1C100C1C1C100C0C0C000C0C0C000C0C0C000C0C0C000BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BEBEBE00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BCBCBC00BCBC + BC00BCBCBC00CBCBCB00E4E4E400E4E4E400E3E3E300E3E3E300E3E3E300E2E2 + E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDE + DE00DEDEDE00DDDDDD00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDB + DB00CACACA007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000626BEC003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF006771F10000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000022B5650001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF50001CB86300EDF9F300FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE + FE00FAFAFA00FAFAFA00E8F4EE001BB4620001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500029B96B0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F3994F00F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F3A66600EF6C + 0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100EF6C0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200D8D8D800D1D1D100D1D1D100D1D1D100D1D1D100D1D1D100D1D1D100D1D1 + D100D1D1D100D0D0D000D0D0D000D0D0D000D0D0D000CFCFCF00CFCFCF00CFCF + CF00CECECE00CECECE00CECECE00CECECE00CDCDCD00CDCDCD00CCCCCC00CCCC + CC00CCCCCC00CCCCCC00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CBCBCB00CACA + CA00CACACA00D3D3D300E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E2E2 + E200E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDE + DE00DDDDDD00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADA + DA00CACACA007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D5D6F5003B47 + E7003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003C48EC00DBDCFA0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000B7E4CB0000A9 + 4E0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF50001CB86300ABE5C500F2FB + F600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F1FAF500AAE1C40025B8680001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AC4F00BFE9D20000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F3994F00F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100EC6C0100ED7009000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDEDED00EDEDED00ECECEC00ECEC + EC00ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8 + E800E8E8E800E7E7E700E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5 + E500E4E4E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1 + E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDD + DD00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADA + DA00CACACA007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000009FA5 + F1003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE00A6ADF6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006ACB + 960001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0076D2A1000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F3994F00F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100EB6B0100E97009000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F1F1F100E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F2F2F200F1F1 + F100F0F0F000F0F0F000F0F0F000F0F0F000F1F1F100F0F0F000F0F0F000EFEF + EF00EFEFEF00EEEEEE00EEEEEE00EDEDED00EDEDED00ECECEC00ECECEC00EBEB + EB00EBEBEB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8 + E800E7E7E700E7E7E700E6E6E600E6E6E600E6E6E600E5E5E500E5E5E500E4E4 + E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1E100E1E1 + E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDD + DD00DCDCDC00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADADA00DADA + DA00CACACA007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000737CED003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA007279 + ED00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00002BB76C0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0035BA + 7300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F3994F00F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100EB6B0100E96F09000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1 + F100F2F2F200E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F2F2F200F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEF + EF00EEEEEE00EEEEEE00EDEDED00EDEDED00ECECEC00ECECEC00EBEBEB00EBEB + EB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7 + E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5E500E5E5E500E4E4E400E4E4 + E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1E100E1E1E100E0E0 + E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDC + DC00DCDCDC00DBDBDB00DBDBDB00DBDBDB00DADADA00DADADA00DADADA00DADA + DA00CACACA007F7F7F00000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000004F59EB003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA004F58EA000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000CCEBDB0009AC540001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0012B05900DDF0 + E500000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F398 + 4E00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000EF6C0000EC6C0100EB6B0100E96F09000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCCCC + CC0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F2F2F200F0F0 + F000F0F0F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EFEFEF00EEEE + EE00EEEEEE00EDEDED00EDEDED00ECECEC00ECECEC00EBEBEB00EBEBEB00EAEA + EA00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7 + E700E6E6E600E6E6E600E5E5E500E5E5E500E5E5E500E4E4E400E4E4E400E3E3 + E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0E000E0E0 + E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDC + DC00DBDBDB00DBDBDB00DBDBDB00DADADA00DADADA00DADADA00DADADA00DADA + DA00C6C6C60080808000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CFD2F6003B47E7003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003B47E800CED0F4000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000A2DDBC0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0000A94E00ABE0C4000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F3984E00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000EF6C0000EC6C0100E96F09000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCDCD + CD0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F1F1F100F0F0 + F000F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EFEFEF00EEEEEE00EEEE + EE00EDEDED00EDEDED00ECECEC00ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEA + EA00E9E9E900E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6 + E600E6E6E600E5E5E500E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3 + E300E2E2E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00E4E4 + E400E8E8E800E6E6E600E4E4E400E3E3E300E1E1E100DEDEDE00DDDDDD00DBDB + DB00DBDBDB00DADADA00DADADA00DCDCDC00DCDCDC00DEDEDE00E1E1E100E0E0 + E000CECECE00A6A6A600000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000A1A7F1003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF00A7ACF500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000006ECC990001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500075D19E00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000F3984E00F06D0000F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000EF6C0000E97009000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCDCD + CD0080808000F1F1F100F1F1F100F1F1F100F1F1F100F1F1F100F2F2F200F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F2F2F200F2F2F200F0F0F000F0F0 + F000D4D4D400CBCBCB00CACACA00CACACA00CACACA00CACACA00CACACA00C9C9 + C900C9C9C900C9C9C900C9C9C900C8C8C800C8C8C800C8C8C800C8C8C800C7C7 + C700C7C7C700C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C5C5C500C5C5 + C500C5C5C500C5C5C500C4C4C400C4C4C400C4C4C400C4C4C400C4C4C400C3C3 + C300C3C3C300C2C2C200C2C2C200C2C2C200C2C2C200C1C1C100C1C1C100D7D7 + D700F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEF + EF00EEEEEE00EEEEEE00EDEDED00EBEBEB00EAEAEA00E8E8E800E6E6E600DBDB + DB00A2A2A200000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000008C94EF003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF008991F40000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000053C5870001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF50004FC5850000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000F3984E00F06D0000F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000ED7009000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCDCD + CD0080808000F1F1F100F1F1F100F1F1F100F1F1F100F2F2F200F2F2F200F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F2F2F200F1F1F100F0F0F000F0F0 + F000D1D1D100C7C7C700C7C7C700C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C5C5C500C5C5C500C5C5C500C5C5C500C4C4C400C4C4C400C4C4C400C4C4 + C400C4C4C400C3C3C300C3C3C300C3C3C300C3C3C300C2C2C200C2C2C200C2C2 + C200C2C2C200C1C1C100C1C1C100C1C1C100C1C1C100C1C1C100C0C0C000C0C0 + C000C0C0C000C0C0C000BFBFBF00BFBFBF00BEBEBE00BEBEBE00BEBEBE00D2D2 + D200F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0 + F000EFEFEF00EDEDED00ECECEC00EAEAEA00E8E8E800E6E6E600DFDFDF00A1A1 + A100000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007A81EE003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF007B84F3000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000043BF7B0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500040C17C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000F3984D00F06D0000F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCDCD + CD0080808000F1F1F100F1F1F100F1F1F100F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F2F2F200F0F0F000F0F0F000F0F0 + F000EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDEDED00EDEDED00EDEDED00ECEC + EC00ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8 + E800E8E8E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5 + E500E4E4E400E4E4E400E3E3E300E3E3E300E3E3E300E2E2E200E2E2E200E1E1 + E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00E3E3 + E300F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EFEF + EF00EEEEEE00ECECEC00EAEAEA00E8E8E800E6E6E600E3E3E300A2A2A2000000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000006E76EC003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF006B74EF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000030BA6E0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF50002DBB6F00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F3984D00F06D0000F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE7109000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCDCD + CD0081818100F1F1F100F1F1F100F1F1F100F2F2F200EFEFEF00F2F2F200F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F0F0F000F0F0F000F0F0F000EFEF + EF00DEDEDE00D7D7D700D7D7D700D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D5D5D500D5D5D500D4D4D400D4D4D400D4D4D400D4D4D400D3D3D300D3D3 + D300D2D2D200D2D2D200D2D2D200D1D1D100D1D1D100D1D1D100D1D1D100D0D0 + D000D0D0D000CFCFCF00CFCFCF00CECECE00CECECE00CECECE00CECECE00CECE + CE00CDCDCD00CDCDCD00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CBCBCB00D4D4 + D400F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EEEE + EE00ECECEC00EAEAEA00E8E8E800E7E7E700E3E3E300A3A3A300000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000626BEC003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF00606AF00000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000026B6680001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500022B8650000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000F2964A00F06D0000F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000EE720D000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCFCF + CF0081818100F1F1F100F1F1F100F2F2F200B6B6B600C1C1C100E3E3E300F2F2 + F200F2F2F200E5E5E500F6F6F600F2F2F200F0F0F000F0F0F000EFEFEF00EFEF + EF00CACACA00C0C0C000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BEBE + BE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BCBCBC00BCBCBC00BCBCBC00BCBCBC00BBBBBB00BBBB + BB00BBBBBB00BBBBBB00BABABA00BABABA00BABABA00BABABA00BABABA00BABA + BA00BABABA00B9B9B900B9B9B900B9B9B900B9B9B900B8B8B800B8B8B800C1C1 + C100F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EEEEEE00ECEC + EC00EAEAEA00E9E9E900E7E7E700E5E5E500A8A8A800DEDEDE00000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005E68 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF00616BF0000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000DEF3E80023B5 + 660001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500024B96800DEF3E80000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000F2964A00F06D + 0000F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F18832000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCFCF + CF0081818100F1F1F100F2F2F200ECECEC00ABABAB00D3D3D300E9E9E900F2F2 + F200F2F2F200E5E5E500F6F6F600F0F0F000F0F0F000EFEFEF00EFEFEF00EEEE + EE00E9E9E900E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3E300E3E3 + E300E2E2E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0E000E0E0E000E0E0 + E000DFDFDF00DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDC + DC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADADA00DADADA00D9D9D900D9D9 + D900D8D8D800D8D8D800D7D7D700D7D7D700D6D6D600D6D6D600D6D6D600D8D8 + D800F0F0F000F0F0F000F0F0F000F0F0F000F0F0F000EEEEEE00ECECEC00EBEB + EB00E9E9E900E7E7E700E5E5E500AEAEAE00D5D5D500000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006E76ED003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF006B74 + EF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000030BA6E0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500032BD + 7100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F296 + 4A00F06D0000F06D0000F06D0000F06D0000F06D0000F06D0000F7C499000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCFCF + CF0081818100F1F1F100F2F2F200F2F2F200CECECE00CDCDCD00EAEAEA00F2F2 + F200F2F2F200E5E5E500F5F5F500F0F0F000EFEFEF00EFEFEF00EEEEEE00EEEE + EE00EDEDED00EDEDED00ECECEC00ECECEC00EBEBEB00EBEBEB00EBEBEB00EAEA + EA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6 + E600E6E6E600E5E5E500E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3 + E300E2E2E200E2E2E200E1E1E100E1E1E100E1E1E100E0E0E000E0E0E000DFDF + DF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDB + DB00F0F0F000F0F0F000F0F0F000F0F0F000EEEEEE00ECECEC00EBEBEB00E9E9 + E900E7E7E700E5E5E500B6B6B600CBCBCB00000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007A82EF003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB00777EF1000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000044C07C0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0040C07A000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F39E5A00F06D0000F06D0000F06D0000ED6C0000F3A96C00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCFCF + CF0081818100F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200E5E5E500F4F4F400EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDED + ED00D7D7D700CFCFCF00CFCFCF00CECECE00CECECE00CECECE00CECECE00CECE + CE00CDCDCD00CDCDCD00CCCCCC00CCCCCC00CCCCCC00CCCCCC00CBCBCB00CBCB + CB00CACACA00CACACA00CACACA00CACACA00CACACA00C9C9C900C9C9C900C9C9 + C900C9C9C900C8C8C800C8C8C800D3D3D300E0E0E000E0E0E000DFDFDF00DFDF + DF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDB + DB00EFEFEF00F0F0F000F0F0F000EEEEEE00EDEDED00EBEBEB00E9E9E900E7E7 + E700E5E5E500BFBFBF00C2C2C200000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008E96F0003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA008990EF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000055C5870001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F004EC28500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FADCC400F6B88500F6B88500FAE1CD0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFCFCF + CF0081818100F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2 + F200F2F2F200E4E4E400F4F4F400EFEFEF00EEEEEE00EEEEEE00EDEDED00EDED + ED00CACACA00BFBFBF00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBEBE00BEBE + BE00BEBEBE00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BCBCBC00BCBCBC00BCBC + BC00BCBCBC00BCBCBC00BBBBBB00BBBBBB00BBBBBB00BBBBBB00BABABA00BABA + BA00BABABA00BABABA00BABABA00CBCBCB00DFDFDF00DFDFDF00DFDFDF00DEDE + DE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADA + DA00EDEDED00F0F0F000EFEFEF00EDEDED00EBEBEB00E9E9E900E7E7E700E6E6 + E600C6C6C600B7B7B700000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000A1A7F1003946E7003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003B47E800A2A8F10000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000006ECC990001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0071CD9B0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D10081818100F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F1F1 + F100EFEFEF00E4E4E400F4F4F400EEEEEE00EEEEEE00EDEDED00EDEDED00ECEC + EC00ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E9E9 + E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5 + E500E4E4E400E4E4E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1 + E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDFDF00DFDFDF00DEDEDE00DEDE + DE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADA + DA00ECECEC00EFEFEF00EDEDED00EBEBEB00E9E9E900E8E8E800E6E6E600CDCD + CD00B0B0B000000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D1D5F600515BEA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF004F58EE00CFD2F8000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000A3DDBE000AAC550001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500008B053009FDEBB000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D10081818100F2F2F200F2F2F200F2F2F200F2F2F200F2F2F200F1F1F100EFEF + EF00EFEFEF00E3E3E300F4F4F400EDEDED00EDEDED00EDEDED00ECECEC00ECEC + EC00EBEBEB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E9E9E900E8E8 + E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5E500E4E4 + E400E4E4E400E3E3E300E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1 + E100E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DEDEDE00DDDD + DD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADADA00DADA + DA00EDEDED00EDEDED00EBEBEB00EAEAEA00E8E8E800E6E6E600D5D5D500A9A9 + A900000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007079ED003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF00727CF10000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CCEBDB0029B66A0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF50002CBA6D00D3F0DF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D10081818100F2F2F200F2F2F200F2F2F200F1F1F100F0F0F000EFEFEF00EFEF + EF00EEEEEE00E3E3E300F3F3F300EDEDED00EDEDED00ECECEC00ECECEC00EBEB + EB00EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8E800E8E8 + E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5E500E4E4E400E4E4 + E400E3E3E300E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1E100E0E0 + E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DDDD + DD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADADA00DADADA00DADA + DA00ECECEC00ECECEC00EAEAEA00E8E8E800E6E6E600DADADA00A4A4A4000000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000A4A9 + F1003C47E7003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003947 + EC009BA1F5000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000075CE + 9E0001AA4E0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AC + 4F0065CD94000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D10080808000F1F1F100F0F0F000F0F0F000F0F0F000EFEFEF00EFEFEF00EEEE + EE00EEEEEE00E3E3E300F3F3F300EDEDED00ECECEC00ECECEC00EBEBEB00EBEB + EB00EAEAEA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7 + E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5E500E4E4E400E4E4E400E3E3 + E300E3E3E300E2E2E200E2E2E200E2E2E200E1E1E100E1E1E100E0E0E000E0E0 + E000DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DDDDDD00DCDC + DC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADADA00DADADA00DADADA00DADA + DA00EBEBEB00EAEAEA00E8E8E800E6E6E600DEDEDE00A0A0A000000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D5D6F500626BEC003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF005E67EF00D7DA + FA00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B7E4CB0021B4640001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500023B66700BCE8 + D000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D1007F7F7F00F1F1F100F0F0F000F0F0F000EFEFEF00EFEFEF00EEEEEE00EEEE + EE00EDEDED00E3E3E300F2F2F200EDEDED00ECECEC00EBEBEB00EBEBEB00EAEA + EA00EAEAEA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E7E7 + E700E6E6E600E6E6E600E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3 + E300E2E2E200E2E2E200E1E1E100E1E1E100E1E1E100E0E0E000E0E0E000DFDF + DF00DFDFDF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DCDC + DC00DBDBDB00DBDBDB00DADADA00DADADA00DADADA00DADADA00DADADA00DADA + DA00EAEAEA00E8E8E800E6E6E600E1E1E100A2A2A200000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000ADB1F2004651E8003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003F4CED00A3A8F600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000070CD9A0003AA500001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500004AE510075D19F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D10080808000F0F0F000F0F0F000EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDED + ED00EDEDED00E2E2E200F2F2F200ECECEC00EBEBEB00EBEBEB00EAEAEA00EAEA + EA00E9E9E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6 + E600E6E6E600E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3E300E2E2 + E200E2E2E200E1E1E100E1E1E100E1E1E100E0E0E000E0E0E000DFDFDF00DFDF + DF00DEDEDE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DCDCDC00DBDB + DB00DBDBDB00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00DCDC + DC00E8E8E800E7E7E700E3E3E300A2A2A200000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008B92EF003944E8003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003844EB007983F2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D4EDDE0049C17F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0043C27D00D2EFDF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D1007F7F7F00F0F0F000EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDEDED00EDED + ED00ECECEC00E2E2E200F2F2F200ECECEC00EBEBEB00EAEAEA00EAEAEA00E9E9 + E900E9E9E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5 + E500E5E5E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2 + E200E1E1E100E1E1E100E0E0E000E0E0E000E0E0E000DFDFDF00DFDFDF00DEDE + DE00DEDEDE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DBDB + DB00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00DDDD + DD00E7E7E700E4E4E400A6A6A600000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000D0D1F4006972EC003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003844E7007279ED00D1D5F600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B3E2C80031BA710000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0032B97000B3E3C900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD1D1 + D1007F7F7F00EFEFEF00EFEFEF00EEEEEE00EEEEEE00EDEDED00EDEDED00ECEC + EC00ECECEC00E2E2E200F2F2F200EBEBEB00EAEAEA00EAEAEA00E9E9E900E9E9 + E900E8E8E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5 + E500E5E5E500E4E4E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1 + E100E1E1E100E0E0E000E0E0E000E0E0E000DFDFDF00DFDFDF00DEDEDE00DEDE + DE00DDDDDD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DBDBDB00DADA + DA00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00DFDF + DF00E5E5E500ACACAC00D9D9D900000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000C8CB + F5006671F0003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB003945EE003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003944EB007781 + ED00D5D6F5000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000AAE0 + C2002FBA6E0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0030BA + 6E00ABE0C4000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD2D2 + D20080808000EFEFEF00EEEEEE00EEEEEE00EDEDED00EDEDED00ECECEC00ECEC + EC00EBEBEB00E2E2E200F1F1F100EBEBEB00E9E9E900E9E9E900E9E9E900E8E8 + E800E8E8E800E7E7E700E7E7E700E6E6E600E6E6E600E5E5E500E5E5E500E4E4 + E400E4E4E400E4E4E400E3E3E300E3E3E300E2E2E200E2E2E200E1E1E100E1E1 + E100E0E0E000E0E0E000DFDFDF00DFDFDF00DFDFDF00DEDEDE00DEDEDE00DDDD + DD00DDDDDD00DCDCDC00DCDCDC00DBDBDB00DBDBDB00DADADA00DADADA00DADA + DA00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00DADADA00D0D0 + D000B3B3B300D0D0D000000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D5D7F9007A82F2003947EC003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003945 + EE003945EB003945EA003945EA003945EA003945EB003945EE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003947EC008087F200DDDFFA000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C2E9D4004BC5810000AC4F0000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AE + 4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF50003ABF7600B1E5C8000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFDBDB + DB0083838300A0A0A000A0A0A0009F9F9F009F9F9F009F9F9F009F9F9F009F9F + 9F009F9F9F00B5B5B500C7C7C700A1A1A1009D9D9D009D9D9D009D9D9D009D9D + 9D009C9C9C009C9C9C009B9B9B009B9B9B009B9B9B009B9B9B009A9A9A009A9A + 9A009A9A9A009999990099999900999999009999990098989800989898009797 + 9700979797009797970097979700979797009696960096969600959595009595 + 9500959595009595950095959500959595009494940094949400949494009494 + 9400949494009494940094949400949494009494940094949400949494009F9F + 9F00C4C4C400000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000A1A8F600505BEE003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003945EE003945EB003945EA003945EA003945EA003945EB003945EE003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003945EE003945EB003945EA003945 + EA003945EA003945EB003945EE003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF004C58EE00939AF4000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D9F1E40076D2A10016B35E0000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC + 4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500016B35E006DD09900D3F0DF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FFBDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD + BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00CBCB + CB00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000C8CCF900858E + F3004652ED003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003945EE003945EB003945EA003945EA003945EA003945EB003945 + EE003946EF003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003945EE003945EB003945 + EA003945EA003945EA003945EB003945EE003946EF003946EF003946EF004854 + ED00878FF300CACEF90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000B2E5CA005CCA + 8E000DB0580000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC4F0000AE + 4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC4F0001AC + 4F0001AC4F0001AC4F0001AC4F0000AE4F0000AF500000AF500000AF50000EB2 + 58005DCA8F00B3E5CB0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000CACEF9009299F3005964EF003946EF003946EF003946EF003946 + EF003946EF003946EF003945EE003945EB003945EA003945EA003945EA003945 + EB003945EE003946EF003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003945EE003945 + EB003945EA003945EA003945EA003945EB005A64EF00949AF400CCD0F9000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000B6E6CC006DD0990025B9670000AF500000AF500000AF500000AF + 500000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC4F0001AC + 4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AE4F0001AC + 4F0001AC4F0001AC4F0001AC4F0001AC4F0026B868006FD09B00B7E7CC000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFC2F8009098F400676F + F000434FEE003946EF003946EF003945EE003945EB003945EA003945EA003945 + EA003945EB003945EE003946EF003946EF003946EF003946EF003946EF003946 + EF003946EF003946EF003946EF003946EF003946EF003946EF003946EF00424F + EC00676FEC008F95EF00BDC0F300000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000A8E2C2006DD0990038BF + 75000CB0570000AF500000AF500000AE4F0001AC4F0001AC4F0001AC4F0001AC + 4F0001AC4F0000AE4F0000AF500000AF500000AF500000AF500000AF500000AF + 500000AF500000AF500000AF500000AF500000AF500000AF500000AF50000CAF + 560038BB75006DCC9900A6DEC000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000E5E7FB00C5C7F800AAAFF6009096F3007981EE006771EC005963 + EA004B55EA00444FE800404BEC003946EF003946EF003F4CED004450ED004B55 + EE005964EF006872F1007A82F2009199F400AAAFF600C4C8F800000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000DCF2E700B2E5CA0091DBB30071D09B0052C487003FBD77002AB7 + 6A0018B25E0010AE59000AAE550000AF500000AF50000AAE560010B15A0018B4 + 5E002BBB6C003EC1780054C8890071D19D0091DBB300B3E5CB00DCF2E7000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF424D3E000000000000003E000000 + 2800000000020000000100000100010000000000004000000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFF800001FFFFFFFFFFFFF + FFFFFFFFFFFFF800001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000FFFFFFFFFFFF + FFFFFFFFFFFF80000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF00000007FFFFFFFFFFFFFFFFFFFFFFF8000000001FFFFFFFFFFF + FFFFFFFFFFF8000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF80000000000FFFFFFFFFFFFFFFFFFFFFC00000000003FFFFFFFFFF + FFFFFFFFFFC00000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000000000000000007FFFFFFFFFFFFFFF0000000000007FFFFFFFFF + FFFFFFFFFF0000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000000000000000007FFFFFFFFFFFFFF80000000000001FFFFFFFFF + FFFFFFFFF80000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000000000000000007FFFFFFFFFFFFFE000000000000007FFFFFFFF + FFFFFFFFE000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF00000000000000000000FFFFFFFFFFFFFF8000000000000001FFFFFFFF + FFFFFFFF8000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF00000000000000000000FFFFFFFFFFFFFF00000000000000007FFFFFFF + FFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF00000000000000000000FFFFFFFFFFFFFC00000000000000003FFFFFFF + FFFFFFFC00000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF80000000000000000000FFFFFFFFFFFFF000000000000000000FFFFFFF + FFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF80000000000000000000FFFFFFFFFFFFE0000000000000000003FFFFFF + FFFFFFE0000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF80000000000000000000FFFFFFFFFFFFC0000000000000000001FFFFFF + FFFFFF80000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF80000000000000000001FFFFFFFFFFFF00000000000000000000FFFFFF + FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF80000000000000000001FFFFFFFFFFFE000000000000000000003FFFFF + FFFFFE000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFC0000000000000000001FFFFFFFFFFFC000000000000000000001FFFFF + FFFFFC000000000000000000003FFFFFFFFFFFFFFFFFFFFF8000003FFFFFFFFF + FFFFFFC0000000000000000001FFFFFFFFFFF8000000000000000000000FFFFF + FFFFF8000000000000000000001FFFFFFFFFFFFFFFFFFFFF00000001FFFFFFFF + FFFFFFC0000000000000000001FFFFFFFFFFF00000000000000000000007FFFF + FFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFE000000003FFFFFFF + FFF000000000000000000000000FFFFFFFFFE00000000000000000000003FFFF + FFFFC00000000000000000000003FFFFFFFFFFFFFFFFFFFC0000000007FFFFFF + FF8000000000000000000000000007FFFFFFC00000000000000000000001FFFF + FFFFC00000000000000000000003FFFFFFFFFFFFFFFFFFFC0000000001FFFFFF + FF0000000000000000000000000001FFFFFF800000000000000000000000FFFF + FFFF800000000000000000000001FFFFFFFFFFFFFFFFFFFC0000000000FFFFFF + FE0000000000000000000000000001FFFFFF0000000000000000000000007FFF + FFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFE00000000003FFFFF + FE0000000000000000000000000000FFFFFE0000000000000000000000003FFF + FFFE0000000000000000000000007FFFFFFFFFFFFFFFFFFF00000000001FFFFF + FC0000000000000000000000000000FFFFFC0000000000000000000000003FFF + FFFC0000000000000000000000003FFFFFFFFFFFFFFFFFFF800000000007FFFF + FC0000000000000000000000000000FFFFF80000000000000000000000001FFF + FFF80000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFC0003FFFF + FC00000000000000000000000000007FFFF80000000000000000000000000FFF + FFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFC001FFFF + FC00000000000000000000000000007FFFF000000000000000000000000007FF + FFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFF + FC00000000000000000000000000007FFFE000000000000000000000000007FF + FFE000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFC007FFF + F800000000000000000000000000007FFFC000000000000000000000000003FF + FFC000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFF + F800000000000000000000000000007FFFC000000000000000000000000001FF + FFC000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFC01FFF + F800000000000000000000000000007FFF8000000000000000000000000001FF + FF8000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFE01FFF + F800000000000000000000000000007FFF8000000000000000000000000000FF + FF0000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFF + F800000000000000000000000000007FFF0000000000000000000000000000FF + FF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF807FF + F800000000000000000000000000007FFE00000000000000000000000000007F + FE00000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFC07FF + F800000000000000000000000000007FFE00000000000000000000000000003F + FE00000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFE03FF + F800000000000000000000000000007FFC00000000000000000000000000003F + FC00000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FF + F800000000000000000000000000007FFC00000000000000000000000000001F + FC00000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FF + F800000000000000000000000000007FF800000000000000000000000000001F + F800000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81FF + F800000000000000000000000000007FF800000000000000000000000000001F + F800000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF80FF + F800000000000000000000000000007FF800000000000000000000000000000F + F000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0FF + F800000000000000000000000000007FF000000000000000000000000000000F + F000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFC07F + F800000000000000000000000000007FF0000000000000000000000000000007 + F000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFE07F + F800000000000000000000000000007FE0000000000000000000000000000007 + E0000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFE07F + F800000000000000000000000000007FE0000000000000000000000000000007 + E0000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFF07F + F800000000000000000000000000007FE0000000000000000000000000000003 + E0000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F + F800000000000000000000000000007FC0000000000000000000000000000003 + C0000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F + F800000000000000000000000000007FC0000000000000000000000000000003 + C0000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F + F800000000000000000000000000007FC0000000000000000000000000000003 + C0000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFF83F + F800000000000000000000000000007FC0000000000000000000000000000001 + C0000000000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFF83F + F800000000000000000000000000007F80000000000000000000000000000001 + 80000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F80000000000000000000000000000001 + 80000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F80000000000000000000000000000001 + 80000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F80000000000000000000000000000001 + 80000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F80000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF81F + F800000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF83F + F800000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF83F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFF87FFFFFFFFFFFFFFFFFFFF03F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFF03FFFFFFFFFFFFFFFFFFFF03F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFE01FFFFFFFFFFFFFFFFFFFF03F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFC01FFFFFFFFFFFFFFFFFFFF03F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFF801FFFFFFFFFFFFFFFFFFFE07F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFF001FFFFFFFFFFFFFFFFFFFE07F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFE001FFFFFFFFFFFFFFFFFFFE07F + FC00000000000000000000000000007F00000000000000000000000000000000 + 00000000000000000000000000000000FFFFFC001FFFFFFFFFFFFFFFFFFFC0FF + FC0000000000000000000000000000FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFFF8001FFFFFFFFFFFFFFFFFFFC0FF + FC0000000000000000000000000000FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFFF0001FFFFFFFFFFFFFFFFFFF80FF + FE0000000000000000000000000000FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFFE0001FFFFFFFFFFFFFFFFFFF01FF + FE0000000000000000000000000000FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFFC0001FFFFFFFFFFFFFFFFFFF01FF + FE0000000000000000000000000000FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFF80001FFFFFFFFFFFFFFFFFFE03FF + FE0000000000000000000000000001FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFF00001FFFFFFFFFFFFFFFFFFC07FF + FF0000000000000000000000000001FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFE00001FFFFFFFFFFFFFFFFFF807FF + FF0000000000000000000000000003FF00000000000000000000000000000000 + 00000000000000000000000000000000FFFC00201FFFFFFFFFFFFFFFFFF00FFF + FF8000000000000000000000000003FF00000000000000000000000000000000 + 00000000000000000000000000000000FFF800601FFFFFFFFFFFFFFFFFE01FFF + FF8000000000000000000000000007FF80000000000000000000000000000001 + 80000000000000000000000000000001FFF000E01FFFFFFFFFFFFFFFFFC01FFF + FFC000000000000000000000000007FF80000000000000000000000000000001 + 80000000000000000000000000000001FFE001E01FFFFFFFFFFFFFFFFF003FFF + FFE00000000000000000000000000FFF80000000000000000000000000000001 + 80000000000000000000000000000001FFC003E01FFFFFFFFFFFFFFFFE007FFF + FFF00000000000000000000000003FFF80000000000000000000000000000001 + 80000000000000000000000000000001FF8007E01FFFFFFFFFFFFFFFF800FFFF + FFFC0000000000000000000000007FFFC0000000000000000000000000000003 + C0000000000000000000000000000003FF000FE01FFFFFFFFFFFFFFFC001FFFF + FFFFFFE0000000000000000001FFFFFFC0000000000000000000000000000003 + C0000000000000000000000000000003FE001FE01FFFFFFFFFFFFFFE0003FFFF + FFFFFFE0000000000000000003FFFFFFC0000000000000000000000000000003 + C0000000000000000000000000000003FC003FE000000000000000000007FFFF + FFFFFFE0000000000000000003FFFFFFC0000000000000000000000000000003 + C0000000000000000000000000000003F8007FE00000000000000000000FFFFF + FFFFFFE0000000000000000003FFFFFFE0000000000000000000000000000007 + E0000000000000000000000000000007F000FFE00000000000000000003FFFFF + FFFFFFE0000000000000000003FFFFFFE0000000000000000000000000000007 + E0000000000000000000000000000007F001FFE00000000000000000007FFFFF + FFFFFFE0000000000000000003FFFFFFE0000000000000000000000000000007 + E0000000000000000000000000000007F003FFE0000000000000000001FFFFFF + FFFFFFE0000000000000000003FFFFFFF000000000000000000000000000000F + F000000000000000000000000000000FF001FFE0000000000000000007FFFFFF + FFFFFFE0000000000000000003FFFFFFF000000000000000000000000000000F + F000000000000000000000000000000FF000FFE000000000000000001FFFFFFF + FFFFFFE0000000000000000003FFFFFFF800000000000000000000000000001F + F000000000000000000000000000000FF8007FE00000000000000001FFFFFFFF + FFFFFFE0000000000000000003FFFFFFF800000000000000000000000000001F + F800000000000000000000000000001FFC003FE0000000000000001FFFFFFFFF + FFFFFFE0000000000000000003FFFFFFF800000000000000000000000000001F + F800000000000000000000000000001FFE001FE01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFC00000000000000000000000000003F + FC00000000000000000000000000003FFF000FE01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFC00000000000000000000000000003F + FC00000000000000000000000000003FFF8007E01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFE00000000000000000000000000007F + FE00000000000000000000000000007FFFC003E01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFE00000000000000000000000000007F + FE00000000000000000000000000007FFFE001E01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFF0000000000000000000000000000FF + FF0000000000000000000000000000FFFFF000E01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFF8000000000000000000000000001FF + FF0000000000000000000000000001FFFFF800601FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFF8000000000000000000000000001FF + FF8000000000000000000000000001FFFFFC00201FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFC000000000000000000000000003FF + FFC000000000000000000000000003FFFFFE00001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFC000000000000000000000000003FF + FFC000000000000000000000000003FFFFFF00001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFE000000000000000000000000007FF + FFE000000000000000000000000007FFFFFF80001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFF00000000000000000000000000FFF + FFF00000000000000000000000000FFFFFFFC0001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFF80000000000000000000000001FFF + FFF00000000000000000000000000FFFFFFFE0001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFF80000000000000000000000001FFF + FFF80000000000000000000000001FFFFFFFF0001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000003FFFFFFFFFC0000000000000000000000003FFF + FFFC0000000000000000000000003FFFFFFFF8001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000007FFFFFFFFFE0000000000000000000000007FFF + FFFE0000000000000000000000007FFFFFFFFC001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000000000FFFFFFFFFFF000000000000000000000000FFFF + FFFF000000000000000000000000FFFFFFFFFE001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000000001FFFFFFFFFFF800000000000000000000001FFFF + FFFF800000000000000000000001FFFFFFFFFF001FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000000003FFFFFFFFFFFC00000000000000000000003FFFF + FFFFC00000000000000000000003FFFFFFFFFF801FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000000003FFFFFFFFFFFE00000000000000000000007FFFF + FFFFC00000000000000000000003FFFFFFFFFFC01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000000007FFFFFFFFFFFF0000000000000000000000FFFFF + FFFFF0000000000000000000000FFFFFFFFFFFE01FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE00000000000000000FFFFFFFFFFFFF8000000000000000000001FFFFF + FFFFF8000000000000000000001FFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE00000000000000001FFFFFFFFFFFFFC000000000000000000003FFFFF + FFFFFC000000000000000000003FFFFFFFFFFFF87FFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE00000000000000003FFFFFFFFFFFFFE000000000000000000007FFFFF + FFFFFE000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE00000000000000007FFFFFFFFFFFFFF00000000000000000000FFFFFF + FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000000FFFFFFFFFFFFFFFC0000000000000000003FFFFFF + FFFFFF80000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000001FFFFFFFFFFFFFFFE0000000000000000007FFFFFF + FFFFFFE0000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000003FFFFFFFFFFFFFFFF000000000000000000FFFFFFF + FFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE0000000000000007FFFFFFFFFFFFFFFFC00000000000000003FFFFFFF + FFFFFFFC00000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000000FFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFF + FFFFFFFE00000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000001FFFFFFFFFFFFFFFFFF8000000000000001FFFFFFFF + FFFFFFFF8000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000001FFFFFFFFFFFFFFFFFFE000000000000007FFFFFFFF + FFFFFFFFE000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000003FFFFFFFFFFFFFFFFFFF80000000000001FFFFFFFFF + FFFFFFFFF80000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE000000000000007FFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF + FFFFFFFFFE0000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFC00000000003FFFFFFFFFF + FFFFFFFFFFC00000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000000001FFFFFFFFFFF + FFFFFFFFFFF8000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000001FFFFFFFFFFFF + FFFFFFFFFFFF80000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800003FFFFFFFFFFFFF + FFFFFFFFFFFFF800001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end + object vtVyrobniPozn: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 26 + Top = 238 + object vtVyrobniPoznfID: TIntegerField + FieldName = 'fID' + end + object vtVyrobniPoznfDatum: TDateTimeField + FieldName = 'fDatum' + end + object vtVyrobniPoznfPoznamka: TStringField + FieldName = 'fPoznamka' + Size = 500 + end + end + object dsVyrobniPozn: TDataSource + DataSet = vtVyrobniPozn + Left = 28 + Top = 178 + end + object dsPrijemNestandard: TDataSource + DataSet = vtPrijemNestandard + Left = 140 + Top = 176 + end + object vtPrijemNestandard: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 140 + Top = 232 + object vtPrijemNestandardfID: TIntegerField + FieldName = 'fID' + Visible = False + end + object vtPrijemNestandardfCislo: TIntegerField + FieldName = 'fCislo' + Visible = False + end + object vtPrijemNestandardfSZ: TStringField + DisplayLabel = 'SK' + FieldName = 'fSZ' + Size = 3 + end + object vtPrijemNestandardfRegCis: TStringField + DisplayLabel = 'Reg. '#269#237'slo' + FieldName = 'fRegCis' + Required = True + Size = 30 + end + object vtPrijemNestandardfNazev1: TStringField + DisplayLabel = 'N'#225'zev' + FieldName = 'fNazev1' + Size = 100 + end + object vtPrijemNestandardfMJ: TStringField + DisplayLabel = 'MJ' + FieldName = 'fMJ' + Size = 10 + end + end + object dsCCP1: TDataSource + DataSet = vtCCP1 + Left = 438 + Top = 34 + end + object vtCCP1: TFDMemTable + BeforeInsert = vtCCP1BeforeInsert + BeforeDelete = vtCCP1BeforeDelete + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 436 + Top = 94 + object vtCCP1colID: TIntegerField + FieldName = 'colID' + Visible = False + end + object vtCCP1colDatum: TDateTimeField + FieldName = 'colDatum' + end + object vtCCP1colSmena: TStringField + FieldName = 'colSmena' + Size = 1 + end + object vtCCP1colStroj: TStringField + FieldName = 'colStroj' + Size = 50 + end + object vtCCP1colIDStroj: TIntegerField + FieldName = 'colIDStroj' + Visible = False + end + object vtCCP1colIDNorma: TIntegerField + FieldName = 'colIDNorma' + Visible = False + end + object vtCCP1colTeplota: TFloatField + FieldName = 'colTeplota' + end + object vtCCP1colRychlost: TFloatField + FieldName = 'colRychlost' + end + object vtCCP1colHmotnost: TFloatField + FieldName = 'colHmotnost' + end + object vtCCP1colDelka: TFloatField + FieldName = 'colDelka' + end + object vtCCP1colPrumer: TFloatField + FieldName = 'colPrumer' + end + object vtCCP1colVyhovuje: TBooleanField + FieldName = 'colVyhovuje' + end + object vtCCP1colVyrobek: TStringField + FieldName = 'colVyrobek' + Size = 100 + end + object vtCCP1colNapravneOpatreni: TStringField + FieldName = 'colNaprava' + Size = 255 + end + object vtCCP1colUzavreno: TBooleanField + FieldName = 'colUzavreno' + end + end + object dsPLZakazky: TDataSource + DataSet = vtPLZakazky + Left = 250 + Top = 178 + end + object vtPLZakazky: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 250 + Top = 234 + object vtPLZakazkycolZakazka: TStringField + FieldName = 'colEvCisloPL' + Size = 30 + end + object vtPLZakazkycolDatVyroby: TDateField + FieldName = 'colDatVyroby' + end + object vtPLZakazkycolKANaPalete: TIntegerField + FieldName = 'colKANaPalete' + end + object vtPLZakazkycolKsNaPalete: TIntegerField + FieldName = 'colKsNaPalete' + end + end + object dsVyrobniDenik: TDataSource + DataSet = vtVyrobniDenik + Left = 352 + Top = 180 + end + object vtVyrobniDenik: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 346 + Top = 238 + object vtVyrobniDenikcolSmena: TSmallintField + FieldName = 'colSmena' + end + object vtVyrobniDenikcolStroj: TStringField + FieldName = 'colStroj' + Size = 100 + end + object vtVyrobniDenikcolUdalost: TStringField + FieldName = 'colUdalost' + Size = 50 + end + object vtVyrobniDenikcolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtVyrobniDenikcolMJ: TStringField + FieldName = 'colMJ' + Size = 10 + end + object vtVyrobniDenikcolMnoz2: TFloatField + FieldName = 'colMnoz' + end + object vtVyrobniDenikcolMnoz: TFloatField + FieldName = 'colMnozKA' + end + object vtVyrobniDenikcolMnozPal: TFloatField + FieldName = 'colMnozPal' + end + object vtVyrobniDenikcolIDKmen: TIntegerField + FieldName = 'colIDKmen' + Visible = False + end + object vtVyrobniDenikcolIDStroj: TIntegerField + FieldName = 'colIDStroj' + Visible = False + end + object vtVyrobniDenikcolCisloZbozi: TStringField + FieldName = 'colCisloZbozi' + Size = 33 + end + object vtVyrobniDenikcolDatum: TDateField + FieldName = 'colDatum' + end + end + object vtPredvyroba: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 440 + Top = 238 + object vtPredvyrobacolIDKmen: TIntegerField + FieldName = 'colIDKmen' + Visible = False + end + object vtPredvyrobacolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtPredvyrobacolRegCis: TStringField + FieldName = 'colRegCis' + Size = 30 + end + object vtPredvyrobacolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtPredvyrobacolMJ: TStringField + FieldName = 'colMJ' + Size = 10 + end + object vtPredvyrobacolBaleni: TIntegerField + FieldName = 'colBaleni' + DisplayFormat = '#,##0' + end + object vtPredvyrobacolBaleni2: TIntegerField + Alignment = taCenter + FieldName = 'colBaleni2' + end + object vtPredvyrobacolStroj: TStringField + FieldName = 'colStroj' + Size = 100 + end + end + object dsPredvyroba: TDataSource + DataSet = vtPredvyroba + Left = 440 + Top = 178 + end + object dsPredvyrobaDetail: TDataSource + DataSet = vtPredvyrobaDetail + Left = 536 + Top = 180 + end + object vtPredvyrobaDetail: TFDMemTable + FieldDefs = <> + IndexDefs = <> + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + StoreDefs = True + Left = 538 + Top = 240 + object vtPredvyrobaDetailidPZ: TIntegerField + FieldName = 'colIDPZ' + end + object vtPredvyrobaDetailcolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtPredvyrobaDetailcolRegCis: TStringField + FieldName = 'colRegCis' + Size = 30 + end + object vtPredvyrobaDetailcolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtPredvyrobaDetailcolCisloPL: TStringField + FieldName = 'colCisloPL' + Size = 50 + end + object vtPredvyrobaDetailcolKA: TIntegerField + FieldName = 'colKA' + end + object vtPredvyrobaDetailcolKs: TIntegerField + FieldName = 'colKs' + end + object vtPredvyrobaDetailcolStav: TSmallintField + FieldName = 'colStav' + end + object vtPredvyrobaDetailcolDatumVyroby: TDateTimeField + FieldName = 'colDatumVyroby' + DisplayFormat = 'dd.mm.yyyy hh:nn' + end + object vtPredvyrobaDetailcolDatumVyrazeni: TDateTimeField + FieldName = 'colDatumVyrazeni' + end + object vtPredvyrobaDetailcolZpracDatVyr: TDateTimeField + FieldName = 'colZpracDatVyr' + end + object vtPredvyrobaDetailcolZpracDatVyraz: TDateTimeField + FieldName = 'colZpracDatVyraz' + end + object vtPredvyrobaDetailcolIDPrikaz: TIntegerField + FieldName = 'colIDPrikaz' + end + object vtPredvyrobaDetailcolCisloZakazky: TStringField + FieldName = 'colCisloZakazky' + Size = 30 + end + end + object vtVyrobaMimoPlan: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 356 + Top = 390 + object vtVyrobaMimoPlancolIDKmen: TIntegerField + FieldName = 'colIDKmen' + Visible = False + end + object vtVyrobaMimoPlancolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtVyrobaMimoPlancolRegCis: TStringField + FieldName = 'colRegCis' + Size = 30 + end + object vtVyrobaMimoPlancolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtVyrobaMimoPlancolZaklad: TStringField + FieldName = 'colZaklad' + Size = 100 + end + object vtVyrobaMimoPlancolStroj: TStringField + FieldName = 'colStroj' + Size = 100 + end + object vtVyrobaMimoPlancolBaleni1: TIntegerField + FieldName = 'colBaleni1' + end + object vtVyrobaMimoPlancolBaleni2: TIntegerField + FieldName = 'colBaleni2' + end + object vtVyrobaMimoPlancolBaleni3: TIntegerField + FieldName = 'colBaleni3' + end + object vtVyrobaMimoPlancolMJ: TStringField + FieldName = 'colMJ' + Size = 10 + end + object vtVyrobaMimoPlancolIDStroj: TIntegerField + FieldName = 'colIDStroj' + Visible = False + end + end + object dsVyrobaMimoPlan: TDataSource + DataSet = vtVyrobaMimoPlan + Left = 360 + Top = 334 + end + object dsZahajeniVyrobyPalety: TDataSource + DataSet = vtZahajeniVyrobyPalety + Left = 482 + Top = 326 + end + object vtZahajeniVyrobyPalety: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 484 + Top = 386 + object vtZahajeniVyrobyPaletycolIDPrikaz: TIntegerField + FieldName = 'colIDPrikaz' + Visible = False + end + object IntegerField1: TIntegerField + FieldName = 'colIDKmen' + Visible = False + end + object vtZahajeniVyrobyPaletycolRada: TStringField + FieldName = 'colRada' + Size = 10 + end + object vtZahajeniVyrobyPaletycolPrikaz: TIntegerField + FieldName = 'colPrikaz' + end + object StringField1: TStringField + FieldName = 'colSZ' + Size = 3 + end + object StringField2: TStringField + FieldName = 'colRegCis' + Size = 30 + end + object StringField3: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtZahajeniVyrobyPaletycolDatPlanZahajeni: TDateField + FieldName = 'colDatPlanZahajeni' + end + object vtZahajeniVyrobyPaletycolMJ: TStringField + FieldName = 'colMJ' + Size = 10 + end + object vtZahajeniVyrobyPaletycolIDStroj: TIntegerField + FieldName = 'colIDStroj' + end + end + object dsPaletListy: TDataSource + DataSet = vtPaletListy + Left = 604 + Top = 32 + end + object vtPaletListy: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 598 + Top = 86 + object vtPaletListycolPaletList: TStringField + FieldName = 'colPaletList' + Size = 50 + end + object vtPaletListycolDatPorizeni: TDateTimeField + FieldName = 'colDatPorizeni' + end + object vtPaletListycolPoznamka: TStringField + FieldName = 'colPoznamka' + Size = 250 + end + end + object dsZasobyObjednavky: TDataSource + DataSet = vtZasobyObjednavky + Left = 728 + Top = 36 + end + object vtZasobyObjednavky: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 728 + Top = 94 + object vtZasobyObjednavkycolIDKmen: TIntegerField + FieldName = 'colIDKmen' + Visible = False + end + object vtZasobyObjednavkycolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtZasobyObjednavkycolRC: TStringField + FieldName = 'colRC' + Size = 30 + end + object vtZasobyObjednavkycolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtZasobyObjednavkycolMJ: TStringField + FieldName = 'colMJ' + Size = 10 + end + object vtZasobyObjednavkycolBaleni1: TIntegerField + FieldName = 'colBaleni1' + end + object vtZasobyObjednavkycolBaleni2: TIntegerField + FieldName = 'colBaleni2' + end + object vtZasobyObjednavkycolVyroba: TFloatField + FieldName = 'colVyroba' + end + object vtZasobyObjednavkycolNaCeste: TFloatField + FieldName = 'colNaCeste' + end + object vtZasobyObjednavkycolSklad: TFloatField + FieldName = 'colSklad' + end + object vtZasobyObjednavkycolCelkem: TFloatField + FieldKind = fkCalculated + FieldName = 'colCelkem' + Calculated = True + end + object vtZasobyObjednavkycolObjednano: TFloatField + FieldName = 'colObjednano' + end + object vtZasobyObjednavkycolPalet: TSmallintField + FieldName = 'colPalet' + end + end + object dsObjednavkaMat: TDataSource + DataSet = vtObjednavkaMat + Left = 830 + Top = 32 + end + object vtObjednavkaMat: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 832 + Top = 98 + object vtObjednavkaMatcolCisloObj: TIntegerField + FieldName = 'colCisloObj' + end + object vtObjednavkaMatcolMnozstvi: TFloatField + FieldName = 'colMnozstvi' + end + object vtObjednavkaMatcolPalet: TSmallintField + FieldName = 'colPalet' + end + object vtObjednavkaMatcolDodano: TFloatField + FieldName = 'colDodano' + end + object vtObjednavkaMatcolPalet2: TSmallintField + FieldName = 'colPalet2' + end + object vtObjednavkaMatcolDatum: TDateField + FieldName = 'colDatum' + end + object vtObjednavkaMatcolObjednatel: TStringField + FieldName = 'colObjednatel' + Size = 80 + end + object vtObjednavkaMatcolNeaktivni: TStringField + FieldName = 'colNeaktivni' + Size = 1 + end + object vtObjednavkaMatcolSplneno: TStringField + FieldName = 'colSplneno' + Size = 1 + end + object vtObjednavkaMatcolStornovano: TStringField + FieldName = 'colStornovano' + Size = 1 + end + object vtObjednavkaMatcolUzavreno: TStringField + FieldName = 'colUzavreno' + Size = 1 + end + object vtObjednavkaMatcolVratka: TStringField + FieldName = 'colVratka' + Size = 1 + end + object vtObjednavkaMatcolPoznamka: TStringField + FieldName = 'colPoznamka' + Size = 250 + end + end + object dsOdpady: TDataSource + DataSet = vtOdpady + Left = 826 + Top = 202 + end + object vtOdpady: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 834 + Top = 262 + object vtOdpadycolID: TIntegerField + FieldName = 'colID' + Visible = False + end + object vtOdpadycolStroj: TStringField + FieldName = 'colStroj' + Size = 100 + end + object vtOdpadycolDatum: TDateField + FieldName = 'colDatum' + end + object vtOdpadycolSmena: TSmallintField + FieldName = 'colSmena' + end + object vtOdpadycolMokry: TFloatField + FieldName = 'colMokry' + end + object vtOdpadycolSuchy: TFloatField + FieldName = 'colSuchy' + end + object vtOdpadycolPoznamka: TStringField + FieldName = 'colPoznamka' + Size = 255 + end + end + object dsSeznamPalet: TDataSource + DataSet = vtSeznamPalet + Left = 702 + Top = 200 + end + object vtSeznamPalet: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 704 + Top = 260 + object vtSeznamPaletcolID: TIntegerField + FieldName = 'colID' + end + object vtSeznamPaletcolPaletovyList: TStringField + FieldName = 'colPaletovyList' + Size = 50 + end + object vtSeznamPaletcolDatum: TDateField + FieldName = 'colDatum' + end + object vtSeznamPaletcolSmena: TSmallintField + FieldName = 'colSmena' + end + object vtSeznamPaletcolMnozstvi: TFloatField + FieldName = 'colMnozstvi' + end + object vtSeznamPaletcolPocetKA: TIntegerField + FieldName = 'colPocetKA' + end + object vtSeznamPaletcolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtSeznamPaletcolRC: TStringField + FieldName = 'colRC' + Size = 30 + end + object vtSeznamPaletcolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtSeznamPaletcolDatPorizeni: TDateTimeField + FieldName = 'colDatPorizeni' + end + object vtSeznamPaletcolSklad: TStringField + Alignment = taCenter + FieldName = 'colSklad' + Size = 15 + end + end + object dsSarze: TDataSource + DataSet = vtSarze + Left = 864 + Top = 340 + end + object vtSarze: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 866 + Top = 394 + object vtSarzecolSarze: TStringField + FieldName = 'colSarze' + end + object vtSarzecolSarze2: TStringField + FieldName = 'colSarze2' + Visible = False + end + object vtSarzecolMnoz: TFloatField + FieldName = 'colMnoz' + end + object vtSarzecolIDKmen: TIntegerField + FieldName = 'colIDKmen' + Visible = False + end + object vtSarzecolIDPohybOZ: TIntegerField + FieldName = 'colIDPohybOZ' + Visible = False + end + end + object dsMaterial: TDataSource + DataSet = vtMaterial + Left = 928 + Top = 340 + end + object vtMaterial: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 928 + Top = 395 + object vtMaterialcolIDKmen: TIntegerField + FieldName = 'colIDKmen' + Required = True + Visible = False + end + object vtMaterialcolIDPrKVazba: TIntegerField + FieldName = 'colIDPrKVazba' + Visible = False + end + object vtMaterialcolIDPohyb: TIntegerField + FieldName = 'colIDPohyb' + end + object vtMaterialcolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtMaterialRegCis: TStringField + FieldName = 'colRegCis' + Required = True + Size = 30 + end + object vtMaterialcolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtMaterialcolMnoz: TFloatField + FieldName = 'colMnoz' + end + object vtMaterialcolMJ: TStringField + FieldName = 'colMJ' + Size = 30 + end + object vtMaterialcolMamSarzi: TBooleanField + FieldName = 'colMamSarzi' + Visible = False + end + object vtMaterialcolCisloZbozi: TStringField + FieldName = 'colCisloZbozi' + Size = 33 + end + end + object dsPrehledMicharna: TDataSource + DataSet = vtPrehledMicharna + Left = 660 + Top = 338 + end + object vtPrehledMicharna: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 660 + Top = 392 + object vtPrehledMicharnacolIDPrikaz: TIntegerField + FieldName = 'colIDPrikaz' + Visible = False + end + object vtPrehledMicharnacolIDStroj: TIntegerField + FieldName = 'colIDStroj' + Visible = False + end + object vtPrehledMicharnacolStroj: TStringField + FieldName = 'colStroj' + Size = 100 + end + object vtPrehledMicharnacolTesto: TStringField + FieldName = 'colTesto' + Size = 100 + end + object vtPrehledMicharnacolStartMichani: TDateTimeField + FieldName = 'colStartMichani' + end + object vtPrehledMicharnacolKonecMichani: TDateTimeField + FieldName = 'colKonecMichani' + end + object vtPrehledMicharnacolViskozita: TFloatField + FieldName = 'colViskozita' + end + object vtPrehledMicharnacolViskozita2: TFloatField + FieldName = 'colViskozita2' + end + object vtPrehledMicharnacolIDPMZ: TIntegerField + FieldName = 'colIDPMZ' + end + object vtPrehledMicharnacolIDOperStartStop: TIntegerField + FieldName = 'colIDOperStartStop' + end + object vtPrehledMicharnacolIDEvidRozpracOper: TIntegerField + FieldName = 'colIDEvidRozpracOper' + end + end + object dsDetailMicharna: TDataSource + DataSet = vtDetailMicharna + Left = 760 + Top = 334 + end + object vtDetailMicharna: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 764 + Top = 394 + object vtDetailMicharnacolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtDetailMicharnacolRC: TStringField + FieldName = 'colRC' + Size = 30 + end + object vtDetailMicharnacolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtDetailMicharnacolMnozstvi: TFloatField + FieldName = 'colMnozstvi' + end + object vtDetailMicharnacolPridano: TFloatField + FieldName = 'colPridano' + end + end + object dsSpravaVzorku: TDataSource + DataSet = vtSpravaVzorku + Left = 968 + Top = 30 + end + object vtSpravaVzorku: TFDMemTable + FetchOptions.AssignedValues = [evMode] + FetchOptions.Mode = fmAll + ResourceOptions.AssignedValues = [rvSilentMode] + ResourceOptions.SilentMode = True + UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] + UpdateOptions.CheckRequired = False + UpdateOptions.AutoCommitUpdates = True + Left = 970 + Top = 96 + object vtSpravaVzorkucolID: TIntegerField + FieldName = 'colID' + Visible = False + end + object vtSpravaVzorkucolIDArchiv: TIntegerField + FieldName = 'colIDArchiv' + Visible = False + end + object vtSpravaVzorkucolArchiv: TStringField + Alignment = taCenter + DisplayLabel = 'Archiv' + FieldName = 'colArchiv' + Size = 30 + end + object vtSpravaVzorkucolStroj: TStringField + DisplayLabel = 'Stroj' + FieldName = 'colStroj' + Size = 100 + end + object vtSpravaVzorkucolSZ: TStringField + FieldName = 'colSZ' + Size = 3 + end + object vtSpravaVzorkucolRC: TStringField + FieldName = 'colRC' + Size = 30 + end + object vtSpravaVzorkucolNazev1: TStringField + FieldName = 'colNazev1' + Size = 100 + end + object vtSpravaVzorkucolKArchivaci: TBooleanField + FieldName = 'colKArchivaci' + DisplayValues = 'X;' + end + object vtSpravaVzorkucolUkonceno: TBooleanField + FieldName = 'colUkonceno' + DisplayValues = 'X;' + end + object vtSpravaVzorkucolVyrazeno: TBooleanField + FieldName = 'colVyrazeno' + DisplayValues = 'X;' + end + object vtSpravaVzorkucolDatPorizeni: TDateTimeField + FieldName = 'colDatPorizeni' + end + object vtSpravaVzorkucolMistr: TStringField + FieldName = 'colMistr' + Size = 50 + end + end +end diff --git a/datMod.pas b/datMod.pas new file mode 100644 index 0000000..3cc0351 --- /dev/null +++ b/datMod.pas @@ -0,0 +1,2221 @@ +unit datMod; + +interface + +uses + System.SysUtils, System.Classes, Data.DB, Datasnap.DBClient, System.ImageList, Vcl.Graphics, Vcl.ImgList, + Vcl.VirtualImageList, Vcl.BaseImageCollection, Vcl.ImageCollection, Vcl.Controls, Datasnap.Provider, Vcl.DBCGrids, + Vcl.Grids, JvExDBGrids, JvDBGrid, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, + FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Stan.Intf, + ddPlugin_TLB, frmPekarna, frmKontrolaCCP1, frmKontrolaCCP1edt, frmPrijemNestandard, frmPredvyroba, frmPredvyrobaDetail, + frmVyrobniDenik, frmVyrobaMimoPlan, frmZahajeniVyrobyPalety, frmZasobaObjednavky, frmObjednavkaMat, frmOdpady, frmSeznamPalet, + frmPrehledMicharna, frmSpravaVzorku, frmSarzeVydej; + + +const + tblCCP1 = '[dbo].[_TabVyroba_KontrolyCCP1]'; + constHvwVyrobaVyrobniDenik = 'hvw_Vyroba_VyrobniDenik'; + constHvwVyrobaPalety = 'hvw_Vyroba_Palety'; + + +type + recStrojZaznam = record + id: integer; + stroj, aktualPL, zakazka: string; + idKmen: integer; + ccp1: boolean; +{$IF CompilerVersion>=34} // Sydney a vys + class operator Initialize (out Dest: recStrojZaznam); +{$ENDIF} + end; + + TPaleta = record + id: integer; + idVyrCisPrikaz: integer; + paletList: string; + sarze: string; + pocetKA: integer; + pocetKS: integer; + end; + + TOperace = record + id: integer; + doklad: integer; + alt: string; + mnoz: Extended; + koef: Extended; + end; + + + + Tdm = class(TDataModule) + dsPlanDnes: TDataSource; + vtPlanDnes: TFDMemTable; + vtPlanDnesfIDPlan2: TIntegerField; + vtPlanDnesfVyrobek: TStringField; + vtPlanDnesfHotovo: TFloatField; + vtPlanDnesfZakazka: TStringField; + dsStroje: TDataSource; + vtStroje: TFDMemTable; + vtStrojefIDStroj: TIntegerField; + vtStrojefStroj: TStringField; + vtStrojefVyrobek: TStringField; + vtStrojefAktPaletList: TStringField; + vtStrojefVyrobenoKA: TFloatField; + vtStrojefZakazka: TStringField; + vtStrojefCinnost: TStringField; + vtStrojefCCP: TBooleanField; + vtStrojefVZ: TSmallintField; + vtPlanZitra: TFDMemTable; + vtPlanZitrafIDPlan2: TIntegerField; + vtPlanZitrafVyrobek: TStringField; + vtPlanZitrafHotovo: TFloatField; + vtPlanZitrafZakazka: TStringField; + dsPlanZitra: TDataSource; + vtRozpracPL: TFDMemTable; + dsRozpracPL: TDataSource; + imgColl: TImageCollection; + imgList: TVirtualImageList; + imgList2: TImageList; + vtVyrobniPozn: TFDMemTable; + dsVyrobniPozn: TDataSource; + vtVyrobniPoznfID: TIntegerField; + vtVyrobniPoznfDatum: TDateTimeField; + vtVyrobniPoznfPoznamka: TStringField; + dsPrijemNestandard: TDataSource; + vtPrijemNestandard: TFDMemTable; + vtPrijemNestandardfID: TIntegerField; + vtPrijemNestandardfCislo: TIntegerField; + vtPrijemNestandardfSZ: TStringField; + vtPrijemNestandardfRegCis: TStringField; + vtPrijemNestandardfNazev1: TStringField; + vtPrijemNestandardfMJ: TStringField; + vtStrojefIDEvidRozpOper: TIntegerField; + vtStrojefIDPrikaz: TIntegerField; + vtStrojefVyrCisloZbozi: TStringField; + dsCCP1: TDataSource; + vtCCP1: TFDMemTable; + vtCCP1colID: TIntegerField; + vtCCP1colStroj: TStringField; + vtCCP1colSmena: TStringField; + vtCCP1colTeplota: TFloatField; + vtCCP1colRychlost: TFloatField; + vtCCP1colHmotnost: TFloatField; + vtCCP1colIDNorma: TIntegerField; + vtCCP1colDelka: TFloatField; + vtCCP1colPrumer: TFloatField; + vtCCP1colVyhovuje: TBooleanField; + vtCCP1colVyrobek: TStringField; + vtCCP1colNapravneOpatreni: TStringField; + vtCCP1colUzavreno: TBooleanField; + vtCCP1colDatum: TDateTimeField; + vtCCP1colIDStroj: TIntegerField; + vtRozpracPLfIDEvidRozp: TIntegerField; + vtRozpracPLfIDStroj: TIntegerField; + vtRozpracPLfStroj: TStringField; + vtRozpracPLfCisloZbozi: TStringField; + vtRozpracPLfAktPaletList: TStringField; + vtRozpracPLfDatStart: TDateTimeField; + vtRozpracPLfColR: TBooleanField; + vtStrojefIDKmen: TIntegerField; + vtPlanDnesfDatPlanZadani: TDateField; + vtPlanDnesfRegCis: TStringField; + vtRozpracPLfVyrobek: TStringField; + dsPLZakazky: TDataSource; + vtPLZakazky: TFDMemTable; + vtPLZakazkycolZakazka: TStringField; + vtPLZakazkycolDatVyroby: TDateField; + vtPLZakazkycolKANaPalete: TIntegerField; + vtPLZakazkycolKsNaPalete: TIntegerField; + dsVyrobniDenik: TDataSource; + vtVyrobniDenik: TFDMemTable; + vtVyrobniDenikcolIDKmen: TIntegerField; + vtVyrobniDenikcolNazev1: TStringField; + vtVyrobniDenikcolIDStroj: TIntegerField; + vtVyrobniDenikcolStroj: TStringField; + vtVyrobniDenikcolDatum: TDateField; + vtVyrobniDenikcolSmena: TSmallintField; + vtVyrobniDenikcolMnoz: TFloatField; + vtVyrobniDenikcolCisloZbozi: TStringField; + vtVyrobniDenikcolMnozPal: TFloatField; + vtPredvyroba: TFDMemTable; + vtPredvyrobacolIDKmen: TIntegerField; + vtPredvyrobacolSZ: TStringField; + vtPredvyrobacolNazev1: TStringField; + vtPredvyrobacolRegCis: TStringField; + vtPredvyrobacolMJ: TStringField; + vtPredvyrobacolStroj: TStringField; + vtPredvyrobacolBaleni: TIntegerField; + dsPredvyroba: TDataSource; + vtPredvyrobacolBaleni2: TIntegerField; + dsPredvyrobaDetail: TDataSource; + vtPredvyrobaDetail: TFDMemTable; + vtPredvyrobaDetailidPZ: TIntegerField; + vtPredvyrobaDetailcolSZ: TStringField; + vtPredvyrobaDetailcolRegCis: TStringField; + vtPredvyrobaDetailcolNazev1: TStringField; + vtPredvyrobaDetailcolCisloPL: TStringField; + vtPredvyrobaDetailcolKA: TIntegerField; + vtPredvyrobaDetailcolKs: TIntegerField; + vtPredvyrobaDetailcolStav: TSmallintField; + vtPredvyrobaDetailcolDatumVyroby: TDateTimeField; + vtPredvyrobaDetailcolDatumVyrazeni: TDateTimeField; + vtPredvyrobaDetailcolZpracDatVyr: TDateTimeField; + vtPredvyrobaDetailcolZpracDatVyraz: TDateTimeField; + vtPredvyrobaDetailcolIDPrikaz: TIntegerField; + vtPredvyrobaDetailcolCisloZakazky: TStringField; + vtVyrobaMimoPlan: TFDMemTable; + dsVyrobaMimoPlan: TDataSource; + vtVyrobaMimoPlancolIDKmen: TIntegerField; + vtVyrobaMimoPlancolSZ: TStringField; + vtVyrobaMimoPlancolRegCis: TStringField; + vtVyrobaMimoPlancolNazev1: TStringField; + vtVyrobaMimoPlancolZaklad: TStringField; + vtVyrobaMimoPlancolBaleni1: TIntegerField; + vtVyrobaMimoPlancolBaleni2: TIntegerField; + vtVyrobaMimoPlancolBaleni3: TIntegerField; + vtVyrobaMimoPlancolMJ: TStringField; + vtVyrobaMimoPlancolStroj: TStringField; + vtVyrobaMimoPlancolIDStroj: TIntegerField; + dsZahajeniVyrobyPalety: TDataSource; + vtZahajeniVyrobyPalety: TFDMemTable; + IntegerField1: TIntegerField; + StringField1: TStringField; + StringField2: TStringField; + StringField3: TStringField; + vtZahajeniVyrobyPaletycolIDPrikaz: TIntegerField; + vtZahajeniVyrobyPaletycolRada: TStringField; + vtZahajeniVyrobyPaletycolPrikaz: TIntegerField; + vtZahajeniVyrobyPaletycolDatPlanZahajeni: TDateField; + vtZahajeniVyrobyPaletycolMJ: TStringField; + vtZahajeniVyrobyPaletycolIDStroj: TIntegerField; + dsPaletListy: TDataSource; + vtPaletListy: TFDMemTable; + vtPaletListycolPaletList: TStringField; + vtPaletListycolDatPorizeni: TDateTimeField; + vtPaletListycolPoznamka: TStringField; + dsZasobyObjednavky: TDataSource; + vtZasobyObjednavky: TFDMemTable; + vtZasobyObjednavkycolIDKmen: TIntegerField; + vtZasobyObjednavkycolSZ: TStringField; + vtZasobyObjednavkycolRC: TStringField; + vtZasobyObjednavkycolNazev1: TStringField; + vtZasobyObjednavkycolMJ: TStringField; + vtZasobyObjednavkycolBaleni1: TIntegerField; + vtZasobyObjednavkycolBaleni2: TIntegerField; + vtZasobyObjednavkycolVyroba: TFloatField; + vtZasobyObjednavkycolNaCeste: TFloatField; + vtZasobyObjednavkycolSklad: TFloatField; + vtZasobyObjednavkycolCelkem: TFloatField; + vtZasobyObjednavkycolObjednano: TFloatField; + vtZasobyObjednavkycolPalet: TSmallintField; + dsObjednavkaMat: TDataSource; + vtObjednavkaMat: TFDMemTable; + vtObjednavkaMatcolCisloObj: TIntegerField; + vtObjednavkaMatcolMnozstvi: TFloatField; + vtObjednavkaMatcolPalet: TSmallintField; + vtObjednavkaMatcolDodano: TFloatField; + vtObjednavkaMatcolPalet2: TSmallintField; + vtObjednavkaMatcolDatum: TDateField; + vtObjednavkaMatcolObjednatel: TStringField; + vtObjednavkaMatcolNeaktivni: TStringField; + vtObjednavkaMatcolSplneno: TStringField; + vtObjednavkaMatcolStornovano: TStringField; + vtObjednavkaMatcolUzavreno: TStringField; + vtObjednavkaMatcolVratka: TStringField; + vtObjednavkaMatcolPoznamka: TStringField; + dsOdpady: TDataSource; + vtOdpady: TFDMemTable; + vtOdpadycolID: TIntegerField; + vtOdpadycolDatum: TDateField; + vtOdpadycolSmena: TSmallintField; + vtOdpadycolMokry: TFloatField; + vtOdpadycolSuchy: TFloatField; + vtOdpadycolPoznamka: TStringField; + vtOdpadycolStroj: TStringField; + dsSeznamPalet: TDataSource; + vtSeznamPalet: TFDMemTable; + vtSeznamPaletcolID: TIntegerField; + vtSeznamPaletcolPaletovyList: TStringField; + vtSeznamPaletcolDatum: TDateField; + vtSeznamPaletcolSmena: TSmallintField; + vtSeznamPaletcolDatPorizeni: TDateTimeField; + vtSeznamPaletcolPocetKA: TIntegerField; + vtVyrobniDenikcolUdalost: TStringField; + vtVyrobniDenikcolMJ: TStringField; + vtVyrobniDenikcolMnoz2: TFloatField; + vtSeznamPaletcolSZ: TStringField; + vtSeznamPaletcolRC: TStringField; + vtSeznamPaletcolNazev1: TStringField; + vtSeznamPaletcolMnozstvi: TFloatField; + dsPrehledMicharna: TDataSource; + vtPrehledMicharna: TFDMemTable; + dsDetailMicharna: TDataSource; + vtDetailMicharna: TFDMemTable; + vtDetailMicharnacolSZ: TStringField; + vtDetailMicharnacolRC: TStringField; + vtDetailMicharnacolNazev1: TStringField; + vtDetailMicharnacolMnozstvi: TFloatField; + vtDetailMicharnacolPridano: TFloatField; + vtPrehledMicharnacolIDPrikaz: TIntegerField; + vtPrehledMicharnacolIDStroj: TIntegerField; + vtPrehledMicharnacolStroj: TStringField; + vtPrehledMicharnacolTesto: TStringField; + vtPrehledMicharnacolStartMichani: TDateTimeField; + vtPrehledMicharnacolKonecMichani: TDateTimeField; + vtPrehledMicharnacolViskozita: TFloatField; + vtPrehledMicharnacolViskozita2: TFloatField; + vtPrehledMicharnacolIDPMZ: TIntegerField; + vtPrehledMicharnacolIDOperStartStop: TIntegerField; + dsSpravaVzorku: TDataSource; + vtSpravaVzorku: TFDMemTable; + vtSpravaVzorkucolID: TIntegerField; + vtSpravaVzorkucolIDArchiv: TIntegerField; + vtSpravaVzorkucolArchiv: TStringField; + vtSpravaVzorkucolStroj: TStringField; + vtSpravaVzorkucolSZ: TStringField; + vtSpravaVzorkucolRC: TStringField; + vtSpravaVzorkucolNazev1: TStringField; + vtSpravaVzorkucolKArchivaci: TBooleanField; + vtSpravaVzorkucolUkonceno: TBooleanField; + vtSpravaVzorkucolVyrazeno: TBooleanField; + vtSpravaVzorkucolDatPorizeni: TDateTimeField; + vtSpravaVzorkucolMistr: TStringField; + vtSeznamPaletcolSklad: TStringField; + vtRozpracPLfSZ: TStringField; + vtRozpracPLfRC: TStringField; + vtRozpracPLfRadaPrikaz: TStringField; + vtPlanDnesfMnozZive: TFloatField; + vtStrojefSarze: TStringField; + vtPrehledMicharnacolIDEvidRozpracOper: TIntegerField; + vtRozpracPLfIDPrikaz: TIntegerField; + dsSarze: TDataSource; + vtSarze: TFDMemTable; + vtSarzecolSarze: TStringField; + vtSarzecolSarze2: TStringField; + vtSarzecolMnoz: TFloatField; + vtSarzecolIDKmen: TIntegerField; + dsMaterial: TDataSource; + vtMaterial: TFDMemTable; + vtMaterialcolMnoz: TFloatField; + vtMaterialcolIDKmen: TIntegerField; + vtMaterialRegCis: TStringField; + vtMaterialcolSZ: TStringField; + vtMaterialcolNazev1: TStringField; + vtMaterialcolMJ: TStringField; + vtMaterialcolIDPrKVazba: TIntegerField; + vtMaterialcolMamSarzi: TBooleanField; + vtMaterialcolCisloZbozi: TStringField; + vtMaterialcolIDPohyb: TIntegerField; + vtSarzecolIDPohybOZ: TIntegerField; + procedure DataModuleCreate (Sender: TObject); + procedure vtCCP1BeforeDelete (DataSet: TDataSet); + procedure vtCCP1BeforeInsert (DataSet: TDataSet); + private + public + dmCreated: boolean; + Helios: IHelios; + function VratStroj (const Helios: IHelios; cast: string; const AID: integer): string; + function VratNazevTabulky (tabName: string; inclSchema: Boolean = False): string; + function PocetStrojuSVyrobou: integer; + + function apiVratServerReq (const url: string; typ: string; body: TStream): string; + function apiVratPaletoveListy (idKmen: integer): string; + +// procedure DrawTextRotated(ACanvas: TCanvas; Angle, X, Y: Integer; ATextColor: TColor; AText: String); + + procedure UkonciEvidRozpracOper (const idEvROp: integer; var errMsg: string); + + procedure NactiVyrobuMimoPlan (const f: TformVyrobaMimoPlan); + + procedure NactiZasobaObjednavky (const f: TformZasobaObjednavky); + procedure NactiObjednavkyPolozky (const idKmen: integer); + + procedure NactiZahajeniVyrobyPalety (const f: TformZahajeniVyrobyPalety); + + procedure NactiPredvyrobu (const f: TformPredvyroba); + procedure NactiPredvyrobuDetail (const f: TformPredvyrobaDetail; idKmen: integer); + + procedure NactiDataPaneluStroje (const f: TformPekarna; var a: TArray); + procedure NactiStrojeAPraci (const f: TformPekarna); + procedure NactiVyrobniPoznamky (const f: TformPekarna); + + procedure NactiCCP1 (const f: TformKontrolaCCP1); + procedure NactiCCP1ProNoveZaznamy (const f: TformKontrolaCCP1edt); + + procedure NactiPlanStroje (const f: TformPekarna; const idStroj: integer); + procedure NactiRozpracovane (const f: TformPekarna); + procedure NactiOdpadStroje (const f: TformPekarna); + procedure NactiOdpady (const f: TformOdpady); + + procedure NactiVyrobkyNestandard (const f: TformPrijemNestandard); + procedure NactiPaletoveListy (const typ: integer); + function ZapisVyrobenePaletyNestandard (const f: TformPrijemNestandard; idKmen: integer; idStroj: integer): boolean; + + procedure NactiVyrobniDenik (f: TformVyrobniDenik; den: TDateTime); + procedure NactiSeznamPalet (f: TformSeznamPalet; const typ: byte; IdKmen, IdStroj: integer; const dat: TDatetime); + + procedure NactiVytvorenaTesta (f: TformPrehledMicharna); + procedure NactiDetailTesta (f: TformPrehledMicharna; idEvidRozpracOper: integer; idOperStartStop: integer); + + procedure NactiVzorky (f: TformSpravaVzorku); + + procedure NactiMaterialyProSarze (idVydejka: integer; sIdPohybyOZ: string); + procedure NactiSarzeProMaterial (idKmen: integer; idPohybOZ: integer); + + end; + + function getFirstWord (s: string): string; + function GetDBGridIndexByFieldName (aGrd: TJvDBGrid; aFld: string; jenVisible: boolean): integer; + function getDomainName (myURL: string): string; +// function GetDBGridIndexByFieldName (aGrid: TDBGrid; const fldName: string): integer; + procedure DrawTextRotated (ACanvas: TCanvas; Angle, X, Y: Integer; ATextColor: TColor; AText: String); + +var + dm: Tdm; + apiMod: boolean; + apiServer, phServer, compName, url, sqlLang: string; + vyrobniDen: TDate; + aktIdStroj, aktIdKmen, aktIdPrikaz, aktIdKmenPlan, aktIdKmenRozprac, idZamMistr, cisZamMistr: integer; + bmIdStroj, bmIdPlanDnes, bmIdPrikaz: integer; // bookmarky + aktZakazka: string; + + +{%CLASSGROUP 'Vcl.Controls.TControl'} +implementation +uses System.Variants, System.StrUtils, Winapi.Windows, System.DateUtils, IdHTTP, System.JSON, System.JSON.Writers, + IdSSLOpenSSL, IdURI, System.RegularExpressions, + helTabsBIDs, helUtils; +{$R *.dfm} + + + +{$IF CompilerVersion>=34} // Sydney a vys + class operator recStrojZaznam.Initialize (out Dest: recStrojZaznam); + begin + Dest.id:= 0; + Dest.stroj:= ''; + Dest.aktualPL:= ''; + Dest.zakazka:= ''; + Dest.idKmen:= 0; + Dest.ccp1:= false; + end; +{$ENDIF} + + + +{ + function GetDBGridIndexByFieldName (aGrid: Vcl.TDBGrid; const fldName: string): integer; + var i: integer; + begin + for i:=0 to aGrid.Columns.Count-1 do + if (aGrid.Columns.Items[i].FieldName=fldName) then + result:= i; + end; +} + + + + + procedure DrawTextRotated (ACanvas: TCanvas; Angle, X, Y: Integer; ATextColor: TColor; AText: String); + var NewX: Integer; + NewY: integer; + Escapement: Integer; + LogFont: TLogFont; + NewFontHandle: HFONT; + OldFontHandle: HFONT; + begin + if not Assigned(ACanvas) then + Exit; + + // Get handle of font and prepare escapement + GetObject(ACanvas.Font.Handle, SizeOf(LogFont), @LogFont); + if Angle > 360 then + Angle := 0; + Escapement := Angle * 10; + + // We must initialise all fields of the record structure + LogFont.lfWidth := 0; + LogFont.lfHeight := ACanvas.Font.Height; + LogFont.lfEscapement := Escapement; + LogFont.lfOrientation := 0; + if fsBold in ACanvas.Font.Style then + LogFont.lfWeight := FW_BOLD + else + LogFont.lfWeight := FW_NORMAL; + + LogFont.lfItalic := Byte(fsItalic in ACanvas.Font.Style); + LogFont.lfUnderline := Byte(fsUnderline in ACanvas.Font.Style); + LogFont.lfStrikeOut := Byte(fsStrikeOut in ACanvas.Font.Style); + LogFont.lfCharSet := ACanvas.Font.Charset; + LogFont.lfOutPrecision := OUT_DEFAULT_PRECIS; + LogFont.lfClipPrecision := CLIP_DEFAULT_PRECIS; + LogFont.lfQuality := DEFAULT_QUALITY; + LogFont.lfPitchAndFamily := DEFAULT_PITCH; + StrPCopy(LogFont.lfFaceName, ACanvas.Font.Name); + + // Create new font with rotation + NewFontHandle := CreateFontIndirect(LogFont); + try + // Set color of text + ACanvas.Font.Color := ATextColor; + + // Select the new font into the canvas + OldFontHandle := SelectObject(ACanvas.Handle, NewFontHandle); + try + // Output result + ACanvas.Brush.Style := VCL.Graphics.bsClear; + try + ACanvas.TextOut(X, Y, AText); + finally + ACanvas.Brush.Style := VCL.Graphics.bsSolid; + end; + finally + // Restore font handle + NewFontHandle := SelectObject(ACanvas.Handle, OldFontHandle); + end; + finally + // Delete the deselected font object + DeleteObject(NewFontHandle); + end; + end; + + + + + function getFirstWord (s: string): string; + begin + result:= s; + if (s.Contains(' ')) then + result:= LeftStr(s, s.IndexOf(' ')).Trim; + end; + + + + + + function GetDBGridIndexByFieldName (aGrd: TJvDBGrid; aFld: string; jenVisible: boolean): integer; + var i, ii: integer; + begin + result:= -1; + i:= -1; + ii:= -1; + while (i'') and (url<>'') then + begin + hc:= TIdHTTP.Create(nil); + try + try + if (typ='') or (typ.ToLower='xml') then + hc.Request.Accept:= 'application/soap+xml'; + if (typ.ToLower='json') then + hc.Request.Accept:= 'application/json'; + hc.Request.ContentType:= hc.Request.Accept + '; charset=utf-8'; + hc.HTTPOptions:= hc.HTTPOptions + [hoKeepOrigProtocol] + [hoNoProtocolErrorException]; + resp:= hc.Post(url, body); + except on E:Exception do + begin + Helios.Error('Chyba API req: ' + E.Message); + end; + end; + except on E:Exception do + begin + end; + end; + hc.Free; + end; + end; + + + + + function Tdm.apiVratPaletoveListy (idKmen: Integer): string; + var reqBody: TStream; + jFin: TJSONObject; + begin + result:= ''; + jFin:= TJSONObject.Create; + jFin.AddPair (TJSONPair.Create('idKmen', idKmen)); + try + result:= apiVratServerReq('/vratPL', 'json', TStringStream.Create(jFin.Value, TEncoding.UTF8)); + except + end; + jFin.Free; + end; + + + + + + procedure Tdm.NactiSarzeProMaterial (idKmen: Integer; idPohybOZ: integer); + var lSQL: string; + lHTTP: TIdHTTP; + ssl: TIdSSLIOHandlerSocketOpenSSL; + lParamList, respStream: TStringStream; + resp, jsonTemp, val1, val2: string; + i_loop: integer; + joOut, joIn, itemsObj: TJSONObject; + ja: TJSONArray; + jv: TJSONValue; + begin + if not(vtSarze.Active) then + vtSarze.Open; + + Exit; + + vtSarze.EmptyDataset; + + try + +// http klient je stejny + lHTTP:= TIdHTTP.Create; + if (datMod.phServer.Contains('https')) then + begin + ssl:= TIdSSLIOHandlerSocketOpenSSL.Create(nil); + ssl.SSLOptions.Method:= sslvTLSv1_2; + ssl.SSLOptions.Mode:= sslmUnassigned; + lHTTP.IOHandler:= ssl; + end; + lHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent]; + lHTTP.Request.ContentType := 'application/ld+json'; + lHTTP.Request.Accept := 'application/ld+json, text/javascript, */*; q=0.01'; + + +// param je stejny + lParamList:= TStringStream.Create(''); + joOut:= TJSONObject.Create; + lSQL:= 'SELECT SkupZbo, RegCis FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString; + with Helios.OpenSQL(lSQL) do + begin + joOut.AddPair('skupzbo', VarToStr(FieldByNameValues('SkupZbo'))); + joOut.AddPair('regcis', VarToStr(FieldByNameValues('RegCis'))); + end; + joOut.AddPair('id', 0); + lParamList.WriteString(joOut.ToString); + + + jsonTemp:= '{"@context":"/api/contexts/Order","@id":"/api/orders/14","@type":"Order","id":14,"heliosId":null,"name":"Cukr krupice - big-bag - VPEK","skupzbo":"101","regcis":' + + '"101002","paletovyList":"2010100200005","quantity":"4260.0000","items":[{"@id":"/api/material_order_items/12","@type":"MaterialOrderItem","id":12,"stockItem":{"@id":' + + '"/api/stock_items/16","@type":"StockItem","id":16,"heliosId":40,"heliosPrijemkaId":1940},"stockItemFinal":null,"order":"/api/orders/14","name":"Cukr krupice - big-bag' + + ' - VPEK","sarze":"645901","paletovyList":"2010100200005","quantity":"4260","dateExp":"2030-08-15T00:00:00+02:00","isCompleted":false,"completedAt":null}],"isCompleted"' + + ':false,"isUserCompleted":false,"completedAt":null}'; + + respStream:= TStringStream.Create(''); + lHTTP.Post (datMod.phServer + '/getbatch', lParamList, respStream); + resp:= respStream.DataString.Replace('\/', '/'); + +// resp:= jsonText; + if (resp<>'') and (resp.IndexOf('batches')>0) then + begin + joIn:= TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(resp), 0) as TJSONObject; + joIn.TryGetValue('batch', val1); + if (joIn.TryGetValue('id', ja) and (ja.Count > 0)) then + begin + for i_loop:=0 to ja.Count-1 do + begin + val2:= ja.Items[i_loop].GetValue('id'); + if (val2<>'') then + begin + dm.vtSarze.Append; + dm.vtSarze.FieldByName('colSarze').AsString:= ''; + dm.vtSarze.FieldByName('colSarze2').AsString:= ''; + dm.vtSarze.FieldByName('colMnoz').AsExtended:= 0; + dm.vtSarze.FieldByName('colIDKmen').AsInteger:= idKmen; + dm.vtSarze.Post; + end; + end; + end; + end; + + finally + lPAramList.Free; + joOut.Free; + if (ssl<>nil) then + ssl.Free; + lHTTP.Free; + end; + + end; + + + + + procedure Tdm.NactiMaterialyProSarze (idVydejka: integer; sIdPohybyOZ: string); + var lSQL: string; + begin + if not(vtMaterial.Active) then + vtMaterial.Open; + vtMaterial.EmptyDataset; + + lSQL:= 'SELECT p.ID, k.ID AS IDKmen, p.SkupZbo, p.RegCis, p.Nazev1, k.MJEvidence, p.Mnozstvi, k.CisloZbozi FROM ' + tblPZ + ' p INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN '; + lSQL:= lSQL + tblKZ + ' k ON (k.ID=s.IDKmenZbozi) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE ke._Vyroba_ZadavatSarzi=1 AND '; + if (sIdPohybyOZ<>'') then + lSQL:= lSQL + 'p.ID IN (' + sIdPohybyOZ + ')' + else + lSQL:= lSQL + 'p.IDDoklad=' + idVydejka.ToString; + lSQL:= lSQL + ' ORDER BY k.CisloZbozi'; + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + vtMaterial.Append; + vtMaterial.FieldByName('colIDPohyb').AsString:= VarToStr(FieldByNameValues('ID')); + vtMaterial.FieldByName('colIDKmen').AsString:= VarToStr(FieldByNameValues('IDKmen')); + vtMaterial.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtMaterial.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtMaterial.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtMaterial.FieldByName('colMJ').AsString:= VarToStr(FieldByNameValues('MJEvidence')); + vtMaterial.FieldByName('colCisloZbozi').AsString:= VarToStr(FieldByNameValues('CisloZbozi')); + vtMaterial.FieldByName('colMnoz').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).Replace('.', ',').ToExtended; + vtMaterial.FieldByName('colMamSarzi').AsBoolean:= false; + vtMaterial.Post; + Next; + end; + end; + + vtMaterial.First; + end; + + + + + + + procedure Tdm.NactiVzorky (f: TformSpravaVzorku); + var lSQL: string; + begin + if not(vtSpravaVzorku.Active) then + vtSpravaVzorku.Open; + vtSpravaVzorku.EmptyDataset; + + lSQL:= 'SELECT v.ID, v.IDArchiv, dbo.ef_Bit2Int(v.KArchivaci) AS KArchivaci, dbo.ef_Bit2Int(v.Ukonceno) AS Ukonceno, dbo.ef_Bit2Int(v.Vyrazeno) AS Vyrazeno, v.DatPorizeni'; + lSQL:= lSQL + ', va.Archiv, k.SkupZbo, k.RegCis, k.Nazev1, s.Nazev, z.Prijmeni FROM ' + tblVzorky; + lSQL:= lSQL + ' v INNER JOIN ' + tblVzorkyArchiv + ' va ON (va.Id=v.IdArchiv) INNER JOIN ' + tblCStroju + ' s ON (s.Id=v.IdStroj)'; + lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' k ON (k.Id=v.IdKmenZbozi) INNER JOIN ' + tblCisZam + ' z ON (z.Cislo=v.CisloZamMistr)'; + lSQL:= lSQL + ' ORDER BY v.DatPorizeni DESC'; + + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + vtSpravaVzorku.Append; + vtSpravaVzorku.FieldByName('colID').AsString:= VarToStr(FieldByNameValues('ID')); + vtSpravaVzorku.FieldByName('colIDArchiv').AsString:= VarToStr(FieldByNameValues('IDArchiv')); + vtSpravaVzorku.FieldByName('colKArchivaci').AsBoolean:= VarToStr(FieldByNameValues('KArchivaci')).ToBoolean; + vtSpravaVzorku.FieldByName('colUkonceno').AsBoolean:= VarToStr(FieldByNameValues('Ukonceno')).ToBoolean; + vtSpravaVzorku.FieldByName('colVyrazeno').AsBoolean:= VarToStr(FieldByNameValues('Vyrazeno')).ToBoolean; + vtSpravaVzorku.FieldByName('colDatPorizeni').AsString:= VarToStr(FieldByNameValues('DatPorizeni')); + vtSpravaVzorku.FieldByName('colArchiv').AsString:= VarToStr(FieldByNameValues('Archiv')); + vtSpravaVzorku.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtSpravaVzorku.FieldByName('colRC').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtSpravaVzorku.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtSpravaVzorku.FieldByName('colStroj').AsString:= VarToStr(FieldByNameValues('Nazev')); + vtSpravaVzorku.FieldByName('colMistr').AsString:= VarToStr(FieldByNameValues('Prijmeni')); + vtSpravaVzorku.Post; + Next; + end; + end; + + vtSpravaVzorku.First; + f.grdSpravaVzorku.Invalidate; + + end; + + + + + + procedure Tdm.NactiVytvorenaTesta (f: TformPrehledMicharna); + var lSQL, datStr, idVPrV, idOperStartStop, idEvidRozpracOper, strojCil: string; + v1, v2: Extended; + mamExt: boolean; + begin + if not(vtPrehledMicharna.Active) then + vtPrehledMicharna.Open; + vtPrehledMicharna.EmptyDataset; + + mamExt:= helUtils.SQLObjectExists(Helios, tblPMZE); + + lSQL:= 'SELECT pmz.ID, pmz.IDPrikaz, pmz.IDStroje, s.Nazev, k.Nazev1, ISNULL(pmz.DatumZahajeniOp, pmz.Datum) AS DatStart, pmz.DatumUkonceniOp AS DatKonec'; + lSQL:= lSQL + ', p.IDPrikazVyssi, ISNULL(oss.IDStroj, 0) AS IDStrojCil, ISNULL(oss.ID, 0) AS IDOperStartStop, ISNULL(oss.IDEvidRozpracOper,0) AS IDEvidRozpracOper'; + if (mamExt) then + lSQL:= lSQL + ', ISNULL(pmze._TestoViskozita,-1) AS Viskozota1, ISNULL(pmze._TestoViskozita2,-1) AS Viskozota2'; + lSQL:= lSQL + ' FROM ' + tblPMZ + ' pmz INNER JOIN ' + tblKZ + ' k ON (k.ID=pmz.IDTabKmen)'; + lSQL:= lSQL + ' LEFT JOIN ' + tblCStroju + ' s ON (s.ID=pmz.IDStroje) LEFT JOIN ' + tblOperaceStartStop + ' oss ON (oss.IDMzda=pmz.ID)'; + lSQL:= lSQL + ' INNER JOIN ' + tblVPr + ' p ON (p.ID=pmz.IDPrikaz)'; + if (mamExt) then + lSQL:= lSQL + ' LEFT JOIN ' + tblPMZe + ' pmze ON (pmze.ID=pmz.ID)'; + lSQL:= lSQL + ' WHERE k.SkupZbo=N''701'' ORDER BY ISNULL(DatumZahajeniOp, pmz.Datum) DESC'; + + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + idVPrV:= VarToStr(FieldByNameValues('IDPrikazVyssi')); + strojCil:= VarToStr(FieldByNameValues('IDStrojCil')); + + vtPrehledMicharna.Append; + vtPrehledMicharna.FieldByName('colIDPMZ').AsString:= VarToStr(FieldByNameValues('ID')); + vtPrehledMicharna.FieldByName('colIDPrikaz').AsString:= VarToStr(FieldByNameValues('IDPrikaz')); + + idOperStartStop:= VarToStr(FieldByNameValues('IDOperStartStop')); + if (idOperStartStop<>'') and (idOperStartStop<>'0') then + vtPrehledMicharna.FieldByName('colIDOperStartStop').AsString:= idOperStartStop; + + idEvidRozpracOper:= VarToStr(FieldByNameValues('IDEvidRozpracOper')); + if (idEvidRozpracOper='') then + idEvidRozpracOper:= '0'; + vtPrehledMicharna.FieldByName('colIDEvidRozpracOper').AsString:= idEvidRozpracOper; + + + vtPrehledMicharna.FieldByName('colIDStroj').AsString:= strojCil; + if (strojCil<>'') and (strojCil<>'0') then + vtPrehledMicharna.FieldByName('colStroj').AsString:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + strojCil); + + + +// vtPrehledMicharna.FieldByName('colIDStroj').AsString:= VarToStr(FieldByNameValues('IDStroje')); +// vtPrehledMicharna.FieldByName('colStroj').AsString:= VarToStr(FieldByNameValues('Nazev')); + vtPrehledMicharna.FieldByName('colTesto').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtPrehledMicharna.FieldByName('colStartMichani').AsString:= VarToStr(FieldByNameValues('DatStart')); + vtPrehledMicharna.FieldByName('colKonecMichani').AsString:= VarToStr(FieldByNameValues('DatKonec')); + if (mamExt) then + begin + v1:= VarToStr(FieldByNameValues('Viskozota1')).ToExtended; + v2:= VarToStr(FieldByNameValues('Viskozota2')).ToExtended; + if (v1>0) then + vtPrehledMicharna.FieldByName('colViskozita').AsExtended:= v1; + if (v2>0) then + vtPrehledMicharna.FieldByName('colViskozita2').AsExtended:= v2; + end; + vtPrehledMicharna.Post; + Next; + end; + end; + + vtPrehledMicharna.First; + f.grdSeznamTesta.Invalidate; + + end; + + + + + procedure Tdm.NactiDetailTesta (f: TformPrehledMicharna; idEvidRozpracOper: integer; idOperStartStop: integer); + var lSQL, datStr, idDZ: string; + begin + if not(vtDetailMicharna.Active) then + vtDetailMicharna.Open; + vtDetailMicharna.EmptyDataset; + + idDZ:= helUtils.getHeliosStrVal(Helios, '0', 'SELECT IDDokladOZ FROM ' + tblOperaceStartStop + ' WHERE IDDokladOZ IS NOT NULL AND ID=' + idOperStartStop.ToString); + if (idDZ<>'') then + begin + lSQL:= 'SELECT p.SkupZbo, p.RegCis, p.Nazev1, p.Mnozstvi, ISNULL(v.Mnozstvi-v.MnozstviPuvodni,0) AS Pridano FROM ' + tblPZ + ' p LEFT JOIN ' + tblOperaceStartStopVydej; + lSQL:= lSQL + ' v ON (v.IDPohybZbozi=p.ID) WHERE p.IDDoklad=' + idDZ + ' ORDER BY p.Poradi'; + with Helios.OpenSQL(lSQL) do + begin + First; + while not(EOF) do + begin + vtDetailMicharna.Append; + vtDetailMicharna.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtDetailMicharna.FieldByName('colRC').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtDetailMicharna.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtDetailMicharna.FieldByName('colMnozstvi').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).Replace('.', ',').ToExtended; + vtDetailMicharna.FieldByName('colPridano').AsExtended:= VarToStr(FieldByNameValues('Pridano')).Replace('.', ',').ToExtended; + vtDetailMicharna.Post; + Next; + end; + end; + end; + + vtDetailMicharna.First; + f.grdReceptura.Invalidate; + + end; + + + + + + procedure Tdm.NactiSeznamPalet (f: TformSeznamPalet; const typ: byte; IdKmen, IdStroj: integer; const dat: TDatetime); + var lSQL, datStr, sz: string; + mn, ksPerKA, KAPerPal: Extended; + datPoriz: TDateTime; + begin + if not(vtSeznamPalet.Active) then + vtSeznamPalet.Open; + vtSeznamPalet.EmptyDataset; + + + lSQL:= ''; + + if (typ=1) then + begin + sz:= helUtils.getHeliosStrVal(Helios, '', 'SELECT SkupZbo FROM ' + tblKZ + ' WHERE ID=' + IdKmen.ToString); + ksPerKA:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Ks'''); + KAPerPal:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Pal'''); + + lSQL:= 'SELECT p.ID, p.Mnozstvi, vcs.Nazev1, ISNULL(vcp.Mnozstvi,-1) AS MnozVCP, p.DatPorizeni, s.IDKmenZbozi AS IDKmen, ISNULL(s.Mnozstvi,0) AS MnozSklad FROM ' + tblPZ; + lSQL:= lSQL + ' p INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad)'; + lSQL:= lSQL + ' LEFT JOIN ' + tblVyrCP + ' vcp ON (vcp.IDPolozkaDokladu=p.ID) INNER JOIN ' + tblVyrCS + ' vcs ON (vcs.ID=vcp.IDVyrCis) WHERE p.DruhPohybuZbo=0'; + lSQL:= lSQL + ' AND p.TypVyrobnihoDokladu=0' + IfThen(idKmen>0, ' AND s.IDKmenZbozi=' + IdKmen.ToString, ''); + if (dat>0) then + begin + lSQL:= lSQL + ' AND p.DatPorizeni>=CONVERT(datetime, N' + (FormatDateTime('dd.mm.yyyy', dat.GetDate) + ' 06:00:00').QuotedString + ', 104)'; + lSQL:= lSQL + ' AND p.DatPorizeni<=CONVERT(datetime, N' + (FormatDateTime('dd.mm.yyyy', IncDay(dat.GetDate)) + ' 05:59:59').QuotedString + ', 104)'; + end; + lSQL:= lSQL + ' ORDER BY p.DatPorizeni DESC'; + end; + + + + + if (lSQL<>'') then + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + vtSeznamPalet.Append; + datStr:= VarToStr(FieldByNameValues('DatPorizeni')); + if not(TryStrToDateTime(datStr, datPoriz)) then + datPoriz:= 0; + + IdKmen:= VarToStr(FieldByNameValues('IDKmen')).ToInteger; + with Helios.OpenSQL('SELECT SkupZbo, RegCis, Nazev1 FROM ' + tblKZ + ' WHERE ID=' + IdKmen.ToString) do + begin + vtSeznamPalet.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtSeznamPalet.FieldByName('colRC').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtSeznamPalet.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + end; + ksPerKA:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Ks'''); + KAPerPal:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Pal'''); + + + vtSeznamPalet.FieldByName('colID').AsInteger:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtSeznamPalet.FieldByName('colPaletovyList').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtSeznamPalet.FieldByName('colDatum').AsDateTime:= datPoriz.GetDate; + vtSeznamPalet.FieldByName('colSklad').AsString:= VarToStr(FieldByNameValues('MnozSklad')); + + lSQL:= 'DECLARE @dat DATETIME' + CRLF + 'SET @dat=' + helUtils.SQLDatetimeConvert (datPoriz, false) + CRLF + 'SELECT Smena FROM dbo.ef_GetDatumASmenu (@dat)'; + vtSeznamPalet.FieldByName('colSmena').AsInteger:= helUtils.getHeliosIntVal(Helios, 1, lSQL); + vtSeznamPalet.FieldByName('colDatPorizeni').AsDateTime:= datPoriz; + mn:= VarToStr(FieldByNameValues('MnozVCP')).ToExtended; + if (mn=-1) then + begin + vtSeznamPalet.FieldByName('colPocetKA').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; + vtSeznamPalet.FieldByName('colMnozstvi').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; + end + else + begin + vtSeznamPalet.FieldByName('colPocetKA').AsExtended:= mn; + vtSeznamPalet.FieldByName('colMnozstvi').AsExtended:= mn * ksPerKA; + end; + + vtSeznamPalet.Post; + Next; + end; + end; + + vtSeznamPalet.First; + f.grdSeznamPalet.Invalidate; + + end; + + + + + + + procedure Tdm.NactiOdpady (const f: TformOdpady); + var lSQL: string; + begin + lSQL:= 'SELECT o.ID, o.OdpadSuchy, o.OdpadMokry, o.Poznamka, s.Nazev, CONVERT(datetime, CONVERT(int, CONVERT(float, o.Datum))) AS Datum, o.Smena FROM ' + tblOdpadPek; + lSQL:= lSQL + ' o INNER JOIN ' + tblCStroju + ' s ON (o.IDStroje=s.ID) WHERE o.IDStroje='; + lSQL:= lSQL + aktIdStroj.ToString + ' ORDER BY o.DatPorizeni DESC'; + with Helios.OpenSQL(lSQL) do + begin + if (not(vtOdpady.Active)) then + vtOdpady.Open; + vtOdpady.EmptyDataset; + First; + while not(EOF) do + begin + vtOdpady.Append; + vtOdpady.FieldByName('colID').AsInteger:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtOdpady.FieldByName('colStroj').AsString:= VarToStr(FieldByNameValues('Nazev')); + vtOdpady.FieldByName('colDatum').AsString:= VarToStr(FieldByNameValues('Datum')); + vtOdpady.FieldByName('colPoznamka').AsString:= VarToStr(FieldByNameValues('Poznamka')); + vtOdpady.FieldByName('colSmena').AsInteger:= VarToStr(FieldByNameValues('Smena')).ToInteger; + vtOdpady.FieldByName('colMokry').AsExtended:= VarToStr(FieldByNameValues('OdpadMokry')).ToExtended; + vtOdpady.FieldByName('colSuchy').AsExtended:= VarToStr(FieldByNameValues('OdpadSuchy')).ToExtended; + vtOdpady.Post; + Next; + end; + end; + + vtOdpady.First; + f.grdOdpady.Invalidate; + end; + + + + + procedure Tdm.NactiOdpadStroje (const f: TformPekarna); + var lSQL: string; + begin + lSQL:= 'SELECT OdpadSuchy, OdpadMokry, Poznamka FROM ' + tblOdpadPek + ' WHERE IDStroje=' + aktIdStroj.ToString + ' AND Datum=dbo.hf_TruncDate(GETDATE()) AND Smena=' + f.edtOdpadSmena.Text; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + f.edtOdpadSuchy.Value:= VarToStr(FieldByNameValues('OdpadSuchy')).ToExtended; + f.edtOdpadMokry.Value:= VarToStr(FieldByNameValues('OdpadMokry')).ToExtended; + f.edtOdpadPoznamka.Text:= VarToStr(FieldByNameValues('Poznamka')); + end + else + begin + f.edtOdpadSuchy.Value:= 0; + f.edtOdpadMokry.Value:= 0; + end; + end; + + + + + + procedure Tdm.NactiObjednavkyPolozky (const idKmen: integer); + var lSQL: string; + idObj: integer; + begin + if not(vtObjednavkaMat.Active) then + vtObjednavkaMat.Open; + vtObjednavkaMat.EmptyDataset; + lSQL:= 'SELECT o.ID, o.SkupZbo, o.RegCis, k.Nazev1, o.Mnozstvi, dbo.hf_TruncDate(o.DatPorizeni) AS DatPorizeni, o.Poznamka, o.Autor FROM ' + tblObjednavky; + lSQL:= lSQL + ' o INNER JOIN ' + tblKZ + ' k ON (k.ID=o.IdKmenZbozi) WHERE k.ID=' + idKmen.toString; + lSQL:= lSQL + ' ORDER BY o.DatPorizeni'; + with Helios.OpenSQL(lSQL) do + begin + First; + while not(EOF) do + begin + idObj:= VarToStr(FieldByNameValues('ID')).ToInteger; + + vtObjednavkaMat.Append; + vtObjednavkaMat.FieldByName('colCisloObj').AsInteger:= idObj; + vtObjednavkaMat.FieldByName('colMnozstvi').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; + vtObjednavkaMat.FieldByName('colDatum').AsString:= VarToStr(FieldByNameValues('DatPorizeni')); + vtObjednavkaMat.FieldByName('colPoznamka').AsString:= VarToStr(FieldByNameValues('Poznamka')); + vtObjednavkaMat.FieldByName('colObjednatel').AsString:= VarToStr(FieldByNameValues('Autor')); + + lSQL:= 'SELECT SUM(pzV.Mnozstvi) FROM ' + tblObjednavky + ' o INNER JOIN ' + tblObjednavkyPol + ' po ON (po.IDHlava=o.ID) INNER JOIN '; + lSQL:= lSQL + tblPZ + ' pzV ON (pzV.ID=po.IDPohybOZ AND pzV.DruhPohybuZbo=4) INNER JOIN ' + tblPZ + ' pzP ON (pzV.ID=pzP.IdOldPolozka AND pzP.DruhPohybuZbo=0)'; + lSQL:= lSQL + ' WHERE pzP.SkutecneDatReal IS NOT NULL AND o.ID=' + idObj.ToString; + vtObjednavkaMat.FieldByName('colDodano').AsExtended:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); + + vtObjednavkaMat.Post; + + Next; + end; + end; + + vtObjednavkaMat.First; + end; + + + + + + procedure Tdm.NactiZasobaObjednavky (const f: TformZasobaObjednavky); + var lSQL: string; + cnt, idKmen: integer; + begin + if not(vtZasobyObjednavky.Active) then + vtZasobyObjednavky.Open; + vtZasobyObjednavky.EmptyDataset; +{ + lSQL:= 'SELECT ID, SkupZbo, RegCis, Nazev1, MJEvidence FROM ' + tblKZ + ' WHERE Material=1 OR ID IN (SELECT IDKmenZbozi FROM ' + tblSS + ' WHERE IDSklad IN (N''211'',N''311''))'; + lSQL:= lSQL + ' OR ID IN (SELECT IDKmenZbozi FROM ' + tblObjednavky + ') ORDER BY Nazev1'; +} + lSQL:= 'SELECT k.ID, k.SkupZbo, k.RegCis, k.Nazev1, k.MJEvidence FROM ' + tblKZ + ' k INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE ke._Vyroba_ProObjednavku=1'; + + with Helios.OpenSQL(lSQL) do + begin + helUtils.waitSetProgBarMax(RecordCount); + helUtils.waitSetProgBar(0); + cnt:= 0; + + First; + while not(EOF) do + begin + idKmen:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtZasobyObjednavky.Append; + vtZasobyObjednavky.FieldByName('colIDKmen').AsInteger:= idKmen; + vtZasobyObjednavky.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtZasobyObjednavky.FieldByName('colRC').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtZasobyObjednavky.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtZasobyObjednavky.FieldByName('colMJ').AsString:= VarToStr(FieldByNameValues('MJEvidence')); + + vtZasobyObjednavky.FieldByName('colSklad').AsExtended:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N''311'' AND IDKmenZbozi=' + idKmen.ToString); + + + lSQL:= 'SELECT SUM(pP.Mnozstvi) FROM ' + tblPZ + ' pV INNER JOIN ' + tblPZ + ' pP ON (pP.IDOldPolozka=pV.ID AND pP.DruhPohybuZbo=0) WHERE pP.SkutecneDatReal IS NULL'; + lSQL:= lSQL + ' AND pV.ID (SELECT IDPohybOZ FROM ' + tblObjednavkyPol + ' WHERE IDHlava IN (SELECT ID FROM ' + tblObjednavky + ' WHERE IDKmenZbozi=' + idKmen.ToString + '))'; + vtZasobyObjednavky.FieldByName('colNaCeste').AsExtended:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); + + + lSQL:= 'SELECT ISNULL(SUM(o.Mnozstvi),0) FROM ' + tblObjednavky + ' o WHERE o.IDKmenZbozi=' + idKmen.ToString; + lSQL:= lSQL + ' AND NOT EXISTS(SELECT 1 FROM ' + tblObjednavkyPol + ' WHERE IDHlava=o.ID)'; +// lSQL:= lSQL + ' OR EXISTS (SELECT 1 FROM ' + tblObjednavkyPol + ' op INNER JOIN ' + tblPZ + ' p ON (op.IDPohybOZ=p.ID) WHERE p.DruhPohybuZbo=4 AND p.SkutecneDatReal IS NULL AND op.IDHlava=o.ID) + vtZasobyObjednavky.FieldByName('colObjednano').AsExtended:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); + + vtZasobyObjednavky.Post; + + Inc(cnt); + if (cnt mod 20=0) then + helUtils.waitSetProgBar(cnt); + + Next; + end; + end; + + helUtils.waitEnd; + vtZasobyObjednavky.First; + f.grdZasobaObjednavky.Invalidate; + end; + + + + + + procedure Tdm.NactiZahajeniVyrobyPalety (const f: TformZahajeniVyrobyPalety); + var lSQL, lSQL2: string; + cnt, idPrikaz, idKmen, idStroj: integer; + ksVKA, KAnaPal: extended; + begin + + if not(vtZahajeniVyrobyPalety.Active) then + vtZahajeniVyrobyPalety.Open; + vtZahajeniVyrobyPalety.EmptyDataset; + lSQL:= 'SELECT p.ID, p.Rada, p.Prikaz, p.Plan_zadani, k.ID AS idKZ, k.SkupZbo, k.RegCis, k.Nazev1, k.MJEvidence FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen)'; + lSQL:= lSQL + ' WHERE p.StavPrikazu=30 ORDER BY p.Plan_zadani'; + with Helios.OpenSQL(lSQL) do + begin + helUtils.waitSetProgBarMax(RecordCount); + helUtils.waitSetProgBar(0); + cnt:= 0; + + First; + while not(EOF) do + begin + idPrikaz:= VarToStr(FieldByNameValues('ID')).ToInteger; + idKmen:= VarToStr(FieldByNameValues('idKZ')).ToInteger; + + vtZahajeniVyrobyPalety.Append; + vtZahajeniVyrobyPalety.FieldByName('colIDPrikaz').AsInteger:= idPrikaz; + vtZahajeniVyrobyPalety.FieldByName('colIDKmen').AsInteger:= idKmen; + vtZahajeniVyrobyPalety.FieldByName('colRada').AsString:= VarToStr(FieldByNameValues('Rada')); + vtZahajeniVyrobyPalety.FieldByName('colPrikaz').AsInteger:= VarToStr(FieldByNameValues('Prikaz')).ToInteger; + vtZahajeniVyrobyPalety.FieldByName('colDatPlanZahajeni').AsDateTime:= StrToDateTime(VarToStr(FieldByNameValues('Plan_zadani'))); + + vtZahajeniVyrobyPalety.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtZahajeniVyrobyPalety.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtZahajeniVyrobyPalety.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtZahajeniVyrobyPalety.FieldByName('colMJ').AsString:= VarToStr(FieldByNameValues('MJEvidence')); + + + if (helUtils.SQLObjectExists(Helios, 'dbo.ef_DilecGetStroj')) then + begin + idStroj:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT dbo.ef_DilecGetStroj (' + idKmen.ToString + ', default)'); + if (idStroj>0) then + vtZahajeniVyrobyPalety.FieldByName('colIDStroj').AsInteger:= idStroj; + end; + + vtZahajeniVyrobyPalety.Post; + + Inc(cnt); + if (cnt mod 20=0) then + helUtils.waitSetProgBar(cnt); + + Next; + end; + end; + + helUtils.waitEnd; + vtZahajeniVyrobyPalety.First; + f.grdZahajeniVyrobyPalety.Invalidate; + + end; + + + + + + procedure Tdm.NactiVyrobuMimoPlan (const f: TformVyrobaMimoPlan); + var lSQL, lSQL2: string; + cnt, idKmen, idStroj: integer; + ksVKA, KAnaPal: extended; + begin + + if not(vtVyrobaMimoPlan.Active) then + vtVyrobaMimoPlan.Open; + vtVyrobaMimoPlan.EmptyDataset; + lSQL:= 'SELECT ID, SkupZbo, RegCis, Nazev1, MJEvidence FROM ' + tblKZ + ' WHERE Dilec=1 AND ISNULL(TRY_PARSE(SkupZbo AS INT),0) BETWEEN 703 AND 799'; +// lSQL:= lSQL + ' SkupZbo LIKE N''7%'' AND SkupZbo NOT LIKE N''70%'' AND SkupZbo NOT LIKE N''8%'''; + lSQL:= lSQL + ' ORDER BY Nazev1'; + with Helios.OpenSQL(lSQL) do + begin + helUtils.waitSetProgBarMax(RecordCount); + helUtils.waitSetProgBar(0); + cnt:= 0; + + First; + while not(EOF) do + begin + idKmen:= VarToStr(FieldByNameValues('ID')).ToInteger; + + vtVyrobaMimoPlan.Append; + vtVyrobaMimoPlan.FieldByName('colIDKmen').AsInteger:= idKmen; + vtVyrobaMimoPlan.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtVyrobaMimoPlan.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtVyrobaMimoPlan.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtVyrobaMimoPlan.FieldByName('colMJ').AsString:= VarToStr(FieldByNameValues('MJEvidence')); + + lSQL2:= 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=''KA'' AND KodMJ2=N''ks'''; + ksVKA:= helUtils.getHeliosFloatVal(Helios, 0, lSQL2); + vtVyrobaMimoPlan.FieldByName('colBaleni1').AsExtended:= ksVKA; + + lSQL2:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=''KA'' AND KodMJ2=N''pal'''; + KAnaPal:= helUtils.getHeliosFloatVal(Helios, 0, lSQL2); + vtVyrobaMimoPlan.FieldByName('colBaleni2').AsExtended:= KAnaPal; + + vtVyrobaMimoPlan.FieldByName('colBaleni3').AsExtended:= ksVKA * KAnaPal; + + if (helUtils.SQLObjectExists(Helios, 'dbo.ef_DilecGetStroj')) then + begin + idStroj:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT dbo.ef_DilecGetStroj (' + idKmen.ToString + ', default)'); + if (idStroj>0) then + begin + vtVyrobaMimoPlan.FieldByName('colIDStroj').AsInteger:= idStroj; + vtVyrobaMimoPlan.FieldByName('colStroj').AsString:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + idStroj.ToString); + end; + end; + + lSQL2:= 'SELECT 1 FROM ' + tblKVaz + ' WHERE vyssi=' + idKmen.ToString + ' AND nizsi IN (SELECT ID FROM ' + tblKZ + ' WHERE SkupZbo LIKE N''70%'')'; + if (helUtils.sqlExistsTestGeneral(Helios, lSQL2)) then + begin + lSQL2:= 'SELECT TOP(1) n.Nazev1 FROM ' + tblKVaz + ' v INNER JOIN ' + tblKZ + ' n ON (n.ID=v.nizsi) WHERE v.vyssi=' + idKmen.ToString + ' AND n.SkupZbo LIKE N''70%'''; + lSQL2:= lSQL2 + ' AND n.MJEvidence LIKE N''1000%'''; + vtVyrobaMimoPlan.FieldByName('colZaklad').AsString:= helUtils.getHeliosStrVal(Helios, '', lSQL2); + end; + + vtVyrobaMimoPlan.Post; + + Inc(cnt); + if (cnt mod 20=0) then + helUtils.waitSetProgBar(cnt); + + Next; + end; + end; + + helUtils.waitEnd; + vtVyrobaMimoPlan.First; + f.grdVyrobaMimoPlan.Invalidate; + end; + + + + + + + procedure Tdm.NactiPredvyrobuDetail (const f: TformPredvyrobaDetail; idKmen: Integer); + var lSQL, dVyr: string; + idPZ, pocetVC: integer; + ksVKA: extended; + begin + lSQL:= 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=''KA'' AND KodMJ2=N''ks'''; + ksVKA:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); + + if not(vtPredvyrobaDetail.Active) then + vtPredvyrobaDetail.Open; + vtPredvyrobaDetail.EmptyDataset; + lSQL:= 'SELECT p.ID, k.SkupZbo, k.RegCis, k.Nazev1, p.Mnozstvi, p.MJ, FORMAT(p.DatPorizeni, ''dd.MM.yyyy hh:mm'', ''de-de'') AS DatPorizeni FROM ' + tblPZ; + lSQL:= lSQL + ' p INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)'; + LSQL:= lSQL + ' WHERE k.ID=' + idKmen.ToString + ' ORDER BY p.DatPorizeni DESC'; + with Helios.OpenSQL(lSQL) do + begin + First; + while not(EOF) do + begin + vtPredvyrobaDetail.Append; + idPZ:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtPredvyrobaDetail.FieldByName('colIDPZ').AsInteger:= idPZ; + vtPredvyrobaDetail.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtPredvyrobaDetail.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtPredvyrobaDetail.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtPredvyrobaDetail.FieldByName('colKA').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; + vtPredvyrobaDetail.FieldByName('colKs').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended * ksVKA; + dVyr:= VarToStr(FieldByNameValues('DatPorizeni')); + vtPredvyrobaDetail.FieldByName('colDatumVyroby').AsString:= dVyr; + if (dVyr<>'') then + vtPredvyrobaDetail.FieldByName('colStav').AsInteger:= 0; + + pocetVC:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT COUNT(ID) FROM ' + tblVyrCP + ' WHERE IDPolozkaDokladu=' + idPZ.ToString); + if (pocetVC=1) then + begin + lSQL:= 'SELECT TOP(1) vcs.Nazev1 FROM ' + tblVyrCP + ' vcp INNER JOIN ' + tblVyrCS + ' vcs ON (vcs.ID=vcp.IDVyrCis) WHERE vcp.IDPolozkaDokladu=' + idPZ.ToString; + vtPredvyrobaDetail.FieldByName('colCisloPL').AsString:= helUtils.getHeliosStrVal (Helios, '', lSQL); + end; + + + vtPredvyrobaDetail.Post; + Next; + end; + end; + vtPredvyrobaDetail.First; + f.grdPredvyrobaDetail.Invalidate; + end; + + + + + + procedure Tdm.NactiPredvyrobu (const f: TformPredvyroba); + var lSQL, lSQL2, stroj: string; + idKZ: integer; + bal: Extended; + begin + if not(vtPredvyroba.Active) then + vtPredvyroba.Open; + vtPredvyroba.EmptyDataset; + lSQL:= 'SELECT s.IDKmenZbozi, k.SkupZbo, k.RegCis, k.Nazev1, k.MJEvidence FROM ' + tblSS + ' s INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi) WHERE s.IDSklad=N''211'''; + lSQL:= lSQL + ' AND k.ID IN (SELECT ID FROM ' + tblKZ + ' WHERE Nazev1 LIKE N''%polotovar%'') ORDER BY k.CisloZbozi'; + with Helios.OpenSQL(lSQL) do + begin + First; + while not(EOF) do + begin + idKZ:= VarToStr(FieldByNameValues('IDKmenZbozi')).ToInteger; + vtPredvyroba.Append; + vtPredvyroba.FieldByName('colIDKmen').AsInteger:= idKZ; + vtPredvyroba.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtPredvyroba.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtPredvyroba.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtPredvyroba.FieldByName('colMJ').AsString:= VarToStr(FieldByNameValues('MJEvidence')); + + lSQL2:= 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + ' AND KodMJ1=''KA'' AND KodMJ2=N''ks'''; + bal:= helUtils.getHeliosFloatVal(Helios, 0, lSQL2); + vtPredvyroba.FieldByName('colBaleni').AsExtended:= bal; + + lSQL2:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + ' AND KodMJ1=''KA'' AND KodMJ2=N''pal'''; + bal:= helUtils.getHeliosFloatVal(Helios, 0, lSQL2); + vtPredvyroba.FieldByName('colBaleni2').AsExtended:= bal; + + vtPredvyroba.Post; + Next; + end; + end; + vtPredvyroba.First; + f.grdPredvyroba.Invalidate; + end; + + + + + procedure Tdm.UkonciEvidRozpracOper (const idEvROp: Integer; var errMsg: string); + var lSQL: string; + begin + errMsg:= ''; + if (idEvROp>0) and (helUtils.HeliosExistsTestSQL(Helios, 'SELECT 1 FROM ' + tblRozpracOper + ' WHERE Stav<30 AND ID=' + idEvROp.ToString)) then + begin + lSQL:= 'DECLARE @casKonec=GETDATE(), @casStart DATETIME, @s INT' + CRLF + 'SELECT @casStart=CasZahajeni FROM ' + tblRozpracOper + ' WHERE ID=' + idEvROp.ToString + CRLF; + lSQL:= lSQL + 'SET @s = DATEDIFF(s, @casStart, @casKonec)' + CRLF; + lSQL:= lSQL + 'UPDATE ' + tblRozpracOper + ' SET CasUkonceni=@casKonec, CelkovyCas=ROUND(@s/60.0, 1) WHERE ID=' + idEvROp.ToString + CRLF; + lSQL:= lSQL + 'UPDATE ' + tblRozpracOperR + ' SET Sk_cas=@s, Sk_cas_Obsluhy=@s, Mnoz_odv=0 WHERE IDEvidRozpracOper=' + idEvROp.ToString; + lSQL:= lSQL + 'EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=' + idEvROp.ToString + ', @GenerovatEvidenciOperaci=0' + CRLF; + try + Helios.ExecSQL(lSQL); + except on E:Exception do + errMsg:= E.Message; + end; + end; + end; + + + + + + procedure Tdm.NactiVyrobniDenik (f: TformVyrobniDenik; den: TDateTime); + var lSQL, datReq, mjEvid: string; + bidXVyrobniDenik: integer; + kaNaPal, ksVKA: integer; + mnozKA: Extended; + h,m: byte; + begin + + if not(vtVyrobniDenik.Active) then + vtVyrobniDenik.Open; + vtVyrobniDenik.EmptyDataset; + + if (helUtils.SQLObjectExists (Helios, constHvwVyrobaVyrobniDenik)) then + begin + bidXVyrobniDenik:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N' + constHvwVyrobaVyrobniDenik.QuotedString); + if (bidXVyrobniDenik>0) then + begin + lSQL:= helUtils.getHeliosStrVal (Helios, '', 'SELECT DefView FROM ' + tblObecPrehled + ' WHERE NazevSys=N' + constHvwVyrobaVyrobniDenik.QuotedString); + if (den=0) then + den:= Now; + lSQL:= lSQL.Replace('1.1.1999', FormatDateTime ('dd.mm.yyyy', den.GetDate)); + end; + end; +// else +// Helios.Error(#1'Neexistuje definovaný přehled ' + constHvwVyrobaVyrobniDenik + #1) + + + lSQL:= 'SELECT DISTINCT(s.Nazev) AS Stroj,' + + ' dbo.hf_TruncDate(DATEADD(day, IIF(DATEPART(hour, dz.DatPorizeni)<6, -1, 0), dz.DatPorizeni)) AS Datum,' + + ' dbo.ef_VyrobniDenik_GetSmenu(dz.DatPorizeni) AS Smena,' + + ' k.ID AS idKZ, k.CisloZbozi, pz.RegCis, pz.Nazev1, SUM(pz.Mnozstvi) AS Mnozstvi, pz.MJEvidence' + + ' FROM dbo.TabPrikazMzdyAZmetkyGenPZ pmzg' + + ' INNER JOIN dbo.TabPrikazMzdyAZmetky pmz ON (pmz.ID=pmzg.IDMzdy)' + + ' INNER JOIN ' + tblPZ + ' pz ON (pmzg.IDPohybu=pz.ID)' + + ' INNER JOIN ' + tblSS + ' ss ON (ss.ID=pz.IDZboSklad)' + + ' INNER JOIN ' + tblKZ + ' k ON (k.ID=ss.IDKmenZbozi)' + + ' INNER JOIN ' + tblDZ + ' dz ON (dz.ID=pz.IDDoklad)' + + ' INNER JOIN ' + tblCStroju + ' s ON (pmz.IDStroje=s.ID)' + + ' WHERE dz.IDSklad IN (N''211'', N''312'')' // sklad pekarna + hlavni sklad vyrobky zbozi + + ' AND dz.DruhPohybuZbo=0' + + ' AND pz.TypVyrobnihoDokladu=0' + + ' AND ((1=1) OR (dbo.hf_TruncDate(DATEADD(day, IIF(DATEPART(hour, dz.DatPorizeni)<6, -1, 0), dz.DatPorizeni))=CONVERT(datetime, N''1.1.1999'', 104) ) )' + + ' GROUP BY s.Nazev,' + + ' dbo.hf_TruncDate(DATEADD(day, IIF(DATEPART(hour, dz.DatPorizeni)<6, -1, 0), dz.DatPorizeni)),' + + ' dbo.ef_VyrobniDenik_GetSmenu(dz.DatPorizeni),' + + ' k.ID, k.CisloZbozi, pz.RegCis, pz.Nazev1, pz.MJEvidence'; + + if (den=0) then + den:= Now; + lSQL:= lSQL.Replace('1.1.1999', FormatDateTime ('dd.mm.yyyy', den.GetDate)); + + + + + + + h:= HourOf(Now); + m:= MinuteOf(Now); + + lSQL:= 'DECLARE @datOd DATETIME, @datDo DATETIME' + CRLF; + + if (h>=6) then + begin + lSQL:= lSQL + 'SET @datOd=DATEADD(hour, 6, dbo.hf_TruncDate(' + helUtils.SQLDatetimeConvert(den) + '))' + CRLF; + lSQL:= lSQL + 'SET @datDo=DATEADD(hour, 6, dbo.hf_TruncDate(' + helUtils.SQLDatetimeConvert(den+1) + '))' + CRLF; + end + else + begin + lSQL:= lSQL + 'SET @datOd=DATEADD(hour, 6, dbo.hf_TruncDate(' + helUtils.SQLDatetimeConvert(den-1) + '))' + CRLF; + lSQL:= lSQL + 'SET @datDo=DATEADD(hour, 6, dbo.hf_TruncDate(' + helUtils.SQLDatetimeConvert(den) + '))' + CRLF; + end; + + lSQL:= lSQL + 'SELECT * FROM ('; + lSQL:= lSQL + 'SELECT p.Mnozstvi, k.MJEvidence, k.ID AS idKZ, k.CisloZbozi, k.Nazev1, N'''' AS Udalost, p.DatPorizeni, (SELECT Smena FROM dbo.ef_GetDatumASmenu(p.DatPorizeni)) AS Smena'; + lSQL:= lSQL + ', (SELECT Datum FROM dbo.ef_GetDatumASmenu(p.DatPorizeni)) AS Datum, st.Nazev AS Stroj FROM ' + tblPZ + ' p'; + lSQL:= lSQL + ' INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi) LEFT JOIN ' + tblPMZGenPZ + ' pmzg ON (pmzg.IDPohybu=p.ID)'; + lSQL:= lSQL + ' LEFT JOIN ' + tblPMZ + ' pmz ON (pmz.ID=pmzg.IDMzdy) LEFT JOIN ' + tblCStroju + ' st ON (st.ID=pmz.IDStroje)'; + lSQL:= lSQL + ' WHERE k.Dilec=1 AND p.DatPorizeni BETWEEN @datOd AND @datDo'; // ORDER BY p.DatPorizeni'; + lSQL:= lSQL + CRLF + 'UNION ALL' + CRLF; + lSQL:= lSQL + 'SELECT 0, N'''', 0, N'''', N'''', c.Cinnost, c.DatPorizeni, (SELECT Smena FROM dbo.ef_GetDatumASmenu(c.DatPorizeni)) AS Smena'; + lSQL:= lSQL + ', (SELECT Datum FROM dbo.ef_GetDatumASmenu(c.DatPorizeni)) AS Datum, st.Nazev AS Stroj FROM ' + tblCinnostStr + ' c'; + lSQL:= lSQL + ' LEFT JOIN ' + tblCStroju + ' st ON (st.ID=c.IDStroje)'; + lSQL:= lSQL + ' WHERE c.DatPorizeni BETWEEN @datOd AND @datDo'; // ORDER BY c.DatPorizeni'; + lSQL:= lSQL + ') x ORDER BY x.DatPorizeni'; + + + if (lSQL<>'') then + begin + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + mjEvid:= VarToStr(FieldByNameValues('MJEvidence')); + idKZ:= VarToStr(FieldByNameValues('idKZ')).ToInteger; + mnozKA:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; + kaNaPal:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + + ' AND KodMJ1=N''KA'' AND KodMJ2=N''pal'' AND PocetOdvozene=1'); + ksVKA:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Ks'' AND PocetHlavni=1'); + + vtVyrobniDenik.Append; + vtVyrobniDenik.FieldByName('colCisloZbozi').AsString:= VarToStr(FieldByNameValues('CisloZbozi')); + vtVyrobniDenik.FieldByName('colMJ').AsString:= mjEvid; + vtVyrobniDenik.FieldByName('colUdalost').AsString:= VarToStr(FieldByNameValues('Udalost')); + vtVyrobniDenik.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtVyrobniDenik.FieldByName('colStroj').AsString:= VarToStr(FieldByNameValues('Stroj')); + vtVyrobniDenik.FieldByName('colDatum').AsString:= VarToStr(FieldByNameValues('Datum')); + vtVyrobniDenik.FieldByName('colSmena').AsInteger:= VarToStr(FieldByNameValues('Smena')).ToInteger; + vtVyrobniDenik.FieldByName('colMnozKA').AsExtended:= 0; + vtVyrobniDenik.FieldByName('colMnozPal').AsExtended:= 0; + if (mjEvid='KA') then + begin + vtVyrobniDenik.FieldByName('colMnozKA').AsExtended:= mnozKA; + vtVyrobniDenik.FieldByName('colMnozPal').AsExtended:= (mnozKA / kaNaPal); + vtVyrobniDenik.FieldByName('colMnoz').AsExtended:= mnozKA * ksVKA; + end; + vtVyrobniDenik.Post; + Next; + end; + end; + end; + + vtVyrobniDenik.First; + f.grdVyrobniDenik.Invalidate; + + end; + + + + + + + function Tdm.ZapisVyrobenePaletyNestandard (const f: TformPrijemNestandard; idKmen: integer; idStroj: integer): boolean; + var lSQL: string; + begin + result:= true; + + lSQL:= 'DROP TABLE IF EXISTS #TabPrijemNestandard' + CRLF + 'CREATE TABLE #TabPrijemNestandard (IDKmen INT, MnozstviKg NUMERIC(19,6) NOT NULL DEFAULT 0.0, PaletovyList NVARCHAR(50)'; + lSQL:= lSQL + ', Sarze NVARCHAR(50), DatumVyroby DATETIME, DatumExpirace DATETIME, Smena TINYINT, IDStroje INT)' + CRLF; + lSQL:= lSQL + 'INSERT #TabPrijemNestandard (IDKmen, MnozstviKg, PaletovyList, Sarze, DatumVyroby, DatumExpirace, Smena, IDStroje) SELECT ' + idKmen.ToString; + lSQL:= lSQL + ', ' + f.edtKA.Value.ToString.Replace(',', '.') + ', N' + f.edtPaletList.Text.Trim.QuotedString + ', N' + f.edtSarze.Text.Trim.QuotedString; + lSQL:= lSQL + ', ' + helUtils.SQLDatetimeConvert (f.edtDatVyroba.DateTime, false) + ', ' + helUtils.SQLDatetimeConvert (f.edtDatSpotreba.DateTime, false); + lSQL:= lSQL + ', ' + f.edtSmena.Text.Trim + ', ' + idStroj.ToString + CRLF; + lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_PrijemNestandard'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_PrijemNestandard'; + try + Helios.ExecSQL(lSQL); + except on E: Exception do + begin + result:= false; + Helios.Error(#1'Chyba zápisu příjmu nestandardu:'#1 + CRLF + E.Message); + end; + end; + + end; + + + + + procedure Tdm.NactiPaletoveListy (const typ: Integer); + var lSQL: string; + begin + if not(vtPaletListy.Active) then + vtPaletListy.Open; + vtPaletListy.EmptyDataset; + + lSQL:= ''; + if (typ=1) then + lSQL:= ''; + + if (lSQL<>'') then + with (Helios.OpenSQL(lSQL)) do + begin + First; + while not(EOF) do + begin + vtPaletListy.Append; + vtPaletListy.FieldByName('colPaletList').AsString:= ''; + vtPaletListy.FieldByName('colDatPorizeni').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtPaletListy.FieldByName('colPoznamka').AsString:= ''; + vtPaletListy.Post; + Next; + end; + vtPaletListy.First; + end; + vtPaletListy.First; + + end; + + + + + + procedure Tdm.NactiVyrobkyNestandard (const f: TformPrijemNestandard); + var lSQL: string; + begin + if not(vtPrijemNestandard.Active) then + vtPrijemNestandard.Open; + + vtPrijemNestandard.EmptyDataset; + + lSQL:= 'SELECT ID, SkupZbo, RegCis, Nazev1, MJEvidence FROM ' + tblKZ + ' WHERE Dilec=1 AND SkupZbo NOT IN (N''701'') AND Nazev1 LIKE N''%nestandard%'' ORDER BY CisloZbozi'; + with (f.Helios.OpenSQL(lSQL)) do + begin + First; + while not(EOF) do + begin + vtPrijemNestandard.Append; + vtPrijemNestandard.FieldByName('fID').AsString:= VarToStr(FieldByNameValues('ID')); + vtPrijemNestandard.FieldByName('fSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtPrijemNestandard.FieldByName('fRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtPrijemNestandard.FieldByName('fNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtPrijemNestandard.Post; + Next; + end; + vtPrijemNestandard.First; + end; + + end; + + + + + procedure Tdm.DataModuleCreate(Sender: TObject); + begin + dmCreated:= true; + end; + + + + + function Tdm.VratStroj (const Helios: IHelios; cast: string; const AID: integer): string; + begin + cast:= sqlSanitize(cast); + result:= helUtils.getHeliosStrVal(Helios, '', 'SELECT ' + cast + ' FROM ' + tblCStroju + ' WHERE ID=' + AID.ToString); + end; + + + + + + + procedure Tdm.NactiPlanStroje (const f: TformPekarna; const idStroj: integer); + var lSQL: string; + begin + if (idStroj>0) then + begin + lSQL:= 'SELECT ID FROM ' + tblVPr + ' WHERE StavPrikazu IN (20,30) AND ID NOT IN (SELECT r.IDPrikaz FROM ' + tblRozpracOper + ' h INNER JOIN ' + tblRozpracOperR; + lSQL:= lSQL + ' r ON (r.IDEvidRozpracOper=h.ID) INNER JOIN ' + tblCPrac + ' pr ON (pr.ID=h.IDPracoviste) WHERE h.Stav<30)'; + lSQL:= lSQL + ' AND Rada NOT IN (SELECT Rada FROM ' + tblPrikazRada + ' WHERE nazev LIKE N''%údržb%'')'; + + lSQL:= 'SELECT vp.ID, k.ID AS idKZ, k.RegCis, k.SkupZbo + N'' '' + k.RegCis AS CisloZbozi2, k.Nazev1, dbo.hf_TruncDate(vp.Plan_zadani) AS Plan_zadani, vp.kusy_zad,' + + ' vp.kusy_zive, vp.kusy_odved, ISNULL(z.CisloZakazky,N'''') AS CisloZakazky, vp.RadaPrikaz FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) LEFT JOIN ' + + tblZak + ' z ON (z.ID=vp.IDZakazka) WHERE k.SkupZbo<>N''701'' AND vp.ID IN (' + lSQL + ')' +// + tblZak + ' z ON (z.ID=vp.IDZakazka) WHERE k.SkupZbo NOT LIKE N''70%'' AND vp.ID IN (' + lSQL + ')' + + ' AND EXISTS(SELECT 1 FROM ' + tblPrPost + ' WHERE IDPrikaz=vp.ID AND IdOdchylkyDo IS NULL AND IDStroje=' + idStroj.ToString +') ORDER BY vp.Plan_zadani'; + + vtPlanDnes.DisableControls; + try + with (f.Helios.OpenSQL(lSQL)) do + begin + First; + if not(vtPlanDnes.Active) then + vtPlanDnes.Open; + vtPlanDnes.EmptyDataset; + + aktIdKmenPlan:= 0; + + while not(EOF) do // prikazy co nejsou nastartovane, ale zadane do vyroby + begin + vtPlanDnes.Append; + vtPlanDnes.FieldByName('fIDPlan').AsString:= VarToStr(FieldByNameValues('ID')); // ID prikaz + vtPlanDnes.FieldByName('fRegCis').AsString:= VarToStr(FieldByNameValues('CisloZbozi2')); + vtPlanDnes.FieldByName('fVyrobek').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtPlanDnes.FieldByName('fHotovo').AsExtended:= VarToStr(FieldByNameValues('kusy_odved')).ToExtended; + vtPlanDnes.FieldByName('fMnozZive').AsExtended:= VarToStr(FieldByNameValues('kusy_zive')).ToExtended; + vtPlanDnes.FieldByName('fZakazka').AsString:= VarToStr(FieldByNameValues('RadaPrikaz')).Replace(' ', ''); + vtPlanDnes.FieldByName('fDatPlanZadani').AsString:= VarToStr(FieldByNameValues('Plan_zadani')); + vtPlanDnes.Post; + Next; + end; + end; + except on E:Exception do + lSQL:= E.Message; + end; + + if (datMod.bmIdPlanDnes=0) then + vtPlanDnes.First + else + if not(vtPlanDnes.Locate('fIDPlan', VarArrayOf([datMod.bmIdPlanDnes]), [loPartialKey])) then + begin + datMod.bmIdPlanDnes:= 0; + vtPlanDnes.First; + end; + + + vtPlanDnes.EnableControls; + end; + + end; + + + + + + procedure Tdm.NactiRozpracovane (const f: TformPekarna); + var lSQL: string; + idVPr, idH, idS, idK, radaPrikaz, cisloPL: string; + mnVCP, mnZbytVCPP: Extended; + i1, i2: integer; + begin + lSQL:= 'SELECT DISTINCT(vp.ID) FROM ' + tblPrPost + ' prp INNER JOIN ' + tblPrikaz + ' vp ON (vp.ID=prp.IDPrikaz)'; + lSQL:= lSQL + ' WHERE vp.StavPrikazu=40 AND prp.IDOdchylkyDo IS NULL AND prp.typ<2 AND prp.IDStroje=' + aktIdStroj.ToString + ' GROUP BY vp.ID'; +{ + lSQL:= 'SELECT e.ID, e.CasZahajeni, e.IDStroje FROM ' + tblRozpracOper + ' e WHERE e.Stav<30 /*AND IDStroje=' + aktIdStroj.ToString + ' */'; + lSQL:= lSQL + ' AND e.ID NOT IN (SELECT er.IDEvidRozpracOper FROM ' + tblRozpracOperR + ' er INNER JOIN ' + tblPrikaz + ' p ON (p.ID=er.IDPrikaz) INNER JOIN ' + tblKZ; + lSQL:= lSQL + ' k ON (k.ID=p.IDTabKmen) WHERE k.SkupZbo LIKE N''70%'')'; + lSQL:= lSQL + 'ORDER BY e.DatPorizeni'; +} + lSQL:= 'SELECT vp.ID, vp.IDTabKmen FROM ' + tblPrikaz + ' vp INNER JOIN ' + + tblKZ + ' kz ON (kz.ID=vp.IDTabKmen) WHERE vp.ID IN (' + lSQL + ') ORDER BY vp.DatPorizeni'; + +{ + lSQL:= 'SELECT DISTINCT(vcp.VyrCislo), vcp.Popis, vcp.ID FROM ' + tblRozpracOperR + ' r INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper) INNER JOIN ' + tblPrikazVC + ' vcp ON (vcp.ID=r.IDVyrCis)' + + ' INNER JOIN ' + tblPrikaz + ' vp ON (vcp.IDPrikaz=vp.ID) INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE h.DatumUzavreni IS NULL AND r.IDVyrCis IS NOT NULL GROUP BY vcp.VyrCislo'; +} + lSQL:= 'SELECT DISTINCT(vp.ID) AS ID, vp.IDTabKmen FROM ' + tblRozpracOperR + ' r INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper) INNER JOIN ' + tblPrikazVC + ' vcp ON (vcp.ID=r.IDVyrCis)' + + ' INNER JOIN ' + tblPrikaz + ' vp ON (vcp.IDPrikaz=vp.ID) INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE h.DatumUzavreni IS NULL AND r.IDVyrCis IS NOT NULL GROUP BY vp.ID, vp.IDTabKmen'; + + Helios.ExecSQL ('DELETE FROM ' + tblPalety + ' WHERE IDPrikaz NOT IN (SELECT ID FROM ' + tblVPr + ')'); + Helios.ExecSQL ('MERGE ' + tblPalety + ' AS T USING ' + tblPaletyUkonceni + ' AS S ON (S.IDPalety=T.ID) WHEN MATCHED AND T.DatUkonceni IS NULL THEN UPDATE SET T.DatUkonceni=S.DatPorizeni;'); + + lSQL:= 'SELECT CisloPalety, IDPrikaz, DatZahajeni, IDStroj FROM ' + tblPalety + ' WHERE DatZahajeni IS NOT NULL AND DatUkonceni IS NULL'; + + + with (f.Helios.OpenSQL(lSQL)) do + begin + if not(vtRozpracPL.Active) then + vtRozpracPL.Open; + vtRozpracPL.EmptyDataset; + aktIdKmenRozprac:= 0; + First; + while not(EOF) do + begin + cisloPL:= VarToStr(FieldByNameValues('CisloPalety')); + idVPr:= VarToStr(FieldByNameValues('IDPrikaz')); + + if (idVPr<>'') and (helUtils.IsNumeric(idVPr)) then + begin + if not(helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblVPr + ' WHERE ID=' + idVPr)) then + Next; + + idK:= helUtils.getHeliosStrVal (Helios, '', 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idVPr); + + vtRozpracPL.Append; + vtRozpracPL.FieldByName('fIDPrikaz').AsString:= idVPr; + idS:= VarToStr(FieldByNameValues('IDStroj')); + vtRozpracPL.FieldByName('fIDStroj').AsString:= idS; + vtRozpracPL.FieldByName('fStroj').AsString:= helUtils.getHeliosStrVal(f.Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + idS); + vtRozpracPL.FieldByName('fAktPaletList').AsString:= cisloPL; + vtRozpracPL.FieldByName('fDatStart').AsString:= VarToStr(FieldByNameValues('DatZahajeni')); + + with Helios.OpenSQL('SELECT SkupZbo, RegCis, Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idK) do + begin + vtRozpracPL.FieldByName('fSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtRozpracPL.FieldByName('fRC').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtRozpracPL.FieldByName('fCisloZbozi').AsString:= vtRozpracPL.FieldByName('fSZ').AsString + ' ' + vtRozpracPL.FieldByName('fRC').AsString; + vtRozpracPL.FieldByName('fVyrobek').AsString:= VarToStr(FieldByNameValues('Nazev1')); + end; + + vtRozpracPL.Post; + end; + Next; + end; + end; + + +{ + with (f.Helios.OpenSQL(lSQL)) do + begin + if not(vtRozpracPL.Active) then + vtRozpracPL.Open; + vtRozpracPL.EmptyDataset; + aktIdKmenRozprac:= 0; + First; + while not(EOF) do + begin + idVPr:= VarToStr(FieldByNameValues('ID')); + idK:= VarToStr(FieldByNameValues('IDTabKmen')); + radaPrikaz:= helUtils.getHeliosStrVal(Helios, '', 'SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE ID=' + idVPr); + + idS:= '0'; + if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblPrPost + ' WHERE IDPrikaz=' + idVPr + ' AND IdOdchylkyDo IS NULL AND IDStroje=' + datMod.bmIdStroj.ToString)) then + idS:= datMod.bmIdStroj.ToString; + + cisloPL:= ''; + mnVCP:= 0; + lSQL:= 'SELECT TOP(1) vcs.Nazev1, vcp.Mnozstvi FROM ' + tblPZ + ' p INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad) INNER JOIN ' + tblVPr + ' vp ON (vp.ID=p.IDPrikaz) INNER JOIN ' + tblSS; + lSQL:= lSQL + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblVyrCS + ' vcs ON (vcs.IDStavSkladu=s.ID) INNER JOIN ' + tblVyrCP + ' vcp ON (vcp.IDPolozkaDokladu=p.ID AND vcp.IDVyrCis=vcs.ID)'; + lSQL:= lSQL + ' WHERE p.DruhPohybuZbo=0 AND vp.ID=' + idVPr + ' AND p.TypVyrobnihoDokladu=0 ORDER BY p.DatPorizeni DESC'; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + cisloPL:= VarToStr(FieldByNameValues('Nazev1')); + mnVCP:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; + end; + if not(TryStrToInt(cisloPL, i1)) then + i1:= 0; + + mnZbytVCPP:= helUtils.getHeliosFloatVal(Helios, -1, 'SELECT MnozstviZive FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idVPr + ' AND VyrCislo=N' + cisloPL.QuotedString); + if (mnZbytVCPP<=0) then // nemam zbytek na VC, tj. paleta byla odvedena kompletni, pro rozpracovanost zkus dohledat dalsi v rade + begin + lSQL:= 'SELECT VyrCislo FROM ' + tblPrikazVC + ' WHERE MnozstviZive>0 AND IDPrikaz=' + idVPr + ' AND ISNULL(TRY_PARSE(VyrCislo AS INT),0)>' + i1.ToString; + lSQL:= lSQL + ' ORDER BY TRY_PARSE(VyrCislo AS INT)'; + cisloPL:= helUtils.getHeliosStrVal(Helios, '', lSQL); + if (cisloPL<>'') then // pokud mam dalsi paletu, kolik je na ni zbytek pro vyrobu ? + mnZbytVCPP:= helUtils.getHeliosFloatVal(Helios, -1, 'SELECT MnozstviZive FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idVPr + ' AND VyrCislo=N' + cisloPL.QuotedString); + end; + + vtRozpracPL.Append; + vtRozpracPL.FieldByName('fIDPrikaz').AsString:= idVPr; + vtRozpracPL.FieldByName('fIDEvidRozp').AsString:= ''; + vtRozpracPL.FieldByName('fIDStroj').AsString:= idS; + vtRozpracPL.FieldByName('fRadaPrikaz').AsString:= radaPrikaz; + vtRozpracPL.FieldByName('fStroj').AsString:= helUtils.getHeliosStrVal(f.Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + idS); + vtRozpracPL.FieldByName('fAktPaletList').AsString:= cisloPL; + lSQL:= 'SELECT TOP(1) Datum FROM ' + tblZmenLog + ' WHERE Tabulka=N' + getPlainTabName(tblPrikaz).QuotedString + ' AND IDvTab=' + idVPr + ' ORDER BY Datum DESC'; + vtRozpracPL.FieldByName('fDatStart').AsString:= helUtils.getHeliosStrVal(Helios, '', lSQL); + vtRozpracPL.FieldByName('fColR').AsBoolean:= false; // rozpracovano ? Pokud TRUE, zobrazit tlacitko pro vyrazeni palety z vyroby + + with Helios.OpenSQL('SELECT SkupZbo, RegCis, Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idK) do + begin + vtRozpracPL.FieldByName('fSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo')); + vtRozpracPL.FieldByName('fRC').AsString:= VarToStr(FieldByNameValues('RegCis')); + vtRozpracPL.FieldByName('fCisloZbozi').AsString:= vtRozpracPL.FieldByName('fSZ').AsString + ' ' + vtRozpracPL.FieldByName('fRC').AsString; + vtRozpracPL.FieldByName('fVyrobek').AsString:= VarToStr(FieldByNameValues('Nazev1')); + end; + + vtRozpracPL.Post; + Next; + end; + end; +} + + vtRozpracPL.First; + f.grdRozpracovane.Invalidate; + end; + + + + + function Tdm.VratNazevTabulky (tabName: string; inclSchema: Boolean = False): string; + begin + result:= tabName; + result:= result.Replace(']', '').Replace('[', ''); + if (not inclSchema) then + result:= result.Replace('dbo.', ''); + end; + + + + + procedure Tdm.vtCCP1BeforeDelete (DataSet: TDataSet); + begin + if (True) then + System.SysUtils.Abort; +{ Exclude dgConfirmDelete from DBGrid1.Options } + end; + + + + + procedure Tdm.vtCCP1BeforeInsert (DataSet: TDataSet); + begin + if (DataSet.Tag=0) then + System.SysUtils.Abort; + end; + + + + + function Tdm.PocetStrojuSVyrobou: Integer; + var i: integer; + begin + result:= 0; + dm.vtStroje.DisableControls; + i:= dm.vtStroje.RecNo; + dm.vtStroje.First; + while not(dm.vtStroje.Eof) do + begin + if (dm.vtStroje.FieldByName('fCinnost').AsString='Výroba') then + Inc(Result); + dm.vtStroje.Next; + end; + dm.vtStroje.RecNo:= i; + dm.vtStroje.EnableControls; + end; + + + + + procedure Tdm.NactiCCP1ProNoveZaznamy (const f: TformKontrolaCCP1edt); + var lSQL: string; + i, i2, hod, smena: Integer; + cas: TDateTime; + begin + if (apiMod) and (1=0) then + begin + url:= apiServer + IfThen(apiServer.EndsWith('/'), '', '/') + 'vyroba/ccp1/?den='; + end + else + begin + i:= vtStroje.RecNo; + vtStroje.DisableControls; + + i2:= 0; + if not(vtStroje.Active) then + vtStroje.Open; + vtStroje.First; + while not(vtStroje.Eof) do + begin + + if (vtStroje.FieldByName('fCinnost').AsString='Výroba') then + begin + f.grdCCP1.Cells[0, i2]:= vtStroje.FieldByName('fIDStroj').AsString; + f.grdCCP1.Cells[13, i2]:= vtStroje.FieldByName('fIDPrikaz').AsString; + + f.grdCCP1.Cells[1, i2]:= vtStroje.FieldByName('fStroj').AsString; + cas:= Now; + hod:= HourOf(cas); + if (hod in [0..5]) then + smena:= 3 + else + if (hod in [6..13]) then + smena:= 1 + else + if (hod in [14..21]) then + smena:= 2 + else + smena:= 3; + f.grdCCP1.Cells[3, i2]:= smena.ToString; +// if (smena=3) and (hod<6) then +// cas:= IncDay(cas, -1); + + f.grdCCP1.Cells[2, i2]:= FormatDateTime('dd.mm.yyyy hh:nn', Now); + + f.grdCCP1.Cells[10, i2]:= vtStroje.FieldByName('fVyrobek').AsString; + f.grdCCP1.Invalidate; + Inc(i2); + end; + f.grdCCP1.Refresh; + vtStroje.Next; + end; + + vtStroje.RecNo:= i; + vtStroje.EnableControls; + end; + + end; + + + + + procedure Tdm.NactiCCP1 (const f: TformKontrolaCCP1); + var lSQL: string; + i: Integer; + begin + if (apiMod) and (1=0) then + begin + url:= apiServer + IfThen(apiServer.EndsWith('/'), '', '/') + 'vyroba/ccp1/?den='; + end + else + begin + lSQL:= 'DECLARE @dat DATETIME=NULL' + CRLF + IfThen(vyrobniDen>0, 'SET @dat=CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy hh:nn:ss', vyrobniDen).QuotedString + ',104)' + CRLF, ''); + lSQL:= lSQL + 'SELECT c.ID, c.Smena, c.Teplota, c.Rychlost, c.Hmotnost, c.Delka, c.Prumer, c.OdpovidaPredpisu, c.NapravneOpatreni, c.Uzavreno, c.Autor, s.Nazev AS NazevStroje'; + lSQL:= lSQL + ', c.DatPorizeni, c.IDStroj, k.Nazev1, FORMAT(c.DatPorizeni, N''dd\.MM\.yyyy HH\.mm'') AS DatPorizeniFmt FROM ' + tblCCP1; + lSQL:= lSQL + ' c INNER JOIN ' + tblCStroju + ' s ON (s.ID=c.IDStroj) INNER JOIN ' + tblKZ + ' k ON (k.ID=c.IDKmenZbozi)'; + if (vyrobniDen>0) then + lSQL:= lSQL + ' WHERE c.DatPorizeni_X=dbo.hf_TruncDate(@dat)'; + lSQL:= lSQL + ' ORDER BY c.DatPorizeni'; + with (f.Helios.OpenSQL(lSQL)) do + begin + f.grdCCP1.RowCount:= RecordCount + 1; + if (RecordCount>0) then + begin + i:= 0; + First; + while not(EOF) do + begin + f.grdCCP1.Cells[0, i]:= VarToStr(FieldByNameValues('IDStroj')); + f.grdCCP1.Cells[1, i]:= VarToStr(FieldByNameValues('NazevStroje')); + f.grdCCP1.Cells[2, i]:= VarToStr(FieldByNameValues('DatPorizeniFmt')); + f.grdCCP1.Cells[3, i]:= VarToStr(FieldByNameValues('Smena')); + + f.grdCCP1.Cells[4, i]:= VarToStr(FieldByNameValues('Teplota')); + f.grdCCP1.Cells[5, i]:= VarToStr(FieldByNameValues('Rychlost')); + f.grdCCP1.Cells[6, i]:= VarToStr(FieldByNameValues('Hmotnost')); + f.grdCCP1.Cells[7, i]:= VarToStr(FieldByNameValues('Delka')); + f.grdCCP1.Cells[8, i]:= VarToStr(FieldByNameValues('Prumer')); + + f.grdCCP1.Cells[10, i]:= VarToStr(FieldByNameValues('Nazev1')); + f.grdCCP1.Cells[11, i]:= VarToStr(FieldByNameValues('NapravneOpatreni')); + + Inc(i); + Next; + end; + end; + end; + end; + + f.grdCCP1.Refresh; + end; + + + + + + procedure Tdm.NactiStrojeAPraci (const f: TformPekarna); + var lSQL: string; + idStroj, idVPr, cntVz: integer; + begin + lSQL:= 'SELECT st.ID, p.Pracoviste, st.Nazev, st.Kod FROM ' + tblCStroju + ' st INNER JOIN ' + tblCPrac + ' p ON (p.ID=IDPrac) WHERE p.IDTabStrom=N' + stredPekarna.ToString.QuotedString; + lSQL:= lSQL + ' AND p.Blokovano=0 AND st.Blokovano=0 ORDER BY st.Nazev'; + + dm.vtStroje.DisableControls; + + if not(vtStroje.Active) then + vtStroje.Open; + vtStroje.EmptyDataset; + + bmIdStroj:= aktIdStroj; + + with Helios.OpenSQL(lSQL) do + begin + First; + while not(EOF) do + begin + vtStroje.Append; + idStroj:= FieldByNameValues('ID'); + if (BOF) then + datMod.aktIdStroj:= idStroj; + + vtStroje.FieldByName('fIDStroj').AsString:= idStroj.ToString; + vtStroje.FieldByName('fStroj').AsString:= VarToStr(FieldByNameValues('Nazev')); +{ + vtStroje.FieldByName('fCinnost').AsString:= datMod.getFirstWord (helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) Cinnost FROM ' + tblCinnostStr + ' WHERE IDStroje=' + + idStroj.ToString + ' ORDER BY DatPorizeni DESC')); +} + vtStroje.FieldByName('fCinnost').AsString:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) Cinnost FROM ' + tblCinnostStr + ' WHERE IDStroje=' + idStroj.ToString + + ' AND DatKonec IS NULL ORDER BY DatPorizeni DESC'); + vtStroje.FieldByName('fAktPaletList').AsString:= ''; + vtStroje.FieldByName('fVyrobenoKA').AsExtended:= 0; + + + lSQL:= 'SELECT TOP(1) e.ID, vp.ID AS idVPr, ISNULL(z.CisloZakazky, N'''') AS CisloZakazky, k.CisloZbozi, k.ID AS IDKmen, k.Nazev1, k.MJEvidence, vp.RadaPrikaz'; + lSQL:= lSQL + ', ISNULL(vc.VyrCislo, N'''') AS VyrCislo, ISNULL(eoe._Sarze, N'''') AS Sarze FROM ' + tblRozpracOper; + lSQL:= lSQL + ' e INNER JOIN ' + tblRozpracOperR + ' eo ON (eo.IDEvidRozpracOper=e.ID) INNER JOIN ' + tblVPr + ' vp ON (eo.IDPrikaz=vp.ID) LEFT JOIN ' + tblZak; + lSQL:= lSQL + ' z ON (z.ID=vp.IDZakazka) INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) LEFT JOIN ' + tblPrikazVC + ' vc ON (vc.ID=eo.IDVyrCis)'; + lSQL:= lSQL + ' LEFT JOIN ' + tblRozpracOperRE + ' eoe ON (eoe.ID=eo.ID)'; + lSQL:= lSQL + ' WHERE e.DatumUzavreni IS NULL AND e.IDStroje=' + idStroj.ToString + ' AND vp.StavPrikazu=30 ORDER BY e.CasZahajeni DESC'; + + with Helios.OpenSQL(lSQL) do + begin + First; + while not(EOF) do + begin + vtStroje.FieldByName('fVyrobek').AsString:= VarToStr(FieldByNameValues('Nazev1')); + vtStroje.FieldByName('fZakazka').AsString:= VarToStr(FieldByNameValues('RadaPrikaz')).Replace(' ',''); + vtStroje.FieldByName('fIDEvidRozpOper').AsString:= VarToStr(FieldByNameValues('ID')); + vtStroje.FieldByName('fIDPrikaz').AsString:= VarToStr(FieldByNameValues('idVPr')); + vtStroje.FieldByName('fCisloZbozi').AsString:= VarToStr(FieldByNameValues('CisloZbozi')); + vtStroje.FieldByName('fIDKmen').AsString:= VarToStr(FieldByNameValues('IDKmen')); + vtStroje.FieldByName('fAktPaletList').AsString:= VarToStr(FieldByNameValues('VyrCislo')); + vtStroje.FieldByName('fSarze').AsString:= VarToStr(FieldByNameValues('Sarze')); + vtStroje.FieldByName('fCinnost').AsString:= 'Výroba'; + +// vtRozpracPL.Append; +// dm.vtRozpracPL.FieldByName('') +// vtRozpracPL.Post; + + Next; + end; + end; + + if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblCCP1 + ' WHERE IDStroj=' + idStroj.ToString + ' AND DatPorizeni_X=' + helUtils.SQLDatetimeConvert(f.ledtVyrobniDen.DateTime))) then + vtStroje.FieldByName('fCCP1').AsBoolean:= true; + + cntVz:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT COUNT(ID) FROM ' + tblVzorky + ' WHERE IDStroj=' + idStroj.ToString + ' AND Ukonceno=0'); + if (cntVz>0) then + vtStroje.FieldByName('fVZ').AsInteger:= cntVz; + + +{ + lSQL:= 'SELECT TOP(1) p.ID FROM ' + tblRozpracOper + ' ro INNER JOIN ' + tblRozpracOperR + ' ror ON (ror.IDEvidRozpracOper=ro.ID) INNER JOIN ' + tblPrPost; + lSQL:= lSQL + ' pp ON (pp.Alt=ror.AltPrPostup AND pp.Doklad=ror.DokladPrPostup AND pp.IDPrikaz=ror.IDPrikaz)'; + lSQL:= lSQL + ' INNER JOIN ' + tblVPr + ' p ON (p.ID=pp.IDPrikaz) WHERE ro.CasUkonceni IS NULL AND ro.IDStroje=' + idStroj.ToString; + idVPr:= helUtils.getHeliosIntVal(Helios, 0, lSQL); + dm.vtStroje.FieldByName('fVyrobek').AsString:= helUtils.getHeliosStrVal(Helios, '', lSQL); +} + + + vtStroje.Post; + Next; + end; + end; + + f.runTimerRozprac:= false; + f.timerPrehledTimer (f); + f.runTimerRozprac:= true; + + if (datMod.bmIdStroj>0) then + dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey]); + + dm.vtStroje.EnableControls; + f.grdStroje.Invalidate; + end; + + + + + + procedure Tdm.NactiDataPaneluStroje (const f: TformPekarna; var a: TArray); + var lSQL: string; + idStroje: integer; + begin + + f.grdStroje.DataSource.DataSet.DisableControls; + if (apiMod) and (1=0) then + begin + url:= apiServer + IfThen(apiServer.EndsWith('/'), '', '/') + 'ciselnik/tpv/stroj/?stredisko=211'; + end + else + begin + lSQL:= 'SELECT ID, Kod, Nazev FROM ' + tblCStroju + ' ORDER BY Kod'; + with f.Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + if not(vtStroje.Active) then + vtStroje.Open; + vtStroje.EmptyDataset; + + SetLength(a, RecordCount); + First; + while not(EOF) do + begin + idStroje:= VarToStr(FieldByNameValues('ID')).ToInteger; + vtStroje.Append; + vtStroje.FieldByName('fIDStroj').AsInteger:= idStroje; + vtStroje.FieldByName('fStroj').AsString:= VarToStr(FieldByNameValues('Nazev')); + + vtStroje.FieldByName('fCinnost').AsString:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) Cinnost FROM ' + tblCinnostStr + ' WHERE IDStroje=' + + idStroje.ToString + ' ORDER BY DatPorizeni DESC'); + + vtStroje.Post; + a[vtStroje.RecNo-1]:= VarToStr(FieldByNameValues('ID')).ToInteger; + Next; + end; + vtStroje.First; + end; + end; + + f.grdStroje.DataSource.DataSet.EnableControls; + f.grdStroje.Invalidate; + + end; + + + + + procedure Tdm.NactiVyrobniPoznamky (const f: TformPekarna); + var lSQL: string; + begin +// if (Assigned(formPekarna)) then + begin + if (f.sgInfo.Cells[2, 1]<>'') then + begin + dsVyrobniPozn.DataSet.DisableControls; + lSQL:= 'SELECT ID, VyrobniDen, Poznamka FROM ' + tblVyrPozn + ' WHERE VyrobniDen_X=CONVERT(datetime, N' + f.sgInfo.Cells[2, 1].QuotedString + ', 104) ORDER BY ID'; + with f.Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + if not(vtVyrobniPozn.Active) then + vtVyrobniPozn.Open; + First; + while not(EOF) do + begin + vtVyrobniPozn.Append; + vtVyrobniPozn.FieldByName('fID').AsInteger:= VarToStr(FieldByName('ID').Value).ToInteger; + vtVyrobniPozn.FieldByName('fDatum').AsString:= VarToStr(FieldByName('VyrobniDen').Value); + vtVyrobniPozn.FieldByName('fPoznamka').AsString:= VarToStr(FieldByName('Poznamka').Value); + vtVyrobniPozn.Post; + Next; + end; + vtVyrobniPozn.First; + end; + dsVyrobniPozn.DataSet.EnableControls; + end; + end; + end; + + + + end. diff --git a/extCtrls/HeODefine.inc b/extCtrls/HeODefine.inc new file mode 100644 index 0000000..e69de29 diff --git a/extCtrls/pec_TPVKusovnik.pas b/extCtrls/pec_TPVKusovnik.pas new file mode 100644 index 0000000..c7bd057 --- /dev/null +++ b/extCtrls/pec_TPVKusovnik.pas @@ -0,0 +1,138 @@ +unit pec_TPVKusovnik; + +interface + + +uses + VCL.Dialogs, + plgController, + ddPlugin_TLB; + +type + TplgHDCRTNTPVKusovnikController = class(TplgEditorController) + protected + FSKNizsi: IHeNveButtonEdit; + FRegCisNizsi: IHeNveButtonEdit; +{ + procedure OnClickEventHandler (const Sender: IHeNveControl); override; + procedure OnEnterEventHandler (const Sender: IHeNveControl); override; + procedure OnExitEventHandler (const Sender: IHeNveControl); override; + procedure OnEditValueChangedEventHandler (const Sender: IHeNveCustomEdit); override; + procedure OnButtonClickEventHandler (const Sender: IHeNveButtonEdit; AButtonIndex: Integer); override; + procedure OnChangeEventHandler (const Sender: IHeNveCustomEdit); override; +} + public + procedure FormCreate; override; + procedure FormDestroy; override; + end; + +{ =========================================================================== } + +implementation + +uses + System.SysUtils, System.Variants, plgMain, + helUtils; + + + + + procedure TplgHDCRTNTPVKusovnikController.FormCreate; + begin + inherited; + + FSKNizsi:= GetButtonEdit('lciNizsi_SZ'); + FRegCisNizsi:= GetButtonEdit('lciNizsi_RegCis'); + +{ + FOrganizace:= GetButtonEdit(strBtnOrganizace); + FMena:= GetButtonEdit('lci_gen_atr_Mena'); + + if (FOrganizace<>nil) then + begin + FOrganizace.NVE_Switch_OnExitEvent (self, True); + FOrganizace.NVE_Switch_OnChangeEvent (self, True); + FOrganizace.NVE_Switch_OnEditValueChangedEvent (self, True); + end; +} + end; + + + + procedure TplgHDCRTNTPVKusovnikController.FormDestroy; + begin +// POZOR! vsechny ukazatele na interface je treba uvolnit!!! +// jinak muze HELIOS padnout na Access Violation Error!!! + + FSKNizsi:= nil; + FRegCisNizsi:= nil; + + inherited; + end; + + + +{ + procedure TplgHDCRTNTPVKusovnikController.OnChangeEventHandler (const Sender: IHeNveCustomEdit); + var s: string; + begin + if (Sender=FOrganizace) then + begin + s:= FOrganizace.NVE_FieldValue; + end; + end; + + + + + procedure TplgHDCRTNTPVKusovnikController.OnClickEventHandler (const Sender: IHeNveControl); + begin +// + end; + + + procedure TplgHDCRTNTPVKusovnikController.OnEnterEventHandler (const Sender: IHeNveControl); + begin +// ShowMessage(Sender.NVE_VisualName); + end; + + + procedure TplgHDCRTNTPVKusovnikController.OnExitEventHandler (const Sender: IHeNveControl); + var cOrg: integer; + s, m: string; + begin + if (GetButtonEdit(Sender)=FOrganizace) then + begin + s:= FOrganizace.NVE_FieldValue; + if not(TryStrToInt(s, cOrg)) then + cOrg:= -1; + if (cOrg>-1) then + begin + m:= helUtils.getHeliosStrVal (Helios, '', 'SELECT ISNULL(Mena,N'''') FROM ' + tblCOrg + ' WHERE CisloOrg=' + cOrg.ToString); + if (m<>'') and (FMena<>nil) then + FMena.NVE_FieldValue:= m; + end; + end; + end; + + + + procedure TplgHDCRTNTPVKusovnikController.OnEditValueChangedEventHandler (const Sender: IHeNveCustomEdit); + begin + if (Sender.NVE_VisualName=strBtnOrganizace) then + begin + OnExitEventHandler (FOrganizace); +// s:= (Sender as IHeNveButtonEdit).NVE_FieldValue; + end; + end; + + + + procedure TplgHDCRTNTPVKusovnikController.OnButtonClickEventHandler (const Sender: IHeNveButtonEdit; AButtonIndex: Integer); + begin +// if (Sender=FOrganizace) then + end; + +} + +end. diff --git a/extCtrls/pec_TPVOperace.pas b/extCtrls/pec_TPVOperace.pas new file mode 100644 index 0000000..1ba51e5 --- /dev/null +++ b/extCtrls/pec_TPVOperace.pas @@ -0,0 +1,128 @@ +unit pec_TPVOperace; + +interface + + +uses + VCL.Dialogs, + plgController, + ddPlugin_TLB; + +type + TplgHDCRTNTPVOperaceController = class(TplgEditorController) + protected +{ + procedure OnClickEventHandler (const Sender: IHeNveControl); override; + procedure OnEnterEventHandler (const Sender: IHeNveControl); override; + procedure OnExitEventHandler (const Sender: IHeNveControl); override; + procedure OnEditValueChangedEventHandler (const Sender: IHeNveCustomEdit); override; + procedure OnButtonClickEventHandler (const Sender: IHeNveButtonEdit; AButtonIndex: Integer); override; + procedure OnChangeEventHandler (const Sender: IHeNveCustomEdit); override; +} + public + procedure FormCreate; override; + procedure FormDestroy; override; + end; + +{ =========================================================================== } + +implementation + +uses + System.SysUtils, System.Variants, plgMain, + helUtils; + + + + + procedure TplgHDCRTNTPVOperaceController.FormCreate; + begin + inherited; +{ + FOrganizace:= GetButtonEdit(strBtnOrganizace); + + if (FOrganizace<>nil) then + begin + FOrganizace.NVE_Switch_OnExitEvent (self, True); + FOrganizace.NVE_Switch_OnChangeEvent (self, True); + FOrganizace.NVE_Switch_OnEditValueChangedEvent (self, True); + end; +} + end; + + + + procedure TplgHDCRTNTPVOperaceController.FormDestroy; + begin +// POZOR! vsechny ukazatele na interface je treba uvolnit!!! +// jinak muze HELIOS padnout na Access Violation Error!!! + + inherited; + end; + + + +{ + procedure TplgHDCRTNTPVOperaceController.OnChangeEventHandler (const Sender: IHeNveCustomEdit); + var s: string; + begin + if (Sender=FOrganizace) then + begin + s:= FOrganizace.NVE_FieldValue; + end; + end; + + + + + procedure TplgBonumExtReseniGornicky3DObjednavkaDopravyController.OnClickEventHandler (const Sender: IHeNveControl); + begin +// + end; + + + procedure TplgHDCRTNTPVOperaceController.OnEnterEventHandler (const Sender: IHeNveControl); + begin +// ShowMessage(Sender.NVE_VisualName); + end; + + + procedure TplgHDCRTNTPVOperaceController.OnExitEventHandler (const Sender: IHeNveControl); + var cOrg: integer; + s, m: string; + begin + if (GetButtonEdit(Sender)=FOrganizace) then + begin + s:= FOrganizace.NVE_FieldValue; + if not(TryStrToInt(s, cOrg)) then + cOrg:= -1; + if (cOrg>-1) then + begin + m:= helUtils.getHeliosStrVal (Helios, '', 'SELECT ISNULL(Mena,N'''') FROM ' + tblCOrg + ' WHERE CisloOrg=' + cOrg.ToString); + if (m<>'') and (FMena<>nil) then + FMena.NVE_FieldValue:= m; + end; + end; + end; + + + + procedure TplgHDCRTNTPVOperaceController.OnEditValueChangedEventHandler (const Sender: IHeNveCustomEdit); + begin + if (Sender.NVE_VisualName=strBtnOrganizace) then + begin + OnExitEventHandler (FOrganizace); +// s:= (Sender as IHeNveButtonEdit).NVE_FieldValue; + end; + end; + + + + procedure TplgHDCRTNTPVOperaceController.OnButtonClickEventHandler (const Sender: IHeNveButtonEdit; AButtonIndex: Integer); + begin +// if (Sender=FOrganizace) then + end; + +} + +end. diff --git a/extCtrls/plgAbout.dfm b/extCtrls/plgAbout.dfm new file mode 100644 index 0000000..4169508 --- /dev/null +++ b/extCtrls/plgAbout.dfm @@ -0,0 +1,158 @@ +inherited frmAbout: TfrmAbout + Left = 269 + Top = 93 + ClientHeight = 530 + ClientWidth = 728 + KeyPreview = True + OnCreate = FormCreate + OnKeyDown = FormKeyDown + ExplicitWidth = 744 + ExplicitHeight = 569 + TextHeight = 15 + object bOK: TButton + Left = 643 + Top = 496 + Width = 75 + Height = 25 + Anchors = [akRight, akBottom] + Cancel = True + Caption = 'OK' + Default = True + ModalResult = 1 + TabOrder = 0 + end + object PageControlMain: TPageControl + Left = 10 + Top = 10 + Width = 708 + Height = 470 + ActivePage = tsInfo + Anchors = [akLeft, akTop, akRight, akBottom] + TabOrder = 1 + object tsInfo: TTabSheet + Caption = 'tsInfo' + DesignSize = ( + 700 + 440) + object PaintBoxInfo: TPaintBox + Left = 30 + Top = 20 + Width = 32 + Height = 32 + OnPaint = PaintBoxInfoPaint + end + object LV_Info: TListView + Left = 95 + Top = 20 + Width = 593 + Height = 405 + Anchors = [akLeft, akTop, akRight, akBottom] + Columns = < + item + Width = 200 + end + item + Width = 350 + end> + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + GridLines = True + ReadOnly = True + RowSelect = True + ParentFont = False + TabOrder = 0 + ViewStyle = vsReport + OnCustomDrawItem = LV_InfoCustomDrawItem + OnDblClick = LV_InfoDblClick + end + object bCopy: TButton + Left = 10 + Top = 400 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Copy' + TabOrder = 1 + OnClick = bCopyClick + end + end + object tsLogo: TTabSheet + Caption = 'tsLogo' + ImageIndex = 2 + DesignSize = ( + 700 + 440) + object ImageLogoAbout: TImage + Left = 297 + Top = 168 + Width = 105 + Height = 105 + Anchors = [] + AutoSize = True + Transparent = True + ExplicitTop = 118 + end + end + object tsTechPopis: TTabSheet + Caption = 'tsTechPopis' + ImageIndex = 1 + object MemoTechPopis: TMemo + Left = 0 + Top = 0 + Width = 700 + Height = 442 + Align = alClient + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 0 + WantReturns = False + end + end + object tsHistorieVerzi: TTabSheet + Caption = 'tsHistorieVerzi' + ImageIndex = 3 + object MemoHistorieVerzi: TMemo + Left = 0 + Top = 0 + Width = 700 + Height = 442 + Align = alClient + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 0 + WantReturns = False + end + end + end + object ActionList1: TActionList + Left = 44 + Top = 99 + object A_Zalozka1: TAction + Tag = 1 + Caption = '1' + ShortCut = 32817 + OnExecute = A_Zalozka_X_Execute + end + object A_Zalozka2: TAction + Tag = 2 + Caption = '2' + ShortCut = 32818 + OnExecute = A_Zalozka_X_Execute + end + object A_Zalozka3: TAction + Tag = 3 + Caption = '3' + ShortCut = 32819 + OnExecute = A_Zalozka_X_Execute + end + object A_Zalozka4: TAction + Tag = 4 + Caption = '4' + ShortCut = 32820 + OnExecute = A_Zalozka_X_Execute + end + end +end diff --git a/extCtrls/plgAbout.pas b/extCtrls/plgAbout.pas new file mode 100644 index 0000000..a937d3c --- /dev/null +++ b/extCtrls/plgAbout.pas @@ -0,0 +1,306 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgAbout; + +interface + +uses + Classes, Controls, Forms, StdCtrls, ComCtrls, ExtCtrls, ActnList, ddPlugin_TLB, System.Actions, + plgForm; + +type + TfrmAbout = class(TfrmPlgPredek) + bOK: TButton; + PageControlMain: TPageControl; + tsInfo: TTabSheet; + tsTechPopis: TTabSheet; + LV_Info: TListView; + PaintBoxInfo: TPaintBox; + bCopy: TButton; + MemoTechPopis: TMemo; + ActionList1: TActionList; + A_Zalozka1: TAction; + A_Zalozka2: TAction; + tsLogo: TTabSheet; + ImageLogoAbout: TImage; + A_Zalozka3: TAction; + tsHistorieVerzi: TTabSheet; + MemoHistorieVerzi: TMemo; + A_Zalozka4: TAction; + + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + + procedure bCopyClick(Sender: TObject); + procedure LV_InfoCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); + procedure PaintBoxInfoPaint(Sender: TObject); + procedure A_Zalozka_X_Execute(Sender: TObject); + procedure LV_InfoDblClick(Sender: TObject); + + public + function ShowModalEx(Helios: IHelios): TModalResult; + end; + +{ =========================================================================== } + +implementation + +{$R *.DFM} + +uses + Windows, SysUtils, Menus, Graphics, plgType, plgMain, ComObj, plgDMGlob, + ShellAPI, plgInstalace, Clipbrd; + +const + proTlustyRadek = Pointer(-1); + proCervenyRadek = Pointer(-2); + proUmisteniDLL = Pointer(-3); + +{ ########################################################################### } + +procedure TfrmAbout.FormCreate(Sender: TObject); +begin + inherited; + + LV_Info.Font.Name := plgTestMSSansSerifFont(LV_Info.Font.Name); + + bCopy.Caption := plgCtiOznam(plxJadroKopirovat); + + tsInfo.Caption := '1 - ' + plgCtiOznam(plxJadroZakladniInformace); + tsLogo.Caption := '2 - ' + plgCtiOznam(plxJadroLogo); + tsTechPopis.Caption := '3 - ' + plgCtiOznam(plxJadroTechnickyPopis); + tsHistorieVerzi.Caption := '4 - ' + plgCtiOznam(plxJadroHistorieVerzi); + + // aby slo udelat tabulku napr. s popisem formatu importnich souboru apod. + MemoTechPopis.Font.Name := 'Courier New'; + MemoHistorieVerzi.Font.Name := 'Courier New'; + + LV_Info.Columns[0].Caption := plgCtiOznam(plxJadroAbout_Nazev); + LV_Info.Columns[1].Caption := plgCtiOznam(plxJadroAbout_Hodnota); + + with TfrmInstalace.Create(nil) do + try + Self.ImageLogoAbout.Picture.Assign(ImageLogo.Picture); + finally + Free; + end; + + ImageLogoAbout.Left := (tsLogo.Width - ImageLogoAbout.Width) div 2; + ImageLogoAbout.Top := (tsLogo.Height - ImageLogoAbout.Height) div 2; +end; + +{ --------------------------------------------------------------------------- } + +procedure TfrmAbout.PaintBoxInfoPaint(Sender: TObject); +begin + DataModuleGlobPLG.ImageList32_32.Draw(PaintBoxInfo.Canvas, 0, 0, DataModuleGlobPLG.Idx.iiInfo); +end; + +{ --------------------------------------------------------------------------- } + +procedure TfrmAbout.A_Zalozka_X_Execute(Sender: TObject); +begin + case TAction(Sender).Tag of + 1: PageControlMain.ActivePage := tsInfo; + 2: PageControlMain.ActivePage := tsLogo; + 3: if tsTechPopis.TabVisible then + PageControlMain.ActivePage := tsTechPopis; + 4: if tsHistorieVerzi.TabVisible then + PageControlMain.ActivePage := tsHistorieVerzi; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TfrmAbout.LV_InfoCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +begin + if Item.Data = proTlustyRadek then + Sender.Canvas.Font.Style := [fsBold] + else + if Item.Data = proCervenyRadek then + Sender.Canvas.Font.Color := clRed; +end; + +{ --------------------------------------------------------------------------- } + +procedure TfrmAbout.LV_InfoDblClick(Sender: TObject); + var + Cesta: String; +begin + if Assigned(LV_Info.Selected) and + (LV_Info.Selected.Data = proUmisteniDLL) then + begin + Cesta := ExtractFileDir(LV_Info.Selected.SubItems[0]); + if Cesta <> '' then + ShellExecute(0, 'open', PChar(Cesta), nil, nil, SW_SHOWNORMAL); + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TfrmAbout.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); +begin + if PageControlMain.ActivePage = tsInfo then + begin + // Ctrl+C nebo Ctrl+Insert + if (ShortCut(Key, Shift) = ShortCut(ord('C'), [ssCtrl])) or + (ShortCut(Key, Shift) = ShortCut(VK_INSERT, [ssCtrl])) then + begin + bCopyClick(nil); + Key := 0; + Exit; + end; + end; + + inherited; +end; + +{ --------------------------------------------------------------------------- } + +procedure TfrmAbout.bCopyClick(Sender: TObject); + var + Obsah: String; + II: Integer; + LI: TListItem; +begin + Obsah := ''; + for II := 0 to LV_Info.Items.Count-1 do + begin + LI := LV_Info.Items[II]; + Obsah := Format('%s'#13#10'%s'#9'%s', [Obsah, LI.Caption, LI.SubItems[0]]); + end; + Delete(Obsah, 1, 2); // zrus prvni CR+LF + + Clipboard.AsText := Obsah; +end; + +{ --------------------------------------------------------------------------- } + +function TfrmAbout.ShowModalEx(Helios: IHelios): TModalResult; + var + PomPointer: Pointer; + VerzeZBD, PomStr: String; + ZmenyOK: Boolean; + + { +++++++++++++++++++++++++++ } + + procedure _PridejText(const Nazev, Hodnota: String; TypRadku: Pointer = nil); + begin + with LV_Info.Items.Add do + begin + Caption := Nazev; + SubItems.Add(Hodnota); + Data := TypRadku; + end; + end; + + { +++++++++++++++++++++++++++ } + +begin + PageControlMain.ActivePage := tsInfo; + + Caption := Format('%s [%s]', [plgCtiOznam(plxJadroAbout_OPluginu), + PluginKonfig.PluginVerejneJmeno]); + + // naplneni informaci + LV_Info.Items.BeginUpdate; + try + LV_Info.Items.Clear; + + _PridejText('PLUGIN', '', proTlustyRadek); + _PridejText(plgCtiOznam(plxJadroAbout_Nazev), PluginKonfig.PluginVerejneJmeno); + _PridejText(plgCtiOznam(plxJadroVerze), plgVerzePluginu(jvCelaUnicode){$IFnDEF BezLadit}+' (beta)'{$ENDIF}); + + if Helios.HeVersion < PluginKonfig.PluginMinimalniPozadovanaVerzeHeliosu then + PomPointer := proCervenyRadek + else + PomPointer := nil; + _PridejText(Format(plgCtiOznam(plxJadroAbout_MinVerze_X), [Cplg_ProductName]), + plgObecnaVerze(PluginKonfig.PluginMinimalniPozadovanaVerzeHeliosu, jvCela), PomPointer); + + if Helios.SQLVersion < PluginKonfig.PluginMinimalniPozadovanaVerzeSQLServeru then + PomPointer := proCervenyRadek + else + PomPointer := nil; + _PridejText(plgCtiOznam(plxJadroMinVerzeSQLServeru), + plgVerzeSQLServeru(PluginKonfig.PluginMinimalniPozadovanaVerzeSQLServeru), PomPointer); + + PomPointer := nil; + VerzeZBD := plgNactiVerziPluginuZDB(Helios, ZmenyOK); + if VerzeZBD = '000000000000' then + VerzeZBD := plgCtiOznam(plxJadroNeinstalovano) + else + begin + VerzeZBD := IntToStr(StrToIntDef(Copy(VerzeZBD, 1, 2),1)) + '.' + + IntToStr(StrToIntDef(Copy(VerzeZBD, 3, 2),0)) + '.' + + Copy(VerzeZBD, 5, 4) + '.' + + Copy(VerzeZBD, 9, 4); + if ZmenyOK then + VerzeZBD := Format('%s (%s)', [VerzeZBD, plgCtiOznam(plxOK)]) + else + begin + VerzeZBD := Format('%s (ERROR)', [VerzeZBD]); + PomPointer := proCervenyRadek; + end; + end; + _PridejText(plgCtiOznam(plxJadroInstalovanaVerze), VerzeZBD, PomPointer); + + _PridejText('', ''); + _PridejText(AnsiUpperCase(plgCtiOznam(plxJadroAbout_Vyrobce)), '', proTlustyRadek); + _PridejText(plgCtiOznam(plxJadroAbout_Vyrobce), PluginKonfig.PluginCopyrightVyrobce); + _PridejText(plgCtiOznam(plxJadroAbout_IdentifikaceVyrobce), PluginKonfig.PartnerIdentification); + + _PridejText('', ''); + _PridejText('PLUGIN (SYS)', '', proTlustyRadek); + _PridejText('ClassID', GUIDToString(PluginKonfig.PluginClass_ID)); + _PridejText('SysName', PluginKonfig.PluginSystemoveJmeno); + _PridejText('ClassName', PluginKonfig.PluginClassName); + if PluginKonfig.PluginIdentifikator <> '' then + PomStr := PluginKonfig.PluginIdentifikator + else + PomStr := plgCtiOznam(plxJadro_Nepouzito_); + _PridejText(plgCtiOznam(plxJadroIdentifikator), PomStr); + _PridejText(plgCtiOznam(plxJadroUmisteni), plgGetPluginPathAndName, proUmisteniDLL); + + if Helios.HeVersion < Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu then + PomPointer := proCervenyRadek + else + PomPointer := nil; + + _PridejText('', ''); + _PridejText(plgCtiOznam(plxJadroAbout_JADRO), '', proTlustyRadek); + _PridejText(plgCtiOznam(plxJadroVerze), + plgObecnaVerze(Cplg_VerzeJadra, jvCelaUnicode) + + ' / IHePlugin3 / ' + plgGetIndependentSQLFloat('%.1f', System.CompilerVersion)); + _PridejText(Format(plgCtiOznam(plxJadroAbout_MinVerze_X), [Cplg_ProductName]), + plgObecnaVerze(Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu, jvCela), PomPointer); + // AJ, 8.12.2015 - Administrtorsk podpora v HeO + { podpora plat od uvolnn tohoto kdu, tud nen nutn dn podmnka, proto natvrdo } + _PridejText(plgCtiOznam(plxJadroPodporaTicheInstalacePluginu), plgCtiOznam(plxJadroAno)); + finally + LV_Info.Items.EndUpdate; + end; + + // technicky popis + if PluginKonfig.PluginTechnickyPopis = '' then + tsTechPopis.TabVisible := False + else + MemoTechPopis.Lines.Text := PluginKonfig.PluginTechnickyPopis; + + if PluginKonfig.PluginHistorieVerzi = '' then + tsHistorieVerzi.TabVisible := False + else + MemoHistorieVerzi.Lines.Text := PluginKonfig.PluginHistorieVerzi; + + // vlastni zobrazeni + Result := ShowModal; +end; + +{ ########################################################################### } + +end. diff --git a/extCtrls/plgExtController.pas b/extCtrls/plgExtController.pas new file mode 100644 index 0000000..a7c9324 --- /dev/null +++ b/extCtrls/plgExtController.pas @@ -0,0 +1,34 @@ +unit plgExtController; + +interface + +uses + plgType, pec_TPVKusovnik, pec_TPVOperace; + +{ =========================================================================== } + +const + GDefiniceControlleru: array[0..2] of TplgEditorControllerDef = + ( + // aby bylo mozno nemit zadnou definici controlleru, + // musi zustat prvni prvek nedefinovan !! + (FormIdent : '') + + ,(FormIdent: 'TEdKusovnikoveVazbyForm11021'; + ControllerClass: TplgHDCRTNTPVKusovnikController) + + ,(FormIdent: 'TEdPostupForm11019'; + ControllerClass: TplgHDCRTNTPVOperaceController) + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/extCtrls/plgKonfig.pas b/extCtrls/plgKonfig.pas new file mode 100644 index 0000000..2862f3b --- /dev/null +++ b/extCtrls/plgKonfig.pas @@ -0,0 +1,110 @@ +{ *************************************************************************** } +{ } +{ PluginExample Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgKonfig; + +interface + +uses + plgKonfigBase, ddPlugin_TLB; + +// ============================================================================ +// !!! Konfigurace zavisla na danem pluginu, je treba ji nastavit !!! +// ============================================================================ + +type + TPluginKonfig = class(TPluginKonfigBase) + protected + procedure NastaveniKonfigu; override; + function GetPluginVerejneJmeno: String; override; + function GetPluginTechnickyPopis: String; override; + function GetPluginHistorieVerzi: String; override; + public + function PartnerIdentification: string; override; + function PluginJazykoveDLL (AJazyk: Integer): string; override; + procedure VlastniInicializacePluginu (Helios: IHelios); override; + end; + +{ =========================================================================== } + +implementation + +uses + SysUtils, ComObj, plgType, plgMain; + +{ ########################################################################### } + +procedure TPluginKonfig.NastaveniKonfigu; +begin + // !! POZOR !! Tento GUID je pouze pro plgHDCRTN !! + FPluginClass_ID := StringToGUID('{66874F1A-0165-4366-89F7-247948CFE933}'); + + + FPluginSystemoveJmeno := 'PluginHDCRTN'; + FPluginClassName := 'run'; + FPluginMinimalniPozadovanaVerzeHeliosu := Cplg_PrvniUnicodeVerzeHeliosu; + FPluginCopyrightVyrobce := Format(' 2024-%d HD Consulting s.r.o. Strakonice', [Cplg_AktualniRok]); + FPluginIdentifikator := 'RTN'; + + FPluginMinimalniPozadovanaVerzeSQLServeru:= Cplg_SQLVersion_2019_CU24; +end; + +{ --------------------------------------------------------------------------- } + +function TPluginKonfig.PartnerIdentification: string; +begin + // zde zadejte partnerskou identifikaci + Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +function TPluginKonfig.GetPluginVerejneJmeno: String; +begin + Result := plgCtiOznam('Plugin Extern een Rootvin'); +end; + + +{ --------------------------------------------------------------------------- } + +function TPluginKonfig.GetPluginTechnickyPopis: String; +begin + Result := 'Plugin pro een plnovn a provozu pekrny (mchn/peen/men/balen)'; +end; + + +{ --------------------------------------------------------------------------- } + +function TPluginKonfig.GetPluginHistorieVerzi: String; +begin + Result:= 'Historie verz'; +end; + + +{ --------------------------------------------------------------------------- } + +function TPluginKonfig.PluginJazykoveDLL (AJazyk: Integer): string; +begin + case AJazyk of + Cplg_jAnglictina, + Cplg_jExtAnglictina: Result := 'PluginHDCRTNLng1033.DLL'; + else Result := ''; + end; +end; + + +{ --------------------------------------------------------------------------- } + +procedure TPluginKonfig.VlastniInicializacePluginu (Helios: IHelios); +begin + // - tato procedura se vola vzdy pri spusteni externi akce !! + // - pokud je treba udelat nejakou inicializaci pouze jednou, je treba + // pouzit promennou, ktera bude signalizovat prvni a dalsi volani +end; + +{ ########################################################################### } + +end. diff --git a/extCtrls/plgVerze.INC b/extCtrls/plgVerze.INC new file mode 100644 index 0000000..f07d671 --- /dev/null +++ b/extCtrls/plgVerze.INC @@ -0,0 +1,14 @@ +$030020250210 +{MMnnRRRRMMDD} + +{ MM = major verze } +{ nn = minor verze } +{ RRRR = rok } +{ MM = mesic } +{ DD = den } + +{ - cislo (hexadecimalne) verze jako typ Int64 - je v include, protoze se } +{ externe nacita pri distribucni kompilaci pro pridani VERSION INFO do EXE } + +{ - toto cislo MUSI byt na PRVNIM RADKU tohoto souboru a na temze } +{ radku nesmi byt dalsi znaky (komentare apod.) } diff --git a/frmAktSarze.dfm b/frmAktSarze.dfm new file mode 100644 index 0000000..48c45cb --- /dev/null +++ b/frmAktSarze.dfm @@ -0,0 +1,84 @@ +object formAktSarze: TformAktSarze + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + Caption = ' AKTU'#193'LN'#205' '#352'AR'#381'E ' + ClientHeight = 199 + ClientWidth = 251 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object Panel1: TPanel + Left = 8 + Top = 8 + Width = 237 + Height = 183 + TabOrder = 0 + object edtSmena: TLabeledEdit + Left = 112 + Top = 54 + Width = 117 + Height = 29 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 68 + EditLabel.Height = 29 + EditLabel.Caption = 'Sm'#283'na ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 1 + Text = '' + end + object edtVyrDen: TLabeledEdit + Left = 112 + Top = 19 + Width = 117 + Height = 29 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 101 + EditLabel.Height = 29 + EditLabel.Caption = 'V'#253'robn'#237' den ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtSarze: TLabeledEdit + Left = 112 + Top = 93 + Width = 117 + Height = 29 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 62 + EditLabel.Height = 29 + EditLabel.Caption = #352'ar'#382'e ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 2 + Text = '' + end + object edtSpotreba: TLabeledEdit + Left = 112 + Top = 137 + Width = 117 + Height = 29 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 87 + EditLabel.Height = 29 + EditLabel.Caption = 'Spot'#345'eba ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 3 + Text = '' + end + end +end diff --git a/frmAktSarze.pas b/frmAktSarze.pas new file mode 100644 index 0000000..689ece6 --- /dev/null +++ b/frmAktSarze.pas @@ -0,0 +1,64 @@ +unit frmAktSarze; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, ddPlugin_TLB, + Vcl.StdCtrls, Vcl.Mask; + +type + TformAktSarze = class(TForm) + Panel1: TPanel; + edtSmena: TLabeledEdit; + edtVyrDen: TLabeledEdit; + edtSarze: TLabeledEdit; + edtSpotreba: TLabeledEdit; + procedure FormShow(Sender: TObject); + private + public + Helios: IHelios; + vyrDen: TDateTime; + smena: integer; + idKmen: integer; + end; + +var + formAktSarze: TformAktSarze; + +implementation +uses System.StrUtils, System.Math, System.DateUtils, + helUtils; + +{$R *.dfm} + + procedure TformAktSarze.FormShow(Sender: TObject); + var zarukaTyp: integer; + zarukaNum: extended; + d: TDateTime; + begin + edtVyrDen.Text:= FormatDateTime('dd.mm.yyyy', vyrDen); + edtSmena.Text:= smena.ToString; + edtSarze.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratCisloSarze (default, default, 0)'); + edtSpotreba.Text:= ''; + + if (idKmen>0) then + begin + zarukaNum:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + zarukaTyp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TypZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); // 0-Den, 1-Mesic, 2-Rok + d:= vyrDen; + if (zarukaTyp=0) then + d:= IncDay(Now, Floor(zarukaNum)); + if (zarukaTyp=1) then + d:= IncMonth(Now, Floor(zarukaNum)); + if (zarukaTyp=2) then + d:= IncYear(Now, Floor(zarukaNum)); + d:= EndOfTheMonth(d); + + edtSpotreba.Text:= FormatDateTime('dd.mm.yyyy', d); + end; + + + end; + +end. diff --git a/frmKontrolaCCP1.dfm b/frmKontrolaCCP1.dfm new file mode 100644 index 0000000..f247e6d --- /dev/null +++ b/frmKontrolaCCP1.dfm @@ -0,0 +1,1151 @@ +object formKontrolaCCP1: TformKontrolaCCP1 + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' KONTROLA PE'#268'EN'#205' - CCP1' + ClientHeight = 594 + ClientWidth = 1307 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnCreate = FormCreate + OnKeyUp = FormKeyUp + OnResize = FormResize + OnShow = FormShow + DesignSize = ( + 1307 + 594) + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1307 + Height = 594 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = grdCCP1 + Row = 2 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel2 + Row = 1 + end + item + Column = 1 + Control = GridPanel3 + Row = 0 + end + item + Column = 0 + Control = btnQuit + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel7 + Row = 3 + end> + RowCollection = < + item + Value = 17.024898914662690000 + end + item + Value = 14.875505426686540000 + end + item + Value = 50.962738029908240000 + end + item + Value = 17.136857628742530000 + end> + TabOrder = 0 + object grdCCP1: TStringGrid + AlignWithMargins = True + Left = 4 + Top = 193 + Width = 1299 + Height = 296 + Align = alClient + ColCount = 14 + DefaultColAlignment = taCenter + DefaultRowHeight = 30 + DefaultDrawing = False + FixedCols = 0 + FixedRows = 0 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goEditing, goAlwaysShowEditor, goFixedRowDefAlign] + ScrollBars = ssVertical + TabOrder = 0 + OnDrawCell = grdCCP1DrawCell + OnSelectCell = grdCCP1SelectCell + ColWidths = ( + 1 + 185 + 135 + 40 + 60 + 61 + 62 + 57 + 58 + 43 + 250 + 250 + 40 + 1) + end + object GridPanel2: TGridPanel + Left = 1 + Top = 102 + Width = 1305 + Height = 88 + Align = alClient + ColumnCollection = < + item + SizeStyle = ssAbsolute + Value = 15.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 178.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 137.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 40.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 62.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 62.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 61.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 60.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 60.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 42.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 251.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 251.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 40.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 18.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = pnlLabel1 + Row = 0 + end + item + Column = 2 + Control = pnlLabel2 + Row = 0 + end + item + Column = 3 + Control = pnlLabel3 + Row = 0 + end + item + Column = 4 + Control = pnlLabel4 + Row = 0 + end + item + Column = 5 + Control = pnlLabel5 + Row = 0 + end + item + Column = 6 + Control = pnlLabel6 + Row = 0 + end + item + Column = 7 + Control = pnlLabel7 + Row = 0 + end + item + Column = 8 + Control = pnlLabel8 + Row = 0 + end + item + Column = 9 + Control = pnlLabel9 + Row = 0 + end + item + Column = 10 + Control = pnlLabel10 + Row = 0 + end + item + Column = 11 + Control = pnlLabel11 + Row = 0 + end + item + Column = 12 + Control = pnlLabel12 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + object pnlLabel1: TPanel + Left = 16 + Top = 1 + Width = 178 + Height = 86 + Align = alClient + TabOrder = 1 + object Label1: TLabel + Left = 67 + Top = 33 + Width = 36 + Height = 21 + Caption = 'Stroj' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + end + object pnlLabel2: TPanel + Left = 194 + Top = 1 + Width = 137 + Height = 86 + Align = alClient + TabOrder = 2 + object Label2: TLabel + Left = 33 + Top = 33 + Width = 83 + Height = 21 + Caption = 'Datum/'#269'as' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + end + object pnlLabel3: TPanel + Left = 331 + Top = 1 + Width = 40 + Height = 86 + Align = alClient + TabOrder = 3 + object Label3: TLabel + Left = 10 + Top = 16 + Width = 23 + Height = 52 + Caption = 'Sm'#283'na' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel4: TPanel + Left = 371 + Top = 1 + Width = 62 + Height = 86 + Align = alClient + TabOrder = 4 + object Label4: TLabel + Left = 20 + Top = 15 + Width = 23 + Height = 57 + Caption = 'Teplota' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel5: TPanel + Left = 433 + Top = 1 + Width = 62 + Height = 86 + Align = alClient + TabOrder = 5 + object Label5: TLabel + Left = 20 + Top = 10 + Width = 23 + Height = 65 + Caption = 'Rychlost' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel6: TPanel + Left = 495 + Top = 1 + Width = 61 + Height = 86 + Align = alClient + TabOrder = 6 + object Label6: TLabel + Left = 20 + Top = 5 + Width = 23 + Height = 76 + Caption = 'Hmotnost' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel7: TPanel + Left = 556 + Top = 1 + Width = 60 + Height = 86 + Align = alClient + TabOrder = 7 + object Label7: TLabel + Left = 20 + Top = 20 + Width = 23 + Height = 44 + Caption = 'D'#233'lka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel8: TPanel + Left = 616 + Top = 1 + Width = 60 + Height = 86 + Align = alClient + TabOrder = 8 + object Label8: TLabel + Left = 20 + Top = 14 + Width = 23 + Height = 56 + Caption = 'Pr'#367'm'#283'r' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel9: TPanel + Left = 676 + Top = 1 + Width = 42 + Height = 86 + Align = alClient + TabOrder = 9 + object Label9: TLabel + Left = 10 + Top = 8 + Width = 23 + Height = 73 + Caption = 'Vyhovuje' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + WordWrap = True + end + end + object pnlLabel10: TPanel + Left = 718 + Top = 1 + Width = 251 + Height = 86 + Align = alClient + TabOrder = 10 + object Label10: TLabel + Left = 90 + Top = 29 + Width = 64 + Height = 21 + Caption = 'V'#253'robek' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel11: TPanel + Left = 969 + Top = 1 + Width = 251 + Height = 86 + Align = alClient + TabOrder = 11 + object Label11: TLabel + Left = 60 + Top = 29 + Width = 144 + Height = 21 + Caption = 'N'#225'pravn'#233' opat'#345'en'#237 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel12: TPanel + Left = 1220 + Top = 1 + Width = 40 + Height = 86 + Align = alClient + TabOrder = 0 + object Label12: TLabel + Left = 10 + Top = 7 + Width = 23 + Height = 73 + Caption = 'Uzav'#345'eno' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + end + object GridPanel3: TGridPanel + AlignWithMargins = True + Left = 656 + Top = 4 + Width = 647 + Height = 95 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel4 + Row = 0 + end + item + Column = 1 + Control = GridPanel5 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = ssAuto + end> + TabOrder = 2 + object GridPanel4: TGridPanel + Left = 1 + Top = 1 + Width = 322 + Height = 93 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label14 + Row = 0 + end + item + Column = 1 + Control = GridPanel6 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 322 + 93) + object Label14: TLabel + AlignWithMargins = True + Left = 34 + Top = 27 + Width = 93 + Height = 42 + Alignment = taCenter + Anchors = [] + Caption = 'Datum a '#269'as'#13#10'm'#283#345'en'#237 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + WordWrap = True + ExplicitLeft = 5 + ExplicitTop = 37 + end + object GridPanel6: TGridPanel + Left = 161 + Top = 1 + Width = 160 + Height = 91 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = dtDatum + Row = 0 + end + item + Column = 0 + Control = dtTime + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 160 + 91) + object dtDatum: TDateTimePicker + Left = 26 + Top = 8 + Width = 107 + Height = 29 + Anchors = [] + Date = 45177.000000000000000000 + Time = 0.336625196759996500 + TabOrder = 0 + end + object dtTime: TDateTimePicker + Left = 27 + Top = 53 + Width = 106 + Height = 29 + Anchors = [] + Date = 45177.000000000000000000 + Format = 'H:mm' + Time = 0.753657407403807200 + Kind = dtkTime + TabOrder = 1 + end + end + end + object GridPanel5: TGridPanel + AlignWithMargins = True + Left = 343 + Top = 11 + Width = 283 + Height = 73 + Margins.Left = 20 + Margins.Top = 10 + Margins.Right = 20 + Margins.Bottom = 10 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label13 + Row = 0 + end + item + Column = 0 + Control = edtVyrDenDis + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 283 + 73) + object Label13: TLabel + Left = 94 + Top = 8 + Width = 94 + Height = 21 + Anchors = [] + Caption = 'V'#253'robn'#237' den' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitLeft = 99 + end + object edtVyrDenDis: TEdit + Left = 77 + Top = 40 + Width = 128 + Height = 29 + Alignment = taCenter + Anchors = [] + Color = 15790320 + ReadOnly = True + TabOrder = 0 + Text = 'edtVyrDenDis' + end + end + end + object btnQuit: TSpeedButton + Left = 4 + Top = 6 + Width = 64 + Height = 64 + Align = alCustom + Glyph.Data = { + 36100000424D3610000000000000360000002800000020000000200000000100 + 2000000000000010000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000012510284000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000000000000000000000000000012510284239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000012510284239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000012510284239C03FF239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000012510284239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000012510284239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000114C017C239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000114C017C239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000000000000114C017C239C03FF239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000114C017C239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000114C017C239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000114C017C000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000} + OnClick = btnQuitClick + end + object GridPanel7: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 495 + Width = 1299 + Height = 95 + Align = alClient + ColumnCollection = < + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnAddNew + Row = 0 + end + item + Column = 1 + ColumnSpan = 4 + Control = pnlInfo + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 3 + object btnAddNew: TButton + Left = 9 + Top = 5 + Width = 205 + Height = 53 + Align = alCustom + Anchors = [] + Caption = 'Zapsat nov'#233' z'#225'znamy' + TabOrder = 0 + OnClick = btnAddNewClick + end + object pnlInfo: TPanel + AlignWithMargins = True + Left = 263 + Top = 4 + Width = 1032 + Height = 87 + Align = alClient + TabOrder = 1 + object GridPanel8: TGridPanel + Left = 1 + Top = 1 + Width = 1030 + Height = 85 + Align = alClient + ColumnCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label15 + Row = 0 + end + item + Column = 1 + Control = Label16 + Row = 0 + end + item + Column = 2 + Control = GridPanel9 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + object Label15: TLabel + Left = 1 + Top = 1 + Width = 257 + Height = 21 + Align = alTop + Alignment = taCenter + Caption = 'CCP 1 - Z'#225'znam kontroly' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitWidth = 187 + end + object Label16: TLabel + Left = 258 + Top = 1 + Width = 257 + Height = 21 + Align = alTop + Alignment = taCenter + Caption = 'Technologick'#233' hodnoty v'#253'robku:' + ExplicitWidth = 223 + end + object GridPanel9: TGridPanel + Left = 515 + Top = 1 + Width = 257 + Height = 83 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label17 + Row = 0 + end + item + Column = 0 + Control = Label18 + Row = 1 + end + item + Column = 0 + Control = Label19 + Row = 2 + end + item + Column = 0 + Control = Label20 + Row = 3 + end + item + Column = 1 + Control = lblTeplotaCCP1 + Row = 0 + end + item + Column = 1 + Control = lblRozmer + Row = 1 + end + item + Column = 1 + Control = lblHmotnost + Row = 2 + end + item + Column = 1 + Control = lblDelka + Row = 3 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 0 + object Label17: TLabel + Left = 1 + Top = 1 + Width = 104 + Height = 20 + Align = alLeft + Caption = 'Teplota - CCP1:' + ExplicitHeight = 21 + end + object Label18: TLabel + Left = 1 + Top = 21 + Width = 57 + Height = 20 + Align = alLeft + Caption = 'Rozm'#283'r:' + ExplicitHeight = 21 + end + object Label19: TLabel + Left = 1 + Top = 41 + Width = 72 + Height = 21 + Align = alLeft + Caption = 'Hmotnost:' + ExplicitLeft = 129 + ExplicitTop = 1 + end + object Label20: TLabel + Left = 1 + Top = 62 + Width = 42 + Height = 20 + Align = alLeft + Caption = 'D'#233'lka:' + ExplicitHeight = 21 + end + object lblTeplotaCCP1: TLabel + Left = 129 + Top = 1 + Width = 4 + Height = 20 + Align = alLeft + ExplicitHeight = 21 + end + object lblRozmer: TLabel + Left = 129 + Top = 21 + Width = 4 + Height = 20 + Align = alLeft + ExplicitHeight = 21 + end + object lblHmotnost: TLabel + Left = 129 + Top = 41 + Width = 4 + Height = 21 + Align = alLeft + ExplicitLeft = 190 + end + object lblDelka: TLabel + Left = 129 + Top = 62 + Width = 4 + Height = 20 + Align = alLeft + ExplicitHeight = 21 + end + end + end + end + end + end + object numBoxEditor: TNumberBox + Left = 48 + Top = 213 + Width = 121 + Height = 29 + Alignment = taCenter + Anchors = [] + Mode = nbmFloat + TabOrder = 1 + Visible = False + OnChange = numBoxEditorChange + OnKeyDown = numBoxEditorKeyDown + end + object checkBoxEditor: TCheckBox + Left = 56 + Top = 248 + Width = 97 + Height = 17 + Anchors = [] + Caption = 'checkBoxEditor' + TabOrder = 2 + Visible = False + OnClick = checkBoxEditorClick + end +end diff --git a/frmKontrolaCCP1.pas b/frmKontrolaCCP1.pas new file mode 100644 index 0000000..d9b03d2 --- /dev/null +++ b/frmKontrolaCCP1.pas @@ -0,0 +1,375 @@ +unit frmKontrolaCCP1; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids, + ddPlugin_TLB, Vcl.StdCtrls, Vcl.Mask, RxToolEdit, Vcl.ComCtrls, Vcl.NumberBox, + Vcl.Buttons; + +type + TMyGrid = class(TDBGrid); + + TformKontrolaCCP1 = class(TForm) + GridPanel1: TGridPanel; + grdCCP1: TStringGrid; + GridPanel2: TGridPanel; + Label1: TLabel; + pnlLabel1: TPanel; + Label2: TLabel; + pnlLabel2: TPanel; + Label3: TLabel; + pnlLabel3: TPanel; + Label4: TLabel; + pnlLabel4: TPanel; + Label5: TLabel; + pnlLabel5: TPanel; + Label6: TLabel; + pnlLabel6: TPanel; + Label7: TLabel; + pnlLabel7: TPanel; + Label8: TLabel; + pnlLabel8: TPanel; + Label9: TLabel; + pnlLabel9: TPanel; + Label10: TLabel; + pnlLabel10: TPanel; + Label11: TLabel; + pnlLabel11: TPanel; + Label12: TLabel; + pnlLabel12: TPanel; + GridPanel3: TGridPanel; + GridPanel4: TGridPanel; + GridPanel5: TGridPanel; + Label13: TLabel; + edtVyrDenDis: TEdit; + Label14: TLabel; + GridPanel6: TGridPanel; + dtDatum: TDateTimePicker; + dtTime: TDateTimePicker; + numBoxEditor: TNumberBox; + checkBoxEditor: TCheckBox; + btnAddNew: TButton; + btnQuit: TSpeedButton; + GridPanel7: TGridPanel; + pnlInfo: TPanel; + GridPanel8: TGridPanel; + Label15: TLabel; + Label16: TLabel; + GridPanel9: TGridPanel; + Label17: TLabel; + Label18: TLabel; + Label19: TLabel; + Label20: TLabel; + lblTeplotaCCP1: TLabel; + lblRozmer: TLabel; + lblHmotnost: TLabel; + lblDelka: TLabel; + procedure FormCreate(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure grdCCP1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure numBoxEditorChange(Sender: TObject); + procedure grdCCP1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure checkBoxEditorClick(Sender: TObject); + procedure btnAddNewClick(Sender: TObject); + procedure btnQuitClick(Sender: TObject); + procedure numBoxEditorKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); + private + function VisibleColsCount: integer; + public + apiMod: boolean; + Helios: IHelios; + vyrobniDen: TDateTime; + end; + +var + formKontrolaCCP1: TformKontrolaCCP1; + colWidths: TArray; + oldGridWidth: integer; + zapisNum: boolean; + aktCol, aktRow: integer; + +implementation +uses System.StrUtils, + datMod, frmKontrolaCCP1edt, funkceTB, helTabsBIDs; + +{$R *.dfm} + + procedure TformKontrolaCCP1.FormResize(Sender: TObject); + var i1,i2: integer; + begin + i2:= 0; + for i1:=0 to grdCCP1.ColCount-1 do + begin + if (grdCCP1.ColWidths[i1]>1) then + begin + grdCCP1.ColWidths[i1]:= Trunc(grdCCP1.Width * colWidths[i1]); +// GridPanel2.ColumnCollection[i2].Value:= grdCCP1.Columns[i1].Width; +// Inc(i2); + end + else + grdCCP1.ColWidths[i1]:= 1; + end; + + GridPanel2.Invalidate; + end; + + + + + procedure TformKontrolaCCP1.FormShow (Sender: TObject); + var i: integer; + p: Integer; + begin + + grdCCP1.Options:= grdCCP1.Options - [goEditing] - [goAlwaysShowEditor]; + dm.NactiCCP1 (self); + + edtVyrDenDis.Text:= FormatDateTime('dd.mm.yyyy', vyrobniDen); + dtDatum.Date:= vyrobniDen; + dtTime.Time:= Now; + + pnlInfo.Visible:= false; + + grdCCP1.Invalidate; + self.Invalidate; + + end; + + + + + procedure TformKontrolaCCP1.grdCCP1DrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + var cellRect: TRect; + t: string; + a: TAlignment; + sAlg: word; + begin + a:= grdCCP1.ColAlignments[ACol]; + + + if not(gdFixed in State) then + if (ARow=aktRow) then + begin + grdCCP1.Canvas.Brush.Color:= $00FFC891; +// grdCCP1.Canvas.Font.Color:= clWindow; + end + else + begin + grdCCP1.Canvas.Brush.Color:= clWindow; +// grdCCP1.Canvas.Font.Color:= clBlack; + end; + + + if (ACol=13) then // bunka je Checkbox ? + begin + grdCCP1.Canvas.FillRect (cellRect); // Nakreslíme buňku jako prázdnou + cellRect:= Rect; + InflateRect(cellRect, -2, -2); // Zmenšíme velikost checkboxu, aby byl uvnitř buňky + checkBoxEditor.Left:= cellRect.Left; + checkBoxEditor.Top:= cellRect.Top; + checkBoxEditor.Width:= cellRect.Width; + checkBoxEditor.Height:= cellRect.Height; + checkBoxEditor.Visible:= true; + checkBoxEditor.Checked:= (grdCCP1.Cells[ACol, ARow]='1'); // Např. '1' značí zaškrtnutý checkbox + end + else + begin + // Pro ostatní sloupce nakreslíme text normálně + if (a=taCenter) then + begin + t:= grdCCP1.Cells[ACol, ARow]; + sAlg:= SetTextAlign (grdCCP1.Canvas.Handle, TA_CENTER); + grdCCP1.Canvas.TextRect (Rect, Rect.Left + (Rect.Right-Rect.Left) div 2, Rect.Top + 2, t); + SetTextAlign (grdCCP1.Canvas.Handle, sAlg); +{ + grdCCP1.Canvas.FillRect (cellRect); // Nakreslíme buňku jako prázdnou + cellRect:= Rect; + cellRect.Top:= cellRect.Top + 3; // adjust top to center vertical + DrawText(grdCCP1.Canvas.Handle, PChar(t), Length(t), cellRect, DT_CENTER); // draw text +} + end + else + grdCCP1.Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, grdCCP1.Cells[ACol, ARow]); + end; + end; + + + + + procedure TformKontrolaCCP1.grdCCP1SelectCell (Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + var R: TRect; + t: string; + begin + CanSelect:= false; + + aktCol:= ACol; + aktRow:= ARow; + + if (ACol=1) then + CanSelect:= true; + + end; + + + + + procedure TformKontrolaCCP1.numBoxEditorChange (Sender: TObject); + begin +// grdCCP1.Cells[grdCCP1.Col, grdCCP1.Row]:= numBoxEditor.Text; +// numBoxEditor.Visible:= False; +// grdCCP1.SetFocus; + end; + + + + + procedure TformKontrolaCCP1.numBoxEditorKeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); + var c: Boolean; + begin + if (Key=VK_RETURN) or (Key=VK_TAB) then + begin + + grdCCP1.Cells[aktCol, grdCCP1.Row]:= numBoxEditor.Text; + numBoxEditor.Visible:= False; + numBoxEditor.Text:= ''; + grdCCP1.SetFocus; + + case aktCol of + 4, 5, 6, 7: grdCCP1SelectCell(Sender, aktCol+1, grdCCP1.Row, c); + end; + end; + end; + + + + function TformKontrolaCCP1.VisibleColsCount: Integer; + var i: integer; + begin + result:= 0; + for i:=0 to grdCCP1.ColCount-1 do + if (grdCCP1.ColWidths[i]>1) then + result:= result + 1; + end; + + + + + procedure TformKontrolaCCP1.btnAddNewClick (Sender: TObject); + var f: TformKontrolaCCP1edt; + begin + f:= TformKontrolaCCP1edt.Create(nil); + try + f.Helios:= Helios; + f.vyrobniDen:= vyrobniDen; + f.apiMod:= apiMod; + + f.Position:= poDesigned; + f.Left:= self.Left + 60; + f.Top:= self.Top + 60; + + f.Caption:= 'CCP1 - NOVÉ ZÁZNAMY'; + f.grdCCP1.RowCount:= dm.PocetStrojuSVyrobou + 1; + + f.ShowModal; + finally + f.Free; + end; + + dm.NactiCCP1 (self); + + end; + + + + + procedure TformKontrolaCCP1.btnQuitClick(Sender: TObject); + begin + Close; + end; + + + + + procedure TformKontrolaCCP1.checkBoxEditorClick(Sender: TObject); + begin +// Aktualizujeme hodnotu v buňce podle stavu checkboxu + if (grdCCP1.Col=13) and (grdCCP1.Row>=0) then + begin + if checkBoxEditor.Checked then + grdCCP1.Cells[grdCCP1.Col, grdCCP1.Row] := '1' + else + grdCCP1.Cells[grdCCP1.Col, grdCCP1.Row] := '0'; + end; + checkBoxEditor.Visible:= false; // Skryjeme checkbox po kliknutí + end; + + + + + procedure TformKontrolaCCP1.FormCreate(Sender: TObject); + const HideScrollStyles = WS_HSCROLL; + var i1, i2: integer; + grdStyle: Integer; + begin + +{ // pro TDBGrid + TMyGrid(grdCCP1).DefaultRowHeight:= 40; + TMyGrid(grdCCP1).RowHeights[0]:= 0; + TMyGrid(grdCCP1).ScrollBars:= TScrollStyle.ssVertical; + + grdStyle:= GetWindowLong(grdCCP1.Handle, GWL_STYLE); + if (grdStyle and HideScrollStyles) <> 0 then + SetWindowLong(grdCCP1.Handle, GWL_STYLE, grdStyle and not HideScrollStyles); +} + +{ + grdCCP1.ColWidths[0]:= 0; // colID + grdCCP1.ColWidths[1]:= Trunc(GridPanel2.ColumnCollection[0].Value + GridPanel2.ColumnCollection[1].Value) - 6; + grdCCP1.ColWidths[2]:= Trunc(GridPanel2.ColumnCollection[2].Value); + grdCCP1.ColWidths[3]:= Trunc(GridPanel2.ColumnCollection[3].Value); + grdCCP1.ColWidths[4]:= Trunc(GridPanel2.ColumnCollection[4].Value); + grdCCP1.ColWidths[5]:= Trunc(GridPanel2.ColumnCollection[5].Value); + grdCCP1.ColWidths[6]:= Trunc(GridPanel2.ColumnCollection[6].Value); + grdCCP1.ColWidths[7]:= Trunc(GridPanel2.ColumnCollection[7].Value); + grdCCP1.ColWidths[8]:= Trunc(GridPanel2.ColumnCollection[8].Value); + grdCCP1.ColWidths[9]:= Trunc(GridPanel2.ColumnCollection[9].Value); + grdCCP1.ColWidths[10]:= Trunc(GridPanel2.ColumnCollection[10].Value); + grdCCP1.ColWidths[11]:= Trunc(GridPanel2.ColumnCollection[11].Value); + grdCCP1.ColWidths[12]:= Trunc(GridPanel2.ColumnCollection[12].Value); +} + grdCCP1.ColWidths[13]:= 0; // colIDNorma + + grdCCP1.ColAlignments[3]:= taCenter; // smena + + grdCCP1.DefaultDrawing:= false; + + i2:= 0; + SetLength(colWidths, grdCCP1.ColCount); + for i1:=0 to grdCCP1.ColCount-1 do + begin + if (grdCCP1.ColWidths[i1]>0) then + begin + colWidths[i1]:= grdCCP1.ColWidths[i1] / grdCCP1.Width; +// GridPanel2.ColumnCollection[i2].SizeStyle:= ssAbsolute; +// GridPanel2.ColumnCollection[i2].Value:= grdCCP1.Columns[i1].Width; +// Inc(i2); + end + else + colWidths[i1]:= 0; + end; + + end; + + procedure TformKontrolaCCP1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); + begin + if (Key=VK_ESCAPE) then + Close; + end; + +end. + diff --git a/frmKontrolaCCP1edt.dfm b/frmKontrolaCCP1edt.dfm new file mode 100644 index 0000000..140d925 --- /dev/null +++ b/frmKontrolaCCP1edt.dfm @@ -0,0 +1,1136 @@ +object formKontrolaCCP1edt: TformKontrolaCCP1edt + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' KONTROLA PE'#268'EN'#205' - CCP1' + ClientHeight = 594 + ClientWidth = 1436 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnCreate = FormCreate + OnKeyUp = FormKeyUp + OnResize = FormResize + OnShow = FormShow + DesignSize = ( + 1436 + 594) + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1436 + Height = 594 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = grdCCP1 + Row = 2 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel2 + Row = 1 + end + item + Column = 1 + Control = GridPanel3 + Row = 0 + end + item + Column = 0 + Control = btnQuit + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel7 + Row = 3 + end> + RowCollection = < + item + Value = 17.024898914662690000 + end + item + Value = 14.875505426686540000 + end + item + Value = 50.962738029908240000 + end + item + Value = 17.136857628742530000 + end> + TabOrder = 0 + object grdCCP1: TStringGrid + AlignWithMargins = True + Left = 4 + Top = 193 + Width = 1428 + Height = 296 + Align = alClient + ColCount = 14 + DefaultColAlignment = taCenter + DefaultRowHeight = 30 + DefaultDrawing = False + FixedCols = 0 + FixedRows = 0 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goEditing, goAlwaysShowEditor, goFixedRowDefAlign] + ScrollBars = ssVertical + TabOrder = 0 + OnDrawCell = grdCCP1DrawCell + OnSelectCell = grdCCP1SelectCell + ColWidths = ( + 1 + 185 + 135 + 40 + 60 + 61 + 62 + 57 + 58 + 43 + 397 + 250 + 40 + 1) + end + object GridPanel2: TGridPanel + Left = 1 + Top = 102 + Width = 1434 + Height = 88 + Align = alClient + ColumnCollection = < + item + SizeStyle = ssAbsolute + Value = 15.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 178.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 137.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 40.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 62.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 62.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 61.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 60.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 60.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 42.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 395.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 251.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 40.000000000000000000 + end + item + SizeStyle = ssAbsolute + Value = 18.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = pnlLabel1 + Row = 0 + end + item + Column = 2 + Control = pnlLabel2 + Row = 0 + end + item + Column = 3 + Control = pnlLabel3 + Row = 0 + end + item + Column = 4 + Control = pnlLabel4 + Row = 0 + end + item + Column = 5 + Control = pnlLabel5 + Row = 0 + end + item + Column = 6 + Control = pnlLabel6 + Row = 0 + end + item + Column = 7 + Control = pnlLabel7 + Row = 0 + end + item + Column = 8 + Control = pnlLabel8 + Row = 0 + end + item + Column = 9 + Control = pnlLabel9 + Row = 0 + end + item + Column = 10 + Control = pnlLabel10 + Row = 0 + end + item + Column = 11 + Control = pnlLabel11 + Row = 0 + end + item + Column = 12 + Control = pnlLabel12 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + object pnlLabel1: TPanel + Left = 16 + Top = 1 + Width = 178 + Height = 86 + Align = alClient + TabOrder = 1 + object Label1: TLabel + Left = 67 + Top = 33 + Width = 36 + Height = 21 + Caption = 'Stroj' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + end + object pnlLabel2: TPanel + Left = 194 + Top = 1 + Width = 137 + Height = 86 + Align = alClient + TabOrder = 2 + object Label2: TLabel + Left = 33 + Top = 33 + Width = 83 + Height = 21 + Caption = 'Datum/'#269'as' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + end + object pnlLabel3: TPanel + Left = 331 + Top = 1 + Width = 40 + Height = 86 + Align = alClient + TabOrder = 3 + object Label3: TLabel + Left = 10 + Top = 16 + Width = 23 + Height = 52 + Caption = 'Sm'#283'na' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel4: TPanel + Left = 371 + Top = 1 + Width = 62 + Height = 86 + Align = alClient + TabOrder = 4 + object Label4: TLabel + Left = 20 + Top = 15 + Width = 23 + Height = 57 + Caption = 'Teplota' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel5: TPanel + Left = 433 + Top = 1 + Width = 62 + Height = 86 + Align = alClient + TabOrder = 5 + object Label5: TLabel + Left = 20 + Top = 10 + Width = 23 + Height = 65 + Caption = 'Rychlost' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel6: TPanel + Left = 495 + Top = 1 + Width = 61 + Height = 86 + Align = alClient + TabOrder = 6 + object Label6: TLabel + Left = 20 + Top = 5 + Width = 23 + Height = 76 + Caption = 'Hmotnost' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel7: TPanel + Left = 556 + Top = 1 + Width = 60 + Height = 86 + Align = alClient + TabOrder = 7 + object Label7: TLabel + Left = 20 + Top = 20 + Width = 23 + Height = 44 + Caption = 'D'#233'lka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel8: TPanel + Left = 616 + Top = 1 + Width = 60 + Height = 86 + Align = alClient + TabOrder = 8 + object Label8: TLabel + Left = 20 + Top = 14 + Width = 23 + Height = 56 + Caption = 'Pr'#367'm'#283'r' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel9: TPanel + Left = 676 + Top = 1 + Width = 42 + Height = 86 + Align = alClient + TabOrder = 9 + object Label9: TLabel + Left = 10 + Top = 8 + Width = 23 + Height = 73 + Caption = 'Vyhovuje' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + WordWrap = True + end + end + object pnlLabel10: TPanel + Left = 718 + Top = 1 + Width = 395 + Height = 86 + Align = alClient + TabOrder = 10 + object Label10: TLabel + Left = 172 + Top = 31 + Width = 64 + Height = 21 + Caption = 'V'#253'robek' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel11: TPanel + Left = 1113 + Top = 1 + Width = 251 + Height = 86 + Align = alClient + TabOrder = 11 + object Label11: TLabel + Left = 60 + Top = 29 + Width = 144 + Height = 21 + Caption = 'N'#225'pravn'#233' opat'#345'en'#237 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + object pnlLabel12: TPanel + Left = 1364 + Top = 1 + Width = 40 + Height = 86 + Align = alClient + TabOrder = 0 + object Label12: TLabel + Left = 10 + Top = 7 + Width = 23 + Height = 73 + Caption = 'Uzav'#345'eno' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + end + end + object GridPanel3: TGridPanel + AlignWithMargins = True + Left = 721 + Top = 4 + Width = 711 + Height = 95 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel4 + Row = 0 + end + item + Column = 1 + Control = GridPanel5 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = ssAuto + end> + TabOrder = 2 + object GridPanel4: TGridPanel + Left = 1 + Top = 1 + Width = 354 + Height = 93 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label14 + Row = 0 + end + item + Column = 1 + Control = GridPanel6 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 354 + 93) + object Label14: TLabel + AlignWithMargins = True + Left = 42 + Top = 27 + Width = 93 + Height = 42 + Alignment = taCenter + Anchors = [] + Caption = 'Datum a '#269'as'#13#10'm'#283#345'en'#237 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + WordWrap = True + ExplicitLeft = 5 + ExplicitTop = 37 + end + object GridPanel6: TGridPanel + Left = 177 + Top = 1 + Width = 176 + Height = 91 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = dtDatum + Row = 0 + end + item + Column = 0 + Control = dtTime + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 176 + 91) + object dtDatum: TDateTimePicker + Left = 34 + Top = 8 + Width = 107 + Height = 29 + Anchors = [] + Date = 45177.000000000000000000 + Time = 0.336625196759996500 + TabOrder = 0 + end + object dtTime: TDateTimePicker + Left = 35 + Top = 53 + Width = 106 + Height = 29 + Anchors = [] + Date = 45177.000000000000000000 + Format = 'H:mm' + Time = 0.753657407403807200 + Kind = dtkTime + TabOrder = 1 + end + end + end + object GridPanel5: TGridPanel + AlignWithMargins = True + Left = 375 + Top = 11 + Width = 315 + Height = 73 + Margins.Left = 20 + Margins.Top = 10 + Margins.Right = 20 + Margins.Bottom = 10 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label13 + Row = 0 + end + item + Column = 0 + Control = edtVyrDenDis + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 315 + 73) + object Label13: TLabel + Left = 110 + Top = 8 + Width = 94 + Height = 21 + Anchors = [] + Caption = 'V'#253'robn'#237' den' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitLeft = 99 + end + object edtVyrDenDis: TEdit + Left = 93 + Top = 40 + Width = 128 + Height = 29 + Alignment = taCenter + Anchors = [] + Color = 15790320 + ReadOnly = True + TabOrder = 0 + Text = 'edtVyrDenDis' + end + end + end + object btnQuit: TSpeedButton + Left = 4 + Top = 6 + Width = 64 + Height = 64 + Align = alCustom + Glyph.Data = { + 36100000424D3610000000000000360000002800000020000000200000000100 + 2000000000000010000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000012510284000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000000000000000000000000000012510284239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000012510284239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000012510284239C03FF239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000012510284239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000012510284239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000114C017C239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000114C017C239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000000000000114C017C239C03FF239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000114C017C239C03FF239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000114C017C239C03FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000114C017C000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF0000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF727272FF7272 + 72FF727272FF727272FF727272FF727272FF727272FF727272FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000} + OnClick = btnQuitClick + end + object GridPanel7: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 495 + Width = 1428 + Height = 95 + Align = alClient + ColumnCollection = < + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + ColumnSpan = 4 + Control = pnlInfo + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 3 + object pnlInfo: TPanel + AlignWithMargins = True + Left = 289 + Top = 4 + Width = 1135 + Height = 87 + Align = alClient + TabOrder = 0 + object GridPanel8: TGridPanel + Left = 1 + Top = 1 + Width = 1133 + Height = 85 + Align = alClient + ColumnCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label15 + Row = 0 + end + item + Column = 1 + Control = Label16 + Row = 0 + end + item + Column = 2 + Control = GridPanel9 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + object Label15: TLabel + Left = 1 + Top = 1 + Width = 283 + Height = 21 + Align = alTop + Alignment = taCenter + Caption = 'CCP 1 - Z'#225'znam kontroly' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitWidth = 187 + end + object Label16: TLabel + Left = 284 + Top = 1 + Width = 282 + Height = 21 + Align = alTop + Alignment = taCenter + Caption = 'Technologick'#233' hodnoty v'#253'robku:' + ExplicitWidth = 223 + end + object GridPanel9: TGridPanel + Left = 566 + Top = 1 + Width = 283 + Height = 83 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label17 + Row = 0 + end + item + Column = 0 + Control = Label18 + Row = 1 + end + item + Column = 0 + Control = Label19 + Row = 2 + end + item + Column = 0 + Control = Label20 + Row = 3 + end + item + Column = 1 + Control = lblTeplotaCCP1 + Row = 0 + end + item + Column = 1 + Control = lblRozmer + Row = 1 + end + item + Column = 1 + Control = lblHmotnost + Row = 2 + end + item + Column = 1 + Control = lblDelka + Row = 3 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 0 + object Label17: TLabel + Left = 1 + Top = 1 + Width = 104 + Height = 20 + Align = alLeft + Caption = 'Teplota - CCP1:' + ExplicitHeight = 21 + end + object Label18: TLabel + Left = 1 + Top = 21 + Width = 57 + Height = 20 + Align = alLeft + Caption = 'Rozm'#283'r:' + ExplicitHeight = 21 + end + object Label19: TLabel + Left = 1 + Top = 41 + Width = 72 + Height = 21 + Align = alLeft + Caption = 'Hmotnost:' + ExplicitLeft = 129 + ExplicitTop = 1 + end + object Label20: TLabel + Left = 1 + Top = 62 + Width = 42 + Height = 20 + Align = alLeft + Caption = 'D'#233'lka:' + ExplicitHeight = 21 + end + object lblTeplotaCCP1: TLabel + Left = 141 + Top = 1 + Width = 4 + Height = 20 + Align = alLeft + ExplicitHeight = 21 + end + object lblRozmer: TLabel + Left = 141 + Top = 21 + Width = 4 + Height = 20 + Align = alLeft + ExplicitHeight = 21 + end + object lblHmotnost: TLabel + Left = 141 + Top = 41 + Width = 4 + Height = 21 + Align = alLeft + ExplicitLeft = 190 + end + object lblDelka: TLabel + Left = 141 + Top = 62 + Width = 4 + Height = 20 + Align = alLeft + ExplicitHeight = 21 + end + end + end + end + end + end + object numBoxEditor: TNumberBox + Left = 59 + Top = 213 + Width = 121 + Height = 29 + Alignment = taCenter + Anchors = [] + Mode = nbmFloat + TabOrder = 1 + Visible = False + OnChange = numBoxEditorChange + OnExit = numBoxEditorExit + OnKeyDown = numBoxEditorKeyDown + end + object checkBoxEditor: TCheckBox + Left = 66 + Top = 248 + Width = 97 + Height = 17 + Anchors = [] + Caption = 'checkBoxEditor' + TabOrder = 2 + Visible = False + OnClick = checkBoxEditorClick + end +end diff --git a/frmKontrolaCCP1edt.pas b/frmKontrolaCCP1edt.pas new file mode 100644 index 0000000..5a3d379 --- /dev/null +++ b/frmKontrolaCCP1edt.pas @@ -0,0 +1,443 @@ +unit frmKontrolaCCP1edt; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids, + ddPlugin_TLB, Vcl.StdCtrls, Vcl.Mask, RxToolEdit, Vcl.ComCtrls, Vcl.NumberBox, + Vcl.Buttons; + +type + TMyGrid = class(TDBGrid); + + TformKontrolaCCP1edt = class(TForm) + GridPanel1: TGridPanel; + grdCCP1: TStringGrid; + GridPanel2: TGridPanel; + Label1: TLabel; + pnlLabel1: TPanel; + Label2: TLabel; + pnlLabel2: TPanel; + Label3: TLabel; + pnlLabel3: TPanel; + Label4: TLabel; + pnlLabel4: TPanel; + Label5: TLabel; + pnlLabel5: TPanel; + Label6: TLabel; + pnlLabel6: TPanel; + Label7: TLabel; + pnlLabel7: TPanel; + Label8: TLabel; + pnlLabel8: TPanel; + Label9: TLabel; + pnlLabel9: TPanel; + Label10: TLabel; + pnlLabel10: TPanel; + Label11: TLabel; + pnlLabel11: TPanel; + Label12: TLabel; + pnlLabel12: TPanel; + GridPanel3: TGridPanel; + GridPanel4: TGridPanel; + GridPanel5: TGridPanel; + Label13: TLabel; + edtVyrDenDis: TEdit; + Label14: TLabel; + GridPanel6: TGridPanel; + dtDatum: TDateTimePicker; + dtTime: TDateTimePicker; + numBoxEditor: TNumberBox; + checkBoxEditor: TCheckBox; + btnQuit: TSpeedButton; + GridPanel7: TGridPanel; + pnlInfo: TPanel; + GridPanel8: TGridPanel; + Label15: TLabel; + Label16: TLabel; + GridPanel9: TGridPanel; + Label17: TLabel; + Label18: TLabel; + Label19: TLabel; + Label20: TLabel; + lblTeplotaCCP1: TLabel; + lblRozmer: TLabel; + lblHmotnost: TLabel; + lblDelka: TLabel; + procedure FormCreate(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure grdCCP1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure numBoxEditorChange(Sender: TObject); + procedure grdCCP1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure checkBoxEditorClick(Sender: TObject); + procedure btnQuitClick(Sender: TObject); + procedure numBoxEditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure numBoxEditorExit(Sender: TObject); + private + function VisibleColsCount: integer; + public + apiMod: boolean; + Helios: IHelios; + vyrobniDen: TDateTime; + end; + +var + formKontrolaCCP1edt: TformKontrolaCCP1edt; + colWidths: TArray; + oldGridWidth: integer; + zapisNum: boolean; + aktCol, aktRow, oldCol: integer; + +implementation +uses System.StrUtils, + datMod, funkceTB, helTabsBIDs; + +{$R *.dfm} + + procedure TformKontrolaCCP1edt.FormResize (Sender: TObject); + var i1,i2: integer; + begin + i2:= 0; + for i1:=0 to grdCCP1.ColCount-1 do + begin + if (grdCCP1.ColWidths[i1]>1) then + begin + grdCCP1.ColWidths[i1]:= Trunc(grdCCP1.Width * colWidths[i1]); +// GridPanel2.ColumnCollection[i2].Value:= grdCCP1.Columns[i1].Width; +// Inc(i2); + end + else + grdCCP1.ColWidths[i1]:= 1; + end; + + GridPanel2.Invalidate; + end; + + + + + procedure TformKontrolaCCP1edt.FormShow (Sender: TObject); + var i: integer; + p: Integer; + begin + + dm.NactiCCP1ProNoveZaznamy (self); + + edtVyrDenDis.Text:= FormatDateTime('dd.mm.yyyy', vyrobniDen); + dtDatum.Date:= vyrobniDen; + dtTime.Time:= Now; + + grdCCP1.Invalidate; + self.Invalidate; + + end; + + + + + procedure TformKontrolaCCP1edt.grdCCP1DrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + var cellRect: TRect; + t: string; + a: TAlignment; + sAlg: word; + begin + a:= grdCCP1.ColAlignments[ACol]; + + if not(gdFixed in State) then + if (ARow=aktRow) then + begin + grdCCP1.Canvas.Brush.Color:= $00FFC891; +// grdCCP1.Canvas.Font.Color:= clWindow; + end + else + begin + grdCCP1.Canvas.Brush.Color:= clWindow; +// grdCCP1.Canvas.Font.Color:= clBlack; + end; + + + if (ACol=13) then // bunka je Checkbox ? + begin + grdCCP1.Canvas.FillRect (cellRect); // Nakreslíme buňku jako prázdnou + cellRect:= Rect; + InflateRect(cellRect, -2, -2); // Zmenšíme velikost checkboxu, aby byl uvnitř buňky + checkBoxEditor.Left:= cellRect.Left; + checkBoxEditor.Top:= cellRect.Top; + checkBoxEditor.Width:= cellRect.Width; + checkBoxEditor.Height:= cellRect.Height; + checkBoxEditor.Visible:= true; + checkBoxEditor.Checked:= (grdCCP1.Cells[ACol, ARow]='1'); // Např. '1' značí zaškrtnutý checkbox + end + else + begin + // Pro ostatní sloupce nakreslíme text normálně + if (a=taCenter) then + begin + t:= grdCCP1.Cells[ACol, ARow]; + sAlg:= SetTextAlign (grdCCP1.Canvas.Handle, TA_CENTER); + grdCCP1.Canvas.TextRect (Rect, Rect.Left + (Rect.Right-Rect.Left) div 2, Rect.Top + 2, t); + SetTextAlign (grdCCP1.Canvas.Handle, sAlg); +{ + grdCCP1.Canvas.FillRect (cellRect); // Nakreslíme buňku jako prázdnou + cellRect:= Rect; + cellRect.Top:= cellRect.Top + 3; // adjust top to center vertical + DrawText(grdCCP1.Canvas.Handle, PChar(t), Length(t), cellRect, DT_CENTER); // draw text +} + end + else + grdCCP1.Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, grdCCP1.Cells[ACol, ARow]); + end; + end; + + + + + procedure TformKontrolaCCP1edt.grdCCP1SelectCell (Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + var R: TRect; + t, s: string; + begin + CanSelect:= false; + + oldCol:= aktCol; + aktCol:= ACol; + aktRow:= ARow; + + s:= grdCCP1.Cells[1, ARow]; + if (s<>'') then + begin + if (ACol<4) or (ACol=10) or (ACol=12) then + CanSelect:= false; + + if (ACol=11) then + CanSelect:= true; + + if (ACol in [4..8]) then + begin + R:= grdCCP1.CellRect(ACol, ARow); + R.Left:= R.Left + grdCCP1.Left; + R.Right := R.Right + grdCCP1.Left; + R.Top := R.Top + grdCCP1.Top; + R.Bottom := R.Bottom + grdCCP1.Top; + if (ACol in [4,5]) then + numBoxEditor.Decimal:= 0; + if (ACol in [6,7,8]) then + numBoxEditor.Decimal:= 2; + numBoxEditor.Left:= R.Left + 1; + numBoxEditor.Top:= R.Top + 1; + numBoxEditor.Width:= (R.Right + 1) - R.Left; + numBoxEditor.Height:= (R.Bottom + 1) - R.Top; + numBoxEditor.Visible:= True; + t:= numBoxEditor.Text; + numBoxEditor.SetFocus; + CanSelect:= true; + end; + end + else + CanSelect:= false; + + +// if (ACol=1) then +// CanSelect:= true; + + end; + + + + + procedure TformKontrolaCCP1edt.numBoxEditorChange (Sender: TObject); + begin +// grdCCP1.Cells[grdCCP1.Col, grdCCP1.Row]:= numBoxEditor.Text; +// numBoxEditor.Visible:= False; +// grdCCP1.SetFocus; + end; + + + + + procedure TformKontrolaCCP1edt.numBoxEditorExit (Sender: TObject); + begin + grdCCP1.SetFocus; + grdCCP1.Cells[aktCol, grdCCP1.Row]:= numBoxEditor.Text; + numBoxEditor.Text:= ''; + end; + + + + + procedure TformKontrolaCCP1edt.numBoxEditorKeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); + var c: Boolean; + begin + if (Key=VK_RETURN) or (Key=VK_TAB) then + begin + + grdCCP1.Cells[aktCol, grdCCP1.Row]:= numBoxEditor.Text; + numBoxEditor.Visible:= False; + numBoxEditor.Text:= ''; + grdCCP1.SetFocus; + + case aktCol of + 4, 5, 6, 7: grdCCP1SelectCell(Sender, aktCol+1, grdCCP1.Row, c); + end; + end; + end; + + + + + function TformKontrolaCCP1edt.VisibleColsCount: Integer; + var i: integer; + begin + result:= 0; + for i:=0 to grdCCP1.ColCount-1 do + if (grdCCP1.ColWidths[i]>1) then + result:= result + 1; + end; + + + + + procedure TformKontrolaCCP1edt.btnQuitClick (Sender: TObject); + var lSQL: string; + i: integer; + tepl, rychl, hmot, delka, prum: Extended; + function PrazdnyOrNull(const inStr: string): string; + var e: Extended; + begin + if not(TryStrToFloat(inStr, e)) then + e:= 0; + result:= inStr.Trim.Replace(' ', '').Replace(',', '.'); + if (inStr.Trim='') or (e=0) then + result:= 'NULL'; + end; + begin + Helios.ExecSQL('DROP TABLE IF EXISTS #InsertCCP1Zaznamy'); + + // lSQL:= 'IF OBJECT_ID(N''temp..#InsertCCP1Zaznamy'', N''U'') IS NOT NULL DROP TABLE #InsertCCP1Zaznamy' + CRLF; + lSQL:= 'DROP TABLE IF EXISTS #InsertCCP1Zaznamy' + CRLF; + lSQL:= lSQL + 'CREATE TABLE #InsertCCP1Zaznamy (ID INT IDENTITY(1,1) NOT NULL, Smena TINYINT, IDPrikaz INT, IDStroj INT, Teplota NUMERIC(15, 3), Rychlost NUMERIC(15, 2), Hmotnost NUMERIC(15, 3)'; + lSQL:= lSQL + ', Delka NUMERIC(15, 2), Prumer NUMERIC(15, 3), NapravneOpatreni NVARCHAR(255) )'; + Helios.ExecSQL(lSQL); + + i:= 0; + while (grdCCP1.Cells[1, i]<>'') do + begin + if (grdCCP1.Cells[4, i]<>'') or (grdCCP1.Cells[5, i]<>'') or (grdCCP1.Cells[6, i]<>'') or (grdCCP1.Cells[7, i]<>'') or (grdCCP1.Cells[8, i]<>'') then + begin + if not(TryStrToFloat(grdCCP1.Cells[4, i], tepl)) then + tepl:= 0; + if not(TryStrToFloat(grdCCP1.Cells[5, i], rychl)) then + rychl:= 0; + if not(TryStrToFloat(grdCCP1.Cells[6, i], hmot)) then + hmot:= 0; + if not(TryStrToFloat(grdCCP1.Cells[7, i], delka)) then + delka:= 0; + if not(TryStrToFloat(grdCCP1.Cells[8, i], prum)) then + prum:= 0; + + if (tepl>0) or (rychl>0) or (hmot>0) or (delka>0) or (prum>0) then + begin + lSQL:= 'INSERT #InsertCCP1Zaznamy (IDStroj, IDPrikaz, Smena, Teplota, Rychlost, Hmotnost, Delka, Prumer, NapravneOpatreni) SELECT ' + PrazdnyOrNull (grdCCP1.Cells[0, i]); + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[13, i]); + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[3, i]); + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[4, i]); // teplota + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[5, i]); // rychlost + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[6, i]); // hmotnost + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[7, i]); // delka + lSQL:= lSQL + ', ' + PrazdnyOrNull (grdCCP1.Cells[8, i]); // prumer + lSQL:= lSQL + ', ' + IfThen(grdCCP1.Cells[11, i]='', PrazdnyOrNull (grdCCP1.Cells[11, i]), grdCCP1.Cells[11, i].QuotedString); // napravne opatreni + Helios.ExecSQL(lSQL); + end; + end; + Inc(i); + end; + Helios.ExecSQL('IF OBJECT_ID(N''dbo.ep_Vyroba_ZapisCCP1'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_ZapisCCP1'); + + Close; + end; + + + + + procedure TformKontrolaCCP1edt.checkBoxEditorClick (Sender: TObject); + begin +// Aktualizujeme hodnotu v buňce podle stavu checkboxu + if (grdCCP1.Col=13) and (grdCCP1.Row>=0) then + begin + if checkBoxEditor.Checked then + grdCCP1.Cells[grdCCP1.Col, grdCCP1.Row] := '1' + else + grdCCP1.Cells[grdCCP1.Col, grdCCP1.Row] := '0'; + end; + checkBoxEditor.Visible:= false; // Skryjeme checkbox po kliknutí + end; + + + + + procedure TformKontrolaCCP1edt.FormCreate (Sender: TObject); + const HideScrollStyles = WS_HSCROLL; + var i1, i2: integer; + grdStyle: Integer; + begin + +{ // pro TDBGrid + TMyGrid(grdCCP1).DefaultRowHeight:= 40; + TMyGrid(grdCCP1).RowHeights[0]:= 0; + TMyGrid(grdCCP1).ScrollBars:= TScrollStyle.ssVertical; + + grdStyle:= GetWindowLong(grdCCP1.Handle, GWL_STYLE); + if (grdStyle and HideScrollStyles) <> 0 then + SetWindowLong(grdCCP1.Handle, GWL_STYLE, grdStyle and not HideScrollStyles); +} + +{ + grdCCP1.ColWidths[0]:= 0; // colID + grdCCP1.ColWidths[1]:= Trunc(GridPanel2.ColumnCollection[0].Value + GridPanel2.ColumnCollection[1].Value) - 6; + grdCCP1.ColWidths[2]:= Trunc(GridPanel2.ColumnCollection[2].Value); + grdCCP1.ColWidths[3]:= Trunc(GridPanel2.ColumnCollection[3].Value); + grdCCP1.ColWidths[4]:= Trunc(GridPanel2.ColumnCollection[4].Value); + grdCCP1.ColWidths[5]:= Trunc(GridPanel2.ColumnCollection[5].Value); + grdCCP1.ColWidths[6]:= Trunc(GridPanel2.ColumnCollection[6].Value); + grdCCP1.ColWidths[7]:= Trunc(GridPanel2.ColumnCollection[7].Value); + grdCCP1.ColWidths[8]:= Trunc(GridPanel2.ColumnCollection[8].Value); + grdCCP1.ColWidths[9]:= Trunc(GridPanel2.ColumnCollection[9].Value); + grdCCP1.ColWidths[10]:= Trunc(GridPanel2.ColumnCollection[10].Value); + grdCCP1.ColWidths[11]:= Trunc(GridPanel2.ColumnCollection[11].Value); + grdCCP1.ColWidths[12]:= Trunc(GridPanel2.ColumnCollection[12].Value); +} + grdCCP1.ColWidths[13]:= 0; // colIDNorma + + grdCCP1.ColAlignments[3]:= taCenter; // smena + + grdCCP1.DefaultDrawing:= false; + + i2:= 0; + SetLength(colWidths, grdCCP1.ColCount); + for i1:=0 to grdCCP1.ColCount-1 do + begin + if (grdCCP1.ColWidths[i1]>0) then + begin + colWidths[i1]:= grdCCP1.ColWidths[i1] / grdCCP1.Width; +// GridPanel2.ColumnCollection[i2].SizeStyle:= ssAbsolute; +// GridPanel2.ColumnCollection[i2].Value:= grdCCP1.Columns[i1].Width; +// Inc(i2); + end + else + colWidths[i1]:= 0; + end; + + end; + + + + procedure TformKontrolaCCP1edt.FormKeyUp (Sender: TObject; var Key: Word; Shift: TShiftState); + begin + if (Key=VK_ESCAPE) then + Close; + end; + +end. + diff --git a/frmObjednavkaMat.dfm b/frmObjednavkaMat.dfm new file mode 100644 index 0000000..e05c54f --- /dev/null +++ b/frmObjednavkaMat.dfm @@ -0,0 +1,797 @@ +object formObjednavkaMat: TformObjednavkaMat + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Objedn'#225'vka' + ClientHeight = 634 + ClientWidth = 1170 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnResize = FormResize + OnShow = FormShow + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1170 + Height = 634 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdObjednavkaMat + Row = 2 + end + item + Column = 0 + Control = GridPanel2 + Row = 0 + end + item + Column = 0 + Row = 0 + end + item + Column = 0 + Control = GridPanel6 + Row = 1 + end> + RowCollection = < + item + Value = 33.000000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 55.000000000000000000 + end> + TabOrder = 0 + object grdObjednavkaMat: TJvDBGrid + Left = 1 + Top = 285 + Width = 1168 + Height = 348 + Align = alClient + DataSource = dm.dsObjednavkaMat + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnCellClick = grdObjednavkaMatCellClick + OnColExit = grdObjednavkaMatColExit + OnDrawColumnCell = grdObjednavkaMatDrawColumnCell + OnMouseUp = grdObjednavkaMatMouseUp + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colCisloObj' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Objedn'#225'vka' + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnozstvi' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Mno'#382'stv'#237 + Width = 86 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPalet' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Palet' + Width = 50 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDodano' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Dod'#225'no' + Width = 64 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPalet2' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Palet' + Width = 50 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatum' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Datum' + Width = 86 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colObjednatel' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Objednatel' + Width = 154 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colNeaktivni' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 27 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSplneno' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 27 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colStornovano' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 27 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colUzavreno' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 27 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colVratka' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 27 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPoznamka' + Title.Alignment = taCenter + Title.Caption = 'Pozn'#225'mka' + Width = 372 + Visible = True + end> + end + object GridPanel2: TGridPanel + Left = 1 + Top = 1 + Width = 1168 + Height = 209 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel3 + Row = 0 + end + item + Column = 0 + Control = GridPanel4 + Row = 1 + end + item + Column = 0 + Control = GridPanel5 + Row = 2 + end> + RowCollection = < + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333310000 + end> + TabOrder = 1 + DesignSize = ( + 1168 + 209) + object GridPanel3: TGridPanel + Left = 1 + Top = 1 + Width = 1166 + Height = 69 + Align = alClient + ColumnCollection = < + item + Value = 7.843695605606413000 + end + item + Value = 12.000000000000000000 + end + item + Value = 80.156304394393590000 + end> + ControlCollection = < + item + Column = 0 + Control = edtSZ + Row = 0 + end + item + Column = 1 + Control = edtRC + Row = 0 + end + item + Column = 2 + Control = edtNazev1 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 1166 + 69) + object edtSZ: TEdit + AlignWithMargins = True + Left = 37 + Top = 20 + Width = 52 + Height = 29 + TabStop = False + Alignment = taCenter + Anchors = [akRight] + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + MaxLength = 3 + ParentFont = False + ReadOnly = True + TabOrder = 0 + end + object edtRC: TEdit + Left = 99 + Top = 20 + Width = 125 + Height = 29 + Anchors = [] + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ReadOnly = True + TabOrder = 1 + end + object edtNazev1: TEdit + AlignWithMargins = True + Left = 235 + Top = 20 + Width = 896 + Height = 29 + Anchors = [akLeft] + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ReadOnly = True + TabOrder = 2 + end + end + object GridPanel4: TGridPanel + Left = 128 + Top = 73 + Width = 911 + Height = 63 + Anchors = [akLeft, akTop, akRight, akBottom] + ColumnCollection = < + item + Value = 18.000000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 18.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = edtMnoz + Row = 0 + end + item + Column = 1 + Control = edtPalet + Row = 0 + end + item + Column = 4 + Control = edtMnozVrat + Row = 0 + end + item + Column = 2 + Control = btnNovaObj + Row = 0 + end + item + Column = 5 + Control = btnNovaVratka + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 911 + 63) + object edtMnoz: TLabeledEdit + AlignWithMargins = True + Left = 41 + Top = 27 + Width = 121 + Height = 29 + Alignment = taCenter + Anchors = [akRight] + EditLabel.Width = 63 + EditLabel.Height = 21 + EditLabel.Caption = 'Mno'#382'stv'#237 + NumbersOnly = True + TabOrder = 0 + Text = '' + end + object edtPalet: TLabeledEdit + AlignWithMargins = True + Left = 208 + Top = 27 + Width = 77 + Height = 29 + Alignment = taCenter + Anchors = [] + EditLabel.Width = 33 + EditLabel.Height = 21 + EditLabel.Caption = 'Palet' + NumbersOnly = True + TabOrder = 1 + Text = '' + end + object edtMnozVrat: TLabeledEdit + AlignWithMargins = True + Left = 604 + Top = 27 + Width = 121 + Height = 29 + Alignment = taCenter + Anchors = [] + EditLabel.Width = 63 + EditLabel.Height = 21 + EditLabel.Caption = 'Mno'#382'stv'#237 + NumbersOnly = True + TabOrder = 2 + Text = '' + end + object btnNovaObj: TButton + AlignWithMargins = True + Left = 331 + Top = 9 + Width = 160 + Height = 45 + Anchors = [] + Caption = 'Nov'#225' objedn'#225'vka' + ImageIndex = 1 + ImageName = 'imgAdd' + Images = dm.imgList + TabOrder = 3 + OnClick = btnNovaObjClick + end + object btnNovaVratka: TButton + AlignWithMargins = True + Left = 761 + Top = 9 + Width = 134 + Height = 45 + Anchors = [] + Caption = 'Nov'#225' vratka' + ImageIndex = 2 + ImageName = 'Item5' + Images = dm.imgList + TabOrder = 4 + OnClick = btnNovaVratkaClick + end + end + object GridPanel5: TGridPanel + Left = 130 + Top = 143 + Width = 907 + Height = 60 + Anchors = [] + ColumnCollection = < + item + Value = 18.000000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 46.000000000000000000 + end + item + Value = 18.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = edtMJ + Row = 0 + end + item + Column = 1 + Control = edtNaPalete + Row = 0 + end + item + Column = 3 + Control = btnUkazSeznamPalet + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + DesignSize = ( + 907 + 60) + object edtMJ: TLabeledEdit + AlignWithMargins = True + Left = 52 + Top = 26 + Width = 82 + Height = 29 + Margins.Right = 30 + Alignment = taCenter + Anchors = [akRight] + Color = 15790320 + EditLabel.Width = 20 + EditLabel.Height = 21 + EditLabel.Caption = 'MJ' + NumbersOnly = True + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtNaPalete: TLabeledEdit + AlignWithMargins = True + Left = 177 + Top = 26 + Width = 140 + Height = 29 + Alignment = taCenter + Anchors = [] + Color = 15790320 + EditLabel.Width = 153 + EditLabel.Height = 21 + EditLabel.Caption = 'Na palet'#283' (orienta'#269'n'#283')' + NumbersOnly = True + ReadOnly = True + TabOrder = 1 + Text = '' + end + object btnUkazSeznamPalet: TButton + AlignWithMargins = True + Left = 757 + Top = 7 + Width = 135 + Height = 45 + Anchors = [] + Caption = 'Paletov'#233' listy' + TabOrder = 2 + OnClick = btnUkazSeznamPaletClick + end + end + end + object GridPanel6: TGridPanel + Left = 1 + Top = 210 + Width = 1168 + Height = 75 + Align = alClient + ColumnCollection = < + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307693000 + end + item + Value = 7.692307692307679000 + end> + ControlCollection = < + item + Column = 7 + Control = Panel1 + Row = 0 + end + item + Column = 11 + Control = Panel2 + Row = 0 + end + item + Column = 8 + Control = Panel3 + Row = 0 + end + item + Column = 9 + Control = Panel4 + Row = 0 + end + item + Column = 10 + Control = Panel5 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + object Panel1: TPanel + Left = 629 + Top = 1 + Width = 90 + Height = 73 + Align = alClient + BorderWidth = 1 + BorderStyle = bsSingle + TabOrder = 0 + object Label5: TLabel + Left = 2 + Top = 2 + Width = 82 + Height = 65 + Align = alClient + Caption = 'Neaktivn'#237 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitWidth = 19 + ExplicitHeight = 53 + end + end + object Panel2: TPanel + Left = 988 + Top = 1 + Width = 89 + Height = 73 + Align = alClient + BorderWidth = 1 + BorderStyle = bsSingle + TabOrder = 1 + object Label1: TLabel + Left = 2 + Top = 2 + Width = 81 + Height = 65 + Align = alClient + Caption = 'Vratka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitWidth = 23 + ExplicitHeight = 44 + end + end + object Panel3: TPanel + Left = 719 + Top = 1 + Width = 89 + Height = 73 + Align = alClient + BorderWidth = 1 + BorderStyle = bsSingle + TabOrder = 2 + object Label3: TLabel + Left = 2 + Top = 2 + Width = 81 + Height = 65 + Align = alClient + Caption = 'Stornov'#225'no' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitWidth = 19 + ExplicitHeight = 67 + end + end + object Panel4: TPanel + Left = 808 + Top = 1 + Width = 90 + Height = 73 + Align = alClient + BorderWidth = 1 + BorderStyle = bsSingle + TabOrder = 3 + object Label4: TLabel + Left = 2 + Top = 2 + Width = 82 + Height = 65 + Align = alClient + Caption = 'Spln'#283'no' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitWidth = 19 + ExplicitHeight = 47 + end + end + object Panel5: TPanel + Left = 898 + Top = 1 + Width = 90 + Height = 73 + Align = alClient + BorderWidth = 1 + BorderStyle = bsSingle + TabOrder = 4 + object Label2: TLabel + Left = 2 + Top = 2 + Width = 82 + Height = 65 + Align = alClient + Caption = 'Uzav'#345'eno' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [] + ParentFont = False + ExplicitWidth = 19 + ExplicitHeight = 55 + end + end + end + end + object icmpCli: TIdIcmpClient + ReceiveTimeout = 2000 + Protocol = 1 + ProtocolIPv6 = 58 + Left = 680 + Top = 178 + end +end diff --git a/frmObjednavkaMat.pas b/frmObjednavkaMat.pas new file mode 100644 index 0000000..7d884e0 --- /dev/null +++ b/frmObjednavkaMat.pas @@ -0,0 +1,551 @@ +unit frmObjednavkaMat; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.Mask, + IdHTTP, IdSSLOpenSSL, System.JSON, IdBaseComponent, IdComponent, IdRawBase, IdRawClient, IdIcmpClient, + ddPlugin_TLB, JvExDBGrids, JvDBGrid; + +{$I iConsts.inc} + +type + TformObjednavkaMat = class(TForm) + GridPanel1: TGridPanel; + grdObjednavkaMat: TJvDBGrid; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + edtSZ: TEdit; + edtRC: TEdit; + edtNazev1: TEdit; + GridPanel4: TGridPanel; + edtMnoz: TLabeledEdit; + edtPalet: TLabeledEdit; + edtMnozVrat: TLabeledEdit; + btnNovaObj: TButton; + btnNovaVratka: TButton; + GridPanel5: TGridPanel; + edtMJ: TLabeledEdit; + edtNaPalete: TLabeledEdit; + btnUkazSeznamPalet: TButton; + GridPanel6: TGridPanel; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Panel1: TPanel; + Panel2: TPanel; + Panel3: TPanel; + Panel4: TPanel; + Panel5: TPanel; + icmpCli: TIdIcmpClient; + procedure FormShow (Sender: TObject); + procedure grdObjednavkaMatDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure FormResize (Sender: TObject); + procedure btnNovaObjClick (Sender: TObject); + procedure grdObjednavkaMatColExit (Sender: TObject); + procedure FormClose (Sender: TObject; var Action: TCloseAction); + procedure btnNovaVratkaClick (Sender: TObject); + procedure btnUkazSeznamPaletClick (Sender: TObject); + procedure grdObjednavkaMatMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure grdObjednavkaMatCellClick (Column: TColumn); + private + public + Helios: IHelios; + idKmen: integer; + vyrobniDen: TDateTime; + end; + +var + formObjednavkaMat: TformObjednavkaMat; + sz, rc: string; + aktRow, aktCol: integer; + pingOK: boolean; + +implementation +uses System.StrUtils, System.Math, + datMod, helUtils, frmSeznamPalet; + +{$R *.dfm} + + + procedure TformObjednavkaMat.btnNovaObjClick (Sender: TObject); + var lSQL, jsonText, sarze, paletovyList, ph1, ph2, mj: string; + mn, napal, mnPL, mnSum, mnIn, mnInSum: Extended; + pal, i, x: integer; + lHTTP: TIdHTTP; + ssl: TIdSSLIOHandlerSocketOpenSSL; + lParamList, respStream: TStringStream; + resp: string; + joOut, joIn, itemsObj: TJSONObject; + ja: TJSONArray; + jv: TJSONValue; + errText: byte; + mamPrepocet: boolean; + prepMJPal: Single; + begin + errText:= 0; + + mj:= helUtils.getHeliosStrVal(Helios, 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString, lSQL).ToLower; + prepMJPal:= 0; + mamPrepocet:= false; + if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString + ' AND MJEvidence=N''KA''')) then + mamPrepocet:= true; + if (mj='kg') or (mj='ks') then + begin + lSQL:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=N' + mj.QuotedString + ' AND KodMJ2=N''pal'''; + prepMJPal:= getHeliosFloatVal (Helios, 0, lSQL); + mamPrepocet:= (prepMJPal>0); + end; + + + edtMnoz.Text:= edtMnoz.Text.Trim; + edtPalet.Text:= edtPalet.Text.Trim; + + if not(TryStrToFloat(edtMnoz.Text, mn)) then + mn:= 0; + if not(TryStrToInt(edtPalet.Text, pal)) then + pal:= 0; + if not(TryStrToFloat(edtNaPalete.Text, napal)) then + napal:= 0; + + if (mn>0) or (pal>0) then + begin + mnSum:= mn; + if (pal>0) then + mnSum:= pal * napal; + + + if (mn>0) and (pal>0) then + Helios.Error(#1'Nelze zadat kombinaci, zadejte buď množství nebo počet palet.'#1) + else + begin + try +// param je stejny + lParamList:= TStringStream.Create(''); + joOut:= TJSONObject.Create; + lSQL:= 'SELECT SkupZbo, RegCis FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString; + with Helios.OpenSQL(lSQL) do + begin + joOut.AddPair('skupzbo', VarToStr(FieldByNameValues('SkupZbo'))); + joOut.AddPair('regcis', VarToStr(FieldByNameValues('RegCis'))); + end; + joOut.AddPair('id', 0); + lParamList.WriteString(joOut.ToString); + +// http klient je stejny + lHTTP:= TIdHTTP.Create; + if (datMod.phServer.Contains('https')) then + begin + ssl:= TIdSSLIOHandlerSocketOpenSSL.Create(nil); + ssl.SSLOptions.Method:= sslvTLSv1_2; + ssl.SSLOptions.Mode:= sslmUnassigned; + lHTTP.IOHandler:= ssl; + end; + lHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent]; + lHTTP.Request.ContentType := 'application/ld+json'; + lHTTP.Request.Accept := 'application/ld+json, text/javascript, */*; q=0.01'; + + + jsonText:= '{"@context":"/api/contexts/Order","@id":"/api/orders/14","@type":"Order","id":14,"heliosId":null,"name":"Cukr krupice - big-bag - VPEK","skupzbo":"101","regcis":' + + '"101002","paletovyList":"2010100200005","quantity":"4260.0000","items":[{"@id":"/api/material_order_items/12","@type":"MaterialOrderItem","id":12,"stockItem":{"@id":' + + '"/api/stock_items/16","@type":"StockItem","id":16,"heliosId":40,"heliosPrijemkaId":1940},"stockItemFinal":null,"order":"/api/orders/14","name":"Cukr krupice - big-bag' + + ' - VPEK","sarze":"645901","paletovyList":"2010100200005","quantity":"4260","dateExp":"2030-08-15T00:00:00+02:00","isCompleted":false,"completedAt":null}],"isCompleted"' + + ':false,"isUserCompleted":false,"completedAt":null}'; + + jsonText:= '{"@context":"/api/contexts/Error","@type":"hydra:Error","hydra:title":"An error occurred","hydra:description":"Nebyla nalezena další položka suroviny pro naskladnÄ›ní"' + + ',"trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"/var/www/rootvin/src/Service/Rootvin/OrderManager.php","line":230,"args":[]},{"namespace"' + + ':"App\\Service\\Rootvin","short_class":"OrderManager","class":"App\\Service\\Rootvin\\OrderManager","type":"-\u003E","function":"createOrder","file":"/var/www/rootvin/src/Service' + + '/Rootvin/OrderManager.php","line":167,"args":[]},{"namespace":"App\\Service\\Rootvin","short_class":"OrderManager","class":"App\\Service\\Rootvin\\OrderManager","type":"-\u003E"' + + ',"function":"createOrderByCard","file":"/var/www/rootvin/src/Controller/Api/HeliosOrderController.php","line":23,"args":[]},{"namespace":"App\\Controller\\Api","short_class"' + + ':"HeliosOrderController","class":"App\\Controller\\Api\\HeliosOrderController","type":"-\u003E","function":"__invoke","file":"/var/www/rootvin/vendor/symfony/http-kernel/' + + 'HttpKernel.php","line":169,"args":[]},{"namespace":"Symfony\\Component\\HttpKernel","short_class":"HttpKernel","class":"Symfony\\Component\\HttpKernel\\HttpKernel","type"' + + ':"-\u003E","function":"handleRaw","file":"/var/www/rootvin/vendor/symfony/http-kernel/HttpKernel.php","line":81,"args":[]},{"namespace":"Symfony\\Component\\HttpKernel"' + + ',"short_class":"HttpKernel","class":"Symfony\\Component\\HttpKernel\\HttpKernel","type":"-\u003E","function":"handle","file":"/var/www/rootvin/vendor/symfony/http-kernel' + + '/Kernel.php","line":201,"args":[]},{"namespace":"Symfony\\Component\\HttpKernel","short_class":"Kernel","class":"Symfony\\Component\\HttpKernel\\Kernel","type":"-\u003E"' + + ',"function":"handle","file":"/var/www/rootvin/public/index.php","line":25,"args":[]}]}'; + + +// zadane mnozstvi, nulove palety + if (mn>0) and (pal=0) then + begin + mnInSum:= 0; // mnozstvi nactene z prijatych PL + while (mn>mnInSum) and (errText=0) do // pokud je nactene mnozstvi mensi nez pozadovane, nacitej dalsi PL + begin + +// pokud nemam prepocet na palety, loop musi probehnout jen 1x + if not(mamPrepocet) then + mnInSum:= mn; + + sarze:= ''; + paletovyList:= ''; + try + icmpCli.Host:= datMod.getDomainName (datMod.phServer); + try + icmpCLi.Ping(); + Sleep(500); + pingOK:= (icmpCli.ReplyStatus.BytesReceived>0); + except + pingOK:= False; + end; + + resp:= ''; + if (pingOK) then + begin + respStream:= TStringStream.Create(''); + lHTTP.Post (datMod.phServer + '/order', lParamList, respStream); + resp:= respStream.DataString.Replace('\/', '/'); + end; + +// log + if (helUtils.SQLObjectExists(Helios, tblHDCPHLog)) and (resp<>'') then + Helios.ExecSQL ('INSERT ' + tblHDCPHLog + ' (LogText, LogTextLong) SELECT N''Dotaz na objednávku materiálu (dle mnoz)'', N' + resp.QuotedString); + + + if (resp.Contains('neexistuje')) then + errText:= 1; + + if (ContainsText(resp,'nebyla nalezena dal')) then + errText:= 2; + +// resp:= jsonText; + if (resp<>'') and (resp.IndexOf('items')>0) and (errText=0) then + begin + joIn:= TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(resp), 0) as TJSONObject; + joIn.TryGetValue('id', ph1); + if (joIn.TryGetValue('items', ja) and (ja.Count > 0)) then + begin + for x:=0 to ja.Count-1 do + begin + ph2:= ja.Items[x].GetValue('id'); + paletovyList:= ja.Items[x].GetValue('paletovyList'); + sarze:= ja.Items[x].GetValue('sarze'); + mnPL:= ja.Items[x].GetValue('quantity'); + mnInSum:= mnInSum + mnPL; + if (sarze<>'') and (paletovyList<>'') then + begin + lSQL:= 'INSERT ' + tblObjednavky + ' (SkupZbo, RegCis, IDKmenZbozi, PaletovyList, Sarze, Mnozstvi, IdPHIdent, IdPHIdent2) SELECT N' + sz.QuotedString; + lSQL:= lSQL + ', N' + rc.QuotedString + ', ' + idKmen.ToString + ', N' + paletovyList.QuotedString + ', N' + sarze.QuotedString + ', ' + mnPL.ToString.Replace(',', '.'); + lSQL:= lSQL + ', ' + ph1 + ', ' + ph2; + try + Helios.ExecSQL(lSQL); + finally + end; + end; + end; + end; + end + else + if (sarze='') and (paletovyList='') then + begin + lSQL:= 'INSERT ' + tblObjednavky + ' (SkupZbo, RegCis, IDKmenZbozi, PaletovyList, Sarze, Mnozstvi, IdPHIdent, IdPHIdent2) SELECT N' + sz.QuotedString; + lSQL:= lSQL + ', N' + rc.QuotedString + ', ' + idKmen.ToString + ', N' + paletovyList.QuotedString + ', N' + sarze.QuotedString + ', ' + mnPL.ToString.Replace(',', '.'); + lSQL:= lSQL + ', ' + ph1 + ', ' + ph2; + try + Helios.ExecSQL(lSQL); + finally + end; + end; + finally + respStream.Free; + ja.Free; +// joIn.Free; + end; + end; + end; + + +// zadane palety, nulove mnozstvi + if (pal>0) and (mn=0) and (errText=0) then + for i:=1 to pal do + begin + sarze:= ''; + paletovyList:= ''; + try + + icmpCli.Host:= datMod.getDomainName (datMod.phServer); + try + icmpCLi.Ping(); + Sleep(500); + pingOK:= (icmpCli.ReplyStatus.BytesReceived>0); + except + pingOK:= False; + end; + resp:= ''; + + if (pingOK) then + begin + respStream:= TStringStream.Create(''); + lHTTP.Post (datMod.phServer + '/order', lParamList, respStream); + resp:= respStream.DataString.Replace('\/', '/'); + end; + +// log + if (helUtils.SQLObjectExists(Helios, tblHDCPHLog)) and (resp<>'') then + Helios.ExecSQL ('INSERT ' + tblHDCPHLog + ' (LogText, LogTextLong) SELECT N''Dotaz na objednávku materiálu (dle pal)'', N' + resp.QuotedString); + + + if (ContainsText(resp,'neexistuje')) then + errText:= 1; + + if (ContainsText(resp,'nebyla nalezena dal')) then + errText:= 2; + +// resp:= jsonText; + if (resp<>'') and (resp.IndexOf('items')>0) and (errText=0) then + begin + joIn:= TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(resp), 0) as TJSONObject; + joIn.TryGetValue('id', ph1); + if (joIn.TryGetValue('items', ja) and (ja.Count > 0)) then + begin + for x:=0 to ja.Count-1 do + begin + ph2:= ja.Items[x].GetValue('id'); + paletovyList:= ja.Items[x].GetValue('paletovyList'); + sarze:= ja.Items[x].GetValue('sarze'); + mnPL:= ja.Items[x].GetValue('quantity'); + mnInSum:= mnInSum + mnPL; + if (sarze<>'') and (paletovyList<>'') then + begin + lSQL:= 'INSERT ' + tblObjednavky + ' (SkupZbo, RegCis, IDKmenZbozi, PaletovyList, Sarze, Mnozstvi, IdPHIdent, IdPHIdent2) SELECT N' + sz.QuotedString; + lSQL:= lSQL + ', N' + rc.QuotedString + ', ' + idKmen.ToString + ', N' + paletovyList.QuotedString + ', N' + sarze.QuotedString + ', ' + mnPL.ToString.Replace(',', '.'); + lSQL:= lSQL + ', ' + ph1 + ', ' + ph2; + try + Helios.ExecSQL(lSQL); + finally + end; + end; + end; + + { + paletovyList:= ja.GetValue('paletovyList'); + sarze:= ja.GetValue('sarze'); + mnPL:= ja.GetValue('quantity'); + if (paletovyList<>'') and (sarze<>'') and (mnPL>0) then + begin + lSQL:= 'INSERT ' + tblObjednavky + ' (SkupZbo, RegCis, IDKmenZbozi, PaletovyList, Sarze, Mnozstvi) SELECT N' + sz.QuotedString + ', N' + rc.QuotedString + ', ' + idKmen.ToString; + lSQL:= lSQL + ', N' + paletovyList.QuotedString + ', N' + sarze.QuotedString + ', ' + mnPL.ToString.Replace(',', '.'); + try + Helios.ExecSQL(lSQL); + finally + end; + end; +} + end; + end; + finally + respStream.Free; + ja.Free; +// joIn.Free; + end; + end; + + finally + lParamList.Free; + joOut.Free; + if (ssl<>nil) then + ssl.Free; + lHTTP.Free; + end; + end; + + if (errText>0) then + begin + case errText of + 1: Helios.Error(#1'Položka není evidována v systému evidence šarží (PH).'#1); + 2: Helios.Error(#1'V systému evidence šarží nebyla nalezena další šarže (PH).'#1); + end; + edtMnoz.Text:= ''; + edtPalet.Text:= ''; + end; + + + end + else + Helios.Error(#1'Není zadáno množství pro objednávku.'#1); + + + dm.NactiObjednavkyPolozky (idKmen); + dm.vtObjednavkaMat.First; + + end; + + + + + procedure TformObjednavkaMat.btnNovaVratkaClick (Sender: TObject); + var lSQL: string; + mn: Extended; + begin + edtMnozVrat.Text:= edtMnozVrat.Text.Trim; + if not(TryStrToFloat(edtMnozVrat.Text, mn)) then + mn:= 0; + + if (mn>0) then + begin + + lSQL:= 'INSERT ' + tblObjednavky + ' (SkupZbo, RegCis, IDKmenZbozi, Mnozstvi, Vratka) SELECT N' + sz.QuotedString + ', N' + rc.QuotedString + ', ' + idKmen.ToString; + lSQL:= lSQL + ', ' + mn.ToString.Replace(',', '.') + ', 1'; + try + Helios.ExecSQL(lSQL); + finally + end; + end + else + Helios.Error(#1'Není zadáno množství pro vratku.'#1); + + dm.NactiObjednavkyPolozky (idKmen); + dm.vtObjednavkaMat.First; + end; + + + + + procedure TformObjednavkaMat.btnUkazSeznamPaletClick (Sender: TObject); + var f: TformSeznamPalet; + begin + f:= TformSeznamPalet.Create(nil); + try + f.Helios:= Helios; + f.idKmen:= idKmen; + f.den:= vyrobniDen; + f.typ:= 1; // seznam vyrobenych palet z VPr + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformObjednavkaMat.FormClose (Sender: TObject; var Action: TCloseAction); + var i, ii: integer; + p: string; + begin + i:= dm.vtObjednavkaMat.RecNo; + dm.vtObjednavkaMat.DisableControls; + + dm.vtObjednavkaMat.First; + while not(dm.vtObjednavkaMat.Eof) do + begin + ii:= dm.vtObjednavkaMat.FieldByName('colCisloObj').AsInteger; + p:= dm.vtObjednavkaMat.FieldByName('colPoznamka').AsString; + Helios.ExecSQL('UPDATE ' + tblObjednavky + ' SET Poznamka=N' + IfThen(p='', 'ULL', p.QuotedString) + ' WHERE ID=' + ii.ToString); + dm.vtObjednavkaMat.Next; + end; + end; + + + + + procedure TformObjednavkaMat.FormResize (Sender: TObject); + var i, s: integer; + begin + s:= 0; + for i:=0 to GridPanel6.ColumnCollection.Count-1 do + begin + GridPanel6.ColumnCollection.Items[i].SizeStyle:= ssAbsolute; + GridPanel6.ColumnCollection.Items[i].Value:= grdObjednavkaMat.Columns.Items[i].Width; + end; + GridPanel6.ColumnCollection.Items[0].Value:= GridPanel6.ColumnCollection.Items[0].Value + 20; + end; + + + + + procedure TformObjednavkaMat.FormShow (Sender: TObject); + var lSQL: string; + begin + grdObjednavkaMat.Font.Height:= Helios.FontHeight; + + with Helios.OpenSQL('SELECT SkupZbo,RegCis,Nazev1,MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString) do + if (RecordCount=1) then + begin + sz:= VarToStr(FieldByNameValues('SkupZbo')); + rc:= VarToStr(FieldByNameValues('RegCis')); + edtSZ.Text:= sz; + edtRC.Text:= rc; + edtNazev1.Text:= VarToStr(FieldByNameValues('Nazev1')); + edtMJ.Text:= VarToStr(FieldByNameValues('MJEvidence')); + + if (edtMJ.Text.ToUpper='KA') then + begin + lSQL:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE UPPER(KodMJ1)=N''KA'' AND KodMJ2=N''pal'' AND IDKmenZbozi=' + idKmen.ToString; + edtNaPalete.Text:= helUtils.getHeliosIntVal(Helios, 0, lSQL).ToString; + end; + + if (edtMJ.Text.ToLower='kg') then + begin + lSQL:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE LOWER(KodMJ1)=N''kg'' AND KodMJ2=N''pal'' AND IDKmenZbozi=' + idKmen.ToString; + edtNaPalete.Text:= helUtils.getHeliosIntVal(Helios, 0, lSQL).ToString; + end; + + end; + + edtMnoz.Text:= '0'; + edtPalet.Text:= '0'; + edtMnozVrat.Text:= '0'; + + dm.NactiObjednavkyPolozky (idKmen); + dm.vtObjednavkaMat.First; + + grdObjednavkaMat.Invalidate; + edtPalet.Enabled:= (edtNaPalete.Text<>'') and (edtNaPalete.Text<>'0') and (edtNaPalete.Text<>'0.0') and (edtNaPalete.Text<>'0,0'); + if (edtMnoz.CanFocus) then + begin + edtMnoz.SetFocus; + edtMnoz.SelectAll; + end; + + end; + + + + procedure TformObjednavkaMat.grdObjednavkaMatCellClick(Column: TColumn); + begin +// if (grdObjednavkaMat.DataSource.DataSet.FieldByName('colMnozstvi').AsString='') then + end; + + + + + procedure TformObjednavkaMat.grdObjednavkaMatColExit (Sender: TObject); + begin + // test + end; + + + + + procedure TformObjednavkaMat.grdObjednavkaMatDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdObjednavkaMat.DataSource.DataSet.RecNo)) then + TJvDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TJvDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='colMnozstvi') then + begin + if (gdSelected in State) then + TJvDBGrid(Sender).Canvas.Font.Color:= clBlack; + TJvDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; + end; + TJvDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformObjednavkaMat.grdObjednavkaMatMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + aktRow:= TJvDBGrid(Sender).MouseCoord(X, Y).Y; + aktCol:= TJvDBGrid(Sender).MouseCoord(X, Y).X; + end; + +end. diff --git a/frmOdpady.dfm b/frmOdpady.dfm new file mode 100644 index 0000000..8eb2c8c --- /dev/null +++ b/frmOdpady.dfm @@ -0,0 +1,150 @@ +object formOdpady: TformOdpady + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Odpad' + ClientHeight = 516 + ClientWidth = 922 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 922 + Height = 516 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdOdpady + Row = 1 + end + item + Column = 0 + Control = btnOK + Row = 2 + end> + RowCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 80.135339684801000000 + end + item + Value = 9.864660315199004000 + end> + TabOrder = 0 + ExplicitLeft = 138 + ExplicitTop = 126 + ExplicitWidth = 185 + ExplicitHeight = 41 + DesignSize = ( + 922 + 516) + object grdOdpady: TDBGrid + Left = 1 + Top = 52 + Width = 920 + Height = 412 + Align = alClient + DataSource = dm.dsOdpady + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgEditing, dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdOdpadyDrawColumnCell + Columns = < + item + Expanded = False + FieldName = 'colID' + ReadOnly = True + Visible = False + end + item + Expanded = False + FieldName = 'colStroj' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Stroj' + Width = 245 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatum' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Datum' + Width = 113 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSmena' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'Sm'#283'na' + Width = 71 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMokry' + Title.Alignment = taCenter + Title.Caption = 'Mokr'#253 + Width = 78 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSuchy' + Title.Alignment = taCenter + Title.Caption = 'Such'#253 + Width = 79 + Visible = True + end + item + Expanded = False + FieldName = 'colPoznamka' + Title.Alignment = taCenter + Title.Caption = 'Pozn'#225'mka' + Width = 290 + Visible = True + end> + end + object btnOK: TButton + Left = 391 + Top = 467 + Width = 140 + Height = 45 + Anchors = [] + Caption = 'OK' + TabOrder = 1 + OnClick = btnOKClick + ExplicitTop = 477 + end + end +end diff --git a/frmOdpady.pas b/frmOdpady.pas new file mode 100644 index 0000000..fcf8534 --- /dev/null +++ b/frmOdpady.pas @@ -0,0 +1,83 @@ +unit frmOdpady; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, + ddPlugin_TLB, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls; + +{$I iConsts.inc} + +type + TformOdpady = class(TForm) + GridPanel1: TGridPanel; + grdOdpady: TDBGrid; + btnOK: TButton; + procedure grdOdpadyDrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure btnOKClick(Sender: TObject); + procedure FormShow(Sender: TObject); + private + public + Helios: IHelios; + end; + +var + formOdpady: TformOdpady; + +implementation +uses System.StrUtils, + datMod, helUtils; + +{$R *.dfm} + + procedure TformOdpady.btnOKClick(Sender: TObject); + var lSQL, p: string; + mn1, mn2: Extended; + begin + dm.vtOdpady.DisableControls; + dm.vtOdpady.First; + while not(dm.vtOdpady.Eof) do + begin + p:= dm.vtOdpady.FieldByName('colPoznamka').AsString.Trim; + mn1:= dm.vtOdpady.FieldByName('colMokry').AsExtended; + mn2:= dm.vtOdpady.FieldByName('colSuchy').AsExtended; + + lSQL:= 'UPDATE ' + tblOdpadPek + ' SET Poznamka=N' + IfThen(p='', 'ULL', p.QuotedString) + ', OdpadMokry=' + mn1.ToString.Replace(',', '.') + ', OdpadSuchy=' + mn2.ToString.Replace(',', '.'); + lSQL:= lSQL + ' WHERE ID=' + dm.vtOdpady.FieldByName('colID').AsString; + try + Helios.ExecSQL(lSQL); + finally + end; + dm.vtOdpady.Next; + end; + dm.vtOdpady.EnableControls; + + Close; + end; + + + + + procedure TformOdpady.FormShow(Sender: TObject); + begin + dm.NactiOdpady (self); + end; + + + + + procedure TformOdpady.grdOdpadyDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdOdpady.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + +end. diff --git a/frmPLZakazky.dfm b/frmPLZakazky.dfm new file mode 100644 index 0000000..dd700b9 --- /dev/null +++ b/frmPLZakazky.dfm @@ -0,0 +1,185 @@ +object formPLZakazky: TformPLZakazky + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = ' Paletov'#233' listy k zak'#225'zkce ' + ClientHeight = 527 + ClientWidth = 439 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + DesignSize = ( + 439 + 527) + TextHeight = 21 + object Panel1: TPanel + Left = 6 + Top = 4 + Width = 429 + Height = 65 + Anchors = [akLeft, akTop, akRight] + TabOrder = 0 + ExplicitWidth = 447 + object edtROZakazka: TLabeledEdit + Left = 46 + Top = 32 + Width = 121 + Height = 29 + TabStop = False + AutoSize = False + Color = 15790320 + EditLabel.Width = 68 + EditLabel.Height = 25 + EditLabel.Caption = 'Zak'#225'zka' + EditLabel.Font.Charset = DEFAULT_CHARSET + EditLabel.Font.Color = clWindowText + EditLabel.Font.Height = -19 + EditLabel.Font.Name = 'Segoe UI' + EditLabel.Font.Style = [] + EditLabel.ParentFont = False + MaxLength = 30 + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtROSZ: TLabeledEdit + Left = 180 + Top = 32 + Width = 39 + Height = 29 + TabStop = False + AutoSize = False + Color = 15790320 + EditLabel.Width = 23 + EditLabel.Height = 25 + EditLabel.Caption = 'Sk.' + EditLabel.Font.Charset = DEFAULT_CHARSET + EditLabel.Font.Color = clWindowText + EditLabel.Font.Height = -19 + EditLabel.Font.Name = 'Segoe UI' + EditLabel.Font.Style = [] + EditLabel.ParentFont = False + MaxLength = 3 + ReadOnly = True + TabOrder = 1 + Text = '' + end + object edtRORegCis: TLabeledEdit + Left = 232 + Top = 32 + Width = 171 + Height = 29 + TabStop = False + AutoSize = False + Color = 15790320 + EditLabel.Width = 78 + EditLabel.Height = 25 + EditLabel.Caption = 'Reg. '#269#237'slo' + EditLabel.Font.Charset = DEFAULT_CHARSET + EditLabel.Font.Color = clWindowText + EditLabel.Font.Height = -19 + EditLabel.Font.Name = 'Segoe UI' + EditLabel.Font.Style = [] + EditLabel.ParentFont = False + MaxLength = 30 + ReadOnly = True + TabOrder = 2 + Text = '' + end + end + object Panel2: TPanel + Left = 8 + Top = 71 + Width = 427 + Height = 59 + Anchors = [akLeft, akTop, akRight] + TabOrder = 1 + ExplicitWidth = 445 + DesignSize = ( + 427 + 59) + object Label1: TLabel + Left = 195 + Top = 2 + Width = 43 + Height = 21 + Caption = 'N'#225'zev' + end + object edtRONazev1: TEdit + Left = 4 + Top = 26 + Width = 411 + Height = 29 + TabStop = False + Anchors = [akLeft, akTop, akRight] + AutoSize = False + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + MaxLength = 100 + ParentFont = False + ReadOnly = True + TabOrder = 0 + ExplicitWidth = 429 + end + end + object DBGrid1: TDBGrid + Left = 6 + Top = 132 + Width = 429 + Height = 387 + Anchors = [akLeft, akTop, akRight] + DataSource = dm.dsPLZakazky + TabOrder = 2 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colEvCisloPL' + Title.Alignment = taCenter + Title.Caption = 'Ev.'#269'. palety (PL)' + Width = 137 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatVyroby' + Title.Alignment = taCenter + Title.Caption = 'Datum v'#253'roby' + Width = 122 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKANaPalete' + Title.Alignment = taCenter + Title.Caption = 'KA/pal' + Width = 65 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKsNaPalete' + Title.Alignment = taCenter + Title.Caption = 'ks/pal' + Width = 66 + Visible = True + end> + end +end diff --git a/frmPLZakazky.pas b/frmPLZakazky.pas new file mode 100644 index 0000000..6f576d3 --- /dev/null +++ b/frmPLZakazky.pas @@ -0,0 +1,91 @@ +unit frmPLZakazky; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.ExtCtrls, + Vcl.StdCtrls, Vcl.Mask, Data.DB, Vcl.Grids, Vcl.DBGrids; + +type + TformPLZakazky = class(TForm) + Panel1: TPanel; + edtROZakazka: TLabeledEdit; + edtROSZ: TLabeledEdit; + edtRORegCis: TLabeledEdit; + Panel2: TPanel; + Label1: TLabel; + edtRONazev1: TEdit; + DBGrid1: TDBGrid; + procedure FormShow(Sender: TObject); + private + procedure NactiPL; + public + Helios: IHelios; + zakazka: string; + idKmen: integer; + end; + +var + formPLZakazky: TformPLZakazky; + +implementation +uses System.StrUtils, Json, + datMod, + helUtils, helTabsBIDs; + +{$R *.dfm} + + + procedure TformPLZakazky.NactiPL; + var apiResp, cisloPL: string; + vJson: TJsonValue; + oJson, oJson2, oJson3: TJSONObject; + vContent: TJSONArray; + vContentRow: TJSONObject; + i: integer; + begin + apiResp:= dm.apiVratPaletoveListy (idKmen); + if (apiResp<>'') then + begin + vJson:= TJSONObject.ParseJSONValue(apiResp); + if (Assigned(vJson)) then + try + oJson:= vJson as TJSONObject; + vContent:= oJson.GetValue('Content'); + for i:=0 to vContent.Count-1 do + begin + oJson2:= vContent.Items[I] as TJsonObject; // Element + oJson3:= oJson2.GetValue('CisloPL'); + cisloPL:= oJson3.GetValue('cislo'); + end; + finally + vJson.Free; + end; + end; + end; + + + + + procedure TformPLZakazky.FormShow(Sender: TObject); + begin +// self.Font.Height:= Helios.FontHeight; +// self.Font.Name:= Helios.Font; + + edtROZakazka.Text:= zakazka; + if (idKmen>0) then + begin + with Helios.OpenSQL('SELECT SkupZbo, RegCis, Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString) do + begin + edtROSZ.Text:= VarToStr(FieldByNameValues('SkupZbo')); + edtRORegCis.Text:= VarToStr(FieldByNameValues('RegCis')); + edtRONazev1.Text:= VarToStr(FieldByNameValues('Nazev1')); + end; + + NactiPL; + end; + + end; + +end. diff --git a/frmPekarna.dfm b/frmPekarna.dfm new file mode 100644 index 0000000..a49a18c --- /dev/null +++ b/frmPekarna.dfm @@ -0,0 +1,1788 @@ +object formPekarna: TformPekarna + Left = 0 + Top = 0 + Margins.Bottom = 10 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' P E K '#193' R N A' + ClientHeight = 1041 + ClientWidth = 1813 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + WindowState = wsMaximized + OnClose = FormClose + OnCreate = FormCreate + OnResize = FormResize + OnShow = FormShow + TextHeight = 17 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1813 + Height = 1041 + Align = alClient + ColumnCollection = < + item + Value = 35.000000000000000000 + end + item + Value = 50.000000000000000000 + end + item + Value = 15.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = GridPanel2 + Row = 0 + end + item + Column = 1 + Control = grdStroje + Row = 1 + end + item + Column = 0 + Control = pgCtrlPlan + Row = 1 + end + item + Column = 0 + Control = GridPanel3 + Row = 2 + end + item + Column = 2 + Control = GridPanel5 + Row = 2 + end + item + Column = 2 + Control = GridPanel6 + Row = 0 + end + item + Column = 2 + Control = memVyrobniPoznamka + Row = 1 + end + item + Column = 1 + Control = GridPanel4 + Row = 2 + end> + RowCollection = < + item + Value = 9.839133440683879000 + end + item + Value = 60.212878705737260000 + end + item + Value = 29.947987853578860000 + end> + ShowCaption = False + TabOrder = 0 + object GridPanel2: TGridPanel + Left = 635 + Top = 1 + Width = 905 + Height = 102 + Align = alClient + ColumnCollection = < + item + Value = 45.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 45.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = sgInfo + Row = 0 + end + item + Column = 2 + Control = sgCas + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + ShowCaption = False + TabOrder = 0 + object sgInfo: TStringGrid + Left = 1 + Top = 1 + Width = 406 + Height = 100 + Align = alClient + ColCount = 4 + DefaultColAlignment = taCenter + DefaultRowHeight = 36 + Enabled = False + FixedCols = 0 + RowCount = 2 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goRowSelect, goFixedRowDefAlign] + ParentFont = False + ScrollBars = ssNone + TabOrder = 0 + OnDrawCell = sgInfoDrawCell + end + object sgCas: TStringGrid + Left = 584 + Top = 1 + Width = 320 + Height = 100 + Align = alRight + ColCount = 2 + DefaultColAlignment = taCenter + DefaultRowHeight = 36 + FixedCols = 0 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -27 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goRowSelect, goFixedRowDefAlign] + ParentFont = False + ScrollBars = ssNone + TabOrder = 1 + OnDrawCell = sgCasDrawCell + end + end + object grdStroje: TJvDBGrid + AlignWithMargins = True + Left = 638 + Top = 106 + Width = 899 + Height = 620 + Align = alClient + DataSource = dm.dsStroje + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ParentFont = False + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + OnCellClick = grdStrojeCellClick + OnDrawColumnCell = grdStrojeDrawColumnCell + OnDblClick = grdStrojeDblClick + OnMouseUp = grdStrojeMouseUp + AutoSizeColumns = True + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'fIDStroj' + Visible = False + end + item + Expanded = False + FieldName = 'fStroj' + Title.Alignment = taCenter + Title.Caption = 'Stroj' + Width = 143 + Visible = True + end + item + Expanded = False + FieldName = 'fVyrobek' + Title.Alignment = taCenter + Width = 272 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fAktPaletList' + Title.Alignment = taCenter + Width = 102 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fVyrobenoKA' + Title.Alignment = taCenter + Width = 66 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fZakazka' + Title.Alignment = taCenter + Title.Caption = 'P'#345#237'kaz' + Width = 83 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fCinnost' + Title.Alignment = taCenter + Width = 120 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fCCP1' + Title.Alignment = taCenter + Width = 49 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fVZ' + Title.Alignment = taCenter + Width = 40 + Visible = True + end> + end + object pgCtrlPlan: TPageControl + Left = 1 + Top = 103 + Width = 634 + Height = 626 + ActivePage = shRozpracovanePL + Align = alClient + TabOrder = 2 + object shPlanDnes: TTabSheet + Caption = ' Pl'#225'n v'#253'roby' + OnShow = shPlanDnesShow + object grdPlanDnes: TJvDBGrid + Left = 0 + Top = 0 + Width = 626 + Height = 594 + Align = alClient + DataSource = dm.dsPlanDnes + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ParentFont = False + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + OnCellClick = grdPlanDnesCellClick + OnDrawColumnCell = grdPlanDnesDrawColumnCell + OnDblClick = grdPlanDnesDblClick + OnMouseUp = grdPlanDnesMouseUp + OnTitleClick = grdPlanDnesTitleClick + AutoSizeColumns = True + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'fIDPlan' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fRegCis' + Title.Alignment = taCenter + Title.Caption = 'Ozn.' + Width = 103 + Visible = True + end + item + Expanded = False + FieldName = 'fVyrobek' + Title.Alignment = taCenter + Title.Caption = 'V'#253'robek' + Width = 253 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fHotovo' + Title.Alignment = taCenter + Title.Caption = 'Hotovo' + Width = 74 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fZakazka' + Title.Alignment = taCenter + Title.Caption = 'P'#345#237'kaz' + Width = 74 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fDatPlanZadani' + Title.Alignment = taCenter + Title.Caption = 'Pl'#225'n. zah.' + Width = 101 + Visible = True + end> + end + end + object shPlanZitra: TTabSheet + Caption = ' Pl'#225'n v'#253'roby Z'#205'TRA ' + ImageIndex = 1 + TabVisible = False + object grdPlanZitra: TDBGrid + Left = 0 + Top = 0 + Width = 626 + Height = 594 + Align = alClient + DataSource = dm.dsPlanZitra + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ParentFont = False + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + Columns = < + item + Expanded = False + FieldName = 'fIDPlan' + Visible = False + end + item + Expanded = False + FieldName = 'fVyrobek' + Title.Alignment = taCenter + Title.Caption = 'V'#253'robek' + Width = 200 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fHotovo' + Title.Alignment = taCenter + Title.Caption = 'Hotovo' + Width = 78 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fZakazka' + Title.Alignment = taCenter + Title.Caption = 'Zak'#225'zka' + Width = 225 + Visible = True + end> + end + end + object shRozpracovanePL: TTabSheet + Caption = ' Rozpracovan'#233' PL' + ImageIndex = 2 + OnShow = shRozpracovanePLShow + object GridPanel13: TGridPanel + Left = 0 + Top = 0 + Width = 626 + Height = 594 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel14 + Row = 1 + end + item + Column = 0 + Control = grdRozpracovane + Row = 0 + end + item + Column = 0 + Control = GridPanel15 + Row = 2 + end> + RowCollection = < + item + Value = 86.000000000000000000 + end + item + Value = 9.000000000000000000 + end + item + Value = 5.000000000000000000 + end> + TabOrder = 0 + object GridPanel14: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 513 + Width = 618 + Height = 47 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label10 + Row = 0 + end + item + Column = 1 + Control = Label11 + Row = 0 + end + item + Column = 0 + Control = edtNazevRozpracVyrobku + Row = 1 + end + item + Column = 1 + Control = edtRozpracZakazka + Row = 1 + end> + RowCollection = < + item + Value = 40.000000000000000000 + end + item + Value = 60.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 618 + 47) + object Label10: TLabel + Left = 89 + Top = 1 + Width = 132 + Height = 17 + Anchors = [] + Caption = 'Rozpracovan'#253' v'#253'robek' + ExplicitLeft = 56 + end + object Label11: TLabel + Left = 417 + Top = 1 + Width = 92 + Height = 17 + Anchors = [] + Caption = 'P'#345#237'kaz / zak'#225'zka' + ExplicitLeft = 488 + end + object edtNazevRozpracVyrobku: TEdit + AlignWithMargins = True + Left = 4 + Top = 19 + Width = 302 + Height = 24 + Margins.Top = 0 + Align = alClient + Alignment = taCenter + Color = 15790320 + ReadOnly = True + TabOrder = 0 + ExplicitHeight = 25 + end + object edtRozpracZakazka: TEdit + AlignWithMargins = True + Left = 402 + Top = 19 + Width = 121 + Height = 25 + Margins.Top = 0 + Alignment = taCenter + Anchors = [] + Color = 15790320 + ReadOnly = True + TabOrder = 1 + end + end + object grdRozpracovane: TJvDBGrid + Left = 1 + Top = 1 + Width = 624 + Height = 509 + Align = alClient + Color = 15790320 + DataSource = dm.dsRozpracPL + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ParentFont = False + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + OnCellClick = grdRozpracovaneCellClick + OnDrawColumnCell = grdRozpracovaneDrawColumnCell + OnDblClick = grdRozpracovaneDblClick + AutoSizeColumns = True + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'fIDEvidRozp' + Visible = False + end + item + Expanded = False + FieldName = 'fIDStroj' + Visible = False + end + item + Expanded = False + FieldName = 'fStroj' + Title.Alignment = taCenter + Title.Caption = 'Stroj' + Width = 208 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fCisloZbozi' + Title.Alignment = taCenter + Title.Caption = 'Karta' + Visible = False + end + item + Expanded = False + FieldName = 'fVyrobek' + Title.Alignment = taCenter + Title.Caption = 'V'#253'robek' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fSZ' + Title.Alignment = taCenter + Title.Caption = 'SK' + Width = 38 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fRC' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269'.' + Width = 94 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fAktPaletList' + Title.Alignment = taCenter + Title.Caption = 'PL' + Width = 126 + Visible = True + end + item + Expanded = False + FieldName = 'fDatStart' + Title.Alignment = taCenter + Title.Caption = 'Start' + Width = 122 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fColR' + Title.Alignment = taCenter + Title.Caption = 'R' + Width = 26 + Visible = True + end> + end + object GridPanel15: TGridPanel + Left = 1 + Top = 563 + Width = 624 + Height = 30 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label12 + Row = 0 + end + item + Column = 1 + Control = GridPanel16 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + object Label12: TLabel + AlignWithMargins = True + Left = 172 + Top = 4 + Width = 137 + Height = 25 + Align = alRight + Alignment = taRightJustify + Caption = 'Vy'#345'adit z v'#253'roby paletu:' + Visible = False + ExplicitHeight = 17 + end + object GridPanel16: TGridPanel + Left = 312 + Top = 1 + Width = 311 + Height = 28 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = edtVyraditPaletu + Row = 0 + end + item + Column = 1 + Control = btnVyraditPaletuZVyroby + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 311 + 28) + object edtVyraditPaletu: TEdit + AlignWithMargins = True + Left = 17 + Top = 1 + Width = 121 + Height = 25 + Margins.Top = 0 + Alignment = taCenter + Anchors = [] + Color = 15790320 + ReadOnly = True + TabOrder = 0 + Visible = False + end + object btnVyraditPaletuZVyroby: TButton + AlignWithMargins = True + Left = 155 + Top = 1 + Width = 75 + Height = 25 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 0 + Caption = 'Vy'#345'adit !' + TabOrder = 1 + Visible = False + end + end + end + end + end + end + object GridPanel3: TGridPanel + Left = 1 + Top = 729 + Width = 634 + Height = 311 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnVyrobniDenik + Row = 0 + end + item + Column = 0 + Control = btnObjednavkaMat + Row = 1 + end + item + Column = 0 + Control = btnPolotovar + Row = 2 + end + item + Column = 0 + Control = btnZadaniMimoPlan + Row = 3 + end + item + Column = 1 + Control = btnPrijemNestandard + Row = 2 + RowSpan = 2 + end + item + Column = 1 + Control = ledtVyrobniDen + Row = 0 + end> + RowCollection = < + item + Value = 19.133540686323740000 + end + item + Value = 24.819277108433730000 + end + item + Value = 15.761873891060710000 + end + item + Value = 15.761873891060710000 + end + item + Value = 9.460908698115675000 + end + item + Value = 15.062525725005430000 + end> + ShowCaption = False + TabOrder = 3 + object btnVyrobniDenik: TButton + AlignWithMargins = True + Left = 4 + Top = 6 + Width = 310 + Height = 49 + Margins.Top = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'V'#253'robn'#237' den'#237'k' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 0 + OnClick = btnVyrobniDenikClick + end + object btnObjednavkaMat: TButton + AlignWithMargins = True + Left = 4 + Top = 65 + Width = 310 + Height = 67 + Hint = 'Stavy sklad'#367' materi'#225'l'#367 + Margins.Top = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'Z'#225'soba materi'#225'lu /'#13#10'Objedn'#225'vky materi'#225'lu' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 1 + WordWrap = True + OnClick = btnObjednavkaMatClick + end + object btnPolotovar: TButton + AlignWithMargins = True + Left = 4 + Top = 142 + Width = 310 + Height = 39 + Margins.Top = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'Polotovar / P'#345'edv'#253'roba' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnClick = btnPolotovarClick + end + object btnZadaniMimoPlan: TButton + AlignWithMargins = True + Left = 4 + Top = 191 + Width = 310 + Height = 38 + Hint = 'V'#253'b'#283'r v'#253'robku z Norem mimo pl'#225'n' + Margins.Top = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'Zad'#225'n'#237' v'#253'roby mimo pl'#225'n' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = btnZadaniMimoPlanClick + end + object btnPrijemNestandard: TButton + AlignWithMargins = True + Left = 332 + Top = 142 + Width = 291 + Height = 87 + Hint = 'Z'#225'pis nove vyroben'#233' palety a tisk PL' + Margins.Left = 15 + Margins.Top = 5 + Margins.Right = 10 + Margins.Bottom = 5 + Align = alClient + Caption = 'P'#345#237'jem -'#13#10'Nestandardn'#237' v'#253'robek' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 4 + WordWrap = True + OnClick = btnPrijemNestandardClick + end + object ledtVyrobniDen: TRzDateTimePicker + AlignWithMargins = True + Left = 347 + Top = 16 + Width = 104 + Height = 29 + Margins.Left = 30 + Margins.Top = 15 + Date = 45159.000000000000000000 + Format = '' + Time = 45159.000000000000000000 + Color = 13696710 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + MinDate = 45139.000000000000000000 + ParentFont = False + TabOrder = 5 + OnChange = ledtVyrobniDenChange + ShowToday = True + ShowTodayCircle = True + ShowWeekNumbers = True + end + end + object GridPanel5: TGridPanel + Left = 1540 + Top = 729 + Width = 272 + Height = 311 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnSpravaVzorku + Row = 0 + end + item + Column = 0 + Control = btnMicharna + Row = 1 + end + item + Column = 0 + Control = btnNahledTisky + Row = 2 + end + item + Column = 0 + Control = btnAktualniSarze + Row = 3 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ShowCaption = False + TabOrder = 4 + object btnSpravaVzorku: TButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 262 + Height = 69 + Margins.Right = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'Spr'#225'va vzork'#367 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 0 + OnClick = btnSpravaVzorkuClick + end + object btnMicharna: TButton + AlignWithMargins = True + Left = 4 + Top = 81 + Width = 262 + Height = 70 + Margins.Right = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'M'#237'ch'#225'rna' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 1 + OnClick = btnMicharnaClick + end + object btnNahledTisky: TButton + AlignWithMargins = True + Left = 4 + Top = 159 + Width = 262 + Height = 69 + Margins.Right = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'N'#225'hled / Tisky' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnClick = btnNahledTiskyClick + end + object btnAktualniSarze: TButton + AlignWithMargins = True + Left = 4 + Top = 236 + Width = 262 + Height = 69 + Hint = 'Zobrazen'#237' '#353'ar'#382'e podle vybran'#233'ho dne a sm'#283'ny' + Margins.Right = 5 + Margins.Bottom = 5 + Align = alClient + Caption = 'Aktu'#225'ln'#237' '#353'ar'#382'e' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = btnAktualniSarzeClick + end + end + object GridPanel6: TGridPanel + Left = 1540 + Top = 1 + Width = 272 + Height = 102 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label1 + Row = 0 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ShowCaption = False + TabOrder = 5 + object Label1: TLabel + Left = 1 + Top = 30 + Width = 270 + Height = 21 + Align = alBottom + Alignment = taCenter + Anchors = [] + Caption = 'Pozn'#225'mky k v'#253'robn'#237'mu dni' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + ExplicitWidth = 210 + end + end + object memVyrobniPoznamka: TMemo + AlignWithMargins = True + Left = 1550 + Top = 113 + Width = 252 + Height = 606 + Margins.Left = 10 + Margins.Top = 10 + Margins.Right = 10 + Margins.Bottom = 10 + Align = alClient + TabOrder = 6 + OnExit = memVyrobniPoznamkaExit + end + object GridPanel4: TGridPanel + AlignWithMargins = True + Left = 655 + Top = 734 + Width = 865 + Height = 301 + Margins.Left = 20 + Margins.Top = 5 + Margins.Right = 20 + Margins.Bottom = 5 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel7 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel8 + Row = 1 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel9 + Row = 2 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel10 + Row = 3 + end> + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + RowCollection = < + item + Value = 22.186981661669770000 + end + item + Value = 21.383721539607240000 + end + item + Value = 28.496430623143980000 + end + item + Value = 27.932866175579010000 + end> + ShowCaption = False + TabOrder = 7 + object GridPanel7: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 857 + Height = 60 + Align = alClient + ColumnCollection = < + item + Value = 32.502894206268340000 + end + item + Value = 17.259036823528500000 + end + item + Value = 25.170323403450180000 + end + item + Value = 25.067745566752980000 + end> + ControlCollection = < + item + Column = 0 + Control = edtVybranyStroj + Row = 0 + end + item + Column = 1 + Control = edtMistr + Row = 0 + end + item + Column = 2 + Control = btnKontrolaPeceni + Row = 0 + end + item + Column = 3 + Control = btnNovyVzorek + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + ShowCaption = False + TabOrder = 0 + object edtVybranyStroj: TLabeledEdit + AlignWithMargins = True + Left = 4 + Top = 30 + Width = 265 + Height = 29 + Margins.Right = 10 + Margins.Bottom = 0 + Align = alBottom + Alignment = taCenter + EditLabel.Width = 93 + EditLabel.Height = 21 + EditLabel.Caption = 'Vybran'#253' stroj' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 0 + Text = '' + end + object edtMistr: TLabeledEdit + Left = 279 + Top = 30 + Width = 147 + Height = 29 + Margins.Bottom = 0 + Align = alBottom + Alignment = taCenter + EditLabel.Width = 36 + EditLabel.Height = 21 + EditLabel.Caption = 'Mistr' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + ReadOnly = True + TabOrder = 1 + Text = '' + OnClick = edtMistrClick + end + object btnKontrolaPeceni: TButton + AlignWithMargins = True + Left = 441 + Top = 4 + Width = 186 + Height = 55 + Margins.Left = 15 + Margins.Right = 15 + Margins.Bottom = 0 + Align = alClient + Caption = 'Kontrola pe'#269'en'#237' - CCP 1' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnClick = btnKontrolaPeceniClick + end + object btnNovyVzorek: TButton + AlignWithMargins = True + Left = 662 + Top = 4 + Width = 174 + Height = 52 + Margins.Left = 20 + Margins.Right = 20 + Align = alClient + Caption = 'Nov'#253' vzorek' + TabOrder = 3 + OnClick = btnNovyVzorekClick + end + end + object GridPanel8: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 70 + Width = 857 + Height = 58 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label2 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = edtAktVyrobek + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ShowCaption = False + TabOrder = 1 + DesignSize = ( + 857 + 58) + object Label2: TLabel + Left = 156 + Top = 4 + Width = 117 + Height = 21 + Anchors = [] + Caption = 'Aktu'#225'ln'#237' v'#253'robek' + ExplicitLeft = 400 + ExplicitTop = 3 + end + object edtAktVyrobek: TEdit + Left = 1 + Top = 29 + Width = 855 + Height = 28 + TabStop = False + Align = alClient + AutoSize = False + ReadOnly = True + TabOrder = 0 + end + end + object GridPanel9: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 131 + Width = 857 + Height = 82 + Margins.Top = 0 + Align = alClient + ColumnCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnZahajeniVyrobyPalety + Row = 0 + end + item + Column = 3 + Control = btnUkonceniVyrobyPalety + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + ShowCaption = False + TabOrder = 2 + object btnZahajeniVyrobyPalety: TButton + AlignWithMargins = True + Left = 4 + Top = 1 + Width = 208 + Height = 77 + Margins.Top = 0 + Align = alClient + Caption = 'Zah'#225'jen'#237' v'#253'roby palety'#13#10' Tisk KA '#353't'#237'tk'#367 + TabOrder = 0 + OnClick = btnZahajeniVyrobyPaletyClick + end + object btnUkonceniVyrobyPalety: TButton + AlignWithMargins = True + Left = 645 + Top = 1 + Width = 208 + Height = 77 + Margins.Top = 0 + Align = alClient + Caption = 'Ukon'#269'en'#237' v'#253'roby palety'#13#10' Tisk PL' + TabOrder = 1 + OnClick = btnUkonceniVyrobyPaletyClick + end + end + object GridPanel10: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 219 + Width = 857 + Height = 78 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel11 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + ShowCaption = False + TabOrder = 3 + object GridPanel11: TGridPanel + Left = 1 + Top = 1 + Width = 855 + Height = 76 + Align = alClient + ColumnCollection = < + item + Value = 39.936102236421720000 + end + item + Value = 39.936102236421720000 + end + item + Value = 20.127795527156560000 + end> + ControlCollection = < + item + Column = 0 + Control = Label3 + Row = 0 + end + item + Column = 1 + Control = Label4 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel12 + Row = 1 + RowSpan = 2 + end + item + Column = 2 + Control = btnOdpadOprava + Row = 0 + RowSpan = 3 + end> + RowCollection = < + item + Value = 29.166860144418410000 + end + item + Value = 31.111317487379640000 + end + item + Value = 39.721822368201950000 + end> + TabOrder = 0 + DesignSize = ( + 855 + 76) + object Label3: TLabel + Left = 145 + Top = 1 + Width = 52 + Height = 21 + Anchors = [] + Caption = 'ODPAD' + ExplicitLeft = 207 + end + object Label4: TLabel + Left = 428 + Top = 1 + Width = 168 + Height = 21 + Anchors = [] + Caption = 'Celkem za sm'#283'na a stroj' + ExplicitLeft = 598 + end + object GridPanel12: TGridPanel + Left = 1 + Top = 23 + Width = 681 + Height = 52 + Align = alClient + ColumnCollection = < + item + Value = 26.940100590979010000 + end + item + Value = 8.034595154060268000 + end + item + Value = 8.183249348806479000 + end + item + Value = 51.593367729635760000 + end + item + Value = 5.248687176518490000 + end> + ControlCollection = < + item + Column = 0 + Control = Label5 + Row = 0 + end + item + Column = 1 + Control = Label6 + Row = 0 + end + item + Column = 2 + Control = Label7 + Row = 0 + end + item + Column = 3 + Control = Label8 + Row = 0 + end + item + Column = 4 + Control = Label9 + Row = 0 + end + item + Column = 0 + Control = edtOdpadStroj + Row = 1 + end + item + Column = 1 + Control = edtOdpadMokry + Row = 1 + end + item + Column = 2 + Control = edtOdpadSuchy + Row = 1 + end + item + Column = 3 + Control = edtOdpadPoznamka + Row = 1 + end + item + Column = 4 + Control = edtOdpadSmena + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 681 + 52) + object Label5: TLabel + Left = 76 + Top = 3 + Width = 32 + Height = 21 + Anchors = [] + Caption = 'Stroj' + ExplicitLeft = 59 + end + object Label6: TLabel + Left = 188 + Top = 3 + Width = 45 + Height = 21 + Anchors = [] + Caption = 'Mokr'#253 + ExplicitLeft = 199 + end + object Label7: TLabel + Left = 245 + Top = 3 + Width = 42 + Height = 21 + Anchors = [] + Caption = 'Such'#253 + ExplicitLeft = 345 + end + object Label8: TLabel + Left = 433 + Top = 3 + Width = 71 + Height = 21 + Anchors = [] + Caption = 'Pozn'#225'mka' + ExplicitLeft = 475 + end + object Label9: TLabel + Left = 649 + Top = 3 + Width = 26 + Height = 21 + Anchors = [] + Caption = 'Sm.' + ExplicitLeft = 670 + end + object edtOdpadStroj: TEdit + Left = 1 + Top = 26 + Width = 183 + Height = 25 + Align = alClient + Alignment = taCenter + Color = 15790320 + ReadOnly = True + TabOrder = 0 + ExplicitHeight = 29 + end + object edtOdpadMokry: TNumberBox + Left = 184 + Top = 26 + Width = 54 + Height = 25 + Align = alClient + Alignment = taRightJustify + Mode = nbmFloat + TabOrder = 1 + OnExit = edtOdpadMokryExit + ExplicitHeight = 29 + end + object edtOdpadSuchy: TNumberBox + Left = 238 + Top = 26 + Width = 56 + Height = 25 + Align = alClient + Alignment = taRightJustify + Mode = nbmFloat + TabOrder = 2 + OnExit = edtOdpadSuchyExit + ExplicitHeight = 29 + end + object edtOdpadPoznamka: TEdit + AlignWithMargins = True + Left = 297 + Top = 26 + Width = 344 + Height = 25 + Margins.Top = 0 + Margins.Bottom = 0 + Align = alClient + Alignment = taCenter + TabOrder = 3 + OnExit = edtOdpadPoznamkaExit + ExplicitHeight = 29 + end + object edtOdpadSmena: TEdit + Left = 644 + Top = 26 + Width = 36 + Height = 25 + Align = alClient + Alignment = taCenter + Color = 15790320 + ReadOnly = True + TabOrder = 4 + ExplicitHeight = 29 + end + end + object btnOdpadOprava: TButton + Left = 703 + Top = 12 + Width = 130 + Height = 51 + Anchors = [] + Caption = 'Oprava' + TabOrder = 1 + OnClick = btnOdpadOpravaClick + end + end + end + end + end + object infoTimer: TTimer + Interval = 999 + OnTimer = infoTimerTimer + Left = 623 + Top = 23 + end + object timerPrehled: TTimer + Interval = 20000 + OnTimer = timerPrehledTimer + Left = 864 + Top = 21 + end +end diff --git a/frmPekarna.pas b/frmPekarna.pas new file mode 100644 index 0000000..a944717 --- /dev/null +++ b/frmPekarna.pas @@ -0,0 +1,1655 @@ +unit frmPekarna; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, MemDS, + Vcl.ComCtrls, Vcl.ControlList, Vcl.StdCtrls, Vcl.Mask, + ddPlugin_TLB, RzDTP, Vcl.NumberBox, JvExDBGrids, JvDBGrid; + +const + CRLF = #13#10; + tblVyrPozn = '[dbo].[_TabVyroba_PoznamkyVyrobnihoDne]'; + tblCCP1 = '[dbo].[_TabVyroba_KontrolyCCP1]'; // kriticky kontrolni bod + tblVzorky = '[dbo].[_TabVyroba_Vzorky]'; + tblVzorkyArchiv = '[dbo].[_TabVyroba_VzorkyArchiv]'; + tblOdpadPek = '[dbo].[_TabVyroba_OdpadPekarna]'; + tblCinnostStr = '[dbo].[_TabVyroba_StrojCinnost]'; + tblObjednavky = '[dbo].[_TabVyroba_Objednavky]'; + tblObjednavkyPol = '[dbo].[_TabVyroba_Objednavky_Pol]'; + stredPekarna = 211; + skladMat = 311; + skladMouka = 211; + +type + TformPekarna = class(TForm) + GridPanel1: TGridPanel; + grdPlanDnes: TJvDBGrid; + GridPanel2: TGridPanel; + sgInfo: TStringGrid; + infoTimer: TTimer; + sgCas: TStringGrid; + grdStroje: TJvDBGrid; + Label1: TLabel; + pgCtrlPlan: TPageControl; + shPlanDnes: TTabSheet; + GridPanel3: TGridPanel; + btnVyrobniDenik: TButton; + btnObjednavkaMat: TButton; + btnPolotovar: TButton; + btnZadaniMimoPlan: TButton; + btnPrijemNestandard: TButton; + ledtVyrobniDen: TRzDateTimePicker; + shPlanZitra: TTabSheet; + GridPanel5: TGridPanel; + btnSpravaVzorku: TButton; + btnMicharna: TButton; + btnNahledTisky: TButton; + btnAktualniSarze: TButton; + shRozpracovanePL: TTabSheet; + grdPlanZitra: TDBGrid; + GridPanel6: TGridPanel; + memVyrobniPoznamka: TMemo; + GridPanel4: TGridPanel; + GridPanel7: TGridPanel; + GridPanel8: TGridPanel; + GridPanel9: TGridPanel; + GridPanel10: TGridPanel; + edtVybranyStroj: TLabeledEdit; + edtMistr: TLabeledEdit; + btnKontrolaPeceni: TButton; + btnNovyVzorek: TButton; + btnZahajeniVyrobyPalety: TButton; + Label2: TLabel; + edtAktVyrobek: TEdit; + btnUkonceniVyrobyPalety: TButton; + GridPanel11: TGridPanel; + Label3: TLabel; + Label4: TLabel; + GridPanel12: TGridPanel; + btnOdpadOprava: TButton; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + edtOdpadStroj: TEdit; + edtOdpadMokry: TNumberBox; + edtOdpadSuchy: TNumberBox; + edtOdpadPoznamka: TEdit; + edtOdpadSmena: TEdit; + GridPanel13: TGridPanel; + GridPanel14: TGridPanel; + Label10: TLabel; + Label11: TLabel; + timerPrehled: TTimer; + grdRozpracovane: TJvDBGrid; + GridPanel15: TGridPanel; + Label12: TLabel; + GridPanel16: TGridPanel; + edtVyraditPaletu: TEdit; + btnVyraditPaletuZVyroby: TButton; + edtNazevRozpracVyrobku: TEdit; + edtRozpracZakazka: TEdit; + procedure FormResize(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure infoTimerTimer(Sender: TObject); + procedure sgInfoDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgCasDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure btnPrijemNestandardClick(Sender: TObject); + procedure grdStrojeCellClick(Column: TColumn); + procedure memVyrobniPoznamkaExit(Sender: TObject); + procedure ledtVyrobniDenChange(Sender: TObject); + procedure edtMistrClick(Sender: TObject); + procedure btnKontrolaPeceniClick(Sender: TObject); + procedure btnSpravaVzorkuClick(Sender: TObject); + procedure btnNovyVzorekClick(Sender: TObject); + procedure btnZahajeniVyrobyPaletyClick(Sender: TObject); + procedure btnVyrobniDenikClick(Sender: TObject); + procedure grdStrojeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure btnZadaniMimoPlanClick(Sender: TObject); + procedure btnAktualniSarzeClick(Sender: TObject); + procedure btnNahledTiskyClick(Sender: TObject); + procedure grdStrojeDblClick(Sender: TObject); + procedure btnObjednavkaMatClick(Sender: TObject); + procedure timerPrehledTimer(Sender: TObject); + procedure edtOdpadMokryExit (Sender: TObject); + procedure edtOdpadSuchyExit (Sender: TObject); + procedure edtOdpadPoznamkaExit (Sender: TObject); + procedure shRozpracovanePLShow (Sender: TObject); + procedure shPlanDnesShow (Sender: TObject); + procedure FormCreate (Sender: TObject); + procedure grdPlanDnesTitleClick (Column: TColumn); + procedure btnPolotovarClick (Sender: TObject); + procedure btnUkonceniVyrobyPaletyClick (Sender: TObject); + procedure grdPlanDnesDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure grdStrojeDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure grdRozpracovaneDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure btnOdpadOpravaClick (Sender: TObject); + procedure grdRozpracovaneDblClick (Sender: TObject); + procedure btnMicharnaClick (Sender: TObject); + procedure grdRozpracovaneCellClick (Column: TColumn); + procedure grdPlanDnesCellClick (Column: TColumn); + procedure grdPlanDnesMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure grdPlanDnesDblClick (Sender: TObject); + private + procedure NactiPoznamkyVyrobnihoDne; + public + Helios: IHelios; + apiMod: boolean; + apiServer: string; + runTimerRozprac: boolean; + end; + + +implementation +uses System.DateUtils, System.StrUtils, + datMod, helUtils, helTabsBIDs, + frmPrijemNestandard, frmKontrolaCCP1, frmTiskKAStitku, frmZahajeniPalety, frmUkonceniPalety, frmAktSarze, + frmTiskyNahledy, frmPLZakazky, frmVyrobniDenik, frmPredvyroba, frmVyrobaMimoPlan,// frmZahajeniVyrobyPalety, + frmVyberCinnostiStroje, frmZasobaObjednavky, frmOdpady, frmPrehledMicharna, frmSpravaVzorku; + +var + formPekarna: TformPekarna; + initOK: Boolean; + oVar1, oVar2: OleVariant; + url: string; + arrStroje: TArray; + arrGrdStrojeWidths: TArray; + + clickQry: TStringList; + lastClick, lastClick2: string; + + grdStrojeAktRow, grdStrojeAktCol: integer; + prikazPrerusit: boolean; + + aktIdStr, aktIdKmen, aktIdPlan, idPrikazPlanDnes, idPrikazRozprac, idPoznamkaVyrbnihoDne: integer; + aRowStroj, aColStroj: integer; + aRowPlanDnes, aColPlanDnes: integer; + + usrId, cisZamMistr, idZamMistr: integer; + +// TitleOffset: Byte; + Pt: TPoint; + Cell: TGridCoord; +// Column: TColumn; + + +{$R *.dfm} + + + function GetDBGridIndexByFieldName (aGrd: TDBGrid; aFld: string): integer; + var i: integer; + begin + result:= -1; + for i:=0 to aGrd.Columns.Count-1 do + if (aGrd.Columns.Items[i].FieldName=aFld) then + result:= i; + end; + + + + procedure InsertClickQuery (compName: string); + begin + if (clickQry.Count>0) then + begin + if (clickQry.Strings[clickQry.Count-1]<>compName) then + begin + if (clickQry.Count>1) then + lastClick2:= clickQry.Strings[clickQry.Count-2] + else + lastClick2:= lastClick; + if (clickQry.Count>2) then + clickQry.Delete(0); + clickQry.Add(compName); + lastClick:= clickQry.Strings[clickQry.Count-1]; + end + else + lastClick:= compName; + end + else + begin + clickQry.Add(compName); + lastClick:= compName; + end; + end; + + + + procedure TformPekarna.btnAktualniSarzeClick (Sender: TObject); + var f: TformAktSarze; + begin + +// click query + InsertClickQuery ('btnAktualniSarze'); + + f:= TformAktSarze.Create(nil); + try + f.Helios:= Helios; + f.idKmen:= datMod.aktIdKmen; + f.vyrDen:= ledtVyrobniDen.DateTime; + f.smena:= sgInfo.Cells[3, 1].ToInteger; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformPekarna.btnKontrolaPeceniClick (Sender: TObject); + var f: TformKontrolaCCP1; + d: TDateTime; + begin + +// click query + InsertClickQuery ('btnKontrolaPeceni'); + + + if (edtMistr.Text='') then + begin + Helios.Error(#1'Nejdřív vyberte mistra'#1); + if (edtMistr.CanFocus) then + edtMistr.SetFocus; + end + else + begin + f:= TformKontrolaCCP1.Create (nil); + try + f.vyrobniDen:= ledtVyrobniDen.DateTime; + f.Helios:= Helios; + dm.NactiCCP1 (f); + f.ShowModal; + finally + f.Free; + end; + end; + end; + + + + + procedure TformPekarna.btnMicharnaClick (Sender: TObject); + var f: TformPrehledMicharna; + begin + +// click query + InsertClickQuery ('btnMicharna'); + + + + f:= TFormPrehledMicharna.Create(nil); + try + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformPekarna.btnNahledTiskyClick (Sender: TObject); + var f: TformTiskyNahledy; + begin + +// click query + InsertClickQuery ('btnNahledTisky'); + + + f:= TformTiskyNahledy.Create (nil); + try + f.idKmen:= datMod.aktIdKmen; + f.Helios:= Helios; + f.HeliosHandle:= Application.Handle; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformPekarna.btnNovyVzorekClick (Sender: TObject); + var lSQL, podm: string; + aktArchiv, lastArchiv: string; + i, idArchiv, idVzorek, bid, idF: integer; + begin + +// click query + InsertClickQuery ('btnNovyVzorek'); + + + + if (edtVybranyStroj.Text='') then + begin + Helios.Error(#1'Nejprve vyberte stroj.'#1); + Exit; + end; + + if (aktIdKmen=0) then + begin + Helios.Error(#1'Na vybraném stroji neprobíhá výroba.'#1); + Exit; + end; + + i:= 0; + idArchiv:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblVzorkyArchiv + ' WHERE DatUkonceni IS NULL ORDER BY DatPorizeni'); + if (idArchiv=0) then + begin + lastArchiv:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) Archiv FROM ' + tblVzorkyArchiv + ' WHERE DatUkonceni IS NOT NULL ORDER BY DatUkonceni DESC'); + if (lastArchiv='') then + i:= 1 + else + i:= StrToInt(RightStr(lastArchiv, 4)) + 1; + aktArchiv:= YearOf(Now).ToString + 'PE' + StringOfChar('0', 4-Length(i.ToString)) + i.ToString; + lSQL:= 'INSERT ' + tblVzorkyArchiv + ' (Archiv) SELECT N' + aktArchiv.QuotedString + CRLF + 'SELECT SCOPE_IDENTITY() AS newid'; + try + with Helios.OpenSQL(lSQL) do + idArchiv:= VarToStr(FieldByNameValues('newid')).ToInteger; + except + idArchiv:= 0; + end; + end; + + if (idArchiv>0) then + begin + lSQL:= 'INSERT ' + tblVzorky + ' (IDArchiv, IDStroj, IDKmenZbozi, CisloZamMistr) SELECT ' + idArchiv.ToString + ', ' + aktIdStr.ToString + ', ' + aktIdKmen.ToString + ', ' + cisZamMistr.ToString; + lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; + try + idVzorek:= helUtils.getHeliosIntVal(Helios, 0, lSQL); + Helios.Info(#1'Nový vzorek zapsán.'#1); + + bid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Vzorky'''); + idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-4'''); + if (bid>100000) and (idF>0) then + begin + podm:= 'hvw_Vyroba_Vzorky.ID=' + idVzorek.ToString; + Helios.PrintForm3 (bid, idF, podm); + end; + + except on E:Exception do + Helios.Info(#1'Chyba zápisu vzorku: '#1 + E.Message); + end; + end; + + end; + + + + + procedure TformPekarna.btnObjednavkaMatClick (Sender: TObject); + var podm: string; + f: TformZasobaObjednavky; + begin + +// click query + InsertClickQuery ('btnObjednavkaMat'); + +{ + podm:= 'TabPohybyZbozi.ID IN (SELECT p.ID FROM ' + tblPZ + ' p INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad) WHERE d.IDSklad=N' + skladMat.ToString.QuotedString + ' AND d.DruhPohybuZbo=4'; + podm:= podm + ' AND d.PoradoveCislo>0 AND d.RadaDokladu=N''231'' AND d.Realizovano=0)'; + Helios.OpenBrowse(bidPZ, podm); +} + helUtils.waitStart(nil, 'Načítají se data...', 1, 255); + f:= TformZasobaObjednavky.Create(nil); + try + f.Helios:= Helios; + f.vyrobniDen:= ledtVyrobniDen.DateTime; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformPekarna.btnPolotovarClick (Sender: TObject); + var podm, oldSkl: string; + f: TformPredvyroba; + begin + +// click query + InsertClickQuery ('btnPolotovar'); + + + f:= TformPredvyroba.Create(nil); + try + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; +{ + oldSkl:= Helios.Sklad; + Helios.SetSklad('211'); + podm:= 'TabStavSkladu.IDSklad=N''211'' AND TabStavSkladu.IDKmenZbozi IN (SELECT ID FROM ' + tblKZ + ' WHERE Nazev1 LIKE N''%polotovar%'')'; + Helios.OpenBrowse2(bidSS, podm, 609); + Helios.SetSklad(oldSkl); +} + end; + + + + + procedure TformPekarna.btnPrijemNestandardClick (Sender: TObject); + var f: TformPrijemNestandard; + begin + +// click query + InsertClickQuery ('btnPrijemNestandard'); + + + f:= TformPrijemNestandard.Create(nil); + try + f.aktIdStroj:= aktIdStr; + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformPekarna.btnSpravaVzorkuClick (Sender: TObject); + var f: TformSpravaVzorku; + begin + +// click query + InsertClickQuery ('btnSpravaVzorku'); + + + f:= TformSpravaVzorku.Create(nil); + try + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + procedure TformPekarna.btnUkonceniVyrobyPaletyClick (Sender: TObject); + var f: TformUkonceniPalety; + begin + +// click query + InsertClickQuery ('btnUkonceniVyrobyPalety'); + + + f:= TformUkonceniPalety.Create(nil); + try + f.Helios:= Helios; + f.prerusit:= prikazPrerusit; + f.denSmena:= ledtVyrobniDen.DateTime.Format('ddmmyyyy') + '/' + sgInfo.Cells[3, 1].Trim; + + f.paleta:= dm.vtStroje.FieldByName('fAktPaletList').AsString; + f.sarze:= dm.vtStroje.FieldByName('fSarze').AsString; + f.idStroj:= dm.vtStroje.FieldByName('fIDStroj').AsInteger; + f.idEvEOp:= dm.vtStroje.FieldByName('fIDEvidRozpOper').AsInteger; + f.idVPr:= dm.vtStroje.FieldByName('fIDPrikaz').AsInteger; + f.ShowModal; + finally + f.Free; + end; + dm.NactiStrojeAPraci (self); + end; + + + + + + procedure TformPekarna.btnVyrobniDenikClick (Sender: TObject); + var f: TformVyrobniDenik; + begin + +// click query + InsertClickQuery ('btnVyrobniDenik'); + + + f:= TformVyrobniDenik.Create(nil); + try + f.den:= ledtVyrobniDen.DateTime; + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + + procedure TformPekarna.btnZadaniMimoPlanClick (Sender: TObject); + var f: TformVyrobaMimoPlan; + begin + +// click query + InsertClickQuery ('btnZadaniMimoPlan'); + + + if (edtMistr.Text='') then + begin + Helios.Error(#1'Není vybrán Mistr, nelze pokračovat.'#1); + Exit; + end; + + datMod.bmIdStroj:= datMod.aktIdStroj; + f:= TformVyrobaMimoPlan.Create (nil); + try + helUtils.waitStart(nil, 'Načítají se data...'); + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + helUtils.waitEnd; + + dm.NactiStrojeAPraci (self); + if (datMod.bmIdStroj>0) then + dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey]); + + dm.NactiPlanStroje (self, datMod.bmIdStroj); + end; + + + + + procedure TformPekarna.btnZahajeniVyrobyPaletyClick (Sender: TObject); + var //f: TformZahajeniVyrobyPalety; + f2: TformZahajeniPalety; + idVPr, pocetPal, d: integer; + lSQL, v, c, msg, a, varJeText: string; + rc, nazev1, strojNazev: string; + startNew, startRozprac: boolean; + vyrTyp: byte; + begin + vyrTyp:= 0; + +// "kontrola rozpracovane vyroby" +// "Na stroji xxx je ve výrobě x palet(-a) číslo abc. Pokud na ni chcete pracovat, zadejte z Rozpracovanosti. Pokračovat v zadání nové palety ?" + + startNew:= (lastClick='grdPlanDnes') and (lastClick2='grdStroje'); + startRozprac:= (lastClick='grdRozpracovane') and (lastClick2='grdStroje'); + +// click query + InsertClickQuery ('grdZahajeniVyrobyPalety'); + + + c:= grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString; + if (c<>'Výroba') then + btnZahajeniVyrobyPalety.Enabled:= true; + +{ + v:= grdStroje.DataSource.DataSet.FieldByName('fVyrobek').AsString; + if (v='') then + Exit; +} + + if (edtMistr.Text='') then + begin + Helios.Error(#1'Není vybrán Mistr, nelze pokračovat.'#1); + Exit; + end; + + + datMod.bmIdStroj:= datMod.aktIdStroj; + + idVPr:= 0; + aktIdKmen:= 0; + if (grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsString<>'') then + idVPr:= grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsInteger; + + + if (idVPr>0) and (c='Výroba') then + begin + pocetPal:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT COUNT(ID) FROM ' + tblPalety + ' WHERE IDPrikaz=' + idVPr.ToString); + varJeText:= 'je'; + if (pocetPal>1) then + varJeText:= 'jsou'; + + msg:= #1'Na stroji ' + grdStroje.DataSource.DataSet.FieldByName('fStroj').AsString + ' je ve výrobě paleta číslo '#1; + msg:= msg + grdStroje.DataSource.DataSet.FieldByName('fAktPaletList').AsString + IfThen(pocetPal>1, ' a další ' + (pocetPal-1).ToString + ' následující', '') + CRLF; + + if (pgCtrlPlan.ActivePage=shPlanDnes) then + begin + if (datMod.bmIdPlanDnes>0) and (startNew) then + begin + msg:= msg + 'Chcete její výrobu přerušit s evidencí vyrobených kartonů' + CRLF +' a začít vyrábět ' + #1 + grdPlanDnes.DataSource.DataSet.FieldByName('fRegCis').AsString; + msg:= msg + ' ' + grdPlanDnes.DataSource.DataSet.FieldByName('fVyrobek').AsString + #1 + ' ?'; + if (Helios.YesNo(msg, false)) then + begin + Helios.Info('Výroba palety '#1 + grdStroje.DataSource.DataSet.FieldByName('fAktPaletList').AsString + #1' bude přerušena.' + CRLF + 'Při přerušení zadejte počet vyrobených kartonů'); + prikazPrerusit:= true; + btnUkonceniVyrobyPaletyClick (Sender); + prikazPrerusit:= false; + msg:= ''; + end + else + Exit; + end + else + if (msg<>'') then + begin + Helios.Error(msg); + msg:= ''; + edtAktVyrobek.Text:= ''; + idVPr:= 0; + Exit; + end; + + vyrTyp:= 1; + end + else + begin + msg:= msg + 'Pokud na ni chcete pracovat, zadejte z Rozpracovanosti.' + CRLF + 'Pokračovat v zadání nové palety ?'#1; + if not(Helios.YesNo(msg, false)) then + Exit; + end; + end; + + if (idVPr=0) and (c<>'Výroba') and (vyrTyp=0) then + begin + vyrTyp:= 1; + end; + + + + if (vyrTyp=1) and (pgCtrlPlan.ActivePage=shPlanDnes) and (datMod.bmIdPlanDnes>0) then + idVPr:= datMod.bmIdPlanDnes; +// if (grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsString<>'') then +// idVPr:= grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsInteger; + + + if (idVPr>0) then + aktIdKmen:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString); + + d:= 0; + a:= ''; + lSQL:= 'SELECT TOP(1) pp.Doklad, pp.Alt FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju + ' s ON (s.IDPrac=p.ID)'; + lSQL:= lSQL + ' WHERE pp.dilec=' + aktIdKmen.ToString + ' AND pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=' + idVPr.ToString + ' AND s.ID=' + datMod.bmIdStroj.ToString; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + d:= VarToStr(FieldByNameValues('Doklad')).ToInteger; + a:= VarToStr(FieldByNameValues('Alt')); + end; + + +{ + if (d=0) then + begin + strojNazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + datMod.bmIdStroj.ToString); + with Helios.OpenSQL('SELECT k.RegCis, k.Nazev1 FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IdTabKmen) WHERE p.ID=' + idVPr.ToString) do + begin + rc:= VarToStr(FieldByNameValues('RegCis')); + nazev1:= VarToStr(FieldByNameValues('Nazev1')); + end; + Helios.Error('Výroba ' + #1 + nazev1 + ' není určena pro stroj ' + strojNazev + #1); + idVPr:= 0; + end; +} + + + + if (idVPr>0) then + begin + f2:= TformZahajeniPalety.Create(nil); + try + f2.Helios:= Helios; + f2.opakTisky:= false; + f2.f:= self; + f2.idPrikaz:= idVPr; + f2.idStroj:= datMod.bmIdStroj; + f2.ShowModal; + finally + f2.Free; + end; + end; + + + +{ + helUtils.waitStart(nil, 'Načítají se data příkazů...'); + + f:= TformZahajeniVyrobyPalety.Create(nil); + try + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; +} + + dm.NactiStrojeAPraci (self); + if (datMod.bmIdStroj>0) then + begin + dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey]); + dm.NactiPlanStroje (self, datMod.bmIdStroj); + end; + if (datMod.bmIdPlanDnes>0) then + dm.vtPlanDnes.Locate('fIDPlan', VarArrayOf([datMod.bmIdPlanDnes]), [loPartialKey]); + + end; + + + + + + procedure TformPekarna.btnOdpadOpravaClick (Sender: TObject); + var f: TformOdpady; + begin + +// click query + InsertClickQuery ('btnOdpadOprava'); + + + f:= TformOdpady.Create(nil); + try + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + + procedure TformPekarna.edtMistrClick (Sender: TObject); + var podm: string; + begin + +// click query + InsertClickQuery ('edtMistr'); + + + podm:= ''; + if (Helios.Prenos(bidCisZam, 'TabCisZam.Cislo', oVar1, podm, 'Vyberte MISTRA', true)) then + begin + cisZamMistr:= VarToStr(oVar1).ToInteger; + datMod.cisZamMistr:= cisZamMistr; + idZamMistr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblCisZam + ' WHERE Cislo=' + cisZamMistr.ToString); + datMod.idZamMistr:= idZamMistr; + edtMistr.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PrijmeniJmeno FROM ' + tblCisZam + ' WHERE Cislo=' + cisZamMistr.ToString); + end; + end; + + + + + + procedure TformPekarna.edtOdpadMokryExit (Sender: TObject); + var lSQL: string; + begin + if (edtOdpadMokry.Modified) or (edtOdpadSuchy.Modified) or (edtOdpadPoznamka.Modified) then + begin + lSQL:= 'DECLARE @d DATETIME=GETDATE(), @s TINYINT' + CRLF + 'SELECT @d=Datum, @s=Smena FROM dbo.ef_GetDatumASmenu(@d)' + CRLF; + lSQL:= lSQL + 'IF NOT EXISTS (SELECT 1 FROM ' + tblOdpadPek + ' WHERE IDStroje=' + aktIdStr.ToString + ' AND Smena=' + edtOdpadSmena.Text + ' AND Datum=@d)' + CRLF; + lSQL:= lSQL + ' INSERT ' + tblOdpadPek + ' (IDStroje, Smena, Datum) SELECT ' + aktIdStr.ToString + ', ' + edtOdpadSmena.Text + ', @d' + CRLF; + lSQL:= lSQL + 'UPDATE ' + tblOdpadPek + ' SET OdpadMokry=' + edtOdpadMokry.Value.ToString.Replace(',', '.') + ', OdpadSuchy=' + edtOdpadSuchy.Value.ToString.Replace(',', '.'); + lSQL:= lSQL + ', Poznamka=N' + edtOdpadPoznamka.Text.Trim.QuotedString + ' WHERE IDStroje=' + aktIdStr.ToString + ' AND Smena=' + edtOdpadSmena.Text + ' AND Datum=@d'; + Helios.ExecSQL(lSQL); + end; + end; + + + + + + procedure TformPekarna.edtOdpadPoznamkaExit (Sender: TObject); + begin + edtOdpadMokryExit(Sender); + end; + + + + + procedure TformPekarna.edtOdpadSuchyExit (Sender: TObject); + begin + edtOdpadMokryExit(Sender); + end; + + + + +procedure TformPekarna.FormClose (Sender: TObject; var Action: TCloseAction); + begin + memVyrobniPoznamkaExit (Sender); + + + if (Assigned(datMod.dm)) then + begin + if (dm.vtPlanDnes.Active) then + dm.vtPlanDnes.Close; + + if (dm.vtPlanZitra.Active) then + dm.vtPlanZitra.Close; + + if (dm.vtStroje.Active) then + dm.vtStroje.Close; + + if (dm.vtRozpracPL.Active) then + dm.vtRozpracPL.Close; + + if (dm.vtVyrobniPozn.Active) then + dm.vtVyrobniPozn.Close; + + clickQry.Free; + + FreeAndNil (datMod.dm); + end; + end; + + + + + procedure TformPekarna.FormCreate (Sender: TObject); + begin + initOK:= false; + clickQry:= TStringList.Create; + end; + + + + + procedure TformPekarna.FormResize (Sender: TObject); + var i: integer; + begin + sgInfo.ColWidths[0]:= Trunc(0.2 * sgInfo.Width); + sgInfo.ColWidths[1]:= Trunc(0.2 * sgInfo.Width); + sgInfo.ColWidths[2]:= Trunc(0.37 * sgInfo.Width); + sgInfo.ColWidths[3]:= Trunc(0.23 * sgInfo.Width); + + sgCas.ColWidths[0]:= Trunc(0.5 * sgCas.Width); + sgCas.ColWidths[1]:= Trunc(0.5 * sgCas.Width); + + + +// prizpusobeni sirky sloupcu gridu stroju +{ + grdStroje.Left:= 20; + grdStroje.Top:= 10; + grdStroje.Width:= grdStroje.Parent.Width - grdStroje.Left; + grdStroje.Options:= grdStroje.Options + [dgColumnResize]; + for i:=0 to Length(arrGrdStrojeWidths)-1 do + grdStroje.Columns[i].Width:= Trunc(arrGrdStrojeWidths[i] * grdStroje.Width); + grdStroje.Options:= grdStroje.Options - [dgColumnResize]; + grdStroje.Invalidate; +} + end; + + + + + + procedure TformPekarna.NactiPoznamkyVyrobnihoDne; + var lSQL: string; + begin + idPoznamkaVyrbnihoDne:= 0; + + datMod.vyrobniDen:= ledtVyrobniDen.DateTime; + + Label1.Caption:= 'Poznámky k výrobnímu dni' + CRLF + DateToStr(ledtVyrobniDen.Date); + memVyrobniPoznamka.Text:= ''; + + lSQL:= 'SELECT TOP(1) ID FROM ' + tblVyrPozn + ' WHERE VyrobniDen_X=CONVERT(datetime,CONVERT(int,CONVERT(float,CONVERT(datetime,N' + DateTimeToStr(ledtVyrobniDen.DateTime).QuotedString + ',104))))'; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + idPoznamkaVyrbnihoDne:= VarToStr(FieldByNameValues('ID')).ToInteger; + memVyrobniPoznamka.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Poznamka FROM ' + tblVyrPozn + ' WHERE ID=' + idPoznamkaVyrbnihoDne.ToString); + end; + end; + + + { + procedure TformPekarna.NactiPlanStroje; + var lSQL: string; + begin + dm.vtPlanDnes.EmptyDataSet; + if (aktIdStr>0) or (1=1) then + begin +{ + lSQL:= 'DECLARE @t1 DATETIME, @t2 DATETIME' + CRLF + 'DROP TABLE IF EXISTS #planDnes' + CRLF; + lSQL:= lSQL + 'CREATE TABLE #planDnes (ID INT IDENTITY(1,1) NOT NULL, startdatetime DATETIME, enddatetime DATETIME, TrvaniMin TINYINT, CisloZakazky NVARCHAR(30), Prikaz NVARCHAR(20)'; + lSQL:= lSQL + ', IDPrikaz INT, CisloZbozi NVARCHAR(33), Nazev1 NVARCHAR(100), PRIMARY KEY (ID))' + CRLF; + + lSQL:= lSQL + 'DROP TABLE IF EXISTS #planPrikazyDnes' + CRLF + 'CREATE TABLE #planPrikazyDnes (ID INT NOT NULL)' + CRLF; + lSQl:= lSQL + 'INSERT #planPrikazyDnes (ID) SELECT DISTINCT(pp.IDPrikaz) FROM ' + tblPrPost + ' pp WHERE pp.IdOdchylkyDo IS NULL AND pp.IDStroje=' + aktIdStr.ToString + ' GROUP BY pp.IDPrikaz' + CRLF; + + lSQL:= lSQL + 'DECLARE @idVPr INT' + CRLF + 'DECLARE p CURSOR LOCAL FOR SELECT ID FROM #planPrikazyDnes' + CRLF; + lSQL:= lSQL + 'OPEN p' + CRLF + 'WHILE (1=1)' + CRLF + ' BEGIN' + CRLF + ' FETCH NEXT FROM p INTO @idVPr' + CRLF + ' IF (@@FETCH_STATUS<>0) BREAK' + CRLF; + + lSQL:= lSQL + ' SET @t1 = (SELECT MIN(X.Cas) FROM (SELECT Cas=KPP.CasOd FROM ' + tblAdvKPlan + ' KP INNER JOIN ' + tblKapacPlanPol; + lSQL:= lSQL + ' KPP ON (KPP.IDKapacPlan=KP.ID AND KPP.IDPrikaz=@idVPr) WHERE KP.Aktivni=1 UNION ALL '; + lSQL:= lSQL + 'SELECT Cas=DKP.CCasOd FROM ' + tblAdvKPlan + ' AKP INNER JOIN ' + tblAdvKPlanDavky + ' DKP ON (DKP.IDAdvKapacPlan=AKP.ID AND DKP.IDPrikaz=@idVPr)'; + lSQL:= lSQL + ' WHERE AKP.Aktivni=1) X)' + CRLF; + + lSQL:= lSQL + ' SET @t1 = (SELECT MAX(X.Cas) FROM (SELECT Cas=KPP.CasDo FROM ' + tblAdvKPlan + ' KP INNER JOIN ' + tblKapacPlanPol; + lSQL:= lSQL + ' KPP ON (KPP.IDKapacPlan=KP.ID AND KPP.IDPrikaz=@idVPr) WHERE KP.Aktivni=1 UNION ALL '; + lSQL:= lSQL + 'SELECT Cas=DKP.CCasDo FROM ' + tblAdvKPlan + ' AKP INNER JOIN ' + tblAdvKPlanDavky + ' DKP ON (DKP.IDAdvKapacPlan=AKP.ID AND DKP.IDPrikaz=@idVPr)'; + lSQL:= lSQL + ' WHERE AKP.Aktivni=1) X)' + CRLF; + + lSQL:= lSQL + ' INSERT #planDnes (IDPrikaz, startdatetime, enddatetime, CisloZakazky, Prikaz, CisloZbozi, Nazev1) SELECT vp.ID, ISNULL(@t1, vp.Plan_zadani), ISNULL(@t2, vp.Plan_ukonceni)'; + lSQL:= lSQL + ', z.CisloZakazky, vp.RadaPrikaz, k.CisloZbozi, k.Nazev1 FROM ' + tblVPr + ' vp INNER JOIN ' + tblPrPost + ' pp ON (pp.IDPrikaz=vp.ID) INNER JOIN ' + tblZak; + lSQL:= lSQL + ' z ON (z.ID=vp.IDZakazka) INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE vp.ID=@idVPr AND pp.IDOdchylkyDo IS NULL AND vp.StavPrikazu=30 AND pp.IDStroje='; + lSQL:= lSQL + aktIdStr.ToString + CRLF; + + lSQL:= lSQL + ' END' + CRLF + 'CLOSE p' + CRLF + 'DEALLOCATE p' + CRLF; + + lSQL:= lSQL + 'SELECT hr.ld AS CasDavky,' + CRLF; + lSQL:= lSQL + ' 60 - case when e.startdatetime > hr.ld then datepart(minute, e.startdatetime) else 0 END' + CRLF; + lSQL:= lSQL + ' + case when e.enddatetime < hr.ud then datepart(minute, e.enddatetime)-60 else 0 END AS allocatedminutes' + CRLF; + lSQL:= lSQL + 'FROM #planDnes AS e' + CRLF; + lSQL:= lSQL + 'CROSS APPLY' + CRLF; + lSQL:= lSQL + '(' + CRLF; + lSQL:= lSQL + ' SELECT' + CRLF; + lSQL:= lSQL + ' dateadd(hour, datepart(hour,e.startdatetime)+t.rn-1, cast(cast(e.startdatetime AS date) AS datetime)) AS ld,' + CRLF; + lSQL:= lSQL + ' dateadd(hour, datepart(hour,e.startdatetime)+t.rn, cast(cast(e.startdatetime AS date) AS datetime)) AS ud,' + CRLF; + lSQL:= lSQL + ' rn' + CRLF; + lSQL:= lSQL + ' FROM' + CRLF; + lSQL:= lSQL + ' (' + CRLF; + lSQL:= lSQL + ' -- a tally, max 100 rows .. max 100 hours duration' + CRLF; + lSQL:= lSQL + ' SELECT top (1+datediff(hour,e.startdatetime,dateadd(minute, -1, e.enddatetime))) row_number() over(order by @@spid) AS rn' + CRLF; + lSQL:= lSQL + ' FROM (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS a(n)' + CRLF; + lSQL:= lSQL + ' CROSS JOIN (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS b(n)' + CRLF; + lSQL:= lSQL + ' ) AS t' + CRLF; + lSQL:= lSQL + ') AS hr;'; +} +{ + + lSQL:= 'SELECT ID FROM ' + tblVPr + ' WHERE StavPrikazu IN (20,30) AND ID NOT IN (SELECT r.IDPrikaz FROM ' + tblRozpracOper + ' h INNER JOIN ' + tblRozpracOperR; + lSQL:= lSQL + ' r ON (r.IDEvidRozpracOper=h.ID) INNER JOIN ' + tblCPrac + ' pr ON (pr.ID=h.IDPracoviste) WHERE h.Stav<30)'; + + lSQL:= 'SELECT vp.ID, k.ID AS idKZ, k.RegCis, k.Nazev1, dbo.hf_TruncDate(vp.Plan_zadani) AS Plan_zadani, vp.kusy_zad, vp.kusy_zive, vp.kusy_odved,' + + ' ISNULL(z.CisloZakazky,N'''') AS CisloZakazky FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) LEFT JOIN ' + tblZak + + ' z ON (z.ID=vp.IDZakazka) WHERE vp.ID IN (' + lSQL + ') ORDER BY vp.Plan_zadani'; + + + with Helios.OpenSQL(lSQL) do + begin + First; + if not(dm.vtPlanDnes.Active) then + dm.vtPlanDnes.Open; + dm.vtPlanDnes.EmptyDataSet; + while not(EOF) do // prikazy co nejsou nastartovane, ale zadane do vyroby + begin + dm.vtPlanDnes.Append; + dm.vtPlanDnes.FieldByName('fIDPlan').AsString:= VarToStr(FieldByNameValues('ID')); + dm.vtPlanDnes.FieldByName('fRegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); + dm.vtPlanDnes.FieldByName('fVyrobek').AsString:= VarToStr(FieldByNameValues('Nazev1')); + dm.vtPlanDnes.FieldByName('fHotovo').AsExtended:= VarToStr(FieldByNameValues('kusy_odved')).ToExtended; + dm.vtPlanDnes.FieldByName('fZakazka').AsString:= VarToStr(FieldByNameValues('CisloZakazky')); + dm.vtPlanDnes.FieldByName('fDatPlanZadani').AsString:= VarToStr(FieldByNameValues('Plan_zadani')); + dm.vtPlanDnes.Post; + Next; + end; + end; + + end; + end; +} + + + + procedure TformPekarna.FormShow (Sender: TObject); + var i: integer; + lSQL: string; + begin + + grdPlanDnes.Font.Height:= Helios.FontHeight; + grdRozpracovane.Font.Height:= Helios.FontHeight; + + grdStroje.Font.Height:= Helios.FontHeight; + + + + + shPlanZitra.TabVisible:= false; + runTimerRozprac:= true; + + sgInfo.Cells[0, 0]:= 'Rok'; + sgInfo.Cells[1, 0]:= 'Týden'; + sgInfo.Cells[2, 0]:= 'Výrobní den'; + sgInfo.Cells[3, 0]:= 'Směna'; + + sgCas.Cells[0, 0]:= 'Akt. datum'; + sgCas.Cells[1, 0]:= 'čas'; + + ledtVyrobniDen.Date:= Now; + + if not(Assigned(datMod.dm)) then + datMod.dm:= Tdm.Create(self); + + if (Assigned(dm)) then + begin + dm.Helios:= Helios; + + if not(dm.vtPlanDnes.Active) then + dm.vtPlanDnes.Open; + dm.vtPlanDnes.EmptyDataSet; + + if not(dm.vtPlanZitra.Active) then + dm.vtPlanZitra.Open; + dm.vtPlanZitra.EmptyDataSet; + + if not(dm.vtStroje.Active) then + dm.vtStroje.Open; + dm.vtStroje.EmptyDataSet; + + if not(dm.vtRozpracPL.Active) then + dm.vtRozpracPL.Open; + dm.vtRozpracPL.EmptyDataSet; + + if not(dm.vtVyrobniPozn.Active) then + dm.vtVyrobniPozn.Open; + dm.vtVyrobniPozn.EmptyDataSet; + end; + + + initOK:= true; + + self.Width:= Trunc(Screen.Monitors[self.Monitor.MonitorNum].WorkareaRect.Width * 0.95); + self.Height:= Trunc(Screen.Monitors[self.Monitor.MonitorNum].WorkareaRect.Height * 0.95); + + datMod.compName:= GetEnvironmentVariable('COMPUTERNAME'); + + +// zapis si koeficienty pro sirku sloupcu gridu stroju (pro upravu ve form.resize) + SetLength(arrGrdStrojeWidths, grdStroje.Columns.Count); + for i:=0 to Length(arrGrdStrojeWidths)-1 do + arrGrdStrojeWidths[i]:= grdStroje.Columns.Items[i].Width / grdStroje.Width; + + + infoTimerTimer (Sender); + dm.NactiDataPaneluStroje (self, arrStroje); + if (dm.vtStroje.RecordCount>0) then + grdStrojeCellClick(grdStroje.Columns.Items[2]); + + dm.NactiVyrobniPoznamky (self); + + SetWindowLong(btnZahajeniVyrobyPalety.Handle, GWL_STYLE, GetWindowLong((btnZahajeniVyrobyPalety as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + SetWindowLong(btnUkonceniVyrobyPalety.Handle, GWL_STYLE, GetWindowLong((btnUkonceniVyrobyPalety as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + + dm.NactiStrojeAPraci (self); + NactiPoznamkyVyrobnihoDne; + + if (dm.vtStroje.RecordCount>0) then + dm.vtStroje.RecNo:= 1; + + self.Caption:= 'PEKÁRNA '; // (obr w: ' + self.Width.ToString + '/h: ' + self.Height.ToString + ')'; + + + usrId:= Helios.UserId; + cisZamMistr:= 0; + idZamMistr:= 0; + if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT ID FROM ' + tblCZam + ' WHERE LoginId=N' + Helios.LoginName.QuotedString)) then + idZamMistr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblCZam + ' WHERE LoginId=N' + Helios.LoginName.QuotedString); + if (idZamMistr=0) and (helUtils.getHeliosIntVal(Helios, 0, 'SELECT COUNT(ID) FROM ' + tblCZam)=1) then + idZamMistr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblCZam); + + if (idZamMistr>0) then + begin + lSQL:= 'SELECT Cislo, PrijmeniJmeno FROM ' + tblCZam + ' WHERE ID=' + idZamMistr.ToString; + with Helios.OpenSQL (lSQL) do + begin + edtMistr.Text:= VarToStr(FieldByNameValues('PrijmeniJmeno')); + cisZamMistr:= VarToStr(FieldByNameValues('Cislo')).ToInteger; + end; + end; + datMod.idZamMistr:= idZamMistr; + datMod.cisZamMistr:= cisZamMistr; + + + + pgCtrlPlan.ActivePage:= shPlanDnes; + + datMod.bmIdStroj:= 0; + if (dm.vtStroje.RecordCount>0) then + datMod.bmIdStroj:= dm.vtStroje.FieldByName('fIDStroj').AsInteger; + + dm.NactiPlanStroje (self, datMod.bmIdStroj); + + end; + + + + + procedure TformPekarna.grdPlanDnesCellClick (Column: TColumn); + var c: string; + begin + +// click query + InsertClickQuery ('grdPlanDnes'); + + + aktIdPlan:= 0; + if (grdPlanDnes.DataSource.DataSet.RecordCount>0) then + begin + aktIdPlan:= grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsInteger; // prikaz + datMod.bmIdPlanDnes:= aktIdPlan; + + datMod.aktIdKmenPlan:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IdTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + aktIdPlan.ToString); + + c:= 'DECLARE @i INT' + CRLF + 'DELETE FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + aktIdPlan.ToString + ' AND LEFT(VyrCislo,1)=N''0''' + CRLF; + c:= c + 'SET @i = 1 + ISNULL( (SELECT MAX(ID) FROM ' + tblPrikazVC + '), 0)' + CRLF + 'DBCC CHECKIDENT (' + dm.VratNazevTabulky(tblPrikazVC,false) + ', RESEED, @i)'; + try + Helios.ExecSQL(c); + except + end; + end; + + end; + + + + + + procedure TformPekarna.grdPlanDnesDblClick (Sender: TObject); + begin +// click query + InsertClickQuery ('grdPlanDnes'); + + + idPrikazPlanDnes:= grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsInteger; + +// Helios.ExecSQL('IF OBJECT_ID(N''tempdb..#tmpAutomatSpusteno'') IS NULL CREATE TABLE #tmpAutomatSpusteno(IDAkce INT NOT NULL)'); +// Helios.RunAction2(bidVyrPrik, 'TabPrikaz.ID=' + grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsString, 'ActionEdit'); + end; + + + + + procedure TformPekarna.grdPlanDnesDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdPlanDnes.DataSource.DataSet.RecNo)) then + TJvDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TJvDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='fVyrobek') then + begin + if (gdSelected in State) then + TJvDBGrid(Sender).Canvas.Font.Color:= clBlack; + TJvDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; + end; + + if (Column.FieldName='fHotovo') then + begin + if (gdSelected in State) then + TJvDBGrid(Sender).Canvas.Font.Color:= clBlack; + TJvDBGrid(Sender).Canvas.Brush.Color:= $00CAFFFF; + end; + + TJvDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformPekarna.grdPlanDnesMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + aRowPlanDnes:= TJvDBGrid(Sender).MouseCoord(X, Y).Y; + aColPlanDnes:= TJvDBGrid(Sender).MouseCoord(X, Y).X; + end; + + + + + procedure TformPekarna.grdPlanDnesTitleClick(Column: TColumn); + begin + ShowMessage('col W: ' + Column.Width.ToString); + end; + + + + + procedure TformPekarna.grdRozpracovaneCellClick(Column: TColumn); + var vyradit: Boolean; + begin + +// click query + InsertClickQuery ('grdRozpracovane'); + + + edtNazevRozpracVyrobku.Text:= dm.vtRozpracPL.FieldByName('fVyrobek').AsString; + edtRozpracZakazka.Text:= dm.vtRozpracPL.FieldByName('fRadaPrikaz').AsString; // VPr + + datMod.aktIdKmenRozprac:= dm.vtRozpracPL.FieldByName('fIDPrikaz').AsInteger; + + vyradit:= dm.vtRozpracPL.FieldByName('fColR').AsBoolean; + Label12.Visible:= vyradit; + edtVyraditPaletu.Visible:= vyradit; + edtVyraditPaletu.Text:= dm.vtRozpracPL.FieldByName('fAktPaletList').AsString; + btnVyraditPaletuZVyroby.Visible:= vyradit; + end; + + + + + + procedure TformPekarna.grdRozpracovaneDblClick (Sender: TObject); + begin +// TitleOffset := Ord(dgTitles in grdRozpracovane.Options); + Pt := grdRozpracovane.ScreenToClient(Mouse.CursorPos); + Cell := grdRozpracovane.MouseCoord(Pt.X, Pt.Y); + + if (Cell.X = GetDBGridIndexByFieldName(grdRozpracovane, 'fAktPaletList')) then + begin + // PL je ve výrobě, není co převádět + + // Nemáme speficikaci pro tento výrobek na stroji 58 ! Nemohu provést převod do výroby ! + + if (Helios.YesNo('Chcete změnit stroj pro výrobu PL ' + #1 + grdRozpracovane.DataSource.DataSet.FieldByName('fAktPaletList').AsString + #1 + ' ?' ,false)) then + begin + + end; + end; + end; + + + + + procedure TformPekarna.grdRozpracovaneDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdRozpracovane.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='fAktPaletList') then + begin + TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; // zelena + if (gdSelected in State) then + TDBGrid(Sender).Canvas.Font.Color:= clBlack; // cerne pismo na zelenem pozadi + end; + + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + + procedure TformPekarna.grdStrojeCellClick (Column: TColumn); + var lSQL: string; + aktVyrN1, aktVyrCZbo: string; + begin +// click query + InsertClickQuery ('grdStroje'); + + + aktIdStr:= 0; + if (grdStroje.DataSource.DataSet.RecordCount>0) then + begin + lSQL:= Column.FieldName; + + aktIdStr:= grdStroje.DataSource.DataSet.FieldByName('fIDStroj').AsInteger; + datMod.aktIdStroj:= aktIdStr; + datMod.bmIdStroj:= aktIdStr; + + edtVybranyStroj.Text:= grdStroje.DataSource.DataSet.FieldByName('fStroj').AsString; + edtOdpadStroj.Text:= grdStroje.DataSource.DataSet.FieldByName('fStroj').AsString; +// edtOdpadSmena.Text:= sgCas.Cells[3, 1]; + aktVyrCZbo:= grdStroje.DataSource.DataSet.FieldByName('fCisloZbozi').AsString; + + aktIdKmen:= grdStroje.DataSource.DataSet.FieldByName('fIDKmen').AsInteger; + datMod.aktIdKmen:= aktIdKmen; + + datMod.aktIdPrikaz:= grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsInteger; + datMod.bmIdPrikaz:= datMod.aktIdPrikaz; + + datMod.aktZakazka:= grdStroje.DataSource.DataSet.FieldByName('fZakazka').AsString; // vyrobni prikaz (RadaPrikaz) + + aktVyrCZbo:= LeftStr(aktVyrCZbo,3) + ' ' + MidStr(aktVyrCZbo, 4, 30); + edtAktVyrobek.Text:= aktVyrCZbo + ' ' + dm.vtStroje.FieldByName('fVyrobek').AsString; + + dm.NactiOdpadStroje (self); + + + if (pgCtrlPlan.ActivePage=shPlanDnes) then + begin + dm.NactiPlanStroje (self, datMod.bmIdStroj); + aktIdPlan:= 0; + datMod.bmIdPlanDnes:= aktIdPlan; + end; + +{ + if (pgCtrlPlan.ActivePage=shRozpracovanePL) then + dm.NactiRozpracovane (self); +} + end; + + end; + + + + + procedure TformPekarna.grdStrojeDblClick (Sender: TObject); + var f: TformTiskKAStitku; + fPLZakazky: TformPLZakazky; + fZahPL: TformZahajeniPalety; + fKonecPL: TformUkonceniPalety; + fCinn: TformVyberCinnostiStroje; + s, c, lSQL: string; + begin + + // dbl klik nad Cinnosti - zmena (Vyroba, Odstavka, Oprava stroje, Ukonceni zakazky, Zkouska) + + +// Pt := grdStroje.ScreenToClient(Mouse.CursorPos); +// Cell := grdStroje.MouseCoord(Pt.X, Pt.Y); + +// click query + InsertClickQuery ('grdStroje'); + + + if (grdStrojeAktCol=4) then + begin + fZahPL:= TformZahajeniPalety.Create(nil); + try + fZahPL.Helios:= Helios; + fZahPL.idPrikaz:= grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsInteger; + fZahPL.ShowModal; + finally + fZahPL.Free; + end; + end; + + + + s:= Sender.ClassName; + if (grdStrojeAktCol=3) then // colVyrobek + begin + grdStrojeCellClick (grdStroje.Columns.Items[grdStrojeAktCol-1]); + f:= TformTiskKAStitku.Create(nil); + try + try + f.Helios:= Helios; + f.idKmen:= aktIdKmen; + f.ShowModal; + except + end; + finally + f.Free; + end; + end; + + + if (grdStrojeAktCol=6) then // colZakazka + begin + grdStrojeCellClick (grdStroje.Columns.Items[grdStrojeAktCol-1]); + + s:= grdStroje.DataSource.DataSet.FieldByName('fZakazka').AsString; + if (1=0) then + Helios.Error('Nelze identifikovat zakázku.') + else + begin + fPLZakazky:= TformPLZakazky.Create(nil); + try + fPLZakazky.Helios:= Helios; + fPLZakazky.zakazka:= s; // prikaz + fPLZakazky.idKmen:= grdStroje.DataSource.DataSet.FieldByName('fIDKmen').AsInteger; + fPLZakazky.ShowModal; + finally + fPLZakazky.Free; + end; + end; + end; + + + if (grdStrojeAktCol=7) then // colCinnost + begin + grdStrojeCellClick (grdStroje.Columns.Items[grdStrojeAktCol-1]); + s:= grdStroje.DataSource.DataSet.FieldByName('fZakazka').AsString; + c:= grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString; + + fCinn:= TformVyberCinnostiStroje.Create(nil); + try + fCinn.Helios:= Helios; + fCinn.ShowModal; + if (fCinn.mrVal=10) then + if (fCinn.cinnost<>'') then + begin + if (c='Výroba') then + begin + if (Helios.YesNo('Na stroji probíhá výroba. Pokud budete pokračovat, výroba palety bude ukončena.' + CRLF + 'Chcete pokračovat a zahájit činnost ' + #1+fCinn.cinnost+#1 + ' ?', false)) then + begin +// click query + InsertClickQuery ('btnUkonceniVyrobyPalety'); + fKonecPL:= TformUkonceniPalety.Create (nil); + try + fKonecPL.Helios:= Helios; + fKonecPL.prerusit:= prikazPrerusit; + fKonecPL.denSmena:= ledtVyrobniDen.DateTime.Format('ddmmyyyy') + '/' + sgInfo.Cells[3, 1].Trim; + fKonecPL.paleta:= dm.vtStroje.FieldByName('fAktPaletList').AsString; + fKonecPL.sarze:= dm.vtStroje.FieldByName('fSarze').AsString; + fKonecPL.idStroj:= dm.vtStroje.FieldByName('fIDStroj').AsInteger; + fKonecPL.idEvEOp:= dm.vtStroje.FieldByName('fIDEvidRozpOper').AsInteger; + fKonecPL.idVPr:= dm.vtStroje.FieldByName('fIDPrikaz').AsInteger; + fKonecPL.ShowModal; + + lSQL:= 'INSERT ' + tblCinnostStr + ' (IDStroje, Smena, Cinnost) SELECT ' + datMod.aktIdStroj.ToString + ', ' + sgInfo.Cells[3, 1] + ', N' + fCinn.cinnost.QuotedString; + Helios.ExecSQL(lSQL); + grdStroje.DataSource.DataSet.Edit; + grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString:= fCinn.cinnost; + grdStroje.DataSource.DataSet.Post; + + finally + fKonecPL.Free; + end; + dm.NactiStrojeAPraci (self); + end; + end; + end + else + begin + lSQL:= 'UPDATE ' + tblCinnostStr + ' SET DatKonec=GETDATE() WHERE ID=(SELECT MAX(ID) FROM ' + tblCinnostStr + ' WHERE IDStroje=' + datMod.aktIdStroj.ToString + ')'; + Helios.ExecSQL(lSQL); + grdStroje.DataSource.DataSet.Edit; + grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString:= fCinn.cinnost; + grdStroje.DataSource.DataSet.Post; + end; + finally + fCinn.Free; + end; + end; + + end; + + + + + procedure TformPekarna.grdStrojeDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdStroje.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='fAktPaletList') or (Column.FieldName='fZakazka') or (Column.FieldName='fCinnost') then + begin + if (gdSelected in State) then + TDBGrid(Sender).Canvas.Font.Color:= clBlack; + TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; + end; + + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + + procedure TformPekarna.grdStrojeMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + grdStrojeAktRow:= TJvDBGrid(Sender).MouseCoord(X, Y).Y; + grdStrojeAktCol:= TJvDBGrid(Sender).MouseCoord(X, Y).X; + end; + + + + + procedure TformPekarna.infoTimerTimer (Sender: TObject); + var h: byte; + begin + sgInfo.Cells[0, 1]:= YearOf(Now).ToString; // rok + sgInfo.Cells[1, 1]:= WeekOfTheYear(Now).ToString; // tyden dle WeekOfTheYear + sgInfo.Cells[2, 1]:= DateToStr(Now); // vyrobni den + h:= HourOf(Now); + if (h<6) or (h>=22) then + sgInfo.Cells[3, 1]:= '3' // smena + else + if (h>=6) and (h<14) then + sgInfo.Cells[3, 1]:= '1' + else + sgInfo.Cells[3, 1]:= '2'; + + edtOdpadSmena.Text:= sgInfo.Cells[3, 1]; + + sgCas.Cells[0, 1]:= DateToStr(Now); + sgCas.Cells[1, 1]:= FormatDateTime('hh:nn', Now); + +// ledtVyrobniDen.DateTime:= StrToDateTime(sgInfo.Cells[2, 1]); + + end; + + + + procedure TformPekarna.ledtVyrobniDenChange (Sender: TObject); + begin + NactiPoznamkyVyrobnihoDne; + end; + + + + + procedure TformPekarna.memVyrobniPoznamkaExit (Sender: TObject); + var lSQL: string; + begin + if (memVyrobniPoznamka.Modified) then + begin + memVyrobniPoznamka.Text:= memVyrobniPoznamka.Text.Trim; + if (idPoznamkaVyrbnihoDne>0) then + begin + lSQL:= 'UPDATE ' + tblVyrPozn + ' SET Poznamka=N' + IfThen(memVyrobniPoznamka.Text='', 'ULL', memVyrobniPoznamka.Text.QuotedString) + ' WHERE ID=' + idPoznamkaVyrbnihoDne.ToString; + Helios.ExecSQL(lSQL); + end + else + if (memVyrobniPoznamka.Text<>'') then + begin + lSQL:= 'INSERT ' + tblVyrPozn + ' (Poznamka, VyrobniDen) SELECT N' + memVyrobniPoznamka.Text.QuotedString + ', CONVERT(datetime, N' + DateTimeToStr(ledtVyrobniDen.DateTime).QuotedString; + lSQL:= lSQL + ', 104); SELECT SCOPE_IDENTITY() AS newId'; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + idPoznamkaVyrbnihoDne:= VarToStr(FieldByNameValues('newId')).ToInteger; + end; + end; + end; + + + + + procedure TformPekarna.sgCasDrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + begin + sgInfoDrawCell(Sender, ACol, ARow, Rect, State); + end; + + + + procedure TformPekarna.sgInfoDrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + var g: TStringGrid; + begin + if (ARow=0) then + begin + g:= Sender as TStringGrid; + g.Canvas.Brush.Color:= $00CAFFFF; + g.Canvas.FillRect (Rect); + DrawText(g.Canvas.Handle, g.Cells[ACol, ARow], Length(g.Cells[ACol, ARow]), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE); + end; + end; + + + + + procedure TformPekarna.shPlanDnesShow (Sender: TObject); + begin + if (initOK) then + dm.NactiPlanStroje(self, datMod.bmIdStroj); + end; + + + + + procedure TformPekarna.shRozpracovanePLShow (Sender: TObject); + begin + datMod.bmIdPlanDnes:= 0; + aktIdPlan:= 0; + if (initOK) then + begin + edtNazevRozpracVyrobku.Text:= ''; + edtRozpracZakazka.Text:= ''; + dm.NactiRozpracovane (self); + end; + end; + + + + + procedure TformPekarna.timerPrehledTimer (Sender: TObject); + var idStrojBak, idPlanDnesBak, idKmenBak: integer; + begin + if (runTimerRozprac) then + begin + idStrojBak:= aktIdStr; + idKmenBak:= aktIdKmen; + idPlanDnesBak:= aktIdPlan; + dm.NactiStrojeAPraci (self); + + if (datMod.bmIdStroj>0) then + if (dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey])) then + begin + aktIdStr:= datMod.bmIdStroj; + aktIdKmen:= dm.vtStroje.FieldByName('fIDPrikaz').AsInteger; + datMod.aktIdStroj:= datMod.bmIdStroj; + end; + + if (datMod.bmIdPlanDnes>0) then + if (dm.vtPlanDnes.Locate('fIDPlan', VarArrayOf([datMod.bmIdPlanDnes]), [loPartialKey])) then + begin + aktIdPlan:= datMod.bmIdPlanDnes; + end; + + if (initOK) then + begin + dm.NactiRozpracovane (self); + dm.NactiPlanStroje (self, datMod.bmIdStroj); + end; + + runTimerRozprac:= true; + end; + end; + +end. diff --git a/frmPredvyroba.dfm b/frmPredvyroba.dfm new file mode 100644 index 0000000..1b03299 --- /dev/null +++ b/frmPredvyroba.dfm @@ -0,0 +1,366 @@ +object formPredvyroba: TformPredvyroba + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' P'#345'edv'#253'roba / Polotovary' + ClientHeight = 762 + ClientWidth = 1180 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object GridPanel3: TGridPanel + Left = 0 + Top = 0 + Width = 1180 + Height = 762 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel1 + Row = 1 + end + item + Column = 0 + Control = Button1 + Row = 0 + end> + RowCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 90.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 1180 + 762) + object GridPanel1: TGridPanel + Left = 1 + Top = 77 + Width = 1178 + Height = 684 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdPredvyroba + Row = 1 + end + item + Column = 0 + Control = GridPanel2 + Row = 0 + end> + RowCollection = < + item + Value = 6.000000000000000000 + end + item + Value = 94.000000000000000000 + end> + TabOrder = 0 + object grdPredvyroba: TDBGrid + AlignWithMargins = True + Left = 4 + Top = 45 + Width = 1170 + Height = 635 + Align = alClient + DataSource = dm.dsPredvyroba + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdPredvyrobaDrawColumnCell + OnDblClick = grdPredvyrobaDblClick + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colIDKmen' + Title.Alignment = taCenter + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Width = 62 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRegCis' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Width = 139 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Caption = 'N'#225'zev' + Width = 336 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJ' + Title.Alignment = taCenter + Title.Caption = 'MJ' + Width = 60 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colBaleni' + Title.Alignment = taCenter + Title.Caption = 'ks/KA' + Width = 80 + Visible = True + end + item + Expanded = False + FieldName = 'colBaleni2' + Title.Alignment = taCenter + Title.Caption = 'KA/pal' + Width = 84 + Visible = True + end + item + Expanded = False + FieldName = 'colStroj' + Title.Caption = 'Stroj' + Width = 361 + Visible = True + end> + end + object GridPanel2: TGridPanel + Left = 1 + Top = 1 + Width = 1176 + Height = 41 + Align = alClient + ColumnCollection = < + item + Value = 1.400000000000000000 + end + item + Value = 5.500000000000000000 + end + item + Value = 12.000000000000000000 + end + item + Value = 28.600000000000000000 + end + item + Value = 5.100000000000000000 + end + item + Value = 7.000000000000000000 + end + item + Value = 7.000000000000000000 + end + item + Value = 31.000000000000000000 + end + item + Value = 2.400000000000007000 + end> + ControlCollection = < + item + Column = 1 + Control = edtSZ + Row = 0 + end + item + Column = 2 + Control = edtRegCis + Row = 0 + end + item + Column = 6 + Control = edtBal2 + Row = 0 + end + item + Column = 3 + Control = edtNazev1 + Row = 0 + end + item + Column = 4 + Control = edtMJ + Row = 0 + end + item + Column = 5 + Control = edtBal + Row = 0 + end + item + Column = 7 + Control = edtStroj + Row = 0 + end + item + Column = 0 + Control = lblReset + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 1176 + 41) + object edtSZ: TEdit + AlignWithMargins = True + Left = 20 + Top = 4 + Width = 59 + Height = 33 + Align = alClient + Alignment = taCenter + TabOrder = 0 + OnChange = edtSZChange + ExplicitHeight = 29 + end + object edtRegCis: TEdit + AlignWithMargins = True + Left = 85 + Top = 4 + Width = 135 + Height = 33 + Align = alClient + Alignment = taCenter + MaxLength = 30 + TabOrder = 1 + OnChange = edtRegCisChange + ExplicitHeight = 29 + end + object edtBal2: TEdit + AlignWithMargins = True + Left = 704 + Top = 4 + Width = 76 + Height = 33 + Align = alClient + Enabled = False + MaxLength = 8 + TabOrder = 2 + ExplicitHeight = 29 + end + object edtNazev1: TEdit + AlignWithMargins = True + Left = 226 + Top = 4 + Width = 330 + Height = 33 + Align = alClient + MaxLength = 100 + TabOrder = 3 + OnChange = edtNazev1Change + ExplicitHeight = 29 + end + object edtMJ: TEdit + AlignWithMargins = True + Left = 562 + Top = 4 + Width = 54 + Height = 33 + Align = alClient + Alignment = taCenter + Enabled = False + MaxLength = 10 + TabOrder = 4 + ExplicitHeight = 29 + end + object edtBal: TEdit + AlignWithMargins = True + Left = 622 + Top = 4 + Width = 76 + Height = 33 + Align = alClient + Alignment = taCenter + Enabled = False + MaxLength = 8 + TabOrder = 5 + ExplicitHeight = 29 + end + object edtStroj: TEdit + AlignWithMargins = True + Left = 786 + Top = 4 + Width = 358 + Height = 33 + Align = alClient + MaxLength = 100 + TabOrder = 6 + OnChange = edtStrojChange + ExplicitHeight = 29 + end + object lblReset: TLabel + Left = 4 + Top = 10 + Width = 9 + Height = 21 + Anchors = [] + Caption = 'X' + OnClick = lblResetClick + ExplicitLeft = 3 + ExplicitTop = 8 + end + end + end + object Button1: TButton + Left = 457 + Top = 16 + Width = 265 + Height = 45 + Anchors = [] + Caption = 'P'#345'ehled - paletov'#233' listy' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 1 + OnClick = Button1Click + end + end +end diff --git a/frmPredvyroba.pas b/frmPredvyroba.pas new file mode 100644 index 0000000..8f3fbe4 --- /dev/null +++ b/frmPredvyroba.pas @@ -0,0 +1,188 @@ +unit frmPredvyroba; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, + ddPlugin_TLB, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.StdCtrls; + +type + TformPredvyroba = class(TForm) + grdPredvyroba: TDBGrid; + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + edtSZ: TEdit; + edtRegCis: TEdit; + edtBal2: TEdit; + edtNazev1: TEdit; + edtMJ: TEdit; + edtBal: TEdit; + edtStroj: TEdit; + Button1: TButton; + lblReset: TLabel; + procedure edtSZChange(Sender: TObject); + procedure edtRegCisChange(Sender: TObject); + procedure edtNazev1Change(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure edtStrojChange(Sender: TObject); + procedure lblResetClick(Sender: TObject); + procedure grdPredvyrobaDblClick(Sender: TObject); + procedure grdPredvyrobaDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure Button1Click(Sender: TObject); + private + procedure Filtruj; + public + Helios: IHelios; + end; + +var + formPredvyroba: TformPredvyroba; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils, helTabsBIDs, frmPredvyrobaDetail; + +{$R *.dfm} + + + procedure TformPredvyroba.Filtruj; + var filtr: string; + begin + filtr:= ''; + if (edtSZ.Text<>'') then + filtr:= 'UPPER(colSZ) LIKE ''%' + edtSZ.Text.Trim.ToUpper + '%'''; + + if (edtRegCis.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colRegCis) LIKE ''%' + edtRegCis.Text.Trim.ToUpper + '%'''; + + if (edtNazev1.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colNazev1) LIKE ''%' + edtNazev1.Text.Trim.ToUpper + '%'''; + + if (edtStroj.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colStroj) LIKE ''%' + edtStroj.Text.Trim.ToUpper + '%'''; + + + if (filtr='') then + begin + dm.vtPredvyroba.Filter:= filtr; + dm.vtPredvyroba.Filtered:= false; + end + else + begin + dm.vtPredvyroba.Filter:= filtr; + dm.vtPredvyroba.Filtered:= true; + end; + + grdPredvyroba.Invalidate; + end; + + + + + procedure TformPredvyroba.FormShow(Sender: TObject); + begin + dm.NactiPredvyrobu (self); + grdPredvyroba.SetFocus; + end; + + + + + procedure TformPredvyroba.grdPredvyrobaDblClick (Sender: TObject); + var f: TformPredvyrobaDetail; + begin + if (grdPredvyroba.DataSource.DataSet.FieldByName('colNazev1').AsString<>'') then + begin + f:= TformPredvyrobaDetail.Create(nil); + try + f.Helios:= Helios; + f.idKmen:= grdPredvyroba.DataSource.DataSet.FieldByName('colIDKmen').AsInteger; + f.ShowModal; + finally + f.Free; + end; + end; + end; + + + + + procedure TformPredvyroba.grdPredvyrobaDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdPredvyroba.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow // bila + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; // seda + end; + + if (Column.FieldName='colNazev1') then + begin + TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; // zelena + if (gdSelected in State) then + begin + TDBGrid(Sender).Canvas.Brush.Color:= $0061F0FC; // zluta + TDBGrid(Sender).Canvas.Font.Color:= clBlack; // cerne pismo na zlutem pozadi + end; + end; + + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformPredvyroba.lblResetClick(Sender: TObject); + begin + edtSZ.Text:= ''; + edtRegCis.Text:= ''; + edtNazev1.Text:= ''; + edtStroj.Text:= ''; + Filtruj; + grdPredvyroba.SetFocus; + end; + + + + + procedure TformPredvyroba.Button1Click(Sender: TObject); + begin + grdPredvyrobaDblClick (Sender); + end; + + + + procedure TformPredvyroba.edtNazev1Change(Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformPredvyroba.edtRegCisChange(Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformPredvyroba.edtStrojChange(Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformPredvyroba.edtSZChange(Sender: TObject); + begin + edtSZ.Text:= edtSZ.Text.Trim; + Filtruj; + end; + +end. diff --git a/frmPredvyrobaDetail.dfm b/frmPredvyrobaDetail.dfm new file mode 100644 index 0000000..efbe0d2 --- /dev/null +++ b/frmPredvyrobaDetail.dfm @@ -0,0 +1,424 @@ +object formPredvyrobaDetail: TformPredvyrobaDetail + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' P'#345'edv'#253'roba' + ClientHeight = 668 + ClientWidth = 1478 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 25 + object GridPanel1: TGridPanel + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 1472 + Height = 662 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdPredvyrobaDetail + Row = 1 + end + item + Column = 0 + Control = GridPanel2 + Row = 0 + end> + RowCollection = < + item + Value = 11.971830985915490000 + end + item + Value = 88.028169014084510000 + end> + TabOrder = 0 + object grdPredvyrobaDetail: TDBGrid + AlignWithMargins = True + Left = 4 + Top = 83 + Width = 1464 + Height = 575 + Align = alClient + DataSource = dm.dsPredvyrobaDetail + DrawingStyle = gdsGradient + GradientEndColor = clSkyBlue + GradientStartColor = clSkyBlue + Options = [dgTitles, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdPredvyrobaDetailDrawColumnCell + Columns = < + item + Expanded = False + FieldName = 'idPZ' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 46 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRegCis' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 106 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 376 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colCisloPL' + Title.Alignment = taCenter + Title.Caption = 'Paletov'#253' list' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 132 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKA' + Title.Alignment = taCenter + Title.Caption = 'KA' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 60 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKs' + Title.Alignment = taCenter + Title.Caption = 'Ks' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 60 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colStav' + Title.Alignment = taCenter + Title.Caption = 'Stav' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 50 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatumVyroby' + Title.Alignment = taCenter + Title.Caption = 'Datum v'#253'roby' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 150 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatumVyrazeni' + Title.Alignment = taCenter + Title.Caption = 'Datum vy'#345'azen'#237 + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 150 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colZpracDatVyr' + Title.Alignment = taCenter + Title.Caption = 'Datum v'#253'roby' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 150 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colZpracDatVyraz' + Title.Alignment = taCenter + Title.Caption = 'Datum vy'#345'azen'#237 + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 150 + Visible = True + end + item + Expanded = False + FieldName = 'colIDPrikaz' + Visible = False + end + item + Expanded = False + FieldName = 'colCisloZakazky' + Visible = False + end> + end + object GridPanel2: TGridPanel + Left = 1 + Top = 1 + Width = 1470 + Height = 79 + Align = alClient + ColumnCollection = < + item + Value = 77.269744277622830000 + end + item + Value = 22.730255722377170000 + end> + ControlCollection = < + item + Column = 1 + Control = Label1 + Row = 1 + end + item + Column = 0 + ColumnSpan = 2 + Control = GridPanel3 + Row = 0 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 1470 + 79) + object Label1: TLabel + Left = 1210 + Top = 46 + Width = 184 + Height = 25 + Anchors = [] + Caption = 'Zpracov'#225'n'#237' polotovaru' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [fsItalic] + ParentFont = False + ExplicitLeft = 1206 + end + object GridPanel3: TGridPanel + Left = 1 + Top = 1 + Width = 1468 + Height = 38 + Align = alClient + ColumnCollection = < + item + Value = 35.208382583961410000 + end + item + Value = 10.798602902673100000 + end + item + Value = 10.798602902673100000 + end + item + Value = 10.798602902673100000 + end + item + Value = 10.798602902673100000 + end + item + Value = 10.798602902673100000 + end + item + Value = 10.798602902673110000 + end> + ControlCollection = < + item + Column = 6 + Control = Panel1 + Row = 0 + end + item + Column = 1 + Control = Panel2 + Row = 0 + end + item + Column = 2 + Control = Panel3 + Row = 0 + end + item + Column = 3 + Control = Panel4 + Row = 0 + end + item + Column = 5 + Control = Panel5 + Row = 0 + end + item + Column = 4 + Control = Panel6 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 1468 + 38) + object Panel1: TPanel + Left = 1309 + Top = 1 + Width = 185 + Height = 41 + Anchors = [] + Caption = '5 - vy'#345'azeno' + Color = 16691380 + ParentBackground = False + TabOrder = 0 + end + object Panel2: TPanel + Left = 517 + Top = 1 + Width = 185 + Height = 41 + Anchors = [] + Caption = '0 - vyrobeno' + Color = 8317836 + ParentBackground = False + TabOrder = 1 + end + object Panel3: TPanel + Left = 675 + Top = 1 + Width = 185 + Height = 41 + Anchors = [] + Caption = '1 - na sklad'#283 + Color = 9827568 + ParentBackground = False + TabOrder = 2 + end + object Panel4: TPanel + Left = 834 + Top = 1 + Width = 185 + Height = 41 + Anchors = [] + Caption = '2 - ve v'#253'rob'#283 + Color = 8695039 + ParentBackground = False + TabOrder = 3 + end + object Panel5: TPanel + Left = 1150 + Top = 1 + Width = 185 + Height = 41 + Anchors = [] + Caption = '4 - ukon'#269'eno' + Color = 16627697 + ParentBackground = False + TabOrder = 4 + end + object Panel6: TPanel + Left = 992 + Top = 1 + Width = 185 + Height = 41 + Anchors = [] + Caption = '3 - zpracov'#225'v'#225' se' + Color = 8421631 + ParentBackground = False + TabOrder = 5 + end + end + end + end +end diff --git a/frmPredvyrobaDetail.pas b/frmPredvyrobaDetail.pas new file mode 100644 index 0000000..e78fe71 --- /dev/null +++ b/frmPredvyrobaDetail.pas @@ -0,0 +1,68 @@ +unit frmPredvyrobaDetail; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, + ddPlugin_TLB, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls; + +type + TformPredvyrobaDetail = class(TForm) + GridPanel1: TGridPanel; + grdPredvyrobaDetail: TDBGrid; + GridPanel2: TGridPanel; + Label1: TLabel; + GridPanel3: TGridPanel; + Panel1: TPanel; + Panel2: TPanel; + Panel3: TPanel; + Panel4: TPanel; + Panel5: TPanel; + Panel6: TPanel; + procedure FormShow(Sender: TObject); + procedure grdPredvyrobaDetailDrawColumnCell(Sender: TObject; + const Rect: TRect; DataCol: Integer; Column: TColumn; + State: TGridDrawState); + private + public + Helios: IHelios; + idKmen: integer; + end; + +var + formPredvyrobaDetail: TformPredvyrobaDetail; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils, helTabsBIDs; + +{$R *.dfm} + + procedure TformPredvyrobaDetail.FormShow (Sender: TObject); + begin + dm.NactiPredvyrobuDetail (self, idKmen); + end; + + + + procedure TformPredvyrobaDetail.grdPredvyrobaDetailDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + var fld: TField; + begin + fld:= Column.Field; + if (Assigned(fld) and SameText(fld.FieldName, 'colStav')) then + begin + case (VarToStr(fld.Value).ToInteger) of + 0: grdPredvyrobaDetail.Canvas.Brush.Color:= Panel2.Color; + 1: grdPredvyrobaDetail.Canvas.Brush.Color:= Panel3.Color; + 2: grdPredvyrobaDetail.Canvas.Brush.Color:= Panel4.Color; + 3: grdPredvyrobaDetail.Canvas.Brush.Color:= Panel6.Color; + 4: grdPredvyrobaDetail.Canvas.Brush.Color:= Panel5.Color; + 5: grdPredvyrobaDetail.Canvas.Brush.Color:= Panel1.Color; + end; + end; + grdPredvyrobaDetail.DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + end. diff --git a/frmPrehledMicharna.dfm b/frmPrehledMicharna.dfm new file mode 100644 index 0000000..ce82320 --- /dev/null +++ b/frmPrehledMicharna.dfm @@ -0,0 +1,464 @@ +object formPrehledMicharna: TformPrehledMicharna + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' P'#345'ehled m'#237'ch'#225'rna' + ClientHeight = 809 + ClientWidth = 862 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 862 + Height = 809 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Button1 + Row = 0 + end + item + Column = 0 + Control = GridPanel2 + Row = 1 + end + item + Column = 0 + Control = grdSeznamTesta + Row = 2 + end + item + Column = 0 + Control = grdReceptura + Row = 3 + end + item + Column = 0 + Control = edtSuchaHmot + Row = 4 + end> + RowCollection = < + item + Value = 6.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 44.000000000000000000 + end + item + Value = 31.000000000000000000 + end + item + Value = 4.000000000000000000 + end + item + Value = 5.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 862 + 809) + object Button1: TButton + Left = 344 + Top = 7 + Width = 174 + Height = 36 + Anchors = [] + Caption = 'Sb'#283'rn'#253' list m'#237'ch'#225'rna' + TabOrder = 0 + end + object GridPanel2: TGridPanel + Left = 1 + Top = 49 + Width = 860 + Height = 81 + Align = alClient + ColumnCollection = < + item + Value = 1.500000000000000000 + end + item + Value = 23.000000000000000000 + end + item + Value = 27.900000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 18.000000000000000000 + end + item + Value = 4.800000000000000000 + end + item + Value = 4.700000000000000000 + end + item + Value = 2.099999999999996000 + end> + ControlCollection = < + item + Column = 5 + Control = Label3 + Row = 0 + end + item + Column = 6 + Control = Label1 + Row = 0 + end + item + Column = 1 + Control = edtStroj + Row = 0 + end + item + Column = 2 + Control = edtTesto + Row = 0 + end + item + Column = 4 + Control = GridPanel3 + Row = 0 + end + item + Column = 0 + Control = Label4 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 860 + 81) + object Label3: TLabel + Left = 771 + Top = 15 + Width = 18 + Height = 50 + Anchors = [] + Caption = 'Viskozita' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + ExplicitLeft = 772 + ExplicitTop = 8 + end + object Label1: TLabel + Left = 812 + Top = 10 + Width = 18 + Height = 60 + Anchors = [] + Caption = 'Viskozita 2' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + ExplicitLeft = 811 + ExplicitTop = 1 + end + object edtStroj: TEdit + AlignWithMargins = True + Left = 17 + Top = 48 + Width = 191 + Height = 29 + Align = alBottom + MaxLength = 100 + TabOrder = 0 + OnChange = edtStrojChange + end + object edtTesto: TEdit + AlignWithMargins = True + Left = 214 + Top = 48 + Width = 234 + Height = 29 + Align = alBottom + MaxLength = 100 + TabOrder = 1 + OnChange = edtTestoChange + end + object GridPanel3: TGridPanel + Left = 605 + Top = 1 + Width = 154 + Height = 79 + Align = alClient + ColumnCollection = < + item + Value = 88.027489785109650000 + end + item + Value = 11.972510214890350000 + end> + ControlCollection = < + item + Column = 0 + Control = edtDatVypousteni + Row = 0 + end + item + Column = 1 + Control = Label2 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + object edtDatVypousteni: TJvDatePickerEdit + AlignWithMargins = True + Left = 21 + Top = 46 + Width = 112 + Height = 29 + Margins.Left = 20 + Margins.Right = 2 + Align = alBottom + AllowNoDate = True + Anchors = [] + Checked = False + TabOrder = 0 + OnChange = edtDatVypousteniChange + end + object Label2: TLabel + AlignWithMargins = True + Left = 138 + Top = 52 + Width = 12 + Height = 21 + Margins.Bottom = 5 + Align = alBottom + Caption = 'X' + OnClick = Label2Click + ExplicitWidth = 9 + end + end + object Label4: TLabel + AlignWithMargins = True + Left = 1 + Top = 54 + Width = 10 + Height = 21 + Margins.Left = 0 + Margins.Bottom = 5 + Align = alBottom + Caption = 'X' + OnClick = Label4Click + ExplicitWidth = 9 + end + end + object grdSeznamTesta: TJvDBGrid + Left = 1 + Top = 130 + Width = 860 + Height = 355 + Align = alClient + DataSource = dm.dsPrehledMicharna + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 2 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnCellClick = grdSeznamTestaCellClick + OnDrawColumnCell = grdSeznamTestaDrawColumnCell + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colIDPrikaz' + Visible = False + end + item + Expanded = False + FieldName = 'colIDStroj' + Visible = False + end + item + Expanded = False + FieldName = 'colStroj' + Title.Caption = 'Stroj' + Width = 195 + Visible = True + end + item + Expanded = False + FieldName = 'colTesto' + Title.Caption = 'T'#283'sto' + Width = 238 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colStartMichani' + Title.Alignment = taCenter + Title.Caption = 'P'#345#237'prava t'#283'sta' + Width = 154 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKonecMichani' + Title.Alignment = taCenter + Title.Caption = 'Vypou'#353't'#283'n'#237 + Width = 154 + Visible = True + end + item + Expanded = False + FieldName = 'colViskozita' + Title.Caption = ' ' + Width = 40 + Visible = True + end + item + Expanded = False + FieldName = 'colViskozita2' + Title.Caption = ' ' + Width = 40 + Visible = True + end + item + Expanded = False + FieldName = 'colIDPMZ' + Visible = False + end + item + Expanded = False + FieldName = 'colIDOperStartStop' + Visible = False + end> + end + object grdReceptura: TJvDBGrid + Left = 1 + Top = 485 + Width = 860 + Height = 250 + Align = alClient + DataSource = dm.dsDetailMicharna + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 3 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdRecepturaDrawColumnCell + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRC' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Visible = False + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'Surovina' + Width = 653 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnozstvi' + Title.Alignment = taCenter + Title.Caption = 'Mno'#382'stv'#237 + Width = 85 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPridano' + Title.Alignment = taCenter + Title.Caption = 'P'#345'id'#225'no' + Width = 85 + Visible = True + end> + end + object edtSuchaHmot: TLabeledEdit + Left = 740 + Top = 735 + Width = 121 + Height = 33 + Align = alRight + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 128 + EditLabel.Height = 33 + EditLabel.Caption = 'Such'#225' hmotnost: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 4 + Text = '' + ExplicitHeight = 29 + end + end +end diff --git a/frmPrehledMicharna.pas b/frmPrehledMicharna.pas new file mode 100644 index 0000000..f637acb --- /dev/null +++ b/frmPrehledMicharna.pas @@ -0,0 +1,196 @@ +unit frmPrehledMicharna; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, + ddPlugin_TLB, Vcl.ExtCtrls, Vcl.StdCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, + JvExDBGrids, JvDBGrid, Vcl.ComCtrls, RzDTP, Vcl.Mask, JvExMask, JvToolEdit, + JvMaskEdit, JvCheckedMaskEdit, JvDatePickerEdit; + +type + TformPrehledMicharna = class(TForm) + GridPanel1: TGridPanel; + Button1: TButton; + GridPanel2: TGridPanel; + grdSeznamTesta: TJvDBGrid; + grdReceptura: TJvDBGrid; + Label3: TLabel; + Label1: TLabel; + edtStroj: TEdit; + edtTesto: TEdit; + edtDatVypousteni: TJvDatePickerEdit; + edtSuchaHmot: TLabeledEdit; + GridPanel3: TGridPanel; + Label2: TLabel; + Label4: TLabel; + procedure grdSeznamTestaDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure grdRecepturaDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure edtStrojChange(Sender: TObject); + procedure edtTestoChange(Sender: TObject); + procedure edtDatVypousteniChange(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Label2Click(Sender: TObject); + procedure Label4Click(Sender: TObject); + procedure grdSeznamTestaCellClick(Column: TColumn); + private + function SuchaHmotnost: Extended; + procedure Filtruj; + public + Helios: IHelios; + end; + +var + formPrehledMicharna: TformPrehledMicharna; + idOperStartStop, idEvidRozpracOper: integer; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils; + +{$R *.dfm} + + + + procedure TformPrehledMicharna.edtDatVypousteniChange(Sender: TObject); + begin + Filtruj; + end; + + + + procedure TformPrehledMicharna.edtStrojChange(Sender: TObject); + begin + Filtruj; + end; + + + + procedure TformPrehledMicharna.edtTestoChange(Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformPrehledMicharna.Filtruj; + var filtr: string; + d: TDateTime; + begin + filtr:= ''; + + if (edtStroj.Text<>'') then + filtr:= 'UPPER(colStroj) LIKE "%' + edtStroj.Text.Trim.ToUpper + '%"'; + if (edtTesto.Text<>'') then + filtr:= IfThen(filtr='', '', filtr + ' AND ') + 'UPPER(colTesto) LIKE "%' + edtTesto.Text.Trim.ToUpper + '%"'; + + if not(edtDatVypousteni.IsEmpty) then + begin + d:= edtDatVypousteni.Date; + filtr:= IfThen(filtr='', '', filtr + ' AND ') + 'colKonecMichani>=''' + FormatDateTime('dd.mm.yyyy 00:00:01', d) + + ''' AND colKonecMichani<=''' + FormatDateTime('dd.mm.yyyy 23:59:59', d) + ''''; + end; + + + dm.vtPrehledMicharna.Filter:= filtr; + dm.vtPrehledMicharna.Filtered:= (filtr<>''); + dm.vtPrehledMicharna.First; + + end; + + + + + procedure TformPrehledMicharna.FormShow(Sender: TObject); + begin +// edtDatVypousteni.Date:= 0; + dm.NactiVytvorenaTesta (self); + end; + + + + + function TformPrehledMicharna.SuchaHmotnost: Extended; + var i: integer; + begin + result:= 0; + i:= dm.vtDetailMicharna.RecNo; + dm.vtDetailMicharna.DisableControls; + + dm.vtDetailMicharna.First; + while not(dm.vtDetailMicharna.Eof) do + begin + result:= result + dm.vtDetailMicharna.FieldByName('colMnozstvi').AsExtended; + dm.vtDetailMicharna.Next; + end; + + dm.vtDetailMicharna.EnableControls; + dm.vtDetailMicharna.RecNo:= i; + end; + + + + + procedure TformPrehledMicharna.grdRecepturaDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdReceptura.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; // seda + end; + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformPrehledMicharna.grdSeznamTestaCellClick (Column: TColumn); + begin + if (dm.vtPrehledMicharna.RecordCount>0) then + begin + idOperStartStop:= dm.vtPrehledMicharna.FieldByName('colIDOperStartStop').AsInteger; + idEvidRozpracOper:= dm.vtPrehledMicharna.FieldByName('colIDEvidRozpracOper').AsInteger; + dm.NactiDetailTesta (self, idEvidRozpracOper, idOperStartStop); + edtSuchaHmot.Text:= SuchaHmotnost.ToString; + end; + end; + + + + + procedure TformPrehledMicharna.grdSeznamTestaDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdSeznamTesta.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; // seda + end; + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformPrehledMicharna.Label2Click(Sender: TObject); + begin + edtDatVypousteni.Clear; + end; + + + + + procedure TformPrehledMicharna.Label4Click(Sender: TObject); + begin + edtTesto.Text:= ''; + edtStroj.Text:= ''; + edtDatVypousteni.Clear; + Filtruj; + end; + +end. diff --git a/frmPrijemNestandard.dfm b/frmPrijemNestandard.dfm new file mode 100644 index 0000000..98232ea --- /dev/null +++ b/frmPrijemNestandard.dfm @@ -0,0 +1,479 @@ +object formPrijemNestandard: TformPrijemNestandard + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' P'#345#237'jem NESTANDARD' + ClientHeight = 749 + ClientWidth = 625 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object grdPrijemNestandard: TDBGrid + Left = 8 + Top = 44 + Width = 605 + Height = 219 + DataSource = dm.dsPrijemNestandard + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + ParentFont = False + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [fsBold] + OnCellClick = grdPrijemNestandardCellClick + OnDrawColumnCell = grdPrijemNestandardDrawColumnCell + Columns = < + item + Expanded = False + FieldName = 'fID' + Visible = False + end + item + Expanded = False + FieldName = 'fCislo' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fSZ' + Title.Alignment = taCenter + Width = 34 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fRegCis' + Title.Alignment = taCenter + Width = 120 + Visible = True + end + item + Expanded = False + FieldName = 'fNazev1' + Width = 364 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'fMJ' + Title.Alignment = taCenter + Width = 50 + Visible = True + end> + end + object Panel1: TPanel + Left = 23 + Top = 274 + Width = 580 + Height = 131 + TabOrder = 1 + object Label1: TLabel + Left = 21 + Top = 8 + Width = 95 + Height = 21 + Caption = #268#237'slo v'#253'robku' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label2: TLabel + Left = 266 + Top = 36 + Width = 43 + Height = 21 + Caption = 'N'#225'zev' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 21 + Top = 96 + Width = 32 + Height = 21 + Caption = 'Stroj' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object edtSZ: TEdit + Left = 156 + Top = 5 + Width = 51 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + MaxLength = 3 + ReadOnly = True + TabOrder = 0 + end + object edtRegCis: TEdit + Left = 213 + Top = 5 + Width = 104 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + MaxLength = 30 + ReadOnly = True + TabOrder = 1 + end + object edtNazev1: TEdit + Left = 6 + Top = 57 + Width = 565 + Height = 33 + Alignment = taCenter + AutoSize = False + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + MaxLength = 100 + ParentFont = False + ReadOnly = True + TabOrder = 2 + end + object edtStroj: TEdit + Left = 156 + Top = 96 + Width = 261 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + MaxLength = 3 + ParentFont = False + ReadOnly = True + TabOrder = 3 + end + end + object Panel2: TPanel + Left = 23 + Top = 411 + Width = 580 + Height = 118 + TabOrder = 2 + object Label4: TLabel + Left = 23 + Top = 10 + Width = 44 + Height = 21 + Caption = 'Paleta:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label5: TLabel + Left = 23 + Top = 57 + Width = 102 + Height = 21 + Caption = 'Datum v'#253'roby:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label6: TLabel + Left = 23 + Top = 88 + Width = 115 + Height = 21 + Caption = 'Datum spot'#345'eby:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label7: TLabel + Left = 291 + Top = 57 + Width = 51 + Height = 21 + Caption = 'Sm'#283'na:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label8: TLabel + Left = 291 + Top = 88 + Width = 41 + Height = 21 + Caption = #352'ar'#382'e:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object edtPaletList: TEdit + Left = 83 + Top = 7 + Width = 118 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + MaxLength = 30 + ReadOnly = True + TabOrder = 0 + end + object btnVyberPL: TButton + Left = 216 + Top = 4 + Width = 173 + Height = 35 + Caption = 'Vybrat paletov'#253' list' + TabOrder = 1 + OnClick = btnVyberPLClick + end + object edtDatVyroba: TRzDateTimePicker + Left = 147 + Top = 53 + Width = 104 + Height = 29 + Date = 45234.000000000000000000 + Format = '' + Time = 0.454477361112367400 + Enabled = False + TabOrder = 2 + TabStop = False + end + object edtDatSpotreba: TRzDateTimePicker + Left = 147 + Top = 85 + Width = 104 + Height = 29 + Date = 45234.000000000000000000 + Format = '' + Time = 0.454504768516926600 + Enabled = False + TabOrder = 3 + TabStop = False + OnChange = edtDatSpotrebaChange + end + object edtSarze: TEdit + Left = 353 + Top = 85 + Width = 104 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + MaxLength = 30 + ReadOnly = True + TabOrder = 4 + end + object edtSmena: TEdit + Left = 353 + Top = 53 + Width = 42 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + MaxLength = 1 + ReadOnly = True + TabOrder = 5 + end + end + object Panel3: TPanel + Left = 95 + Top = 538 + Width = 382 + Height = 134 + TabOrder = 3 + object Label9: TLabel + Left = 23 + Top = 20 + Width = 17 + Height = 21 + Caption = 'kg' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label10: TLabel + Left = 144 + Top = 20 + Width = 106 + Height = 21 + Caption = 'Paletov'#253' list na:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object edtKA: TNumberBox + Left = 53 + Top = 17 + Width = 60 + Height = 29 + Alignment = taCenter + AutoSize = False + MaxLength = 3 + TabOrder = 0 + OnChangeValue = edtKAChangeValue + OnExit = edtKAExit + end + object btnPLTisk: TButton + Left = 236 + Top = 68 + Width = 100 + Height = 35 + Caption = 'Tisk' + TabOrder = 1 + end + object rgPocetKopii: TRadioGroup + Left = 23 + Top = 53 + Width = 185 + Height = 53 + Caption = 'Po'#269'et kopi'#237 + TabOrder = 2 + end + object rb1Kopie: TRadioButton + Left = 36 + Top = 78 + Width = 39 + Height = 17 + Caption = '1' + TabOrder = 4 + end + object rb2Kopie: TRadioButton + Left = 110 + Top = 78 + Width = 39 + Height = 17 + Caption = '2' + TabOrder = 5 + end + object cbTiskNaObraz: TCheckBox + Left = 265 + Top = 23 + Width = 97 + Height = 17 + Caption = 'obrazovku' + TabOrder = 3 + OnClick = cbTiskNaObrazClick + end + end + object btnZapisPaletyNestandard: TButton + Left = 187 + Top = 688 + Width = 231 + Height = 45 + Caption = 'Z'#225'pis nov'#283' vyroben'#233' palety' + Enabled = False + TabOrder = 4 + OnClick = btnZapisPaletyNestandardClick + end + object Panel4: TPanel + Left = 8 + Top = 9 + Width = 605 + Height = 34 + TabOrder = 5 + object edtFiltrRegCis: TEdit + Left = 50 + Top = 3 + Width = 121 + Height = 29 + MaxLength = 30 + TabOrder = 1 + OnChange = edtFiltrRegCisChange + end + object btnFiltrClear: TButton + Left = -3 + Top = 2 + Width = 20 + Height = 31 + Caption = 'X' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 2 + TabStop = False + OnClick = btnFiltrClearClick + end + object edtFiltrSZ: TEdit + Left = 15 + Top = 3 + Width = 35 + Height = 29 + Alignment = taCenter + MaxLength = 3 + TabOrder = 0 + OnChange = edtFiltrSZChange + end + object edtFiltrNazev1: TEdit + Left = 171 + Top = 3 + Width = 364 + Height = 29 + MaxLength = 100 + TabOrder = 3 + OnChange = edtFiltrNazev1Change + end + end +end diff --git a/frmPrijemNestandard.pas b/frmPrijemNestandard.pas new file mode 100644 index 0000000..96a4b46 --- /dev/null +++ b/frmPrijemNestandard.pas @@ -0,0 +1,289 @@ +unit frmPrijemNestandard; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.NumberBox, + Vcl.ComCtrls, RzDTP, + ddPlugin_TLB, uUtils, ColorButton; + +type + TformPrijemNestandard = class(TForm) + grdPrijemNestandard: TDBGrid; + Panel1: TPanel; + Panel2: TPanel; + Panel3: TPanel; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + edtSZ: TEdit; + edtRegCis: TEdit; + edtNazev1: TEdit; + edtStroj: TEdit; + Label4: TLabel; + edtPaletList: TEdit; + btnVyberPL: TButton; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + Label8: TLabel; + edtDatVyroba: TRzDateTimePicker; + edtDatSpotreba: TRzDateTimePicker; + edtSarze: TEdit; + edtSmena: TEdit; + Label9: TLabel; + Label10: TLabel; + btnZapisPaletyNestandard: TButton; + edtKA: TNumberBox; + btnPLTisk: TButton; + Panel4: TPanel; + edtFiltrRegCis: TEdit; + btnFiltrClear: TButton; + edtFiltrSZ: TEdit; + edtFiltrNazev1: TEdit; + rgPocetKopii: TRadioGroup; + cbTiskNaObraz: TCheckBox; + rb1Kopie: TRadioButton; + rb2Kopie: TRadioButton; + procedure FormShow(Sender: TObject); + procedure grdPrijemNestandardCellClick(Column: TColumn); + procedure btnFiltrClearClick(Sender: TObject); + procedure edtFiltrRegCisChange(Sender: TObject); + procedure edtFiltrSZChange(Sender: TObject); + procedure edtFiltrNazev1Change(Sender: TObject); + procedure btnZapisPaletyNestandardClick(Sender: TObject); + procedure btnVyberPLClick(Sender: TObject); + procedure edtDatSpotrebaChange(Sender: TObject); + procedure grdPrijemNestandardDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure cbTiskNaObrazClick(Sender: TObject); + procedure edtKAExit(Sender: TObject); + procedure edtKAChangeValue(Sender: TObject); + private + function VytvorFilter: string; + public + Helios: IHelios; + aktIdStroj: integer; + end; + +var + formPrijemNestandard: TformPrijemNestandard; + idKZ, idStroj: integer; + filtr: string; + nahledTisku: boolean; + +implementation +uses System.StrUtils, System.DateUtils, Math, + datMod, helUtils, frmVyberPL; + +{$R *.dfm} + + + function TformPrijemNestandard.VytvorFilter: string; + begin + result:= ''; + + if (edtFiltrRegCis.Text<>'') then + result:= 'UPPER(fRegCis) LIKE "%' + edtFiltrRegCis.Text.Trim.ToUpper + '%"'; + if (edtFiltrSZ.Text<>'') then + result:= IfThen(result='', '', result + ' AND ') + 'UPPER(fSZ) LIKE "%' + edtFiltrSZ.Text.Trim.ToUpper + '%"'; + if (edtFiltrNazev1.Text<>'') then + result:= IfThen(result='', '', result + ' AND ') + 'UPPER(fNazev1) LIKE "%' + edtFiltrNazev1.Text.Trim.ToUpper + '%"'; + + dm.vtPrijemNestandard.Filter:= result; + dm.vtPrijemNestandard.Filtered:= (result<>''); + end; + + + + + procedure TformPrijemNestandard.btnFiltrClearClick (Sender: TObject); + begin + edtFiltrRegCis.Text:= ''; + edtFiltrSZ.Text:= ''; + edtFiltrNazev1.Text:= ''; + dm.vtPrijemNestandard.Filter:= ''; + dm.vtPrijemNestandard.Filtered:= false; + + idKZ:= 0; + edtSZ.Text:= ''; + edtRegCis.Text:= ''; + edtNazev1.Text:= ''; + edtDatSpotreba.DateTime:= 0; + + end; + + + + + procedure TformPrijemNestandard.btnVyberPLClick (Sender: TObject); +{ + var f: TformVyberPL; + begin + f:= TformVyberPL.Create(nil); + try + f.Helios:= Helios; + f.typVyberu:= 1; + f.ShowModal; + if (f.mrVal=10) then // ok + begin + edtPaletList.Text:= f.paletList; + end; + finally + f.Free; + end; + end; +} + var lSQL: string; + begin +{ + lSQL:= 'IF OBJECT_ID(N''dbo.ef_Vyroba_VratNovyPaletovyList'') IS NOT NULL SELECT dbo.ef_Vyroba_VratNovyPaletovyList (1, default,default,default) ELSE SELECT 8200000'; + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + edtPaletList.Text:= VarToStr(FieldValues(0)); +} + edtPaletList.Text:= helUtils.getHeliosStrVal (Helios, '5200001', 'SELECT dbo.ef_Vyroba_VratNovyPaletovyList (1, default, default, default)'); + edtSarze.Text:= helUtils.getHeliosStrVal (Helios, '', 'SELECT dbo.ef_Vyroba_VratCisloSarze (default, default, default)') + end; + + + + procedure TformPrijemNestandard.btnZapisPaletyNestandardClick (Sender: TObject); + begin + edtPaletList.Text:= edtPaletList.Text.Trim; + edtSarze.Text:= edtSarze.Text.Trim; + + if (edtPaletList.Text='') then + Helios.Error(#1'Není načten Paletový list'#1) + else + dm.ZapisVyrobenePaletyNestandard (self, idKZ, idStroj); + end; + + + + + procedure TformPrijemNestandard.cbTiskNaObrazClick (Sender: TObject); + begin + rgPocetKopii.Visible:= not(cbTiskNaObraz.Checked); + rb1Kopie.Visible:= not(cbTiskNaObraz.Checked); + rb2Kopie.Visible:= not(cbTiskNaObraz.Checked); + end; + + + + procedure TformPrijemNestandard.edtDatSpotrebaChange (Sender: TObject); + begin +// edtDatSpotreba.Format:= FormatSettings.ShortDateFormat; + end; + + + + procedure TformPrijemNestandard.edtFiltrNazev1Change (Sender: TObject); + begin + VytvorFilter; + end; + + + + procedure TformPrijemNestandard.edtFiltrRegCisChange (Sender: TObject); + begin + VytvorFilter; + end; + + + + + procedure TformPrijemNestandard.edtFiltrSZChange (Sender: TObject); + begin + edtFiltrSZ.Text:= edtFiltrSZ.Text.Trim; + VytvorFilter; + end; + + + + + procedure TformPrijemNestandard.edtKAChangeValue(Sender: TObject); + begin + btnZapisPaletyNestandard.Enabled:= (edtKA.Value>0); + end; + + + + procedure TformPrijemNestandard.edtKAExit(Sender: TObject); + begin + btnZapisPaletyNestandard.Enabled:= (edtKA.Value>0); + end; + + + + + procedure TformPrijemNestandard.FormShow (Sender: TObject); + var lSQL: string; + begin + + nahledTisku:= false; + + idStroj:= datMod.bmIdStroj; // helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblCStroju + ' WHERE Blokovano=0 AND Nazev LIKE N''%přepracování%'''); + edtStroj.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT nazev FROM ' + tblCStroju + ' WHERE ID=' + idStroj.ToString); + + edtDatVyroba.DateTime:= Now; + lSQL:= 'DECLARE @d DATETIME=GETDATE(); SELECT Smena FROM dbo.ef_GetDatumASmenu (@d)'; + with Helios.OpenSQL(lSQL) do + edtSmena.Text:= VarToStr(FieldByNameValues('Smena')); + + dm.NactiVyrobkyNestandard (self); + ShowScrollbar(grdPrijemNestandard.Handle, SB_VERT, true) + + end; + + + + + procedure TformPrijemNestandard.grdPrijemNestandardCellClick(Column: TColumn); + var zarukaTyp: integer; + zarukaNum: extended; + d: TDateTime; + begin + idKZ:= dm.vtPrijemNestandard.FieldByName('fID').AsInteger; + edtSZ.Text:= dm.vtPrijemNestandard.FieldByName('fSZ').AsString; + edtRegCis.Text:= dm.vtPrijemNestandard.FieldByName('fRegCis').AsString; + edtNazev1.Text:= dm.vtPrijemNestandard.FieldByName('fNazev1').AsString; + + zarukaNum:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString); + zarukaTyp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TypZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString); // 0-Den, 1-Mesic, 2-Rok + + d:= Now; + if (zarukaTyp=0) then + d:= IncDay(Now, Floor(zarukaNum)); + if (zarukaTyp=1) then + d:= IncMonth(Now, Floor(zarukaNum)); + if (zarukaTyp=2) then + d:= IncYear(Now, Floor(zarukaNum)); + + d:= EndOfTheMonth(d); + + edtDatSpotreba.Date:= d.GetDate; + + + if (edtKA.CanFocus) then + edtKA.SetFocus; + + + end; + + + + + procedure TformPrijemNestandard.grdPrijemNestandardDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdPrijemNestandard.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + +end. diff --git a/frmSarzeVydej.dfm b/frmSarzeVydej.dfm new file mode 100644 index 0000000..748ac26 --- /dev/null +++ b/frmSarzeVydej.dfm @@ -0,0 +1,576 @@ +object formSarzeVydej: TformSarzeVydej + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Vyberte materi'#225'l a zadejte jeho '#353'ar'#382'i' + ClientHeight = 693 + ClientWidth = 729 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 25 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 729 + Height = 693 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel2 + Row = 4 + end + item + Column = 0 + Control = grdMaterial + Row = 1 + end + item + Column = 0 + Control = GridPanel3 + Row = 2 + end + item + Column = 0 + Control = grdSarze + Row = 3 + end> + RowCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 40.000000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 30.000000000000000000 + end + item + Value = 10.000000000000000000 + end> + TabOrder = 0 + object GridPanel2: TGridPanel + Left = 1 + Top = 623 + Width = 727 + Height = 69 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnOK + Row = 0 + end + item + Column = 1 + Control = btnZrusit + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 727 + 69) + object btnOK: TButton + Left = 112 + Top = 14 + Width = 140 + Height = 40 + Anchors = [] + Caption = 'OK' + TabOrder = 0 + OnClick = btnOKClick + end + object btnZrusit: TButton + Left = 474 + Top = 14 + Width = 140 + Height = 40 + Anchors = [] + Caption = 'Zru'#353'it' + TabOrder = 1 + OnClick = btnZrusitClick + end + end + object grdMaterial: TJvDBUltimGrid + Left = 1 + Top = 70 + Width = 727 + Height = 276 + Align = alClient + DataSource = dm.dsMaterial + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 2 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnCellClick = grdMaterialCellClick + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 29 + TitleRowHeight = 29 + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colIDKmen' + Title.Alignment = taCenter + Title.Caption = #268#237'slo PL' + Visible = False + end + item + Alignment = taLeftJustify + Expanded = False + FieldName = 'colIDPrKVazba' + Title.Alignment = taCenter + Title.Caption = #352'ar'#382'e' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SK' + Width = 52 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRegCis' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Width = 117 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Width = 336 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnoz' + Title.Alignment = taCenter + Title.Caption = 'V'#253'dej' + Width = 117 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJ' + Title.Alignment = taCenter + Title.Caption = 'MJ' + Width = 78 + Visible = True + end + item + Expanded = False + FieldName = 'colIDPohyb' + Visible = False + end> + end + object GridPanel3: TGridPanel + Left = 1 + Top = 346 + Width = 727 + Height = 70 + Align = alClient + ColumnCollection = < + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 60.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnAdd + Row = 1 + end + item + Column = 1 + Control = btnDel + Row = 1 + end> + RowCollection = < + item + Value = 30.000000000000000000 + end + item + Value = 70.000000000000000000 + end> + TabOrder = 3 + DesignSize = ( + 727 + 70) + object btnAdd: TJvSpeedButton + Left = 51 + Top = 22 + Width = 45 + Height = 45 + Anchors = [] + Glyph.Data = { + 36100000424D3610000000000000360000002800000020000000200000000100 + 2000000000000010000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000200030A2C0148145A02921C7D02CC219403F1239C03FF239C03FF2195 + 03F31C7F02CF155C02960B2F014D010300050000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000010200040E3F + 01671F8903E0239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF1F8C03E50F44017001040006000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000061A012B1D7F03CF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF1E8403D7071F01330000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000A2E014B229503F4239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF229803F80C35 + 0157000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000A2D014A229803F9239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239A + 03FC0C3501570000000000000000000000000000000000000000000000000000 + 0000000000000000000005180028219503F3239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF229803F8071F013300000000000000000000000000000000000000000000 + 000000000000000100021C7C02CB239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF1E8403D701040006000000000000000000000000000000000000 + 0000000000000D3B0160239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF0F440170000000000000000000000000000000000000 + 0000000100011E8503D9239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF1F8C03E5010300050000000000000000000000000000 + 00000825013D239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF0B2F014D0000000000000000000000000000 + 000013520287239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF155C02960000000000000000000000000000 + 00001A7502BF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF1C7F02CF0000000000000000000000000000 + 00001F8B03E3239C03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF239C03FF239C + 03FF239C03FF239C03FF239C03FF229503F30000000000000000000000000000 + 0000219303F0239C03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 0000219203EF239C03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF0000000000000000000000000000 + 00001F8903E0239C03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF239C03FF239C + 03FF239C03FF239C03FF239C03FF219303F10000000000000000000000000000 + 00001A7302BC239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF1C7D02CC0000000000000000000000000000 + 000012500283239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF145A02920000000000000000000000000000 + 000008220137239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF0A2C01480000000000000000000000000000 + 0000000000001D8103D3239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF1F8903E0000200030000000000000000000000000000 + 0000000000000C350157239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF0E3F0167000000000000000000000000000000000000 + 000000000000000100011B7702C2239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF1D7F03CF01030004000000000000000000000000000000000000 + 0000000000000000000005140021219103ED239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF229503F4061A012B00000000000000000000000000000000000000000000 + 00000000000000000000000000000927013F229603F5239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF2298 + 03F90A2E014B0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000927013F219203EE239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF219503F30A2D + 014A000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000051400211B7702C2239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF239C03FF239C03FF1C7C02CB061801280000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000100010C35 + 01571D8103D3239C03FF239C03FF239C03FF239C03FF239C03FF239C03FF239C + 03FF239C03FF239C03FF239C03FF1E8503D90D3B016000010002000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000008220138125002831A7302BC1F8A03E1219203EF219203EF1F8A + 03E21A7502BF135202870825013D000100010000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000} + OnClick = btnAddClick + ExplicitLeft = 48 + end + object btnDel: TJvSpeedButton + Left = 196 + Top = 22 + Width = 45 + Height = 45 + Anchors = [] + Glyph.Data = { + 36100000424D3610000000000000360000002800000020000000200000000100 + 2000000000000010000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000004041D240E0E667D15159EC01A1AC2ED1C1CD1FF1C1CD1FF1A1A + C4EF1616A1C40E0E6A8205052229000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000404 + 1A2013138BA91C1CCFFD1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD0FE141491B10404202700000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000A0A47571B1B + C6F21C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1B1BCBF70B0B5163000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000C0C596D1C1CD0FE1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF0E0E657C0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000090945541C1CD0FE1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF0B0B + 5163000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000303181D1A1AC5F01C1CD1FF1C1CD1FF1C1C + D1FF1B1BCCF909094251121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF15159BBD070735411A1AC5F01C1CD1FF1C1CD1FF1C1CD1FF1B1B + CBF7040420270000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000121284A11C1CD1FF1C1CD1FF1C1CD1FF1B1B + CCF90909404E0000000000000203121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF15159BBD0101080A0000000006062D371A1AC5F01C1CD1FF1C1CD1FF1C1C + D1FF141492B10000000000000000000000000000000000000000000000000000 + 000000000000000000000303171C1C1CCEFB1C1CD1FF1C1CD1FF1C1CD1FF0A0A + 485800000000000000000000000000000203121287A41C1CD1FF1C1CD1FF1414 + 91B10101060700000000000000000000000006062E381C1CCEFB1C1CD1FF1C1C + D1FF1C1CD0FE0505212900000000000000000000000000000000000000000000 + 000000000000000000000D0D5D721C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1515 + 9BBD0101080A00000000000000000000000000000203121287A4141491B10101 + 05060000000000000000000000000000020311117D981C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF0E0E6A8200000000000000000000000000000000000000000000 + 00000000000000000000141494B41C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF15159BBD0101080A00000000000000000000000000000203010105060000 + 0000000000000000000000000203121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1616A1C400000000000000000000000000000000000000000000 + 000000000000000000001919B7DF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF15159BBD0101080A000000000000000000000000000000000000 + 00000000000000000203121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1A1AC4EF00000000000000000000000000000000000000000000 + 000000000000000000001A1AC5F01C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF15159BBD0101080A0000000000000000000000000000 + 00000101050613138CAA1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF00000000000000000000000000000000000000000000 + 000000000000000000001A1AC4EF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF141491B1010105060000000000000000000000000000 + 000000000203121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF00000000000000000000000000000000000000000000 + 000000000000000000001919B5DD1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF141491B101010506000000000000000000000000000000000000 + 00000000000000000203121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1A1AC2ED00000000000000000000000000000000000000000000 + 00000000000000000000131391B01C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF141491B101010506000000000000000000000000010105060101080A0000 + 0000000000000000000000000203121287A41C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF15159EC000000000000000000000000000000000000000000000 + 000000000000000000000C0C596D1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1414 + 91B10101050600000000000000000000000001010506141491B115159BBD0101 + 080A00000000000000000000000000000203121287A41C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF0E0E667D00000000000000000000000000000000000000000000 + 00000000000000000000030314181B1BCCF91C1CD1FF1C1CD1FF1C1CD1FF0B0B + 4F6100000000000000000000000001010506141491B11C1CD1FF1C1CD1FF1515 + 9BBD0101080A000000000000000000000000090942511C1CD1FF1C1CD1FF1C1C + D1FF1C1CCFFD04041D2400000000000000000000000000000000000000000000 + 000000000000000000000000000011117E991C1CD1FF1C1CD1FF1C1CD1FF1C1C + CFFC0A0A4A5B0000000001010506141491B11C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF15159BBD0101080A000000000909404E1B1BCCF91C1CD1FF1C1CD1FF1C1C + D1FF13138BA90000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000030313171A1AC1EB1C1CD1FF1C1CD1FF1C1C + D1FF1C1CCFFC0B0B4F61141491B11C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF15159BBD0A0A48581B1BCCF91C1CD1FF1C1CD1FF1C1CD1FF1B1B + C6F204041A200000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000008083C491C1CCFFC1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD0FE0A0A + 4757000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000A0A4C5D1C1CCFFC1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD0FE0C0C596D0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000008083C491A1A + C1EB1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1A1AC5F009094554000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000303 + 131711117E991B1BCCF91C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1CD1FF1C1C + D1FF1C1CD1FF1C1CD1FF1C1CCEFB121284A10303181D00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000030314180C0C596D131391B01818B5DD1A1AC4EF1A1AC4EF1919 + B7DF141494B40D0D5D720303171C000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000} + OnClick = btnDelClick + ExplicitTop = 32 + end + end + object grdSarze: TJvDBUltimGrid + Left = 1 + Top = 416 + Width = 727 + Height = 207 + Align = alClient + DataSource = dm.dsSarze + Options = [dgEditing, dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 29 + TitleRowHeight = 29 + OnCanEditCell = grdSarzeCanEditCell + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colSarze' + Title.Alignment = taCenter + Title.Caption = #352'ar'#382'e' + Width = 572 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSarze2' + Title.Alignment = taCenter + Title.Caption = 'Datum po'#345#237'zen'#237 + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnoz' + Title.Alignment = taCenter + Title.Caption = 'V'#253'dej' + Width = 132 + Visible = True + end> + end + end +end diff --git a/frmSarzeVydej.pas b/frmSarzeVydej.pas new file mode 100644 index 0000000..2299bcc --- /dev/null +++ b/frmSarzeVydej.pas @@ -0,0 +1,209 @@ +unit frmSarzeVydej; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.ExtCtrls, Vcl.StdCtrls, + Data.DB, Vcl.Grids, Vcl.DBGrids, JvDBUltimGrid, JvExDBGrids, JvDBGrid, + JvExControls, JvSpeedButton; + +type + TformSarzeVydej = class(TForm) + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + btnOK: TButton; + btnZrusit: TButton; + grdMaterial: TJvDBUltimGrid; + grdSarze: TJvDBUltimGrid; + btnAdd: TJvSpeedButton; + btnDel: TJvSpeedButton; + procedure btnOKClick (Sender: TObject); + procedure btnZrusitClick (Sender: TObject); + procedure FormShow(Sender: TObject); + procedure grdMaterialCellClick(Column: TColumn); + procedure grdSarzeCanEditCell(Grid: TJvDBGrid; Field: TField; + var AllowEdit: Boolean); + procedure btnAddClick(Sender: TObject); + procedure btnDelClick(Sender: TObject); + private + function TestOK: boolean; + public + idVydejka: integer; + sIdPohybuOZ: string; + Helios: IHelios; + mrVal: integer; + retOK: boolean; + end; + +var + formSarzeVydej: TformSarzeVydej; + idKZ, idPZ: integer; + +implementation +uses System.StrUtils, + datMod, helUtils; + +{$R *.dfm} + + + + function TformSarzeVydej.TestOK: Boolean; + var i: integer; + begin + result:= true; + if (dm.vtMaterial.RecordCount>0) then + begin + dm.vtMaterial.DisableControls; + i:= dm.vtMaterial.RecNo; + dm.vtMaterial.First; + while not(dm.vtMaterial.Eof) do + begin + if not(dm.vtMaterial.FieldByName('colMamSarzi').AsBoolean) then + result:= false; + dm.vtMaterial.Next; + end; + dm.vtMaterial.RecNo:= i; + dm.vtMaterial.EnableControls; + end; + end; + + + + + procedure TformSarzeVydej.btnAddClick (Sender: TObject); + var s: string; + begin + s:= InputBox ('ŠARŽE', 'Zadejte šarži materiálu:', '').Trim; + if (s<>'') then + begin + if not(dm.vtSarze.Active) then + dm.vtSarze.Open; + dm.vtSarze.Append; + dm.vtSarze.FieldByName('colSarze').AsString:= s; + dm.vtSarze.FieldByName('colMnoz').AsInteger:= 0; + dm.vtSarze.FieldByName('colIDKmen').AsInteger:= idKZ; + dm.vtSarze.FieldByName('colIDPohybOZ').AsInteger:= idPZ; + dm.vtSarze.Post; + + dm.vtMaterial.Edit; + dm.vtMaterial.FieldByName('colMamSarzi').AsBoolean:= true; + dm.vtMaterial.Post; + + end; + end; + + + + + procedure TformSarzeVydej.btnDelClick (Sender: TObject); + var f: string; + begin + if not(dm.vtSarze.Active) then + dm.vtSarze.Open; + + if not(dm.vtSarze.IsEmpty) then + dm.vtSarze.Delete; + + dm.vtSarze.Refresh; + if (dm.vtSarze.IsEmpty) then + begin + dm.vtMaterial.Edit; + dm.vtMaterial.FieldByName('colMamSarzi').AsBoolean:= false; + dm.vtMaterial.Post; + end; + + end; + + + + + procedure TformSarzeVydej.btnOKClick (Sender: TObject); + var lSQL, s: string; + idPZ: Integer; + begin + if (dm.vtMaterial.RecordCount>0) then + begin + if (TestOK) then + begin + dm.vtSarze.Filtered:= false; + if not(dm.vtSarze.IsEmpty) then + begin + dm.vtSarze.First; + while not(dm.vtSarze.Eof) do + begin + idPZ:= dm.vtSarze.FieldByName('colIDPohybOZ').AsInteger; + + lSQL:= 'INSERT dbo._TabVyroba_VydejMatSarze (IDPohybZbozi, Sarze) SELECT ' + idPZ.ToString + ', N' + dm.vtSarze.FieldByName('colSarze').AsString.Trim.QuotedString; + Helios.ExecSQL(lSQL); + + s:= helUtils.getHeliosStrVal(Helios, '', 'SELECT _Vyroba_Sarze FROM ' + tblPZe + ' WHERE ID=' + idPZ.ToString); + s:= s + IfThen(s<>'', ',', '') + dm.vtSarze.FieldByName('colSarze').AsString.Trim; + + lSQL:= 'UPDATE ' + tblPZe + ' SET _Vyroba_Sarze=N' + s.QuotedString; + lSQL:= lSQL + ' WHERE ID=' + dm.vtSarze.FieldByName('colIDPohybOZ').AsString + CRLF + 'IF (@@ROWCOUNT=0) INSERT ' + tblPZe + ' (ID, _Vyroba_Sarze)'; + lSQL:= lSQL + ' SELECT ' + dm.vtSarze.FieldByName('colIDPohybOZ').AsString + ', N' + s.QuotedString; + Helios.ExecSQL(lSQL); + dm.vtSarze.Next; + end; + end; + + mrVal:= 10; + Close; + end; + end + else + begin + mrVal:= 10; + Close; + end; + end; + + + + + procedure TformSarzeVydej.btnZrusitClick (Sender: TObject); + begin + mrVal:= 0; + Close; + end; + + + + + procedure TformSarzeVydej.FormShow (Sender: TObject); + begin + if (idVydejka>0) or (sIdPohybuOZ<>'') then + begin + dm.NactiMaterialyProSarze (idVydejka, sIdPohybuOZ); + grdMaterial.Invalidate; + end; + end; + + + + + procedure TformSarzeVydej.grdMaterialCellClick (Column: TColumn); + begin + idKZ:= dm.vtMaterial.FieldByName('colIDKmen').AsInteger; + idPZ:= dm.vtMaterial.FieldByName('colIDPohyb').AsInteger; + dm.NactiSarzeProMaterial (idKZ, idPZ); + + dm.vtSarze.Filter:= 'colIDKmen=' + idKZ.ToString; + dm.vtSarze.Filtered:= true; + + grdSarze.Invalidate; + end; + + + + + procedure TformSarzeVydej.grdSarzeCanEditCell(Grid: TJvDBGrid; Field: TField; var AllowEdit: Boolean); + begin + AllowEdit:= (Field=dm.vtSarze.FieldByName('colMnoz')); + end; + + + +end. diff --git a/frmSeznamPalet.dfm b/frmSeznamPalet.dfm new file mode 100644 index 0000000..f109a7a --- /dev/null +++ b/frmSeznamPalet.dfm @@ -0,0 +1,367 @@ +object formSeznamPalet: TformSeznamPalet + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Seznam palet ' + ClientHeight = 797 + ClientWidth = 948 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 948 + Height = 797 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdSeznamPalet + Row = 1 + end + item + Column = 0 + Control = edtVyrobniDen + Row = 0 + end + item + Column = 0 + Control = GridPanel2 + Row = 2 + end> + RowCollection = < + item + Value = 6.000000000000000000 + end + item + Value = 78.000000000000000000 + end + item + Value = 16.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 948 + 797) + object grdSeznamPalet: TJvDBGrid + Left = 1 + Top = 49 + Width = 946 + Height = 620 + Align = alClient + DataSource = dm.dsSeznamPalet + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnCellClick = grdSeznamPaletCellClick + OnDrawColumnCell = grdSeznamPaletDrawColumnCell + OnMouseUp = grdSeznamPaletMouseUp + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colID' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPaletovyList' + Title.Alignment = taCenter + Title.Caption = 'Paletov'#253' list' + Width = 121 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Width = 38 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRC' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Width = 95 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Width = 301 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnozstvi' + Title.Alignment = taCenter + Title.Caption = 'Mno'#382'stv'#237 + Width = 82 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPocetKA' + Title.Alignment = taCenter + Title.Caption = 'Po'#269'et KA' + Width = 79 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatum' + Title.Alignment = taCenter + Title.Caption = 'Datum' + Width = 140 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSmena' + Title.Alignment = taCenter + Title.Caption = 'Sm'#283'na' + Visible = False + end + item + Expanded = False + FieldName = 'colDatPorizeni' + Visible = False + end + item + Expanded = False + FieldName = 'colSklad' + Title.Alignment = taCenter + Title.Caption = 'Sklad' + Width = 61 + Visible = True + end> + end + object edtVyrobniDen: TLabeledEdit + Left = 463 + Top = 11 + Width = 121 + Height = 29 + TabStop = False + Anchors = [] + Color = 15790320 + EditLabel.Width = 96 + EditLabel.Height = 29 + EditLabel.Caption = 'V'#253'robn'#237' den: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 1 + Text = '' + end + object GridPanel2: TGridPanel + Left = 1 + Top = 669 + Width = 946 + Height = 127 + Align = alClient + ColumnCollection = < + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333310000 + end> + ControlCollection = < + item + Column = 0 + Control = btnTiskNahledSeznamuPalet + Row = 0 + end + item + Column = 1 + Control = GridPanel3 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 2 + DesignSize = ( + 946 + 127) + object btnTiskNahledSeznamuPalet: TButton + Left = 58 + Top = 36 + Width = 200 + Height = 55 + Anchors = [] + Caption = 'N'#225'hled seznamu palet' + TabOrder = 0 + end + object GridPanel3: TGridPanel + Left = 316 + Top = 1 + Width = 314 + Height = 125 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = edtPaletList + Row = 0 + end + item + Column = 0 + Control = pnlTiskKA + Row = 1 + end + item + Column = 0 + Control = pnlTiskPa + Row = 2 + end + item + Column = 0 + Control = pnlTiskPL + Row = 3 + end + item + Column = 1 + Control = btnTisk + Row = 1 + RowSpan = 3 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 314 + 125) + object edtPaletList: TLabeledEdit + Left = 166 + Top = 2 + Width = 121 + Height = 29 + Anchors = [] + Color = 15790320 + EditLabel.Width = 137 + EditLabel.Height = 29 + EditLabel.Caption = 'Opak. tisk k palet'#283': ' + LabelPosition = lpLeft + TabOrder = 0 + Text = '' + end + object pnlTiskKA: TPanel + AlignWithMargins = True + Left = 21 + Top = 35 + Width = 116 + Height = 24 + Margins.Left = 20 + Margins.Right = 20 + Align = alClient + AutoSize = True + Caption = 'KA '#353't'#237'tky' + ParentBackground = False + TabOrder = 1 + OnMouseDown = pnlTiskKAMouseDown + OnMouseUp = pnlTiskKAMouseUp + end + object pnlTiskPa: TPanel + AlignWithMargins = True + Left = 21 + Top = 65 + Width = 116 + Height = 25 + Margins.Left = 20 + Margins.Right = 20 + Align = alClient + AutoSize = True + Caption = 'Pa '#353't'#237'tek' + ParentBackground = False + TabOrder = 2 + OnMouseDown = pnlTiskPaMouseDown + OnMouseUp = pnlTiskPaMouseUp + end + object pnlTiskPL: TPanel + AlignWithMargins = True + Left = 21 + Top = 96 + Width = 116 + Height = 25 + Margins.Left = 20 + Margins.Right = 20 + Align = alClient + AutoSize = True + Caption = 'Paletov'#253' list' + ParentBackground = False + TabOrder = 3 + OnMouseDown = pnlTiskPLMouseDown + OnMouseUp = pnlTiskPLMouseUp + end + object btnTisk: TButton + AlignWithMargins = True + Left = 160 + Top = 47 + Width = 140 + Height = 55 + Margins.Top = 15 + Caption = 'Opakovan'#253' tisk'#13#10' ('#353't'#237'tky, PL..)' + TabOrder = 4 + end + end + end + end +end diff --git a/frmSeznamPalet.pas b/frmSeznamPalet.pas new file mode 100644 index 0000000..c718dd9 --- /dev/null +++ b/frmSeznamPalet.pas @@ -0,0 +1,184 @@ +unit frmSeznamPalet; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, + ddPlugin_TLB, JvExDBGrids, JvDBGrid, ColorButton, Vcl.Buttons; + +{$I iConsts.inc} + + +type + TformSeznamPalet = class(TForm) + GridPanel1: TGridPanel; + grdSeznamPalet: TJvDBGrid; + edtVyrobniDen: TLabeledEdit; + GridPanel2: TGridPanel; + btnTiskNahledSeznamuPalet: TButton; + GridPanel3: TGridPanel; + btnTisk: TButton; + edtPaletList: TLabeledEdit; + pnlTiskKA: TPanel; + pnlTiskPa: TPanel; + pnlTiskPL: TPanel; + procedure FormShow (Sender: TObject); + procedure grdSeznamPaletDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure btnOKClick (Sender: TObject); + procedure pnlTiskKAMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure pnlTiskKAMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure pnlTiskPLMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure pnlTiskPLMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure pnlTiskPaMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure pnlTiskPaMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure grdSeznamPaletMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure grdSeznamPaletCellClick(Column: TColumn); + private + public + Helios: IHelios; + idKmen, idStroj: integer; + den: TDateTime; + typ: byte; + end; + +var + formSeznamPalet: TformSeznamPalet; + typTisku: byte; + aktRow, aktCol: integer; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils; + +{$R *.dfm} + + procedure TformSeznamPalet.btnOKClick (Sender: TObject); + begin + Close; + end; + + + + + procedure TformSeznamPalet.FormShow (Sender: TObject); + begin + + SetWindowLong (btnTisk.Handle, GWL_STYLE, GetWindowLong((btnTisk as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + + edtVyrobniDen.Text:= FormatDateTime ('dd.mm.yyyy', den.GetDate); + dm.NactiSeznamPalet (self, typ, idKmen, idStroj, den); + + if (idKmen>0) then + begin + grdSeznamPalet.Columns.Items[5].Title.Caption:= helUtils.getHeliosStrVal(Helios, '', 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + grdSeznamPalet.Columns.Items[6].Title.Caption:= ' '; + end; + + typTisku:= 0; + + + end; + + + + + procedure TformSeznamPalet.grdSeznamPaletCellClick (Column: TColumn); + begin + edtPaletList.Text:= grdSeznamPalet.DataSource.DataSet.FieldByName('colPaletovyList').AsString; + end; + + + + procedure TformSeznamPalet.grdSeznamPaletDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdSeznamPalet.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + procedure TformSeznamPalet.grdSeznamPaletMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + aktRow:= TJvDBGrid(Sender).MouseCoord(X, Y).Y; + aktCol:= TJvDBGrid(Sender).MouseCoord(X, Y).X; + end; + + + + + procedure TformSeznamPalet.pnlTiskKAMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pnlTiskKA.BevelOuter:= bvLowered; + if (pnlTiskKA.Color=clBtnFace) then + begin + typTisku:= 1; + pnlTiskKA.Color:= $007BD97D; // zelena + pnlTiskPa.Color:= clBtnFace; + pnlTiskPL.Color:= clBtnFace; + end + else + pnlTiskKA.Color:= clBtnFace; + end; + + + + procedure TformSeznamPalet.pnlTiskKAMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pnlTiskKA.BevelOuter:= bvRaised; + end; + + + + procedure TformSeznamPalet.pnlTiskPaMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pnlTiskPa.BevelOuter:= bvLowered; + if (pnlTiskPa.Color=clBtnFace) then + begin + typTisku:= 2; + pnlTiskPa.Color:= $007BD97D; // zelena + pnlTiskKA.Color:= clBtnFace; + pnlTiskPL.Color:= clBtnFace; + end + else + pnlTiskPa.Color:= clBtnFace; + end; + + + + procedure TformSeznamPalet.pnlTiskPaMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pnlTiskPa.BevelOuter:= bvRaised; + end; + + + + procedure TformSeznamPalet.pnlTiskPLMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pnlTiskPL.BevelOuter:= bvLowered; + if (pnlTiskPL.Color=clBtnFace) then + begin + typTisku:= 3; + pnlTiskPL.Color:= $007BD97D; // zelena + pnlTiskKA.Color:= clBtnFace; + pnlTiskPa.Color:= clBtnFace; + end + else + pnlTiskPL.Color:= clBtnFace; + end; + + + + procedure TformSeznamPalet.pnlTiskPLMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + pnlTiskPL.BevelOuter:= bvRaised; + end; + +end. + diff --git a/frmSpravaVzorku.dfm b/frmSpravaVzorku.dfm new file mode 100644 index 0000000..30966ef --- /dev/null +++ b/frmSpravaVzorku.dfm @@ -0,0 +1,521 @@ +object formSpravaVzorku: TformSpravaVzorku + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Spr'#225'va vzork'#367 + ClientHeight = 635 + ClientWidth = 1476 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + DesignSize = ( + 1476 + 635) + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1476 + Height = 635 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdSpravaVzorku + Row = 1 + end + item + Column = 0 + Control = GridPanel2 + Row = 0 + end> + RowCollection = < + item + Value = 22.000000000000000000 + end + item + Value = 75.000000000000000000 + end + item + Value = 3.000000000000004000 + end> + TabOrder = 0 + object grdSpravaVzorku: TJvDBGrid + Left = 1 + Top = 140 + Width = 1474 + Height = 475 + Align = alClient + DataSource = dm.dsSpravaVzorku + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnColEnter = grdSpravaVzorkuColEnter + OnColExit = grdSpravaVzorkuColExit + OnDrawColumnCell = grdSpravaVzorkuDrawColumnCell + OnDblClick = grdSpravaVzorkuDblClick + OnMouseUp = grdSpravaVzorkuMouseUp + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colID' + Visible = False + end + item + Expanded = False + FieldName = 'colIDArchiv' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Width = 38 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRC' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Width = 113 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Width = 377 + Visible = True + end + item + Expanded = False + FieldName = 'colStroj' + Title.Alignment = taCenter + Width = 361 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMistr' + Title.Alignment = taCenter + Title.Caption = 'Mistr' + Width = 148 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatPorizeni' + Title.Alignment = taCenter + Title.Caption = 'Datum' + Width = 151 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colKArchivaci' + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 32 + Visible = True + end + item + Expanded = False + FieldName = 'colArchiv' + Title.Alignment = taCenter + Width = 140 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colUkonceno' + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 32 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colVyrazeno' + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 32 + Visible = True + end> + end + object GridPanel2: TGridPanel + Left = 1 + Top = 1 + Width = 1474 + Height = 139 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel3 + Row = 0 + end + item + Column = 0 + Control = GridPanel4 + Row = 1 + end> + RowCollection = < + item + Value = 35.515097939819110000 + end + item + Value = 64.484902060180900000 + end> + TabOrder = 1 + object GridPanel3: TGridPanel + Left = 1 + Top = 1 + Width = 1472 + Height = 49 + Align = alClient + ColumnCollection = < + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 20.000000000000000000 + end> + ControlCollection = < + item + Column = 1 + Control = btnTiskKartonu + Row = 0 + end + item + Column = 2 + Control = btnTiskSeznamVzorku + Row = 0 + end + item + Column = 4 + Control = btnUkoncitKarton + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 1472 + 49) + object btnTiskKartonu: TButton + Left = 352 + Top = 2 + Width = 180 + Height = 45 + Anchors = [] + Caption = 'Tisk - '#353't'#237'tek kartonu' + TabOrder = 0 + end + object btnTiskSeznamVzorku: TButton + Left = 602 + Top = 2 + Width = 268 + Height = 45 + Anchors = [] + Caption = 'Tisk - seznam vzork'#367' v kartonu' + TabOrder = 1 + end + object btnUkoncitKarton: TButton + Left = 1254 + Top = 2 + Width = 140 + Height = 45 + Anchors = [] + Caption = 'Ukon'#269'it karton' + TabOrder = 2 + end + end + object GridPanel4: TGridPanel + Left = 1 + Top = 50 + Width = 1472 + Height = 88 + Align = alClient + ColumnCollection = < + item + Value = 0.800000000000000000 + end + item + Value = 2.600000000000000000 + end + item + Value = 7.900000000000000000 + end + item + Value = 25.800000000000000000 + end + item + Value = 24.700000000000000000 + end + item + Value = 10.000000000000000000 + end + item + Value = 10.100000000000000000 + end + item + Value = 2.200000000000000000 + end + item + Value = 9.900000000000000000 + end + item + Value = 2.200000000000000000 + end + item + Value = 2.200000000000000000 + end + item + Value = 1.599999999999993000 + end> + ControlCollection = < + item + Column = 0 + Control = Label1 + Row = 0 + end + item + Column = 1 + Control = edtSZ + Row = 0 + end + item + Column = 2 + Control = edtRegCis + Row = 0 + end + item + Column = 3 + Control = edtNazev1 + Row = 0 + end + item + Column = 4 + Control = edtStroj + Row = 0 + end + item + Column = 10 + Control = Label9 + Row = 0 + end + item + Column = 7 + Control = Label2 + Row = 0 + end + item + Column = 9 + Control = Label3 + Row = 0 + end + item + Column = 5 + ColumnSpan = 2 + Control = btnVyraditVzorek + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 1472 + 88) + object Label1: TLabel + AlignWithMargins = True + Left = 1 + Top = 63 + Width = 12 + Height = 21 + Margins.Left = 0 + Margins.Top = 0 + Margins.Right = 0 + Margins.Bottom = 3 + Align = alBottom + Caption = 'X' + OnClick = Label1Click + ExplicitWidth = 9 + end + object edtSZ: TEdit + Left = 13 + Top = 58 + Width = 38 + Height = 29 + Align = alBottom + Alignment = taCenter + MaxLength = 3 + TabOrder = 0 + OnChange = edtSZChange + end + object edtRegCis: TEdit + Left = 51 + Top = 58 + Width = 116 + Height = 29 + Align = alBottom + Alignment = taCenter + MaxLength = 30 + TabOrder = 1 + OnChange = edtRegCisChange + end + object edtNazev1: TEdit + Left = 167 + Top = 58 + Width = 379 + Height = 29 + Align = alBottom + Alignment = taCenter + MaxLength = 100 + TabOrder = 2 + OnChange = edtNazev1Change + end + object edtStroj: TEdit + Left = 546 + Top = 58 + Width = 363 + Height = 29 + Align = alBottom + Alignment = taCenter + MaxLength = 100 + TabOrder = 3 + OnChange = edtStrojChange + end + object Label9: TLabel + Left = 1419 + Top = 8 + Width = 23 + Height = 72 + Anchors = [] + Caption = 'Vy'#345'azeno' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + WordWrap = True + ExplicitLeft = 979 + ExplicitTop = 10 + end + object Label2: TLabel + Left = 1209 + Top = 2 + Width = 23 + Height = 83 + Anchors = [] + Caption = 'K archivaci' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + WordWrap = True + ExplicitLeft = 979 + end + object Label3: TLabel + Left = 1387 + Top = 5 + Width = 23 + Height = 78 + Anchors = [] + Caption = 'Ukon'#269'eno' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Orientation = 2700 + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + WordWrap = True + ExplicitLeft = 1124 + ExplicitTop = 7 + end + object btnVyraditVzorek: TButton + Left = 987 + Top = 21 + Width = 140 + Height = 45 + Anchors = [] + Caption = 'Vy'#345'adit vzorek' + TabOrder = 4 + end + end + end + end + object dbCb1: TJvDBCheckBox + Left = 151 + Top = 228 + Width = 20 + Height = 30 + Anchors = [] + Color = clBtnFace + DataField = 'colKArchivaci' + DataSource = dm.dsSpravaVzorku + ParentColor = False + TabOrder = 1 + ValueChecked = 'X' + ValueUnchecked = '' + Visible = False + end +end diff --git a/frmSpravaVzorku.pas b/frmSpravaVzorku.pas new file mode 100644 index 0000000..bf7f85c --- /dev/null +++ b/frmSpravaVzorku.pas @@ -0,0 +1,253 @@ +unit frmSpravaVzorku; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, + ddPlugin_TLB, Data.DB, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, + JvDBGrid, Vcl.StdCtrls, Vcl.DBCtrls, JvDBCheckBox; + +{$I iConsts.inc} + +type + TformSpravaVzorku = class(TForm) + grdSpravaVzorku: TJvDBGrid; + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + btnTiskKartonu: TButton; + btnTiskSeznamVzorku: TButton; + btnVyraditVzorek: TButton; + btnUkoncitKarton: TButton; + GridPanel4: TGridPanel; + Label1: TLabel; + edtSZ: TEdit; + edtRegCis: TEdit; + edtNazev1: TEdit; + edtStroj: TEdit; + Label9: TLabel; + Label2: TLabel; + Label3: TLabel; + dbCb1: TJvDBCheckBox; + procedure FormShow(Sender: TObject); + procedure grdSpravaVzorkuDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure edtSZChange(Sender: TObject); + procedure edtRegCisChange(Sender: TObject); + procedure edtNazev1Change(Sender: TObject); + procedure edtStrojChange(Sender: TObject); + procedure Label1Click(Sender: TObject); + procedure grdSpravaVzorkuColExit(Sender: TObject); + procedure grdSpravaVzorkuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure grdSpravaVzorkuDblClick(Sender: TObject); + procedure grdSpravaVzorkuColEnter(Sender: TObject); + private + procedure Filtruj; + public + Helios: IHelios; + end; + +var + formSpravaVzorku: TformSpravaVzorku; + grdSpravaVzorkuAktRow, grdSpravaVzorkuAktCol: integer; + Pt: TPoint; + Cell: TGridCoord; + TitleOffset: Byte; + + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils; + +{$R *.dfm} + + + + procedure TformSpravaVzorku.edtNazev1Change (Sender: TObject); + begin + Filtruj; + end; + + + + procedure TformSpravaVzorku.edtRegCisChange (Sender: TObject); + begin + Filtruj; + end; + + + + procedure TformSpravaVzorku.edtStrojChange (Sender: TObject); + begin + Filtruj; + end; + + + procedure TformSpravaVzorku.edtSZChange (Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformSpravaVzorku.Filtruj; + var filtr: string; + begin + filtr:= ''; + if (edtSZ.Text<>'') then + filtr:= 'UPPER(colSZ) LIKE ''%' + edtSZ.Text.Trim.ToUpper + '%'''; + + if (edtRegCis.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colRC) LIKE ''%' + edtRegCis.Text.Trim.ToUpper + '%'''; + + if (edtNazev1.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colNazev1) LIKE ''%' + edtNazev1.Text.Trim.ToUpper + '%'''; + + if (edtStroj.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colStroj) LIKE ''%' + edtStroj.Text.Trim.ToUpper + '%'''; + + + dm.vtSpravaVzorku.Filter:= filtr; + dm.vtSpravaVzorku.Filtered:= (filtr<>''); + + grdSpravaVzorku.Invalidate; + end; + + + + + procedure TformSpravaVzorku.FormShow (Sender: TObject); + begin + dm.NactiVzorky (self); + end; + + + + + procedure TformSpravaVzorku.grdSpravaVzorkuColEnter(Sender: TObject); + begin + if (grdSpravaVzorku.SelectedField.DataType = ftBoolean) then + grdSpravaVzorku.Options:= grdSpravaVzorku.Options - [dgEditing]; + end; + + + + + + procedure TformSpravaVzorku.grdSpravaVzorkuColExit(Sender: TObject); + begin + if (grdSpravaVzorku.SelectedField.FieldName = dbCb1.DataField) then + dbCb1.Visible:= False + end; + + + + + procedure TformSpravaVzorku.grdSpravaVzorkuDblClick (Sender: TObject); + var id: integer; + begin + if (Sender is TJvDBGrid) then + begin + if (grdSpravaVzorkuAktCol-1=datMod.GetDBGridIndexByFieldName (grdSpravaVzorku, 'colArchiv', false)) then + if (Helios.YesNo('Vzorek je v archivu ' + #1 + dm.vtSpravaVzorku.FieldByName('colArchiv').AsString + #1 + '.' + CRLF + 'Chceje jej vyřadit ?' , false)) then + begin + dm.vtSpravaVzorku.Edit; + id:= dm.vtSpravaVzorku.FieldByName('colID').AsInteger; + try + Helios.ExecSQL('UPDATE ' + tblVzorky + ' SET Vyrazeno=1 WHERE ID=' + id.ToString); + dm.vtSpravaVzorku.FieldByName('colVyrazeno').AsBoolean:= true; + finally + end; + dm.vtSpravaVzorku.Post; + end; + end; + end; + + + + + + procedure TformSpravaVzorku.grdSpravaVzorkuDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); + var DrawState: Integer; + DrawRect: TRect; + begin + + if (gdFocused in State) then + begin + if (Column.Field.FieldName = dbCb1.DataField) then + begin + dbCb1.Left:= Rect.Left + grdSpravaVzorku.Left + 2; + dbCb1.Top:= Rect.Top + grdSpravaVzorku.top + 2; + dbCb1.Width:= Rect.Right - Rect.Left; + dbCb1.Height:= Rect.Bottom - Rect.Top; + dbCb1.Visible:= True; + end + end + else + begin + if (Column.Field.FieldName = dbCb1.DataField) then + begin + DrawRect:=Rect; + InflateRect (DrawRect,-1,-1); + DrawState:= ISChecked[Column.Field.AsBoolean]; + grdSpravaVzorku.Canvas.FillRect (Rect); + DrawFrameControl (grdSpravaVzorku.Canvas.Handle, DrawRect, DFC_BUTTON, DrawState); + end; + end; + +{ + if (gdFocused in State) and (Column.FieldName='colKArchivaci') then + begin + if (Column.Field.Value=1) then + SetBounds (Left + grdSpravaVzorku.Left + 1, Rect.Top + grdSpravaVzorku.Top + 1, Rect.Right - Rect.Left + 1, Rect.Bottom - Rect.Top + 1); + end; +} + + if (not(gdSelected in State)) then + begin + if (Odd(grdSpravaVzorku.DataSource.DataSet.RecNo)) then + TJvDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TJvDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='colNazev1') or (Column.FieldName='colArchiv') then + begin + if (gdSelected in State) then + TDBGrid(Sender).Canvas.Font.Color:= clBlack; + TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; + end; + + + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformSpravaVzorku.grdSpravaVzorkuMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + grdSpravaVzorkuAktRow:= TDBGrid(Sender).MouseCoord(X, Y).Y; + grdSpravaVzorkuAktCol:= TDBGrid(Sender).MouseCoord(X, Y).X; + +// TitleOffset := Ord(dgTitles in grdRozpracovane.Options); + Pt:= grdSpravaVzorku.ScreenToClient (Mouse.CursorPos); + Cell:= grdSpravaVzorku.MouseCoord (Pt.X, Pt.Y); + + end; + + + + +procedure TformSpravaVzorku.Label1Click (Sender: TObject); + begin + edtSZ.Text:= ''; + edtRegCis.Text:= ''; + edtNazev1.Text:= ''; + edtStroj.Text:= ''; + Filtruj; + end; + +end. diff --git a/frmTiskKAStitku.dfm b/frmTiskKAStitku.dfm new file mode 100644 index 0000000..076cbbd --- /dev/null +++ b/frmTiskKAStitku.dfm @@ -0,0 +1,566 @@ +object formTiskKAStitku: TformTiskKAStitku + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + Caption = ' Tisk KA '#353't'#237'tk'#367 + ClientHeight = 737 + ClientWidth = 430 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 17 + object Panel1: TPanel + Left = 8 + Top = 6 + Width = 215 + Height = 151 + TabOrder = 0 + object edtZakazka: TLabeledEdit + Left = 92 + Top = 4 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 65 + EditLabel.Height = 25 + EditLabel.Caption = 'Zak'#225'zka: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtPaletList: TLabeledEdit + Left = 92 + Top = 33 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 87 + EditLabel.Height = 25 + EditLabel.Caption = 'Paletov'#253' list: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 1 + Text = '' + end + object edtSarze: TLabeledEdit + Left = 92 + Top = 62 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 51 + EditLabel.Height = 25 + EditLabel.Caption = #352'ar'#382'e: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 2 + Text = '' + end + object edtDatVyroba: TLabeledEdit + Left = 92 + Top = 91 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 61 + EditLabel.Height = 25 + EditLabel.Caption = 'V'#253'roba: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 3 + Text = '' + end + object edtDatSpotreba: TLabeledEdit + Left = 92 + Top = 120 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 73 + EditLabel.Height = 25 + EditLabel.Caption = 'Spot'#345'eba: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 4 + Text = '' + end + end + object Panel2: TPanel + Left = 238 + Top = 6 + Width = 185 + Height = 69 + TabOrder = 1 + object edtSZ: TLabeledEdit + Left = 6 + Top = 22 + Width = 37 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 16 + EditLabel.Height = 17 + EditLabel.Caption = 'Sk.' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + Text = '' + end + object edtRegCis: TLabeledEdit + Left = 47 + Top = 22 + Width = 126 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 40 + EditLabel.Height = 17 + EditLabel.Caption = 'RegCis' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 1 + Text = '' + end + end + object Panel3: TPanel + Left = 8 + Top = 166 + Width = 415 + Height = 60 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 2 + DesignSize = ( + 415 + 60) + object edtNazev1: TLabeledEdit + Left = 0 + Top = 24 + Width = 412 + Height = 33 + Alignment = taCenter + Anchors = [akLeft, akTop, akRight, akBottom] + Color = 15790320 + EditLabel.Width = 52 + EditLabel.Height = 25 + EditLabel.Caption = 'N'#225'zev' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + Text = '' + end + end + object Panel4: TPanel + Left = 8 + Top = 232 + Width = 235 + Height = 137 + TabOrder = 3 + object LabeledEdit9: TLabeledEdit + Left = 102 + Top = 6 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 85 + EditLabel.Height = 25 + EditLabel.Caption = 'Barva '#353't'#237'tk'#367': ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 0 + Text = '' + end + object LabeledEdit10: TLabeledEdit + Left = 102 + Top = 34 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 73 + EditLabel.Height = 25 + EditLabel.Caption = 'Typ '#353't'#237'tk'#367': ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 1 + Text = '' + end + object LabeledEdit11: TLabeledEdit + Left = 102 + Top = 65 + Width = 121 + Height = 25 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 97 + EditLabel.Height = 25 + EditLabel.Caption = 'Velikost '#353't'#237'tk'#367': ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + ParentFont = False + ReadOnly = True + TabOrder = 2 + Text = '' + end + object edtPocetStitku: TLabeledEdit + Left = 102 + Top = 96 + Width = 51 + Height = 25 + Alignment = taCenter + EditLabel.Width = 85 + EditLabel.Height = 25 + EditLabel.Caption = 'Po'#269'et '#353't'#237'tk'#367': ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + NumbersOnly = True + ParentFont = False + TabOrder = 3 + Text = '' + end + object Edit1: TEdit + Left = 173 + Top = 96 + Width = 50 + Height = 25 + Alignment = taCenter + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + NumbersOnly = True + ParentFont = False + ReadOnly = True + TabOrder = 4 + Text = '0' + end + end + object Panel5: TPanel + Left = 10 + Top = 388 + Width = 412 + Height = 191 + TabOrder = 4 + DesignSize = ( + 412 + 191) + object Label1: TLabel + Left = 10 + Top = 8 + Width = 393 + Height = 21 + Alignment = taCenter + Anchors = [akLeft, akTop, akRight] + AutoSize = False + Caption = 'Tisknout' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + object Label2: TLabel + Left = 87 + Top = 32 + Width = 38 + Height = 21 + Caption = #352'ar'#382'e' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 51 + Top = 68 + Width = 112 + Height = 21 + Caption = 'Datum spot'#345'eby' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label4: TLabel + Left = 51 + Top = 110 + Width = 80 + Height = 21 + Caption = 'Tisknout na' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + Visible = False + end + object Label5: TLabel + Left = 222 + Top = 32 + Width = 28 + Height = 21 + Caption = 'Ano' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label6: TLabel + Left = 306 + Top = 32 + Width = 20 + Height = 21 + Caption = 'Ne' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label7: TLabel + Left = 306 + Top = 68 + Width = 20 + Height = 21 + Caption = 'Ne' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label8: TLabel + Left = 222 + Top = 68 + Width = 28 + Height = 21 + Caption = 'Ano' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + end + object Label9: TLabel + Left = 306 + Top = 106 + Width = 75 + Height = 21 + Caption = 'Obrazovka' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + Visible = False + end + object Label10: TLabel + Left = 192 + Top = 106 + Width = 58 + Height = 21 + Alignment = taRightJustify + Caption = 'Tisk'#225'rna' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + Visible = False + end + object swTiskSpotreba: TEsSwitch + Left = 256 + Top = 70 + Width = 44 + Height = 20 + Color = clBtnFace + MainColor = clRed + ParentColor = False + ParentBackground = False + TabOrder = 0 + end + object swTiskSarze: TEsSwitch + Left = 256 + Top = 36 + Width = 44 + Height = 20 + TextOn = 'Ano' + TextOff = 'Ne' + Color = clBtnFace + MainColor = clRed + ParentColor = False + ParentShowHint = False + ParentBackground = False + ShowHint = False + TabOrder = 1 + end + object swTiskTiskarna: TEsSwitch + Left = 256 + Top = 108 + Width = 44 + Height = 20 + Color = clBtnFace + MainColor = clRed + ParentColor = False + ParentBackground = False + TabOrder = 2 + Visible = False + end + object edtPocetPL: TLabeledEdit + Left = 251 + Top = 144 + Width = 51 + Height = 29 + Alignment = taCenter + EditLabel.Width = 168 + EditLabel.Height = 29 + EditLabel.Caption = 'Po'#269'et paletov'#253'ch list'#367': ' + EditLabel.Font.Charset = DEFAULT_CHARSET + EditLabel.Font.Color = clWindowText + EditLabel.Font.Height = -16 + EditLabel.Font.Name = 'Segoe UI' + EditLabel.Font.Style = [] + EditLabel.ParentFont = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + LabelPosition = lpLeft + NumbersOnly = True + ParentFont = False + TabOrder = 3 + Text = '' + end + end + object Edit2: TEdit + Left = 253 + Top = 297 + Width = 108 + Height = 25 + Alignment = taCenter + Color = 15790320 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + NumbersOnly = True + ParentFont = False + ReadOnly = True + TabOrder = 5 + Text = '0' + end + object btnTisk: TButton + Left = 110 + Top = 588 + Width = 181 + Height = 51 + Caption = 'Tisk kartonov'#253'ch '#353't'#237'tk'#367' +'#13#10'paletov'#253' l'#237'stek' + TabOrder = 6 + OnClick = btnTiskClick + end + object btnTiskZaloha: TButton + Left = 110 + Top = 668 + Width = 181 + Height = 51 + Caption = 'Z'#225'lo'#382'n'#237' tisk na A4' + TabOrder = 7 + Visible = False + OnClick = btnTiskClick + end +end diff --git a/frmTiskKAStitku.pas b/frmTiskKAStitku.pas new file mode 100644 index 0000000..355f8b3 --- /dev/null +++ b/frmTiskKAStitku.pas @@ -0,0 +1,127 @@ +unit frmTiskKAStitku; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls, + Vcl.WinXCtrls, ES.BaseControls, ES.Switch, ddPlugin_TLB; + +type + TformTiskKAStitku = class(TForm) + Panel1: TPanel; + edtZakazka: TLabeledEdit; + edtPaletList: TLabeledEdit; + edtSarze: TLabeledEdit; + edtDatVyroba: TLabeledEdit; + edtDatSpotreba: TLabeledEdit; + Panel2: TPanel; + edtSZ: TLabeledEdit; + edtRegCis: TLabeledEdit; + Panel3: TPanel; + Panel4: TPanel; + Panel5: TPanel; + edtNazev1: TLabeledEdit; + LabeledEdit9: TLabeledEdit; + LabeledEdit10: TLabeledEdit; + LabeledEdit11: TLabeledEdit; + edtPocetStitku: TLabeledEdit; + Edit1: TEdit; + Edit2: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + swTiskSpotreba: TEsSwitch; + swTiskSarze: TEsSwitch; + swTiskTiskarna: TEsSwitch; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + Label10: TLabel; + edtPocetPL: TLabeledEdit; + btnTisk: TButton; + btnTiskZaloha: TButton; + procedure FormShow(Sender: TObject); + procedure btnTiskClick(Sender: TObject); + private + public + Helios: IHelios; + idKmen: integer; + zakazka, paletList, sarze: string; + datVyroba: TDateTime; + retVal: integer; + end; + +var + formTiskKAStitku: TformTiskKAStitku; + +implementation +uses System.StrUtils, DateUtils, Math, + helUtils; +{$R *.dfm} + + + + procedure TformTiskKAStitku.btnTiskClick(Sender: TObject); + begin + retVal:= 1; + end; + + + + + procedure TformTiskKAStitku.FormShow(Sender: TObject); + var zarukaTyp: integer; + zarukaNum: extended; + d: TDateTime; + begin + SetWindowLong (btnTisk.Handle, GWL_STYLE, GetWindowLong ( (btnTisk as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + retVal:= 0; + + if not(btnTiskZaloha.Visible) then + self.Height:= btnTisk.Top + btnTisk.Height + 20; + + + edtZakazka.Text:= zakazka; + edtPaletList.Text:= paletList; + edtSarze.Text:= sarze; + + if (datVyroba>0) then + edtDatVyroba.Text:= FormatDateTime('dd.mm.yyyy', datVyroba) + else + edtDatVyroba.Text:= FormatDateTime('dd.mm.yyyy', Now); + + if (idKmen>0) then + begin + with Helios.OpenSQL('SELECT SkupZbo, RegCis, Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString) do + begin + edtSZ.Text:= VarToStr(FieldByNameValues('SkupZbo')); + edtRegCis.Text:= VarToStr(FieldByNameValues('RegCis')); + edtNazev1.Text:= VarToStr(FieldByNameValues('Nazev1')); + end; + end; + + zarukaNum:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + zarukaTyp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TypZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); // 0-Den, 1-Mesic, 2-Rok + + d:= Now; + if (zarukaTyp=0) then + d:= IncDay(Now, Floor(zarukaNum)); + if (zarukaTyp=1) then + d:= IncMonth(Now, Floor(zarukaNum)); + if (zarukaTyp=2) then + d:= IncYear(Now, Floor(zarukaNum)); + + edtDatSpotreba.Text:= FormatDateTime('dd.mm.yyyy', d); + + + if (edtPocetStitku.CanFocus) then + edtPocetStitku.SetFocus; + + + end; + +end. diff --git a/frmTiskyNahledy.dfm b/frmTiskyNahledy.dfm new file mode 100644 index 0000000..3c236de --- /dev/null +++ b/frmTiskyNahledy.dfm @@ -0,0 +1,242 @@ +object formTiskyNahledy: TformTiskyNahledy + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + Caption = ' TISKY / N'#193'HLEDY' + ClientHeight = 222 + ClientWidth = 887 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object Panel1: TPanel + Left = 8 + Top = 6 + Width = 199 + Height = 201 + TabOrder = 0 + object Label1: TLabel + Left = 26 + Top = 6 + Width = 131 + Height = 21 + Caption = 'Aktu'#225'ln'#237' v'#253'robek' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + object btnAVTisk1: TSpeedButton + Left = 8 + Top = 34 + Width = 48 + Height = 48 + OnClick = btnAVTisk1Click + end + object btnAVTisk2: TSpeedButton + Left = 8 + Top = 88 + Width = 48 + Height = 48 + OnClick = btnAVTisk2Click + end + object btnAVTisk3: TSpeedButton + Left = 8 + Top = 142 + Width = 48 + Height = 48 + OnClick = btnAVTisk3Click + end + object Label2: TLabel + Left = 62 + Top = 48 + Width = 121 + Height = 21 + Caption = 'Technologick'#253' list' + end + object Label3: TLabel + Left = 62 + Top = 91 + Width = 120 + Height = 42 + Caption = 'Kartonov'#253' '#353't'#237'tek vzor' + WordWrap = True + end + object Label4: TLabel + Left = 62 + Top = 145 + Width = 107 + Height = 21 + Caption = 'Opakovan'#253' tisk' + end + object Label5: TLabel + Left = 62 + Top = 167 + Width = 134 + Height = 21 + Caption = #352't'#237'tky / Paletov'#253' list' + end + end + object Panel2: TPanel + Left = 227 + Top = 6 + Width = 199 + Height = 201 + TabOrder = 1 + object Label6: TLabel + Left = 26 + Top = 6 + Width = 34 + Height = 21 + Caption = 'Pl'#225'n' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + object btnPD1: TSpeedButton + Left = 8 + Top = 34 + Width = 48 + Height = 48 + OnClick = btnPD1Click + end + object btnPD2: TSpeedButton + Left = 8 + Top = 88 + Width = 48 + Height = 48 + end + object btnPD3: TSpeedButton + Left = 8 + Top = 142 + Width = 48 + Height = 48 + end + object Label7: TLabel + Left = 62 + Top = 48 + Width = 121 + Height = 21 + Caption = 'Technologick'#253' list' + end + object Label8: TLabel + Left = 62 + Top = 91 + Width = 120 + Height = 42 + Caption = 'Kartonov'#253' '#353't'#237'tek vzor' + WordWrap = True + end + object Label9: TLabel + Left = 62 + Top = 153 + Width = 97 + Height = 21 + Caption = 'Zak'#225'zkov'#253' list' + end + end + object Panel3: TPanel + Left = 447 + Top = 6 + Width = 199 + Height = 201 + TabOrder = 2 + object Label10: TLabel + Left = 26 + Top = 6 + Width = 108 + Height = 21 + Caption = 'Rozpracovan'#233 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + object btnPZ1: TSpeedButton + Left = 8 + Top = 34 + Width = 48 + Height = 48 + OnClick = btnPZ1Click + end + object btnPZ2: TSpeedButton + Left = 8 + Top = 88 + Width = 48 + Height = 48 + end + object btnPZ3: TSpeedButton + Left = 8 + Top = 142 + Width = 48 + Height = 48 + end + object Label11: TLabel + Left = 62 + Top = 48 + Width = 121 + Height = 21 + Caption = 'Technologick'#253' list' + end + object Label12: TLabel + Left = 62 + Top = 91 + Width = 120 + Height = 42 + Caption = 'Kartonov'#253' '#353't'#237'tek vzor' + WordWrap = True + end + object Label13: TLabel + Left = 62 + Top = 153 + Width = 97 + Height = 21 + Caption = 'Zak'#225'zkov'#253' list' + end + end + object Panel4: TPanel + Left = 670 + Top = 6 + Width = 199 + Height = 201 + TabOrder = 3 + object Label14: TLabel + Left = 26 + Top = 6 + Width = 126 + Height = 21 + Caption = 'Katalog v'#253'robk'#367 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + object btnKV: TSpeedButton + Left = 8 + Top = 34 + Width = 48 + Height = 48 + end + object Label15: TLabel + Left = 62 + Top = 48 + Width = 121 + Height = 21 + Caption = 'Technologick'#253' list' + end + end +end diff --git a/frmTiskyNahledy.pas b/frmTiskyNahledy.pas new file mode 100644 index 0000000..906d19f --- /dev/null +++ b/frmTiskyNahledy.pas @@ -0,0 +1,283 @@ +unit frmTiskyNahledy; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.Types, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons, Winapi.ShellAPI, ddPlugin_TLB; + + +const + LOAD_LIBRARY_AS_IMAGE_RESOURCE = $20; + + RT_CURSOR = MakeIntResource(1); + RT_BITMAP = MakeIntResource(2); + RT_ICON = MakeIntResource(3); + RT_MENU = MakeIntResource(4); + RT_DIALOG = MakeIntResource(5); + RT_STRING = MakeIntResource(6); + RT_FONTDIR = MakeIntResource(7); + RT_FONT = MakeIntResource(8); + RT_ACCELERATOR = MakeIntResource(9); + RT_RCDATA = System.Types.RT_RCDATA; //MakeIntResource(10); + DIFFERENCE = 11; + RT_GROUP_CURSOR = MakeIntResource(DWORD(RT_CURSOR) + DIFFERENCE); + RT_GROUP_ICON = MakeIntResource(DWORD(RT_ICON) + DIFFERENCE); + RT_VERSION = MakeIntResource(16); + RT_DLGINCLUDE = MakeIntResource(17); + RT_PLUGPLAY = MakeIntResource(19); + RT_VXD = MakeIntResource(20); + RT_ANICURSOR = MakeIntResource(21); + RT_ANIICON = MakeIntResource(22); + RT_HTML = MakeIntResource(23); + RT_MANIFEST = MakeIntResource(24); + +type + TformTiskyNahledy = class(TForm) + Panel1: TPanel; + Label1: TLabel; + btnAVTisk1: TSpeedButton; + btnAVTisk2: TSpeedButton; + btnAVTisk3: TSpeedButton; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Panel2: TPanel; + Label6: TLabel; + btnPD1: TSpeedButton; + btnPD2: TSpeedButton; + btnPD3: TSpeedButton; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + Panel3: TPanel; + Label10: TLabel; + btnPZ1: TSpeedButton; + btnPZ2: TSpeedButton; + btnPZ3: TSpeedButton; + Label11: TLabel; + Label12: TLabel; + Label13: TLabel; + Panel4: TPanel; + Label14: TLabel; + btnKV: TSpeedButton; + Label15: TLabel; + procedure FormShow(Sender: TObject); + procedure btnAVTisk1Click(Sender: TObject); + procedure btnPD1Click(Sender: TObject); + procedure btnPZ1Click(Sender: TObject); + procedure btnAVTisk3Click(Sender: TObject); + procedure btnAVTisk2Click(Sender: TObject); + private + public + Helios: IHelios; + HeliosHandle: integer; + idKmen: integer; + idPrikaz: integer; + idStroj: Integer; + sarze: string; + paletList: string; + end; + +var + formTiskyNahledy: TformTiskyNahledy; + bidPalety: integer; + +implementation +uses datMod, + frmZahajeniPalety, + helUtils; + +{$R *.dfm} + + + function ResourceNameToString(lpszName: PChar): string; + begin + if Is_IntResource(lpszName) then + Result:= '#' + IntToStr(NativeUInt(lpszName)) + else + Result:= lpszName; + end; + + + function ResourceTypeToString(lpszType: PChar): string; + begin + case NativeUInt(lpszType) of + NativeUInt(RT_CURSOR): + Result := 'RT_CURSOR'; + NativeUInt(RT_BITMAP): + Result := 'RT_BITMAP'; + NativeUInt(RT_RCDATA): + Result := 'RT_RCDATA'; + NativeUInt(RT_GROUP_ICON): + Result:= 'RT_GROUP_ICON'; + else + Result := ResourceNameToString(lpszType); + end; + end; + + + function EnumResNameProc(hModule: HMODULE; lpszType, lpszName: PChar; lParam: NativeInt): BOOL; stdcall; + begin + TStrings(lParam).Add(ResourceNameToString(lpszName)); + result:= true; + end; + + + + procedure TformTiskyNahledy.btnAVTisk1Click (Sender: TObject); + var idF: integer; + begin + if (datMod.aktIdKmen>0) then + begin + idF:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-6'''); + if (idF>0) then + Helios.PrintForm3 (bidDilce, idF, 'TabKmenZbozi.ID=' + datMod.aktIdKmen.ToString); + end; + Close; + end; + + + + procedure TformTiskyNahledy.btnAVTisk2Click (Sender: TObject); + var lSQL: string; + f: integer; + i: integer; + begin + if (idKmen>0) and (bidPalety>0) then + begin + f:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ISNULL(_KL,0) FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString); + if (f>0) then + begin + lSQL:= 'SELECT COUNT(ID) FROM ' + datMod.constHvwVyrobaPalety + ' x WHERE x.IDKmen=' + idKmen.ToString; + if (paletList<>'') then + lSQL:= lSQL + ' AND x.CisloPalety=N' + paletList.QuotedString + else + begin + if (sarze<>'') then + lSQL:= lSQL + ' AND x.Sarze=N' + sarze.QuotedString; + if (idPrikaz>0) then + lSQL:= lSQL + ' AND x.IDPrikaz=' + idPrikaz.ToString; + if (idStroj>0) then + lSQL:= lSQL + ' AND x.IDStroj=' + idStroj.ToString; + end; + i:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + if (i=1) then + begin + lSQL:= lSQL.Replace('SELECT COUNT(ID) FROM ' + datMod.constHvwVyrobaPalety + ' x WHERE', ''); + lSQL:= lSQL.Replace('x', datMod.constHvwVyrobaPalety); + Helios.PrintForm3 (bidPalety, f, lSQL.Trim); + end; + end; + end; + end; + + + + + procedure TformTiskyNahledy.btnAVTisk3Click (Sender: TObject); // paletovy listek + var f: integer; + f2: TformZahajeniPalety; + begin + if (idPrikaz>0) then + begin + f2:= TformZahajeniPalety.Create (nil); + try + f2.Helios:= Helios; + f2.opakTisky:= true; + f2.f2:= self; + f2.idPrikaz:= idPrikaz; + f2.idStroj:= datMod.bmIdStroj; + f2.ShowModal; + finally + f2.Free; + end; + end; +{ + if (paletList<>'') and (idKmen>0) and (bidPalety>0) then + begin + f:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ISNULL(_PLKK,0) FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString); + if (f>0) then + Helios.PrintForm3 (bidPalety, f, 'hvw_Vyroba_Palety.CisloPalety=N' + paletList.QuotedString); + end; +} + end; + + + + + procedure TformTiskyNahledy.btnPD1Click (Sender: TObject); + var idF: integer; + begin + if (datMod.aktIdKmen>0) then + begin + idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-6'''); + if (idF>0) then + Helios.PrintForm3 (bidDilce, idF, 'TabKmenZbozi.ID=' + datMod.aktIdKmenPlan.ToString); + end; + Close; + end; + + + + + procedure TformTiskyNahledy.btnPZ1Click (Sender: TObject); + var idF: integer; + begin + if (datMod.aktIdKmen>0) then + begin + idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-6'''); + if (idF>0) then + Helios.PrintForm3 (bidDilce, idF, 'TabKmenZbozi.ID=' + datMod.aktIdKmenRozprac.ToString); + end; + Close; + end; + + + + + procedure TformTiskyNahledy.FormShow (Sender: TObject); + var sl: TStringList; + hndl: NativeUInt; + i: integer; + icn: TIcon; + begin + i:= -1; + sl:= TStringList.Create; + try + hndl:= GetModuleHandle(PChar(Application.ExeName)); + EnumResourceNames(hndl, RT_GROUP_ICON, @EnumResNameProc, NativeInt(sl)); + i:= sl.IndexOf('XC_X_PRINT'); + finally + sl.Free; + end; + + if (i>-1) then + begin + try + icn:= TIcon.Create; + icn.Handle:= ExtractIcon(hndl, PChar(Application.ExeName), i); + btnAVTisk1.Glyph.Assign(icn); + btnAVTisk2.Glyph.Assign(icn); + btnAVTisk3.Glyph.Assign(icn); + + btnPD1.Glyph.Assign(icn); + btnPD2.Glyph.Assign(icn); + btnPD3.Glyph.Assign(icn); + + btnPZ1.Glyph.Assign(icn); + btnPZ2.Glyph.Assign(icn); + btnPZ3.Glyph.Assign(icn); + + btnKV.Glyph.Assign(icn); + finally + icn.Free; + end; + end; + + bidPalety:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Palety'''); + + end; + +end. diff --git a/frmUkonceniPalety.dfm b/frmUkonceniPalety.dfm new file mode 100644 index 0000000..d0d6c0b --- /dev/null +++ b/frmUkonceniPalety.dfm @@ -0,0 +1,553 @@ +object formUkonceniPalety: TformUkonceniPalety + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = ' Ukon'#269'en'#237' v'#253'roby palety' + ClientHeight = 665 + ClientWidth = 525 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnShow = FormShow + TextHeight = 21 + object btnZapisPaletyATisk: TButton + Left = 144 + Top = 527 + Width = 239 + Height = 97 + Hint = 'Tisk formulare PEK-2' + Caption = 'Z'#225'pis nov'#283' vyroben'#233' palety'#13#10' Tisk PL' + TabOrder = 0 + OnClick = btnZapisPaletyATiskClick + end + object Panel1: TPanel + Left = 4 + Top = 86 + Width = 519 + Height = 161 + TabOrder = 1 + object edtPaleta: TLabeledEdit + Left = 120 + Top = 17 + Width = 161 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 48 + EditLabel.Height = 29 + EditLabel.Caption = 'Paleta :' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtSarze: TLabeledEdit + Left = 374 + Top = 17 + Width = 121 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 45 + EditLabel.Height = 29 + EditLabel.Caption = #352'ar'#382'e :' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 1 + Text = '' + end + object edtSZ: TLabeledEdit + Left = 120 + Top = 50 + Width = 45 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 61 + EditLabel.Height = 29 + EditLabel.Caption = 'V'#253'robek:' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 2 + Text = '' + end + object edtRegCis: TLabeledEdit + Left = 174 + Top = 50 + Width = 321 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 70 + EditLabel.Height = 21 + EditLabel.Caption = 'edtRegCis' + ReadOnly = True + TabOrder = 3 + Text = '' + end + object edtStroj: TLabeledEdit + Left = 120 + Top = 82 + Width = 375 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 39 + EditLabel.Height = 29 + EditLabel.Caption = 'Stroj :' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 4 + Text = '' + end + object edtDatVyroby: TLabeledEdit + Left = 120 + Top = 117 + Width = 121 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 106 + EditLabel.Height = 29 + EditLabel.Caption = 'Datum v'#253'roby :' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 5 + Text = '' + end + object edtSmena: TLabeledEdit + Left = 454 + Top = 117 + Width = 41 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 51 + EditLabel.Height = 29 + EditLabel.Caption = 'Sm'#283'na:' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 6 + Text = '' + end + end + object Panel2: TPanel + Left = 4 + Top = 253 + Width = 517 + Height = 104 + TabOrder = 2 + object edtKs: TLabeledEdit + Left = 79 + Top = 17 + Width = 123 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 23 + EditLabel.Height = 29 + EditLabel.Caption = 'Ks :' + LabelPosition = lpLeft + NumbersOnly = True + ReadOnly = True + TabOrder = 0 + Text = '' + OnExit = edtKsExit + end + object edtKA: TLabeledEdit + Left = 79 + Top = 52 + Width = 123 + Height = 29 + TabStop = False + Alignment = taCenter + EditLabel.Width = 72 + EditLabel.Height = 29 + EditLabel.Caption = 'KA na pal :' + LabelPosition = lpLeft + NumbersOnly = True + TabOrder = 1 + Text = '' + OnExit = edtKAExit + end + object GroupBox1: TGroupBox + Left = 218 + Top = 8 + Width = 285 + Height = 87 + Caption = ' Ne'#250'pln'#225' paleta ' + Color = 8454143 + ParentBackground = False + ParentColor = False + TabOrder = 2 + object edtPlneKA: TLabeledEdit + Left = 150 + Top = 20 + Width = 109 + Height = 29 + TabStop = False + Alignment = taCenter + EditLabel.Width = 60 + EditLabel.Height = 29 + EditLabel.Caption = 'Pln'#233' KA :' + LabelPosition = lpLeft + NumbersOnly = True + TabOrder = 0 + Text = '' + end + object edtKsVPoslednimKA: TLabeledEdit + Left = 150 + Top = 55 + Width = 109 + Height = 29 + TabStop = False + Alignment = taCenter + EditLabel.Width = 135 + EditLabel.Height = 29 + EditLabel.Caption = 'Ks v posledn'#237'm KA :' + LabelPosition = lpLeft + NumbersOnly = True + TabOrder = 1 + Text = '' + end + end + end + object Panel3: TPanel + Left = 4 + Top = 361 + Width = 517 + Height = 135 + TabOrder = 3 + object Label1: TLabel + Left = 106 + Top = 14 + Width = 106 + Height = 21 + Caption = 'Paletov'#253' list na:' + end + object GridPanel1: TGridPanel + Left = 0 + Top = 48 + Width = 517 + Height = 84 + ColumnCollection = < + item + Value = 59.837754170865710000 + end + item + Value = 20.119057561460900000 + end + item + Value = 20.043188267673400000 + end> + ControlCollection = < + item + Column = 1 + Control = pnlTiskKopie1 + Row = 0 + end + item + Column = 2 + Control = pnlTiskKopie2 + Row = 0 + end + item + Column = 1 + Control = pnlPokracujAno + Row = 1 + end + item + Column = 2 + Control = pnlPokracujNe + Row = 1 + end + item + Column = 0 + Control = Label2 + Row = 0 + end + item + Column = 0 + Control = Label3 + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 0 + object pnlTiskKopie1: TPanel + Left = 309 + Top = 1 + Width = 104 + Height = 41 + Align = alClient + Anchors = [] + Color = clMoneyGreen + FullRepaint = False + ParentBackground = False + TabOrder = 0 + object rbTiskKopie1: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 96 + Height = 33 + Align = alClient + Caption = '1' + Checked = True + Color = clMoneyGreen + ParentColor = False + TabOrder = 0 + TabStop = True + OnClick = rbTiskKopie1Click + end + end + object pnlTiskKopie2: TPanel + Left = 413 + Top = 1 + Width = 103 + Height = 41 + Align = alClient + Anchors = [] + FullRepaint = False + ParentBackground = False + TabOrder = 1 + object rbTiskKopie2: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 95 + Height = 33 + Align = alClient + Caption = '2' + TabOrder = 0 + OnClick = rbTiskKopie2Click + end + end + object pnlPokracujAno: TPanel + Left = 309 + Top = 42 + Width = 104 + Height = 41 + Align = alClient + Anchors = [] + Color = clMoneyGreen + FullRepaint = False + ParentBackground = False + TabOrder = 2 + object rbPokracujAno: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 96 + Height = 33 + Align = alClient + Caption = 'Ano' + Checked = True + Color = clMoneyGreen + ParentColor = False + TabOrder = 0 + TabStop = True + OnClick = rbPokracujAnoClick + end + end + object pnlPokracujNe: TPanel + Left = 413 + Top = 42 + Width = 103 + Height = 41 + Align = alClient + Anchors = [] + FullRepaint = False + ParentBackground = False + TabOrder = 3 + object rbPokracujNe: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 95 + Height = 33 + Align = alClient + Caption = 'Ne' + TabOrder = 0 + OnClick = rbPokracujNeClick + end + end + object Label2: TLabel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 302 + Height = 38 + Align = alClient + Alignment = taCenter + Caption = 'Po'#269'et kopi'#237':' + ExplicitWidth = 78 + ExplicitHeight = 21 + end + object Label3: TLabel + Left = 1 + Top = 42 + Width = 308 + Height = 41 + Align = alClient + Alignment = taCenter + Caption = 'Pokra'#269'ov'#225'n'#237' v'#253'roby (dal'#353#237' PL):' + ExplicitWidth = 206 + ExplicitHeight = 21 + end + end + object GridPanel2: TGridPanel + Left = 236 + Top = 6 + Width = 277 + Height = 41 + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = pnlTiskarna + Row = 0 + end + item + Column = 1 + Control = pnlObrazovka + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 1 + object pnlTiskarna: TPanel + Left = 1 + Top = 1 + Width = 138 + Height = 39 + Align = alClient + Color = clMoneyGreen + ParentBackground = False + TabOrder = 0 + object btnTiskarna: TColorButton + Left = 1 + Top = 1 + Width = 136 + Height = 37 + Align = alClient + Caption = 'Tisk'#225'rna' + TabOrder = 0 + OnClick = btnTiskarnaClick + BackColor = clMoneyGreen + HoverColor = clMoneyGreen + end + end + object pnlObrazovka: TPanel + Left = 139 + Top = 1 + Width = 137 + Height = 39 + Align = alClient + Caption = 'Obrazovka' + TabOrder = 1 + object btnObrazovka: TColorButton + Left = 1 + Top = 1 + Width = 135 + Height = 37 + Hint = 'Tisk formulare PEK-2' + Align = alClient + Caption = 'Obrazovka' + TabOrder = 0 + OnClick = btnObrazovkaClick + HoverColor = clMoneyGreen + end + end + end + end + object Panel4: TPanel + Left = 4 + Top = 4 + Width = 523 + Height = 81 + TabOrder = 4 + object edtNazev1: TLabeledEdit + Left = 8 + Top = 28 + Width = 501 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 58 + EditLabel.Height = 21 + EditLabel.Caption = 'N'#225'zev: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + Text = '' + end + end + object LabeledEdit2: TLabeledEdit + Left = 486 + Top = 595 + Width = 31 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 89 + EditLabel.Height = 29 + EditLabel.Caption = 'LabeledEdit2' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 5 + Text = '' + end + object edtPokrac: TLabeledEdit + Left = 486 + Top = 630 + Width = 31 + Height = 29 + TabStop = False + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 68 + EditLabel.Height = 29 + EditLabel.Caption = 'Pokra'#269'ov'#225'n'#237' ' + EditLabel.Font.Charset = DEFAULT_CHARSET + EditLabel.Font.Color = clWindowText + EditLabel.Font.Height = -11 + EditLabel.Font.Name = 'Segoe UI' + EditLabel.Font.Style = [] + EditLabel.ParentFont = False + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 6 + Text = '' + end +end diff --git a/frmUkonceniPalety.pas b/frmUkonceniPalety.pas new file mode 100644 index 0000000..4ec44a8 --- /dev/null +++ b/frmUkonceniPalety.pas @@ -0,0 +1,1015 @@ +unit frmUkonceniPalety; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Mask, Vcl.Buttons, + IdHTTP, IdSSLOpenSSL, REST.Json, + ddPlugin_TLB, JsonDataObjects, ColorButton; + +{$I iConsts.inc} + +type + TformUkonceniPalety = class(TForm) + btnZapisPaletyATisk: TButton; + Panel1: TPanel; + Panel2: TPanel; + Panel3: TPanel; + Panel4: TPanel; + edtNazev1: TLabeledEdit; + edtPaleta: TLabeledEdit; + edtSarze: TLabeledEdit; + edtSZ: TLabeledEdit; + edtRegCis: TLabeledEdit; + edtStroj: TLabeledEdit; + edtDatVyroby: TLabeledEdit; + edtSmena: TLabeledEdit; + edtKs: TLabeledEdit; + edtKA: TLabeledEdit; + GroupBox1: TGroupBox; + edtPlneKA: TLabeledEdit; + edtKsVPoslednimKA: TLabeledEdit; + pnlTiskKopie1: TPanel; + rbTiskKopie1: TRadioButton; + pnlTiskKopie2: TPanel; + rbTiskKopie2: TRadioButton; + GridPanel1: TGridPanel; + Label1: TLabel; + LabeledEdit2: TLabeledEdit; + edtPokrac: TLabeledEdit; + pnlPokracujAno: TPanel; + rbPokracujAno: TRadioButton; + pnlPokracujNe: TPanel; + rbPokracujNe: TRadioButton; + Label2: TLabel; + Label3: TLabel; + GridPanel2: TGridPanel; + pnlTiskarna: TPanel; + pnlObrazovka: TPanel; + btnTiskarna: TColorButton; + btnObrazovka: TColorButton; + procedure FormShow(Sender: TObject); + procedure btnObrazovkaClick(Sender: TObject); + procedure btnTiskarnaClick(Sender: TObject); + procedure rbTiskKopie1Click(Sender: TObject); + procedure rbTiskKopie2Click(Sender: TObject); + procedure rbPokracujAnoClick(Sender: TObject); + procedure rbPokracujNeClick(Sender: TObject); + procedure btnZapisPaletyATiskClick(Sender: TObject); + procedure edtKsExit(Sender: TObject); + procedure edtKAExit(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + private + function NactiPocetKAZEvidRozpOperR: extended; + function GenerujJSON (idMzdy: integer): TJSONObject; + procedure NactiParemetry; + procedure BarvyBtnDleParam; + public + Helios: IHelios; + idVPr: integer; + idVyrCisPrikaz: integer; + idStroj: integer; + paleta, sarze, denSmena: string; + idEvEOp: integer; + [Default(false)] + prerusit: boolean; + end; + +var + formUkonceniPalety: TformUkonceniPalety; + tiskNa: byte; + idKmen, idPalety, idFormKA, idFormPL, idFormPS: integer; + mjEvid: string; + pocKA, pocKS, ksVKA: Extended; + prepKA2ks, prepKA2pal: Extended; + +implementation +uses DateUtils, Math, StrUtils, + datMod, helUtils, helTabsBIDs, + frmSarzeVydej; + +{$R *.dfm} + + + + function TformUkonceniPalety.GenerujJSON (idMzdy: Integer): TJsonObject; + var lSQL, jsonOut: string; + idPrikaz, idDoklad, idPZ: integer; + mn: Extended; + oMain, oPrikaz, oVydejka, oPrijemka, oPolozka, oVyrCislo: TJsonObject; + aVydejky, aPrijemky, aPolozky, aVyrCisla: TJsonArray; + begin + oMain:= TJsonObject.Create; + try + if (idMzdy>0) then + begin +// prikaz + oPrikaz:= oMain.O['prikaz']; + oPrikaz.S['akce']:= 'stop'; + + idPrikaz:= 0; + mn:= 0; + lSQL:= 'SELECT IDPrikaz, kusy_odv FROM ' + tblPMZ + ' WHERE ID=' + idMzdy.ToString; + with Helios.OpenSQL(lSQL) do + begin + idPrikaz:= VarToStr(FieldByNameValues('IDPrikaz')).ToInteger; + mn:= VarToStr(FieldByNameValues('kusy_odv')).ToExtended; + end; + + lSQL:= 'SELECT p.ID, p.Rada, p.Prikaz, ISNULL(zm.Rada,N'''') AS RadaZM, ISNULL(zm.Kod,N'''') AS Kod, p.IDTabKmen, k.CisloZbozi, k.Nazev1' + + ', ISNULL(k.MJEvidence,N'''') AS MJ FROM ' + tblPrikaz + ' p LEFT JOIN ' + tblZakazModif + ' zm ON (zm.ID=p.IDZakazModif) INNER JOIN ' + + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=' + idPrikaz.ToString; + with Helios.OpenSQL (lSQL) do + begin + oPrikaz.I['id']:= VarToStr(FieldByNameValues('ID')).ToInteger; + oPrikaz.S['rada']:= VarToStr(FieldByNameValues('Rada')); + oPrikaz.I['prikaz']:= VarToStr(FieldByNameValues('Prikaz')).ToInteger; + oPrikaz.I['id_dilce']:= VarToStr(FieldByNameValues('IDTabKmen')).ToInteger; + oPrikaz.S['cislo_zbozi']:= VarToStr(FieldByNameValues('CisloZbozi')); + oPrikaz.S['nazev']:= VarToStr(FieldByNameValues('Nazev1')); + oPrikaz.S['mj']:= VarToStr(FieldByNameValues('MJ')); + oPrikaz.F['mnozstvi']:= mn; + oPrikaz.S['modif_rada']:= VarToStr(FieldByNameValues('RadaZM')); + oPrikaz.S['modif_kod']:= VarToStr(FieldByNameValues('Kod')); + oPrikaz.Values['caszahajeni']:= null; + oPrikaz.D['casukonceni']:= Now; + end; + +// vydejka + if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPMZGenPZ + ' WHERE TypGen=0 AND IDPohybu IS NOT NULL AND IDMzdy=' + idMzdy.ToString)) then + begin + lSQL:= 'SELECT DISTINCT(IDDoklad) AS IDDoklad FROM ' + tblPZ + ' WHERE ID IN (SELECT IDPohybu FROM ' + tblPMZGenPZ + ' WHERE TypGen=0 AND IDPohybu IS NOT NULL AND IDMzdy=' + + idMzdy.ToString + ') GROUP BY IDDoklad'; + with Helios.OpenSQL (lSQL) do + begin + aVydejky:= oMain.A['vydejky']; + First; + while not(EOF) do + begin + oVydejka:= aVydejky.AddObject; + + idDoklad:= VarToStr(FieldByNameValues('IDDoklad')).ToInteger; + oVydejka.I['id']:= idDoklad; + lSQL:= 'SELECT IDSklad, RadaDokladu, PoradoveCislo, DatPorizeni FROM ' + tblDZ + ' WHERE ID=' + idDoklad.ToString; + with Helios.OpenSQL (lSQL) do + if (RecordCount=1) then + begin + oVydejka.S['rada_dokladu']:= VarToStr(FieldByNameValues('RadaDokladu')); + oVydejka.I['poradove_cislo']:= VarToStr(FieldByNameValues('PoradoveCislo')).ToInteger; + if not VarIsNull(FieldByNameValues('DatPorizeni')) then + oVydejka.D['dat_porizeni']:= StrToDateTime (VarToStr(FieldByNameValues('DatPorizeni'))) + else + oVydejka.Values['dat_porizeni']:= Null; + oVydejka.S['sklad']:= VarToStr(FieldByNameValues('IDSklad')); + end; + + lSQL:= 'SELECT p.ID, p.SkupZbo, p.RegCis, p.Nazev1, p.Mnozstvi, p.MJ, p.Mnozstvi*p.PrepMnozstvi AS MnozPrep, k.MJEvidence FROM ' + tblPZ + 'p INNER JOIN ' + tblSS + + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=' + idDoklad.ToString + + ' AND p.ID IN (SELECT IDPohybu FROM ' + tblPMZGenPZ + ' WHERE TypGen=0 AND IDPohybu IS NOT NULL AND IDMzdy=' + idMzdy.ToString + ')'; + with Helios.OpenSQL (lSQL) do + if (RecordCount>0) then + begin + aPolozky:= oVydejka.A['polozky']; + First; + while not(EOF) do + begin + oPolozka:= aPolozky.AddObject; + oPolozka.S['skup_zbo']:= VarToStr(FieldByNameValues('SkupZbo')); + oPolozka.S['reg_cis']:= VarToStr(FieldByNameValues('RegCis')); + oPolozka.S['nazev1']:= VarToStr(FieldByNameValues('Nazev1')); + oPolozka.F['mnozstvi']:= VarToStr(FieldByNameValues('Mnozstvi')).ToDouble; + if not VarIsNull(FieldByNameValues('MJ')) then + oPolozka.S['mj']:= VarToStr(FieldByNameValues('MJ')) + else + oPolozka.Values['mj']:= Null; + oPolozka.F['mnozstvi_prepoctene']:= VarToStr(FieldByNameValues('MnozPrep')).ToDouble; + if not VarIsNull(FieldByNameValues('MJEvidence')) then + oPolozka.S['mjevid']:= VarToStr(FieldByNameValues('MJEvidence')) + else + oPolozka.Values['mjevid']:= Null; + + idPZ:= VarToStr(FieldByNameValues('ID')).ToInteger; + lSQL:= 'SELECT vcp.Nazev, vcs.Nazev1, vcs.Nazev2, vcp.Mnozstvi, vcp.DatExpirace FROM ' + tblVyrCP + ' vcp INNER JOIN ' + tblVyrCS + + ' vcs ON (vcs.ID=vcp.IDVyrCis) WHERE vcp.IDPolozkaDokladu=' + idPZ.ToString; + with Helios.OpenSQL (lSQL) do + begin + aVyrCisla:= oPolozka.A['vyrobni_cisla']; + First; + while not(EOF) do + begin + oVyrCislo:= aVyrCisla.AddObject; + if not VarIsNull(FieldByNameValues('Nazev1')) then + oVyrCislo.S['paletovy_list']:= VarToStr(FieldByNameValues('Nazev1')) + else + oVyrCislo.Values['paletovy_list']:= Null; + if not VarIsNull(FieldByNameValues('Nazev')) then + oVyrCislo.S['sarze']:= VarToStr(FieldByNameValues('Nazev')) // vcs.Nazev2 + else + oVyrCislo.Values['sarze']:= Null; + oVyrCislo.F['mnozstvi']:= VarToStr(FieldByNameValues('Mnozstvi')).ToDouble; + if not VarIsNull(FieldByNameValues('DatExpirace')) then + oVydejka.D['dat_expirace']:= FieldByNameValues('DatExpirace') + else + oVydejka.Values['dat_expirace']:= Null; + Next; + end; + end; + + Next; + end; + end; + + Next; + end; + end; + end; + +// prijemka + if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPMZGenPZ + ' WHERE TypGen IN (2,3) AND IDPohybu IS NOT NULL AND IDMzdy=' + idMzdy.ToString)) then + begin + lSQL:= 'SELECT DISTINCT(IDDoklad) AS IDDoklad FROM ' + tblPZ + ' WHERE ID IN (SELECT IDPohybu FROM ' + tblPMZGenPZ + ' WHERE TypGen IN (2,3) AND IDPohybu IS NOT NULL AND IDMzdy=' + + idMzdy.ToString + ') GROUP BY IDDoklad'; + with Helios.OpenSQL (lSQL) do + begin + aPrijemky:= oMain.A['prijemky']; + First; + while not(EOF) do + begin + oPrijemka:= aPrijemky.AddObject; + + idDoklad:= VarToStr(FieldByNameValues('IDDoklad')).ToInteger; + oPrijemka.I['id']:= idDoklad; + lSQL:= 'SELECT IDSklad, RadaDokladu, PoradoveCislo, DatPorizeni FROM ' + tblDZ + ' WHERE ID=' + idDoklad.ToString; + with Helios.OpenSQL (lSQL) do + begin + oPrijemka.S['rada_dokladu']:= VarToStr(FieldByNameValues('RadaDokladu')); + oPrijemka.I['poradove_cislo']:= VarToStr(FieldByNameValues('PoradoveCislo')).ToInteger; + oPrijemka.S['dat_porizeni']:= VarToStr(FieldByNameValues('DatPorizeni')); + oPrijemka.S['sklad']:= VarToStr(FieldByNameValues('IDSklad')); + end; + + lSQL:= 'SELECT p.ID, p.SkupZbo, p.RegCis, p.Nazev1, p.Mnozstvi, p.MJ, p.Mnozstvi*p.PrepMnozstvi AS MnozPrep, k.MJEvidence FROM ' + tblPZ + 'p INNER JOIN ' + tblSS + + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=' + idDoklad.ToString + + ' AND p.ID IN (SELECT IDPohybu FROM ' + tblPMZGenPZ + ' WHERE TypGen IN (2,3) AND IDPohybu IS NOT NULL AND IDMzdy=' + idMzdy.ToString + ')'; + with Helios.OpenSQL (lSQL) do + begin + aPolozky:= oPrijemka.A['polozky']; + First; + while not(EOF) do + begin + oPolozka:= aPolozky.AddObject; + oPolozka.S['skup_zbo']:= VarToStr(FieldByNameValues('SkupZbo')); + oPolozka.S['reg_cis']:= VarToStr(FieldByNameValues('RegCis')); + oPolozka.S['nazev1']:= VarToStr(FieldByNameValues('Nazev1')); + oPolozka.F['mnozstvi']:= VarToStr(FieldByNameValues('Mnozstvi')).ToDouble; + oPolozka.S['mj']:= VarToStr(FieldByNameValues('MJ')); + oPolozka.F['mnozstvi_prepoctene']:= VarToStr(FieldByNameValues('MnozPrep')).ToDouble; + oPolozka.S['mjevid']:= VarToStr(FieldByNameValues('MJEvidence')); + + idPZ:= VarToStr(FieldByNameValues('ID')).ToInteger; + lSQL:= 'SELECT vcp.Nazev, vcs.Nazev1, vcs.Nazev2, vcp.Mnozstvi, vcp.DatExpirace FROM ' + tblVyrCP + ' vcp INNER JOIN ' + tblVyrCS + + ' vcs ON (vcs.ID=vcp.IDVyrCis) WHERE vcp.IDPolozkaDokladu=' + idPZ.ToString; + with Helios.OpenSQL (lSQL) do + begin + aVyrCisla:= oPolozka.A['vyrobni_cisla']; + First; + while not(EOF) do + begin + oVyrCislo:= aVyrCisla.AddObject; + oVyrCislo.S['paletovy_list']:= VarToStr(FieldByNameValues('Nazev1')); + oVyrCislo.S['sarze']:= VarToStr(FieldByNameValues('Nazev')); // vcs.Nazev2 + oVyrCislo.F['mnozstvi']:= VarToStr(FieldByNameValues('Mnozstvi')).ToDouble; + oVyrCislo.S['dat_expirace']:= VarToStr(FieldByNameValues('DatExpirace')); + Next; + end; + end; + + Next; + end; + end; + Next; + end; + end; + end; + end; + jsonOut:= oMain.ToJSON(false); + finally +{ + if (oPolozka<>nil) then + FreeAndNil (oPolozka); + if (oPrijemka<>nil) then + FreeAndNil (oPrijemka); + if (oVydejka<>nil) then + FreeAndNil (oVydejka); + if (aPrijemky<>nil) then + FreeAndNil (aPrijemky); + if (aVydejky<>nil) then + FreeAndNil (aVydejky); +} + end; + + oMain:= TJsonObject.Create; + oMain.FromUtf8JSON(jsonOut); + result:= oMain; + end; + + + + + function TformUkonceniPalety.NactiPocetKAZEvidRozpOperR: Extended; + var lSQL: string; + begin + result:= 0; + if (idEvEOp>0) then + begin + lSQL:= 'SELECT TOP(1) vc.Mnozstvi-vc.Odvedeno-vc.Zmetky AS Zbytek FROM ' + tblRozpracOperR + ' eor INNER JOIN ' + tblRozpracOper + ' eo ON (eo.ID=eor.IDEvidRozpracOper) LEFT JOIN '; + lSQL:= lSQL + tblPrikazVC + ' vc ON (vc.ID=eor.IDVyrCis) WHERE eor.IDPrikaz=' + idVPr.ToString + ' AND eo.ID=' + idEvEOp.ToString; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + result:= VarToStr(FieldByNameValues('Zbytek')).ToExtended; + end; + end; + + + + + procedure TformUkonceniPalety.NactiParemetry; + var lSQL: string; + begin + idKmen:= 0; + mjEvid:= ''; + if (idVPr>0) then + begin + with Helios.OpenSQL('SELECT k.SkupZbo, k.RegCis, k.Nazev1, vp.IDTabKmen, k.MJEvidence FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE vp.ID=' + idVPr.ToString) do + begin + idKmen:= VarToStr(FieldByNameValues('IDTabKmen')).ToInteger; + mjEvid:= VarToStr(FieldByNameValues('MJEvidence')); + edtSZ.Text:= VarToStr(FieldByNameValues('SkupZbo')); + edtRegCis.Text:= VarToStr(FieldByNameValues('RegCis')); + edtNazev1.Text:= VarToStr(FieldByNameValues('Nazev1')); + end; + + pocKA:= NactiPocetKAZEvidRozpOperR; + edtKA.Text:= pocKA.ToString.Replace('.', ','); + + prepKA2ks:= 0; + prepKA2pal:= 0; + + if (mjEvid.ToUpper='KA') then + begin + ksVKA:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE KodMJ1=N''KA'' AND KodMJ2=N''Ks'' AND IDKmenZbozi=' + idKmen.ToString); + prepKA2ks:= ksVKA; + edtKs.Text:= (pocKA * ksVKA).ToString.Replace('.', ','); + + prepKA2pal:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE KodMJ1=N''KA'' AND KodMJ2=N''pal'' AND IDKmenZbozi=' + idKmen.ToString); + end; + + end; + + idPalety:= 0; + if (paleta<>'') and (sarze<>'') then + idPalety:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblPalety + ' WHERE CisloPalety=N' + paleta.QuotedString + ' AND Sarze=N' + sarze.QuotedString); + + end; + + + + + procedure TformUkonceniPalety.BarvyBtnDleParam; + begin + if (rbTiskKopie1.Checked) then + begin + pnlTiskKopie1.Color:= clMoneyGreen; + rbTiskKopie1.Color:= clMoneyGreen; + end + else + begin + pnlTiskKopie1.Color:= clBtnFace; + rbTiskKopie1.Color:= clBtnFace; + end; + if (rbTiskKopie2.Checked) then + begin + pnlTiskKopie2.Color:= $005B5BFF; + rbTiskKopie2.Color:= $005B5BFF; +// pnlTiskKopie2.Color:= clMoneyGreen; +// rbTiskKopie2.Color:= clMoneyGreen; + end + else + begin + pnlTiskKopie2.Color:= clBtnFace; + rbTiskKopie2.Color:= clBtnFace; + end; + + if (rbPokracujAno.Checked) then + begin + edtPokrac.Text:= '1'; + pnlPokracujAno.Color:= clMoneyGreen; + rbPokracujAno.Color:= clMoneyGreen; + end + else + begin + pnlPokracujAno.Color:= clBtnFace; + rbPokracujAno.Color:= clBtnFace; + end; + if (rbPokracujNe.Checked) then + begin + edtPokrac.Text:= '2'; + pnlPokracujNe.Color:= $005B5BFF; + rbPokracujNe.Color:= $005B5BFF; +// pnlPokracujNe.Color:= clMoneyGreen; +// rbPokracujNe.Color:= clMoneyGreen; + end + else + begin + pnlPokracujNe.Color:= clBtnFace; + rbPokracujNe.Color:= clBtnFace; + end; + end; + + + + procedure TformUkonceniPalety.rbPokracujAnoClick (Sender: TObject); + begin + if (rbPokracujAno.Checked) then + rbPokracujNe.Checked:= false; + BarvyBtnDleParam; + end; + + + + procedure TformUkonceniPalety.rbPokracujNeClick (Sender: TObject); + begin + if (rbPokracujNe.Checked) then + rbPokracujAno.Checked:= false; + BarvyBtnDleParam; + end; + + + + procedure TformUkonceniPalety.rbTiskKopie1Click (Sender: TObject); + begin + if (rbTiskKopie1.Checked) then + rbTiskKopie2.Checked:= false; + BarvyBtnDleParam; + end; + + + + procedure TformUkonceniPalety.rbTiskKopie2Click (Sender: TObject); + begin + if (rbTiskKopie2.Checked) then + rbTiskKopie1.Checked:= false; + BarvyBtnDleParam; + end; + + + + + + procedure TformUkonceniPalety.btnObrazovkaClick (Sender: TObject); + begin + btnObrazovka.BackColor:= clMoneyGreen; + btnObrazovka.HoverColor:= clMoneyGreen; + btnTiskarna.BackColor:= clBtnFace; + btnTiskarna.HoverColor:= clBtnFace; + + Label2.Visible:= false; + pnlTiskKopie1.Visible:= false; + pnlTiskKopie2.Visible:= false; + + tiskNa:= 2; + end; + + + + + procedure TformUkonceniPalety.btnTiskarnaClick (Sender: TObject); + begin + btnTiskarna.BackColor:= clMoneyGreen; + btnTiskarna.HoverColor:= clMoneyGreen; + btnObrazovka.BackColor:= clBtnFace; + btnObrazovka.HoverColor:= clBtnFace; + + Label2.Visible:= true; + pnlTiskKopie1.Visible:= true; + pnlTiskKopie2.Visible:= true; + + tiskNa:= 1; + end; + + + + procedure TformUkonceniPalety.btnZapisPaletyATiskClick (Sender: TObject); + var lSQL, lSQL2, podm, errMsg, a, novyPL, idMzdyS, idMezdS, skSubPrikaz, sTemp, sRnd, sklVyd, radaVyd: string; + nazevOp, mjDilce: string; + pocKA, pocKAOld, pocKS, noveMnoz, NPalPocKA, NPalPocKS, prepKA2ks, mnozProKoef, koefMn : extended; + casPrace, idEvOpR, idMzdy, locIdVPr, d, d2, cnt: integer; + bid, idF, idPalUkonceni, idPrac, idDZ, idDZVyd: integer; + spotrebaTesto, spotreba702, vydejOK: boolean; + fSarzeVydej: TformSarzeVydej; + doJedneVydejky: Boolean; + + lHTTP: TIdHTTP; + ssl: TIdSSLIOHandlerSocketOpenSSL; + lParamList, respStream: TStringStream; + resp: string; + joOut, joIn, itemsObj: TJSONObject; + begin + idMezdS:= ''; + idPalUkonceni:= 0; + + SetClassLong (TForm(Sender).Handle, GCL_HCURSOR, Screen.Cursors[crHourGlass]); + Screen.Cursor:= crHourglass; + + helUtils.ReseedTable(Helios, tblPMZ); + helUtils.ReseedTable(Helios, tblPalety); + helUtils.ReseedTable(Helios, tblPaletyUkonceni); + + if not(TryStrToFloat(edtKs.Text.Replace(' ','').Trim, pocKS)) then + pocKS:= 0; + if not(TryStrToFloat(edtKA.Text.Replace(' ','').Trim, pocKA)) then + pocKA:= 0; + if not(TryStrToFloat(edtPlneKA.Text.Replace(' ','').Trim, NPalPocKA)) then + NPalPocKA:= 0; + if not(TryStrToFloat(edtKsVPoslednimKA.Text.Replace(' ','').Trim, NPalPocKS)) then + NPalPocKS:= 0; + + pocKAOld:= pocKA; + + pocKA:= pocKA + NPalPocKA; + if (NPalPocKS>0) and (prepKA2ks<>0) then + pocKA:= pocKA + (NPalPocKS/prepKA2ks); + + if (idEvEOp>0) and (pocKA>0) then + begin + spotrebaTesto:= false; + lSQL:= 'SELECT 1 FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (p.IDTabKmen=k.ID) WHERE p.IDPrikazVyssi=' + idVPr.ToString + ' AND k.SkupZbo=N''701'''; + if (helUtils.sqlExistsTestGeneral (Helios, lSQL)) then + spotrebaTesto:= true; + +// spotreba tisicikus (SK 702), na kterem je testo + spotreba702:= false; + if not(spotrebaTesto) then + begin + lSQL:= 'SELECT 1 FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (p.IDTabKmen=k.ID) WHERE p.IDPrikazVyssi=' + idVPr.ToString + ' AND k.SkupZbo=N''702'''; + if (helUtils.sqlExistsTestGeneral (Helios, lSQL)) then + spotreba702:= true; + end; + + + lSQL:= 'INSERT ' + tblPaletyUkonceni + ' (IDPalety, PocetKs, PocetKA, NeuplnaPalPocetKA, NeuplnaPalKsVPoslKA, IDPrikaz) SELECT ' + idPalety.ToString + ', ' + pocKS.ToString.Replace(',', '.') + ', '; + if (NPalPocKA>0) then + lSQL:= lSQL + NPalPocKA.ToString.Replace(',', '.') + else + lSQL:= lSQL + pocKAOld.ToString.Replace(',', '.'); + lSQL:= lSQL + ', ' + NPalPocKA.ToString.Replace(',', '.') + ', ' + NPalPocKS.ToString.Replace(',', '.') + ', ' + idVPr.ToString + CRLF; + lSQL:= lSQL + 'SELECT SCOPE_IDENTITY() AS newID'; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + idPalUkonceni:= VarToStr(FieldByNameValues('newID')).ToInteger; + + + idPrac:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDStroje FROM ' + tblRozpracOper + ' WHERE ID=' + idEvEOp.ToString); + if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblRozpracOper + ' WHERE Stav=20 AND ID=' + idEvEOp.ToString)) then + begin + + lSQL:= 'UPDATE ' + tblRozpracOper + ' SET CasUkonceni=GETDATE() WHERE ID=' + idEvEOp.ToString; + Helios.ExecSQL(lSQL); + casPrace:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT DATEDIFF(second, CasZahajeni, CasUkonceni) FROM ' + tblRozpracOper + ' WHERE ID=' + idEvEOp.ToString); + if (casPrace=0) then + casPrace:= 60; + + + +// uprava odvadeneho mnozstvi v evidenci rozpracovanych operaci podle zadaneho poctu KA na neuplne palete, bez kusu v poslednim KA + if ((NPalPocKA>0) and (NPalPocKS=0)) or (1=1) then + begin + koefMn:= 0; + d:= 0; + lSQL:= 'SELECT r.ID, r.Mnoz_odv, ISNULL(re._KoefMnoz, 1) AS Koef, pp.Nazev, k.MJEvidence, r.DokladPrPostup FROM ' + tblRozpracOperR + ' r INNER JOIN ' + tblPrPost + + ' pp ON (pp.IDPrikaz=r.IDPrikaz AND pp.Doklad=r.DokladPrPostup AND pp.Alt=r.AltPrPostup AND pp.IDOdchylkyDo IS NULL) INNER JOIN ' + tblKZ + + ' k ON (k.ID=pp.Dilec) LEFT JOIN ' + tblRozpracOperRE + ' re ON (re.ID=r.ID) WHERE r.IDEvidRozpracOper=' + + idEvEOp.ToString + ' ORDER BY r.DokladPrPostup DESC'; + with Helios.OpenSQL(lSQL) do + begin + First; + if (recordCount=1) then + begin + nazevOp:= VarToStr(FieldByNameValues('Nazev')); + mjDilce:= VarToStr(FieldByNameValues('MJEvidence')); + mnozProKoef:= VarToStr(FieldByNameValues('Mnoz_odv')).ToExtended; + d:= VarToStr(FieldByNameValues('DokladPrPostup')).ToInteger; + koefMn:= helUtils.RoundToEX (pocKAOld / mnozProKoef, -4); + end; + if (RecordCount>1) then + begin + while not(EOF) do + begin + nazevOp:= VarToStr(FieldByNameValues('Nazev')); + mjDilce:= VarToStr(FieldByNameValues('MJEvidence')); + mnozProKoef:= VarToStr(FieldByNameValues('Mnoz_odv')).ToExtended; + if (nazevOp.ToLower.Contains('balení')) and (mjDilce.ToLower='ka') and (mnozProKoef<>0) then + begin + d:= VarToStr(FieldByNameValues('DokladPrPostup')).ToInteger; + koefMn:= helUtils.RoundToEX (pocKAOld / mnozProKoef, -4); + end; + Next; + end; + end; + end; + if (koefMn<>0) and (d<>0) then + begin + lSQL:= 'SELECT ID, Mnoz_odv, DokladPrPostup FROM ' + tblRozpracOperR + ' WHERE IDEvidRozpracOper=' + idEvEOp.ToString + 'ORDER BY DokladPrPostup'; + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + d2:= VarToStr(FieldByNameValues('DokladPrPostup')).ToInteger; + if (d=d2) then + Helios.ExecSQL('UPDATE ' + tblRozpracOperR + ' SET Mnoz_odv=' + pocKAOld.ToString + ' WHERE ID=' + VarToStr(FieldByNameValues('ID'))) + else + Helios.ExecSQL('UPDATE ' + tblRozpracOperR + ' SET Mnoz_odv=ROUND(Mnoz_odv * ' + koefMn.ToString.Replace(',', '.') + ', 2) WHERE ID=' + VarToStr(FieldByNameValues('ID'))); + Next; + end; + end; + end; + end; + + + + lSQL:= 'EXEC dbo.hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=' + idEvEOp.ToString + ', @CelkovyCas_S=' + casPrace.ToString + ', @KVO=1'; + Helios.ExecSQL(lSQL); + + if (idPrac>0) then + lSQL:= 'EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=' + idEvEOp.ToString + ', @GenerovatEvidenciOperaci=1' + else + lSQL:= 'EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=' + idEvEOp.ToString + ', @GenerovatEvidenciOperaci=0'; + Helios.ExecSQL(lSQL); + + +// na sklad 261 nemusim delat jednu vydejku + doJedneVydejky:= false; + + lSQL:= 'SELECT ID FROM ' + tblRozpracOperR + ' WHERE IDEvidRozpracOper=' + idEvEOp.ToString; + with Helios.OpenSQL (lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + idEvOpR:= VarToStr(FieldByNameValues('ID')).ToInteger; + lSQL:= 'SELECT ISNULL(IDVyrCis,0) FROM ' + tblRozpracOperR + ' WHERE ID=' + idEvOpR.ToString; + idVyrCisPrikaz:= helUtils.getHeliosIntVal (Helios, 0, lSQL); +{ + lSQL:= 'UPDATE eor SET eor.Mnoz_odv=' + pocKA.ToString.Replace(',', '.') + ' FROM ' + tblRozpracOper + ' eo INNER JOIN ' + tblRozpracOperR + ' eor ON (eor.IDEvidRozpracOper=eo.ID)'; + lSQL:= lSQL + ' WHERE eo.ID=' + idEvEOp.ToString; + Helios.ExecSQL(lSQL); +} + + lSQL:= 'SELECT ID FROM ' + tblPMZ + ' WHERE IDEvidRozpracOperR=' + idEvOpR.ToString; + idMzdy:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + if (idMzdy>0) then + begin + idMezdS:= idMezdS + idMzdy.ToString + ','; + + idDZVyd:= 0; + if (doJedneVydejky) then + begin + locIdVPr:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDPrikaz FROM ' + tblPMZ + ' WHERE ID=' + idMzdyS); + + lSQL:= 'SELECT ISNULL(pkz.VychoziSklad, r.VydejMatPol_SkladProGenHlavDZ) FROM ' + tblPrikazRada + ' r INNER JOIN ' + tblVPr + ' p ON (p.Rada=r.Rada) LEFT JOIN ' + tblParamKZ; + lSQL:= lSQL + ' pkz ON (pkz.IDKmenZbozi=p.IDTabKmen) WHERE p.ID=' + locIdVPr.ToString; + sklVyd:= helUtils.getHeliosStrVal(Helios, '261', lSQL); + sklVyd:= '261'; + + lSQL:= 'SELECT r.RadaDokl_GenerRezVyd_Mat FROM ' + tblPrikazRada + ' r INNER JOIN ' + tblVPr + ' p ON (p.Rada=r.Rada) WHERE p.ID=' + locIdVPr.ToString; + radaVyd:= helUtils.getHeliosStrVal(Helios, '223', lSQL); + // radaVyd:= '223'; + + lSQL:= 'SELECT TOP(1) d.ID FROM ' + tblDZ + ' d INNER JOIN ' + tblDZe + ' de ON (d.ID=de.ID) WHERE d.DruhPohybuZbo=4 AND d.Realizovano=0 AND d.IDSklad=N' + sklVyd.QuotedString; + lSQL:= lSQL + ' AND d.RadaDokladu=N' + radaVyd.QuotedString + ' AND de._Vyroba_DenSmena=N' + denSmena.QuotedString + ' ORDER BY d.ID DESC'; + idDZVyd:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + end; + + + // vydejka z evidence mzdy + helUtils.ReseedTable (Helios, tblDZ); + helUtils.ReseedTable (Helios, tblPZ); + + sRnd:= '[dbo].[' + helUtils.RandomString(6, '_PekPohOZ') + ']'; + lSQL:= 'SET NOCOUNT ON' + CRLF + 'DROP TABLE IF EXISTS ' + sRnd + CRLF + 'CREATE TABLE ' + sRnd + ' (ID INT, IDPohZbo INT, IDKmen INT, IDSklad NVARCHAR(30), IDDoklad INT )' + CRLF; + + lSQL:= lSQL + 'DECLARE @e NVARCHAR(500)=N''''' + CRLF + 'IF OBJECT_ID(N''dbo.ep_Vyroba_GenVydejZeMzdy'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=' + idMzdy.ToString; + lSQL:= lSQL + ', @IDDoklad=' + IfThen(idDZVyd=0, 'NULL', idDZVyd.ToString) + ', @realizujVydej=1, @respExistDokl=1, @spotrebaTesto=' + IfThen(spotrebaTesto, '1', '0'); + lSQL:= lSQL + ', @errMsg=@e OUT, @extTab=N' + sRnd.QuotedString + ', @vydejAll=0, @denSmena=N' + denSmena.QuotedString + ', @smazVydejTesto=' + IfThen(spotrebaTesto, '1', '0'); + if (spotreba702) then + lSQL:= lSQL + ', @spotreba702=1'; + lSQL:= lSQL + CRLF + 'SELECT @e'; + errMsg:= helUtils.getHeliosStrVal (Helios, '', lSQL); // cannot insert NULL to IDSklad (TabStavSkladu) + + + if (errMsg<>'') then + begin + Helios.ExecSQL ('UPDATE ' + tblPaletyUkonceni + ' SET ErrMsg=LEFT(N' + errMsg.QuotedString + ',255) WHERE ID=' + idPalUkonceni.ToString); + + lSQL:= 'DELETE FROM ' + tblPZ + ' WHERE ID IN (SELECT IDPohZbo FROM ' + sRnd + ' WHERE IDPohZbo IS NOT NULL)'; + Helios.ExecSQL (lSQL); + helUtils.ReseedTable (Helios, tblPZ); + end + else + begin + // kontrola na zadavani sarzi - vypnuto + if (1=0) then + begin +{$IFDEF DEBUG} + lSQL:= 'MERGE ' + sRnd + ' AS T USING (SELECT p.ID, p.IDDoklad, s.IDSklad, s.IDKmenZbozi FROM ' + tblPZ + ' p INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad)) AS S ON (T.IDPohZbo=S.ID)'; + lSQL:= lSQL + ' WHEN MATCHED THEN UPDATE SET T.IDKmen=s.IDKmenZbozi, T.IDDoklad=S.IDDoklad, T.IDSklad=S.IDSklad;'; + Helios.ExecSQL (lSQL); +{$ENDIF} + lSQL:= 'SELECT p.ID FROM ' + tblPZ + ' p INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi) INNER JOIN ' + tblKZe; + lSQL:= lSQL + ' ke ON (ke.ID=k.ID) WHERE p.ID IN (SELECT IDPohZbo FROM ' + sRnd + ' WHERE IDPohZbo IS NOT NULL) AND ke._Vyroba_ZadavatSarzi=1'; + cnt:= helUtils.SQLGetRowCount(Helios, lSQL); + if (cnt>0) then + begin + sTemp:= getHeliosRowToStringDelim (Helios, lSQL, ','); + if (sTemp='') then + sTemp:= helUtils.getHeliosStrVal(Helios, '', lSQL.Replace('T p.ID F', 'T STRING_AGG(p.ID,N'','') F')); + + fSarzeVydej:= TformSarzeVydej.Create(nil); + try + fSarzeVydej.Helios:= Helios; + fSarzeVydej.idVydejka:= idDZVyd; + fSarzeVydej.sIdPohybuOZ:= sTemp; + fSarzeVydej.ShowModal; + vydejOK:= fSarzeVydej.retOK; + finally + fSarzeVydej.Free; + end; + end; + end; + end; + + if (sRnd<>'') then + Helios.ExecSQL('DROP TABLE IF EXISTS ' + sRnd); + + + // prijemka z evidence mzdy + lSQL:= ''; +{ + lSQL:= 'DROP TABLE IF EXISTS #HDCTabGenOdvodZeMzdyKonfig' + CRLF + 'CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30)'; + lSQL:= lSQL + ', BezVyrobnichCisel BIT DEFAULT 0)' + CRLF + 'INSERT #HDCTabGenOdvodZeMzdyKonfig (SkladProOdvod) SELECT N''211''' + CRLF; +} + lSQL:= lSQL + 'DECLARE @e NVARCHAR(500)=N''''; IF OBJECT_ID(N''dbo.ep_Vyroba_GenOdvodZeMzdy'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=' + idMzdy.ToString + + ', @bezVyrCis=0, @realizujPrijem=1, @errMsg=@e OUT'; // @kopiiNaTechSklad=0, + if (edtNazev1.Text.Contains('polotovar')) then + lSQL:= lSQL + ', @skladOdvod=N''311''' + else + lSQL:= lSQL + ', @skladOdvod=N''312'''; + lSQL:= lSQL + CRLF + 'SELECT @e'; + errMsg:= helUtils.getHeliosStrVal (Helios, '', lSQL); + + +// posli JSON o vyrobene palete + try + resp:= GenerujJSON (idMzdy).ToJSON (false).Replace(#10, '').Replace(#9, '').Replace('''', ''); + if (resp<>'') then + begin + resp:= TJSON.JsonEncode(resp); + lSQL:= 'UPDATE ' + tblPalety + ' SET JSONDataKonec=N' + resp.QuotedString + ' WHERE ID=' + idPalety.ToString; + Helios.ExecSQL(lSQL); + + try + lParamList:= TStringStream.Create(''); + lParamList.WriteString (resp); + +// http klient je stejny + lHTTP:= TIdHTTP.Create; + if (datMod.phServer.Contains('https')) then + begin + ssl:= TIdSSLIOHandlerSocketOpenSSL.Create(nil); + ssl.SSLOptions.Method:= sslvTLSv1_2; + ssl.SSLOptions.Mode:= sslmUnassigned; + lHTTP.IOHandler:= ssl; + end; + lHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent]; + lHTTP.Request.ContentType := 'application/ld+json'; + lHTTP.Request.Accept := 'application/ld+json, text/javascript, */*; q=0.01'; + + resp:= ''; + respStream:= TStringStream.Create(''); + if (helUtils.PingHost (helUtils.NetGetHostName(datMod.phServer))) then + begin + lHTTP.Post (datMod.phServer + IfThen(datMod.phServer.EndsWith('/'), '', '/') + 'prikaz', lParamList, respStream); + resp:= respStream.DataString.Replace('\/', '/'); + Helios.ExecSQL('UPDATE ' + tblPalety + ' SET JSONKonecResp=N' + resp.QuotedString + ' WHERE ID=' + idPalety.ToString); + end; + + finally + respStream.Free; + lParamList.Free; + if (ssl<>nil) then + ssl.Free; + lHTTP.Free; + end; + end; + finally + end; + + { + if (errMsg='') then + begin + lSQL:= 'SELECT TOP(1) d.ID FROM ' + tblPMZGenPZ + ' pmzg INNER JOIN ' + tblPZ + ' p ON (p.ID=pmzg.IDPohybu) INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad)'; + lSQL:= lSQL + ' WHERE p.TypVyrobnihoDokladu=0 AND d.DruhPohybuZbo=0 AND d.Realizovano=0 AND pmzg.TypGen=2 AND pmzg.IDMzdy=' + idMzdyS; + idDZ:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + if (idDZ>0) then + begin + vydejOK:= true; + lSQL:= 'SELECT 1 FROM ' + tblDZe + ' WHERE ID=' + idDZ.ToString + ' AND _Vyroba_ZadatSarze=1'; + if (helUtils.sqlExistsTestGeneral(Helios, lSQL)) then + begin + fSarzeVydej:= TformSarzeVydej.Create(nil); + try + fSarzeVydej.Helios:= Helios; + fSarzeVydej.idVydejka:= idDZ; + fSarzeVydej.ShowModal; + vydejOK:= fSarzeVydej.retOK; + finally + fSarzeVydej.Free; + end; + end; + if (vydejOK) then + begin + lSQL:= 'DECLARE @b BIT, @i INT' + CRLF + 'SET @i=' + Helios.UserId.ToString + CRLF; + lSQL:= lSQL + 'EXEC dbo.hp_Realizuj_Prijem @ID=' + idDZ.ToString + ', @DatumRealizace=NULL, @Uzivatel=@i, @BylaChyba=@b OUT'; + Helios.ExecSQL(lSQL); + end; + end; + end; + } + end; + + Next; + end; + end; + + if (idPalUkonceni>0) and (idMezdS<>'') then + begin + if (RightStr(idMezdS,1)=',') then + idMezdS:= LeftStr(idMezdS, idMezdS.Length-1); + + lSQL:= 'UPDATE ' + tblPaletyUkonceni + ' SET IDMezd=N' + idMzdyS.QuotedString + ' WHERE ID=' + idPalUkonceni.ToString; + Helios.ExecSQL(lSQL); + end; + + + + bid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Palety'''); +// idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-2'''); + if (bid>100000) then + begin + if (idFormPL>0) then + begin + podm:= 'hvw_Vyroba_Palety.CisloPalety=N' + edtPaleta.Text.QuotedString; + Helios.PrintForm3 (bid, idFormPL, podm); + end; + end; + + + + if (rbPokracujAno.Checked) then + begin + helUtils.ReseedTable(Helios, tblRozpracOper); + helUtils.ReseedTable(Helios, tblRozpracOperR); + + d:= 0; + a:= ''; + lSQL:= 'SELECT TOP(1) pp.Doklad, pp.Alt FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju + ' s ON (s.IDPrac=p.ID)'; + lSQL:= lSQL + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=' + idVPr.ToString + ' AND s.ID=' + idStroj.ToString; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + d:= VarToStr(FieldByNameValues('Doklad')).ToInteger; + a:= VarToStr(FieldByNameValues('Alt')); + end; + + if (d>0) then + begin + novyPL:= ''; + noveMnoz:= 0; + lSQL:= 'SELECT ID FROM ' + tblPrikazVC + ' WHERE ID>' + idVyrCisPrikaz.ToString + ' AND IDPrikaz=' + idVPr.ToString + ' AND (Mnozstvi-Odvedeno-Zmetky)>0'; + idVyrCisPrikaz:= helUtils.getHeliosIntVal(Helios, 0, lSQL); + if (idVyrCisPrikaz>0) then + begin + lSQL:= 'SELECT VyrCislo, Mnozstvi-Odvedeno-Zmetky AS Zbytek FROM ' + tblPrikazVC + ' WHERE ID=' + idVyrCisPrikaz.ToString; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + novyPL:= VarToStr(FieldByNameValues('VyrCislo')); + noveMnoz:= VarToStr(FieldByNameValues('Zbytek')).ToExtended; + end; + end; + + if (noveMnoz>0) then + begin + lSQL:= 'DECLARE @i INT, @i2 INT' + CRLF + 'EXEC @i=dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=' + datMod.idZamMistr.ToString + ', @IDStroje=' + idStroj.ToString + CRLF; + lSQL:= lSQL + 'IF (@i IS NOT NULL) EXEC @i2=dbo.ep_Vyroba_InsertEvidRozpracOperPol @IdEvidRozpOper=@i, @IdPrikaz=' + idVPr.ToString + ', @doklPrPost=' + d.ToString + ', @altPrPost=N' + a.QuotedString; + lSQL:= lSQL + ', @cisloPL=N' + novyPL.QuotedString + ', @sarze=N' + edtSarze.Text.QuotedString + IfThen(noveMnoz>0, ', @mnozOdv=' + noveMnoz.ToString, ''); + Helios.ExecSQL(lSQL); + end; + end; + + end; + + + Close; + end; // mam Evidenci rozprac. oper. + + Helios.ExecSQL('UPDATE ' + tblPalety + ' SET DatUkonceni=GETDATE() WHERE ID=' + idPalety.ToString); + + + if (prerusit) and (idVPr>0) then + Helios.ExecSQL('UPDATE ' + tblPrikaz + ' SET StavPrikazu=40 WHERE ID=' + idVPr.ToString); + end; + + Screen.Cursor:= crDefault; + SetClassLong(TForm(Sender).Handle, GCL_HCURSOR, Screen.Cursors[crDefault]); + end; + + + + + procedure TformUkonceniPalety.edtKAExit (Sender: TObject); + begin + edtKA.Text:= edtKA.Text.Trim; + if not(TryStrToFloat(edtKA.Text, pocKA)) then + pocKA:= 0; + pocKS:= pocKA * ksVKA; + edtKs.Text:= FormatFloat('##,##0.##', pocKS); + end; + + + + + procedure TformUkonceniPalety.edtKsExit (Sender: TObject); + begin + edtKs.Text:= edtKs.Text.Trim; + if not(TryStrToFloat(edtKs.Text, pocKS)) then + pocKS:= 0; + pocKA:= pocKS/ksVKA; + edtKA.Text:= FormatFloat('#,##0.##', pocKA); + end; + + + + + procedure TformUkonceniPalety.FormClose (Sender: TObject; var Action: TCloseAction); + begin + Action:= TCloseAction.caFree; + end; + + + + + procedure TformUkonceniPalety.FormShow (Sender: TObject); + var lSQL: string; + begin + NactiParemetry; + tiskNa:= 1; + + lSQL:= 'SELECT ISNULL(_KL,0) FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString; + idFormKA:= helUtils.getHeliosIntVal (Helios, 0, lSQL); +// lblWarnStitekKA.Visible:= (idFormKA=0); + + lSQL:= 'SELECT ISNULL(_PalStitek,0) FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString; + idFormPS:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + + lSQL:= 'SELECT ISNULL(_PLKK,0) FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString; + idFormPL:= helUtils.getHeliosIntVal (Helios, 0, lSQL); +// lblWarnStitekPL.Visible:= (idFormPL=0); + + + + SetWindowLong(btnZapisPaletyATisk.Handle, GWL_STYLE, GetWindowLong((btnZapisPaletyATisk as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + + edtPaleta.Text:= paleta; + edtSarze.Text:= sarze; + edtStroj.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + idStroj.ToString); + + edtDatVyroby.Text:= FormatDateTime('dd.mm.yyyy', Now); + lSQL:= 'DECLARE @d DATETIME=GETDATE(); SELECT Smena FROM dbo.ef_GetDatumASmenu (@d)'; + with Helios.OpenSQL(lSQL) do + edtSmena.Text:= VarToStr(FieldByNameValues('Smena')); + + edtPokrac.Text:= '1'; + + if (edtKA.CanFocus) then + edtKA.SetFocus; + + LabeledEdit2.EditLabel.Caption:= ''; + + end; + +end. diff --git a/frmVyberCinnostiStroje.dfm b/frmVyberCinnostiStroje.dfm new file mode 100644 index 0000000..b26b150 --- /dev/null +++ b/frmVyberCinnostiStroje.dfm @@ -0,0 +1,102 @@ +object formVyberCinnostiStroje: TformVyberCinnostiStroje + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsDialog + Caption = ' V'#253'b'#283'r '#269'innosti' + ClientHeight = 328 + ClientWidth = 257 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnClose = FormClose + OnShow = FormShow + DesignSize = ( + 257 + 328) + TextHeight = 21 + object rgCinnost: TRadioGroup + Left = 8 + Top = 22 + Width = 239 + Height = 241 + Caption = ' '#268'innosti ' + TabOrder = 0 + end + object btnOK: TButton + Left = 8 + Top = 281 + Width = 97 + Height = 35 + Anchors = [akLeft, akBottom] + Caption = 'OK' + TabOrder = 1 + OnClick = btnOKClick + ExplicitTop = 235 + end + object btnStorno: TButton + Left = 150 + Top = 281 + Width = 97 + Height = 35 + Anchors = [akRight, akBottom] + Caption = 'Storno' + TabOrder = 2 + OnClick = btnStornoClick + ExplicitTop = 235 + end + object rBtn1: TRadioButton + Left = 30 + Top = 58 + Width = 113 + Height = 17 + Caption = 'Odst'#225'vka' + Checked = True + TabOrder = 3 + TabStop = True + end + object rBtn2: TRadioButton + Left = 30 + Top = 86 + Width = 113 + Height = 23 + Caption = 'Oprava' + TabOrder = 4 + end + object rBtn3: TRadioButton + Left = 30 + Top = 117 + Width = 113 + Height = 23 + Caption = 'Bez v'#253'roby' + TabOrder = 5 + end + object rBtn4: TRadioButton + Left = 30 + Top = 147 + Width = 211 + Height = 24 + Caption = 'Ukon'#269'en'#237' p'#345#237'kazu (zak'#225'zky)' + TabOrder = 6 + end + object rBtn5: TRadioButton + Left = 30 + Top = 180 + Width = 97 + Height = 19 + Caption = 'Zkou'#353'ka' + TabOrder = 7 + end + object rBtnK: TRadioButton + Left = 30 + Top = 230 + Width = 129 + Height = 19 + Caption = 'Konec '#269'innosti' + TabOrder = 8 + end +end diff --git a/frmVyberCinnostiStroje.pas b/frmVyberCinnostiStroje.pas new file mode 100644 index 0000000..7908394 --- /dev/null +++ b/frmVyberCinnostiStroje.pas @@ -0,0 +1,91 @@ +unit frmVyberCinnostiStroje; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, + ddPlugin_TLB, Vcl.StdCtrls, Vcl.ExtCtrls; + +type + TformVyberCinnostiStroje = class(TForm) + rgCinnost: TRadioGroup; + btnOK: TButton; + btnStorno: TButton; + rBtn1: TRadioButton; + rBtn2: TRadioButton; + rBtn3: TRadioButton; + rBtn4: TRadioButton; + rBtn5: TRadioButton; + rBtnK: TRadioButton; + procedure btnStornoClick(Sender: TObject); + procedure btnOKClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + private + public + Helios: IHelios; + mrVal: integer; + stroj, cinnost: string; + end; + +var + formVyberCinnostiStroje: TformVyberCinnostiStroje; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helTabsBIDs; + +{$R *.dfm} + + procedure TformVyberCinnostiStroje.btnOKClick (Sender: TObject); + begin + mrVal:= 10; + Close; + end; + + + + + procedure TformVyberCinnostiStroje.btnStornoClick (Sender: TObject); + begin + mrVal:= 0; + Close; + end; + + + + procedure TformVyberCinnostiStroje.FormClose (Sender: TObject; var Action: TCloseAction); + begin + cinnost:= ''; + if (mrVal=10) then + begin + if (rBtn1.Checked) then + cinnost:= rBtn1.Caption + else + if (rBtn2.Checked) then + cinnost:= rBtn2.Caption + else + if (rBtn3.Checked) then + cinnost:= rBtn3.Caption + else + if (rBtn4.Checked) then + cinnost:= rBtn4.Caption + else + if (rBtn5.Checked) then + cinnost:= rBtn5.Caption + else + if (rBtnK.Checked) then + cinnost:= ''; + end; + Action:= TCloseAction.caFree; + end; + + + + procedure TformVyberCinnostiStroje.FormShow (Sender: TObject); + begin + self.Caption:= 'Výběr činnosti pro ' + stroj; + end; + +end. diff --git a/frmVyberPL.dfm b/frmVyberPL.dfm new file mode 100644 index 0000000..82dd51c --- /dev/null +++ b/frmVyberPL.dfm @@ -0,0 +1,154 @@ +object formVyberPL: TformVyberPL + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Vyberte paletov'#253' list' + ClientHeight = 506 + ClientWidth = 585 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + TextHeight = 25 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 585 + Height = 506 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel2 + Row = 2 + end + item + Column = 0 + Control = grdPaletListy + Row = 1 + end> + RowCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 80.000000000000000000 + end + item + Value = 10.000000000000000000 + end> + TabOrder = 0 + ExplicitLeft = 186 + ExplicitTop = 128 + ExplicitWidth = 185 + ExplicitHeight = 41 + object GridPanel2: TGridPanel + Left = 1 + Top = 455 + Width = 583 + Height = 50 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnOK + Row = 0 + end + item + Column = 1 + Control = btnZrusit + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + ExplicitLeft = 230 + ExplicitTop = 98 + ExplicitWidth = 185 + ExplicitHeight = 41 + DesignSize = ( + 583 + 50) + object btnOK: TButton + Left = 76 + Top = 5 + Width = 140 + Height = 40 + Anchors = [] + Caption = 'OK' + TabOrder = 0 + OnClick = btnOKClick + ExplicitLeft = 50 + end + object btnZrusit: TButton + Left = 366 + Top = 5 + Width = 140 + Height = 40 + Anchors = [] + Caption = 'Zru'#353'it' + TabOrder = 1 + OnClick = btnZrusitClick + ExplicitLeft = 339 + end + end + object grdPaletListy: TDBGrid + Left = 1 + Top = 51 + Width = 583 + Height = 404 + Align = alClient + DataSource = dm.dsPaletListy + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colPaletList' + Title.Alignment = taCenter + Title.Caption = #268#237'slo PL' + Width = 175 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatPorizeni' + Title.Alignment = taCenter + Title.Caption = 'Datum po'#345#237'zen'#237 + Width = 150 + Visible = True + end + item + Expanded = False + FieldName = 'colPoznamka' + Title.Alignment = taCenter + Title.Caption = 'Pozn'#225'mka' + Width = 213 + Visible = True + end> + end + end +end diff --git a/frmVyberPL.pas b/frmVyberPL.pas new file mode 100644 index 0000000..7790825 --- /dev/null +++ b/frmVyberPL.pas @@ -0,0 +1,51 @@ +unit frmVyberPL; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.ExtCtrls, Vcl.StdCtrls, + Data.DB, Vcl.Grids, Vcl.DBGrids; + +type + TformVyberPL = class(TForm) + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + btnOK: TButton; + btnZrusit: TButton; + grdPaletListy: TDBGrid; + procedure btnOKClick(Sender: TObject); + procedure btnZrusitClick(Sender: TObject); + private + public + typVyberu: integer; + Helios: IHelios; + paletList: string; + mrVal: integer; + end; + +var + formVyberPL: TformVyberPL; + +implementation +uses datMod, helUtils; + +{$R *.dfm} + + + + procedure TformVyberPL.btnOKClick(Sender: TObject); + begin + mrVal:= 10; + Close; + end; + + + + procedure TformVyberPL.btnZrusitClick(Sender: TObject); + begin + mrVal:= 0; + Close; + end; + +end. diff --git a/frmVyberSarze.dfm b/frmVyberSarze.dfm new file mode 100644 index 0000000..23d952e --- /dev/null +++ b/frmVyberSarze.dfm @@ -0,0 +1,145 @@ +object formVyberSarze: TformVyberSarze + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Vyberte '#353'arzi' + ClientHeight = 506 + ClientWidth = 585 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + TextHeight = 25 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 585 + Height = 506 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel2 + Row = 2 + end + item + Column = 0 + Control = grdSarze + Row = 1 + end> + RowCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 80.000000000000000000 + end + item + Value = 10.000000000000000000 + end> + TabOrder = 0 + object GridPanel2: TGridPanel + Left = 1 + Top = 455 + Width = 583 + Height = 50 + Align = alClient + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = btnOK + Row = 0 + end + item + Column = 1 + Control = btnZrusit + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 583 + 50) + object btnOK: TButton + Left = 76 + Top = 5 + Width = 140 + Height = 40 + Anchors = [] + Caption = 'OK' + TabOrder = 0 + OnClick = btnOKClick + end + object btnZrusit: TButton + Left = 366 + Top = 5 + Width = 140 + Height = 40 + Anchors = [] + Caption = 'Zru'#353'it' + TabOrder = 1 + OnClick = btnZrusitClick + end + end + object grdSarze: TDBGrid + Left = 1 + Top = 51 + Width = 583 + Height = 404 + Align = alClient + DataSource = dm.dsSarze + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + Columns = < + item + Expanded = False + FieldName = 'colSarze' + Title.Alignment = taCenter + Title.Caption = #352'ar'#382'e' + Width = 564 + Visible = True + end + item + Expanded = False + FieldName = 'colSarze2' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnoz' + Title.Alignment = taCenter + Title.Caption = 'Mno'#382'stv'#237 + Width = -1 + Visible = False + end + item + Expanded = False + FieldName = 'colIDKmen' + Visible = False + end> + end + end +end diff --git a/frmVyberSarze.pas b/frmVyberSarze.pas new file mode 100644 index 0000000..5f8dbca --- /dev/null +++ b/frmVyberSarze.pas @@ -0,0 +1,51 @@ +unit frmVyberSarze; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.ExtCtrls, Vcl.StdCtrls, + Data.DB, Vcl.Grids, Vcl.DBGrids; + +type + TformVyberSarze = class(TForm) + GridPanel1: TGridPanel; + GridPanel2: TGridPanel; + btnOK: TButton; + btnZrusit: TButton; + grdSarze: TDBGrid; + procedure btnOKClick(Sender: TObject); + procedure btnZrusitClick(Sender: TObject); + private + public + idKmen, typVyberu: integer; + Helios: IHelios; + sarze: string; + mrVal: integer; + end; + +var + formVyberSarze: TformVyberSarze; + +implementation +uses datMod, helUtils; + +{$R *.dfm} + + + + procedure TformVyberSarze.btnOKClick (Sender: TObject); + begin + mrVal:= 10; + Close; + end; + + + + procedure TformVyberSarze.btnZrusitClick (Sender: TObject); + begin + mrVal:= 0; + Close; + end; + +end. diff --git a/frmVyrobaMimoPlan.dfm b/frmVyrobaMimoPlan.dfm new file mode 100644 index 0000000..64844b1 --- /dev/null +++ b/frmVyrobaMimoPlan.dfm @@ -0,0 +1,356 @@ +object formVyrobaMimoPlan: TformVyrobaMimoPlan + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' V'#253'roba mimo pl'#225'n' + ClientHeight = 683 + ClientWidth = 1371 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 25 + object GridPanel1: TGridPanel + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 1365 + Height = 677 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdVyrobaMimoPlan + Row = 1 + end + item + Column = 0 + Control = GridPanel2 + Row = 0 + end> + RowCollection = < + item + Value = 10.000000000000000000 + end + item + Value = 90.000000000000000000 + end> + TabOrder = 0 + object grdVyrobaMimoPlan: TDBGrid + AlignWithMargins = True + Left = 4 + Top = 72 + Width = 1357 + Height = 601 + Align = alClient + DataSource = dm.dsVyrobaMimoPlan + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdVyrobaMimoPlanDrawColumnCell + OnDblClick = grdVyrobaMimoPlanDblClick + Columns = < + item + Expanded = False + FieldName = 'colIDKmen' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 53 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRegCis' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 136 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 308 + Visible = True + end + item + Expanded = False + FieldName = 'colZaklad' + Title.Alignment = taCenter + Title.Caption = 'Z'#225'klad' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 269 + Visible = True + end + item + Expanded = False + FieldName = 'colStroj' + Title.Alignment = taCenter + Title.Caption = 'Stroj' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 223 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colBaleni1' + Title.Alignment = taCenter + Title.Caption = 'ks/KA' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 73 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colBaleni2' + Title.Alignment = taCenter + Title.Caption = 'KA/pal' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 75 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colBaleni3' + Title.Alignment = taCenter + Title.Caption = 'ks/pal' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 77 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJ' + Title.Alignment = taCenter + Title.Caption = 'MJ' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 91 + Visible = True + end + item + Expanded = False + FieldName = 'colIDStroj' + Visible = False + end> + end + object GridPanel2: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 1357 + Height = 62 + Align = alClient + ColumnCollection = < + item + Value = 1.000000000000000000 + end + item + Value = 4.000000000000000000 + end + item + Value = 10.100000000000000000 + end + item + Value = 22.800000000000000000 + end + item + Value = 20.000000000000000000 + end + item + Value = 16.500000000000000000 + end + item + Value = 4.200000000000000000 + end + item + Value = 4.200000000000000000 + end + item + Value = 4.200000000000000000 + end + item + Value = 7.000000000000000000 + end + item + Value = 5.999999999999982000 + end> + ControlCollection = < + item + Column = 1 + Control = edtSZ + Row = 1 + end + item + Column = 2 + Control = edtRegCis + Row = 1 + end + item + Column = 3 + Control = edtNazev1 + Row = 1 + end + item + Column = 4 + Control = edtZaklad + Row = 1 + end + item + Column = 5 + Control = edtStroj + Row = 1 + end + item + Column = 0 + Control = lblReset + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + object edtSZ: TEdit + Left = 15 + Top = 31 + Width = 54 + Height = 30 + Align = alClient + Alignment = taCenter + MaxLength = 3 + TabOrder = 0 + OnChange = edtSZChange + ExplicitHeight = 33 + end + object edtRegCis: TEdit + Left = 69 + Top = 31 + Width = 137 + Height = 30 + Align = alClient + Alignment = taCenter + MaxLength = 30 + TabOrder = 1 + OnChange = edtRegCisChange + ExplicitHeight = 33 + end + object edtNazev1: TEdit + Left = 206 + Top = 31 + Width = 309 + Height = 30 + Align = alClient + Alignment = taCenter + MaxLength = 100 + TabOrder = 2 + OnChange = edtNazev1Change + ExplicitHeight = 33 + end + object edtZaklad: TEdit + Left = 515 + Top = 31 + Width = 271 + Height = 30 + Align = alClient + Alignment = taCenter + MaxLength = 100 + TabOrder = 3 + OnChange = edtZakladChange + ExplicitHeight = 33 + end + object edtStroj: TEdit + Left = 786 + Top = 31 + Width = 223 + Height = 30 + Align = alClient + Alignment = taCenter + MaxLength = 100 + TabOrder = 4 + OnChange = edtStrojChange + ExplicitHeight = 33 + end + object lblReset: TLabel + Left = 1 + Top = 31 + Width = 14 + Height = 30 + Align = alClient + Caption = 'X' + OnClick = lblResetClick + ExplicitWidth = 11 + ExplicitHeight = 25 + end + end + end +end diff --git a/frmVyrobaMimoPlan.pas b/frmVyrobaMimoPlan.pas new file mode 100644 index 0000000..5212b4c --- /dev/null +++ b/frmVyrobaMimoPlan.pas @@ -0,0 +1,375 @@ +unit frmVyrobaMimoPlan; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, + ddPlugin_TLB; + +type + TDBGridHelper = class helper for TDBGrid + function GetColumnIDByFieldName (const fldName: string): integer; + end; + + TformVyrobaMimoPlan = class(TForm) + GridPanel1: TGridPanel; + grdVyrobaMimoPlan: TDBGrid; + GridPanel2: TGridPanel; + edtSZ: TEdit; + edtRegCis: TEdit; + edtNazev1: TEdit; + edtZaklad: TEdit; + edtStroj: TEdit; + lblReset: TLabel; + procedure grdVyrobaMimoPlanDblClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure lblResetClick(Sender: TObject); + procedure edtSZChange(Sender: TObject); + procedure edtRegCisChange(Sender: TObject); + procedure edtNazev1Change(Sender: TObject); + procedure edtZakladChange(Sender: TObject); + procedure edtStrojChange(Sender: TObject); + procedure grdVyrobaMimoPlanDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + private + procedure Filtruj; + public + Helios: IHelios; + stroj: string; + end; + +var + formVyrobaMimoPlan: TformVyrobaMimoPlan; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils, helTabsBIDs; + +{$R *.dfm} + + + + function TDBGridHelper.GetColumnIDByFieldName (const fldName: string): Integer; + var i: integer; + begin + result:= -1; + for i:=0 to self.Columns.Count-1 do + if (self.Columns.Items[i].FieldName=fldName) then + result:= i; + end; + + + + + + procedure TformVyrobaMimoPlan.FormShow (Sender: TObject); + begin + GridPanel2.ColumnCollection.Items[1].SizeStyle:= ssAuto; + GridPanel2.ColumnCollection.Items[1].Value:= grdVyrobaMimoPlan.Columns.Items[grdVyrobaMimoPlan.GetColumnIDByFieldName('colSZ')].Width; + + Self.Caption:= ' Výroba mimo plán - ' + helUtils.getHeliosStrVal (Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + datMod.aktIdStroj.ToString); + + lblResetClick (Sender); + + dm.NactiVyrobuMimoPlan (self); + helUtils.waitEnd; + grdVyrobaMimoPlan.SetFocus; + end; + + + + + procedure TformVyrobaMimoPlan.edtNazev1Change (Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformVyrobaMimoPlan.edtRegCisChange (Sender: TObject); + begin + Filtruj; + end; + + + + procedure TformVyrobaMimoPlan.edtStrojChange (Sender: TObject); + begin + Filtruj; + end; + + + + + procedure TformVyrobaMimoPlan.edtSZChange (Sender: TObject); + begin + edtSZ.Text:= edtSZ.Text.Trim; + Filtruj; + end; + + + + + procedure TformVyrobaMimoPlan.edtZakladChange (Sender: TObject); + begin + Filtruj; + end; + + + + + + procedure TformVyrobaMimoPlan.Filtruj; + var filtr: string; + begin + filtr:= ''; + if (edtSZ.Text<>'') then + filtr:= 'UPPER(colSZ) LIKE ''%' + edtSZ.Text.Trim.ToUpper + '%'''; + + if (edtRegCis.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colRegCis) LIKE ''%' + edtRegCis.Text + '%'''; + + if (edtNazev1.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colNazev1) LIKE ''%' + edtNazev1.Text.Trim.ToUpper + '%'''; + + if (edtStroj.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colStroj) LIKE ''%' + edtStroj.Text.Trim.ToUpper + '%'''; + + if (edtZaklad.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colZaklad) LIKE ''%' + edtZaklad.Text.Trim.ToUpper + '%'''; + + + if (filtr='') then + begin + dm.vtVyrobaMimoPlan.Filter:= filtr; + dm.vtVyrobaMimoPlan.Filtered:= false; + end + else + begin + dm.vtVyrobaMimoPlan.Filter:= filtr; + dm.vtVyrobaMimoPlan.Filtered:= true; + end; + + grdVyrobaMimoPlan.Invalidate; + end; + + + + + + procedure TformVyrobaMimoPlan.grdVyrobaMimoPlanDblClick (Sender: TObject); + var lSQL, msg, podm, nazev1, mj, altPrP, VPrStr, stroj, nazevPrac: string; + bid, idKmen, idVPr, idPrac, idStroj, idEvidROp, idEvidROpPol, doklPrP: Integer; + krabVPalete: extended; + canCont: boolean; + begin + + idKmen:= grdVyrobaMimoPlan.DataSource.DataSet.FieldByName('colIDKmen').AsInteger; + nazev1:= grdVyrobaMimoPlan.DataSource.DataSet.FieldByName('colNazev1').AsString; +// krabVPalete:= grdVyrobaMimoPlan.DataSource.DataSet.FieldByName('colBaleni2').AsExtended; + + idStroj:= datMod.aktIdStroj; + stroj:= helUtils.getHeliosStrVal (Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + idStroj.ToString); +// idPrac:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDPrac FROM ' + tblCStroju + ' WHERE ID=' + idStroj.ToString); + + if (Helios.YesNo('Chcete zahájit výrobu 1 palety ' + #1 + nazev1 + #1 + CRLF + 'na stroji ' + #1 + stroj + #1 + ' ?', false)) then + begin + lSQL:= 'DROP TABLE IF EXISTS #TabVyrobaMimoPlan' + CRLF; + lSQL:= lSQL + 'CREATE TABLE #TabVyrobaMimoPlan (ID INT IDENTITY(1,1) NOT NULL, IDKmen INT NOT NULL, IDStroj INT NOT NULL, IDZamest INT NOT NULL)' + CRLF; + lSQL:= lSQL + 'INSERT #TabVyrobaMimoPlan (IDKmen, IDStroj, IDZamest) SELECT ' + idKmen.ToString + ', ' + idStroj.ToString + ', ' + datMod.idZamMistr.ToString + CRLF; + lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_VyrobaMimoPlan'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_VyrobaMimoPlan'; + try + Helios.ExecSQL(lSQL); + except on E:Exception do + Helios.Error('Chyba generování příkazů z plánu: ' + CRLF + E.Message); + end; + end; + +{ + lSQL:= 'DECLARE @idEvROp INT, @uroven INT, @maxUroven INT, @iChyba INT, @mamPolotovar BIT, @idPlan INT, @idVPr INT, @prpD INT, @idKmen INT, @szKmen NVARCHAR(3)'; + lSQL:= lSQL + ', @prpA NCHAR(1)=N''A'', @mn NUMERIC(19,6)' + CRLF; + lSQL:= lSQL + 'SET @mn=' + krabVPalete.ToString.Replace(',', '.') + CRLF; + lSQL:= lSQL + 'EXEC @idPlan=dbo.hp_NewVyrobniPlan @IDDilce=' + idKmen.ToString + ', @mnozstvi=@mn, @Poznamka=N''Výroba mimo plán'', @ZdrojPozadavku=0' + CRLF; + lSQL:= lSQL + 'IF (@idPlan>0)' + CRLF; + lSQL:= lSQL + ' BEGIN' + CRLF; + lSQL:= lSQL + ' UPDATE ' + tblPlan + ' SET Datum=dbo.hf_TruncDate(GETDATE()) WHERE ID=@idPlan' + CRLF; + lSQL:= lSQL + ' IF OBJECT_ID(N''tempdb..#TabPomSeznamVyrPlanuProZaplanovani'', N''U'') IS NULL CREATE TABLE #TabPomSeznamVyrPlanuProZaplanovani (ID INT NOT NULL)' + CRLF; + lSQL:= lSQL + ' IF OBJECT_ID(N''tempdb..#TabGenVyrPrikazy'', N''U'') IS NULL CREATE TABLE #TabGenVyrPrikazy (ID INT NOT NULL, UrovenVnoreni INT NULL)' + CRLF; + lSQL:= lSQL + ' INSERT #TabPomSeznamVyrPlanuProZaplanovani (ID) SELECT @idPlan' + CRLF + ' EXEC dbo.hp_VyrPlan_ZaplanujSeznam @GenPlanovaneVyroby=0' + CRLF; + lSQL:= lSQL + ' IF EXISTS (SELECT 1 FROM #TabGenVyrPrikazy)' + CRLF; + lSQL:= lSQL + ' BEGIN' + CRLF; + lSQL:= lSQL + ' UPDATE t SET t.UrovenVnoreni=s.UrovenVnoreni FROM #TabGenVyrPrikazy t, ' + tblVPr + ' s WHERE s.ID=t.ID' + CRLF; + lSQL:= lSQL + ' SET @maxUroven=(SELECT MAX(UrovenVnoreni) FROM #TabGenVyrPrikazy)' + CRLF; + lSQL:= lSQL + ' DECLARE c CURSOR LOCAL FOR SELECT ID, UrovenVnoreni FROM #TabGenVyrPrikazy' + CRLF; + lSQL:= lSQL + ' OPEN c' + CRLF; + lSQL:= lSQL + ' WHILE (1=1)' + CRLF; + lSQL:= lSQL + ' BEGIN' + CRLF; + lSQL:= lSQL + ' FETCH NEXT FROM c INTO @idVPr, @uroven' + CRLF; + lSQL:= lSQL + ' IF (@@FETCH_STATUS<>0) BREAK' + CRLF; + lSQL:= lSQL + ' SELECT @idKmen=p.IDTabKmen, @szKmen=k.SkupZbo FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=@idVPr' + CRLF; + lSQL:= lSQL + ' SET @mamPolotovar=0' + CRLF; + lSQL:= lSQL + ' IF EXISTS (SELECT 1 FROM ' + tblPrKVazby + ' v INNER JOIN ' + tblKZ + ' n ON (v.nizsi=n.ID) WHERE v.IDOdchylkyDo IS NULL AND v.IDPrikaz=@idVPr AND n.SkupZbo'; + lSQL:= lSQL + ' LIKE N''7%'' AND n.SkupZbo<>N''701'')' + CRLF; + lSQL:= lSQL + ' SET @mamPolotovar=1' + CRLF; + lSQL:= lSQL + ' IF (@szKmen NOT IN (N''701'')) AND (@mamPolotovar=0)' + CRLF; + lSQL:= lSQL + ' UPDATE ' + tblPrPost + ' SET pracoviste=' + idPrac.ToString + ', IDStroje=' + idStroj.ToString + ' WHERE IDOdchylkyDo IS NULL AND Nazev LIKE N''Peče%'' AND IDPrikaz=@idVPr' + CRLF; + lSQL:= lSQL + ' EXEC @iChyba=dbo.hp_ZadaniPrikazuDoVyroby @IDPrikaz=@idVPr, @OnlyPredzpracovani=0' + CRLF; + lSQL:= lSQL + ' IF (@iChyba=0) AND (@szKmen NOT IN (N''701''))' + CRLF; + lSQL:= lSQL + ' BEGIN' + CRLF; + lSQL:= lSQL + ' EXEC @idEvROp=dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=' + datMod.idZamMistr.ToString + ', @IDPracoviste=' + idPrac.ToString + ', @IDStroje=' + idStroj.ToString + CRLF; + lSQL:= lSQL + ' IF (@idEvROp>0)' + CRLF; + lSQL:= lSQL + ' BEGIN' + CRLF; + lSQL:= lSQL + ' SELECT TOP(1) @prpD=Doklad, @prpA=Alt FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr' + CRLF; + lSQL:= lSQL + ' EXEC dbo.ep_Vyroba_InsertEvidRozpracOperPol @IdEvidRozpOper=@idEvROp, @IdPrikaz=@idVPr, @doklPrPost=@prpD, @altPrPost=@prpA' + CRLF; + lSQL:= lSQL + ' END' + CRLF; + lSQL:= lSQL + ' END' + CRLF; + lSQL:= lSQL + ' END' + CRLF; + lSQL:= lSQL + ' CLOSE c' + CRLF; + lSQL:= lSQL + ' DEALLOCATE c' + CRLF; + lSQL:= lSQL + ' END' + CRLF; + lSQL:= lSQL + ' END' + CRLF; + try + Helios.ExecSQL(lSQL); + except + end; + end; +} + +{ + msg:= ''; + idVPr:= 0; + bid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_DilceProVyrobu'''); + if (bid>0) then + begin + podm:= ''; + if (Helios.Prenos2(bid, 'hvw_Vyroba_DilceProVyrobu.ID', 'hvw_Vyroba_DilceProVyrobu.CisloZbozi', oVar1, oVar2, podm, 'Vyberte co chcete vyrábět', false, false, false, 1)) then + begin + idKmen:= VarToStr(oVar1).ToInteger; + nazev1:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + + canCont:= true; + idPrac:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) pracoviste FROM ' + tblPostup + ' WHERE dilec=' + idKmen.ToString + ' AND ZmenaDo IS NULL ORDER BY operace'); + if (idPrac>0) then + begin + if (helUtils.sqlExistsTestGeneral(Helios, 'SELEC 1 FROM ' + tblRozpracOper + ' WHERE Stav<30 AND IDPracoviste=' + idPrac.ToString)) then + begin + nazevPrac:=helUtils.getHeliosStrVal(Helios, '', 'SELECT nazev FROM ' + tblCPrac + ' WHERE ID=' + idPrac.ToString); + if (Helios.YesNo('Na pracovišti ' + nazevPrac + ' se aktuálně vyrábí.' + CRLF + 'Chcete stávající výrobu ukončit a zahájit výrobu ' + nazev1 + '?', false)) then + begin + idEvidROp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblRozpracOper + ' WHERE Stav<30 AND IDPracoviste=' + idPrac.ToString); + dm.UkonciEvidRozpracOper (idEvidROp, msg); + if (msg<>'') then + begin + Helios.Error(msg); + canCont:= false; + end; + end + else + canCont:= false; + end; + end; + + if (canCont) then + begin + mj:= helUtils.getHeliosStrVal (Helios, '', 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + lSQL:= 'SELECT ISNULL( (SELECT PocetHlavni FROM ' + tblMJZbo + 'WHERE IDKmenZbozi=' + idKmen.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''pal''), 0)'; + krabVPalete:= helUtils.getHeliosFloatVal (Helios, 0, lSQL); + if (krabVPalete=0) then + Helios.Error (#1'Nelze zadat do výroby, chybí přepočet KA na paletu.'#1) + else + begin + lSQL:= 'DECLARE @idVPr INT' + CRLF + 'EXEC @idVPr=dbo.hp_NewVyrobniPrikaz @IDDilce=' + idKmen.ToString + ', @kusy_zad=' + krabVPalete.ToString.Replace(',', '.').Replace(' ','') + CRLF; + lSQL:= lSQL + 'SELECT @idVPr AS newid'; + try + with Helios.OpenSQL (lSQL) do + idVPr:= VarToStr(FieldByNameValues('newid')).ToInteger; + except on E:Exception do + Helios.Error (#1'Nepodařilo se vytvořit výrobní příkaz'#1 + CRLF + E.Message); + end; + end; + end; + end; + end; // bid KZ + + +// mam novy prikaz ? + if (idVPr>0) then + begin + lSQL:= 'DECLARE @retVal INT' + CRLF +'EXEC @retVal=dbo.hp_ZadaniPrikazuDoVyroby @IDPrikaz=' + idVPr.ToString; + try + Helios.ExecSQL(lSQL); + + idEvidROp:= 0; + lSQL:= 'DECLARE @idEROp INT=0, @dat DATETIME=GETDATE()' + CRLF; + lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_InsertEvidRozpracOper'', ''P'') IS NOT NULL EXEC @idEROp=dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance='; + lSQL:= lSQL + IfThen(idZamMistr>0, idZamMistr.ToString, 'NULL') + ', @IDStroje=' + aktIdStr.ToString + ', @CasZahajeni=@dat' + CRLF + 'SELECT ISNULL(@idEROp,0) AS newid'; + try + with Helios.OpenSQL(lSQL) do + idEvidROp:= VarToStr(FieldByNameValues('newid')).ToInteger; + except + end; + if (idEvidROp>0) then + begin + idEvidROpPol:= 0; + lSQL:= 'SELECT TOP(1) Doklad, Alt FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND IDPrikaz=' + idVPr.ToString; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + doklPrP:= VarToStr(FieldByNameValues('Doklad')).ToInteger; + altPrP:= VarToStr(FieldByNameValues('Alt')); + lSQL:= 'DECLARE @idEROp INT=0' + CRLF + 'IF OBJECT_ID(N''dbo.ep_Vyroba_InsertEvidRozpracOperPol'', ''P'') IS NOT NULL EXEC @idEROp=dbo.ep_Vyroba_InsertEvidRozpracOperPol'; + lSQL:= lSQL + ' @IdEvidRozpOper=' + idEvidROp.ToString + ', @IDPrikaz=' + idVPr.ToString + ', @doklPrPost=' + doklPrP.ToString + ', @altPrPost=N' + altPrP.QuotedString; + try + Helios.ExecSQL(lSQL); + except + end; + end; + end; + + VPrStr:= helUtils.getHeliosStrVal(Helios, '', 'SELECT RadaPrikaz FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString); + Helios.Info('Byl vytvořen nový Výrobní příkaz '#1 + VPrStr + #1 + ' (stroj ' + dm.VratStroj (Helios, 'Nazev', aktIdStr) + ')'); + + except + end; + end; +} + end; + + + + procedure TformVyrobaMimoPlan.grdVyrobaMimoPlanDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdVyrobaMimoPlan.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='colNazev1') then + begin + TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; // zelena + if (gdSelected in State) then + TDBGrid(Sender).Canvas.Font.Color:= clBlack; // cerne pismo na zelenem pozadi + end; + + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformVyrobaMimoPlan.lblResetClick (Sender: TObject); + begin + edtSZ.Text:= ''; + edtRegCis.Text:= ''; + edtNazev1.Text:= ''; + edtStroj.Text:= ''; + edtZaklad.Text:= ''; + Filtruj; + grdVyrobaMimoPlan.SetFocus; + end; + +end. diff --git a/frmVyrobniDenik.dfm b/frmVyrobniDenik.dfm new file mode 100644 index 0000000..74398ad --- /dev/null +++ b/frmVyrobniDenik.dfm @@ -0,0 +1,302 @@ +object formVyrobniDenik: TformVyrobniDenik + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = ' V'#253'robn'#237' den'#237'k' + ClientHeight = 665 + ClientWidth = 1140 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object GridPanel1: TGridPanel + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 1134 + Height = 659 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = edtVyrobniDen + Row = 0 + end + item + Column = 0 + Control = GridPanel2 + Row = 2 + end + item + Column = 0 + Control = grdVyrobniDenik + Row = 1 + end> + RowCollection = < + item + Value = 5.000000000000000000 + end + item + Value = 75.000000000000000000 + end + item + Value = 20.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 1134 + 659) + object edtVyrobniDen: TLabeledEdit + Left = 556 + Top = 3 + Width = 121 + Height = 29 + TabStop = False + Alignment = taCenter + Anchors = [] + Color = 15790320 + EditLabel.Width = 96 + EditLabel.Height = 29 + EditLabel.Caption = 'V'#253'robn'#237' den: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 0 + Text = '' + end + object GridPanel2: TGridPanel + AlignWithMargins = True + Left = 4 + Top = 530 + Width = 1126 + Height = 125 + Align = alClient + ColumnCollection = < + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333340000 + end + item + Value = 33.333333333333310000 + end> + ControlCollection = < + item + Column = 0 + Control = btnNahledDenik + Row = 0 + end + item + Column = 1 + Control = btnDenniSoupisCCP1 + Row = 0 + end + item + Column = 2 + Control = btnSeznamVyrobenychPalet + Row = 0 + end + item + Column = 1 + Control = btnCCP1NovyZapis + Row = 1 + end + item + Column = 2 + Control = btnNovyVzorek + Row = 1 + end> + RowCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + TabOrder = 1 + DesignSize = ( + 1126 + 125) + object btnNahledDenik: TButton + Left = 65 + Top = 9 + Width = 246 + Height = 45 + Anchors = [] + Caption = 'N'#225'hled - v'#253'robn'#237' den'#237'k' + ImageIndex = 3 + ImageName = 'imgPrinter' + Images = dm.imgList + TabOrder = 0 + OnClick = btnNahledDenikClick + end + object btnDenniSoupisCCP1: TButton + Left = 429 + Top = 9 + Width = 267 + Height = 45 + Anchors = [] + Caption = 'Denn'#237' soupis kontrol CCP1' + TabOrder = 1 + end + object btnSeznamVyrobenychPalet: TButton + Left = 808 + Top = 9 + Width = 259 + Height = 45 + Anchors = [] + Caption = 'Seznam vyroben'#253'ch palet' + TabOrder = 2 + OnClick = btnSeznamVyrobenychPaletClick + end + object btnCCP1NovyZapis: TButton + Left = 429 + Top = 71 + Width = 268 + Height = 45 + Anchors = [] + Caption = 'CCP1 nov'#253' z'#225'pis' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = btnCCP1NovyZapisClick + end + object btnNovyVzorek: TButton + Left = 850 + Top = 71 + Width = 174 + Height = 45 + Anchors = [] + Caption = 'Nov'#253' vzorek' + Font.Charset = DEFAULT_CHARSET + Font.Color = clGreen + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + TabOrder = 4 + OnClick = btnNovyVzorekClick + end + end + object grdVyrobniDenik: TDBGrid + AlignWithMargins = True + Left = 4 + Top = 37 + Width = 1126 + Height = 487 + Align = alClient + DataSource = dm.dsVyrobniDenik + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 2 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdVyrobniDenikDrawColumnCell + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colSmena' + Title.Alignment = taCenter + Title.Caption = 'Sm'#283'na' + Width = 61 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colStroj' + Title.Alignment = taCenter + Title.Caption = 'Stroj' + Width = 285 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colUdalost' + Title.Alignment = taCenter + Title.Caption = 'Ud'#225'lost' + Width = 188 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'V'#253'robek' + Width = 330 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJ' + Title.Alignment = taCenter + Title.Caption = 'MJ' + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnoz' + Title.Alignment = taCenter + Title.Caption = 'Mno'#382'stv'#237 + Width = 79 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMnozKA' + Title.Alignment = taCenter + Title.Caption = 'KA' + Width = 71 + Visible = True + end + item + Expanded = False + FieldName = 'colMnozPal' + Visible = False + end + item + Expanded = False + FieldName = 'colIDKmen' + Visible = False + end + item + Expanded = False + FieldName = 'colIDStroj' + Visible = False + end + item + Expanded = False + FieldName = 'colCisloZbozi' + Visible = False + end + item + Expanded = False + FieldName = 'colDatum' + Visible = False + end> + end + end +end diff --git a/frmVyrobniDenik.pas b/frmVyrobniDenik.pas new file mode 100644 index 0000000..34b63a3 --- /dev/null +++ b/frmVyrobniDenik.pas @@ -0,0 +1,195 @@ +unit frmVyrobniDenik; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Mask, + Data.DB, Vcl.Grids, Vcl.DBGrids, ddPlugin_TLB; + + +{$I iConsts.inc} + +type + TformVyrobniDenik = class(TForm) + GridPanel1: TGridPanel; + edtVyrobniDen: TLabeledEdit; + GridPanel2: TGridPanel; + grdVyrobniDenik: TDBGrid; + btnNahledDenik: TButton; + btnDenniSoupisCCP1: TButton; + btnSeznamVyrobenychPalet: TButton; + btnCCP1NovyZapis: TButton; + btnNovyVzorek: TButton; + procedure FormShow(Sender: TObject); + procedure grdVyrobniDenikDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure btnNovyVzorekClick(Sender: TObject); + procedure btnDenniSoupisCCP1Click(Sender: TObject); + procedure btnCCP1NovyZapisClick(Sender: TObject); + procedure btnSeznamVyrobenychPaletClick(Sender: TObject); + procedure btnNahledDenikClick(Sender: TObject); + private + public + Helios: IHelios; + den: TDateTime; + end; + +var + formVyrobniDenik: TformVyrobniDenik; + bidXVyrobniDenik: integer; + +implementation +uses System.StrUtils, System.DateUtils, System.Math, + datMod, frmKontrolaCCP1, frmSeznamPalet, + helUtils, helTabsBIDs; + +{$R *.dfm} + + + + + + procedure TformVyrobniDenik.grdVyrobniDenikDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdVyrobniDenik.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformVyrobniDenik.btnCCP1NovyZapisClick(Sender: TObject); + begin + btnDenniSoupisCCP1Click (Sender); + end; + + + + + + procedure TformVyrobniDenik.btnDenniSoupisCCP1Click (Sender: TObject); + var f: TformKontrolaCCP1; + begin + f:= TformKontrolaCCP1.Create(nil); + try + f.vyrobniDen:= Now; + f.Helios:= Helios; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + + procedure TformVyrobniDenik.btnNahledDenikClick(Sender: TObject); + var podm: string; + bid, idF: integer; + begin + bid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_VyrobniDen'''); + idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-1'''); + if (bid>100000) and (idF>0) then + begin + podm:= 'hvw_Vyroba_VyrobniDen.VyrobniSmena=1 AND hvw_Vyroba_VyrobniDen.VyrobniDen=CONVERT(date,N' + edtVyrobniDen.Text.QuotedString + ',104)'; + Helios.PrintForm3 (bid, idF, podm); + end; + end; + + + + + procedure TformVyrobniDenik.btnNovyVzorekClick (Sender: TObject); + var lSQL: string; + aktArchiv, stroj, lastArchiv, nazev: string; + i, idKZ, idStroj, idArchiv: integer; + begin + idKZ:= grdVyrobniDenik.DataSource.DataSet.FieldByName('colIDKmen').AsInteger; + nazev:= grdVyrobniDenik.DataSource.DataSet.FieldByName('colNazev1').AsString; + + if (Helios.YesNo('Chcete zapsat nový vzorek ' + nazev + CRLF + 'Pokračovat ?', false)) then + begin + idStroj:= grdVyrobniDenik.DataSource.DataSet.FieldByName('colIDStroj').AsInteger; + stroj:= grdVyrobniDenik.DataSource.DataSet.FieldByName('colStroj').AsString; + + i:= 0; + idArchiv:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblVzorkyArchiv + ' WHERE DatUkonceni IS NULL ORDER BY DatPorizeni'); + if (idArchiv=0) then + begin + lastArchiv:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) Archiv FROM ' + tblVzorkyArchiv + ' WHERE DatUkonceni IS NOT NULL ORDER BY DatUkonceni DESC'); + if (lastArchiv='') then + i:= 1 + else + i:= StrToInt(RightStr(lastArchiv, 4)) + 1; + aktArchiv:= YearOf(Now).ToString + 'PE' + StringOfChar('0', 4-Length(i.ToString)) + i.ToString; + lSQL:= 'INSERT ' + tblVzorkyArchiv + ' (Archiv) SELECT N' + aktArchiv.QuotedString + CRLF + 'SELECT SCOPE_IDENTITY() AS newid'; + try + with Helios.OpenSQL(lSQL) do + idArchiv:= VarToStr(FieldByNameValues('newid')).ToInteger; + except + idArchiv:= 0; + end; + end; + + if (idArchiv>0) then + begin + lSQL:= 'INSERT ' + tblVzorky + ' (IDArchiv, IDStroj, IDKmenZbozi, CisloZamMistr) SELECT ' + idArchiv.ToString + ', ' + idStroj.ToString; + lSQL:= lSQL + ', ' + idKZ.ToString + ', ' + datMod.cisZamMistr.ToString; + try + Helios.ExecSQL(lSQL); + Helios.Info(#1'Nový vzorek zapsán.'#1); + except on E:Exception do + Helios.Info(#1'Chyba zápisu vzorku: '#1 + E.Message); + end; + end; + + end; + end; + + + + + procedure TformVyrobniDenik.btnSeznamVyrobenychPaletClick (Sender: TObject); + var idKZ: integer; + f: TformSeznamPalet; + begin + idKZ:= grdVyrobniDenik.DataSource.DataSet.FieldByName('colIDKmen').AsInteger; + + f:= TformSeznamPalet.Create(nil); + try + f.Helios:= Helios; + f.typ:= 1; + f.idKmen:= idKZ; + f.idStroj:= 0; + f.den:= den; + f.ShowModal; + finally + f.Free; + end; + end; + + + + + + procedure TformVyrobniDenik.FormShow (Sender: TObject); + begin + edtVyrobniDen.Text:= FormatDateTime ('dd.mm.yyyy', den.GetDate); + dm.NactiVyrobniDenik (self, den); + +// btnNahledDenik.Enabled:= btnDenniSoupisCCP1.Enabled; + btnDenniSoupisCCP1.Enabled:= (dm.vtVyrobniDenik.RecordCount>0); + btnSeznamVyrobenychPalet.Enabled:= btnDenniSoupisCCP1.Enabled; + btnNovyVzorek.Enabled:= btnDenniSoupisCCP1.Enabled; + btnCCP1NovyZapis.Enabled:= btnDenniSoupisCCP1.Enabled; + + end; + +end. diff --git a/frmZahajeniPalety.dfm b/frmZahajeniPalety.dfm new file mode 100644 index 0000000..f84172a --- /dev/null +++ b/frmZahajeniPalety.dfm @@ -0,0 +1,586 @@ +object formZahajeniPalety: TformZahajeniPalety + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = ' Zah'#225'jen'#237' v'#253'roby palety' + ClientHeight = 800 + ClientWidth = 539 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object Panel1: TPanel + Left = 8 + Top = 8 + Width = 523 + Height = 205 + TabOrder = 0 + object lblWarnStitekPL: TLabel + Left = 285 + Top = 92 + Width = 187 + Height = 42 + Alignment = taCenter + Caption = 'Nebyl nalezen tiskopis pro Paletov'#253' list !' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + WordWrap = True + end + object edtZakazka: TLabeledEdit + Left = 122 + Top = 6 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 57 + EditLabel.Height = 29 + EditLabel.Caption = 'P'#345#237'kaz: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtPL: TLabeledEdit + Left = 122 + Top = 45 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 97 + EditLabel.Height = 29 + EditLabel.Caption = 'Paletov'#253' list: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 1 + Text = '' + end + object edtSarze: TLabeledEdit + Left = 122 + Top = 84 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 53 + EditLabel.Height = 29 + EditLabel.Caption = #352'ar'#382'e: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 2 + Text = '' + end + object edtDatVyroby: TLabeledEdit + Left = 122 + Top = 123 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 65 + EditLabel.Height = 29 + EditLabel.Caption = 'V'#253'roba: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 3 + Text = '' + end + object edtDatSpotreby: TLabeledEdit + Left = 122 + Top = 162 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 78 + EditLabel.Height = 29 + EditLabel.Caption = 'Spot'#345'eba: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 4 + Text = '' + end + object edtSZ: TLabeledEdit + Left = 300 + Top = 45 + Width = 45 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 33 + EditLabel.Height = 21 + EditLabel.Caption = 'SZ: ' + ReadOnly = True + TabOrder = 5 + Text = '' + end + object edtRegCis: TLabeledEdit + Left = 354 + Top = 45 + Width = 147 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 80 + EditLabel.Height = 21 + EditLabel.Caption = 'Reg. '#269#237'slo: ' + ReadOnly = True + TabOrder = 6 + Text = '' + end + end + object Panel2: TPanel + Left = 8 + Top = 216 + Width = 523 + Height = 70 + TabOrder = 1 + object edtNazev1: TLabeledEdit + Left = 8 + Top = 24 + Width = 501 + Height = 29 + Alignment = taCenter + Color = 15790320 + EditLabel.Width = 58 + EditLabel.Height = 21 + EditLabel.Caption = 'N'#225'zev: ' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + Text = '' + end + end + object Panel3: TPanel + Left = 8 + Top = 289 + Width = 523 + Height = 176 + TabOrder = 2 + object lblKANaPal: TLabel + Left = 261 + Top = 133 + Width = 56 + Height = 21 + Caption = '(KA/pal)' + end + object lblWarnStitekKA: TLabel + Left = 279 + Top = 60 + Width = 187 + Height = 42 + Alignment = taCenter + Caption = 'Nebyl nalezen tiskopis pro Kartonov'#253' '#353't'#237'tek !' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + ParentFont = False + WordWrap = True + end + object edtBarvaStitku: TLabeledEdit + Left = 137 + Top = 10 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 93 + EditLabel.Height = 29 + EditLabel.Caption = 'Barva '#353't'#237'tku ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtTypStitku: TLabeledEdit + Left = 137 + Top = 49 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 77 + EditLabel.Height = 29 + EditLabel.Caption = 'Typ '#353't'#237'tku: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 1 + Text = '' + end + object edtVelkostStitku: TLabeledEdit + Left = 137 + Top = 88 + Width = 121 + Height = 29 + TabStop = False + Color = 15790320 + EditLabel.Width = 107 + EditLabel.Height = 29 + EditLabel.Caption = 'Velikost '#353't'#237'tku: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 2 + Text = '' + end + object edtPocetStitku: TLabeledEdit + Left = 137 + Top = 130 + Width = 54 + Height = 29 + EditLabel.Width = 90 + EditLabel.Height = 29 + EditLabel.Caption = 'Po'#269'et '#353't'#237'tku: ' + LabelPosition = lpLeft + TabOrder = 3 + Text = '' + end + object edtPocetStitkuMax: TEdit + Left = 206 + Top = 130 + Width = 52 + Height = 29 + Alignment = taCenter + AutoSize = False + Color = 15790320 + ReadOnly = True + TabOrder = 4 + end + end + object Panel4: TPanel + Left = 8 + Top = 469 + Width = 523 + Height = 186 + TabOrder = 3 + object GroupBox1: TGroupBox + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 515 + Height = 178 + Align = alClient + Caption = ' Tisknout ' + TabOrder = 0 + object GridPanel1: TGridPanel + Left = 2 + Top = 23 + Width = 511 + Height = 153 + Align = alClient + ColumnCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + ColumnSpan = 2 + Control = Label1 + Row = 0 + end + item + Column = 0 + ColumnSpan = 2 + Control = Label2 + Row = 1 + end + item + Column = 0 + ColumnSpan = 2 + Control = Label3 + Row = 2 + end + item + Column = 0 + ColumnSpan = 2 + Control = Label4 + Row = 3 + end + item + Column = 2 + Control = pnlSarzeAno + Row = 0 + end + item + Column = 3 + Control = pnlSarzeNe + Row = 0 + end + item + Column = 2 + Control = pnlSpotrebaAno + Row = 1 + end + item + Column = 3 + Control = pnlSpotrebaNe + Row = 1 + end + item + Column = 2 + Control = edtPocetPL + Row = 3 + end + item + Column = 2 + Control = pnlTiskNaObraz + Row = 2 + end + item + Column = 3 + Control = pnlTiskNaTisk + Row = 2 + end> + RowCollection = < + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end + item + Value = 25.000000000000000000 + end> + TabOrder = 0 + DesignSize = ( + 511 + 153) + object Label1: TLabel + Left = 109 + Top = 9 + Width = 38 + Height = 21 + Anchors = [] + Caption = #352'ar'#382'e' + ExplicitLeft = 49 + end + object Label2: TLabel + Left = 72 + Top = 47 + Width = 112 + Height = 21 + Anchors = [] + Caption = 'Datum spot'#345'eby' + ExplicitLeft = 12 + end + object Label3: TLabel + Left = 104 + Top = 85 + Width = 48 + Height = 21 + Anchors = [] + Caption = 'Tisk na' + ExplicitLeft = 108 + end + object Label4: TLabel + Left = 54 + Top = 122 + Width = 149 + Height = 21 + Anchors = [] + Caption = 'Po'#269'et paletov'#253'ch list'#367 + ExplicitLeft = 58 + end + object pnlSarzeAno: TPanel + Left = 256 + Top = 1 + Width = 127 + Height = 38 + Align = alClient + Color = clMoneyGreen + FullRepaint = False + ParentBackground = False + TabOrder = 0 + OnClick = pnlSarzeAnoClick + object rbTiskSarzeAno: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 119 + Height = 30 + Align = alClient + Caption = 'Ano' + Checked = True + Color = clMoneyGreen + ParentColor = False + TabOrder = 0 + TabStop = True + OnClick = rbTiskSarzeAnoClick + end + end + object pnlSarzeNe: TPanel + Left = 383 + Top = 1 + Width = 127 + Height = 38 + Align = alClient + FullRepaint = False + ParentBackground = False + TabOrder = 1 + OnClick = pnlSarzeNeClick + object rbTiskSarzeNe: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 119 + Height = 30 + Align = alClient + Caption = 'Ne' + TabOrder = 0 + OnClick = rbTiskSarzeNeClick + end + end + object pnlSpotrebaAno: TPanel + Left = 256 + Top = 39 + Width = 127 + Height = 38 + Align = alClient + Color = clMoneyGreen + FullRepaint = False + ParentBackground = False + TabOrder = 2 + object rbTiskSpotrebaAno: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 119 + Height = 30 + Align = alClient + Caption = 'Ano' + Checked = True + Color = clMoneyGreen + ParentColor = False + TabOrder = 0 + TabStop = True + OnClick = rbTiskSpotrebaAnoClick + end + end + object pnlSpotrebaNe: TPanel + Left = 383 + Top = 39 + Width = 127 + Height = 38 + Align = alClient + FullRepaint = False + ParentBackground = False + TabOrder = 3 + object rbTiskSpotrebaNe: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 119 + Height = 30 + Align = alClient + Caption = 'Ne' + TabOrder = 0 + OnClick = rbTiskSpotrebaNeClick + end + end + object edtPocetPL: TEdit + Left = 259 + Top = 118 + Width = 121 + Height = 29 + Alignment = taCenter + Anchors = [] + MaxLength = 1 + NumbersOnly = True + TabOrder = 4 + end + object pnlTiskNaObraz: TPanel + Left = 256 + Top = 77 + Width = 127 + Height = 37 + Align = alClient + Color = clMoneyGreen + FullRepaint = False + ParentBackground = False + TabOrder = 5 + object rbTiskNaObraz: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 119 + Height = 29 + Align = alClient + Caption = 'Obrazovku' + Checked = True + Color = clMoneyGreen + ParentColor = False + TabOrder = 0 + TabStop = True + OnClick = rbTiskNaObrazClick + end + end + object pnlTiskNaTisk: TPanel + Left = 383 + Top = 77 + Width = 127 + Height = 37 + Align = alClient + FullRepaint = False + ParentBackground = False + TabOrder = 6 + object rbTiskNaTisk: TRadioButton + AlignWithMargins = True + Left = 4 + Top = 4 + Width = 119 + Height = 29 + Align = alClient + Caption = 'Tisk'#225'rnu' + TabOrder = 0 + OnClick = rbTiskNaTiskClick + end + end + end + end + end + object btnTiskStitku: TButton + Left = 136 + Top = 665 + Width = 233 + Height = 62 + Caption = 'Tisk kartonov'#253'ch '#353't'#237'tk'#367#13#10' + Paletov'#253' l'#237'stek' + TabOrder = 4 + OnClick = btnTiskStitkuClick + end + object btnTiskZaloha: TButton + Left = 136 + Top = 751 + Width = 233 + Height = 37 + Caption = 'Z'#225'lo'#382'n'#237' tisk na A4' + TabOrder = 5 + end +end diff --git a/frmZahajeniPalety.pas b/frmZahajeniPalety.pas new file mode 100644 index 0000000..1ce0eed --- /dev/null +++ b/frmZahajeniPalety.pas @@ -0,0 +1,771 @@ +unit frmZahajeniPalety; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls, + IdHTTP, IdSSLOpenSSL, REST.Json, JsonDataObjects, + ddPlugin_TLB, frmPekarna, frmTiskyNahledy; + +{$I iConsts.inc} + +type + TformZahajeniPalety = class(TForm) + Panel1: TPanel; + edtZakazka: TLabeledEdit; + edtPL: TLabeledEdit; + edtSarze: TLabeledEdit; + edtDatVyroby: TLabeledEdit; + edtDatSpotreby: TLabeledEdit; + edtSZ: TLabeledEdit; + edtRegCis: TLabeledEdit; + Panel2: TPanel; + Panel3: TPanel; + edtNazev1: TLabeledEdit; + edtBarvaStitku: TLabeledEdit; + edtTypStitku: TLabeledEdit; + edtVelkostStitku: TLabeledEdit; + edtPocetStitku: TLabeledEdit; + Panel4: TPanel; + btnTiskStitku: TButton; + btnTiskZaloha: TButton; + GroupBox1: TGroupBox; + GridPanel1: TGridPanel; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + pnlSarzeAno: TPanel; + rbTiskSarzeAno: TRadioButton; + pnlSarzeNe: TPanel; + rbTiskSarzeNe: TRadioButton; + pnlSpotrebaAno: TPanel; + rbTiskSpotrebaAno: TRadioButton; + pnlSpotrebaNe: TPanel; + rbTiskSpotrebaNe: TRadioButton; + edtPocetPL: TEdit; + pnlTiskNaObraz: TPanel; + rbTiskNaObraz: TRadioButton; + pnlTiskNaTisk: TPanel; + rbTiskNaTisk: TRadioButton; + edtPocetStitkuMax: TEdit; + lblKANaPal: TLabel; + lblWarnStitekKA: TLabel; + lblWarnStitekPL: TLabel; + procedure FormShow (Sender: TObject); + procedure rbTiskSarzeNeClick (Sender: TObject); + procedure rbTiskSarzeAnoClick (Sender: TObject); + procedure rbTiskSpotrebaAnoClick (Sender: TObject); + procedure rbTiskSpotrebaNeClick (Sender: TObject); + procedure pnlSarzeAnoClick (Sender: TObject); + procedure pnlSarzeNeClick (Sender: TObject); + procedure rbTiskNaObrazClick (Sender: TObject); + procedure rbTiskNaTiskClick (Sender: TObject); + procedure btnTiskStitkuClick (Sender: TObject); + private + function GenerujJSON (idPrikaz, idVyrCis, idEvidROp: integer; mn: Extended): TJSONObject; + procedure BarvyTlacitekDleRB; + procedure NactiUdajePrikazu; + public + Helios: IHelios; + idPrikaz: integer; + idStroj: integer; + datVyroba: TDateTime; + f: TformPekarna; + f2: TformTiskyNahledy; + opakTisky: boolean; + end; + +var + formZahajeniPalety: TformZahajeniPalety; + idKmen: Integer; + + cPal, typPal: string; + m1, m2: integer; + mn, mnSum, mn2: integer; + idFormPL, idFormPS, idFormKA: integer; + + +implementation +uses System.DateUtils, System.StrUtils, System.Math, + helUtils, helTabsBIDs, datMod; + +{$R *.dfm} + + + + function TformZahajeniPalety.GenerujJSON (idPrikaz, idVyrCis, idEvidROp: integer; mn: Extended): TJsonObject; + var lSQL, jsonOut: string; + oMain, oPrikaz, oVyrCislo: TJsonObject; + aVyrCisla, aVydejky, aPrijemky: TJsonArray; + begin + oMain:= TJsonObject.Create; + try + if (idPrikaz>0) then + begin +// prikaz + oPrikaz:= oMain.O['prikaz']; + oPrikaz.I['idEvidROp']:= idEvidROp; + oPrikaz.S['akce']:= 'start'; + + lSQL:= 'SELECT p.ID, p.Rada, p.Prikaz, ISNULL(zm.Rada,N'''') AS RadaZM, ISNULL(zm.Kod,N'''') AS Kod, p.IDTabKmen, k.CisloZbozi, k.Nazev1, ISNULL(k.MJEvidence,N'''') AS MJ FROM ' + tblPrikaz + + ' p LEFT JOIN ' + tblZakazModif + ' zm ON (zm.ID=p.IDZakazModif) INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=' + idPrikaz.ToString; + with Helios.OpenSQL (lSQL) do + begin + oPrikaz.I['id']:= VarToStr(FieldByNameValues('ID')).ToInteger; + oPrikaz.S['rada']:= VarToStr(FieldByNameValues('Rada')); + oPrikaz.I['prikaz']:= VarToStr(FieldByNameValues('Prikaz')).ToInteger; + oPrikaz.I['id_dilce']:= VarToStr(FieldByNameValues('IDTabKmen')).ToInteger; + oPrikaz.S['cislo_zbozi']:= VarToStr(FieldByNameValues('CisloZbozi')); + oPrikaz.S['nazev']:= VarToStr(FieldByNameValues('Nazev1')); + oPrikaz.S['mj']:= VarToStr(FieldByNameValues('MJ')); + oPrikaz.F['mnozstvi']:= mn; + oPrikaz.S['modif_rada']:= VarToStr(FieldByNameValues('RadaZM')); + oPrikaz.S['modif_kod']:= VarToStr(FieldByNameValues('Kod')); + oPrikaz.D['caszahajeni']:= Now; + oPrikaz.Values['casukonceni']:= Null; + end; + + if (idVyrCis>0) then + begin + lSQL:= 'SELECT VyrCislo, Popis, Mnozstvi, DatExpirace FROM ' + tblPrikazVC + ' WHERE ID=' + idVyrCis.ToString; + with Helios.OpenSQL (lSQL) do + begin + aVyrCisla:= oPrikaz.A['vyrobni_cisla']; + First; + while not(EOF) do + begin + oVyrCislo:= aVyrCisla.AddObject; + oVyrCislo.S['paletovy_list']:= VarToStr(FieldByNameValues('VyrCislo')); + oVyrCislo.S['sarze']:= VarToStr(FieldByNameValues('Popis')); // sarze + oVyrCislo.F['mnozstvi']:= VarToStr(FieldByNameValues('Mnozstvi')).ToDouble; + if not(VarIsNull(FieldByNameValues('DatExpirace'))) then + oVyrCislo.D['dat_expirace']:= StrToDateTime(VarToStr(FieldByNameValues('DatExpirace'))) + else + oVyrCislo.Values['dat_expirace']:= Null; + Next; + end; + end; + end; + + aVydejky:= oMain.A['vydejky']; + aPrijemky:= oMain.A['prijemky']; + + end; + jsonOut:= oMain.ToJSON (false); + finally + if (oPrikaz<>nil) then + FreeAndNil (oPrikaz); +// if (aVyrCisla<>nil) then +// FreeAndNil (aVyrCisla); + end; + + oMain:= TJsonObject.Create; + oMain.FromUtf8JSON(jsonOut); + result:= oMain; + end; + + + + + procedure TformZahajeniPalety.NactiUdajePrikazu; + var lSQL: string; + zarukaTyp: integer; + zarukaNum: extended; + d: TDateTime; + begin + idKmen:= 0; + if (idPrikaz>0) then + begin + lSQL:= 'SELECT vp.RadaPrikaz, k.SkupZbo, k.RegCis, k.Nazev1, vp.IdTabKmen FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) WHERE vp.ID=' + idPrikaz.ToString; + with Helios.OpenSQL(lSQL) do + begin + edtSZ.Text:= VarToStr(FieldByNameValues('SkupZbo')); + edtRegCis.Text:= VarToStr(FieldByNameValues('RegCis')); + edtNazev1.Text:= VarToStr(FieldByNameValues('Nazev1')); + edtZakazka.Text:= VarToStr(FieldByNameValues('RadaPrikaz')); + idKmen:= VarToStr(FieldByNameValues('IdTabKmen')).ToInteger; + end; + end; + + edtPocetStitkuMax.Text:= helUtils.getHeliosStrVal (Helios, '0', 'SELECT COUNT(ID) FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString); + +{ + lSQL:= 'DECLARE @d DATETIME=GETDATE(); SELECT Datum FROM dbo.ef_GetDatumASmenu (@d)'; + with Helios.OpenSQL(lSQL) do + edtDatVyroby.Text:= + edtSmena.Text:= VarToStr(FieldByNameValues('Smena')); +} + + edtDatVyroby.Text:= FormatDateTime('dd.mm.yyyy', Now); + + zarukaNum:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); + zarukaTyp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TypZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); // 0-Den, 1-Mesic, 2-Rok + d:= Now; + if (zarukaTyp=0) then + d:= IncDay(Now, Floor(zarukaNum)); + if (zarukaTyp=1) then + d:= IncMonth(Now, Floor(zarukaNum)); + if (zarukaTyp=2) then + d:= IncYear(Now, Floor(zarukaNum)); + d:= EndOfTheMonth(d); + + edtDatSpotreby.Text:= FormatDateTime('dd.mm.yyyy', d); + + end; + + + + procedure TformZahajeniPalety.pnlSarzeAnoClick (Sender: TObject); + begin + rbTiskSarzeAno.Checked:= not rbTiskSarzeAno.Checked; + rbTiskSarzeNe.Checked:= not rbTiskSarzeNe.Checked; + end; + + procedure TformZahajeniPalety.pnlSarzeNeClick (Sender: TObject); + begin + rbTiskSarzeAno.Checked:= not rbTiskSarzeAno.Checked; + rbTiskSarzeNe.Checked:= not rbTiskSarzeNe.Checked; + end; + + + + + procedure TformZahajeniPalety.BarvyTlacitekDleRB; + begin + if (rbTiskSarzeAno.Checked) then + begin + pnlSarzeAno.Color:= clMoneyGreen; + rbTiskSarzeAno.Color:= clMoneyGreen; + end + else + begin + pnlSarzeAno.Color:= clBtnFace; + rbTiskSarzeAno.Color:= clBtnFace; + end; + + if (rbTiskSarzeNe.Checked) then + begin + pnlSarzeNe.Color:= $005B5BFF; + rbTiskSarzeNe.Color:= $005B5BFF; + end + else + begin + pnlSarzeNe.Color:= clBtnFace; + rbTiskSarzeNe.Color:= clBtnFace; + end; + + if (rbTiskSpotrebaAno.Checked) then + begin + pnlSpotrebaAno.Color:= clMoneyGreen; + rbTiskSpotrebaAno.Color:= clMoneyGreen; + end + else + begin + pnlSpotrebaAno.Color:= clBtnFace; + rbTiskSpotrebaAno.Color:= clBtnFace; + end; + + if (rbTiskSpotrebaNe.Checked) then + begin + pnlSpotrebaNe.Color:= $005B5BFF; + rbTiskSpotrebaNe.Color:= $005B5BFF; + end + else + begin + pnlSpotrebaNe.Color:= clBtnFace; + rbTiskSpotrebaNe.Color:= clBtnFace; + end; + + + if (rbTiskNaObraz.Checked) then + begin + pnlTiskNaObraz.Color:= clMoneyGreen; + rbTiskNaObraz.Color:= clMoneyGreen; + end + else + begin + pnlTiskNaObraz.Color:= clBtnFace; + rbTiskNaObraz.Color:= clBtnFace; + end; + + if (rbTiskNaTisk.Checked) then + begin + pnlTiskNaTisk.Color:= $005B5BFF; + rbTiskNaTisk.Color:= $005B5BFF; + end + else + begin + pnlTiskNaTisk.Color:= clBtnFace; + rbTiskNaTisk.Color:= clBtnFace; + end; + + end; + + + + + procedure TformZahajeniPalety.rbTiskNaObrazClick (Sender: TObject); + begin + if (rbTiskNaObraz.Checked) then + rbTiskNaTisk.Checked:= false; + BarvyTlacitekDleRB; + end; + + procedure TformZahajeniPalety.rbTiskNaTiskClick (Sender: TObject); + begin + if (rbTiskNaTisk.Checked) then + rbTiskNaObraz.Checked:= false; + BarvyTlacitekDleRB; + end; + + + + procedure TformZahajeniPalety.rbTiskSarzeAnoClick (Sender: TObject); + begin + if (rbTiskSarzeAno.Checked) then + rbTiskSarzeNe.Checked:= false; + BarvyTlacitekDleRB; + end; + + procedure TformZahajeniPalety.rbTiskSarzeNeClick (Sender: TObject); + begin + if (rbTiskSarzeNe.Checked) then + rbTiskSarzeAno.Checked:= false; + BarvyTlacitekDleRB; + end; + + + + + procedure TformZahajeniPalety.rbTiskSpotrebaAnoClick (Sender: TObject); + begin + if (rbTiskSpotrebaAno.Checked) then + rbTiskSpotrebaNe.Checked:= false; + BarvyTlacitekDleRB; + end; + + procedure TformZahajeniPalety.rbTiskSpotrebaNeClick (Sender: TObject); + begin + if (rbTiskSpotrebaNe.Checked) then + rbTiskSpotrebaAno.Checked:= false; + BarvyTlacitekDleRB; + end; + + + + + procedure TformZahajeniPalety.btnTiskStitkuClick (Sender: TObject); + var lSQL, podm, a, errMsg, rc, nazev1, nazevOp, strojNazev, sarze: string; + n1, n2, n3: integer; + bid, idF: integer; + d: integer; + operace: TArray; + jsemPeceni: boolean; + jsemBaleni: boolean; + mjDilce, szDilce: string; + ksVKA: integer; + mnozPec, mnozBal, mnoz, sumaMnoz, koefPec: extended; + +// cPal, typPal: string; + i, ii, i2, ii2, id, idx, idVCPrikaz, idPalety, idEROp: integer; + pl: Int64; + mnSum: integer; + sl: TStringList; + canCont: boolean; + + lHTTP: TIdHTTP; + ssl: TIdSSLIOHandlerSocketOpenSSL; + lParamList, respStream: TStringStream; + resp: string; + joOut, joIn, itemsObj: TJSONObject; + begin +// Tento výrobek nemá štítek, vytisknu pouze paletový + + if not(TryStrToInt64(edtPL.Text, pl)) then + pl:= 0; + if (pl=0) then + begin + Helios.Error(#1'Nelze identifikovat číslo palety'#1); + Exit; + end; + sarze:= edtSarze.Text.Trim; + canCont:= true; + + lSQL:= 'DROP TABLE IF EXISTS #AppPekarnaTisk' + CRLF; + lSQL:= lSQL + 'CREATE TABLE #AppPekarnaTisk (Typ TINYINT NOT NULL, PocetKopii SMALLINT NOT NULL DEFAULT 1, TiskSarze BIT NOT NULL DEFAULT 0, TiskDatExpirace BIT NOT NULL DEFAULT 0 )'; + Helios.ExecSQL (lSQL); + + + if not(TryStrToInt(edtPocetStitku.Text.Trim, n1)) then + n1:= 0; // pocet kartonu + if not(TryStrToInt(edtPocetPL.Text.Trim, n2)) then + n2:= 0; // pocetPalet + if not(TryStrToInt(edtPocetStitkuMax.Text.Trim, n3)) then + n3:= 0; // pocet kartonu max + + ksVKA:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT dbo.ef_Kmen_VratPocetKsVKartonu (' + idKmen.ToString + ')'); + + if (n1<=0) or (n2=0) then + Helios.Error(#1'Musíte zadat počet kartonových štítků a paletových listů'#1) + else + begin + +{ + lSQL:= 'IF OBJECT_ID(N''dbo.ep_Vyroba_GenerujPalety'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_GenerujPalety @idPrikaz=' + idPrikaz.ToString; + lSQL:= lSQL + ', @pocetStitku=' + n1.ToString + ', @pocetPaletListu=' + n2.ToString + ', @paletaStart=N' + edtPL.Text.Trim.QuotedString; + lSQL:= lSQL + ', @sarze=N' + edtSarze.Text.Trim.QuotedString; +} + + if not(opakTisky) then + begin + lSQL:= 'INSERT #AppPekarnaTisk (Typ, PocetKopii, TiskSarze, TiskDatExpirace)' + + ' SELECT 1, ' + n2.ToString + ', ' + Abs(rbTiskSarzeAno.Checked.ToInteger).ToString + ', ' + Abs(rbTiskSpotrebaAno.Checked.ToInteger).ToString; + Helios.ExecSQL (lSQL); + + try + lSQL:= 'UPDATE ' + tblPrikazVC + ' SET Popis=N' + sarze.QuotedString + ' WHERE Popis=N'''' AND IDPrikaz=' + idPrikaz.ToString + ' AND VyrCislo=N' + pl.ToString.QuotedString; + Helios.ExecSQL (lSQL); + lSQL:= 'UPDATE ' + tblPrikazVC + ' SET DatExpirace=CONVERT(datetime, N' + edtDatSpotreby.Text.QuotedString; + lSQL:= lSQL + ',104) WHERE DatExpirace IS NULL AND Popis=N' + sarze.QuotedString + ' AND IDPrikaz=' + idPrikaz.ToString + ' AND VyrCislo=N' + pl.ToString.QuotedString; + Helios.ExecSQL (lSQL); + + + lSQL:= 'DECLARE @i INT' + CRLF + 'SET @i=ISNULL( (SELECT ID FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND VyrCislo=N' + pl.ToString.QuotedString; + lSQL:= lSQL + ' AND Popis=N' + sarze.QuotedString + '), 0)' + CRLF; + lSQL:= lSQL + 'IF (@i=0)' + CRLF + ' BEGIN' + CRLF + ' INSERT ' + tblPrikazVC + ' (IDPrikaz, VyrCislo, Popis, DatExpirace, Mnozstvi) SELECT ' + idPrikaz.ToString; + lSQL:= lSQL + ', N' + pl.ToString.QuotedString + ', N' + sarze.QuotedString + ', CONVERT(datetime, N' + edtDatSpotreby.Text.QuotedString; + lSQL:= lSQL + ',104), ' + m1.ToString.Replace(',', '.') + CRLF + ' SET @i=SCOPE_IDENTITY()' + CRLF + ' END' + CRLF + 'SELECT @i'; + idVCPrikaz:= helUtils.getHeliosIntVal(Helios, 0, lSQL); + + lSQL:= 'DECLARE @i INT' + CRLF; + lSQL:= lSQL + 'SET @i=ISNULL( (SELECT 1 FROM ' + tblPalety + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND CisloPalety=N' + pl.ToString.QuotedString; + lSQL:= lSQL + ' AND Sarze=N' + sarze.QuotedString + ' AND Typ=' + typPal + '), 0)' + CRLF; + lSQL:= lSQL + 'IF (@i=0)' + CRLF + ' BEGIN' + CRLF; + lSQL:= lSQL + ' INSERT ' + tblPalety + ' (CisloPalety, IDPrikaz, IDStroj, Typ, Sarze, KusuVKA, Mnozstvi, IDVyrCisPrikaz, IDKmen, DatExpirace) SELECT N' + pl.ToString.QuotedString; + lSQL:= lSQL + ', ' + idPrikaz.ToString + ', ' + idStroj.ToString + ', ' + typPal + ', N' + sarze.QuotedString + ', ' + m1.ToString.Replace(',', '.') + ', ' + m1.ToString.Replace(',', '.'); + lSQL:= lSQL + ' ,' + idVCPrikaz.ToString + ', ' + idKmen.ToString + ', CONVERT(datetime, N' + edtDatSpotreby.Text.QuotedString + ', 104)' + CRLF + ' SET @i=SCOPE_IDENTITY()' + CRLF + ' END' + CRLF; + lSQL:= lSQL + CRLF + 'SELECT @i'; + idPalety:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + Helios.ExecSQL(lSQL); + except on E:Exception do + begin + Helios.Error (#1'Chyba založení palety ' + pl.ToString + #1 + CRLF + E.Message); + canCont:= false; + end; + end; + end; + + + if (canCont) and not(opakTisky) then // jen pokud neni opakovany tisk (z Nahledu tisku) + begin + +// zapis do evidence rozpracovanych operaci + idEROp:= 0; + mnozPec:= 0; + mnozBal:= 0; + koefPec:= 0; + +// nejdriv najdi koeficient pro dilec 702 - 1000ks, tj. ber to od posledni operace + lSQL:= 'SELECT pp.Doklad, pp.Alt, k.SkupZbo, k.MJEvidence, pp.Nazev, pp.Kusy_zad FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju; + lSQL:= lSQL + ' s ON (s.IDPrac=p.ID) INNER JOIN ' + tblKZ + 'k ON (k.ID=pp.dilec)'; + lSQL:= lSQL + ' WHERE pp.IDPrikaz=' + idPrikaz.ToString + ' AND pp.Priorita=0 AND pp.IDOdchylkyDo IS NULL AND s.ID=' + idStroj.ToString; + lSQL:= lSQL + ' ORDER BY pp.Odvadeci DESC, pp.Doklad DESC'; + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + First; + while not(EOF) do + begin + nazevOp:= VarToStr(FieldByNameValues('Nazev')); + + jsemPeceni:= false; + if (nazevOp.ToLower='pečení') then + begin + jsemPeceni:= true; + mnozPec:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended; + end; + + jsemBaleni:= false; + if (nazevOp.ToLower='balení') then + begin + jsemBaleni:= true; + mnozBal:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended; + end; + + if (mnozBal>0) and (mnozPec>0) then + koefPec:= (mnozBal/mnozPec); + Next; + end; + end; + + + lSQL:= 'SELECT pp.Doklad, pp.Alt, k.SkupZbo, k.MJEvidence, pp.Nazev, pp.Kusy_zad FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju; + lSQL:= lSQL + ' s ON (s.IDPrac=p.ID) INNER JOIN ' + tblKZ + 'k ON (k.ID=pp.dilec)'; + lSQL:= lSQL + ' WHERE pp.IDPrikaz=' + idPrikaz.ToString + ' AND pp.Priorita=0 AND pp.IDOdchylkyDo IS NULL AND s.ID=' + idStroj.ToString; + lSQL:= lSQL + ' ORDER BY pp.Odvadeci, pp.Doklad'; + with Helios.OpenSQL(lSQL) do + if (RecordCount>0) then + begin + idEROp:= 0; + First; + while not(EOF) do + begin + szDilce:= VarToStr(FieldByNameValues('SkupZbo')); + mjDilce:= VarToStr(FieldByNameValues('MJEvidence')); +{ + nazevOp:= VarToStr(FieldByNameValues('Nazev')); + jsemPeceni:= false; + if (nazevOp.ToLower='pečení') then + begin + jsemPeceni:= true; + mnozPec:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended; + end; + + jsemBaleni:= false; + if (nazevOp.ToLower='balení') then + begin + jsemBaleni:= true; + mnozBal:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended; + end; + + if (mnozBal>0) and (mnozPec>0) then + koefPec:= (mnozBal/mnozPec); +} + if (idEROp=0) then + begin + lSQL:= 'DECLARE @i INT' + CRLF + 'EXEC @i=dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=' + datMod.idZamMistr.ToString + ', @IDStroje=' + datMod.aktIdStroj.ToString + 'SELECT @i'; + idEROp:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + end; + d:= VarToStr(FieldByNameValues('Doklad')).ToInteger; + a:= VarToStr(FieldByNameValues('Alt')); + + lSQL:= 'DECLARE @i INT' + CRLF + 'EXEC @i=dbo.ep_Vyroba_InsertEvidRozpracOperPol @IdEvidRozpOper=' + idEROp.ToString + ', @IdPrikaz=' + idPrikaz.ToString + ', @doklPrPost=' + d.ToString; + lSQL:= lSQL + ', @altPrPost=N' + a.QuotedString + ', @cisloPL=N' + pl.ToString.QuotedString + ', @sarze=N' + sarze.QuotedString; + + if (mjDilce.ToLower='ka') then + lSQL:= lSQL + IfThen(n1>0, ', @mnozOdv=' + n1.ToString, ''); + if (mjDilce.ToLower='1000ks') and (koefPec<>0) then + lSQL:= lSQL + IfThen(n1>0, ', @mnozOdv=' + (helUtils.RoundToEX(n1/koefPec, -3)).ToString.Replace(',', '.'), ''); + + lSQL:= lSQL + ', @IdVyrCis=' + idVCPrikaz.ToString; + Helios.ExecSQL(lSQL); + +// lSQL:= 'UPDATE ' + tblPalety + ' SET DatZahajeni=GETDATE() WHERE IDPrikaz=' + idPrikaz.ToString + ' AND Sarze=N' + edtSarze.Text.QuotedString + ' AND CisloPalety=N' + edtPL.Text.QuotedString; + lSQL:= 'UPDATE ' + tblPalety + ' SET DatZahajeni=GETDATE() WHERE ID=' + idPalety.ToString; + Helios.ExecSQL(lSQL); + Next; + end; + end; + + + +// posli JSON o vyrobene palete + try + resp:= GenerujJSON (idPrikaz, idVCPrikaz, idEROp, n1).ToJSON (true).Replace(#10,'').Replace(#9,'').Replace('''',''); +{$IFNDEF DEBUG} + if (resp<>'') and (idPalety>0) and (datMod.phServer<>'') then + begin + resp:= TJson.JsonEncode(resp); + lSQL:= 'UPDATE ' + tblPalety + ' SET JSONDataStart=N' + resp.QuotedString + ' WHERE ID=' + idPalety.ToString; + Helios.ExecSQL(lSQL); + try + lParamList:= TStringStream.Create(''); + lParamList.WriteString (resp); + // http klient je stejny + lHTTP:= TIdHTTP.Create; + if (datMod.phServer.Contains('https')) then + begin + ssl:= TIdSSLIOHandlerSocketOpenSSL.Create(nil); + ssl.SSLOptions.Method:= sslvTLSv1_2; + ssl.SSLOptions.Mode:= sslmUnassigned; + lHTTP.IOHandler:= ssl; + end; + lHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent]; + lHTTP.Request.ContentType := 'application/ld+json'; + lHTTP.Request.Accept := 'application/ld+json, text/javascript, */*; q=0.01'; + + respStream:= TStringStream.Create(''); + resp:= ''; + if (helUtils.PingHost (helUtils.NetGetHostName(datMod.phServer))) then + begin + lHTTP.Post (datMod.phServer + IfThen(datMod.phServer.EndsWith('/'), '', '/') + 'prikaz', lParamList, respStream); + resp:= respStream.DataString.Replace('\/', '/'); + Helios.ExecSQL('UPDATE ' + tblPalety + ' SET JSONStartResp=N' + resp.QuotedString + ' WHERE ID=' + idPalety.ToString); + end; + finally + respStream.Free; + lParamList.Free; + if (ssl<>nil) then + ssl.Free; + lHTTP.Free; + end; + end; +{$ENDIF} + except + end; + end; // jen pokud neni opakovany tisk (z Nahledu tisku) + + + if (canCont) then + begin + bid:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Palety'''); +// idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-2'''); + if (bid>100000) then + begin + if (idFormKA>0) then + begin + if (rbTiskNaObraz.Checked) then + begin + podm:= 'hvw_Vyroba_Palety.CisloPalety=N' + pl.ToString.QuotedString; + Helios.RunAction2 (bid, podm, 'ActionPrint'); + end + else + if (idKmen>0) and (1=0) then + begin + podm:= 'TabKmenZbozi.ID=' + idKmen.ToString; + for i:=1 to n1 do + Helios.PrintForm3 (bidKZ, idFormKA, podm); // kartonovy stitek + end; + end; + + if (idFormPL>0) then + begin + podm:= 'hvw_Vyroba_Palety.CisloPalety=N' + pl.ToString.QuotedString; + if (rbTiskNaObraz.Checked) and (1=0) then + Helios.RunAction2 (bid, podm, 'ActionPrint') + else + for i:=1 to n2 do + Helios.PrintForm3 (bid, idFormPL, podm); // paletovy list + end; + end; + end; + + end; + + dm.NactiStrojeAPraci (f); + Close; + end; + + + + + procedure TformZahajeniPalety.FormShow (Sender: TObject); + var lSQL : string; + mx: integer; + begin + if (datVyroba=0) then + datVyroba:= Now; + + SetWindowLong(btnTiskStitku.Handle, GWL_STYLE, GetWindowLong((btnTiskStitku as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); + + NactiUdajePrikazu; + if (idKmen=0) and (idPrikaz>0) then + idKmen:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idPrikaz.ToString); + + if (datMod.sqlLang='czech') then + edtSarze.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratCisloSarze (NULL, 1, 1)') // datum, typ 1=cz/2=gb, iso + else + edtSarze.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratCisloSarze (NULL, 1, 0)'); // datum, typ 1=cz/2=gb, iso + + + lblKANaPal.Caption:= ''; + m1:= 0; + lSQL:= 'SELECT 1 FROM ' + tblMJZbo + ' WHERE KodMJ1=N''KA'' AND KodMJ2=N''Pal'' AND IDKmenZbozi=' + idKmen.ToString; + if (helUtils.sqlExistsTestGeneral(Helios, lSQL)) then + begin + m1:= helUtils.getHeliosIntVal(Helios, 0, lSQL.Replace('T 1 F', 'T PocetHlavni F')); + lblKANaPal.Caption:= '(KA/pal)'; + end; + edtPocetStitku.Text:= m1.ToString; + edtPocetStitkuMax.Text:= m1.ToString; + edtPocetPL.Text:= '2'; // tiskne se jeden nebo dva paletove listy + + + idFormKA:= 0; + idFormPS:= 0; + idFormPL:= 0; + + lSQL:= 'SELECT * FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + First; + if not(TryStrToInt(VarToStr(FieldByNameValues('_KL')), idFormKA)) then + idFormKA:= 0; + if not(TryStrToInt(VarToStr(FieldByNameValues('_PalStitek')), idFormPS)) then + idFormPS:= 0; + if not(TryStrToInt(VarToStr(FieldByNameValues('_PLKK')), idFormPL)) then + idFormPL:= 0; + end; +{ + lSQL:= 'SELECT ke._KL FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE vp.ID=' + idPrikaz.ToString; + idFormKA:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + lblWarnStitekKA.Visible:= (idFormKA=0); + + lSQL:= 'SELECT ke._PalStitek FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE vp.ID=' + idPrikaz.ToString; + idFormPS:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + + lSQL:= 'SELECT ke._PLKK FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE vp.ID=' + idPrikaz.ToString; + idFormPL:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + lblWarnStitekPL.Visible:= (idFormPL=0); +} + + + +// typ palety je nove jen jeden, neurcuje se dle kmene !!! +{ + lSQL:= 'SELECT ID FROM ' + tblPrikazVC + ' WHERE LEFT(VyrCislo,1)<>N''0'' AND IDPrikaz=' + idPrikaz.ToString + ' AND (Mnozstvi-Odvedeno-Zmetky)>0'; + lSQL:= lSQL + ' AND ID NOT IN (SELECT IDVyrCisPrikaz FROM ' + tblPalety + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND DatUkonceni IS NULL)'; + if (helUtils.SQLGetRowCount(Helios, lSQL)>0) then + begin + lSQL:= 'SELECT TOP(1) VyrCislo, Popis, (Mnozstvi-Odvedeno-Zmetky) AS Zbytek FROM ' + tblPrikazVC + ' WHERE LEFT(VyrCislo,1)<>N''0'' AND IDPrikaz=' + idPrikaz.ToString; + lSQL:= lSQL + ' AND (Mnozstvi-Odvedeno-Zmetky)>0 ORDER BY VyrCislo'; + with Helios.OpenSQL(lSQL) do + if (RecordCount=1) then + begin + cPal:= VarToStr(FieldByNameValues('VyrCislo')); + edtSarze.Text:= VarToStr(FieldByNameValues('Popis')); + edtPocetStitku.Text:= VarToStr(FieldByNameValues('Zbytek')); + edtPocetStitkuMax.Text:= VarToStr(FieldByNameValues('Zbytek')); + end; + end + else + cPal:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratNovyPaletovyList (3,NULL,NULL,' + idKmen.ToString + ')'); // je zadane ID kmene -> najdi podle typu kmene +} + +// typ palety je nove jen jeden, neurcuje se dle kmene !!! + + cPal:= ''; + lSQL:= 'SELECT COUNT(ID) FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND (Mnozstvi-Odvedeno-Zmetky)>0' + + ' AND ID NOT IN (SELECT r.IDVyrCis FROM ' + tblRozpracOperR + ' r INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper) WHERE r.IDVyrCis IS NOT NULL)'; + mx:= helUtils.getHeliosIntVal (Helios, 0, lSQL); + + if (mx>0) then + begin + lSQL:= lSQL.Replace('COUNT(ID) ', 'TOP(1) VyrCislo ') + ' ORDER BY VyrCislo'; + cPal:= helUtils.getHeliosStrVal (Helios, '', lSQL); + end; + if (cPal='') then + cPal:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratNovyPaletovyList (3,NULL,NULL,NULL)'); + + edtPL.Text:= cPal; + + typPal:= '0'; + if (StartsText('5', cPal)) then + typPal:= '1'; + if (StartsText('6', cPal)) then + typPal:= '2'; + if (StartsText('7', cPal)) then + typPal:= '3'; + if (StartsText('8', cPal)) then + typPal:= '4'; + + + if (edtPocetPL.CanFocus) then + edtPocetPL.SetFocus; + + end; + +end. diff --git a/frmZahajeniVyrobyPalety.dfm b/frmZahajeniVyrobyPalety.dfm new file mode 100644 index 0000000..5788a6b --- /dev/null +++ b/frmZahajeniVyrobyPalety.dfm @@ -0,0 +1,173 @@ +object formZahajeniVyrobyPalety: TformZahajeniVyrobyPalety + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Zah'#225'jen'#237' v'#253'roby palety' + ClientHeight = 582 + ClientWidth = 1159 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 25 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1159 + Height = 582 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdZahajeniVyrobyPalety + Row = 1 + end> + RowCollection = < + item + Value = 12.000000000000000000 + end + item + Value = 88.000000000000000000 + end> + TabOrder = 0 + object grdZahajeniVyrobyPalety: TDBGrid + Left = 1 + Top = 71 + Width = 1157 + Height = 510 + Align = alClient + DataSource = dm.dsZahajeniVyrobyPalety + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDblClick = grdZahajeniVyrobyPaletyDblClick + Columns = < + item + Alignment = taCenter + Expanded = False + FieldName = 'colIDPrikaz' + Visible = False + end + item + Expanded = False + FieldName = 'colIDKmen' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRada' + Title.Alignment = taCenter + Title.Caption = #344'ada' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 71 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPrikaz' + Title.Alignment = taCenter + Title.Caption = 'P'#345#237'kaz' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 108 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SZ' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 54 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRegCis' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 141 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 490 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJ' + Title.Alignment = taCenter + Title.Caption = 'MJ' + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 89 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colDatPlanZahajeni' + Title.Alignment = taCenter + Title.Caption = 'Pl'#225'n zah'#225'jen'#237 + Title.Font.Charset = DEFAULT_CHARSET + Title.Font.Color = clWindowText + Title.Font.Height = -19 + Title.Font.Name = 'Segoe UI' + Title.Font.Style = [fsBold] + Width = 145 + Visible = True + end + item + Expanded = False + FieldName = 'colIDStroj' + Visible = False + end> + end + end +end diff --git a/frmZahajeniVyrobyPalety.pas b/frmZahajeniVyrobyPalety.pas new file mode 100644 index 0000000..e4d7327 --- /dev/null +++ b/frmZahajeniVyrobyPalety.pas @@ -0,0 +1,127 @@ +unit frmZahajeniVyrobyPalety; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, + ddPlugin_TLB; + +type + TformZahajeniVyrobyPalety = class(TForm) + GridPanel1: TGridPanel; + grdZahajeniVyrobyPalety: TDBGrid; + procedure FormShow(Sender: TObject); + procedure grdZahajeniVyrobyPaletyDblClick(Sender: TObject); + private + public + Helios: IHelios; + end; + +var + formZahajeniVyrobyPalety: TformZahajeniVyrobyPalety; + +implementation +uses System.StrUtils, System.DateUtils, + datMod, helUtils, helTabsBIDs, + frmTiskKAStitku; + +{$R *.dfm} + + + procedure TformZahajeniVyrobyPalety.FormShow(Sender: TObject); + begin + dm.NactiZahajeniVyrobyPalety (self); + helUtils.waitEnd; + end; + + + + + + procedure TformZahajeniVyrobyPalety.grdZahajeniVyrobyPaletyDblClick (Sender: TObject); + var msg, podm, lSQL, lSQL2: string; + novyZaznam, canCont: boolean; + idVPr, idKZPrikaz, idPrP, idStroj, idPrac, idEvROp, prpD: integer; + prpA: string; + f2: TformTiskKAStitku; + begin + + idVPr:= grdZahajeniVyrobyPalety.DataSource.DataSet.FieldByName('colIDPrikaz').AsInteger; + idStroj:= grdZahajeniVyrobyPalety.DataSource.DataSet.FieldByName('colIDStroj').AsInteger; + idEvROp:= 0; + + + try + novyZaznam:= true; + if (dm.vtStroje.FieldByName('fCinnost').AsString='Výroba') then + begin + idEvROp:= dm.vtStroje.FieldByName('fIDEvidRozpOper').AsInteger; + msg:= 'Na stroji ' + #1 + dm.vtStroje.FieldByName('fStroj').AsString + #1 + ' je ve výrobě paleta ' + dm.vtStroje.FieldByName('fAktPaletList').AsString + '.' + CRLF; + msg:= msg +'Pokud na ní chcete pokračovat, zadejte z Rozpracovanosti.' + CRLF + 'Pokračovat v zadání nové palety ?'; + if not(Helios.YesNo(msg, false)) then + novyZaznam:= false; + end; + + if (novyZaznam) then + begin + + + dm.UkonciEvidRozpracOper (idEvROp, msg); + + idKZPrikaz:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IdTabKmen FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString); + idPrac:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDPrac FROM ' + tblCStroju + ' WHERE ID=' + idStroj.ToString); + + lSQL:= 'SELECT pp.ID FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCStroju + ' s ON (s.ID=pp.IDStroje) INNER JOIN ' + tblVPr + ' vp ON (vp.ID=pp.IDPrikaz)'; + lSQL:= lSQL + ' WHERE vp.StavPrikazu=30 AND pp.Splneno=0 AND pp.IDOdchylkyDo IS NULL AND s.ID=' + idStroj.ToString; + idPrP:= helUtils.getHeliosIntVal(Helios, 0, lSQL + ' AND vp.ID=' + idVPr.ToString); + + canCont:= false; + f2:= TformTiskKAStitku.Create(nil); + try + try + f2.Caption:= ' Zahájení výroby palety'; + f2.btnTiskZaloha.Visible:= true; + f2.retVal:= 0; + f2.Helios:= Helios; + f2.idKmen:= idKZPrikaz; + f2.ShowModal; + if (f2.retVal=1) then + canCont:= true; + except + end; + finally + f2.Free; + end; + + + if (canCont) then + begin + prpD:= helUtils.getHeliosIntVal(Helios, 1, 'SELECT Doklad FROM ' + tblPrPost + ' WHERE ID=' + idPrP.ToString); + prpA:= helUtils.getHeliosStrVal(Helios, 'A', 'SELECT Alt FROM ' + tblPrPost + ' WHERE ID=' + idPrP.ToString); + + lSQL:= 'INSERT ' + tblRozpracOper + ' (IDZamestnance, CasZahajeni, IDPracoviste, IDStroje) SELECT ' + datMod.idZamMistr.ToString; + lSQL:= lSQL + ', GETDATE(), ' + idPrac.ToString + ', ' + idStroj.ToString + CRLF + 'SELECT SCOPE_IDENTITY() AS newid'; + idEvROp:= helUtils.getHeliosIntVal(Helios, 0, lSQL); + + if (idEvROp>0) then + begin + lSQL:= ' INSERT ' + tblRozpracOperR + ' (IDEvidRozpracOper, IDPrikaz, DokladPrPostup, AltPrPostup, IDVyrCis, Mnoz_odv, Sk_cas, Sk_cas_T, Sk_cas_Obsluhy, Sk_cas_Obsluhy_T)'; + lSQL:= lSQL + ' SELECT ' + idEvROp.ToString + ', ' + idVPr.ToString + ', ' + prpD.ToString + ' , N' + prpA.QuotedString + ', NULL, 0, 0, 1, 0, 1'; + Helios.ExecSQL(lSQL); + end; + end; + + end; + except on E:Exception do + begin + msg:= E.Message; + Helios.Error(#1'Chyba'#1 + CRLF + msg); + end; + end; + + end; + + + +end. diff --git a/frmZasobaObjednavky.dfm b/frmZasobaObjednavky.dfm new file mode 100644 index 0000000..2e703f6 --- /dev/null +++ b/frmZasobaObjednavky.dfm @@ -0,0 +1,509 @@ +object formZasobaObjednavky: TformZasobaObjednavky + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = ' Z'#225'soba / Objedn'#225'vky' + ClientHeight = 719 + ClientWidth = 1174 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnShow = FormShow + TextHeight = 21 + object GridPanel1: TGridPanel + Left = 0 + Top = 0 + Width = 1174 + Height = 719 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = grdZasobaObjednavky + Row = 1 + end + item + Column = 0 + Control = GridPanel2 + Row = 0 + end> + RowCollection = < + item + Value = 15.000000000000000000 + end + item + Value = 80.000000000000000000 + end + item + Value = 5.000000000000000000 + end> + TabOrder = 0 + object grdZasobaObjednavky: TJvDBGrid + Left = 1 + Top = 109 + Width = 1172 + Height = 573 + Align = alClient + DataSource = dm.dsZasobyObjednavky + DrawingStyle = gdsGradient + GradientEndColor = clActiveCaption + GradientStartColor = 16776176 + Options = [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack] + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + OnDrawColumnCell = grdZasobaObjednavkyDrawColumnCell + OnDblClick = grdZasobaObjednavkyDblClick + SelectColumnsDialogStrings.Caption = 'Select columns' + SelectColumnsDialogStrings.OK = '&OK' + SelectColumnsDialogStrings.NoSelectionWarning = 'At least one column must be visible!' + EditControls = <> + RowsHeight = 25 + TitleRowHeight = 25 + Columns = < + item + Expanded = False + FieldName = 'colIDKmen' + Visible = False + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSZ' + Title.Alignment = taCenter + Title.Caption = 'SK' + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colRC' + Title.Alignment = taCenter + Title.Caption = 'Reg. '#269#237'slo' + Width = 106 + Visible = True + end + item + Expanded = False + FieldName = 'colNazev1' + Title.Alignment = taCenter + Title.Caption = 'N'#225'zev' + Width = 337 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colMJ' + Title.Alignment = taCenter + Title.Caption = 'MJ' + Width = 44 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colBaleni1' + Title.Alignment = taCenter + Title.Caption = 'Balen'#237 + Width = 75 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colBaleni2' + Title.Alignment = taCenter + Title.Caption = ' ' + Width = 68 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colVyroba' + Title.Alignment = taCenter + Title.Caption = 'V'#253'roba' + Width = 76 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colNaCeste' + Title.Alignment = taCenter + Title.Caption = 'Na cest'#283 + Width = 84 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colSklad' + Title.Alignment = taCenter + Title.Caption = 'Sklad' + Width = 77 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colCelkem' + Title.Alignment = taCenter + Title.Caption = 'Celkem' + Width = 75 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colObjednano' + Title.Alignment = taCenter + Title.Caption = 'Objedn'#225'no' + Width = 89 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'colPalet' + Title.Alignment = taCenter + Title.Caption = 'Palet' + Width = 57 + Visible = True + end> + end + object GridPanel2: TGridPanel + Left = 1 + Top = 1 + Width = 1172 + Height = 108 + Align = alClient + ColumnCollection = < + item + Value = 100.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = GridPanel3 + Row = 1 + end> + RowCollection = < + item + Value = 59.877371143897310000 + end + item + Value = 40.122628856102700000 + end> + TabOrder = 1 + object GridPanel3: TGridPanel + Left = 1 + Top = 64 + Width = 1170 + Height = 43 + Align = alClient + ColumnCollection = < + item + Value = 1.000000000000000000 + end + item + Value = 2.800000000000000000 + end + item + Value = 9.100000000000000000 + end + item + Value = 29.000000000000000000 + end + item + Value = 3.800000000000000000 + end + item + Value = 6.500000000000000000 + end + item + Value = 5.900000000000000000 + end + item + Value = 6.900000000000000000 + end + item + Value = 7.000000000000000000 + end + item + Value = 6.900000000000000000 + end + item + Value = 6.500000000000000000 + end + item + Value = 14.599999999999990000 + end> + ControlCollection = < + item + Column = 1 + Control = edtSZ + Row = 0 + end + item + Column = 2 + Control = edtRC + Row = 0 + end + item + Column = 3 + Control = edtNazev1 + Row = 0 + end + item + Column = 4 + Control = edtMJ + Row = 0 + end + item + Column = 5 + Control = edtBaleni1 + Row = 0 + end + item + Column = 6 + Control = edtBaleni2 + Row = 0 + end + item + Column = 7 + Control = cbVyroba + Row = 0 + end + item + Column = 8 + Control = cbNaCeste + Row = 0 + end + item + Column = 9 + Control = cbSklad + Row = 0 + end + item + Column = 10 + Control = cbCelkem + Row = 0 + end + item + Column = 11 + Control = cbObjednano + Row = 0 + end + item + Column = 0 + Control = Label1 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = ssAuto + end> + TabOrder = 0 + DesignSize = ( + 1170 + 43) + object edtSZ: TEdit + AlignWithMargins = True + Left = 14 + Top = 10 + Width = 30 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alBottom + Alignment = taCenter + MaxLength = 3 + TabOrder = 0 + OnChange = edtSZChange + end + object edtRC: TEdit + AlignWithMargins = True + Left = 46 + Top = 10 + Width = 105 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alBottom + Alignment = taCenter + MaxLength = 30 + TabOrder = 1 + OnChange = edtRCChange + end + object edtNazev1: TEdit + AlignWithMargins = True + Left = 153 + Top = 10 + Width = 336 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alBottom + MaxLength = 100 + TabOrder = 2 + OnChange = edtNazev1Change + end + object edtMJ: TEdit + AlignWithMargins = True + Left = 491 + Top = 10 + Width = 43 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alBottom + Alignment = taCenter + MaxLength = 10 + TabOrder = 3 + OnChange = edtMJChange + end + object edtBaleni1: TEdit + AlignWithMargins = True + Left = 536 + Top = 10 + Width = 74 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alBottom + Alignment = taCenter + MaxLength = 8 + NumbersOnly = True + OEMConvert = True + TabOrder = 4 + OnChange = edtBaleni1Change + end + object edtBaleni2: TEdit + AlignWithMargins = True + Left = 612 + Top = 10 + Width = 67 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alBottom + Alignment = taCenter + MaxLength = 8 + NumbersOnly = True + OEMConvert = True + TabOrder = 5 + OnChange = edtBaleni2Change + end + object cbVyroba: TComboBox + AlignWithMargins = True + Left = 681 + Top = 4 + Width = 78 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alClient + Style = csDropDownList + TabOrder = 6 + OnChange = cbVyrobaChange + Items.Strings = ( + '<>0' + '=0') + end + object cbNaCeste: TComboBox + AlignWithMargins = True + Left = 761 + Top = 4 + Width = 80 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alClient + Style = csDropDownList + TabOrder = 7 + OnChange = cbNaCesteChange + Items.Strings = ( + '<>0' + '=0') + end + object cbSklad: TComboBox + AlignWithMargins = True + Left = 843 + Top = 4 + Width = 79 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alClient + Style = csDropDownList + TabOrder = 8 + OnChange = cbSkladChange + Items.Strings = ( + '' + '<>0' + '=0') + end + object cbCelkem: TComboBox + AlignWithMargins = True + Left = 924 + Top = 4 + Width = 73 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alClient + Style = csDropDownList + TabOrder = 9 + OnChange = cbCelkemChange + Items.Strings = ( + '<>0' + '=0') + end + object cbObjednano: TComboBox + AlignWithMargins = True + Left = 999 + Top = 4 + Width = 169 + Height = 29 + Margins.Left = 1 + Margins.Right = 1 + Align = alClient + Style = csDropDownList + TabOrder = 10 + OnChange = cbObjednanoChange + Items.Strings = ( + '<>0' + '=0') + end + object Label1: TLabel + Left = 2 + Top = 11 + Width = 9 + Height = 21 + Anchors = [] + Caption = 'X' + OnClick = Label1Click + ExplicitLeft = 1 + ExplicitTop = 8 + end + end + end + end +end diff --git a/frmZasobaObjednavky.pas b/frmZasobaObjednavky.pas new file mode 100644 index 0000000..f313f5b --- /dev/null +++ b/frmZasobaObjednavky.pas @@ -0,0 +1,278 @@ +unit frmZasobaObjednavky; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, + ddPlugin_TLB, JvExDBGrids, JvDBGrid; + +type + TformZasobaObjednavky = class(TForm) + GridPanel1: TGridPanel; + grdZasobaObjednavky: TJvDBGrid; + GridPanel2: TGridPanel; + GridPanel3: TGridPanel; + edtSZ: TEdit; + edtRC: TEdit; + edtNazev1: TEdit; + edtMJ: TEdit; + edtBaleni1: TEdit; + edtBaleni2: TEdit; + cbVyroba: TComboBox; + cbNaCeste: TComboBox; + cbSklad: TComboBox; + cbCelkem: TComboBox; + cbObjednano: TComboBox; + Label1: TLabel; + procedure FormShow (Sender: TObject); + procedure grdZasobaObjednavkyDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure grdZasobaObjednavkyDblClick (Sender: TObject); + procedure edtSZChange (Sender: TObject); + procedure edtRCChange (Sender: TObject); + procedure edtNazev1Change (Sender: TObject); + procedure cbVyrobaChange (Sender: TObject); + procedure cbNaCesteChange (Sender: TObject); + procedure cbSkladChange (Sender: TObject); + procedure cbCelkemChange (Sender: TObject); + procedure cbObjednanoChange (Sender: TObject); + procedure edtMJChange (Sender: TObject); + procedure edtBaleni1Change (Sender: TObject); + procedure edtBaleni2Change (Sender: TObject); + procedure Label1Click (Sender: TObject); + private + procedure Filtruj; + public + Helios: iHelios; + vyrobniDen: TDateTime; + end; + +var + formZasobaObjednavky: TformZasobaObjednavky; + +implementation +uses System.StrUtils, System.Math, + datMod, frmObjednavkaMat, helUtils; + +{$R *.dfm} + + + procedure TformZasobaObjednavky.cbCelkemChange(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.cbNaCesteChange(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.cbObjednanoChange(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.cbSkladChange(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.cbVyrobaChange(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.edtBaleni1Change(Sender: TObject); + var n: Extended; + begin + edtBaleni1.Text:= edtBaleni1.Text.Trim; + if not(TryStrToFloat(edtBaleni1.Text, n)) then + n:= 0; + Filtruj; + end; + + + + procedure TformZasobaObjednavky.edtBaleni2Change(Sender: TObject); + var n: Extended; + begin + edtBaleni2.Text:= edtBaleni2.Text.Trim; + if not(TryStrToFloat(edtBaleni2.Text, n)) then + n:= 0; + Filtruj; + end; + + + procedure TformZasobaObjednavky.edtMJChange(Sender: TObject); + begin + edtMJ.Text:= edtMJ.Text.Trim; + Filtruj; + end; + + + procedure TformZasobaObjednavky.edtNazev1Change(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.edtRCChange(Sender: TObject); + begin + Filtruj; + end; + + + procedure TformZasobaObjednavky.edtSZChange(Sender: TObject); + begin + edtSZ.Text:= edtSZ.Text.Trim; + Filtruj; + end; + + + + + procedure TformZasobaObjednavky.Filtruj; + var filtr: string; + n: Extended; + begin + filtr:= ''; + if (edtSZ.Text<>'') then + filtr:= 'UPPER(colSZ) LIKE ''%' + edtSZ.Text.Trim.ToUpper + '%'''; + + if (edtRC.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colRC) LIKE ''%' + edtRC.Text.Trim.ToUpper + '%'''; + + if (edtNazev1.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colNazev1) LIKE ''%' + edtNazev1.Text.Trim.ToUpper + '%'''; + + if (edtMJ.Text<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'UPPER(colMJ) LIKE ''%' + edtMJ.Text.Trim.ToUpper + '%'''; + + if (edtBaleni1.Text<>'') then + begin + if not(TryStrToFloat(edtBaleni1.Text, n)) then + n:= 0; + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colBaleni1=' + n.ToString.Replace(',', '.'); + end; + + if (edtBaleni2.Text<>'') then + begin + if not(TryStrToFloat(edtBaleni2.Text, n)) then + n:= 0; + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colBaleni2=' + n.ToString.Replace(',', '.'); + end; + + if (cbVyroba.Text.Trim<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colVyroba' + cbVyroba.Text; + + if (cbNaCeste.Text.Trim<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colNaCeste' + cbNaCeste.Text; + + if (cbSklad.Text.Trim<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colSklad' + cbSklad.Text; + + if (cbCelkem.Text.Trim<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colCelkem' + cbCelkem.Text; + + if (cbObjednano.Text.Trim<>'') then + filtr:= filtr + IfThen(filtr='', '', ' AND ') + 'colObjednano' + cbObjednano.Text; // + ' OR colPalet' + cbObjednano.Text; + + + grdZasobaObjednavky.LockDrawing; + if (filtr='') then + begin + dm.vtZasobyObjednavky.Filter:= filtr; + dm.vtZasobyObjednavky.Filtered:= false; + end + else + begin + dm.vtZasobyObjednavky.Filter:= filtr; + dm.vtZasobyObjednavky.Filtered:= true; + end; + grdZasobaObjednavky.UnlockDrawing; + + grdZasobaObjednavky.Invalidate; + end; + + + + + + procedure TformZasobaObjednavky.FormShow (Sender: TObject); + begin + grdZasobaObjednavky.Font.Height:= Helios.FontHeight; + dm.NactiZasobaObjednavky (self); + end; + + + + + procedure TformZasobaObjednavky.grdZasobaObjednavkyDblClick (Sender: TObject); + var idKZ: integer; + f: TformObjednavkaMat; + begin + idKZ:= TDBGrid(Sender).DataSource.DataSet.FieldByName('colIDKmen').AsInteger; + + f:= TformObjednavkaMat.Create(nil); + try + f.Helios:= Helios; + f.vyrobniDen:= vyrobniDen; + f.idKmen:= idKZ; + f.ShowModal; + finally + f.Free; + end; + + end; + + + + + procedure TformZasobaObjednavky.grdZasobaObjednavkyDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + begin + if (not(gdSelected in State)) then + begin + if (Odd(grdZasobaObjednavky.DataSource.DataSet.RecNo)) then + TDBGrid(Sender).Canvas.Brush.Color:= clWindow + else + TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0; + end; + + if (Column.FieldName='colNazev1') then + begin + TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; + if (gdSelected in State) then + begin + TDBGrid(Sender).Canvas.Font.Color:= clBlack; + TDBGrid(Sender).Canvas.Brush.Color:= $0061F0FC; + end; + end; + + TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); + end; + + + + + procedure TformZasobaObjednavky.Label1Click(Sender: TObject); + begin + edtSZ.Text:= ''; + edtRC.Text:= ''; + edtNazev1.Text:= ''; + edtMJ.Text:= ''; + edtBaleni1.Text:= ''; + edtBaleni2.Text:= ''; + cbVyroba.ItemIndex:= -1; + cbNaCeste.ItemIndex:= -1; + cbObjednano.ItemIndex:= -1; + cbSklad.ItemIndex:= -1; + cbCelkem.ItemIndex:= -1; + Filtruj; + end; + +end. diff --git a/iConsts.inc b/iConsts.inc new file mode 100644 index 0000000..9a03c4c --- /dev/null +++ b/iConsts.inc @@ -0,0 +1,16 @@ +const + CRLF = #13#10; + tblVyrPozn = '[dbo].[_TabVyroba_PoznamkyVyrobnihoDne]'; + tblCCP1 = '[dbo].[_TabVyroba_KontrolyCCP1]'; // kriticky kontrolni bod + tblVzorky = '[dbo].[_TabVyroba_Vzorky]'; + tblVzorkyArchiv = '[dbo].[_TabVyroba_VzorkyArchiv]'; + tblOdpadPek = '[dbo].[_TabVyroba_OdpadPekarna]'; + tblCinnostStr = '[dbo].[_TabVyroba_StrojCinnost]'; + tblObjednavky = '[dbo].[_TabVyroba_Objednavky]'; + tblObjednavkyPol = '[dbo].[_TabVyroba_Objednavky_Pol]'; + tblOperaceStartStop = '[dbo].[_TabVyroba_OperaceStartStop]'; + tblOperaceStartStopVydej = '[dbo].[_TabVyroba_OperaceStartStopVydej]'; + tblPalety = '[dbo].[_TabVyroba_Palety]'; + tblPaletyUkonceni = '[dbo].[_TabVyroba_PaletyUkonceni]'; + tblPaletyPohybOZ = '[dbo].[_TabVyroba_PaletyPohybOZ]'; + tblHDCPHLog = '[dbo].[_hdc_ph_Log]'; diff --git a/lib/plgHlaskyEx.INC b/lib/plgHlaskyEx.INC new file mode 100644 index 0000000..a29bda8 --- /dev/null +++ b/lib/plgHlaskyEx.INC @@ -0,0 +1,10 @@ +// PRVNI HLASKA MUSI ZACINAT min. W = 5050000 !!! + +// ,(SelfIdent: plx...; +// H : ''; +// W : 5050000;{$IFDEF EdHlasky}I:'';E:'';D:'';{$ENDIF}) + +//last + + + diff --git a/lib/plgHlaskyJadro.INC b/lib/plgHlaskyJadro.INC new file mode 100644 index 0000000..0a4edee --- /dev/null +++ b/lib/plgHlaskyJadro.INC @@ -0,0 +1,847 @@ +// prvni hlaska MUSI zustat prazdna !! +(SelfIdent: plxNic; +H : ''; +W : 5000000) + +,(SelfIdent: plxOK; +H : 'OK'; +SK: 'OK'; +W : 5000001; I:'text na klávese OK';E:'OK';D:'OK') + +,(SelfIdent: plxStorno; +H : 'Storno'; +SK: 'Storno'; +W : 5000002; I:'text na klávese Storno';E:'Cancel';D:'') + +,(SelfIdent: plxJadroUlozitZmeny; +H : 'Uložit změny ?'; +SK: 'Uložiť zmeny ?'; +W : 5000003) + +,(SelfIdent: plxJadroPrazdnaNeboChybneZadanaPolozka; +H : 'Prázdná nebo chybně zadaná položka'; +SK: 'Prázdná alebo chybne zadaná položka'; +W : 5000004) + +,(SelfIdent: plxJadroOprPrejSmazAkt; +H : 'Opravdu si přejete smazat aktuální záznam ?'; +SK: 'Naozaj si prajete zmazať aktuálny záznam ?'; +W : 5000005; I:'Dotaz na DELETE v přehledu';E:'';D:'';) + +,(SelfIdent: plxJadroOprPrejSmazVse; +H : 'Opravdu si přejete smazat'#1' všechny '#1'označené záznamy'; +SK: 'Naozaj si prajete zmazať'#1' všetky '#1'označené záznamy'; +W : 5000006; I:'Dotaz na DELETE v přehledu';E:'';D:'';) + +,(SelfIdent: plxJadroNeni; +H : '(není)'; +SK: '(nie je)'; +W : 5000007; I:'text značící nepřítomnost hodnoty';E:'(none)';D:'') + +,(SelfIdent: plxJadroPluginVyzadujeMinVerziX; +H : 'Plugin vyžaduje minimální verzi Heliosu '#1'%s'#1' !'; +SK: 'Plugin vyžaduje minimálnu verziu Heliosu '#1'%s'#1' !'; +W : 5000008) + +,(SelfIdent: plxJadroAkceNemuzeBytSpustena; +H : 'Akce nemůže být spuštěna nad aktuálním přehledem (chyba č. %d)!'; +SK: 'Akcia nemôže byť spustená nad aktuálnym prehľadom (chyba č. %d)!'; +W : 5000009) + +,(SelfIdent: plxJadroMenuEditace; +H : 'Editace'; +SK: 'Editácia'; +W : 5000010) + +,(SelfIdent: plxJadroAkceNovy; +H : 'Nový'; +SK: 'Nový'; +W : 5000011; GUID: '{B24F7317-2850-4E23-84C2-23759E2104BD}') + +,(SelfIdent: plxJadroAkceOprava; +H : 'Oprava'; +SK: 'Oprava'; +W : 5000012; GUID: '{E72DC09D-A06D-4712-B44E-40F8D4023DD9}') + +,(SelfIdent: plxJadroAkceZrusit; +H : 'Zrušit'; +SK: 'Zrušiť'; +W : 5000013; GUID: '{69B3748A-4A0D-4FAF-95DA-C5A86EAAF64C}') + +,(SelfIdent: plxJadroPouzeKeCteni; +H : 'pouze ke čtení'; +SK: 'len na čítanie'; +W : 5000014) + +,(SelfIdent: plxJadroZavrit; +H : 'Zavřít'; +SK: 'Zavrieť'; +W : 5000015) + +,(SelfIdent: plxJadroIndexSeZmenil; +H : 'Index se v databázi změnil'; +SK: 'Index sa v databázi zmenil'; +W : 5000016) + +,(SelfIdent: plxJadroIndexV_DB_Chybi; +H : 'Index v databázi chybí'; +SK: 'Index v databázi chýba'; +W : 5000017) + +,(SelfIdent: plxJadroKontrolaPluginuX; +H : 'Kontrola pluginu %s (%s)'; +SK: 'Kontrola pluginu %s (%s)'; +W : 5000018) + +,(SelfIdent: plxJadroSpustit; +H : 'Spustit'; +SK: 'Spustiť'; +W : 5000019) + +,(SelfIdent: plxJadroZmenoveSkripty; +H : 'Změnové skripty'; +SK: 'Zmenové skripty'; +W : 5000020) + +,(SelfIdent: plxJadroKontrolaTabulek; +H : 'Kontrola tabulek'; +SK: 'Kontrola tabuliek'; +W : 5000021) + +,(SelfIdent: plxJadroKontrolaJednotlivychAtributu; +H : 'Kontrola jednotlivých atributů'; +SK: 'Kontrola jednotlivých atribútov'; +W : 5000022) + +,(SelfIdent: plxJadroKontrolaUnikatnichKlicu; +H : 'Kontrola unikátních klíčů'; +SK: 'Kontrola unikátnych kľúčov'; +W : 5000023) + +,(SelfIdent: plxJadroKontrolaIntegritnichOmezeni; +H : 'Kontrola integritních omezení'; +SK: 'Kontrola integritných omedzení'; +W : 5000024) + +,(SelfIdent: plxJadroKontrolaCizichKlicu; +H : 'Kontrola cizích klíčů'; +SK: 'Kontrola cudzích kľúčov'; +W : 5000025) + +,(SelfIdent: plxJadroKontrolaUlozenychProcedur; +H : 'Kontrola uložených procedur'; +SK: 'Kontrola uložených procedúr'; +W : 5000026) + +,(SelfIdent: plxJadroKontrolaTriggeru; +H : 'Kontrola triggerů'; +SK: 'Kontrola triggerov'; +W : 5000027) + +,(SelfIdent: plxJadroKontrolaIndexu; +H : 'Kontrola indexů'; +SK: 'Kontrola indexov'; +W : 5000028) + +,(SelfIdent: plxJadroKontrolaPrehledu_a_Akci; +H : 'Kontrola def.přehledů a externích akcí'; +SK: 'Kontrola def.prehľadov a externých akcií'; +W : 5000029) + +,(SelfIdent: plxJadroImportFormularuFilruOpisu; +H : 'Import formulářů, filtrů a opisů'; +SK: 'Import formulárov, filtrov a opisov'; +W : 5000030) + +,(SelfIdent: plxJadroZmenovySkriptJizBylProveden; +H : 'Změnový skript už byl proveden někým jiným - informace by měla být v žurnálu !'; +SK: 'Zmenový skript už bol vykonaný niekym iným - informácia by mala byť v žurnále !'; +W : 5000031) + +,(SelfIdent: plxJadroUpdateZVerze_X_NaVerzi_Y; +H : 'Update z verze %s na verzi %s.'; +SK: 'Update z verzie %s na verziu %s.'; +W : 5000032) + +,(SelfIdent: plxJadroZmenovychSkriptuX; +H : 'změnových skriptů: %d'; +SK: 'zmenových skriptov: %d'; +W : 5000033) + +,(SelfIdent: plxJadroInstalaceHotovo; +H : 'Hotovo'; +SK: 'Hotovo'; +W : 5000034) + +,(SelfIdent: plxJadro_X_BudeNyniUkoncen; +H : 'Aplikace %s bude ukončena.'; +SK: 'Aplikácia %s bude ukončená.'; +W : 5000035) + +,(SelfIdent: plxJadroBylaDetekovanaZmenaStruktury; +H : 'Byla detekována změna struktury.'; +SK: 'Bola detekovaná zmena štruktúry.'; +W : 5000036) + +,(SelfIdent: plxJadroUvedeneTabulkyChybi; +H : 'Uvedené tabulky v databázi chybí.'; +SK: 'Uvedené tabuľky v databázi chýbajú.'; +W : 5000037) + +,(SelfIdent: plxJadroVytvoreniZakladnichPrehledu; +H : 'Vytvoření a změna základních přehledů, akcí a vazeb.'; +SK: 'Vytvorenie a zmena základných prehľadov, akcií a väzieb.'; +W : 5000038) + +,(SelfIdent: plxJadroZmenaStrukturyDB; +H : 'Změna struktury databáze'; +SK: 'Zmena štruktúry databázy'; +W : 5000039) + +,(SelfIdent: plxJadroOpravduSiPrejeteUvedeneZmeny; +H : 'Opravdu si přejete provést výše uvedené změny ?'; +SK: 'Naozaj si prajete vykonať vyššie uvedené zmeny ?'; +W : 5000040) + +,(SelfIdent: plxJadroPredZmenamiDoporucujemeZalohuDB; +H : 'Před provedením změn doporučujeme provést zálohu databáze.'; +SK: 'Pred vykonaním zmien doporučujeme vykonať zálohu databázy.'; +W : 5000041) + +,(SelfIdent: plxJadroTlacitkoZalohovani; +H : '&Zálohování...'; +SK: '&Zálohovanie...'; +W : 5000042) + +,(SelfIdent: plxJadroProvest; +H : 'Provést'; +SK: 'Vykonať'; +W : 5000043) + +,(SelfIdent: plxJadroAkceUkazSQLSkript; +H : '&Ukaž SQL skript...'; +SK: '&Ukáž SQL skript...'; +W : 5000044) + +,(SelfIdent: plxJadroDefinovaneFormulare; +H : 'Definované formuláře'; +SK: 'Definované formuláre'; +W : 5000045) + +,(SelfIdent: plxJadroDefinovaneFiltry; +H : 'Definované filtry'; +SK: 'Definované filtre'; +W : 5000046) + +,(SelfIdent: plxJadroDefinovaneOpisy; +H : 'Definované opisy'; +SK: 'Definované opisy'; +W : 5000047) + +,(SelfIdent: plxJadroAutoImportInfo; +H : 'Byly nalezeny nové soubory pro import.'#13#13+ + 'Pokud neprovedete import v tuto chvíli, máte ' + + 'možnost ho provést později ručně - soubory jsou ' + + 'umístěny v podadresáři SYSTEM v cestě, kde se ' + + 'nachází plugin %s.'; +SK: 'Boli nájdené nové súbory pre import.'#13#13+ + 'Pokiaľ nevykonáte import v tejto chvíli, máte ' + + 'možnosť ho vykonať neskôr ručne - súbory sú ' + + 'umiestnené v podadresári SYSTEM v ceste, kde sa ' + + 'nachádza plugin %s.'; +W : 5000048) + +,(SelfIdent: plxJadroAbout_OPluginu; +H : 'O pluginu...'; +SK: 'O plugine...'; +W : 5000049) + +,(SelfIdent: plxJadroKopirovat; +H : 'Kopírovat'; +SK: 'Kopírovať'; +W : 5000050) + +,(SelfIdent: plxJadroAbout_Nazev; +H : 'Název'; +SK: 'Názov'; +W : 5000051) + +,(SelfIdent: plxJadroAbout_Hodnota; +H : 'Hodnota'; +SK: 'Hodnota'; +W : 5000052) + +,(SelfIdent: plxJadroVerze; +H : 'Verze'; +SK: 'Verzia'; +W : 5000053) + +,(SelfIdent: plxJadroAbout_Vyrobce; +H : 'Výrobce'; +SK: 'Výrobca'; +W : 5000054) + +,(SelfIdent: plxJadroAbout_MinVerze_X; +H : 'Min. verze %s'; +SK: 'Min. verzia %s'; +W : 5000055) + +,(SelfIdent: plxJadroAbout_JADRO; +H : 'JÁDRO'; +SK: 'JADRO'; +W : 5000056) + +,(SelfIdent: plxJadroVerze_V_DB; +H : 'Verze v DB'; +SK: 'Verzia v DB'; +W : 5000057) + +,(SelfIdent: plxJadroVerzePluginu; +H : 'Verze pluginu'; +SK: 'Verzia pluginu'; +W : 5000058) + +,(SelfIdent: plxJadroVerzePluginuJeNizsiNezVDB; +H : 'Verze pluginu je nižší než verze v databázi!'; +SK: 'Verzia pluginu je nižšia ako verzia v databázy!'; +W : 5000059) + +,(SelfIdent: plxJadroNeznamaAkce; +H : 'Neznámá akce!'; +SK: 'Neznáma akcia!'; +W : 5000060) + +,(SelfIdent: plxJadroJeTrebaSpustitInstalaciPluginu; +H : 'Je třeba spustit instalaci pluginu!'; +SK: 'Je potrebné spustiť inštalácia pluginu!'; +W : 5000061) + +,(SelfIdent: plxJadroVerzePluginuJeVyssiNezVDB; +H : 'Verze pluginu je vyšší než verze v databázi!'; +SK: 'Verzia pluginu je vyššia ako verzia v databázy!'; +W : 5000062) + +,(SelfIdent: plxJadroMinulaInstalaceNeprobehlaKorektne; +H : 'Při minulé instalaci nebyly korektně provedeny všechny změny!'; +SK: 'Pri minulej inštalácii neboli korektne vykonané všetky zmeny!'; +W : 5000063) + +,(SelfIdent: plxJadroVymazat; +H : 'Vymazat'; +SK: 'Vymazať'; +W : 5000064) + +,(SelfIdent: plxJadroZakazkaXJeUzavrena; +H : 'Zakázka '#1'%s'#1' je '#1'uzavřena'#1'!'; +SK: 'Zákazka '#1'%s'#1' je '#1'uzavretá'#1'!'; +W : 5000065) + +,(SelfIdent: plxJadroNalezenoViceStejnychHodnotPolozky; +H : 'Nalezeno více stejných hodnot položky'; +SK: 'Nájdených viac rovnakých hodnôt položky'; +W : 5000066) + +,(SelfIdent: plxJadroOrganizaceJeZakazana; +H : 'Organizace je zakázána!'; +SK: 'Organizácia je zakázaná'; +W : 5000067) + +,(SelfIdent: plxJadroOrganizaceJeBlokovana; +H : 'Organizace je blokovaná!'; +SK: 'Organizácia je blokovaná!'; +W : 5000068) + +,(SelfIdent: plxJadroInfoOrg_DluhXKeDniY; +H : ', dluh %s Kč ke dni %s'; +SK: ', dlh %s Sk ku dňu %s'; +W : 5000069) + +,(SelfIdent: plxJadroDatumPoslednihoAutoImportuFormularu; +H : 'Datum posledního autoimportu formulářů'; +SK: 'Dátum posledného autoimportu formulárov'; +W : 5000070) + +,(SelfIdent: plxJadroDatumPoslednihoAutoImportuFiltru; +H : 'Datum posledního autoimportu filtrů'; +SK: 'Dátum posledného autoimportu filtrov'; +W : 5000071) + +,(SelfIdent: plxJadroDatumPoslednihoAutoImportuOpisu; +H : 'Datum posledního autoimportu opisů'; +SK: 'Dátum posledného autoimportu opisov'; +W : 5000072) + +,(SelfIdent: plxJadroSystemoveCislo; +H : 'Systémové číslo'; +SK: 'Systémové číslo'; +W : 5000073) + +,(SelfIdent: plxJadroSysCisZkr; +H : 'Sys.č.'; +SK: 'Sys.č.'; +W : 5000074) + +,(SelfIdent: plxJadroAutor; +H : 'Autor'; +SK: 'Autor'; +W : 5000075; I:'';E:'Author';D:'Autor') + +,(SelfIdent: plxJadroDatumPorizeni; +H : 'Datum pořízení'; +SK: 'Dátum zaevidovania'; +W : 5000076; I:'';E:'Creation date';D:'') + +,(SelfIdent: plxJadroZmenil; +H : 'Změnil'; +SK: 'Zmenil'; +W : 5000077) + +,(SelfIdent: plxJadroDatumZmeny; +H : 'Datum změny'; +SK: 'Dátum zmeny'; +W : 5000078) + +,(SelfIdent: plxJadroBlokovaniEditoru; +H : 'Blokování editoru'; +SK: 'Blokovanie editoru'; +W : 5000079) + +,(SelfIdent: plxJadroNovy; +H : 'Nový...'; +SK: 'Nový...'; +W : 5000080) + +,(SelfIdent: plxJadroOprava; +H : 'Oprava...'; +SK: 'Oprava...'; +W : 5000081) + +,(SelfIdent: plxJadroZrusit; +H : 'Zrušit'; +SK: 'Zrušiť'; +W : 5000082) + +,(SelfIdent: plxJadroObnovit; +H : 'Obnovit'; +SK: 'Obnoviť'; +W : 5000083) + +,(SelfIdent: plxJadroAno; +H : 'Ano'; +SK: 'Áno'; +W : 5000084) + +,(SelfIdent: plxJadroNe; +H : 'Ne'; +SK: 'Nie'; +W : 5000085) + +,(SelfIdent: plxJadroNebylNalezenPrehled_X_Y; +H : 'Nebyl nalezen def.přehled '#1'%s'#1' (%s)!'; +SK: 'Nebol nájdený def.prehľad '#1'%s'#1' (%s)!'; +W : 5000086) + +,(SelfIdent: plxJadroNebylNalezenPrehledCislo_X; +H : 'Nebyl nalezen def.přehled číslo '#1'%s'#1'!'; +SK: 'Nebol nájdený def.prehľad číslo '#1'%s'#1'!'; +W : 5000087) + +,(SelfIdent: plxJadroDefPrehledy_a_JejichAkce; +H : 'Definované přehledy a jejich akce'; +SK: 'Definované prehľady a ich akcia'; +W : 5000088) + +,(SelfIdent: plxJadroExterniAkce; +H : 'Externí akce'; +SK: 'Externá akcia'; +W : 5000089) + +,(SelfIdent: plxJadroAkceProPrehledCislo_X; +H : 'Akce pro přehled č.%d'; +SK: 'Akcia pre prehľad č.%d'; +W : 5000090) + +,(SelfIdent: plxJadroDefinovaneVazby; +H : 'Definované vazby'; +SK: 'Definované väzby'; +W : 5000091) + +,(SelfIdent: plxJadroExterniAtributy; +H : 'Externí atributy'; +SK: 'Externé atribúty'; +W : 5000092) + +,(SelfIdent: plxJadroExterniAtribut_T_A; +H : 'Ext.atribut %s.%s'; +SK: 'Ext.atribút %s.%s'; +W : 5000093) + +,(SelfIdent: plxJadroUzivatelskeSoudecky; +H : 'Uživatelské soudečky'; +SK: 'Uživateľské súdočky'; +W : 5000094) + +,(SelfIdent: plxJadroPoradiSoudecku; +H : 'Pořadí soudečků'; +SK: 'Poradie súdočkov'; +W : 5000095) + +,(SelfIdent: plxJadroInstalace; +H : 'Instalace'; +SK: 'Inštalácia'; +W : 5000096) + +,(SelfIdent: plxJadroZakladniInformace; +H : 'Základní informace'; +SK: 'Základné informácie'; +W : 5000097) + +,(SelfIdent: plxJadroTechnickyPopis; +H : 'Technický popis'; +SK: 'Technický popis'; +W : 5000098) + +,(SelfIdent: plxJadroMinVerzeSQLServeru; +H : 'Min. verze SQL Serveru'; +SK: 'Min. verzia SQL Servera'; +W : 5000099) + +,(SelfIdent: plxJadroNeinstalovano; +H : ''; +SK: ''; +W : 5000100) + +,(SelfIdent: plxJadroInstalovanaVerze; +H : 'Instalovaná verze'; +SK: 'Inštalovaná verzia'; +W : 5000101) + +,(SelfIdent: plxJadroUmisteni; +H : 'Umístění'; +SK: 'Umiestnenie'; +W : 5000102) + +,(SelfIdent: plxJadroPrerusit; +H : 'Přerušit'; +SK: 'Prerušiť'; +W : 5000103) + +,(SelfIdent: plxJadroOpravduAkciPrerusit; +H : 'Opravdu chcete akci přerušit?'; +SK: 'Naozaj chcete akciu prerušiť?'; +W : 5000104) + +,(SelfIdent: plxJadroPluginVyzadujeMinVerziSQL_X; +H : 'Plugin vyžaduje MS SQL Server verze minimálně '#1'%s'#1'!'; +SK: 'Plugin vyžaduje MS SQL Server verzia minimálne '#1'%s'#1'!'; +W : 5000105) + +,(SelfIdent: plxJadroNavaznyCiselnikSFiltraci; +H : 'Návazný číselník s filtrací'; +SK: 'Náväzný číselník s filtráciou'; +W : 5000106) + +,(SelfIdent: plxJadroNavaznyCiselnik; +H : 'Návazný číselník'; +SK: 'Náväzný číselník'; +W : 5000107) + +,(SelfIdent: plxJadroOdesilamPostu; +H : 'Odesílám poštu'; +SK: 'Odosielam poštu'; +W : 5000108) + +,(SelfIdent: plxJadroMailNebylNalezenHeMail; +H : 'Nebyl nalezen program HeMail.EXE pro posílání pošty!'; +SK: 'Nebol nájdený program HeMail.EXE pre posielanie pošty!'; +W : 5000109) + +,(SelfIdent: plxJadroMailNepodariloSeVytvoriKonfigSoubor; +H : 'Nepodařilo se vytvořit konfigurační soubor!'; +SK: 'Nepodarilo sa vytvoriť konfiguračný súbor!'; +W : 5000110) + +,(SelfIdent: plxJadroKontrolaExternichAtributu; +H : 'Kontrola externích atributů'; +SK: 'Kontrola externých atribútov'; +W : 5000111) + +,(SelfIdent: plxJadroStredisko_X_JeZakazano; +H : 'Středisko '#1'%s'#1' je '#1'zakázáno'#1'!'; +SK: 'Stredisko '#1'%s'#1' je '#1'zakázané'#1''; +W : 5000112) + +,(SelfIdent: plxJadroRegistrovanyOtaznik; +H : 'Registrovaný?'; +SK: 'Registrovaný?'; +W : 5000113) + +,(SelfIdent: plxJadroIdentifikator; +H : 'Identifikátor'; +SK: 'Identifikátor'; +W : 5000114) + +,(SelfIdent: plxJadro_Nepouzito_; +H : ''; +SK: ''; +W : 5000115) + +,(SelfIdent: plxJadroLogo; +H : 'Logo'; +SK: 'Logo'; +W : 5000116) + +,(SelfIdent: plxJadroExterniHlasky; +H : 'Externí hlášky'; +W : 5000117) + +,(SelfIdent: plxJadroDoplneniExternichHlasek; +H : 'Doplnění externích hlášek'; +W : 5000118) + +,(SelfIdent: plxJadroAbout_IdentifikaceVyrobce; +H : 'Identifikace výrobce'; +SK: 'Identifikácia výrobca'; +W : 5000119) + +,(SelfIdent: plxJadroHistorieVerzi; +H : 'Historie verzí'; +SK: 'História verzí'; +W : 5000120) + +,(SelfIdent: plxJadroZaznamJeBlokovanNelzeSmazat; +H : 'Záznam je blokován jiným uživatelem - nelze smazat!'; +W : 5000121) + +,(SelfIdent: plxJadroDefinovanyPrehled_X_NebylNalezen; +H : 'Definovaný přehled %s nebyl nalezen!'; +W : 5000122) + +,(SelfIdent: plxJadroCislaPrehleduBylaVycerpana; +H : 'Čísla přehledů byla vyčerpána!'; +W : 5000123) + +,(SelfIdent: plxJadroPredchoziRok; +H : 'Předchozí rok'; +W : 5000124) + +,(SelfIdent: plxJadroPredchoziMesic; +H : 'Předchozí měsíc'; +W : 5000125) + +,(SelfIdent: plxJadroNasledujiciMesic; +H : 'Následující měsíc'; +W : 5000126) + +,(SelfIdent: plxJadroNasledujiciRok; +H : 'Následující rok'; +W : 5000127) + +,(SelfIdent: plxJadroZvolteDatum; +H : 'Zvolte datum'; +W : 5000128) + +,(SelfIdent: plxJadroDnes; +H : 'Dnes'; +W : 5000129) + +,(SelfIdent: plxJadroKalendar; +H : 'Kalendář'; +W : 5000130) + +,(SelfIdent: plxJadroAktualniCas; +H : 'Aktuální čas'; +W : 5000131) + +,(SelfIdent: plxJadroKalkulacka; +H : 'Kalkulačka'; +W : 5000132) + +,(SelfIdent: plxJadroKontrolaUzivatelskychFunkci; +H : 'Kontrola uživatelských funkcí'; +W : 5000133) + +,(SelfIdent: plxJadroPrevodDoUNICODE; +H : 'Převod do UNICODE'; +W : 5000134) + +,(SelfIdent: plxJadroDoplneniPrehleduProUzivAtr; +H : 'Doplnění přehledů pro uživ. atributy'; +W : 5000135) + +,(SelfIdent: plxJadroSkupinaNastrojuPrizpusobeni; +H : 'Skupina nástrojů přizpůsobení'; +W : 5000136) + +,(SelfIdent: plxJadroDoplneniSkupiny; +H : 'Doplnění skupiny'; +W : 5000137) + +,(SelfIdent: plxJadroVlastniInstalace; +H : 'Vlastní instalace'; +W : 5000138) + +,(SelfIdent: plxJadroHotovo; +H : 'hotovo'; +W : 5000139) + +,(SelfIdent: plxJadroOmezeniVDBPrebyva; +H : 'Omezení tohoto názvu v databázi přebývá'; +W : 5000140) + +,(SelfIdent: plxJadroPocitanyAtributChybi; +H : 'Počítaný atribut tohoto názvu v tabulce chybí'; +W : 5000141) + +,(SelfIdent: plxJadroAtributVTabulceChybi; +H : 'Atribut tohoto názvu v tabulce chybí'; +W : 5000142) + +,(SelfIdent: plxJadroZmenaPocitanehoAtributuSmazani; +H : 'Změna počítaného atributu %s -> %s (smazání)'; +W : 5000143) + +,(SelfIdent: plxJadroZmenaPocitanehoAtributuPridani; +H : 'Změna počítaného atributu %s -> %s (přidání)'; +W : 5000144) + +,(SelfIdent: plxJadroZmenaPocitanehoAtributuKodDB; +H : 'Změna počítaného atributu %s -> %s (kód v DB)'; +W : 5000145) + +,(SelfIdent: plxJadroAtributVTabulcePrebyva; +H : 'Atribut tohoto názvu v tabulce přebývá'; +W : 5000146) + +,(SelfIdent: plxJadroOmezeniJeVDBVypnuto; +H : 'Omezení je v databází vypnuto'; +W : 5000147) + +,(SelfIdent: plxJadroOmezeniVDBChybi; +H : 'Omezení tohoto názvu v databázi chybí'; +W : 5000148) + +,(SelfIdent: plxJadroOmezeniSeVDBZmenilo; +H : 'Omezení tohoto názvu se v databázi změnilo'; +W : 5000149) + +,(SelfIdent: plxJadroOmezeniSeVDBZmeniloKodDB; +H : 'Omezení tohoto názvu se v databázi změnilo (kód v DB)'; +W : 5000150) + +,(SelfIdent: plxJadroOmezeniJeVypnuto; +H : 'Omezení je v databází vypnuto'; +W : 5000151) + +,(SelfIdent: plxJadroUlozenkaVDBChybi; +H : 'Uložená procedura tohoto názvu v databázi chybí'; +W : 5000152) + +,(SelfIdent: plxJadroNastaveniPravKUlozence; +H : 'Nastavení práv k nové uložené proceduře'; +W : 5000153) + +,(SelfIdent: plxJadroUlozenkaSeZmenila; +H : 'Uložená procedura se změnila'; +W : 5000154) + +,(SelfIdent: plxJadroFunkceVDBChybi; +H : 'Uživatelská funkce tohoto názvu v databázi chybí'; +W : 5000155) + +,(SelfIdent: plxJadroNastaveniPravKFunkci; +H : 'Nastavení práv k nové uživatelské funkci'; +W : 5000156) + +,(SelfIdent: plxJadroFunkceSeZmenila; +H : 'Uživatelská funkce se změnila'; +W : 5000157) + +,(SelfIdent: plxJadroTriggerVDBChybi; +H : 'Trigger v databázi chybí'; +W : 5000158) + +,(SelfIdent: plxJadroTriggerVDBPrebyva; +H : 'Trigger v databázi přebývá'; +W : 5000159) + +,(SelfIdent: plxJadroTriggerJeVDBVypnut; +H : 'Trigger je v databázi vypnut'; +W : 5000160) + +,(SelfIdent: plxJadroTriggerVDBSeZmenil; +H : 'Trigger v databázi se změnil'; +W : 5000161) + +,(SelfIdent: plxJadroIndexJeVDBPrejmenovan; +H : 'Index je v databázi přejmenován'; +W : 5000162) + +,(SelfIdent: plxJadroHeslo; +H : 'Heslo'; +W : 5000163) + +,(SelfIdent: plxJadroZobrazitHeslo; +H : 'Zobrazit heslo'; +W : 5000164) + +,(SelfIdent: plxJadroAdresarProJazykovaDLL; +H : 'Adresář pro uložení jazykových DLL'; +W : 5000165) + +,(SelfIdent: plxJadroVysledek; +H : 'Výsledek'; +W : 5000166) + +,(SelfIdent: plxJadroPluginNeobsahujeZadneHlasky; +H : 'Plugin neobsahuje žádné hlášky!'; +W : 5000167) + +,(SelfIdent: plxJadroNeniZadanoHeslo; +H : 'Není zadáno heslo!'; +W : 5000168) + +,(SelfIdent: plxJadroNeniZadanAdresarProJazykovaDLL; +H : 'Není zadán adresář pro uložení jazykových DLL!'; +W : 5000169) + +,(SelfIdent: plxJadroAdresarProJazykovaDLLNeexistuje; +H : 'Adresář pro uložení jazykových DLL neexistuje!'; +W : 5000170) + +,(SelfIdent: plxJadroPodporaTicheInstalacePluginu; +H : 'Podpora tiché instalace pluginů'; +W : 5000171) + +,(SelfIdent: plxJadroNepodporaOdinstalace; +H : 'Tento plugin nepodporuje automatickou odinstalaci.'; +W : 5000172) + + +// plgTypeTxtJadro.INC +//last + +// LOCAL | USER: RK | DT: 27.11.2006 09:11:00 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 27.11.2006 09:16:24 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 03.05.2007 09:33:23 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 03.05.2007 09:40:20 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RJ | DT: 23.05.2007 12:13:33 | VER: | TXT: | PC: RJ-XP-D | FROM: L:\H\IQ10\PlugLib | TO: C:\Plugins\SEW\Bin +// LIB | USER: RJ | DT: 23.05.2007 12:14:14 | VER: 20070523 | TXT: | PC: RJ-XP-D | FROM: C:\Plugins\SEW\Bin | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 10.07.2007 08:46:24 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 10.07.2007 08:46:46 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 05.11.2007 15:57:29 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 05.11.2007 15:57:39 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.07.2008 15:12:53 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 21.07.2008 15:33:58 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 29.09.2008 10:01:23 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 29.09.2008 10:03:06 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 05.03.2009 14:00:40 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 05.03.2009 14:05:44 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 12.09.2011 16:51:54 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 13.09.2011 13:39:35 | VER: 20110913 | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 15:02:21 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 15:06:41 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 15:06:43 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 15:07:21 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 16:19:37 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 16:28:33 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 diff --git a/lib/plgTypeBrowse.INC b/lib/plgTypeBrowse.INC new file mode 100644 index 0000000..ec7f7be --- /dev/null +++ b/lib/plgTypeBrowse.INC @@ -0,0 +1,5 @@ +type + TplgBrowse = (bZadny + +//last + ); diff --git a/lib/plgTypeJadro.INC b/lib/plgTypeJadro.INC new file mode 100644 index 0000000..660b55a --- /dev/null +++ b/lib/plgTypeJadro.INC @@ -0,0 +1,1514 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +// ============================================================================ +// Tyto typy a konstanty jsou urceny pro zaklad jadra, NEMENIT, NEPRIDAVAT !!! +// ============================================================================ + +const + Cplg_PrvniUnicodeVerzeHeliosu = $010020090803; + + // jadrem podporovana minimalni verze Heliosu + Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu = $020020210905; // Helios 2.x + Cplg_Jadro_MinimalniPozadovanaVerzeHeliosu_ver3 = $030020240602; // Helios 3.x + + // verze vlastniho jadra + Cplg_VerzeJadra = $030020241014; // AJ, 23.12.2015 - Tich instalace // $020020151223; // AJ, 23.12.2015 - Podpora odinstalace + // JAS 13.2.2018 - rozsireni o moznost pouzit v tabulkach atributy typu (N)VARCHAR(MAX) a (VAR)BINARY(MAX) + // RK 18.1.2024 - podpora NVARCHAR(MAX) a VARBINARY(MAX) pro externi sloupce + + // nazev produktu (nejedna se o nazev pluginu!!) + Cplg_ProductName = 'Helios'; // Orange zruseno (je take Easy, Germany...) + + // aktualni rok + Cplg_AktualniRok = 2024; // [JAS, 04.01.2024] - posun o rok + + // aktualni nazev firmy LCS/Asseco + Cplg_NazevFirmyLCS = 'Asseco Solutions, a.s.'; + +// ============================================================================ + + Cplg_VerzePluginu_Nula_Str = '000000000000'; // 12 nul + + // hausnumera indikujici v jakem modu QueryEdit jede - musi byt Byte + Cplg_tagNovaVeta = $AA; + Cplg_tagOpravaVety = $55; + + dbo = 'dbo.'; + + Cplg_LoginName = 'SUSER_SNAME()'; + Cplg_GetDate = 'GETDATE()'; + + // systemove nazvy atributu pouzivane jadrem, NEMENIT !!! + plg_SystemoveCislo = 'ID'; + plg_Zmenil = 'Zmenil'; + plg_DatZmeny = 'DatZmeny'; + plg_BlokovaniEditoru = 'BlokovaniEditoru'; + + Cplg_ExtKomID_Zpravy = 0; + Cplg_ExtKomID_Instalace = -1; + Cplg_ExtKomID_About = -2; + Cplg_ExtKomID_TichaInstalace = -3; + Cplg_ExtKomID_Konfigurace = -4; + Cplg_ExtKomID_HlaskyNaWeb = -5; + Cplg_ExtKomID_HlaskyDoDLL = -6; + Cplg_ExtKomID_Odinstalace = -7; // AJ, 14.12.2015 - Administrtorsk podpora v HeO + Cplg_ExtKomID_EditorController = -8; + + Cplg_GUID_Instalace = '{224BFCE4-62A1-4990-B723-FCF5BD14F45D}'; + + Cplg_HlaskyBase = 5000000; // ID prvni hlasky jadra pluginu + Cplg_HlaskyPlugin = 5050000; // minimalni ID prvni hlasky vlastniho pluginu + + DisplayMaskPenize = '#,##0.00'; + DisplayMaskPenize4 = ',0.####'; + + Cplg_CDefaultFrmDefExt = 'HFMX'; // defaultni pripona pro soubor s definicemi formularu HELIOSu + Cplg_CDefaultFltDefExt = 'HFLX'; // defaultni pripona pro soubor s definicemi filtru HELIOSu + Cplg_CDefaultOpsDefExt = 'HDOX'; // defaultni pripona pro soubor s definicemi opisu HELIOSu + + // jazyky (pri pridani doplnit i cestu na DLL a instalaci jazyka do TabExtHlasky) + Cplg_jJazykNedefinovan = -1; // pouziva se pro Jazyk2 + Cplg_jCeskyASCII = 0; + Cplg_jCesky = 1; + Cplg_jSlovenctina = 4; + Cplg_jAnglictina = 6; + Cplg_jNemcina = 7; + Cplg_jChorvatstina = 8; + Cplg_jPolstina = 9; + Cplg_jRumunstina = 10; + Cplg_jSpanelstina = 11; + Cplg_jRustina = 12; + Cplg_jExtAnglictina = 1033; + Cplg_jExtNemcina = 1031; + Cplg_jExtFrancouzstina = 1036; + Cplg_jExtDanstina = 1030; + Cplg_jExtSpanelstina = 3082; + Cplg_jExtItalstina = 1040; + Cplg_jExtHolandstina = 1043; + Cplg_jExtNorstina = 2068; + Cplg_jExtPortugalstina = 2070; + Cplg_jExtFinstina = 1035; + Cplg_jExtSvedstina = 1053; + Cplg_jExtMadarstina = 1038; + Cplg_jExtPolstina = 1045; + Cplg_jExtRumunstina = 1048; + Cplg_jExtChorvatstina = 1050; + Cplg_jExtSlovenstina = 1051; + Cplg_jExtSlovinstina = 1060; + Cplg_jExtRectina = 1032; + Cplg_jExtBulharstina = 1026; + Cplg_jExtRustina = 1049; + Cplg_jExtTurectina = 1055; + Cplg_jExtEstonstina = 1061; + Cplg_jExtLotystina = 1062; + Cplg_jExtLitevstina = 1063; + Cplg_jExtJaponstina = 1041; + Cplg_jExtKorejstina = 1042; + Cplg_jExtTradicniCinstina = 1028; + Cplg_jExtZjednodusenaCinstina = 2052; + + Cplg_PoleJazyku: array[1..38] of Integer = ( + Cplg_jCeskyASCII, + Cplg_jCesky, + Cplg_jSlovenctina, + Cplg_jAnglictina, + Cplg_jNemcina, + Cplg_jChorvatstina, + Cplg_jPolstina, + Cplg_jRumunstina, + Cplg_jSpanelstina, + Cplg_jRustina, + Cplg_jExtAnglictina, + Cplg_jExtNemcina, + Cplg_jExtFrancouzstina, + Cplg_jExtDanstina, + Cplg_jExtSpanelstina, + Cplg_jExtItalstina, + Cplg_jExtHolandstina, + Cplg_jExtNorstina, + Cplg_jExtPortugalstina, + Cplg_jExtFinstina, + Cplg_jExtSvedstina, + Cplg_jExtMadarstina, + Cplg_jExtPolstina, + Cplg_jExtRumunstina, + Cplg_jExtChorvatstina, + Cplg_jExtSlovenstina, + Cplg_jExtSlovinstina, + Cplg_jExtRectina, + Cplg_jExtBulharstina, + Cplg_jExtRustina, + Cplg_jExtTurectina, + Cplg_jExtEstonstina, + Cplg_jExtLotystina, + Cplg_jExtLitevstina, + Cplg_jExtJaponstina, + Cplg_jExtKorejstina, + Cplg_jExtTradicniCinstina, + Cplg_jExtZjednodusenaCinstina); + + // legislativa + Cplg_Legislativa_Ceska = 0; + Cplg_Legislativa_Slovenska = 1; + Cplg_Legislativa_Nemecka = 2; + Cplg_Legislativa_Spanelska = 3; + Cplg_Legislativa_Polska = 4; + +// ============================================================================ + + Cplg_TagyPouzitelneOdVerzeHeliosu_2 = $020020200957; + Cplg_TagyPouzitelneOdVerzeHeliosu_3 = $030020200957; + + // tagy pro *** OpenBrowse() ************************************************ + // - je mono je pout v parametru WhereSys + // - pouit se detekuje nalezenm textu <$OB_ na zatku hodnoty parametru, + // take pozor na mezery, na zatku nesm bt, pokud chcete pout tagy! + + Cplg_OB_TagPrefix = '$OB_'; + + // pro sestaven pouijte hotov tagy ne (..._Begin a ..._End) + Cplg_OB_Tag_WhereSys = 'WhereSys'; // implicitn: '' + Cplg_OB_Tag_Parametrizovano = 'Parametrizovano'; // monost: 0 nebo 1, implicitn: 1 + Cplg_OB_Tag_Maximalizovat = 'Maximalizovat'; // monost: 0 nebo 1, implicitn: 0 + Cplg_OB_Tag_IDFiltr = 'IDFiltr'; // implicitn: 0 (bez vynucen sestavy) + Cplg_OB_Tag_FormCaption = 'FormCaption'; // implicitn: '' + Cplg_OB_Tag_VynutZapniPosun = 'VynutZapniPosun'; // monost: 0 nebo 1, implicitn: 0 + + // Parametrizovano = 0 => vypne posun po zznamech + // VynutZapniPosun = 1 => zapne posun po zznamech + + // VynutZapniPosun - funkn pouze pokud je Parametrizovano = 1 + // FormCaption - funkn pouze pokud je Parametrizovano = 0 + + Cplg_OB_WhereSys_Begin = '<' + Cplg_OB_TagPrefix + Cplg_OB_Tag_WhereSys + '>'; + Cplg_OB_WhereSys_End = ''; + + Cplg_OB_Parametrizovano_Begin = '<' + Cplg_OB_TagPrefix + Cplg_OB_Tag_Parametrizovano + '>'; + Cplg_OB_Parametrizovano_End = ''; + + Cplg_OB_Maximalizovat_Begin = '<' + Cplg_OB_TagPrefix + Cplg_OB_Tag_Maximalizovat + '>'; + Cplg_OB_Maximalizovat_End = ''; + + Cplg_OB_IDFiltr_Begin = '<' + Cplg_OB_TagPrefix + Cplg_OB_Tag_IDFiltr + '>'; + Cplg_OB_IDFiltr_End = ''; + + Cplg_OB_FormCaption_Begin = '<' + Cplg_OB_TagPrefix + Cplg_OB_Tag_FormCaption + '>'; + Cplg_OB_FormCaption_End = ''; + + Cplg_OB_VynutZapniPosun_Begin = '<' + Cplg_OB_TagPrefix + Cplg_OB_Tag_VynutZapniPosun + '>'; + Cplg_OB_VynutZapniPosun_End = ''; + + // tagy pro *** Prenos(), Prenos2() ***************************************** + // - je mono je pout v parametru WhereSys + // - pouit se detekuje nalezenm textu <$PR_ na zatku hodnoty parametru, + // take pozor na mezery, na zatku nesm bt, pokud chcete pout tagy! + + Cplg_PR_TagPrefix = '$PR_'; + + // pro sestaven pouijte hotov tagy ne (..._Begin a ..._End) + Cplg_PR_Tag_WhereSys = 'WhereSys'; // implicitn: '' + Cplg_PR_Tag_IDFiltr = 'IDFiltr'; // implicitn: 0 (bez vynucen sestavy) + Cplg_PR_Tag_MultiSelect = 'MultiSelect'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PR_Tag_NazevAkce = 'NazevAkce'; // implicitn: '' + Cplg_PR_Tag_ReadOnly = 'ReadOnly'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PR_Tag_PodleKolikaLocate = 'PodleKolikaLocate'; // implicitn: 1 + + // pouzitelne v Prenos() a Prenos2(): WhereSys, IDFiltr, NazevAkce + Cplg_PR_WhereSys_Begin = '<' + Cplg_PR_TagPrefix + Cplg_PR_Tag_WhereSys + '>'; + Cplg_PR_WhereSys_End = ''; + + Cplg_PR_IDFiltr_Begin = '<' + Cplg_PR_TagPrefix + Cplg_PR_Tag_IDFiltr + '>'; + Cplg_PR_IDFiltr_End = ''; + + Cplg_PR_NazevAkce_Begin = '<' + Cplg_PR_TagPrefix + Cplg_PR_Tag_NazevAkce + '>'; + Cplg_PR_NazevAkce_End = ''; + + // pouzitelne pouze v Prenos(): MultiSelect, ReadOnly, PodleKolikaLocate + Cplg_PR_MultiSelect_Begin = '<' + Cplg_PR_TagPrefix + Cplg_PR_Tag_MultiSelect + '>'; + Cplg_PR_MultiSelect_End = ''; + + Cplg_PR_ReadOnly_Begin = '<' + Cplg_PR_TagPrefix + Cplg_PR_Tag_ReadOnly + '>'; + Cplg_PR_ReadOnly_End = ''; + + Cplg_PR_PodleKolikaLocate_Begin = '<' + Cplg_PR_TagPrefix + Cplg_PR_Tag_PodleKolikaLocate + '>'; + Cplg_PR_PodleKolikaLocate_End = ''; + + // tagy pro *** PrintForm2(), PrintForm3() ********************************** + // - je mono je pout v parametru WhereSys + // - pouit se detekuje nalezenm textu <$PF_ na zatku hodnoty parametru, + // take pozor na mezery, na zatku nesm bt, pokud chcete pout tagy! + + Cplg_PF_TagPrefix = '$PF_'; + + // obecn pouiteln + Cplg_PF_Tag_WhereSys = 'WhereSys'; // implicitn: '' + Cplg_PF_Tag_OznacitVse = 'OznacitVse'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PF_Tag_TypTisku = 'TypTisku'; // 0 = tisk (F8), 1 = tisk jednotliv (Shift+F8) + + // ne uveden tagy se uplatn pouze v ppad, e je TiskDoSouboru = 1 + Cplg_PF_Tag_TiskDoSouboru = 'TiskDoSouboru'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PF_Tag_VariantaTisku = 'VariantaTisku'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PF_Tag_TiskDoDokumentu = 'TiskDoDokumentu'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PF_Tag_UlozitDoDB = 'UlozitDoDB'; // monost: 0 nebo 1, implicitn: 0 + Cplg_PF_Tag_DoSouboruCesta = 'DoSouboruCesta'; // mus bt vyplnno, kdy je UlozitDoDB = 0 + Cplg_PF_Tag_IDTypDoSouboru = 'IDTypDoSouboru'; // implicitn: 0 (zobraz se vbr) + Cplg_PF_Tag_NazevSouboru = 'NazevSouboru'; + Cplg_PF_Tag_VytvorAdresar = 'VytvorAdresar'; + Cplg_PF_Tag_IDDokumStrom = 'IDDokumStrom'; + + Cplg_PF_WhereSys_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_WhereSys + '>'; + Cplg_PF_WhereSys_End = ''; + + Cplg_PF_OznacitVse_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_OznacitVse + '>'; + Cplg_PF_OznacitVse_End = ''; + + Cplg_PF_TypTisku_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_TypTisku + '>'; + Cplg_PF_TypTisku_End = ''; + + Cplg_PF_TiskDoSouboru_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_TiskDoSouboru + '>'; + Cplg_PF_TiskDoSouboru_End = ''; + + Cplg_PF_VariantaTisku_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_VariantaTisku + '>'; + Cplg_PF_VariantaTisku_End = ''; + + Cplg_PF_TiskDoDokumentu_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_TiskDoDokumentu + '>'; + Cplg_PF_TiskDoDokumentu_End = ''; + + Cplg_PF_UlozitDoDB_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_UlozitDoDB + '>'; + Cplg_PF_UlozitDoDB_End = ''; + + Cplg_PF_DoSouboruCesta_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_DoSouboruCesta + '>'; + Cplg_PF_DoSouboruCesta_End = ''; + + Cplg_PF_IDTypDoSouboru_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_IDTypDoSouboru + '>'; + Cplg_PF_IDTypDoSouboru_End = ''; + + Cplg_PF_NazevSouboru_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_NazevSouboru + '>'; + Cplg_PF_NazevSouboru_End = ''; + + Cplg_PF_VytvorAdresar_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_VytvorAdresar + '>'; + Cplg_PF_VytvorAdresar_End = ''; + + Cplg_PF_IDDokumStrom_Begin = '<' + Cplg_PF_TagPrefix + Cplg_PF_Tag_IDDokumStrom + '>'; + Cplg_PF_IDDokumStrom_End = ''; + + // tagy pro *** Error() ***************************************************** + // - je mono je pout v parametru Msg + // - pouit se detekuje nalezenm textu <$ER_ na zatku hodnoty parametru, + // take pozor na mezery, na zatku nesm bt, pokud chcete pout tagy! + + Cplg_ER_TagPrefix = '$ER_'; + + // pro sestaven pouijte hotov tagy ne (..._Begin a ..._End) + Cplg_ER_Tag_Chyba = 'Chyba'; + Cplg_ER_Tag_Detail = 'Detail'; + + // okno chyby s detailem se zobraz pouze v ppad, e jsou vyplnny + // jak Chyba, tak i Detail + + Cplg_ER_Chyba_Begin = '<' + Cplg_ER_TagPrefix + Cplg_ER_Tag_Chyba + '>'; + Cplg_ER_Chyba_End = ''; + + Cplg_ER_Detail_Begin = '<' + Cplg_ER_TagPrefix + Cplg_ER_Tag_Detail + '>'; + Cplg_ER_Detail_End = ''; + +// ============================================================================ + + // minimalni a maximalni datum + Cplg_MinDate = '''19000101 00:00:00.000'''; + CPlg_MaxDate = '''99991231 23:59:59.000'''; + + // maximalni cas v Delphi + Cplg_MaxTime = 0.999999537; + + // maximalni cas na SQL Serveru + Cplg_SQLMaxTimeStr = '23:59:59.997'; + + // pouze aktualni datum bez casu + Cplg_OnlyDate = 'CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,GETDATE())))'; + + //[JAS 13.2.2018] - rozsireni o (N)VARCHAR(MAX) + // definice delky pro "MAX" varianty atributu (N)VARCHAR atd. + Cplg_DelkaNVarcharMax = -1; + Cplg_DelkaVarBinaryMax = Cplg_DelkaNVarcharMax; //je to stejne, ale pro jistotu rozdeleno na dve konstanty, aby to v DTckach nematlo nepritele + + // konstanty - verze MS SQL Serveru - IHelios.SQLVersion (kopie z sqProc) + Cplg_SQLVersion_7_0 = $07000000; // 7.0 [bez rozlien buildu] + Cplg_SQLVersion_7_0_Gold = $0700026F; // 7.0.623 = cista instalace MSSQL 7.0 / MSDE 1.0 Bez SP1 + Cplg_SQLVersion_7_0_SP1 = $070002BB; // 7.0.699 = SP1 + Cplg_SQLVersion_7_0_SP2 = $0700034A; // 7.0.842 = SP2 + Cplg_SQLVersion_7_0_SP3 = $070003C1; // 7.0.961 = SP3 + Cplg_SQLVersion_7_0_SP4 = $07000427; // 7.0.1063 = SP4 + + Cplg_SQLVersion_2000 = $07320000; // 7.5 / 2000 [bez rozlien buildu] + Cplg_SQLVersion_2000_SP1 = $08000180; // 8.0.384 = SP1 + Cplg_SQLVersion_2000_SP2 = $08000216; // 8.0.534 = SP2 + Cplg_SQLVersion_2000_SP3 = $080002F8; // 8.0.760 = SP3 + Cplg_SQLVersion_2000_SP4 = $080007F7; // 8.0.2039 = SP4 + + Cplg_SQLVersion_2005 = $09000000; // 2005 [bez rozlien buildu] + Cplg_SQLVersion_2005_Gold = $09000577; // 9.0.1399 = cista instalace MSSQL 2005 bez Service Packu + Cplg_SQLVersion_2005_SP1 = $090007FF; // 9.0.2047 = SP1 + Cplg_SQLVersion_2005_SP2 = $09000BE2; // 9.0.3042 = SP2 + Cplg_SQLVersion_2005_SP3 = $09000FC3; // 9.0.4035 = SP3 + Cplg_SQLVersion_2005_SP4 = $09001388; // 9.0.5000 = SP4 + + Cplg_SQLVersion_2008 = $0A000000; // 2008 [bez rozlien buildu] + Cplg_SQLVersion_2008_Gold = $0A000640; // 10.0.1600 = ist instalace MSSQL 2008 bez Service Packu + Cplg_SQLVersion_2008_SP1 = $0A0009E3; // 10.0.2531 = SP1 + Cplg_SQLVersion_2008_SP2 = $0A000FA0; // 10.0.4000 = SP2 + Cplg_SQLVersion_2008_SP3 = $0A00157C; // 10.0.5500 = SP3 + Cplg_SQLVersion_2008_SP4 = $0A001770; // 10.0.6000 = SP4 + + Cplg_SQLVersion_2008R2 = $0A320000; // 2008 R2 [bez rozlien buildu] + Cplg_SQLVersion_2008R2_Gold = $0A320640; // 10.50.1600 = ist instalace MSSQL 2008 R2 bez Service Packu + Cplg_SQLVersion_2008R2_SP1 = $0A3209C4; // 10.50.2500 = SP1 + Cplg_SQLVersion_2008R2_SP2 = $0A320FA0; // 10.50.4000 = SP2 + Cplg_SQLVersion_2008R2_SP3 = $0A321770; // 10.50.6000 = SP3 + + Cplg_SQLVersion_2012 = $0B000000; // 2012 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] + Cplg_SQLVersion_2012_Gold = $0B000834; // 11.0.2100 = ist instalace MSSQL 2012 bez Service Packu + Cplg_SQLVersion_2012_SP1 = $0B000BB8; // 11.0.3000 = SP1 + Cplg_SQLVersion_2012_SP2 = $0B0013C2; // 11.0.5058 = SP2 + Cplg_SQLVersion_2012_SP3 = $0B001784; // 11.0.6020 = SP3 + Cplg_SQLVersion_2012_SP4 = $0B001B59; // 11.0.7001 = SP4 + + Cplg_SQLVersion_2014 = $0C000000; // 2014 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] + Cplg_SQLVersion_2014_Gold = $0C0007D0; // 12.0.2000 = ist instalace MSSQL 2014 bez Service Packu + Cplg_SQLVersion_2014_SP1 = $0C001004; // 12.0.4100 = SP1 + Cplg_SQLVersion_2014_SP2 = $0C001388; // 12.0.5000 = SP2 + Cplg_SQLVersion_2014_SP3 = $0C001788; // 12.0.6024 = SP3 + + Cplg_SQLVersion_2016 = $0D000000; // 2016 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] + Cplg_SQLVersion_2016_Gold = $0D000641; // 13.0.1601 = ist instalace MSSQL 2016 bez Service Packu + Cplg_SQLVersion_2016_SP1 = $0D000FA1; // 13.0.4001 = SP1 + Cplg_SQLVersion_2016_SP2 = $0D0013A2; // 13.0.5026 = SP2 + Cplg_SQLVersion_2016_SP3 = $0D00189C; // 13.0.6300 = SP3 - 9/15/2021 (https://www.microsoft.com/en-us/download/details.aspx?id=103440) + + Cplg_SQLVersion_2017 = $0E000000; // 2017 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] + Cplg_SQLVersion_2017_Gold = $0E0003E8; // 14.0.1000 = ist instalace MSSQL 2017 bez Service Packu + Cplg_SQLVersion_2017_CU08 = $0E000BD5; // 14.0.3029 = CU08 - opravuje vnou chybu vyhodnocovn CASE + Cplg_SQLVersion_2017_CU12 = $0E000BE5; // 14.0.3045 = CU12 - nmi doporuovan pro opravu chyby CASE + Cplg_SQLVersion_2017_CU13 = $0E000BE8; // 14.0.3048 = CU13 - 19.12.2018 + Cplg_SQLVersion_2017_CU28 = $0E000D66; // 14.0.3430 = CU28 - 1/13/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=56128) + Cplg_SQLVersion_2017_CU30 = $0E000D7B; // 14.0.3451 = CU30 - 7/13/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=56128) + Cplg_SQLVersion_2017_CU31 = $0E000D80; // 14.0.3456 = CU31 - 9/20/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=56128) + + Cplg_SQLVersion_2019 = $0F000000; // 2019 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] // 15.0.0.0 + Cplg_SQLVersion_2019_CU02 = $0F000FAD; // 15.0.4013 = CU02 - opravuje inlining SQL funkci + Cplg_SQLVersion_2019_CU03 = $0F000FB7; // 15.0.4023 = CU03 - opravuje SQL Agenta + Cplg_SQLVersion_2019_CU14 = $0F00105C; // 15.0.4188 = CU14 + Cplg_SQLVersion_2019_CU15 = $0F001066; // 15.0.4198 = CU15 - 1/27/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU16 = $0F00107F; // 15.0.4223 = CU16 - 4/18/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU17 = $0F001099; // 15.0.4249 = CU17 - 8/11/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU18 = $0F0010A5; // 15.0.4261 = CU18 - 9/28/2022 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU19 = $0F0010CA; // 15.0.4298 = CU19 - 2/16/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU20 = $0F0010D8; // 15.0.4312 = CU20 - 4/13/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU21 = $0F0010DC; // 15.0.4316 = CU21 - 6/15/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU22 = $0F0010E2; // 15.0.4322 = CU22 - 8/15/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU23 = $0F0010EF; // 15.0.4335 = CU23 - 10/12/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + Cplg_SQLVersion_2019_CU24 = $0F0010F9; // 15.0.4345 = CU24 - 12/14/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=100809) + + Cplg_SQLVersion_2022 = $10000000; // 2022 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] // 16.0.0.0 + Cplg_SQLVersion_2022_RTM = $100003E8; // 16.0.1000 = ist instalace MSSQL 2022 bez CU (16.11.2022) + Cplg_SQLVersion_2022_CU01 = $10000FA3; // 16.0.4003 = CU01 - 2/16/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU02 = $10000FAF; // 16.0.4015 = CU02 - 3/15/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU03 = $10000FB9; // 16.0.4025 = CU03 - 4/13/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU04 = $10000FC3; // 16.0.4035 = CU04 - 5/11/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU05 = $10000FCD; // 16.0.4045 = CU05 - 6/15/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU06 = $10000FD7; // 16.0.4055 = CU06 - 7/13/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU07 = $10000FE1; // 16.0.4065 = CU07 - 8/10/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU08 = $10000FEB; // 16.0.4075 = CU08 - 9/14/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU09 = $10000FF5; // 16.0.4085 = CU09 - 10/12/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU10 = $10000FFF; // 16.0.4095 = CU10 - 11/16/2023 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + Cplg_SQLVersion_2022_CU11 = $10001009; // 16.0.4105 = CU11 - 01/11/2024 (https://www.microsoft.com/en-us/download/details.aspx?id=105013) + + // HEIQ000020037331 - JAD - SQL2022 RC0 + Cplg_SQLVersion_XXXX = $11000000; // >2022 [bez rozlien buildu; jen pro operace >, <, nikdy ne =] // 17.0.0.0 + +// ============================================================================ + + Cplg_Prefix_SN_Helios = 'HEIQ'; // Helios Orange + Cplg_Prefix_SN_CLAW = 'CLAW'; // Kobler sm + Cplg_Prefix_SN_CLAH = 'CLAH'; // Hospodsk komora + + Cplg_Prefix_SN_HEED = 'HEED'; // Helios Easy Demo (Trial) + Cplg_Prefix_SN_HEEF = 'HEEF'; // Helios Easy Full + + Cplg_Prefix_SN_ASDT = 'ASDT'; // Helios Germany Demo (Trial) + Cplg_Prefix_SN_ASDE = 'ASDE'; // Helios Germany Full + + Cplg_Prefix_SN_HeliosEasy = Cplg_Prefix_SN_HEED + ',' + Cplg_Prefix_SN_HEEF; + Cplg_Prefix_SN_Germany = Cplg_Prefix_SN_ASDT + ',' + Cplg_Prefix_SN_ASDE; + + Cplg_SerNum_PrefixLen = 4; // HEIQ, CLAW, CLAH, HEED, HEEF + Cplg_SerNum_VerzeLen = 4; // xxyy + Cplg_SerNum_OddelLen = 1; // - + Cplg_SerNum_PoradiLen = 5; // 99999 + + Cplg_SerNum_CelkemLen = Cplg_SerNum_PrefixLen + + Cplg_SerNum_VerzeLen + + Cplg_SerNum_OddelLen + + Cplg_SerNum_PoradiLen; + +// ============================================================================ + + // definovane prehledy a vazby (kopie z Heliosu) + Cplg_ObecnePohledy_BID_Base = 100000; // kopie z ddBrowse + +// [RK 27.07.2009] zruseno, pouzijte PluginKonfig.PluginPrefixTabulek +// Cplg_Tabulka_Prefix = 'Tab'; // prefix pro tabulky + + Cplg_View_Prefix = 'hvw_'; // kopie z ddTypeZbytek.inc + Cplg_View_PrefixLen = 4; // delka 'hvw_' + Cplg_View_NazevSys_Len = 36; // kopie z ddTypeZbytek.inc + Cplg_View_NazevVer_Len = 50; // kopie z dtObecnyPrehled (TabObecnyPrehled_Nazev_Delka) + + Cplg_DefVazba_Prefix = 'Vudv'; // kopie z ddTypeZbytek.inc + Cplg_DefVazba_JmenoSys_Len = 30; // kopie z dtObecnaVazba + Cplg_DefVazba_NazevSys_XX_Len = 30; // kopie z dtObecnaVazba + Cplg_DefVazba_Nazev_XX_Len = 100; // kopie z dtObecnaVazba + + Cplg_DefVazba_SpecifHT = ''; // specifikator pro hlavni tabulku v definici vazby + + Cplg_Soudek_Len = 40; // kopie z dtSoudky + Cplg_Atribut_JmenoSys_Len = 127; // puvodne bylo 30 + Cplg_SkupinaExt_Len = 30; // kopie z ddUta + + Cplg_Soudek_Prefix = '_HeIQ_S_'; // prefix pro definici odkazu na interni soudecky + + Cplg_Soudek_Ucetnictvi = Cplg_Soudek_Prefix + '1'; + Cplg_Soudek_FinancniAnalyza = Cplg_Soudek_Prefix + '30'; + Cplg_Soudek_Leasing = Cplg_Soudek_Prefix + '32'; + Cplg_Soudek_PenezniToky = Cplg_Soudek_Prefix + '29'; + Cplg_Soudek_Pokladna = Cplg_Soudek_Prefix + '2'; + Cplg_Soudek_PokladniProdej = Cplg_Soudek_Prefix + '18'; + Cplg_Soudek_ObehZbozi = Cplg_Soudek_Prefix + '3'; + Cplg_Soudek_DodatecneSN = Cplg_Soudek_Prefix + '27'; + Cplg_Soudek_Fakturace = Cplg_Soudek_Prefix + '4'; + Cplg_Soudek_Mzdy = Cplg_Soudek_Prefix + '5'; + Cplg_Soudek_MzdySK = Cplg_Soudek_Prefix + '15'; + Cplg_Soudek_Banka = Cplg_Soudek_Prefix + '6'; + Cplg_Soudek_Majetek = Cplg_Soudek_Prefix + '7'; + Cplg_Soudek_Posta = Cplg_Soudek_Prefix + '11'; + Cplg_Soudek_CelniPripady = Cplg_Soudek_Prefix + '12'; + Cplg_Soudek_ClaStarePostupy = Cplg_Soudek_Prefix + '34'; + Cplg_Soudek_Intrastat = Cplg_Soudek_Prefix + '19'; + Cplg_Soudek_PripravaVyroby = Cplg_Soudek_Prefix + '8'; + Cplg_Soudek_RizeniVyroby = Cplg_Soudek_Prefix + '9'; + Cplg_Soudek_Kontrakty = Cplg_Soudek_Prefix + '25'; + Cplg_Soudek_Doprava = Cplg_Soudek_Prefix + '10'; + Cplg_Soudek_PrepravniSluzby = Cplg_Soudek_Prefix + '13'; + Cplg_Soudek_KnihaJizd = Cplg_Soudek_Prefix + '21'; + Cplg_Soudek_ICStandardy = Cplg_Soudek_Prefix + '17'; + Cplg_Soudek_SkladZvirat = Cplg_Soudek_Prefix + '20'; + Cplg_Soudek_Kalkulace = Cplg_Soudek_Prefix + '24'; + Cplg_Soudek_Projekty = Cplg_Soudek_Prefix + '23'; +//Cplg_Soudek_ObchodniPripady = Cplg_Soudek_Prefix + '31'; + Cplg_Soudek_CRM = Cplg_Soudek_Prefix + '14'; + Cplg_Soudek_Servis = Cplg_Soudek_Prefix + '26'; + Cplg_Soudek_Workflow = Cplg_Soudek_Prefix + '28'; + Cplg_Soudek_HeliosIntelligence = Cplg_Soudek_Prefix + '251'; + Cplg_Soudek_NastrojePrizpusobeni = Cplg_Soudek_Prefix + '252'; + Cplg_Soudek_Ciselnik = Cplg_Soudek_Prefix + '253'; + Cplg_Soudek_PomCiselnik = Cplg_Soudek_Prefix + '254'; + +// ============================================================================ + +type + TplgMnozinaLegislativa = set of Byte; + TplgTxt = plxNic..plx_MAX; + + TplgHlaska = packed record + SelfIdent : TplgTxt; // pro self-check + H : String; // hlka LESKY + SK: String; // hlka SLOVENSKY (jazykove DLL ma ale prednost!) + W : LongWord; // jednoznacne id, ktere se nikdy nesmi zmenit + GUID: String; // jednoznacne GUID pro zapis do tabulky TabExtHlasky + I : String; // info pro prekladatele - vidi v editoru hlasek + E : String; // anglicky preklad - pokud vim predem, prekladatel nemusi prekladat + D : String; // nemecky preklad - pokud vim predem, prekladatel nemusi prekladat + end; + +// ============================================================================ + +type + TplgTypAtributu = { SQL-92 Delphi Size Range Precision } + (taBlbe, { ----------------------------------------------------------------- } + taInt, { INT Integer 4 -2147483648 .. 1 } + { +2147483647 } + taIdentity, { INT IDENTITY(1,1) -"- } + taInt64, { BIGINT Int64 8 -2^63..2^63-1 1 } + taIdentity64, { BIGINT IDENTITY(1,1) -"- } + taSmallInt, { SMALLINT SmallInt 2 -32768..32767 1 } + taByte, { TINYINT Byte 1 0..255 1 } + taBoolean, { BIT Boolean 1 False..True - } + + taVarChar, { VARCHAR(n) AnsiString n - - } + taChar, { CHAR(n) AnsiString n - - } + taText, { TEXT(n) AnsiString n -} + + taNVarChar, { NVARCHAR(n) String n - - } + taNChar, { NCHAR(n) String n - - } + taNText, { NTEXT(n) String n - } + + taBinary, { BINARY(n)array of Bytes n - - } + taVarBinary, { VARBINARY(n)array of Bytes n - - } + taImage, { IMAGE TBlobField - 0..2,147,483,647 B } + + taDateTime, { DATETIME TDateTime 8 1.1.1753..31.12.9999 } + + //PFA - taTime je pouze pro Eurest!! Nepouzivat jinde, pripadne na vlastni nebezpeci + taTime, { TIME TTime n 00:00:00.0000000..23:59:59.9999999 } + + taNumeric_4_2, { NUMERIC(4,2) } + taNumeric_5_2, { NUMERIC(5,2) } + taNumeric_7_2, { NUMERIC(7,2) } + taNumeric_9_2, { NUMERIC(9,2) } + taNumeric_15_0,{ NUMERIC(15,0) } + taNumeric_19_2,{ NUMERIC(19,2) } + taNumeric_19_6,{ NUMERIC(19,6) } + taNumeric_20_6,{ NUMERIC(20,6) } + taNumeric_28_0,{ NUMERIC(28,0) } + + taFloat { FLOAT } + + // misto taGUID je treba pouzit taBinary s delkou 16 !!! + //taGUID { UNIQUEIDENTIFIER } + ); + + TplgSkupinaAtributu = + (skpZadna, skpCelaCisla, skpDesetinnaCisla, skpRetezce, skpDatumy, skpBinarni); + + TplgPodtypAtributu = + (ptaZadny, + ptaIdentity // property IDENTITY - pro typy [TINY|SMALL]INT | NUMERIC(1..28,0) + ); + + TplgDefTypu = packed record + SelfIdent : TplgTypAtributu; // pro self-check pri startu + T : String; // zakl. typ (INT/CHAR/VARCHAR/NUMERIC...) + X : TplgPodtypAtributu; // podtyp (pro [TINY|SMALL]INT - IDENTITY) + P : Byte; // precision (presnost pro NUMERIC/seed pro IDENTITY) + S : Byte; // scale (poc. des. mist pro NUMERIC/increment pro IDENTITY) + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + +const + Cplg_PodtypStr : array[TplgPodtypAtributu] of String = ('', 'IDENTITY'); + + // konverze na SQL typ + Cplg_GTypy : array[TplgTypAtributu] of TplgDefTypu = + ((SelfIdent: taBlbe; T: ''), + (SelfIdent: taInt; T: 'INT'), + (SelfIdent: taIdentity; T: 'INT'; X:ptaIdentity), + (SelfIdent: taInt64; T: 'BIGINT'), + (SelfIdent: taIdentity64; T: 'BIGINT'; X:ptaIdentity), + (SelfIdent: taSmallInt; T: 'SMALLINT'), + (SelfIdent: taByte; T: 'TINYINT'), + (SelfIdent: taBoolean; T: 'BIT'), + (SelfIdent: taVarChar; T: 'VARCHAR'), + (SelfIdent: taChar; T: 'CHAR'), + (SelfIdent: taText; T: 'TEXT'), + (SelfIdent: taNVarChar; T: 'NVARCHAR'), + (SelfIdent: taNChar; T: 'NCHAR'), + (SelfIdent: taNText; T: 'NTEXT'), + (SelfIdent: taBinary; T: 'BINARY'), + (SelfIdent: taVarBinary; T: 'VARBINARY'), + (SelfIdent: taImage; T: 'IMAGE'), + (SelfIdent: taDateTime; T: 'DATETIME'), + (SelfIdent: taTime; T: 'TIME'), + (SelfIdent: taNumeric_4_2; T: 'NUMERIC'; P: 4; S:2), + (SelfIdent: taNumeric_5_2; T: 'NUMERIC'; P: 5; S:2), + (SelfIdent: taNumeric_7_2; T: 'NUMERIC'; P: 7; S:2), + (SelfIdent: taNumeric_9_2; T: 'NUMERIC'; P: 9; S:2), + (SelfIdent: taNumeric_15_0; T: 'NUMERIC'; P:15; S:0), + (SelfIdent: taNumeric_19_2; T: 'NUMERIC'; P:19; S:2), + (SelfIdent: taNumeric_19_6; T: 'NUMERIC'; P:19; S:6), + (SelfIdent: taNumeric_20_6; T: 'NUMERIC'; P:20; S:6), + (SelfIdent: taNumeric_28_0; T: 'NUMERIC'; P:28; S:0), + (SelfIdent: taFloat; T: 'FLOAT') + + // misto taGUID je treba pouzit BINARY(16) !!! + // (SelfIdent: taGUID; T: 'UNIQUEIDENTIFIER') + ); + +const + Cplg_SkupinaAtributuSDelkou = + [taVarChar, taChar, taNVarChar, taNChar, taBinary, taVarBinary, taTime]; + + Cplg_SkupinaAtributuNumeric = + [taNumeric_4_2, taNumeric_5_2, taNumeric_7_2, taNumeric_9_2, + taNumeric_15_0, taNumeric_19_2, taNumeric_19_6, taNumeric_20_6, + taNumeric_28_0]; + + // typy povolene pro externi atributy + Cplg_SkupinaExternichAtributu = + [taInt, taSmallInt, taBoolean, taVarChar, taText, + taNVarChar, taNText, taVarBinary, + taDateTime, taNumeric_19_6, taFloat]; + + Cplg_SkupinaRetezceANSI = [taVarchar, taChar, taText]; + Cplg_SkupinaRetezceUnicode = [taNVarchar, taNChar, taNText]; + + Cplg_MnozinaIdentity = [taIdentity, taIdentity64]; + + Cplg_MaxPovolenaDelkaAtributuSDelkou = 255; + +// ============================================================================ + +type + // --- ZMENOVE SKRIPTY ------------------------------------------------------ + + PplgZmenovySkript = ^TplgZmenovySkript; + TplgZmenovySkript = packed record + PlatiOd : Int64; // verze z plgVerze.INC, od ktere update plati + // POZOR - MUSI BYT UNIKATNI !!! + Skript : String; // SQL skript delajici zmeny - melo by v nem byt + // co nejvice testu na existenci tabulek, atributu + // a jejich typu - viz SQL metadata function : + // COLUMNPROPERTY, OBJECT_ID apod. - blize viz plgZmeny + end; + + // --- ULOZENE PROCEDURY ---------------------------------------------------- + + PplgUlozenaProcedura = ^TplgUlozenaProcedura; + TplgUlozenaProcedura = packed record + // nejprve se testuje prefix licence, nasleduje legislativa aktualni databaze, + // pak teprve se bere do jake databaze se bude procedura generovat + PrefixLicence: string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + Databaze : String; // DB pro instalaci procedury, prazdne = aktualni DB + Text : String; // definice ulozene procedury vcetne CREATE + // Ulozenka musi byt zadana tak, aby CREATE PROC bylo na jednom radku + // napr. 'CREATE PROCEDURE dbo.ep_XXXX_YYYY'#13+ + // - XXXX je prefix dany pluginem (napr. sys nazev pluginu), pokud je pouzit + // - yyyy je pak vlastni nazev ulozenky + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + + // --- UZIVATELSKE FUNKCE --------------------------------------------------- + + PplgUzivatelskaFunkce = ^TplgUzivatelskaFunkce; + TplgUzivatelskaFunkce = packed record + // nejprve se testuje prefix licence, nasleduje legislativa aktualni databaze, + // pak teprve se bere do jake databaze se bude funkce generovat + PrefixLicence: string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + Databaze : String; // DB pro instalaci funkce, prazdne = aktualni DB + Text : String; // definice uzivatelske funkce vcetne CREATE + // Funkce musi byt zadana tak, aby CREATE FUNCTION bylo na jednom radku + // napr. 'CREATE FUNCTION dbo.ef_XXXX_YYYY'#13+ + // - XXXX je prefix dany pluginem (napr. sys nazev pluginu), pokud je pouzit + // - yyyy je pak vlastni nazev funkce + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + +// ============================================================================ + +type + TplgNULL = (nNic, nNOTNULL, nNULL); + TplgBool = (vDefault, vFalse, vTrue); + TplgPK_UQ = (puNic, puPrimaryKey, puUnique); + TplgConstraint = (coChyba, coPrimaryKey, coUnique, coCheck, coForeignKey, + coDefault, coIndex, coIndexClustered{$IFDEF PFA_PlgIndex}, coIndexUnique{$ENDIF PFA_PlgIndex}); + + +const + Cplg_ConstraintOddelovac = '__'; + + Cplg_PrefixyConstraints : array[TplgConstraint] of String = + ('!chyba!', 'PK', 'UQ', 'CK', 'FK', 'DF', 'IX', 'IC'{$IFDEF PFA_PlgIndex}, 'IU'{$ENDIF PFA_PlgIndex}); + + Cplg_NULLorNOTNULL : array[TplgNULL] of String = + ('!chyba!', 'NOT NULL', 'NULL'); + +type + // --- ATRIBUTY ------------------------------------------------------------- + + // preddefinovane atributy - definice viz plgUta + TplgUzivatelskyTypAtributu = + (plg_utaZadny + ,plg_utaSystemoveCislo + ,plg_utaSystemoveCislo64 + ,plg_utaAutor + ,plg_utaDatPorizeni + ,plg_utaZmenil + ,plg_utaDatZmeny + ,plg_utaBlokovaniEditoru + ,plg_utaGUID + ,plg_utaSazbaDPH + ,plg_utaCena + ,plg_utaMena + ,plg_utaTextChyby + ,plg_utaImpSoubor + ,plg_utaSkupZbo + ,plg_utaRegCis + + {$I lib\plgTypeUTA.inc} + ); + + // definice atributu + PplgAtributTabulky = ^TplgAtributTabulky; + TplgAtributTabulky = packed record + JmenoSys : String; // nazev atributu v DB + JmenoVerejne : String; // verejny nazev atributu + JmenoVerejneTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + JmenoVerejneZkr : String; // zkraceny verejny nazev atributu + JmenoVerejneZkrTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + Typ : TplgTypAtributu; // typ atributu (taInt, taVarchar apod.) + UTyp : TplgUzivatelskyTypAtributu; // moznost pouziti preddefinovanych atributu (jakysi template) + Delka : SmallInt; // pro [N][VAR]CHAR(n) a BINARY(n); hodnota Cplg_DelkaNVarcharMax (-1) znamena [N]VARCHAR(MAX) + Pocitany : String; // definice atributu v pripade, ze je pocitany - napr. 'Mnozstvi*Cena' + NULL : TplgNull; // je atribut nullable? implicitne je nNotNull + PK_UQ : TplgPK_UQ; // PRIMARY KEY / UNIQUE, default nic + ForeignKey : String; // specifikace ciziho klice - napr. 'TabDokladyZbozi(ID)' + ServerDEFAULT : String; // defaultni hodnota - napr. '0', '''''' (prazdny retezec) + CHECK : String; // omezujici podminka - napr. 'IN(0,1,3)' + Vyzadovany : TplgBool; // atribut je vzdy pritomen v SELECTU prehledu (nemusi byt ale videt) + Verejny : TplgBool; // pokud vTrue, tak bude atribut pristupny v F4 - Nastav + Konverze : String; // pr.: 'NULL=nevim'#13'0=Ne'#13'1=Ano' + KonverzeTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + SirkaSloupce : Byte; // sirka sloupce pro browse (ve znacich) + MaskaDisplay : String; // maska pro zobrazeni atributu - napr. DisplayMaskPenize + Sumovat : Boolean; // v pripade ciselnych atributu se zobrazi sumace pri zagrupovani prehledu + SkupinaNastav : String; // skupina pro Nastav + SkupinaNastavTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + // oproti Heliosu je to zde navic + Hint : String; // tento text se zobrazi u editacniho pole v editoru pri najeti mysi + HintTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + DalsiVlastnosti : set of (dvAbstraktni, // dvAbstraktni = neni v DB, ale pouze v definici view + dvObrazek, // jestli je v typu taImage ulozen obrazek + dvProcPruh, // jestli bude hodnota atributu v gridu vyjadrena procentnim pruhem + dvBarva, // jestli bude hodnota atributu v gridu zobrazena jako barva + dvStav // jestli bude hodnota atributu v gridu zobrazena jako stavov sloupec + ); + + HeliosAttr : String; // - lze zadat atribut tabulky Heliosu (Tabulka.Atribut) + // - neni pak treba vyplnovat JmenoVerejne, JmenoVerejneZkr, + // Konverze, MaskaDisplay ani SirkaSloupce + // pri zobrazeni prehledu si to Helios nastavi sam + // - nejlepsi pouzit v souvislosti s abstraktnim atributem + // nebo abstraktni tabulkou + // - prevzeti hodnot z Heliosu funguje v prehledu i v DB editoru v pluginu + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + + TplgUzivatelskeAtributyDef = packed record + SelfIdent: TplgUzivatelskyTypAtributu; // pro self-check pri startu + A: TplgAtributTabulky; + end; + + // --- CONSTRAINTS ---------------------------------------------------------- + + PplgConstraintTabulky = ^TplgConstraintTabulky; + TplgConstraintTabulky = packed record + JmenoSys : String; // u PRIMARY KEY a UNIQUE nesmi byt uveden - vygeneruje se + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + + Typ : TplgConstraint; + + // PRO: coPrimaryKey, coUnique, coIndex, coIndexClustered, coIndexUnique + Atributy : string; { oddelene carkou } + + // PRO: coDefault, coCheck + Vyraz : string; { omezeni typu DEFAULT se pise primo k atributu, sem NE !!! } + + // PRO: coForeignKey + VlastniAtributy : string; { 'ID, Nazev' } + CiziTabulka : string; { TabBlaBla } + CiziAtributy : string; { 'Cislo, Jmeno' } + + //PRO: coIndex, coIndexUnique + Included : string; { seznam atributu v indexu, ktere ale netvori klic } + + //PRO: coIndex, coIndexUnique + Where : String; { podminka, novinka od SQL2008 - pozor zapis musi byt ve tvaru, jak to ma ulozene SQL } + + + end; + + // --- TABULKY -------------------------------------------------------------- + + PplgTabulkaDef = ^TplgTabulkaDef; + TplgTabulkaDef = packed record + SelfIdent : TplgTabulka; // pro self-check pri startu + + JmenoSys : String; // systemove jmeno tabulky v databazi + Jmeno : String; // verejne jmeno tabulky (muze byt totozne s nazvem prehledu, pokud je v prehledu jako nazev '*') + JmenoTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + // nejprve se testuje legislativa aktualni databaze, pak teprve se bere + // do jake databaze se bude procedura generovat + PrefixLicence : string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + Databaze : String; // DB pro instalaci tabulky, prazdne = aktualni DB + + // moznost prevzeti casti definice z jine tabulky + // - probiha pouze kopie TplgAtributTabulky + // - zadne jine nastaveni TplgTabulkaDef se nekopiruje + Predek : TplgTabulka; // predek, od nehoz tato tabulka dedi strukturu + VyjmuteAttrPredka : String; // seznam atributu predka, ktere nemaji byt v nove tabulce (polozky oddeleny #13) + + // atributy tabulky + PocetAtributu : Integer; + Atributy : PplgAtributTabulky; + + // integritni omezeni + PocetConstraints : Integer; + Constraints : PplgConstraintTabulky; + + // specialni vlastnosti tabulky + DalsiVlastnosti : set of ( + plg_dvtBezID, // tabulka nema ID (skip kontroly), pouzivat velmi opatrne !!! + plg_dvtAbstraktni, // tabulka neexistuje fyzicky v DB, pouze template pro definici atributu view + plg_dvtNeprevadetNaUnicode, // tabulka nebude obsazena v automatickem prevodu na UNICODE + plg_dvtKopirovatOmezeni, // maji se atributy z Predka kopirovat s Check, ForeignKey, PK_UQ ? + plg_dvtBlokovaniJenOprava // BlokovaniEditoru se nahazuje pouze pri editaci, ne pri nove vete + ); + + // seznam atributu oddeleny carkou - hlavne pro pripad [plg_dvtBezID] + // kdyz je prazdne, bere se automaticky ID + PrimarniKlic : String; + + // skript, ktery se spousti pred smazanim zaznamu (vse v transakci) + // v ramci skriptu existuje promenna @ID = ID zaznamu + TriggerBeforeDelete : String; + + // skript pro pripadne predvyplneni tabulky po jejim vzniku (po CREATE TABLE) + AfterCreateTable : String; + + // definice triggeru (vcetne CREATE TRIGGER ht_XXXXX ON TabXXXX FOR ...) + DefiniceTriggeru : String; + + // !!! NEVYPLNOVAT !!! pouze interni pouziti !!! + _BylInitConstraints : Boolean; + + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + + // --- SOUDKY --------------------------------------------------------------- + TplgSoudekDef = packed record + SelfIdent : TplgSoudek; // pro self-check pri startu a navaznost na prehledy + Jmeno : String; + end; + + // --- PREHLEDY ------------------------------------------------------------- + + // tyto tridy jsou pouze pomocne kvuli deklaraci !!! + TplgAkcePrehleduBaseClass = class of TplgAkcePrehleduBase; + TplgAkcePrehleduBase = class + end; + + // ========================================================================== + // Prefix Povinne Mozne + // ========================================================================== + // 'hvw_' JmenoView HlavniTabulka + // DefiniceView DMAkceClass + // SELECT EditorClass + // GUID_ActionNew + // GUID_ActionEdit + // GUID_ActionDelete + // ========================================================================== + + TplgVychoziNastaveniBrowse = packed record + SelfIdent : TplgBrowse; // pro self-check pri startu + + // nazev pro uzivatele (pokud je '*', tak se vezme z hlavni tabulky) + Jmeno : String; + JmenoTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + // zakladni tabulka nad kterou je postaven browse (nad tou bezi editor) + // jako abstraktni lze pouzit pro definici nazvu, masek apod. atributu + HlavniTabulka : TplgTabulka; + + // systemovy nazev view, musi zacinat 'hvw_' + JmenoView : String; + + // SELECT definujici vlastni view napr. 'SELECT*FROM TabXXX' + // pokud ma tabulka BlokovaniEditoru, pak aby slo pouzit odblokovani, je treba + // napsat skript takto: 'SELECT*FROM TabXXX', jinak server ohlasi chybu + DefiniceView : String; + + // unikatni GUID definovaneho prehledu, slouzi pro registrace Helios Easy +// GUID : string; + + // rika, ze NECHCI dane view vytvorit v DB; implicitne se v DB vytvareji + // mozno pouzit pro prehled nad docasnou tabulkou + Neni_v_DB : Boolean; + + // tabulka pro atributy typu TEXT + BlobTableName : String; + + // seznam atributu bez tabulky oddeleny #13 + SELECT : String; + + // seznam atributu bez tabulky oddeleny #13 + // muze byt pridano ASC ci DESC, implicitni je ASC + ORDERBY : String; + + // - zakladni funcionalita browsu + // - tda typu TplgAkcePrehledu, dedeno z plgAkce + DMAkceClass : TplgAkcePrehleduBaseClass; + + // - editan obrazovka + // - tda typu TfrmPlgEditor, dedeno z plgEdit + EditorClass : TFormClass; + + // umisteni prehledu do soudecku (soudecky se definuji v plgSoudky) + Soudek : TplgSoudek; + Predek : TplgBrowse; + + // pro jakou legislativu se bude prehled vytvaret + // pokud je omezeno, musi byt v souladu s tabulkou - pokud tabulka pro danou + // legislativu neni vytvarena, nevytvari se ani prehled !! + PrefixLicence : string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + + // Pomocnicek Heliosik pro definovany prehled + Pomocnicek : String; + PomocnicekTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + // definice atributu pro systemovou filtaci + // je mozno vyplnit ruzne kombinace, ale do kazdeho "slotu" lze zadat pouze jeden atribut + AttrFor_sqlSklad : String; + AttrFor_sqlSbornik : String; + AttrFor_sqlPokladna : String; + AttrFor_sqlIDObdobi : String; + AttrFor_sqlIDMzdObd : String; + AttrFor_sqlKategorieKJ : String; + AttrFor_sqlRadaUctenek : String; + + // unikatni GUID pro preddefinovane akce, pokud nejsou uvedeny akce neni povolena + GUID_ActionNew : String; + GUID_ActionEdit : String; + GUID_ActionDelete : String; + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + + // --- EXTERNI AKCE --------------------------------------------------------- + + PplgExtAkceDef = ^TplgExtAkceDef; + TplgExtAkceDef = packed record + BrowseID : Integer; // musi byt mezi 1..100000 + // BID prehledu z Heliosu (lze zobrazit pomoci AltB) + + // - zakladni funcionalita pro standardni prehled Heliosu + // - tda typu TplgAkcePrehledu, dedeno z plgAkce + DMAkceClass : TplgAkcePrehleduBaseClass; + + // - editan obrazovka + // - tda typu TfrmPlgEditor, dedeno z plgEdit + EditorClass : TFormClass; + + // unikatni GUID pro preddefinovane akce, pokud nejsou uvedeny akce neni povolena + GUID_ActionNew : String; + GUID_ActionEdit : String; + + // pro jakou legislativu se bude vytvaret + PrefixLicence: string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + end; + + // --- EDITOR CONTROLLER ---------------------------------------------------- + + // tyto tridy jsou pouze pomocne kvuli deklaraci !!! + TplgEditorControllerBaseClass = class of TplgEditorControllerBase; + TplgEditorControllerBase = class(TInterfacedObject) + end; + + TplgEditorControllerDef = packed record + FormIdent: string; // klic pro ulozeni informaci o editoru do DB (velikost okna, uzivatelsky editor...) + ControllerClass: TplgEditorControllerBaseClass; + end; + + // --- VZTAHY --------------------------------------------------------------- + + TplgTypVztahu = (tvZadny, { <- zadny (pouziva se k indikaci chyby) } + tv11, { <- vztah 1:1 (nebo 0:1) } + tv1N { <- vztah 1:N (nebo 0:N) } + ); + // tvZadny = protitabulka nebude vidt v Nastav ani v tisku + // tv11 = protitabulka bude vidt v tisku a v Nastav na zlokch 1 - Zobrazen, 2 - Tdn i 3 - Podmnky + // - pouv napr. pro poloky + // tv1N = protitabulka bude vidt v tisku a v Nastav pouze na zloce 3 - Podmnky + // - pouv napr. pro hlaviku + + PplgVztahDef = ^TplgVztahDef; + TplgVztahDef = packed record + GUIDVazby : String; + + // pro jakou legislativu se bude vytvaret + PrefixLicence: string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + + TabLStr : String; // sys. nazev tabulky + NazevLP : String; // verejny nazev protitabulky pro Nastav + NazevLPTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + NazevLPSys : String; // sys. nzev protitabulky (tiskovho zdroje) v nvrhi tiskovch formul + TypLP : TplgTypVztahu; + + TabPStr : String; // sys. nazev tabulky + NazevPL : String; // verejny nazev protitabulky pro Nastav + NazevPLTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + NazevPLSys : String; // sys. nzev protitabulky (tiskovho zdroje) v nvrhi tiskovch formul + TypPL : TplgTypVztahu; + + // NazevLPSys a NazevPLSys - systemovy nazev vazby pro tisk + // - nazvy, ktere by mely mit vypovidaci hodnotu (neprekladaji se) + // - pouzivaji se ke generovani nazvu pipeliny pro tisk formularu + // - jsou ulozeny ve formularich, proto je jiz nelze zmenit !!! + // - MUSI BYT vyplneny + + // Atributy v podmnce zadvejte v pln notaci: Tabulka.Atribut + // Vyhodnocen podmnky je senzitivn na velikost psmen! + // V ppad vazby pes vce tabulek pouijte EXISTS(). + // V ppad vazby shodnch tabulek mus bt jedna z tabulek + // nahrazena specifiktorem , aby se odliily strany vazby. + Join : String; + end; + + // --- EXTERNI ATRIBUTY ----------------------------------------------------- + + TplgTypExtAtr = + (eaChyba, eaUserDef, eaNormal, eaMemo, eaComboBox, eaBrowse, eaDateTime, + eaTime, eaFile, eaDirectory, eaCalcEdit); + // eaUserDef = uzivatelsky definovany atribut, ostatni jsou externi + // eaNormal = normalni editor + // eaMemo = editacni pole Memo + // eaComboBox = editacni pole ComboBox + // eaBrowse = editacni pole pro prenos z jineho prehledu + // eaDateTime = editacni pole pro datum i cas (pouze pro Typ = taDateTime) + // eaTime = editacni pole pro cas (pouze pro Typ = taDateTime) + // eaFile = editacni pole pro nazev souboru + // eaDirectory = editacni pole pro adresar + // eaCalcEdit = editacni pole CalcEdit (pole s kalkulackou) + + PplgExterniAtribut = ^TplgExterniAtribut; + TplgExterniAtribut = packed record + // jmeno tabulky v Heliosu, tabulka musi mit ID !!! + JmenoTabulky : String; + + // systemovy nazev atributu v DB, musi zacinat jednim podtrzitkem + JmenoSys : String; + + // unikatni GUID externiho atributu, slouzi pro registrace Helios Easy +// GUID : string; + + // verejny nazev atributu + JmenoVerejne : String; + JmenoVerejneTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + JmenoVerejneZkr : String; + JmenoVerejneZkrTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + // typ atributu v DB + // plati pouze omezeny okruh typu - viz Cplg_SkupinaExternichAtributu + Typ : TplgTypAtributu; + Delka : Integer; // pro [VAR]CHAR(n) + Verejny : Boolean; // viditelnost atributu v Nastav a editoru externich informaci + Editovatelny : TplgBool; // nezadano, coz je vDefault = podle Verejny + SirkaSloupce : Byte; // sirka sloupce pro browse (ve znacich) + MaskaDisplay : String; // maska pro zobrazeni atributu - napr. DisplayMaskPenize + Sumovat : Boolean; // v pripade ciselnych atributu se zobrazi sumace pri zagrupovani prehledu + ProcentniPruh : Boolean; // bude hodnota atributu v gridu vyjadrena procentnim pruhem? + Barva : Boolean; // bude hodnota atributu v gridu zobrazena barvou? + Obrazek : Boolean; // je VARBINARY(MAX) obrazek? + Tisknout : Boolean; // muze se atribut tisknout - bude videt v tiskove pipeline? + StavAtr : Boolean; // Stav + Kopirovat : Boolean; // muze se atribut kopirovat + HromadneZmenyAtr : Boolean; // je mozno atribut hromadne menit + + Konverze : String; + KonverzeTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + JeKonverzeSQLSkript: Boolean; + + Poznamka : String; // poznamka (technicky popis) + PoznamkaTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + Bublina : String; // bublinova napoveda + BublinaTxt : TplgTxt; // ident retezce pro jazykove mutace (pokud vyplnen, ma prednost) + + // typ externiho atributu (uzivatelsky / externi) + TypExtAtr : TplgTypExtAtr; + + // eaBrowse => >0 = systmov slo penosovho pehledu v editoru + // ostatni => nebere se v uvahu + ExtEd_BrowseID : Integer; // BID pro prehledy Heliosu + ExtEd_BrowseDPSN : string; // systemovy nazev definovaneho prehledu + + // eaUserDef => definice atributu (SELECT ... ) + // eaComboBox => skript pro naplneni ComboBoxu + // eaBrowse => "Tabulka.Atribut", kter se m penet - parametr funkce Prenos() + // ostatni => nebere se v uvahu + ExtEd_Atr : String; + + // eaComboBox => nastavi pouze pro vyber (csDropDownList) + // eaBrowse => pole lze zadat pouze prenosem z jineho prehledu + // ostatni => nebere se v uvahu + ExtEd_PrimaEditace : Boolean; // mohu pmo editovat ? + + // eaBrowse => podminka pro prenosovy prehled + // ostatni => nebere se v uvahu + ExtEd_Podminka : String; // podminka pro prenos + + // eaUserDef => nebere se v uvahu (je platne pouze pro editor externich atributu) + ExtEd_Zalozka : String; // nazev zalozky pro editor + ExtEd_ZalozkaTxt : TplgTxt; + ExtEd_Poradi : Integer; // poradi na zalozce (>0) + + // automaticka vazba na atribut + GenerujVazbu: Boolean; + VazbaTypMoje: TplgTypVztahu; // 1:N, 1:1, (neni) + VazbaNazevMoje: string; + VazbaNazevMojeSys: string; + VazbaTypCizi: TplgTypVztahu; // 1:1 nebo (neni) + VazbaNazevCizi: string; + VazbaNazevCiziSys: string; + + // pro jakou legislativu se bude vytvaret + PrefixLicence: string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + + // --- EXTERNI TRIGGERY ----------------------------------------------------- + + PplgExterniTrigger = ^TplgExterniTrigger; + TplgExterniTrigger = packed record + // systemove jmeno standardni tabulky Heliosu + JmenoTabulky : String; + + // pro jakou legislativu se bude vytvaret + PrefixLicence: string; // prazdne = bez ohledu na licenci + Legislativa : TplgMnozinaLegislativa; // prazdne = bez ohledu na legislativu + + // skript pro vytvoreni externiho triggeru, jmeno trigeru musi byt et_ + // skript musi zacinat: CREATE TRIGGER et_ ON FOR + TriggerSkript : String; + + {$IFDEF SPopisem} + Popis : String; // popis pro generovani dokumentace + {$ENDIF} + end; + +{ ########################################################################### } + +// LOCAL | USER: RK | DT: 15.08.2005 14:40:35 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 15.08.2005 14:41:54 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 15.08.2005 14:54:37 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 15.08.2005 14:57:32 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 15.08.2005 16:25:50 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 15.08.2005 16:26:00 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 16.08.2005 09:33:01 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 16.08.2005 09:42:41 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 30.09.2005 15:44:18 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 30.09.2005 15:45:55 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 17.10.2005 10:37:09 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 17.10.2005 10:37:38 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 17.10.2005 14:06:43 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 17.10.2005 14:06:45 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 09.11.2005 13:58:19 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 09.11.2005 13:59:02 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 09.11.2005 14:30:40 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 09.11.2005 14:48:25 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 09.11.2005 14:48:28 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 09.11.2005 14:48:50 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 09.12.2005 13:16:42 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 09.12.2005 13:32:44 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 16.01.2006 12:07:00 | VER: | TXT: | PC: RK-2K | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 16.01.2006 12:16:38 | VER: 20060116 | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 14.02.2006 14:17:52 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: RK | DT: 14.02.2006 14:20:23 | VER: 20060214 | TXT: | PC: RK-2K | FROM: D:\!\IQ1\Eurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 15.02.2006 15:03:31 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 15.02.2006 15:05:40 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 17.02.2006 09:19:30 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 17.02.2006 09:51:13 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 17.02.2006 09:55:04 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 17.02.2006 09:55:41 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.03.2006 10:00:01 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 21.03.2006 10:02:59 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.03.2006 10:21:51 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 21.03.2006 10:22:19 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.03.2006 10:22:38 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 21.03.2006 10:22:41 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.03.2006 15:55:44 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginProFitnessZS +// LIB | USER: RK | DT: 21.03.2006 16:09:13 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginProFitnessZS | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 23.03.2006 14:51:13 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginProFitnessZS +// LIB | USER: RK | DT: 23.03.2006 14:52:48 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginProFitnessZS | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 10.04.2006 15:08:16 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginProFitnessZS +// LIB | USER: RK | DT: 10.04.2006 15:08:31 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginProFitnessZS | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 02.05.2006 12:30:25 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 02.05.2006 12:30:30 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 12.05.2006 14:58:53 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIBodyKarty +// LIB | USER: RK | DT: 12.05.2006 14:59:17 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIBodyKarty | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 15.05.2006 10:13:10 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIBalickyAkce +// LIB | USER: RK | DT: 15.05.2006 10:13:15 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIBalickyAkce | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 30.05.2006 09:08:01 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 30.05.2006 09:14:52 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 31.05.2006 12:29:05 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 31.05.2006 12:29:13 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 06.06.2006 16:52:16 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIBalickyAkce +// LIB | USER: RK | DT: 06.06.2006 16:52:53 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIBalickyAkce | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 07.06.2006 11:04:14 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 07.06.2006 11:07:07 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 12.06.2006 12:57:59 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIBodyKarty +// LIB | USER: RK | DT: 12.06.2006 12:58:09 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIBodyKarty | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 12.06.2006 16:01:52 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIBodyKarty +// LIB | USER: RK | DT: 12.06.2006 16:02:19 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIBodyKarty | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 22.06.2006 10:14:20 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiskalEasyPos +// LIB | USER: RK | DT: 22.06.2006 10:16:20 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiskalEasyPos | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 29.06.2006 10:19:38 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiskalEasyPos +// LIB | USER: RK | DT: 29.06.2006 10:25:59 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiskalEasyPos | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 29.06.2006 10:48:31 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiskalEasyPos +// LIB | USER: RK | DT: 29.06.2006 10:48:41 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiskalEasyPos | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 30.06.2006 10:35:53 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 30.06.2006 10:36:32 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 10.07.2006 09:24:24 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 10.07.2006 10:02:56 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2006 09:26:01 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 18.07.2006 10:07:29 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2006 10:08:08 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 18.07.2006 10:08:20 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2006 10:21:35 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 18.07.2006 10:21:43 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2006 13:27:23 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginProFitnessZS +// LIB | USER: RK | DT: 18.07.2006 13:59:07 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginProFitnessZS | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2006 13:59:07 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginProFitnessZS +// LIB | USER: RK | DT: 18.07.2006 15:05:46 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginProFitnessZS | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.07.2006 14:09:37 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 21.07.2006 14:32:43 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.07.2006 14:43:45 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 21.07.2006 14:43:53 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.07.2006 15:59:51 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 24.07.2006 09:34:38 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 24.07.2006 10:16:40 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiskalEasyPos +// LIB | USER: RK | DT: 24.07.2006 10:16:45 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiskalEasyPos | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 25.07.2006 16:03:03 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 25.07.2006 16:03:07 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 27.07.2006 15:58:22 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginProFitnessZS +// LIB | USER: RK | DT: 27.07.2006 15:58:57 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginProFitnessZS | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 02.08.2006 12:10:05 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 02.08.2006 12:10:24 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 09.08.2006 10:35:22 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 09.08.2006 10:42:27 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 09.08.2006 11:10:57 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 09.08.2006 11:11:58 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 04.09.2006 14:36:18 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 11.09.2006 08:59:45 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 15.09.2006 12:38:52 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 15.09.2006 12:38:58 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 26.09.2006 09:22:50 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiro +// LIB | USER: RK | DT: 26.09.2006 09:24:29 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiro | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 26.09.2006 09:55:38 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiro +// LIB | USER: RK | DT: 26.09.2006 10:13:17 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiro | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 26.09.2006 11:02:15 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiro +// LIB | USER: RK | DT: 26.09.2006 11:03:08 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiro | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 26.09.2006 16:15:56 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiro +// LIB | USER: RK | DT: 26.09.2006 16:16:03 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiro | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 03.10.2006 10:45:16 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 03.10.2006 10:45:25 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 01.11.2006 10:25:06 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 01.11.2006 10:27:45 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 01.11.2006 10:33:46 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 01.11.2006 10:34:05 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 02.11.2006 16:11:24 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiro +// LIB | USER: RK | DT: 02.11.2006 16:11:40 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiro | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 02.11.2006 16:13:07 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFiro +// LIB | USER: RK | DT: 02.11.2006 16:13:17 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFiro | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 27.11.2006 08:53:05 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 27.11.2006 08:53:14 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: rj | DT: 04.12.2006 12:21:05 | VER: | TXT: | PC: RJ-XP-D | FROM: L:\H\IQ10\PlugLib | TO: C:\Plugins\SEW\Bin +// LIB | USER: rj | DT: 04.12.2006 12:25:20 | VER: ?? LB ?? | TXT: | PC: RJ-XP-D | FROM: C:\Plugins\SEW\Bin | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 08.12.2006 13:04:47 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 08.12.2006 13:23:18 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 04.01.2007 11:10:55 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 04.01.2007 11:11:03 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 17.01.2007 09:21:43 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 17.01.2007 09:21:50 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 05.04.2007 14:43:54 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 05.04.2007 14:45:27 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 06.04.2007 12:06:43 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 06.04.2007 12:07:39 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 03.05.2007 09:32:24 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 03.05.2007 09:38:35 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 16.05.2007 14:17:19 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 16.05.2007 14:17:27 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 01.08.2007 09:40:33 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 01.08.2007 10:26:05 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 01.08.2007 10:26:07 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 01.08.2007 10:26:19 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 12.09.2007 12:30:19 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 08.10.2007 09:59:47 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.11.2007 12:19:50 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 21.11.2007 12:46:40 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 20.03.2008 15:06:20 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFilmoteka +// LIB | USER: RK | DT: 20.03.2008 16:14:02 | VER: 20080319 | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFilmoteka | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 20.03.2008 18:29:09 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFilmoteka +// LIB | USER: RK | DT: 20.03.2008 18:29:37 | VER: 20080319 | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFilmoteka | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 10.04.2008 10:08:51 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFilmoteka +// LIB | USER: RK | DT: 10.04.2008 10:13:29 | VER: 20080410 | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFilmoteka | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 28.05.2008 09:16:05 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFilmoteka +// LIB | USER: RK | DT: 28.05.2008 10:16:28 | VER: 20080528 | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFilmoteka | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 28.05.2008 13:50:06 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginFilmoteka +// LIB | USER: RK | DT: 28.05.2008 13:54:50 | VER: 20080528 | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginFilmoteka | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2008 10:01:01 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 18.07.2008 10:02:43 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2008 10:11:26 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 18.07.2008 12:55:06 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 18.07.2008 13:15:01 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 18.07.2008 14:49:22 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 29.09.2008 10:06:33 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 29.09.2008 13:48:58 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 29.09.2008 15:01:30 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 29.09.2008 15:19:11 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 30.09.2008 09:10:19 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 30.09.2008 10:07:45 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 30.09.2008 10:38:16 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 30.09.2008 11:31:11 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 30.09.2008 12:11:54 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 30.09.2008 12:24:42 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 20.10.2008 10:27:34 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 20.10.2008 12:26:32 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 15.12.2008 12:56:32 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 15.12.2008 14:32:56 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 15.12.2008 14:35:50 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 15.12.2008 14:46:42 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 07.01.2009 09:55:10 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\HELIOS +// LIB | USER: RK | DT: 07.01.2009 09:55:25 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 02.03.2009 12:34:20 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 02.03.2009 13:33:46 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 02.03.2009 14:59:34 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 02.03.2009 15:00:40 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 03.03.2009 15:27:54 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 03.03.2009 15:45:49 | VER: ?? LB ?? | TXT: ticha instalace | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 13.03.2009 15:33:11 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginyBanka\PluginBanka0300 +// LIB | USER: RK | DT: 13.03.2009 15:33:29 | VER: 20090310 | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginyBanka\PluginBanka0300 | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 08.04.2009 12:54:38 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginyBanka\PluginBanka0300 +// LIB | USER: RK | DT: 08.04.2009 12:56:00 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginyBanka\PluginBanka0300 | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 21.04.2009 12:52:38 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\P\PluginyBanka\PluginBanka0300 +// LIB | USER: RK | DT: 21.04.2009 13:01:14 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\P\PluginyBanka\PluginBanka0300 | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 21.04.2009 13:33:23 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 21.04.2009 13:47:58 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 21.04.2009 13:48:01 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 21.04.2009 13:48:10 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 11.05.2009 10:31:05 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 11.05.2009 10:31:11 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 20.05.2009 13:12:32 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 20.05.2009 14:34:09 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 17.06.2009 09:11:42 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\P\PluginyBanka\PluginBanka0300 +// LIB | USER: RK | DT: 17.06.2009 09:15:27 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\P\PluginyBanka\PluginBanka0300 | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 17.06.2009 09:17:40 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\P\PluginyBanka\PluginBanka0300 +// LIB | USER: RK | DT: 17.06.2009 09:21:35 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\P\PluginyBanka\PluginBanka0300 | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 22.06.2009 14:24:18 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 22.06.2009 14:31:54 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 20.07.2009 10:23:47 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 20.07.2009 10:25:39 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 20.07.2009 10:33:46 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 20.07.2009 10:34:50 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 21.07.2009 12:11:44 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 21.07.2009 13:41:16 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 23.07.2009 09:52:31 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginLCSEIUctenek +// LIB | USER: RK | DT: 23.07.2009 09:53:53 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 27.07.2009 12:17:56 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginLCSEIUctenek +// LIB | USER: RK | DT: 27.07.2009 12:34:50 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 29.07.2009 14:07:16 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 29.07.2009 14:50:29 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 24.09.2009 10:18:37 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 24.09.2009 10:25:06 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 22.12.2009 12:13:31 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 04.01.2010 13:49:57 | VER: 20100104 | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 15.01.2010 08:52:15 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 15.01.2010 14:07:55 | VER: 20100115 | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 28.01.2010 13:09:41 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 28.01.2010 13:09:54 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 11.03.2010 12:27:37 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 11.03.2010 12:29:33 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 01.04.2010 09:31:04 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 01.04.2010 09:37:13 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 01.04.2010 09:46:42 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 01.04.2010 09:47:36 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 01.04.2010 14:05:19 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 01.04.2010 14:50:03 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 15.04.2010 10:22:11 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 15.04.2010 10:22:24 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 21.04.2010 11:50:48 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 21.04.2010 12:48:35 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 28.04.2010 09:33:17 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 28.04.2010 10:00:02 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 29.04.2010 12:45:41 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: RK | DT: 29.04.2010 12:46:28 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 14.05.2010 20:36:26 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 14.05.2010 20:43:47 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 26.05.2010 15:22:43 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 26.05.2010 15:27:00 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 16.06.2010 12:04:29 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: RK | DT: 16.06.2010 12:05:54 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 01.10.2010 08:24:18 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: RK | DT: 01.10.2010 08:24:48 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 05.01.2011 08:38:41 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: RK | DT: 05.01.2011 08:38:52 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 28.02.2011 11:45:38 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: RK | DT: 28.02.2011 11:46:11 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 12.04.2011 13:09:05 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 12.04.2011 13:37:40 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 12.04.2011 13:38:05 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 12.04.2011 13:38:18 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 17.06.2011 15:18:19 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: roman.krupicka | DT: 17.06.2011 15:18:45 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 25.07.2011 10:13:40 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: roman.krupicka | DT: 25.07.2011 10:15:15 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 15.08.2011 18:55:41 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 15.08.2011 19:23:14 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 18.08.2011 16:18:40 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 18.08.2011 16:18:53 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 12.09.2011 15:41:03 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 13.09.2011 13:39:17 | VER: 20110913 | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 14.09.2011 21:04:48 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 14.09.2011 22:30:46 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 15:00:47 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 15:22:24 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 15:47:02 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 15:49:06 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 15:54:27 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 16:01:32 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 13.10.2011 20:19:31 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: roman.krupicka | DT: 13.10.2011 20:20:00 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: jaroslav.pfauser | DT: 04.01.2012 16:15:45 | VER: | TXT: zmena aktualniho roku | PC: PFAUSERJA-PC | FROM: L:\H\IQ10\PlugLib2 | TO: C:\Helios\Heo +// LIB | USER: jaroslav.pfauser | DT: 04.01.2012 16:16:12 | VER: ?? LB ?? | TXT: | PC: PFAUSERJA-PC | FROM: C:\Helios\Heo | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 25.01.2012 08:23:36 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 25.01.2012 08:24:20 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 31.01.2012 15:44:19 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 31.01.2012 15:46:10 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 03.08.2012 10:14:57 | VER: | TXT: | PC: KRUPICKARO-PC2 | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\HELIOS +// LIB | USER: roman.krupicka | DT: 03.08.2012 10:15:41 | VER: ?? LB ?? | TXT: Cplg_SQLVersion_2008R2_SP2 | PC: KRUPICKARO-PC2 | FROM: D:\!\IQ2\HELIOS | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 05.09.2012 13:09:58 | VER: | TXT: | PC: KRUPICKARO-PC2 | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 05.09.2012 13:10:54 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC2 | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 06.12.2012 12:34:52 | VER: | TXT: | PC: KRUPICKARO-PC2 | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 06.12.2012 12:35:01 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC2 | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: jaroslav.pfauser | DT: 02.01.2013 12:43:30 | VER: | TXT: | PC: PFAUSERJA-PC | FROM: L:\H\IQ10\PlugLib2 | TO: C:\HeO\dpr_pfa +// LIB | USER: jaroslav.pfauser | DT: 02.01.2013 12:43:56 | VER: ?? LB ?? | TXT: Cplg_AktualniRok = 2013 | PC: PFAUSERJA-PC | FROM: C:\HeO\dpr_pfa | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 04.04.2013 14:32:32 | VER: | TXT: | PC: KRUPICKARO-PC3 | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 04.04.2013 14:33:23 | VER: ?? LB ?? | TXT: SQL2012 SP1 | PC: KRUPICKARO-PC3 | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.04.2013 09:57:16 | VER: | TXT: | PC: KRUPICKARO-PC3 | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample diff --git a/lib/plgTypeSoudky.inc b/lib/plgTypeSoudky.inc new file mode 100644 index 0000000..d21e96a --- /dev/null +++ b/lib/plgTypeSoudky.inc @@ -0,0 +1,5 @@ +type + TplgSoudek = (sdNeniVidet // neni videt ve stromecku (default) + +//last + ); diff --git a/lib/plgTypeTabulka.inc b/lib/plgTypeTabulka.inc new file mode 100644 index 0000000..1c859da --- /dev/null +++ b/lib/plgTypeTabulka.inc @@ -0,0 +1,7 @@ +// === TABULKY ================================================================ + +type + TplgTabulka = (tZadna + ); + +//last <- to je kvuli rychlejsimu hledani diff --git a/lib/plgTypeTxtEx.inc b/lib/plgTypeTxtEx.inc new file mode 100644 index 0000000..d581e37 --- /dev/null +++ b/lib/plgTypeTxtEx.inc @@ -0,0 +1,15 @@ +// === HLASKY OSTATNI ========================================================= +const +// priklad: +// plxMojeHlaska1=plx_MAX_Jadro+1; <--- POZOR musi byt plx_MAX_Jadro !! +// plxMojeHlaska2=plxMojeHlaska1+1; +// plx_MAX = plxMojeHlaska2; <--- plx_MAX se rovna posledni hlasce, ale bez +1 !! + + + plx_MAX = plx_MAX_Jadro; + +//last <- to je kvuli rychlejsimu hledani + + + + diff --git a/lib/plgTypeTxtJadro.INC b/lib/plgTypeTxtJadro.INC new file mode 100644 index 0000000..2007d69 --- /dev/null +++ b/lib/plgTypeTxtJadro.INC @@ -0,0 +1,192 @@ +// === HLASKY JADRA =========================================================== +const +plxNic=0; +plxOK=plxNic+1; +plxStorno=plxOK+1; +plxJadroUlozitZmeny=plxStorno+1; +plxJadroPrazdnaNeboChybneZadanaPolozka=plxJadroUlozitZmeny+1; +plxJadroOprPrejSmazAkt=plxJadroPrazdnaNeboChybneZadanaPolozka+1; +plxJadroOprPrejSmazVse=plxJadroOprPrejSmazAkt+1; +plxJadroNeni=plxJadroOprPrejSmazVse+1; +plxJadroPluginVyzadujeMinVerziX=plxJadroNeni+1; +plxJadroAkceNemuzeBytSpustena=plxJadroPluginVyzadujeMinVerziX+1; +plxJadroMenuEditace=plxJadroAkceNemuzeBytSpustena+1; +plxJadroAkceNovy=plxJadroMenuEditace+1; +plxJadroAkceOprava=plxJadroAkceNovy+1; +plxJadroAkceZrusit=plxJadroAkceOprava+1; +plxJadroPouzeKeCteni=plxJadroAkceZrusit+1; +plxJadroZavrit=plxJadroPouzeKeCteni+1; +plxJadroIndexSeZmenil=plxJadroZavrit+1; +plxJadroIndexV_DB_Chybi=plxJadroIndexSeZmenil+1; +plxJadroKontrolaPluginuX=plxJadroIndexV_DB_Chybi+1; +plxJadroSpustit=plxJadroKontrolaPluginuX+1; +plxJadroZmenoveSkripty=plxJadroSpustit+1; +plxJadroKontrolaTabulek=plxJadroZmenoveSkripty+1; +plxJadroKontrolaJednotlivychAtributu=plxJadroKontrolaTabulek+1; +plxJadroKontrolaUnikatnichKlicu=plxJadroKontrolaJednotlivychAtributu+1; +plxJadroKontrolaIntegritnichOmezeni=plxJadroKontrolaUnikatnichKlicu+1; +plxJadroKontrolaCizichKlicu=plxJadroKontrolaIntegritnichOmezeni+1; +plxJadroKontrolaUlozenychProcedur=plxJadroKontrolaCizichKlicu+1; +plxJadroKontrolaTriggeru=plxJadroKontrolaUlozenychProcedur+1; +plxJadroKontrolaIndexu=plxJadroKontrolaTriggeru+1; +plxJadroKontrolaPrehledu_a_Akci=plxJadroKontrolaIndexu+1; +plxJadroImportFormularuFilruOpisu=plxJadroKontrolaPrehledu_a_Akci+1; +plxJadroZmenovySkriptJizBylProveden=plxJadroImportFormularuFilruOpisu+1; +plxJadroUpdateZVerze_X_NaVerzi_Y=plxJadroZmenovySkriptJizBylProveden+1; +plxJadroZmenovychSkriptuX=plxJadroUpdateZVerze_X_NaVerzi_Y+1; +plxJadroInstalaceHotovo=plxJadroZmenovychSkriptuX+1; +plxJadro_X_BudeNyniUkoncen=plxJadroInstalaceHotovo+1; +plxJadroBylaDetekovanaZmenaStruktury=plxJadro_X_BudeNyniUkoncen+1; +plxJadroUvedeneTabulkyChybi=plxJadroBylaDetekovanaZmenaStruktury+1; +plxJadroVytvoreniZakladnichPrehledu=plxJadroUvedeneTabulkyChybi+1; +plxJadroZmenaStrukturyDB=plxJadroVytvoreniZakladnichPrehledu+1; +plxJadroOpravduSiPrejeteUvedeneZmeny=plxJadroZmenaStrukturyDB+1; +plxJadroPredZmenamiDoporucujemeZalohuDB=plxJadroOpravduSiPrejeteUvedeneZmeny+1; +plxJadroTlacitkoZalohovani=plxJadroPredZmenamiDoporucujemeZalohuDB+1; +plxJadroProvest=plxJadroTlacitkoZalohovani+1; +plxJadroAkceUkazSQLSkript=plxJadroProvest+1; +plxJadroDefinovaneFormulare=plxJadroAkceUkazSQLSkript+1; +plxJadroDefinovaneFiltry=plxJadroDefinovaneFormulare+1; +plxJadroDefinovaneOpisy=plxJadroDefinovaneFiltry+1; +plxJadroAutoImportInfo=plxJadroDefinovaneOpisy+1; +plxJadroAbout_OPluginu=plxJadroAutoImportInfo+1; +plxJadroKopirovat=plxJadroAbout_OPluginu+1; +plxJadroAbout_Nazev=plxJadroKopirovat+1; +plxJadroAbout_Hodnota=plxJadroAbout_Nazev+1; +plxJadroVerze=plxJadroAbout_Hodnota+1; +plxJadroAbout_Vyrobce=plxJadroVerze+1; +plxJadroAbout_MinVerze_X=plxJadroAbout_Vyrobce+1; +plxJadroAbout_JADRO=plxJadroAbout_MinVerze_X+1; +plxJadroVerze_V_DB=plxJadroAbout_JADRO+1; +plxJadroVerzePluginu=plxJadroVerze_V_DB+1; +plxJadroVerzePluginuJeNizsiNezVDB=plxJadroVerzePluginu+1; +plxJadroNeznamaAkce=plxJadroVerzePluginuJeNizsiNezVDB+1; +plxJadroJeTrebaSpustitInstalaciPluginu=plxJadroNeznamaAkce+1; +plxJadroVerzePluginuJeVyssiNezVDB=plxJadroJeTrebaSpustitInstalaciPluginu+1; +plxJadroMinulaInstalaceNeprobehlaKorektne=plxJadroVerzePluginuJeVyssiNezVDB+1; +plxJadroVymazat=plxJadroMinulaInstalaceNeprobehlaKorektne+1; +plxJadroZakazkaXJeUzavrena=plxJadroVymazat+1; +plxJadroNalezenoViceStejnychHodnotPolozky=plxJadroZakazkaXJeUzavrena+1; +plxJadroOrganizaceJeZakazana=plxJadroNalezenoViceStejnychHodnotPolozky+1; +plxJadroOrganizaceJeBlokovana=plxJadroOrganizaceJeZakazana+1; +plxJadroInfoOrg_DluhXKeDniY=plxJadroOrganizaceJeBlokovana+1; +plxJadroDatumPoslednihoAutoImportuFormularu=plxJadroInfoOrg_DluhXKeDniY+1; +plxJadroDatumPoslednihoAutoImportuFiltru=plxJadroDatumPoslednihoAutoImportuFormularu+1; +plxJadroDatumPoslednihoAutoImportuOpisu=plxJadroDatumPoslednihoAutoImportuFiltru+1; +plxJadroSystemoveCislo=plxJadroDatumPoslednihoAutoImportuOpisu+1; +plxJadroSysCisZkr=plxJadroSystemoveCislo+1; +plxJadroAutor=plxJadroSysCisZkr+1; +plxJadroDatumPorizeni=plxJadroAutor+1; +plxJadroZmenil=plxJadroDatumPorizeni+1; +plxJadroDatumZmeny=plxJadroZmenil+1; +plxJadroBlokovaniEditoru=plxJadroDatumZmeny+1; +plxJadroNovy=plxJadroBlokovaniEditoru+1; +plxJadroOprava=plxJadroNovy+1; +plxJadroZrusit=plxJadroOprava+1; +plxJadroObnovit=plxJadroZrusit+1; +plxJadroAno=plxJadroObnovit+1; +plxJadroNe=plxJadroAno+1; +plxJadroNebylNalezenPrehled_X_Y=plxJadroNe+1; +plxJadroNebylNalezenPrehledCislo_X=plxJadroNebylNalezenPrehled_X_Y+1; +plxJadroDefPrehledy_a_JejichAkce=plxJadroNebylNalezenPrehledCislo_X+1; +plxJadroExterniAkce=plxJadroDefPrehledy_a_JejichAkce+1; +plxJadroAkceProPrehledCislo_X=plxJadroExterniAkce+1; +plxJadroDefinovaneVazby=plxJadroAkceProPrehledCislo_X+1; +plxJadroExterniAtributy=plxJadroDefinovaneVazby+1; +plxJadroExterniAtribut_T_A=plxJadroExterniAtributy+1; +plxJadroUzivatelskeSoudecky=plxJadroExterniAtribut_T_A+1; +plxJadroPoradiSoudecku=plxJadroUzivatelskeSoudecky+1; +plxJadroInstalace=plxJadroPoradiSoudecku+1; +plxJadroZakladniInformace=plxJadroInstalace+1; +plxJadroTechnickyPopis=plxJadroZakladniInformace+1; +plxJadroMinVerzeSQLServeru=plxJadroTechnickyPopis+1; +plxJadroNeinstalovano=plxJadroMinVerzeSQLServeru+1; +plxJadroInstalovanaVerze=plxJadroNeinstalovano+1; +plxJadroUmisteni=plxJadroInstalovanaVerze+1; +plxJadroPrerusit=plxJadroUmisteni+1; +plxJadroOpravduAkciPrerusit=plxJadroPrerusit+1; +plxJadroPluginVyzadujeMinVerziSQL_X=plxJadroOpravduAkciPrerusit+1; +plxJadroNavaznyCiselnikSFiltraci=plxJadroPluginVyzadujeMinVerziSQL_X+1; +plxJadroNavaznyCiselnik=plxJadroNavaznyCiselnikSFiltraci+1; +plxJadroOdesilamPostu=plxJadroNavaznyCiselnik+1; +plxJadroMailNebylNalezenHeMail=plxJadroOdesilamPostu+1; +plxJadroMailNepodariloSeVytvoriKonfigSoubor=plxJadroMailNebylNalezenHeMail+1; +plxJadroKontrolaExternichAtributu=plxJadroMailNepodariloSeVytvoriKonfigSoubor+1; +plxJadroStredisko_X_JeZakazano=plxJadroKontrolaExternichAtributu+1; +plxJadroRegistrovanyOtaznik=plxJadroStredisko_X_JeZakazano+1; +plxJadroIdentifikator=plxJadroRegistrovanyOtaznik+1; +plxJadro_Nepouzito_=plxJadroIdentifikator+1; +plxJadroLogo=plxJadro_Nepouzito_+1; +plxJadroExterniHlasky=plxJadroLogo+1; +plxJadroDoplneniExternichHlasek=plxJadroExterniHlasky+1; +plxJadroAbout_IdentifikaceVyrobce=plxJadroDoplneniExternichHlasek+1; +plxJadroHistorieVerzi=plxJadroAbout_IdentifikaceVyrobce+1; +plxJadroZaznamJeBlokovanNelzeSmazat=plxJadroHistorieVerzi+1; +plxJadroDefinovanyPrehled_X_NebylNalezen=plxJadroZaznamJeBlokovanNelzeSmazat+1; +plxJadroCislaPrehleduBylaVycerpana=plxJadroDefinovanyPrehled_X_NebylNalezen+1; +plxJadroPredchoziRok=plxJadroCislaPrehleduBylaVycerpana+1; +plxJadroPredchoziMesic=plxJadroPredchoziRok+1; +plxJadroNasledujiciMesic=plxJadroPredchoziMesic+1; +plxJadroNasledujiciRok=plxJadroNasledujiciMesic+1; +plxJadroZvolteDatum=plxJadroNasledujiciRok+1; +plxJadroDnes=plxJadroZvolteDatum+1; +plxJadroKalendar=plxJadroDnes+1; +plxJadroAktualniCas=plxJadroKalendar+1; +plxJadroKalkulacka=plxJadroAktualniCas+1; +plxJadroKontrolaUzivatelskychFunkci=plxJadroKalkulacka+1; +plxJadroPrevodDoUNICODE=plxJadroKontrolaUzivatelskychFunkci+1; +plxJadroDoplneniPrehleduProUzivAtr=plxJadroPrevodDoUNICODE+1; +plxJadroSkupinaNastrojuPrizpusobeni=plxJadroDoplneniPrehleduProUzivAtr+1; +plxJadroDoplneniSkupiny=plxJadroSkupinaNastrojuPrizpusobeni+1; +plxJadroVlastniInstalace=plxJadroDoplneniSkupiny+1; +plxJadroHotovo=plxJadroVlastniInstalace+1; +plxJadroOmezeniVDBPrebyva=plxJadroHotovo+1; +plxJadroPocitanyAtributChybi=plxJadroOmezeniVDBPrebyva+1; +plxJadroAtributVTabulceChybi=plxJadroPocitanyAtributChybi+1; +plxJadroZmenaPocitanehoAtributuSmazani=plxJadroAtributVTabulceChybi+1; +plxJadroZmenaPocitanehoAtributuPridani=plxJadroZmenaPocitanehoAtributuSmazani+1; +plxJadroZmenaPocitanehoAtributuKodDB=plxJadroZmenaPocitanehoAtributuPridani+1; +plxJadroAtributVTabulcePrebyva=plxJadroZmenaPocitanehoAtributuKodDB+1; +plxJadroOmezeniJeVDBVypnuto=plxJadroAtributVTabulcePrebyva+1; +plxJadroOmezeniVDBChybi=plxJadroOmezeniJeVDBVypnuto+1; +plxJadroOmezeniSeVDBZmenilo=plxJadroOmezeniVDBChybi+1; +plxJadroOmezeniSeVDBZmeniloKodDB=plxJadroOmezeniSeVDBZmenilo+1; +plxJadroOmezeniJeVypnuto=plxJadroOmezeniSeVDBZmeniloKodDB+1; +plxJadroUlozenkaVDBChybi=plxJadroOmezeniJeVypnuto+1; +plxJadroNastaveniPravKUlozence=plxJadroUlozenkaVDBChybi+1; +plxJadroUlozenkaSeZmenila=plxJadroNastaveniPravKUlozence+1; +plxJadroFunkceVDBChybi=plxJadroUlozenkaSeZmenila+1; +plxJadroNastaveniPravKFunkci=plxJadroFunkceVDBChybi+1; +plxJadroFunkceSeZmenila=plxJadroNastaveniPravKFunkci+1; +plxJadroTriggerVDBChybi=plxJadroFunkceSeZmenila+1; +plxJadroTriggerVDBPrebyva=plxJadroTriggerVDBChybi+1; +plxJadroTriggerJeVDBVypnut=plxJadroTriggerVDBPrebyva+1; +plxJadroTriggerVDBSeZmenil=plxJadroTriggerJeVDBVypnut+1; +plxJadroIndexJeVDBPrejmenovan=plxJadroTriggerVDBSeZmenil+1; +plxJadroHeslo=plxJadroIndexJeVDBPrejmenovan+1; +plxJadroZobrazitHeslo=plxJadroHeslo+1; +plxJadroAdresarProJazykovaDLL=plxJadroZobrazitHeslo+1; +plxJadroVysledek=plxJadroAdresarProJazykovaDLL+1; +plxJadroPluginNeobsahujeZadneHlasky=plxJadroVysledek+1; +plxJadroNeniZadanoHeslo=plxJadroPluginNeobsahujeZadneHlasky+1; +plxJadroNeniZadanAdresarProJazykovaDLL=plxJadroNeniZadanoHeslo+1; +plxJadroAdresarProJazykovaDLLNeexistuje=plxJadroNeniZadanAdresarProJazykovaDLL+1; +plxJadroPodporaTicheInstalacePluginu=plxJadroAdresarProJazykovaDLLNeexistuje+1; +plxJadroNepodporaOdinstalace=plxJadroPodporaTicheInstalacePluginu+1; + +plx_MAX_Jadro = plxJadroNepodporaOdinstalace; + +//last <- to je kvuli rychlejsimu hledani + +// LOCAL | USER: RK | DT: 27.11.2006 09:11:03 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 27.11.2006 09:16:26 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 21.07.2008 15:31:34 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginLCSEIUctenek +// LIB | USER: RK | DT: 21.07.2008 15:34:00 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginLCSEIUctenek | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 29.09.2008 10:01:28 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 29.09.2008 10:03:08 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: RK | DT: 05.03.2009 14:00:44 | VER: | TXT: | PC: RK-VI-D | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ1\PluginExample +// LIB | USER: RK | DT: 05.03.2009 14:05:46 | VER: ?? LB ?? | TXT: | PC: RK-VI-D | FROM: D:\!\IQ1\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 12.09.2011 16:52:33 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 13.09.2011 13:39:38 | VER: 20110913 | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 +// LOCAL | USER: roman.krupicka | DT: 10.10.2011 16:19:41 | VER: | TXT: | PC: KRUPICKARO-PC | FROM: L:\H\IQ10\PlugLib2 | TO: D:\!\IQ2\P\PluginExample +// LIB | USER: roman.krupicka | DT: 10.10.2011 16:28:35 | VER: ?? LB ?? | TXT: | PC: KRUPICKARO-PC | FROM: D:\!\IQ2\P\PluginExample | TO: L:\H\IQ10\PlugLib2 diff --git a/lib/plgTypeUTA.inc b/lib/plgTypeUTA.inc new file mode 100644 index 0000000..e69de29 diff --git a/lib/plgTypeZbytek.inc b/lib/plgTypeZbytek.inc new file mode 100644 index 0000000..1fad3bc --- /dev/null +++ b/lib/plgTypeZbytek.inc @@ -0,0 +1,3 @@ + +// Typy a konstanty tykajici se pouze daneho pluginu + diff --git a/lib/plgUtaDef.inc b/lib/plgUtaDef.inc new file mode 100644 index 0000000..e69de29 diff --git a/lib/plgVerze.INC b/lib/plgVerze.INC new file mode 100644 index 0000000..4d2c901 --- /dev/null +++ b/lib/plgVerze.INC @@ -0,0 +1,14 @@ +$030020241014 +{MMnnRRRRMMDD} + +{ MM = major verze } +{ nn = minor verze } +{ RRRR = rok } +{ MM = mesic } +{ DD = den } + +{ - cislo (hexadecimalne) verze jako typ Int64 - je v include, protoze se } +{ externe nacita pri distribucni kompilaci pro pridani VERSION INFO do EXE } + +{ - toto cislo MUSI byt na PRVNIM RADKU tohoto souboru a na temze } +{ radku nesmi byt dalsi znaky (komentare apod.) } diff --git a/libSys/plgAkce.pas b/libSys/plgAkce.pas new file mode 100644 index 0000000..3155aee --- /dev/null +++ b/libSys/plgAkce.pas @@ -0,0 +1,1153 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgAkce; + +interface + +uses + plgType, Classes, Forms, DB, plgQuery, ddPlugin_TLB; + +type + TplgJednaAkce = procedure of object; + + TKdyZapsatParametry = + (kzpNikdy, + kzpInsert{akce neexistuje - prvni instalace nebo byla smazana}, + kzpInsertUpdate{akce (ne)existuje - parametry se pri kazde (re)instalaci prepisi}); + + TplgAkctionContainer = class + NazevSys: string; + Nazev: string; + NazevTxt: TplgTxt; + Akce: TplgJednaAkce; + GUID: string; + HotKey: Integer; + Verejna: Boolean; + NazevPodmenu: string; + NazevPodmenuTxt: TplgTxt; + KdyZapsatParametry: TKdyZapsatParametry; + Parametry: string; + PridatOddelovacMenu: Boolean; + Napoveda: string; + NapovedaTxt: TplgTxt; + end; + + { +++++++++++++++++++++++++++ } + + TplgAkcePrehleduClass = class of TplgAkcePrehledu; + TplgAkcePrehledu = class(TplgAkcePrehleduBase) + private + FBrowse: TplgBrowse; + FTabulka: TplgTabulka; + FSetrideneAtributy: TStringList; + FSeznamAkci: TStringList; + + FDataSourceEdit : TDataSource; + FMemDataSet: TplgQuery; + + FPlgEditor: TForm; + FHelios : IHelios; + + procedure _VolejEditor(AQuery: TDataSet); + procedure CreateMemDataSet; + procedure My_OnGetText(Sender: TField; var Text: string; DisplayText: Boolean); + procedure My_OnSetText(Sender: TField; const Text: string); + + procedure MemDataSet_BeforePost(DataSet: TDataSet); + procedure MemDataSet_AfterCancel(DataSet: TDataSet); + + procedure Field_OnChange(Sender: TField); + + procedure ZrusUdalostiDataSetu; + function NahodBlokovaniEditoru(NacteniPoInsertu: Boolean): Boolean; + procedure NovyRadekDataSetu; + procedure NactiRadek_Z_DB(const IDStr: string); + + protected + FLastID: Variant; + + procedure VytvorSetrideneAtributy; + function TestNaTabulku: Boolean; dynamic; + function _GetValueFromField(F: TField): string; + function TestPredStandardnimiAkcemi(ChciID: Boolean): Boolean; + procedure AddAkce(const NazevSys, NazevVerejny: string; Akce: TplgJednaAkce; + const GUID: string; const NazevPodmenu: string = ''; HotKey: Integer = 0; + KdyZapsatParametry: TKdyZapsatParametry = kzpNikdy; + const Parametry: string = ''; AVerejna: Boolean = True); overload; + procedure AddAkce(const NazevSys: string; NazevVerejnyTxt: TplgTxt; Akce: TplgJednaAkce; + const GUID: string; NazevPodmenuTxt: TplgTxt = plxNic; HotKey: Integer = 0; + KdyZapsatParametry: TKdyZapsatParametry = kzpNikdy; const Parametry: string = ''; + PridatOddelovacMenu: Boolean = False; Napoveda: TplgTxt = plxNic; + AVerejna: Boolean = True); overload; + + function PripravProEditaci: Boolean; + function PripravProNova: Boolean; + procedure ProvedRefresh(NovaVeta: Boolean); + + public + FPlgEditorClass: TFormClass; + + constructor Create(aHelios: IHelios; aBrowse: TplgBrowse; aPlgEditorClass: TFormClass); virtual; + constructor CreateTab(AHelios: IHelios; AExtAkceDef: PplgExtAkceDef); virtual; + destructor Destroy; override; + + procedure ActionNew; dynamic; + procedure ActionEdit; dynamic; + procedure ActionDelete; dynamic; + + function SpustAkci(const GUIDAkce: string): string; + function FieldWasChanged(F: TField): Boolean; + + function NajdiPrvniVolny(ATabulka : TplgTabulka; + const AAtribut : string; + const AWHERE : string; + { klauzule WHERE, kterou se dosahne unikatnosti atributu } + { ocekavan je syntaxe pr.: RadaDokladu='101' AND DruhPohybuZbo=0 AND IDSklad='001' } + { nebo prazdny String - nefiltruje se } + AMin, AMax : Integer; + APlnitMezery: boolean = True): Integer; + + function GetIDHlavicky(var IDHlavicky: Integer): Boolean; + function NastavIDHlavickyDoRadku(FieldNaRadku: TField): Boolean; + + procedure OnNovaVeta( AFields : TFields; + var Prerusit : Boolean; + PrvniPruchod : Boolean); virtual; // dedit - override; + + function AfterInsertSkript: string; dynamic; + function AfterUpdateSkript: string; dynamic; + + property Browse: TplgBrowse read FBrowse; + property Helios: IHelios read FHelios; + property HlavniTabulka: TplgTabulka read FTabulka; + property PlgEditor: TForm read FPlgEditor; + property SetrideneAtributy: TStringList read FSetrideneAtributy; + end; + +{ =========================================================================== } + +implementation + +uses + SysUtils, Windows, Controls, Variants, Generics.Collections, + plgMain, plgEdit, plgBrowse, plgSpravce, plgInstalace, plgLadit; + +{ ########################################################################### } + +constructor TplgAkcePrehledu.Create(aHelios : IHelios; + aBrowse : TplgBrowse; + aPlgEditorClass: TFormClass); +begin + inherited Create; + + FHelios := aHelios; + FBrowse := aBrowse; + FTabulka := Cplg_SeznamVychozichNastaveniBrowse[FBrowse].HlavniTabulka; + FPlgEditorClass := aPlgEditorClass; + + SpravceHeliosu.NastavAkce(FHelios, Self); + + VytvorSetrideneAtributy; + + FSeznamAkci := TStringList.Create; // NETRIDIT !! + + with Cplg_SeznamVychozichNastaveniBrowse[FBrowse] do + begin + if GUID_ActionNew <> '' then + AddAkce('ActionNew', plxJadroAkceNovy, ActionNew, GUID_ActionNew, plxJadroMenuEditace, VK_F2); + + if GUID_ActionEdit <> '' then + AddAkce('ActionEdit', plxJadroAkceOprava, ActionEdit, GUID_ActionEdit, plxJadroMenuEditace, VK_RETURN); + + if GUID_ActionDelete <> '' then + AddAkce('ActionDelete', plxJadroAkceZrusit, ActionDelete, GUID_ActionDelete, plxJadroMenuEditace, VK_DELETE); + end; +end; + +{ --------------------------------------------------------------------------- } + +constructor TplgAkcePrehledu.CreateTab(AHelios: IHelios; AExtAkceDef: PplgExtAkceDef); +begin + Create(AHelios, bZadny, AExtAkceDef.EditorClass); +end; + +{ --------------------------------------------------------------------------- } + +destructor TplgAkcePrehledu.Destroy; + var + II: Integer; +begin + SpravceHeliosu.NastavAkce(FHelios, nil); + + for II := 0 to FSeznamAkci.Count-1 do + TplgAkctionContainer(FSeznamAkci.Objects[II]).Free; + FSeznamAkci.Free; + FSetrideneAtributy.Free; + + inherited; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.VytvorSetrideneAtributy; +begin + FreeAndNil(FSetrideneAtributy); + FSetrideneAtributy := plgSetrideneAtributy(FTabulka); +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.AddAkce(const NazevSys, NazevVerejny: string; + Akce: TplgJednaAkce; const GUID: string; const NazevPodmenu: string = ''; + HotKey: Integer = 0; KdyZapsatParametry: TKdyZapsatParametry = kzpNikdy; + const Parametry: string = ''; AVerejna: Boolean = True); + var + XX: TplgAkctionContainer; +begin + plgLadit_KontrolaGUIDInstalace(GUID); + + XX := TplgAkctionContainer.Create; + XX.NazevSys := NazevSys; + XX.Nazev := NazevVerejny; + XX.Akce := Akce; + XX.GUID := GUID; + XX.HotKey := HotKey; + XX.NazevPodmenu := NazevPodmenu; + XX.KdyZapsatParametry := KdyZapsatParametry; + XX.Parametry := Parametry; + XX.Verejna := AVerejna; + FSeznamAkci.AddObject(GUID, XX); +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.AddAkce(const NazevSys: string; NazevVerejnyTxt: TplgTxt; + Akce: TplgJednaAkce; const GUID: string; NazevPodmenuTxt: TplgTxt = plxNic; + HotKey: Integer = 0; KdyZapsatParametry: TKdyZapsatParametry = kzpNikdy; + const Parametry: string = ''; PridatOddelovacMenu: Boolean = False; + Napoveda: TplgTxt = plxNic; AVerejna: Boolean = True); + var + XX: TplgAkctionContainer; +begin + plgLadit_KontrolaGUIDInstalace(GUID); + + XX := TplgAkctionContainer.Create; + XX.NazevSys := NazevSys; + XX.NazevTxt := NazevVerejnyTxt; + XX.Nazev := plgCtiOznam(XX.NazevTxt); + XX.Akce := Akce; + XX.GUID := GUID; + XX.HotKey := HotKey; + XX.NazevPodmenuTxt := NazevPodmenuTxt; + XX.NazevPodmenu := plgCtiOznam(XX.NazevPodmenuTxt); + XX.KdyZapsatParametry := KdyZapsatParametry; + XX.Parametry := Parametry; + XX.PridatOddelovacMenu := PridatOddelovacMenu; + XX.NapovedaTxt := Napoveda; + XX.Napoveda := plgCtiOznam(XX.Napoveda); + XX.Verejna := AVerejna; + FSeznamAkci.AddObject(GUID, XX); +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.GetIDHlavicky(var IDHlavicky: Integer): Boolean; + var + HeliosVlastnik: IHelios; + AkceVlastnika: TplgAkcePrehledu; +begin + Result := False; + + HeliosVlastnik := SpravceHeliosu.VratVlastnika(FHelios); + + // pokud neni navazan vlastnik, tak neni co priradit + if not Assigned(HeliosVlastnik) then + begin + FHelios.Error('NastavIDHlavickyDoRadku: Nen piazen HeliosVlastnik!'); + Exit; + end; + + AkceVlastnika := SpravceHeliosu.VratAkcePrehledu(HeliosVlastnik); + + if Assigned(AkceVlastnika) and Assigned(AkceVlastnika.FPlgEditor) then + IDHlavicky := TfrmPlgEditor(AkceVlastnika.FPlgEditor).DataSourceEdit.DataSet.FieldByName(plg_SystemoveCislo).AsInteger + else + IDHlavicky := HeliosVlastnik.CurrentRecordID; + + Result := True; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.NastavIDHlavickyDoRadku(FieldNaRadku: TField): Boolean; + var + IDHlavicky: Integer; +begin + Result := GetIDHlavicky(IDHlavicky); + if Result then + FieldNaRadku.AsInteger := IDHlavicky; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.OnNovaVeta( AFields : TFields; + var Prerusit : Boolean; + PrvniPruchod : Boolean); +begin + // dedi se +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.NajdiPrvniVolny(ATabulka : TplgTabulka; + const AAtribut : string; + const AWHERE : string; + AMin, AMax : Integer; + APlnitMezery: Boolean = True): Integer; + var + TabulkaStr: string; + PomInt: Integer; + Q: IHeQuery; +begin + Result := -1; + + TabulkaStr := plgJmenoTabulky(ATabulka); + if ((AMin > AMax) or (TabulkaStr = '')) then Exit; + + Q := FHelios.OpenSQL( + Format('EXEC dbo.hp_NajdiPrvniVolny %s,%s,%d,%d,%s,0,%d', + [plgNQuotedStr(TabulkaStr), plgNQuotedStr(AAtribut), AMin, AMax, + plgNQuotedStr(AWHERE), Integer(APlnitMezery)])); + if not varIsNull(Q.FieldValues(0)) then + begin + PomInt := Q.FieldValues(0); + if (AMin <= PomInt) and (PomInt <= AMax) then Result := PomInt; + end; +end; + +{ --------------------------------------------------------------------------- } + +var + OnGetText_PomSL: TStringList = nil; + +procedure TplgAkcePrehledu.My_OnGetText( Sender : TField; + var Text : String; + DisplayText : Boolean); + var + PA: PplgAtributTabulky; +begin + if Sender.Tag <> 0 then + PA := PplgAtributTabulky(Sender.Tag) + else + PA := plgAtribut(Sender.Origin); + + if Assigned(PA) then + begin + if not Assigned(OnGetText_PomSL) then + OnGetText_PomSL := TStringList.Create; + + OnGetText_PomSL.Text := PA.Konverze; + Text := plgHodnotaZKonverze(Sender.IsNULL, Sender.AsString, OnGetText_PomSL); + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.My_OnSetText(Sender: TField; const Text: string); + var + PomSL : TStringList; + S : String; + PA : PplgAtributTabulky; +begin + if Sender.Tag <> 0 then + PA := PplgAtributTabulky(Sender.Tag) + else + PA := plgAtribut(Sender.Origin); + + PomSL := plgObracenaKonverze(PA.Konverze); + try + if PomSL.IndexOfName(Text) = -1 then // je v obracenem StringListu + Sender.AsString := Text // neni - nekonvertuj + else + begin // je - konvertuj s ohledem na hodnotu NULL + S := PomSL.Values[Text]; + if SameText(S, 'NULL') then + Sender.Clear + else + Sender.AsString := S; + end; + finally + PomSL.Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.Field_OnChange(Sender: TField); +begin + if Assigned(Sender.DataSet.BeforePost) then + Sender.ImportedConstraint := '1'; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.FieldWasChanged(F: TField): Boolean; +begin + //toto zlobi v pripade blobu + //Result := not plgVarSameValue(F.OldValue, F.Value); + Result := (F.ImportedConstraint = '1'); +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.CreateMemDataSet; + var + PA : PplgAtributTabulky; + II : Integer; + TabName: string; + + { +++++++++++++++++++++++++++ } + + function CreateField(FC: TFieldClass): TField; + begin + Result := FC.Create(FMemDataSet); + with Result do + begin + FieldName := PA.JmenoSys; + Origin := TabName + '.' + PA.JmenoSys; + DataSet := FMemDataSet; + Tag := Integer(PA); + Required := False; + + OnChange := Field_OnChange; + + if PA.Konverze <> '' then + begin + OnGetText := My_OnGetText; + OnSetText := My_OnSetText; + Alignment := taLeftJustify; + end; + end; + end; + + { +++++++++++++++++++++++++++ } + +begin + FMemDataSet := TplgQuery.Create(nil); + try + with plgGetTabulkaDef(FTabulka)^ do + begin + TabName := JmenoSys; + + PA := Atributy; + for II := 1 to PocetAtributu do + begin + // pocitane a abstraktni neexistuji, binary nejde zpravne zobrazit... + if (PA.Pocitany = '') and (PA.Typ <> taBinary) and + (not(dvAbstraktni in PA.DalsiVlastnosti)) then + case PA.Typ of + taInt, // ftInteger + taIdentity: + with TIntegerField(CreateField(TIntegerField)) do + begin + ValidChars := ValidChars - ['+','-']; + DisplayFormat := PA.MaskaDisplay; + end; + + taInt64, // ftLargeint + taIdentity64: + with TLargeintField(CreateField(TLargeintField)) do + begin + ValidChars := ValidChars - ['+','-']; + DisplayFormat := PA.MaskaDisplay; + end; + +// taGUID: // ftString +// with TStringField(CreateField(TStringField)) do +// Size := 36; // napr. 85AA05CC-9D09-4BA9-B07B-7A25319BE5F4 + + taSmallInt: // ftSmallint + with TSmallIntField(CreateField(TSmallIntField)) do + begin + ValidChars := ValidChars - ['+','-']; + DisplayFormat := PA.MaskaDisplay; + end; + + taByte: // ftByte + with TByteField(CreateField(TByteField)) do + begin + ValidChars := ValidChars - ['+','-']; + DisplayFormat := PA.MaskaDisplay; + end; + + taBoolean: // ftBoolean + with TBooleanField(CreateField(TBooleanField)) do + DisplayValues := 'A;N'; + + taVarChar, // ftString + taChar: + begin + //[JAS 13.2.2018] - rozsireni o (N)VARCHAR(MAX) + if PA.Delka=Cplg_DelkaNVarcharMax then + CreateField(TMemoField) + else + with TStringField(CreateField(TStringField)) do + Size := PA.Delka; + end; + + taText: // ftMemo + CreateField(TMemoField); + + taNVarChar, // ftWideString + taNChar: + begin + //[JAS 13.2.2018] - rozsireni o (N)VARCHAR(MAX) + if PA.Delka=Cplg_DelkaNVarcharMax then + CreateField(TWideMemoField) + else + with TWideStringField(CreateField(TWideStringField)) do + Size := PA.Delka; + end; + + taNText: // ftWideMemo + CreateField(TWideMemoField); + + taDateTime: // ftDateTime + CreateField(TDateTimeField); + + taTime: // ftTime + CreateField(TTimeField); + + taImage: // ftBlob + CreateField(TBlobField); + + taFloat: // ftFloat + with TFloatField(CreateField(TFloatField)) do + DisplayFormat := PA.MaskaDisplay; + + else + if PA.Typ in Cplg_SkupinaAtributuNumeric then // ftFloat + with TFloatField(CreateField(TFloatField)) do + begin + DisplayFormat := PA.MaskaDisplay; + Precision := 6; + end; + end; + + Inc(PA); + end; + end; + except + FreeAndNil(FMemDataSet); + raise; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu._VolejEditor(AQuery : TDataSet); +begin + if not Assigned(FPlgEditorClass) then Exit; + + FDataSourceEdit := TDataSource.Create(AQuery); + try + FDataSourceEdit.DataSet := AQuery; + try + FPlgEditor := TfrmPlgEditor(FPlgEditorClass.NewInstance).Create(Application, FHelios, Self, FDataSourceEdit); + try + Screen.Cursor := crDefault; + FPlgEditor.ShowModal; + finally + FreeAndNil(FPlgEditor); + end; + finally + if FDataSourceEdit.State <> dsBrowse then + FDataSourceEdit.DataSet.Cancel; + end; + finally + FreeAndNil(FDataSourceEdit); + ProvedRefresh(Lo(AQuery.Tag) = Cplg_tagNovaVeta); + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.ProvedRefresh(NovaVeta: Boolean); + var + PomID: Integer; +begin + FHelios.Refresh(NovaVeta); + if NovaVeta and (not varIsNull(FLastID)) then + begin + PomID := FLastID; + FHelios.Locate(plg_SystemoveCislo, PomID); + end; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu._GetValueFromField(F: TField): string; +begin + if F.IsNull then + Result := 'NULL' + else + case F.DataType of + ftInteger, + ftLargeInt, + ftSmallint, + ftShortint, + ftWord, + ftByte: + Result := F.AsString; + + ftBoolean: + if F.AsBoolean then + Result := '1' + else + Result := '0'; + + ftString, + ftMemo: + Result := QuotedStr(string(F.AsAnsiString)); + + ftWideString, + ftWideMemo: + Result := plgNQuotedStr(F.AsString); + + ftBlob: + Result := plgTextToBinary(F.AsAnsiString); + + ftDateTime: + Result := plgGetIndependentSQLDateTime(F.AsDateTime); + + ftFloat: + Result := plgGetIndependentSQLFloat('%.6f', F.AsFloat); + + else + Result := 'NULL'; // sem by to ale prijit nemelo + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.MemDataSet_AfterCancel(DataSet: TDataSet); + var + LF: TField; +begin + LF := DataSet.FieldByName(plg_SystemoveCislo); + + case Lo(FMemDataSet.Tag) of + Cplg_tagNovaVeta: + FHelios.ExecSQL( + Format(plgSkriptProDeleteJednohoZaznamu(FTabulka, False), [_GetValueFromField(LF)])); + + Cplg_tagOpravaVety: + FHelios.ExecSQL( + Format('UPDATE %s SET ' + plg_BlokovaniEditoru + '=NULL WHERE %s=%s', + [plgJmenoTabulky(FTabulka), LF.FieldName, _GetValueFromField(LF)])); + end; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.AfterInsertSkript: string; +begin + Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.AfterUpdateSkript: string; +begin + Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.MemDataSet_BeforePost(DataSet: TDataSet); + var + Skript, Hodnoty: string; + II: Integer; + LF: TField; + AfterSkript, Deklarace: string; + PridatZmenu: Boolean; +begin + Skript := ''; + Hodnoty := ''; + + case DataSet.State of + dsInsert: + begin + Deklarace := 'INT'; + for II := 0 to DataSet.Fields.Count-1 do + begin + LF := DataSet.Fields[II]; + if (LF <> TplgQuery(DataSet).RecIdField) and (LF.Tag <> 0) then + begin + if (not LF.IsNull) and (not (PplgAtributTabulky(LF.Tag).Typ in Cplg_MnozinaIdentity)) then + begin + Skript := Format('%s,%s', [Skript, LF.FieldName]); + Hodnoty := Format('%s,%s', [Hodnoty, _GetValueFromField(LF)]); + end + else + if PplgAtributTabulky(LF.Tag).Typ = taIdentity64 then + Deklarace := 'BIGINT'; + end; + end; + + if Skript <> '' then + begin + // zrus carky na zacatku + Delete(Skript, 1, 1); + Delete(Hodnoty, 1, 1); + + Skript := Format('INSERT %s(%s)VALUES(%s)', + [plgJmenoTabulky(FTabulka), Skript, Hodnoty]); + + AfterSkript := AfterInsertSkript; + if AfterSkript = '' then + Skript := Format('%s'#13'SELECT SCOPE_IDENTITY()', [Skript]) + else + Skript := + Format('BEGIN TRANSACTION'#13+ + 'DECLARE @ID %s'#13+ + '%s'#13+ // INSERT + 'IF @@ERROR<>0 GOTO CHYBAROLLBACK'#13+ + 'SET @ID=SCOPE_IDENTITY()'#13+ + '%s'#13+ // AFTER INSERT SKRIPT + 'IF @@ERROR<>0 GOTO CHYBAROLLBACK'#13+ + 'COMMIT'#13+ + 'SELECT @ID'#13+ + 'GOTO KONEC'#13+ + 'CHYBAROLLBACK:'#13+ + 'ROLLBACK'#13+ + 'KONEC:', + [Deklarace, Skript, AfterSkript]); + end; + end; + + dsEdit: + begin + // [RK 17.01.2007] doplnen test na skutecnou zmenu + if Assigned(FPlgEditor) and (FPlgEditor is TfrmPlgEditor) then + PridatZmenu := TfrmPlgEditor(FPlgEditor).BylaZmena + else + // [RK 20.10.2008] zmeneno na False, jelikoz to nastavovalo i pri editaci + // pri nahazovani BlokovaniEditoru + PridatZmenu := False; + + for II := 0 to DataSet.Fields.Count-1 do + begin + LF := DataSet.Fields[II]; + if (LF <> TplgQuery(DataSet).RecIdField) and (LF.Tag <> 0) and + (not(PplgAtributTabulky(LF.Tag).Typ in Cplg_MnozinaIdentity)) then + begin + if SameText(LF.FieldName, plg_Zmenil) and PridatZmenu then + Skript := Format('%s,'#13'%s=%s', [Skript, LF.FieldName, Cplg_LoginName]) + else + if SameText(LF.FieldName, plg_DatZmeny) and PridatZmenu then + Skript := Format('%s,'#13'%s=%s', [Skript, LF.FieldName, Cplg_GetDate]) + else + if SameText(LF.FieldName, plg_BlokovaniEditoru) then + Skript := Format('%s,'#13'%s=%s', [Skript, LF.FieldName, _GetValueFromField(LF)]) + else + if FieldWasChanged(LF) then + Skript := Format('%s,'#13'%s=%s', [Skript, LF.FieldName, _GetValueFromField(LF)]); + end; + end; + + if Skript <> '' then + begin + // zrus carku na zacatku + Delete(Skript, 1, 1); + + LF := DataSet.FieldByName(plg_SystemoveCislo); + Hodnoty := _GetValueFromField(LF); + + Skript := Format('UPDATE %s SET %s'#13'WHERE %s=%s', + [plgJmenoTabulky(FTabulka), Skript, LF.FieldName, Hodnoty]); + + // [RK 05.09.2012] AfterUpdateSkript pouze pri skutecne zmene, nikoliv pri nahozeni BlokovaniEditoru + if PridatZmenu then + AfterSkript := AfterUpdateSkript + else + AfterSkript := ''; + + if AfterSkript = '' then + Skript := Format('%s'#13'SELECT %s', [Skript, Hodnoty]) + else + Skript := + Format('BEGIN TRANSACTION'#13+ + 'DECLARE @ID INT'#13+ + '%s'#13+ // UPDATE + 'IF @@ERROR<>0 GOTO CHYBAROLLBACK'#13+ + 'SET @ID=%s'#13+ + '%s'#13+ // AFTER UPDATE SKRIPT + 'IF @@ERROR<>0 GOTO CHYBAROLLBACK'#13+ + 'COMMIT'#13+ + 'SELECT @ID'#13+ + 'GOTO KONEC'#13+ + 'CHYBAROLLBACK:'#13+ + 'ROLLBACK'#13+ + 'KONEC:', + [Skript, Hodnoty, AfterSkript]); + end; + end; + end; + + if Skript = '' then + FLastID := NULL + else + try + FLastID := FHelios.OpenSQL(Skript).FieldValues(0); + finally + Screen.Cursor := crDefault; + end; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.NahodBlokovaniEditoru(NacteniPoInsertu: Boolean): Boolean; + var + LF: TField; + TD: PplgTabulkaDef; +begin + FMemDataSet.BeforePost := MemDataSet_BeforePost; + + TD := plgGetTabulkaDef(FTabulka); + + // blokovani editoru - pri oprave vzdy, pri nove vete pouze pokud neni vypnuto + // [RK 20.10.2008] plg_dvtBlokovaniJenOprava + LF := FMemDataSet.FindField(plg_BlokovaniEditoru); + Result := Assigned(LF) and + ((Lo(FMemDataSet.Tag) = Cplg_tagOpravaVety) or + ((Lo(FMemDataSet.Tag) = Cplg_tagNovaVeta) and + (not (plg_dvtBlokovaniJenOprava in TD.DalsiVlastnosti)))); + + if Result then + begin + if (Lo(FMemDataSet.Tag) = Cplg_tagOpravaVety) and (not LF.IsNull) then + begin + // nastav Hi(Tag) na 1 - blokovano + FMemDataSet.Tag := FMemDataSet.Tag or $00000100; + LF := nil; + end + else + begin + // nastav Hi(Tag) na 0 - neblokovano + FMemDataSet.Tag := FMemDataSet.Tag and $FFFF00FF; + LF.AsInteger := FHelios.UserId; + + // [RK 05.09.2012] je treba signalizovat, ze zmena nebyla - kvuli datu zmeny !! + LF.ImportedConstraint := ''; + + with FMemDataSet do + begin + if not NacteniPoInsertu then + begin + Post; // toto jde do DB, ale pouze pri INSERTu ! + Edit; + end; + AfterCancel := MemDataSet_AfterCancel; // pro budouci shozeni priznaku v DB + end; + + // nacteni ID nove vety + if Lo(FMemDataSet.Tag) = Cplg_tagNovaVeta then + FMemDataSet.FieldByName(plg_SystemoveCislo).Value := FLastID; + end; + + if Assigned(LF) then + begin + with FMemDataSet do + begin + // ulozeni ID a BlokovaniEditoru, ale ne do DB !! + BeforePost := nil; + + // BlokovaniEditoru opet vynullujeme + // [RK 05.09.2012] presunuto az za BeforePost := nil -> jinak nahodi zmenu na True + LF.Clear; + + // bez ulozeni by se to ptalo na zmenu a v ID by bylo NULL po Cancel + Post; + Edit; + + // obnovime update DB + BeforePost := MemDataSet_BeforePost; + end; + end; + end; + + FMemDataSet.SetModified(False); +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.ZrusUdalostiDataSetu; + var + II: Integer; +begin + with FMemDataSet do + begin + ReadOnly := False; + BeforePost := nil; + AfterCancel := nil; + + // zrus priznak zmeny atributu - viz Field_OnChange + for II := 0 to Fields.Count-1 do + Fields[II].ImportedConstraint := ''; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.NovyRadekDataSetu; +begin + with FMemDataSet do + begin + Open; + while RecordCount > 0 do Delete; + Insert; + end; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.PripravProNova: Boolean; + var + II: Integer; + PA: PplgAtributTabulky; + LPrerusit: Boolean; + LF: TField; +begin + Result := False; + + // nastaveni Lo(Tag) - signalizuj Nova + FMemDataSet.Tag := (FMemDataSet.Tag and $FFFFFF00) or Lo(Cplg_tagNovaVeta); + + ZrusUdalostiDataSetu; + NovyRadekDataSetu; + + for II := FMemDataSet.Fields.Count-1 downto 0 do + begin + LF := FMemDataSet.Fields[II]; + if (LF <> FMemDataSet.RecIdField) and (LF.Tag <> 0) then + begin + PA := PplgAtributTabulky(LF.Tag); + + // kdyz nebyla zmena a nema povoleno NULL a nema DEFAULT -> pokus se vyplnit + if (LF.IsNULL) and (PA.NULL <> nNULL) and (PA.ServerDEFAULT = '') then + if (not(PA.Typ in Cplg_MnozinaIdentity)) or (Trim(PA.Pocitany) <> '') then + begin + if LF is TStringField then + LF.AsString := '' + else + if LF is TNumericField then + LF.AsInteger := 0; + end; + end; + end; + + LPrerusit := False; + OnNovaVeta(FMemDataSet.Fields, LPrerusit, True); + if LPrerusit then Exit; + + if NahodBlokovaniEditoru(False) then + begin + ZrusUdalostiDataSetu; + NactiRadek_Z_DB(varToStr(FLastID)); + NahodBlokovaniEditoru(True); + end; + + Result := True; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.TestNaTabulku: Boolean; +begin + Result := plgJeObecnyPrehled(FHelios.MainBrowseTable); +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.TestPredStandardnimiAkcemi(ChciID: Boolean): Boolean; + var + TD: PplgTabulkaDef; +begin + Result := False; + + if not TestNaTabulku then Exit; + + TD := plgGetTabulkaDef(FTabulka); + if not Assigned(TD) then Exit; + if plg_dvtAbstraktni in TD.DalsiVlastnosti then Exit; + + if ChciID then + if varToStr(FHelios.CurrentRecordID) = '' then Exit; + + Result := True; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.ActionNew; +begin + if not TestPredStandardnimiAkcemi(False) then Exit; + + CreateMemDataSet; + try + if not PripravProNova then Exit; + _VolejEditor(FMemDataSet); + finally + FreeAndNil(FMemDataSet); + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.NactiRadek_Z_DB(const IDStr: string); + var + II: Integer; + SelectStr: string; + LF: TField; + LFieldList: TList; + Q: IHeQuery; +begin + NovyRadekDataSetu; + + LFieldList := TList.Create; + try + // sestaveni selectu pro nacteni hodnot + SelectStr := ''; + for II := 0 to FMemDataSet.Fields.Count-1 do + begin + LF := FMemDataSet.Fields[II]; + if (LF <> FMemDataSet.RecIdField) and (LF.Tag <> 0) then + begin + SelectStr := Format('%s,%s', [SelectStr, LF.FieldName]); + LFieldList.Add(LF); + end; + end; + Delete(SelectStr, 1, 1); + + Q := FHelios.OpenSQL(Format('SELECT %s FROM %s WHERE %s=%s', + [SelectStr, plgJmenoTabulky(FTabulka), + plg_SystemoveCislo, IDStr])); + if Q.EOF then Exit; + + for II := 0 to LFieldList.Count-1 do + begin + LF := LFieldList[II]; +// if PplgAtributTabulky(LF.Tag).Typ = taGUID then +// LF.AsString := varToStr(Q.FieldValues(II)) +// else + LF.Value := Q.FieldValues(II); + end; + finally + LFieldList.Free; + end; + + // zplatneni hodnot v datasetu + with FMemDataSet do + begin + Post; First; Edit; + end; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.PripravProEditaci: Boolean; + var + IDStr: string; +begin + Result := False; + + IDStr := varToStr(FHelios.CurrentRecordID); + if IDStr = '' then Exit; + + // nastaveni Lo(Tag) - signalizuj Oprava + FMemDataSet.Tag := (FMemDataSet.Tag and $FFFFFF00) or Lo(Cplg_tagOpravaVety); + + ZrusUdalostiDataSetu; + NactiRadek_Z_DB(IDStr); + NahodBlokovaniEditoru(False); + + Result := True; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.ActionEdit; +begin + if not TestPredStandardnimiAkcemi(True) then Exit; + + CreateMemDataSet; + try + if not PripravProEditaci then Exit; + _VolejEditor(FMemDataSet); + finally + FreeAndNil(FMemDataSet); + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure TplgAkcePrehledu.ActionDelete; + var + PomStr: string; + SL: TStringList; + II: Integer; +begin + if not TestPredStandardnimiAkcemi(True) then Exit; + + SL := TStringList.Create; + try + PomStr := FHelios.SelectedRecordIDs; + if PomStr <> '' then + SL.CommaText := PomStr + else + SL.Add(varToStr(FHelios.CurrentRecordID)); + + if SL.Count > 1 then + PomStr := Format('%s (%d) ?', [plgCtiOznam(plxJadroOprPrejSmazVse), SL.Count]) + else + PomStr := plgCtiOznam(plxJadroOprPrejSmazAkt); + + if not FHelios.YesNo(PomStr, False) then Exit; + + PomStr := plgSkriptProDeleteJednohoZaznamu(FTabulka, True); + for II := 0 to SL.Count-1 do + FHelios.ExecSQL(Format(PomStr, [SL.Strings[II]])); + finally + SL.Free; + FHelios.Refresh(True); + end; +end; + +{ --------------------------------------------------------------------------- } + +function TplgAkcePrehledu.SpustAkci(const GUIDAkce: string): string; + var + II: Integer; +begin + Result := ''; + + if SameText(GUIDAkce, Cplg_GUID_Instalace) then + Result := GetInstallScriptForAction(Helios, FSeznamAkci, Self.ClassName) + else + begin + II := FSeznamAkci.IndexOf(GUIDAkce); + if II = -1 then Exit; + + if Assigned(FSeznamAkci.Objects[II]) then + TplgAkctionContainer(FSeznamAkci.Objects[II]).Akce; + end; +end; + +{ ########################################################################### } + +end. diff --git a/libSys/plgBrowse.pas b/libSys/plgBrowse.pas new file mode 100644 index 0000000..c9e98d5 --- /dev/null +++ b/libSys/plgBrowse.pas @@ -0,0 +1,25 @@ +unit plgBrowse; + +interface + +uses + plgType; + +var + Cplg_SeznamVychozichNastaveniBrowse : array[TplgBrowse] of TplgVychoziNastaveniBrowse = + ( + (SelfIdent : bZadny; + ) + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgExtAkce.pas b/libSys/plgExtAkce.pas new file mode 100644 index 0000000..ce80209 --- /dev/null +++ b/libSys/plgExtAkce.pas @@ -0,0 +1,29 @@ +unit plgExtAkce; + +interface + +uses + plgType; + +{ =========================================================================== } + +const + GDefiniceExtAkci : array[0..0] of TplgExtAkceDef = + ( + // aby bylo mozno nemit zadnou externi akci, + // musi zustat prvni akce nedefinovana !! + (BrowseID : 0) + + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgExtAttr.pas b/libSys/plgExtAttr.pas new file mode 100644 index 0000000..4aff235 --- /dev/null +++ b/libSys/plgExtAttr.pas @@ -0,0 +1,29 @@ +unit plgExtAttr; + +interface + +uses + plgType; + +{ =========================================================================== } + +const + GDefiniceExtAttr : array[0..0] of TplgExterniAtribut = + ( + // aby bylo mozno nemit zadny externi atribut, + // musi zustat prvni akce nedefinovana !! + (JmenoTabulky : '') + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. + diff --git a/libSys/plgExtTrigger.pas b/libSys/plgExtTrigger.pas new file mode 100644 index 0000000..187c6e7 --- /dev/null +++ b/libSys/plgExtTrigger.pas @@ -0,0 +1,27 @@ +unit plgExtTrigger; + +interface + +uses + plgType; + +{ =========================================================================== } + +const + GDefiniceExtTrigger : array[0..0] of TplgExterniTrigger = + ( + // aby bylo mozno nemit zadny externi trigger, + // musi zustat prvni trigger nedefinovan !! + (JmenoTabulky : '') + + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgFunkce.pas b/libSys/plgFunkce.pas new file mode 100644 index 0000000..95fc3bd --- /dev/null +++ b/libSys/plgFunkce.pas @@ -0,0 +1,33 @@ +unit plgFunkce; + +interface + +uses + plgType; + +// !!! POZOR !!! ############################################################## +// Funkce musi byt zadana tak, aby CREATE FUNCTION bylo na jednom radku: +// napr. 'CREATE FUNCTION dbo.pf_MujPrefix_MujNazev'#13+ +// ############################################################################ + +{ =========================================================================== } + +const + SeznamUzivatelskychFunkci : array[0..0] of TplgUzivatelskaFunkce = + ( + // aby bylo mozno nemit zadnou uzivatelskou funkci :-) + // musi zustat prvni funkce definovana !! + (Text : '') + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgHlasky.pas b/libSys/plgHlasky.pas new file mode 100644 index 0000000..53e622b --- /dev/null +++ b/libSys/plgHlasky.pas @@ -0,0 +1,28 @@ +unit plgHlasky; + +interface + +// [RK 10.10.2011] zapnuto vzdy vkuli prekladovemu portalu +{$DEFINE EdHlasky} + +uses + plgType; + +// rozsah hlasek je W=5000000-5999999 + +const + GplgHlasky : array[TplgTxt] of TplgHlaska = + ( + {$I ..\lib\plgHlaskyJadro.INC} // definice hlasek jadra + {$I ..\lib\plgHlaskyEx.INC} // definice ostatnich hlasek + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgMain.pas b/libSys/plgMain.pas new file mode 100644 index 0000000..0551116 --- /dev/null +++ b/libSys/plgMain.pas @@ -0,0 +1,2427 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgMain; + +interface + +uses + SysUtils, Messages, Forms, DBCtrls, Classes, StdCtrls, + ddPlugin_TLB, plgType, plgKonfig; + +type + TplgJakaVerze = + (jvZakladni, // '1.0' + jvMajor, // '1' + jvMinor, // '0' + jvDatumRRRRMMDD, // '20050307' + jvCela, // '1.0.2005.0307' + jvCelaUnicode, // '2.0.2009.0909 - UNICODE' + jvHexa // '010020050307' <- bez znaku $ + ); + + TplgPorovnaniVerzi = (pvStejneVerze, pvDBMaVetsi, pvDBMaMensi); + +// --- verze pluginu ---------------------------------------------------------- +function plgVerzePluginu(AJakaVerze: TplgJakaVerze): String; +function plgObecnaVerze(Averze: Int64; AJakaVerze: TplgJakaVerze): String; +function plgNactiVerziPluginuZDB(Helios: IHelios; var ZmenyOK: Boolean): String; +function plgPorovnejVerziPluginuSVerziDB(const VerzeDB: String): TplgPorovnaniVerzi; +function plgVerzeSQLServeru(AVerze: Integer): String; + +// --- prace s tabulkami a atributy ------------------------------------------- +function plgJmenoSys2Tabulka(const AJmenoSys: String): TplgTabulka; +function plgGetTabulkaDef(aTabulka : TplgTabulka): PplgTabulkaDef; +function plgJmenoTabulky(aTabulka : TplgTabulka): String; +function plgVerejneJmenoTabulky(const AJmenoSys: String) : String; +function plgAtribut(aTabulka: TplgTabulka; const AJmenoSysAtributuBezTabulky : String): PplgAtributTabulky; overload; +function plgAtribut(const AJmenoSysAtributu : String): PplgAtributTabulky; overload; +function plgSetrideneAtributy(aTabulka : TplgTabulka): TStringList; +function plgSkupinaAtributu(ATypAtributu: TplgTypAtributu) : TplgSkupinaAtributu; +function plgMuzeBytSumovat(aTypAtributu : TplgTypAtributu): Boolean; +function plgHodnotaZKonverze(JeNULL: Boolean; const Hodnota: String; SLKonverze: TStringList): String; +// pouze cisty typ (bez IDENTITY, NULL apod.) - napr. INT, VARCHAR(20), NUMERIC(19,6) +function plgTypAtributu2Str(PA: PplgAtributTabulky): String; +function plgStr2TypAtributu(const ANazevTypu: String; APrecision, AScale: Integer): TplgTypAtributu; + +// --- prehledy --------------------------------------------------------------- +function plgJmenoView2Browse(const AJmenoView: String): TplgBrowse; +function plgBrowse2BID(Helios: IHelios; Browse: TplgBrowse): Integer; +function plgBID2JmenoView(Helios: IHelios; BID: Integer): String; +function plgJeObecnyPrehled(const NazevSys: String): Boolean; overload; +function plgJeObecnyPrehled(BID: Integer): Boolean; overload; +// VBL: 21.4.2018 funkce vrac BID dle systmovho jmna +function plgJmenoView2BID(Helios: IHelios; AJmenoView: String): Integer; + +// --- databaze --------------------------------------------------------------- +function plgGetDBName(Helios: IHelios): String; +function plgExistuje(Helios: IHelios; const Tabulka, Podminka: String): Boolean; +function plgSkriptProDeleteJednohoZaznamu(Tabulka: TplgTabulka; KontrolaBE: Boolean): String; +function plgAtributExistujeVDatabazi(Helios: IHelios; const Tabulka, Atribut: String): Boolean; + +// --- zurnal ----------------------------------------------------------------- +procedure plgZapisDoZurnalu(Helios: IHelios; Uroven: Byte; Udalost: Integer; const Akce: String); + +// --- vraci nazev DLL pluginu s celou cestou --------------------------------- +function plgGetPluginPathAndName: String; + +// --- vraci cestu na TEMP adresar +function plgGetTemporaryPath: string; + +// --- vraci nazev docasneho souboru s danym prefixem (prvni 3 znaky) a priponou +function plgGetTemporaryFileName(Prefix, Extension : String): String; + +// --- testuje existenci prepinace /XX (instalace bez preruseni) -------------- +function plgJeParametrXX: Boolean; + +// --- testuje existenci prepinace /X (tichy chod) ---------------------------- +function plgJeParametrX: Boolean; + +// --- jsem v modu tiche instalace? (vynuceno bud ExtKomID = -3 nebo /XX) ----- +function plgJeTichaInstalace: Boolean; + +// --- vrati nazev pocitace --------------------------------------------------- +function plgJmenoPocitace: String; + +// --- produkt ---------------------------------------------------------------- +function plgJeToHeliosEasy(Helios: IHelios): Boolean; +function plgJeToHeliosGermany(Helios: IHelios): Boolean; + +// --- centruje form na obrazovce --------------------------------------------- +// - na rozdil od poScreenCenter bere ohled na TaskBar +procedure plgCenterForm(AForm : TForm); +// --- minimalizuje aplikaci -------------------------------------------------- +function plgMinimizeApplication(AForm: TForm; var AMessage: TWMSysCommand): Boolean; + +// --- nahozeni, shozeni a test priznaku blokovani editoru -------------------- +// - predpoklada dotaz na jeden radek !!! +function plgZablokujZaznam(Helios: IHelios; const TabName, Where : String): Boolean; +function plgOdblokujZaznam(Helios: IHelios; const TabName, Where : String): Boolean; +function plgJeZaznamBlokovan(Helios: IHelios; const TabName, Where : String): Boolean; + +// --- preklad hlasek --------------------------------------------------------- +function plgCtiOznam(const AHlaska: String): String; overload; +function plgCtiOznam(ATxt: TplgTxt): String; overload; +function plgPrepniJazykoveDLL(Helios: IHelios; Jazyk1, Jazyk2: Integer): Boolean; + +// --- prelozeni vyjimek s cislem vetsim nebo rovno 5000000 ----------------- +function plgPrelozException(const Hlaska: String): String; + +// --- RTTI procedury a funkce - pracuji s published atributy ----------------- +function plgHasPropertyRTTI(Instance: TObject; const aProperty : String): Boolean; +function plgGetStringPropValueOfObjectRTTI( + Instance: TObject; const aProperty: String; var aValue: String): Boolean; +function plgGetObjectPropValueOfObjectRTTI( + Instance: TObject; const aProperty: String; var aValue: TObject): Boolean; +procedure plgSetPropertiesOfObjectRTTI( + Instance: TObject; const AProperty: array of string; const AValues: array of const); +procedure plgSetPropertiesOfListOfObjectsRTTI( + AObjectList: TList; const AProperty: array of string; const AValues: array of const); overload; +procedure plgSetPropertiesOfListOfObjectsRTTI( + AObjectList: TStringList; const AProperty: array of string; const AValues: array of const); overload; +procedure plgSetPropertiesOfArrayOfObjectsRTTI( + const AObjectArray: array of TObject; const AProperty: array of string; const AValues: array of const); + +// --- prace s retezci -------------------------------------------------------- +// - odstrani z retezce S zadanou mnozinu znaku +function plgFilterStr(const S: String; CS: TSysCharSet): String; +// - odstrani vsechny znaky krome zadanych +function plgFilterVseKrome(const S: string; CS: TSysCharSet): string; +// - vrati retezec ze Znaku o delce Delka +function plgCharStr(Znak: Char; Delka: Integer): String; inline; +// - prevede retezec do hexa vyjadreni pouzitelne pro SQL +// - napr. '012:' -> '0x3031323A' +function plgTextToBinary(const S: AnsiString): String; +// Unicode varianta QuotedStr(), tedy N'...' (pokud pouvm v neUnicode Delphi, tak je to to sam, co QuotedStr()) } +// pouvat jen na SQL-typy: na NCHAR, NVARCHAR, NTEXT, ne nap. na DATETIME, CHAR, VARCHAR, TEXT } +function plgNQuotedStr(const S: string): string; inline; +// zrusi z GUIDStr zavorky a pomlcky +function plgGUIDBezPomlcek(const GUIDStr: String): String; + +// --- prace s Varianty ------------------------------------------------------- +// - porovna 2 varianty, funguje i s variantnim polem (s dimenzi 1) +function plgVarSameValue(const A, B: Variant): Boolean; + +// --- fonty ------------------------------------------------------------------ +function plgFontExistuje(const FaceName: String): Boolean; +function plgTestMSSansSerifFont(const AFontName: string): String; + +// --- podpora pro praci s konverzi ------------------------------------------- +// - vrati obracenou konverzi: misto 1=Ano vrati Ano=1 +function plgObracenaKonverze(const AKonverze : String) : TStringList; + +// - plni kombo externi konverzi - stejne texty, ale nektere chybi +function plgNaplnNeDBComboZVenku(ACombo: TCustomComboBox; const AKonverze : String; + ATridit: Boolean = False) : Boolean; +// - plni kombo externi konverzi +function plgNaplnComboZVenku(ADBCombo: TDBComboBox; AKonverze : String): Boolean; + +// --- podpora pro prevod hodnot do SQL skriptu ------------------------------- +// - Vrati datum ve formatu nezavislem na nastaveni SET DATETIME dmy +// - Pokud je ADate rovno 0, vraci NULL !!! +function plgGetIndependentSQLDate(ADate: TDateTime): String; +function plgGetIndependentSQLDateTime(ADateTime: TDateTime; Quotovat : Boolean = True): String; + +// - Vrati cislo jako string ve formatu SQL nezavislem na mistnim nastaveni +// - AMaska ... maska pro prikaz Format, napr. '%.2f' +function plgGetIndependentSQLFloat(const AMaska: String; ACislo: Extended): String; + +// --- zobrazi okno s memo komponentou se zadanym textem ---------------------- +procedure plgHelpForm(const ACaption, AText: String); + +// --- prace s definicemi ----------------------------------------------------- +function plgVratVztah(Index: Integer): PplgVztahDef; +function plgVratExtAkci(Index: Integer): PplgExtAkceDef; +function plgVratExtAttr(Index: Integer): PplgExterniAtribut; +function plgVratExtTrigger(Index: Integer): PplgExterniTrigger; +function plgVratZmenovySkript(Index : Integer): PplgZmenovySkript; +function plgVratUProc(Index: Integer): PplgUlozenaProcedura; +function plgVratUzivFunkci(Index: Integer): PplgUzivatelskaFunkce; + +// - kdyz neni definovana zadna tabulka, vrati tZadna a False +function plgJeNejakaTabulka(var Prvni: TplgTabulka): Boolean; +// - kdyz neni definovana zadny prehled, vrati bZadny a False +function plgJeNejakyPrehled(var Prvni: TplgBrowse): Boolean; +// - kdyz neni definovana zadny soudek, vrati sdNeniVidet a False +function plgJeNejakySoudek(var Prvni: TplgSoudek): Boolean; + +// --- konfiguracni objekt pluginu -------------------------------------------- +function PluginKonfig: TPluginKonfig; + +// --- zakladni inicializace -------------------------------------------------- +procedure InicializaceJadraPluginu(Helios: IHelios); + +// --- spusti specifickou akci nad danou tabulkou ----------------------------- +// - navratova hodnota ma smysl pouze pro akci plgGlobAkce_GenerujPrehledy +// - v takovem pripade vraci skript pro vygenerovani externich akci +function SpustAkciPluginu(Helios: IHelios; Browse: TplgBrowse; const GUIDAkce: String): String; +function SpustAkciPluginuProTab(Helios: IHelios; BrowseID: Integer; const GUIDAkce: String): String; + +// --- provede vygenerovani, popr. pregenerovani vsech zakladnich prehledu ---- +function plgExtKomIDInstalace(Helios: IHelios): Boolean; +procedure InstalacePluginu(Helios: IHelios; TichaInstalace: Boolean); + +// --- zobrazeni informace o pluginu ------------------------------------------ +procedure InformaceOPluginu(Helios: IHelios); + +// --- preklad hlasek --------------------------------------------------------- +procedure plgPresunHlaskyNaWeb(Helios: IHelios); +procedure plgStahniZWebuJazykovaDLL(Helios: IHelios); + +// --- controller pro editory ------------------------------------------------- +procedure SpustControllerEditoru(Helios: IHelios); + +var + Global_Legislativa : Integer = -1; + +{ =========================================================================== } + +implementation + +uses + Windows, Controls, Types, TypInfo, Math, ComObj, Variants, + sqIcons, + plgEdit, plgTable, plgInstalace, plgUta, plgSoudky, plgDMGlob, plgLadit, + plgUProc, plgFunkce, plgZmeny, plgExtAttr, plgExtAkce, plgExtTrigger, + plgVazby, plgHlasky, plgBrowse, plgAkce, plgAbout, plgPreklady, + plgController, plgExtController + ; + +var + InicializaceProbehla: Boolean = False; + + Global_PluginKonfig: TPluginKonfig = nil; + + AktivniJazyk1: Integer = Cplg_jJazykNedefinovan; + AktivniJazyk2: Integer = Cplg_jJazykNedefinovan; + AktivniJazyky: TStringList = nil; + +type + TplgPrekladHlasekA = function(LW: LongWord): PAnsiChar; + TplgPrekladHlasekW = function(LW: LongWord): PWideChar; + TplgPrekladHlasekCP = function(LW: LongWord; var CP: Integer): PAnsiChar; stdcall; + + TplgAktivniJazyk = class + protected + FHandle_JazykDLL: HINST; + public + destructor Destroy; override; + function CtiOznam(AHlaska: TplgTxt): string; virtual; abstract; + end; + + TplgJazykPrekladHlasekA = class(TplgAktivniJazyk) + private + FPreklad: TplgPrekladHlasekA; + public + constructor Create(AHandleDLL: HINST; APreklad: TplgPrekladHlasekA); + function CtiOznam(AHlaska: TplgTxt): string; override; + end; + + TplgJazykPrekladHlasekW = class(TplgAktivniJazyk) + private + FPreklad: TplgPrekladHlasekW; + public + constructor Create(AHandleDLL: HINST; APreklad: TplgPrekladHlasekW); + function CtiOznam(AHlaska: TplgTxt): string; override; + end; + + TplgJazykPrekladHlasekCP = class(TplgAktivniJazyk) + private + FPreklad: TplgPrekladHlasekCP; + public + constructor Create(AHandleDLL: HINST; APreklad: TplgPrekladHlasekCP); + function CtiOznam(AHlaska: TplgTxt): string; override; + end; + + TplgJazykPrekladHlasek04 = class(TplgAktivniJazyk) + public + function CtiOznam(AHlaska: TplgTxt): string; override; + end; + +{ ########################################################################### } + +destructor TplgAktivniJazyk.Destroy; +begin + if FHandle_JazykDLL <> 0 then + FreeLibrary(FHandle_JazykDLL); + + inherited; +end; + +{ --------------------------------------------------------------------------- } + +constructor TplgJazykPrekladHlasekA.Create(AHandleDLL: HINST; APreklad: TplgPrekladHlasekA); +begin + FHandle_JazykDLL := AHandleDLL; + FPreklad := APreklad; +end; + +{ --------------------------------------------------------------------------- } + +function TplgJazykPrekladHlasekA.CtiOznam(AHlaska: TplgTxt): string; + var + LAnsiS: RawByteString; +begin + LAnsiS := FPreklad(GplgHlasky[AHlaska].W); + SetCodePage(LAnsiS, 1250, False); //hlky "po staru" jsou vdy v CP1250 + Result := string(LAnsiS); +end; + +{ --------------------------------------------------------------------------- } + +constructor TplgJazykPrekladHlasekW.Create(AHandleDLL: HINST; APreklad: TplgPrekladHlasekW); +begin + FHandle_JazykDLL := AHandleDLL; + FPreklad := APreklad; +end; + +{ --------------------------------------------------------------------------- } + +function TplgJazykPrekladHlasekW.CtiOznam(AHlaska: TplgTxt): string; +begin + Result := FPreklad(GplgHlasky[AHlaska].W); +end; + +{ --------------------------------------------------------------------------- } + +constructor TplgJazykPrekladHlasekCP.Create(AHandleDLL: HINST; APreklad: TplgPrekladHlasekCP); +begin + FHandle_JazykDLL := AHandleDLL; + FPreklad := APreklad; +end; + +{ --------------------------------------------------------------------------- } + +function TplgJazykPrekladHlasekCP.CtiOznam(AHlaska: TplgTxt): string; + var + LAnsiS: RawByteString; + CP: Integer; +begin + LAnsiS := FPreklad(GplgHlasky[AHlaska].W, CP); + SetCodePage(LAnsiS, CP, False); + Result := string(LAnsiS); +end; + +{ --------------------------------------------------------------------------- } + +function TplgJazykPrekladHlasek04.CtiOznam(AHlaska: TplgTxt): string; +begin + Result := GplgHlasky[AHlaska].SK; +end; + +{ =========================================================================== } + +function PluginKonfig: TPluginKonfig; +begin + if not Assigned(Global_PluginKonfig) then + Global_PluginKonfig := TPluginKonfig.Create; + + Result := Global_PluginKonfig; +end; + +{ --------------------------------------------------------------------------- } + +function SpustAkciPluginu(Helios: IHelios; Browse: TplgBrowse; const GUIDAkce: String): String; + var + plgAkcePrehleduClass: TplgAkcePrehleduClass; + frmPlgEditorClass: TfrmPlgEditorClass; + AP: TplgAkcePrehledu; +begin + with Cplg_SeznamVychozichNastaveniBrowse[Browse] do + begin + plgAkcePrehleduClass := TplgAkcePrehleduClass(DMAkceClass); + frmPlgEditorClass := TfrmPlgEditorClass(EditorClass); + end; + + if not Assigned(plgAkcePrehleduClass) then + Result := '' + else + begin + AP := plgAkcePrehleduClass.Create(Helios, Browse, frmPlgEditorClass); + plgLadit_KontrolaTridyAkce(AP); + with AP do + try + Result := SpustAkci(GUIDAkce); + finally + Free; + end; + end; +end; + +{ --------------------------------------------------------------------------- } + +function SpustAkciPluginuProTab(Helios: IHelios; BrowseID: Integer; const GUIDAkce: String): String; + var + EA: PplgExtAkceDef; + II: Integer; + plgAkcePrehleduClass: TplgAkcePrehleduClass; +begin + Result := ''; + + II := 1; + EA := plgVratExtAkci(II); + while Assigned(EA) do + begin + if EA.BrowseID = BrowseID then + begin + plgAkcePrehleduClass := TplgAkcePrehleduClass(EA.DMAkceClass); + if Assigned(plgAkcePrehleduClass) then + begin + with plgAkcePrehleduClass.CreateTab(Helios, EA) do + try + Result := SpustAkci(GUIDAkce); + finally + Free; + end; + end; + Exit; + end; + + Inc(II); + EA := plgVratExtAkci(II); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgObecnaVerze(Averze: Int64; AJakaVerze: TplgJakaVerze): String; + var + LMajor, LMinor, LDatum : String; + + { +++++++++++++++++++++++++++ } + + function UdelejCislo(ACislo: Int64): string; + begin + Result := Format('%.2x', [ACislo]); + if Result[1] = '0' then + Result := Result[2]; + end; + + { +++++++++++++++++++++++++++ } + +begin + LMajor := UdelejCislo(Lo(AVerze shr (32 + 4 + 4))); // '1' + LMinor := UdelejCislo(Lo(AVerze shr (32))); // '0' + LDatum := Format('%.8x', [LongWord(AVerze)]); // '19990924' + case AJakaVerze of + jvZakladni : Result := Format('%s.%s', [LMajor, LMinor]); + jvMajor : Result := LMajor; + jvMinor : Result := LMinor; + jvDatumRRRRMMDD : Result := LDatum; + jvCela, + jvCelaUnicode : Result := Format('%s.%s.%s.%s', [LMajor, LMinor, Copy(LDatum, 1, 4), Copy(LDatum, 5, MaxInt)]); + jvHexa : Result := Format('%.12x', [AVerze]); + else Result := ''; + end; + + if AJakaVerze = jvCelaUnicode then + Result := Result + ' - UNICODE' + {$IFDEF VER220}+' XE'{$ENDIF} + {$IFDEF VER240}+' XE3'{$ENDIF} + {$IFDEF VER280}+' XE7'{$ENDIF} + {$IFDEF VER310}+' 10.1'{$ENDIF} + {$IFDEF VER330}+' 10.3'{$ENDIF} + {$IFDEF VER340}+' 10.4'{$ENDIF} + {$IFDEF VER350}+' 11'{$ENDIF} + {$IFDEF VER360}+' 12'{$ENDIF}; +end; + +{ --------------------------------------------------------------------------- } + +function plgVerzePluginu(AJakaVerze: TplgJakaVerze): String; +begin + Result := plgObecnaVerze(CVerzePluginu, AJakaVerze); +end; + +{ --------------------------------------------------------------------------- } + +function plgVerzeSQLServeru(AVerze: Integer): String; +begin + if AVerze >= Cplg_SQLVersion_2022 then + Result := '2022' + else + if AVerze >= Cplg_SQLVersion_2019 then + Result := '2019' + else + if AVerze >= Cplg_SQLVersion_2017 then + Result := '2017' + else + if AVerze >= Cplg_SQLVersion_2016 then + Result := '2016' + else + if AVerze >= Cplg_SQLVersion_2014 then + Result := '2014' + else + if AVerze >= Cplg_SQLVersion_2012_SP2 then + Result := '2012 SP2' + else + if AVerze >= Cplg_SQLVersion_2012_SP1 then + Result := '2012 SP1' + else + if AVerze >= Cplg_SQLVersion_2012 then + Result := '2012' + else + if AVerze >= Cplg_SQLVersion_2008R2_SP3 then + Result := '2008 R2 SP3' + else + if AVerze >= Cplg_SQLVersion_2008R2_SP2 then + Result := '2008 R2 SP2' + else + if AVerze >= Cplg_SQLVersion_2008R2_SP1 then + Result := '2008 R2 SP1' + else + if AVerze >= Cplg_SQLVersion_2008R2 then + Result := '2008 R2' + else + if AVerze >= Cplg_SQLVersion_2008_SP4 then + Result := '2008 SP4' + else + if AVerze >= Cplg_SQLVersion_2008_SP3 then + Result := '2008 SP3' + else + if AVerze >= Cplg_SQLVersion_2008_SP2 then + Result := '2008 SP2' + else + if AVerze >= Cplg_SQLVersion_2008_SP1 then + Result := '2008 SP1' + else + if AVerze >= Cplg_SQLVersion_2008 then + Result := '2008' + else + if AVerze >= Cplg_SQLVersion_2005_SP3 then + Result := '2005 SP3' + else + if AVerze >= Cplg_SQLVersion_2005_SP2 then + Result := '2005 SP2' + else + if AVerze >= Cplg_SQLVersion_2005_SP1 then + Result := '2005 SP1' + else + if AVerze >= Cplg_SQLVersion_2005 then + Result := '2005' + else + if AVerze >= Cplg_SQLVersion_2000_SP4 then + Result := '2000 SP4' + else + if AVerze >= Cplg_SQLVersion_2000_SP3 then + Result := '2000 SP3' + else + if AVerze >= Cplg_SQLVersion_2000_SP2 then + Result := '2000 SP2' + else + if AVerze >= Cplg_SQLVersion_2000_SP1 then + Result := '2000 SP1' + else + if AVerze >= Cplg_SQLVersion_2000 then + Result := '2000' + else + if AVerze >= Cplg_SQLVersion_7_0_SP4 then + Result := '7.00 SP4' + else + if AVerze >= Cplg_SQLVersion_7_0_SP3 then + Result := '7.00 SP3' + else + if AVerze >= Cplg_SQLVersion_7_0_SP2 then + Result := '7.00 SP2' + else + if AVerze >= Cplg_SQLVersion_7_0_SP1 then + Result := '7.00 SP1' + else + Result := '7.00'; + + Result := Format('MS SQL Server %s', [Result]); +end; + +{ --------------------------------------------------------------------------- } + +function plgNactiVerziPluginuZDB(Helios: IHelios; var ZmenyOK: Boolean): String; + var + Q: IHeQuery; +begin + Q := Helios.OpenSQL( + Format( + 'IF EXISTS(SELECT*FROM TabPluginInfo WHERE NazevSys=%s)'#13+ + 'SELECT VerzePluginu, CAST(ZmenyOK AS INT) FROM TabPluginInfo WHERE NazevSys=%0:s'#13+ + 'ELSE'#13+ + 'SELECT %s, CAST(0 AS INT)', + [plgNQuotedStr(PluginKonfig.PluginSystemoveJmeno), + plgNQuotedStr(Cplg_VerzePluginu_Nula_Str)])); + + Result := varToStr(Q.FieldValues(0)); + ZmenyOK := (Q.FieldValues(1) = 1); +end; + +{ --------------------------------------------------------------------------- } + +function plgPorovnejVerziPluginuSVerziDB(const VerzeDB: String): TplgPorovnaniVerzi; + var + VerzePlg: String; +begin + VerzePlg := plgVerzePluginu(jvHexa); + + if SameText(VerzeDB, VerzePlg) then + Result := pvStejneVerze + else + if VerzeDB > VerzePlg then + Result := pvDBMaVetsi + else + Result := pvDBMaMensi; +end; + +{ --------------------------------------------------------------------------- } + +function plgGetDBName(Helios: IHelios): String; +begin + Result := varToStr(Helios.OpenSQL('SELECT DB_NAME()').FieldValues(0)); +end; + +{ --------------------------------------------------------------------------- } + +function plgExistuje(Helios: IHelios; const Tabulka, Podminka: String): Boolean; +begin + Result := + (Helios.OpenSQL( + Format('IF EXISTS(SELECT*FROM %s WHERE %s) SELECT 1 ELSE SELECT 0', + [Tabulka, Podminka])).FieldValues(0) = 1); +end; + +{ --------------------------------------------------------------------------- } + +function plgAtributExistujeVDatabazi(Helios: IHelios; const Tabulka, Atribut: String): Boolean; +begin + Result := + (Helios.OpenSQL( + Format('IF COLUMNPROPERTY(OBJECT_ID(N''%s'',N''U''),N''%s'',N''AllowsNull'')IS NOT NULL SELECT 1 ELSE SELECT 0', + [Tabulka, Atribut])).FieldValues(0) = 1); +end; + +{ --------------------------------------------------------------------------- } + +procedure plgZapisDoZurnalu(Helios: IHelios; Uroven: Byte; Udalost: Integer; const Akce: String); + var + InfoText: String; +begin + InfoText := Copy(PluginKonfig.PluginSystemoveJmeno + ' - ' + Akce, 1, 255); + Helios.ExecSQL( + Format('EXEC dbo.hp_ZapisDoZurnalu %d,%d,%s', + [Uroven, Udalost, plgNQuotedStr(InfoText)])); +end; + +{ --------------------------------------------------------------------------- } + +function plgJmenoSys2Tabulka(const AJmenoSys: String): TplgTabulka; +begin + if plgJeNejakaTabulka(Result) and (Trim(AJmenoSys) <> '') then + for Result := Result to High(TplgTabulka) do + if SameText(AJmenoSys, Cplg_SeznamTabulek[Result].JmenoSys) then Exit; + + // nic jsme nenalezli + Result := tZadna; +end; + +{ --------------------------------------------------------------------------- } + +function plgJmenoView2Browse(const AJmenoView: String): TplgBrowse; +begin + if plgJeNejakyPrehled(Result) and (Trim(AJmenoView) <> '') then + for Result := Result to High(TplgBrowse) do + if SameText(AJmenoView, Cplg_SeznamVychozichNastaveniBrowse[Result].JmenoView) then Exit; + + // nic jsme nenalezli + Result := bZadny; +end; + +{ --------------------------------------------------------------------------- } + +function plgBrowse2BID(Helios: IHelios; Browse: TplgBrowse): Integer; + var + Q: IHeQuery; +begin + with Cplg_SeznamVychozichNastaveniBrowse[Browse] do + begin + if JmenoView = '' then + Result := 0 + else + if not plgJeObecnyPrehled(JmenoView) then + Result := 0 + else + begin + Q := Helios.OpenSQL( + Format('SELECT Cislo FROM TabObecnyPrehled WHERE NazevSys=%s', + [plgNQuotedStr(JmenoView)])); + // [RK 26.07.2005] doplnena vyjimka + if Q.RecordCount = 0 then + raise Exception.Create( + Format(plgCtiOznam(plxJadroNebylNalezenPrehled_X_Y)+#13#13#1'%s'#1, + [JmenoView, Jmeno, + plgCtiOznam(plxJadroJeTrebaSpustitInstalaciPluginu)])) + else + Result := Q.FieldValues(0) + Cplg_ObecnePohledy_BID_Base; + end; + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgBID2JmenoView(Helios: IHelios; BID: Integer): String; + var + Q: IHeQuery; +begin + if not plgJeObecnyPrehled(BID) then + Result := '' + else + begin + Q := Helios.OpenSQL( + Format('SELECT NazevSys FROM TabObecnyPrehled WHERE Cislo=%d', + [BID - Cplg_ObecnePohledy_BID_Base])); + + if Q.RecordCount = 0 then + raise Exception.Create( + Format(plgCtiOznam(plxJadroNebylNalezenPrehledCislo_X)+#13#13#1'%s'#1, + [BID - Cplg_ObecnePohledy_BID_Base, + plgCtiOznam(plxJadroJeTrebaSpustitInstalaciPluginu)])) + else + Result := varToStr(Q.FieldValues(0)); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgJeObecnyPrehled(const NazevSys: String): Boolean; +begin + Result := SameText(Cplg_View_Prefix, Copy(NazevSys, 1, Cplg_View_PrefixLen)); +end; + +{ --------------------------------------------------------------------------- } + +function plgJeObecnyPrehled(BID: Integer): Boolean; +begin + Result := (BID >= Cplg_ObecnePohledy_BID_Base); +end; + +{ --------------------------------------------------------------------------- } + +function plgJmenoView2BID(Helios: IHelios; AJmenoView: String): Integer; + var + Q: IHeQuery; +begin + Result := 0; + if (Trim(AJmenoView) <> '') and plgJeObecnyPrehled(AJmenoView) then + begin + Q := Helios.OpenSQL(Format('SELECT Cislo FROM TabObecnyPrehled WHERE NazevSys=%s', [plgNQuotedStr(AJmenoView)])); + if Q.RecordCount = 0 then + raise Exception.Create(Format(plgCtiOznam(plxJadroNebylNalezenPrehled_X_Y),[AJmenoView, AJmenoView])) + else + Result := Q.FieldValues(0) + Cplg_ObecnePohledy_BID_Base; + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgGetTabulkaDef(aTabulka : TplgTabulka): PplgTabulkaDef; +begin + Result := Cplg_SeznamTabulek[ATabulka]; +end; + +{ --------------------------------------------------------------------------- } + +function plgJmenoTabulky(aTabulka : TplgTabulka): String; +begin + if Assigned(Cplg_SeznamTabulek[aTabulka]) then + Result := Cplg_SeznamTabulek[aTabulka].JmenoSys + else + Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +function plgMuzeBytSumovat(aTypAtributu : TplgTypAtributu): Boolean; +begin + Result := (not (aTypAtributu in [taBoolean])) and + (plgSkupinaAtributu(aTypAtributu) in [skpCelaCisla, skpDesetinnaCisla]); +end; + +{ --------------------------------------------------------------------------- } + +function plgHodnotaZKonverze(JeNULL: Boolean; const Hodnota: String; SLKonverze: TStringList): String; +begin + if not JeNULL then + begin + if SLKonverze.IndexOfName(Hodnota) <> -1 then + Result := SLKonverze.Values[Hodnota] + else + Result := Hodnota; + end + else + begin + if SLKonverze.IndexOfName('NULL') > -1 then + Result := SLKonverze.Values['NULL'] + else + Result := plgCtiOznam(plxJadroNeni); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgSkupinaAtributu(ATypAtributu: TplgTypAtributu) : TplgSkupinaAtributu; +begin + case ATypAtributu of + taInt, + taIdentity, + taInt64, + taIdentity64, + taSmallInt, + taByte, + taBoolean: + Result := skpCelaCisla; + + taNVarChar, + taNChar, + taNText, + taVarChar, + taChar, + taText: + Result := skpRetezce; + + taDateTime, + taTime: + Result := skpDatumy; + + taFloat, + taNumeric_4_2, + taNumeric_5_2, + taNumeric_7_2, + taNumeric_9_2, + taNumeric_15_0, + taNumeric_19_2, + taNumeric_19_6, + taNumeric_20_6, + taNumeric_28_0: + Result := skpDesetinnaCisla; + +// taGUID, + taBinary, + taImage: + Result := skpBinarni; + + else + Result := skpZadna; + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgTypAtributu2Str(PA: PplgAtributTabulky): String; +begin + Result := UpperCase(Cplg_GTypy[PA.Typ].T); + if (Pos('CHAR', Result) > 0) or (Pos('BINARY', Result) > 0) then + begin + if PA.Delka=Cplg_DelkaNVarcharMax then + Result := Format('%s(%s)', [Result, 'MAX']) //[JAS 13.2.2018] - rozsireni o (N)VARCHAR(MAX) + else + Result := Format('%s(%d)', [Result, PA.Delka]) + end + else + if SameText(Result, 'NUMERIC') then + Result := Format('%s(%d,%d)', [Result, Cplg_GTypy[PA.Typ].P, Cplg_GTypy[PA.Typ].S]); +end; + +{ --------------------------------------------------------------------------- } + +function plgStr2TypAtributu(const ANazevTypu: String; APrecision, AScale: Integer): TplgTypAtributu; + var + TT: TplgTypAtributu; + JeNumeric: Boolean; +begin + Result := taBlbe; + + if SameText(ANazevTypu, 'BIGINT IDENTITY') then + begin + Result := taIdentity64; + Exit; + end; + + if SameText(ANazevTypu, 'INT IDENTITY') then + begin + Result := taIdentity; + Exit; + end; + + if APrecision = -1 then + begin + if SameText(ANazevTypu, 'NVARCHAR') then Exit(taNText); + if SameText(ANazevTypu, 'VARCHAR') then Exit(taText); + end; + + JeNumeric := SameText(ANazevTypu, 'NUMERIC'); + + for TT := Succ(Low(TplgTypAtributu)) to High(TplgTypAtributu) do + begin + if SameText(ANazevTypu, Cplg_GTypy[TT].T) then + begin + if not JeNumeric then + begin + Result := TT; + Exit; + end; + + if (Cplg_GTypy[TT].P = APrecision) and (Cplg_GTypy[TT].S = AScale) then + begin + Result := TT; + Exit; + end; + end; + end; + + // pokud to je numeric a nemam ho definovany, tak vezmi ten "nejvetsi" + if JeNumeric then + Result := taNumeric_20_6; +end; + +{ --------------------------------------------------------------------------- } + +function plgVerejneJmenoTabulky(const AJmenoSys: String): String; + var + LTabulka: TplgTabulka; +begin + if plgJeNejakaTabulka(LTabulka) and (Trim(AJmenoSys) <> '') then + for LTabulka := LTabulka to High(TplgTabulka) do + if SameText(AJmenoSys, Cplg_SeznamTabulek[LTabulka].JmenoSys) then + begin + Result := Cplg_SeznamTabulek[LTabulka].Jmeno; + Exit; {!} + end; + + Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +function plgSetrideneAtributy(aTabulka: TplgTabulka): TStringList; + var + PA : PplgAtributTabulky; + II : Integer; +begin + Result := TStringList.Create; + if Cplg_SeznamTabulek[aTabulka] = nil then Exit; + + with Cplg_SeznamTabulek[aTabulka]^ do + begin + PA := Atributy; + for II := 1 to PocetAtributu do + begin + Result.AddObject(PA.JmenoSys, TObject(PA)); + Inc(PA); + end; + end; + Result.Sorted := True; // setrideni az na zaver (je to nejrychlejsi) +end; + +{ --------------------------------------------------------------------------- } + +function plgAtribut(aTabulka : TplgTabulka; + const AJmenoSysAtributuBezTabulky : String): PplgAtributTabulky; + var + PA : PplgAtributTabulky; + II : Integer; +begin + if Cplg_SeznamTabulek[aTabulka] <> nil then + begin + with Cplg_SeznamTabulek[aTabulka]^ do + begin + PA := Atributy; + for II := 1 to PocetAtributu do + begin + if SameText(AJmenoSysAtributuBezTabulky, PA.JmenoSys) then + begin + Result := PA; + Exit; {!} + end; + Inc(PA); + end; + end; + end; + + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgAtribut(const AJmenoSysAtributu : String): PplgAtributTabulky; + var + I: Integer; + LJmenoSysTabulky, + LJmenoSysAtributu: String; + LTabulka: TplgTabulka; +begin + Result := nil; + + I := Pos('.', AJmenoSysAtributu); + if I = 0 then Exit; + + LJmenoSysTabulky := Copy(AJmenoSysAtributu, 1, I-1); + LJmenoSysAtributu := Copy(AJmenoSysAtributu, I+1, MaxInt); + + LTabulka := plgJmenoSys2Tabulka(LJmenoSysTabulky); + Result := plgAtribut(LTabulka, LJmenoSysAtributu); +end; + +{ --------------------------------------------------------------------------- } + +function plgSkriptProDeleteJednohoZaznamu(Tabulka: TplgTabulka; KontrolaBE: Boolean): String; + var + PD: PplgTabulkaDef; +begin + PD := plgGetTabulkaDef(Tabulka); + + if KontrolaBE and (plgAtribut(Tabulka, plg_BlokovaniEditoru) <> nil) then + Result := Format('IF EXISTS(SELECT*FROM %s WHERE ' + plg_SystemoveCislo + '=@ID'+ + ' AND ' + plg_BlokovaniEditoru + ' IS NOT NULL)'#13+ + 'BEGIN'#13+ + 'RAISERROR(%s, 16, 1)'#13+ + 'RETURN'#13+ + 'END'#13, + [PD.JmenoSys, plgNQuotedStr(plgCtiOznam(plxJadroZaznamJeBlokovanNelzeSmazat))]) + else + Result := ''; + + Result := + Format( + 'DECLARE @ID INT'#13+ + 'SET @ID = %s'#13+ + '%s', // test blokovani editoru + ['%s', Result]); + + if PD.TriggerBeforeDelete = '' then + Result := + Format( + '%s'#13+ + 'DELETE %s WHERE ' + plg_SystemoveCislo + '=@ID', + [Result, PD.JmenoSys]) + else + Result := + Format( + '%s'#13+ + 'DECLARE @Mazat BIT'#13+ + 'SET @Mazat = 1'#13+ // moznost v TriggerBeforeDelete vypnout mazani + + 'BEGIN TRANSACTION'#13+ + + '%s'#13+ // TriggerBeforeDelete + 'IF @@ERROR <> 0 GOTO CHYBAROLLBACK'#13+ + + 'IF @Mazat = 1'#13+ + 'BEGIN'#13+ + 'DELETE %s WHERE ' + plg_SystemoveCislo + '=@ID'#13+ + 'IF @@ERROR <> 0 GOTO CHYBAROLLBACK'#13+ + 'END'#13+ + + 'IF @@TRANCOUNT <> 0 COMMIT'#13+ + 'RETURN'#13+ + + 'CHYBAROLLBACK:'#13+ + 'IF @@TRANCOUNT <> 0 ROLLBACK', + [Result, PD.TriggerBeforeDelete, PD.JmenoSys]); +end; + +{ --------------------------------------------------------------------------- } + +function plgGetPluginPathAndName: String; + var + PomName: array[0..MAX_PATH] of Char; +begin + SetString(Result, PomName, GetModuleFileName(hInstance, PomName, SizeOf(PomName))); +end; + +{ --------------------------------------------------------------------------- } + +function plgGetTemporaryPath: string; +begin + // cesta na TEMP adresar + SetLength(Result, MAX_PATH); + SetLength(Result, Windows.GetTempPath(MAX_PATH, PChar(Result))); +end; + +{ --------------------------------------------------------------------------- } + +function plgGetTemporaryFileName(Prefix, Extension : String): String; + var + Temp : String; + Pocet : Integer; + Existuje : Boolean; +begin + // cesta na TEMP adresar + Temp := plgGetTemporaryPath; + + Pocet := 0; + repeat + Result := StringOfChar(#0, MAX_PATH); + // tato funkce nevraci vyslednou delku jako napr. GetTempPath + GetTempFileName(PChar(Temp), PChar(Prefix), 0, PChar(Result)); + Result := StrPas(PChar(Result)); + + if Length(Extension) > 0 then + begin + if Extension[1] <> '.' then + Extension := '.' + Extension; + + Temp := Result; + Result := ChangeFileExt(Temp, Extension); + + // zruseni puvodniho souboru (ma koncovku TMP) + if not SameText(Temp, Result) then + if FileExists(Temp) then SysUtils.DeleteFile(Temp); + + // pokud soubor existuje, tak to projedu cele znovu (max. 10x) + Existuje := FileExists(Result); + end + else + Existuje := False; + + Inc(Pocet); + until (not Existuje) or (Pocet >= 10); + + if Existuje then Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +function plgJmenoPocitace: String; + var + DW: DWORD; +begin + DW := MAX_COMPUTERNAME_LENGTH + 1; + SetLength(Result, DW); + if GetComputerName(PChar(Result), DW) then + SetLength(Result, DW) + else + Result := ''; +end; + +{ --------------------------------------------------------------------------- } + +function plgJeToHeliosEasy(Helios: IHelios): Boolean; + var + S: string; +begin + S := Copy(Helios.SerNum, 1, Cplg_SerNum_PrefixLen); + Result := SameText(S, Cplg_Prefix_SN_HEED) or SameText(S, Cplg_Prefix_SN_HEEF); +end; + +{ --------------------------------------------------------------------------- } + +function plgJeToHeliosGermany(Helios: IHelios): Boolean; + var + S: string; +begin + S := Copy(Helios.SerNum, 1, Cplg_SerNum_PrefixLen); + Result := SameText(S, Cplg_Prefix_SN_ASDT) or SameText(S, Cplg_Prefix_SN_ASDE); +end; + +{ --------------------------------------------------------------------------- } + +procedure plgCenterForm(AForm: TForm); + var + LRect: TRect; + LMon: TMonitor; +begin + // [RK 26.05.2010] centrovani na monitoru, kde okno lezi + with AForm do + begin + LMon := Monitor; + if LMon <> nil then + LRect := LMon.WorkareaRect + else + LRect := Screen.WorkareaRect; + + SetBounds(LRect.Left + ((RectWidth(LRect) - Width) div 2), + LRect.Top + ((RectHeight(LRect) - Height) div 2), Width, Height); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgMinimizeApplication(AForm: TForm; var AMessage: TWMSysCommand): Boolean; +begin + // [RK 18.08.2011] uprava podle Heliosu + Result := ((AMessage.CmdType and $FFF0) = SC_MINIMIZE); + if Result then + begin + AMessage.Result := 0; + EnableWindow(Application.Handle, True); + ShowWindow(Application.Handle, SW_MINIMIZE); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgZablokujZaznam(Helios: IHelios; const TabName, Where : String): Boolean; +begin + // pokud ho neblokuje nekdo jiny, tak ho muzu zablokovat + Result := + (Helios.OpenSQL( + Format( + 'IF (SELECT ' + plg_BlokovaniEditoru + ' FROM %s WHERE %s) IS NULL'#13+ + 'BEGIN'#13+ + 'UPDATE %0:s SET ' + plg_BlokovaniEditoru + '=%2:d WHERE %1:s'#13+ + 'SELECT 1'#13+ + 'END'#13+ + 'ELSE'#13+ + 'SELECT 0', + [{0}TabName, {1}Where, {2}Helios.UserId])).FieldValues(0) = 1); +end; + +{ --------------------------------------------------------------------------- } + +function plgOdblokujZaznam(Helios: IHelios; const TabName, Where : String): Boolean; +begin + // pokud ho blokuji ja, tak muzu odblokovat + Result := + (Helios.OpenSQL( + Format( + 'IF (SELECT ' + plg_BlokovaniEditoru + ' FROM %s WHERE %s)=%d'#13+ + 'BEGIN'#13+ + 'UPDATE %0:s SET ' + plg_BlokovaniEditoru + '=NULL WHERE %s'#13+ + 'SELECT 1'#13+ + 'END'#13+ + 'ELSE'#13+ + 'SELECT 0', + [{0}TabName, {1}Where, {2}Helios.UserId])).FieldValues(0) = 1); +end; + +{ --------------------------------------------------------------------------- } + +function plgJeZaznamBlokovan(Helios: IHelios; const TabName, Where : String): Boolean; +begin + Result := + (Helios.OpenSQL( + Format( + 'IF (SELECT ' + plg_BlokovaniEditoru + ' FROM %s WHERE %s) IS NULL SELECT 0 ELSE SELECT 1', + [{0}TabName, {1}Where])).FieldValues(0) = 1); +end; + +{ =========================================================================== } + +function _plgCtiOznam1(AHlaska: TplgTxt): String; +begin + Result := GplgHlasky[AHlaska].H; +end; + +{ --------------------------------------------------------------------------- } + +function _plgCtiOznamX(AHlaska: TplgTxt): String; // cizi jazyky + var + II: Integer; +begin + for II := 0 to AktivniJazyky.Count-1 do + begin + Result := TplgAktivniJazyk(AktivniJazyky.Objects[II]).CtiOznam(AHlaska); + if Result <> '' then Exit; + end; + + Result := GplgHlasky[AHlaska].H; +end; + +{ --------------------------------------------------------------------------- } + +var + { default je etina s diakritikou (1) } + _plgCtiOznam : function(ATxt : TplgTxt) : String = _plgCtiOznam1; + +{ --------------------------------------------------------------------------- } + +function plgCtiOznam(ATxt: TplgTxt): String; +begin + Result := _plgCtiOznam(ATxt); +end; + +{ --------------------------------------------------------------------------- } + +function plgCtiOznam(const AHlaska: String): String; +begin + Result := AHlaska; +end; + +{ =========================================================================== } + +function plgPrelozException(const Hlaska: String): String; + var + LTxt: TplgTxt; + Cislo: Integer; +begin + Cislo := StrToIntDef(Hlaska, -1); + if Cislo >= Cplg_HlaskyBase then + for LTxt := Succ(Low(TplgTxt)) to High(TplgTxt) do + if Cislo = Integer(GplgHlasky[LTxt].W) then // pretypovani, aby nerval kompilator warning + begin + // [RK 18.07.2008] nebylo pres plgCtiOznam() + Result := plgCtiOznam(LTxt); //GplgHlasky[LTxt].H; + Exit; + end; + + Result := Hlaska; +end; + +{ --------------------------------------------------------------------------- } + +function plgHasPropertyRTTI(Instance: TObject; const aProperty : String): Boolean; +begin + Result := Assigned(GetPropInfo(Instance, aProperty)); +end; + +{ --------------------------------------------------------------------------- } + +function plgGetStringPropValueOfObjectRTTI( + Instance: TObject; const aProperty: String; var aValue: String): Boolean; + var + PropInfo : PPropInfo; +begin + PropInfo := GetPropInfo(Instance, aProperty); + if Assigned(PropInfo) then + begin + aValue := GetStrProp(Instance, PropInfo); + Result := True; + end + else + Result := False; +end; + +{ --------------------------------------------------------------------------- } + +function plgGetObjectPropValueOfObjectRTTI( + Instance: TObject; const aProperty: String; var aValue: TObject): Boolean; + var + PropInfo : PPropInfo; +begin + PropInfo := GetPropInfo(Instance, aProperty); + if Assigned(PropInfo) then + begin + aValue := GetObjectProp(Instance, PropInfo); + Result := True; + end + else + Result := False; +end; + +{ --------------------------------------------------------------------------- } + +procedure plgSetPropertiesOfObjectRTTI( Instance : TObject; + const AProperty : array of string; + const AValues : array of const); + var + JJ : Integer; + PropInfo : PPropInfo; + + { +++++++++++++++++++++++++++ } + + procedure _RaiseErrorVar(const aPropKind: String; aVarKind: Integer); + begin + raise + Exception.Create( + Format('plgMain.plgSetPropertiesOfObjectRTTI: nezapojeny typ variantu (%s,%d)', + [aPropKind, aVarKind])); + end; + + { +++++++++++++++++++++++++++ } + +begin + if not Assigned(Instance) then Exit; + + for JJ := Low(AProperty) to High(AProperty) do + begin + PropInfo := GetPropInfo(Instance, AProperty[JJ]); + if Assigned(PropInfo) then + begin + case PropInfo^.PropType^^.Kind of + tkInteger: + case AValues[JJ].VType of + vtInteger: + SetOrdProp(Instance, PropInfo, AValues[JJ].VInteger); + else + _RaiseErrorVar('tkInteger', AValues[JJ].VType); + end; + + tkEnumeration: + case AValues[JJ].VType of + vtBoolean: + SetEnumProp(Instance, PropInfo, BooleanIdents[AValues[JJ].VBoolean]); + vtString: + SetEnumProp(Instance, PropInfo, string(AValues[JJ].VString^)); + vtAnsiString: + SetEnumProp(Instance, PropInfo, string(AnsiString(AValues[JJ].VAnsiString))); + vtWideString: + SetEnumProp(Instance, PropInfo, WideString(AValues[JJ].VWideString)); + vtUnicodeString: + SetEnumProp(Instance, PropInfo, UnicodeString(AValues[JJ].VUnicodeString)); + else + _RaiseErrorVar('tkEnumeration', AValues[JJ].VType); + end; + + tkClass: + case AValues[JJ].VType of + vtObject: + SetObjectProp(Instance, PropInfo, AValues[JJ].VObject); + vtPointer: + SetObjectProp(Instance, PropInfo, TObject(AValues[JJ].VPointer)); + else + _RaiseErrorVar('tkClass', AValues[JJ].VType); + end; + + tkString, tkLString, tkWString, tkUString: + case AValues[JJ].VType of + vtString: + SetStrProp(Instance, PropInfo, string(AValues[JJ].VString^)); + vtAnsiString: + SetAnsiStrProp(Instance, PropInfo, AnsiString(AValues[JJ].VAnsiString)); + vtWideString: + SetWideStrProp(Instance, PropInfo, WideString(AValues[JJ].VWideString)); + vtUnicodeString: + SetUnicodeStrProp(Instance, PropInfo, UnicodeString(AValues[JJ].VUnicodeString)); + else + _RaiseErrorVar('tkString/tkLString/tkWString/tkUString', AValues[JJ].VType); + end; + + else + raise + Exception.Create( + Format('plgMain.plgSetPropertiesOfObjectRTTI: nezapojeny typ property (%d)', + [Integer(PropInfo^.PropType^^.Kind)])); + end; + end; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure plgSetPropertiesOfListOfObjectsRTTI( AObjectList : TList; + const AProperty : array of string; + const AValues : array of const); + var + II : Integer; +begin + if Assigned(AObjectList) then + for II := 0 to AObjectList.Count - 1 do + plgSetPropertiesOfObjectRTTI(TObject(AObjectList.Items[II]), AProperty, AValues); +end; + +{ --------------------------------------------------------------------------- } + +procedure plgSetPropertiesOfListOfObjectsRTTI( AObjectList : TStringList; + const AProperty : array of string; + const AValues : array of const); + var + II : Integer; +begin + if Assigned(AObjectList) then + for II := 0 to AObjectList.Count - 1 do + plgSetPropertiesOfObjectRTTI(AObjectList.Objects[II], AProperty, AValues); +end; + +{ --------------------------------------------------------------------------- } + +procedure plgSetPropertiesOfArrayOfObjectsRTTI(const AObjectArray : array of TObject; + const AProperty : array of string; + const AValues : array of const); + var + II : Integer; +begin + for II := Low(AObjectArray) to High(AObjectArray) do + plgSetPropertiesOfObjectRTTI(TObject(AObjectArray[II]), AProperty, AValues); +end; + +{ --------------------------------------------------------------------------- } + +function plgFilterStr(const S: String; CS: TSysCharSet): String; + var + II : Integer; +begin + Result := ''; + for II := 1 to Length(S) do + if not CharInSet(S[II], CS) then + Result := Result + S[II]; +end; + +{ ---------------------------------------------------------------------------- } + +function plgFilterVseKrome(const S: string; CS: TSysCharSet): string; + var + II : Integer; +begin + Result := ''; + for II := 1 to Length(S) do + if CharInSet(S[II], CS) then + Result := Result + S[II]; +end; + +{ --------------------------------------------------------------------------- } + +function plgCharStr(Znak: Char; Delka: Integer): String; +begin + Result := StringOfChar(Znak, Delka); +end; + +{ ---------------------------------------------------------------------------- } + +function plgTextToBinary(const S: AnsiString): String; + var + BufSize: Integer; +begin + BufSize := Length(S); + SetLength(Result, 2 + (2 * BufSize)); + Result[1] := '0'; + Result[2] := 'x'; + Classes.BinToHex(PAnsiChar(S), PWideChar(Result) + 2, BufSize); +end; + +{ --------------------------------------------------------------------------- } + +function plgNQuotedStr(const S: string): string; inline; +begin + Result := 'N' + SysUtils.QuotedStr(S); +end; + +{ --------------------------------------------------------------------------- } + +function plgGUIDBezPomlcek(const GUIDStr: String): String; +begin + Result := plgFilterStr(GUIDStr, ['{','-','}']); +end; + +{ --------------------------------------------------------------------------- } + +function plgVarSameValue(const A, B: Variant): Boolean; + var + II, XLo, XHi: Integer; +begin + if VarIsArray(A) or VarIsArray(B) then + begin + Result := False; + + // pole a nepole jsou si vdy nerovna + if (not VarIsArray(A)) or + (not VarIsArray(B)) then Exit; + + // ob pole mus mt prv jednu dimenzi + if (VarArrayDimCount(A) <> 1) or + (VarArrayDimCount(B) <> 1) then Exit; + + // pole se povauj za shodn, pokud maj stejn doln a horn index + XLo := VarArrayLowBound(A, 1); + XHi := VarArrayHighBound(A, 1); + if (XLo <> VarArrayLowBound(B, 1)) or + (XHi <> VarArrayHighBound(B, 1)) then Exit; + + // mohu porovnvat + for II := XLo to XHi do + if not VarSameValue(A[II], B[II]) then Exit; + + // kdy to dolo a sem, tak se rovnaj + Result := True; + end + else + // ani A ani B nen pole, mohu "postaru" + Result := VarSameValue(A, B); +end; + +{ --------------------------------------------------------------------------- } + +function plgObracenaKonverze(const AKonverze : String) : TStringList; + var + II, JJ : Integer; + PomStr : String; +begin + Result := TStringList.Create; + Result.Text := AKonverze; + for II := 0 to Result.Count-1 do + begin + PomStr := Result[II]; + JJ := Pos('=', PomStr); + Result[II] := Format('%s=%s', [Copy(PomStr, JJ+1, MaxInt), Copy(PomStr, 1, JJ-1)]); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgNaplnNeDBComboZVenku(ACombo : TCustomComboBox; const AKonverze : String; + ATridit: Boolean = False) : Boolean; + var + II, JJ : Integer; + SL : TStringList; +begin + Result := True; + + if Trim(AKonverze) = '' then Exit; + + SL := TStringList.Create; + try + SL.Text := AKonverze; + for II := 0 to SL.Count-1 do + begin + JJ := Pos('=', SL.Strings[II]); + // zapamatuj si skutecnou "DB" hodnotu + if ATridit then + SL.Objects[II] := TObject(StrToIntDef(Copy(SL.Strings[II], 1, JJ-1), -1)); + SL.Strings[II] := Copy(SL.Strings[II], JJ+1, MaxInt); + end; + + // setrideni seznamu + if ATridit then SL.Sorted := True; + + // zde se zavola DataChange a tim se nastavi aktualni hodnota + ACombo.Items := SL; + finally + SL.Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgNaplnComboZVenku(ADBCombo : TDBComboBox; AKonverze : String): Boolean; +begin + Result := plgNaplnNeDBComboZVenku(ADBCombo, AKonverze); + + // pokud se nezdari nastavit ItemIndex komponente, udelam to za ni - FM + if ADBCombo.ItemIndex = -1 then + if Assigned(ADBCombo.Field) then + ADBCombo.ItemIndex := ADBCombo.Items.IndexOf(ADBCombo.Field.Text); +end; + +{ --------------------------------------------------------------------------- } + +function plgGetIndependentSQLDate(ADate: TDateTime): String; +begin + if ADate = 0 then + Result := 'NULL' + else + {! NEMENIT ! Tento format data je pro SQL nezavisly !} + Result := QuotedStr(FormatDateTime('yyyymmdd', ADate)); +end; + +{ --------------------------------------------------------------------------- } + +function plgGetIndependentSQLDateTime(ADateTime: TDateTime; Quotovat : Boolean = True): String; +begin + if ADateTime = 0 then + Result := 'NULL' + else + {! NEMENIT ! Tento format data je pro SQL nezavisly !} + begin + Result := FormatDateTime('yyyymmdd hh":"nn":"ss.zzz', ADateTime); + if Quotovat then + Result := QuotedStr(Result); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgGetIndependentSQLFloat(const AMaska: String; ACislo: Extended): String; + var + OldThousandSeparator : Char; + OldDecimalSeparator : Char; +begin + OldThousandSeparator := FormatSettings.ThousandSeparator; + OldDecimalSeparator := FormatSettings.DecimalSeparator; + + // pro jistotu, kdyby byly nastaveny oba stejne v mistnim nastaveni + FormatSettings.ThousandSeparator := ','; + FormatSettings.DecimalSeparator := '.'; {! NEMENIT ! SQL Server pouziva tecku !} + + try + // prevod cisla a vybagrovani oddelovace tisicu a prebytecnych mezer + Result := plgFilterStr(Format(AMaska, [ACislo]), [FormatSettings.ThousandSeparator, ' ']); + finally + FormatSettings.ThousandSeparator := OldThousandSeparator; + FormatSettings.DecimalSeparator := OldDecimalSeparator; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure plgHelpForm(const ACaption, AText: String); + var + LForm : TForm; +begin + LForm := TForm.CreateNew(nil); + try + with TButton.Create(LForm) do + begin + Parent := LForm; + Cancel := True; + ModalResult := mrCancel; + Width := 0; + Height := 0; + end; + + with TMemo.Create(LForm) do + begin + Parent := LForm; + Align := alClient; + Lines.Text := AText; + ReadOnly := True; + end; + + with LForm do + begin + Caption := ACaption; + Font.Height := -11; + WindowState := wsMaximized; + + ShowModal; + end; + finally + LForm.Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratVztah(Index: Integer): PplgVztahDef; +begin + if (Index >= Low(GDefiniceVztahu)) and (Index <= High(GDefiniceVztahu)) then + Result := @GDefiniceVztahu[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratExtAkci(Index: Integer): PplgExtAkceDef; +begin + if (Index >= Low(GDefiniceExtAkci)) and (Index <= High(GDefiniceExtAkci)) then + Result := @GDefiniceExtAkci[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratExtAttr(Index: Integer): PplgExterniAtribut; +begin + if (Index >= Low(GDefiniceExtAttr)) and (Index <= High(GDefiniceExtAttr)) then + Result := @GDefiniceExtAttr[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratExtTrigger(Index: Integer): PplgExterniTrigger; +begin + if (Index >= Low(GDefiniceExtTrigger)) and (Index <= High(GDefiniceExtTrigger)) then + Result := @GDefiniceExtTrigger[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratZmenovySkript(Index : Integer): PplgZmenovySkript; +begin + if (Index >= Low(GZmenoveSkripty)) and (Index <= High(GZmenoveSkripty)) then + Result := @GZmenoveSkripty[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratUProc(Index: Integer): PplgUlozenaProcedura; +begin + if (Index >= Low(SeznamUlozenychProcedur)) and (Index <= High(SeznamUlozenychProcedur)) then + Result := @SeznamUlozenychProcedur[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgVratUzivFunkci(Index: Integer): PplgUzivatelskaFunkce; +begin + if (Index >= Low(SeznamUzivatelskychFunkci)) and (Index <= High(SeznamUzivatelskychFunkci)) then + Result := @SeznamUzivatelskychFunkci[Index] + else + Result := nil; +end; + +{ --------------------------------------------------------------------------- } + +function plgJeNejakaTabulka(var Prvni: TplgTabulka): Boolean; +begin + Prvni := tZadna; + + Result := High(TplgTabulka) > Prvni; + if Result and (Cplg_SeznamTabulek[tZadna] = nil) then + Prvni := Succ(Prvni); +end; + +{ --------------------------------------------------------------------------- } + +function plgJeNejakyPrehled(var Prvni: TplgBrowse): Boolean; +begin + Prvni := bZadny; + + Result := High(TplgBrowse) > Prvni; + if Result then + Prvni := Succ(Prvni); +end; + +{ --------------------------------------------------------------------------- } + +function plgJeNejakySoudek(var Prvni: TplgSoudek): Boolean; +begin + Prvni := sdNeniVidet; + + Result := High(TplgSoudek) > Prvni; + if Result then + Prvni := Succ(Prvni); +end; + +{ --------------------------------------------------------------------------- } + +function FontExistsCallback(const lplf: TLogFont; const lptm: TTextMetric; + dwType: DWORD; lpData: LPARAM): Integer; stdcall; +begin + Boolean(Pointer(lpData)^) := True; + Result := 1; +end; + +{ --------------------------------------------------------------------------- } + +function plgFontExistuje(const FaceName: String): Boolean; + var + DC: HDC; +begin + Result := False; + DC := GetDC(0); + try + EnumFonts(DC, PChar(FaceName), @FontExistsCallback, @Result); + finally + ReleaseDC(0, DC); + end; +end; + +{ --------------------------------------------------------------------------- } + +function plgTestMSSansSerifFont(const AFontName: string): String; +begin + // nahrada fontu "MS Sans Serif" jinym pismem (je to hnusne rastrove pismo) + if not SameText(AFontName, 'MS Sans Serif') then + Result := AFontName + else + if plgFontExistuje('Microsoft Sans Serif') then + Result := 'Microsoft Sans Serif' + else + if plgFontExistuje('Tahoma') then + Result := 'Tahoma' + else +// if FontExists('Segoe UI') then +// Result := 'Segoe UI' +// else + Result := AFontName; +end; + +{ --------------------------------------------------------------------------- } + +function plgPrepniJazykoveDLL(Helios: IHelios; Jazyk1, Jazyk2: Integer): Boolean; + + { +++++++++++++++++++++++++++ } + + procedure ZkusJazyk(J: Integer); + var + H: HINST; + A: TplgPrekladHlasekA; + W: TplgPrekladHlasekW; + CP: TplgPrekladHlasekCP; + DLLName: string; + OK: Boolean; + begin + // zjisteni jazykoveho DLL + DLLName := PluginKonfig.PluginJazykoveDLL_Ext(J); + + // neni nastaveno jazykove DLL => jazyk nebyl prepnut + OK := (DLLName <> ''); + if OK then + begin + // jazykove DLL neexistuje => jazyk nebyl prepnut + DLLName := ExtractFilePath(plgGetPluginPathAndName) + DLLName; + OK := FileExists(DLLName); + end; + + if not OK then + begin + // slovenstina ma vyjimku (je primo v plgHlasky) + if J = Cplg_jSlovenctina then + AktivniJazyky.AddObject(IntToStr(J), TplgJazykPrekladHlasek04.Create); + Exit; + end; + + H := LoadLibrary(PChar(DLLName)); + try + if H > 0 then + begin + @A := GetProcAddress(H, 'CtiOznamID'); + if Assigned(A) then + AktivniJazyky.AddObject(IntToStr(J), TplgJazykPrekladHlasekA.Create(H, A)) + else + begin + @CP := GetProcAddress(H, 'TranslateCP'); + if Assigned(CP) then + AktivniJazyky.AddObject(IntToStr(J), TplgJazykPrekladHlasekCP.Create(H, CP)) + else + begin + @W := GetProcAddress(H, 'CtiOznamIDW'); + if Assigned(W) then + AktivniJazyky.AddObject(IntToStr(J), TplgJazykPrekladHlasekW.Create(H, W)) + else + begin + @W := GetProcAddress(H, 'TranslateW'); + if Assigned(W) then + AktivniJazyky.AddObject(IntToStr(J), TplgJazykPrekladHlasekW.Create(H, W)) + else + RaiseLastOSError; + end; + end; + end; + end + else + RaiseLastOSError; + except + on E: Exception do + begin + Helios.Error(#1'Chyba pi natn jazykovho DLL'#1#13+ + DLLName + #13#13 + E.Message); + end; + end; + end; + + { +++++++++++++++++++++++++++ } + +begin + // -2 prichazi z instalace po instalaci ruznych jazykovych mutaci do TabExtHlasky + if Jazyk1 = -2 then + Jazyk1 := AktivniJazyk1; + + if Jazyk2 = -2 then + Jazyk2 := AktivniJazyk2; + + // nejdrive uvolnime aktivni DLL + AktivniJazyky.Clear; + + case Jazyk1 of + Cplg_jCeskyASCII, Cplg_jCesky: + begin + _plgCtiOznam := _plgCtiOznam1; + Result := True; + end; + + else + begin + ZkusJazyk(Jazyk1); + + if (Jazyk1 <> Jazyk2) and (Jazyk2 <> Cplg_jJazykNedefinovan) then + ZkusJazyk(Jazyk2); + + Result := (AktivniJazyky.Count > 0); + if Result then + _plgCtiOznam := _plgCtiOznamX + else + _plgCtiOznam := _plgCtiOznam1; + end; + end; +end; + + + +{ --------------------------------------------------------------------------- } + +procedure InicializaceJadraPluginu(Helios: IHelios); + var + LTabulka: TplgTabulka; + LBrowse: TplgBrowse; + PA, PAOld: PplgAtributTabulky; + UA: TplgUzivatelskeAtributyDef; + II, JJ: Integer; + TD: PplgTabulkaDef; + PVD: PplgVztahDef; + AT: PplgExterniAtribut; + NewDef, OldDef: PplgTabulkaDef; + SLVyjmute: TStringList; + Q: IHeQuery; + Jaz1, Jaz2: Integer; + LSysDB: string; +begin + plgLadit_KontrolaPriInicializaci; + + // --- inicializace tabulek ------------------------------------------------- + if not InicializaceProbehla then + begin + InicializaceProbehla := True; + + if plgJeNejakaTabulka(LTabulka) then + for LTabulka := LTabulka to High(TplgTabulka) do + begin + // nejprve se vytvori definice podle Predka + if Cplg_SeznamTabulek[LTabulka].Predek <> tZadna then + begin + NewDef := Cplg_SeznamTabulek[LTabulka]; + OldDef := Cplg_SeznamTabulek[Cplg_SeznamTabulek[LTabulka].Predek]; + + plgLadit_KontrolaPredkaTabulky(LTabulka, NewDef, OldDef); + + SLVyjmute := TStringList.Create; + try + SLVyjmute.Text := NewDef.VyjmuteAttrPredka; + SLVyjmute.Sorted := True; + + // pocet atributu predka + JJ := 0; + PA := OldDef.Atributy; + for II := 1 to OldDef.PocetAtributu do + begin + if SLVyjmute.IndexOf(PA.JmenoSys) = -1 then Inc(JJ); + Inc(PA); + end; + + // pridame pocet atributu nove tabulky + II := NewDef.PocetAtributu + JJ; + + // vytvorime novy seznam atributu + GetMem(PA, II * SizeOf(TplgAtributTabulky)); + FillChar(PA^, II * SizeOf(TplgAtributTabulky), 0); + + // seznam priradime a zapamatujeme si puvodni + PAOld := NewDef.Atributy; + NewDef.Atributy := PA; + + // prenos puvodni definice + if NewDef.PocetAtributu <> 0 then + begin + Move(PAOld^, NewDef.Atributy^, NewDef.PocetAtributu * SizeOf(TplgAtributTabulky)); + Inc(PA, NewDef.PocetAtributu); // prvni volna pozice + end; + NewDef.PocetAtributu := II; // novy pocet atributu + + // prekopirovani definice predka + PAOld := OldDef.Atributy; + for II := 1 to OldDef.PocetAtributu do + begin + if SLVyjmute.IndexOf(PAOld.JmenoSys) = -1 then + begin + plgLadit_KontrolaPrevzetiAtributuPredkaTabulky(LTabulka, PAOld); + + PA^ := PAOld^; + with PA^ do + begin + if not (plg_dvtKopirovatOmezeni in NewDef.DalsiVlastnosti) then + begin + PK_UQ := puNic; + ForeignKey := ''; + Check := ''; + end; + if Pocitany <> '' then + Pocitany := StringReplace(Pocitany, OldDef.JmenoSys+'.', NewDef.JmenoSys+'.', [rfReplaceAll, rfIgnoreCase]); + end; + + Inc(PA); + end; + + Inc(PAOld); + end; + finally + SLVyjmute.Free; + end; + end; + + // inicializace atributu + PA := Cplg_SeznamTabulek[LTabulka].Atributy; + for II := 1 to Cplg_SeznamTabulek[LTabulka].PocetAtributu do + begin + if PA.UTyp <> plg_utaZadny then + begin + UA := Cplg_UzivatelskeAtributy[PA.UTyp]; + if PA.JmenoSys = '' then PA.JmenoSys := UA.A.JmenoSys; + if PA.JmenoVerejne = '' then PA.JmenoVerejne := UA.A.JmenoVerejne; + if PA.JmenoVerejneTxt = plxNic then PA.JmenoVerejneTxt := UA.A.JmenoVerejneTxt; + if PA.JmenoVerejneZkr = '' then PA.JmenoVerejneZkr := UA.A.JmenoVerejneZkr; + if PA.JmenoVerejneZkrTxt = plxNic then PA.JmenoVerejneZkrTxt := UA.A.JmenoVerejneZkrTxt; + if PA.Typ = taBlbe then PA.Typ := UA.A.Typ; + if PA.Delka = 0 then PA.Delka := UA.A.Delka; + if PA.Pocitany = '' then PA.Pocitany := UA.A.Pocitany; + if PA.NULL = nNic then PA.NULL := UA.A.NULL; + if PA.PK_UQ = puNic then PA.PK_UQ := UA.A.PK_UQ; + if PA.ForeignKey = '' then PA.ForeignKey := UA.A.ForeignKey; + if PA.ServerDefault = '' then PA.ServerDefault := UA.A.ServerDefault; + if PA.CHECK = '' then PA.CHECK := Format(UA.A.CHECK, [PA.JmenoSys]); + if PA.Vyzadovany = vDefault then PA.Vyzadovany := UA.A.Vyzadovany; + if PA.Verejny = vDefault then PA.Verejny := UA.A.Verejny; + if PA.Konverze = '' then PA.Konverze := UA.A.Konverze; + if PA.KonverzeTxt = plxNic then PA.KonverzeTxt := UA.A.KonverzeTxt; + if PA.SirkaSloupce = 0 then PA.SirkaSloupce := UA.A.SirkaSloupce; + if PA.MaskaDisplay = '' then PA.MaskaDisplay := UA.A.MaskaDisplay; + if not PA.Sumovat then PA.Sumovat := UA.A.Sumovat; + if PA.Hint = '' then PA.Hint := UA.A.Hint; + if PA.HintTxt = plxNic then PA.HintTxt := UA.A.HintTxt; + if PA.DalsiVlastnosti = [] then PA.DalsiVlastnosti := UA.A.DalsiVlastnosti; + if PA.HeliosAttr = '' then PA.HeliosAttr := UA.A.HeliosAttr; + + // kvuli definice tabulek... + PA.UTyp := plg_utaZadny; + end; + + // z nedefinovaneho stavu na definovany + if PA.NULL = nNic then PA.NULL := nNOTNULL; + if PA.Vyzadovany = vDefault then PA.Vyzadovany := vFalse; + if PA.Verejny = vDefault then PA.Verejny := vFalse; + + plgLadit_KontrolaAtributu(LTabulka, PA, II); + + Inc(PA); + end; + + plgLadit_KontrolaMaTabulkaID(LTabulka); + end; + end; + + // --- nastaveni jazyka ----------------------------------------------------- + Q := Helios.OpenSQL( + 'SELECT Jazyk, Jazyk2 FROM TabUziv WHERE LoginName = ' + Cplg_LoginName); + + if Q.RecordCount > 0 then + begin + Jaz1 := Q.FieldValues(0); + Jaz2 := Q.FieldValues(1); + end + else + begin + Jaz1 := Cplg_jCesky; + Jaz2 := Cplg_jJazykNedefinovan; + end; + + if (AktivniJazyk1 <> Jaz1) or (AktivniJazyk2 <> Jaz2) then + begin + AktivniJazyk1 := Jaz1; + AktivniJazyk2 := Jaz2; + + plgPrepniJazykoveDLL(Helios, AktivniJazyk1, AktivniJazyk2); + + // --- TABULKY --- + if plgJeNejakaTabulka(LTabulka) then + for LTabulka := LTabulka to High(TplgTabulka) do + begin + TD := Cplg_SeznamTabulek[LTabulka]; + if Assigned(TD) then + begin + if TD.JmenoTxt <> plxNic then + TD.Jmeno := plgCtiOznam(TD.JmenoTxt); + + PA := TD.Atributy; + for II := 1 to TD.PocetAtributu do + begin + if PA.JmenoVerejneTxt <> plxNic then + PA.JmenoVerejne := plgCtiOznam(PA.JmenoVerejneTxt) + else + if PA.HeliosAttr <> '' then // [RK 01.04.2010] + PA.JmenoVerejne := Helios.AttrPublicName(PA.HeliosAttr); + + if PA.JmenoVerejneZkrTxt <> plxNic then + PA.JmenoVerejneZkr := plgCtiOznam(PA.JmenoVerejneZkrTxt); + + if PA.KonverzeTxt <> plxNic then + PA.Konverze := plgCtiOznam(PA.KonverzeTxt) + else + if PA.HeliosAttr <> '' then // [RK 01.04.2010] + PA.Konverze := Helios.Konverze(PA.HeliosAttr); + + if PA.HintTxt <> plxNic then + PA.Hint := plgCtiOznam(PA.HintTxt); + + Inc(PA); + end; + end; + end; + + // --- PREHLEDY --- + if plgJeNejakyPrehled(LBrowse) then + for LBrowse := LBrowse to High(TplgBrowse) do + begin + with Cplg_SeznamVychozichNastaveniBrowse[LBrowse] do + begin + if Jmeno = '*' then + begin + TD := plgGetTabulkaDef(HlavniTabulka); + if Assigned(TD) then + Jmeno := TD.Jmeno; + end + else + if JmenoTxt <> plxNic then + Jmeno := plgCtiOznam(JmenoTxt); + + plgLadit_KontrolaVerejnehoJmenaPrehledu(LBrowse); + + if PomocnicekTxt <> plxNic then + Pomocnicek := plgCtiOznam(PomocnicekTxt); + end; + end; + + // --- VAZBY --- + II := 1; + PVD := plgVratVztah(II); + while Assigned(PVD) do + begin + if PVD.NazevLPTxt <> plxNic then + PVD.NazevLP := plgCtiOznam(PVD.NazevLPTxt) + else + if PVD.NazevLP = '' then + PVD.NazevLP := Cplg_SeznamVychozichNastaveniBrowse[plgJmenoView2Browse(PVD.TabPStr)].Jmeno; + + if PVD.NazevPLTxt <> plxNic then + PVD.NazevPL := plgCtiOznam(PVD.NazevPLTxt) + else + if PVD.NazevPL = '' then + PVD.NazevPL := Cplg_SeznamVychozichNastaveniBrowse[plgJmenoView2Browse(PVD.TabLStr)].Jmeno; + + plgLadit_KontrolaVazby(PVD); + + Inc(II); + PVD := plgVratVztah(II); + end; + + // --- EXTERNI ATRIBUTY --- + II := 1; + AT := plgVratExtAttr(II); + while Assigned(AT) do + begin + if AT.JmenoVerejneTxt <> plxNic then + AT.JmenoVerejne := plgCtiOznam(AT.JmenoVerejneTxt); + + if AT.JmenoVerejneZkrTxt <> plxNic then + AT.JmenoVerejneZkr := plgCtiOznam(AT.JmenoVerejneZkrTxt); + + if AT.KonverzeTxt <> plxNic then + AT.Konverze := plgCtiOznam(AT.KonverzeTxt); + + if AT.PoznamkaTxt <> plxNic then + AT.Poznamka := plgCtiOznam(AT.PoznamkaTxt); + + if AT.BublinaTxt <> plxNic then + AT.Bublina := plgCtiOznam(AT.BublinaTxt); + + if AT.ExtEd_ZalozkaTxt <> plxNic then + AT.ExtEd_Zalozka := plgCtiOznam(AT.ExtEd_ZalozkaTxt); + + Inc(II); + AT := plgVratExtAttr(II); + end; + end; + + // --- nacteni ikonek ------------------------------------------------------- + if not Assigned(DataModuleGlobPLG) then + begin + // barevne ikonky jsou implementovany az od verze 3.0.2020.0152 + if Helios.HeVersion >= $030020200152 then + begin + LSysDB := Helios.SystemDB; + if LSysDB <> '' then + begin + if not IsValidIdent(LSysDB) then + begin + LSysDB := AnsiQuotedStr(LSysDB, ']'); + LSysDB[1] := '['; + end; + + try + G_SadaIkonekKterouChci := Helios.OpenSQL('SELECT SadaIkonek FROM ' + LSysDB + '..TabUserCfg WHERE LoginName = '+ Cplg_LoginName).FieldValues(0); + except + G_SadaIkonekKterouChci := C_SadaIkonek_Default; + end; + end; + end; + + DataModuleGlobPLG := TDataModuleGlobPLG.Create(Application); + end; + + // --- nastaveni legislativy ------------------------------------------------ + if Global_Legislativa = -1 then + Global_Legislativa := Helios.OpenSQL('SELECT Legislativa FROM TabHGlob').FieldValues(0); +end; + + +{ --------------------------------------------------------------------------- } + +function plgJeParametrXX: Boolean; + var + II: Integer; + S: String; +begin + for II := 1 to ParamCount do + begin + S := ParamStr(II); + if (Length(S) >= 3) and CharInSet(S[1], ['/','-']) and (UpperCase(Copy(S,2,2)) = 'XX') then + begin + Result := True; + Exit; + end; + end; + Result := False; +end; + +{ --------------------------------------------------------------------------- } + +function plgJeParametrX: Boolean; +begin + Result := FindCmdLineSwitch('X', ['/','-'], True); +end; + +{ --------------------------------------------------------------------------- } + +var + G_TichaInstalace: Boolean; + +function plgJeTichaInstalace: Boolean; +begin + Result := G_TichaInstalace or plgJeParametrXX; +end; + +{ --------------------------------------------------------------------------- } + +function plgExtKomIDInstalace(Helios: IHelios): Boolean; +begin + Result := (Helios.ExtKomID = Cplg_ExtKomID_Instalace) or + (Helios.ExtKomID = Cplg_ExtKomID_TichaInstalace); +end; + +{ --------------------------------------------------------------------------- } + +procedure InstalacePluginu(Helios: IHelios; TichaInstalace: Boolean); +begin + G_TichaInstalace := TichaInstalace; + with TfrmInstalace.Create(Application) do + try + ShowModalEx(Helios); + finally + Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure InformaceOPluginu(Helios: IHelios); +begin + with TfrmAbout.Create(Application) do + try + ShowModalEx(Helios); + finally + Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure plgPresunHlaskyNaWeb(Helios: IHelios); +begin + with TfrmPreklady.Create(Application) do + try + ShowModalEx(Helios, sphNaWeb); + finally + Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure plgStahniZWebuJazykovaDLL(Helios: IHelios); +begin + with TfrmPreklady.Create(Application) do + try + ShowModalEx(Helios, sphDoDLL); + finally + Free; + end; +end; + +{ --------------------------------------------------------------------------- } + +procedure SpustControllerEditoru(Helios: IHelios); + var + LControllerClass: TplgEditorControllerClass; + LController: TplgEditorController; + II: Integer; + LKlicProDB: string; +begin + LControllerClass := nil; + LKlicProDB := Helios.FormIdent; + + II := Low(GDefiniceControlleru) + 1; // prvni prvek je defaultne prazdny + while II <= High(GDefiniceControlleru) do + begin + if LKlicProDB = GDefiniceControlleru[II].FormIdent then + begin + LControllerClass := TplgEditorControllerClass(GDefiniceControlleru[II].ControllerClass); + Break; + end; + Inc(II); + end; + + if LControllerClass <> nil then + begin + LController := LControllerClass.Create (Helios); + Helios.RegisterPluginController (LController); + end + {$IFnDEF BezLadit} + else + Helios.Error(plgCtiOznam('{Ladit} - Controller nenalezen!')) + {$ENDIF} + ; +end; + +{ ########################################################################### } + +initialization + AktivniJazyky := TStringList.Create(True); + +{ ########################################################################### } + +end. diff --git a/libSys/plgQuery.pas b/libSys/plgQuery.pas new file mode 100644 index 0000000..5c57a90 --- /dev/null +++ b/libSys/plgQuery.pas @@ -0,0 +1,34 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgQuery; + +interface + +uses + dxmdaset, DB; + +type + TplgQuery = class(TdxMemData) + public + // zmena viditelnosti - abych mohl shodit DataSet.Modified + procedure SetModified(Value: Boolean); + end; + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +procedure TplgQuery.SetModified(Value: Boolean); +begin + inherited; +end; + +{ ########################################################################### } + +end. diff --git a/libSys/plgSoudky.pas b/libSys/plgSoudky.pas new file mode 100644 index 0000000..fe53924 --- /dev/null +++ b/libSys/plgSoudky.pas @@ -0,0 +1,24 @@ +unit plgSoudky; + +interface + +uses + plgType; + +const + Cplg_SeznamSoudku : array [TplgSoudek] of TplgSoudekDef = + ((SelfIdent: sdNeniVidet; + Jmeno : '') + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgSpravce.pas b/libSys/plgSpravce.pas new file mode 100644 index 0000000..3fadceb --- /dev/null +++ b/libSys/plgSpravce.pas @@ -0,0 +1,189 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgSpravce; + +interface + +uses + plgAkce, ddPlugin_TLB, Contnrs, Classes; + +type + TJedenHelios = class + private + FHelios: IHelios; + FAkce: TplgAkcePrehledu; + public + property Helios: IHelios read FHelios; + property Akce: TplgAkcePrehledu read FAkce; + end; + + TSpravceHeliosu = class + private + FSeznam: TObjectList; + function NajdiHelios(Helios: IHelios): Integer; + function NajdiIdent(Helios: IHelios): Integer; + public + constructor Create; + destructor Destroy; override; + + // === pouze interni pouziti !!! ============================= + procedure PridejHelios(Helios: IHelios); + procedure OdeberHelios(Helios: IHelios); + procedure NastavAkce(Helios: IHelios; Akce: TplgAkcePrehledu); + // =========================================================== + + function VratVlastnika(Helios: IHelios): IHelios; + function VratAkcePrehledu(Helios: IHelios): TplgAkcePrehledu; + end; + +var + SpravceHeliosu: TSpravceHeliosu = nil; + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +constructor TSpravceHeliosu.Create; +begin + inherited Create; + FSeznam := TObjectList.Create; +end; + +{ --------------------------------------------------------------------------- } + +destructor TSpravceHeliosu.Destroy; +begin + FSeznam.Free; + inherited; +end; + +{ --------------------------------------------------------------------------- } + +function TSpravceHeliosu.NajdiHelios(Helios: IHelios): Integer; + var + II: Integer; +begin + // jedeme odzadu - bude to rychlejsi + if Assigned(Helios) then + for II := FSeznam.Count-1 downto 0 do + begin + if TJedenHelios(FSeznam.Items[II]).FHelios = Helios then + begin + Result := II; + Exit; + end; + end; + + Result := -1; // nenalezeno +end; + +{ --------------------------------------------------------------------------- } + +function TSpravceHeliosu.NajdiIdent(Helios: IHelios): Integer; + var + II: Integer; +begin + // jedeme odzadu - bude to rychlejsi + if Assigned(Helios) then + for II := FSeznam.Count-1 downto 0 do + begin + if TJedenHelios(FSeznam.Items[II]).FHelios.Ident = Helios.Ident then + begin + Result := II; + Exit; + end; + end; + + Result := -1; // nenalezeno +end; + +{ --------------------------------------------------------------------------- } + +procedure TSpravceHeliosu.PridejHelios(Helios: IHelios); + var + JH: TJedenHelios; +begin + if not Assigned(Helios) then Exit; + + JH := TJedenHelios.Create; + JH.FHelios := Helios; + FSeznam.Add(JH); +end; + +{ --------------------------------------------------------------------------- } + +procedure TSpravceHeliosu.OdeberHelios(Helios: IHelios); + var + II: Integer; +begin + II := NajdiHelios(Helios); + if II <> -1 then FSeznam.Delete(II); +end; + +{ --------------------------------------------------------------------------- } + +procedure TSpravceHeliosu.NastavAkce(Helios: IHelios; Akce: TplgAkcePrehledu); + var + II: Integer; +begin + II := NajdiHelios(Helios); + if II <> -1 then + TJedenHelios(FSeznam.Items[II]).FAkce := Akce; +end; + +{ --------------------------------------------------------------------------- } + +function TSpravceHeliosu.VratVlastnika(Helios: IHelios): IHelios; + var + II: Integer; + Vlastnik: IHelios; +begin + if not Assigned(Helios) then + Result := nil + else + begin + Vlastnik := Helios.HeliosVlastnik; + II := NajdiIdent(Vlastnik); + if II <> -1 then + Result := TJedenHelios(FSeznam.Items[II]).FHelios + else + Result := Vlastnik; + end; +end; + +{ --------------------------------------------------------------------------- } + +function TSpravceHeliosu.VratAkcePrehledu(Helios: IHelios): TplgAkcePrehledu; + var + II: Integer; +begin + II := NajdiIdent(Helios); + if II <> -1 then + Result := TJedenHelios(FSeznam.Items[II]).FAkce + else + Result := nil; +end; + +{ ########################################################################### } + +initialization + SpravceHeliosu := TSpravceHeliosu.Create; + +{ ########################################################################### } + +end. +// LIB | USER: rk | DT: 08.03.2005 13:29:04 | VER: ?? LB ?? | TXT: | PC: RK | FROM: D:\!\IQ1\Eurest | TO: P:\ +// LOCAL | USER: rk | DT: 08.03.2005 13:54:41 | VER: | TXT: | PC: RK | FROM: P:\ | TO: D:\!\IQ1\Eurest +// LIB | USER: rk | DT: 08.03.2005 14:13:52 | VER: ?? LB ?? | TXT: | PC: RK | FROM: D:\!\IQ1\Eurest | TO: P:\ +// LOCAL | USER: rk | DT: 15.03.2005 09:35:54 | VER: | TXT: | PC: RK | FROM: P:\PlugLib | TO: D:\!\IQ1\Eurest +// LIB | USER: rk | DT: 15.03.2005 10:05:23 | VER: ?? LB ?? | TXT: | PC: RK | FROM: D:\!\IQ1\Eurest | TO: P:\PlugLib +// LOCAL | USER: RK | DT: 17.02.2006 09:58:05 | VER: | TXT: | PC: RK-2K | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginEurest +// LIB | USER: RK | DT: 17.02.2006 09:58:09 | VER: ?? LB ?? | TXT: | PC: RK-2K | FROM: D:\!\IQ1\PluginEurest | TO: L:\H\IQ10\PlugLib +// LOCAL | USER: RK | DT: 01.08.2007 08:37:19 | VER: | TXT: | PC: RK-XP-D | FROM: L:\H\IQ10\PlugLib | TO: D:\!\IQ1\PluginTest +// LIB | USER: RK | DT: 01.08.2007 08:52:07 | VER: ?? LB ?? | TXT: | PC: RK-XP-D | FROM: D:\!\IQ1\PluginTest | TO: L:\H\IQ10\PlugLib diff --git a/libSys/plgTable.pas b/libSys/plgTable.pas new file mode 100644 index 0000000..ae76945 --- /dev/null +++ b/libSys/plgTable.pas @@ -0,0 +1,23 @@ +unit plgTable; + +interface + +uses + plgType; + +var + Cplg_SeznamTabulek : array[TplgTabulka] of PplgTabulkaDef = + (nil // tZadna + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgType.pas b/libSys/plgType.pas new file mode 100644 index 0000000..080f4d7 --- /dev/null +++ b/libSys/plgType.pas @@ -0,0 +1,29 @@ +unit plgType; + +interface + +uses + System.Classes, Vcl.Forms; + +const + CVerzePluginu = Int64({$I ..\lib\plgVerze.INC}); + +{$I ..\lib\plgTypeTabulka.INC} // definice typu TplgTabulka +{$I ..\lib\plgTypeSoudky.INC} // definice typu TplgSoudek +{$I ..\lib\plgTypeBrowse.INC} // definice typu TplgBrowse +{$I ..\lib\plgTypeTxtJadro.INC} // definice "typu" TplgTxt - hlasky jadra +{$I ..\lib\plgTypeTxtEx.INC} // definice "typu" TplgTxt - ostatni hlasky +{$I ..\lib\plgTypeJadro.INC} // zakladni typy a konstanty jadra 1 +{$I ..\lib\plgTypeZbytek.INC} // vsechny ostatni typy a konstanty + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. + +// LIB | USER: rk | DT: 09.02.2005 09:09:48 | VER: ?? LB ?? | TXT: | PC: RK | FROM: D:\!\IQ1\Eurest | TO: P:\ diff --git a/libSys/plgUProc.pas b/libSys/plgUProc.pas new file mode 100644 index 0000000..398c0fc --- /dev/null +++ b/libSys/plgUProc.pas @@ -0,0 +1,33 @@ +unit plgUProc; + +interface + +uses + plgType; + +// !!! POZOR !!! ############################################################## +// Ulozenka musi byt zadana tak, aby CREATE PROC bylo na jednom radku: +// napr. 'CREATE PROCEDURE dbo.pp_MujPrefix_MujNazev'#13+ +// ############################################################################ + +{ =========================================================================== } + +const + SeznamUlozenychProcedur : array[0..0] of TplgUlozenaProcedura = + ( + // aby bylo mozno nemit zadnou ulozenou proceduru :-) + // musi zustat prvni procedura definovana !! + (Text : '') + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgUta.pas b/libSys/plgUta.pas new file mode 100644 index 0000000..ed2dd5e --- /dev/null +++ b/libSys/plgUta.pas @@ -0,0 +1,181 @@ +{ *************************************************************************** } +{ } +{ Jadro pluginu 2 Asseco Solutions } +{ } +{ *************************************************************************** } + +unit plgUta; + +interface + +uses + plgType; + +const + plg_uta_SystemoveCislo = plg_SystemoveCislo; + plg_uta_Autor = 'Autor'; + plg_uta_DatPorizeni = 'DatPorizeni'; + plg_uta_Zmenil = plg_Zmenil; + plg_uta_DatZmeny = plg_DatZmeny; + plg_uta_BlokovaniEditoru = plg_BlokovaniEditoru; + plg_uta_GUID = 'GUID'; + plg_uta_Mena = 'Mena'; + plg_uta_TextChyby = 'TextChyby'; + plg_uta_ImpSoubor = 'ImpSoubor'; + plg_uta_SkupZbo = 'SkupZbo'; + plg_uta_RegCis = 'RegCis'; + + Cplg_DisplaySirkaDatum = 20; // [RK 02.07.2012] 12 -> 20 + + { +++++++++++++++++++++++++++ } + + Cplg_UzivatelskeAtributy : array [TplgUzivatelskyTypAtributu] of TplgUzivatelskeAtributyDef = + ((SelfIdent: plg_utaZadny) + + ,(SelfIdent: plg_utaSystemoveCislo; + A:(JmenoSys : plg_uta_SystemoveCislo; + JmenoVerejneTxt : plxJadroSystemoveCislo; + JmenoVerejneZkrTxt : plxJadroSysCisZkr; + Typ : taIdentity; + PK_UQ : puPrimaryKey; + Vyzadovany : vTrue; + Verejny : vFalse) + ) + + ,(SelfIdent: plg_utaSystemoveCislo64; + A:(JmenoSys : plg_uta_SystemoveCislo; + JmenoVerejneTxt : plxJadroSystemoveCislo; + JmenoVerejneZkrTxt : plxJadroSysCisZkr; + Typ : taIdentity64; + PK_UQ : puPrimaryKey; + Vyzadovany : vTrue; + Verejny : vFalse) + ) + + ,(SelfIdent: plg_utaAutor; + A:(JmenoSys : plg_uta_Autor; + JmenoVerejneTxt : plxJadroAutor; + Typ : taNVarChar; + Delka : 128; + ServerDefault : Cplg_LoginName; + Verejny : vTrue; + SirkaSloupce : 15) + ) + + ,(SelfIdent: plg_utaDatPorizeni; + A:(JmenoSys : plg_uta_DatPorizeni; + JmenoVerejneTxt : plxJadroDatumPorizeni; + Typ : taDateTime; + ServerDefault : Cplg_GetDate; + Verejny : vTrue; + SirkaSloupce : Cplg_DisplaySirkaDatum) + ) + + ,(SelfIdent: plg_utaZmenil; + A:(JmenoSys : plg_uta_Zmenil; + JmenoVerejneTxt : plxJadroZmenil; + Typ : taNVarChar; + Delka : 128; + NULL : nNULL; + Verejny : vTrue; + SirkaSloupce : 20) + ) + + ,(SelfIdent: plg_utaDatZmeny; + A:(JmenoSys : plg_uta_DatZmeny; + JmenoVerejneTxt : plxJadroDatumZmeny; + Typ : taDateTime; + NULL : nNULL; + Verejny : vTrue; + SirkaSloupce : Cplg_DisplaySirkaDatum) + ) + + ,(SelfIdent: plg_utaBlokovaniEditoru; + A:(JmenoSys : plg_uta_BlokovaniEditoru; + JmenoVerejneTxt : plxJadroBlokovaniEditoru; + Typ : taSmallInt; + NULL : nNULL; + Vyzadovany : vTrue; + Verejny : vFalse) + ) + + ,(SelfIdent: plg_utaGUID; + A:(JmenoSys : plg_uta_GUID; + JmenoVerejne : 'GUID'; + Typ : taBinary; + Delka : 16; + Verejny : vFalse) + ) + + ,(SelfIdent: plg_utaSazbaDPH; + A:(Typ : taNumeric_5_2; + NULL : nNULL; + ForeignKey : 'TabDPH(Sazba)'; + Verejny : vTrue) + ) + + ,(SelfIdent: plg_utaCena; + A:(Typ : taNumeric_19_6; + ServerDefault : '0.0'; + Verejny : vTrue; + MaskaDisplay : DisplayMaskPenize; + Sumovat : True) + ) + + ,(SelfIdent: plg_utaMena; + A:(JmenoSys : plg_uta_Mena; + JmenoVerejne : 'Mna'; + Typ : taNVarChar; + Delka : 3; + ForeignKey : 'TabKodMen(Kod)'; + Verejny : vTrue) + ) + + ,(SelfIdent: plg_utaTextChyby; + A:(JmenoSys : plg_uta_TextChyby; + JmenoVerejne : 'Text chyby'; + Typ : taNVarChar; + Delka : 255; + ServerDefault : ''''''; + Verejny : vTrue; + SirkaSloupce : 30) + ) + + ,(SelfIdent: plg_utaImpSoubor; + A:(JmenoSys : plg_uta_ImpSoubor; + JmenoVerejne : 'Importn soubor'; + Typ : taNVarChar; + Delka : 255; + ServerDefault : ''''''; + Verejny : vTrue; + SirkaSloupce : 30) + ) + + ,(SelfIdent: plg_utaSkupZbo; + A:(JmenoSys : plg_uta_SkupZbo; + Typ : taNVarChar; + Delka : 3; + Verejny : vTrue; + HeliosAttr : 'TabKmenZbozi.SkupZbo') + ) + + ,(SelfIdent: plg_utaRegCis; + A:(JmenoSys : plg_uta_RegCis; + Typ : taNVarChar; + Delka : 30; + Verejny : vTrue; + HeliosAttr : 'TabKmenZbozi.RegCis') + ) + + {$I ..\lib\plgUtaDef.inc} + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgVazby.pas b/libSys/plgVazby.pas new file mode 100644 index 0000000..b723e5e --- /dev/null +++ b/libSys/plgVazby.pas @@ -0,0 +1,28 @@ +unit plgVazby; + +interface + +uses + plgType; + +{ =========================================================================== } + +const + GDefiniceVztahu : array[0..0] of TplgVztahDef = + ( + // aby bylo mozno nemit zadnou vazbu, + // musi zustat prvni vazba nedefinovana !! + (GUIDVazby : '') + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. diff --git a/libSys/plgZmeny.pas b/libSys/plgZmeny.pas new file mode 100644 index 0000000..544001c --- /dev/null +++ b/libSys/plgZmeny.pas @@ -0,0 +1,60 @@ +{ *************************************************************************** } +{ } +{! SKRIPTY BY MLY BT PSNY TAK, ABY BYLY SPUSTITELN VCEKRT - TZN. MLY !} +{! BY OBSAHOVAT RZN TESTY EXISTENCE - NAP.: !} +{ } +{ -existuje tabulka TabXXX ? } +{ IF OBJECT_ID('TabXXX','U')IS NOT NULL ... } +{ } +{ -existuje sloupec ABC v tabulce TabXXX ? } +{ IF COLUMNPROPERTY(OBJECT_ID('TabXXX','U'),'ABC','AllowsNull')IS NOT NULL ... } +{ } +{ -existuje default DF__TabXXX__ABC na sloupci ABC v tabulce TabXXX ? } +{ IF OBJECT_ID('DF__TabXXX__ABC','D')IS NOT NULL ... } +{ } +{ kde vezmu 2. parametr systmov funkce OBJECT_ID() - je to sysobjects.xtype } +{ - viz BOL } +{ } +{!!! POZOR - POUIT RETURN VE ZMNOVCH SKRIPTECH V plgZmeny.pas NEN BEZTRESTN !!!} +{ -protoe zmnov skripty jsou obaleny knihovanmi BEGIN TRAN..COMMIT, tak } +{ by ppadn RETURN ponechal transakci neuzavenou ! Proto bych ml } +{ pout tuto konstrukci: } +{ IF @@TRANCOUNT>0 ROLLBACK /* nebo COMMIT dle situace */ } +{ RETURN } +{ -pokud je kd spoutn pes EXEC() nebo sp_executesql, tak tam naopak } +{ ROLLBACK (COMMIT) bt NESM, protoe RETURN ukonuje jen dan EXEC() } +{ -pln nejlep je se RETURNu ve zmnovch skriptech pln vyhnout } +{ } +{ *************************************************************************** } + +unit plgZmeny; + +interface + +uses + plgType; + +{ =========================================================================== } + +const + GZmenoveSkripty : array[0..0] of TplgZmenovySkript = + ( + // aby bylo mozno nemit zadny zmenovy skript, + // musi zustat prvni skript nedefinovan !! + (PlatiOd : $010020050210; + Skript : ''; + ) + +//last + ); + +{ =========================================================================== } + +implementation + +{ ########################################################################### } + +{ ########################################################################### } + +end. + diff --git a/plgInstalace.DFM b/plgInstalace.DFM new file mode 100644 index 0000000..9c536e3 --- /dev/null +++ b/plgInstalace.DFM @@ -0,0 +1,1624 @@ +object frmInstalace: TfrmInstalace + Left = 392 + Top = 97 + BorderIcons = [biSystemMenu] + BorderStyle = bsNone + ClientHeight = 257 + ClientWidth = 401 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Scaled = False + OnActivate = FormActivate + OnClose = FormClose + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object PanelPodklad: TPanel + Left = 0 + Top = 0 + Width = 401 + Height = 257 + Align = alClient + BevelInner = bvLowered + BevelWidth = 2 + Color = clWhite + TabOrder = 0 + DesignSize = ( + 401 + 257) + object ImageLogo: TImage + Left = 76 + Top = 30 + Width = 249 + Height = 64 + AutoSize = True + Picture.Data = { + 07544269746D617036BB0000424D36BB0000000000003600000028000000F900 + 000040000000010018000000000000BB0000130B0000130B0000000000000000 + 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23 + 201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C88181 + 8357575A2D2D30201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFF5757 + 5A201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAD7373753B3B3E201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F233B3B3E656568ABABADF1F1F2FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F249494C201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23656568C7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23 + 201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFC7C7C83B3B3E201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9BA3B3B3E + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F232D2D30 + 9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5757 + 5A201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23ABABADFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFF + FFFFFFFFFFFFFFFFFFFFABABAD201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFF + FFFFFF818183201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23737375FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF818183201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23B9B9BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F + 23201F23201F238F8F91FFFFFFFFFFFFFFFFFFB9B9BA201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F2357575AFFFFFFFF + FFFF57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFFFFFFFFFFFFFABABAD201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F238181 + 83FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAD201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F233B3B3EFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F + 23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFF1F1F22D + 2D30201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFFE3E3E42D2D30201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23C7C7C8FFFFFFFFFFFFFFFFFFD5D5D62D2D3020 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23ABABADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F238F + 8F91FFFFFFFFFFFFABABAD201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FF8F8F91201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23737375FFFFFFFF + FFFFF1F1F22D2D30201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23737375FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F238F8F91FFFFFFFFFFFF656568201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F2357575A + FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFF3B3B3E201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23F1F1F2FFFFFF49494C201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F2349494C + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF + 57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFFE3E3E4201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23C7C7C8FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFF1F1F249494C201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23 + 201F238F8F91FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F + 23201F23201F23201F232D2D30ABABADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5757 + 5A201F23201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFC7C7C8201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23737375D5D5D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D673737520 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23 + 201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A201F23201F + 23201F23201F23201F23201F23201F23201F23201F23ABABADFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFF9D9D9F201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23ABABADFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFABABAD201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFF + FFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57575A201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFF8F8F91201F23 + 201F23201F23201F23201F23201F23201F23201F23201F2357575AFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57575A201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8201F23201F23201F23201F + 23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F238F8F91FFFFFFFFFFFF57575A201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFF8F8F91201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF9D9D9F201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E44949 + 4C201F23201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A20 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFF8F8F91201F23201F23201F23201F + 23201F23201F23201F23201F23201F23C7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFF1 + F1F28F8F9157575A201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F238F + 8F91FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFF8F8F + 91201F23201F23201F23201F23201F23201F23201F23201F23201F23C7C7C8FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7 + C8201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFFFFFFFFB9B9BA2D2D30201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F2357575A + FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F + 23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFF8F8F91201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23C7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFC7C7C8201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFFD5D5D6201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23818183 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF + 57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F + 23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFF8F8F91201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23C7C7C8FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23E3E3E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F238F8F91FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFF5757 + 5A201F23201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFF8F8F91201F23201F23201F23201F23201F23201F23201F23201F23201F23 + C7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFC7C7C8201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFD5D5D6201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23737375FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8D8FBFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFF8F8F91201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23C7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFF8F8F91201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F2349494CF1F1 + F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4ECFD6795F52265 + F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFF + FFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F2357575A57575A57575A57575A57575A57575A57575A57575A57575A57575A + 57575A57575A57575A57575A57575A57575A57575A57575A57575A57575A5757 + 5A57575A57575A57575A57575A818183FFFFFFFFFFFF57575A201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFF8F8F91201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23C7C7C8FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFF5757 + 5A201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 232D2D308F8F91F1F1F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F6 + FE90B3F82165F12265F12265F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F233B3B3E57575A57575A57575A57575A57 + 575A57575A57575A57575A57575A57575A57575A57575A57575A57575A57575A + 57575A57575A57575A57575A201F23201F23201F23201F23201F23201F23201F + 23201F23201F238F8F91FFFFFFFFFFFF57575A201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFF8F8F91201F23201F23201F23201F23201F23201F23201F23201F + 23201F239D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF9D9D9F201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFF3B3B3E201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F236565688F8F918F8F918F8F918F8F918F8F918F8F918F8F91 + 8F8F918F8F918F8F918F8F918F8F918F8F918F8F918F8F918F8F918F8F918F8F + 918F8F918F8F919D9D9FC7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF73A2F6E3EDFDFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFABC9FA3B7EF3206AF22169F12167F12265F1FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F + 23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A20 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFF8F8F91201F23201F23201F23201F + 23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57575A201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFF201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23656568FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF206DF21F6FF2 + 8FB8F9F1F6FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFD5E5FC5696F61F71F31F70F2206EF2206CF220 + 6AF12168F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F238F + 8F91FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23C7C7C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57575A201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFF9D9D + 9F201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23AB + ABADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAD201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF1F70F21F72F31E74F32C7EF39DC4FAFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F7FE72ACF81D78F41E76F31E + 75F31E73F31F71F31F6FF2206DF2206BF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F238F8F91FFFFFFFFFFFF57575A201F23201F23201F23 + 201F23201F23201F23201F23201F23201F232D2D30C7C7C8FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F + 23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFC7C7C8201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23818183E3E3E4FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFE3E3E48F8F91201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFF201F23201F23201F23201F23201F23201F23 + 201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E74F31E76F31D78F41D79F41D7B + F4388CF5C6DFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8DBFFA2A + 86F51C7DF41D7BF41D7AF41D78F41E76F31E75F31F72F31F70F2206EF2FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFF + 57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F + 23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFFD5D5D6201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 2D2D3057575A57575A57575A57575A57575A57575A57575A57575A57575A5757 + 5A57575A57575A57575A2D2D30201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23C7C7C8FFFFFF201F23201F23 + 201F23201F23201F23201F23201F23201F23201F233B3B3EF1F1F2FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E77 + F31D79F41D7BF41C7DF41C7FF51C80F51B81F554A1F7D4E8FDFFFFFFFFFFFFFF + FFFFC6E0FC3792F61B82F51B82F51C80F51C7FF51C7DF51D7CF41D7AF41D78F4 + 1E76F31E73F31F71F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23 + 201F238F8F91FFFFFFFFFFFF656568201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFF5757 + 5A201F23201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFF2D2D30201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + F1F1F2FFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F + 23201F232D2D3057575A57575A57575A57575A57575A57575A57575A57575A57 + 575A57575A57575A57575A57575A57575A57575A57575A57575A57575A57575A + 57575A57575A57575A57575A57575A57575A57575AD5D5D6FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF1D7AF41C7CF41C7EF51C80F51B82F51B83F51B85F61A + 86F61A87F670B4F9E3F0FEFFFFFF9BCAFB288EF61A86F61A85F61B84F61B83F5 + 1B81F51C7FF51C7DF41D7BF41D79F41E76F31E74F3FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23 + 201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFABABAD201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFF818183201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23656568FFFFFFFFFFFF737375201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F237373 + 75FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C7DF41C80F51B82F51B + 84F51A86F61A87F61A88F61A8AF6198AF6198BF72792F78CC5FBF1F8FEF1F8FE + 7EBCF91A89F61A88F61A86F61B84F61B83F51B80F51C7EF51D7CF41D79F41E77 + F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFF + FFFFFFFFF1F1F22D2D30201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFE3E3E4 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23C7C7C8FFFFFFFFFFFFABAB + AD201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F2357575AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF1C80F51B83F51B85F61A87F61A89F6198BF6198CF7198DF7198EF7188FF7 + 188FF7188FF7349DF8A9D5FCFFFFFFE3F0FE61AFF91A8AF61A88F61A86F61B84 + F51B81F51C7FF51C7CF41D79F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F + 23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F + 23201F23201F238F8F91FFFFFFFFFFFFFFFFFFB9B9BA201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F2357575AFFFFFFFF + FFFF57575A201F23201F23201F23201F23201F23201F23201F23201F23201F23 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 8F8F91FFFFFFFFFFFFFFFFFF9D9D9F201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F238181 + 83FFFFFFFFFFFFFFFFFFF1F1F22D2D30201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F2349494CF1F1F2FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF1B83F51A86F61A88F6198AF6198CF7198EF7 + 1890F71891F71892F81893F81893F81893F81893F81892F843A6F9C5E4FDFFFF + FFC6E2FD44A0F81A89F61A87F61B84F61B81F51C7FF51D7CF4FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF201F23201F23201F23201F23201F23201F23201F23201F23201F238F8F91FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F + 23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFF + FFFFABABAD201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F2357575AFFFFFFFFFFFF57575A201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23 + 201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFF737375201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23737375FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D9D9F201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F232D2D30E3E3E4FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A86F61A89F6 + 198BF7198DF71890F71892F81793F81795F81796F81797F81797F81797F81797 + F81796F81795F81794F851AEF9E2F1FEFFFFFFA9D3FC3697F71A87F61B84F61B + 81F51C7EF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F23201F238F + 8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9BA3B3B3E201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F2357575AFFFFFFFFFFFF57575A201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23 + 201F23201F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFB9B9BA3B3B3E201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F232D2D309D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF818183201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23D5D5D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF53A6F8198CF7198EF71891F71793F81795F81797F81698F9169A + F9169AF9169BF9169BF9169BF9169AF91699F91797F81796F81794F86EBBFAF1 + F8FEF1F8FE8CC4FA288EF61B84F51B81F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFB9B9BA73737549494C201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23201F23201F23201F23201F23201F2357575A + FFFFFFFFFFFF57575A201F23201F23201F23201F23201F23201F23201F23201F + 23201F23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF201F23201F23201F23201F23201F23201F23201F23201F + 23201F238F8F91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9BA73 + 737549494C201F23201F23201F23201F23201F23201F23201F23201F23201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F233B3B3E737375ABABADF1F1F2FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C8656568201F23 + 201F23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F + 23201F23201F23201F23201F23201F23201F23201F23201F23201F23201F2320 + 1F23201F23201F23201F23201F23ABABADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7DBFC349EF81794F81796 + F81698F9169AF9169CF9159DF9159EFA159FFA159FFA159EFA159EF9159CF916 + 9BF91699F91797F81795F82698F88BC7FBFFFFFFE3F0FD70B3F91B83F5FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F8FE6FB6FA52A9 + F9E2F1FEFFFFFF9AD1FB249FF9169BF9159EF915A0FA14A1FA14A2FA14A3FA14 + A3FA14A2FA14A1FA15A0FA159EFA159CF9169AF91697F81795F81892F8349DF8 + A9D4FCFFFFFFC6E0FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF8CC2FA2890F6198CF71890F71793F87CC4FBF1F9FEF1F9FE8ACEFC14A1FA14 + A3FA14A5FA13A6FB13A6FB13A7FB13A6FB14A5FB14A4FA14A2FA159FFA159DF9 + 169AF91797F81794F81891F7198EF752A8F9C6E1FCFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFC6DFFC3793F61A87F6198BF6198EF71892F81795F81698F924 + A1F98ACFFCFFFFFFE2F3FE5DC1FC13A8FB13AAFB12AAFB12AAFB13AAFB13A9FB + 13A7FB14A5FA14A2FA15A0FA159DF9169AF91796F81793F8188FF7198CF71A88 + F662ABF8E3EFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFE3EEFD63A6F81B81F51B85F61A88F6198CF718 + 90F71793F81797F8169AF9159EF914A1FA31AFFAA7DEFDFFFFFFC4EAFE4DC1FC + 12AEFC12AEFC12AEFC12ACFC12AAFB13A8FB13A5FA14A2FA159FFA169CF91698 + F91795F81891F7198DF7198AF61A86F61B83F58DBFFAF1F7FEFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F6FE8EBBF91D7AF41C7EF51B + 82F51A86F61A8AF6198DF71891F71795F81698F9169CF915A0FA14A3FA13A6FB + 13A9FB4DC1FCC4EBFEFFFFFFA6E1FE2EBBFD11B1FC11B0FC12ADFC12ABFB13A7 + FB14A4FA14A1FA159DF9169AF91796F81892F8188FF7198BF71A87F61B83F51C + 80F52B84F49CC4FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABC9FA3A + 85F41E77F41D7BF41C7FF51B83F51A87F6198AF6198EF71892F81796F8169AF9 + 159DF915A1FA14A5FA13A8FB12ACFB11AFFC11B2FC5ACBFDE1F6FEFFFFFF88D9 + FE1FB7FD11B0FC12ADFC13A9FB13A6FB14A2FA159FFA169BF91797F81794F818 + 90F7198CF71A88F61B84F61C81F51C7DF41D79F43A86F4B9D3FBFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFD6E3FC5790F51F70F21E74F31D78F41D7CF41C7FF51B83F51A87F6198BF7 + 188FF71893F81797F8169AF9159EFA14A2FA13A6FB13A9FB12ADFC11B1FC10B4 + FD10B7FD0FBAFE87DDFEF0FBFEF1FAFE6ACEFD11AFFC12ABFB13A7FB14A3FA15 + A0FA169CF91698F91794F81890F7198CF71A89F61B85F61B81F51C7DF51D79F4 + 1E75F31F72F35792F5D6E3FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFF2F5FE83A8F72168F1206CF21F70F31E74F31D78F41D7CF4 + 1C80F51B84F61A87F6198BF7188FF71893F81797F8169BF9159FFA14A2FA13A6 + FB12AAFB12AEFC11B2FD10B6FD0FBAFE0EBDFE0EBEFE1EBFFE96E0FEFFFFFFE2 + F5FE4DC0FC13A8FB14A4FA15A0FA169CF91699F91795F81891F7198DF71A89F6 + 1B85F61B81F51C7DF51D79F41E76F31F72F3206EF2216AF2749FF6E4ECFDFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90B2F82265F12169F1206CF2 + 1F70F31E74F31D78F41D7CF41C80F51B84F61A88F6198BF7188FF71893F81797 + F8169BF9159FFA14A3FA13A6FB12AAFB12AEFC11B2FD10B6FD0FBAFE0EBDFE0E + BEFE0FBBFE1EBCFDB4E8FEFFFFFFE2F4FE3FB8FB14A4FA15A0FA169CF91699F9 + 1795F81891F8198DF71A89F61B85F61B81F51C7DF51D7AF41E76F31F72F3206E + F2216AF22166F1759EF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFC8D8FB588EF4206CF21F70F31E74F31D78F41D7CF41C80F51B83F51A87 + F6198BF7188FF71893F81797F8169BF9159EFA14A2FA13A6FB13AAFB12AEFC11 + B1FC10B5FD0FB8FD0FBBFE0FBBFE69D3FEF0FAFEF1FAFE88D7FD12ABFB13A8FB + 14A4FA15A0FA169CF91698F91794F81891F7198DF71A89F61B85F61B81F51C7D + F51D79F41E76F31F72F3206EF24A86F4C8D9FBFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABC8FA2D78F21E74F31E77 + F41D7BF41C7FF51B83F51A87F6198BF7198EF71892F81796F8169AF9159EF914 + A1FA14A5FB13A9FB12ACFC11AFFC11B3FD10B5FD4BC9FDE1F6FEFFFFFFA6E2FE + 1FB5FC12AEFC12AAFB13A7FB14A3FA159FFA169BF91798F91794F81890F7198C + F71A88F61B85F61B81F51C7DF41D79F41E75F33B82F4ABC8FAFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFF1F6FE80B0F81E77F41D7BF41C7FF51B82F51A86F61A8AF6198EF718 + 91F81795F81699F9159CF915A0FA14A3FA13A7FB12AAFB12ADFC2EB9FCC4ECFE + FFFFFFC4ECFE2EBBFD11B1FC12AEFC12ACFB13A8FB14A5FA14A2FA159EF9169A + F91797F81893F8188FF7198BF71A88F61B84F61C80F51D7CF42B80F48EBAF9F1 + F6FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3EEFD559BF61C7EF51B + 81F51B85F61A89F6198DF71890F71794F81797F8169BF9159EFA14A2FA14A5FA + 21ADFBA6DFFDFFFFFFD3F0FE4CC3FC11B0FC11AFFC12AEFC12ABFB13A9FB13A6 + FB14A3FA15A0FA159CF91699F91795F81892F8198EF7198AF61A87F61B83F51C + 7FF572ADF8F1F7FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFB8D7FB3890F61B84F61A88F6198BF7188FF71892F81796F8 + 1699F9159CF9159FFA89D1FCF1F9FEF1F9FE6BC9FC12ABFB12ACFC12ACFC12AB + FB12AAFB13A8FB13A6FB14A3FA15A1FA159EF9169AF91797F81794F81890F719 + 8DF71A89F61A85F654A1F7D5E7FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F7FE8DC1FA288DF6 + 1A8AF6198DF71890F71794F81797F86DC0FBE2F3FEF1F9FE89D0FC22A9FA13A6 + FB13A7FB13A8FB13A8FB13A7FB13A6FB14A5FA14A3FA15A1FA159EF9169BF916 + 98F91795F81892F8198EF7198BF73696F7C6E0FCFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFE3F0FD61ADF8198BF7198EF751ACF9C5E4FDFFFFFFA8D9 + FC32A8F9159FFA15A1FA14A2FA14A3FA14A4FA14A4FA14A4FA14A3FA14A1FA15 + A0FA159EF9169BF91699F91796F81893F8188FF72793F7A9D3FBFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6E2FDA9D4 + FCFFFFFFC5E4FD42A8F91797F81699F9169BF9159DF9159FFA15A0FA15A0FA15 + A0FA15A0FA159FFA159EF9159CF9169AF91698F91796F81793F82696F78CC6FB + F1F8FEF1F7FE7FB9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFE3F0FE52A8F9188FF71892F81794F81796F81698F916 + 9AF9169BF9169CF9169CF9169CF9169CF9169BF9169AF91699F91797F81795F8 + 1893F86EBAFAE3F1FEFFFFFF8CC3FA298CF61B82F5FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A87F6198AF6198CF718 + 8FF71891F71793F81795F81796F81797F81698F91698F91699F91698F91798F9 + 1797F81795F81794F851ADF9C5E3FDFFFFFFA9D3FB3696F71A85F61B82F51C7F + F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF1B84F61A87F61A89F6198CF7198DF7188FF71891F71892F81793F81794F8 + 1795F81795F81794F81794F81893F8349FF8B7DCFCFFFFFFC6E2FD53A7F81A88 + F61A85F61B83F51C80F51C7DF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF1B81F51B84F51A86F61A88F6198AF6198CF7 + 198DF7188FF71890F71890F71891F71891F71890F72696F79ACEFBFFFFFFE3F0 + FE61AEF91A89F61A87F61B85F61B82F51C80F51C7DF41D7AF4FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C7EF51B81F5 + 1B83F51B85F61A87F61A88F61A8AF6198BF7198CF7198CF7198DF7198DF77EBF + FAF1F8FEF1F8FE8CC4FA1A89F61A87F61A86F61B84F51B82F51C7FF51C7DF41D + 7AF41D78F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF1D7BF41C7DF51C80F51B82F51B83F51B85F61A86F61A87F61A88 + F61A89F661AEF8E3F0FEFFFFFF9BCAFB288EF61A87F61A85F61B84F61B82F51B + 80F51C7EF51C7CF41D7AF41D77F41E75F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D78F41D7AF41C7CF41C7EF51C80 + F51B81F51B82F51B83F554A2F8C6E1FCFFFFFFFFFFFF54A3F81B84F61B84F61B + 83F51B82F51C80F51C7FF51C7DF41D7BF41D79F41E77F31E74F31F72F3FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E75 + F31E77F31D79F41D7BF41C7CF41C7EF5388FF6AAD0FBFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF9CC8FA2A87F51C7FF51C7EF51C7DF41D7BF41D79F41D78F41E76F3 + 1E74F31F71F31F6FF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF1F72F31E74F31E75F31E77F42B81F48EBDF9FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F7FE72ADF81D7AF41D79F4 + 1D78F41E76F31E74F31F72F31F70F21F6EF2206CF2FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F6EF21F70F21F72F372 + A8F7F1F6FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFD5E5FC5698F61E74F31F73F31F71F31F6FF2206DF2206BF22169 + F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF206BF25791F5E3EDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABCAFA3B81F3206D + F2206CF2206AF12168F12166F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFC8D9FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFF1F6FE8FB4F82168F12166F12265F12265F1FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4ECFD598BF422 + 65F12265F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFC8D8FB3D78F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF} + Transparent = True + end + object LabelPrihlaseni: TLabel + Left = 15 + Top = 160 + Width = 13 + Height = 16 + Alignment = taCenter + Anchors = [akLeft, akBottom] + Caption = '...' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + ShowAccelChar = False + Layout = tlCenter + end + object LabelCoTestuji: TLabel + Left = 15 + Top = 185 + Width = 371 + Height = 21 + Alignment = taCenter + Anchors = [akLeft, akRight, akBottom] + AutoSize = False + Caption = '...' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + ShowAccelChar = False + Layout = tlCenter + end + object PanelProcPruh: TPanel + Left = 15 + Top = 125 + Width = 371 + Height = 25 + Anchors = [akLeft, akRight, akBottom] + BevelOuter = bvLowered + TabOrder = 0 + DesignSize = ( + 371 + 25) + object ProcPruh: TGauge + Left = 2 + Top = 2 + Width = 366 + Height = 20 + Anchors = [akLeft, akTop, akRight] + BorderStyle = bsNone + ForeColor = clBlue + Progress = 0 + ShowText = False + end + end + object bOK: TButton + Left = 230 + Top = 220 + Width = 75 + Height = 25 + Anchors = [akRight, akBottom] + Caption = 'OK' + Default = True + TabOrder = 1 + OnClick = bOKClick + end + object bStorno: TButton + Left = 311 + Top = 220 + Width = 75 + Height = 25 + Anchors = [akRight, akBottom] + Cancel = True + Caption = 'Storno' + ModalResult = 2 + TabOrder = 2 + end + end +end diff --git a/uUtils.pas b/uUtils.pas new file mode 100644 index 0000000..8f0f765 --- /dev/null +++ b/uUtils.pas @@ -0,0 +1,185 @@ +unit uUtils; + +interface +uses WinApi.Messages, System.Types, WinApi.Windows, VCL.Forms, Vcl.DBGrids, Data.DB, System.SysUtils, JvDBGrid, JvStringGrid, + RzDBGrid; + +type + TNoScrollDBGrid = class(TDBGrid) + private + procedure WMNCCalcSize(var Msg: TMessage); message WM_NCCALCSIZE; + end; + + + procedure plgCenterForm(AForm : TForm); + function plgMinimizeApplication(AForm: TForm; var AMessage: TWMSysCommand): Boolean; + function FindColIndexByColName (g: TJvDBGrid; colName: string): integer; overload; + function FindColIndexByColName (g: TDBGrid; colName: string): integer; overload; + function FindColIndexByColName (g: TrzDBGrid; colName: string): integer; overload; + function ColWidthSum (g: TJvDBGrid; jenVisible: boolean = true): integer; overload; + function ColWidthSum (g: TDBGrid; jenVisible: boolean = true): integer; overload; + function GetVisibleColsCount (const g: TDBGrid): integer; overload; + function GetFirstVisibleColIndex (const g: TDBGrid): integer; overload; + + +implementation + + procedure TNoScrollDBGrid.WMNCCalcSize (var Msg: TMessage); + const ScrollStyly = WS_VSCROLL or WS_HSCROLL; + var styl: Integer; + begin + styl:= GetWindowLong(Handle, GWL_STYLE); + if (styl and ScrollStyly) <> 0 then + SetWindowLong(Handle, GWL_STYLE, styl and not ScrollStyly); + inherited; + end; + + + + + function GetFirstVisibleColIndex (const g: TDBGrid): integer; + var i: integer; + begin + result:= -1; + for i:=0 to g.Columns.Count-1 do + if (result=-1) and (g.Columns.Items[i].Visible) and (g.Columns.Items[i].Width>1) then + result:= i; + end; + + + + + function GetVisibleColsCount (const g: TDBGrid): integer; + var i: integer; + begin + result:= 0; + for i:=0 to g.Columns.Count-1 do + if (g.Columns.Items[i].Visible) and (g.Columns.Items[i].Width>1) then + Inc(result); + end; + + + + function ColWidthSum (g: TJvDBGrid; jenVisible: boolean = true): integer; overload; + var i: Integer; + begin + result:= 0; + for i:=0 to g.Columns.Count-1 do + begin + if (jenVisible) then + begin + if (g.Columns.Items[i].Visible) then + result:= result + g.Columns.Items[i].Width; + end + else + result:= result + g.Columns.Items[i].Width; + end; + end; + + + + function ColWidthSum (g: TDBGrid; jenVisible: boolean = true): integer; overload; + var i: Integer; + begin + result:= 0; + for i:=0 to g.Columns.Count-1 do + begin + if (jenVisible) then + begin + if (g.Columns.Items[i].Visible) then + result:= result + g.Columns.Items[i].Width; + end + else + result:= result + g.Columns.Items[i].Width; + end; + end; + + + + function FindColIndexByColName (g: TJvDBGrid; colName: string): integer; overload; + var i: integer; + c: TColumn; + fld: TField; + fName: string; + begin + result:= -1; + + i:= 0; + while (i<=g.Columns.Count-1) and (result=-1) do + begin + if SameText(g.Columns.Items[i].FieldName, colName) then + result:= i; + Inc (i); + end; + end; + + + + + function FindColIndexByColName (g: TrzDBGrid; colName: string): integer; overload; + var i: integer; + begin + result:= -1; + + i:= 0; + while (i<=g.Columns.Count-1) or (result=-1) do + begin + if SameText(g.Columns.Items[i].FieldName, colName) then + result:= i; + Inc (i); + end; + end; + + + + function FindColIndexByColName (g: TDBGrid; colName: string): integer; overload; + var i: integer; + begin + result:= -1; + + i:= 0; + while (i<=g.Columns.Count-1) or (result=-1) do + begin + if SameText(g.Columns.Items[i].FieldName, colName) then + result:= i; + Inc (i); + end; + end; + + + + + procedure plgCenterForm (AForm: TForm); + var LRect: TRect; + LMon: TMonitor; + begin + // [RK 26.05.2010] centrovani na monitoru, kde okno lezi + with AForm do + begin + LMon := Monitor; + if LMon <> nil then + LRect := LMon.WorkareaRect + else + LRect := Screen.WorkareaRect; + + SetBounds(LRect.Left + ((RectWidth(LRect) - Width) div 2), + LRect.Top + ((RectHeight(LRect) - Height) div 2), Width, Height); + end; + end; + + + + function plgMinimizeApplication(AForm: TForm; var AMessage: TWMSysCommand): Boolean; + begin + // [RK 18.08.2011] uprava podle Heliosu + Result := ((AMessage.CmdType and $FFF0) = SC_MINIMIZE); + if Result then + begin + AMessage.Result := 0; + EnableWindow(Application.Handle, True); + ShowWindow(Application.Handle, SW_MINIMIZE); + end; + end; + + +end.