Source Code Cross Referenced for WbExportTest.java in  » Database-Client » SQL-Workbench » workbench » sql » wbcommands » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Database Client » SQL Workbench » workbench.sql.wbcommands 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


0001:        /*
0002:         * WbExportTest.java
0003:         *
0004:         * This file is part of SQL Workbench/J, http://www.sql-workbench.net
0005:         *
0006:         * Copyright 2002-2008, Thomas Kellerer
0007:         * No part of this code maybe reused without the permission of the author
0008:         *
0009:         * To contact the author please send an email to: support@sql-workbench.net
0010:         *
0011:         */
0012:        package workbench.sql.wbcommands;
0013:
0014:        import java.io.FileReader;
0015:        import java.io.PrintWriter;
0016:        import java.io.File;
0017:        import java.io.Reader;
0018:        import java.sql.Connection;
0019:        import java.sql.PreparedStatement;
0020:        import java.sql.SQLException;
0021:        import java.sql.Statement;
0022:        import java.util.List;
0023:        import junit.framework.TestCase;
0024:        import workbench.TestUtil;
0025:        import workbench.db.ConnectionMgr;
0026:        import workbench.db.WbConnection;
0027:        import workbench.interfaces.StatementRunner;
0028:        import workbench.sql.BatchRunner;
0029:        import workbench.sql.ScriptParser;
0030:        import workbench.sql.StatementRunnerResult;
0031:        import workbench.util.EncodingUtil;
0032:        import workbench.util.FileUtil;
0033:        import workbench.util.FileUtil;
0034:        import workbench.util.LobFileParameter;
0035:        import workbench.util.LobFileStatement;
0036:        import workbench.util.SqlUtil;
0037:        import workbench.util.ZipUtil;
0038:
0039:        /**
0040:         *
0041:         * @author support@sql-workbench.net
0042:         */
0043:        public class WbExportTest extends TestCase {
0044:            private String basedir;
0045:            private final int rowcount = 10;
0046:            private WbExport exportCmd = new WbExport();
0047:            private WbConnection connection;
0048:            private TestUtil util;
0049:
0050:            public WbExportTest(String testName) {
0051:                super (testName);
0052:
0053:                try {
0054:                    util = new TestUtil(testName);
0055:                    util.prepareEnvironment();
0056:                    this .basedir = util.getBaseDir();
0057:
0058:                } catch (Exception e) {
0059:                    fail(e.getMessage());
0060:                }
0061:            }
0062:
0063:            protected void setUp() throws Exception {
0064:                super .setUp();
0065:                this .connection = prepareDatabase();
0066:                this .exportCmd.setConnection(this .connection);
0067:            }
0068:
0069:            protected void tearDown() throws Exception {
0070:                this .connection.disconnect();
0071:                super .tearDown();
0072:            }
0073:
0074:            public void testIsTypeValid() {
0075:                try {
0076:                    WbExport exp = new WbExport();
0077:                    assertTrue(exp.isTypeValid("text"));
0078:                    assertTrue(exp.isTypeValid("TEXT"));
0079:                    assertTrue(exp.isTypeValid("xml"));
0080:                    assertTrue(exp.isTypeValid("sql"));
0081:                    assertTrue(exp.isTypeValid("HTML"));
0082:                    assertTrue(exp.isTypeValid("sqlUpdate"));
0083:                    assertTrue(exp.isTypeValid("sqlInsert"));
0084:                    assertTrue(exp.isTypeValid("SQLDeleteInsert"));
0085:                    assertTrue(exp.isTypeValid("xls"));
0086:                    //assertTrue(exp.isTypeValid("odt"));
0087:                } catch (Exception e) {
0088:                    e.printStackTrace();
0089:                    fail(e.getMessage());
0090:                }
0091:            }
0092:
0093:            public void testQuoteEscaping() {
0094:                try {
0095:                    File exportFile = new File(this .basedir,
0096:                            "quote_escaping_test.txt");
0097:
0098:                    Statement stmt = connection.createStatement();
0099:                    stmt
0100:                            .executeUpdate("CREATE TABLE quote_test (nr integer, testvalue varchar(100))");
0101:                    stmt
0102:                            .executeUpdate("insert into quote_test (nr, testvalue) values (1, 'first')");
0103:                    stmt
0104:                            .executeUpdate("insert into quote_test (nr, testvalue) values (2, 'with\"quote')");
0105:                    stmt
0106:                            .executeUpdate("insert into quote_test (nr, testvalue) values (3, 'with\ttab')");
0107:                    connection.commit();
0108:
0109:                    // Test escaping 
0110:                    StatementRunnerResult result = exportCmd
0111:                            .execute("wbexport -file='"
0112:                                    + exportFile.getAbsolutePath()
0113:                                    + "' -type=text -sourcetable=quote_test -quoteCharEscaping=escape -quoteChar='\"' -header=false");
0114:                    assertEquals("Export failed: "
0115:                            + result.getMessageBuffer().toString(), result
0116:                            .isSuccess(), true);
0117:                    assertEquals("Export file not created", true, exportFile
0118:                            .exists());
0119:
0120:                    List<String> lines = TestUtil.readLines(exportFile);
0121:                    assertEquals("Not enough lines exported", 3, lines.size());
0122:                    assertEquals("Wrong second line", "2\twith\\\"quote", lines
0123:                            .get(1));
0124:                    assertEquals("Wrong third line", "3\t\"with\ttab\"", lines
0125:                            .get(2));
0126:
0127:                    // Test escaping 
0128:                    result = exportCmd
0129:                            .execute("wbexport -file='"
0130:                                    + exportFile.getAbsolutePath()
0131:                                    + "' -type=text -sourcetable=quote_test -quoteCharEscaping=duplicate -quoteChar='\"' -header=false");
0132:                    assertEquals("Export failed: "
0133:                            + result.getMessageBuffer().toString(), result
0134:                            .isSuccess(), true);
0135:                    assertEquals("Export file not created", true, exportFile
0136:                            .exists());
0137:
0138:                    lines = TestUtil.readLines(exportFile);
0139:                    assertEquals("Not enough lines exported", 3, lines.size());
0140:                    assertEquals("Wrong second line", "2\twith\"\"quote", lines
0141:                            .get(1));
0142:
0143:                    // Test without quote character
0144:                    result = exportCmd
0145:                            .execute("wbexport -file='"
0146:                                    + exportFile.getAbsolutePath()
0147:                                    + "' -type=text -sourcetable=quote_test -quoteCharEscaping=duplicate -quoteChar=\"'\" -header=false");
0148:                    assertEquals("Export failed: "
0149:                            + result.getMessageBuffer().toString(), result
0150:                            .isSuccess(), true);
0151:                    assertEquals("Export file not created", true, exportFile
0152:                            .exists());
0153:
0154:                    lines = TestUtil.readLines(exportFile);
0155:                    assertEquals("Not enough lines exported", 3, lines.size());
0156:                    assertEquals("Wrong second line", "2\twith\"quote", lines
0157:                            .get(1));
0158:                    assertEquals("Wrong third line", "3\t'with\ttab'", lines
0159:                            .get(2));
0160:
0161:                } catch (Exception e) {
0162:                    e.printStackTrace();
0163:                    fail(e.getMessage());
0164:                } finally {
0165:                    ConnectionMgr.getInstance().disconnectAll();
0166:                }
0167:            }
0168:
0169:            public void testCommit() {
0170:                try {
0171:                    File exportFile = new File(this .basedir, "commit_test.sql");
0172:
0173:                    // Test default behaviour
0174:                    StatementRunnerResult result = exportCmd
0175:                            .execute("wbexport -file='"
0176:                                    + exportFile.getAbsolutePath()
0177:                                    + "' -type=sqlinsert -sourcetable=junit_test");
0178:                    assertEquals("Export failed: "
0179:                            + result.getMessageBuffer().toString(), result
0180:                            .isSuccess(), true);
0181:                    assertEquals("Export file not created", true, exportFile
0182:                            .exists());
0183:
0184:                    ScriptParser p = new ScriptParser();
0185:                    p.setFile(exportFile);
0186:
0187:                    assertEquals("Wrong number of statements", rowcount + 1, p
0188:                            .getSize());
0189:
0190:                    // Test no commit at all
0191:                    exportFile.delete();
0192:                    result = exportCmd
0193:                            .execute("wbexport -file='"
0194:                                    + exportFile.getAbsolutePath()
0195:                                    + "' -type=sqlinsert -sourcetable=junit_test -commitEvery=none");
0196:                    assertEquals("Export failed: "
0197:                            + result.getMessageBuffer().toString(), result
0198:                            .isSuccess(), true);
0199:                    assertEquals("Export file not created", true, exportFile
0200:                            .exists());
0201:
0202:                    p = new ScriptParser();
0203:                    p.setFile(exportFile);
0204:                    assertEquals("Wrong number of statements", rowcount, p
0205:                            .getSize());
0206:
0207:                    // Test commit each statement
0208:                    exportFile.delete();
0209:                    result = exportCmd
0210:                            .execute("wbexport -file='"
0211:                                    + exportFile.getAbsolutePath()
0212:                                    + "' -type=sqlinsert -sourcetable=junit_test -commitEvery=1");
0213:                    assertEquals("Export failed: "
0214:                            + result.getMessageBuffer().toString(), result
0215:                            .isSuccess(), true);
0216:                    assertEquals("Export file not created", true, exportFile
0217:                            .exists());
0218:
0219:                    p = new ScriptParser();
0220:                    p.setFile(exportFile);
0221:                    assertEquals("Wrong number of statements", rowcount * 2, p
0222:                            .getSize());
0223:
0224:                    String verb = SqlUtil.getSqlVerb(p.getCommand(0));
0225:                    assertEquals("Wrong first statement", "INSERT", verb);
0226:
0227:                    verb = SqlUtil.getSqlVerb(p.getCommand(1));
0228:                    assertEquals("No commit as second statement", "COMMIT",
0229:                            verb);
0230:
0231:                    verb = SqlUtil.getSqlVerb(p.getCommand(3));
0232:                    assertEquals("No commit", "COMMIT", verb);
0233:                } catch (Exception e) {
0234:                    e.printStackTrace();
0235:                    fail(e.getMessage());
0236:                }
0237:            }
0238:
0239:            /**
0240:             * Test the creation of date literals
0241:             */
0242:            public void testDateLiterals() {
0243:                try {
0244:                    File exportFile = new File(this .basedir,
0245:                            "date_literal_test.sql");
0246:                    exportFile.delete();
0247:
0248:                    Statement stmt = this .connection.createStatement();
0249:                    stmt
0250:                            .executeUpdate("CREATE TABLE literal_test (nr integer, date_col DATE, ts_col TIMESTAMP)");
0251:                    stmt
0252:                            .executeUpdate("insert into literal_test (nr, date_col, ts_col) values (1, '2006-01-01', '2007-02-02 14:15:16')");
0253:                    this .connection.commit();
0254:
0255:                    // Test JDBC literals
0256:                    StatementRunnerResult result = exportCmd
0257:                            .execute("wbexport -file='"
0258:                                    + exportFile.getAbsolutePath()
0259:                                    + "' -type=sql -sqlDateLiterals=jdbc -sourcetable=literal_test");
0260:                    assertEquals("Export failed: "
0261:                            + result.getMessageBuffer().toString(), result
0262:                            .isSuccess(), true);
0263:                    assertEquals("Export file not created", true, exportFile
0264:                            .exists());
0265:
0266:                    FileReader in = new FileReader(exportFile);
0267:                    String script = FileUtil.readCharacters(in);
0268:                    ScriptParser p = new ScriptParser(script);
0269:
0270:                    // WbExport creates 2 statements: the INSERT and the COMMIT
0271:                    assertEquals("Wrong number of statements", 2, p.getSize());
0272:
0273:                    String sql = p.getCommand(0);
0274:                    String verb = SqlUtil.getSqlVerb(sql);
0275:                    assertEquals("Not an insert statement", "INSERT", verb);
0276:                    assertEquals("JDBC Date literal not found", true, sql
0277:                            .indexOf("{d '2006-01-01'}") > -1);
0278:                    assertEquals("JDBC Timestamp literal not found", true, sql
0279:                            .indexOf("{ts '2007-02-02 14:15:16") > -1);
0280:
0281:                    // Test ANSI literals
0282:                    exportFile.delete();
0283:                    result = exportCmd
0284:                            .execute("wbexport -file='"
0285:                                    + exportFile.getAbsolutePath()
0286:                                    + "' -type=sql -sqlDateLiterals=ansi -sourcetable=literal_test");
0287:                    assertEquals("Export failed: "
0288:                            + result.getMessageBuffer().toString(), result
0289:                            .isSuccess(), true);
0290:                    assertEquals("Export file not created", true, exportFile
0291:                            .exists());
0292:
0293:                    in = new FileReader(exportFile);
0294:                    script = FileUtil.readCharacters(in);
0295:                    p = new ScriptParser(script);
0296:                    sql = p.getCommand(0);
0297:                    verb = SqlUtil.getSqlVerb(script);
0298:                    assertEquals("Not an insert statement", "INSERT", verb);
0299:                    assertEquals("ANSI Date literal not found", true, sql
0300:                            .indexOf("DATE '2006-01-01'") > -1);
0301:                    assertEquals("ANSI Timestamp literal not found", true, sql
0302:                            .indexOf("TIMESTAMP '2007-02-02 14:15:16'") > -1);
0303:
0304:                    // Test Standard literals
0305:                    exportFile.delete();
0306:                    result = exportCmd
0307:                            .execute("wbexport -file='"
0308:                                    + exportFile.getAbsolutePath()
0309:                                    + "' -type=sql -sqlDateLiterals=standard -sourcetable=literal_test");
0310:                    assertEquals("Export failed: "
0311:                            + result.getMessageBuffer().toString(), result
0312:                            .isSuccess(), true);
0313:                    assertEquals("Export file not created", true, exportFile
0314:                            .exists());
0315:
0316:                    in = new FileReader(exportFile);
0317:                    script = FileUtil.readCharacters(in);
0318:                    p = new ScriptParser(script);
0319:                    sql = p.getCommand(0);
0320:                    verb = SqlUtil.getSqlVerb(script);
0321:                    assertEquals("Not an insert statement", "INSERT", verb);
0322:                    assertEquals("STANDARD Date literal not found", true, sql
0323:                            .indexOf("'2006-01-01'") > -1);
0324:                    assertEquals("STANDARD Timestamp literal not found", true,
0325:                            sql.indexOf("'2007-02-02 14:15:16'") > -1);
0326:
0327:                    // Test Oracle literals
0328:                    exportFile.delete();
0329:                    result = exportCmd
0330:                            .execute("wbexport -file='"
0331:                                    + exportFile.getAbsolutePath()
0332:                                    + "' -type=sql -sqlDateLiterals=Oracle -sourcetable=literal_test");
0333:                    assertEquals("Export failed: "
0334:                            + result.getMessageBuffer().toString(), result
0335:                            .isSuccess(), true);
0336:                    assertEquals("Export file not created", true, exportFile
0337:                            .exists());
0338:
0339:                    in = new FileReader(exportFile);
0340:                    script = FileUtil.readCharacters(in);
0341:                    p = new ScriptParser(script);
0342:                    sql = p.getCommand(0);
0343:                    verb = SqlUtil.getSqlVerb(script);
0344:                    System.out.println("Statement=" + sql);
0345:                    assertEquals("Not an insert statement", "INSERT", verb);
0346:                    assertEquals("Oracle Date literal not found", true, sql
0347:                            .indexOf("to_date('2006-01-01'") > -1);
0348:                    assertEquals("Oracle Timestamp literal not found", true,
0349:                            sql.indexOf("to_date('2007-02-02 14:15:16'") > -1);
0350:
0351:                } catch (Exception e) {
0352:                    e.printStackTrace();
0353:                    fail(e.getMessage());
0354:                }
0355:
0356:            }
0357:
0358:            /**
0359:             * Test if the -append parameter is working properly
0360:             */
0361:            public void testAppend() {
0362:                try {
0363:                    File exportFile = new File(this .basedir,
0364:                            "export_append.txt");
0365:                    StatementRunnerResult result = exportCmd
0366:                            .execute("wbexport -file='"
0367:                                    + exportFile.getAbsolutePath()
0368:                                    + "' -type=text -header=true -sourcetable=junit_test");
0369:                    assertEquals("Export failed: "
0370:                            + result.getMessageBuffer().toString(), result
0371:                            .isSuccess(), true);
0372:
0373:                    assertEquals("Export file not created", true, exportFile
0374:                            .exists());
0375:                    // WbExport creates an empty line at the end plus the header line
0376:                    assertEquals("Wrong number of lines", rowcount + 1,
0377:                            TestUtil.countLines(exportFile));
0378:
0379:                    result = exportCmd
0380:                            .execute("wbexport -append=true -file='"
0381:                                    + exportFile.getAbsolutePath()
0382:                                    + "' -type=text -header=true -sourcetable=junit_test");
0383:                    assertEquals("Export failed: "
0384:                            + result.getMessageBuffer().toString(), result
0385:                            .isSuccess(), true);
0386:
0387:                    assertEquals("Wrong number of lines", (rowcount * 2) + 1,
0388:                            TestUtil.countLines(exportFile));
0389:
0390:                } catch (Exception e) {
0391:                    e.printStackTrace();
0392:                }
0393:            }
0394:
0395:            /**
0396:             * Test if an invalid file results in an error message
0397:             */
0398:            public void testInvalidFile() {
0399:                try {
0400:                    File exportFile = new File(
0401:                            "/this/is/expected/to/fail/no_export.txt");
0402:                    StatementRunnerResult result = exportCmd
0403:                            .execute("wbexport -file='"
0404:                                    + exportFile.getAbsolutePath()
0405:                                    + "' -type=text -header=true -sourcetable=blob_test");
0406:                    assertEquals("Export did not fail", result.isSuccess(),
0407:                            false);
0408:                    System.out.println(result.getMessageBuffer().toString());
0409:                } catch (Exception e) {
0410:                    e.printStackTrace();
0411:                    fail(e.getMessage());
0412:                }
0413:            }
0414:
0415:            /**
0416:             * Test the export to compressed text files
0417:             */
0418:            public void testTextExportCompressed() {
0419:                try {
0420:                    File exportFile = new File(this .basedir,
0421:                            "zip_text_export.txt");
0422:                    StatementRunnerResult result = exportCmd
0423:                            .execute("wbexport -file='"
0424:                                    + exportFile.getAbsolutePath()
0425:                                    + "' -type=text -header=true -sourcetable=blob_test -compress=true");
0426:                    assertEquals("Export failed: "
0427:                            + result.getMessageBuffer().toString(), result
0428:                            .isSuccess(), true);
0429:
0430:                    File zip = new File(this .basedir,
0431:                            "zip_text_export_lobs.zip");
0432:                    assertEquals("Archive not created", true, zip.exists());
0433:                } catch (Exception e) {
0434:                    e.printStackTrace();
0435:                    fail(e.getMessage());
0436:                }
0437:            }
0438:
0439:            /**
0440:             * Test the export to compressed xml files
0441:             */
0442:            public void testXmlExportCompressed() {
0443:                try {
0444:                    File exportFile = new File(this .basedir,
0445:                            "zip_xml_export.xml");
0446:                    StatementRunnerResult result = exportCmd
0447:                            .execute("wbexport -file='"
0448:                                    + exportFile.getAbsolutePath()
0449:                                    + "' -type=xml -sourcetable=blob_test -compress=true");
0450:                    assertEquals("Export failed: "
0451:                            + result.getMessageBuffer().toString(), result
0452:                            .isSuccess(), true);
0453:
0454:                    File zip = new File(this .basedir, "zip_xml_export_lobs.zip");
0455:                    assertEquals("Archive not created", true, zip.exists());
0456:                } catch (Exception e) {
0457:                    e.printStackTrace();
0458:                    fail(e.getMessage());
0459:                }
0460:            }
0461:
0462:            public void testAlternateBlobExport() {
0463:                try {
0464:                    File exportFile = new File(this .basedir, "blob_export.txt");
0465:                    StatementRunnerResult result = exportCmd
0466:                            .execute("wbexport -file='"
0467:                                    + exportFile.getAbsolutePath()
0468:                                    + "' -type=text -header=true -blobidcols=nr -sourcetable=blob_test");
0469:                    assertEquals("Export failed: "
0470:                            + result.getMessageBuffer().toString(), result
0471:                            .isSuccess(), true);
0472:
0473:                    assertEquals("No export file created", true, exportFile
0474:                            .exists());
0475:
0476:                    File bfile = new File(this .basedir,
0477:                            "blob_export_data_#1.data");
0478:                    assertEquals("Blob data not exported", true, bfile.exists());
0479:                    assertEquals("Wrong file size", 21378, bfile.length());
0480:
0481:                    bfile = new File(this .basedir, "blob_export_data_#2.data");
0482:                    assertEquals("Blob data not exported", true, bfile.exists());
0483:                    assertEquals("Wrong file size", 7218, bfile.length());
0484:                } catch (Exception e) {
0485:                    e.printStackTrace();
0486:                    fail(e.getMessage());
0487:                }
0488:            }
0489:
0490:            public void testBlobExtensionCol() {
0491:                try {
0492:                    File exportFile = new File(this .basedir, "blob_ext.txt");
0493:
0494:                    StatementRunner runner = util
0495:                            .createConnectedStatementRunner(connection);
0496:                    runner.runStatement(
0497:                            "wbexport -filenameColumn=fname -file='"
0498:                                    + exportFile.getAbsolutePath()
0499:                                    + "' -type=text -header=true;", -1, -1);
0500:                    StatementRunnerResult result = runner.getResult();
0501:                    System.out.println("**************");
0502:                    System.out.println(result.getMessageBuffer().toString());
0503:                    System.out.println("**************");
0504:                    runner.runStatement("select  \n" + "   case \n"
0505:                            + "     when nr = 1 then 'first.jpg' \n"
0506:                            + "     when nr = 2 then 'second.gif' \n"
0507:                            + "     else nr||'.data' \n"
0508:                            + "   end as fname,  \n" + "   data \n"
0509:                            + "from blob_test ", -1, -1);
0510:                    result = runner.getResult();
0511:                    assertEquals("No export file created", true, exportFile
0512:                            .exists());
0513:
0514:                    File bfile = new File(this .basedir, "first.jpg");
0515:                    assertEquals("jpeg file not found", true, bfile.exists());
0516:
0517:                    bfile = new File(this .basedir, "second.gif");
0518:                    assertEquals("gif file not found", true, bfile.exists());
0519:                    runner.done();
0520:                } catch (Exception e) {
0521:                    e.printStackTrace();
0522:                    fail(e.getMessage());
0523:                }
0524:            }
0525:
0526:            public void testTextBlobExport() {
0527:                try {
0528:                    File exportFile = new File(this .basedir, "blob_export.txt");
0529:                    StatementRunnerResult result = exportCmd
0530:                            .execute("wbexport -file='"
0531:                                    + exportFile.getAbsolutePath()
0532:                                    + "' -type=text -header=true -sourcetable=blob_test");
0533:                    assertEquals("Export failed: "
0534:                            + result.getMessageBuffer().toString(), result
0535:                            .isSuccess(), true);
0536:
0537:                    assertEquals("No export file created", true, exportFile
0538:                            .exists());
0539:
0540:                    File bfile = new File(this .basedir,
0541:                            "blob_export_r1_c2.data");
0542:                    assertEquals("Blob data not exported", true, bfile.exists());
0543:                    assertEquals("Wrong file size", 21378, bfile.length());
0544:
0545:                    bfile = new File(this .basedir, "blob_export_r2_c2.data");
0546:                    assertEquals("Blob data not exported", true, bfile.exists());
0547:                    assertEquals("Wrong file size", 7218, bfile.length());
0548:                } catch (Exception e) {
0549:                    e.printStackTrace();
0550:                    fail(e.getMessage());
0551:                }
0552:            }
0553:
0554:            public void testMultipleCompressedBlobExport() {
0555:                try {
0556:                    File dir = new File(this .basedir);
0557:                    StatementRunnerResult result = exportCmd
0558:                            .execute("wbexport -outputdir='"
0559:                                    + dir.getAbsolutePath()
0560:                                    + "' -type=text -header=true -compress=true -sourcetable=blob_test%");
0561:                    assertEquals("Export failed: "
0562:                            + result.getMessageBuffer().toString(), result
0563:                            .isSuccess(), true);
0564:
0565:                    File f1 = new File(this .basedir, "blob_test.zip");
0566:                    assertTrue("No export file created", f1.exists());
0567:
0568:                    File f2 = new File(this .basedir, "blob_test2.zip");
0569:                    assertTrue("No export file created", f2.exists());
0570:
0571:                    File bfile1 = new File(this .basedir, "blob_test_lobs.zip");
0572:                    assertTrue("Blob data not exported", bfile1.exists());
0573:
0574:                    File bfile2 = new File(this .basedir, "blob_test2_lobs.zip");
0575:                    assertTrue("Blob data not exported", bfile2.exists());
0576:
0577:                    List<String> entries1 = ZipUtil.getFiles(bfile1);
0578:                    assertEquals("Not enough blob entries", 2, entries1.size());
0579:                    assertTrue("First blob not in ZIP Archive", entries1
0580:                            .contains("r1_c2.data"));
0581:                    assertTrue("Second blob not in ZIP Archive", entries1
0582:                            .contains("r2_c2.data"));
0583:
0584:                    List<String> entries2 = ZipUtil.getFiles(bfile2);
0585:                    assertEquals("Not enough blob entries", 2, entries2.size());
0586:                    assertTrue("First blob not in ZIP Archive", entries2
0587:                            .contains("r1_c2.data"));
0588:                    assertTrue("Second blob not in ZIP Archive", entries2
0589:                            .contains("r2_c2.data"));
0590:
0591:                    assertTrue("Could not delete file", f1.delete());
0592:                    assertTrue("Could not delete file", f2.delete());
0593:                    assertTrue("Could not delete file", bfile1.delete());
0594:                    assertTrue("Could not delete file", bfile2.delete());
0595:                } catch (Exception e) {
0596:                    e.printStackTrace();
0597:                    fail(e.getMessage());
0598:                }
0599:            }
0600:
0601:            public void testTextExport() {
0602:                try {
0603:                    File exportFile = new File(this .basedir, "export.txt");
0604:                    StatementRunnerResult result = exportCmd
0605:                            .execute("wbexport -file='"
0606:                                    + exportFile.getAbsolutePath()
0607:                                    + "' -type=text -header=true -sourcetable=junit_test -formatFile=oracle,sqlserver");
0608:                    assertEquals("Export failed: "
0609:                            + result.getMessageBuffer().toString(), result
0610:                            .isSuccess(), true);
0611:
0612:                    assertEquals("Export file not created", true, exportFile
0613:                            .exists());
0614:                    // WbExport creates an empty line at the end plus the header line
0615:                    // we end up with rowcount + 2 lines in the export file
0616:                    assertEquals("Wrong number of lines", rowcount + 1,
0617:                            TestUtil.countLines(exportFile));
0618:
0619:                    File ctl = new File(this .basedir, "export.ctl");
0620:                    assertEquals("Control file not created", true, ctl.exists());
0621:
0622:                    List<String> lines = TestUtil.readLines(ctl);
0623:                    System.out.println("first line: " + lines.get(0));
0624:                    assertTrue(lines.get(0).startsWith("--"));
0625:                    assertTrue(lines.get(1).indexOf("skip=1") > -1);
0626:
0627:                    File bcp = new File(this .basedir, "export.fmt");
0628:                    assertEquals("BCP format file not created", true, bcp
0629:                            .exists());
0630:                    lines = TestUtil.readLines(bcp);
0631:                    assertEquals("7.0", lines.get(0));
0632:                    assertEquals("3", lines.get(1));
0633:                    assertTrue(lines.get(2).indexOf(" NR") > -1);
0634:                    assertTrue(lines.get(2).indexOf(" \"\\t\"") > -1);
0635:                    assertTrue(lines.get(3).indexOf(" FIRSTNAME") > -1);
0636:                    assertTrue(lines.get(4).indexOf(" LASTNAME") > -1);
0637:                    assertTrue(lines.get(4).indexOf(" \"\\n\"") > -1);
0638:                } catch (Exception e) {
0639:                    e.printStackTrace();
0640:                    fail(e.getMessage());
0641:                }
0642:            }
0643:
0644:            public void testXmlClobExport() {
0645:                try {
0646:                    File exportFile = new File(this .basedir, "export.xml");
0647:                    Statement stmt = connection.createStatement();
0648:                    stmt
0649:                            .executeUpdate("CREATE MEMORY TABLE clob_test(nr integer, clob_data CLOB)");
0650:                    String data1 = "This is the first clob content";
0651:                    stmt.executeUpdate("insert into clob_test values (1, '"
0652:                            + data1 + "')");
0653:                    String data2 = "This is the second clob content";
0654:                    stmt.executeUpdate("insert into clob_test values (2, '"
0655:                            + data2 + "')");
0656:                    connection.commit();
0657:                    stmt.close();
0658:
0659:                    StatementRunnerResult result = exportCmd
0660:                            .execute("wbexport -file='"
0661:                                    + exportFile.getAbsolutePath()
0662:                                    + "' -type=xml -header=true -sourcetable=clob_test -clobAsFile=true");
0663:                    assertEquals("Export failed: "
0664:                            + result.getMessageBuffer().toString(), result
0665:                            .isSuccess(), true);
0666:
0667:                    assertEquals("Export file not created", true, exportFile
0668:                            .exists());
0669:
0670:                    File dataFile1 = new File(this .basedir, "export_r1_c2.data");
0671:                    assertEquals("Clob file not created", true, dataFile1
0672:                            .exists());
0673:
0674:                    File dataFile2 = new File(this .basedir, "export_r2_c2.data");
0675:                    assertEquals("Clob file not created", true, dataFile2
0676:                            .exists());
0677:
0678:                    Reader in = EncodingUtil.createReader(dataFile1, "UTF-8");
0679:                    String content = FileUtil.readCharacters(in);
0680:                    assertEquals("Wrong clob content exported", data1, content);
0681:                    in = EncodingUtil.createReader(dataFile2, "UTF-8");
0682:                    content = FileUtil.readCharacters(in);
0683:                    assertEquals("Wrong clob content exported", data2, content);
0684:
0685:                } catch (Exception e) {
0686:                    e.printStackTrace();
0687:                    fail(e.getMessage());
0688:                }
0689:            }
0690:
0691:            public void testTextClobExport() {
0692:                try {
0693:                    File exportFile = new File(this .basedir, "export.txt");
0694:                    Statement stmt = connection.createStatement();
0695:                    stmt
0696:                            .executeUpdate("CREATE MEMORY TABLE clob_test(nr integer, clob_data CLOB)");
0697:                    String data1 = "This is the first clob content";
0698:                    stmt.executeUpdate("insert into clob_test values (1, '"
0699:                            + data1 + "')");
0700:                    String data2 = "This is the second clob content";
0701:                    stmt.executeUpdate("insert into clob_test values (2, '"
0702:                            + data2 + "')");
0703:                    connection.commit();
0704:                    stmt.close();
0705:
0706:                    StatementRunnerResult result = exportCmd
0707:                            .execute("wbexport -file='"
0708:                                    + exportFile.getAbsolutePath()
0709:                                    + "' -type=text -header=true -sourcetable=clob_test -clobAsFile=true -writeOracleLoader=true");
0710:                    assertEquals("Export failed: "
0711:                            + result.getMessageBuffer().toString(), result
0712:                            .isSuccess(), true);
0713:
0714:                    assertEquals("Export file not created", true, exportFile
0715:                            .exists());
0716:
0717:                    File dataFile1 = new File(this .basedir, "export_r1_c2.data");
0718:                    assertEquals("Clob file not created", true, dataFile1
0719:                            .exists());
0720:
0721:                    File dataFile2 = new File(this .basedir, "export_r2_c2.data");
0722:                    assertEquals("Clob file not created", true, dataFile2
0723:                            .exists());
0724:
0725:                    Reader in = EncodingUtil.createReader(dataFile1, "UTF-8");
0726:                    String content = FileUtil.readCharacters(in);
0727:                    assertEquals("Wrong clob content exported", data1, content);
0728:                    in = EncodingUtil.createReader(dataFile2, "UTF-8");
0729:                    content = FileUtil.readCharacters(in);
0730:                    assertEquals("Wrong clob content exported", data2, content);
0731:
0732:                    File ctl = new File(this .basedir, "export.ctl");
0733:                    assertEquals("Oracle loader file not written", true, ctl
0734:                            .exists());
0735:
0736:                    // Now check if the SQL*Loader file contains the correct
0737:                    // syntax to load the external files.
0738:                    FileReader fr = new FileReader(ctl);
0739:                    String ctlfile = FileUtil.readCharacters(fr);
0740:
0741:                    int pos = ctlfile.indexOf("lob_file_clob_data FILLER");
0742:                    assertEquals("FILLER not found", true, pos > -1);
0743:                    pos = ctlfile
0744:                            .indexOf("CLOB_DATA LOBFILE(lob_file_clob_data)");
0745:                    assertEquals("File statement not found", true, pos > -1);
0746:                } catch (Exception e) {
0747:                    e.printStackTrace();
0748:                    fail(e.getMessage());
0749:                }
0750:            }
0751:
0752:            public void testExportWithSelect() {
0753:                try {
0754:                    File script = new File(this .basedir, "export.sql");
0755:                    File output = new File(this .basedir, "test.txt");
0756:                    PrintWriter writer = new PrintWriter(script);
0757:                    writer.println("wbexport -file='"
0758:                            + output.getAbsolutePath()
0759:                            + "' -type=text -header=true;");
0760:                    writer.println("select * from junit_test;");
0761:                    writer.close();
0762:
0763:                    BatchRunner runner = new BatchRunner(script
0764:                            .getAbsolutePath());
0765:                    runner.setBaseDir(this .basedir);
0766:                    runner.setConnection(this .connection);
0767:                    runner.execute();
0768:                    assertEquals("Script not executed", true, runner
0769:                            .isSuccess());
0770:                    assertEquals("Export file not created", true, output
0771:                            .exists());
0772:
0773:                    int lines = TestUtil.countLines(output);
0774:                    assertEquals("Not enough lines", rowcount + 1, lines);
0775:
0776:                    boolean deleted = output.delete();
0777:                    assertEquals("Export file is still locked", true, deleted);
0778:                } catch (Exception e) {
0779:                    e.printStackTrace();
0780:                    fail(e.getMessage());
0781:                }
0782:            }
0783:
0784:            public void testSqlClobExport() {
0785:                try {
0786:                    Statement stmt = this .connection.createStatement();
0787:                    stmt
0788:                            .executeUpdate("CREATE MEMORY TABLE clob_test(nr integer, clob_data CLOB)");
0789:                    stmt
0790:                            .executeUpdate("INSERT INTO clob_test (nr, clob_data) values (1, 'First clob')");
0791:                    stmt
0792:                            .executeUpdate("INSERT INTO clob_test (nr, clob_data) values (2, 'Second clob')");
0793:                    this .connection.commit();
0794:                    stmt.close();
0795:
0796:                    File exportFile = new File(this .basedir, "clob_export.sql");
0797:                    StatementRunnerResult result = exportCmd
0798:                            .execute("wbexport -file='"
0799:                                    + exportFile.getAbsolutePath()
0800:                                    + "' -type=sql -sourcetable=clob_test -clobAsFile=true -encoding=utf8");
0801:                    assertEquals("Export failed: "
0802:                            + result.getMessageBuffer().toString(), result
0803:                            .isSuccess(), true);
0804:
0805:                    assertEquals("Export file not created", true, exportFile
0806:                            .exists());
0807:
0808:                    File dataFile = new File(this .basedir,
0809:                            "clob_export_r1_c2.data");
0810:                    assertEquals("First blob file not created", true, dataFile
0811:                            .exists());
0812:
0813:                    Reader in = EncodingUtil.createReader(dataFile, "UTF8");
0814:                    String contents = FileUtil.readCharacters(in);
0815:                    assertEquals("Wrong first clob content", "First clob",
0816:                            contents);
0817:
0818:                    dataFile = new File(this .basedir, "clob_export_r2_c2.data");
0819:                    assertEquals("Second blob file not created", true, dataFile
0820:                            .exists());
0821:                    in = EncodingUtil.createReader(dataFile, "UTF8");
0822:                    contents = FileUtil.readCharacters(in);
0823:                    assertEquals("Wrong second clob content", "Second clob",
0824:                            contents);
0825:
0826:                    ScriptParser p = new ScriptParser(1024 * 1024);
0827:                    p.setFile(exportFile);
0828:
0829:                    assertEquals("Wrong number of statements", 3, p.getSize());
0830:                    String sql = p.getCommand(0);
0831:                    String verb = SqlUtil.getSqlVerb(sql);
0832:                    assertEquals("Not an insert file", "INSERT", verb);
0833:
0834:                    LobFileStatement lob = new LobFileStatement(sql,
0835:                            this .basedir);
0836:                    assertEquals("No parameter detected", 1, lob
0837:                            .getParameterCount());
0838:
0839:                    LobFileParameter[] parms = lob.getParameters();
0840:                    assertNotNull("No encoding found in parameter", parms[0]
0841:                            .getEncoding());
0842:                    assertEquals("Wrong parameter", "UTF8", parms[0]
0843:                            .getEncoding().toUpperCase());
0844:                } catch (Exception e) {
0845:                    e.printStackTrace();
0846:                    fail(e.getMessage());
0847:                }
0848:            }
0849:
0850:            public void testSqlBlobExport() {
0851:                try {
0852:                    File exportFile = new File(this .basedir, "blob_export.sql");
0853:                    StatementRunnerResult result = exportCmd
0854:                            .execute("wbexport -file='"
0855:                                    + exportFile.getAbsolutePath()
0856:                                    + "' -type=sql -sourcetable=blob_test -blobtype=file");
0857:                    assertEquals("Export failed: "
0858:                            + result.getMessageBuffer().toString(), result
0859:                            .isSuccess(), true);
0860:
0861:                    assertEquals("Export file not created", true, exportFile
0862:                            .exists());
0863:
0864:                    File dataFile = new File(this .basedir,
0865:                            "blob_export_r1_c2.data");
0866:                    assertEquals("First blob file not created", true, dataFile
0867:                            .exists());
0868:
0869:                    dataFile = new File(this .basedir, "blob_export_r2_c2.data");
0870:                    assertEquals("Second blob file not created", true, dataFile
0871:                            .exists());
0872:
0873:                    ScriptParser p = new ScriptParser(1024 * 1024);
0874:                    p.setFile(exportFile);
0875:
0876:                    assertEquals("Wrong number of statements", 3, p.getSize());
0877:                    String sql = p.getCommand(0);
0878:                    String verb = SqlUtil.getSqlVerb(sql);
0879:                    assertEquals("Not an insert file", "INSERT", verb);
0880:
0881:                    LobFileStatement lob = new LobFileStatement(sql,
0882:                            this .basedir);
0883:                    assertEquals("No BLOB parameter detected", 1, lob
0884:                            .getParameterCount());
0885:
0886:                    LobFileParameter[] parms = lob.getParameters();
0887:                    assertEquals("Wrong parameter", true, parms[0].isBinary());
0888:                } catch (Exception e) {
0889:                    e.printStackTrace();
0890:                    fail(e.getMessage());
0891:                }
0892:            }
0893:
0894:            public void testSqlUpdateExport() {
0895:                try {
0896:                    File exportFile = new File(this .basedir,
0897:                            "update_export.sql");
0898:                    StatementRunnerResult result = exportCmd
0899:                            .execute("wbexport -file='"
0900:                                    + exportFile.getAbsolutePath()
0901:                                    + "' -type=sqlupdate -sourcetable=junit_test");
0902:                    assertEquals("Export failed: "
0903:                            + result.getMessageBuffer().toString(), result
0904:                            .isSuccess(), true);
0905:
0906:                    assertEquals("Export file not created", true, exportFile
0907:                            .exists());
0908:
0909:                    ScriptParser p = new ScriptParser(1024 * 1024);
0910:                    p.setFile(exportFile);
0911:
0912:                    assertEquals("Wrong number of statements", rowcount + 1, p
0913:                            .getSize());
0914:                    String sql = p.getCommand(0);
0915:                    String verb = SqlUtil.getSqlVerb(sql);
0916:                    assertEquals("Not an insert file", "UPDATE", verb);
0917:                    String table = SqlUtil.getUpdateTable(sql);
0918:                    assertNotNull("No insert table found", table);
0919:                    assertEquals("Wrong target table", "JUNIT_TEST", table
0920:                            .toUpperCase());
0921:                } catch (Exception e) {
0922:                    e.printStackTrace();
0923:                    fail(e.getMessage());
0924:                }
0925:            }
0926:
0927:            public void testSqlDeleteInsertExport() {
0928:                try {
0929:                    File exportFile = new File(this .basedir,
0930:                            "delete_insert_export.sql");
0931:                    StatementRunnerResult result = exportCmd
0932:                            .execute("wbexport -file='"
0933:                                    + exportFile.getAbsolutePath()
0934:                                    + "' -type=sqldeleteinsert -sourcetable=junit_test");
0935:                    assertEquals("Export failed: "
0936:                            + result.getMessageBuffer().toString(), result
0937:                            .isSuccess(), true);
0938:
0939:                    assertEquals("Export file not created", true, exportFile
0940:                            .exists());
0941:
0942:                    ScriptParser p = new ScriptParser(1024 * 1024);
0943:                    p.setFile(exportFile);
0944:
0945:                    assertEquals("Wrong number of statements",
0946:                            (rowcount * 2) + 1, p.getSize());
0947:                    String sql = p.getCommand(0);
0948:                    String verb = SqlUtil.getSqlVerb(sql);
0949:                    assertEquals("No DELETE as the first statement", "DELETE",
0950:                            verb);
0951:
0952:                    String table = SqlUtil.getDeleteTable(sql);
0953:                    assertNotNull("No DELETE table found", table);
0954:                    assertEquals("Wrong target table", "JUNIT_TEST", table
0955:                            .toUpperCase());
0956:
0957:                    sql = p.getCommand(1);
0958:                    verb = SqlUtil.getSqlVerb(sql);
0959:                    assertEquals("No INSERT as the second statement", "INSERT",
0960:                            verb);
0961:                    table = SqlUtil.getInsertTable(sql);
0962:                    assertNotNull("No INSERT table found", table);
0963:                    assertEquals("Wrong target table", "JUNIT_TEST", table
0964:                            .toUpperCase());
0965:                } catch (Exception e) {
0966:                    e.printStackTrace();
0967:                    fail(e.getMessage());
0968:                }
0969:            }
0970:
0971:            public void testSqlInsertExport() {
0972:                try {
0973:                    File exportFile = new File(this .basedir,
0974:                            "insert_export.sql");
0975:                    StatementRunnerResult result = exportCmd
0976:                            .execute("wbexport -file='"
0977:                                    + exportFile.getAbsolutePath()
0978:                                    + "' -type=sqlinsert -sourcetable=junit_test -table=other_table");
0979:                    assertEquals("Export failed: "
0980:                            + result.getMessageBuffer().toString(), result
0981:                            .isSuccess(), true);
0982:
0983:                    assertEquals("Export file not created", true, exportFile
0984:                            .exists());
0985:
0986:                    ScriptParser p = new ScriptParser(1024 * 1024);
0987:                    p.setFile(exportFile);
0988:
0989:                    assertEquals("Wrong number of statements", rowcount + 1, p
0990:                            .getSize());
0991:                    String sql = p.getCommand(0);
0992:                    String verb = SqlUtil.getSqlVerb(sql);
0993:                    assertEquals("Not an insert file", "INSERT", verb);
0994:                    String table = SqlUtil.getInsertTable(sql);
0995:                    assertNotNull("No insert table found", table);
0996:                    assertEquals("Wrong target table", "OTHER_TABLE", table
0997:                            .toUpperCase());
0998:                } catch (Exception e) {
0999:                    e.printStackTrace();
1000:                    fail(e.getMessage());
1001:                }
1002:            }
1003:
1004:            public void testXmlExport() {
1005:                try {
1006:                    StatementRunnerResult result = exportCmd
1007:                            .execute("wbexport -outputdir='" + basedir
1008:                                    + "' -type=xml -sourcetable=*");
1009:                    assertEquals("Export failed: "
1010:                            + result.getMessageBuffer().toString(), result
1011:                            .isSuccess(), true);
1012:
1013:                    File dir = new File(basedir);
1014:
1015:                    File[] files = dir.listFiles();
1016:                    int xmlFiles = 0;
1017:                    for (int i = 0; i < files.length; i++) {
1018:                        if (files[i].getAbsolutePath().endsWith(".xml"))
1019:                            xmlFiles++;
1020:                    }
1021:                    assertEquals("Not all tables exported", 4, xmlFiles);
1022:
1023:                    File bfile = new File(this .basedir, "blob_test_r1_c2.data");
1024:                    assertEquals("Blob data not exported", true, bfile.exists());
1025:                    assertEquals("Wrong file size", 21378, bfile.length());
1026:
1027:                    bfile = new File(this .basedir, "blob_test_r2_c2.data");
1028:                    assertEquals("Blob data not exported", true, bfile.exists());
1029:                    assertEquals("Wrong file size", 7218, bfile.length());
1030:                } catch (Exception e) {
1031:                    e.printStackTrace();
1032:                    fail(e.getMessage());
1033:                } finally {
1034:                    util.emptyBaseDirectory();
1035:                }
1036:            }
1037:
1038:            private WbConnection prepareDatabase() throws SQLException,
1039:                    ClassNotFoundException {
1040:                util.emptyBaseDirectory();
1041:                WbConnection wb = util.getConnection();
1042:                Connection con = wb.getSqlConnection();
1043:
1044:                Statement stmt = wb.createStatement();
1045:                stmt
1046:                        .executeUpdate("CREATE MEMORY TABLE junit_test (nr integer primary key, firstname varchar(100), lastname varchar(100))");
1047:                PreparedStatement pstmt = con
1048:                        .prepareStatement("insert into junit_test (nr, firstname, lastname) values (?,?,?)");
1049:                for (int i = 0; i < rowcount; i++) {
1050:                    pstmt.setInt(1, i);
1051:                    pstmt.setString(2, "FirstName" + i);
1052:                    pstmt.setString(3, "LastName" + i);
1053:                    pstmt.executeUpdate();
1054:                }
1055:                con.commit();
1056:
1057:                stmt
1058:                        .executeUpdate("CREATE TABLE person (nr integer primary key, firstname varchar(100), lastname varchar(100))");
1059:                pstmt = con
1060:                        .prepareStatement("insert into person (nr, firstname, lastname) values (?,?,?)");
1061:                for (int i = 0; i < rowcount; i++) {
1062:                    pstmt.setInt(1, i);
1063:                    pstmt.setString(2, "FirstName" + i);
1064:                    pstmt.setString(3, "LastName" + i);
1065:                    pstmt.executeUpdate();
1066:                }
1067:
1068:                stmt
1069:                        .executeUpdate("CREATE MEMORY TABLE BLOB_TEST (NR INTEGER NOT NULL PRIMARY KEY,DATA BINARY)");
1070:                stmt
1071:                        .executeUpdate("INSERT INTO BLOB_TEST VALUES (1,'ffd8ffe000104a46494600010101012c012c0000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108013801ce03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f61d6bc49a47875629358bf86cd25242194e3711ff00ebac81f14bc0e47fc8c765f99ff0ae07f688da34af0f83f756e255c7d545780bb1248dd9142572e10e63ebcff85a3e07ff00a18ecbfefa3ffc4d27fc2d0f04ff00d0c563ff007d1af910ef43feb33f46a45418ff000a48d550b9f5e7fc2d0f057fd0c763ff007d1a3fe168f82873ff0009158feb5f23ed5fee0fccd3fe6ecb17e9fe354d25b95ec0faedfe22784523476f10598490650e4fcdfa53a3f885e15906135db5627a726be4886662c22763b41f950f415d069cc378f4ac6a49c56811c327b9f545bf89348ba5dd0ea10b8f63569753b16e45d478c7ad78be80e444a4007238aed6ce50613fa566aab7b933a0a3b1da477f6b27dd9d0fe3527da21233e6ad61dadbed8b247279a94fc878d9ff0002ad3da6867ec88350f1d786f47be6b4d4358b7b79d00263724100f43d3be7f4aac3e27782c71ff091d97ebfe15c5fc58f06beb1a52eb1616e64beb418755fbd2447b63b9079fcebc23681c7047f7b6f4ffebe69a95cda14148fadad7c75e19bee6db5ab6933d949ad48f57d3a50c52f23603d0d7ca3e1fd525b7952dadad65924279c7007d6bd66c6f7555881d96b196c70fbcff2c50e7622542ccf5a5bcb576c2cca7f1a9448b27dd93f5af37b5d4f53599165b8b6463d92227f99ae8e19b51043fdb6303a9fdc0ff1a5ce43a6d1d46319c1f9eb375ad7b4cd02d56eb55bd8acedda411877e85b04e3f206a08af2ebc876796076519fba471faff235e3bf1abc4f16a305968a6231dc413f9f2a160ca7e5c2907aff0011ec3a5353b8e34dc9d91e9dff000b3fc15ff431597e669a7e26f828ff00ccc5647f135f2ac842e0ed6e7d6a36620fdcc7d6aeed9bac29f589f89fe0b231ff00092597e67fc297fe167782cffccc963ff7d1af93bcc4feeb7e43fc698db0e7112e692b87d58fac8fc50f068002f88ec0f23ab91c77ed527fc2d2f057fd0c767ff7d1ff000af91d64601f27e6ec29329fdcff00c73ffaf4297987d5cfae3fe168f82bfe863b3ffbe8ff00855dd1fc67e1ef105f359e93aa41773aa19196324e172067f322be3a2ca57fd5afe15ea9f003fe47bbb239274e7ffd18955b2d4ce74524d9f4a6e346e34df31ffbbfa537cc6f5a673f32311bc71e115254f8a345047041bf8bff008aa43e3af087fd0d5a1ffe0c62ff00e2abe2ebae6f6e0ffd3463fad41b01ed53734e4dac7db3ff0009d783ff00e86bd0ff00f06117ff001547fc275e0eff00a1ab43ff00c1845ffc557c505714ee1a4e507d168e61b833ed61e3af079e9e29d13ff06117ff00154f8bc5de1c9b88bc41a5b7fbb7b19feb5f18c01848096dc845773a0c462f2f80ad27247a7b54ca561c69dcfa8175cd2241f26a764dfeedc21feb520d574e3d2f6dcffbb32ff8d7936970008a5b04d6e5bdbb862ca148c74358fb6f22fd8f99dd4bac69b101befed573eb328feb59f2f8bb448a7684df8675ebe523483a67aa822bcfb5f9a24458a4011f19563c107fc2b905d6d1656f9b0e320827918aa556fd03d8799ee43c5da2bfddba73f4b697ff0089aa979f103c2fa795179ab476ecfca89a3742df4c8af29b1d6d279154900d6c5fdad878834f5b2bd804b1c990871f327b83da9fb5d7617b0f33b5ff0085a5e06ffa18acbf33fe14eff85a7e08ff00a196cffefa3fe15f34f897c257be18bc0936c92de4188e70383ec7deb1554e391fa568a770f647d5e3e27f829c63fe123b004fac98a78f889e0e9393e26d2bf1b851fcebe4d2873f328fad30c5b86c4186230314b9989d23eb81f103c1d8c7fc251a40ff00b7c4ff001a53e3ff000728cffc251a413ed7887fad7c976da4cd0e0dfdbc8622776719ae974ad37c3734b18924b666c8cc6edb7f434eebb99fb37d8fa30fc43f06e47fc54fa567febed29cbf10bc1a7fe667d2bf1bb4ff001af34b4f0178575554692c22653d5e2908fe46a6baf811e1ebd889b1bdbab371d09224427e879a39913cad743d066f88fe0e8515a4f126998270025c2b91f50a4d41ff000b47c13838f12d88f6c935e27ab7c06f13580696c6e2cb51894121558c6e7d802319fc6bccb51b1b8d2ef26b2bdb6682e2272af1b8c3034d7909ea7d75ff000b43c13927fe124b1e7fda3fe149ff000b3fc1007fc8c7618e9f7cff00857c715a3126205fb84704e450c7185cfadffe1687823fe865b2fccd07e28f82431ff8a92cb1ec4ff857c8eeeb9c1fde7b9a8d864e0aaafd050fd0d151ee7d787e29f81fbf892c7ff1eff0aeb6c6e61bcb58ae6ddf743346b221c11952320f3ed5f0a328da7819afb73c29ff0022a68fff005e307fe8b5aa6ac44a9f29e4bfb45ffc81f42ffaf997ff004115e001323ad7d01fb4582da46843bfda65ff00d0457818e9445268e9a0af122dbcd4cadb4e41a140269c147a524ac74a85d088accd85c8352419593a6723ad2285dc01e0549121328041e286cbe4d060daa410b91e86ba1d2c332fb8e6b0c47fbd0bdb3fd2b73450cf7222eec3ad635c24acd1e8fe186df00078c715de69516ec03f75793fed5709a0a8590469ce3a9af47d357f740e3d2b08ea73d5343cf237038181c7d2aacf7411739047422894ba925b1b3d4f6f7ac4d5755b5b5679cee554f99b68dc197e9d455bd0ca2aece8a0b80e40ce7773cfeb5e31f123c01269d772eb7a544d258cadbee224193131eac075dbfd6bbfd3bc4567718114ebc739cff2adc82f12724336f0c39f7a148d629c19e3de06b0482dd6e59417930cd9e7f23dabd24cf0b4586009cf07d2a3bdf0ec304ef3e9aaa8ac773c23a0f715c9eb77f3584b1b11840e33f4350dbd596ad2675aa913cea7ef11c8ada82f038db922b82d335613cdbc93f37039aeb6c5c1895b24ff004a69dcce71b1bb0bbf96f9f9b3debe76f88eec3c79a8231180b18dbb73c6d15f47d8a877c01918af2af8d1e1c4416faf5b2edc110cf81d47f09fe95a4340a324a76678e795fbdddbb8f4a8a488f43e52fd38ab98ebde90ae6b4b9d9b14d62225c1ec334b2c458e47618c66ad9000a6e011c53727725a77b99fe49fee37e469bb3af26a629f9d23aed722b6d0a70206001c0af57f80c31e3dbdff00b07bff00e8c5af318d772ba1af50f80c07fc2757b9ff00a07bff00e8c5a86f5396bc7dd68fa2a8a28a93cc3e19bb5db73707d646ff00d08ff855751c66adddaefba9b1ff003d1bff00427a851371c019a76b9d74d6971bb6a445461c44c7e86a6f217663bfaff4c548ab82a49fba3d3e94492e853698d899bed1f77e5515e95e11b24ba823b8908c9e715e7b6d0b344d273b4b679f4aec3c33aa8b49044cd80df7456735645c1599ea7a7a80c63c8e0d74016e56d736cb031ce30e48cfe35c5596a23cdce46480735d9d85d79d12fcd818e40f4ae54b52da3cff00c51e3cd0ade7b9d2f52b591ae606d922052403d461abc966d604fa933da87580b642c8d935d97c5cd0561f1541776cbfbcbd8cb4c0f40eb8191f8115e7b05bb4570d1905b1c9c64574c546c649cae75f657122ca87eeee1c31e9f4af43f0e5c4864549475017e6ae1fc3a22d434f6b063b5dbfd5961cab751fe1f8d745a26a0c192dee7e4b88ced65f4359c91b2d8ebbc67a526b7e1ab9b5dcbe66ddf10ff6c0e2be7f64208ca956c9c83d41e33fe7dabea2d362b254585d04923a83b98e463d6bc8fe287850e91acff6adadb91697873215c6d8e4eff81ebf8514e5d06b73cf15370e3bd4fa6f946ed666c6d538e6a23c0c039cf0314acbe4da7cbc1239ad5a33a87736b756d78020c003a735bfa769362086304523bf5dc80ff3af30f0c4f24f7ca8f9da0f6af5bd313e5c939ace5743495ae5883c3f6b0ce0da43f6793a936ec507e86bb0b437fa6d9a98af2495f19db30de3f13d7f5aafa54064224083157ee8860060038c0159733b89c6e575f1eda593245ad20b3776dab3236f889009ebd4138f7fad7ccdaedf8d6bc457faa15c8ba9ddd0b0e8b9e07e55de7c52bcdf7367a72be766659003c67a0ff1af3e2a08e95d117a12a8a45568a355c88d49ed8507fa52ff00cb3cf963fddc54c57238c669857e5f5ab530e5b10793fbedff00c39ce3bd12c25f9e8c2ac743514b11939070dfce88eba3114ca175723b57db7e16ff00915347ff00af187ff405af8b1d0a42d93fc200fcabed3f0b7fc8aba47fd78c1ffa00a7133acee7947ed0cbe6695a181ff3f32ffe822bc00293dabe80fda04e74dd08ff00d3d4bffa00af0351815515a9d3875788a38a503352f967007978fc7ad385bb0c0c8a6e4ac75c6d712240afb99947e34443320ce3d4559540aa00cd2a2ed403ad63cc527b8bc8c71f5ab965235b5c0703b1155986460715a1e583146c31c73f8d4cde844a27aa7863c892ce29987ef0ad77ba490f6dc11d7b8af1af0b6aac89f662d8dbc8af4bf0f6a5b82a310549e6b18bb3396a47a9a1e2bf11278574e5bfbab669edf7843e4e372124e3a9e95e61adf8ae3f1948b69a568e6198f59e670b8fc14f35e87f1174f3aaf826fd048c0c2a2e073d4a9ce2bc1ac2f25b65516ee55a43f7c7615a3d8ba315cadf52caa6aba55ecd1cb13ee84fcec9c85fc476aedb41f109b942aadfbcc7ca09eb583a4bbd9484ccc0a4c3e7dfdfd7afb573d657cd6baabb4590a18951e83351bec6ad268f7fd2ef0ce1b7a619b18f6c5719e3cb40b6970c4025555860d6e78635d82fe38d1d9565200383cd749aef86edb5ad125b65c098a921fd491eb4d2be87226e12d4f14d0ef01753bc02bcd7a4e9d7825b700f031dabc69d6e744d5ee2c2ea3f2e681ca32918e41e08f6c735df787b5512dba8dff5a5cae3a9acad2573d4b4cb81e58503da97c4fa445af68577a74a06d994aa363eeb7506b134bbf0255c9e73815d4db4e278b6f03a62a9339dfbb2b9f265c5acd69772db5c4463962628ea7b38241fe548dc0cd7a7fc5ef0ba59de26bd6ab8170c12e54740d8f95bf100fe55e5e5739ad0f469cf9e37434a91494f233d714d29f3645171b8f62168559b71cfe74e68d59707a548471914d6e955713b94d32049b7d3826bd47e040ff8af2f7a7fc78bff00e8c5af373180ac33c1af49f813c78f2f0ffd383ffe8d5aa4f531aff0bb1f43d28ea290f5a51d4523c8ea7c4132ff00a64c4f694e3fefb351bc4c473e50fa5589541ba9baf1231ffc7cd36340a0819a6e76763b62ac84840f2f191ef8a9318f6a5c0f4a5c1cf4a4f577432de9f728b1340ebb467009a7b16b7977210547435500da700548092300f0696fb9a5ac75ba26b81cc609181c119af4af0fea2adb72de9c5786432341206438aeefc3daca829b88dd9c1e6b19c5741b67a7eb9a159f88f4c10ce804880f972775af33b4f0cae9f14b14833246ec8c4f7e78fd2bd0f4ed5c6e8c92307834dd4f49b8b979a7b648f6b73c9eb59a6d682b1e74b6e2c643310a00ef815cb5c6ab349ab4d7719c6f60403edc56cf8aa6bdb59fec7343244b8c976e87d81ae5b6804641c1e6b78abad4be5b2b9e93a2fc46b78a2b75d418472460a8623ef2fa7156fc5ff1274bd67c3d75a6da5b9792750be611855391c8fcabc6639cdc5dbca5d7393b573d055912719c7eb5d7470f07ab38a759ded12e46b149323b9c2ae70168bc5132158ce09ee6aa89180f40381da9c1c91935d4a8d36cc9d49bdcb5e1757b4d4c2caa3938e95ec9a3c0af1a37535e316f3b4732caa70ca73c57b5f87268e482094e3e75071fceb87174f93546d46a369a676da7425210580e9d2ab5ff00041c75ad389710ae3f885655f67705af3d6e7423c1bc76e64f195f648017681ff7c8ae67db1c5745e31cb78bf52c8e9201f86d1580540aeb8ec696d08f60f7a6f6c7352b023b7e748c87ef103068d3b02f32391738a4a79c7e14847a55f32ea6528be8412826271eaa6becef0bff00c8afa47fd78c1ffa00af8ce55c444fb57d9be18ff915b49ffaf287ff004014d230aab44795fc7f1ff12ed0bfebe653ff008e8af08971f77bf7ff003f957bb7c7e01b4ed10374fb4c9ffa08af0b67890796ccaadd0e7b1a5d4e9c372a826c910ab74eb4220c7210e4ff000d2aa3100213f2f193d1aa53c62a5b3b2c92ba13ad3f18a5c628a9b8e31b0d04155c0fc2ad5bcc1008db1b49a8293f0a4f529ab97e3bb7b4ba5656c2923915e8be1ad5436cdcc307debcc47ef63d8c3a74ad8d1751366fb5bb7159c958e79c753e88b478afaccc5328759176b29e854f5af17f117835f43d5ae678d956d623ba2523aa1e7ffad5e81e1dd6c4b6abb181040efd2b53c41a241e228504cee2229cb27d78a2f7473c64e12380d13484d4acd26b88b7bb7207615cc78b3455b0f1045158aa64c619c06e95eb7a7e9ada3db18e421d230364a070c3dfdebc47c6dac35cf89ee5627f918ed27d40ff00ebd5528734920955b5d8e3aaff0065ccaf2dc0b7997b4677e7ea074aedf45f8c91476ca97303bc8836ee58f1bfd3dabc995233c9193d726a5181d2bd3a5828ad5b38ea622eec6d78af5a6f13eb571a84b1180bedc0539c01d3f1a5f0edecb0dcfd9e47da5c81191d18fa5628618a5203214ddb4e386f43eb5bd6c2c250b448857945ea7a42f889ecd30ebb6446c609e73eb5e85e1fd712e628d91874e79ef5e1faadddd5c68c8f731a2bc6724e705863839e87e95a1e06d7655ba4469386e80fd2bc4941c7e4773b4923dabc556235af08ea168465da0253bfcca370fd462be6c2bc8c74da3fefac8afa8346985ddb05c83c57cf9e29d11f40f115e583025124dd11ebba363953fafe95507737c33b3e56619423b71ed4de952146ddd3ad34a9f5a67672b1a0834dd8be94e2303b5211c77a04d1115e1f38e7d3aff9eb5e97f035157c75758ff9f07e3feda2579ce074af4af82031e37baffaf17ffd1895499cf88f819eff004a3a8a43d6947515478bd4f89e5e2e661cff00ac6fa7de3408c639eb52c8a3cf95863fd637fe8469a3ad4cb7b9e8c63a0981fdea72afddfe942e73cd3f803914257d4ab25b08ab92d4e00628033c8e829e30bd29ec3516c15411d79a9a1b8920712215057d2a32bcd1bbe5c7e34ac8b715d0f41f0ff88616b50b31c374eb5d9e99e228dd1519811d39af0e49190fcae40f4abd6bacdddab7cacac3d0d66e04f2b3d8f558b4dd66dfc9b85460791ed5e73e22f09cb011369611c6306324f22a947e2cba47c3c185ff0065aaf5bf8b99a65de1914f038cfe7495d10d3b1b9f0a7c1be1ed7345befed9d315f50b39b12ef770483c838ce3d4647a56adef803c3e266316988aa4fca1647e9f9d53f0cf8c2cceb50db24cbba55752c7e50c073f31fc2bb07d46da5da41420f3c4ab5db4e5268e19a49d8e324f01e8ab964b1c1f5f31bfc6b3ee3c1da7c6095b4231fedb7f8d7a009a16046d43ff006d053648e170731a9cff00b757cd222c8f29d5746d3adb43bbb8861f2ee604dea43920e08cf53e99adbf08ea9e6c517628c5003ec71fd2b4bc59a5da3787efc8468e4f21f0438c1e3a5711e06bb0220a5c93d5bea7358d66dc6ccda8a5cda1f41e9f7a278429c6556a9ea4e164196ed599a03b6d27391b69dab5ca0b85ddc2aa966e7b0ae04b53aac78df8dc67c5da81f5607ff1d15ce819ad2d6af3fb4b5abbbbe82490e00f41c550038eb5d2b6375a218c37f6a6941ef9f6a908ef9a40081ef4ee0d26438a4a969857e9fcaaae438db72361853f4afb1fc31ff22b693ff5e50ffe802be3a61c1c8afb17c31ff22be93ff5e50ffe8029c4e5afb1e57f1f3034dd109e82e25ffd04578e780ecacb59f1d58d8ea219edae7cc46cf6ca9c7f4fcebd7ff6867f2fc3fa43719371201f8a8af1ef87b750d9f8e34a9ae24088b21f98ff00788c0fd4d3b1929da2906a7a749a26bd7da44d92f6d332a93dd3a83f963f3a8ca823a5769f18ecd2dbc4565acc4a3cab98f6311dc8ae300ca923a019ace5b9e9e1ea7346cc0734b40e69db7e6f6cfad49d36176fba7e74794dea3f3a3610cbef4f281f9c7e22aac55ae300c38dbf9d4c1893bf272298abcf18a5c9460c3a7b5459c899c22d1d5f86bc406c54c727287a135eafe1df1043736e232e30d815f3ea87f3778703d856f695e237d3c85627683d735128d8e69d1bab9ebbe348f514f0f5d5e68c8d34b17df83ae57d40f515f37eab3b49748f202b3a656443c10739e73d2bdebc39e338ee19448e0838e1aa1f889e00b3f16597f6a69bb20d4e34273b789971f74e3bfa55d2959ea714e0f95a6785c6c4a8f9b9a9370cfbfbd518e478e431b2ed604ab2ff00748edfa1ab40a95c839af6a9cd348e3b13ab1cf4a915b8cd55f3001eff004a72bb6f0322b652b90d1e83a2e989e21f0d3a339568098d8c4dc918ee0f15c5da4cfe1fd6e681d8e226c8279e2bb1f8757891ea17904a4959a1dcbb467918ac1f13a23f89ee1d01da304e462bc8c5c7926d773bf0def451ecfe08d5db50890adb4889c0ded803eb581f1934c882d8ea8a3136e36edee0fcc3f2ad0f87f72268a28b207cb58ff17751df7b65a6e4650199c03d09181fd6b96074534fda9e67b453644523278a51c9e94a5467dab567a441b7e4cd21041c77a98003b2fe148c9d8d662b10b77af4af82231e37bacf6b07ff00d1895e6ee39af4af8263fe2b4ba3ff004e2fff00a312a9239f13f033df0f534abde9b4e5ef567871dcf8b65ff8f99c7fd347ff00d08d20ef4e9815b897fdf6ff00d08d314fb734e5b9e8c761db7d3fc69db194d2a8dbf5a51c9a9b9aa80bfe34a0601f6a08e0118a553ce3e5fc7a54941c7a9a5dc3d699453b05891460fa530823ad387273cd387142dc571b8ef8e454d6d124b731ac87119eb51295c827a538452b80618dddba828a4d244cb6327c416f0daeb12456ed98b01b23dfad5359a45e92c85fa9e4d13a15b925d8e727ef0e7f1a6c2dbe7488ae379dbff7d575c5da3a9e5cd3721ff699d1995a56cedeef5661bc9c9c24ee147f10635eb1a6785fc39a75be9d1ca8ad24d70b14ad35bb6555b233bf843ffebac1f8a5e06d37c1da85a0d2ae27960bb0cce92306209f4c01c53a55b9df2d8254ec70b3c974c8d99e620f18de7fbd5b3e0495c6a262ede9f53592a4b215c15f7ae87e1cdb4926a6d2792cd19c0dfdb3538956572e85b98f7bf0fc18b205b1922b8df881a83d8da4c1180790f9487dbbd773a72f916c067000edee2bc93e225d19755b7b70df2c6ace41eec5b1ff00b2feb5e6c3591dcb738b503cc182686fbf1fe14a1738fe165a6ffcb5fc7fad74a375b015f947a52118ea3ad2e4d358e314890ebd45348e30c29547cc314addbd68191c83e43d2bec1f0c7fc8afa4ff00d7943ffa00af901972b9afaffc31ff0022be93ff005e50ff00e802ae272624f20fda354be8ba1ae7e637527fe822bc53c3112a788ec1ee32d10950903af506bdaff6897ce97a12275171291ff7c8af1ad22da49752b231b10c275395fa8eb5a1c4b73da7e2469b06ade0d2b10769a121c74c00393fa578e5801341b564c94ec6bdde78e593459518230f2b6935f3f7d9e5d3f5399376d4463bbe953257475d19f2491a2c36b918c11fdea6a9ed8ab0479f073cbaf39f5151a852036dacec7ad077d476d342b647cbcd3f34668b9a5c616c8a4a50714ec7cd9aa0d85ed41a28a910eb5f3d651e4127b90a6bd0fc3be377d2e68e2bb6291e7f791cc3047be6bcfecafdac2e566540e4755f5af424f07c9e32b18ee2f9560545ca451e3f327ae6b27a491c75d58f27f18dcdadd78c355b8b2dbf66925ddb872325474fc73546262c81860d745e30f01cde1f983c4e1e395b08bb7e63f4151695e12d66fb67976aa848ce6625457a146ac231d4f2a74e57325509032b4e2c10ee38c7a03cd767a8f8064d2ad216bbb9696ea66db1c312e067d49f4ae97c31f0dadc8492f40773cf3dab4962e11d82341eec7fc2bd16e2382ef59b88ca45e598e12cb82c4f53835c678a2512f893506f94859367d702bdc2ea33e1dd1ee25697cdb68a262dbb19181c57cff75319ef279cff00cb472ff99ae3a953dacae7a184a5cb7ec77be04d5112744276b0c6306ab7c56453e2e86751f2cd668f9f7dcc2b8eb4bc9aca71344f861cd5ad675cb9d72ea29ee140f2e311ae3d3fc9358c5599d31a6d4f98cfc9278e9437dda31ec294e6b43a0691c0a6d2939a77e14c7b11baf61d857a3fc13ff91daf7febc9bff462579d1fbf5e8ff05571e34bac74fb13ff00e8c4a5d4e7c4ff000d9ef14a3a8a4a51d4533c147c653f3732fcb8c3b7fe8469aa39e78cd4b30cddcdff005d1bff004234dddcd27b9ea4237429c13d6818cf14a073c521c66a4d451cff0077f2a70c03480f231f8628dc3d6810ceb522d276c7bd2fd29dc1ea27f09a5a45dd8c738a0f0052b00e5c071e99e6bd4fc291d9c964822281b1d315e54b9cf356adef6f2d087b69da3719c60d0d58992333c572c7278b2f4c68028948c8aca843a48af1e55861d58750568b97912f6496e06e76ce4fbd4a37b22903e56edb79aed8a52563cb9a6a4cd69f5dd6aff4f5b1bbd52ee6b6dfbfca794b26ece738e9d6a5bbd6750d49e36d46f1eede35da8d2632071dff000ac60eea768fbbeca7f9d3a393042ed3f8d6b1a715b19b9bb58b72b1685b1c60d7a5fc34b5dba35bb0407792dfad797cb288e255e84f7fc6bd77e14b1974ab74182550803f3ff1ae5c63d2c8e8c3abdcecf53bf8ac6dda467200405b1d80af0dd4ef5b50d4ee2edb3891c95c9ce07615de7c4b9a5b0b986c526dc278f738e98c1c1af3a2a08e2b929c7a9e8423a5c7531fad3e99ff007cd6e8d6436931f77269c1b6f61f8d275fee9a52210c031cd0464e69d8a315366171b8c035f5e7867fe459d2bfebca1ffd0057c867a1afaf3c33ff0022ce95ff005e50ff00e802aa07262ba1e33fb4092d69a39cf4b89867fe002b82f8710c5a86b12c040df19c807a75aeff00f6854d967a23608437129ffc745797f836e134fd7ad6e1a461e6b88ce0f626b4e87227a9f435b59edb778a411a893a9af19f8a1e1e934ebbfed280c6f1dc0dae1074e98af5f92f348b4842dc6a0a9263386957007e95c178e2f745b9d2a558b504924da768f30119fce9366914f73ceb4b944b0a73f30e1b14e23692bd893597a4c8b05c3ee65653d7eb5aa39c9239acada9eae1e5cd1f3117a76fc29cbf7a929d8e9cd51d83a9bebcfe34ea6eef6a44a1339e334ec02293ff0042a5e84d0308dc47324b8c85607f2af54d0fc7fa65869a44a434bb70100ea6bca01c639ce7d2819126e18ddeb5138dcce74d4d1eeda0dac3ac5db6a17d1a492bf29b864460f4c7a5696b5716fa55a07f2d4ccec23881f5f5af23d13c757ba3c617ca59001c64ff003aabadf8d355d66fe0ba9da24580e638a3fbb9f7ef9a8e56717b19395ba1ec1a6e96f704ddcfb659cf258f6f615ab235b69d034d2b242b1af2edc28fad798587c5216167e53594924806382319ae57c43e2dd47c44fb6790476c0fc90c64e3fe05eb4d443d836edd0dbf1cf8dc6b44d858311641b2f20e3ccc1e9f4cfe75c30c1ffd04d28180c39c50003c1ad231b1db4e0a31b2176f149834ecf1f787d69a32c093f8532ee3b3c1e681d7b7e1483a9a51d7b7e140c4fe2fc694f3d3149fc5f8d3bf0a04348c935e8df05bfe475baffaf17ffd1895e72c700d7a3fc17e3c69738ff9f07ffd1894ba98621fb8cf77a72f7a6d397bd533c28ee7c6d71febe5ff007dbff4234d634fb85ff48971ff003d18fea6983dfa54bdcf561f0880669f40e94734995b8d1d7de9a78a50714b9f933ef4c62e7e514ca2a51d4fe3436026ecb03c52e79a4c700e3b514af61317d28cf403b518a1783ba9ea08d0d3bc34bafbed96728aa70b81cd6d49f0aee204cc3ac30079c32d73d6b793d949beda4646f6e6b53fe12cd67660cc0fb94155792d998ce8a93b91cfe05d461048d54b11fec5529bc35790a64ea248039f907153cdae6a338f9e765cf5217154dae279321e6761f5a71a93ee47d5e3d4cf1a6b35e219ee4cd1a9e73c62bbef016b90e977e207c2a331db9e84571ab81c601cd38e430c3631fdda9a8dbdcd61454763adf88fa8477de265314ab22a403241c8049248fe55c9938eb41cb2e1b1f3530c6c40e94a3a2365a03f5a6d3ca67bd32b4264b517f83f868fe0fe1a4a2958570a29ce3bd3587d28b8dab098f973eb5f5d7867fe459d2bfebca1ff00d0057c8bfc06bebaf0cffc8b3a57fd7943ff00a00a23b1c98ae8790fed1602e91a117c6dfb54b9ff00be45790786b479f55b874198ed6360cd2ab6187b0f7af5dfda3b2344d0f1ff003f52ff00e822bcebc1fa80b5d2d95b692ce4d151b8aba30a34f9e4773a4691a458465230ccc79679006627be49adbfb2d8cb19416d148a4721a3073f862b99b1be46979001eb8ae9f4fb857c60018ee2b0536f73a9d3e5395f147802cef2c64bed1a05b6be87e630c67e4940e7a7f7be9c5702a77a7208cf507a8faff2af7a75720346707d6bcbbc65a30b0d47edb0a910dd31dc31c2bf5fd7ad5266f86928c8e6d7ad251de940c2fddad0f404a5ef8cd039c6083413c76140005c8eb4a5b8a407279a53f7b8a040471c1e29a339ebc76f6a5cee181f98a4d99707d38a403b3ef46ef6a42b81d6946476a0340215860d1d87a8a377b503a50160c12297af4341e5b6fb66a19a51126e2700504b9244779769689b9b927a0ace5bfbb7732301e5a603ed1c0c9aa37170f3caf28dacabd9aba5d1c58af80fc4535d090c8ef1476eca380d9c8fe46a923cca9896e7eebd10aadb8679c6453fb6471556d1cb5ac4ddcafeb564364f4a4cf4a0f9a298b83fecd37f8bf1a3f0a5ea78a0b1703a57a37c18c1f19dd7fd78bffe8c4af386fbadf4af46f82dff0023addffd78bffe8c4a9ea73e23f86cf78a55eb494abf7aa8f056e7c73703fd2663fedb7f334c6fbb524e337127fbedfccd46454bdcf5a1b21a01349525263774a572ee328abf6ba5df5ee3ecb6af2fa90302b4d7c1be2064cae96edf461fe345c5cc8c0249e307f3a5e3b74ab5776173a7ccd15edbcb03e3eebaff002e2ab6785e304f7a2c36ee2514981e94bd29087537069d456ae298828c1feed20a5a5a4901237dd351d3bfef9a451934ca96ac72671ed4ea0fdf34522d6c14514e7fbb4036379fef1a4da3d282fb4fbd4b6b65777ac12d209666efb57345c4da216f63f4cd191eabf956ec3e0bf114e3e4d2dfa7f13a8feb515d783fc41650bcb2e9371b5464b261b1f91a8e66473a31297f83f869caa09da7191d723069adc2e32bf81abb85847eadf535f5cf867fe459d2bfebca1ffd0057c8c06476afae7c33ff0022ce95ff005e50ff00e8029c7639313d0f23fda2a269b41d10a8e16e2563ff007c8af11d1eefcacc0c40e72a7debde7e3bff00c83345ee3ed12f1ff0115f3fdf5a9b6759a2fbac73c7f09f4a4ddf40a316973a3adb2bf68e5ebc70326bb8d1ef90a2906bcaec6f04d18047ef17ef0adfd3f527b76037607bd60e36677f2aa91ba3d82d6e55c0191cd3755d26d758d3e4b79d72ae3048ea08ee3deb8bd3bc471960a5c6315d4d9eac9328c3fbd099cbc928bb9e57ae68375a0df35bdc2e6323314cbf75c7b7f85671e471c8f6af61d661b4d5b4f92cee1e36ca9f29b1cc6dd8fe75e56da1ea82678c594adb4e010060f356a47652a8dad4a5d38c7148d8033c7b55ff00ec5bc0db664587d4bb0c8fc3357e1b0b1b43be606761ebd3f2a1cd23473b18d6f697178c7c8824930392abc0ad4b1f0ec93b6eba9d605f41cb55f37924abe544162887454e3f3abd64a46395c9ea6b375089542d58f83f46b83b4fdaa438e5b7815ae3e17e9574a04375770b9e98c37e86b47458970a4f26bb0b240547039a71936724eb493d0f1cd6fe196b9a6c666b555be894ff00cb1521f1eea7fa135c4b028ccb92197860782a7d3dbe86beb285015c648e3923ad713e39f8796dafda497d6091c1aa28c82bc2cc7fbadfd0f5ad1053c53bda4782e73f301467e5a92e2da4b29e5b5b9478ee22251d241ca906a3000183547a11926ae0cd8ce4f41587aa5eab111a9e075abd7f742188852b9f6233582ff36e6907dfe540a71387175f9744468d88cefe5738af5dd1349593e06eaa4c196653386c679520823f235e4c91abb221385720337a57bedbea966df0d2ff004eb375012c9d768fa1cd5a47991573c7f4b60d6601fe1622b440c0ac7d164fdcbc79e7767f4ad64276d433dbc3caf042669db79f6a41d452a939a0e9109c03f4af46f82a7fe2b3ba3ff4e2ff00fa312bce0fde35e8ff0005b3ff0009add723fe3c5fff0046254adce6c4fc0fd0f79a55fbd494abf7aa8f056e7c7771feba4ff7dff99a8ea49f89a6ff00ae8dfccd46abbd89fd6948f5e2b41464b00bd4d6ce93a589640642338ce2a9e9f10dc646e83a5743a2806566f5ac652636b43aed1ad9624540063d05761688b80368fc05733a790029ae9eca45e2926dee612658bbd2ed750b6686e605951860861fc8f6af2af157c3a7b057bcd237cb6eb92d0b72ea3d8f715ece80491f1d454535b961db1fa551319b4cf970641e7f2a515e89f10fc23f6395b58b087111ff008f88c0fba7fbc07a579e7438c03ee2ae3b9d09dd051450064815a3600386008ef452ff000ad2e3e5fbcb49683b0da77fdf348dd3b7e3d692986c2e5ffd8a7e47a8a6ff00df34a9d282d31532c28dc19801f3538100f26afe8d6627bcc91f28350dd84dd8bfa2f87dae5926bb19563c257a2e95610c48ab1c6a00eca3154b4cb4daa091d0f15d3d95bed230bc566ce794ae6959db2803728fc456dc16ea00200fa567daa118ad88091d285b98ca4d1ca78bfe1de9be24b4699156db5055fdddc280031f4603a8fd6be7cbfb09f4dd426b0bb8cc73c0c5644f7f5fa7a7e35f5bb00c0eec6307a578f7c64d047956dae471a6f8cf937242f2c0fdd27e9d2b41d1abad99e42dc026beb7f0cffc8b3a57fd7943ff00a00af91df924646dafae7c33ff0022c695ff005e50ff00e802ad0f16eed1e57f1e4ffc4b7443dc5cc9ff00a00af147532c6cadd19715ed3f1f38d3f431dbed32ff00e822bc5a3e56a646f858a95331e073697b827183b49f6adcdc78c7a75ac9d562c14980c6ee0d68dac9e7da238ebd0d29772e8c9c66e0cb704ec8dcb568aeb13c40047edeb59008030453b209fad66d1d5c8a46d26b73b3077969ff00db13cdf28660bdce6b0c72b8ab49f280077a56b89d348d16b966ef93eb4e4cfde279a8205c2e78a98e781c5672ec4a4588577b13902b62cc7ccbc56444547dedb5afa7b64afbd4913d8ec349ea2baeb32028ae474ae58575566d95c715b238aa1bf011b055865f91b81d39e3ad52b77fbb57c1dbb76d5adce76ac79d7c41f012ebdb6fec9960bb8f891c0cf989f4f5ae7b49f871a66d5376d25c3ff7598a8fc863f99af6271f2f4047d2b225b210cc6440006ea0512ba37857972dae72f17c34f0a4e845c6890bf1d43b03f9835c178c3e08186296ff00c30f238c64d8c8727fe00fd0fd0fe75ee16c9c7181565a3f97919e29c5b329de5b9f123dbc914ed1cd1b47286dbe511f303d31835d6785ad59f4bd5658a458f642c0a4eadcf073823807d8d7bdf8a7c0fa36a53bdf4ba65bc931e643b30cff009579e6a3e07b3b6b3bcfecb80b432c6c5a01230746c1c1420fcc07f74e7d01ad79c8e4b6c79368effbf9130395eded8adbce00383d2b0b4f568b5278a4528ea0a91d08c7b1fa56e8181d07e3e9499ea60dde014bb7e6c53b68f4a0a8c52b9d972393ef8af49f82807fc26775ff005e4fff00a312bcde4fbadf857a4fc151ff001595d7fd793ffe8c4a5739b11f033dde957ef5252af5a6784b73e3eb8005c4de9e637f3a8e3e87eb4f93fd74dfefb7f334c55e40fef75cd4ccf629688bf0e52dd178dc6b7f481b707d6b0d547c9ec2b7b4ac6075ac2454f63afb26c8c574764dd2b9ab2c704e2ba1b2270bd2889cb23a4b42703e956c8dca47b552b4390b5a0067f2ab5b199977f6714f0bc52a878dd76b29ee2be75f10690fa1eb77360c7211b721f543c83fd3f0afa5e65c8ed5e49f16b4855163a9a2e1b79b7908fcc7f5fce9adcd69bd6c797e79c51d0521cf53dc679a4ddf3fb569766f61c451d052514b98448bf30c123eb9a367bd37ee9edf9d28638e2a9157ee2bf6a54e948fda81f2ae69f41fda1c7a5753e1cb7c1563dce6b958db7ba835dde811e614c0fa5633629bba3b0d3d30a3d8d747683eef4ac3b14c601adfb518231c545ce466ac03ad684230b5421ceded57e2e82ad194f626c719ae6bc71a67f6a785352b5032ed0165faafcc3f95749515ca091429e41e29914dd99f231208e060741fad7d75e19ff91634affaf287ff004015f245c284b891318d8cc3f53fe15f5bf867fe458d2bfebca1ff00d00569137c4bbd8f2bf8fbff0020ed0ffebe65ff00d04578b2f4af69f8f7ff0020fd13febe65ff00d06bc510fca334a474e0ff008688ef2312da4a31c85ddd6a9e9d38591a2202eec639a75cc373148f3c243291ce39acb56742255cef0d9a764d58cead4e5a8a4d6c7452c9b065b34e0d822abc32a5c40ae3bf5c7634f3200796c7bf4a8b1db1a89a4d1663e403572dc6e9074aa313123e5ea6ae5a3e1c138c567246b7ba3508c20c629a396e334d9250aa29b136f07915162116d4e0f5ad6d3ce02f22b149c0eb57ec253b80cd26ee6738dd1dee96795c5757658c5717a549c2d759632640ab89c551599d05b9c28abaae7205675b370315755ba72335a239e44fdaa29230548352c633f7a98ea41ad1eba90a2d10c4bb4e3156874a83bd585195344426569d782319fad71bacc1f63bc2533b5fe6539ef5daba92096ae43c7f73fd9be19b9d4d632e6d70e107719c7f3e6a1a358bb1f3ef8ae2897e205d8b7c053cb85e99c73500fbb54219e5d4354b9bf9b25a672c71ea7918fa55fc866c13d69b7d0f4b0abdd7e648bf74d07af7a44eb413935474c76118e14fcb5e8ff04db3e33bbffaf27ffd1895e727ee57a2fc14ff0091d6effebc5fff0046254f530c4ff0d9ef47a9a72f7a43d4d2af7aa3c28fc47c797076dc4a07fcf56fe66a341965c7ad3ae1bf7f2faef6fe6698872cbf5a891eac764696e190bcf22b7b4ac0418eb5ceab7ce0706b734b3c8e2b199acb5476762dc0ce39ae82d4fddae7ac00201c56fd99e56847233a2b2390bf5ad6539158966dcf15b111f947d2accd8e65c83f4ae33e22d80bcf076a3c7cf0a0994fba91fd335dad647882d7edba25f5b7796de441f52a71421c1d99f30923071c027a7a53029341041c13c8183f5a72e3b56875a7a0d0a734e000a5a2a6e17173467e6f6f5a6e47ad2d36db01dbc93cf4a09dc3069a08a33e94efdc2ec96d90b4ea31c035e8da1465214ae034d50f7099f5af48d2c6d8d718ac9ee29ec74f69fc271cd6eda72464561d97256b7ad7a523999a76e060d5f88616a9c236802ae463031568c66494927f55a5a8e4201c9a644373e4bbeff8ff00bbff00aeadff00a1357d69e19ff91634affaf287ff004015f245f1cdf5d607fcb57ffd08d7d6fe19ff0091634aff00af287ff4015a44debec8f2af8f873a7e87ff005f32ff00e822bc5109cd7b4fc7d60ba6e8649ff97997affba2bc503d12474611da08941e38ac2bc8f1a837a0e6b6b00ae0f4ef59fa940ec04ca30d8c38f4a98e8cbc5439e9dd6e55b4b8fb2dc1ddca375a9aee4dac181c86e95401f33218283dbad2845008639248e2acf3e9e22508f297adb522872ea48fef0ef5af6d718707000619e47f9f6ac2b7f291c3c859b07e45da3e63f9d6cae4423cc3f39033d38eff00d2a6491df84a9295d3341a72533c8c55db23b949cd61f99b701caeee98cd6ae92e1e17e9906b19ab23b1be8689ab76242b67826aa375ed562d5b6c8bd2b121ec767a5c9c2f6e2bacb1638ceeae274e98e57debacb19781d2b58bd0e2a8b53aab56cd684672b58d6b292a0e79ad489db03918ad1339e48b89feae8a629e714fa0ca4c632e39a724854629d51b8da78e95a35604ee2336e2735cf78da013f83b5988e086b29bf3da706b7c9c0ac2f17ca2dfc23ac48d8c0b39067dc8c0fe62a19ad35767cc504420458d71d3ff00d75281b4939a71e46411c5303316e48ab3d984631490ff009b66ec738e94a4e6917ee8fbbf874a052db52d0d3263071c57a47c14ff0091daeffebc5fff004625799e7a7cdf8fa57a67c13e3c6b763fe9c5ff00f462525b9cb88fe1b3decf5340ea283d4d03a8aa3c3ea7c6f39ff4997febab7f33480f4e9d69273fe932ff00d746fe6698adc8fad292d4f520ed1468918e95b5a5b61940ac63f7456a69c7054fb5653357b1dc583602d74168dd3dab98d3d895539ae8acdba62a11cf23a3b4e4e6b6a2ff0056b58963c8adb8beed523263ea1b803e5fad4bfc5f854331c633d07cc7f0a6247cb3abc1f63d6350b7ce3cab978f1ecac455453c66b6fc716cf69e36d5e3718fdf971ee1803fd6b058f6ad2c75c5e84bbbdff4a4ddeffa547bbe5c0a4dc7d68e51f32266f5a6ee351ee34ef30d160e643f77f9c51ba985863814231df8eb4583991b5a347bee071d2bd074dfb8bf5ae13468f0d91c1f5aeef4dc6d5ac5ee2a9b1d3d9f6adfb4c15e7d6b06cfeead6f59ff005a68e77b1af12f4f4ab89c0ed5562ab4bd29c7631a82b1c54333aaa93fc383fcaa56c639aa57b26cb59598f02363f9034d8a07c9f72fbae6761d4c8c7f5afaebc31ff22be93ff5e50ffe802be3e2fbb736473cfe7d6bec1f0cff00c8b1a57fd79c3ffa00ad626b88d91e51fb409034cd04fadc49d3fdd15e2109f94119c57b77ed0adb748d13febbcaa7fef915e1714985e5d3af414495d1be19fb85c1498ce4119cf18a456c8a4dd86c16193daa4e84ee549b4e0ee1e26086ab0d3a73d4a1fa8ad277da33cf3d3eb4e5208c8e148e284d994b0d07ef1560b48e0f99c977f5eb8ab8181e7f888ce2838ea698d205193814f7348a8c5592242e33863573433b44a03eece1b06b2de51e59219722ade8d3ecbdf2c12372f3f515325eeb34524ec744769152c4f86041150038a746df30e9d6b9ac53474ba74bf779aeb2c24240e95c3d8cd82062ba9b09fee8aa89c9551d8d94bc0e462b66071c0ae6ace6e074adab797ee9c8ad11ccd58da562578a915b3f5aa904bc8c1ab6a771c5689d8c9c6e3aa2391f29f5a96a37fbd56f622244df2b76ae27e28df0b5f02de21fbf70f1c23ea5b71fd16bb893e6439af21f8cba8016ba6e9a0fced2b5cb0cf418da33f893f9567d4e9a2af24793138fad21ed4d39c76cd283c8c0aae63d4b0a0f27de8390b938c1a31b4e4f4148cd9e4f14b6434397eefe7fcabd2be099cf8d6ebfebc5ff00f462579a7f7bfcf7af4af825cf8daefdac1fff0046251131c4ff000d9ef87a9a075141ea681d4551e1f53e31b86ff4994fac8dfccd4793da9d7057ed5301ff003d1b8ff811a8c75fa714367a71d91ac0e513e95a7a71e541c565afdc5fa569589031f76b9d9bbd8ec34f90e028238ae92cdcf19ef5c8e9cdf30e6ba8b16e178f6a9473c8ea6c1be51cd6ec5caafd2b9ed3d86457416edba31568ca44a7a8a865f9949f406a56e80d44e720fe03f5a7d093c07e2cdbfd9fc662551c4f6a8c4fb8c8fe40570d5e9bf196d996f749bdfe168de13f50411fccd79883ce38ad226f1d84ddeffad28639e383484a8ec290104f19cd3e62ae8786dbd7146ee31fad34fcb834cc9cd3b7992da449bc74a92dbe66aadbc06e6add827eed4f1c8cd448aa7a9d4690a02a74aed74ffba98ae43484c2ae45765a7ae547158f51d43a3b1fe0fad6eda720d61da2e31c56edb0c2823d6a91833660ebcd59078155613d2ac74c55a319ad418f4e4564eb52f97a35ec87f82de43ff8e9ad363815cff8b25f2bc2babbe718b397ff0040349954d6a7cb31e4403d768afb23c31ff22b693ff5e50ffe802be36438817e83f957d93e18ff00915b49ff00af287ff4015bc475cf25fda20edd1b42ff00af993ff4115e08bcad7bd7ed107fe257a07fd7d49ffa08af02524a673c74c538bd0d30d2b44b4b330e0f39eb5243281f293fa55442738353c2c3711839a1c558ece6f774258ae09e1b393d302909f3f9e460d418ff0065ff00ef9a6bb7cefdb9a5cbd839d0f327dde3a7ad1232b3654605405c9f6a8fcc03a7354ad7d4995444c64014f7f4a75ac9e4df47231e8e326a1789b69e79ede9514a40cbee0413c567257673cb10ae77bb8151c8c1a457c37b552d3ee45cd846f9190369fad4bbb3d3d6b071b3b1db097324cd9b494ef5e462ba8d3a60aa318ae3ada4e41cd745613820566b4667551da594e38e6b76da5ce0f15c9d94a303dab7ed24e00ad13b9c72474303fcc2b42370c0562dbc8081ed5a50be40aa4ccda3455942d31fa5314f715229cd55ac66c427e5e7ad7967c5cf0d9bbd361d62da12d359a88a623ab424f5fa83d7d8d7aab2e38f5aa37b6f15d5b4b6f3206865428ebea08c1fd2836849c6499f270ec320923340c120569788f479740f10ded8480fee64f95c8c6e53ca91ed8c56603cf06868f562d3498714525291d38a4301cd7a67c12ff91ceeff00ebc5ff00f46257990af4df825ff23b5dff00d783ff00e8c4aa898e23f86cf7c3d4d03a8a4a51d4551e1f53e2b9db3773f5e19bbffb4c3fa5443faad170e16e2e09e81d8ffe3e6950e6551c553d11df17b1b638e956ed1b154c9c62acdb31df584d68763d8ea34d93a735d5d9374fad71da731da39aeab4f7c906b2473c8eaec4f0315d15af09f8d73960f8ae8ad89c73568c59631902abcc709cd58c718aad38e869891e63f17e159bc3104eca7305d2827d9811fe15e27965f97807d2be88f1ed8fdbfc1da9c0a32e22f317eaa777f4af9cc3027278278c67d2ae3a32d3260d823da9371c633c526d04e4d1b40ed55c8c4e42d347a50071d29a5c2fff005aa9dee26ec233fef154639fd2b62c530b1a83d3b562c3187bb5c0c8ce0fd6ba2b34c3ae7d6a2a3d0de92ea74fa5a0c29c575d64004c0e2b98d31064015d5da0c274ae70a9b9bd66bb40e47a56edaa65540ac3b4adbb6fba2a918c8d584608a9ea08ced19a797abbd8ca4b511ce2b97f1cbe3c17ad11f7bec727f2ae95cf06b96f1b9dde0fd6476168ff00ca922e28f98d998a373f747feca2becdf0bffc8aba47fd7943ff00a00af8b8b661cf76fd38afb47c2fff0022b693ff005e50ff00e802ba23b13591e47fb457fc82b40ffafb93ff004115e0391bf8e33dbd2bdf7f68aff904f87ffebee4ff00d0457cf884e38cd3e6b0a83b22c75e7ad1cfad420fa1a7eff6abb753a94c9158a1ca9c5349c0a6873ed48305b14596e273ec2b0238dca78f5a595513bf3e9e950b1ce471d29acc3150e5a9937d6e213c9a1a5ff482d8e3a7bd010f9d8cf1d69aaabf2f27767915273b9731d168129f265523ab6e27deb54b0527a556b1b616b67b307711b98fa9a998e540ac656b9ed508da2932ddbca15b15bd6129e31f5ae6a3600d6c58498c1cfeb59cd2be82a88ecec66ced15d0dacbc2f35c7d8cbd315d259cb90288b39248e9ad9f254e6b5207c605605a49c0e456bc0e368c55a660d1af1b6454a18818aa70be40ab60823356999c90a4e40a6b0c8edf8d2d35c6460e3068123c93e30685e6db5aeb91f583f71383d7693f29fcf8af21c6466bea5d734d8757d26eec675052e10a927b1ec7f03cd7cbf796b3595e4f6970a12581cc6f19ec41c1ff003ef48f470b52eacc84b018a09a5a283a80702bd37e090c78d6effebc9fff00462579957a67c1239f1a5d0ffa707ffd18955131c47f0d9ef87a9a0751494a3a8aa3c3ea7c4d27fc7e4fff005d1bff00426a48509bc8075e7e634e90ff00a5cf93c091bff4234b67cdec78e9cfe94e5b1df4f746c6ec9c54d6ed8700556078cfa8a9e0ff005a2b096e769d1e9d21e075aeaec0e429c5723619c02b8aeaec09017a5668c2675762c7d4574b66d9001ae56c8e3078cd74b62d91f855a3091a27a1aab39e82ac64e3b5569f92055128cbbe884d0c89c00e854e7dc62be57b9b76b2bb96d8afcf131465f705abeacb8191f4af9cbc7d6a6d3c71a8865c2cc44cbc75dc013fae6b4a7b968c2cf3d697b73554ccc3d29f34920e8063d7d2ab91df5071b0fec693a8a2a3b8eab428f7324b99d8bb64bb86fc63238addb1562e39acab48c246ab9e2b62c57e6ac6476c15a275ba5afdd2475ae9ed01da2b9cd346556ba5b4076afad423299bb660e0702b5ed87cbdab22d38515b76e38078cd346723493b52e714d4ed8eb4ac7007ad3ea47518fc8eb5cb78cd33e10d5c0ef6927fe824d74aed8ea462b9df142f9be19d557aeeb39bff4034168f97037fa39e3a2e3ebc57da5e17ff915f49ffaf183ff004015f157fcb13feeb7fe82b5f6af85ff00e457d27febc60ffd0057447632add0f24fda23fe415a067fe7ea5ffd0457821ff59f87f857bcfed1bce8fa07fd7d49ff00a08af9fa59048463a015324dee654d5cb5226f3ee3bd47e7bf4c0fca93ed009ce0fe55006c8c66af9fc8da2bb964c18c7cff00a54464f9dcaf7cd1e73f9b8fdde7a67b53cfde9be9fd2939360a4fa90cdfeb5bf0a9e4e57155bf82acbc71ac7dc63d2b36ae4ce37491000ac598920679f5abda55b34f74bb94623f99bebdaa96ef91707935d26976df67b40cc3e773cd36ec8d30d49ca7aec8b8cdc007b5441864fa9a256c0f7aad14e166f2dbbd676b9ec269685956c1f6ad4b298061c8e2b289da6a5865da78c66a5aba0a91ba3b1b39f2473d2ba3b29b3815c469f3fcaa4d751633676fb54ad19c352363adb3954edf6ad9b79718f435ccda4a36e46335b56ae48049aa39da37a06f987bd5e8dfdeb1e09391eb5a713861c55264345a07345354f414b93ea2b433b1148b93e9cd7857c58d0fec3af45aac63115fafccbfdd917afe7c1af74939435c87c40d1bfb67c2b7f1c69bae211e7c3eb95cf03ea322a3a9bd1972c91f3ce79ea314b9e3349b72dc0f947afaf7a3031d299ea0b5e95f040e7c6b75ff005e0fff00a312bcd6bd2be090c78deebfebc1ff00f46251131c47f0d9efa7a9a51d4507a9a075156787d4f88e738ba9c6402656ff00d0cd49a7b837eddb6a1155efbfe3e27ffaeadffa1354da51dd78edfec93fa8aa7b1e853dd1b09d0ffbb534276b2d4153467256b04761bda730dd8c8c575764dfbb523b571f60f8718aeaf4f6071f4ac8c2a1d5d89271d2ba5b293017dab96b13c8c574b627a1ab460f635bf87f1a8a5fb869e0e4645452701b9a721228cc010322bc4be2f5908b50d3af3030d1b42cfe841c8fe66bdba5195af3cf89d60b77e149e62b96b561328fd0fe869c5d98cf11dded4e3c638eb4d08b9071caf4a9302b449bd84c842045c2fae79a7ac5b9d723a6697e5c77a92d86ee7d7a50e4fa8e31bb2fc23e5e07b0adbd3e3ddb41ef593129c2f5adcd3d3e61ed5948ed7f09d2e9abb71cd74d64010b5ced80e01ae86d17eed668e591bb6c3e515b96a3815896bfc3cd6ddaf038ab4497c605230cd00e40348c78a6664129c03d2b0b5b5dfa45f20c736f20ff00c74d6c4cc496e4565df80d6770bfde89c7e86a7a9513e516c983dbff00b1afb57c2dff0022ae91ff005e307fe802be2619313a3e4051c0afb63c29ff0022a6907fe9c60ffd16b5d3132aaf53c93f68eff902e81ff5f527fe822be7cb7ff8f8c57d05fb46ff00c82340ff00afa93ff4115f3cc1feb57eb43d51940b9e4a671b7f5a8c887a6f6fca9ff694c746fcaab738f6ace29f5368dfab13ad3c28c5357ef5498abb37b17143546052d2e0518a7cacb45cb0845cde2290028e4d746e428c0e838154349b7315b9988e64fd2aec9bf07a56527767761e9da372acae49ea7ad665d4c22954c670c0e78f5ad094e14f1ef58739676c8e9ea6aa2b422bd4e5573a0590320718218669d13e1c13dcd50d366f320319fbc9c7e156f3e9f9d4b5635a5539a299b965300ca39aea2c26f956b86b69983039f9aba3d3eeced00f5ace4ba93555f53b6b37181c8addb57c2a935cada4f82be98addb494605099c7247496ee073dab4a171918ef5856f2022b4a090607a8aa464d1b311ce33527cbed55627cad5956c8e6ad322435862aa4ea08cf07eb56d8e6abcaa7181c7d694b71c4f9b7c65a3b687e28bcb550044cde721f546e83f0248fc2b08f4af5cf8b7a479fa6db6ab1212f6f27972b0fee3743f8371f8d7910fc3f0a0f4a94f9a201baf22bd2fe081cf8d6e87fd3838ffc8895e686bd27e087fc8ed75ff5e2ff00fa3129adc588f819eff4529ea692acf10f87ae64d975719e9e6374ebf7cd4fa460dcc9e9b7fa8aa973ff002109ff00ebb1ff00d08d5dd17ef4bf414e4775176367fe59b7d0d3e1fe0fa533fe59b7d29f19e5795ace5b9dbd4d7b13f38aeaac08de2b94b2ceeed8ae9f4f38032474ac7a99d43aab238e2ba5b16f94572f644903a6dae86cdc8dbe95473b3781caf150b6036d3de88e5c26294d39044aae720e6b075ab44bcb1b8b6700a4d1b2367dc62b75beee7d6b36f40dad9fa1a94f503e5d78da199e26c8f2db69fc0b5381fde11ec3fad6cf8c6c3fb3bc577d1e00590f98b8ff006b9fe79ac084e24fc0ff004aea5ac476d2e5973daa5b08f6439fef1cd57910347b3a0238f6ad0b68f08140c0c5448aa45f817eefe75b960a2b120182b5bb60b923eb594dea743d8e9ac97e5ae86d060af4ac0b1505793deb7ed40e2a51cf2372dbee8c56cdb75ac5b5e140ad58090704f1ed42dcc8d156c50c73480d21aa96c16d4a92f39acfb9e55c7a2b0fd2af49d2a94e0139fc2a57c411d8f9265fddc92f1dcad7db5e15ff00915748ff00af183ff4015f14dde56ee603a6e7fe66bed6f0b7fc8aba47fd78c1ff00a00ae9899553c8bf68dff904e81ff5f527f215f3ad7d15fb46ff00c827c3ff00f5f527f215f3cc3feb57eb4d6c61157268f3b47fa9fc7ad5ae7daab7d99fda98b8ed59b499d0a37ea2af4a7520a777ade0b43625da623bb83db153db406e67485412377cc5bb8aadfbeff6ff005ae8b44b32911b871866e067d2a2a6c5528ae6d4d386df0a36f4031492c2761f9455f85463a8a91a0dc3b7d315caee7629a4f467297b16d523b1f4ac0662f26c6391d7df15d9ea16df29c7e95c7df0315d676e3dbd6b681c98cd63743ac6731df107a37073f4ada2df293e9d6b9a663e6075eb8c9f6adb82712a236467b66aa4ae2c1d5b2e565e8db6b66b66c26e6b0837ad5db59b0e01ac9a3d0ba923bad3a6c80715d15a4c3815c669770368e79ae92ce6e17a566b438e71d4ea2da5c1cf6ad58250581ae7ed64054035a96f20c0c1cd59835a9bd0484918236d5e56cd63db382a3a568432e7d29a7a90d16ea27191ce29e1b8a4229c9dc48c7d634f8b54d32e6ca6c2a4f1b47923a6475fc3ad7cd179692585f4f6970bb6682468dc7fb40e3fcfd6bea57195238fc6bc4be2ae87f63d762d4e288086f061d8ff00cf451fe1fa83496e7461a76767d4e0abd27e08ff00c8ef77ff005e2fff00a312bcdabd27e077fc8ed77ff5e2ff00fa312aa3b9d388f819efe7a9a4a0f534559e21f104ff00f1f937fd756fe6f53e92bb5a6527a05aa77dfebe7c7fcf56ff00d09aae6967f792ff00b8b4e5b9d9451ae1b9f9b9a901008aaead8073d4ff001531ef608cfef26518feef358d9b6762925bb3a1b26191ef5d2d838e0d79ec5e20b4848f9ddb1d08157e0f1fda5ba802ce66c7fb6054fb395cce7523dcf58b17185ae86d1f3b715e250fc56484809a4b39f79b1fc855b4f8d7343f73438cff00bd39ff000aa54e473fb589ef709e0e69646e801af0bff85f37e3e54d0ecfead339ff000a63fc76d60fddd1b4f07d4c8c7fad57b37b8bdaa3dc1beef38fc6b3aeb9420e0e474f5af1597e37f8898fc965a6a7d371ff00d9aa8c9f17fc4d3921a4b18c7a2c1ffeba39193ed11a3f146ccaead69761722589a327fda073fd6b855445390066ac6b3e30d5b5f489751921748d8b26d8c2e0fe158bf6c94765fcab44acac3754d5009e0f02b422e00e45736b79300482bc7ad4a9a8dc375641f5ef438dca857516759029041045743a7e0b0eff00406bcccea374ad859d863d0e29575ad454fcb7932ffc0cd66e9dcb7894cf73b18ce0707f235bd6e3007ca7f0af9c7fb7f5539ff8995da8ff006656ff001a43ad6ac391aa5d9ffb786ff1a15232758fa92ddb8e4e3ebc56a5bb74f987f3af92535fd622391abde83ed3b1feb56a2f17788a320c7af6a031ff004dcff8d3f662f6a7d709215c77cd0d2060a46377b57cc163f123c5d692a05d666917b79a16453f98aea6c3e35eaf1285bfd3acee4f7742d1b63d76f23f4a4e0c4aa267b7336462aaccdd4715c5691f16bc3fa9055badf632138fde8de99ff7874fc40aeb4dc452c6248a4492260487460c0f1ea38a8e5699a4649ec7cab7c3fd2e73e8cffcdabed5f0affc8a7a37fd7841ff00a00af8a2edb7c93b67ef3b9fd457db1e16ff00914f46ff00af183ff45ad7447631abb9e41fb48ffc81342ffaf997ff004115f3ddbffaf5fc7f957d0ffb467fc81340ff00afc93ff4115f3fd9ff00ab3f5fe9449d91925a58b03eee3355d3fd79ff007aa5ff0096dff01a8613fbd51ee6b382d4e88682c5feb17ea2a6915045e62e47b544cbb095e29ccc56d588fa56daa469276574364b9903011e31fecd27daae24520c9263d33c5185ea683b7159731c7ede4203213c4b20faf340baba46c2dd3e7fd973516d90ff00cb4fd69be49fef2feb55a0d4df72e7f68df72a6e6523dd89a865b895f9906fc1c86a48dc3e78e9da95d772951d0d2ba4c4eac9e8c4e3224078f4c5113c901ca1c83dc522af94a4311cd3b2dfe54ff85377e80a528bba2c0d4258ce1c03f855b83578c7de5c7a5647da33d8fe747eeb3d7f9d26afba378e26a4773b3b1f11d9c4c3749b79c7435bf67e30d2507cf7a8bdf956ff000af2f58d1c703f114ffb3afa52f66984b18fa9ecf6de3bd01701b52880ff0075bfc2b4e0f881e1a0e01d5a3ffbe5bfc2bc11d03019233eb4c78f7bb3671e99a1462ccfdbb67d1f17c45f0ba633aa2e7feb937f855b5f8a3e148ffe620edfeec0d5f3488401d49fc7a55d8a350a3046074f9aa9530f6ca47d1fff000b6fc2c17e592f1fe96f8fe669a7e2f7870f022be3ff006c87f8d7cf68066acc5ce7ad1c8839d9ef27e2a78764ff009677a33eb18ff1ac8f16789fc37e27f0edd59c777243311be132c247ce0ee00633d7a7e35e4d1e3ae6ac2952410471eb472a2a352cee5074689ca38da53a8f4af4bf81e7fe2b7bb07fe7c1ff00f462570775187b52700edfba476aeebe06a81e37bbf5360f9ffbf894ad66773abcf4a4d9f401eb45145367947c3b72bbaf261ff4d5bff427a7dadc259a3b93b8903814cba1fe9571ff005d1bff00426aa33020807b8cd538dce952e58dc9ee3519e7fbce71e838aa64e69d21cbff000fe1de9b4ac6729396e14a09072091494532428a28a0028a28a0076f7fefb7e74da28a0028a721507e6cfe152f9a9fed7e54989b6418cf4a5552c4014a8541f98123daa51246a7807ea050c642460d396273fc07f954cd72241875e3da9be647fdc1fad1761a0c681d7ae3f3a7f92be8df9d1e6c6bf71587d79a91640c38f4a4ef7224e48625bfef769edfad4df64c805631f8b527989ea3f3152472e3a723d6a84a5aea2456930dc10647f776e6a4f2da25c0e31d8922a652bfc4054c8c01048c8f7a1a2ec56dfcf2b838c0e6b7bc35e2fbdf0e4cf146cd2da48ac1e26e76923823d39c567490a3a923e6aa3e5794090df20ec7b0a3951716d155972aeccbc804124ff157db7e14ff00914f47ff00af183ff45ad7c4a42aa48dbd5cb0afb6bc2bff00229e8dff005e307fe8b5a48a99ccfc45f87c7c7d63636dfda9f60fb2c8d26efb3f9bbf70c74dcb8ae013f66cda38f1503ff70e3ffc768a2a91085ff866f5ff00a1a7ff0029a3ff008e52ff00c3388ffa1a47fe0b87ff001ca28a95a15762ff00c3397fd4d3ff0094e1ff00c729a7f6702cbb4f8a88ff00b87f1ffa328a28b04a6ec37fe19b3fea6bff00ca70ff00e3947fc3361ffa1a8ffe0b47ff001ca28aab19d83fe19b73ff00335ffe537ffb6527fc3349ff00a1a47fe0bbff00b751450d5803fe19b307fe46927e9a68ff00e394eff866bffa9aff00f29a3ff8e5145263486ffc3360ff00a1afff0029a3ff008e53bfe19b9bfe86b3ff0082effed945155625a1bff0cd4fff004389ff00c171ff00e3b47fc33537fd0dabff0082c1ff00c768a2917617fe19b9bfe86b1ff82dff00edb4eff866e3ff004361ff00c177ff006ca28a1225c5219ff0cd247fccd23ff05dff00dba9ff00f0cdc7fe86b3ff0082dffed9451498342afece18ff0099a89ffb877ff6ca957f6760a3fe468ffca77ff6ca28a62e544cbfb3d95ff999f8ff00b07fff006ca957f67f2bd3c4bff923ff00db28a281d8913e0395393e23fcacb1ff00b52a51f02c8ebe22cffdb97ff6ca28a0ad847f81798d93fe121c823fe7cb1ffb52b5bc17f0d8781f5b93527d656e8496e6131fd9bcbc64a9ce779feefeb45152d0f9ddac77adaa58a1da6e541fa1a7c77b6929012753fe7de8a29a26e78ac9fb3b79b24922f8ac8dec5801600e3273ff003d2a19bf66d129cffc257b4faff6767ff6ad14551447ff000ccc7fe86dff00ca6fff006da3fe1998ff00d0dbff0094dffedb45152487fc3331ff00a1b7ff0029bffdb68ff8666ffa9bc7fe0bbffb6d1450313fe199ff00ea6eff00ca6fff006da3fe199ffea6effca6ff00f6da28a761d85ff8667ffa9bbff29bff00db693fe19a0f7f168ffc177ff6da28a2c160ff008667ff00a9bbff0029bffdb697fe199bfea6d3ff0082dffedb45140584ff008667ff00a9bbff0029bffdb68ff8667ffa9bbff29bff00db68a28b0585ff008666ff00a9b4ff00e0b7ff00b6d27fc333ff00d4ddff0094dffedb45140583fe199ffea6effca6ff00f6da3fe199ff00ea6eff00ca6fff006da28a2c160ff8667ffa9bbff29bff00db69cbfb3485393e2d6fc34ec7fed5a28a04d0bff0cd527fd0deff00f82eff00edd4f4fd9b5941dde2cddf5d3bff00b6d145244b57245fd9d31ff3349fa7f677ff006ca78fd9e0a8c0f149ff00c17fff006ca28aa608913f67c65ff99a7ff29fff00db29affb3cf980e7c518cffd381ffe3b45148b2b9fd9c414dbff00094ff0edcff677ff006daf6cd1ec4e9da5d9d917dff668121dd8c6edaa0671dba51450c19fffd9')");
1072:                stmt
1073:                        .executeUpdate("INSERT INTO BLOB_TEST VALUES (2,'89504e470d0a1a0a0000000d49484452000001a30000011e0802000000a8a3ed0800001bf949444154785eeddd3f93e4c679c7f1c6d52e02baf42ee4488142a50a153a70ecf0029901830d98e936537001039a2aef6b50e0d0c588a1e5e0caac322f38cb2fc30ab0011cf4cdc367fadfd3e8017a8099efa75853338da71bd825e7c70798ddc530cfb3c3da9e9e9e9c73efdfbf0f9e63234f4f4f977c872f9c8efd1b483a0037ef8d5500008747d201b87d241d80dbf7a05fe8ebb2cfcfcfa97a00d8973ffce10f56894abaf8e3a71f7ef8212c07803df9f69b3f5a25ce053d5decfbefbf2f1700c08a3e7dfc6095fceccbafbeb64a3efb9c74fc3c11809df8d5af7f639538b7f00adb8323e6d6308ee3344dfed1aa0560f8e9c7bf5825cbf4feec751c4779f44f8439abb0d55c61a945ab49c0f9b0b3ca01f4f6e6ea0ddd74d29c1192325621803bf5d02de6741fe7541f24f4d99f144b8d1fc96d157a53728a8bd6d435f13124f7a82b832f8473586087fa9dbdeacecb3771e5624f478c4c89b7c6737ddcc42bc88814e81a1d527e534d25804dd57fc69ad32fe916194f1ab65e22175ef11e8939a00f1f7317865da7a49398d08f8562e9a1966eddc8a458b50056a303ee92b0eb947453c5a9eb21ce07b768240124c5d1d61c76c6ef487420d92131374517e064c4a764b055fac47250063b9ace2fe105c5b93de62a65dc3c0c00952a7fd3ab46bfa4d36d5d30982bce8d1416d171997b929c587e5979d800f6297df63a0c2fc9712449d3474307ec533ae9e6f96d72fcb8b60ea064c70a60271e9ceae0e6f9ad3c7ff72e37050036b4e857f72b3d0cc38befe07cc6e9e700d059f3a7ab650f72a29a3c637d7c7c8c070160238b3e6fad8fc57e9fbd02408dadfe3edd8d19869ddec4d61fd86e0f0fd88fc3ff7dba6118e47153c339abbc965e6ad1b212703eecac72006bbae59f329915abb6c546cb02585dbfb3576964a4adf34921e3e5974e254b794a8e3e6dcced3d18294cd15bcd631ececf583987053aeb9774f2f64ec6872e0b360523c194c26a4100c50710cfad09a0a0207900852f10407ffd92ae926e882ae5a6c411930c4a07e0d6754a3a0994e1fcd4352ed3dd505c907449d374c95c0047d1e9b3577d4e37cff346f96286a39ca22637c583006e43a79e2e47e78e4f4033710a53e22b68c12c895aff3c9e6b1e8f8cc8be0a0710cc92ad5cbc033aeb97741225c9f19a973a5ccc29e51de5968a470a0535c743a2017bd0e9ec15d2fad1d001fd9174fde49a4d005b23e900dc3e920ec0ed333e91f8bbbfffe7720100ace83ffffc4f56490b7a3a00b76f5f49f7b7bf7e6795845699525ec46f6dd811809de89d745ba7c6dffefa9dfec72ab7fdedafdf7df1cbdf3be7bef8e5ef575910407ffd7e72b80f9f4a124f00e07a269d3444d2d6492af9f1e4cbca11574cb7ca15e2f1604ddfd691a1c0e1f44b3a89091d167170049be2e264d6940328de5df200ca0706e0b8fa255d33f3ea98994ae60aa2be12c081a4936e185edebd4b6e69943b75ad6156964f2a834e2d5923cc7d0138a24e77ccd1e78c5ffcf2f76d8152c8a92fd6fe6074ddd5005cd783736e185efc8b797e2bcfd7ede972744225e32f2ec84dc97576c9102caca0c7833517b5a200f6e361185e7c07e7334e3f5f57f05140305e787ef994f24b57dc17801bf0464e54573f63bd0dd2e8d1d001c7d5fb77248e28d78d02380a920ec0ed23e900dcbef4cfd3cdf3dbe7e767e7dcfffdcfbf240b00600b3ffdf817aba4053d1d80dbb7afa4336ff67a03e40e61562180d5f44ebaeddee783e2ac5d6c71009eb95fb943d876c700207080dff0afc14d54815bf2e77ffb77ab64997e49272d4c70836719d751150f0623c959015f93ab2f6cd52f7559a1b266e5208ee311005f7ef5b555d2644e71ee5fdfbd7bf7dbdffe36b9b599537777d6236641b22c781e7c45f92fad740cc1d6e049f9c02abfbaf20870e7fefbbffea3e1d1d4e96f995c2eb8aa75ba2277d65279c9eb5f717dfdd6b64aafbe128073ee57bffecd4f3ffea5fed15aefb337ceb96178f1ff04cf5724e9a01feb4984c9449dd6e5b9ee74a65c28ae5fadbed2a50e1b4099196dc1a3b5de676ffcdf32d1bfe7bf454337a74e0c974ace5a3744ea57abaf6cfb6281fb64465b634f77ddbf65222d8f0e0e3de86322785928886b927bc96d2da7524da55e39289ecfcfaccddd0177c88cb6b69eaedf67afbaad8bc783e741597956b2c06556aed91a1f46cd8199c5004c66b435f6745601d6246d1d0d1d9064465b5b4f47d2f596eb6d01b8ce3ddd55aed90180196df474000ecf8cb6b69ecef844e2f5f5b55c00002bfaf4f1434dc02d0d3b7a3a003b52136d4b63ce1d34e9c6711cc7d1aaea441f897fbe9f63030ec78cb6635ca7bb3c0bc6719ca6699a26b77c9d51b16a17f307e69c9ba6698bf5817b6046db1df574c2274b258948094a007b63465b5b4fd7ef7724a4cd91b62ee8cbca2f9dca353fe85ba7f8518aa54cef2e50bfbbb8462f18ac2fc7e3002c61465b5b4fd72fe98248f283411c24371546921383682b278eb9bb9a2304b01633dadac2ae5fd26daa3971741357a9610a804a35d1b634e65cb7eb74e3388eeab3889d84c5a8aedc59b53f9b14ab16c03266b4b55da7eb9474fac4f02a19316df079e8ea0b0230a3adada7bbf2d9eb74fe1942f0323faf451076c1ee722a8f702a5e7f0450c98cb6b6b0eb9774baad8bc76b5ec62be446924f82e7c991f252352f015ca226da96c69ceb76f67a0fa4dda3a1039a99d1b6ebeb747722d7b702a864461b3d1d80c333a38d9e0ec0e199d1d6d6d3199f483c3e3e960b00604566b4b5851d3d1d801da989b6a531e77249370c2fc971c4e45e5f5621009b196d6b5ea7dbee8e39ebe642799de15ca1b25eb04eeeaed500da98d1d6ded30dc38bff27787e74f33c4b0c71d741e010cc686bebe91e86e1c577703eddf4f37549cb13dcda59c67d5b248fc1a660916024571f0b6a727b74f935658fc3f9dda9e311004b99d1d6d8d3c989ea7667ac9ebea3b334593e1a74cfa5434736e9b8498ee4ea63714d728f7a5350af0b00accb8cb6c69ece2ae84d87481c58e56b61e5adb99a726cd5ac09602d66b435f67456c13a866118d4671195f1312b2ed57395eb63e60a31734d002b32a3adada7eb947473ead4b55e65328aa5f535b6581340c08cb6357bbaadafd989799e8793c22689c8a0584692f5b1c2ee925b0bc720cf657a61bf002a99d1d6d6d3f5bb4ea7dbba783c7e6e16c723c9a029af997ba9c3ce9d23ce80ed98d1b6664f77b7820ece246d5dfd14000566b4edbda73b8486b4caf5aa001a98d1464f07e0f0cc686bebe9483a003b62465b5b4f973e7b1d869777ef9c73eef5f5355900005bf8f4f1434dc02d0dbb2bff9409006835d1b634e6dcaefe9649eed6abe62d59af486e06661502a862465be3753affb74cf4eff96fdad0ad180de545c67385ca7ac13a72b7c3a9e20ed9006a98d1d6d8d375fb5b269d4dd32431c46d0981a330a3adada7ebf7f374d2f504b77f8ebb211909122a1ef723c13a855c0b6afc31248f24b7a6ec713cbf7d753c02a081196d8d3d9d55b01a7dd767e9b37c3ae8b64b8fe8e8498e27d7299c48c6353ae664abde14d4eb0200ab33a36def3d5dbd5c5495af85d55c298b6bcab155b326801599d1b6664fb7fa35bb711c47f55944394126a566bc66ab4b756d26734d00eb32a3adada7eb74f63aa54e5d4ddb35774b6db1268098196d6d3ddd95cf5ea7e8b2da747e51ac302e233e3a93b3b4785fe5ad357b947de9e7009a99d1d61676fd924eb775f17861445e962b9341935baafcb2109ac419b0a99a685b1a73aedbd9eb218c279571262d5efd14006566b4b55da7ebd7d3ed5f435ae51a55006dcc685bb3a7bbcaefbd0280196d6d3d5da79f3201801a66b4b5f5740f4e7570f3fc569efbbf4ff7f8f8989e07001b30a3ad2dec7aff2d130028a889b6a531e76ef86f99dc9be41d6c57b7d15e365ad66db9323662465bdb75bade9fbdfabb05d6df335057d6cff2caf5fa3db068d9b2e080fd93e4fa4bbf9c1ac11bbb79fd781df36883efa7592f92df31575ca47ef14547823d30a3adb1a7b30a7664f5ff5ee7938dfecf7f951b24ce8a555b12ac535ecda7497d7d52bc484ec3e2380a33daf6ded3499a04b7828e1b9f60c4bf9c4fff73d65b655372a29e9bdc9a94dcbb1e49d6ccaa77088e2a9812af933c3cbd66d0f52cfd72e26373a99d260f3b5847bf948985faf8ab4e7e99c915bcf8dfbe7e94b2f85f8d0c06df40ec9c196d6bf6745b5cb393ffecfca3fe0fdd1b54024a812ed64bc97fbeb3fa2f3e58aabca3a464593092acd1ef25bf295e3cb772cd9a35abc92c212385bdc8cb78efc13a7a17c13afe495c2c65b9894171bc483c3d98a257d3eb3b1c93196d7befe972726fa4647159bc5479ab8ce8dd9517c9693b602df9ce972743aab97329f191b41d5b7956e168e37f7d3587ed151671d621e13698d1b6664fb73af91fb57ef466455e06ff63af61feff3cd8918c98657d2cdaaff9c56eadfe6883ccaa9f88fb64465b5b4fd729e9e6538ab9fcc95d107f71c15a820c9d33e7b34ba3762dc9fdce7bbdd864f6d1b963bed6b7173b6746dbae7bba9c595d9af16f89e0e55cdddfe9a5821197da513c3757168cd42c35641ad85c6579cdc2dcdce2494bf79253f8b716afac8f339ea8ff37132f52ff6fdf4b7e5b86cbbe587466465b5b4fd7ef3a9dfcb79b1ccfbdd423c10a8527f1dc786beea57984f148cd52c9e7f5876716b47d7b73dfc3dc3ab9ef92595fa82c6f2a7cafcadfd2fa7cc4ae98d1b6664fc7df32413773e6ea419ba02ba4a13b1c33dada7aba7e3f657250bc4f3a58f19b3c9fc8cb723df6c68cb6f69e6e185efc3fc17300e8cc8cb6c69e8ebf6502603fcc686bebe91eca7fcbe4f5f5351e04808d7cfaf8a126e09686dd957fca0400b49a685b1a738ea46b50bedf36f7c0062e61465be3753aab60657de2a0bcfea8146a729b92e44688e5fb67032833a36dcd9eeee63f94984e48256057cc686bebe9fafd8e84644a70376819979772fbd45c4d305298929b1ecbed227790c14bbd72704800ea99d1d6d6d3f54b3a79ff2783499ec765714d4d8e1476e152b916d72457c815035885196d6d61d72fe9722474449c6571cd22c95dc8a620fb005c514db42d8d39d72de92447c6f35357573ca314353505e6f4a0ef2b1703d88e196d6d61d7e9b3577d3ee84f51e31a9d8653e6b3820b63e8c2e900b656136d4b63ce75ebe97274a20557e5e41c36ae0946e2589491e474175da76b58212ed68b27cb0098cc686b0bbb7e492799921c4fbe94e78b66c52366717230b74261650017aa89b6a531e7ba9dbdde3ce9fb68e8804b98d1163c5aeb7d46d2ad26d7b402a867461b3d1d80c333a38d9e0ec0e199d1d6d6d3199f483c3e3e960b00604566b4b5851d3d1d801da989b6a531e7f690748b6ee8291aa6b8d4acf23a43f186ad00566746db31aed305d9e16f522737ac2b4c310de7ac72db90bafb32804d99d176d49e4ee46e585779233b494c7d133c00c762465b5b4fd7ef7724741fe754c7e45ffabe29e89e829b13cba6e4cba4b826372b5e5c17c8e139005b32a36def3d9d345ceebced8a5bb0f944a7de703acf0d26cec553cbb8c65c9c1355e08acc68db7b4f77b986aeaa3eb6ea2b016cc78cb6157abaa7a7a75cdd85e45302fdb888345cf573e336b06056ac5a005b31a3adada7fb39e99e9e9edebf7f5f28bdc49c39755daa7962bdfa2405b03a33da56e8e9f66c38a90f3be901834b72f13aba52e2389855bf5f00cdcc686bebe93e5fa7dbb4a1f3745b170ce60a824eb03c317e6ebed4230419b00766b4b5f7741d62ee88a4ada3a103ba31a3adada73bccd9eb5524db4900db31a3adb1a7a3a103b01f66b435f674c41c80fd30a3adada7337e72f8f5f5b55c00002bfaf4f1434dc02d0d3baed301d8919a685b1a73ee66926e1c477d63ecd5ef60bdfa8242ee2866150277c18cb6c6eb7456c1ca1aded8717190657203ece0b969d161b8d37e574cd2f1fc36de563970fbcc68bbeb9eae9be9846002b660465b5b4fd7ef6f99e8b34ba7da191d19c188b4667e44776dfa495c602eb5b4b82c5eb3f0442af5f12747803b6446db9a3ddd30bc24c72f21a769eed4193975b2a9c34546742e942340172417d7f1da5c9c943c60b3b25006dc3333dada7aba74d2cdf3dbe4781fe38955685bb4544db1d49869e56b82d52a8f04b85b66b4b5f5740f4e7570f3fc569ebf7b979bd242dee1e3f9a96b5261934c9797e5c431f348ab299ece4f4217d1736bf605dc2133dadac2eecd30bcccf35b69e2f4f3154da953575332502625de9ab3289bcce2b8598bb7ca171bc4f1a2c306ee4d4db42d8d39e7dc83ceb872e916e2c8d0233a2cdcf28c282ce54e89292b978b631261f1c49ce4fa32c5ec4f817b60465b5bd8f5fbec55dedec971170541b226d814af992c288c14e6968bf5cbf2c4421980404db42d8d39b7879fa71b4fee3008a41fbccf2f1f8899d1163c5aeb7dd6afa7cbb9f37778aed505ee93196d6bf67457b966070066b4b5f574d73f7b050061465b5b4f679cbd3e3e3e960b00604566b4b5851d3d1d801da989b6a531e748bafee47e635621708fcc683bc675ba86f7795c3c28c9294bc547359ccb4f5d66c8dc391b806746dbbdf4743e2c84555e25b9ceea7b016032a36def3d9d3447410315b74e7127a5e72673a7b042e5b82e08573faf89eb8375f46330ae0f9eb60e8899d1b6f79e4edf255a1aa5413568be4c8f4810941babc214d9648eebadb26c21f85c66bf43268b01d430a3adada7bbfeef48c476d2e9048125f9a8b32c3e54d994ac07506646dbae7b3a698ef463ceac14caf6e040870a1c82196d6d3d5da7a49b53a7aea664c774c58eafd0a0258f8a860e58ca8cb65df774393e0bf4e5303d22c9982bf083f19436c18e82bd14ea2bf71bc474e52ce0ae98d1d6d6d3f5bb4ea7dbba78dca9b6a850b3b42078b2743c563e12920bb890196d87ece99c6a9d6e2f26e22f4adaba9bfc7a81cb99d1b6f79e2ee786dff0c92f2dd7db027037dcd3018030a3adada723e900ec88196d6d3d9d71f6fafafa5a2e0080157dfaf8a126e096861d3d1d801da989b6a531e7e2a41b869761784996e28ae416625621706c66b41de33a5dc33b362e1e95e49498aeac9f9553b3f7f15ca1d2349eee9138156fb60ddc0033da2eeae90ed4caf9b7bdb0ca13da66097d00e5dcb9f038813b6446db9a3ddd16a927ad8d7e74e7bd4f30929c9b4c8ddc0ab945923541716e657d0093ba357550191bcff7ee8a7bd18fc93d0237c98cb68b7abac016f77b9dd42d9ca5cd19557fe4cbc654c7546e8b0a53ca8bc43581e4ca3971659c7d3ab6e479722f41c00177c28cb6b69eeefabf23113333a5a74b0e268e2a3d520e32620ef7c98cb6f69e6e8b73d580b436fa3167520a657decea60809b67465b5b4ff766185ee273d5d5b36f4a9dba9ae2409c2ace2237e2f71b1c00e798c0bacc686bebe91e7ccc49d8c993e7e7e7eca4f5c4c9359d5f59d323c14ba989a7c48245ca35c9119958b33b2f38ce5c597941bf55c6c956dc3633dadac2aedf753ac9a9e4b853b950a86928d009a59f946be24de5c178b59a9aca97c0fda889b6a531e7faffe4706c3ce1ed9d234d1fdf25dc3c33dadaaed3f5ebe97278ebd6c8f589c08d31a3eda83d1d000833dada7a3a920ec08e98d1d6d6d31967af8f8f8fe502005891196d6d61474f0760476aa26d69ccb95b4dbadc1d5af740ee0d661502f7c88cb6635ca76b789f07778316852939e559c3b94265bd609de1fc76dd9949c0fd32a3ed5e7abaf964f5a4f0cbea27003a33a3adada7ebf7f374124cd2d6f934d181158c48dcf891e45da27353f44497592a374b0b6afc1edb0e7e38bf9b753c02c08cb6bdf774d22e39d534f9b7baeea1f4884e8d422224a7e4c665a9dcac405ca3634eb6ea4d41bd2e00506646dbde7bba7a85dcc9c94d292f55b3a3b8a61c5b356b02c831a36dd73ddd300cc3e9a4d55971302b85322d37a5bc94b9a3b86b33996b022830a3adada7eb947473ead4d5647664f13adb35774b6db12670f3cc68db754f9733cff370128f4832ea82606b724acd52b9595a7c78e5ad357b94e985fd0277cb8cb6b69eaedf753addd6c5e3aef849a80e3597128c17ea83287491dc52e59735070fc06446db217b3a97ead10e64e9c14b5b573f05b82b66b4edbda7cb39f41bbee1e073bd2d00d7b9a75bfd8e390050c38cb6b69eeefa67af0020cc686bebe91267afbaa17b7d7d8d0b0060239f3e7ea809b8a56197e8e9e2dbbf02401f35d1b634e61c67af35b6bb97b6dcf1cb2a04ee85196dc7b84ed7f0ded6c572cbc4427da5a58b8c8a555b456e69384577d406ee96196d77d1d35df76680d309c1046cc48cb6357bba2d2ed5493714b47571af14b74ec94e2a9e18cf8d5fba68d7c9cae448527217b92752399edfa39af4043c33dada7aba7e3f39ecdfccf2e80783e7f148b9890b2a83f8482ea5077387111fa4cbc87d2de54a003966b4b5855dbfa4ab77497713875d50908b9b9a9d4a8d995966f20248aa89b6a531e7ba259d6444f2dc2dd01c07d2b5c9f3faa56a2af5fa4bc5c7062066465b5bd875fa4442e7ce344d956ff54b322550bf94593915afa9e9562e6eeb2abf70e06ed544dbd29873dd7aba9c3835f488ce0bfd24d712e626ba54c4e8650b3b4d92082bef424bae2f5338b1053c33dadac2ae5fd2c93b3c39ee8a57c164446f8a9f17269a2f9be7962716ca00c46aa26d69ccb96e67af05e3c9bd65c164b5a8c01d32a32d78b4d6fbac5f4f9773cf6ff25c2b0adc2d33da8edad3018030a3adada723e900ec88196d6d3d9d71f6faf8f8582e00801599d1d61676f4740076a426da96c69c23e92e27f7fab20a01d8cc683bc675ba865c08ee065d78d9df707e076bab1c80c18c367a3a008767465b5b4fd7efe7e9a4e5096eedac5ba160446e8aea4774f7a41f83f58359b9650bf5353572007acac0fdaa81cb98d1b6f79e4edfd1799e678992f9c497e9111d2be5048967052bc73b2ad7d7ac09607566b4edbda7ab675ef09a53dd533c2ba8895f3a8bb926807599d1b6eb9e6e1806698b9c9532b352280b04b3fc13d96ff0b2b23b2baf09607566b4b5f5749d924e92c2559c8a8a42a01456d0b382b2cafdc60a6b025891196dbbeee972a4459228d123928c661b15cf2abf2cefb772cdf9fc274b064e6c818b99d1d6d6d3f5bb4ea7dbba78dca53ee88c6bea3799dd5cc3911064c0d6cc683b644fe7a246e98a1a8e44daba45b300e498d1b6f79e2e673f01d17624b95e15400333da8edad3018030a3adada723e900ec88196d6d3d5df6ead2f3f3f30f3ffcf0fdf7df27b702c0163e7dfc6095fceccbafbefef69b3fd67476d7bf4e07005a4d7239e79e9f9fad929fdd45d2f5bff996df63fffd02b7a1feb4b452efeb7472df3fabf067bad8df2f31f7b2c1a8b8fc812dda8b04dc54bc3d36806eeea2a7cba9efb92acb00ec53bfa493ee26b89db3ee7a8211c9173fa21b25fd18ac1fccd2e29a98ec2bd84bd0a025f7129fb1720e0bec41bfa40b52c30f06cfe391ca7b3fc7b36a56d6e1259bf4bee29032f702602d5f7ef5753cf8ed377f8c074dbdafd3d5184f7205cd8d52bcf27492dc5dc32e00ac250eb5b698733ee99e9e9eacb24b49bee8c79c49299435d86e65005bd0d1d61c734ef77492775b04dfa44e42eb83a6dcd6e536d5e04c13380a1f7097c49c73eec1e7dad3d3d3fbf7effdd0fbf7ef9f9e9e7ef18b5f1427ae233e6d9ca26b67325248b7c2ac424d701aebeaf6a5e5f622d3dbceb2016817c69cf33d9d64dca6745b178c075d5e6e2437dd5c27571317b8ccbe7223f19a0076a8df67af39419f7538f1f14fa94f99015cd11bdfd0056d5d9f2ecf3b7a4f943cfeb807047045d7efe900405bf4abfb95483a003b92fc69e1cb95fe3edd3ffec3ef929b00603f6afeca13f7790170fbf6f8db6000b0ae07e7fed7aa018063a3a70370fb483a00b7cfff2d933f05a34f4f7ff2ffa4a600c0c1fc3f29d84475475eb4170000000049454e44ae426082')");
1074:
1075:                stmt
1076:                        .executeUpdate("CREATE MEMORY TABLE BLOB_TEST2 AS SELECT * FROM BLOB_TEST");
1077:                con.commit();
1078:                pstmt.close();
1079:                stmt.close();
1080:
1081:                return wb;
1082:            }
1083:        }
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.