Another Way to Serve Binary Data

I made a post recently on using ColdFusion to write out binary data to the output stream in order to allow me to serve an image or other binary file that doesn’t exist on disk. The original code I posted looked like this:

<cffile action="readbinary" file="/home/cantrell/Pictures/Corrs2.jpg" variable="pic"/><cfscript>context = getPageContext();context.setFlushOutput(false);response = context.getResponse().getResponse();out = response.getOutputStream();response.setContentType("image/jpeg");response.setContentLength(arrayLen(pic));out.write(pic);out.flush();out.close();</cfscript>

In the example above, I’m reading the file from disk, but in a real-life situation, I would be getting the bytes from a URL or a database. Anyway, Spike Washburn (you guys know Spike?) was able to reduce the code above to just this:

<cffile action="readbinary" file="/home/cantrell/Pictures/Corrs2.jpg" variable="pic"/><cfcontent type="image/gif; charset=8859_1"><CFSCRIPT>writeOutput(toString(pic));</cfscript>

Very cool concept. (Hint: the key is in the character encoding.) Thanks for the fresh perspective, Spike!

26 Responses to Another Way to Serve Binary Data

  1. This is one of the best things I’ve heard about CFMX. On it’s own it’s a compelling reason to upgrade from previous versions. Nice one!

  2. PaulH says:

    what the heck encoding is that?

  3. Bob says:

    Great concept! I’ve recently been trying to figure out how to accomplish this myself. Until reading this, I was about to give up and just build the function in PHP.In terms of a “real life” example, how would one go about creating the image file based on a URL or database?Consider a page visit tracking application as an example. The script could be called via an tag in the requesting page.When called, a database field would be incremented by +1 to log the visit and then return the total number of visits. Whatever that number is, you’d convert to an image and stream it back to the client browser on the other end.Thanks for sharing…Bob

  4. jim Davis says:

    Just so you all know: the technique posted by Spike doesn’t required CFMX at all – anything 4.5+ will support it just fine.For example here’s a template that will return a single-pixel, transparent GIF file to the browser. Note that graphic was previously conveted to Base64 and is used like that: this template is completely self contained – no “source” graphic is needed:#ToString(ToBinary(“R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==”))#

  5. Greg Welych says:

    I am trying to display generated PDFs without having to write them to a file. I’m using the iText Java package to generate the PDFs.I tried what Spike suggested above, but can’t convert the binary data into a sting due to there being bytes with a value of 0. I’m using CF 5, and as Jim Davis suggested, it should work…. I checked out the online docs for CFMX, and it includes the clause about being unable to convert 0 value bytes, just like CF 5…So, is it just a feature of CFMX that lets it work or am I doing something wrong?Any suggestion, or even better ideas would be great!I’m glad I found this great info and site….Thanks in advance,Greg

  6. steve says:

    Jim Davis wrote:> Just so you all know: the technique posted> by Spike doesn’t required CFMX at all -> anything 4.5+ will support it just fine.I tried your example in cf 4.5.2 it didnt work, when attempting to output your code the following error occurs:An error occurred while evaluating the expression:#ToString(ToBinary(“R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==”))#Error near line 2, column 2.——————————————————————————–This object cannot be converted to a string (it contains null characters).The error occurred while processing an element with a general identifier of (#ToString(ToBinary(“R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==”))#), occupying document position (2:1) to (2:84) in the template file c:\inetpub\wwwroot\test\outputgif.cfm.

  7. Amund says:

    If I put#ToString(ToBinary(“R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==”))#into a template, the webpage only ouputs:GIF89aIs this what you mean?

  8. Amund says:

    I have a question relevant to this.First some info:I use Oracle 9i/intermedia database, where I store videos as ORDVideos. I have made a procedure in Oracle that looks like this:create or replace procedure getBlob(p_cursor in out types.cursorType)asobj ordsys.ordvideo;beginselect v.video into obj from video v where v.identifier = 20;open p_cursor for select obj.getContent() from video where identifier = 20;end;This procedure returns the BLOB, i.e. the binary data of the one video I have stored in the DB for testing purposes.I can then in CFMX do this:#vidBlob.recordcount#However, I can’t know the columnname of the resultset from the stored procedure – this means that I can’t do#columnName_Which_contains_Blob#to output the binary data.If I write #vidBlob.columnlist# within the cfoutput tags, the webpage outputs:(:B1).GETCONTENT()as the columnheader. This seems strange to me.Does any of you know how to actuallt read the binary data, convert it to the right MIME type and the ouput the video, or image for that matter, as portayed above?Best regards,Amund

  9. thewolf says:

    Hi,where can I find more info about the setFlushOutput function?I wasn’t able to find anything about it on the web and CF/JRun documentation?Also, when outputting BLOB from an Oracle database directly to the client browser, sometimes I get an error on the line (24) “out.flush();”:***null nullThe error occurred on line 24.***The client browser still receives fine the file.Any idea?How do I fix the error?Thanks!

  10. Kyle says:

    I hope people are still reading this….I’ve Googled til I just can’t Google no more, and for the life of me I can’t find a single example of an instance where you would:1) Upload an image file to the server using a form;2) Save that file to an image field in the database (my company uses MS Access — help!)3) Pull the file down dynamically using CFCONTENT.I’ve found examples of parts 1 and 2 (though seemingly none that work) and the code posted here serves part 3. I’ve tried some variations, but nothing seems to work. Any help would be much appreciated. Code sample is at http://www.sitemanageware.com/testing/badcode.htmThanks!

  11. paul says:

    ok this one works fine with myslq cfMXform:=============================<form action="upload.cfm" method="post" enctype="multipart/form-data">name <input type="text" name="name"><br>file <input type="file" name="filename"><br><input type="Submit"></form>insert:=============================<cffileaction = "upload"fileField = "filename"destination = "#expandpath(".")#"nameConflict = "makeunique"><cffileaction = "readBinary"file = "#file.serverdirectory#/#file.serverfile#"variable = "thefile" ><cfquery name="upl"datasource="cms"dbtype="odbc">INSERT INTO document (document_name ,doc_base64 )VALUES (‘#file.serverfile#”#toBase64(thefile)#’,)</cfquery><cffileaction = "delete"file = "#file.serverdirectory#/#file.serverfile#">show=============================<cfsetting enablecfoutputonly="Yes"><cfsetting showdebugoutput="No"><cfquery name="upl"datasource="cms"dbtype="odbc">SELECT * from documentwhere document_id = #id#</cfquery><cfheader name="content-disposition" value="Inline;filename=#upl.document_name#"><cfcontent type="#upl.file_mime#"><cfoutput query="upl">#tostring(tobinary(upl.doc_base64))#</cfoutput>

  12. Marco says:

    After test this script below IE show me only a string wit huggly chars.Should be my uploaded image,wright?Best regards

  13. Ally says:

    Can i use the same concept above to create image files from XML data?I have a set of XML files containing hexadecimal image data. I have created the code to extract the data and require to create an image from it and store the image on the server and the filename in the database.An example of the image data :0xFFD8FFE000104A46494600010101006400640000FFDB0043000A06060707070A08080A0E0A080A0E110D0A0A0D11130F0F100F0F131611121212121116131617181716131D1D1F1F1D1D29282828292B2B2B2B2B2B2B2B2B2BFFDB0043010B0A0A0F0E0F1711111719141214191F1D1D1D1D1F231F1F1F1F1F232622202020202226242523232325242828262628282B2B2B2B2B2B2B2B2B2B2B2B2B2B2BFFC000110800BB010103011100021101031101FFC4001B00000203010101000000000000000000000405020306000107FFC4004A10000103020402070602060707030500000102031100040512213113410614223251617123428191A1B152C115336272D1E1072443538292F016345455A2D2F193B2C22535446394FFC4001A010002030101000000000000000000000002030001040506FFC4002A11000202020202010402020301000000000001020311120421133122143241510561152333427152FFDA000C03010002110311003F00F53076D6B88BD9D0667984EA4F9D6B5E8288E2D13596C1C86084E86B2B188B6C18C8B7560F61C8EC798DCD69AE622C1A3103D6AF716CBD6B7823D88057E7CA84A284B441CEBD567759E5F0A84185B34D0ED839D7E277F85428312E46A7978ED460942EF40DBFD7A0A0C847894BCF99DBCCFE55304096AC9B46A753478049A9F423CFC854D88721F2A3B6956517A5417FC288120A635A2C1601FA5992DBAB6C05E404A2160ACC7EC7DBEB534045F778B2D02DDF19CADE1C0111C624BB223972A6E0816FE3A18280639032722C9263B29A4E841964F13F2A0C064929036A22115280AA2CA54F8E5AD4215296B56DA501654A4FE3D6A10A5FCFC33C1580BE448915114647A42EE2ED210C5B626F5D5F15A21A611A78AB44C7C04FAD6BAF02A6D8B31BE915CD8585B96E46268EC7156F079F5C9D476354FA1F855AAD03BB175EE24CBB636D725E75E58CEB4680E43EF1236CDCB59D35A628839132ED995B25F5A108B8419C9A85F0D6252B091F3FBE946806297D686A5BB578965C03892224EF14608151027D6D2A0B19D1A8E4B15C9FC9D362A613B537F01446D689ACD60E4306F63F1ACAC6A084A0E40791A7404D85A852C6BC8558B612D3F56560290B0BF3AA216F081D4686ACA394C3CB235D3C7F851025CD30CB424EA7F1AEA6084D57A0688D7ED532420A7C9EF9F855EC43C4AE76A840861279D42166A28C02C4A8ED4C4C823C430DB8B7B6475086508994123FE9E7DAE7ACD3500529C3501D45CAEE16BBA003DC23FAB057A2BB3B7748AA6C84F09B473ADBC87A5E4021664FB3CFB295075F02055B20ED4A20C0931A49E6692C320A52CF9503642A527C75A10C829D6D1B9153242A53E55B027CCE8280B29529E3B903F73F89A85905340EFA9F3D684200C7EE6C6D70E7BAEAF25BAC642841C8B5E7F75314D86C2A6D18DB9E963230C37387E1ECDB2D6B5B2D442DC0088CD1947CE74ADD1833339A105CAAD1F08719645AB5AE400F6069DA52F349F4FA5394406C4E8377ADA82B085CAFC3BE399F348DA88A04754D890D810635E623C0F9D102559175651F4D18B3C4AD6F3235264A3B02664E874F91AE56BD9D0216DCA98D741A1B5B26B1586880C109EC5661A456F968E492040F4D69E919EC2687C9FE55010C6139880892498000D6888D8D13825DA0770D1F864C5F9115A90EA0EA2978683E9934BBE35592B04D6A0B106AF2503A52E1240DBC688810863C4FC05160992E440D854C0010949A348AC96A52698A256421A60AC1234AD51A854A60CFE1608E1AF9C7D399356E00265CFE1EC8217BCFDB6A29442522A4E12601993A6BE874140A046CB5F68A3949E74BB6192D3025A5EF21F5ACF28606A60EA689DC93E5B7DA9390F2491687DC4556AD93726AC3DE898A8EB689198BF10BCB4C32D96F5D101A1B9DCCF202A9209B165CDDE2EBF6D6C19B5B7107FAD9D63795A4777D269D5C20FD8A936612F710B7B85DDDCBD17974B20EA727737C80CFC08E55B1471E8449B329883E6E194E72406E4EB242F39DC0DAB4A144F0BC4AEF0C50719B8016B41C8203D276CAA0A9144421D691D58645FB5D56F0234CF3DD11E550A0173B5AC413A9F3A842AAB28FA661683D4F39904CE86B9B266D8B2DB66B4143291A22867689AC760E80C12986EB28D15E37885FA0845AA00582256E6A85A23BBCAB7D35E5192C65D738858B36CBB912BC912CA0439A98395262ABC7D9591B61EEC5BA2F1B272101C40220C1D685CB565491B16B18B34368E33A1B5AFB00120673E026BA35F263A9965532BC4AE594895A01F0F1ACB7DA86D698954FB2B3E1EB583391CD12CBE703E94C459DC58A321C9BB157B03807BEBE71A08E02C093AACEB1E82A6C1A81ED95F5C9DEE27E028636F65CEAC1A4C2D41F673AD6091CC57538EB28C73E8B9F5ADA9E0C11E04C7D6B4644305EBAF3E2568C8412379DB9D2A730A312BD90216BCFCE4E9E3A503B02489A6F6EC85F6101A47BF249F294FF003A38CC8D05B06519DF224EE76146BB01B07BD533EE19F4ACDC8E86D6C5AA7C20EDF3AC191F1430B2BD64A092B080373B0F89AD74CD0AB11D778858A5D2C7166E00981AFD76F85339328E0903378826497CA38840EC20ED133CF4F8D73BC9D9A306671BBBC42F1E4599B716D65910FDD878E75AD0B3D9ECA7B5DA88CA35F1ADD552976CCF2C9987F0BE13CCB2DA05ABAC83D61625682567B3E27372F0AD0988964CFDF5CA1A6DD616B2F0265089D97EF1736F853D000CAB9B15AC1EAE508800A10749037075F5344423945B843C087839B8076D76350A2ABB5A1464680EB906C83E15080D5651F584BA10D90505060EE08FAED5C74CDD147309D05491AA23161359663A217961B1480909FA66C32BB3B69139DDD758D8575388BE273F92FE4431B5376E0AD91027218D221D437206DCE8D2EC0D836D2D2E11870B945C112804A0FBF9FC87AD22781898E1F7F1945BF56BCB766E5123B6D919C807BBE3FF004D1401932A56378702B4142ED5732B6960933E7CFE949B2A6C38CF0178230D62C5659B868211A093A93E693523C56C92B4AAF1C36B726DA415A34392797AD0CEAD028C81D57CB1CFE74BF6330775B3126ACA472561F30758D4505C32B19B09F674AAD96C975EB442D085822ED64146872641BA551A57638EFA31583662ED77AC9007B21ACCEBB4FDEB46E28EC3EE5960143C65676CFA99E60C54D8875ECA4079B928D268265A20C250BBBCE85C20A216827B0B5FA1F2A90232EC401B468320CA3559E7F08FB537D0085D638833744B2847019B59EB0F119113E327D6913EC33B17C530743050CDD9CFCB20067FC474A44EB8E3A1906F22C46339C10CDBADF9E5128FCC56786531D3C1EB6AC6B3BCB65A45A87A0904821102344F6BE3A53378B03D0A78F777A3886E3B1C20F2F43EFAF2C7BA3E228BC681F209FA4CF9B558461F7C5E1EFBBA721A994FF1AD50113918C7FA48B4B64415AC905D5AC93C7839815FE55A35C89D852FBEBB8716F39080B3A81CBC80A602438A187A59D40DA7F85590B12EDB3E4ADF91324C789FC22AC80EA4C82B1DC1A54210ECD428FB43F64E2197608220CD7151D34809A4ED518D41AC56798E8873BA368F31482D0A31BB1BEBF16E84332D3273E70449FF000D7478F2C44C1747E4578FF056161008412D68B041CEB7B32B7F4A6572CB0251C05A31BB675916A842C64400491F80768C52E751158097B8DD85EDD86D68250F7616E02324A0F61495F7BCE46868E15306560BB1BC4AE5FBB79B5BC5C43264141CE85E419665597B5CA9F188326254BE49E321711A64324A113E3F6A64456C3DC0AE6EC5B7185EF190DAC82D2CE75807DE56FF009D27911C8EAE4384DE9580481A80743E227515835C1A95A771DB50D0EB5301A08C2544C95801640D2660CF8D2EE1959A0B6D3273D46958EB7D96C1AED48B7BEB664082F3CB0B593B93A13FC3E55D8E3B31D8576D7AF6743DC608659E28796202165072EBBF8CD681610A7D0EDC5BF559088C8F13A80B8ECA8C78A5476A84C02AB10BC4B3C0B95836E825046A24A06A494FBB33CAA04C3984961A65B07B6CB3378B3EE15EBBFAF2A8445384DDDC5C15BC5D748476C20EB9C2C6C8275CA9A29CC020C21D43CF30E008E3B410359478660291B87833AAB26DABB7901E0FAD05A000023F54A5183A9A094B2BA2BBC9A7617B0E5C856196723823BA167C8FDAAA3ECA9186563ACF56646424F526D9249081A9CC7FF6D7522BA1128813A90B6D680B9100144F623BC60FFAF0A2F42A68498A61EE3FC536A00004944723A46BAEF4F84C5E0CEAF09BC6A73A234260EF03734F281D2A2A81E1B0FE35084730D88D399FCE88858A68E611AA17B4731B6D50819C0C33FB9BAF90A0ECA3EC57BA59BC7F60D71E27550912A3CA8DB1A8BD0FE4E4691808BDDC582C32891A0AAD4991B3162168410B20900F88A9A896C13A43686DF0F75F2F773B835D4C78269D4C7B17648C9A5F3619DFFD181EB722592650168EF1585983992472F4ADDA98CCDA9FB97EE4DCDAA09641FD4A27B0859ECA35D7734D04B5D4DC5B95ADC1DB80859894202C72DFEDBD5228B70FD5C69616020F607DE47C7C68644182925A42ED9643CEA04900095E9F8878033EB439098FBA397A5AB41D7E1E910D204072103558263B3EA26B2DB0C8DAD965CF06E2DC90722E442375EFAD046381DB04E0C8C8B91ACA06A6B272CD14334AC772B0A97432428E923AE71AD8A0C2D19C85C4AC13A1DEB7F12D622D04C11DB62B7438438D32D121A88CEB9481FE515D172E8405A9FB8B3B3E3363B0F1405BA345E741D027955A97442F6314B401774B01B2164F073CAD0840D0199ED715546F00765CC71956E7F481191CCE5E93082B89E5F7F9529C993B3B07BBB3607F5539D0385E304846E91433984916BBEDC826DD6E781881AF998A40D4009C02FBF483AFE40868BA0A257AC21AC9B09E744E48A193183BC355BC079004FDE94E216423AA0885BA4CE8408154915D02DA746F09B795A2C84C012467D11B6FA5354A40BC19F562D8059DCBB6630B243E4876E0C019D1DA39A7F0CE82B5A5212CCDBBFA390F102E4DE3AF0865A03211AC6BFB71EED35214C5DD225B36EB45B3851D75E95ADE1A21057A00A07F0F763E34E401957D220ACA0F200C4233F3FE54642AE04B3C446C345CF89F0156517B4AB3E0203808746739C09CFA7607CF7A8428EBD79FDF2FE66AFA2CFB85EA562D9C04102398AE2A3A685284D0498D45D974A5290C652EB41446927C69A98B669AC9595007801F6AAC8968BAFDD79166B5B080F5C080D2089124E5FB1DE9D4BEC5D88F9B74AAEF1355CF1CBDD65AF7103508611B084C0DB527F2AE8A46513D92DB4BC5C65EE05D3325E6476D050753948F0DEA0243ACB7284365EBC00E405B1C342F9C899F5D68B05175B59336E1D42D619B910E5BA0F6D0E0EF447AE9412440AB4C580CEB7C2020C9759F72370A48DF7E40D0B88433B66BAC5B3AB432EF1401C2B78E3760FBD9F7DE96C991DD96162E0217DB616B6A5616892B27F09F4D08DC1ACB6BC1A2A41D6364BB530482361133A78D73AE964DD5447CC0F6257E159D2F897214E3787DDDE2D01940220825672449AD5C4909B416C7A2B776E64BCC899D20AF73F0ADAEDE856A3863095A1B0DADE2F20125000032122343A9A8ADE89A95D9747966F9E7AE887ADE66DD98DA79B93E7B556EC9D0D138488423848E137DC0758F4A98993A084D91F103D054D195B22C4D90E6B268E34937269B46BCCFC68FC68AC934B0DFE01534406C765036114788901F10B237ACF00AE1A591C68304A06B03FD6D57940985C7ED1E2F5C61AC2C5CA2D5AE3142CE44432356C1DFB24EBEB4E4982CC8B0E8BC7B3B16CBEC027AC464EE6D0AF8C93CB6A6A42999EBE6AFAEAE386F2CBDA924363B027DE068914558FADCEB6E21C041840006C2040D3D3C289109616DDC5D005E58EA8C083240C817CC0F51545065F5A2117EBB2659CF70E6B6CB0420234CDAF2DB7D6A10A3F4562BFF000F6FF36AAF259F57BBE922EF2D96C16B26711BCD7199D6558B5A4E6A531A8BD49D268080EB991F6A6C4166B58B2B784145C6B034807ED51A10F210AC3D0FB25871685B2E0C8B1A89077147001E4C2FF485878BE43C8B574069821B592421B0BFC08EE8E5EB5D1AB266998461D4583C4A1A3D58CA0ACCC931129F9F3D29AC51CC3E2DC21923B120F14195883AF63D3E957828F18E2BB70B67880F310095E9AC50CD1072B4758702CA386F5E8E334B1D86D64082120FA73A520DC4D1742AC9B7EF995A16E8B76560142CE4733AFB40E9EE48D274341268289BF4B5EFAC0E37BE4733B4D73E66B48071684067CC9ACD71A6845F6CEA3A939E39C52D3FF5925F717E1E96D616B8075A77117C455A1A9481CAB48AC93A303279942498DCEF53059EA6AC8594DC0B3DA9821D4643AA10F1555D108E61E341944333D33C3C756EB566B16D7A4E442C08056B3AAD6A323B224EB4EAA60B3E7968ABC696EAD6EBC1A590C34B70E4418133DAD76DB913BD3DC8530256366C895E1E819D6B9057A8406CF39D399D6AE251563EAB15758E3DD9BAB88F62B042F9E8A53827C6024511042C3EF305A61F5F0D04CEA3B80E99B4D763B511442E5F37178A79986C6C9034D00CB31F53508775267FE2C7C8D5E487D3909D62B8ACEDE42184D29902DF845B216B31209D7CA80804ADC1E5BD3600B1DFFB1F729858B9664EBB941D68E5003C8889C1317684A1E07CD0F50E0252465BA5D87E26FB36E1E42C61F6B20107627754093CB73BD68E3F21B33DB18E448AB1C22CAD90DAD6B78BDDB5AD0616111A424FAFF1AD0A526C5CA31C0B9F484B8CB36CC9410085E782B73CE571F2A7C646634163893D63862ED5187B372D5F92B0B67B0B415FBA95FECF307CE81C887A97DEBA67A98B70BB74105D2F233E75AF40B4E583C8EFE94B95B118A3267D0300BBC09AB369611C078A021732B5C0D63319E7A81CAB1D9C846885121B26E6C5DEE5C0A4E4BD64038B86E5901617B9D2B3F207D0A47AC7FBA64F13359D3F806FD86E16070D6640D79D6DE2FDA26D0DE18F115A753392CA3C68B504AF332565B0B19C6E36AB2CA987C3A170820B66160C760D4C108358832FB61E4101064893E157B1782D4BE56011A83A8355B1304B33B153E44C10567A9F221534C3C82B25D2B04CA0181907808FCEAF5260F722CE9F9D0EA417E35822318B4EACF2E00216083CC795140168C77491845C3D7CCDD32BEAF64C966DD721B6070D19D22553DA5C4F67D2B64053466AD917CFB2E92D70596F205831DBE18EEA499EEE6923EF46009B185055C0659B71679D0161082722CF23AFCE8A251075866E805BC1D086C70C4FFEEF9F2353251EDB3182A2C2ED9B975D372878704A0128C91A93F1D2AB2417E6C3FF00E1D7F3A204FA8213CFC04D717393BAE382E424F04904223DF5F73E9AD568C5BB3050FA6EEE9942DE790E204F0802036808DD209D737ED6D5A668542CC1EFB362C38C8587B990082B3E3947F0A52CB18EE1F31776F700187967985988E7AC695CE96C8720F63A9A139D6C8009813AFD4D526048AF1EC2D189DB2196D61947EB33B624EF11A56AE3D9AB132ECC35F58DBE057600CEF5F3C1C65A64FB46D1C4ECEA343DAD0C72AEA46CD8CF289997F105E2377D59080C2C184100AC211E00993BF3DE9BA99D86F56B868B2C0B8ED8DC1EDAC20FE01B7D6694DA41C51A4C1ED31160879ED50F1EDEBFAB8D088D3F95736E9C65E8E853071F659887491BB07421FB774344C0757D898E699A1AF8DB0D9DCE3E872956808D8D619FB1CD6425090A0167798A1902BA1923F533E5F9D1AFB322DBEC5F73885CDBAC865640898E534744F01F893276D8A62CEE401DEFF3205397265901D10C0C2E9CBEB748517B8A0F8422AE57CF222308816216B66EAC2DF6B8D7AF2010B92082741B4514AC99235A1362CB1652195AF8C47B5878910364AA55FC6B671F66BB156610BED1776FD9DBDB23B0CA06AEFBE04C96E6976CC3A9361CA5BC880DACA20C8C848DAB3AB4D6EA5806BDC6F14B7418B93F7AD55CCCF389658E218BBA50872F97ED0883A7C68E7660578C6AA62E78241BE5F15BDCCC673CBE94BF217817A3ADAD7FEFAE80663B7F7A9E426830E005B25C2F3A0B7B2339D7F14D45265E0CE74854CB459664DCDCB9AA192745F2CBAFFE69B56D21163D4478B2DEC3190828430B0756A73ADA5F78E5DD3CEB6C29664B6F5E840FBAC5EBC1F5985C6801220F88F8EB5A3C4D14AC581859751442DB2B7964FB5666104441223DE9E759AC6321129C4AC6D2D71480D166DCC76273942C7393E53571F414A26ABFD93E8EFF00CC59F98FFB695BC8BD623157B20570481BC7F3AE6419D6B18AB2855C1BF7011656D0FBC16250B83DD4C69ACEA4D6C849182C611D2855C5FB63134066D6C9B675B25BD0E38827B24A041F4F1AD4A09F667733CB64D9E238775CC31D5B7C10510F91DB28EF29B08D79EC77E559AD92AFA1B5F634EB66D6C190CF18159D56355CC768D609F7236C58CF0F7C0B5B43744BE249717EF9D3434AE948360F8938BEAF6FC3596CF04EC4A373E5449AD86461917AB0F64DA3AF824DC360AC2D649324653A9F2A62E46AC55B488ECB006EE31316C88087906E90E0DB6C89472F5AD8EFE8C7E21E747BA3368945B5E2C677403904C81AED582FE534F068AE81F61ABB5B438ADD5D33C7459321C083CF727CAB4F02119FB0395392F4671FBD6F19C3EE71C72D916D62CE786E7392BECA421274EF66FBD6E7C5FD09F3E1767609D2A67117116AE23877247623542E2B99CCE178FB3553CBD8D2252486801249303C75815CF51DBA1F390F5382BDC1C99D00C0F1F19AE947F8C96A629723B10E216C50F3C873428815CFB2B954F06DAA5B22CB2E21659408D24EB40E4F62E58C176337A6C1906EA0E7EE06F9C7AD6B8D32664DE267310C7CDC7B4238300221075211E7A57421C7515D88F2B62EBD6177171EC6D96F3208E2F0CC420F74951D2AE4D25D17AB631B1E2042DB73200DAC21086F61A4C49FBD73ED375482D364EDC0251CB6F09A44586E402AC12F2F6E5164812B71790F8200D4A8D7478EB222F7834769D077ADD042EE104E9060E846D4FB2A32C6D28C4AC5CB45861633C09CE3DF473ACBA86A402968672E01E67E355A8E4325A86AE64D349FDFA3DBA04C574B9A47E93B15C7BE201F55127E95BFF8FED9839CF063F0D4BD88DC86216F0E601D4206933AED5D2B26A1139EAA7291EE2B602C14BC80A1234009CE7D7955D7629409645A9607DD114BAC0B62B10165D47A884AAB977BC1D4AE231C4B046F18C4F1039CA0869958023F5910927E23952FCB841CA2667A9635FF002B3F234DF247F627466B7162BCE596572B5A20B2049FDED74D891B573E8C64DFCA6C43882423A3C82DEA80787704385673F34E4FD9D2B76BF230B9B1B59596176F636D7975706E9D782185DBB2439AAC7720ABE3E4697B4B3FD149202458DC6198BB4DB2CFF51419432FC02B717CD2113E54E9284D7F65A6D1A842C34CF07F53701E5A2E2DC4947607654851AE7DDC748DD44FB2E615EC6D3D1DAC53354990C415A23C9915758C4BAC8B2EB18BBB528B5B4B6174EBC3B6164C21076303F3AD55F1F3DB11758F384116DC646336D757280C85DABCCA23B84B3DB98FDDA2D331D4CB296243EC098FFE996CDA256B43282B81B6713AD63BB8F294B61AAC4903DFDDB365678CF1D05C43D6B08C8246815B9F8D6AE0CB0279316D18EB9C508E85DBE18CB44BBC62FDC10344373D99F8C576633463D25812F4556F8C7ACE112B2F0006FA73359F98FF00D6DB0E8F67D6D8BA16174870A33900C098D49DEB87C6B35964E94EBDA23C6F1959B4375C1D01DA752399AEA479BD64C2E8EC458B5FA6F89752D96D710BD77F0AE772EE563C9BA9AF444AC2116E8797A2100AD67C86B596B8B94C2BBA106317B7DD20BEB7387A21A5C8B65BDA2168477949024AB5DE2BBF0AF5473640EAC270EC39E06E6E518ADCAD6006672210B3BE71AF66956365A487F69666C707790B20ADC773AF20C881262123E15CFB2CD8DB5C56456B4B36A8009C889DC9E67CCD543331ED611EE1F8B3631044BCC9B7D8141ED8FDE41D2B4461F130CDF668706C5706C396F3CFDCA03CE2E0738401E535B389AAEC0BB2C6E31BC39DB7EB28B8059060AF589F0A7D92FC898C4031BBDB2BAB3CECBE92F37AB7E7E29ACB67686463D88D32878046A85811A7CC52356FA34B692323897F48184B37C4943AE2ECDE2C221719D1B2D597BBF3ADEB8FF132CAFECA7A557AE3B7D68E0928010E207EC10A2299C386AC4731EC8CE7455F6DAC440598E2023E3BFE55AB92B68604F1BA9648F4B6F33BC19267759F8EC3E555C786B0C156F7664D2E16B08C3AC9EE4878159F00B19155CEB1766F87A1DDB3E58C6AEDBC80F12DD9D3C60A8507E0645AC866BE3F534B19803C59D08B70FB1107FF00C93A2052698FFB06CB12467EDACB0B0B25C783D266100AC67FFCD6EC99345917DEAAC18BCBB0C82843626DC947894EA42BE34FFB9742D47B34587DA1BC66DF8EF2D649CE24ED9CE9F435CFB25ABE8D2AA1D5F60C6D5682C95E80F981158FCCE5934420932DB6C3DEB8B3B7234804411E3BD2652EC667B01C7DCEA692822579036044C9F38FAD69E276F0479C60436C85BF8F3574B7437A06F491A6D1CEBA928E16017C697B0EC42F5C7CB56A16D0EABC547180273970645C9A1847502CE366BD8218E956376A49605B8051C3E284139F2728CDE7BD48CE38C7ECC5A32AC5AFB17BDC15D402D36EAC86DD0810726E4A55F2A9055A2ACDF067F1B61CB0C31011724BAB205C6B39C2C6D4E86053DB019FD1DA1616F2D8FF007894041C99C8F18F855722398E1974FB368FBE5F0D2CB450BC8251E7CEB836D7AF48EB425D137EF8585B17DF0BE1688C8015AF3AFF0008FAD153539AC09B64A0089C7F095DB122E5026601941D396B4EFF00193C83F59128C4B1B17985F506DA5B7302EE0A0AF8332B0215E15AA8E1B8333CEFC9E748F16B8C47AA3D86D95D5AA2D90B6C1282070D623B251E42B5EB24C46C6791C661C417A4E420846430420CC28EF552AF259ACBDC4AFEE99B65B6D3ACDBBCD12F202261C41DA549F0DAB14B8983442CEC538DDA5DDE59964025D941403083A1E59A28F8D43CB0EDB4D7751B67C4F574383C7203F6ACF3AE797FA2A0D320AC26C235B46BE28155173414A2982DB2EC5AC15362865936A53C6CA49592BEF66CD5A1F33AD405499DBD7DB0D2D6BB76890242017849FF003D3633C83A92E9BE1B6F84E0C6F2CD6B66E02D110E98D771ACD4A9A7206793C6FA1D84DD32CB8E344AD680B26775AC4A89A44B972095489DEF46ED10D978ADD3C0123504808D809ABAB9320A75458B2F98B16AD1E799CE2F5964BC8CED2257937950F5AD30B64D88F0E11E609D1B18B61B6F883EBC970E4923203190C0DE6AE7C970780614E7B0973A38BB3C3AE10DBDEC402BC91A923B5BD215F963BC7D1C86AE558D05B2EA02DEB00B0B82444F81579D1CA7D14A2F230FD178DFFC633FFA27FEEA579A2330C0BA508E0746ECAD724A1E64B99E75941DA2B47D3A566408CFA176177A5762C9CFB08F9695271C4828B16E24A1D6DD59412B71004FD3F2A757E801C60D8CAF25BC5B1311A9D8C08AC9753934419F444E10F3E842F3B5A8905131AF8561FA52BCA5EC611708011C6FA4FDE8FE909E617F48BA36876C6E1F7082B647110763D8E53F4A751C76982EFF0047CF9F68F5B28448330011AEFA695BFD1D8534EAC8CEEF00C4D7174DB39010259321608DC00BF9D0B30C2E582EC351628B3758C4DE386DE8CE65C47F62E6C60C73A5788CD26B233E918B16BA3C1CB5B945D0B97901A537A46446433FE5A7E119766621563D69A79C589B72E8641E65E8CC22AF24C9B1E83DA58E0568486F8D74579CAE62320809FA9A4CAEEC38D687184E205D6D6B0481261133009DAB83CB94B736C63D05BB78E06D7075E5EB49A6C93976CA92583E3F99D376F38F6E85991FB64EDF3AF65C659AD1C0E4E54C2ADBDA9D4492753EB5BE152391772A79351D1945FE22EF55B2D10442DE9D1B6C68A57F88E83E3597936454B06EE1D5628E7F66D2E7A38B4211D55E240EF85AC8D62330FE14B85B5B46D9D73FC17E056970F7583752DEB08009D40D979B51F2A5EA9B1B1DD2EC47D2DBEBAC1DEE0DAE3C817247111657CD05823943813D9F8D16544259623B4E957486FAF2D908799B90F3B91D6986D085C44A95995E437A4F92380D459B75609685B716879EB375E4C1F681793CC24E64FCA979AD84948429E8706ACC59D9DC1193543CE4C1D64A4A07D2B1FC1C87A93C0B1CE8762E8B96B8E03F6E4CAD6C9248C9DA0085478535B8E3A60A6F20FD38E35E616B6721CEB791D85833BF85278EDEC1DB2E8927A4D6CC3286FAB119004139C4F604776A4F8F960AB01F10E9233716E596DA203C352BD204EA32893450E3B45BB05EA587EC718BA3A348B4430D4E9AACE63A1F414F8AC3064C71D1320E0166408904C7C6B37217CC3AD873E9CD6EE8DC941D3E14A5ED06C4B64AC97F8399FD758ADB8FDC322B4CBB4C531BFF00B4984FF782B378641E512E91D95B626F15990B2D0402341B6923E35B54DB62D43A30387F1AC99E0383B609008EE7CE9F2597903382CB961C5996DD01E31209190C191AE6A6A8F40B9165A3EF5AA036E3B6B9C6810B5AC8FF00A692E1D851B0D031D3EC798650CA2E2C82100047B23B0FF150B4419613FD25BDC60CE261010F1086AED83D80B3B0712AD53EB40D13033C7F1F6576FC1E308CE8CF04194032A11AD05563C86E1D185C131016776D5FA00219592513256B9EF4EA398AD2C3573D3536D83F4C518CE22D5ADCB5C15904B2B9CE0AD1AC287A5411DA09E97E0031BB4E33601BEB39289139D075537F1E55325F6636E706E9231871B53853C2DD1701F672201C816141C1089F2D28B42B2077B7AD5BE008C3D6783762EB88F32B90B1FB447A52B564C86318DBC30BB72C20DD5C9043A511D833A05CC504E1F218A4D0761B8FAD16C8030EB8F35883279E82B0DDC28CE412E4B458BE9716BF5968B47805F63EF56BF884FB4C097F21AFB466F10605F5C179868B21C39D688CE339EF2A47F0AEE716A9551391C8B636C8F30DC22F1772867384059D5E2720403B9ED4569B2E6A0D9863C6529A47D730FB6B3C26C022D91EC900091BAC8100935E7D592B24DB3D142B49240E9E91A03C10F34321300EF07CE69B1BB013A97E09ABA5E82AE1DB238CAE411A8A3FAA922DD08C2748AECDFF0048AEDE7842D003393702395149B6828411E7466E40E9096C2092CDA2D616364673127ED59F909AAB25C71B1B4EB80BE048D6048D85723160FCAC11BC7CCE70644EE0E94ADE79096305772B28711A91E86A46C960BD501F499B3796F696B243AF5D200780CE5000513A7C2BA7FC74FF00FA32DC66578262DFA4EF78843C6D50C8049C8021633699BEB5D0D50B4CA6EF0FC458E17119D1E5865A21608CEBD81344A246C79D10C02DEFEC6EF8E40B845D2D85B648FECC41FAD4B218457906E9E862100705D207208DBE1599D79612B082BA2B793A5C1F8D4F1FA09CCC262C8BBB2C1AD3129192D6EEE1823C3BDA4D6885629CCCA75B7BF03DF235A3442F667D1938C5E3E73A2D8672404672758F9564F469C99F75AC8F2C6C41223E34DC83839281E03FD78557642DE136441008F08FBD4C930536D72DE177C863860DBBF31A0250BDF426A38E51132EC4B1B4704A10021A885C01CF41245028765B669DAC36D880D9403B0FF5158F6C4C7B5D196E8DE00D5C58971E5BA105E70348440EC20C4999E75AEEBF0263119BB83358732BBFB05BC2F99136E567380B3A6DF1A5D7C8CB2E5583DA749317B3640BF5DD2D727DA91C646F20489A73F9307D10C53FA47C4D0D05D95F1EB12338C91D8F1834D83604CCCBF8DDF22ED77F6AB06EAE979EE2405C9DCC854F3AD0B028D3747BA6F76B65D17ABB760CE808034F29ACD74723E0C6B6DD2AC2C93C6BCB5646F237F4481348F1319B20B7FA678086C866E1EB927DC66DCC79C97328AA8D128FE453926666EEDAEEE965CC3ED0B2811BAC15AF3EA0C0815D4E3DDAFB399C9E2397A2855CE2D66723C85A0C480E0891E3AD69F356605C4BB238C27A478B80BB60B65B43834756B0BC9E2437E95CEE4B87E0EBF1616C7D9CEDB5CBBA9C42E0F99C8507E158BBFD1BC218C5B1AB040422EED32722F3411F3CAA157AFF004414A16F3AE5C3EF1056F12B944804F3201D77DA993ECAC8D3A07C37F1FBD20CCB3C323C0028D7F2A96AF8009F66B1F502F200D067303CB61F6AE6B793403B764DBAF3A841220983E3EA2A3A932F63B22EE1E69B5AF2100C91BC728FE349AEBC16E4577F68117CCBE813C1D42C9D640CBACFAD6D8CB029C720EC3B7C8BCBDBA4323DB96E35D21023979D37C80E843107F14BD67806DF8602D0E07842F22DB3992634ABF29342DB153AC62776B0C8E0DE10F6723B8E4655A63E00FCEAE566503A0C96BE28201C8B3B16FB07E14A56609A0AAF71DC5EC179116E5680345978A17FE55451C27FD97AB30DD247F1C592CB76857872EE3AE38D77FDA2C42818AD90B163D889C19A0FF6F07FC99DFF00F9C52B45FB2C69949840EC006420EA8F81A47E47B33187D91C6713C516E3BC1B765E21B5A003249D649AD0DE100CF30FC34DD5FE20CF5B22DECC8421DE10256B3B88ABB24520F5600E7B97323CDAFE0BA4AB06A42CBDC1E71AB1B57AE250B415E76C4111CA153E14F53F800D7613D2261BB7C02E5962DF868EC127524C2FDE348AE5990535D1A16185AC4911A6C2662B3FFD83DBA17E096376C58DBB65A585A010510651ACD32D5964830C750F6A161641DC418A18A4997B095DB6BB05008EC4921D00EBDE50CC0F95698C844CAED30BB85CBC485F1996811AE800D3EF433B10718067E8B4250101988DC803F3A5F90B70173BD1B4124B6820F3D29CAFC8B5583BF835E356EF1065006DFF0088A256A238339787DF3416E2EDF3A20930478473D6AF74C8E381FAB16B7B5B4590CAD0502432B04675F213AD0968058B213C7B9F6D76BD56EAF58FD94CFD29129B0D4504292D9DD00FC2A97613E8AF816FFDD8F951EF22888619064013E31532CA2A52A5E8F1207AF2A22B068FA19813B810B97EFF00479E12359E72A4E5FE7556D9F1012EC2DABD0EDF328079ED5CE5166C6D16A710B4B5B92879D436B2B200240FBD3231629C8212A0A7ADCF38744FC74FBD1E0B217C41780226473A5C89907530CFB84A0F969559088A5246864F9C9A99216E9BFDF7A667A048A2E62E020F9C03BD2A7E8842E6EC9046F4A88C58173FC33BA04F8D3E2C19240B919FC028F690381C637895A61B84BD8932438008651EF9797A2131EB5B69F9086DA17F46F0B7309C250C1FF79592F5DCEA82E2F947ECED576B2B1903B3719C1195DAB6BE33CB595BC48D16B59E6AF2A161264958B5F48059089F8D2DC02C8BAF9D7474870E79C91EC9CDB7A6C7A814FD8ED4866F6D176AF85965E10E6B122674F952233C0C711922E5C8EF98F85015827D757AC131CFFF00350855FA58EDBFAD0648A2097D883CEB24040D257B41D111F9D3612065120D628F219659004E4004F20044D5C89139576489E14CEF1E3428267A80543F54502AF0516AAC995A0B6B060E953043AFAD91FA32E7268BE11027E5571F60B443A5880C603705B9105AD79133B5154B332DFA00461F8B2D0873AA0C8B0088786B9C48D0C546922D14A5370B7976DD5D66E1900AD020E40BEEED57AE0840A2E13DF65E1FE03F94D44D1681DDBD431FAE059F35A0A07D68976C1914D93A177D640821174F016EE904217067B2AFE14E947A1793777AAE392163383B8DAB9DBE0D1AFC401183589738C190DAC6CF364858F4357E664F194ABA2F87495A33C9DCAFB64F99268BCCC9E32E630B2D70725C11D5A782468616648236E553C85052D0F139CAF3F9FF002A0F643D4A7277E0559672DFCBBC09DB4959F8506087215FE01EBDBF9D160858A4CB79C00867FBD5EDF0AB9C482A7DD20EB49D434C11D5D3610C032653C7453300E4A1AC0B1CE234BC41A66EB82BE234F20F7163DE527B23D3C29EB975FA819635CE3F70E2CAE6C31308E26970767412B42FD77FBD53963B63577E821584B683ED190276720643F63F3A264D49A3076502194204EE8D48FA52DCC3C03BBD1EB15DDB373DCB86242013D8EDEE4EFF005A076745EA16A63277D113A8E60D29860EEA97C8401CC6DF0A22104A4CC49FE556408E037C813354E244CAAE70F26DDD2812BC8606D26341512024C83187AC360B88ED9027F634EED1499224D36827C28130D924B01277DBC28B628B5282A8898AAD887AB696FB2B6CC8411122877EC92403D377CFE85C9C8BA8115A38CFE42E5E862B51010CB2248001276400229336F2322BA175A58BD6F7F7778B209B9081935EC06C4003E745293C151F6139572748F083494D842FE9426E5DC0EF5064A227533DC39A9D47DC0484D762E6EBA2D87DE33DFC3487991E4830BAD59F9B42F53516977D71945C8EDDBBC02C7983E95CF9FB6684FE212A5F308FAD0167897E36FA5110E5281D4CFA73AAC02729D237244F23AACFA0A22114A4AF50387E660AFE7B51A2892131A3625677E67E268B0405BDC42D2CBB0BF6EF44F0472F3A2480C99E7F1BC4AF6F02176971D50C82E0EC64F34057E7AD3A51582127F1DC230D8B47AEE1D469DB95AFFC46931A252ECB933D5DF32B44A16083B79D33C4C1C8275B145A1591C60ED6278DE124E26EC21FD90C421793F6C8FC5E158F91AD33CD689529591C4D9163A20CD84F56BB7434755B2E0051FF00C7E757FE4B7EA5122E1E9DA64704E97B3C536CCBBD650824042F49403DE40AD7E19259171BF2692D9DB6BE467B331B4A17DCF84FE4296D7EC6FF00E1EE63391620F81FCA74F90A8E259C94B80420F60F23B1F8AA3E8292E2110521139E782EEE42FB9F0FE75582135272885B40123481BF9D06C4248616BD663C08D45373FA21722D0C6A6639D4FF00D2125B040902819001D8DBEC3F8D44116B48B7890249E750B3C528CF80A84395244C9D395522C51D2EB6BCBCB4659651243CDACC902108DCEB4DA1E05490426F434324C93AAD7E27E14219E67CE4810644EF50B3B844910341B99DE6A990A9D50C8B61C2421C0504792F4A38740B33FD0C74BB6EE61EF1EC5AAD608F10BE5F3AD1C9FD8A8234D69D5AD5B430C0E1B48EE2068056293FC8F084BAC81E5E1CEA88494A29133C36BF19FCBF951108A5455FA91007F6A7BF23C009FAD5A451C9E0B4247C5675FA8CD444395A0CEF1E1A3949ED9A91E8AE84D8A74A1968A2D5B77AA878C217B2F3CC7687E1A678A5EC4F950BEE7A3B7CF5CA1F5E20592C9CE84323B085F8F6AABEA963180D52DF6CA7A4D8FE2F8394706D10F34F4210F6BDFF00C2523E947C7AA33F6C29D8E3D205E03D78B66EF1165B5DE0EC32CB6369E527F3DA9CA4A0B0BD0B4BB0B535C2586D080F624E0313DC6C73FF00CF3A1DBF212F609FA0AFBFE2D9FF00D33FF755F9D7E8BF130DC4B0417ECF5AC3096DDE60128923911F8A950B3597FB101755BC7E0CBBA1987DFDC3370BC49D75CB712CF5659264FBC543E94BE7CE3EEB42F8B092EA4C66EF4330259045B7056365B64A23E558573AD4BB35FD343F02FC5B16B7C0313B7B6E32D6E94672EAC93C393099CB1F3AE971E0EF8E4CB6DAAA1F58E3ECDD210DDD2F393DC79B072792B3554F3109318709691225E6BC51A9FF00E22A41A61924E4588D20EB93BE7FCA881F3A168B23956C7BF08E687A24FEE246B40EB2C9238739C4DB2CC421677FF5E741AE3D102157210786B4411F2ABDBF64297DF2B12820A3CB5AA64075428478D4411EA76814259DC51CC7FA15080EFBE5311CC8FBD444641D4F17593A729A24F05A40096209E624D5947A950490420F8133E35084D4E88C990EBBEB522405F62AD9042C69275A20493185DA5BBCBBA60C5CBE3DB1F1A93B365824505A12E2C4ACC01A9276F81FE14BC04C925DCD1D5912362F11D841F4D6AC87A84E639D7ED97104F7D1F008829A348A2DE2ADF238633AFF001F7D03D55A2BE1478048BF7D6F6A4EA1FBD00AD009D8738FF5342564CC3F8DDA6278B22C16F672F0D340436B46A0034F95728C722FC8A5D12574330B5ACAEE78B72E9DCAD7FF006C52BEAA78E86AE2AF601D337F1AB00CAF0D7962DCC325B1AAC2FDDD77A7712107EC5DFBAE91561B6B76CB21EBE71DB9BD70E8D139E17C9291F9D1D8D67E2895C64BD8C2F2F19C12D17757266E08891CA766D1F9CD0463BB2E5233FD15E90BAFE34E97F5E3234F04046B15A2FA7101754FE46BF8EDF88AC3AB36F43ABFC3CBC4DFD909B889BB664210E78147FF00B3C3C79D5359EA7EC42F8FDBE8438861ACE2CCF59B6596DEDB38250647BAB035AAAED75BC4BD17656AC5F1F6236AE7A4F6B88B3878B9783AE10812646BFBD3CAB7CE1C7957B25D9CD8ABA33ED9B6C43A27845FACAEE99CEF680BD242D70224C570A1FC8D9536A2F08E83E346D5DA07B6E875A59C8B2B879941FEC5673A27C7F98A77F939B786BD94B89AF60B84F484B170F316D0B0C121D43CB3B2342B133DEF2ADBF4F638E500AE8BE99A5B6BBB6C481085E4B880560103ED40B3F90D2C16AA6DE6619478B233AD7FE2555E105922EA4247B40199F7DE39DCF82450B444C82517202F820BCC91A97FB1FE4E754996D15252CBAE45AAC8763F54BD89E6336DF3A1D0B20A74B448791934DC0D3D637A843B398CE1728DC11B50AF61114A4E4D47991525EC841504A349D6A884FE95080EA8256483F96D56C1478AB6904201F5A888CB156567CC92BF006AB76594F526492B1A343BEB274F0EF7F0A2EC120A521A30D8E32E3531EC507CFF0089ABC164D36CE2C67B925E23B8B660A07AA6A648494FA1046C49D070E5B73FC9B55B40E49A9A9417AF179191C8405FF89423E9513C17817E33D24164CBAD826D5081EC9D8DFCA0532AADCCA9C9405FD41BC6ED197D770B085A35C90167C89D6A3B7C4FD13C7E54796DD11C16D5C43CDB44BA82085959D08E7A504F9363EB3D05F4F5C3D197C6F10E928C657863772B327D88442250BD44915BE9857A65A334A566DD319D8E17FA38072E9E5DD5EAFB089257DB3EEA01FBD04AEFE86258183AB6F096CDE5D902E003E686BF6511F53CFD2852F21252D4C0E3B8DBB8B5C673A343B88FCCD6DAEBD118EC9EC6A3A1982328C24E2246779C9467FC03C2B3726C79C1A78D009E01FF005141B1AB0687A024A92964EAD07F2849FC3E1E94BE52F964CF07D16E24A28E91341309172D153F000CE46C4F98A4E36F61D3D3E8AB16F62D0BA6FB370D13C3779A74E541C7FB59773F90CBA2D7D737A3FAC2F3E9E007D80AC17C12C932C6AADCFA1FB564A5E6C41DAFE07C69B5292E070121CCE7B437F9D7B5ABFE3470F1F337362E15B6C2D5056A04A94522498DC98AE6F24EBD66B2C9E71DB61C439BB037F4ACD59733DB665B43CFA923B4908CA7723D26992244A6D7FADBABEB1ED3C8EDF2A141B238D001B640DA2A108D9FB4B2285F68248CB3A91E877A12003BD9DB4CD19A39EBCE857B0861C8FAD497B202AF76BF7FF2AA213FC5EA2A1477F6CBFF00055B29120EAC3660F854446413FAD5A7DD49D072DF9F8FC6968B2AB825EB9E139DA6F3C65E514D4C1395FD56E386C761B9EE8DBE544593C41A434E1536322BC53A1FA5090AB0BEDDBADF5769D23559D49A39802DE9212627F101F09AA8047CFB1D7DD76FB2B8A2A4A7BA0EC3D2BB14AC1CCB7D9B2E847FF60B7FDF73EF5CAE6FDC7478BF68463972F5B01C1565D0F21F9D2608609F0379CBC5AEE6E0F11F8CBC43BE5F0F4AE8CBEC12BEE18619DAC52F275C880113C81DC0F09A584CC974D2E1EEB686339E14CE4E5335A38E85DA670F3AD5F83148FA0745FD9E1CDA51A254C82A1C89956A6B9DC9F66FE30DB848F0A51A0FFFD900

  14. mike says:

    I have successfully displayed an image but only get the image. All html text is missing including things like bgcolor in body tag. How do you accomplish both?

  15. joe says:

    Jeez this ain’t easy. Anyway I have tried multiple solution examples to no avail. I have on question. In paul’s solution October 15:what is the document_name?If its the column i’m getting errors, if not I have no idea, i’m on my 16th hour with this thing.I can save it as a file and view it, but if im going to do that why store it in a database?Any way thanks, feel free to email me.

  16. Gjermund says:

    I have used the code block on the top to retrieve images from a Oracle database.Kode:context = getPageContext();context.setFlushOutput(false);response = context.getResponse().getResponse();out = response.getOutputStream();response.setContentType(“image/jpeg”);response.setContentLength(arrayLen(pic));out.write(pic);out.flush();out.close();This works well. But can I use the same code (in some way) to retrieve video clips as well?? (Have tried, but haven’t found a solution that works yet) The videos are stored using the datatype ordsys.ordimage.I hope someone can help me with this one.Regards,Gjermund

  17. Critter says:

    I have a question for ya’ll..i am using cfhttp to retrieve a pushed out image… but am having problems displaying the jpeg on my page.. using spikes example above.. i get a broken image.. if i change the type to /jpeg it throws an error.. any suggestions?

  18. Critter says:

    I was /finally/ able to get it to spit out the jpeg by using Christians original example…danke

  19. volkan says:

    hi guys,I use all these methods but nothing else..I have an image data in database(BLOB) and I also upload files like rar,zip,csv,xls,pdf ….No problem with data in database but I can’t force it to downloaded with coldfusion….With asp data can be downloaded(Response.BinaryWrite) but there is a problem with naming(downloading with pagename)-type and user have to change file name….I think there is a stream problem with coldfusion streaming…That make me crazy….Is there a method like BinaryWrite…Please help..Thanks

  20. volkan says:

    hi guys,I use all these methods but nothing else..I have an image data in database(BLOB) and I also upload files like rar,zip,csv,xls,pdf ….No problem with data in database but I can’t force it to downloaded with coldfusion….With asp data can be downloaded(Response.BinaryWrite) but there is a problem with naming(downloading with pagename)-type and user have to change file name….I think there is a stream problem with coldfusion streaming…That make me crazy….Is there a method like BinaryWrite…Please help..Thanks

  21. Ese says:

    Hi How do i know the right character encoding to use i.e. charset=8859_1.I have been trying to download get my application to download a pdf file but it keeps saying the file is damaged and cant be repaired. It seems to upload ok(at least i dont get any errors) but downloading the files has been a problem. Can anybody help. thanks Ese

  22. Ivan says:

    Reference of(Posted by: Kyle at October 7, 2003 01:09 AM).When i reached#tostring(tobinary(upl.doc_base64))#An error encouteredParameter 1 of function toBinary which is now “504568555455772B44516F4E436A7843543052” must be a base64-encoded stringI dun understand since I had converted it into Base64 before I insert into mydatabaseINSERT INTO myblobs (blobid,blobTitle,blobData,blobType)VALUES (‘0′,’#file.serverfile#’,,’#MimeType#’)Important helps will really helps all peoples..I beleive outthere a lot of peoples suffering the same problems…Thanks

  23. Ivan says:

    >>cfquery name=”upl”datasource=”testmysql”dbtype=”odbc”>INSERT INTO myblobs (blobid,blobTitle,blobData,blobType)VALUES (‘0′,’#file.serverfile#’,>CFQUERYPARAMCFSQLTYPE=”CF_SQL_LONGVARCHAR” VALUE=”#base64#”>,’#MimeType#’)

  24. Ivan says:

    Anybody please reply to solve my issue.THANKS

  25. tom a says:

    I tried the above method, but on some graphic, the image got cut off half way, the size is correct except the half of the image is cut off… any ideas?