diff --git a/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk index 4b0701c23..e2d18d9ec 100644 --- a/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk +++ b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk @@ -48,7 +48,7 @@ - + @@ -58,14 +58,8 @@ - - - - - - - + diff --git a/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.lpk b/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.lpk new file mode 100644 index 000000000..e91374ca9 --- /dev/null +++ b/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.lpk @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.lrs b/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.lrs new file mode 100644 index 000000000..bf1da172a --- /dev/null +++ b/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.lrs @@ -0,0 +1,183 @@ +LazarusResources.Add('TRESTDWjClientLAMWClientPooler','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#230'IDATx'#1#189'V;H[Q'#24 + +#254'n'#188#10#137#239'G'#164'4'#197#7#22#12'EA'#11'"u'#169#131#157#10'Q'#208 + +#181'Tm'#7#7#193')K7'#161#148#210'L'#210']'#187':t'#177#165#20#20#212'%t)Z' + +#209'F'#7#27#205'C!'#228'a'#146'6oH'#255#255'$'#185'M'#170'17'#18#252#224#231 + +#156'{'#30#255'w'#254'''W2'#155#205#233#182#182'6\'#135'H$'#2#167#211#9#181 + +#208'j'#181#232#232#232#128#215#235#133#197'b'#145'd&hmm-z'#129#15#198'-'#22 + +'<''"'#181#8#145#172#143#141#225'.'#9'C.u'#193#183#186#138#185'2'#8#20#162 + +#141#13'X{{'#197'\S'#234#176'|'#3#2#198'=d'#220#172#138#164#18#184#21#146#146 + +'1'#217'ln'#198#167#190'>'#148#139'T*'#133'GjI8'#29#27#27#27#17#10#133#196 + +#220'n'#183#163#187#187'['#236#157#158#158'"'#157'N'#163#174#174#14#213#213 + +#213#208'h4'#226#12'K4'#26#133'jK'#242'_'#214#223#223#15#191#223#143#150#150 + +#22#24#12#6#161#148#9':;;'#197#25#183#219#141'x<'#142'D"Qp'#183' &kkk'#240 + +#249'|E'#137#246#246#246#132'U<'#218'l61'#186'\.'#28#28#28#8#171'jkk'#17#12#6 + +'/'#221'+'#176'ddd'#4#203#203#203#152#157#157'U'#10'T'#10#135#17#11#4#160#163 + +#249#159#179'3'#200#178#12#238#15#191#143#142'p'#159#220#146':?G'#136#196#151 + +'L'#162#170#170#10'555'#136#209#25#182#28'=='#25#18#135#195#129#195#195'C' + +#133#168#151#10#136'Z'#1#168#221#8#162'a"yy|'#140'r'#225'"'#249#144#157'k"7,' + +#182'r '#27#141'F'#197'5'#220#167'VVV'#20'+*'#133#130#192'['#173#214#130'xT' + +#10#5#129'7'#153'L'#151#14#184'I>'#254#183#198'}i8;'#255'I'#242#154#196#206 + +'I'#192'5B'#9#192'q'#156',Fr'#21#12'$|a'#157#228'}S'#19#244#3#3#136'nm'#225 + +']v'#255#5')6'#14#13'a'#144#198#28#188'T'#136's;;'#152#202'~'#171#234']'#156 + +')_''&0'#181#176' '#10#239#237#230'&'#222#16'!'#175#167#242#148#231#192#213 + +#175#205'[WU'#241#236#174#241#241'q|'#158#153#193'4'#205'g'#182#183#1'"'#9']' + +'\'#136#253#253#253'}'#209'^X'#177#168#15'@'#25'U'#147#240#139#7#145'q'#221#3 + +#146#135''''''#202'^'#152#252#175#215#235'E'#171#201'_'#243'x<'#202#183'*w' + +#177#226#19'R'#252#189#171#11'f'#154'7LO'#227#23#197#166#129'_I'#213#205#22 + +'$)'#224#220#20'y'#228#181'|'#148#180#196#175#211'a'#142#198'gKK'#152#164#152 + +'4'#145#155#152#240#241#238#174' a'#130'X,&'#148#179'H'#146'$'#172'*+&w('#173 + +#183#169#245#188#162#198#249'mq'#17'VZ{'#130#127')l'#162#174#252#133'S'#183 + +#189#29#245#245#245'"'#22#252#136#209#209'Q'#209#162#4#9'W'#249'u'#208#145'%' + +#129#249'y'#252' "'#6#215#136'-+'#12#137#228#233#21'wr'#191'D'#183#134#191 + +#234#2#25'{'#18#21#230' '#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWjClientLAMWClientREST','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#25#8#6#0#0#0'++'#238']'#0 + +#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28#233 + +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3')IDATx'#1#189'V=LSQ'#20#254'Z' + +#139#161#13#161'D('#161#161#5':@'#163#144'@Y`0'#129'Eg'#18#6'fta'#210'HRV' + +#168#27#131'i'#234'L'#2#184'u'#144#159#205'X'#18#196'I'#16#2','#134#162#137 + +#165'M'#17'* '#130'P'#16'"'#158#239#210'6'#143#250'Z'#141#169'~'#201#233#187 + +#239#222'{'#206'w'#206#185#231#220'W'#131#215#235#189#168#168#168'@!'#177#182 + +#182#134'X,'#6#218'5'#241#167#188#188#28#133#132#199#227#193#250#250':'#142 + +#143#143'aD'#1'A'#175'i4'#24#12#162#167#167'G9nB'#1#17#14#135#21#9#141'[,'#22 + +#184#221#238'K'#2#178'.,,'#224#236#236#12#127#3#234#181#181#181#169#177#211 + +#233#196#238#238#174'" '#20#193#200#200#8#236'v'#187#154'H&'#147#25#197#162 + +#162#162'+F'#248'n2'#233#7#173'M'#139#22'F'#158'xIII'#198'xkk+\.'#23#140'F#' + +#154#154#154#176#185#185#169#214#168#184#177#177#129#229#229'e$'#18#9#196#227 + +'q'#28#29#29'e'#12#217'l6U='#217'P'#238'h'#189#178'Z'#173#152#159#159'Gee%' + +#182#183#183#209#208#208#160#202#141#164'\c'#158#27#27#27'Q]]'#141#211#211'S' + +#204#206#206#162#172#172'L'#233'2'#213#186#4'Z'#208'K'#166#130#202#244#168 + +#170#170#10#251#251#251'0'#155#205'XYYQ'#243'L'#23#231#24#129'6'#141'z'#184 + +'B'#192'H'#22#23#23#149'w[[[p8'#28#25#175#24#21#141#157#159#159'ciiIE'#181 + +#179#179#163#246#254#150#192' '#158'ZRi'#178#242'go'#15'.>%'#215#165#242'8' + +#20'9'#16#209#154'J'#202#217#212#23#23#171#189'i'#152#219#219#245#9#30#139'!' + +#7'r'#227#13'#'#16'y'#136#252'x"'#209'e'#163#160#157#172#7#21'AH'#164'4'#207 + +#166'w"q'#145#231#200#143#175#185#8#238#136#228'K'#17's'#207#20'u#?":s'#255 + +'''E'#3#28#212#213#169#137#31'R'#223'v'#145#176'4O'#186#129'X'#243#156#127'%' + +'{'#172'2'#247']'#250#225#155'f'#157#248#18#137#192#163'CpM'#238#238#161#207 + +#162'00:'#138#196#201#9#186#251#250#240'B'#154#173#127'pP'#149#230#13'1'#250 + +'^:'#250'vW'#23#218';:`'#148#134#171#239#236'DL'#8'o'#201#5#215'?4'#132#168 + +#140'?'#137#142#187#182#22'v'#185'A'#211'`'#15'e'#26#141'^'#190#29#31#199#199 + +#213'U477'#171#185'Iy'#231#225#147#168'V'#148#167#167#167'U7s'#220'%'#6'_' + +#202#184'S'#200#156#178#239#158#236#9#234'D'#160#206#128#6#234#196'S'#175'D' + +#225#243#251'177'#167#22#31'I'#20#247'E'#24#133#207#231'CKK'#11#252#178#206 + +'/'#150#182#233#168#207'*'#203'YEDDr'#248#160#183#23#207'&''U4'#132'_'#140 + +#222#148''''#219#135#158'N'#140#141'aB'#198#1'q'#228#245#212'T'#198#8#163'$' + +#161'U'#143#128#31#134#195#20#1#203'p4'#16'P'#198'x'#233'1'#2#130#169'!)'#223 + +'y'#176#1#217#243#20#151#253#193#148#209'8'#203#252#186#206#159#7#195#240#240 + +#240'E('#20#130'afF'#245#195'AJ'#17'Y)P'#155'SO'#238#227#247#139#209#196'D' + +#238#138'|'#16#227'6'#175#247#202#7#135#151#161'!'#253#183'%'#26#141#234#222 + +#231#127#2'f'#161#166#166#230#151'y'#18#252's'#252#4#203#244'Q{'#183#149#205 + +'9'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWjClientLAMWDataBase','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3'AIDATx'#1#205'VMH[A'#16#254 + +'"'#177'&Q'#27'I'#212#136#137'?A'#208'P'#2#146#130'('#158#164'Pz(T'#161#173 + +'W'#177#199#30'*'#210#234#169' '#158#165#212#158'z'#232'E'#143'BK'#241#210 + +#139#7#149'z'#168#168#248#23'Z'#197'C'#140#26'A'#141#26#13#198#191'H'#186#223 + +'&/'#190'<#Mi+'#253'`'#242#222'Nvgvgf'#191'y'#186#174#174#174'Xaa!'#254#5#130 + +#193' '#250#250#250'tz:'#176'Z'#173'R'#177#188#188#140'H$'#130'?'#133#217'lF' + +'UU'#149#180'K'#232#21#143'CCC(..'#198#223'@('#20#194#244#244'4Z[['#229'8' + +#139'?SSS)'#14't:'#29#156'N'''#252'~?<'#30#15#138#138#138#176#190#190#142#147 + +#147#19'lmm'#225#236#236#12#225'p'#24#129'@@'#26'<>>'#150#162'F^^'#158'\'#147 + +'<'#137'^'#175'O'#153'PSS'#131#209#209'QlooK#GGG'#168#174#174'FYY'#25'&''''Q' + +'^^'#142#166#166'&'#204#205#205#161#160#160'@n&'#22#139'agg'#7#23#23#23'I;J' + +#232#179#174';'#178#203#229#146#206#29#14#7'JJJ'#164#129#220#220'\'#216#237 + +'v'#24#141'F'#140#143#143#195#235#245'beeE'#230'`bb'#2#21#21#21'im'#233#211 + +')WWW'#177#191#191'/C833#wd0'#24#176#176#176#128#181#181'5D'#163'Q'#228#228 + +#228'`ssSn'#130'p'#187#221'r'#156#177#19':'#224'nm6'#27'vww'#229';qzz*u'#7#7 + +#7#200#206#206'Fii)|>'#159#204'!7b'#177'X'#174'w'#194#157#153#22#23#147'J'#19 + +#210'#'#156'xZ'#211#252''''#205#139'BPpK'#216#20'u|'#233#196'v~'#142#151#215 + +#28'U'#141'oB'#28#9#249#21'6'#132#12'$'#222#179'p'#3#184#17'''2\'#135'B>e0' + +#249';'#226#161#186#157#193#220'C'#173#19'.z'#156#193'B;'#254#227#156#252'V' + +#184#184';'#134#204#172#209's'#173'O'#220#165#168#16#163#168#212'z'#193'kw' + +#180'N'#24#174'z!'#207#5#15#145#139#8#155#184#245#13#226'9'#152#208'qNT'#232 + +'^'#227'2\t'#250'T'#24'v'#213#213#193#147#184#176'DP'#144#229#187#217'Y}'#231#158'w'#254#231#220#143'w'#159#194'b'#177#180 + +#231#230#230'@$'#147'I'#212#235'u'#200'ecccd'#127'>'#159#135#195#225'P'#8'$' + +#208'n'#183#145'w8'#240#225#238#14'r'#169#176#246#157'='#187'yv'#6#141'F3' + +#208#135#226#18#2']2'#183#183#248#248#31#2'"/X'#166'6'#159#15#175#14#14'F' + +#250')'#233#242#251#17#2'"'#170#251#251#177'>JL'#128#137#136#240'9'#169#232 + +'t'#248'l'#179#225'1'#148#195#225#177'>'#188#18#173'V'#139#163#163'#'#196#227 + +'q'#4#2#1#222#10#133#2#4'A@('#20'B6'#155#133'^'#175#231#191'^'#175#151#251'E' + +#163'Q'#254#140#142'%(KD$'#151#203'A'#173'VC'#165'R'#193'd2!'#204#178#156#157 + +#157#197#242#242'2j'#181#26#154#205#166#228#211'j'#181'P'#173'V!'#7#161#247 + +'&'#145'H'#224#228#228#4'>'#182',='#30#15#207'xff'#6#229'r'#153#247#211'f%' + +#130#193' '#12#6#3'*'#149#138'|'#17#202#232#219#249'9^'#175#172#160'z}'#141 + +'gBG'#219#180#179#131't:'#13#173'R'#137'*'#11'h`'#130#160#198#208#178'a'#242 + +'\\'#160#194'*'#146'%'#162'c'#1#222'_^'#142't'#252#193#154#127'w'#23#186#197 + +#197#142#161'['#133#134#237#250'X,'#214#231'KC9??'#223'/2'#14#10#247#211'j' + +#197#241#241#177'd'#179#178#251#233#233'i'#168#21#10'>'#172#132#217'l'#198'b' + +'7'#9#167#211#137#169#169')'#254'_'#214'>'#161'*'#158#239#239#247#217'2'#153 + +#12'_'#4#145'H'#4'n'#183#27'[[['#146#0'qxx('#205#161#172'J'#136'T*%'#189#240 + +#8#10'X*'#149#176#182#182#134#213#213'U4'#26#13#238'#Bs)'#210#217#140#172'}y' + +#16#148'V'#255#155#158'{'#187#221'.'#149#223#139#223#239#231#175'|Z'#238'.' + +#151'K'#178#211#188'loo'#255#21#161#128#239'0'#26#18#24'$B'#27'v'#144#189#247 + +'\'#146'=\'#195#14'3'#202'xP_'#171'gi'#203#22'y'#170'D'#18'i'#13'9'#163'Eha' + +#20#139#197#129'}'#195'*!'#155'x'#246's'#145#205#189'=|'#186#186#194'[v'#12 + +#235#134#136#188'd'#27#239#215#194#2#207'|\%$'#176#190#190#142#165#165#165 + +#142#15'}'#182#208#23#139#241#244#20'_on0'#12'}'#183'='#196'h4'#254'c'#163#10 + +#232'x'#160#216#19#227#15'#V'#23'UL'#21'C'#252#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWjClientLAMWServicePooler','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#219'IDATx'#1#189'VMK[A'#20 + +'='#239'1V#$1*'#6#212#248'MC'#187#210'U'#139#217'ji7'#186#232#182#20#236#162 + +#27#215#129'n'#138#136' '#20#23#18#232#178#212#254#3#193'UA'#23#10'5'#216#133 + +#232#174'+'#193#207#141'&F'#19#204#135'Z'#210's'#199#228#145#164'I|Q'#241#192 + +#205#188#153'73g'#230#222'{'#238#139#17#12#6#179#173#173#173#216#223#223'G*' + +#149#130']'#248'|>466V'#157#19#137'D077g(!8\^F`e'#5#29#176#143'-'#174#139'MN' + +'j'#178'J'#200'f'#179#186'Ur'#131'7$x'#134#218#208')'#167'\Z'#130#143'D'#183 + +#193'L&'#147'p'#226'n'#240'p'#173#29#152'x'#4'<'#10#137#146#159#143'~?'#234 + +#234#234'P+'#156'N'''#250'm'#204#211'$^'#175#23#14#135#3#233'tZ'#167'roo/' + +#206#206#206#160#148'B&'#147#129#196'M'#210#213'4M='#214#220#220#172#23'_^^' + +#194#14'Ta'#167#175#175#15#231#231#231'p'#185'\'#240'x<'#250#164#178#233#213 + +#213#21'zzz'#176#182#182#134#129#129#1'lnn'#162#173#173#13'vQD'#178#187#187 + +#11#195'0t{}}m'#145#212#215#215#227#232#232#8'n'#183#27''''''''#21'7'#19#241 + +#133#195'a'#140#141#141#253'O'#242'wo'#15'i917v'#176'/'#4#238#134#6#164'b1' + +#24#28#143#179'/d'#145#139#11#237'2'#23#201#211#241'8T'#206'my'#136#176#5'K' + +#212'O!'#145'&'#153'%I''j'#192#241#177'n'#190#169#27'G'#172#175#175'['#175'Z' + +'ZZ'#176'Bq'#11#134#135#135'u{'#239#20'N'#218#16#164#194'=!Y'#23#8#4#172#190 + +#184'jhhH'#187'Kb'#244' $'#133'888'#208#164'###E'#227#154'd'#153#230'*Y'#240 + +#138#150#175'i!9!'#253#31#165#150'D'#180#157#12#250';&C)'#164'"'#151#171#202 + +#154'd'#148#22#167'}mjBfp'#16#169#213'U'#188#200#145#204#208'~Q'#27#254#254 + +'bm'#127'g'#178'H)'#15#226'vX'#129#255'B'#177#189#158#154#210'Z'#248#180#184 + +#136'Y'#18#10#254#208#26#152#206#165#16#13#217#133#21#19'3'#183#233#22'U-' + +#202#246#179#172#228#17#163'^D'#140#226'*'#209#139'|A'#165'*'#148'#'#175'J' + +#242'd{'#27'!n<=?'#143'm>o'#132'B'#214#164'8c'#208#222#222'n'#21'Q)3Bl'#151 + +'D'#187#235#144#22'a,'#154'x'#155#207#19#19'7'#236#221#221#214#164#188'k'#228 + +#6#249#255#1'J'#217'OLSR'#206#224#131#151#245'j||'#28'3'#11#11#186#2'?e`5'#1 + +'M*'#180#212#172'D"'#129#211#211'S}'#139#154'b'#210#213#213#133#13#230#245'{' + +#150#130#223#211#211#248#201'A'#201#172#183#185#27'~'#160#205#236#236'@'#177 + +#234#230'7'#22'"'#209#196#20#19#197#22#137#168#178'ct'#20'a~'#184#164'D<'#231 + +'`'#130#246#163'`'#210#203'2'#11#229'p'#130'h4Zq'#243'j'#239#30#28#255#0#243 + +#179#8#200#5'XCy'#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.pas b/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.pas new file mode 100644 index 000000000..f841ac435 --- /dev/null +++ b/CORE/Packages/Lazarus/Connectors/JClient_LAMW/restdwjClientLAMW.pas @@ -0,0 +1,22 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit RESTDWJClientLAMW; + +{$warn 5023 off : no warning about unused units} +interface + +uses + uRESTDWjClientLAMWBase, uRESTDWjClientLAMWReg, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('uRESTDWjClientLAMWReg', @uRESTDWjClientLAMWReg.Register); +end; + +initialization + RegisterPackage('RESTDWJClientLAMW', @Register); +end. diff --git a/CORE/Packages/Lazarus/RESTDataWareComponents.lpk b/CORE/Packages/Lazarus/RESTDataWareComponents.lpk index 119386776..74e474c38 100644 --- a/CORE/Packages/Lazarus/RESTDataWareComponents.lpk +++ b/CORE/Packages/Lazarus/RESTDataWareComponents.lpk @@ -364,16 +364,13 @@ - + - - - - + diff --git a/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.lpk b/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.lpk new file mode 100644 index 000000000..f2f774b85 --- /dev/null +++ b/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.lpk @@ -0,0 +1,352 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.lrs b/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.lrs new file mode 100644 index 000000000..caeac6011 --- /dev/null +++ b/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.lrs @@ -0,0 +1,724 @@ +LazarusResources.Add('TRESTDWUpdateSQL','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#229'IDATx'#1#189'V=H[Q'#20 + +#254'b'#210'IL\'#173#21#156'D'#156#164#182#137#208#161'Jl)8Dp'#214#16','#8'.' + +#234'R'#130#139'8v'#138'T:'#216#161#26'\['#255'('#8#197#18#201#212#8#22')'#20 + +#173':('#154#16'('#136'&'#161#132#20#154#158#239#240'^'#200'O'#19#222#16#243 + +#193'y'#247#220#223's'#207'w'#239'='#231#217#242#2#8#14#15#15'qss'#131'z'#160 + +#181#181#21#189#189#189#170#219#8#26'Y^^Fss3'#218#219#219'Q'#15#164'R)$'#147 + +'ILNN'#170#17#7'=hkkCww7'#234#5'n6'#157'N+;'#132#131#20#181#180#180'T'#12'\Z' + +'ZBOO'#15#18#137#132#186'oR'#217#213#213#133#147#147#19'm3'#193#190#177#177 + +#177#10'C'#230#156#166'j'#187#225'NNOOqyy'#137'h4'#10#187#221#174#139#199'b1' + +#213'wvvpvv'#166#253#219#219#219#168#133#170'F'#174#175#175#145#203#229'T' + +#239#235#235#211'z6'#155'E&'#147'Q'#157#156';'#157'N'#237'w'#185'\'#168#5'G' + +#181#142#217#217'Y'#236#239#239#171#219#148#163#163#163#194#197'p'#187#221 + +#170#147'fz<<<'#140'Z'#176'E"'#145'<]'#174#215#205'2'#17#143#199#209#209#209 + +#129#193#193'A'#155'z'#146#28#31#135#221#194#196#152'HZd'#200#194#216#223#252 + +'D"'#170#171#17#143#200#3#11#19#227'F'#217'oa'#236#149#200'_CoB'#3#160#158'|' + +#22'qY'#24#252#21#214#145#18#241#22#27'y'#14'kt'#153#24#181'0'#166#225't5' + +#238'L>'#138'0z'#165#141#210'<'#159'+'#163#14#163#143#183'+_'#182#0#199#240 + +'j'#167#248'8El'#18#129#157#199#199#224#171#243#23#27#225#21'~'#221#217#137 + +#135#3#3'8'#216#219#131#239#252#28'a'#9#128#143'GF'#240']'#244'{'#210#246'K' + +#242#195#185#232's'#18#244'F'#139#12#172#200#194'o'#215#214'J'#30'3'#31#226 + +#212#212'T'#193#136#210#245'F$0='#141#205#205'M<'#242#249#240'J'#234'/'#231 + +#231#241'M'#30#19#147#207#31'1'#238#147#246#242#24#165#158#254'''R0'#166#21 + +#27'UOx'#179#184'K'#191#223#143#173#173'-]'#152#185' xq'#129#247#139#139'x*' + +#6'k!'#24#12'ji'#230#17'&['#150'%F'#200#233#151'pX'#27#166#197'#'#26'b'#190 + +#152#19#10#137'''E'#11#242#252#248'^'#250#13'O'#142#133#127#175#215#171'A' + +#211#4#219'vww'#11'u'#165#139#135#27#10#133'0"g'#192#197#233#197#237#237#173 + +'R'#180#177#177#129#176#177#129#153#153#25#188#16#175'~'#202#24#158#11#207 + +#146#145#216#244#128'g'#193#178'<'#9':'#184'h@'#148'O'#129#0#18#162'_'#173 + +#174'"*'#245#15'Rr'#199#7#226#21#17'ZX'#208#27'C'#18#204'=;'#13#138#184'8S' + +#129'I'#145#199#227')9'#19#253#145'x'''#185#227#190'p'#239'D%8-e'#232'?8A' + +#228'YQ'#255#10#233#150#5#221'CC'#133#252#178#190#190#142#137#137#9'e'#167 + +#240#183#194#193'w'#249'K'#132'F'#224#31#196#234'6'#161#243#189#206'}'#0#0#0 + +#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWBatchMove','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#1#231'IDATx'#1#205'V='#206'AA' + +#20'=DKT'#26'$V'#128#10#165#194#2'D/l@D''Q'#176#0#137#196#6'H,'#128'NC'#168 + +'5D'#165#144#160'P'#251'['#192'|s&y/!'#239#205'LC'#190#147'L'#226#205#204#185 + +'?g'#238#189#17#16#18#248'"'#2#18'A'#252#0#255#223'I'#189'^'#183#186#23'2]X' + +#175#215#152#205'f8'#159#207#184#223#239#136'F'#163'('#151#203#174#3#238#167 + +'R)'#189#17#225#131#219#237'&'#154#205#166'('#22#139'b'#181'Z'#185#251#167 + +#211'I'#140'F#'#181#207#243#233't*t'#208':'#217'n'#183#158#6#232#156'g'#221 + +'n'#151#6#196'`0'#16'&'''#1#231#7#165#24#143#199'o'#146'x'#201'@'#233'(a6' + +#155'U'#203#185#227#199'e'#9'+'''#189'^'#15#243#249#28#149'J'#5#241'x'#28#207 + +#231#19#139#197#2#233't'#26'<'#211#193#196#165#143#208'n'#183#195'~'#191#199 + +'d2y#'#151'J%'#180#219'm'#240#156#17'{'#193#134'K'#4#153#226#245'z'#245'4' + +#194#168'x'#238#7'['#174'*a^'#172'V'#171#200#229'rn'#202#155#205#6#135#195#1 + +'&'#216'pU3F"'#17't:'#29#228#243'yj'#136'D"'#129'F'#163#1#27#216'pU&'#225'p' + +#24#195#225#16#175#215#203'M'#149'd'#238#155'`'#195'u'#229'b'#186#181'ZM'#165 + +#204'oV'#136#236#19#163#19#27'n'#136#149#147'L&UE,'#151'K7'#146'B'#161#160 + +#190'u#'#195#150#171#250#132#13#214#239#247#17#139#197#220'h'#142#199#163#146 + +'A'#142#15'm&&'#174#219#140#14#129'u'#205#178'c'#4'\Nws'#8'>'#30#15'%'#1';' + +#218#11#159'\'#7#244#1#221#220#145'r'#8'IP'#179#202'o'#190#201'i,L'#179'K;' + +#234'3'#153#140#26#233#173'VKE'#199#199'%'#24'1'#179#188'\.'#144#19#25'&h' + +#157#240'aiP'#142'z%'#27#23'A'#201#232#220#244'^'#14#222#222#228#19#142#206 + +#182#198'<'#29'|>'#252'7'#240#179#127'+?'#193#31'<\6'#222#245#150#238'q'#0#0 + +#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWBufferDB','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3';IDATx'#1#205'V=H[Q'#20'>' + +#137#129'.ML\:$'#17'A'#164#166'P+'#29'R(B5'#234#172'F'#236#164'(t'#23'W'#187 + +'D'#161#130#22#7#139'n'#133#198'('#212#169#24#233'X'#5#221#146#20#252#129'J' + +#234'P*'#152#236'6'#175#208#169'}'#253#190#235'{'#215#27'm'#193#8#149#30'8' + +#220#188'{'#191'{'#190#243#157'{'#238'{'#241#216'0'#249#135#230#129'y'#165'F' + +';==U^'#139#249'.Nd'#179'YYXX`'#6'z'#174#169#169'IR'#169#148#26#183#183#183 + +#21#201#216#216#152'\'#139#132#155#15#14#14#20'Q0'#24#212#243#199#199#199'25' + +'5'#165'H'#232'5'#155']'#131#129#200'noo'#183#211#233#244#149#247'\R'#242'7' + +#155#152#152'P'#10']U'#166#202#171#152#199#236#174#253#253'}U2d'#171#3'1(' + +#221','#21'1'#196#18'C'#172';G'#28#199#206#206#206's'#2#26'I'#184#184#210#213 + +'%'#15'1'#210'~ X'#29#206' wx(mmm'#18#14#135#165'P(HCC'#131'x'#202'e'#249'9=' + +'-1'#224'J'#12#222#215'''wFF'#20'i"'#145#144'J'#165'";;;2>>'#174#146'"'#135 + +':'#147#215#169#148#253#5#199'c'#250'P0holl'#216'GGG'#218''''''''#237#151#23 + +'p'#239#225#131#131#131'U8'#250#252#252'|'#245#153'T'#224#239#224#1'G"'#159 + +'?A'#246#242#242#178#196#227'q'#165#164'X,*5^'#7#23'p'#148#208's'#185#156',.' + +'.*'#172'eY'#10'kv'#161#190#140#12'\'#242#251'%'#15#23'7P '#22#202#243'q}]' + +#253'6'#177'9'#16#151#12#156#31#251#136'+'#131#192#239#196'pM+'#185#187#186 + +#170'2'#161#149#17#248#13#234#236#205'd'#228')'#158#185#165#140#0'Y'#140#183 + +#187#187'%17'#167#3'e'#150#150#196#130#138#251#8#254#200#9#202#170'X'#184#188 + +'UJ'#152'I,'#22#211#147',O'#184#181'Uz'#29#2'5'#7'g'#16#226#204'L'#227' u' + +#215'\'#235#149#243#210'k%'#180#205#205#205#179'R'#160';HB59'#167#230#226#140 + +'e*A'#205'yV'#245#245#245'l'#26#133#163#189#130#223'3'#240#161'?'#145#176#150 + +#17'l'#240#128#228'3Hx'#128'y*`'#9#241'\'#193#161#231#176#30#131#135#129'a+[' + +#168'@'#17'D'#12#28#134#186#214#158#30#177#177'V'#216#218#146#199#151'H'#176 + +'0'#132#250#135#141#133#2'|`vV'#250#7#6#212's?'#252#215#204#140#212#173#172 + +#200'3'#3#199#236'_'#160#132#207'q'#166'n'#25#187#145#192#238#238#174#198#232 + +#238'2?*'#170#211#156#210#185'Fe,'#205#197#143'O'#209#221'c`K'#165#146#194'_' + +'*W'#222'qB#p'#182#1#27'"'#3#133#204#144#23'7'#18#137#168's'#249#224#224'\,' + +#215'y'#135#220'7'#20#207#203'l'#14#173'$`l'#226#200'<'#242#249#188#6'r'#19 + +'3tq'#230#30'*'#164#18':'#19';99'#17#211#20#9'_t'#21'9'#191#197#28#189#152 + +#227#6':U'#240#22'766J'#212#193#234#210#192#163#209#168'"PJ'#217'<'#192#135 + +'B'#161'j'#146'$'#190'r'#223'FG'#207#2#227#249'+'#222#162'o'#247#246#164#163 + +#163'C|>'#159'*Css'#179#12#15#15#203#147'tZn9o'#222#239#192'?'#192'WtmmMZZZ' + +#148'R&L'#178'd2'#169'I<'#255#229#31#137#235#216#141#144#220#136#253#6#181'"' + +#245'X'#24'*'#224#159#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWClientEvents','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#1#244'IDATx'#1#221#150'=KBQ' + +#24#199#255'E'#235#21'IZ2'#194'U'#23#181#165#156#20'R'#154#4#137#214#6'!'#218 + +'B'#29'jp'#241#19#136#186#182#164#159'@'#28#203#197#161#161'M'#135'P'#16#7 + +#145#12'\|'#185#165#136#131#245'<'#183'k'#229'U'#175'z'#17#131'~'#240'p_8' + +#231#252#239'y'#222#238#217#248' '#160#160'P('#160#221'nc'#25#244'z=l6'#219 + +#196#251#13'F)r'#27#12'BH$`'#196'r'#136'd'#175'4'#247'2'#22'S'#23#225#29#212 + +#237'v'#152#161#141'''2K>?'#182'#'#214#216#252'='#136']$@;{'#242#26'J6'#177#6 + +#214'"'#178#165'|q'#31#14'C'#167#211'A'#11#162'('#194#179#136#136#219#237#134 + +#209'hD4'#26'E'#181'Z'#133#217'l'#6#231'F'#191#223#151#158#29#14#7'j'#181#26 + +#186#221#174'4'#222'`0'#160#215#235'!L'#31'W'#175#215'1'#141#153#238#26#12#6 + +'('#151#203#168'T*'#146#200#232#153#235#161#217'lJ'#187'e+'#22#139'H'#167#211 + +'Pc'#166#8'g'#9'/'#200'4'#26#141#239#172')'#149'J'#210#226#130' '#160#213'j' + +#161#211#233#192#235#245'B'#141#177':'#201#229'r'#200'&'#147#208#209#2#163 + +#173#11'r|'#222'Dq'#236'Y'#9#207#145'b'#226#247#195#229'r'#253#8#16#19'19I' + +#165#164'|'#215#194#11#217#144'D'#148#252#159':'#249#155'b'#204#146')C'#203 + +'1:'#196#10'E<'#242#162#243#184'#KS'#138#239'P'#199#221#166#172#12#168#140 + +#213#228'.n'#233#207'>'#31'."'#17'X'#173'V'#156'S1'#222#168#140#223#130#6#216 + +#165'N'#167#19#143#161#16'N'#233'>'#148#201'`'#200#133';'#227'o'#170'I'#132 + +#235#193#138#175'8'#29#145#29'POSC'#147#187',d&'#147#9')'#250#250'k'#186#223 + +#167#223'nYnA'#211#24#219#9#247#170#18#230#7#158'k'#250#138'\u'#22#8'Hs'#184 + +';'#31#147#171#184#241#236'M'#17#155'3TF'#176#253#178'%'#135'QWdC'#203#2#157#205'S'#202 + +#197#131#193'z{'#216#179#233#154#207#3#203'%'#239#129'{'#249#177'-='#183'7' + +#231#23#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWClientSQL','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#162'IDATx'#1#189'VM'#136'RQ' + +#20'>'#150#129'!'#254'@'#204#194'T'#212' '#144'Z'#168#139'~6'#166#210#207'Jq' + +'('#218#142#155#200#165#227'b'#168' '#144#161'h'#233#12#4#3#6#130#181#143'q' + +#25#25'('#173'r'#145'?'#155'6A8'#161' '#180#17'_'#20'n'#154#206'w}O_'#226#204 + +#220#24#199#15#206#187#231#221's'#206'='#231#158'{'#222#185#207#176#207' F' + +#171#213#162#193'`@'#139#128#221'n'#167'`0(x'#3#0''''#133'B'#129#204'f39'#157 + +'NZ'#4#134#195'!'#245#251'}J'#167#211#194#137#17';p8'#28#228#247#251#15'4' + +#170#215#235#255#188'['#173'Vr'#185'\d'#177'X'#230#234'#XEQDv'#0'#Rt'#144#178 + +#22'U'#177'X'#20#188#205'f'#163'p8L'#249'|^'#208'avp'#164#165#255#20'I'#128 + +'w,'#242#12't:'#29#242'x+'#215#3'z)'#189#19#148#240#11#238'MWVW'#233'#w' + +#206#31'L+|'#31#220#224#17#231#181#227#245#138'f'#23#141'F'#201#201'z'#223 + +#153'G'#135#181#178#236'%'#247'2'#189'\'#235'q'#181'Zm'#226'D'#164#235#9#11 + +#30#228'r'#244#149'?'#158'd2I'#23'Y'#25#163#6#24#163#3#7#2#1#254#190#170#212 + +'l6'#201#203#11#191#222#221#165#199'l'#11#30#178'o<'#143#177#193':f'#221#5'(' + +#156'\'#224#168#203#229'2'#189#217#219#163'w'#155#155#244#153#163#152#7','#22 + +#139#197#200#231#243#137#247'R'#169'DWS'#169#137#252#17#219'cGgy'#220#153'u' + +#2#1#182#185#193#252'o^'#232#28#19#240#129#233#153#206#9#218'<'#22#174#169'A' + +#192#174#221'n'#139#157#2#218#213#134#179#171#232#236#132#147#21#206'/'#162 + +'tg2'#148#229#180'iQ'#223'g'#222#169#139#20's9'#158#203#176#158#134'3'#236#16 + +#169'$'#245'l'#1'\'#226#183'uN'#12#156#223#253'z($'#162#248'B'#227#138#185'L' + +#243#191'nT'#140#162'.'#162#161#192#180#161#202#158'2=g'#186#196't'#151#201 + +#197'g'#20#10#133#198'?'#18#175#178'Y:'#191#189'-'#170#229'0'#160#253#24'f' + +#162#156#7#148#244#207#245'uz'#184#181'5'#253'['#129#224'$'#127#137'h'#25#248 + +#11#9#13#245'*'#28'l'#137#25#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWContextRules','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#25#8#6#0#0#0'++'#238']'#0 + +#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28#233 + +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#146'IDATx'#1#237'VMKba'#20'~' + +#174#24'C'#145'QJP'#147'R'#173#194'Y'#21'H303'#171'Qh`'#160#250#9'nf['#173'Z' + +#214#31#136'j1'#235#241#15#8#230'Zp'#233#232'&7"'#136#162#248#181'PP'#209'QI' + +'Q'#231#156#147'^'#196#185'u'#149'fv=p'#184#247'='#239#185#231'9_'#247#190'W' + +#25#16#160#131'Z'#173#134'h4'#138'i'#177#188#188#140#221#221']'#185'W'#244#8 + +'2'#153#12'~'#238#237#225#11#145'L'#139':I'#241#244#20#223#175#175#255'&`' + +#135#30#143#7#151#151#151#178#254'qt'#132#175'ww'#152#21#191'H'#222#221#223 + +#195'0'#185#177#181#181#5'EQT'#130#254#12#145#143#195#138#199#210#26#199#149 + +#172#240#249'|'#216#220#220#196#237#237#173#232',x'#25#212#12#184','#199#199 + +#199'B2'#2'g'#242'RH'#15#184#238'n'#183#27#193'`P'#148'\'#30'v~qq'#129#243 + +#243's'#152#205'f'#204#138'z'#189#14#151#203#245'X'#162#155#155#27'q'#198#224 + +'q\YY'#193#201#201#137'j\'#169'T'#208#237'v177'''#215'f'#179#137#157#157#29 + +#132#195'a'#25'I'#206#154#197'f'#179#201#213'b'#177' '#155#205#10#129#148#136 + +#149#220'\'#6#207#239#184#243#249#249'y'#17#175#215#11#147#201#132'v'#187#141 + +'N'#167#131'\.'#135'F'#163'!'#4#171#171#171'('#149'J"kkkBd'#181'Z'#229'y!'#24 + +'E'#161#133'T*%'#25'p'#0#129'@@'#156'r'#150#236#168#215#235#201's'#213'jUl' + +#251#253#190'D'#30#139#197'd'#143'!%:'#162'Y'#127#138#224#237#226'"'#140'T' + +#207'O'#219#219#170#206'L'#247#245'x'#28#142#245'u4'#202'e'#188'!'#221'g'#210 + +#153#150#150'd'#191'A'#246'xx'#144'{%'#157'N'#15'B'#161#16#202'd'#168#133'2E' + +'k'#26#146's'#227'l'#145#8'\'#148#133#30#242#156#17#13#141#209#239#247#227 + +#224#224'@'#148'WWWr'#229#146#24#12#6'8'#157'ND'#10#5')'#225#225#225'!'#28#14 + +#7#226#20'y'#152'2~'#143#233'`h'#181'Z'#234#130#155#183#176#176' '#141#228 + +#134'%'#147'ID('#226'D"!'#19#195#176#219#237#200'ml`Z'#24#185'i'#249'|^'#22 + +#197'bQ'#132#27#202#239#6'7s'#127#127'_'#214'<'#150'#'#187'Y'#160#184#129#129 + +'Sc'#195'C'#226'"'#209#138'5N'#226#198#243'P{'#192#14#172#26#6#131#161'^'#139 + +#160#128#233'a,'#12#217'&'#161#12#245#186#167#145#30#193'k'#6#186#4'Ez'#137 + +#242#26#159#137#231'2X'#130'>'#248'\'#182#146'o'#227'G'#250'L7'#206#206'`' + +#159'0x*'#3'/'#201#7'h'#151'u'#4#222#251'M'#135#254'7'#250'2'#171#7#14#203 + +#191#194#248'o'#203#127#199#31#254#137'C'#161'*d'#4#30#0#0#0#0'IEND'#174'B`' + +#130 +]); +LazarusResources.Add('TRESTDWMassiveCache','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#139'IDATx'#1#189'V=o'#26'A' + +#16#29#192#5#18#31#129#134#130#143#19'P'#1'A@'#131'H'#232#172'H'#169#210'X' + +#238#237#138'P'#208'Xi]'#224#252#129#224#150'4'#193'? 4t'#161#160#161#136#237 + +#2'*S !'#4#7#162#131'p'#132'2'#206#204'h'#185#240'q'#7'A9'#229'I'#163#189#219 + +#221#219'7'#239#237#236#221#153#158#17#128'h'#183#219'0'#155#205#224#24#184 + +'\.H'#165'R{'#231#152#8'DR.'#151#193'f'#179#129#207#231#131'c0'#159#207'a2' + +#153'@>'#159#223'O'#210'j'#181#158#7#131#1'D"'#17#168'T*'#224't:'#225#24#140 + +'F#H$'#18#144#203#229#244'I'#26#141#6';'#214#233't '#147#201#128#195#225#224 + +'k'#202#242'o'#161'('#10't'#187']('#149'J'#154'$'''#171#27'Z'#148#8#170#213 + +'*'#248#253'~'#142'c@V'#147#237'Z'#214#177#146#225'p'#200#178#163#209'(1'#27 + +'j'#157'j'#215#227#233')'#204#206#206' '#130'A'#10#140#180'N'#181'+'#131#241 + +#229#225#1#20'\'#204#127'}m'#184'uL'#242#141#6'Pj'#12'C'#190#188#228#1'R'#16 + +#139#197'`'#177'Xpv'#227#241#24#236'v;_'#147#165#20'T0tOI'#165#211'i'#168#215 + +#235#16#12#6#249'8'#208'\:{*'#201'['#140'{'#145#197#228#226#2#20#180'm'#142 + +#217#144#130'~'#191#15#181'Z'#141#237'k6'#155'`6'#155#193'b'#177#192't:'#5 + +#183#219#205#227#4'<'#10#188'''4&'#203'2'#20#10#5#245'p'#155'W'#18'eAD'#214 + +#141#209#186#199#187';U'#190#213'j'#229#172'h'#17'I'#146#160#215#235#241'i' + +#167#190'd2'#201#5#18#14#135'Y'#1#129#200#215#193'J'#190'bP'#29'E5'#172'[.' + +#151','#157#144#205'f'#249':'#20#10'A '#16#224'}'#163#136#199#227#220'z'#189 + +'^N'#196#227#241#176#26#154#163#146#156'c'#212#169'24'#172#147#176#149'`'#19 + +#146#152#243#19#227#181#198#24#136#181#160#209#248'CB'#152#11#203#162#162#149 + +#5#185'^]'#141'D'#251'Jg'#156#158#255#5'kv'#145'E'#14'A'#176'm'#221#11#157'E' + +#190#195'~P'#210'oV$'#180#129'/'#197'C'#247#176'k'#221#161#19'r'#14#135#149 + +#152#233'{'#160'\]'#177#146#204'Z'#22'2'#24#7#182#235'='#190#2#138#180#248 + +#237#237#142'uzJ'#158'D2z'#216#176'k'#213#249#17#137'>'#145'u77'#27#214#25'b' + +#215#250#192#135'bq'#199':#p'#178#221#177'm'#157'!'#213#165'5a'#221#186'C' + +#138#244#236#162'='#163#202#213'%!'#144'u'#159#241#5#247#132#138#180'>]?0L' + +#160']'#133#212#183'@'#219#223#137'?'#25#211#234#151'H'#15#255#250#171'D'#31 + +'-'#248#31#248#13'#K6'#213#29'^7'#231#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWMassiveSQLCache','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3'YIDATx'#1#189'V=LSQ'#24'=-' + +#14'$P'#10#137#146'PJ'#249'11m%'#252#196'`'#149#5#26'"+!.N'#128#3'20'#0#174 + +#12#165'qq'#18#186#152#224#2'l.'#176#176'Yc'#23#6#129#24'`'#145#129#132#0#253 + +#161'[K['#187#152#128#223#185#188#247'|`'#219#216#216'x'#146'/'#247#190#222 + +#159#243#157#243#190#251'n-W'#2#8#246#247#247#145'N'#167'Q'#14#234#235#235 + +#209#211#211'Sr'#142#133' '#201#242#242'2jjj'#208#220#220#140'r'#144#201'd' + +#144'L&155U'#154'doo'#239#234#236#236#12'n'#183#27#171#171#171#168#171#171'C' + +'9'#136#199#227#232#234#234#194#228#228'dq'#146'H$'#162#28';<<'#132#207#231 + +#131#205'fS}f'#249#183#200'f'#179'8::'#194#226#226'bA'#146';'#250#3'7%'#193 + +#198#198#6#156'N'#167#138'r@'#171'i{!'#235#148#146'h4'#170'd{<'#30'2W'#212':' + +#195#174']'#191#31#233#209'Q'#184'%'#168#160#146#214#25'v'#249'$Vvv'#144#149 + +#205#156#243#243#21#183'N'#145'|'#226#128'H'#245'J'#196#198#199#213#0#21'x' + +#189'^'#228'r9'#149']"'#145'@mm'#173#234#211'R'#6#11#134#207'L'#170#175#175 + +#15#225'p'#24'mmm'#234'8p.'#207#158'A2,'#177#173'e'#145#28#27'CVl'#203'H6Tpr' + +'r'#130#205#205'Me'#223#214#214#22#172'V+'#170#170#170#144'J'#165#208#208#208 + +#160#198#9'9'#10#234#157'p,'#22#139'azz'#218'8'#220'V]bL#'#162'u'#9#177'nwm' + +#205#144'_]]'#173#178#226'&.'#151#11#199#199#199#234#180#243#183#238#238'nU ' + +#29#29#29'J'#1'Ar3'#148#146'u'#9#214#145#167#128'u'#249'|^I'''#250#251#251'U' + +#191#189#189#29'---'#234#189'1:;;U'#235'p8T"'#141#141#141'J'#13#231#24'$'#207 + +'%'#194#172#140#2#214#185#164'u'#225'&\'#218#156#31#18'O'#11#140'A'#219#11 + +#145#200'o'#18'"'#163'Y'#230#209#218#152'F^'#172#174#226'Z'#251#164#200'8' + +#215'_'#194'd'#23'-'#178'i'#4#183#173#179#23#217#228'+J'#131'I'#15#233'$|' + +#129#15#181'E'#219#248#211':]IH'#226#155#148#231#165'T'#204#184#4#19#249'"k' + +#207#165'},'#207#159#165'O'#188#151#190#243#182#18#222#7';'#179#179#176'--' + +#193'k'#202'B'#183#14#26'ifb'#2'w'#165'l'#7#7#7#241'6'#20#194#132'<'#191#188 + +#190#138'pqq'#129'{Ri'#173#173#173#128#169'*a'#182#235#149'|'#2#2#220'H'#136 + +'n['#199#172#190'k'#147#169':'#24#12#170#250#183#219#237#248'87'#167'~'#127 + +'!'#235#245#131#167#175'1'#219'e'#156#147#160'L'#204'/,('#235#178'&'#235#24 + +'T'#184'.'#31#204#131#131#3#204#204#204#24#183'!'#201#207#133#216'|'#163#234 + +'k'#158#153#148'X'#205#178'^'#7#2#200#210':\'#31'J'#152#236'{#*m'#154'5TA' + +#194'Gb]he'#197#152#199'OJ@~'#27#146'6fZo'#209#239'x3'#2'bC'#147'l'#202#137 + +'zuq'#171#7'##H'#157#158#226#190'X'#19#149#231#159#3#3#215#155#200'wL?'#253#4 + +#19#24#19'u'#163'rN'#252'~'#191#165' '#9#241'N'#188'o'#18#251#204#138'h'#163 + +'M'#235#175'k-'#207#137'^'#206#195#166'qZ'#233#148#239'Yoooq'#18#226#131'(r' + +#136#162'BW'#23#11#196#130#155#222#235#160#3'9'#177#157#5'e'#252'[A'#9#252 + +#235'_%r'#224#127#224#23'x`'#147#202'WS]'#238#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWMemtable','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#25#8#6#0#0#0'++'#238']'#0 + +#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28#233 + +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#1#177'IDATx'#1#237'V'#191'k'#194 + +'@'#20#254#174#137'.b*'#136#224#143#10#142#142#226#210#238#149'N'#221#156'uu' + +#245'Oqu'#23#156#250#15'T0'#147#208'fr'#144#12#14'"'#152'`'#6#193#31')'#29 + +#219#222#187#24'1'#16#219'+D'#135#210#15'^H'#238#222'{'#223#187#239'].a'#159 + +#28#224#24#143#199#216'l6'#136#2#169'T'#10#149'JE'#220'3"'#232'v'#187'H$'#18 + +'('#20#10#136#2#187#221#14#142#227#160#213'jA'#165#202's'#185#28#202#229'2' + +#162#2#21#234#186#174'PE%Y'#146#201'd'#192'a8'#28'"'#159#207'c0'#24#160'T*'#9 + +#233'4M'#19#133#152#166#137'L&'#131#217'lv'#152#163#241#229'r'#137'F'#163#17 + +' '#161#185#171#176#10#214#235'5'#250#253'>'#210#233'4'#22#139#5'z'#189#30'b' + +#177#24'F'#163#17#226#241#184' '#153'L&"'#129'eY'#152'N'#167'P'#20'%t5'#161#4 + +#20#152#205'f1'#159#207#197'35'#141#238'IW'#154'SU'#245'0N~'#171#213#10#213 + +'j5'#148#128#233#186'.6'#210'q'#131#13#195#128'm'#219#161#1#190#156'$'#25#233 + +'L'#13'%'#212'j'#181#128#212#20#207#24#131'('#133#150#185#223#173#2#164'?' + +#217'o'#176#221'n'#133#29#19#20#139'E'#143#192'i6'#161'H$y'#229#230'R'#181#18 + +#190#239't'#209'u'#143#224#150#219#141'D'#144'/'#218#157#132#175#197#237#3 + +''''#154#28'%'#196#10#158#185']K8'#191'@'#30#212#250'{'#159#224#1'r'#18#249 + +#168'K'#248'\L'#162#203#244#224#9'r'#18#153#240#180#149'A'#160#7'u'#252#247 + +#224'4'#254#192'{@g'#186#141#232'A+'#160#220'*}'#253#141'v'#27'f'#167#3#237 + +#135' :'#140#217#190#186#239'@'#243'o<'#231'#'#207#205#206#253#219'rv|'#1#152 + +'}'#186#138#207#222':b'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWPoolerDB','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2'WIDATx'#1#189'V;'#139#26'Q' + +#20#254#20#139#4'2>'#22#22#22'5([i'#231'ja'#21#220'b'#147#194'JHm'#147'z'#197 + +#221'2'#219'('#228#15'('#219#165#179'L'#165#141'EXk'#11#11#31#8#235'#'#22'"' + +#8#22#190'p`'#193'B'#204'9WFt'#215'd'#174#251#240#131#227#204#220#185#222#239 + +#222's'#191#243#205'5,'#9' T'#171'UL'#167'S'#200#194#231#243#193'j'#181#234 + +#246'30'#152#228#231#213#21#148't'#26#14#200#227#143#219#141'@6+'#200'tI*' + +#149#202#178#127'v'#6'/'#246#199#175'H'#4#223#137'H'#143#196#200')R'#240'<|' + +#144'L'#175#17#7#192'AHL'#252#243#251#230#6'f'#179#25#251'b<'#30'K'#245#19'$' + +#157'NG'#200'1'#28#14#11#178#217'l'#134'F'#163#129#193'`'#128'@ :Z,'#22#228 + +#243'yq'#175#245#145#145#240#154'd>'#159#139'H'#165'RX,'#22'p'#147'<'#235#245 + +':B'#161#16'F'#163#17'j'#181#26#156'N''Z'#173#22#252'~?'#28#14#7#134#195'!J' + +#165#146#20#137#216#147'n'#183#139'`0'#8#175'w%'#228'^'#175#7#173'='#151#203 + +#137'B'#141'F'#163#176#217'lb'#240'r'#185#140#201'd'#242'$'#197#220'?'#153'L' + +#238'^'#137#239#248#24#179#251'{'#216#30#30#240#233#244'T'#188'P)'#29#10#13 + +#162#26'i'#30'GG'#200#222#222#226#163#193#0#133#158#249#157#149#174#239'ON' + +#182#6#227#12'PY'#8#162'M2A'#242#173'P'#128#147'b_'#228#207#207#197'J7'#237 + +#200#229'r!M'#238#193#208#136#222'L'#194#188'"'#13'&'#188#16#17#178#150'M' + +#240#236#185'-'#145'H'#188#30#201'&X ,'#142'x<'#190#213'.H'#238'('#30#151#226 + +#23#10#205#211'8'#195'w'#138#130'%I'#151#21'e'#160#26#250#170#170'x'#247#232 + +'?'#236#200#187'\Y'#144'|'#166'pb7~0Y,'#134#220#229#229'V{&'#147'A'#177'XD' + +#12#250#208#221#248#6#133#221'n'#127#210#238#241'x '#11#169'='#225#202#206 + +#210'w'#131'S'#165'P'#218#250#253#254#186'p_'#141#164#217'l'#10#197'h'#21#206 + +#190'%k)'#12#169':'#225#212#176#238'y'#5#28'|'#191#143'k'#155#216'I9'#239#255 + +#218'xV'#24#27'b'#129#28#129'S'#165#146#170#248#202'^'#199#27'/'#131#213'A' + +#226#250#26'vr'#224']s'#235'c'#165'0'#199#197#197'z'#179'9U'#237'v'#27't>'#16 + +'~'#245'_'#2#237#180#194#15'oy$'#194'!'#240#23'D1'#229#4#188's7'#175#0#0#0#0 + +'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWResponseTranslator','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#201'IDATx'#1#237'VKK'#27'Q' + +#20#254'&'#198''''#157#168'("X'#27#237'B'#176#10'*'#5'7RPH'#187#18#244#143 + +#212#199'F'#168']'#185#232#202#141'n'#187'Q'#177#155#174'tS'#176'6'#16'\'#8 + +'% *'#136#129#20#242#128#218#144#132#188#131#129#164'!='#231#196'L21'#230'a' + +#233#174#31'\'#230#204'}}'#231'|'#231#220';'#163#228#8' \\\ '#26#141#162'^LN' + +'N'#162#171#171#171#230'<'#133#193'$'#31'WV'#160'noc'#0#245#227#199#208#16'^' + +#30#28#8'YM'#146#243#243#243#220#205#212#20'F'#209'8>/.'#226#29#17#213'"1' + +#178'D*'#30#135''''#180#246#240#240#16#30#143'G'#228'f'#249#22#137'xvvV7'#207 + +#136#191#4#19#12#145't'#188'9;'#188#177#177'!'#132'+'#148#130#2#20#155#205 + +#150'3'#204#205#225')'#26#199#23#242#248#173#205'v'#175#127'xx'#24'n'#183';O' + +#192'r'#177#241'u}'#29'&'#147#9#141'"'#28#14'W'#236'7'#155#205#186'w!'#177'X' + +',p8'#28#184#186#186'B6'#155#149#176#11#229#201'6'#143'['#173'V'#177'Y'#26 + +#158#179#182#182#134#163#163'#m'#163#221#221']'#25#227'j'#139#197'b:'#18'C' + +#193#240#249'|H'#165'RH'#167#211#240#251#253'hoo'#23#187#173#173#13#251#251 + +#251'hmmE '#16#144'g('#20'B"'#145#208'm'#196'9'#217#166'c'#192#133#176#188 + +#188#172'9'#168'#aD"'#17'm'#224#242#242#18'.'#151#11'ggg'#24#31#31#23#239#25 + +#156#212#142#142#14#196#227'q'#29#9'G'#206'2'#173#174#174#226#228#228'D'#242 + +#178#183#183'W'#148#203'J/&U'#197'3'#131#1'*'#229'&'#161'('#197#213'==Pooa' + +#164'(_'#209'B'#134#218#220',k~'#19'Yy4'#236#220#194#194#2'vvv'#164#143#171 + +#172#238#234#186#166#246'}z'#26#166#129#226#189#240#139#188#127'^'#225#196#27 + +#200#217#249#249'y'#201#145'V]'#181#192#194'|'#154#153'A'#231#216#24#130#200 + +#159#141#193#193#193'|^H'#210'd2)2755i'#5#179#185#185')Qir'#213#2'Ga&'#18#187 + +#221'.'#155'1'#137#211#233#20'Y'#188'^/2'#153#12'z{{'#209#221#221#173#157#252 + +#254#254'~'#177#235'&a'#4#131'A'#180#180#180'`ddD'#154'\G'#148#199#137#137#9 + +#156#158#158'J4\'#157'}}}2'#127#160'DV!'#249'F'#173#252'('#190#161'Vz'#167 + +#141'R"-'#229#204#199#199#248'@'#143#247#184#15')'#240#165#165'"'#201'kj'#181 + +#18#207#227#149'>'#5#234#3'k'#127#150#216'u'#203#197#139'r'#21#250#19#208'oX' + +#218#223'0'#201#255'H'#132#132'k'#218#129#234#137#231#202#179'R'#155#174'0' + +#246'P$7'#212'^'#220#29'L#_'#205'v'#186'_'#174#183#182'`'#170'B'#146#187'{' + +#150#207#169#20#9#147'v'#210#158#133#159#12#229#177#191'D'#213#192#234'h'#4 + +'J'#233'm'#251#15#241#7#9#20'('#29'l'#209' '#228#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWServerContext','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#237'IDATx'#1#189'VM'#136'RQ' + +#20'>>'#140#249#137'f'#134#217#206#4'N'#139#154#22'1C'#148'S'#139#152#17#172 + +#221'0Z'#27'i'#163'F'#235#156'!Z'#171#181'k'#163'a+k'#200#129#150#13'9 '#129 + +#229'BW)'#4#254#16#229'F'#145#208#133#4#141'?'#16'h0v'#190#171#207#222#152 + +#162#175#145'>8'#190'{'#175#247#157#239#158#223#251'4-F'#165'R'#161'T*E'#163 + +'B'#167#211#9#25#5#26#224#133#211#217':'#237'v'#211#2#141#142#175','#167'<' + +#30#186#183#189'=t'#175' y'#169#211#181#12#133#2#169#197#219#185'9zxx8t'#31 + +'8'#164#31#255'@'#0#28#177#139#149#128#203#11#3'ti'#233#132'p'#185'\'#20#139 + +#197'h'#142'-'#131#128#200#225'p'#144#201'd'#26'/'#137#18#176#200'l6'#211#198 + +#198#134' '#21'$'#31'y'#225'hm'#141#212'"'#145'H'#244']'#135'b'#171#213'J' + +#193'`'#144'l6['#155'D'#175#215#19'$'#30#143'S>'#159'''I'#146#196'i'#176#25 + +#207#245#245'uJ'#167#211'b,+'#177'X,'#196#153#255#23'A4'#26#21#22'`'#175'2' + +#197'%'#252#20#139'E'#10#135#195#20#137'Dhjj'#138#154#205#166#144#233#233'iq' + +#226#137#137#9'*'#151#203#212'h4'#196'z6'#155#237'k'#133#221'n'#23'OX'#1'2' + +#25'"&'#156'e'#180#180#180'$'#158#213'jU'#156'$'#151#203'Q'#189'^'#167#213 + +#213'U'#154#156#156#20#155#17#212#197#197'E'#177#167#31#224'&'#196#8#186'P' + +#220#129'@@'#172'kn'#27#141'-'#253#242'2'#213'Xa'#189'V'#235#190'pff'#166';' + +#239#29#3'Y'#182'~'#159'-W'#2#135#3#1'\'#133#195#129#212'`0h4O'#137'ZwH='#246 + +'Y'#30#13#136#11#8#228#204'B1'#158'8'#133'e'#192'=rr`'#172#236'oc!A'#28'2' + +#153#12'-,'#252#233#128#201'd'#146'B'#161#208#248'H'#224'"'#191#223#127'l' + +#205#231#243'u;'#187#182'_I]cQ'#211#149#135'A'#139'Z'#151#3#255#138#218#221 + +#245#29#7'n'#158'O'#231#224#249'3'#150#239'J'#144'I'#165'R'#233#216#154'r'#222 + +#141'I'#173#179#25'-'#228#211#193#129#232#172#151';-'#226#250#222#30#193#173 + +'yn1'#223#248'y'#179#135#196#235#245'v'#171']'#6#186#176'\'#245#221':'#1#201 + +']'#150#243'[["'#207'Q'#253#8'('#172'r3'#233#23#254#239#13',c'#129#203#6#213 + +'I/'#196#165'%O'#224#134#11#204#158'd'#11'v'#249':'#134'rd'#7#8#31#243#127'O' + +'X.'#177'+k'#164#30'Z'#9#149#201'.'#129#11'^'#179'R7'#199#2#0#193'U^'#135#251 + +'VX'#249'&'#23#150#135#201#159'w^'#156#31#241'CBX'#179#235#241#180'~'#237#236 + +#208'E'#158' TpI'#157#218'~G'#230#225#163#225'='#11':'#214'-j'#167'6'#146#228 + +''''#23' '#146'd('#1#128'O"t'#215#130#138#187'^'#217#155'F!'#161#255#129#223 + +'66?Q'#137#197#204'^'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWServerEvents','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#173'IDATx'#1#189'VM'#136#18 + +'q'#20#127#138#225'G'#180#138#212')A'#133#216#182'.'#235#201#237#18'*l'#231 + +#213#130#240#166'Fww'#217#186#5#234#181#139#236#185'"'#133'N'#209#146'{'#148 + +#12#244#148'B'#133'B'#148#23#197#131#29#188#180'~@'#161#193#218#251#253'wf' + +#152'5'#197#209#149#253#193's'#198'?o'#222#239'}'#207#232#198#140'n'#183'K' + +#213'j'#149#180#194#229'r'#9#209#2#29#240'"'#145#24'_N'#165#232':i'#199#15 + +#150'K'#233'4='#218#221#157#171'+H^'#186'\'#227'@'#171'E'#139#226#189#205'F' + +#251#199#199's'#245#192#161#255#181#4#1'p'#194')V'#3')o'#205#176'e'#160's"' + +#153'LR'#169'T"'#27'G'#6#1'Q<'#30#167'`0'#184'Z'#18'5'#16'Q('#20'"'#191#223 + +'/H'#5#201'''>8'#217#218#162'EQ'#169'T'#166#158#195'p$'#18#161'\.G'#209'h' + +#244#148#196#235#245#18#164'\.S'#179#217'$'#189'^/'#188#129'2'#174'>'#159#143 + +'j'#181#154#184#151#141#132#195'a'#226#206#255#143#160'X,'#138#8#160#171'nq=' + +'~'#218#237'6'#229#243'y*'#20#10'd6'#155'i4'#26#9#177'X,'#194'c'#163#209'H' + +#157'N'#135#134#195#161'8'#175#215#235'S'#163#136#197'b'#226#138'(@&C'#212 + +#132#187#140#220'n'#183#184#246'z='#225'I'#163#209#160#193'`@'#30#143#135'L&' + +#147'PFQ'#29#14#135#208#153#6#164#9'5'#130'-'#12'w&'#147#17#231#186#251#219 + +#219'c'#239#198#6#245#217#224#160#223'W'#30#184#178#182#166#252#159#188#7#234 + +#28#253'!G'#174#6#156#3#1'R'#5#231'@'#26#8#4't'#186#231'D'#227#7#180'8'#14'Y' + +#158#206#168#11#8#228#206#18#195'H+'#2#210#4#2#164#20'5Q'#239#194's'#207#9#0 + +#227#240'<'#155#205#138#148'9'#157'Nq'#142#136'VF'#2#239'! '#2#1#26'H'#13#195 + +#180#145#186#195#178#200'V'#134'q'#12#30'R'#4#239''''#231#228'L'#225'_'#211 + +#233'v'#189#198#138'vN'#1'V'#186']'#165#188#206#222'>'#147#238'g'#21'~'#18'g' + +#10#223'f'#249#198'K'#237'q"AV'#171#149#238#242#251#226#15#19'<'#225#235#13 + +#158#250#171#155#155#212#163#229#160#212#164'/'#133#141#21#242#249#232'H'#217 + +#172'H'#193'G.('#16#165#229#160#144'8X*<'#161#235';;"'#26#20#15#19'+'#175#7 + +#20#182'/'#145'-M'#242#129#229'&'#167#235'+'#215#226#11'G'#178#207'i'#2#208 + +#158'o'#249#245#140'9'#191'G'#203#193#160#199'dr7'#192#192#27'NMJ2.'#15#19 + +#186#228'!G'#134#142#249'~p'#160''#132#195#8'Qk'#20'#b'#197 + +#227'A'#226#240#16'N'#167#243#210'y'#22#190#212'*'#21'<5a|'#134'{'#244#206 + +#167'\'#14#207#182#182'.'#157'#'#243#165#127#5#227'3'#252']'#225'R'#25#215 + +#140'k'#23#16'{0r8'#240'qg'#7'W'#129#197'bY-`'#183#219#17#12#6#197#131'N'#167 + +#131'R'#169#132#233't'#138'@ '#128'F'#163'!'#194#215'C'#17'3C'#191#223'G2' + +#153#20#253'j'#181#186'T'#224#130#139#138#197'"z'#189#30'Z'#173#150#16#179 + +#217'lh6'#155#162#181'Z'#173#144'e'#25#145'H'#4#134'W'#168#127#208#237'v'#225 + +'r'#185'D'#159'W'#226#245'zE'#191'V'#171'A'#146'$'#184#221'n'#177'bS'#2#227 + +#241#24#249#221']'#241#224#246#201#9#238#156#158'b2'#26#193#183#182#6#28#31 + +#227#209#198#198#252#141#201#4'?'#246#247#209'9883'#160'q'#221'B'#240'I~'#191 + +#189#173#252#164#174'Q&'#136'u'#181#255#208#239'W'#162#209#168'2'#24#12#216 + +#148#146'J'#165#20'r'#175'2'#131#233'0'#205#18#223#18#191#227',]|'#165#0#248 + +']('#160'@d'#240#166#135')'#237#204'r'#154')'#129'#b'#134#152'P'#141'?'''#190 + +'&'#190'`'#195#155#155#136#199#227#200'f'#179'bn:'#157'6/'#192'^'#191'E|'#172 + +#174#228#29#241#1#241#174'*'#186'Ny'#137#13#179'H&'#147#153#11#240#215#236 + +#233#248'e'#129#192'g'#213#224'7'#226'}'#162'>'#150'X'#152']'#228#247#251#133 + +#139#248#252#136'(r'#16#141'D'#246#27#141#208#250#130'q'#182#243#135#18'''' + +#167'o>G'#220'Z`'#2#198#163#31#231''''#255'ff'#211#163'%c'#236'{m'#217'5'#229 + +'"'#6'o>'#159#3#142#154#189#5#227'.2'#206#231#160'\.'#207#247'@^RS'#245#224 + +#141'|'#165#185#255'E'#229#210#231#243#157#223'?'#209#205#23'E'#159#151#244 + +#146#242#13#23'}'#7#140#163'L'#27#153#163#150#127#26#242#249''#192'E'#165#130#248#128#164';'#133#216'n' + +#21#220'7V'#23#130#8#226#166#138';'#127#129#130#20#154'nT\+'#174#139#224'cUA' + +#138'f'#209#164'"(h0'#181' 2'#193#226#198#182#231';'#204#196#153#24'm(6'#31 + +#156#220#201#204#153#251#221#239#156'{'#207#25#215'o'#1#4'{{{'#184#188#188 + +#196'c '#24#12#162#189#189']'#175']'#4'Ib'#177#24#202#203#203'QWW'#135#199 + +#128'a'#24'H'#167#211#24#25#25'Q'#18'/'#21#212#214#214#162#165#165#197#225 + +#184#187#187#139#179#179'3'#156#156#156#160#181#181#21'eee888@ee'#165'*.--E2' + +#153#196#244#244#244#29#18'.6'#147#201'ht'#8'7_'#240#249'|w'#28'y'#159'$~' + +#191#31#135#135#135#186'2'#183#219#141#234#234'j444'#232'"zzz'#238'UC"+'#252 + +#238#251#156#174#174#174'PQQ'#129'@ '#160'*'#188'^/:;;'#17#10#133'p}}'#173 + +#164#133#226'^'#146#243#243's'#13#201#241#241'1'#218#218#218'pqq'#129#177#177 + +'1LNN'#162#164#164'DsH'#156#158#158#170#253#19'IMM'#141#146'TUU!'#30#143'kH' + +#135#134#134#208#221#221#173'*'#187#186#186#212'o{{'#27#243#243#243'x'#8'^k5' + +#230'N'#206#162#163#163'C'#19#219#220#220#156#221'uL&w'#206#198#198#134'n'#22 + +#143#199#163#207'i'#185'jR'#169#20#234#235#235'oI'#210'o'#222#192#147'g'#5'A' + +'s'#180#162#191'C"'#177#222'<'#190#185#25#250#201#31'YL'#150'$,'#246#12#127 + +'G'#202#28'_'#22#224'K]'#191#204'k7'#138#0'U'#242'I,P'#128#243'g'#20#14'C,b' + +'''y'#141#194#194'ea'#160#0#159#162#135#171'x9Y'#129'3\'#148'jU'#179#140'9' + +#242'?w'#151#145'3'#1'}'#185#181#13'9K>1'#151#156'#'#191#156'/'#158#172#168 + +#157'd'#192'F'#242'N'#236#166#191'_'#175#191#173#173#225#137#20#193#166#166 + +'&'#196#165#188'|'#223#220#196'['#220#230#132#4#11'2'#241#251#229'eG'#155#224 + +'A'#28#29#29#205#146'8'#194#197#221#227#27#28#196#209#209#145#150#233#231'B' + +#22#141'F'#241'E'#14'Ucc'#163#18#230#170#240#229#233'A'#172#220'vR'#175#253 + +#225#11#177#152'L'#222'/'#147#239#239#239'cM'#148#244#245#245#193'p'#185#216 + +'|'#180'"'#231#195#212#212#148#142'V'#31'a'#137#226#232' '#177#206#201'W1V' + +#221#153#153#25'm'#159#227#227#227#234#196#162'Hu?'#182#182#28#229#135'JX' + +#223'"'#145#136#182#0#11#188#183#190#190#238'$'#177#206#137#10#20#21#204#1'W' + +'C5$K.-!f.'#134#24#176#133'wE'#170#179#165#128#197#147#161#202'm'#130'^6'#253 + +#132'I'#194#154#148'Z\'#212#221#198#251'7'#210#217'>H'#200#24#198#187#189'Sb' + +'o'#134#136#137'N$'#18#217#16#133#195'aGN'#244'C'#226#227#196#4#158#206#205 + +#233'K'#15#129'J\b'#175'l'#247#22#196'vd'#194'Po'#175'* '#209#234#234'*'#134 + +#135#135'1;;{'#251#181'B'#231#255#249'I'#132'b'#224#15'J'#3'1'#141#250'T'#244 + +#157#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWTable','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#25#8#6#0#0#0'++'#238']'#0 + +#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28#233 + +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2'tIDATx'#1#189'V=lRQ'#20#254#192 + +'v"'#252#13#12'H'#9#29#129#137#26#127#8#14'4'#136'n'#132#18#247#130#137#145 + +#17#186#24#211#193#14'N'#166'C[7'#220#216'k'#2#27#209#8#133'I'#7#133#136':' + +#145'@'#249#11#137#137'! 2'#152#128#231'\'#222'K$!'#143'gC'#251'%'#135'w'#239 + +#227#222#243#243#157's'#207'}'#154')'#1#132'J'#165#130'~'#191#143'U'#192'd2' + +#193#227#241#136#177#134#13#164'R)'#232't:'#216'l6'#172#2#131#193#0#189'^'#15 + +#241'x'#28'k'#236#185#213'j'#133#211#233#196#170#192#142#14#135'C'#193#202#26 + +#211#162#215#235#23'.'#204#231#243#24#141'Fh4'#26'p'#187#221#232'v'#187'0'#24 + +#12'h6'#155#8#6#131#168#213'j"'#242'@ '#176#208#8#235'^S'#242'd2'#153#160'T*' + +#9'%'#185'\'#14'Z'#173#22#14#135#3#213'jU(`'#26#218#237#246'B'#3'2'#180'J'#6 + +'\.'#151'x'#142#199'c'#132'B!1f'#175#204'f3'#234#245#186#152#243'X'#9#138#17 + +'0u>'#159'O'#208'b'#177'X'#224#245'z'#197#152#147'('#131#231'J'#208#20#10#133 + +'i'#171#213'ZY'#5#201#232't:'#176#219#237#179#8'z'#187#187#184#166'b'#211'G' + +#146'!IP'#197#218#223#252'S('#204#12#220'!'#217'P'#177#169'#='#189'*'#214#182 + +'I&X'#146#228'U@D'#240#150#196#168'b'#241#7#168#7#151#193'='#217#192#3#168 + +#163'H'#198'C'#21'k'#174#140#162#171#201#193#27#18#238'FC'#233')'#231#163'-' + +#205'!'#253#199'U4'#133':'#204#229#128#203#244#229#230'&nlo'#227#211#217#25 + +#194#212#220#210#212#211'o'#237#236#224#11#141#215#233#221#15#234#239#220#244 + +#246#169'U'#252'w'#14'^'#145'8'#192'g:(|q' + +#252'!'#195'azo4'#170#169#181'y'#8#3'\A'#236']4'#26'E6'#155#21'J'#185#151'?;' + +'?'#199#215#227'c'#248#253'~\'#20#130'"n'#1#239#211'i'#241'"A'#145#176#17#190 + +#246#246#137'6'#198#221#127'6p'#190#248'<,;'#205's9'#224'D'#190'8:B'#177'X' + +#20#138#217'{'#142#130'i'#137#197'b'#136'D""'#186'd2)'#218#245#233#201#9#14 + +#151#220#223'r'#14'4'#229'ry'#250'nkKD'#209'%'#229':'#218#248#156#198#167'Rd' + +#235#20#5'/'#254'I'#20'r'#191#229'j'#186'Mr'#8'e|'''#217'('#151'g'#151#254 + +#235#189'=\'''#174#23'u'#246#161#20'.'#227#27'{Dr'#127#137'rv'#232#23'E'#251 + +#132'X'#209'\'#246'g'#203#165#227'/l'#128#239#10'Yt'#165'*'#0#0#0#0'IEND'#174 + +'B`'#130 +]); +LazarusResources.Add('TRESTDWAuthToken','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#211'IDATx'#1#181'VMh'#19'A' + +#20'~)=hD'#9#130'XKK'#131'B'#193'S['#218'KA'#154#132#138' '#20#146#162#180 + +#144'K'#18#9#189'I'#146#155#183#228' '#245'"&"*'#189#152#6#17'<'#168'I'#232 + +#173'`'#147#179#7#147'C'#197#210'*'#249#169'z('#9'I('#182' '#200#250#189#209 + +#13#155#236'l'#18')'#249'`'#200#206'{3'#239#219'y'#223'{'#179'1e2'#25#197'j' + +#181'R?P,'#22#201#225'p'#152#6#153#160'_$*'#6#200#224#13#130#193' '#217#237 + +'v'#138'D"T'#175#215'uk'#216#238'r'#185#200#231#243#137#245#29'Q('#20#20'-x' + +#142#147')p5'#7#200'Z'#214#4#2#129#22#191#197'bQ'#218#227#168#177#164'$'#241 + +'x'#188'%'#128':r'#185#156#240#215'j5'#169#159#137#141'Ht'#233#146#165'Fk7' + +#242'w'#130#142#132'u'#144'arrR'#252'r'#145#200#214#24#237#19#144#229'2'#153 + +'L6ua='#194#225#176#2#18#145'*5'#13'N'#167#179#169'G,'#22'Sd0'#212'D'#11#173 + +#224#172#149#150#136#193'D'#170'V'#157'H'#6#168'Gx'#189'^'#130#184#220'\'#162 + +'|'#173#195#195't'#230#224#128#238'./w-cC'#146'l6+6j73'#145#205'f'#163'/'#155 + +#155#244#202#239#167#171#176#173#206#207#147#127't'#148#188'n7'#253#151'&'#30 + +#143#167#165'<'#163#209'h'#211'g'#155#157'U'#202#152#175'.,(_'#225'{h6+'#141 + +#181'5'#229#30#230'|E'#245#148#174'T*E'#137'D'#162#197#22#10#133#154#165#251 + +#187'Z'#165#198#241'1'#237'mm'#209'['#204#235'GG'#148#222#216#160'k'#227#227 + +#226#244'='#165'+'#159#207'K'#23#170#246#253#195'C*U*'#228'E'#240'['#152#251 + +'0'#170#187#187'T'#6#185#209#29#216's'#159#168#1#188'++'#244#28#167'xo6'#139 + +#147#240#216#193#243#235#237'm'#227'^'#145'i'#130#203#177'E'#19'T'#147#206 + +#239#134'6'#207#160#221#131#165'%enzZZ'#202']'#251#132'E'#228#222'0'#242#179 + +#157#253#220#184#218#222#145#145#12#182#159#140#197#251#188#190'.'#158#127'Z' + +','#244#14'%|'#26#227'&z'#227#17#198#29'|'#2#222#196'bt'#14#254#179#24#31'1*' + +#208'k'#6#215'>'#219#239#255#219#171#133#142#4#215#4'}j4'#232#2'6'#238'A'#135 + +'!'#16#12'!'#192#227#169')'#250#142#10'{'#146'N'#211'%'#204'w'#16#236#23'zf' + +#31'kgQ'#141'/'#176#206#196'U)!'#209#9#207#23#225#140#211'I'#231'A071A'#211 + +'x'#190#141'N/'#131'`'#4'~'#19#198'u'#143'G'#156#228'b'#169'$D'#251#128#23 + +#251#209'V'#246#29'I'#180#24#199#27#243#230#167#139#139't'#5#228#223'`;'#133 + +#10'z'#137'9'#195':6F'#13#144'_'#134#239#6#210'8b'#16'gPf'#228'R'#204#227#237 + +'DI&'#147#226'j'#225'O-7'#170#250#171'"D'#127'S'#204'kS8'#185#20#157'n'#225 + +#147#162'Y]]'#255#4#156#0#253#140#173#195#31'K'#146'<&D'#158#2's'#0#0#0#0'IE' + +'ND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWAuthBasic','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#241'IDATx'#1#181'V]H'#147'Q' + +#24'~'#23'v'#145#20#19'5"'#242'o'#21#246#3#130#23#161')'#6#174#4#205#172#20 + +#133' '#8#21#162#155'.D'#8#138#188'Po'#186#9#209#155#132'n'#202']'#137#162 + +#177#193#194'.'#134'sT'#10#209#197#220'"'#216'P'#246#227'.r'#229#216'J'#244 + +'&'#180#247'9}'#27#31#236#156'm'#10'{'#224#240#157#243'}'#239#251'>'#231#253 + +';'#231'38'#157#206#253#170#170'*'#202#7#130#193' '#153#205'fC'#1#8#178#145 + +#196#227'q'#178'Z'#173'B'#9#168#173#173#21'#'#215#205#29#201'f'#188#175#175 + +#143'n'#215#215#211#230#194#2']'#136'F'#169'n{'#155'|'#211#211#244#160#181 + +#149#250#251#251'S'#196#153'`'#8#4#2#210'pA'#185#183#167#135#158'67SSu'#181 + +'T'#217#187#177'A'#207#153#220'27G*'#27'&'#147#201' '#245'$I'#240#170#187';E' + +#16#222#218#162'g33b`'#14#212#148#151#11#25#200#194'k'#21#164'$###'#244#162 + +#189#157'*JJR'#4#143#198#198#232#218#226'"5'#241#192'<'#177#179'#'#190'A'#6 + +#222#14#14#14#230'N'#2'/'#214'WV'#168#166#172','#245#206#19#14#211#13'&'#170 + +#231#249'U'#30']<'#183#187#221#169#239#240'vmyY'#233'M'#26#137#155#149'oq' + +#229'$'#129#29#135'c11'#143'h#'#129#177#187#155#242#6#128#14'*P'#134#2#25'I' + +#29#199':'#137#182#161'!'#186#168#25#251#174#23#156#157#165'I'#187#157#190 + +#141#143#139'eEq1'#249#21#149'V {'#169#223#225#9#158#191'$9'#238#235#228#140 + +#133#133#164'BZ'#184'P'#138'!'#173'z'#14#2'o$"'#26'4'''#146#206#206'Nz'#175 + +'Kj'#174#128#142#138'$-\EEEt'#174#161#129'>'#249#253#162'j'#254#208#255'dg' + +#130#135#155#242'|c'#163#242#152#145#230'dbb'#130#238#182#180#136#30#184#211 + +#209'A'#175#21#225#187'^Z*zhH'#235'z'#21#164'$'#240#6'J'#232'd4'#165#190'g' + +#244#248#232#243#209#227#249'y'#229#177#146#145#4#128#18#148#209#253#235'|' + +#148#160#15'@'#134#254#192#238#145#3#132#200#230'p'#136'Me'#130#242#128#212#3 + +#167#0#250#199#173#21#4#228'Q '#217#140''''#15'H'#169''''#239#166#166'hsi' + +#137#142#178#177#135#236#137#131#215'W'#216'('#170'g'#150#215#127'Y'#230#13 + +#231#237','#175#163','#183#151'HP'#219#240#240#193#18#15#2#151#203'E'#167',' + +#22#178#178#161#207#163#163#180#198#235'r'#163#145#220#161#16#29#231#249#30 + +#159'SoY'#246#30#27#254#193#195#195'w'#203#164#211')%Q^Z'#167#217#200'o~~' + +#181#217#8'i?'#201#161#250#201#132'1'#14#193#25'^WVVR5'#203'\'#30#24#160'''|' + +#180#212#245#246#170'L'#169'I'#16#239#10#30'_8T'#251'|;'#242'=M'#31#216#163 + +#155#252#4#145'{u'#149'~1'#169#151#223'Y'#204'f'#225#169#10#210'p]b'#163#199 + +#248#142#0#145#137'w'#139'$#'#137'F-'#241']Z'#236#145#3#20'C'#242#154'V'#2 + +#213#149'/'#192#182#240'$'#151#31#129#195'"'#159#182#211#240#15#165#12#176 + +#131#192':~'#208#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWAuthOAuth','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3#172'IDATx'#1#181'VY('#229'a' + +#20#255'].b'#140#236#178'e'#205#22'YSxA'#241#128',5'#15#162','#243#168'&'#188 + +#205#155#164#241#160'I'#137#154#7#15'f'#136'yDY'#30'()'#153#20'!'#9'e7'#182 + +#177'/'#225#26#252#231#156'S'#247'63'#254'w'#153#26#167#190#254#159#239';' + +#223'Y~'#191's'#142#171#25#27#27'S'#2#3#3#241#18#178#185#185#137#140#140#12 + +#141#150#29#152'sr||'#140#225#225'a\__'#195#202#202#10#182#182#182#200#206 + +#206#134#175#175'/,'#17#173#169#203#157#157#29'ttt`zz'#26#174#174#174'8==' + +#149's???'#140#140#140' &&'#6'%%%'#8#8#8'0e'#6'V'#198'.'#22#23#23#209#214#214 + +#134#173#173'-LLL >>'#30#183#183#183#178'...0;;+'#206'[[['#177#180#180#132 + +#127'v'#194#25#244#244#244#200#226#12#156#156#156#208#208#208#128#245#245'u' + +#172#173#173'attT sss'#147'L;;;qpp`'#220#203#198#198#134#242#183'466*'#20#185 + +'B'#215#178#162#163#163#149#224#224'`%**J'#9#9#9'Q'#194#195#195#229#222#218 + +#218'Z'#238'CCC'#21#202#250#153#29#182#173#154#201#254#254'>fff'#4#14#27#27 + +#27'$$$'#192#206#206#14#246#246#246#232#238#238'Foo'#175'dF6'#144#148#148#4 + +#173'V'#139#213#213'U'#12#14#14#226#242#242#210'2'#184#6#6#6#224#232#232'({' + +#15#15#15'P'#180'xxx'#0'e'#131#184#184'8!;--M'#170#236#238#238'N'#224'da'#248 + +#248#173'ENnnn'#176#187#187'+'#251#251#251'{'#137#142#201'NMM5'#232'P'#237'C' + +#167#211#225#236#236#12#14#14#14'rvrr'#130#195#195'C'#203#156'p'#132#26#141 + +'F'#246#143#143#143'B(;***2'#232'dee'#201'9'#195#169#215#253#253#157'Y''...' + +#240#241#241'1d'#194#248#19#217#240#247#247#151'rmnn'#22#131#249#249#249#226 + +'dooOt'#249#141#187#187#187#170#147'g'#205#152#147#147'#$'#178'0L'#158#158 + +#158'HII'#193#242#242'2'#218#219#219#5'&v'#154#152#152#136#169#169')'#201#150 + +#229#233#233#9#185#185#185#150'9a"ccc'#165#25#23#22#22'0??/'#145'sop'#143'x{' + +'{K6'#204#7#207'&.'#138#200#200'H'#169'4F'#193'"'','#165#165#165#184#186#186 + +#18'2'#169'?dvmooK)'#179#241#163#163'#'#129#177#171#171#11#181#181#181'(,,' + +#148'7'#198'D'#213#9#227'_VV&'#229#203'='#195'P$''''crr'#18#212#136#2'!WaSS' + +#19#138#139#139'EW'#207#163#154#24#157']l'#172#170#170#10#153#153#153'B('#27 + +#14#11#11#19#178'9'#155#243#243's'#228#229#229#137'NDD'#4'L'#137#134'['#223 + +#220#168#231'r'#29#26#26#18#8#153#31'nV.'#16'///'#147#239#152#179#160#160' ' + +#141#234#236#162'H'#149#175#213#213#202#167#138#10#153'?4J'#148#246#186#186 + +'?t'#248#159#29#141#30#229']y'#185#232#171#137'~v'#169'r'#242#177#166#6'^4' + +#226'W'#156#157'qZY'#137#215'4'#167'6'#168#202'>S'#198'?'#198#199#5#174';' + +#250#242#164'r$'#216#190#208']L]'#29'2'#169#0#212'D'#149#147'pz'#248#186#188 + +#28'o'#170#171#177'67'#135'Y2'#248#138#206':ZZ`O'#16#248#208#254#27'-'#239 + +#130#2'|'''#253'i'#10'f'#165#191#31#198'D5'#147#159#233#233#216#169#175#199 + +#25#237'y'#138#165'P'#6':'#26#142#30'}}8&'#131'NtfM_'#206#134'%'#192#12#167 + +#170'N'#222#18'\}'#244#144'+'#232'=}'#157#201' '#23'G'#31'E'#174#151#15#244 + +'7'#19#27'M{'#179'?D'#212#136#255'_b '#158#163'y)yI'#219#207#228#23#30#31'_' + +#228#228'w'#246#152#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWAuthOAuth2','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#25#8#6#0#0#0'++'#238']'#0 + +#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28#233 + +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3#179'IDATx'#1#181'U'#219'+'#164 + +'q'#24'~f'#140'c1'#142#201#153#18'.v'#173'l'#148#210'd7a'#213#8#251#7#216#11 + +'-w'#14#161'ViM)W'#187#249#3'6'#140#27'b/'#164#220#172#21'%'#23#139'P'#235 + +#144'L!'#199'H'#206'FN'#191'}'#223#183#29'a'#190'Yly'#235'k'#230#251'~'#191 + +#239'y'#222#247'y'#159#247#247#233#134#134#134'Tll,'#158'#'#150#151#151'a`' + +#240#199#16#156#158#158'bgg'#7''''''''#136#139#139#131#183#183'7'#30#19#134 + +#135'6'#216#237'vloo'#11#240#254#254'>'#206#207#207#177#176#176#128#139#139 + +#11'$$$ %%'#229#255#8'8'#227#201#201'I'#236#237#237#225#234#234#10'aaa'#216 + +#221#221#133#135#135#135'T'#28#30#30#142#169#169')'#244#244#244#160#168#168#8 + +#6#131#225'i'#4#227#227#227'8::'#194#210#210#18#162#162#162'P[['#139#249#249 + +'y'#169'(44'#20#149#149#149#152#157#157'E]]'#29#250#250#250'P\\'#172#137#163 + +#215'z8::'#138#203#203'K'#196#196#196'`bb'#2'%%%'#152#155#155'C||>>X]]' + +#149'Fr'#227'sss'#177#185#185')k'#129#129#129'b]'#179#217#140#173#173'-y'#247 + +'~'#232#184#140#219's'#192'v'#204#203#203#147'l'#216#235#156#157#167#167#167 + +#220'WTT =='#29#13#13#13#2#200'$l'#219#181#181'5!'#27#28#28#148#132#28#193 + +#131#230'T'#1#131#242' '#173#175#175#139'{'#24'<22'#18#173#173#173'HNNFss' + +#179#144#177']'#221#220#220'd'#141#229'LLL'#188#3#238'R"vFNN'#142#200#193#190 + +#231#151#184#15'^^^B^__'#143#166#166'&'#24#141'FP'#147#177#177#177'!U'#148 + +#149#149'A+'#156'$'#226#224#225'*,,'#148'^dddH'#198#228#30'Y'#227'_'#150#141 + +#9'9'#1#155#205'&&'#232#238#238#150#228'n'#135#166'D'#28#1#1#1#146')'#207#193 + +#225#225#161#28#11#236#162#232#232'hY'#227#251#197#197'E'#28#31#31'#88'#24 + +#229#229#229'N'#224#142'p9'#201','#19#235#207'n'#226#198#207#204#204#136'$' + +#142'Jh>'#164#146#234#234'jdgg'#187#130#209#150#232'v'#176'SFFFd'#162#249#208 + +#227#138#152'$33'#19#5#5#5#210#31'W'#193#18'iN'#178#171#160'f*"|'#244'~'#205 + +'I'#230'3'#229#19'5'#248';I'#195#241#173#177#241#230#156#225#9'g'#217'z{{' + +#229'r'#236'q'#188#243#179#189#253'a'#137',4'#3#215#180'YO'#0#190't'#200#253 + +#182'X'#16#154#149#5#29#217#146#127#127#16#232#235#149#21#180#209#222#247't' + +#5#211#247'`'#158'\v'#168#211'!'#129'$'#249'J'#14#188'-'#145#254#190'f'#163 + +'tU}'#254#12#207'W'#175#240#203'jE$='#247#162#12'}'#232'9'#127'p'#188#9#220 + +'N'#238'J'#163'$B'#8#252#128#0'?'#18')'#239#11#255#240#193#169#130';.'#226'J' + +#204#148#165#245#205#27#216#9'p'#143#0#21#189#20'@'#4#253't'#189#163#179#198 + +'H'#251#248'H'#179#13#15#227'-'#17#236#19#193#151#170'*'#152'h'#221#6#252#155 + +#128#195#220#214'&'#154#198#208#255'8"'#224#129#227#202#140#127#251'`'#162'+' + +#139#146'xI'#4#254#254#254#136#162#251#23#180#143'C'#211'OOq'#209'S'#131#177 + +#13#226#213'g'#138#231#196#190#137'?'#156#25#192#167#186#5#181'D'#0#0#0#0'IE' + +'ND'#174'B`'#130 +]); diff --git a/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.pas b/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.pas new file mode 100644 index 000000000..bba894e8c --- /dev/null +++ b/CORE/Packages/Lazarus/RESTDataWareComponents_LAMW.pas @@ -0,0 +1,40 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit RESTDataWareComponents_LAMW; + +{$warn 5023 off : no warning about unused units} +interface + +uses + uRESTDWBasic, uRESTDWBasicClass, uRESTDWBasicDB, uRESTDWBasicTypes, + uRESTDWBufferDb, uRESTDWComponentEvents, uRESTDWFileBuffer, + uRESTDWMasterDetailData, uRESTDWParams, uRESTDWPoolermethod, + uRESTDWResponseTranslator, uRESTDWServerContext, uRESTDWServerEvents, + uRESTDWAttachment, uRESTDWAttachmentFile, uRESTDWBuffer, uRESTDWCoder, + uRESTDWCoder3to4, uRESTDWCoderBinHex4, uRESTDWCoderHeader, uRESTDWCoderMIME, + uRESTDWCoderQuotedPrintable, uRESTDWDataUtils, uRESTDWException, + uRESTDWHeaderCoderBase, uRESTDWHeaderList, uRESTDWIOHandler, + uRESTDWIOHandlerStream, uRESTDWMessage, uRESTDWMessageClient, + uRESTDWMessageCoder, uRESTDWMessageCoderBinHex4, uRESTDWMessageCoderMIME, + uRESTDWMessageCoderQuotedPrintable, uRESTDWMessageParts, DWDCPbase64, + DWDCPblockciphers, DWDCPcast256, DWDCPconst, DWDCPcrypt2, DWDCPrijndael, + DWDCPsha256, DWDCPtypes, uRESTDWConsts, uRESTDWDatamodule, utemplateproglaz, + uRESTDWBufferBase, StringBuilderUnit, uRESTDWBase64, uRESTDWDynamic, + uRESTDWJSONObject, uRESTDWMassiveBuffer, uRESTDWMD5, uRESTDWTools, + uRESTDWDataJSON, uRESTDWJSON, uRESTDWJSONInterface, uRESTDWStorageBin, + uRESTDWMimeTypes, uRESTDWAbout, uRESTDWZlib, uRESTDWMemoryDataset, + uRESTDWDesignReg, uRESTDWProtoTypes, uRESTDWSelfSigned, uRESTDWExprParser, + uRESTDWAuthenticators, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('uRESTDWDesignReg', @uRESTDWDesignReg.Register); +end; + +initialization + RegisterPackage('RESTDataWareComponents_LAMW', @Register); +end. diff --git a/CORE/Source/Basic/uRESTDWBasic.pas b/CORE/Source/Basic/uRESTDWBasic.pas index b4357d7cc..83552ee09 100644 --- a/CORE/Source/Basic/uRESTDWBasic.pas +++ b/CORE/Source/Basic/uRESTDWBasic.pas @@ -32,7 +32,8 @@ interface Uses {$IFDEF RESTDWFMX}System.IOUtils,{$ENDIF} - SysUtils, Classes, Db, Variants, SyncObjs, + SysUtils, Classes, Db, Variants, + {$IFNDEF RESTDWLAZARUS}SyncObjs,{$ENDIF} uRESTDWComponentEvents, uRESTDWBasicTypes, uRESTDWProtoTypes, uRESTDWJSONObject, uRESTDWParams, uRESTDWMassiveBuffer, uRESTDWDataUtils, uRESTDWTools, uRESTDWConsts, uRESTDWMessageCoderMIME, diff --git a/CORE/Source/Basic/uRESTDWDesignReg.pas b/CORE/Source/Basic/uRESTDWDesignReg.pas index 813300eb4..9e8f632b4 100644 --- a/CORE/Source/Basic/uRESTDWDesignReg.pas +++ b/CORE/Source/Basic/uRESTDWDesignReg.pas @@ -26,20 +26,35 @@ interface uses - {$IFDEF RESTDWLAZARUS} - StdCtrls, ComCtrls, Forms, ExtCtrls, DBCtrls, DBGrids, Dialogs, Controls, - LResources, LazFileUtils, FormEditingIntf, PropEdits, lazideintf, - ProjectIntf, ComponentEditors, fpWeb, TypInfo, + {$IFDEF FPC} + {$IFNDEF RESTDWLAMW}StdCtrls, {$ENDIF} + ComCtrls, Forms, ExtCtrls, DBCtrls, DBGrids, Dialogs, Controls, + LResources, LazFileUtils, + {$IFNDEF RESTDWLAMW} + FormEditingIntf, PropEdits, lazideintf, + ProjectIntf, ComponentEditors, + {$ENDIF} + fpWeb, TypInfo, {$ELSE} + {$IFNDEF RESTDWLAMW} Windows, - {$IFDEF DELPHIXE2UP} + {$IFDEF DELPHIXE2UP} vcl.Graphics, - {$ELSE} - Graphics, DbTables, + {$ELSE} + {$IFNDEF RESTDWLAMW} + Graphics, + DbTables, + {$ENDIF} + {$ENDIF} + {$IFNDEF RESTDWLAMW} + ToolsApi, DesignEditors, DSDesign, DesignIntf, ColnEdit, + {$ENDIF} {$ENDIF} - ToolsApi, DesignEditors, DSDesign, DesignIntf, ColnEdit, {$ENDIF} - Db, SysUtils, Classes, Menus, + Db, SysUtils, Classes, + {$IFNDEF RESTDWLAMW} + Menus, + {$ENDIF} uRESTDWBasicClass, uRESTDWDatamodule, uRESTDWServerEvents, uRESTDWBasicDB, uRESTDWServerContext, uRESTDWServerRoutes, uRESTDWMassiveBuffer, uRESTDWMemoryDataset, uRESTDWBufferDb, uRESTDWAbout, uRESTDWDriverBase, uRESTDWAuthenticators; @@ -56,6 +71,7 @@ interface Type TAddFields = Procedure (All: Boolean) of Object; +{$IFNDEF RESTDWLAMW} Type TRESTDWFieldsList = Class(TStringProperty) Public @@ -163,7 +179,9 @@ TDriverConnectionListProperty = class(TComponentProperty) End; {$ENDIF} +{$ENDIF} +{$IFNDEF RESTDWLAMW} Type TRESTDWServerContextEditor = Class(TComponentEditor) Public @@ -179,9 +197,10 @@ TDriverConnectionListProperty = class(TComponentProperty) Function GetVerb (Index : Integer): String; Override; Procedure ExecuteVerb(Index : Integer); Override; End; - +{$ENDIF} {$IFDEF RESTDWLAZARUS} +{$IFNDEF RESTDWLAMW} Type TRESTDWCGIApplicationDescriptor = Class(TProjectDescriptor) Public @@ -216,6 +235,7 @@ TDriverConnectionListProperty = class(TComponentProperty) ResourceName : String) : String;Override; End; {$ENDIF} +{$ENDIF} Procedure Register; @@ -232,18 +252,22 @@ TDriverConnectionListProperty = class(TComponentProperty) rsRESTDWDatamodule = 'REST Dataware - Datamodule'; rsRESTDWDatamoduleADa = 'REST Dataware - Datamodule%sA Datamodule for REST Dataware Web Components.'; +{$IFNDEF RESTDWLAMW} Var PDRESTDWCGIApplication : TRESTDWCGIApplicationDescriptor; PDRESTDWDatamodule : TRESTDWDatamodule; + {$ENDIF} {$ENDIF} Implementation uses {$IFDEF RESTDWLAZARUS} utemplateproglaz,{$ENDIF} - uRESTDWConsts, uRESTDWPoolermethod, uRESTDWBasic, uRESTDWResponseTranslator, - uRESTDWFieldSourceEditor, uRESTDWSqlEditor, uRESTDWUpdSqlEditor, - uRESTDWJSONViewer; + uRESTDWConsts, uRESTDWPoolermethod, uRESTDWBasic + {$IFNDEF RESTDWLAMW} + , uRESTDWResponseTranslator, uRESTDWFieldSourceEditor, + uRESTDWSqlEditor, uRESTDWUpdSqlEditor, uRESTDWJSONViewer + {$ENDIF}; {$IFDEF DELPHIXE3UP} Var @@ -291,6 +315,7 @@ procedure UnregisterAboutBox; End; {$ELSE} {$IFDEF RESTDWLAZARUS} +{$IFNDEF RESTDWLAMW} Constructor TRESTDWCGIApplicationDescriptor.Create; Begin inherited Create; @@ -399,8 +424,10 @@ procedure UnregisterAboutBox; End; {$ENDIF} {$ENDIF} +{$ENDIF} +{$IFNDEF RESTDWLAMW} {$IFNDEF RESTDWLAZARUS} Procedure TDSDesignerDW.BeginUpdateFieldDefs; Var @@ -538,7 +565,9 @@ procedure TRESTDWClientSQLEditor.ExecuteVerb(Index: Integer); Result := True; End; {$ENDIF} +{$ENDIF} +{$IFNDEF RESTDWLAMW} Function TPoolersListCDF.GetAttributes : TPropertyAttributes; Begin // editor, sorted list, multiple selection @@ -724,14 +753,22 @@ procedure TRESTDWContextRulesEditor.ExecuteVerb(Index: Integer); Begin Result := 1; End; +{$ENDIF} Procedure Register; Begin + {$IFDEF FPC} + {$I RESTDataWareComponents_LAMW.lrs} + {$ENDIF} {$IFNDEF RESTDWLAZARUS} - RegisterNoIcon([TServerMethodDataModule]); - RegisterCustomModule(TServerMethodDataModule, TCustomModule); + {$IFNDEF RESTDWLAMW} + RegisterNoIcon([TServerMethodDataModule]); + RegisterCustomModule(TServerMethodDataModule, TCustomModule); + {$ENDIF} {$ELSE} - FormEditingHook.RegisterDesignerBaseClass(TServerMethodDataModule); + {$IFNDEF RESTDWLAMW} + FormEditingHook.RegisterDesignerBaseClass(TServerMethodDataModule); + {$ENDIF} // PDRESTDWCGIApplication := TRESTDWCGIApplicationDescriptor.Create; // RegisterProjectDescriptor (PDRESTDWCGIApplication); // PDRESTDWCGIDatamodule := TRESTDWCGIDatamodule.Create; @@ -741,21 +778,30 @@ procedure TRESTDWContextRulesEditor.ExecuteVerb(Index: Integer); {$ENDIF} // RegisterComponents('REST Dataware - Service', [TRESTDWServiceNotification]); RegisterComponents('REST Dataware - Client', [TRESTDWClientEvents]); - RegisterComponents('REST Dataware - API', [TRESTDWServerEvents, TRESTDWServerContext, TRESTDWServerRoutes, + RegisterComponents('REST Dataware - API', [TRESTDWServerEvents, + TRESTDWServerContext, + TRESTDWServerRoutes, TRESTDWContextRules]); + {$IFNDEF RESTDWLAMW} RegisterComponents('REST Dataware - Tools', [TRESTDWResponseTranslator, TRESTDWBufferDB]); + {$ENDIF} RegisterComponents('REST Dataware - DB', [TRESTDWPoolerDB, TRESTDWMemTable, TRESTDWClientSQL, TRESTDWTable, TRESTDWUpdateSQL, TRESTDWMassiveSQLCache, TRESTDWStoredProcedure, TRESTDWMassiveCache, TRESTDWBatchMove]); RegisterComponents('REST Dataware - Authenticators', [TRESTDWAuthBasic, TRESTDWAuthToken, TRESTDWAuthOAuth]); // AddIDEMenu;//Menu do REST Debugger {$IFNDEF RESTDWLAZARUS} - RegisterPropertyEditor(TypeInfo(TRESTDWAboutInfo), Nil, 'AboutInfo', TDWAboutDialogProperty); -// RegisterPackageWizard(TCustomMenuItemDW.Create);//Request Debbuger + {$IFNDEF RESTDWLAMW} + RegisterPropertyEditor(TypeInfo(TRESTDWAboutInfo), Nil, 'AboutInfo', TDWAboutDialogProperty); + // RegisterPackageWizard(TCustomMenuItemDW.Create);//Request Debbuger + {$ENDIF} {$ELSE} - RegisterPropertyEditor(TypeInfo(TRESTDWAboutInfo), Nil, 'AboutInfo', TDWAboutDialogProperty); + {$IFNDEF RESTDWLAMW} + RegisterPropertyEditor(TypeInfo(TRESTDWAboutInfo), Nil, 'AboutInfo', TDWAboutDialogProperty); + {$ENDIF} // RegisterPropertyEditor(TypeInfo(TRESTDWAboutInfoDS), Nil, 'AboutInfo', TDWAboutDialogProperty); {$ENDIF} + {$IFNDEF RESTDWLAMW} RegisterPropertyEditor(TypeInfo(TComponent), TRESTDWDriverBase, 'Connection', TDriverConnectionListProperty); RegisterPropertyEditor(TypeInfo(String), TRESTDWTable, 'Tablename', TTableList); RegisterPropertyEditor(TypeInfo(String), TRESTDWClientEvents, 'ServerEventName', TServerEventsList); @@ -763,22 +809,24 @@ procedure TRESTDWContextRulesEditor.ExecuteVerb(Index: Integer); RegisterPropertyEditor(TypeInfo(TStrings), TRESTDWClientSQL, 'RelationFields', TRESTDWFieldsRelationEditor); RegisterPropertyEditor(TypeInfo(String), TRESTDWClientSQL, 'SequenceField', TRESTDWFieldsList); RegisterPropertyEditor(TypeInfo(String), TRESTDWClientSQL, 'UpdateTableName', TTableList); - RegisterComponentEditor(TRESTDWServerEvents, TComponentEditorClass(TRESTDWServerEventsEditor)); RegisterComponentEditor(TRESTDWClientEvents, TComponentEditorClass(TRESTDWClientEventsEditor)); RegisterComponentEditor(TRESTDWResponseTranslator, TComponentEditorClass(TRESTDWJSONViewer)); RegisterPropertyEditor (TypeInfo(TRESTDWComponent), TRESTDWResponseTranslator, 'ClientREST', TRESTDWClientRESTList); RegisterComponentEditor(TRESTDWServerContext, TComponentEditorClass(TRESTDWServerContextEditor)); RegisterComponentEditor(TRESTDWContextRules, TComponentEditorClass(TRESTDWContextRulesEditor)); + {$ENDIF} {$IFNDEF RESTDWLAZARUS} - RegisterComponentEditor(TRESTDWClientSQL, TRESTDWClientSQLEditor); - RegisterComponentEditor(TRESTDWServerContext, TRESTDWServerContextEditor); - RegisterComponentEditor(TRESTDWContextRules, TRESTDWContextRulesEditor); + {$IFNDEF RESTDWLAMW} + RegisterComponentEditor(TRESTDWClientSQL, TRESTDWClientSQLEditor); + RegisterComponentEditor(TRESTDWServerContext, TRESTDWServerContextEditor); + RegisterComponentEditor(TRESTDWContextRules, TRESTDWContextRulesEditor); + {$ENDIF} {$ENDIF} End; { TRESTDWServerEventsEditor } - +{$IFNDEF RESTDWLAMW} procedure TRESTDWServerEventsEditor.ExecuteVerb(Index: Integer); begin Inherited; @@ -861,7 +909,6 @@ procedure TServerEventsList.Edit; End; End; - Function TServerEventsListCV.GetAttributes: TPropertyAttributes; begin // editor, sorted list, multiple selection @@ -984,20 +1031,24 @@ procedure TRESTDWFieldsList.GetValues(Proc: TGetStrProc); End; End; End; +{$ENDIF} {$IFDEF RESTDWLAZARUS} Procedure UnlistPublishedProperty (ComponentClass:TPersistentClass; const PropertyName:String); var pi : PPropInfo; begin + {$IFNDEF RESTDWLAMW} pi := TypInfo.GetPropInfo (ComponentClass, PropertyName); if (pi <> nil) then RegisterPropertyEditor (pi^.PropType, ComponentClass, PropertyName, PropEdits.THiddenPropertyEditor); + {$ENDIF} end; {$ENDIF} { TRESTDWClientRESTList } +{$IFNDEF RESTDWLAMW} procedure TRESTDWClientRESTList.GetValues(Proc: TGetStrProc); Var I : Integer; @@ -1045,7 +1096,6 @@ procedure TDriverConnectionListProperty.GetValueList(List: TStrings); while i < comp.ComponentCount do begin if drv.compConnIsValid(comp.Components[i]) then List.Add(comp.Components[i].Name); - i := i + 1; end; end; @@ -1065,54 +1115,56 @@ procedure TDriverConnectionListProperty.GetValues(Proc: TGetStrProc); Values.Free; end; end; +{$ENDIF} initialization - {$IFDEF DELPHIXE3UP} - RegisterAboutBox; + {$IFDEF DELPHIXE3UP} + RegisterAboutBox; AddSplash; {$ENDIF} {$IFDEF RESTDWLAZARUS} - {$I RESTDataWareComponents.lrs} + {$IFNDEF RESTDWLAMW} + UnlistPublishedProperty(TRESTDWClientSQL, 'FieldDefs'); + UnlistPublishedProperty(TRESTDWClientSQL, 'Options'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceName'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceField'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'OnWriterProcess'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'FieldDefs'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'Options'); + UnlistPublishedProperty(TRESTDWClientSQL, 'CachedUpdates'); + UnlistPublishedProperty(TRESTDWClientSQL, 'MasterSource'); + UnlistPublishedProperty(TRESTDWClientSQL, 'MasterFields'); + UnlistPublishedProperty(TRESTDWClientSQL, 'DetailFields'); + UnlistPublishedProperty(TRESTDWClientSQL, 'ActiveStoredUsage'); + UnlistPublishedProperty(TRESTDWClientSQL, 'Adapter'); + UnlistPublishedProperty(TRESTDWClientSQL, 'ChangeAlerter'); + UnlistPublishedProperty(TRESTDWClientSQL, 'ChangeAlertName'); + UnlistPublishedProperty(TRESTDWClientSQL, 'DataSetField'); + UnlistPublishedProperty(TRESTDWClientSQL, 'FetchOptions'); + UnlistPublishedProperty(TRESTDWClientSQL, 'ObjectView'); + UnlistPublishedProperty(TRESTDWClientSQL, 'ResourceOptions'); + UnlistPublishedProperty(TRESTDWClientSQL, 'StoreDefs'); + UnlistPublishedProperty(TRESTDWClientSQL, 'UpdateOptions'); + UnlistPublishedProperty(TRESTDWClientSQL, 'LocalSQL'); + UnlistPublishedProperty(TRESTDWClientSQL, 'FieldOptions'); + UnlistPublishedProperty(TRESTDWClientSQL, 'Constraints'); + UnlistPublishedProperty(TRESTDWClientSQL, 'ConstraintsEnabled'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'StoreDefs'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceName'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceField'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'OnWriterProcess'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'UpdateOptions'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'FetchOptions'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'ObjectView'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'ResourceOptions'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'CachedUpdates'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'MasterSource'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'MasterFields'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'DetailFields'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'ActiveStoredUsage'); + UnlistPublishedProperty(TRESTDWStoredProcedure, 'Adapter'); + {$ENDIF} {$ENDIF} - UnlistPublishedProperty(TRESTDWClientSQL, 'FieldDefs'); - UnlistPublishedProperty(TRESTDWClientSQL, 'Options'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceName'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceField'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'OnWriterProcess'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'FieldDefs'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'Options'); - UnlistPublishedProperty(TRESTDWClientSQL, 'CachedUpdates'); - UnlistPublishedProperty(TRESTDWClientSQL, 'MasterSource'); - UnlistPublishedProperty(TRESTDWClientSQL, 'MasterFields'); - UnlistPublishedProperty(TRESTDWClientSQL, 'DetailFields'); - UnlistPublishedProperty(TRESTDWClientSQL, 'ActiveStoredUsage'); - UnlistPublishedProperty(TRESTDWClientSQL, 'Adapter'); - UnlistPublishedProperty(TRESTDWClientSQL, 'ChangeAlerter'); - UnlistPublishedProperty(TRESTDWClientSQL, 'ChangeAlertName'); - UnlistPublishedProperty(TRESTDWClientSQL, 'DataSetField'); - UnlistPublishedProperty(TRESTDWClientSQL, 'FetchOptions'); - UnlistPublishedProperty(TRESTDWClientSQL, 'ObjectView'); - UnlistPublishedProperty(TRESTDWClientSQL, 'ResourceOptions'); - UnlistPublishedProperty(TRESTDWClientSQL, 'StoreDefs'); - UnlistPublishedProperty(TRESTDWClientSQL, 'UpdateOptions'); - UnlistPublishedProperty(TRESTDWClientSQL, 'LocalSQL'); - UnlistPublishedProperty(TRESTDWClientSQL, 'FieldOptions'); - UnlistPublishedProperty(TRESTDWClientSQL, 'Constraints'); - UnlistPublishedProperty(TRESTDWClientSQL, 'ConstraintsEnabled'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'StoreDefs'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceName'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'SequenceField'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'OnWriterProcess'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'UpdateOptions'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'FetchOptions'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'ObjectView'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'ResourceOptions'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'CachedUpdates'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'MasterSource'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'MasterFields'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'DetailFields'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'ActiveStoredUsage'); - UnlistPublishedProperty(TRESTDWStoredProcedure, 'Adapter'); Finalization {$IFDEF DELPHIXE3UP}UnregisterAboutBox; {$ENDIF} diff --git a/CORE/Source/Basic/uRESTDWProtoTypes.pas b/CORE/Source/Basic/uRESTDWProtoTypes.pas index 9d96929bc..19b497bb0 100644 --- a/CORE/Source/Basic/uRESTDWProtoTypes.pas +++ b/CORE/Source/Basic/uRESTDWProtoTypes.pas @@ -299,3 +299,4 @@ interface {$ENDIF} implementation end. + diff --git a/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas b/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas index 3368ee2ed..e80da5eac 100644 --- a/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas +++ b/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas @@ -1,4 +1,4 @@ -unit uRESTDWDriverBase; +unit uRESTDWDriverBase; {$I ..\Includes\uRESTDW.inc} @@ -3716,7 +3716,7 @@ function TRESTDWDriverBase.OpenDatasets(DatasetsLine : String; var Error : Boole bJsonArray := bJsonValue.OpenArray(I); vTempQuery.Close; vTempQuery.SQL.Clear; - vTempQuery.SQL.Add(DecodeStrings(TRESTDWJSONInterfaceObject(bJsonArray).Pairs[0].Value{$IFDEF FPC}, csUndefined{$ENDIF})); + vTempQuery.SQL.Text := DecodeStrings(TRESTDWJSONInterfaceObject(bJsonArray).Pairs[0].Value{$IFDEF FPC}, csUndefined{$ENDIF}); //Add(DecodeStrings(TRESTDWJSONInterfaceObject(bJsonArray).Pairs[0].Value{$IFDEF FPC}, csUndefined{$ENDIF})); vBinaryEvent := StringToBoolean(TRESTDWJSONInterfaceObject(bJsonArray).Pairs[2].Value); vMetaData := StringToBoolean(TRESTDWJSONInterfaceObject(bJsonArray).Pairs[3].Value); vCompatibleMode := StringToBoolean(TRESTDWJSONInterfaceObject(bJsonArray).Pairs[4].Value); @@ -3860,7 +3860,7 @@ function TRESTDWDriverBase.OpenDatasets( End; vTempQuery.Close; vTempQuery.SQL.Clear; - vTempQuery.SQL.Add(StringReplace(BytesToString(vSqlStream), sLineBreak, ' ', [rfReplaceAll])); + vTempQuery.SQL.Text := BytesToString(vSqlStream);//Add(StringReplace(BytesToString(vSqlStream), sLineBreak, ' ', [rfReplaceAll])); SetLength(vSqlStream, 0); DWParams := TRESTDWParams.Create; Try diff --git a/CORE/Source/Includes/uRESTDW.inc b/CORE/Source/Includes/uRESTDW.inc index 3cc3bd6b7..59181a83e 100644 --- a/CORE/Source/Includes/uRESTDW.inc +++ b/CORE/Source/Includes/uRESTDW.inc @@ -10,6 +10,18 @@ {$IFEND} {$ENDIF} + +{$IFDEF FRAMEWORK} + {$DEFINE NOGUI} +{$ENDIF} + +{$IFDEF FPC} + {$IFDEF ANDROID} + {$DEFINE RESTDWLAMW} + {$DEFINE RESTDWLAZARUS} + {$ENDIF} +{$ENDIF} + {$IFDEF CLR} {$DEFINE RESTDWDELPHINET} {$ENDIF} @@ -20,9 +32,6 @@ {$IFDEF FPC} {$IF DEFINED(LCL)} {$DEFINE RESTDWLAZARUS} - {$IFDEF LAMW} - {$DEFINE RESTDWLAMW} - {$ENDIF} {$ELSE} {$DEFINE RESTDWFPC} {$DEFINE RESTDWLAMW} @@ -502,6 +511,7 @@ {$IFDEF RTL90_UP} {$DEFINE RTL80_UP} {$ENDIF} +{$IFNDEF RESTDWLAMW} {$IFNDEF FPC} {$IFDEF DELPHIXE5UP} {$IF Declared(FireMonkeyVersion) or Defined(FRAMEWORK_FMX) @@ -515,6 +525,7 @@ {$DEFINE RESTDWVCL} {$ENDIF} {$ENDIF} +{$ENDIF} (* End of FRAMEWORK Directives *) @@ -529,6 +540,8 @@ {$UNDEF RESTDWVCL} {$IFEND} + +{$IFNDEF RESTDWLAMW} {$IF Defined(ANDROID) or Defined(Android64)} {$DEFINE RESTDWANDROID} {$DEFINE HAS_UTF8} @@ -537,6 +550,7 @@ {$DEFINE RESTDWFMX} {$UNDEF RESTDWVCL} {$IFEND} +{$ENDIF} {$IF Defined(LINUX) or Defined(LINUX32) or Defined(LINUX64) or Defined(UNIX)} {$DEFINE RESTDWLINUX} diff --git a/CORE/Source/Plugins/JSONViewer/uRESTDWJSONViewer.lfm b/CORE/Source/Plugins/JSONViewer/uRESTDWJSONViewer.lfm index d89c04a4b..fe53fe979 100644 --- a/CORE/Source/Plugins/JSONViewer/uRESTDWJSONViewer.lfm +++ b/CORE/Source/Plugins/JSONViewer/uRESTDWJSONViewer.lfm @@ -170,36 +170,4 @@ object fDWJSONViewer: TfDWJSONViewer left = 376 top = 368 end - object RESTDWClientSQL1: TRESTDWClientSQL - Active = False - Encoding = esUtf8 - DatabaseCharSet = csUndefined - FieldDefs = <> - MasterCascadeDelete = True - BinaryRequest = False - Datapacks = -1 - DataCache = False - Params = <> - CacheUpdateRecords = True - AutoCommitData = False - AutoRefreshAfterCommit = False - RaiseErrors = True - Filtered = False - DWResponseTranslator = DWResponseTranslator1 - ActionCursor = crSQLWait - ReflectChanges = False - left = 344 - top = 368 - end - object DWResponseTranslator1: TDWResponseTranslator - ElementAutoReadRootIndex = True - ElementRootBaseIndex = -1 - RequestOpen = rtGet - RequestInsert = rtPost - RequestEdit = rtPost - RequestDelete = rtDelete - FieldDefs = <> - left = 312 - top = 368 - end end diff --git a/CORE/Source/Plugins/Memdataset/uRESTDWMemResources.pas b/CORE/Source/Plugins/Memdataset/uRESTDWMemResources.pas index 8fe44b0e3..5f2dc7e2e 100644 --- a/CORE/Source/Plugins/Memdataset/uRESTDWMemResources.pas +++ b/CORE/Source/Plugins/Memdataset/uRESTDWMemResources.pas @@ -2617,9 +2617,9 @@ interface {$ENDIF UNITVERSIONING} implementation {$IFDEF UNITVERSIONING} -initialization + initialization RegisterUnitVersion(HInstance, UnitVersioning); -finalization + finalization UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} end. diff --git a/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas b/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas index a9cf66933..4d81535e6 100644 --- a/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas +++ b/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas @@ -1017,7 +1017,7 @@ TMemBookmarkInfo = record dwftAutoInc : Result := SizeOf(Longint); dwftLargeint : Result := {$IFDEF FPC}8{$ELSE}{$IF CompilerVersion <= 22}8{$ELSE}64{$IFEND}{$ENDIF}; //Field Size é 64 Bits dwftBCD, //Result := SizeOf(TBcd); - dwftFMTBCD : Result := {$IFDEF FPC}8{$ELSE}SizeOf(DWBCD){$ENDIF}; + dwftFMTBCD : Result := SizeOf(Currency); dwftTimeStampOffset : Begin Inc(Result,SizeOf(Double)); Inc(Result,SizeOf(Byte)); @@ -1943,10 +1943,14 @@ function TRESTDWMemTable.InternalGetFieldData(Field: TField; {$IFDEF FPC} vSingle : DWSingle; vDataType : Byte; + vBCD : TBCD; + vBCDA : DWLongDouble; {$ENDIF} - vBCD : Real; vDouble : DWFloat; + vLongDouble : DWCurrency; vTimeStamp : TSQLTimeStamp; + vTimeStampV : TTimeStamp; + vDateTimeInt : DWInteger; vDateTimeRec : TDateTimeRec; vDWFieldType : Byte; Begin @@ -2244,6 +2248,12 @@ function TRESTDWMemTable.InternalGetFieldData(Field: TField; cLen := SizeOf(vBCD); Move(Pointer(@vBCD)^, Pointer(Buffer)^, cLen); End + Else If vDataType = dwftBCD Then + Begin + Move(aDataBytes[1], Pointer(@vLongDouble)^, SizeOf(vLongDouble)); + cLen := SizeOf(vLongDouble); + Move(Pointer(@vLongDouble)^, Pointer(Buffer)^, cLen); + End Else Move(aDataBytes[1], Pointer(Buffer)^, cLen-1); End @@ -2253,7 +2263,7 @@ function TRESTDWMemTable.InternalGetFieldData(Field: TField; If Length(TRESTDWBytes(Buffer)) = 0 Then SetLength(TRESTDWBytes(Buffer), cLen); cLen := SizeOf(TDateTimeRec); - Move(aDataBytes[1], Pointer(@vDouble)^, SizeOf(vDouble)); + Move(aDataBytes[1], Pointer(@vDouble)^, SizeOf(DWDouble)); Case Field.datatype Of ftTime : Begin vDateTimeRec.Time := DateTimeToTimeStamp(vDouble).Time; @@ -2590,6 +2600,7 @@ procedure TRESTDWMemTable.InternalSetFieldData(Field: TField; Buffer: Pointer; End Else Begin + vDateTime := 0; vDateTime := IncMillisecond(vDateTime, vDateTimeInt); vDateFloat := vDateTime; End; diff --git a/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.lfm b/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.lfm index 3b294a846..a8b92599f 100644 --- a/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.lfm +++ b/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.lfm @@ -1,23 +1,24 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Left = 472 - Height = 756 + Height = 1134 Top = 195 - Width = 1079 + Width = 1618 BorderIcons = [biMinimize] BorderWidth = 5 Caption = 'RESTDWClientSQL Editor' - ClientHeight = 756 - ClientWidth = 1079 + ClientHeight = 1134 + ClientWidth = 1618 Color = clBtnFace + DesignTimePPI = 144 Font.Color = clWindowText - Font.Height = -11 + Font.Height = -17 Font.Name = 'Tahoma' + Position = poScreenCenter + LCLVersion = '4.0.0.4' OnActivate = FormActivate OnClose = FormClose OnCreate = FormCreate OnShow = FormShow - Position = poScreenCenter - LCLVersion = '3.8.0.0' object PnlSQL: TPanel Left = 5 Height = 415 @@ -30,21 +31,21 @@ object FrmDWSqlEditor: TFrmDWSqlEditor ParentBackground = False TabOrder = 0 object PnlButton: TPanel - Left = 974 + Left = 927 Height = 415 Top = 0 - Width = 95 + Width = 142 Align = alRight BevelOuter = bvNone ClientHeight = 415 - ClientWidth = 95 + ClientWidth = 142 ParentBackground = False TabOrder = 0 object BtnExecute: TButton - Left = 8 - Height = 25 - Top = 20 - Width = 80 + Left = 12 + Height = 38 + Top = 30 + Width = 120 Caption = 'Execute' TabOrder = 0 OnClick = BtnExecuteClick @@ -73,8 +74,8 @@ object FrmDWSqlEditor: TFrmDWSqlEditor object TabSheetSQL: TTabSheet BorderWidth = 5 Caption = 'SQL Command' - ClientHeight = 368 - ClientWidth = 757 + ClientHeight = 0 + ClientWidth = 0 object Memo: TMemo Left = 0 Height = 368 @@ -90,32 +91,32 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object Panel1: TPanel Left = 0 - Height = 21 - Top = 394 + Height = 32 + Top = 383 Width = 765 Align = alBottom BevelOuter = bvLowered - ClientHeight = 21 + ClientHeight = 32 ClientWidth = 765 ParentBackground = False TabOrder = 1 object Label3: TLabel - Left = 7 + Left = 10 Height = 13 - Top = 4 + Top = 6 Width = 79 Caption = 'Execute Time:' Font.Color = clWindowText - Font.Height = -11 + Font.Height = -17 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentColor = False ParentFont = False end object lbExecutedTime: TLabel - Left = 91 + Left = 136 Height = 13 - Top = 4 + Top = 6 Width = 66 Caption = '00:00:00:000' ParentColor = False @@ -126,16 +127,16 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Left = 0 Height = 415 Top = 0 - Width = 209 + Width = 314 Align = alLeft BevelOuter = bvNone ClientHeight = 415 - ClientWidth = 209 + ClientWidth = 314 ParentBackground = False TabOrder = 2 object labSql: TLabel Left = 0 - Height = 23 + Height = 34 Top = 0 Width = 209 Align = alTop @@ -143,7 +144,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Caption = ' .: TABLES' Color = clBtnShadow Font.Color = clWhite - Font.Height = 24 + Font.Height = 36 Font.Name = 'Segoe UI' Layout = tlCenter ParentColor = False @@ -152,7 +153,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object Label1: TLabel Left = 0 - Height = 23 + Height = 34 Top = 232 Width = 209 Align = alTop @@ -160,7 +161,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Caption = ' .: FIELDS' Color = clBtnShadow Font.Color = clWhite - Font.Height = -16 + Font.Height = -24 Font.Name = 'Segoe UI' Layout = tlCenter ParentColor = False @@ -169,7 +170,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object Label2: TLabel Left = 0 - Height = 23 + Height = 34 Top = 153 Width = 209 Align = alTop @@ -177,7 +178,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Caption = ' .: SQL TYPE' Color = clBtnShadow Font.Color = clWhite - Font.Height = -16 + Font.Height = -24 Font.Name = 'Segoe UI' Layout = tlCenter ParentColor = False @@ -186,7 +187,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object lbTables: TListBox Left = 0 - Height = 130 + Height = 195 Top = 23 Width = 209 Align = alTop @@ -211,27 +212,27 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object pSQLTypes: TPanel Left = 0 - Height = 56 + Height = 84 Top = 176 Width = 209 Align = alTop BevelOuter = bvNone - ClientHeight = 56 + ClientHeight = 84 ClientWidth = 209 ParentBackground = False TabOrder = 2 object rbInsert: TRadioButton - Left = 88 + Left = 132 Height = 17 - Top = 8 + Top = 12 Width = 47 Caption = 'Insert' TabOrder = 0 end object rbSelect: TRadioButton - Left = 8 + Left = 12 Height = 17 - Top = 8 + Top = 12 Width = 47 Caption = 'Select' Checked = True @@ -239,17 +240,17 @@ object FrmDWSqlEditor: TFrmDWSqlEditor TabStop = True end object rbDelete: TRadioButton - Left = 88 + Left = 132 Height = 17 - Top = 32 + Top = 48 Width = 49 Caption = 'Delete' TabOrder = 2 end object rbUpdate: TRadioButton - Left = 8 + Left = 12 Height = 17 - Top = 32 + Top = 48 Width = 53 Caption = 'Update' TabOrder = 3 @@ -259,20 +260,20 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object PnlAction: TPanel Left = 5 - Height = 41 - Top = 710 + Height = 62 + Top = 689 Width = 1069 Align = alBottom BevelOuter = bvNone - ClientHeight = 41 + ClientHeight = 62 ClientWidth = 1069 ParentBackground = False TabOrder = 1 object BtnOk: TButton - Left = 905 - Height = 25 - Top = 8 - Width = 75 + Left = 823 + Height = 38 + Top = 12 + Width = 112 Anchors = [akTop, akRight] Caption = 'Ok' Default = True @@ -280,10 +281,10 @@ object FrmDWSqlEditor: TFrmDWSqlEditor OnClick = BtnOkClick end object BtnCancelar: TButton - Left = 986 - Height = 25 - Top = 8 - Width = 75 + Left = 945 + Height = 38 + Top = 12 + Width = 112 Anchors = [akTop, akRight] Cancel = True Caption = 'Cancel' @@ -293,8 +294,8 @@ object FrmDWSqlEditor: TFrmDWSqlEditor end object PageControlResult: TPageControl Left = 5 - Height = 290 - Top = 420 + Height = 435 + Top = 275 Width = 1069 ActivePage = TabSheetTable Align = alBottom @@ -303,8 +304,8 @@ object FrmDWSqlEditor: TFrmDWSqlEditor object TabSheetTable: TTabSheet BorderWidth = 5 Caption = 'RecordSet' - ClientHeight = 264 - ClientWidth = 1061 + ClientHeight = 0 + ClientWidth = 0 object DBGridRecord: TDBGrid Left = 0 Height = 264 @@ -315,7 +316,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Columns = <> TabOrder = 0 TitleFont.Color = clWindowText - TitleFont.Height = -11 + TitleFont.Height = -17 TitleFont.Name = 'Tahoma' end end @@ -324,7 +325,7 @@ object FrmDWSqlEditor: TFrmDWSqlEditor Enabled = False Interval = 200 OnTimer = tmCloseTimer - Left = 341 - Top = 240 + Left = 512 + Top = 360 end end diff --git a/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.pas b/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.pas index ee4848db0..8c63ea6d4 100644 --- a/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.pas +++ b/CORE/Source/Plugins/SQLEditor/uRESTDWSqlEditor.pas @@ -58,7 +58,7 @@ TThrBancoDados = class(TThread) protected procedure Execute; override; {$IFDEF FPC} - procedure TerminatedSet; override; + procedure TerminatedSet; {$IFNDEF NOGUI}override;{$ENDIF} {$ENDIF} procedure callFimBusca; public @@ -608,7 +608,7 @@ procedure TThrBancoDados.Execute; {$IFDEF FPC} procedure TThrBancoDados.TerminatedSet; begin - inherited TerminatedSet; + {$IFNDEF NOGUI} inherited TerminatedSet;{$ENDIF} DoTerminate; end; {$ENDIF} diff --git a/CORE/Source/Plugins/SelfSigned/uRESTDWSelfSigned.pas b/CORE/Source/Plugins/SelfSigned/uRESTDWSelfSigned.pas index f49c116c2..c8c9067bc 100644 --- a/CORE/Source/Plugins/SelfSigned/uRESTDWSelfSigned.pas +++ b/CORE/Source/Plugins/SelfSigned/uRESTDWSelfSigned.pas @@ -624,18 +624,19 @@ constructor TRESTDWSelfSigned.Create(AOwner: TComponent); FCertificate := nil; FPrivateKey := nil; - + {$IFNDEF RESTDWLAMW} if (LoadCrypto) and (LoadSSL) then FOpenSSLVersion := OpenSSL_version_num(); + {$ENDIF} end; destructor TRESTDWSelfSigned.Destroy; begin ClearCerts; - + {$IFNDEF RESTDWLAMW} UnloadCrypto; - UnloadSSL; - + {$ENDIF} + UnloadSSL; inherited Destroy; end; @@ -694,9 +695,10 @@ function TRESTDWSelfSigned.CreateSelfSignedCert : Boolean; Extension: PX509_EXTENSION; AServerName: RawByteString; begin + {$IFNDEF RESTDWLAMW} if (not LoadCrypto) or (not LoadSSL) then Exit; - + {$ENDIF} ClearCerts; { Create a self-signed certificate } @@ -817,9 +819,10 @@ procedure TRESTDWSelfSigned.SavePrivateKeyToPemStream(var stream : TStream; pass cipher1 : TSslCipher; cipher2 : PEVP_CIPHER; begin + {$IFNDEF RESTDWLAMW} if (not LoadCrypto) or (not LoadSSL) then Exit; - + {$ENDIF} stream.Size := 0; { Write the private key } diff --git a/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas b/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas index ebe0bbaa9..3f5e1f712 100644 --- a/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas +++ b/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas @@ -32,7 +32,7 @@ interface Uses {$IFDEF RESTDWWINDOWS}Windows,{$ENDIF} {$IFNDEF RESTDWLAZARUS}SyncObjs,{$ENDIF} - {$IF not Defined(RESTDWLAZARUS) AND not Defined(DELPHIXEUP)}uRESTDWMassiveBuffer,{$IFEND} + {$IF not Defined(RESTDWLAZARUS) AND not Defined(RESTDWLAMW) AND not Defined(DELPHIXEUP)}uRESTDWMassiveBuffer,{$IFEND} SysUtils, Classes, Db, Variants, uRESTDWBasic, uRESTDWBasicDB, uRESTDWComponentEvents, uRESTDWBasicTypes, uRESTDWJSONObject, uRESTDWParams, uRESTDWBasicClass, uRESTDWAbout, diff --git a/CORE/Source/Sockets/Indy/uRESTDWIdReg.pas b/CORE/Source/Sockets/Indy/uRESTDWIdReg.pas index 427d788aa..c8e8c9d70 100644 --- a/CORE/Source/Sockets/Indy/uRESTDWIdReg.pas +++ b/CORE/Source/Sockets/Indy/uRESTDWIdReg.pas @@ -27,8 +27,12 @@ interface uses {$IFDEF RESTDWLAZARUS} StdCtrls, ComCtrls, Forms, ExtCtrls, DBCtrls, DBGrids, Dialogs, Controls, - LResources, LazFileUtils, FormEditingIntf, PropEdits, lazideintf, - ProjectIntf, ComponentEditors, fpWeb, + LResources, LazFileUtils, + {$IFNDEF RESTDWLAMW} + FormEditingIntf, PropEdits, lazideintf, + ProjectIntf, ComponentEditors, + {$ENDIF} + fpWeb, {$ELSE} {$IFNDEF DELPHIXE2UP} Graphics, @@ -38,6 +42,7 @@ interface {$ENDIF} Classes, uRESTDWIdBase; +{$IFNDEF RESTDWLAMW} Type TPoolersList = Class(TStringProperty) Public @@ -45,11 +50,13 @@ interface Procedure GetValues(Proc: TGetStrProc); Override; Procedure Edit; Override; End; +{$ENDIF} Procedure Register; Implementation +{$IFNDEF RESTDWLAMW} Function TPoolersList.GetAttributes: TPropertyAttributes; Begin // editor, sorted list, multiple selection @@ -84,13 +91,16 @@ interface End; End; End; +{$ENDIF} Procedure Register; Begin RegisterComponents ('REST Dataware - Service', [TRESTDWIdServicePooler, TRESTDWIdProxyRequest, TRESTDWIdPoolerList]); RegisterComponents ('REST Dataware - Client', [TRESTDWIdClientREST, TRESTDWIdClientPooler]); RegisterComponents ('REST Dataware - DB', [TRESTDWIdDatabase]); + {$IFNDEF RESTDWLAMW} RegisterPropertyEditor(TypeInfo(String), TRESTDWIdDatabase, 'PoolerName', TPoolersList); + {$ENDIF} End; {$IFDEF RESTDWLAZARUS} diff --git a/CORE/Source/Sockets/JClient_LAMW/uRESTDWjClientLAMWBase.pas b/CORE/Source/Sockets/JClient_LAMW/uRESTDWjClientLAMWBase.pas new file mode 100644 index 000000000..be6468721 --- /dev/null +++ b/CORE/Source/Sockets/JClient_LAMW/uRESTDWjClientLAMWBase.pas @@ -0,0 +1,1971 @@ +unit uRESTDWjClientLAMWBase; + +{$I ..\..\Includes\uRESTDW.inc} + +{ + REST Dataware . + Criado por XyberX (Gilbero Rocha da Silva), o REST Dataware tem como objetivo o uso de REST/JSON + de maneira simples, em qualquer Compilador Pascal (Delphi, Lazarus e outros...). + O REST Dataware também tem por objetivo levar componentes compatíveis entre o Delphi e outros Compiladores + Pascal e com compatibilidade entre sistemas operacionais. + Desenvolvido para ser usado de Maneira RAD, o REST Dataware tem como objetivo principal você usuário que precisa + de produtividade e flexibilidade para produção de Serviços REST/JSON, simplificando o processo para você programador. + + Membros do Grupo : + + XyberX (Gilberto Rocha) - Admin - Criador e Administrador do pacote. + A. Brito - Admin - Administrador do desenvolvimento. + Alexandre Abbade - Admin - Administrador do desenvolvimento de DEMOS, coordenador do Grupo. + Flávio Motta - Member Tester and DEMO Developer. + Mobius One - Devel, Tester and Admin. + Gustavo - Criptografia and Devel. + Eloy - Devel. + Roniery - Devel. +} + +interface + +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + +Uses + {$IFDEF RESTDWWINDOWS}Windows,{$ENDIF} + {$IFNDEF RESTDWLAZARUS}SyncObjs,{$ENDIF} + {$IF not Defined(RESTDWLAZARUS) AND not Defined(RESTDWLAMW) AND not Defined(DELPHIXEUP)}uRESTDWMassiveBuffer,{$IFEND} + SysUtils, Classes, Db, Variants, + uRESTDWBasic, uRESTDWBasicDB, uRESTDWComponentEvents, uRESTDWBasicTypes, + uRESTDWJSONObject, uRESTDWParams, uRESTDWBasicClass, uRESTDWAbout, + uRESTDWConsts, uRESTDWProtoTypes, uRESTDWDataUtils, uRESTDWTools, uRESTDWZlib, + uRESTDWAuthenticators, And_jni, Laz_And_Controls; + +Type + TRESTDWjClientLAMWClientHttpBase = Class(TRESTDWClientHttpBase) + Private + HttpRequest : jHttpClient; + vVerifyCert : Boolean; + vAUrl : String; + vOnGetpassword : TOnGetpassword; + Procedure SetParams; + Procedure SetHeaders (AHeaders : TStringList);Overload;Override; + Procedure SetOnWorkEnd (Value : TOnWorkEnd);Override; + Procedure SetOnStatus (Value : TOnStatus); Override; + Procedure DestroyClient;Override; + Procedure SetInternalEvents; + Public + Constructor Create(AOwner : TComponent);Override; + Destructor Destroy;Override; + Function Get (AUrl : String = ''; + Const CustomHeaders : TStringList = Nil; + Const AResponse : TStream = Nil; + Const AResponseError : TStream = Nil) : Integer;Override; + Function Post (AUrl : String = ''; + Const CustomHeaders : TStringList = Nil; + Const CustomParams : TStringList = Nil; + Const CustomBody : TStream = Nil; + Const AResponse : TStream = Nil; + Const AResponseError : TStream = Nil) : Integer;Override; + Function Delete (AUrl : String; + Const CustomHeaders : TStringList = Nil; + Const CustomParams : TStringList = Nil; + Const AResponse : TStream = Nil; + Const AResponseError : TStream = Nil) : Integer;Override; +End; + + + TRESTDWjClientLAMWClientREST = Class(TRESTDWClientRESTBase) + Private + HttpRequest : jHttpClient; + vVerifyCert : Boolean; + vAUrl : String; + Procedure SetRawHeaders (AHeaders : TStringList; + Var clientConn : jObject); + Procedure SetParams;Overload; + Procedure SetParams(stream : TStream); + Procedure SetHeaders (AHeaders : TStringList; + Var clientConn : jObject); + Procedure SetOnStatus (Value : TOnStatus); Override; + Procedure DestroyClient;Override; + Public + Constructor Create(AOwner : TComponent);Override; + Destructor Destroy;Override; + Function Get (AUrl : String = ''; + CustomHeaders : TStringList = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False):Integer;Overload;Override; + Function Get (AUrl : String = ''; + CustomHeaders : TStringList = Nil; + IgnoreEvents : Boolean = False):String; Overload;Override; + Function Post (AUrl : String = ''; + CustomHeaders : TStringList = Nil; + Const CustomBody : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer;Overload;Override; + Function Post (AUrl : String = ''; + CustomHeaders : TStringList = Nil; + CustomBody : TStringList = Nil; + Const AResponse : TStringStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer;Overload; + + Function Post (AUrl : String = ''; + CustomHeaders : TStringList = Nil; + FileName : String = ''; + FileStream : TStream = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer;Overload;Override; + Function Post (AUrl : String; + var AResponseText : String; + CustomHeaders : TStringList = Nil; + CustomParams : TStringList = Nil; + Const CustomBody : TStream = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer;Overload;Override; + Function Post (AUrl : String; + CustomHeaders : TStringList = Nil; + CustomParams : TStringList = Nil; + FileName : String = ''; + FileStream : TStream = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer;Overload;Override; + Function Delete (AUrl : String = ''; + CustomHeaders : TStringList = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False):Integer;Overload;Override; + Function Delete (AUrl : String; + CustomHeaders : TStringList = Nil; + CustomParams : TStringList = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False):Integer;Overload;Override; +End; + + TRESTDWjClientLAMWDatabase = Class(TRESTDWDatabasebaseBase) + Private + Public + Constructor Create (AOwner : TComponent);Override; + Destructor Destroy;Override; + Function IsServerLive (Aip : String; + Aport : Integer; + AMessageErro : String): Boolean; Override; +End; + + TRESTDWjClientLAMWClientPooler = Class(TRESTClientPoolerBase) + Private + HttpRequest : TRESTDWjClientLAMWClientREST; + Function SendEvent (EventData : String; + Var Params : TRESTDWParams; + EventType : TSendEvent = sePOST; + DataMode : TDataMode = dmDataware; + ServerEventName : String = ''; + Assyncexec : Boolean = False) : String;Override; + Procedure SetParams (TransparentProxy : TProxyConnectionInfo; + aRequestTimeout, + aConnectTimeout : Integer; + AuthorizationParams : TRESTDWClientAuthOptionParams); + Public + Constructor Create (AOwner : TComponent);Override; + Destructor Destroy;Override; + Procedure ReconfigureConnection(aTypeRequest : Ttyperequest; + aWelcomeMessage, + aHost : String; + aPort : Integer; + Compression, + EncodeStrings : Boolean; + aEncoding : TEncodeSelect; + aAccessTag : String; + aAuthenticationOptions : TRESTDWClientAuthOptionParams);Override; + Function IsServerLive (Aip : String; + Aport : Integer; + AMessageErro : String): Boolean; + Procedure Abort;Override; +End; + + TRESTDWjClientLAMWPoolerList = Class(TRESTDWPoolerListBase) + Public + Constructor Create(AOwner : TComponent);Override; //Cria o Componente + Destructor Destroy;Override; + End; + +//Fix to Indy Request Patch and Put +Type + jHttpClientAccess = class(jHttpClient) +End; + +Implementation + +Uses uRESTDWJSONInterface; + +Destructor TRESTDWjClientLAMWClientREST.Destroy; +Begin + If Assigned(HttpRequest) then + Begin + Try + HttpRequest.Disconnect(HttpRequest); + HttpRequest.Free; + Except + End; + End; + Inherited; +End; + +Procedure TRESTDWjClientLAMWClientREST.DestroyClient; +Begin + {$IFNDEF RESTDWLAZARUS} + {$IFNDEF FPC} + Inherited; + {$ENDIF} + {$ELSE} + {$IFNDEF FPC} + Inherited; + {$ENDIF} + {$ENDIF} + If Assigned(HttpRequest) Then + Begin + HttpRequest.Disconnect(HttpRequest); + //FreeAndNil(HttpRequest); + End; +End; + +Procedure TRESTDWjClientLAMWClientREST.SetParams(stream : TStream); +Begin + +End; + +Procedure TRESTDWjClientLAMWClientREST.SetParams; +begin + Try + If Not Assigned(HttpRequest) Then + HttpRequest := jHttpClient.Create(Nil); + Finally + If RequestCharset = esUtf8 Then + HttpRequest.CharSet := 'utf-8'; + HttpRequest.ClearNameValueData; + HttpRequest.SetRequestProperty(HttpRequest, 'Accept', Accept); + HttpRequest.SetRequestProperty(HttpRequest, 'AcceptEncoding', AcceptEncoding); + HttpRequest.SetRequestProperty(HttpRequest, 'ContentType', ContentType); + HttpRequest.SetRequestProperty(HttpRequest, 'ContentEncoding', ContentEncoding); + HttpRequest.SetRequestProperty(HttpRequest, 'UserAgent', UserAgent); + End; +End; + +Function TRESTDWjClientLAMWClientREST.Get(AUrl : String = ''; + CustomHeaders : TStringList = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False) : Integer; +Var + aString : String; + vTempHeaders : TStringList; + atempResponse: TStream; + clientConn : jObject; +Begin + Result:= 200; // o novo metodo recebe sempre 200 como code inicial; + Try + AUrl := StringReplace(AUrl, #012, '', [rfReplaceAll]); + vAUrl := AUrl; + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + Try + SetHeaders(TStringList(DefaultCustomHeader), clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforeGet) then + If Not Assigned(CustomHeaders) Then + OnBeforeGet(AUrl, vTempHeaders) + Else + OnBeforeGet(AUrl, CustomHeaders); + //Copy New Headers + CopyStringList(CustomHeaders, vTempHeaders); + If RequestCharset = esUtf8 Then + atempResponse := TStringStream.Create(utf8Decode(HttpRequest.Get(AUrl))) + Else + atempResponse := TStringStream.Create(HttpRequest.Get(AUrl)); + Result:= HttpRequest.GetResponseCode; + atempResponse.Position := 0; + If Not IgnoreEvents Then + If Assigned(OnAfterRequest) then + OnAfterRequest(AUrl, rtGet, atempResponse); + Finally + vTempHeaders.Free; + If Assigned(atempResponse) Then + atempResponse.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(HttpRequest); + End; + End; + DestroyClient; +End; + +Function TRESTDWjClientLAMWClientREST.Get(AUrl : String = ''; + CustomHeaders : TStringList = Nil; + IgnoreEvents : Boolean = False) : String; +Var + temp : TStringStream; + vTempHeaders : TStringList; + clientConn : jObject; +Begin + Try + AUrl := StringReplace(AUrl, #012, '', [rfReplaceAll]); + vAUrl := AUrl; + Result := ''; + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + Try + SetHeaders(TStringList(DefaultCustomHeader), clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforeGet) then + If Not Assigned(CustomHeaders) Then + OnBeforeGet(AUrl, vTempHeaders) + Else + OnBeforeGet(AUrl, CustomHeaders); + CopyStringList(CustomHeaders, vTempHeaders); + Result := HttpRequest.Get(AUrl); + Finally + vTempHeaders.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(HttpRequest); + End; + End; + DestroyClient; +End; + +Function TRESTDWjClientLAMWClientREST.Post(AUrl : String = ''; + CustomHeaders : TStringList = Nil; + Const CustomBody : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False) : Integer; +Var + temp : TStringStream; + vTempHeaders : TStringList; + atempResponse: TStringStream; + aString, + sResponse : string; + clientConn : jObject; +Begin + Result:= 200; + Try + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + atempResponse := TStringStream.Create(''); + vAUrl := AUrl; + Try + SetHeaders(TStringList(DefaultCustomHeader), clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforePost) then + If Not Assigned(CustomHeaders) Then + OnBeforePost(AUrl, vTempHeaders) + Else + OnBeforePost(AUrl, CustomHeaders); + CopyStringList(CustomHeaders, vTempHeaders); + SetRawHeaders(vTempHeaders, clientConn); + clientConn := HttpRequest.OpenConnection(AUrl); + If Not Assigned(CustomBody) Then + Begin + atempResponse := TStringStream.Create(HttpRequest.Post(clientConn)); + Result:= HttpRequest.GetResponseCode; + atempResponse.Position := 0; + If Not IgnoreEvents Then + If Assigned(OnAfterRequest) then + OnAfterRequest(AUrl, rtPost, atempResponse); + FreeAndNil(atempResponse); + End + Else + Begin + atempResponse := TStringStream.Create(HttpRequest.Post(clientConn)); + Result:= HttpRequest.GetResponseCode; + atempResponse.Position := 0; + CustomBody.CopyFrom(atempResponse, atempResponse.Size); + CustomBody.Position := 0; + FreeAndNil(atempResponse); + If Not IgnoreEvents Then + If Assigned(OnAfterRequest) then + OnAfterRequest(AUrl, rtPost, CustomBody); + End; + Finally + vTempHeaders.Free; + If Assigned(atempResponse) Then + FreeAndNil(atempResponse); + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(clientConn); + End; + End; + DestroyClient; +End; + + +Function TRESTDWjClientLAMWClientREST.Post(AUrl : String = ''; + CustomHeaders : TStringList = Nil; + CustomBody : TStringList = Nil; + Const AResponse : TStringStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer; +Var + temp : TStringStream; + vTempHeaders : TStringList; + atempResponse: TStringStream; + clientConn : jObject; +Begin + Result:= 200; + Try + atempResponse := Nil; + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + vAUrl := AUrl; + Try + //Copy Custom Headers + SetHeaders(CustomHeaders, clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforePost) then + If Not Assigned(CustomHeaders) Then + OnBeforePost(AUrl, vTempHeaders) + Else + OnBeforePost(AUrl, CustomHeaders); + clientConn := HttpRequest.OpenConnection(AUrl); + If RequestCharset = esUtf8 Then + atempResponse := TStringStream.Create(utf8Decode(HttpRequest.Post(clientConn))) + Else + atempResponse := TStringStream.Create(HttpRequest.Post(clientConn)); + Result:= HttpRequest.GetResponseCode; + atempResponse.Position := 0; + atempResponse.Position := 0; + If RequestCharset = esUtf8 Then + AResponse.WriteString(utf8Decode(atempResponse.DataString)) + Else + AResponse.WriteString(atempResponse.DataString); + FreeAndNil(atempResponse); + AResponse.Position := 0; + If Not IgnoreEvents Then + If Assigned(OnAfterRequest) then + OnAfterRequest(AUrl, rtPost, AResponse); + Finally + vTempHeaders.Free; + If Assigned(atempResponse) Then + atempResponse.Free; + If Assigned(temp) Then + temp.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(clientConn); + End; + End; +End; + +Function TRESTDWjClientLAMWClientREST.Post(AUrl : String = ''; + CustomHeaders : TStringList = Nil; + FileName : String = ''; + FileStream : TStream = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer; +Var + vTempHeaders : TStringList; + aString : String; + clientConn : jObject; +Begin + Result:= 200; + Try + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + vAUrl := AUrl; + Try + //Copy Custom Headers + SetHeaders(CustomHeaders, clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforePost) then + If Not Assigned(CustomHeaders) Then + OnBeforePost(AUrl, vTempHeaders) + Else + OnBeforePost(AUrl, CustomHeaders); + clientConn := HttpRequest.OpenConnection(AUrl); + aString := GetTempFileName; + Try + TMemoryStream(FileStream).SaveToFile(aString); + HttpRequest.UploadFile('upload_file', aString); + Finally + DeleteFile(aString); + End; + Result := HttpRequest.GetResponseCode; + Finally + vTempHeaders.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(clientConn); + End; + End; + DestroyClient; +End; + +Function TRESTDWjClientLAMWClientREST.Post(AUrl : String; + Var AResponseText : String; + CustomHeaders : TStringList = Nil; + CustomParams : TStringList = Nil; + Const CustomBody : TStream = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False) : Integer; +Var + vTempHeaders : TStringList; + atempResponse: TStringStream; + aString, + sResponse : string; + clientConn : jObject; +Begin + Result:= 200; + Try + atempResponse := Nil; + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + vAUrl := AUrl; + Try + SetHeaders(TStringList(DefaultCustomHeader), clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforePost) then + If Not Assigned(CustomHeaders) Then + OnBeforePost(AUrl, vTempHeaders) + Else + OnBeforePost(AUrl, CustomHeaders); + CopyStringList(CustomHeaders, vTempHeaders); + If Assigned(CustomBody) Then + SetParams(CustomBody) + Else + SetRawHeaders(vTempHeaders, clientConn); + clientConn := HttpRequest.OpenConnection(AUrl); + If RequestCharset = esUtf8 Then + atempResponse := TStringStream.Create(utf8Decode(HttpRequest.Post(clientConn))) + Else + atempResponse := TStringStream.Create(HttpRequest.Post(clientConn)); + Result:= HttpRequest.GetResponseCode; + atempResponse.Position := 0; + If Not IgnoreEvents Then + If Assigned(OnAfterRequest) then + OnAfterRequest(AUrl, rtPost, atempResponse); + Finally + vTempHeaders.Free; + If Assigned(atempResponse) Then + FreeAndNil(atempResponse); + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(clientConn); + End; + End; + DestroyClient; +End; + +Function TRESTDWjClientLAMWClientREST.Post(AUrl : String; + CustomHeaders : TStringList = Nil; + CustomParams : TStringList = Nil; + FileName : String = ''; + FileStream : TStream = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False; + RawHeaders : Boolean = False):Integer; +Var + aString : String; + vTempHeaders : TStringList; + clientConn : jObject; +Begin + Result:= 200; + Try + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + vAUrl := AUrl; + Try + //Copy Custom Headers + SetHeaders(CustomHeaders, clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforePost) then + If Not Assigned(CustomHeaders) Then + OnBeforePost(AUrl, vTempHeaders) + Else + OnBeforePost(AUrl, CustomHeaders); + clientConn := HttpRequest.OpenConnection(AUrl); + aString := GetTempFileName; + Try + TMemoryStream(FileStream).SaveToFile(aString); + HttpRequest.UploadFile('upload_file', aString); + Finally + DeleteFile(aString); + End; + Result := HttpRequest.GetResponseCode; + Finally + vTempHeaders.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(clientConn); + End; + End; + DestroyClient; +End; + + +Function TRESTDWjClientLAMWClientREST.Delete(AUrl : String = ''; + CustomHeaders : TStringList = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False):Integer; +Var + vTempHeaders : TStringList; + SendParams, + atempResponse : TStringStream; + aString : String; + clientConn : jObject; +Begin + Result:= 200; + Try + atempResponse := Nil; + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + vAUrl := AUrl; + Try + SetHeaders(TStringList(DefaultCustomHeader), clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforeDelete) then + If Not Assigned(CustomHeaders) Then + OnBeforeDelete(AUrl, vTempHeaders) + Else + OnBeforeDelete(AUrl, CustomHeaders); + CopyStringList(CustomHeaders, vTempHeaders); + HttpRequest.DeleteStateful(AUrl, vTempHeaders.Text); + Result:= HttpRequest.GetResponseCode; + Finally + vTempHeaders.Free; + If Assigned(SendParams) Then + SendParams.Free; + If Assigned(atempResponse) Then + atempResponse.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(HttpRequest); + End; + End; + DestroyClient; +End; + +Function TRESTDWjClientLAMWClientREST.Delete(AUrl : String; + CustomHeaders : TStringList = Nil; + CustomParams : TStringList = Nil; + Const AResponse : TStream = Nil; + IgnoreEvents : Boolean = False):Integer; +Var + vTempHeaders : TStringList; + aString : String; + clientConn : jObject; +Begin + Result:= 200; + Try + SetParams; + SetUseSSL(UseSSL); + vTempHeaders := TStringList.Create; + vAUrl := AUrl; + Try + SetHeaders(TStringList(DefaultCustomHeader), clientConn); + If Not IgnoreEvents Then + If Assigned(OnBeforeDelete) then + If Not Assigned(CustomHeaders) Then + OnBeforeDelete(AUrl, vTempHeaders) + Else + OnBeforeDelete(AUrl, CustomHeaders); + CopyStringList(CustomHeaders, vTempHeaders); + HttpRequest.DeleteStateful(AUrl, vTempHeaders.Text); + Result:= HttpRequest.GetResponseCode; + Finally + vTempHeaders.Free; + End; + Except + On E : Exception Do + Begin + Raise Exception.Create(E.Message); + HttpRequest.Disconnect(HttpRequest); + End; + End; + DestroyClient; +End; + +Constructor TRESTDWjClientLAMWClientREST.Create(AOwner: TComponent); +Begin + Inherited; + //application/json + ContentType := cContentTypeFormUrl; + ContentEncoding := cDefaultContentEncoding; + Accept := cDefaultAccept; + AcceptEncoding := ''; + MaxAuthRetries := 0; + UserAgent := cUserAgent; + AccessControlAllowOrigin := '*'; + ActiveRequest := ''; + RedirectMaximum := 1; + RequestTimeOut := 5000; + ConnectTimeOut := 5000; +End; + +Procedure TRESTDWjClientLAMWClientREST.SetRawHeaders(AHeaders : TStringList; + Var clientConn : jObject); +Var + I : Integer; +Begin + HttpRequest.ClearNameValueData; + If AccessControlAllowOrigin <> '' Then + HttpRequest.SetRequestProperty(clientConn, 'Access-Control-Allow-Origin', AccessControlAllowOrigin); + If Assigned(AHeaders) Then + Begin + If AHeaders.Count > 0 Then + Begin + For i := 0 to AHeaders.Count-1 do + Begin + If RequestCharset = esUtf8 Then + HttpRequest.SetRequestProperty(clientConn, AHeaders.Names[i], utf8Decode(AHeaders.ValueFromIndex[i])) + Else + HttpRequest.SetRequestProperty(clientConn, AHeaders.Names[i], AHeaders.ValueFromIndex[i]); + End; + End; + End; +End; + +Procedure TRESTDWjClientLAMWClientREST.SetHeaders(AHeaders : TStringList; + Var clientConn : jObject); +Var + I : Integer; + vmark : String; + DWParams : TRESTDWParams; +Begin + vmark := ''; + DWParams := Nil; + HttpRequest.ClearNameValueData; + HttpRequest.SetRequestProperty(clientConn, AcceptEncoding, AcceptEncoding); + If AccessControlAllowOrigin <> '' Then + HttpRequest.SetRequestProperty(clientConn, 'Access-Control-Allow-Origin', AccessControlAllowOrigin); + If Assigned(AHeaders) Then + If AHeaders.Count > 0 Then + For i := 0 to AHeaders.Count-1 do + HttpRequest.SetRequestProperty(clientConn, AHeaders.Names[i], AHeaders.ValueFromIndex[i]); + If AuthenticationOptions.AuthorizationOption in [rdwAOBasic, rdwAOBearer, rdwAOToken, rdwOAuth] Then + Begin + { + HttpRequest.Request.BasicAuthentication := AuthenticationOptions.AuthorizationOption = rdwAOBasic; + Case AuthenticationOptions.AuthorizationOption of + rdwAOBasic : Begin + If HttpRequest.Request.Authentication = Nil Then + HttpRequest.Request.Authentication := TIdBasicAuthentication.Create; + HttpRequest.Request.Authentication.Password := TRESTDWAuthOptionBasic(AuthenticationOptions.OptionParams).Password; + HttpRequest.Request.Authentication.Username := TRESTDWAuthOptionBasic(AuthenticationOptions.OptionParams).UserName; + End; + rdwAOBearer : Begin + If Assigned(HttpRequest.Request.Authentication) Then + Begin + HttpRequest.Request.Authentication.Free; + HttpRequest.Request.Authentication := Nil; + End; + HttpRequest.Request.CustomHeaders.Add('Authorization: Bearer ' + TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token); + End; + rdwAOToken : Begin + If Assigned(HttpRequest.Request.Authentication) Then + Begin + HttpRequest.Request.Authentication.Free; + HttpRequest.Request.Authentication := Nil; + End; + HttpRequest.Request.CustomHeaders.Add('Authorization: Token ' + Format('token="%s"', [TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token])); + End; + rdwOAuth : Begin + If Assigned(HttpRequest.Request.Authentication) Then + Begin + HttpRequest.Request.Authentication.Free; + HttpRequest.Request.Authentication := Nil; + End; + ActiveRequest := Stringreplace(lowercase(ActiveRequest), 'http://', '', [rfReplaceAll]); + ActiveRequest := Stringreplace(lowercase(ActiveRequest), 'https://', '', [rfReplaceAll]); + TRESTDWDataUtils.ParseRESTURL(ActiveRequest, RequestCharset, vmark{$IFDEF FPC}, csUndefined{$ENDIF}, DWParams); + If Assigned(DWParams) Then + FreeAndNil(DWParams); + Case TRESTDWAuthOAuth(AuthenticationOptions.OptionParams).TokenType Of + rdwOATBasic : Begin + End; + rdwOATBearer : HttpRequest.Request.CustomHeaders.Add('Authorization: Bearer ' + TRESTDWAuthOAuth(AuthenticationOptions.OptionParams).Token); + rdwOATToken : HttpRequest.Request.CustomHeaders.Add('Authorization: Token ' + Format('token="%s"', [TRESTDWAuthOAuth(AuthenticationOptions.OptionParams).Token])); + End; + End; + End; + } + End; +End; + +Procedure TRESTDWjClientLAMWClientREST.SetOnStatus(Value : TOnStatus); +Begin + Inherited SetOnStatus(Value); +End; + +{ TRESTDWjClientLAMWClientPooler } + + +Procedure TRESTDWjClientLAMWClientPooler.SetParams(TransparentProxy : TProxyConnectionInfo; + aRequestTimeout : Integer; + aConnectTimeout : Integer; + AuthorizationParams : TRESTDWClientAuthOptionParams); +Begin + HttpRequest.DefaultCustomHeader.Clear; +// HttpRequest.DefaultCustomHeader.NameValueSeparator := cNameValueSeparator; + HttpRequest.Accept := Accept; + HttpRequest.AcceptEncoding := AcceptEncoding; + HttpRequest.AuthenticationOptions := AuthorizationParams; + HttpRequest.ProxyOptions.ProxyUsername := TransparentProxy.ProxyUsername; + HttpRequest.ProxyOptions.ProxyServer := TransparentProxy.ProxyServer; + HttpRequest.ProxyOptions.ProxyPassword := TransparentProxy.ProxyPassword; + HttpRequest.ProxyOptions.ProxyPort := TransparentProxy.ProxyPort; + HttpRequest.RequestTimeout := aRequestTimeout; + HttpRequest.ConnectTimeout := aConnectTimeout; + HttpRequest.ContentType := ContentType; + HttpRequest.ContentEncoding := ContentEncoding; + HttpRequest.AllowCookies := AllowCookies; + HttpRequest.HandleRedirects := HandleRedirects; + HttpRequest.Charset := Charset; + HttpRequest.UserAgent := UserAgent; + HttpRequest.OnWork := Self.OnWork; + HttpRequest.OnWorkBegin := Self.OnWorkBegin; + HttpRequest.OnWorkEnd := Self.OnWorkEnd; + HttpRequest.OnStatus := Self.OnStatus; +End; + +procedure TRESTDWjClientLAMWClientPooler.Abort; +begin + {$IFNDEF RESTDWLAZARUS} + {$IFNDEF FPC} + Inherited; + {$ENDIF} + {$ENDIF} +end; + +Constructor TRESTDWjClientLAMWClientPooler.Create(AOwner : TComponent); +Begin + Inherited; + HttpRequest := Nil; + ContentType := cContentTypeFormUrl; + ContentEncoding := cDefaultContentEncoding; + End; + +Destructor TRESTDWjClientLAMWClientPooler.Destroy; +Begin + If Assigned(HttpRequest) Then + FreeAndNil(HttpRequest); + Inherited; +End; + +function TRESTDWjClientLAMWClientPooler.IsServerLive(Aip: String; Aport: Integer; + AMessageErro: String): Boolean; +begin + Result := True; +end; + +Procedure TRESTDWjClientLAMWClientPooler.ReconfigureConnection(aTypeRequest : Ttyperequest; + aWelcomeMessage, + aHost : String; + aPort : Integer; + Compression, + EncodeStrings : Boolean; + aEncoding : TEncodeSelect; + aAccessTag : String; + aAuthenticationOptions : TRESTDWClientAuthOptionParams); +Begin + {$IFNDEF RESTDWLAZARUS} + {$IFNDEF FPC} + Inherited; + {$ENDIF} + {$ENDIF} +End; + +Function TRESTDWjClientLAMWClientPooler.SendEvent(EventData : String; + Var Params : TRESTDWParams; + EventType : TSendEvent; + DataMode : TDataMode; + ServerEventName : String; + Assyncexec : Boolean) : String; +Var + vErrorMessage, + vErrorMessageA, + vDataPack, + SResult, vURL, + vResponse, + vTpRequest : String; + vErrorCode, + I : Integer; + vDWParam : TRESTDWJSONParam; + vResultParams : TStringStream; + MemoryStream, + aStringStream, + bStringStream, + StringStream : TStream; + StringStreamList : TStringStreamList; + JSONValue : TRESTDWJSONValue; + aBinaryCompatibleMode, + aBinaryRequest : Boolean; + Procedure SetData(Var InputValue : String; + Var ParamsData : TRESTDWParams; + Var ResultJSON : String); + Var + bJsonOBJ, + bJsonValue : TRESTDWJSONInterfaceObject; + bJsonOBJTemp : TRESTDWJSONInterfaceArray; + JSONParam, + JSONParamNew : TRESTDWJSONParam; + A, InitPos : Integer; + vValue, + aValue, + vTempValue : String; + Begin + ResultJSON := InputValue; + If Pos(', "RESULT":[', InputValue) = 0 Then + Begin + If (Encoding = esUtf8) Then //NativeResult Correções aqui + Begin + {$IF Defined(DELPHIXEUP)} + //ResultJSON := PWidechar(UTF8Decode(InputValue)); + ResultJSON := PWidechar(InputValue); + {$ELSEIF Defined(RESTDWLAZARUS)} + ResultJSON := GetStringDecode(InputValue, DatabaseCharSet); + {$ELSE} // delphi velho + ResultJSON := UTF8Decode(ResultJSON); + {$IFEND} + End + Else + ResultJSON := InputValue; + Exit; + End; + Try + If (Pos(', "RESULT":[{"MESSAGE":"', InputValue) > 0) Then + InitPos := Pos(', "RESULT":[{"MESSAGE":"', InputValue) + Length(', "RESULT":[') //TODO Brito + Else If (Pos(', "RESULT":[', InputValue) > 0) Then + InitPos := Pos(', "RESULT":[', InputValue) + Length(', "RESULT":[') + Else If (Pos('{"PARAMS":[{"', InputValue) > 0) And + (Pos('", "RESULT":', InputValue) > 0) Then + InitPos := Pos('", "RESULT":', InputValue) + Length('", "RESULT":'); + aValue := Copy(InputValue, InitPos, Length(InputValue) -1); + If Pos(']}', aValue) > 0 Then + aValue := Copy(aValue, InitStrPos, Pos(']}', aValue) -1); + vTempValue := aValue; + InputValue := Copy(InputValue, InitStrPos, InitPos-1) + ']}'; + If (Params <> Nil) And (InputValue <> '{"PARAMS"]}') And (InputValue <> '') Then + Begin + If Pos(', "RESULT":[]}', InputValue) > 0 Then + InputValue := StringReplace(InputValue, ', "RESULT":[]}', '}', []); + {$IFDEF DELPHIXEUP} + bJsonValue := TRESTDWJSONInterfaceObject.Create(InputValue); + {$ELSE} + If Encoding = esUtf8 Then + bJsonValue := TRESTDWJSONInterfaceObject.Create(PWidechar(UTF8Decode(InputValue))) + Else + bJsonValue := TRESTDWJSONInterfaceObject.Create(InputValue); + {$ENDIF} + InputValue := ''; + If bJsonValue.PairCount > 0 Then + Begin + bJsonOBJTemp := TRESTDWJSONInterfaceArray(bJsonValue.OpenArray(bJsonValue.pairs[0].name)); + If bJsonOBJTemp.ElementCount > 0 Then + Begin + For A := 0 To bJsonOBJTemp.ElementCount -1 Do + Begin + bJsonOBJ := TRESTDWJSONInterfaceObject(bJsonOBJTemp.GetObject(A)); + If Length(bJsonOBJ.Pairs[0].Value) = 0 Then + Begin + FreeAndNil(bJsonOBJ); + Continue; + End; + If GetObjectName(bJsonOBJ.Pairs[0].Value) <> toParam Then + Begin + FreeAndNil(bJsonOBJ); + Continue; + End; + JSONParam := TRESTDWJSONParam.Create(Encoding); + Try + JSONParam.ParamName := bJsonOBJ.Pairs[4].name; + JSONParam.ObjectValue := GetValueType(bJsonOBJ.Pairs[3].Value); + JSONParam.ObjectDirection := GetDirectionName(bJsonOBJ.Pairs[1].Value); + JSONParam.Encoded := GetBooleanFromString(bJsonOBJ.Pairs[2].Value); + If Not(JSONParam.ObjectValue In [ovBlob, ovStream, ovGraphic, ovOraBlob, ovOraClob]) Then + Begin + If (JSONParam.Encoded) Then + Begin + {$IF Defined(FPC)} + vValue := DecodeStrings(bJsonOBJ.Pairs[4].Value, DatabaseCharSet); + {$ELSE} + vValue := DecodeStrings(bJsonOBJ.Pairs[4].Value); + If Encoding = esUtf8 Then + vValue := Utf8Decode(vValue); + {$IFEND} + End + Else If JSONParam.ObjectValue <> ovObject then + vValue := bJsonOBJ.Pairs[4].Value + Else //TODO Brito + Begin + vValue := bJsonOBJ.Pairs[4].Value; + DeleteInvalidChar(vValue); + End; + End + Else + vValue := bJsonOBJ.Pairs[4].Value; + JSONParam.SetValue(vValue, JSONParam.Encoded); + //parametro criandos no servidor + If ParamsData.ItemsString[JSONParam.ParamName] = Nil Then + Begin + JSONParamNew := TRESTDWJSONParam.Create(ParamsData.Encoding); + JSONParamNew.ParamName := JSONParam.ParamName; + JSONParamNew.ObjectDirection := JSONParam.ObjectDirection; + JSONParamNew.SetValue(JSONParam.Value, JSONParam.Encoded); + ParamsData.Add(JSONParamNew); + End + Else If Not (ParamsData.ItemsString[JSONParam.ParamName].Binary) Then + ParamsData.ItemsString[JSONParam.ParamName].Value := JSONParam.Value + Else + ParamsData.ItemsString[JSONParam.ParamName].SetValue(vValue, JSONParam.Encoded); + Finally + FreeAndNil(JSONParam); + FreeAndNil(bJsonOBJ); + End; + End; + End; + If Assigned(bJsonOBJTemp) Then + FreeAndNil(bJsonOBJTemp); + If Assigned(bJsonOBJ) Then + FreeAndNil(bJsonOBJ); + End; + {$IFNDEF FPC} //TODO XyberX + If Assigned(bJsonValue) Then + FreeAndNil(bJsonValue); + {$ENDIF} + End; + Finally + If vTempValue <> '' Then + ResultJSON := vTempValue; + vTempValue := ''; + End; + End; + Function GetParamsValues(Var DWParams : TRESTDWParams{$IFDEF FPC};vDatabaseCharSet : TDatabaseCharSet{$ENDIF}) : String; + Var + I : Integer; + Begin + Result := ''; + JSONValue := Nil; + If WelcomeMessage <> '' Then + Result := 'dwwelcomemessage=' + EncodeStrings(WelcomeMessage{$IFDEF FPC}, vDatabaseCharSet{$ENDIF}); + If AccessTag <> '' Then + Begin + If Result <> '' Then + Result := Result + '&dwaccesstag=' + EncodeStrings(AccessTag{$IFDEF FPC}, vDatabaseCharSet{$ENDIF}) + Else + Result := 'dwaccesstag=' + EncodeStrings(AccessTag{$IFDEF FPC}, vDatabaseCharSet{$ENDIF}); + End; + If ServerEventName <> '' Then + Begin + If Assigned(DWParams) Then + Begin + vDWParam := DWParams.ItemsString['dwservereventname']; + If Not Assigned(vDWParam) Then + Begin + vDWParam := TRESTDWJSONParam.Create(DWParams.Encoding); + vDWParam.ObjectDirection := odIN; + DWParams.Add(vDWParam); + End; + Try + vDWParam.Encoded := True; + vDWParam.ParamName := 'dwservereventname'; + vDWParam.SetValue(ServerEventName, vDWParam.Encoded); + Finally +// FreeAndNil(JSONValue); + End; + End + Else + Begin + JSONValue := TRESTDWJSONValue.Create; + Try + JSONValue.Encoding := DWParams.Encoding; + JSONValue.Encoded := True; + JSONValue.Tagname := 'dwservereventname'; + JSONValue.SetValue(ServerEventName, JSONValue.Encoded); + Finally + If Result <> '' Then + Result := Result + '&dwservereventname=' + EncodeStrings(JSONValue.ToJSON{$IFDEF FPC}, vDatabaseCharSet{$ENDIF}) + Else + Result := 'dwservereventname=' + EncodeStrings(JSONValue.ToJSON{$IFDEF FPC}, vDatabaseCharSet{$ENDIF}); + FreeAndNil(JSONValue); + End; + End; + End; + If Result <> '' Then + Result := Result + '&datacompression=' + BooleanToString(DataCompression) + Else + Result := 'datacompression=' + BooleanToString(DataCompression); + If Result <> '' Then + Result := Result + '&dwassyncexec=' + BooleanToString(Assyncexec) + Else + Result := 'dwassyncexec=' + BooleanToString(Assyncexec); + If Result <> '' Then + Result := Result + '&dwencodestrings=' + BooleanToString(EncodedStrings) + Else + Result := 'dwencodestrings=' + BooleanToString(EncodedStrings); + If Result <> '' Then + Begin + If Assigned(vCripto) Then + If vCripto.Use Then + Result := Result + '&dwusecript=true'; + End + Else + Begin + If Assigned(vCripto) Then + If vCripto.Use Then + Result := 'dwusecript=true'; + End; + If DWParams <> Nil Then + Begin + For I := 0 To DWParams.Count -1 Do + Begin + If Result <> '' Then + Begin + If DWParams.Items[I].ObjectValue in [ovSmallint, ovInteger, ovWord, ovBoolean, ovByte, + ovAutoInc, ovLargeint, ovLongWord, ovShortint, ovSingle] Then + Result := Result + Format('&%s=%s', [DWParams.Items[I].ParamName, EncodeStrings(DWParams.Items[I].Value{$IFDEF FPC}, vDatabaseCharSet{$ENDIF})]) + Else + Begin + If vCripto.Use Then + Result := Result + Format('&%s=%s', [DWParams.Items[I].ParamName, vCripto.Encrypt(DWParams.Items[I].Value)]) + Else + Result := Result + Format('&%s=%s', [DWParams.Items[I].ParamName, EncodeStrings(DWParams.Items[I].Value{$IFDEF FPC}, vDatabaseCharSet{$ENDIF})]); + End; + End + Else + Begin + If DWParams.Items[I].ObjectValue in [ovSmallint, ovInteger, ovWord, ovBoolean, ovByte, + ovAutoInc, ovLargeint, ovLongWord, ovShortint, ovSingle] Then + Result := Format('%s=%s', [DWParams.Items[I].ParamName, DWParams.Items[I].Value]) + Else + Begin + If vCripto.Use Then + Result := Format('%s=%s', [DWParams.Items[I].ParamName, vCripto.Encrypt(DWParams.Items[I].Value)]) + Else + Result := Format('%s=%s', [DWParams.Items[I].ParamName, EncodeStrings(DWParams.Items[I].Value{$IFDEF FPC}, vDatabaseCharSet{$ENDIF})]); + End; + End; + End; + End; + End; + Procedure SetParamsValues(DWParams : TRESTDWParams); //TODO envio de parametros XyberX + Var + I : Integer; + vCharsset : String; + Begin + MemoryStream := Nil; + If DWParams <> Nil Then + Begin + If Not (Assigned(StringStreamList)) Then + StringStreamList := TStringStreamList.Create; + If BinaryRequest Then + Begin + DWParams.SaveToStream(MemoryStream); + Try + If Assigned(MemoryStream) Then + Begin + MemoryStream.Position := 0; +// SendParamsData.AddObject( 'binarydata', 'application/octet-stream', '', MemoryStream); + End; + Finally + End; + End + Else + Begin + vCharsset := 'ASCII'; + If Encoding = esUtf8 Then + vCharsset := 'UTF8'; + For I := 0 To DWParams.Count -1 Do + Begin + If DWParams.Items[I].ObjectValue in [ovWideMemo, ovBytes, ovVarBytes, ovBlob, ovStream, + ovMemo, ovGraphic, ovFmtMemo, ovOraBlob, ovOraClob] Then + Begin + StringStreamList.Add({$IFDEF DELPHIXEUP} + TStringStream.Create(DWParams.Items[I].ToJSON, TEncoding.UTF8) + {$ELSE} + TStringStream.Create(DWParams.Items[I].ToJSON) + {$ENDIF}); +// SendParamsData.AddObject(DWParams.Items[I].ParamName, 'multipart/form-data', vCharsset, StringStreamList.Items[StringStreamList.Count-1]); + End + Else + Begin +// SendParamsData.AddFormField(DWParams.Items[I].ParamName, DWParams.Items[I].ToJSON); + End; + End; + End; + End; + End; + Function BuildUrl(TpRequest : TTypeRequest; + Host, + aDataRoute : String; + Port : Integer) : String; + Var + vTpRequest : String; + Begin + Result := ''; + + If TpRequest = trHttp Then + vTpRequest := 'http' + Else If TpRequest = trHttps Then + vTpRequest := 'https'; + + if ClientIpVersion = civIPv6 then + Host := '[' + Host + ']'; + + If (aDataRoute = '') Then + Result := LowerCase(Format(UrlBaseA, [vTpRequest, Host, Port, '/'])) + EventData + Else + Result := LowerCase(Format(UrlBaseA, [vTpRequest, Host, Port, aDataRoute])) + EventData; + + End; + Procedure SetCharsetRequest(Var HttpRequest : TRESTDWjClientLAMWClientREST; + Charset : TEncodeSelect); + Begin + If Charset = esUtf8 Then + Begin + If HttpRequest.ContentType = '' Then + HttpRequest.ContentType := 'application/json;charset=utf-8'; + If HttpRequest.Charset = '' Then + HttpRequest.Charset := 'utf-8'; + End + Else If Charset in [esANSI, esASCII] Then + HttpRequest.Charset := 'ansi'; + End; + Function ExecRequest(EventType : TSendEvent; + URL, + WelcomeMessage, + AccessTag : String; + Charset : TEncodeSelect; + Datacompress, + hEncodeStrings, + BinaryRequest : Boolean; + Var ResultData, + ErrorMessage : String) : Boolean; + Var + vAccessURL, + vWelcomeMessage, + vUrl : String; + A : Integer; + Function BuildValue(Name, Value : String) : String; + Begin + If vURL = URL + '?' Then + Result := Format('%s=%s', [Name, Value]) + Else + Result := Format('&%s=%s', [Name, Value]); + End; + Begin + Result := True; + ResultData := ''; + ErrorMessage := ''; + vAccessURL := ''; + vWelcomeMessage := ''; + vUrl := ''; + {$IFDEF DELPHIXEUP} + vResultParams := TStringStream.Create('', TEncoding.UTF8); + //vResultParams := TStringStream.Create(''); + {$ELSE} + vResultParams := TStringStream.Create(''); + {$ENDIF} + Try + HttpRequest.UserAgent := UserAgent; + HttpRequest.RedirectMaximum := RedirectMaximum; + HttpRequest.HandleRedirects := HandleRedirects; + Case EventType Of + seGET, + seDELETE : + Begin + HttpRequest.ContentType := 'application/json'; + vURL := URL + '?'; + If WelcomeMessage <> '' Then + vURL := vURL + BuildValue('dwwelcomemessage', EncodeStrings(WelcomeMessage{$IFDEF FPC}, DatabaseCharSet{$ENDIF})); + If (AccessTag <> '') Then + vURL := vURL + BuildValue('dwaccesstag', EncodeStrings(AccessTag{$IFDEF FPC}, DatabaseCharSet{$ENDIF})); + If AuthenticationOptions.AuthorizationOption <> rdwAONone Then + Begin + Case AuthenticationOptions.AuthorizationOption Of + rdwAOBearer : Begin + If TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).TokenRequestType <> rdwtHeader Then + If TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token <> '' Then + vURL := vURL + BuildValue(TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Key, TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token); + End; + rdwAOToken : Begin + If TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).TokenRequestType <> rdwtHeader Then + If TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token <> '' Then + vURL := vURL + BuildValue(TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Key, TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token); + End; + End; + End; + vURL := vURL + BuildValue('datacompression', BooleanToString(Datacompress)); + vURL := vURL + BuildValue('dwassyncexec', BooleanToString(Assyncexec)); + vURL := vURL + BuildValue('dwencodestrings', BooleanToString(EncodedStrings)); + vURL := vURL + BuildValue('binaryrequest', BooleanToString(BinaryRequest)); + If aBinaryCompatibleMode Then + vURL := vURL + BuildValue('BinaryCompatibleMode', BooleanToString(aBinaryCompatibleMode)); + vURL := Format('%s&%s', [vURL, GetParamsValues(Params{$IFDEF FPC}, DatabaseCharSet{$ENDIF})]); + If Assigned(vCripto) Then + vURL := vURL + BuildValue('dwusecript', BooleanToString(vCripto.Use)); + {$IFDEF DELPHIXEUP} + aStringStream := TStringStream.Create('',TEncoding.UTF8); + {$ELSE} + aStringStream := TStringStream.Create(''); + {$ENDIF} + Case EventType Of + seGET : vErrorCode := HttpRequest.Get(vURL, TStringList(HttpRequest.DefaultCustomHeader), aStringStream); + seDELETE : Begin + //Delete do ClientPooler TODO +// jHttpClientAccess(HttpRequest).DoRequest(Id_HTTPMethodDelete, vURL, SendParams, aStringStream, []); +// vErrorCode := jHttpClientAccess(HttpRequest).ResponseCode; + End; + End; + If Not Assyncexec Then + Begin + If Datacompress Then + Begin + If Assigned(aStringStream) Then + Begin + aStringStream.Position:=0; + If aStringStream.Size > 0 Then + StringStream := ZDecompressStreamNew(aStringStream); + If aBinaryRequest Then + Begin + Params.LoadFromStream(StringStream); + If not (Params.ItemsString['MessageError'] = Nil) Then + Begin + If trim(Params.ItemsString['MessageError'].AsString) = '' Then + ResultData := TReplyOK + Else + ResultData := Params.ItemsString['MessageError'].AsString; + End; + End + Else + ResultData := TStringStream(aStringStream).DataString; + FreeAndNil(aStringStream); + // ResultData :=TStringStream(StringStream).DataString; + FreeAndNil(StringStream); + End; + End + Else + Begin + ResultData := TStringStream(aStringStream).DataString; + FreeAndNil(aStringStream); + End; + End; + If Encoding = esUtf8 Then + ResultData := Utf8Decode(ResultData); + End; + sePOST, + sePUT, + sePATCH : + Begin; + //Envio de parametros do RESTDW TODO +// If WelcomeMessage <> '' Then +// SendParams.AddFormField('dwwelcomemessage', EncodeStrings(WelcomeMessage{$IFDEF FPC}, DatabaseCharSet{$ENDIF})); +// If AccessTag <> '' Then +// SendParams.AddFormField('dwaccesstag', EncodeStrings(AccessTag{$IFDEF FPC}, DatabaseCharSet{$ENDIF})); + If ServerEventName <> '' Then + Begin + If Assigned(Params) Then + Begin + vDWParam := Params.ItemsString['dwservereventname']; + If Not Assigned(vDWParam) Then + vDWParam := TRESTDWJSONParam.Create(Params.Encoding); + + Try + vDWParam.Encoded := True; + vDWParam.ObjectDirection := odIN; + vDWParam.ParamName := 'dwservereventname'; + vDWParam.SetValue(ServerEventName, vDWParam.Encoded); + Finally + If Params.ItemsString['dwservereventname'] = Nil Then + Params.Add(vDWParam); + End; + End; + JSONValue := TRESTDWJSONValue.Create; + Try + JSONValue.Encoding := Charset; + JSONValue.Encoded := True; + JSONValue.Tagname := 'dwservereventname'; + JSONValue.SetValue(ServerEventName, JSONValue.Encoded); + Finally + //Envio de parametros do RESTDW TODO + // SendParams.AddFormField('dwservereventname', JSONValue.ToJSON); + FreeAndNil(JSONValue); + End; + End; + //Envio de parametros do RESTDW TODO +// SendParams.AddFormField('datacompression', BooleanToString(Datacompress)); +// SendParams.AddFormField('dwassyncexec', BooleanToString(Assyncexec)); +// SendParams.AddFormField('dwencodestrings', BooleanToString(EncodedStrings)); +// SendParams.AddFormField('binaryrequest', BooleanToString(BinaryRequest)); + If AuthenticationOptions.AuthorizationOption <> rdwAONone Then + Begin + If Assigned(Params) Then + Begin + Case AuthenticationOptions.AuthorizationOption Of + rdwAOBearer : Begin + If TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).TokenRequestType <> rdwtHeader Then + Begin + If TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token <> '' Then + Begin + //Envio de parametros do RESTDW TODO + //SendParams.AddFormField(TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Key, + // TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token); + vDWParam := Params.ItemsString[TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Key]; + If Not Assigned(vDWParam) Then + vDWParam := TRESTDWJSONParam.Create(Params.Encoding); + Try + vDWParam.Encoded := True; + vDWParam.ObjectDirection := odIN; + vDWParam.ParamName := TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Key; + vDWParam.SetValue(TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token, vDWParam.Encoded); + Finally + If Params.ItemsString[TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Key] = Nil Then + Params.Add(vDWParam); + End; + End; + End; + End; + rdwAOToken : Begin + If TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).TokenRequestType <> rdwtHeader Then + Begin + If TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token <> '' Then + Begin + //Envio de parametros do RESTDW TODO + //SendParams.AddFormField(TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Key, + // TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token); + vDWParam := Params.ItemsString[TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Key]; + If Not Assigned(vDWParam) Then + vDWParam := TRESTDWJSONParam.Create(Params.Encoding); + Try + vDWParam.Encoded := True; + vDWParam.ObjectDirection := odIN; + vDWParam.ParamName := TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Key; + vDWParam.SetValue(TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token, vDWParam.Encoded); + Finally + If Params.ItemsString[TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Key] = Nil Then + Params.Add(vDWParam); + End; + End; + End; + End; + End; + End + Else + Begin + Case AuthenticationOptions.AuthorizationOption Of + rdwAOBearer : Begin + //Envio de parametros do RESTDW TODO + //If TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).TokenRequestType <> rdwtHeader Then + // SendParams.AddFormField(TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Key, TRESTDWAuthOptionBearerClient(AuthenticationOptions.OptionParams).Token); + End; + rdwAOToken : Begin + //Envio de parametros do RESTDW TODO + //If TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).TokenRequestType <> rdwtHeader Then + //SendParams.AddFormField(TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Key, TRESTDWAuthOptionTokenClient(AuthenticationOptions.OptionParams).Token); + End; + End; + End; + End; + //Envio de parametros do RESTDW TODO +// If aBinaryCompatibleMode Then +// SendParams.AddFormField('BinaryCompatibleMode', BooleanToString(aBinaryCompatibleMode)); +// If Assigned(vCripto) Then +// SendParams.AddFormField('dwusecript', BooleanToString(vCripto.Use)); +// If Params <> Nil Then +// SetParamsValues(Params, SendParams); + If (Params <> Nil) Or (WelcomeMessage <> '') Or (Datacompress) Then + Begin + If HttpRequest.Accept = '' Then + HttpRequest.Accept := cDefaultContentType; + If HttpRequest.AcceptEncoding = '' Then + HttpRequest.AcceptEncoding := AcceptEncoding; + If HttpRequest.ContentType = '' Then + HttpRequest.ContentType := cContentTypeFormUrl; + If HttpRequest.ContentEncoding = '' Then + HttpRequest.ContentEncoding := cContentTypeMultiPart; + If TEncodeSelect(Encoding) = esUtf8 Then + HttpRequest.Charset := 'Utf-8' + Else If TEncodeSelect(Encoding) in [esANSI, esASCII] Then + HttpRequest.Charset := 'ansi'; + If Not BinaryRequest Then + While HttpRequest.DefaultCustomHeader.IndexOfName('binaryrequest') > -1 Do + HttpRequest.DefaultCustomHeader.Delete(HttpRequest.DefaultCustomHeader.IndexOfName('binaryrequest')); + If Not aBinaryCompatibleMode Then + While HttpRequest.DefaultCustomHeader.IndexOfName('BinaryCompatibleMode') > -1 Do + HttpRequest.DefaultCustomHeader.Delete(HttpRequest.DefaultCustomHeader.IndexOfName('BinaryCompatibleMode')); + HttpRequest.UserAgent := UserAgent; + If Datacompress Then + Begin + {$IFDEF DELPHIXEUP} + aStringStream := TStringStream.Create('', TEncoding.UTF8); + //aStringStream := TStringStream.Create(''); + {$ELSE} + aStringStream := TStringStream.Create(''); + {$ENDIF} + //Envio de Requisicao RESTDW TODO +// Case EventType Of +// sePUT : vErrorCode := HttpRequest.Put(URL, TStringList(HttpRequest.DefaultCustomHeader), SendParams, aStringStream); +// sePATCH : vErrorCode := HttpRequest.Patch(URL, TStringList(HttpRequest.DefaultCustomHeader), SendParams, aStringStream); +// sePOST : vErrorCode := HttpRequest.Post(URL, TStringList(HttpRequest.DefaultCustomHeader), SendParams, aStringStream); +// end; + If Not Assyncexec Then + Begin + If Assigned(aStringStream) Then + Begin + If (aStringStream.Size > 0) And + ((vErrorCode = 200) or (vErrorCode = 201)) Then + StringStream := ZDecompressStreamNew(aStringStream) + Else + StringStream := TStringStream.Create(TStringStream(aStringStream).DataString); + FreeAndNil(aStringStream); + End; + End; + End + Else + Begin + {$IFDEF DELPHIXEUP} + StringStream := TStringStream.Create('', TEncoding.UTF8); + {$ELSE} + StringStream := TStringStream.Create(''); + {$ENDIF} + //Envio de Requisicao RESTDW TODO + //Case EventType Of + // sePUT : vErrorCode := HttpRequest.Put(URL, TStringList(HttpRequest.DefaultCustomHeader), SendParams, StringStream); + // sePATCH : vErrorCode := HttpRequest.Patch(URL, TStringList(HttpRequest.DefaultCustomHeader), SendParams, aStringStream); + // sePOST : vErrorCode := HttpRequest.Post(URL, TStringList(HttpRequest.DefaultCustomHeader), SendParams, StringStream); + //end; + End; + // If SendParams <> Nil Then + //Begin + // If Assigned(StringStreamList) Then + // FreeAndNil(StringStreamList); + // FreeAndNil(SendParams); + //End; + End + Else + Begin + HttpRequest.ContentType := cDefaultContentType; + HttpRequest.ContentEncoding := ''; + HttpRequest.UserAgent := UserAgent; + aStringStream := TStringStream.Create(''); + HttpRequest.Get(URL, TStringList(HttpRequest.DefaultCustomHeader), aStringStream); + aStringStream.Position := 0; + StringStream := TStringStream.Create(''); + bStringStream := TStringStream.Create(''); + If Not Assyncexec Then + Begin + If Datacompress Then + Begin + bStringStream.CopyFrom(aStringStream, aStringStream.Size); + bStringStream.Position := 0; + ZDecompressStreamD(TStringStream(bStringStream), TStringStream(StringStream)); + End + Else + Begin + bStringStream.CopyFrom(aStringStream, aStringStream.Size); + bStringStream.Position := 0; + HexToStream(TStringStream(bStringStream).DataString, TStringStream(StringStream)); + End; + End; + FreeAndNil(bStringStream); + FreeAndNil(aStringStream); + End; + If BinaryRequest Then + Begin + If Not Assyncexec Then + Begin + If (vErrorCode = 200) or (vErrorCode = 201) Then + Begin + StringStream.Position := 0; + Params.LoadFromStream(StringStream); + {$IFDEF DELPHIXEUP} + TStringStream(StringStream).Clear; + {$ENDIF} + {$IFNDEF RESTDWLAZARUS} + StringStream.Size := 0; + {$ENDIF} + If not (Params.ItemsString['MessageError'] = Nil) Then + Begin + if Params.ItemsString['MessageError'].AsString = trim('') then + ResultData := TReplyOK + else + ResultData := Params.ItemsString['MessageError'].AsString; + + end; + End + Else + Begin + ErrorMessage := TStringStream(StringStream).DataString; + ResultData := TReplyNOK; + End; + FreeAndNil(StringStream); + End; + End + Else + Begin + If Not Assyncexec Then + Begin + If Assigned(StringStream) Then + Begin + StringStream.Position := 0; + If Datacompress Then + vDataPack := BytesToString(StreamToBytes(TMemoryStream(StringStream))) + Else + vDataPack := TStringStream(StringStream).DataString; + {$IFDEF DELPHIXEUP} + TStringStream(StringStream).Clear; + {$ENDIF} + {$IFNDEF RESTDWLAZARUS} + StringStream.Size := 0; + {$ENDIF} + FreeAndNil(StringStream); + SetData(vDataPack, Params, ResultData); + End + Else + Begin + SetData(vDataPack, Params, ResultData); + End; + If not (vErrorCode in [200,201]) Then + Begin + ErrorMessage := ResultData; + ResultData := TReplyNOK; + End; + End; + End; + End; + End; + // Eloy + case vErrorCode of + 401: ErrorMessage := cInvalidAuth; + 404: ErrorMessage := cEventNotFound; + 405: ErrorMessage := cInvalidPoolerName; + end; + Except + On E : Exception Do + Begin + Result := False; + ResultData := GetPairJSONStr('NOK', PoolerNotFoundMessage); +// If Assigned(SendParams) then +// FreeAndNil(SendParams); + If Assigned(vResultParams) then + FreeAndNil(vResultParams); + If Assigned(StringStreamList) Then + FreeAndNil(StringStreamList); + If Assigned(StringStream) then + FreeAndNil(StringStream); + If Assigned(aStringStream) then + FreeAndNil(aStringStream); + If Assigned(MemoryStream) Then + FreeAndNil(MemoryStream); + If Not FailOver then + Begin + {$IFDEF RESTDWFMX} + ErrorMessage := PoolerNotFoundMessage; + {$ELSE} + Raise Exception.Create(PoolerNotFoundMessage); + {$ENDIF} + End + Else + ErrorMessage := e.Message; + End; + End; + If Assigned(vResultParams) Then + FreeAndNil(vResultParams); +// If Assigned(SendParams) then +// FreeAndNil(SendParams); + If Assigned(StringStream) then + FreeAndNil(StringStream); + If Assigned(MemoryStream) then + FreeAndNil(MemoryStream); + If Assigned(aStringStream) Then + FreeAndNil(aStringStream); + If Assigned(MemoryStream) Then + FreeAndNil(MemoryStream); + End; +Begin + vDWParam := Nil; + MemoryStream := Nil; + vResultParams := Nil; + aStringStream := Nil; + bStringStream := Nil; + JSONValue := Nil; +// SendParams := Nil; + StringStreamList := Nil; + StringStream := Nil; + aStringStream := Nil; + vResultParams := Nil; + aBinaryRequest := False; + aBinaryCompatibleMode := False; + If (Params.ItemsString['BinaryRequest'] <> Nil) Then + aBinaryRequest := Params.ItemsString['BinaryRequest'].AsBoolean; + If (Params.ItemsString['BinaryCompatibleMode'] <> Nil) Then + aBinaryCompatibleMode := Params.ItemsString['BinaryCompatibleMode'].AsBoolean And aBinaryRequest; + if Not aBinaryRequest then + aBinaryRequest := BinaryRequest; + vURL := BuildUrl(TypeRequest, Host, DataRoute, Port); + If Assigned(HttpRequest) Then + FreeAndNil(HttpRequest); + HttpRequest := TRESTDWjClientLAMWClientREST.Create(Nil); +// If (TypeRequest = trHttps) Then +// HttpRequest.SSLVersions := PIdSSLVersions(@SSLVersions)^; + HttpRequest.UserAgent := UserAgent; + SetCharsetRequest(HttpRequest, Encoding); + SetParams(ProxyOptions, RequestTimeout, ConnectTimeout, AuthenticationOptions); + HttpRequest.MaxAuthRetries := 0; +// HttpRequest.DefaultCustomHeader.NameValueSeparator := cNameValueSeparator; + If BinaryRequest Then + If HttpRequest.DefaultCustomHeader.IndexOfName('binaryrequest') = -1 Then + HttpRequest.DefaultCustomHeader.Add('binaryrequest=true'); + + If aBinaryCompatibleMode Then + If HttpRequest.DefaultCustomHeader.IndexOfName('BinaryCompatibleMode') = -1 Then + HttpRequest.DefaultCustomHeader.Add('BinaryCompatibleMode=true'); + + LastErrorMessage := ''; + LastErrorCode := -1; + Try + If Not ExecRequest(EventType, vURL, WelcomeMessage, AccessTag, Encoding, DataCompression, EncodedStrings, aBinaryRequest, Result, vErrorMessage) Then + Begin + If FailOver Then + Begin + For I := 0 To FailOverConnections.Count -1 Do + Begin + If I = 0 Then + Begin + If ((FailOverConnections[I].TypeRequest = TypeRequest) And + (FailOverConnections[I].WelcomeMessage = WelcomeMessage) And + (FailOverConnections[I].Host = Host) And + (FailOverConnections[I].Port = Port) And + (FailOverConnections[I].Compression = DataCompression) And + (FailOverConnections[I].hEncodeStrings = EncodedStrings) And + (FailOverConnections[I].Encoding = Encoding) And + (FailOverConnections[I].AccessTag = AccessTag) And + (FailOverConnections[I].DataRoute = DataRoute)) Or + (Not (FailOverConnections[I].Active)) Then + Continue; + End; + If Assigned(OnFailOverExecute) Then + OnFailOverExecute(FailOverConnections[I]); + vURL := BuildUrl(FailOverConnections[I].TypeRequest, + FailOverConnections[I].Host, + FailOverConnections[I].DataRoute, + FailOverConnections[I].Port); //LowerCase(Format(UrlBase, [vTpRequest, vHost, vPort, vUrlPath])) + EventData; + SetCharsetRequest(HttpRequest, FailOverConnections[I].Encoding); + SetParams(FailOverConnections[I].ProxyOptions, + FailOverConnections[I].RequestTimeOut, + FailOverConnections[I].ConnectTimeOut, + FailOverConnections[I].AuthenticationOptions); + If ExecRequest(EventType, vURL, + FailOverConnections[I].WelcomeMessage, + FailOverConnections[I].AccessTag, + FailOverConnections[I].Encoding, + FailOverConnections[I].Compression, + FailOverConnections[I].hEncodeStrings, + BinaryRequest, + Result, vErrorMessage) Then + Begin + If FailOverReplaceDefaults Then + Begin + TypeRequest := FailOverConnections[I].TypeRequest; + WelcomeMessage := FailOverConnections[I].WelcomeMessage; + Host := FailOverConnections[I].Host; + Port := FailOverConnections[I].Port; + DataCompression := FailOverConnections[I].Compression; + ProxyOptions := FailOverConnections[I].ProxyOptions; + EncodedStrings := FailOverConnections[I].hEncodeStrings; + Encoding := FailOverConnections[I].Encoding; + AccessTag := FailOverConnections[I].AccessTag; + RequestTimeout := FailOverConnections[I].RequestTimeOut; + ConnectTimeout := FailOverConnections[I].ConnectTimeOut; + DataRoute := FailOverConnections[I].DataRoute; + End; + Break; + End + Else + Begin + If Assigned(OnFailOverError) Then + Begin + OnFailOverError(FailOverConnections[I], vErrorMessage); + vErrorMessage := ''; + End; + End; + End; + End; + End; + Finally + If Assigned(HttpRequest) Then + FreeAndNil(HttpRequest); + + If (vErrorMessage <> '') Then + Begin + //Result := unescape_chars(vErrorMessage); + Result := vErrorMessage; + Raise Exception.Create(Result); + End; + End; +End; + +{ TRESTDWjClientLAMWDatabase } + +Constructor TRESTDWjClientLAMWDatabase.Create(AOwner: TComponent); +Begin + Inherited; + RESTClientPooler := TRESTDWjClientLAMWClientPooler.Create(Self); + ContentType := cContentTypeFormUrl; + ContentEncoding := cDefaultContentEncoding; + TRESTDWjClientLAMWClientPooler(RESTClientPooler).ClientIpVersion := ClientIpVersion; +End; + +Destructor TRESTDWjClientLAMWDatabase.Destroy; +Begin + DestroyClientPooler; + + Inherited; +End; + + +function TRESTDWjClientLAMWDatabase.IsServerLive(Aip: String; Aport: Integer; AMessageErro: String): Boolean; +begin + Result := True; +end; + +{ TRESTDWjClientLAMWPoolerList } + +constructor TRESTDWjClientLAMWPoolerList.Create(AOwner: TComponent); +begin + Inherited; + + RESTClientPooler := TRESTDWjClientLAMWClientPooler.Create(Self); +end; + +destructor TRESTDWjClientLAMWPoolerList.Destroy; +begin + + Inherited; +end; + +{ TRESTDWjClientLAMWClientHttpBase } + +Constructor TRESTDWjClientLAMWClientHttpBase.Create(AOwner : TComponent); +Begin + Inherited; + ContentType := cContentTypeFormUrl; + ContentEncoding := cDefaultContentEncoding; + Accept := cDefaultAccept; + AcceptEncoding := ''; + MaxAuthRetries := 0; + UserAgent := cUserAgent; + AccessControlAllowOrigin := '*'; + ActiveRequest := ''; + RedirectMaximum := 1; + RequestTimeOut := 5000; + ConnectTimeOut := 5000; +End; + +Function TRESTDWjClientLAMWClientHttpBase.Delete(AUrl : String; + Const CustomHeaders : TStringList = Nil; + Const CustomParams : TStringList = Nil; + Const AResponse : TStream = Nil; + Const AResponseError : TStream = Nil): Integer; +Begin + +End; + +Destructor TRESTDWjClientLAMWClientHttpBase.Destroy; +Begin + If Assigned(HttpRequest) then + Begin + Try + If Assigned(HttpRequest) Then + Begin + HttpRequest.Disconnect(HttpRequest); + End; + Except + End; + FreeAndNil(HttpRequest); + End; + Inherited; +End; + +Procedure TRESTDWjClientLAMWClientHttpBase.DestroyClient; +Begin + // +End; + +Function TRESTDWjClientLAMWClientHttpBase.Get(AUrl : String = ''; + Const CustomHeaders : TStringList = Nil; + Const AResponse : TStream = Nil; + Const AResponseError : TStream = Nil) : Integer; +Begin + +End; + +Function TRESTDWjClientLAMWClientHttpBase.Post(AUrl : String = ''; + Const CustomHeaders : TStringList = Nil; + Const CustomParams : TStringList = Nil; + Const CustomBody : TStream = Nil; + Const AResponse : TStream = Nil; + Const AResponseError : TStream = Nil) : Integer; +Begin + +End; + +Procedure TRESTDWjClientLAMWClientHttpBase.SetHeaders(AHeaders : TStringList); +Begin + +End; + +Procedure TRESTDWjClientLAMWClientHttpBase.SetInternalEvents; +Begin + +End; + +Procedure TRESTDWjClientLAMWClientHttpBase.SetOnStatus(Value : TOnStatus); +Begin + Inherited; + +End; + +Procedure TRESTDWjClientLAMWClientHttpBase.SetOnWorkEnd(Value : TOnWorkEnd); +Begin + Inherited; + +End; + +Procedure TRESTDWjClientLAMWClientHttpBase.SetParams; +Begin + +End; + +End. diff --git a/CORE/Source/Sockets/JClient_LAMW/uRESTDWjClientLAMWReg.pas b/CORE/Source/Sockets/JClient_LAMW/uRESTDWjClientLAMWReg.pas new file mode 100644 index 000000000..cb7bd0383 --- /dev/null +++ b/CORE/Source/Sockets/JClient_LAMW/uRESTDWjClientLAMWReg.pas @@ -0,0 +1,92 @@ +unit uRESTDWjClientLAMWReg; + +{$I ..\..\Includes\uRESTDW.inc} +{ + REST Dataware . + Criado por XyberX (Gilbero Rocha da Silva), o REST Dataware tem como objetivo o uso de REST/JSON + de maneira simples, em qualquer Compilador Pascal (Delphi, Lazarus e outros...). + O REST Dataware também tem por objetivo levar componentes compatíveis entre o Delphi e outros Compiladores + Pascal e com compatibilidade entre sistemas operacionais. + Desenvolvido para ser usado de Maneira RAD, o REST Dataware tem como objetivo principal você usuário que precisa + de produtividade e flexibilidade para produção de Serviços REST/JSON, simplificando o processo para você programador. + + Membros do Grupo : + + XyberX (Gilberto Rocha) - Admin - Criador e Administrador do pacote. + A. Brito - Admin - Administrador do desenvolvimento. + Alexandre Abbade - Admin - Administrador do desenvolvimento de DEMOS, coordenador do Grupo. + Flávio Motta - Member Tester and DEMO Developer. + Mobius One - Devel, Tester and Admin. + Gustavo - Criptografia and Devel. + Eloy - Devel. + Roniery - Devel. +} + +interface + +uses + StdCtrls, ComCtrls, Forms, ExtCtrls, DBCtrls, DBGrids, Dialogs, Controls, + LResources, LazFileUtils, Classes, uRESTDWjClientLAMWBase; + +{$IFNDEF RESTDWLAMW} +Type + TPoolersList = Class(TStringProperty) + Public + Function GetAttributes: TPropertyAttributes; Override; + Procedure GetValues(Proc: TGetStrProc); Override; + Procedure Edit; Override; + End; +{$ENDIF} + +Procedure Register; + +Implementation + +{$IFNDEF RESTDWLAMW} +Function TPoolersList.GetAttributes: TPropertyAttributes; +Begin + // editor, sorted list, multiple selection + Result := [paValueList, paSortList]; +End; + +Procedure TPoolersList.Edit; +Var + vTempData: String; +Begin + Inherited Edit; + Try + vTempData := GetValue; + SetValue(vTempData); + Finally + End; +end; + +Procedure TPoolersList.GetValues(Proc: TGetStrProc); +Var + vLista: TStringList; + I: Integer; +Begin + // Provide a list of Poolers + With GetComponent(0) as TRESTDWIdDatabase Do + Begin + Try + vLista := TRESTDWjClientLAMWDatabase(GetComponent(0)).PoolerList; + For I := 0 To vLista.Count - 1 Do + Proc(vLista[I]); + Except + End; + End; +End; +{$ENDIF} + +Procedure Register; +Begin + {$I restdwjClientLAMW.lrs} + RegisterComponents ('REST Dataware - Client', [TRESTDWjClientLAMWClientREST, TRESTDWjClientLAMWClientPooler]); + RegisterComponents ('REST Dataware - DB', [TRESTDWjClientLAMWDatabase]); + {$IFNDEF RESTDWLAMW} + RegisterPropertyEditor(TypeInfo(String), TRESTDWjClientLAMWDatabase, 'PoolerName', TPoolersList); + {$ENDIF} +End; + +end. diff --git a/CORE/Source/utils/uRESTDWDynamic.pas b/CORE/Source/utils/uRESTDWDynamic.pas index cd625a70c..c952b6466 100644 --- a/CORE/Source/utils/uRESTDWDynamic.pas +++ b/CORE/Source/utils/uRESTDWDynamic.pas @@ -36,7 +36,7 @@ SysUtils, Classes, TypInfo, RTLConsts; Type - {$IF not Defined(RESTDWLAZARUS) AND not Defined(DELPHIXEUP)} + {$IF not Defined(RESTDWLAZARUS) AND not Defined(RESTDWLAMW) AND not Defined(DELPHIXEUP)} NativeInt = Integer; NativeUInt = Cardinal; PNativeInt = ^NativeInt; diff --git a/CORE/Source/utils/uRESTDWMassiveBuffer.pas b/CORE/Source/utils/uRESTDWMassiveBuffer.pas index 9349e39e2..f8db34508 100644 --- a/CORE/Source/utils/uRESTDWMassiveBuffer.pas +++ b/CORE/Source/utils/uRESTDWMassiveBuffer.pas @@ -1543,9 +1543,7 @@ implementation If Field.IsNull Then MassiveLineBuff.vMassiveValues.Items[I + 1].Value := Null Else If Trim(Field.AsString) <> '' Then - MassiveLineBuff.vMassiveValues.Items[I + 1].Value := BuildStringFloat(Field.AsString) - Else - MassiveLineBuff.vMassiveValues.Items[I + 1].Value := ''; + MassiveLineBuff.vMassiveValues.Items[I + 1].Value := BuildStringFloat(Field.AsString); End Else Begin diff --git a/CORE/Source/utils/uRESTDWOpenSslLib.pas b/CORE/Source/utils/uRESTDWOpenSslLib.pas index 4b427291d..5d51f81b0 100644 --- a/CORE/Source/utils/uRESTDWOpenSslLib.pas +++ b/CORE/Source/utils/uRESTDWOpenSslLib.pas @@ -34,6 +34,7 @@ interface Types, SysUtils; +{$IFNDEF RESTDWLAMW} const {$IF Defined(WIN32)} LIB_CRYPTO_110 = 'libcrypto-1_1.dll'; @@ -92,8 +93,9 @@ interface LIB_SSL_300 = 'libssl.so'; _PU = ''; {$ELSE} - {$MESSAGE Error 'Unsupported platform'} + {$MESSAGE Error 'Unsupported platform'} {$IFEND} +{$ENDIF} const OPENSSL_VER_1100 = $1010000f; // 1.1.0 @@ -22452,10 +22454,12 @@ function SSL_get_mode(s: PSSL): Integer; function DTLSv1_get_timeout(s: PSSL; timeval: PTimeVal): LongInt; procedure DTLSv1_handle_timeout(s: PSSL); +{$IFNDEF RESTDWLAMW} function LoadCrypto : boolean; function LoadSSL : boolean; procedure UnloadCrypto; +{$ENDIF} procedure UnloadSSL; function SslGetImports (Handle: THandle; List: array of TOSSLImports): string ; { V8.35 } @@ -22467,6 +22471,7 @@ implementation eossl_libnotfound1 = 'Failed libraries not found %s'; eossl_libnotfound2 = 'Failed libraries not found %s or %s'; +{$IFNDEF RESTDWLAMW} function LoadCrypto : boolean; var Erros : string; @@ -22580,6 +22585,7 @@ function LoadSSL : boolean; raise Exception.Create(Format(eossl_libnotfound1,[LIB_SSL_110])) end; end; +{$ENDIF} procedure UnloadSSL; begin diff --git a/CORE/Source/utils/uRESTDWTools.pas b/CORE/Source/utils/uRESTDWTools.pas index b11386631..5aa9b378e 100644 --- a/CORE/Source/utils/uRESTDWTools.pas +++ b/CORE/Source/utils/uRESTDWTools.pas @@ -3621,7 +3621,7 @@ procedure WriteStringToStream(AStream : TStream; {$IF Defined(RESTDWMOBILE)} //Alterado para IOS Brito Function EncodeBase64(Const Value : String) : String; -{$ELSEIF (NOT Defined(RESTDWLAZARUS) AND Defined(RESTDWLINUX))} //Alterado para Lazarus LINUX Brito +{$ELSEIF (NOT Defined(RESTDWLAZARUS) AND NOT Defined(RESTDWLAMW) AND Defined(RESTDWLINUX))} //Alterado para Lazarus LINUX Brito Function EncodeBase64(Const Value : String) : String; {$ELSE} Function EncodeBase64(Const Value : String