From ee9f5392f7d2dc5253fcacd02d80c6fea64cc36c Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Thu, 9 Nov 2006 03:02:34 +0000 Subject: [PATCH 001/109] Added a few ignore files and started working on GUI for DMGInfoView. --- .cvsignore | 5 + lib/.cvsignore | 4 + meta/.cvsignore | 5 + meta/manifest.txt | 1 + meta/metafile.txt | 1 - src/.cvsignore | 5 + src/net/.cvsignore | 5 + src/net/iharder/.cvsignore | 5 + src/org/.cvsignore | 5 + src/org/catacombae/.cvsignore | 5 + src/org/catacombae/dmgx/.cvsignore | 5 + src/org/catacombae/dmgx/gui/.cvsignore | 5 + src/org/catacombae/dmgx/gui/DMGInfoPanel.form | 71 ++++++++++ src/org/catacombae/dmgx/gui/DMGInfoPanel.java | 116 +++++++++++++++++ .../catacombae/dmgx/gui/GeneralInfoPanel.form | 56 ++++++++ .../catacombae/dmgx/gui/GeneralInfoPanel.java | 69 ++++++++++ src/org/catacombae/dmgx/gui/KolyPanel.form | 36 +++++ src/org/catacombae/dmgx/gui/KolyPanel.java | 52 ++++++++ src/org/catacombae/dmgx/gui/PlistPanel.form | 123 ++++++++++++++++++ src/org/catacombae/dmgx/gui/PlistPanel.java | 92 +++++++++++++ .../dmgx/gui/UnknownDataViewPanel.form | 119 +++++++++++++++++ .../dmgx/gui/UnknownDataViewPanel.java | 94 +++++++++++++ src/seep/.cvsignore | 5 + 23 files changed, 883 insertions(+), 1 deletion(-) create mode 100644 .cvsignore create mode 100644 lib/.cvsignore create mode 100644 meta/.cvsignore create mode 100644 meta/manifest.txt delete mode 100644 meta/metafile.txt create mode 100644 src/.cvsignore create mode 100644 src/net/.cvsignore create mode 100644 src/net/iharder/.cvsignore create mode 100644 src/org/.cvsignore create mode 100644 src/org/catacombae/.cvsignore create mode 100644 src/org/catacombae/dmgx/.cvsignore create mode 100644 src/org/catacombae/dmgx/gui/.cvsignore create mode 100644 src/org/catacombae/dmgx/gui/DMGInfoPanel.form create mode 100644 src/org/catacombae/dmgx/gui/DMGInfoPanel.java create mode 100644 src/org/catacombae/dmgx/gui/GeneralInfoPanel.form create mode 100644 src/org/catacombae/dmgx/gui/GeneralInfoPanel.java create mode 100644 src/org/catacombae/dmgx/gui/KolyPanel.form create mode 100644 src/org/catacombae/dmgx/gui/KolyPanel.java create mode 100644 src/org/catacombae/dmgx/gui/PlistPanel.form create mode 100644 src/org/catacombae/dmgx/gui/PlistPanel.java create mode 100644 src/org/catacombae/dmgx/gui/UnknownDataViewPanel.form create mode 100644 src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java create mode 100644 src/seep/.cvsignore diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/lib/.cvsignore b/lib/.cvsignore new file mode 100644 index 0000000..38d196e --- /dev/null +++ b/lib/.cvsignore @@ -0,0 +1,4 @@ +*~ +*.class +.DS_Store +Thumbs.db diff --git a/meta/.cvsignore b/meta/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/meta/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/meta/manifest.txt b/meta/manifest.txt new file mode 100644 index 0000000..21d0eaa --- /dev/null +++ b/meta/manifest.txt @@ -0,0 +1 @@ +Main-Class: org.catacombae.dmgx.DMGExtractorGraphical diff --git a/meta/metafile.txt b/meta/metafile.txt deleted file mode 100644 index 9a57cee..0000000 --- a/meta/metafile.txt +++ /dev/null @@ -1 +0,0 @@ -Main-Class: DMGExtractorGraphical diff --git a/src/.cvsignore b/src/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/net/.cvsignore b/src/net/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/net/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/net/iharder/.cvsignore b/src/net/iharder/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/net/iharder/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/.cvsignore b/src/org/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/.cvsignore b/src/org/catacombae/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/catacombae/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/dmgx/.cvsignore b/src/org/catacombae/dmgx/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/catacombae/dmgx/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/dmgx/gui/.cvsignore b/src/org/catacombae/dmgx/gui/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/catacombae/dmgx/gui/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/dmgx/gui/DMGInfoPanel.form b/src/org/catacombae/dmgx/gui/DMGInfoPanel.form new file mode 100644 index 0000000..3e5ed5e --- /dev/null +++ b/src/org/catacombae/dmgx/gui/DMGInfoPanel.form @@ -0,0 +1,71 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/org/catacombae/dmgx/gui/DMGInfoPanel.java b/src/org/catacombae/dmgx/gui/DMGInfoPanel.java new file mode 100644 index 0000000..62ee112 --- /dev/null +++ b/src/org/catacombae/dmgx/gui/DMGInfoPanel.java @@ -0,0 +1,116 @@ +/* + * DMGInfoPanel.java + * + * Created on den 7 november 2006, 09:35 + */ + +package org.catacombae.dmgx.gui; + +import java.awt.*; +import javax.swing.*; +import javax.swing.event.*; + +/** + * + * @author erik + */ +public class DMGInfoPanel extends javax.swing.JPanel { + private CardLayout contentsCardLayout; + private String[] contentTags = { + "General info", + "plist", + "Unknown (256 bytes)", + "Block map", + "Unknown (12 bytes)", + "Apple Partition Map", + "Unknown (X bytes)", + "koly"}; + + /** Creates new form DMGInfoPanel */ + public DMGInfoPanel() { + initComponents(); + + ListModel listModel = new javax.swing.AbstractListModel() { + public int getSize() { return contentTags.length; } + public Object getElementAt(int i) { return contentTags[i]; } + }; + + contentsList.setModel(listModel); + + contentsCardLayout = new CardLayout(); + contentsPane.setLayout(contentsCardLayout); + + + // Now, let's add all components to contentsPane + Component[] cmp = new Component[contentTags.length]; + cmp[0] = new GeneralInfoPanel(); + cmp[1] = new PlistPanel(); + cmp[2] = new UnknownDataViewPanel(); + cmp[3] = new JPanel(); // N/I + cmp[4] = new UnknownDataViewPanel(); + cmp[5] = new JPanel(); // N/I + cmp[6] = new UnknownDataViewPanel(); + cmp[7] = new KolyPanel(); + + for(int i = 0; i < contentTags.length; ++i) + contentsPane.add(cmp[i], contentTags[i]); + + contentsList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent lse) { + //System.out.println(lse); + if(!lse.getValueIsAdjusting()) { + int index = contentsList.getSelectedIndex(); + //System.out.println("Switching to " + index + "..."); + contentsCardLayout.show(contentsPane, contentTags[index]); + } + } + }); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + listContentsSplitter = new javax.swing.JSplitPane(); + contentsListScroller = new javax.swing.JScrollPane(); + contentsList = new javax.swing.JList(); + contentsPane = new javax.swing.JPanel(); + + contentsList.setModel(new javax.swing.AbstractListModel() { + String[] strings = { "General info", "plist", "Unknown (256 bytes)", "Block map", "Unknown (12 bytes)", "Apple Partition Map", "Unknown (X bytes)", "koly" }; + public int getSize() { return strings.length; } + public Object getElementAt(int i) { return strings[i]; } + }); + contentsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + contentsListScroller.setViewportView(contentsList); + + listContentsSplitter.setLeftComponent(contentsListScroller); + + contentsPane.setLayout(new java.awt.CardLayout()); + + listContentsSplitter.setRightComponent(contentsPane); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(listContentsSplitter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 549, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(listContentsSplitter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 369, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JList contentsList; + private javax.swing.JScrollPane contentsListScroller; + private javax.swing.JPanel contentsPane; + private javax.swing.JSplitPane listContentsSplitter; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/org/catacombae/dmgx/gui/GeneralInfoPanel.form b/src/org/catacombae/dmgx/gui/GeneralInfoPanel.form new file mode 100644 index 0000000..63665fa --- /dev/null +++ b/src/org/catacombae/dmgx/gui/GeneralInfoPanel.form @@ -0,0 +1,56 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java b/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java new file mode 100644 index 0000000..436064a --- /dev/null +++ b/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java @@ -0,0 +1,69 @@ +/* + * GeneralInfoPanel.java + * + * Created on den 7 november 2006, 09:52 + */ + +package org.catacombae.dmgx.gui; + +/** + * + * @author erik + */ +public class GeneralInfoPanel extends javax.swing.JPanel { + + /** Creates new form GeneralInfoPanel */ + public GeneralInfoPanel() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + jLabel1 = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + + jLabel1.setText("File name:"); + + jLabel2.setText("Size:"); + + jLabel3.setText("Number of partitions:"); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jLabel1) + .add(jLabel2) + .add(jLabel3)) + .addContainerGap(244, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .addContainerGap() + .add(jLabel1) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jLabel2) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jLabel3) + .addContainerGap(222, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/org/catacombae/dmgx/gui/KolyPanel.form b/src/org/catacombae/dmgx/gui/KolyPanel.form new file mode 100644 index 0000000..6aaf191 --- /dev/null +++ b/src/org/catacombae/dmgx/gui/KolyPanel.form @@ -0,0 +1,36 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/org/catacombae/dmgx/gui/KolyPanel.java b/src/org/catacombae/dmgx/gui/KolyPanel.java new file mode 100644 index 0000000..ffc7aac --- /dev/null +++ b/src/org/catacombae/dmgx/gui/KolyPanel.java @@ -0,0 +1,52 @@ +/* + * KolyPanel.java + * + * Created on den 7 november 2006, 16:43 + */ + +package org.catacombae.dmgx.gui; + +/** + * + * @author erik + */ +public class KolyPanel extends javax.swing.JPanel { + + /** Creates new form KolyPanel */ + public KolyPanel() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + jLabel1 = new javax.swing.JLabel(); + + jLabel1.setText("Koly:"); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .add(jLabel1) + .addContainerGap(369, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .add(jLabel1) + .addContainerGap(284, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/org/catacombae/dmgx/gui/PlistPanel.form b/src/org/catacombae/dmgx/gui/PlistPanel.form new file mode 100644 index 0000000..6c320e7 --- /dev/null +++ b/src/org/catacombae/dmgx/gui/PlistPanel.form @@ -0,0 +1,123 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/org/catacombae/dmgx/gui/PlistPanel.java b/src/org/catacombae/dmgx/gui/PlistPanel.java new file mode 100644 index 0000000..1f11dbf --- /dev/null +++ b/src/org/catacombae/dmgx/gui/PlistPanel.java @@ -0,0 +1,92 @@ +/* + * PlistPanel.java + * + * Created on den 7 november 2006, 09:58 + */ + +package org.catacombae.dmgx.gui; + +/** + * + * @author erik + */ +public class PlistPanel extends javax.swing.JPanel { + + /** Creates new form PlistPanel */ + public PlistPanel() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + plistTabs = new javax.swing.JTabbedPane(); + textViewScroller = new javax.swing.JScrollPane(); + textViewArea = new javax.swing.JTextArea(); + hierarchicalViewPanel = new javax.swing.JPanel(); + hierarchicalViewSplitter = new javax.swing.JSplitPane(); + xmlTreeScroller = new javax.swing.JScrollPane(); + xmlTree = new javax.swing.JTree(); + keyDataScroller = new javax.swing.JScrollPane(); + keyDataView = new javax.swing.JTextArea(); + + textViewArea.setColumns(20); + textViewArea.setRows(5); + textViewArea.setText("yo\n"); + textViewScroller.setViewportView(textViewArea); + + plistTabs.addTab("Text view", textViewScroller); + + hierarchicalViewSplitter.setDividerLocation(120); + xmlTreeScroller.setViewportView(xmlTree); + + hierarchicalViewSplitter.setLeftComponent(xmlTreeScroller); + + keyDataView.setColumns(20); + keyDataView.setRows(5); + keyDataScroller.setViewportView(keyDataView); + + hierarchicalViewSplitter.setRightComponent(keyDataScroller); + + org.jdesktop.layout.GroupLayout hierarchicalViewPanelLayout = new org.jdesktop.layout.GroupLayout(hierarchicalViewPanel); + hierarchicalViewPanel.setLayout(hierarchicalViewPanelLayout); + hierarchicalViewPanelLayout.setHorizontalGroup( + hierarchicalViewPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(hierarchicalViewSplitter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE) + ); + hierarchicalViewPanelLayout.setVerticalGroup( + hierarchicalViewPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(hierarchicalViewSplitter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE) + ); + plistTabs.addTab("Hierarchical view", hierarchicalViewPanel); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(plistTabs, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(plistTabs, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel hierarchicalViewPanel; + private javax.swing.JSplitPane hierarchicalViewSplitter; + private javax.swing.JScrollPane keyDataScroller; + private javax.swing.JTextArea keyDataView; + private javax.swing.JTabbedPane plistTabs; + private javax.swing.JTextArea textViewArea; + private javax.swing.JScrollPane textViewScroller; + private javax.swing.JTree xmlTree; + private javax.swing.JScrollPane xmlTreeScroller; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.form b/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.form new file mode 100644 index 0000000..238894a --- /dev/null +++ b/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.form @@ -0,0 +1,119 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java b/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java new file mode 100644 index 0000000..fac0549 --- /dev/null +++ b/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java @@ -0,0 +1,94 @@ +/* + * UnknownDataViewPanel.java + * + * Created on den 7 november 2006, 11:10 + */ + +package org.catacombae.dmgx.gui; + +/** + * + * @author erik + */ +public class UnknownDataViewPanel extends javax.swing.JPanel { + + /** Creates new form UnknownDataViewPanel */ + public UnknownDataViewPanel() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + jTabbedPane1 = new javax.swing.JTabbedPane(); + jScrollPane2 = new javax.swing.JScrollPane(); + jTextArea2 = new javax.swing.JTextArea(); + jPanel1 = new javax.swing.JPanel(); + jPanel2 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + jComboBox1 = new javax.swing.JComboBox(); + jScrollPane1 = new javax.swing.JScrollPane(); + jTextArea1 = new javax.swing.JTextArea(); + + jTextArea2.setColumns(20); + jTextArea2.setRows(5); + jScrollPane2.setViewportView(jTextArea2); + + jTabbedPane1.addTab("Hex view", jScrollPane2); + + jLabel1.setText("Encoding:"); + jPanel2.add(jLabel1); + + jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "US-ASCII", "UTF-8", "UTF-16BE" })); + jPanel2.add(jComboBox1); + + jTextArea1.setColumns(20); + jTextArea1.setRows(5); + jScrollPane1.setViewportView(jTextArea1); + + org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE) + .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jPanel1Layout.createSequentialGroup() + .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)) + ); + jTabbedPane1.addTab("Text view", jPanel1); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox jComboBox1; + private javax.swing.JLabel jLabel1; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JTextArea jTextArea1; + private javax.swing.JTextArea jTextArea2; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/seep/.cvsignore b/src/seep/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/seep/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db From b65f3919b505054f78266da35f6160ddec7c7818 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Thu, 9 Nov 2006 11:38:49 +0000 Subject: [PATCH 002/109] =?UTF-8?q?Fixed=20the=20problem=20that=20G=C3=BCn?= =?UTF-8?q?ter=20Dressel=20had=20(I=20think).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also started to modularize DMGExtractor (i.e. not using one large static method). --- buildall.sh | 35 ++- lib/dmgextractor.jar | Bin 137373 -> 139038 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGBlock.java | 33 +++ src/org/catacombae/dmgx/DMGBlockHandlers.java | 56 ++++ src/org/catacombae/dmgx/DMGExtractor.java | 271 +++++++++++------- src/org/catacombae/dmgx/UserInterface.java | 5 + 7 files changed, 288 insertions(+), 114 deletions(-) create mode 100644 src/org/catacombae/dmgx/DMGBlock.java create mode 100644 src/org/catacombae/dmgx/DMGBlockHandlers.java create mode 100644 src/org/catacombae/dmgx/UserInterface.java diff --git a/buildall.sh b/buildall.sh index 9e04556..37f15a3 100644 --- a/buildall.sh +++ b/buildall.sh @@ -9,11 +9,13 @@ error() { SOURCES_DIR=src CLASSFILES_DIR=build.~ LIBRARY_PATH=lib -MANIFEST=meta/metafile.txt +MANIFEST=meta/manifest.txt BUILD_CP=$CLASSFILES_DIR #:$LIBRARY_PATH/filedrop.jar BUILDTOOLS_CP=buildenumerator/buildenumerator.jar JARFILE=dmgextractor.jar +#PACKAGES=org.catacombae.dmgx org.catacombae.dmgx.gui +#COMPILEPATHS=org/catacombae/dmgx/*.java org/catacombae/dmgx/gui/*.java if [ -d "$CLASSFILES_DIR" ]; then # if exists $CLASSFILES_DIR... echo "Removing all class files..." @@ -40,21 +42,26 @@ echo "Incrementing build number..." java -cp $BUILDTOOLS_CP BuildEnumerator $SOURCES_DIR/org/catacombae/dmgx/BuildNumber.java 1 echo "Compiling org.catacombae.dmgx..." javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation -Xlint:unchecked $SOURCES_DIR/org/catacombae/dmgx/*.java -echo "Compiling org.catacombae.dmgx.gui..." -javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation -Xlint:unchecked $SOURCES_DIR/org/catacombae/dmgx/gui/*.java JAVAC_EXIT_CODE=$? -if [ "$JAVAC_EXIT_CODE" == 0 ]; then - echo "Building jar-file..." - if [ ! -d "$LIBRARY_PATH" ]; then # if not exists $LIBRARY_PATH... - echo "Making library path" - mkdir $LIBRARY_PATH - fi - jar cfm $LIBRARY_PATH/$JARFILE $MANIFEST -C $CLASSFILES_DIR . - if [ "$?" == 0 ]; then - echo Done! +if [ "$JAVAC_EXIT_CODE" != 0 ]; then + error +else + echo "Compiling org.catacombae.dmgx.gui..." + javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation -Xlint:unchecked $SOURCES_DIR/org/catacombae/dmgx/gui/*.java + JAVAC_EXIT_CODE=$? + if [ "$JAVAC_EXIT_CODE" == 0 ]; then + echo "Building jar-file..." + if [ ! -d "$LIBRARY_PATH" ]; then # if not exists $LIBRARY_PATH... + echo "Making library path" + mkdir $LIBRARY_PATH + fi + jar cfm $LIBRARY_PATH/$JARFILE $MANIFEST -C $CLASSFILES_DIR . + if [ "$?" == 0 ]; then + echo Done! + else + error + fi else error fi -else - error fi diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index d9da8e1176f6dfa4b694fb78d945605e312d55a5..8f9064def868238a1078ea61ed2d7fe8ca1a40f9 100644 GIT binary patch delta 15263 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 delta 13781 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 long - blocks.add(new DMGBlock(blockType, skipped, outOffset, outSize, inOffset, inSize)); + DMGBlock currentBlock = new DMGBlock(blockType, skipped, outOffset, outSize, inOffset, inSize); + blocks.add(currentBlock); if(lastByteReadInBlock == -1) lastByteReadInBlock = inOffset; @@ -299,52 +308,74 @@ else if(blockType == BT_ZLIB) { if(!testOnly && isoRaf.getFilePointer() != outOffset) println(" " + blockCount + ". BT_ZLIB FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); - - dmgRaf.seek(/*lastOffs+*/inOffset); - if(tmp.length < inSize) - tmp = new byte[(int)inSize]; - - long totalBytesRead = 0; - while(totalBytesRead < inSize) { - totalBytesRead += dmgRaf.read(tmp, (int)totalBytesRead, Math.min((int)(inSize-totalBytesRead), tmp.length)); - } - long progressPercentage = dmgRaf.getFilePointer()*100/dmgRaf.length(); - if(progressPercentage != previousPercentage) { - reportProgress(progressPercentage); - previousPercentage = progressPercentage; - } - - Inflater inflater = new Inflater(); - inflater.setInput(tmp, 0, (int)totalBytesRead); - - if(otmp.length < outSize) - otmp = new byte[(int)outSize]; - - int bytesInflated = 0; - while(true) { + if(true) { try { - int counter = 0; - while(bytesInflated < outSize && counter++ < 10) { - int old = bytesInflated; - bytesInflated += inflater.inflate(otmp, bytesInflated, (int)(outSize-bytesInflated)); - if(old == bytesInflated) - println("Nothing new! finished()=" + inflater.finished() + " needsInput()=" + inflater.needsInput() + " needsDictionary()=" + inflater.needsDictionary() + " getAdler()=" + inflater.getAdler() + " getBytesRead()=" + inflater.getBytesRead() + " getBytesWritten()=" + inflater.getBytesWritten() + " getRemaining()=" + inflater.getRemaining()); - } - //System.out.println(" Inflated " + bytesInflated + " bytes. Left in buffer: " + inflater.getRemaining() + " bytes inSize="+inSize+" outSize="+outSize); - - if(inflater.getRemaining() == 0) { - //System.out.println(" done!"); - break; + DMGBlockHandlers.processZlibBlock(currentBlock, dmgRaf, isoRaf, testOnly, dummyMonitor); + } catch(DataFormatException dfe) { + println(" " + blockCount + ". BT_ZLIB Could not decode..."); + if(!DEBUG) { + println("outOffset=" + outOffset + " outSize=" + outSize + + " inOffset=" + inOffset + " inSize=" + inSize + + " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset); } + dfe.printStackTrace(); + if(!testOnly) + System.exit(0); else { - println(" " + blockCount + ". BT_ZLIB ERROR: otmp contents lost! (should not happen...)", - " outSize=" + outSize + " inSize=" + inSize + " tmp.length=" + tmp.length + " otmp.length=" + otmp.length + " bytesInflated=" + bytesInflated + " inflater.getRemaining()=" + inflater.getRemaining()); -// if(bytesInflated == 0) - throw new RuntimeException("WTF"); + println(" Testing mode, so continuing..."); + //System.exit(0); + errorsFound = true; + break; } } - catch(DataFormatException dfe) { + } + else { + dmgRaf.seek(/*lastOffs+*/inOffset); + + try { + /* + * medan det finns komprimerat data att läsa: + * läs in komprimerat data i inbuffer + * medan det finns data kvar att läsa i inbuffer + * dekomprimera data från inbuffer till utbuffer + * skriv utbuffer till fil + */ + + Inflater inflater = new Inflater(); + long totalBytesRead = 0; + while(totalBytesRead < inSize) { + long bytesRemainingToRead = inSize-totalBytesRead; + int curBytesRead = dmgRaf.read(inBuffer, 0, + (int)Math.min(bytesRemainingToRead, inBuffer.length)); +// ((inSize-totalBytesRead) < inBuffer.length? //Math.min +// (int)(inSize-totalBytesRead): +// inBuffer.length)); + reportFilePointerProgress(dmgRaf); + + if(curBytesRead < 0) + throw new RuntimeException("Unexpectedly reached end of file"); + else { + totalBytesRead += curBytesRead; + inflater.setInput(inBuffer, 0, curBytesRead); + long totalBytesInflated = 0; + while(!inflater.needsInput() && !inflater.finished()) { + long bytesRemainingToInflate = outSize-totalBytesInflated; + int curBytesInflated = inflater.inflate(outBuffer, 0, + (int)Math.min(bytesRemainingToInflate, outBuffer.length)); + if(curBytesInflated == 0) + throw new RuntimeException("Unexpectedly blocked inflate."); + else { + totalBytesInflated += curBytesInflated; + if(!testOnly) + isoRaf.write(outBuffer, 0, curBytesInflated); + } + } + } + } + if(!inflater.finished()) + throw new RuntimeException("Unclosed ZLIB stream!"); + } catch(DataFormatException dfe) { println(" " + blockCount + ". BT_ZLIB Could not decode..."); if(!DEBUG) { println("outOffset=" + outOffset + " outSize=" + outSize + @@ -361,14 +392,73 @@ else if(blockType == BT_ZLIB) { break; } } - } - inflater.end(); + // Older code starts here + +// if(inBuffer.length < inSize) +// inBuffer = new byte[(int)inSize]; - if(!testOnly) - isoRaf.write(otmp, 0, (int)outSize); +// long totalBytesRead = 0; +// while(totalBytesRead < inSize) { +// totalBytesRead += dmgRaf.read(inBuffer, (int)totalBytesRead, Math.min((int)(inSize-totalBytesRead), inBuffer.length)); +// } +// reportFilePointerProgress(dmgRaf); - //lastInOffs = inOffset+inSize; +// Inflater inflater = new Inflater(); +// inflater.setInput(inBuffer, 0, (int)totalBytesRead); + +// if(outBuffer.length < outSize) +// outBuffer = new byte[(int)outSize]; + +// int bytesInflated = 0; +// while(true) { +// try { +// int counter = 0; +// while(bytesInflated < outSize && counter++ < 10) { +// int old = bytesInflated; +// bytesInflated += inflater.inflate(outBuffer, bytesInflated, (int)(outSize-bytesInflated)); +// if(old == bytesInflated) +// println("Nothing new! finished()=" + inflater.finished() + " needsInput()=" + inflater.needsInput() + " needsDictionary()=" + inflater.needsDictionary() + " getAdler()=" + inflater.getAdler() + " getBytesRead()=" + inflater.getBytesRead() + " getBytesWritten()=" + inflater.getBytesWritten() + " getRemaining()=" + inflater.getRemaining()); +// } +// //System.out.println(" Inflated " + bytesInflated + " bytes. Left in buffer: " + inflater.getRemaining() + " bytes inSize="+inSize+" outSize="+outSize); + +// if(inflater.getRemaining() == 0) { +// //System.out.println(" done!"); +// break; +// } +// else { +// println(" " + blockCount + ". BT_ZLIB ERROR: outBuffer contents lost! (should not happen...)", +// " outSize=" + outSize + " inSize=" + inSize + " inBuffer.length=" + inBuffer.length + " outBuffer.length=" + outBuffer.length + " bytesInflated=" + bytesInflated + " inflater.getRemaining()=" + inflater.getRemaining()); +// // if(bytesInflated == 0) +// throw new RuntimeException("WTF"); +// } +// } +// catch(DataFormatException dfe) { +// println(" " + blockCount + ". BT_ZLIB Could not decode..."); +// if(!DEBUG) { +// println("outOffset=" + outOffset + " outSize=" + outSize + +// " inOffset=" + inOffset + " inSize=" + inSize + +// " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset); +// } +// dfe.printStackTrace(); +// if(!testOnly) +// System.exit(0); +// else { +// println(" Testing mode, so continuing..."); +// //System.exit(0); +// errorsFound = true; +// break; +// } +// } + +// } +// inflater.end(); + +// if(!testOnly) +// isoRaf.write(outBuffer, 0, (int)outSize); + +// //lastInOffs = inOffset+inSize; +// } } else if(blockType == BT_BZIP2) { println(" " + blockCount + ". BT_BZIP2 not currently supported."); @@ -383,21 +473,16 @@ else if(blockType == BT_COPY) { println(" " + blockCount + ". BT_COPY FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); dmgRaf.seek(/*lastOffs+*/inOffset); - int bytesRead = dmgRaf.read(tmp, 0, Math.min((int)inSize, tmp.length)); + int bytesRead = dmgRaf.read(inBuffer, 0, Math.min((int)inSize, inBuffer.length)); long totalBytesRead = bytesRead; while(bytesRead != -1) { - long progressPercentage = dmgRaf.getFilePointer()*100/dmgRaf.length(); - if(progressPercentage != previousPercentage) { - reportProgress(progressPercentage); - previousPercentage = progressPercentage; - } - + reportFilePointerProgress(dmgRaf); if(!testOnly) - isoRaf.write(tmp, 0, bytesRead); + isoRaf.write(inBuffer, 0, bytesRead); if(totalBytesRead >= inSize) break; - bytesRead = dmgRaf.read(tmp, 0, Math.min((int)(inSize-totalBytesRead), tmp.length)); + bytesRead = dmgRaf.read(inBuffer, 0, Math.min((int)(inSize-totalBytesRead), inBuffer.length)); if(bytesRead > 0) totalBytesRead += bytesRead; } @@ -411,11 +496,7 @@ else if(blockType == BT_ZERO) { println(" " + blockCount + ". BT_ZERO FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); - long progressPercentage = dmgRaf.getFilePointer()*100/dmgRaf.length(); - if(progressPercentage != previousPercentage) { - reportProgress(progressPercentage); - previousPercentage = progressPercentage; - } + reportFilePointerProgress(dmgRaf); long numberOfZeroBlocks = outSize/zeroblock.length; int numberOfRemainingBytes = (int)(outSize%zeroblock.length); @@ -669,18 +750,26 @@ public static void newline() { System.out.println(); } - public static void reportProgress(long progressPercentage) { - if(!graphical) { - printCurrentLine("--->Progress: " + progressPercentage + "%"); - } - else { - if(progmon == null) { - progmon = new ProgressMonitor(null, "Extracting dmg to iso...", "0%", 0, 100); - progmon.setProgress(0); - progmon.setMillisToPopup(0); + /** Simply calculates the file pointers position relative to the file size as a percentage, and reports it. */ + public static void reportFilePointerProgress(RandomAccessFile raf) throws IOException { + reportProgress((int)(raf.getFilePointer()*100/raf.length())); + } + + public static void reportProgress(int progressPercentage) { + if(progressPercentage != previousPercentage) { + previousPercentage = progressPercentage; + if(!graphical) { + printCurrentLine("--->Progress: " + progressPercentage + "%"); + } + else { + if(progmon == null) { + progmon = new ProgressMonitor(null, "Extracting dmg to iso...", "0%", 0, 100); + progmon.setProgress(0); + progmon.setMillisToPopup(0); + } + progmon.setProgress((int)progressPercentage); + progmon.setNote(progressPercentage + "%"); } - progmon.setProgress((int)progressPercentage); - progmon.setNote(progressPercentage + "%"); } } @@ -803,26 +892,10 @@ public static LinkedList mergeBlocks(LinkedList blockList) { result.addLast(previous); return result; } - - public static class DMGBlock { - public int blockType; - public int skipped; - public long outOffset; - public long outSize; - public long inOffset; - public long inSize; - - public DMGBlock(int blockType, int skipped, long outOffset, long outSize, long inOffset, long inSize) { - this.blockType = blockType; - this.skipped = skipped; - this.outOffset = outOffset; - this.outSize = outSize; - this.inOffset = inOffset; - this.inSize = inSize; - } - - public String toString() { - return "[type: 0x" + Integer.toHexString(blockType) + " skipped: 0x" + Integer.toHexString(skipped) + " outOffset: " + outOffset + " outSize: " + outSize + " inOffset: " + inOffset + " inSize: " + inSize + "]"; + + public static class DummyMonitor implements UserInterface { + public void reportProgress(int progress) { + DMGExtractor.reportProgress(progress); } } } diff --git a/src/org/catacombae/dmgx/UserInterface.java b/src/org/catacombae/dmgx/UserInterface.java new file mode 100644 index 0000000..af45631 --- /dev/null +++ b/src/org/catacombae/dmgx/UserInterface.java @@ -0,0 +1,5 @@ +package org.catacombae.dmgx; + +interface UserInterface { + public void reportProgress(int percentage); +} \ No newline at end of file From ebfa356d13a25e53e46600e31a929544750652ab Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Thu, 9 Nov 2006 12:22:16 +0000 Subject: [PATCH 003/109] =?UTF-8?q?This=20is=20what=20I=20will=20send=20to?= =?UTF-8?q?=20G=C3=BCnter=20Dressel.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dmgx.sh | 3 + lib/dmgextractor.jar | Bin 139038 -> 138594 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGBlockHandlers.java | 83 +++--- src/org/catacombae/dmgx/DMGExtractor.java | 240 +++++------------- 5 files changed, 107 insertions(+), 221 deletions(-) create mode 100644 dmgx.sh diff --git a/dmgx.sh b/dmgx.sh new file mode 100644 index 0000000..bf002e9 --- /dev/null +++ b/dmgx.sh @@ -0,0 +1,3 @@ +#!/bin/sh +java -cp lib/dmgextractor.jar org.catacombae.dmgx.DMGExtractor -startupcommand dmgx $1 $2 $3 $4 $5 $6 $7 $8 $9 + diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 8f9064def868238a1078ea61ed2d7fe8ca1a40f9..dba8a3eb75e49b149b9910455b4854586e845677 100644 GIT binary patch delta 12942 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 Dc0_99 delta 13389 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 merged = mergeBlocks(blocks); + LinkedList merged = mergeBlocks(blocks); // System.out.println("merged.size()=" + merged.size()); // for(DMGBlock b : merged) // System.out.println(" " + b.toString()); - System.out.println("Extracting all the parts not containing block data from source file:"); - int i = 1; - DMGBlock previous = null; - for(DMGBlock b : merged) { - if(previous == null && b.inOffset > 0) { - String filename = i++ + ".block"; - System.out.print(" " + filename + "..."); - FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(0); - byte[] data = new byte[(int)(b.inOffset)]; - dmgRaf.read(data); - curFos.write(data); - curFos.close(); + println("Extracting all the parts not containing block data from source file:"); + int i = 1; + DMGBlock previous = null; + for(DMGBlock b : merged) { + if(previous == null && b.inOffset > 0) { + String filename = i++ + ".block"; + println(" " + new File(filename).getCanonicalPath() + "..."); + FileOutputStream curFos = new FileOutputStream(new File(filename)); + dmgRaf.seek(0); + byte[] data = new byte[(int)(b.inOffset)]; + dmgRaf.read(data); + curFos.write(data); + curFos.close(); + } + else if(previous != null) { + String filename = i++ + ".block"; + println(" " + new File(filename).getCanonicalPath() + "..."); + FileOutputStream curFos = new FileOutputStream(new File(filename)); + dmgRaf.seek(previous.inOffset+previous.inSize); + byte[] data = new byte[(int)(b.inOffset-(previous.inOffset+previous.inSize))]; + dmgRaf.read(data); + curFos.write(data); + curFos.close(); + } + previous = b; } - else if(previous != null) { + if(previous.inOffset+previous.inSize != dmgRaf.length()) { String filename = i++ + ".block"; - System.out.print(" " + filename + "..."); + println(" " + new File(filename).getCanonicalPath() + "..."); FileOutputStream curFos = new FileOutputStream(new File(filename)); dmgRaf.seek(previous.inOffset+previous.inSize); - byte[] data = new byte[(int)(b.inOffset-(previous.inOffset+previous.inSize))]; + byte[] data = new byte[(int)(dmgRaf.length()-(previous.inOffset+previous.inSize))]; dmgRaf.read(data); - curFos.write(data); + curFos.write(data); curFos.close(); } - previous = b; + dmgRaf.close(); + System.out.println("done!"); } - if(previous.inOffset+previous.inSize != dmgRaf.length()) { - String filename = i++ + ".block"; - System.out.print(" " + filename + "..."); - FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(previous.inOffset+previous.inSize); - byte[] data = new byte[(int)(dmgRaf.length()-(previous.inOffset+previous.inSize))]; - dmgRaf.read(data); - curFos.write(data); - curFos.close(); - } - dmgRaf.close(); - System.out.println("done!"); } - public static void parseArgs(String[] args) { boolean parseSuccessful = false; try { From b35815bcab53796350debad8bb4d70fc743137e4 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Thu, 9 Nov 2006 17:53:03 +0000 Subject: [PATCH 004/109] Removed some old stuff and fixed a few bugs. --- buildall.bat | 36 +- dmgx.bat | 2 +- hfsx.bat | 4 - lib/dmgextractor.jar | Bin 138594 -> 139560 bytes src/Attribute.java | 34 - src/Base64.java | 1449 --------------------- src/BuildNumber.java | 26 - src/DMGExtractor.java | 826 ------------ src/DMGExtractorGraphical.java | 27 - src/DMGInfo.java | 147 --- src/DMGMetadata.java | 346 ----- src/NodeBuilder.java | 86 -- src/SimpleFileFilter.java | 52 - src/XMLElement.java | 25 - src/XMLNode.java | 121 -- src/XMLParse.java | 31 - src/XMLText.java | 37 - src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGExtractor.java | 126 +- 19 files changed, 115 insertions(+), 3262 deletions(-) delete mode 100644 hfsx.bat delete mode 100644 src/Attribute.java delete mode 100644 src/Base64.java delete mode 100644 src/BuildNumber.java delete mode 100644 src/DMGExtractor.java delete mode 100644 src/DMGExtractorGraphical.java delete mode 100644 src/DMGInfo.java delete mode 100644 src/DMGMetadata.java delete mode 100644 src/NodeBuilder.java delete mode 100644 src/SimpleFileFilter.java delete mode 100644 src/XMLElement.java delete mode 100644 src/XMLNode.java delete mode 100644 src/XMLParse.java delete mode 100644 src/XMLText.java diff --git a/buildall.bat b/buildall.bat index 92b40bf..3a1aa46 100644 --- a/buildall.bat +++ b/buildall.bat @@ -6,27 +6,51 @@ set SOURCES_DIR=src set CLASSFILES_DIR=build.~ set LIBRARY_PATH=lib set JARFILE=dmgextractor.jar -set MANIFEST=meta\metafile.txt +set MANIFEST=meta\manifest.txt +set BUILD_CP=%CLASSFILES_DIR% +set BUILDTOOLS_CP=buildenumerator\buildenumerator.jar pushd %~dp0 + echo Removing all class files... -if not exist %CLASSFILES_DIR% mkdir %CLASSFILES_DIR% -del /f /q %CLASSFILES_DIR%\*.* +if exist %CLASSFILES_DIR% rmdir /s /q %CLASSFILES_DIR% +mkdir %CLASSFILES_DIR% + +echo Extracting swing-layout to classfiles directory... +pushd %CLASSFILES_DIR% +jar xf "..\%LIBRARY_PATH%\swing-layout-1.0.1-stripped.jar" +popd + +echo Extracting filedrop to classfiles directory... +pushd %CLASSFILES_DIR% +jar xf "..\%LIBRARY_PATH%\filedrop.jar" +popd + echo Incrementing build number... -java -cp .\buildenumerator BuildEnumerator src\BuildNumber.java -echo Compiling... -javac -sourcepath %SOURCES_DIR% -d %CLASSFILES_DIR% -Xlint:unchecked %SOURCES_DIR%\*.java +java -cp %BUILDTOOLS_CP% BuildEnumerator "%SOURCES_DIR%\org\catacombae\dmgx\BuildNumber.java" 1 + +echo Compiling org.catacombae.dmgx... +javac -sourcepath %SOURCES_DIR% -classpath %BUILD_CP% -d %CLASSFILES_DIR% -Xlint:unchecked %SOURCES_DIR%\org\catacombae\dmgx\*.java +set JAVAC_EXIT_CODE=%ERRORLEVEL% +if not "%JAVAC_EXIT_CODE%"=="0" goto error + +echo Compiling org.catacombae.dmgx.gui... +javac -sourcepath %SOURCES_DIR% -classpath %BUILD_CP% -d %CLASSFILES_DIR% -Xlint:unchecked %SOURCES_DIR%\org\catacombae\dmgx\gui\*.java set JAVAC_EXIT_CODE=%ERRORLEVEL% if not "%JAVAC_EXIT_CODE%"=="0" goto error + echo Building jar-file... if not exist %LIBRARY_PATH% mkdir %LIBRARY_PATH% jar cvfm %LIBRARY_PATH%\%JARFILE% %MANIFEST% -C %CLASSFILES_DIR% . >NUL: if "%ERRORLEVEL%"=="0" (echo Done!) else echo Problems while building jar-file... + popd goto end :error echo There were errors... +echo Decrementing build number... +java -cp %BUILDTOOLS_CP% BuildEnumerator %SOURCES_DIR%\org\catacombae\dmgx\BuildNumber.java -1 goto end :end diff --git a/dmgx.bat b/dmgx.bat index a495b63..111ae1c 100644 --- a/dmgx.bat +++ b/dmgx.bat @@ -1,4 +1,4 @@ @echo off pushd %~dp0 -java -cp lib\dmgextractor.jar DMGExtractor -startupcommand dmgx %1 %2 %3 %4 %5 %6 %7 %8 %9 +java -cp lib\dmgextractor.jar org.catacombae.dmgx.DMGExtractor -startupcommand dmgx %1 %2 %3 %4 %5 %6 %7 %8 %9 popd diff --git a/hfsx.bat b/hfsx.bat deleted file mode 100644 index 8c8b93a..0000000 --- a/hfsx.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -pushd %~dp0 -java -cp lib\dmgexplorer.jar HFSExplorer %1 %2 %3 %4 %5 %6 %7 %8 %9 -popd diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index dba8a3eb75e49b149b9910455b4854586e845677..68d35595d51476225db3ca503af8e71293d123f5 100644 GIT binary patch delta 13428 zcmZXa1yogAwD&m&knZl1?nY9iC8fI?=@1Y&boUXCAT1$CBPpFC9U{`*jUXb(w-49* z-t~PrVD0^zbN$zxEB4-wG1pp9-*uy6YA7Qj5h9=h|IXr4FvY;YUnLeu4SF{ZF2cA( zGUU@cnM4uP$qB<)8Ky3s(R~9%Rr(ira~&khSM=%MEuDXl7L=xsQqk&9VOXsX<~Bko z>BPGS4_%hmEa^*I9M;Q^3{fvS;Ae_cQK_FTnI4A>%1!(G2LCZ++mg@l; zGQ53+;Y?0(&-B9rZBD}>_v4nG|m+CqE)O1dm=kx&>yIqXoT%clAD(#gv)zf z;oCdwYJ~!UuNduDe3w;Vi3maeEZ9Gr3COTWFBLwwu)H%6ah{~!I;N-X*6sQQRwqbETwCME_~R+Lp}w*>LC`kOAin2A^A|p@$ZUZUy5NMmhg#cm z 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 diff --git a/src/Attribute.java b/src/Attribute.java deleted file mode 100644 index fa62722..0000000 --- a/src/Attribute.java +++ /dev/null @@ -1,34 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -class Attribute { - public final String localName; - public final String qName; - public final String type; - public final String URI; - public final String value; - public Attribute(String localName, String qName, String type, String URI, String value) { - this.localName = localName; - this.qName = qName; - this.type = type; - this.URI = URI; - this.value = value; - } -} diff --git a/src/Base64.java b/src/Base64.java deleted file mode 100644 index c6d79b6..0000000 --- a/src/Base64.java +++ /dev/null @@ -1,1449 +0,0 @@ -/** - * Encodes and decodes to and from Base64 notation. - * - *

- * Change Log: - *

- *
    - *
  • v2.1 - Cleaned up javadoc comments and unused variables and methods. Added - * some convenience methods for reading and writing to and from files.
  • - *
  • v2.0.2 - Now specifies UTF-8 encoding in places where the code fails on systems - * with other encodings (like EBCDIC).
  • - *
  • v2.0.1 - Fixed an error when decoding a single byte, that is, when the - * encoded data was a single byte.
  • - *
  • v2.0 - I got rid of methods that used booleans to set options. - * Now everything is more consolidated and cleaner. The code now detects - * when data that's being decoded is gzip-compressed and will decompress it - * automatically. Generally things are cleaner. You'll probably have to - * change some method calls that you were making to support the new - * options format (ints that you "OR" together).
  • - *
  • v1.5.1 - Fixed bug when decompressing and decoding to a - * byte[] using decode( String s, boolean gzipCompressed ). - * Added the ability to "suspend" encoding in the Output Stream so - * you can turn on and off the encoding if you need to embed base64 - * data in an otherwise "normal" stream (like an XML file).
  • - *
  • v1.5 - Output stream pases on flush() command but doesn't do anything itself. - * This helps when using GZIP streams. - * Added the ability to GZip-compress objects before encoding them.
  • - *
  • v1.4 - Added helper methods to read/write files.
  • - *
  • v1.3.6 - Fixed OutputStream.flush() so that 'position' is reset.
  • - *
  • v1.3.5 - Added flag to turn on and off line breaks. Fixed bug in input stream - * where last buffer being read, if not completely full, was not returned.
  • - *
  • v1.3.4 - Fixed when "improperly padded stream" error was thrown at the wrong time.
  • - *
  • v1.3.3 - Fixed I/O streams which were totally messed up.
  • - *
- * - *

- * I am placing this code in the Public Domain. Do with it as you will. - * This software comes with no guarantees or warranties but with - * plenty of well-wishing instead! - * Please visit http://iharder.net/base64 - * periodically to check for updates or to contribute improvements. - *

- * - * @author Robert Harder - * @author rob@iharder.net - * @version 2.1 - */ -public class Base64 -{ - -/* ******** P U B L I C F I E L D S ******** */ - - - /** No options specified. Value is zero. */ - public final static int NO_OPTIONS = 0; - - /** Specify encoding. */ - public final static int ENCODE = 1; - - - /** Specify decoding. */ - public final static int DECODE = 0; - - - /** Specify that data should be gzip-compressed. */ - public final static int GZIP = 2; - - - /** Don't break lines when encoding (violates strict Base64 specification) */ - public final static int DONT_BREAK_LINES = 8; - - -/* ******** P R I V A T E F I E L D S ******** */ - - - /** Maximum line length (76) of Base64 output. */ - private final static int MAX_LINE_LENGTH = 76; - - - /** The equals sign (=) as a byte. */ - private final static byte EQUALS_SIGN = (byte)'='; - - - /** The new line character (\n) as a byte. */ - private final static byte NEW_LINE = (byte)'\n'; - - - /** Preferred encoding. */ - private final static String PREFERRED_ENCODING = "UTF-8"; - - - /** The 64 valid Base64 values. */ - private final static byte[] ALPHABET; - private final static byte[] _NATIVE_ALPHABET = /* May be something funny like EBCDIC */ - { - (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', - (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', - (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', - (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', - (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', - (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', - (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', - (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z', - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', - (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'+', (byte)'/' - }; - - /** Determine which ALPHABET to use. */ - static - { - byte[] __bytes; - try - { - __bytes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".getBytes( PREFERRED_ENCODING ); - } // end try - catch (java.io.UnsupportedEncodingException use) - { - __bytes = _NATIVE_ALPHABET; // Fall back to native encoding - } // end catch - ALPHABET = __bytes; - } // end static - - - /** - * Translates a Base64 value to either its 6-bit reconstruction value - * or a negative number indicating some other meaning. - **/ - private final static byte[] DECODABET = - { - -9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 0 - 8 - -5,-5, // Whitespace: Tab and Linefeed - -9,-9, // Decimal 11 - 12 - -5, // Whitespace: Carriage Return - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 14 - 26 - -9,-9,-9,-9,-9, // Decimal 27 - 31 - -5, // Whitespace: Space - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 33 - 42 - 62, // Plus sign at decimal 43 - -9,-9,-9, // Decimal 44 - 46 - 63, // Slash at decimal 47 - 52,53,54,55,56,57,58,59,60,61, // Numbers zero through nine - -9,-9,-9, // Decimal 58 - 60 - -1, // Equals sign at decimal 61 - -9,-9,-9, // Decimal 62 - 64 - 0,1,2,3,4,5,6,7,8,9,10,11,12,13, // Letters 'A' through 'N' - 14,15,16,17,18,19,20,21,22,23,24,25, // Letters 'O' through 'Z' - -9,-9,-9,-9,-9,-9, // Decimal 91 - 96 - 26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm' - 39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z' - -9,-9,-9,-9 // Decimal 123 - 126 - /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 179 - 191 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 192 - 204 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243 - -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */ - }; - - // I think I end up not using the BAD_ENCODING indicator. - //private final static byte BAD_ENCODING = -9; // Indicates error in encoding - private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding - private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding - - - /** Defeats instantiation. */ - private Base64(){} - - - -/* ******** E N C O D I N G M E T H O D S ******** */ - - - /** - * Encodes up to the first three bytes of array threeBytes - * and returns a four-byte array in Base64 notation. - * The actual number of significant bytes in your array is - * given by numSigBytes. - * The array threeBytes needs only be as big as - * numSigBytes. - * Code can reuse a byte array by passing a four-byte array as b4. - * - * @param b4 A reusable byte array to reduce array instantiation - * @param threeBytes the array to convert - * @param numSigBytes the number of significant bytes in your array - * @return four byte array in Base64 notation. - * @since 1.5.1 - */ - private static byte[] encode3to4( byte[] b4, byte[] threeBytes, int numSigBytes ) - { - encode3to4( threeBytes, 0, numSigBytes, b4, 0 ); - return b4; - } // end encode3to4 - - - /** - * Encodes up to three bytes of the array source - * and writes the resulting four Base64 bytes to destination. - * The source and destination arrays can be manipulated - * anywhere along their length by specifying - * srcOffset and destOffset. - * This method does not check to make sure your arrays - * are large enough to accomodate srcOffset + 3 for - * the source array or destOffset + 4 for - * the destination array. - * The actual number of significant bytes in your array is - * given by numSigBytes. - * - * @param source the array to convert - * @param srcOffset the index where conversion begins - * @param numSigBytes the number of significant bytes in your array - * @param destination the array to hold the conversion - * @param destOffset the index where output will be put - * @return the destination array - * @since 1.3 - */ - private static byte[] encode3to4( - byte[] source, int srcOffset, int numSigBytes, - byte[] destination, int destOffset ) - { - // 1 2 3 - // 01234567890123456789012345678901 Bit position - // --------000000001111111122222222 Array position from threeBytes - // --------| || || || | Six bit groups to index ALPHABET - // >>18 >>12 >> 6 >> 0 Right shift necessary - // 0x3f 0x3f 0x3f Additional AND - - // Create buffer with zero-padding if there are only one or two - // significant bytes passed in the array. - // We have to shift left 24 in order to flush out the 1's that appear - // when Java treats a value as negative that is cast from a byte to an int. - int inBuff = ( numSigBytes > 0 ? ((source[ srcOffset ] << 24) >>> 8) : 0 ) - | ( numSigBytes > 1 ? ((source[ srcOffset + 1 ] << 24) >>> 16) : 0 ) - | ( numSigBytes > 2 ? ((source[ srcOffset + 2 ] << 24) >>> 24) : 0 ); - - switch( numSigBytes ) - { - case 3: - destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; - destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; - destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>> 6) & 0x3f ]; - destination[ destOffset + 3 ] = ALPHABET[ (inBuff ) & 0x3f ]; - return destination; - - case 2: - destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; - destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; - destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>> 6) & 0x3f ]; - destination[ destOffset + 3 ] = EQUALS_SIGN; - return destination; - - case 1: - destination[ destOffset ] = ALPHABET[ (inBuff >>> 18) ]; - destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ]; - destination[ destOffset + 2 ] = EQUALS_SIGN; - destination[ destOffset + 3 ] = EQUALS_SIGN; - return destination; - - default: - return destination; - } // end switch - } // end encode3to4 - - - - /** - * Serializes an object and returns the Base64-encoded - * version of that serialized object. If the object - * cannot be serialized or there is another error, - * the method will return null. - * The object is not GZip-compressed before being encoded. - * - * @param serializableObject The object to encode - * @return The Base64-encoded object - * @since 1.4 - */ - public static String encodeObject( java.io.Serializable serializableObject ) - { - return encodeObject( serializableObject, NO_OPTIONS ); - } // end encodeObject - - - - /** - * Serializes an object and returns the Base64-encoded - * version of that serialized object. If the object - * cannot be serialized or there is another error, - * the method will return null. - *

- * Valid options:

-     *   GZIP: gzip-compresses object before encoding it.
-     *   DONT_BREAK_LINES: don't break lines at 76 characters
-     *     Note: Technically, this makes your encoding non-compliant.
-     * 
- *

- * Example: encodeObject( myObj, Base64.GZIP ) or - *

- * Example: encodeObject( myObj, Base64.GZIP | Base64.DONT_BREAK_LINES ) - * - * @param serializableObject The object to encode - * @param options Specified options - * @return The Base64-encoded object - * @see Base64#GZIP - * @see Base64#DONT_BREAK_LINES - * @since 2.0 - */ - public static String encodeObject( java.io.Serializable serializableObject, int options ) - { - // Streams - java.io.ByteArrayOutputStream baos = null; - java.io.OutputStream b64os = null; - java.io.ObjectOutputStream oos = null; - java.util.zip.GZIPOutputStream gzos = null; - - // Isolate options - int gzip = (options & GZIP); - int dontBreakLines = (options & DONT_BREAK_LINES); - - try - { - // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream - baos = new java.io.ByteArrayOutputStream(); - b64os = new Base64.OutputStream( baos, ENCODE | dontBreakLines ); - - // GZip? - if( gzip == GZIP ) - { - gzos = new java.util.zip.GZIPOutputStream( b64os ); - oos = new java.io.ObjectOutputStream( gzos ); - } // end if: gzip - else - oos = new java.io.ObjectOutputStream( b64os ); - - oos.writeObject( serializableObject ); - } // end try - catch( java.io.IOException e ) - { - e.printStackTrace(); - return null; - } // end catch - finally - { - try{ oos.close(); } catch( Exception e ){} - try{ gzos.close(); } catch( Exception e ){} - try{ b64os.close(); } catch( Exception e ){} - try{ baos.close(); } catch( Exception e ){} - } // end finally - - // Return value according to relevant encoding. - try - { - return new String( baos.toByteArray(), PREFERRED_ENCODING ); - } // end try - catch (java.io.UnsupportedEncodingException uue) - { - return new String( baos.toByteArray() ); - } // end catch - - } // end encode - - - - /** - * Encodes a byte array into Base64 notation. - * Does not GZip-compress data. - * - * @param source The data to convert - * @since 1.4 - */ - public static String encodeBytes( byte[] source ) - { - return encodeBytes( source, 0, source.length, NO_OPTIONS ); - } // end encodeBytes - - - - /** - * Encodes a byte array into Base64 notation. - *

- * Valid options:

-     *   GZIP: gzip-compresses object before encoding it.
-     *   DONT_BREAK_LINES: don't break lines at 76 characters
-     *     Note: Technically, this makes your encoding non-compliant.
-     * 
- *

- * Example: encodeBytes( myData, Base64.GZIP ) or - *

- * Example: encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES ) - * - * - * @param source The data to convert - * @param options Specified options - * @see Base64#GZIP - * @see Base64#DONT_BREAK_LINES - * @since 2.0 - */ - public static String encodeBytes( byte[] source, int options ) - { - return encodeBytes( source, 0, source.length, options ); - } // end encodeBytes - - - /** - * Encodes a byte array into Base64 notation. - * Does not GZip-compress data. - * - * @param source The data to convert - * @param off Offset in array where conversion should begin - * @param len Length of data to convert - * @since 1.4 - */ - public static String encodeBytes( byte[] source, int off, int len ) - { - return encodeBytes( source, off, len, NO_OPTIONS ); - } // end encodeBytes - - - - /** - * Encodes a byte array into Base64 notation. - *

- * Valid options:

-     *   GZIP: gzip-compresses object before encoding it.
-     *   DONT_BREAK_LINES: don't break lines at 76 characters
-     *     Note: Technically, this makes your encoding non-compliant.
-     * 
- *

- * Example: encodeBytes( myData, Base64.GZIP ) or - *

- * Example: encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES ) - * - * - * @param source The data to convert - * @param off Offset in array where conversion should begin - * @param len Length of data to convert - * @param options Specified options - * @see Base64#GZIP - * @see Base64#DONT_BREAK_LINES - * @since 2.0 - */ - public static String encodeBytes( byte[] source, int off, int len, int options ) - { - // Isolate options - int dontBreakLines = ( options & DONT_BREAK_LINES ); - int gzip = ( options & GZIP ); - - // Compress? - if( gzip == GZIP ) - { - java.io.ByteArrayOutputStream baos = null; - java.util.zip.GZIPOutputStream gzos = null; - Base64.OutputStream b64os = null; - - - try - { - // GZip -> Base64 -> ByteArray - baos = new java.io.ByteArrayOutputStream(); - b64os = new Base64.OutputStream( baos, ENCODE | dontBreakLines ); - gzos = new java.util.zip.GZIPOutputStream( b64os ); - - gzos.write( source, off, len ); - gzos.close(); - } // end try - catch( java.io.IOException e ) - { - e.printStackTrace(); - return null; - } // end catch - finally - { - try{ gzos.close(); } catch( Exception e ){} - try{ b64os.close(); } catch( Exception e ){} - try{ baos.close(); } catch( Exception e ){} - } // end finally - - // Return value according to relevant encoding. - try - { - return new String( baos.toByteArray(), PREFERRED_ENCODING ); - } // end try - catch (java.io.UnsupportedEncodingException uue) - { - return new String( baos.toByteArray() ); - } // end catch - } // end if: compress - - // Else, don't compress. Better not to use streams at all then. - else - { - // Convert option to boolean in way that code likes it. - boolean breakLines = dontBreakLines == 0; - - int len43 = len * 4 / 3; - byte[] outBuff = new byte[ ( len43 ) // Main 4:3 - + ( (len % 3) > 0 ? 4 : 0 ) // Account for padding - + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines - int d = 0; - int e = 0; - int len2 = len - 2; - int lineLength = 0; - for( ; d < len2; d+=3, e+=4 ) - { - encode3to4( source, d+off, 3, outBuff, e ); - - lineLength += 4; - if( breakLines && lineLength == MAX_LINE_LENGTH ) - { - outBuff[e+4] = NEW_LINE; - e++; - lineLength = 0; - } // end if: end of line - } // en dfor: each piece of array - - if( d < len ) - { - encode3to4( source, d+off, len - d, outBuff, e ); - e += 4; - } // end if: some padding needed - - - // Return value according to relevant encoding. - try - { - return new String( outBuff, 0, e, PREFERRED_ENCODING ); - } // end try - catch (java.io.UnsupportedEncodingException uue) - { - return new String( outBuff, 0, e ); - } // end catch - - } // end else: don't compress - - } // end encodeBytes - - - - - -/* ******** D E C O D I N G M E T H O D S ******** */ - - - /** - * Decodes four bytes from array source - * and writes the resulting bytes (up to three of them) - * to destination. - * The source and destination arrays can be manipulated - * anywhere along their length by specifying - * srcOffset and destOffset. - * This method does not check to make sure your arrays - * are large enough to accomodate srcOffset + 4 for - * the source array or destOffset + 3 for - * the destination array. - * This method returns the actual number of bytes that - * were converted from the Base64 encoding. - * - * - * @param source the array to convert - * @param srcOffset the index where conversion begins - * @param destination the array to hold the conversion - * @param destOffset the index where output will be put - * @return the number of decoded bytes converted - * @since 1.3 - */ - private static int decode4to3( byte[] source, int srcOffset, byte[] destination, int destOffset ) - { - // Example: Dk== - if( source[ srcOffset + 2] == EQUALS_SIGN ) - { - // Two ways to do the same thing. Don't know which way I like best. - //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) - // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 ); - int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) - | ( ( DECODABET[ source[ srcOffset + 1] ] & 0xFF ) << 12 ); - - destination[ destOffset ] = (byte)( outBuff >>> 16 ); - return 1; - } - - // Example: DkL= - else if( source[ srcOffset + 3 ] == EQUALS_SIGN ) - { - // Two ways to do the same thing. Don't know which way I like best. - //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) - // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) - // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ); - int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) - | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 ) - | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) << 6 ); - - destination[ destOffset ] = (byte)( outBuff >>> 16 ); - destination[ destOffset + 1 ] = (byte)( outBuff >>> 8 ); - return 2; - } - - // Example: DkLE - else - { - try{ - // Two ways to do the same thing. Don't know which way I like best. - //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) - // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) - // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ) - // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 ); - int outBuff = ( ( DECODABET[ source[ srcOffset ] ] & 0xFF ) << 18 ) - | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 ) - | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) << 6) - | ( ( DECODABET[ source[ srcOffset + 3 ] ] & 0xFF ) ); - - - destination[ destOffset ] = (byte)( outBuff >> 16 ); - destination[ destOffset + 1 ] = (byte)( outBuff >> 8 ); - destination[ destOffset + 2 ] = (byte)( outBuff ); - - return 3; - }catch( Exception e){ - System.out.println(""+source[srcOffset]+ ": " + ( DECODABET[ source[ srcOffset ] ] ) ); - System.out.println(""+source[srcOffset+1]+ ": " + ( DECODABET[ source[ srcOffset + 1 ] ] ) ); - System.out.println(""+source[srcOffset+2]+ ": " + ( DECODABET[ source[ srcOffset + 2 ] ] ) ); - System.out.println(""+source[srcOffset+3]+ ": " + ( DECODABET[ source[ srcOffset + 3 ] ] ) ); - return -1; - } //e nd catch - } - } // end decodeToBytes - - - - - /** - * Very low-level access to decoding ASCII characters in - * the form of a byte array. Does not support automatically - * gunzipping or any other "fancy" features. - * - * @param source The Base64 encoded data - * @param off The offset of where to begin decoding - * @param len The length of characters to decode - * @return decoded data - * @since 1.3 - */ - public static byte[] decode( byte[] source, int off, int len ) - { - int len34 = len * 3 / 4; - byte[] outBuff = new byte[ len34 ]; // Upper limit on size of output - int outBuffPosn = 0; - - byte[] b4 = new byte[4]; - int b4Posn = 0; - int i = 0; - byte sbiCrop = 0; - byte sbiDecode = 0; - for( i = off; i < off+len; i++ ) - { - sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits - sbiDecode = DECODABET[ sbiCrop ]; - - if( sbiDecode >= WHITE_SPACE_ENC ) // White space, Equals sign or better - { - if( sbiDecode >= EQUALS_SIGN_ENC ) - { - b4[ b4Posn++ ] = sbiCrop; - if( b4Posn > 3 ) - { - outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn ); - b4Posn = 0; - - // If that was the equals sign, break out of 'for' loop - if( sbiCrop == EQUALS_SIGN ) - break; - } // end if: quartet built - - } // end if: equals sign or better - - } // end if: white space, equals sign or better - else - { - System.err.println( "Bad Base64 input character at " + i + ": " + source[i] + "(decimal)" ); - return null; - } // end else: - } // each input character - - byte[] out = new byte[ outBuffPosn ]; - System.arraycopy( outBuff, 0, out, 0, outBuffPosn ); - return out; - } // end decode - - - - - /** - * Decodes data from Base64 notation, automatically - * detecting gzip-compressed data and decompressing it. - * - * @param s the string to decode - * @return the decoded data - * @since 1.4 - */ - public static byte[] decode( String s ) - { - byte[] bytes; - try - { - bytes = s.getBytes( PREFERRED_ENCODING ); - } // end try - catch( java.io.UnsupportedEncodingException uee ) - { - bytes = s.getBytes(); - } // end catch - // - - // Decode - bytes = decode( bytes, 0, bytes.length ); - - - // Check to see if it's gzip-compressed - // GZIP Magic Two-Byte Number: 0x8b1f (35615) - if( bytes != null && bytes.length >= 4 ) - { - - int head = ((int)bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00); - if( java.util.zip.GZIPInputStream.GZIP_MAGIC == head ) - { - java.io.ByteArrayInputStream bais = null; - java.util.zip.GZIPInputStream gzis = null; - java.io.ByteArrayOutputStream baos = null; - byte[] buffer = new byte[2048]; - int length = 0; - - try - { - baos = new java.io.ByteArrayOutputStream(); - bais = new java.io.ByteArrayInputStream( bytes ); - gzis = new java.util.zip.GZIPInputStream( bais ); - - while( ( length = gzis.read( buffer ) ) >= 0 ) - { - baos.write(buffer,0,length); - } // end while: reading input - - // No error? Get new bytes. - bytes = baos.toByteArray(); - - } // end try - catch( java.io.IOException e ) - { - // Just return originally-decoded bytes - } // end catch - finally - { - try{ baos.close(); } catch( Exception e ){} - try{ gzis.close(); } catch( Exception e ){} - try{ bais.close(); } catch( Exception e ){} - } // end finally - - } // end if: gzipped - } // end if: bytes.length >= 2 - - return bytes; - } // end decode - - - - - /** - * Attempts to decode Base64 data and deserialize a Java - * Object within. Returns null if there was an error. - * - * @param encodedObject The Base64 data to decode - * @return The decoded and deserialized object - * @since 1.5 - */ - public static Object decodeToObject( String encodedObject ) - { - // Decode and gunzip if necessary - byte[] objBytes = decode( encodedObject ); - - java.io.ByteArrayInputStream bais = null; - java.io.ObjectInputStream ois = null; - Object obj = null; - - try - { - bais = new java.io.ByteArrayInputStream( objBytes ); - ois = new java.io.ObjectInputStream( bais ); - - obj = ois.readObject(); - } // end try - catch( java.io.IOException e ) - { - e.printStackTrace(); - obj = null; - } // end catch - catch( java.lang.ClassNotFoundException e ) - { - e.printStackTrace(); - obj = null; - } // end catch - finally - { - try{ bais.close(); } catch( Exception e ){} - try{ ois.close(); } catch( Exception e ){} - } // end finally - - return obj; - } // end decodeObject - - - - /** - * Convenience method for encoding data to a file. - * - * @param dataToEncode byte array of data to encode in base64 form - * @param filename Filename for saving encoded data - * @return true if successful, false otherwise - * - * @since 2.1 - */ - public static boolean encodeToFile( byte[] dataToEncode, String filename ) - { - boolean success = false; - Base64.OutputStream bos = null; - try - { - bos = new Base64.OutputStream( - new java.io.FileOutputStream( filename ), Base64.ENCODE ); - bos.write( dataToEncode ); - success = true; - } // end try - catch( java.io.IOException e ) - { - - success = false; - } // end catch: IOException - finally - { - try{ bos.close(); } catch( Exception e ){} - } // end finally - - return success; - } // end encodeToFile - - - /** - * Convenience method for decoding data to a file. - * - * @param dataToDecode Base64-encoded data as a string - * @param filename Filename for saving decoded data - * @return true if successful, false otherwise - * - * @since 2.1 - */ - public static boolean decodeToFile( String dataToDecode, String filename ) - { - boolean success = false; - Base64.OutputStream bos = null; - try - { - bos = new Base64.OutputStream( - new java.io.FileOutputStream( filename ), Base64.DECODE ); - bos.write( dataToDecode.getBytes( PREFERRED_ENCODING ) ); - success = true; - } // end try - catch( java.io.IOException e ) - { - success = false; - } // end catch: IOException - finally - { - try{ bos.close(); } catch( Exception e ){} - } // end finally - - return success; - } // end decodeToFile - - - - - /** - * Convenience method for reading a base64-encoded - * file and decoding it. - * - * @param filename Filename for reading encoded data - * @return decoded byte array or null if unsuccessful - * - * @since 2.1 - */ - public static byte[] decodeFromFile( String filename ) - { - byte[] decodedData = null; - Base64.InputStream bis = null; - try - { - // Set up some useful variables - java.io.File file = new java.io.File( filename ); - byte[] buffer = null; - int length = 0; - int numBytes = 0; - - // Check for size of file - if( file.length() > Integer.MAX_VALUE ) - { - System.err.println( "File is too big for this convenience method (" + file.length() + " bytes)." ); - return null; - } // end if: file too big for int index - buffer = new byte[ (int)file.length() ]; - - // Open a stream - bis = new Base64.InputStream( - new java.io.BufferedInputStream( - new java.io.FileInputStream( file ) ), Base64.DECODE ); - - // Read until done - while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 ) - length += numBytes; - - // Save in a variable to return - decodedData = new byte[ length ]; - System.arraycopy( buffer, 0, decodedData, 0, length ); - - } // end try - catch( java.io.IOException e ) - { - System.err.println( "Error decoding from file " + filename ); - } // end catch: IOException - finally - { - try{ bis.close(); } catch( Exception e) {} - } // end finally - - return decodedData; - } // end decodeFromFile - - - - /** - * Convenience method for reading a binary file - * and base64-encoding it. - * - * @param filename Filename for reading binary data - * @return base64-encoded string or null if unsuccessful - * - * @since 2.1 - */ - public static String encodeFromFile( String filename ) - { - String encodedData = null; - Base64.InputStream bis = null; - try - { - // Set up some useful variables - java.io.File file = new java.io.File( filename ); - byte[] buffer = new byte[ (int)(file.length() * 1.4) ]; - int length = 0; - int numBytes = 0; - - // Open a stream - bis = new Base64.InputStream( - new java.io.BufferedInputStream( - new java.io.FileInputStream( file ) ), Base64.ENCODE ); - - // Read until done - while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 ) - length += numBytes; - - // Save in a variable to return - encodedData = new String( buffer, 0, length, Base64.PREFERRED_ENCODING ); - - } // end try - catch( java.io.IOException e ) - { - System.err.println( "Error encoding from file " + filename ); - } // end catch: IOException - finally - { - try{ bis.close(); } catch( Exception e) {} - } // end finally - - return encodedData; - } // end encodeFromFile - - - - - /* ******** I N N E R C L A S S I N P U T S T R E A M ******** */ - - - - /** - * A {@link Base64.InputStream} will read data from another - * java.io.InputStream, given in the constructor, - * and encode/decode to/from Base64 notation on the fly. - * - * @see Base64 - * @since 1.3 - */ - public static class InputStream extends java.io.FilterInputStream - { - private boolean encode; // Encoding or decoding - private int position; // Current position in the buffer - private byte[] buffer; // Small buffer holding converted data - private int bufferLength; // Length of buffer (3 or 4) - private int numSigBytes; // Number of meaningful bytes in the buffer - private int lineLength; - private boolean breakLines; // Break lines at less than 80 characters - - - /** - * Constructs a {@link Base64.InputStream} in DECODE mode. - * - * @param in the java.io.InputStream from which to read data. - * @since 1.3 - */ - public InputStream( java.io.InputStream in ) - { - this( in, DECODE ); - } // end constructor - - - /** - * Constructs a {@link Base64.InputStream} in - * either ENCODE or DECODE mode. - *

- * Valid options:

-         *   ENCODE or DECODE: Encode or Decode as data is read.
-         *   DONT_BREAK_LINES: don't break lines at 76 characters
-         *     (only meaningful when encoding)
-         *     Note: Technically, this makes your encoding non-compliant.
-         * 
- *

- * Example: new Base64.InputStream( in, Base64.DECODE ) - * - * - * @param in the java.io.InputStream from which to read data. - * @param options Specified options - * @see Base64#ENCODE - * @see Base64#DECODE - * @see Base64#DONT_BREAK_LINES - * @since 2.0 - */ - public InputStream( java.io.InputStream in, int options ) - { - super( in ); - this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES; - this.encode = (options & ENCODE) == ENCODE; - this.bufferLength = encode ? 4 : 3; - this.buffer = new byte[ bufferLength ]; - this.position = -1; - this.lineLength = 0; - } // end constructor - - /** - * Reads enough of the input stream to convert - * to/from Base64 and returns the next byte. - * - * @return next byte - * @since 1.3 - */ - public int read() throws java.io.IOException - { - // Do we need to get data? - if( position < 0 ) - { - if( encode ) - { - byte[] b3 = new byte[3]; - int numBinaryBytes = 0; - for( int i = 0; i < 3; i++ ) - { - try - { - int b = in.read(); - - // If end of stream, b is -1. - if( b >= 0 ) - { - b3[i] = (byte)b; - numBinaryBytes++; - } // end if: not end of stream - - } // end try: read - catch( java.io.IOException e ) - { - // Only a problem if we got no data at all. - if( i == 0 ) - throw e; - - } // end catch - } // end for: each needed input byte - - if( numBinaryBytes > 0 ) - { - encode3to4( b3, 0, numBinaryBytes, buffer, 0 ); - position = 0; - numSigBytes = 4; - } // end if: got data - else - { - return -1; - } // end else - } // end if: encoding - - // Else decoding - else - { - byte[] b4 = new byte[4]; - int i = 0; - for( i = 0; i < 4; i++ ) - { - // Read four "meaningful" bytes: - int b = 0; - do{ b = in.read(); } - while( b >= 0 && DECODABET[ b & 0x7f ] <= WHITE_SPACE_ENC ); - - if( b < 0 ) - break; // Reads a -1 if end of stream - - b4[i] = (byte)b; - } // end for: each needed input byte - - if( i == 4 ) - { - numSigBytes = decode4to3( b4, 0, buffer, 0 ); - position = 0; - } // end if: got four characters - else if( i == 0 ){ - return -1; - } // end else if: also padded correctly - else - { - // Must have broken out from above. - throw new java.io.IOException( "Improperly padded Base64 input." ); - } // end - - } // end else: decode - } // end else: get data - - // Got data? - if( position >= 0 ) - { - // End of relevant data? - if( /*!encode &&*/ position >= numSigBytes ) - return -1; - - if( encode && breakLines && lineLength >= MAX_LINE_LENGTH ) - { - lineLength = 0; - return '\n'; - } // end if - else - { - lineLength++; // This isn't important when decoding - // but throwing an extra "if" seems - // just as wasteful. - - int b = buffer[ position++ ]; - - if( position >= bufferLength ) - position = -1; - - return b & 0xFF; // This is how you "cast" a byte that's - // intended to be unsigned. - } // end else - } // end if: position >= 0 - - // Else error - else - { - // When JDK1.4 is more accepted, use an assertion here. - throw new java.io.IOException( "Error in Base64 code reading stream." ); - } // end else - } // end read - - - /** - * Calls {@link #read()} repeatedly until the end of stream - * is reached or len bytes are read. - * Returns number of bytes read into array or -1 if - * end of stream is encountered. - * - * @param dest array to hold values - * @param off offset for array - * @param len max number of bytes to read into array - * @return bytes read into array or -1 if end of stream is encountered. - * @since 1.3 - */ - public int read( byte[] dest, int off, int len ) throws java.io.IOException - { - int i; - int b; - for( i = 0; i < len; i++ ) - { - b = read(); - - //if( b < 0 && i == 0 ) - // return -1; - - if( b >= 0 ) - dest[off + i] = (byte)b; - else if( i == 0 ) - return -1; - else - break; // Out of 'for' loop - } // end for: each byte read - return i; - } // end read - - } // end inner class InputStream - - - - - - - /* ******** I N N E R C L A S S O U T P U T S T R E A M ******** */ - - - - /** - * A {@link Base64.OutputStream} will write data to another - * java.io.OutputStream, given in the constructor, - * and encode/decode to/from Base64 notation on the fly. - * - * @see Base64 - * @since 1.3 - */ - public static class OutputStream extends java.io.FilterOutputStream - { - private boolean encode; - private int position; - private byte[] buffer; - private int bufferLength; - private int lineLength; - private boolean breakLines; - private byte[] b4; // Scratch used in a few places - private boolean suspendEncoding; - - /** - * Constructs a {@link Base64.OutputStream} in ENCODE mode. - * - * @param out the java.io.OutputStream to which data will be written. - * @since 1.3 - */ - public OutputStream( java.io.OutputStream out ) - { - this( out, ENCODE ); - } // end constructor - - - /** - * Constructs a {@link Base64.OutputStream} in - * either ENCODE or DECODE mode. - *

- * Valid options:

-         *   ENCODE or DECODE: Encode or Decode as data is read.
-         *   DONT_BREAK_LINES: don't break lines at 76 characters
-         *     (only meaningful when encoding)
-         *     Note: Technically, this makes your encoding non-compliant.
-         * 
- *

- * Example: new Base64.OutputStream( out, Base64.ENCODE ) - * - * @param out the java.io.OutputStream to which data will be written. - * @param options Specified options. - * @see Base64#ENCODE - * @see Base64#DECODE - * @see Base64#DONT_BREAK_LINES - * @since 1.3 - */ - public OutputStream( java.io.OutputStream out, int options ) - { - super( out ); - this.breakLines = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES; - this.encode = (options & ENCODE) == ENCODE; - this.bufferLength = encode ? 3 : 4; - this.buffer = new byte[ bufferLength ]; - this.position = 0; - this.lineLength = 0; - this.suspendEncoding = false; - this.b4 = new byte[4]; - } // end constructor - - - /** - * Writes the byte to the output stream after - * converting to/from Base64 notation. - * When encoding, bytes are buffered three - * at a time before the output stream actually - * gets a write() call. - * When decoding, bytes are buffered four - * at a time. - * - * @param theByte the byte to write - * @since 1.3 - */ - public void write(int theByte) throws java.io.IOException - { - // Encoding suspended? - if( suspendEncoding ) - { - super.out.write( theByte ); - return; - } // end if: supsended - - // Encode? - if( encode ) - { - buffer[ position++ ] = (byte)theByte; - if( position >= bufferLength ) // Enough to encode. - { - out.write( encode3to4( b4, buffer, bufferLength ) ); - - lineLength += 4; - if( breakLines && lineLength >= MAX_LINE_LENGTH ) - { - out.write( NEW_LINE ); - lineLength = 0; - } // end if: end of line - - position = 0; - } // end if: enough to output - } // end if: encoding - - // Else, Decoding - else - { - // Meaningful Base64 character? - if( DECODABET[ theByte & 0x7f ] > WHITE_SPACE_ENC ) - { - buffer[ position++ ] = (byte)theByte; - if( position >= bufferLength ) // Enough to output. - { - int len = Base64.decode4to3( buffer, 0, b4, 0 ); - out.write( b4, 0, len ); - //out.write( Base64.decode4to3( buffer ) ); - position = 0; - } // end if: enough to output - } // end if: meaningful base64 character - else if( DECODABET[ theByte & 0x7f ] != WHITE_SPACE_ENC ) - { - throw new java.io.IOException( "Invalid character in Base64 data." ); - } // end else: not white space either - } // end else: decoding - } // end write - - - - /** - * Calls {@link #write(int)} repeatedly until len - * bytes are written. - * - * @param theBytes array from which to read bytes - * @param off offset for array - * @param len max number of bytes to read into array - * @since 1.3 - */ - public void write( byte[] theBytes, int off, int len ) throws java.io.IOException - { - // Encoding suspended? - if( suspendEncoding ) - { - super.out.write( theBytes, off, len ); - return; - } // end if: supsended - - for( int i = 0; i < len; i++ ) - { - write( theBytes[ off + i ] ); - } // end for: each byte written - - } // end write - - - - /** - * Method added by PHIL. [Thanks, PHIL. -Rob] - * This pads the buffer without closing the stream. - */ - public void flushBase64() throws java.io.IOException - { - if( position > 0 ) - { - if( encode ) - { - out.write( encode3to4( b4, buffer, position ) ); - position = 0; - } // end if: encoding - else - { - throw new java.io.IOException( "Base64 input not properly padded." ); - } // end else: decoding - } // end if: buffer partially full - - } // end flush - - - /** - * Flushes and closes (I think, in the superclass) the stream. - * - * @since 1.3 - */ - public void close() throws java.io.IOException - { - // 1. Ensure that pending characters are written - flushBase64(); - - // 2. Actually close the stream - // Base class both flushes and closes. - super.close(); - - buffer = null; - out = null; - } // end close - - - - /** - * Suspends encoding of the stream. - * May be helpful if you need to embed a piece of - * base640-encoded data in a stream. - * - * @since 1.5.1 - */ - public void suspendEncoding() throws java.io.IOException - { - flushBase64(); - this.suspendEncoding = true; - } // end suspendEncoding - - - /** - * Resumes encoding of the stream. - * May be helpful if you need to embed a piece of - * base640-encoded data in a stream. - * - * @since 1.5.1 - */ - public void resumeEncoding() - { - this.suspendEncoding = false; - } // end resumeEncoding - - - - } // end inner class OutputStream - - -} // end class Base64 diff --git a/src/BuildNumber.java b/src/BuildNumber.java deleted file mode 100644 index 446a4ad..0000000 --- a/src/BuildNumber.java +++ /dev/null @@ -1,26 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -public class BuildNumber { - //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 130L; - //[BuildEnumerator:Closing] The lines managed by an external program end here. -} - diff --git a/src/DMGExtractor.java b/src/DMGExtractor.java deleted file mode 100644 index c33dcd3..0000000 --- a/src/DMGExtractor.java +++ /dev/null @@ -1,826 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * (C) 2004 vu1tur (not the actual code but...) - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -import java.io.*; -import java.util.LinkedList; -import java.util.Iterator; -import java.util.zip.Inflater; -import java.util.zip.DataFormatException; -import javax.xml.parsers.SAXParserFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.swing.JOptionPane; -import javax.swing.JFileChooser; -import javax.swing.ProgressMonitor; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -public class DMGExtractor { - public static final String APPNAME = "DMGExtractor 0.51pre"; - public static final String BUILDSTRING = "(Build #" + BuildNumber.BUILD_NUMBER + ")"; - public static final boolean DEBUG = false; - // Constants defining block types in the dmg file - public static final int BT_ADC = 0x80000004; - public static final int BT_ZLIB = 0x80000005; - public static final int BT_BZIP2 = 0x80000006; - public static final int BT_COPY = 0x00000001; - public static final int BT_ZERO = 0x00000002; - public static final int BT_END = 0xffffffff; - public static final int BT_UNKNOWN = 0x7ffffffe; - public static final long PLIST_ADDRESS_1 = 0x1E0; - public static final long PLIST_ADDRESS_2 = 0x128; - public static final String BACKSPACE79 = "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; -// public static PrintStream stdout = System.out; -// public static PrintStream stderr = System.err; - public static BufferedReader stdin = - new BufferedReader(new InputStreamReader(System.in)); - - public static boolean verbose = false; - public static boolean graphical = false; - public static String startupCommand = "java DMGExtractor"; - public static File dmgFile = null; - public static File isoFile = null; - - public static ProgressMonitor progmon; - - public static void main(String[] args) throws Exception { - try { - notmain(args); - } catch(Exception e) { - if(graphical) - JOptionPane.showMessageDialog(null, "The program encountered an unexpected error: " + e.toString() + - "\nClosing...", "Error", JOptionPane.ERROR_MESSAGE); - throw e; - } - } - - public static void notmain(String[] args) throws Exception { - System.setProperty("swing.aatext", "true"); //Antialiased text - try { javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); } - catch(Exception e) {} - - if(DEBUG) verbose = true; - - parseArgs(args); - - printlnVerbose("Processing: " + dmgFile); - RandomAccessFile dmgRaf = new RandomAccessFile(dmgFile, "r"); - RandomAccessFile isoRaf = null; - boolean testOnly = false; - if(isoFile != null) { - isoRaf = new RandomAccessFile(isoFile, "rw"); - isoRaf.setLength(0); - printlnVerbose("Extracting to: " + isoFile); - } - else { - testOnly = true; - printlnVerbose("Simulating extraction..."); - } - - dmgRaf.seek(dmgRaf.length()-PLIST_ADDRESS_1); - long plistBegin1 = dmgRaf.readLong(); - long plistEnd = dmgRaf.readLong(); - dmgRaf.seek(dmgRaf.length()-PLIST_ADDRESS_2); - long plistBegin2 = dmgRaf.readLong(); - long plistSize = dmgRaf.readLong(); - - if(DEBUG) { - println("Read addresses:", - " " + plistBegin1, - " " + plistBegin2); - } - if(plistBegin1 != plistBegin2) { - println("Addresses not equal! Assumption broken... =/", - plistBegin1 + " != " + plistBegin2); - System.exit(0); - } - if(plistSize != (plistEnd-plistBegin1)) { - println("plistSize field does not match plistEnd marker!", - "plistSize=" + plistSize + " plistBegin1=" + plistBegin1 + " plistEnd=" + plistEnd + " plistEnd-plistBegin1=" + (plistEnd-plistBegin1)); - } - printlnVerbose("Jumping to address..."); - dmgRaf.seek(plistBegin1); - byte[] buffer = new byte[(int)plistSize]; - dmgRaf.read(buffer); - - InputStream is = new ByteArrayInputStream(buffer); - - NodeBuilder handler = new NodeBuilder(); - SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); - try { -// System.out.println("validation: " + saxParser.getProperty("validation")); -// System.out.println("external-general-entities: " + saxParser.getProperty("external-general-entities")); -// System.out.println("external-parameter-entities: " + saxParser.getProperty("external-parameter-entities")); -// System.out.println("is-standalone: " + saxParser.getProperty("is-standalone")); -// System.out.println("lexical-handler: " + saxParser.getProperty("lexical-handler")); -// System.out.println("parameter-entities: " + saxParser.getProperty("parameter-entities")); -// System.out.println("namespaces: " + saxParser.getProperty("namespaces")); -// System.out.println("namespace-prefixes: " + saxParser.getProperty("namespace-prefixes")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); - System.out.println("isValidating: " + saxParser.isValidating()); - saxParser.parse(is, handler); - } catch(SAXException se) { - se.printStackTrace(); - System.err.println("Could not read the partition list... exiting."); - System.exit(1); - } - - XMLNode[] rootNodes = handler.getRoots(); - if(rootNodes.length != 1) { - println("Could not parse DMG-file!"); - System.exit(0); - } - - /* Ok, now we have a tree built from the XML-document. Let's walk to the right place. */ - /* cd plist - cd dict - cdkey resource-fork (type:dict) - cdkey blkx (type:array) */ - XMLNode current; - XMLElement[] children; - boolean keyFound; - current = rootNodes[0]; //We are at plist... probably (there should be only one root node) - - current = current.cd("dict"); - current = current.cdkey("resource-fork"); - current = current.cdkey("blkx"); - printlnVerbose("Found " + current.getChildren().length + " partitions:"); - - byte[] tmp = new byte[0x40000]; - byte[] otmp = new byte[0x40000]; - - byte[] zeroblock = new byte[4096]; - /* I think java always zeroes its arrays on creation... - but let's play safe. */ - for(int y = 0; y < zeroblock.length; ++y) - zeroblock[y] = 0; - - LinkedList blocks = new LinkedList(); - - //long lastOffs = 0; - long lastOutOffset = 0; - long lastInOffset = 0; - long totalSize = 0; - boolean errorsFound = false; - reportProgress(0); - for(XMLElement xe : current.getChildren()) { - if(progmon != null && progmon.isCanceled()) System.exit(0); - if(xe instanceof XMLNode) { - XMLNode xn = (XMLNode)xe; - byte[] data = Base64.decode(xn.getKeyValue("Data")); - - long partitionSize = calculatePartitionSize(data); - totalSize += partitionSize; - - printlnVerbose(" " + xn.getKeyValue("Name")); - printlnVerbose(" ID: " + xn.getKeyValue("ID")); - printlnVerbose(" Attributes: " + xn.getKeyValue("Attributes")); - printlnVerbose(" Partition map data length: " + data.length + " bytes"); - printlnVerbose(" Partition size: " + partitionSize + " bytes"); - if(verbose) { - printlnVerbose(" Dumping blkx..."); - FileOutputStream fos = new FileOutputStream(xn.getKeyValue("ID") + ".blkx"); - fos.write(data); - fos.close(); - } - - if(DEBUG) { - File dumpFile = new File("data " + xn.getKeyValue("ID") + ".bin"); - println(" Dumping partition map to file: " + dumpFile); - - FileOutputStream dump = new FileOutputStream(dumpFile); - dump.write(data); - dump.close(); - } - - int offset = 0xCC; - int blockType = 0; - - /* Offset of the input data for the current block in the input file */ - long inOffset = 0; - /* Size of the input data for the current block */ - long inSize = 0; - /* Offset of the output data for the current block in the output file */ - long outOffset = 0; - /* Size of the output data (possibly larger than inSize because of - decompression, zero expansion...) */ - long outSize = 0; - - long lastByteReadInBlock = -1; - - boolean addInOffset = false; - - //, lastInOffs = 0; - int blockCount = 0; - long previousPercentage = -1; - while(blockType != BT_END) { - if(progmon != null && progmon.isCanceled()) System.exit(0); - DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); - int bytesSkipped = 0; - while(bytesSkipped < offset) - bytesSkipped += dis.skipBytes(offset-bytesSkipped); - - blockType = dis.readInt(); - int skipped = dis.readInt(); //Skip 4 bytes forward - outOffset = dis.readLong()*0x200;//(dis.readInt() & 0xffffffffL)*0x200; //unsigned int -> long - //dis.readInt(); //Skip 4 bytes forward - outSize = dis.readLong()*0x200;//(dis.readInt() & 0xffffffffL)*0x200; //unsigned int -> long - inOffset = dis.readLong();// & 0xffffffffL; //unsigned int -> long - //dis.readInt(); //Skip 4 bytes forward - inSize = dis.readLong();//dis.readInt() & 0xffffffffL; //unsigned int -> long - - blocks.add(new DMGBlock(blockType, skipped, outOffset, outSize, inOffset, inSize)); - - if(lastByteReadInBlock == -1) - lastByteReadInBlock = inOffset; - lastByteReadInBlock += inSize; - - /* The lines below are a "hack" that I had to do to make dmgx work with - certain dmg-files. I don't understand the issue at all, which is why - this hack is here, but sometimes inOffset == 0 means that it is 0 - relative to the previous partition's last inOffset. And sometimes it - doesn't (meaning the actual position 0 in the dmg file). */ - if(addInOffset) - inOffset += lastInOffset; - else if(inOffset == 0) { - addInOffset = true; - inOffset += lastInOffset; - } - outOffset += lastOutOffset; - - if(DEBUG) { - println("outOffset=" + outOffset + " outSize=" + outSize + - " inOffset=" + inOffset + " inSize=" + inSize + - " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset - /*+ " lastInOffs=" + lastInOffs + " lastOffs=" + lastOffs*/); - } - - if(blockType == BT_ADC) { - println(" " + blockCount + ". BT_ADC not supported."); - if(!testOnly) - System.exit(0); - } - else if(blockType == BT_ZLIB) { - if(DEBUG) - println(" " + blockCount + ". BT_ZLIB processing..."); - - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_ZLIB FP != outOffset (" + - isoRaf.getFilePointer() + " != " + outOffset + ")"); - - dmgRaf.seek(/*lastOffs+*/inOffset); - - if(tmp.length < inSize) - tmp = new byte[(int)inSize]; - - long totalBytesRead = 0; - while(totalBytesRead < inSize) { - totalBytesRead += dmgRaf.read(tmp, (int)totalBytesRead, Math.min((int)(inSize-totalBytesRead), tmp.length)); - } - long progressPercentage = dmgRaf.getFilePointer()*100/dmgRaf.length(); - if(progressPercentage != previousPercentage) { - reportProgress(progressPercentage); - previousPercentage = progressPercentage; - } - - Inflater inflater = new Inflater(); - inflater.setInput(tmp, 0, (int)totalBytesRead); - - if(otmp.length < outSize) - otmp = new byte[(int)outSize]; - - int bytesInflated = 0; - while(true) { - try { - int counter = 0; - while(bytesInflated < outSize && counter++ < 10) { - int old = bytesInflated; - bytesInflated += inflater.inflate(otmp, bytesInflated, (int)(outSize-bytesInflated)); - if(old == bytesInflated) - println("Nothing new! finished()=" + inflater.finished() + " needsInput()=" + inflater.needsInput() + " needsDictionary()=" + inflater.needsDictionary() + " getAdler()=" + inflater.getAdler() + " getBytesRead()=" + inflater.getBytesRead() + " getBytesWritten()=" + inflater.getBytesWritten() + " getRemaining()=" + inflater.getRemaining()); - } - //System.out.println(" Inflated " + bytesInflated + " bytes. Left in buffer: " + inflater.getRemaining() + " bytes inSize="+inSize+" outSize="+outSize); - - if(inflater.getRemaining() == 0) { - //System.out.println(" done!"); - break; - } - else { - println(" " + blockCount + ". BT_ZLIB ERROR: otmp contents lost! (should not happen...)", - " outSize=" + outSize + " inSize=" + inSize + " tmp.length=" + tmp.length + " otmp.length=" + otmp.length + " bytesInflated=" + bytesInflated + " inflater.getRemaining()=" + inflater.getRemaining()); -// if(bytesInflated == 0) - throw new RuntimeException("WTF"); - } - } - catch(DataFormatException dfe) { - println(" " + blockCount + ". BT_ZLIB Could not decode..."); - if(!DEBUG) { - println("outOffset=" + outOffset + " outSize=" + outSize + - " inOffset=" + inOffset + " inSize=" + inSize + - " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset); - } - dfe.printStackTrace(); - if(!testOnly) - System.exit(0); - else { - println(" Testing mode, so continuing..."); - //System.exit(0); - errorsFound = true; - break; - } - } - - } - inflater.end(); - - if(!testOnly) - isoRaf.write(otmp, 0, (int)outSize); - - //lastInOffs = inOffset+inSize; - } - else if(blockType == BT_BZIP2) { - println(" " + blockCount + ". BT_BZIP2 not currently supported."); - if(!testOnly) - System.exit(0); - } - else if(blockType == BT_COPY) { - if(DEBUG) - println(" " + blockCount + ". BT_COPY processing..."); - - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_COPY FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); - dmgRaf.seek(/*lastOffs+*/inOffset); - - int bytesRead = dmgRaf.read(tmp, 0, Math.min((int)inSize, tmp.length)); - long totalBytesRead = bytesRead; - while(bytesRead != -1) { - long progressPercentage = dmgRaf.getFilePointer()*100/dmgRaf.length(); - if(progressPercentage != previousPercentage) { - reportProgress(progressPercentage); - previousPercentage = progressPercentage; - } - - - if(!testOnly) - isoRaf.write(tmp, 0, bytesRead); - if(totalBytesRead >= inSize) - break; - bytesRead = dmgRaf.read(tmp, 0, Math.min((int)(inSize-totalBytesRead), tmp.length)); - if(bytesRead > 0) - totalBytesRead += bytesRead; - } - - //lastInOffs = inOffset+inSize; - } - else if(blockType == BT_ZERO) { - if(DEBUG) - println(" " + blockCount + ". BT_ZERO processing..."); - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_ZERO FP != outOffset (" + - isoRaf.getFilePointer() + " != " + outOffset + ")"); - - long progressPercentage = dmgRaf.getFilePointer()*100/dmgRaf.length(); - if(progressPercentage != previousPercentage) { - reportProgress(progressPercentage); - previousPercentage = progressPercentage; - } - - long numberOfZeroBlocks = outSize/zeroblock.length; - int numberOfRemainingBytes = (int)(outSize%zeroblock.length); - for(int j = 0; j < numberOfZeroBlocks; ++j) { - if(!testOnly) - isoRaf.write(zeroblock); - } - if(!testOnly) - isoRaf.write(zeroblock, 0, numberOfRemainingBytes); - - //lastInOffs = inOffset+inSize; - } - else if(blockType == BT_UNKNOWN) { - /* I have no idea what this blocktype is... but it's common, and usually - doesn't appear more than 2-3 times in a dmg. As long as its input and - output sizes are 0, there's no reason to complain... is there? */ - if(DEBUG) - println(" " + blockCount + ". BT_UNKNOWN processing..."); - if(!(inSize == 0 && outSize == 0)) { - println(" " + blockCount + ". WARNING! Blocktype BT_UNKNOWN had non-zero sizes...", - " inSize=" + inSize + ", outSize=" + outSize); - //println(" The author of the program would be pleased if you contacted him about this."); - // ...or would I? - } - } - else if(blockType == BT_END) { - if(DEBUG) - println(" " + blockCount + ". BT_END processing..."); - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_END FP != outOffset (" + - isoRaf.getFilePointer() + " != " + outOffset + ")"); - - //lastOffs += lastInOffs; - lastOutOffset = outOffset; - lastInOffset += lastByteReadInBlock; - } - else { - println(" " + blockCount + ". WARNING: previously unseen blocktype " + blockType + " [0x" + Integer.toHexString(blockType) + "]", - " " + blockCount + ". outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize); - - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". unknown blocktype FP != outOffset (" + - isoRaf.getFilePointer() + " != " + outOffset + ")"); - - } - - offset += 0x28; - ++blockCount; - } - } - } - //printlnVerbose("Progress: 100% Done!"); - reportProgress(100); - String errors = errorsFound?"There were errors...":"No errors reported."; - if(!graphical) { - newline(); - println(errors); - printlnVerbose("Total extracted bytes: " + totalSize + " B"); - } - else { - progmon.close(); - JOptionPane.showMessageDialog(null, "Extraction complete! " + errors + "\n" + - "Total extracted bytes: " + totalSize + " B", - "Information", JOptionPane.INFORMATION_MESSAGE); - System.exit(0); - } -// System.out.println("blocks.size()=" + blocks.size()); -// for(DMGBlock b : blocks) -// System.out.println(" " + b.toString()); - LinkedList merged = mergeBlocks(blocks); -// System.out.println("merged.size()=" + merged.size()); -// for(DMGBlock b : merged) -// System.out.println(" " + b.toString()); - System.out.println("Extracting all the parts not containing block data from source file:"); - int i = 1; - DMGBlock previous = null; - for(DMGBlock b : merged) { - if(previous == null && b.inOffset > 0) { - String filename = i++ + ".block"; - System.out.print(" " + filename + "..."); - FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(0); - byte[] data = new byte[(int)(b.inOffset)]; - dmgRaf.read(data); - curFos.write(data); - curFos.close(); - } - else if(previous != null) { - String filename = i++ + ".block"; - System.out.print(" " + filename + "..."); - FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(previous.inOffset+previous.inSize); - byte[] data = new byte[(int)(b.inOffset-(previous.inOffset+previous.inSize))]; - dmgRaf.read(data); - curFos.write(data); - curFos.close(); - } - previous = b; - } - if(previous.inOffset+previous.inSize != dmgRaf.length()) { - String filename = i++ + ".block"; - System.out.print(" " + filename + "..."); - FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(previous.inOffset+previous.inSize); - byte[] data = new byte[(int)(dmgRaf.length()-(previous.inOffset+previous.inSize))]; - dmgRaf.read(data); - curFos.write(data); - curFos.close(); - } - dmgRaf.close(); - System.out.println("done!"); - } - - public static void parseArgs(String[] args) { - boolean parseSuccessful = false; - try { - /* Take care of the options... */ - int i; - for(i = 0; i < args.length; ++i) { - String cur = args[i]; - if(!cur.startsWith("-")) - break; - else if(cur.equals("-gui")) - graphical = true; - else if(cur.equals("-v")) - verbose = true; - else if(cur.equals("-startupcommand")) { - startupCommand = args[i+1]; - ++i; - } - } - - println(APPNAME + " " + BUILDSTRING, - "Copyright (c) 2006 Erik Larsson ", - " written from the source code to the original dmg2iso program", - " Copyright (c) 2004 vu1tur ", - " also using the iharder Base64 Encoder/Decoder ", - "", - "This program is distributed under the GNU General Public License version 2 or", - "later.", - "See for the details.", - ""); - - if(i == args.length) { - dmgFile = getInputFileFromUser(); - if(dmgFile == null) - System.exit(0); - if(getOutputConfirmationFromUser()) { - isoFile = getOutputFileFromUser(); - if(isoFile == null) - System.exit(0); - } - } - else { - dmgFile = new File(args[i++]); - if(!dmgFile.exists()) { - println("File \"" + dmgFile + "\" could not be found!"); - System.exit(0); - } - - if(i == args.length-1) - isoFile = new File(args[i]); - else if(i != args.length) - throw new Exception(); - } - - parseSuccessful = true; - } catch(Exception e) { - println(); - println(" usage: " + startupCommand + " [options] []"); - println(" if an iso-file is not supplied, the program will simulate an extraction"); - println(" (useful for detecting errors in dmg-files)"); - println(); - System.exit(0); - } - } - - public static long calculatePartitionSize(byte[] data) throws IOException { - long partitionSize = 0; - DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); - long totalBytesRead; - totalBytesRead = 0; - while(totalBytesRead < 0xCC) - totalBytesRead += dis.skip(0xCC); - - while(totalBytesRead < data.length) { - int bytesRead = 0; - while(bytesRead < 0x10) - bytesRead += dis.skip(0x10-bytesRead); - - partitionSize += dis.readLong()*0x200; - bytesRead += 0x8; - - while(bytesRead < 0x28) - bytesRead += dis.skip(0x28-bytesRead); - totalBytesRead += bytesRead; - } - return partitionSize; - } - - /** Never used. Java is big-endian. */ - public static int swapEndian(int i) { - return - ((i & 0xff000000) >> 24) | - ((i & 0x00ff0000) >> 8 ) | - ((i & 0x0000ff00) << 8 ) | - ((i & 0x000000ff) << 24); - } - - public static void printCurrentLine(String s) { - System.out.print(BACKSPACE79); - System.out.print(s); - } - public static void println() { - System.out.print(BACKSPACE79); - System.out.println(); - } - public static void println(String... lines) { - if(!graphical) { - System.out.print(BACKSPACE79); - for(String s : lines) - System.out.println(s); - } - else { - String resultString = null; - for(String s : lines) { - if(resultString == null) - resultString = s; - else - resultString += "\n" + s; - } - JOptionPane.showMessageDialog(null, resultString, - APPNAME, JOptionPane.INFORMATION_MESSAGE); - } - } - public static void printlnVerbose() { - if(verbose) { - System.out.print(BACKSPACE79); - System.out.println(); - } - } - public static void printlnVerbose(String... lines) { - if(verbose) { - System.out.print(BACKSPACE79); - for(String s : lines) - System.out.println(s); - } - } - - public static void newline() { - System.out.println(); - } - - public static void reportProgress(long progressPercentage) { - if(!graphical) { - printCurrentLine("--->Progress: " + progressPercentage + "%"); - } - else { - if(progmon == null) { - progmon = new ProgressMonitor(null, "Extracting dmg to iso...", "0%", 0, 100); - progmon.setProgress(0); - progmon.setMillisToPopup(0); - } - progmon.setProgress((int)progressPercentage); - progmon.setNote(progressPercentage + "%"); - } - } - - public static File getInputFileFromUser() throws IOException { - if(!graphical) { - //String s = ""; - while(true) { - printCurrentLine("Please specify the path to the dmg file to extract from: "); - File f = new File(stdin.readLine().trim()); - while(!f.exists()) { - println("File does not exist!"); - printCurrentLine("Please specify the path to the dmg file to extract from: "); - f = new File(stdin.readLine().trim()); - } - return f; - } - } - else { - SimpleFileFilter sff = new SimpleFileFilter(); - sff.addExtension("dmg"); - sff.setDescription("DMG disk image files"); - JFileChooser jfc = new JFileChooser(); - jfc.setFileFilter(sff); - jfc.setMultiSelectionEnabled(false); - jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); - jfc.setDialogTitle("Choose the dmg-file to read..."); - while(true) { - if(jfc.showDialog(null, "Open") == JFileChooser.APPROVE_OPTION) { - File f = jfc.getSelectedFile(); - if(f.exists()) - return f; - else - JOptionPane.showMessageDialog(null, "The file does not exist! Choose again...", - "Error", JOptionPane.ERROR_MESSAGE); - } - else - return null; - } - } - } - public static boolean getOutputConfirmationFromUser() throws IOException { - if(!graphical) { - String s = ""; - while(true) { - printCurrentLine("Do you want to specify an output file (y/n)? "); - s = stdin.readLine().trim(); - if(s.equalsIgnoreCase("y")) - return true; - else if(s.equalsIgnoreCase("n")) - return false; - } - } - else { - return JOptionPane.showConfirmDialog(null, "Do you want to specify an output file?", - "Confirmation", JOptionPane.YES_NO_OPTION, - JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION; - } - } - public static File getOutputFileFromUser() throws IOException { - final String msg1 = "Please specify the path of the iso file to extract to: "; - final String msg2 = "The file already exists. Do you want to overwrite?"; - if(!graphical) { - while(true) { - printCurrentLine(msg1); - File f = new File(stdin.readLine().trim()); - while(f.exists()) { - while(true) { - printCurrentLine(msg2 + " (y/n)? "); - String s = stdin.readLine().trim(); - if(s.equalsIgnoreCase("y")) - return f; - else if(s.equalsIgnoreCase("n")) - break; - } - printCurrentLine(msg1); - f = new File(stdin.readLine().trim()); - } - return f; - } - } - else { - JFileChooser jfc = new JFileChooser(); - jfc.setMultiSelectionEnabled(false); - jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); - jfc.setDialogTitle("Choose the output iso-file..."); - while(true) { - if(jfc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { - File f = jfc.getSelectedFile(); - if(!f.exists()) - return f; - else if(JOptionPane.showConfirmDialog(null, msg2, "Confirmation", JOptionPane.YES_NO_OPTION, - JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { - return f; - } - } - else - return null; - } - } - } - - public static LinkedList mergeBlocks(LinkedList blockList) { - LinkedList result = new LinkedList(); - Iterator it = blockList.iterator(); - DMGBlock previous = it.next(); - DMGBlock current; - while(it.hasNext()) { - current = it.next(); - if(current.inSize != 0) { - if(current.inOffset == previous.inOffset+previous.inSize) { - DMGBlock mergedBlock = new DMGBlock(previous.blockType, previous.skipped, previous.outOffset, previous.outSize+current.outSize, previous.inOffset, previous.inSize+current.inSize); - previous = mergedBlock; - } - else { - result.addLast(previous); - previous = current; - } - } - } - result.addLast(previous); - return result; - } - - public static class DMGBlock { - public int blockType; - public int skipped; - public long outOffset; - public long outSize; - public long inOffset; - public long inSize; - - public DMGBlock(int blockType, int skipped, long outOffset, long outSize, long inOffset, long inSize) { - this.blockType = blockType; - this.skipped = skipped; - this.outOffset = outOffset; - this.outSize = outSize; - this.inOffset = inOffset; - this.inSize = inSize; - } - - public String toString() { - return "[type: 0x" + Integer.toHexString(blockType) + " skipped: 0x" + Integer.toHexString(skipped) + " outOffset: " + outOffset + " outSize: " + outSize + " inOffset: " + inOffset + " inSize: " + inSize + "]"; - } - } -} - diff --git a/src/DMGExtractorGraphical.java b/src/DMGExtractorGraphical.java deleted file mode 100644 index 3f37ee7..0000000 --- a/src/DMGExtractorGraphical.java +++ /dev/null @@ -1,27 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -public class DMGExtractorGraphical { - public static void main(String[] args) throws Exception { - String[] newargs = new String[1]; - newargs[0] = "-gui"; - DMGExtractor.main(newargs); - } -} diff --git a/src/DMGInfo.java b/src/DMGInfo.java deleted file mode 100644 index 48b32e9..0000000 --- a/src/DMGInfo.java +++ /dev/null @@ -1,147 +0,0 @@ -import java.io.*; - -public class DMGInfo { - public static void main(String[] args) throws IOException { - RandomAccessFile inRaf = new RandomAccessFile(args[0], "r"); - - // Check opening signature "koly" - inRaf.seek(inRaf.length()-512); - byte[] koly = new byte[4]; - inRaf.readFully(koly); - String kolySignature = new String(koly, "US-ASCII"); - if(!kolySignature.equals("koly")) - System.out.println("ERROR: Signature incorrect. Found \"" + kolySignature + "\" instead of \"koly\"."); - else - System.out.println("\"koly\" signature OK."); - - // Read partition list start location 1 and end location - inRaf.seek(inRaf.length()-0x1E0); - - // -0x1E0: address to plist xml structure (8 bytes) - long plistAddress1 = inRaf.readLong(); - System.out.println("Address to plist: 0x" + Long.toHexString(plistAddress1)); - - - // -0x1D8: address to end of plist xml structure (8 bytes) - long plistEndAddress = inRaf.readLong(); - System.out.println("Address to end of plist: 0x" + Long.toHexString(plistEndAddress)); - System.out.println(" Implication: plist size = " + (plistEndAddress-plistAddress1) + " B"); - - - long unknown_0x1D0 = inRaf.readLong(); - - - long unknown_0x1C8 = inRaf.readLong(); - if(unknown_0x1C8 != 0x0000000100000001L) - System.out.println("Assertion failed! unknown_0x1C8 == 0x" + - Long.toHexString(unknown_0x1C8) + " and not 0x0000000100000001"); - - - long unknown_0x1C0 = inRaf.readLong(); - - - long unknown_0x1B8 = inRaf.readLong(); - System.out.println("Some kind of signature? Value: 0x" + Long.toHexString(unknown_0x1B8)); - - - long unknown_0x1B0 = inRaf.readLong(); - if(unknown_0x1B0 != 0x0000000200000020L) - System.out.println("Assertion failed! unknown_0x1B0 == 0x" + - Long.toHexString(unknown_0x1B0) + " and not 0x0000000200000020"); - - - int unknown_0x1A8 = inRaf.readInt(); - - - int unknown_0x1A4 = inRaf.readInt(); - System.out.println("Some kind of unit size? Value: 0x" + - Integer.toHexString(unknown_0x1A4) + " / " + unknown_0x1A4); - - - // Unknown chunk of data (120 bytes) - byte[] unknown_0x1A0 = new byte[120]; - inRaf.readFully(unknown_0x1A0); - - - // -0x128: address to beginning of plist xml structure (second occurrence) (8 bytes) - long plistAddress2 = inRaf.readLong(); - System.out.println("Address to plist (2): 0x" + Long.toHexString(plistAddress2)); - - - // -0x120: size of plist xml structure (8 bytes) - long plistSize = inRaf.readLong(); - System.out.println("plist size: " + plistSize + " B"); - - - // Unknown chunk of data (120 bytes) - byte[] unknown_0x118 = new byte[120]; - inRaf.readFully(unknown_0x118); - - - // -0x0A0: Checksum type identifier (4 bytes) - System.out.print("Checksum type"); - int cs_type = inRaf.readInt(); - if(cs_type == 0x00000002) - System.out.println(": CRC-32"); - else if(cs_type == 0x00000004) - System.out.println(": MD5"); - else - System.out.println(" unknown! Data: 0x" + Integer.toHexString(cs_type)); - - - // -0x09C: Length of checksum in bits (4 bytes) - int cs_length = inRaf.readInt(); - System.out.println("Checksum length: " + cs_length + " bits"); - - - // -0x098: Checksum ((cs_length/8) bytes) - byte[] checksum = new byte[cs_length/8]; - inRaf.readFully(checksum); - System.out.println("Checksum: 0x" + byteArrayToHexString(checksum).toUpperCase()); - - /* - if(unknown_0x != 0xL) - System.out.println("Assertion failed! unknown_0x == 0x" + Long.toHexString(unknown_0x) + " and not 0xL"); - */ - } - - public static String byteArrayToHexString(byte[] array) { - StringBuilder result = new StringBuilder(); - for(byte b : array) { - String s = Integer.toHexString(b & 0xFF); - if(s.length() == 1) - s = "0" + s; - result.append(s); - } - return result.toString(); - } -} - -class DMGInfoFrame extends JFrame { - private JTabbedPane mainPane; - - public DMGInfoFrame() { - this("DMGInfo"); - - mainPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); - - StatisticsPanel statisticsPanel; - statisticsPanel = new StatisticsPanel(); - mainPane.addTab(statisticsPanel, "Statistics"); - } -} - -class StatisticsPanel extends JPanel { - JPanel blocktypeCountPanel; - - public StatisticsPanel(DMGFile dmgFile) {} -} - -class DMGFile extends RandomAccessFile { - public DMGFile(File file, String mode) { - super(file, mode); - } - public DMGFile(String name, String mode) { - super(name, mode); - } -} diff --git a/src/DMGMetadata.java b/src/DMGMetadata.java deleted file mode 100644 index 1027d51..0000000 --- a/src/DMGMetadata.java +++ /dev/null @@ -1,346 +0,0 @@ -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInput; -import java.io.DataInputStream; -import java.io.DataOutput; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.io.RandomAccessFile; -import java.io.UnsupportedEncodingException; -import java.util.LinkedList; - -public class DMGMetadata { - public static final long PLIST_ADDRESS_1 = 0x1E0; - public static final long PLIST_ADDRESS_2 = 0x128; - - public final byte[] rawData; - - public final byte[] plistXmlData; - public final byte[] unknown1_256; - public PartitionBlockList[] blockLists; - public final byte[] unknown2_12; - public APMPartition[] partitions; - public final byte[] unknown3_unknown; - public final byte[] koly; - - public DMGMetadata(RandomAccessFile dmgFile) throws IOException { - dmgFile.seek(dmgFile.length()-PLIST_ADDRESS_1); - long plistBegin1 = dmgFile.readLong(); - long plistEnd = dmgFile.readLong(); - dmgFile.seek(dmgFile.length()-PLIST_ADDRESS_2); - long plistBegin2 = dmgFile.readLong(); - long plistSize = dmgFile.readLong(); - - rawData = new byte[(int)(dmgFile.length()-plistBegin1)]; - dmgFile.seek(plistBegin1); - dmgFile.readFully(rawData); - - plistXmlData = new byte[(int)plistSize]; - dmgFile.seek(plistBegin1); - dmgFile.readFully(plistXmlData); - - unknown1_256 = new byte[256]; - dmgFile.readFully(unknown1_256); - - LinkedList blockListList = new LinkedList(); - int length = dmgFile.readInt(); - byte[] fourcc = new byte[4]; - dmgFile.readFully(fourcc); - String fourccString = new String(fourcc, "US-ASCII"); - dmgFile.seek(dmgFile.getFilePointer()-4); - while(fourccString.equals("mish")) { - blockListList.add(new PartitionBlockList(dmgFile, length)); - length = dmgFile.readInt(); - dmgFile.readFully(fourcc); - fourccString = new String(fourcc, "US-ASCII"); - dmgFile.seek(dmgFile.getFilePointer()-4); - } - blockLists = blockListList.toArray(new PartitionBlockList[blockListList.size()]); - - unknown2_12 = new byte[12]; - dmgFile.readFully(unknown2_12); - - LinkedList partitionList = new LinkedList(); - byte[] currentPartitionEntry = new byte[0x200]; - dmgFile.readFully(currentPartitionEntry); - byte[] pmSig = new byte[2]; - pmSig[0] = currentPartitionEntry[0]; - pmSig[1] = currentPartitionEntry[1]; - while(new String(pmSig, "US-ASCII").equals("PM")) { - partitionList.addLast(new APMPartition(currentPartitionEntry)); - dmgFile.readFully(currentPartitionEntry); - pmSig[0] = currentPartitionEntry[0]; - pmSig[1] = currentPartitionEntry[1]; - } - while(onlyZeros(currentPartitionEntry)) - dmgFile.readFully(currentPartitionEntry); - partitions = partitionList.toArray(new APMPartition[partitionList.size()]); - - unknown3_unknown = new byte[(int)(dmgFile.length()-dmgFile.getFilePointer()-512)]; - dmgFile.readFully(unknown3_unknown); - - koly = new byte[512]; - dmgFile.seek(dmgFile.length()-koly.length); - dmgFile.readFully(koly); - - if(dmgFile.getFilePointer() != dmgFile.length()) - System.out.println("MISCALCULATION! FP=" + dmgFile.getFilePointer() + " LENGTH=" + dmgFile.length()); - } - - public void printInfo(PrintStream ps) { - ps.println("block list:"); - for(PartitionBlockList pbl : blockLists) - pbl.printInfo(ps); - ps.println("partitions:"); - for(APMPartition ap : partitions) - ap.printPartitionInfo(ps); - } - - private static boolean onlyZeros(byte[] array) { - for(int i = 0; i < array.length; ++i) { - if(array[i] != 0) - return false; - } - return true; - } - - public static class PartitionBlockList { - public final byte[] header = new byte[0xCC]; - public final BlockDescriptor[] descriptors; - - public PartitionBlockList(byte[] entryData) throws IOException { - this(new DataInputStream(new ByteArrayInputStream(entryData)), entryData.length); - } - - public PartitionBlockList(DataInput di, int length) throws IOException { - int position = 0; - di.readFully(header); - position += header.length; - LinkedList descs = new LinkedList(); - while(position < length) { - descs.addLast(new BlockDescriptor(di)); - position += 0x28; - } - descriptors = descs.toArray(new BlockDescriptor[descs.size()]); - } - - public void printInfo(PrintStream ps) { - for(BlockDescriptor bd : descriptors) - ps.println(bd.toString()); - } - } - - public static class BlockDescriptor { - // Known block types - public static final int BT_COPY = 0x00000001; - public static final int BT_ZERO = 0x00000002; - public static final int BT_ZLIB = 0x80000005; - public static final int BT_END = 0xffffffff; - public static final int BT_UNKNOWN1 = 0x7ffffffe; - private static final int[] KNOWN_BLOCK_TYPES = { BT_COPY, - BT_ZERO, - BT_ZLIB, - BT_END, - BT_UNKNOWN1 }; - private static final String[] KNOWN_BLOCK_TYPE_NAMES = { "BT_COPY", - "BT_ZERO", - "BT_ZLIB", - "BT_END", - "BT_UNKNOWN1" }; - - private int blockType; - private int unknown; - private long outOffset; - private long outSize; - private long inOffset; - private long inSize; - - public BlockDescriptor() {} - - public BlockDescriptor(byte[] entryData) throws IOException { - this(new DataInputStream(new ByteArrayInputStream(entryData))); - } - - public BlockDescriptor(DataInput dataIn) throws IOException { - blockType = dataIn.readInt(); - unknown = dataIn.readInt(); - outOffset = dataIn.readLong()*0x200; - outSize = dataIn.readLong()*0x200; - inOffset = dataIn.readLong(); - inSize = dataIn.readLong(); - } - - public byte[] toBytes() throws IOException { - ByteArrayOutputStream result = new ByteArrayOutputStream(0x28); - DataOutputStream dataOut = new DataOutputStream(result); - - dataOut.writeInt(blockType); // 4 bytes - dataOut.writeInt(unknown); // 4 bytes - if((outOffset % 0x200) != 0) - throw new RuntimeException("Out offset must be aligned to 0x200 block size!"); - dataOut.writeLong(outOffset/0x200); // 8 bytes - if((outSize % 0x200) != 0) - throw new RuntimeException("Out size must be aligned to 0x200 block size!"); - dataOut.writeLong(outSize/0x200); // 8 bytes - dataOut.writeLong(inOffset); // 8 bytes - dataOut.writeLong(inSize); // 8 bytes - // sum = 4 + 4 + 8 + 8 + 8 + 8 = 40 = 0x28 - - dataOut.flush(); - dataOut.close(); - return result.toByteArray(); - } - - public int getBlockType() { return blockType; } - public int getUnknown() { return unknown; } - public String getUnknownAsString() throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(4); - DataOutputStream dos = new DataOutputStream(baos); - dos.write(unknown); - dos.close(); - return new String(baos.toByteArray(), "US-ASCII"); - } - public long getOutOffset() { return outOffset; } - public long getOutSize() { return outSize; } - public long getInOffset() { return inOffset; } - public long getInSize() { return inSize; } - - public void setBlockType(int blockType) { this.blockType = blockType; } - public void setUnknown(int unknown) { this.unknown = unknown; } - public void setOutOffset(long outOffset) { - if((outOffset % 0x200) != 0) - throw new RuntimeException("Out offset must be aligned to 0x200 block size!"); - this.outOffset = outOffset; - } - public void setOutSize(long outSize) { - if((outSize % 0x200) != 0) - throw new RuntimeException("Out size must be aligned to 0x200 block size!"); - this.outSize = outSize; - } - public void setInOffset(long inOffset) { this.inOffset = inOffset; } - public void setInSize(long inSize) { this.inSize = inSize; } - - public boolean hasKnownBlockType() { - for(int current : KNOWN_BLOCK_TYPES) { - if(blockType == current) - return true; - } - return false; - } - - public String getBlockTypeName() { - for(int i = 0; i < KNOWN_BLOCK_TYPES.length; ++i) { - int current = KNOWN_BLOCK_TYPES[i]; - if(blockType == current) - return KNOWN_BLOCK_TYPE_NAMES[i]; - } - return null; - } - - public String toString() { - StringBuilder result = new StringBuilder("[BlockDescriptor"); - - String blockTypeString = "\"" + getBlockTypeName() + "\""; - if(blockTypeString == null) - blockTypeString = "0x" + Integer.toHexString(blockType) + " (unknown type)"; - - result.append(" blockType=" + blockTypeString); - result.append(" unknown=" + Integer.toHexString(unknown)); - result.append(" outOffset=" + outOffset); - result.append(" outSize=" + outSize); - result.append(" inOffset=" + inOffset); - result.append(" inSize=" + inSize); - result.append("]"); - - return result.toString(); - } - } - - // Saxat från HFSExplorer.java - public static class APMPartition { - public int pmSig; // {partition signature} - public int pmSigPad; // {reserved} - public long pmMapBlkCnt; // {number of blocks in partition map} - public long pmPyPartStart; // {first physical block of partition} - public long pmPartBlkCnt; // {number of blocks in partition} - public final byte[] pmPartName = new byte[32]; // {partition name} - public final byte[] pmParType = new byte[32]; // {partition type} - public long pmLgDataStart; // {first logical block of data area} - public long pmDataCnt; // {number of blocks in data area} - public long pmPartStatus; // {partition status information} - public long pmLgBootStart; // {first logical block of boot code} - public long pmBootSize; // {size of boot code, in bytes} - public long pmBootAddr; // {boot code load address} - public long pmBootAddr2; // {reserved} - public long pmBootEntry; // {boot code entry point} - public long pmBootEntry2; // {reserved} - public long pmBootCksum; // {boot code checksum} - public final byte[] pmProcessor = new byte[16]; // {processor type} - public final int[] pmPad = new int[188]; // {reserved} - - public APMPartition(byte[] entryData) throws IOException { - this(new DataInputStream(new ByteArrayInputStream(entryData))); - } - - public APMPartition(DataInput di) throws IOException { - // 2*2 + 4*3 + 32*2 + 10*4 + 16 + 188*2 = 512 - pmSig = di.readShort() & 0xffff; - pmSigPad = di.readShort() & 0xffff; - pmMapBlkCnt = di.readInt() & 0xffffffffL; - pmPyPartStart = di.readInt() & 0xffffffffL; - pmPartBlkCnt = di.readInt() & 0xffffffffL; - di.readFully(pmPartName); - di.readFully(pmParType); - pmLgDataStart = di.readInt() & 0xffffffffL; - pmDataCnt = di.readInt() & 0xffffffffL; - pmPartStatus = di.readInt() & 0xffffffffL; - pmLgBootStart = di.readInt() & 0xffffffffL; - pmBootSize = di.readInt() & 0xffffffffL; - pmBootAddr = di.readInt() & 0xffffffffL; - pmBootAddr2 = di.readInt() & 0xffffffffL; - pmBootEntry = di.readInt() & 0xffffffffL; - pmBootEntry2 = di.readInt() & 0xffffffffL; - pmBootCksum = di.readInt() & 0xffffffffL; - di.readFully(pmProcessor); - for(int i = 0; i < pmPad.length; ++i) - pmPad[i] = di.readShort() & 0xffff; - } - - public void printPartitionInfo(PrintStream ps) { -// String result = ""; -// result += "Partition name: \"" + new String(pmPartName) + "\"\n"; -// result += "Partition type: \"" + new String(pmParType) + "\"\n"; -// result += "Processor type: \"" + new String(pmProcessor) + "\"\n"; -// return result; - try { - ps.println("pmSig: " + pmSig); - ps.println("pmSigPad: " + pmSigPad); - ps.println("pmMapBlkCnt: " + pmMapBlkCnt); - ps.println("pmPyPartStart: " + pmPyPartStart); - ps.println("pmPartBlkCnt: " + pmPartBlkCnt); - ps.println("pmPartName: \"" + new String(pmPartName, "US-ASCII") + "\""); - ps.println("pmParType: \"" + new String(pmParType, "US-ASCII") + "\""); - ps.println("pmLgDataStart: " + pmLgDataStart); - ps.println("pmDataCnt: " + pmDataCnt); - ps.println("pmPartStatus: " + pmPartStatus); - ps.println("pmLgBootStart: " + pmLgBootStart); - ps.println("pmBootSize: " + pmBootSize); - ps.println("pmBootAddr: " + pmBootAddr); - ps.println("pmBootAddr2: " + pmBootAddr2); - ps.println("pmBootEntry: " + pmBootEntry); - ps.println("pmBootEntry2: " + pmBootEntry2); - ps.println("pmBootCksum: " + pmBootCksum); - ps.println("pmProcessor: \"" + new String(pmProcessor, "US-ASCII") + "\""); - ps.println("pmPad: " + pmPad); - } catch(UnsupportedEncodingException uee) { - uee.printStackTrace(); - } // Will never happen. Ever. Period. - } - } - - public static void main(String[] args) throws IOException { - DMGMetadata meta = new DMGMetadata(new RandomAccessFile(args[0], "r")); - meta.printInfo(System.out); - } -} diff --git a/src/NodeBuilder.java b/src/NodeBuilder.java deleted file mode 100644 index 722713a..0000000 --- a/src/NodeBuilder.java +++ /dev/null @@ -1,86 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -import org.xml.sax.helpers.DefaultHandler; -import org.xml.sax.SAXException; -import org.xml.sax.Attributes; - -/** - * Plugs into a SAXParser to build a tree of XMLElements representing the document. - */ -class NodeBuilder extends DefaultHandler { - /** NEVER try to obtain anything from this except its children. */ - private XMLNode artificialRoot; - - private XMLNode currentNode; - - public NodeBuilder() { - artificialRoot = new XMLNode(null, null, null, null, null); - currentNode = artificialRoot; - } - public void startElement(String namespaceURI, String sName, String qName, - Attributes attrs) throws SAXException { - //System.out.println("SE"); - Attribute[] attributes = new Attribute[attrs.getLength()]; - for(int i = 0; i < attributes.length; ++i) { - attributes[i] = new Attribute(attrs.getLocalName(i), attrs.getQName(i), - attrs.getType(i), attrs.getURI(i), attrs.getValue(i)); - } - - XMLNode newNode = new XMLNode(namespaceURI, sName, qName, - attributes, currentNode); - currentNode.addChild(newNode); - currentNode = newNode; - } - public void endElement(String namespaceURI, String sName, - String qName) throws SAXException { - //System.out.println("EE"); - currentNode = currentNode.parent; - } - public void characters(char[] buf, int offset, int len) - throws SAXException { - //System.out.println("CH"); - String s = new String(buf, offset, len).trim(); - if(s.length() != 0) - currentNode.addChild(new XMLText(s)); - } - public void notationDecl(String name, String publicId, - String systemId) throws SAXException { - System.out.println("notationDecl(" + name + ", " + - publicId + ", " + systemId + ");"); - } - public XMLNode[] getRoots() throws RuntimeException { - if(artificialRoot != currentNode) - throw new RuntimeException("Tree was not closed!"); - - int numberOfNodes = 0; - for(XMLElement xe : artificialRoot.getChildren()) { - if(xe instanceof XMLNode) - ++numberOfNodes; - } - XMLNode[] result = new XMLNode[numberOfNodes]; - int i = 0; - for(XMLElement xe : artificialRoot.getChildren()) { - if(xe instanceof XMLNode) - result[i++] = (XMLNode)xe; - } - return result; - } -} diff --git a/src/SimpleFileFilter.java b/src/SimpleFileFilter.java deleted file mode 100644 index 3cbf88b..0000000 --- a/src/SimpleFileFilter.java +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -import java.util.*; -import java.io.*; - -public class SimpleFileFilter extends javax.swing.filechooser.FileFilter { - - private Vector extensions; - private String description; - - public SimpleFileFilter() { - extensions = new Vector(); - description = ""; - } - public void addExtension(String extension) { extensions.add(extension); } - public void setDescription(String idescription) { description = idescription; } - public void removeExtension(String iextension) { - for(int i = 0; i < extensions.size(); i++) { - if(extensions.get(i).equals(iextension)) - extensions.remove(i); - } - } - public boolean accept(File f) { - - if(f.isDirectory()) return true; - - for(int i = 0; i < extensions.size(); i++) { - if(f.getName().endsWith(extensions.get(i))) - return true; - } - return false; - } - public String getDescription() { return description; } -} diff --git a/src/XMLElement.java b/src/XMLElement.java deleted file mode 100644 index 4a8658d..0000000 --- a/src/XMLElement.java +++ /dev/null @@ -1,25 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -import java.io.PrintStream; - -abstract class XMLElement { - protected abstract void _printTree(PrintStream pw, int level); -} diff --git a/src/XMLNode.java b/src/XMLNode.java deleted file mode 100644 index bfee766..0000000 --- a/src/XMLNode.java +++ /dev/null @@ -1,121 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -import java.util.LinkedList; -import java.io.PrintStream; - -class XMLNode extends XMLElement { - public final String namespaceURI; - public final String sName; - public final String qName; - public final Attribute[] attrs; - public final XMLNode parent; - private final LinkedList children; - - public XMLNode(String namespaceURI, String sName, - String qName, Attribute[] attrs, XMLNode parent) { - this.namespaceURI = namespaceURI; - this.sName = sName; - this.qName = qName; - this.attrs = attrs; - this.parent = parent; - this.children = new LinkedList(); - } - - public void addChild(XMLElement x) { - children.addLast(x); - } - - public void printTree(PrintStream pw) { - _printTree(pw, 0); - } - - protected void _printTree(PrintStream pw, int level) { - for(int i = 0; i < level; ++i) - pw.print(" "); - pw.print("<"); - pw.print(qName); - for(Attribute a : attrs) - pw.print(" " + a.qName + "=" + a.value); - pw.println(">"); - for(XMLElement xe : children) - xe._printTree(pw, level+1); - - for(int i = 0; i < level; ++i) - pw.print(" "); - pw.println(""); - } - public XMLElement[] getChildren() { - return children.toArray(new XMLElement[children.size()]); - } - - /** - * The concept of "changing directory" in a tree is perhabs not a - * perfect way to describe things. But this method will look up the - * first subnode of our node that is of the type type - * and return it. - * If you have more than one of the same type, tough luck. You only - * get the first. - */ - public XMLNode cd(String type) { - for(XMLElement xn : getChildren()) { - if(xn instanceof XMLNode && ((XMLNode)xn).qName.equals(type)) - return (XMLNode)xn; - } - return null; - } - /** - * This is different from the cd method in that it - * searches for a node of the type "key", and looks up the - * XMLText within. It then compares the text with the String - * key. If they match, it returns the node coming - * after the key node. Else it continues to search. If no match is - * found, null is returned. - */ - public XMLNode cdkey(String key) { - boolean keyFound = false; - for(XMLElement xn : getChildren()) { - if(xn instanceof XMLNode) { - if(keyFound) - return (XMLNode)xn; - - else if(((XMLNode)xn).qName.equals("key")) { - for(XMLElement xn2 : ((XMLNode)xn).getChildren()) { - if(xn2 instanceof XMLText && ((XMLText)xn2).text.equals(key)) - keyFound = true; - } - } - } - } - return null; - } - public String getKeyValue(String key) { - XMLNode keyNode = cdkey(key); - StringBuilder returnString = new StringBuilder(); - for(XMLElement xe : keyNode.getChildren()) { - if(xe instanceof XMLText) - returnString.append(((XMLText)xe).text); - } - if(returnString.length() == 0) - return null; - else - return returnString.toString(); - } -} diff --git a/src/XMLParse.java b/src/XMLParse.java deleted file mode 100644 index d8d2826..0000000 --- a/src/XMLParse.java +++ /dev/null @@ -1,31 +0,0 @@ -/* -public class XMLParse { - public String encoding = "US-ASCII"; - - public XMLElement parse(InputStream is) throws IOException { - readElement(is); - } - - public void readElement(InputStream is) { - LinkedList buf = new LinkedList(); - int currentByte = is.read(); - if(currentByte != '<') - throw new RuntimeException(); - - while(currentByte != '>' && currentByte != -1) { - buf.add(currentByte); - currentByte = is.read(); - } - if(currentByte == -1) - throw new RuntimeException(); - else { - buf.add(currentByte); - byte[] bytes = new byte[buf.size()]; - int i = 0; - for(int cur : buf) - bytes[i++] = cur; - String s = new String(bytes, encoding); - } - } -} -*/ diff --git a/src/XMLText.java b/src/XMLText.java deleted file mode 100644 index c7fa922..0000000 --- a/src/XMLText.java +++ /dev/null @@ -1,37 +0,0 @@ -/*- - * Copyright (C) 2006 Erik Larsson - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -import java.io.PrintStream; - -class XMLText extends XMLElement { - public final String text; - public XMLText(String text) { - this.text = text; - } - protected void _printTree(PrintStream pw, int level) { - for(int i = 0; i < level; ++i) - pw.print(" "); - pw.println(text); - } - - public static void main(String[] args) { - System.out.println(args[0] + " " + args[1]); - } -} diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index 443cf15..aa32f23 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 165L; + public static final long BUILD_NUMBER = 175L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } diff --git a/src/org/catacombae/dmgx/DMGExtractor.java b/src/org/catacombae/dmgx/DMGExtractor.java index a01b9ad..f5c8ba9 100644 --- a/src/org/catacombae/dmgx/DMGExtractor.java +++ b/src/org/catacombae/dmgx/DMGExtractor.java @@ -39,13 +39,14 @@ public class DMGExtractor { public static final String APPNAME = "DMGExtractor 0.51pre"; public static final String BUILDSTRING = "(Build #" + BuildNumber.BUILD_NUMBER + ")"; - public static final boolean DEBUG = false; + public static final boolean DEBUG = true; // Constants defining block types in the dmg file public static final int BT_ADC = 0x80000004; public static final int BT_ZLIB = 0x80000005; public static final int BT_BZIP2 = 0x80000006; public static final int BT_COPY = 0x00000001; public static final int BT_ZERO = 0x00000002; + public static final int BT_ZERO2 = 0x00000000; // This one also represents a fill of zeroes. What is the difference? public static final int BT_END = 0xffffffff; public static final int BT_UNKNOWN = 0x7ffffffe; public static final long PLIST_ADDRESS_1 = 0x1E0; @@ -86,12 +87,6 @@ public static void notmain(String[] args) throws Exception { parseArgs(args); - if(graphical) { - System.setProperty("swing.aatext", "true"); //Antialiased text - try { javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); } - catch(Exception e) {} - } - printlnVerbose("Processing: " + dmgFile); RandomAccessFile dmgRaf = new RandomAccessFile(dmgFile, "r"); RandomAccessFile isoRaf = null; @@ -198,11 +193,13 @@ cdkey blkx (type:array) */ LinkedList blocks = new LinkedList(); + long elementNumber = 0; //long lastOffs = 0; long lastOutOffset = 0; long lastInOffset = 0; long totalSize = 0; - boolean errorsFound = false; + int errorsReported = 0; + int warningsReported = 0; reportProgress(0); for(XMLElement xe : current.getChildren()) { if(progmon != null && progmon.isCanceled()) System.exit(0); @@ -269,9 +266,6 @@ cdkey blkx (type:array) */ //dis.readInt(); //Skip 4 bytes forward inSize = dis.readLong();//dis.readInt() & 0xffffffffL; //unsigned int -> long - DMGBlock currentBlock = new DMGBlock(blockType, skipped, outOffset, outSize, inOffset, inSize); - blocks.add(currentBlock); - if(lastByteReadInBlock == -1) lastByteReadInBlock = inOffset; lastByteReadInBlock += inSize; @@ -281,14 +275,22 @@ cdkey blkx (type:array) */ this hack is here, but sometimes inOffset == 0 means that it is 0 relative to the previous partition's last inOffset. And sometimes it doesn't (meaning the actual position 0 in the dmg file). */ - if(addInOffset) + if(addInOffset) { + if(DEBUG) + println("!-----addInOffset mode: inOffset tranformation " + inOffset + "->" + (inOffset+lastInOffset)); inOffset += lastInOffset; + } else if(inOffset == 0) { + if(DEBUG) + println("!-----Detected inOffset == 0, setting to " + lastInOffset); addInOffset = true; - inOffset += lastInOffset; + inOffset = lastInOffset; } outOffset += lastOutOffset; + DMGBlock currentBlock = new DMGBlock(blockType, skipped, outOffset, outSize, inOffset, inSize); + blocks.add(currentBlock); + if(DEBUG) { println("outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize + @@ -297,22 +299,24 @@ else if(inOffset == 0) { } if(blockType == BT_ADC) { - println(" " + blockCount + ". BT_ADC not supported."); + println(" " + elementNumber + ":" + blockCount + ". ERROR: BT_ADC not supported."); + ++errorsReported; if(!testOnly) System.exit(0); } else if(blockType == BT_ZLIB) { if(DEBUG) - println(" " + blockCount + ". BT_ZLIB processing..."); + println(" " + elementNumber + ":" + blockCount + ". BT_ZLIB processing..."); if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_ZLIB FP != outOffset (" + + println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_ZLIB FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); try { DMGBlockHandlers.processZlibBlock(currentBlock, dmgRaf, isoRaf, testOnly, dummyMonitor); } catch(DataFormatException dfe) { - println(" " + blockCount + ". BT_ZLIB Could not decode..."); + println(" " + elementNumber + ":" + blockCount + ". ERROR: BT_ZLIB Could not decode..."); + ++errorsReported; if(!DEBUG) { println("outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize + @@ -324,22 +328,24 @@ else if(blockType == BT_ZLIB) { else { println(" Testing mode, so continuing..."); //System.exit(0); - errorsFound = true; break; } } } else if(blockType == BT_BZIP2) { - println(" " + blockCount + ". BT_BZIP2 not currently supported."); + println(" " + elementNumber + ":" + blockCount + ". ERROR: BT_BZIP2 not currently supported."); + ++errorsReported; if(!testOnly) System.exit(0); } else if(blockType == BT_COPY) { if(DEBUG) - println(" " + blockCount + ". BT_COPY processing..."); + println(" " + elementNumber + ":" + blockCount + ". BT_COPY processing..."); - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_COPY FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); + if(!testOnly && isoRaf.getFilePointer() != outOffset) { + println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_COPY FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); + ++warningsReported; + } dmgRaf.seek(/*lastOffs+*/inOffset); int bytesRead = dmgRaf.read(inBuffer, 0, Math.min((int)inSize, inBuffer.length)); @@ -360,10 +366,34 @@ else if(blockType == BT_COPY) { } else if(blockType == BT_ZERO) { if(DEBUG) - println(" " + blockCount + ". BT_ZERO processing..."); - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_ZERO FP != outOffset (" + + println(" " + elementNumber + ":" + blockCount + ". BT_ZERO processing..."); + if(!testOnly && isoRaf.getFilePointer() != outOffset) { + println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_ZERO FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); + ++warningsReported; + } + + reportFilePointerProgress(dmgRaf); + + long numberOfZeroBlocks = outSize/zeroblock.length; + int numberOfRemainingBytes = (int)(outSize%zeroblock.length); + for(int j = 0; j < numberOfZeroBlocks; ++j) { + if(!testOnly) + isoRaf.write(zeroblock); + } + if(!testOnly) + isoRaf.write(zeroblock, 0, numberOfRemainingBytes); + + //lastInOffs = inOffset+inSize; + } + else if(blockType == BT_ZERO2) { + if(DEBUG) + println(" " + elementNumber + ":" + blockCount + ". BT_ZERO2 processing..."); + if(!testOnly && isoRaf.getFilePointer() != outOffset) { + println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_ZERO2 FP != outOffset (" + + isoRaf.getFilePointer() + " != " + outOffset + ")"); + ++warningsReported; + } reportFilePointerProgress(dmgRaf); @@ -383,19 +413,20 @@ else if(blockType == BT_UNKNOWN) { doesn't appear more than 2-3 times in a dmg. As long as its input and output sizes are 0, there's no reason to complain... is there? */ if(DEBUG) - println(" " + blockCount + ". BT_UNKNOWN processing..."); + println(" " + elementNumber + ":" + blockCount + ". BT_UNKNOWN processing..."); if(!(inSize == 0 && outSize == 0)) { - println(" " + blockCount + ". WARNING! Blocktype BT_UNKNOWN had non-zero sizes...", + println(" " + elementNumber + ":" + blockCount + ". WARNING: Blocktype BT_UNKNOWN had non-zero sizes...", " inSize=" + inSize + ", outSize=" + outSize); + ++warningsReported; //println(" The author of the program would be pleased if you contacted him about this."); // ...or would I? } } else if(blockType == BT_END) { if(DEBUG) - println(" " + blockCount + ". BT_END processing..."); + println(" " + elementNumber + ":" + blockCount + ". BT_END processing..."); if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". BT_END FP != outOffset (" + + println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_END FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); //lastOffs += lastInOffs; @@ -403,11 +434,12 @@ else if(blockType == BT_END) { lastInOffset += lastByteReadInBlock; } else { - println(" " + blockCount + ". WARNING: previously unseen blocktype " + blockType + " [0x" + Integer.toHexString(blockType) + "]", - " " + blockCount + ". outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize); + println(" " + elementNumber + ":" + blockCount + ". WARNING: previously unseen blocktype " + blockType + " [0x" + Integer.toHexString(blockType) + "]", + " " + elementNumber + ":" + blockCount + ". outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize); + ++warningsReported; if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + blockCount + ". unknown blocktype FP != outOffset (" + + println(" " + elementNumber + ":" + blockCount + ". unknown blocktype FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); } @@ -416,29 +448,33 @@ else if(blockType == BT_END) { ++blockCount; } } + ++elementNumber; } //printlnVerbose("Progress: 100% Done!"); reportProgress(100); - String errors = errorsFound?"There were errors...":"No errors reported."; + String summary = (errorsReported != 0)?errorsReported+" errors reported":"No errors reported"; + summary += (warningsReported != 0)?" ("+warningsReported+" warnings emitted).":"."; if(!graphical) { newline(); - println(errors); + println(summary); printlnVerbose("Total extracted bytes: " + totalSize + " B"); } else { progmon.close(); - JOptionPane.showMessageDialog(null, "Extraction complete! " + errors + "\n" + + JOptionPane.showMessageDialog(null, "Extraction complete! " + summary + "\n" + "Total extracted bytes: " + totalSize + " B", "Information", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } if(!DEBUG) { - isoRaf.close(); + if(isoRaf != null) + isoRaf.close(); dmgRaf.close(); } else { - isoRaf.close(); + if(isoRaf != null) + isoRaf.close(); // System.out.println("blocks.size()=" + blocks.size()); // for(DMGBlock b : blocks) // System.out.println(" " + b.toString()); @@ -495,8 +531,14 @@ public static void parseArgs(String[] args) { String cur = args[i]; if(!cur.startsWith("-")) break; - else if(cur.equals("-gui")) + else if(cur.equals("-gui")) { graphical = true; + + // This should be moved to UI class in the future. + System.setProperty("swing.aatext", "true"); //Antialiased text + try { javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); } + catch(Exception e) {} + } else if(cur.equals("-v")) verbose = true; else if(cur.equals("-startupcommand")) { @@ -507,13 +549,11 @@ else if(cur.equals("-startupcommand")) { println(APPNAME + " " + BUILDSTRING, "Copyright (c) 2006 Erik Larsson ", - " written from the source code to the original dmg2iso program", - " Copyright (c) 2004 vu1tur ", - " also using the iharder Base64 Encoder/Decoder ", + " based upon dmg2iso, Copyright (c) 2004 vu1tur ", + " also using the iHarder Base64 Encoder/Decoder ", "", "This program is distributed under the GNU General Public License version 2 or", - "later.", - "See for the details.", + "later. See for the details.", ""); if(i == args.length) { From 17333d24b7dfe5dacdace3f169475420f70e3ab2 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Fri, 10 Nov 2006 08:24:54 +0000 Subject: [PATCH 005/109] Fixed a bug related to 0-means-outoffs hack. --- lib/dmgextractor.jar | Bin 139560 -> 139876 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGBlockHandlers.java | 2 +- src/org/catacombae/dmgx/DMGExtractor.java | 138 +++++++++++------- 4 files changed, 84 insertions(+), 58 deletions(-) diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 68d35595d51476225db3ca503af8e71293d123f5..6e0e4f2b693b9e6d41eb833fbc45168e62897b15 100644 GIT binary patch delta 15703 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 KbQIWV0sjy4U+riB delta 15149 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 TqzamuYvz$aP$4FglJ^rgNBNrFB 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 a+il7_xN2GqkPM>E0K`KXL53zB!v6u}j~iY9 diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index aa32f23..7603650 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 175L; + public static final long BUILD_NUMBER = 189L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } diff --git a/src/org/catacombae/dmgx/DMGBlockHandlers.java b/src/org/catacombae/dmgx/DMGBlockHandlers.java index 244cb05..f20d378 100644 --- a/src/org/catacombae/dmgx/DMGBlockHandlers.java +++ b/src/org/catacombae/dmgx/DMGBlockHandlers.java @@ -31,7 +31,7 @@ public static void processZlibBlock(DMGBlock block, RandomAccessFile dmgRaf, Ran ui.reportProgress((int)(dmgRaf.getFilePointer()*100/dmgRaf.length())); if(curBytesRead < 0) - throw new RuntimeException("Unexpectedly reached end of file"); + throw new RuntimeException("Unexpectedly reached end of file. (bytesRemainingToRead=" + bytesRemainingToRead + ", curBytesRead=" + curBytesRead + ", totalBytesRead=" + totalBytesRead + ", block.inSize=" + block.inSize + ", inBuffer.length=" + inBuffer.length + ")"); else { totalBytesRead += curBytesRead; inflater.setInput(inBuffer, 0, curBytesRead); diff --git a/src/org/catacombae/dmgx/DMGExtractor.java b/src/org/catacombae/dmgx/DMGExtractor.java index f5c8ba9..e112e5e 100644 --- a/src/org/catacombae/dmgx/DMGExtractor.java +++ b/src/org/catacombae/dmgx/DMGExtractor.java @@ -1,6 +1,7 @@ /*- * Copyright (C) 2006 Erik Larsson - * (C) 2004 vu1tur (not the actual code but...) + * (C) 2004 vu1tur (not the actual java code, but the C-code which + * has been used for reference) * * All rights reserved. * @@ -16,7 +17,8 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA */ package org.catacombae.dmgx; @@ -39,7 +41,6 @@ public class DMGExtractor { public static final String APPNAME = "DMGExtractor 0.51pre"; public static final String BUILDSTRING = "(Build #" + BuildNumber.BUILD_NUMBER + ")"; - public static final boolean DEBUG = true; // Constants defining block types in the dmg file public static final int BT_ADC = 0x80000004; public static final int BT_ZLIB = 0x80000005; @@ -58,6 +59,7 @@ public class DMGExtractor { new BufferedReader(new InputStreamReader(System.in)); public static boolean verbose = false; + public static boolean debug = false; public static boolean graphical = false; public static String startupCommand = "java DMGExtractor"; public static File dmgFile = null; @@ -83,7 +85,7 @@ public static void main(String[] args) throws Exception { } public static void notmain(String[] args) throws Exception { - if(DEBUG) verbose = true; + if(debug) verbose = true; parseArgs(args); @@ -108,18 +110,18 @@ public static void notmain(String[] args) throws Exception { long plistBegin2 = dmgRaf.readLong(); long plistSize = dmgRaf.readLong(); - if(DEBUG) { + if(debug) { println("Read addresses:", " " + plistBegin1, " " + plistBegin2); } if(plistBegin1 != plistBegin2) { - println("Addresses not equal! Assumption broken... =/", + println("ERROR: Addresses not equal! Assumption false.", plistBegin1 + " != " + plistBegin2); System.exit(0); } if(plistSize != (plistEnd-plistBegin1)) { - println("plistSize field does not match plistEnd marker!", + println("NOTE: plistSize field does not match plistEnd marker. Assumption false.", "plistSize=" + plistSize + " plistBegin1=" + plistBegin1 + " plistEnd=" + plistEnd + " plistEnd-plistBegin1=" + (plistEnd-plistBegin1)); } printlnVerbose("Jumping to address..."); @@ -215,15 +217,9 @@ cdkey blkx (type:array) */ printlnVerbose(" Attributes: " + xn.getKeyValue("Attributes")); printlnVerbose(" Partition map data length: " + data.length + " bytes"); printlnVerbose(" Partition size: " + partitionSize + " bytes"); - if(verbose) { - printlnVerbose(" Dumping blkx..."); - FileOutputStream fos = new FileOutputStream(xn.getKeyValue("ID") + ".blkx"); - fos.write(data); - fos.close(); - } - if(DEBUG) { - File dumpFile = new File("data " + xn.getKeyValue("ID") + ".bin"); + if(debug) { + File dumpFile = new File("data(" + xn.getKeyValue("ID") + ").bin"); println(" Dumping partition map to file: " + dumpFile); FileOutputStream dump = new FileOutputStream(dumpFile); @@ -265,6 +261,11 @@ cdkey blkx (type:array) */ inOffset = dis.readLong();// & 0xffffffffL; //unsigned int -> long //dis.readInt(); //Skip 4 bytes forward inSize = dis.readLong();//dis.readInt() & 0xffffffffL; //unsigned int -> long + + + String blockTypeString = blockTypeToString(blockType); + if(debug) + println(" " + elementNumber + ":" + blockCount + ". " + blockTypeString + " processing..."); if(lastByteReadInBlock == -1) lastByteReadInBlock = inOffset; @@ -276,13 +277,13 @@ cdkey blkx (type:array) */ relative to the previous partition's last inOffset. And sometimes it doesn't (meaning the actual position 0 in the dmg file). */ if(addInOffset) { - if(DEBUG) - println("!-----addInOffset mode: inOffset tranformation " + inOffset + "->" + (inOffset+lastInOffset)); + if(debug) + println("------->NOTE: addInOffset mode: inOffset tranformation " + inOffset + "->" + (inOffset+lastInOffset)); inOffset += lastInOffset; } - else if(inOffset == 0) { - if(DEBUG) - println("!-----Detected inOffset == 0, setting to " + lastInOffset); + else if(inOffset == 0 && blockCount == 0) { + if(debug) + println("------->NOTE: Detected inOffset == 0, setting to " + lastInOffset); addInOffset = true; inOffset = lastInOffset; } @@ -291,34 +292,33 @@ else if(inOffset == 0) { DMGBlock currentBlock = new DMGBlock(blockType, skipped, outOffset, outSize, inOffset, inSize); blocks.add(currentBlock); - if(DEBUG) { - println("outOffset=" + outOffset + " outSize=" + outSize + - " inOffset=" + inOffset + " inSize=" + inSize + - " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset + if(debug) { + println(" outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset, + " inSize=" + inSize + " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset /*+ " lastInOffs=" + lastInOffs + " lastOffs=" + lastOffs*/); } if(blockType == BT_ADC) { - println(" " + elementNumber + ":" + blockCount + ". ERROR: BT_ADC not supported."); + println("!------>ERROR: BT_ADC not supported."); ++errorsReported; if(!testOnly) System.exit(0); } else if(blockType == BT_ZLIB) { - if(DEBUG) - println(" " + elementNumber + ":" + blockCount + ". BT_ZLIB processing..."); +// if(debug) +// println(" " + elementNumber + ":" + blockCount + ". BT_ZLIB processing..."); if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_ZLIB FP != outOffset (" + + println("!------>WARNING: BT_ZLIB FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); try { DMGBlockHandlers.processZlibBlock(currentBlock, dmgRaf, isoRaf, testOnly, dummyMonitor); } catch(DataFormatException dfe) { - println(" " + elementNumber + ":" + blockCount + ". ERROR: BT_ZLIB Could not decode..."); + println("!------>ERROR: BT_ZLIB Could not decode..."); ++errorsReported; - if(!DEBUG) { - println("outOffset=" + outOffset + " outSize=" + outSize + + if(!debug) { + println("!------> outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize + " lastOutOffset=" + lastOutOffset + " lastInOffset=" + lastInOffset); } @@ -326,24 +326,24 @@ else if(blockType == BT_ZLIB) { if(!testOnly) System.exit(0); else { - println(" Testing mode, so continuing..."); + println("!------> Testing mode, so continuing..."); //System.exit(0); break; } } } else if(blockType == BT_BZIP2) { - println(" " + elementNumber + ":" + blockCount + ". ERROR: BT_BZIP2 not currently supported."); + println("!------>ERROR: BT_BZIP2 not currently supported."); ++errorsReported; if(!testOnly) System.exit(0); } else if(blockType == BT_COPY) { - if(DEBUG) - println(" " + elementNumber + ":" + blockCount + ". BT_COPY processing..."); +// if(debug) +// println(" " + elementNumber + ":" + blockCount + ". BT_COPY processing..."); if(!testOnly && isoRaf.getFilePointer() != outOffset) { - println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_COPY FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); + println("!------>WARNING: BT_COPY FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); ++warningsReported; } dmgRaf.seek(/*lastOffs+*/inOffset); @@ -365,10 +365,10 @@ else if(blockType == BT_COPY) { //lastInOffs = inOffset+inSize; } else if(blockType == BT_ZERO) { - if(DEBUG) - println(" " + elementNumber + ":" + blockCount + ". BT_ZERO processing..."); +// if(debug) +// println(" " + elementNumber + ":" + blockCount + ". BT_ZERO processing..."); if(!testOnly && isoRaf.getFilePointer() != outOffset) { - println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_ZERO FP != outOffset (" + + println("!------>WARNING: BT_ZERO FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); ++warningsReported; } @@ -387,10 +387,10 @@ else if(blockType == BT_ZERO) { //lastInOffs = inOffset+inSize; } else if(blockType == BT_ZERO2) { - if(DEBUG) - println(" " + elementNumber + ":" + blockCount + ". BT_ZERO2 processing..."); +// if(debug) +// println(" " + elementNumber + ":" + blockCount + ". BT_ZERO2 processing..."); if(!testOnly && isoRaf.getFilePointer() != outOffset) { - println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_ZERO2 FP != outOffset (" + + println("!------>WARNING: BT_ZERO2 FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); ++warningsReported; } @@ -412,34 +412,35 @@ else if(blockType == BT_UNKNOWN) { /* I have no idea what this blocktype is... but it's common, and usually doesn't appear more than 2-3 times in a dmg. As long as its input and output sizes are 0, there's no reason to complain... is there? */ - if(DEBUG) - println(" " + elementNumber + ":" + blockCount + ". BT_UNKNOWN processing..."); +// if(debug) +// println(" " + elementNumber + ":" + blockCount + ". BT_UNKNOWN processing..."); if(!(inSize == 0 && outSize == 0)) { - println(" " + elementNumber + ":" + blockCount + ". WARNING: Blocktype BT_UNKNOWN had non-zero sizes...", - " inSize=" + inSize + ", outSize=" + outSize); + println("!------>WARNING: Blocktype BT_UNKNOWN had non-zero sizes...", + "!------> inSize=" + inSize + ", outSize=" + outSize); ++warningsReported; //println(" The author of the program would be pleased if you contacted him about this."); // ...or would I? } } else if(blockType == BT_END) { - if(DEBUG) - println(" " + elementNumber + ":" + blockCount + ". BT_END processing..."); - if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + elementNumber + ":" + blockCount + ". WARNING: BT_END FP != outOffset (" + - isoRaf.getFilePointer() + " != " + outOffset + ")"); +// if(debug) +// println(" " + elementNumber + ":" + blockCount + ". BT_END processing..."); + if(!testOnly && isoRaf.getFilePointer() != outOffset) { + println("!------>WARNING: BT_END FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); + ++warningsReported; + } //lastOffs += lastInOffs; lastOutOffset = outOffset; lastInOffset += lastByteReadInBlock; } else { - println(" " + elementNumber + ":" + blockCount + ". WARNING: previously unseen blocktype " + blockType + " [0x" + Integer.toHexString(blockType) + "]", - " " + elementNumber + ":" + blockCount + ". outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize); + println("!------>WARNING: previously unseen blocktype " + blockType + " [0x" + Integer.toHexString(blockType) + "]", + "!------> outOffset=" + outOffset + " outSize=" + outSize + " inOffset=" + inOffset + " inSize=" + inSize); ++warningsReported; if(!testOnly && isoRaf.getFilePointer() != outOffset) - println(" " + elementNumber + ":" + blockCount + ". unknown blocktype FP != outOffset (" + + println("!------>WARNING: unknown blocktype FP != outOffset (" + isoRaf.getFilePointer() + " != " + outOffset + ")"); } @@ -467,7 +468,7 @@ else if(blockType == BT_END) { System.exit(0); } - if(!DEBUG) { + if(!debug) { if(isoRaf != null) isoRaf.close(); dmgRaf.close(); @@ -541,6 +542,8 @@ else if(cur.equals("-gui")) { } else if(cur.equals("-v")) verbose = true; + else if(cur.equals("-debug")) + debug = true; else if(cur.equals("-startupcommand")) { startupCommand = args[i+1]; ++i; @@ -549,7 +552,7 @@ else if(cur.equals("-startupcommand")) { println(APPNAME + " " + BUILDSTRING, "Copyright (c) 2006 Erik Larsson ", - " based upon dmg2iso, Copyright (c) 2004 vu1tur ", + " based on dmg2iso, Copyright (c) 2004 vu1tur ", " also using the iHarder Base64 Encoder/Decoder ", "", "This program is distributed under the GNU General Public License version 2 or", @@ -590,6 +593,29 @@ else if(i != args.length) } } + private static String blockTypeToString(int blockType) { + switch(blockType) { + case BT_ADC: + return "BT_ADC"; + case BT_ZLIB: + return "BT_ZLIB"; + case BT_BZIP2: + return "BT_BZIP2"; + case BT_COPY: + return "BT_COPY"; + case BT_ZERO: + return "BT_ZERO"; + case BT_ZERO2: + return "BT_ZERO2"; + case BT_END: + return "BT_END"; + case BT_UNKNOWN: + return "BT_UNKNOWN1"; + default: + return ""; + } + } + public static long calculatePartitionSize(byte[] data) throws IOException { long partitionSize = 0; DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); From 885f444547397645053c29e17c713a82fb6d1900 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sat, 11 Nov 2006 11:59:45 +0000 Subject: [PATCH 006/109] Disabling broken assumption about plistEnd. Also managed to slip in some changes that NetBeans made to the project files. --- src/org/catacombae/dmgx/DMGExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/catacombae/dmgx/DMGExtractor.java b/src/org/catacombae/dmgx/DMGExtractor.java index e112e5e..15ee930 100644 --- a/src/org/catacombae/dmgx/DMGExtractor.java +++ b/src/org/catacombae/dmgx/DMGExtractor.java @@ -120,7 +120,7 @@ public static void notmain(String[] args) throws Exception { plistBegin1 + " != " + plistBegin2); System.exit(0); } - if(plistSize != (plistEnd-plistBegin1)) { + if(false && plistSize != (plistEnd-plistBegin1)) { // This assumption is proven false. plistEnd is not interpreted correctly println("NOTE: plistSize field does not match plistEnd marker. Assumption false.", "plistSize=" + plistSize + " plistBegin1=" + plistBegin1 + " plistEnd=" + plistEnd + " plistEnd-plistBegin1=" + (plistEnd-plistBegin1)); } From 7097aad348586eb2a32dbba99a6c016949f3369a Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sat, 11 Nov 2006 13:19:45 +0000 Subject: [PATCH 007/109] Added a release build script for the graphical DMGExtractor. --- rbuild_dmgx.bat | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 rbuild_dmgx.bat diff --git a/rbuild_dmgx.bat b/rbuild_dmgx.bat new file mode 100644 index 0000000..fbd805d --- /dev/null +++ b/rbuild_dmgx.bat @@ -0,0 +1,42 @@ +@echo off +REM ************************************************************************************************ +REM * This script is for building a release of DMGExtractor. It should not be used in development. * +REM * It does not increment the build number, and only compiles the classes that are dependencies * +REM * of org.catacombae.dmgx.DMGExtractorGraphical, as it is the main class of the executable jar. * +REM ************************************************************************************************ + +:begin +setlocal + +set SOURCES_DIR=src +set CLASSFILES_DIR=build.~ +set LIBRARY_PATH=lib +set JARFILE=dmgextractor.jar +set MANIFEST=meta\manifest.txt +set BUILD_CP=%CLASSFILES_DIR% +set BUILDTOOLS_CP=buildenumerator\buildenumerator.jar + +pushd %~dp0 + +echo Removing all class files... +if exist %CLASSFILES_DIR% rmdir /s /q %CLASSFILES_DIR% +mkdir %CLASSFILES_DIR% + +echo Compiling org.catacombae.dmgx.DMGExtractorGraphical (and dependencies)... +javac -sourcepath %SOURCES_DIR% -classpath %BUILD_CP% -d %CLASSFILES_DIR% -Xlint:unchecked %SOURCES_DIR%\org\catacombae\dmgx\DMGExtractorGraphical.java +set JAVAC_EXIT_CODE=%ERRORLEVEL% +if not "%JAVAC_EXIT_CODE%"=="0" goto error + +echo Building jar-file %LIBRARY_PATH%\%JARFILE%... +if not exist %LIBRARY_PATH% mkdir %LIBRARY_PATH% +jar cvfm %LIBRARY_PATH%\%JARFILE% %MANIFEST% -C %CLASSFILES_DIR% . >NUL: +if "%ERRORLEVEL%"=="0" (echo Done!) else echo Problems while building jar-file... + +popd +goto end + +:error +echo There were errors... + +:end +endlocal From 1cfeaa2aa7ea093f6256b03ab41e6e98317cf69d Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sun, 12 Nov 2006 07:04:36 +0000 Subject: [PATCH 008/109] Updated binary build of DMGExtractor and updated the web page slightly. --- lib/dmgextractor.jar | Bin 139876 -> 28141 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 6e0e4f2b693b9e6d41eb833fbc45168e62897b15..d0a7ac9319888c356dbd6325c0bdf764bb84e318 100644 GIT binary patch delta 10974 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 C*3V%8 delta 122521 zcmbTd1yE&6vM!7}jl0vhyVJP4ySux~ZeZi?PUFzHySuwX$ zd&gQ;v0_E7lCLtezRWyd2i+flK~$6hhd>8``SS;rw2nvQ0spIzrUZ1t^)VrXZ1cx? zjFcM2avjac6`+S!R5=%0AnwPG!``0{I=u0vJmoX=XSWP%i`PS!Cz}Z8d2sNX&50Wdl}naVl!D4 zEg~t(K*RJ*_R+b6fUtr1fq;Pg)j7C7CCFc$WBD-t_MV|Mz_S+b4^km%?aq|~lnX&Z)ekyqOQLB# zzOKrD2hSJyDQPE!k8I(OZp;D8og`kd|9mqsmC5;f`uIo$f@{fBNg|H|b}pinNkYtze@IT_}re5f9v!do1^haL?vzX#^pL6qzAr zC)r~LSUG{1SlXQ_08<5Xh~|q<*`k!Qo?(})s&WUa^rL?Q7jDGwwB5$$&E1?m=ciI+phV&2>C?tR^rTg)WFBHWnO7LH6};h!!p)ec1#B0Z|422SWePa3S~~Z~>Sy{u3|% zKufZQjSJoZhQE4B=d5>ac4Q(IIT`bp5oc6xMP2K88G;` zpBxvzY3|E%g>Hb~r60)pRVp$MbJeakBB-q8O5myKfj3E_u>FkW16(??bHTR#&6fSp zH;iUW%fLM2?hwr024a%4LS&UePz)7Z^}XB>b$qz^Y|IHGL`+*moDE#kek)PTD&NC> zJMlpj#7w60-O`X-X4=wO|>ELU443E+ll|cZb+MD#C9$Z7AiNz42#h5Dw zFcb-wReXYLcPK%fg`;NVfNHt?@?Vt|mXN`lT}D^`~&-=r7LW#&CJ9Tjz^2r4<>7b`_00CU8p& zVd8+K4V_U2+klu?$L^S|Jx~HbPf$g{4ahJ-{}>??0ridW51@@{o?kl{(?*L~x;$WQ z#C)=X>nbiz!i_Iv*o`lMQjM=@&kA4TIx5EEIxFV)bzlURTL&=J?G0tvts{^dQctWI zaoN#N!+2SHRhPnqw<;Z98jrP!l`E5pRT;p-qc0X4n4F_K7BeUzqglPrP8 z`wQ)UXnC{RPYaApUH$%?`U5jv<`lp?XvVc3qWG=_=B)(de9yEp09_aPm+f}aQ`dq{+*-u*~%L=CNV=)Q16g>7+qd;40E8jqs89xr| zvSfRgAt|kkG#j!nN(H)MxJ5YUKoXPK=8U<4^QLf&yoPC_=67cU9BK)vXB&Vx3wIg^ zl24{`OHtC6{s~ONxLgO1j*G0tBX=l6t%8=EX#Plh~xZ@7R_$OU?0Y_(0H&bScEZ2~Icg(I+(?CXj^?S^w6RdYtQ_ym!_h4c}gCvZq@l0 zOfNNr8lG()Pi^hKzvxv_BBn%Mkprf@*f1N}nZFsL3!N1g|L~qmeVxO4oul=$;%D@e z$AEk--Nvl=E) zA{_)0kd;is%Qb9{CWNMej^{n$aJ|0+q#Pp%`;RrJ$J`(9dA!Xw!qq4X5LV zQkNb`j~8Y75BavLu8jb8AA}sPOVfMMVikv#IfiiZ-tu1u$$44Yb~@U5sk{xF$jfBUMli_4_F8754` za03s%ey)k~&vKXEa0z)Vv!qSp)7(VWQrrfd8J&U>F~=!riv75uyxa%Yb>Kn);FPY_Qu2W~=7mBdGn#0Kfm!Gxb9trIx^BKA+5y|6Ef0 zba0h(%$dNvyKfy3#!pCKQZM-maU}k6X(XQ`fh)WP`j^p%X4V$=1O)=}jP##0D)Il& zsHTkKR<>rM&JK?MvcR%6d>nPva6bJqhc|z1rX-|f$l0|a7TI&e%9Q~cS|IZZ=^^Hz z$?O^zh9@uVoW~D0?=R#sQfR8nAPc`E<$e!TmeT>XvzrSMq6#`hn!&NaC+a`qIyrj! z@p&4x_n6&Y&F8-EJxDLX@j3LhH9x@ZGche$4_&8QzKnRZO z9$E|Sb8vl3{0&VU`xOXiQRw$4`BuK;V&qF`Fk?8vRZ3DsLJ$%TPJ&?Mi9&~ue&dgb zLn0nngJndH?`0bFlpl3LYAY;nsE=KMJ?|*l-!c;##Ff7jz_heuiEJ=;b-<+Ur0VLa z*e`-hxO63n91C@wOxz_66N8i9I8`dqQgxZjY)(c;Sv%fnTfGHvkuxzxBUu2fJcP(i zOQW1XOzt@o+2G%x@=r-F)yl1#9HFktw-3#n$7FKo^+^ZgDeQmIdQdc0tfY983poXw z*5saUkmC%iMrr8c8_ewFh~>xmn#$?|JbksDm(lDGL5**k54Tev+Suh;ZG| zX>HU47DqS={jvqDraV&j)oPlp1a4}MoY7F|2TxV{z%=s9uaW7_TdW?&%*G4N6EH!s zcA%mf*f;WD4dmek$L2|sRmTM${{#8JFOwvygg=h>r>I@^--+z z>nuZQdnvFNRIpVDw7kE;D7aH;4+3ot`G(b;A||B1F$DTnn0uM%4`B((VbFGFg7hhy z*@mQ}@(P*hq4Zz}R z4+gkwe>x;%v@d?UaO_a_)T)SRRQJ@ByW)3C-o#Kd6s`GUE}t|VF^dQ} zUJ&pi|k}ti02k_kWua> z_H84=&WjpLso$U{+(1xHhHA|I)O{kYNUcl1USI$CLjrS zTx^tDx4HA3PhEEJD`;1Fq1dT-BLPamg1ibyYOS-xFxxk2$)%f?h$~h$%2OUvw|Py1 zo=r);x}4S%izM)qulMs|P(5?YH657bm)=|O)?G^iFCp_Q9H18M+OL|M;p{45&py|% zcbAGjPMfD!k85w8^EF>*kj4><{4AiIOXhM1>>b}> zmeDcYoJr(zPvivzP++iYa7X)==|73P5!`-TyE!eC1Uy$(cYA?7)#+}F%R7f((U*>< zpvHSa)Va~2E7&q3eaxG;}>?#nj!S)kbt}H>2>D!m~uX=MA3FnGI zfDsF{R#7wqxi_UDR`?=h9oxF!S?S!%m%i`szh4zV$UA0ckyryVTM9(Q!`q!q-8TCD z2$14bNQop!Laf}h7V=CeVw4fo5nPxjSO+pXQtpw+`W?+;Ia?22mc+NcomHR$ms7D( zGedI#6>!IE2>fH2cQfgXpJbJF23wE(J5tW)$!g8<*=CX&d?fVEW8e}HDSO;YZ8~U- z-~a1tVNp>~~J~ zY40-{*+Hj&OxU1fm@co!#x6zl4&z^+V5_oDp@GYx+rdDh^e%Qxgy#`Ia5$Sv#-wFSZ-W#y18EpP<$2F zARo`!zj}rB7v`zWhRkxoKtK>6|DUZ+)_-8$O?ln^5AVl+s+-lqU?);dBB(>UOGaJ{ zn$seQEJzcfU8pJSe z{Az5>vUcCt$6r^`lpY%v>k!`%AiBrnDms(P=#!QW!?tbaB4NL7cu0NmpMF(YvJ_@%e8pV8{Z-=1BHd)|&u9tLX_2-dKAh^B z6^(;#r`vn ztm?*BYF;u=w;C`RR1C9GY}-a@R-XiR;v*uBqRPXEAU49}r|nbTMTA~HOQy!C z8VDnKrNX&;WOWYsO?gO=N2B{PXLB{>QniLqFW>d@S>a0SB#$eN>NLsi?;1vAM74(i1T28t2RTax~+@d|&CZm@Z`|se|!?Um%6E zVi@Hom?Gd0<`^g&yGj0F&iX%chm`;6r1KZyY-Vrf{7>jbGsE=>B8z=m%F0F&t2YG( zbF6}E(gYG~!f>dU^I8k9jM(2fViNX68z| zuOlOJA_nDk55jmHyipdX=lD_Y8U7t%ZR$UDj8 zN#x!YQg&L&RO9f-ejdAOhdlU{H=3D@I>D8vKQ>(YbzgpTJwCK9=XjzD(toH2!aD_F z(*;B6AjEi1(qQ-1c=A^m;)xG*H;;O@gF#**GhQO>>IGg65!)*}vf9Txi4L^`Fo0Kt z%pDp-ujoKXmM9&wjbcM)d!*ejI36^b5$)(3(LMuL{z6XGQLpHtj@^Ms+dDqW!|#Sz|mt3qez-VvRsVcK2YZ!T@2 zIg`V2$G;k&|LbJIo3&w1HSYAotM2@2#;V@FI+-KOFQ&)_T+Tsow)6HkmjQV-%~{JX z^AF0cs`>+7gJ7iWV2!OB0LHsRM9p)?VWj${1r^@R%f0Ub(?XWm0%WG)ntfwK5W)L% z9Ti-*RuNc}i6j$h#1qS*P{@id-9}vzM%`*7vEecJA+p+(7i2$UOHMMoC?le!RgjU= zT}B@%27UU1osXNJAHT?G7fS!}e6}k~cdfpyt9ay4?lEGErLwpPzz@7X*&;!Si?{5z zZH*VK>0mK8*+lFlRIm9s&g#Uk-k{7xoa#&Eu?Xxl)_QeiELrTS^nEp2uAi3uMKs#A zB7^?A1-sfEVuK923?{mR)V^9`yln%9r7Z}*5M&}S$GxFo#wb;FqX|Qz6M3UiP*TFo z3rTnRA_~vLjCfEk0lBj(@jDIkSWYjNej3a6Bo>q+MT*ra2$kd{jjq^@X(8v9AtvK# ziq{yv$?_$>W9M913((mOQmvZIrz5D^{6BYXgg3XWTXk5) zDfn#^!WFOG;mGns&Dv=r7d5U zSu4g94XD>(00+#$D!iH^PL)o3YZe*rV6X6Rb1LR6TON&CYarwXjtQYNPmm#32>J5w zH7>Bp%@GDWT8zpnnXd^c>7!?h2zrJ9xyg#)FSV_vOn&#A8RZWXg3i!809iIT?X+ivrxd@Ha@EWFA3uop z*Q6#XmS3|TDyT<^&F#^%*>@cu#%eXGvi(X(TsNPb3!Jy#_2WDeeFDtlkkXb2IkA>R z;j^&MtHI-_l^6Iq7B_Y2J*?8{^7^%D*xO&3D`IkLMcN_|4{etd-m_Cu$U^KKLWUtu zXU^P004`F$#^>6Kv_`w)JDO~Yt;!=!%Iz`Z$LoQ2Tjg2|R$!*%z`G zT%nl7#7!+kss<`yI3oM9(2T+2Oyk+04tcC9(2QQ1?fcX-2d2(KVsyb7EuqDHvW z!=!wD5u<}@w?>3B4kOk$KEL* zeaB6XIv=F16_zJ$`)2l0r3W}MM}cCDPP@g@t3!(X65nJ`bs3Dc1=cx*!-b%pCMsae zdpAnVakFO$ioHD;^hWE>&6gy@13h%oH1+7tCjGdYOl5U0u?tnF309RCisH_`xo8Tm z0girN^hv+yZbAv>JNUNc&va)F`a$lRq%*)?$a-L8^cyaudCa$jZk`|mV-JIwF(2ny z;XbJ$3J19M(Hdm8{27wwEr}u4AuqF`Qp^KV7tuks#I|2`uQ2L+u0;vYXdwv6uUg={ z=D?THRupbqS$ouyl|knvU-Mn%M>*xhtK}$kL+^93-zY>@Cx}+Fhh3O8WR>|IH2~6{k6_|g&aoAM;*|cN z@B=O;%4u>|B1GG^H|h_{Ntl3mSfI~PZK+aOl5uQ6^iGEfmBXFJ%djF25no?yrz$>1((+9RX zQLusaw_OW0q+GVM>LkgM)ZLQ!TmVv-U=_)@o+8yn{!mSdI?Ogox2~Hn%>?%(Bh>Fq zlzkngvF5xe2g-Aunylu8+vdCwgOGb)O08OWou>oKopaOCgOzDsDvYDo!FfKYi{e03 z-e^O*Zy|2at~6-p0UkoTfM5GX<)eV*ok~J`$n)7$1XIjJd6Enb2I7?GTp8a^3148C z7=1$Ny|mO^CCt@&?#;SV?}SU)MLPUS)yg zG%NfjmQm0{Gome%UR$k@eMG=MqWm*&?BBN%RG5@CL9xbI0^$5`%=wba_$}o#&Wv9I zG=0UT+Aj)IvI9K>0W(fLB4IEvXr|5TzQd8iU-BJrfxn4giJ$=uRAkX2goP3A135n; z9KHw&ut0)Ta2bA|O46muw?7bEcuL8cQ)XY_i>ajC0dyj@Nqv`M9VXV+MUrU&#&n$r zppG4F)GuUm9u&U)?W5_5WFzkblRxBr5!IeEt>b@h{hbu$htlzuX6Y zN_sM2Lg@T^%Wdl^L|U3!R@iBQI;sj{NH|Kw_l9?K^CvOf#`SgWQ12DFNJn`@GqDjD zwjrHIJrkWSzq5QUjJmo6zJV?%u^>yROCUr-Icv_54?cDMKwNMZKpK=gk<29W-TW58c)_m87MvYL(to*MQqN-`XlD8xe82JISpt4YYP z+@=Pl1?SpDWYrq>?ILjQ8KdCz3c#pfIb+uot8WwIH&1#h8?`OnaY}%a+mG~_Bth%! z3b&~V?$`CLgR{&1YKd-s2qq|%VF>-%tFn+~SD>Sm1Qx@oCt)IP)zJ(SPQR7zqT(MG zO1eLj2ce@Vq{a3j7+BTdcZ7*N;24Wg4y`Z!%~@R z>ck?h#><5D{dd1nS5C4Z0>B8w{-Itq)4A;;L1q9ZhTL4T&Qy%Ac#v5@qQXpbV0Rof zbH6ZaKNu@rLy)h>d+4u5n1s`mSI_4*t!kH6nz)e)hycwPg`-5#poABF9d?~N-5gP7 zA6cAxF^hG*+heUC;Eclf<*`3W4r+}P;6)+Kc$<=Ei zR%d>Y)~Y?+ClDfBu23=dEG%q)sB~sz4fUv-&bP z9$IO^-8G%G*R)YDQvrtd1HdqgY|`0J#|4kBoBB~_mI#_{?VS`#B7U0{7};NaO&=v( z3>Q4%x>wZy&10h#EEyHD4)%-w8Z-7hdQum8MS}wr+Go2>cIpeXu2fm|P zMEa^@v^|-w)gAL>_Gu_*hijrb)vHM5=4kSqG-EwfeO2s{G3*^=5!xz-G7O~F$a$c( z4;~aNb4g6JZx z3t4w4+7>@Y~BS7L$q*S#}L_F(U`Fg~n zN9RcX`ROU&bW4|L5j+}Y*f4sF(M_6#^$=gNuLWG_F!ufaadXr!d9VERZAe08C)`BO zHxlBpubJ|rr)Q*^3!`s&N8;xd=jYomXTE{2;2hXJf7ajf){;QIHio+^b$0vuhQr9Q z-#<905Ve&*>{90SsEjG{ih;EIwJ7Qei$`@MyqHcnDG+z~Is~9k@&ca|`{d!ziu?LE zhd1usTYmb7OTmKqPa=fozlo6lA^-o9BU1L}4*!rP(JD3$Xd1};oQ%WcxRl$dgkC6M zT-4EC^9ktE##ABLYH%m;ux^Q+%#mk$Hua#|jVCJBi|W>p$$|~a-5S0ywMo*x+q9?x za8Bl(Tq`y|8`&)`Hn?3pes8S)X3XJ(WC8@|2O!8())LHvv4UN~Wub7&oWF^^ijrocO4nL&xYVVRv!>=G)8;FdGl5_P>={e49Q^Cg1uA zl_O9Yx6s^xM|VUlEnimT2tt-(DW8*_K3NyUNr=(ges<15~) z+Vs%X15_`f*-wgjHdFPD!rq%s_sNT6`483Fk!BZX zRL8_sjAppw@^6pil5V;e9E*0BWc`2>_4fk~9qV=7SwX27>k{a7`UQolVKFJkc0nbK zCJT79>&WwLEgFeB9Qe($?m|W`(m4hvuWyzqjAZJLsh!l+obiLeaL$_k0TB0$mEd0# z4}0IkmCo2}p@S$GOg0D7fFh_DiHkKALuTxx5xme?L{zD`_yRp^c5XkjT#oT*QrsgImN67%P}`5JFg zo<|h<)-@6d^gFg)_f6J_5eD zUcp!GYWPktRPA~AhO}!A@vB}#gKZ3Bd46ZSj#~sI++*PYT+rp&p?215T(*H_c|l83 zr}^ZTQ1oJ_CHFH4Y>6osrFof6b}o+cCbY~_u&=?|(Jk#N5s7UH`Fb z?G)t{{xG3_I@)kWfw_d-Y1s6GHQ^djSjlL!K|_%xDOD|n_ENuY+Sz6SX`WZmPX$r) zmCVC-h3^_HL>-gGr2!icPm;V#r$ywsi~t|XA-StII-VW_w-D~ zzM+wu93?v@Sd7mnD|)K}nqC}hclw30^QwV|HymSV@wcMnZxX!yDd~Ea>COeJzvBtt zJXo8K(K!45N_L2^z&#rD^zE=#NX%a-*=Ei$;5>#w7dCAJa9)8? zGq67l`F(Xx#QAbt%-tIW{*JCuM(|Wb`(tKh{JH)y%Yc8zd;c5VO7S12`M+__vCLlr z|Kgm9>mo2YhL$v~`U!i~D<$b<&rrnmgfZ*r@TdB~J*mFR2wO2Hjsh52)2AQrp^%Lz zm{8K-fWT*f9)>QFtd?393dg!;eey|qT2%CeD}_S#_EW8y-D5i~Nk>w&)GBD7^LA|+ zy$y#_P6MpbyTkN03g%RjSU%B>?>KiOP>qOP9iy(Ba|ASC+l~F?8}W~AlQRkky+>mI zzrY2N=>nejXG|M^uKxxuz@JC|`Z4{f{1r+5UxUC^osH~W%*~vQjBU*njIGT~T*<`E zTum(hMY;#a@c%`+2X76eu`>q-8!}>A$Mb(LLPmyw@9d$#xfRhgLgUX0hQ3lXHtrFI zH(^QrYLLqmsjS*9LtHv`rKRv#fVh_WP`Ba8R93^#0A71Q_nm#3 zgbLQoMA!-=xhK-yZOsQPw}hskI1)TU{yiH>JHM;`3>Ee-5CHyb(Eq=Ifa?F(Z2Z&Y zR{zW7M*sLimTrnI34dTbyJjryk_S=Vgn=v*KxNmmqR3Vm(Qo>_mnn!fQ9E_|q}|~I z?3PuvqA;qm+&N7Q z1NLZ6X43O9@Rzk|d5prW`3hiqCHS8H++zAz@dY3#PXsOVCMb*B^V>s)kg+*r`w5IJ zV+q~xGfQfQD)7}vvp8h^+G?6g*In>`kl^@bym2igAH^HyVCLItc?^rv(}-DwiJIIu z6bD7gJSBtg4z60Bx$}eU(13(Q&Qh)e2Cdyxb6U!ePpgD{6R!x9w;X9G()(W8%-X$U zLe)cqbQXq5$!VZM!wJfT0=H{Y9<{fy4~mjm)q9ujl6o`Oy&90-@kRPx;V_vd9NXZW z*PK<npuyi*@qP<#oDUP3%dXTuKOyDPg7w^p( z)e9Q0N51RQtvw}y>(Wolw~g?sZG3O^j_+ZCtiFu{p=Jm)ngMx+7z+ylYa|N~u;Zq`2jP`?RKIV^S3QkxNIE8hY)>j868=@C?a_uS-Q1#JK=f z#oM=RN~9udenQ>n4@kXo7}ehxnUrm=vyY)WWMFJR`feM($r-dlU0tHaOI3tx8B;Js zK4-;2b8|`xeEEQ%r3v_kJ3Vg?<39)9w&w#gfQCdo_=qw=;f`XR{5W$502$-wF~8%6 z)INHJErqC+46p>FItIN*MSxC_5uC)})yi5i{SA`|I(^8({X0yruQ=8=V(N4J)&h9N z&2tSYWiSAVbikc~Gx_oKC8@GbN)V>I@S42i?B`S;Wg)oky@e}u7o|tEZ{p}n(`>@% zOEb!p?Q^g$jIXdF#>jFU;0p2HFtM! z=|TtJVuduiW`;{;!SWEd-SU@UONHoqrC);?nh)1?DZU`|BEnO=^$QyN<9FO=_^KUF zT~un$nIDPch0iolok`W+e%xAL#xB?C+DqK_%rPD=f$z}hZ&I(_fG~FeTENlhRYJ!$ z`6?~|rYU(-;wxpO1JZ}YAOnmrfqgG|tfx>%2nu7FkTt~T{guB%!8^##QcUR4#HPe6 z6c`x_eoJhMj~Zg9{82T$vq9dJi#_v;$5OBbcpl(yt(RxA8yEj4P3Rf+AL9SN<`E@U z6661s7L+(aO!Ig7Ow9Oqnh-5XEa=}4I!TQIFfX9~NnBElQ#+F#oR^5Vx3ABL+i;;I zZP*alP}nH>o^G5!y67|_pB~}`AAuhO85)$)I^+53gzooZSJjQP7a=qJyas6AXqnV~ zhE>tpOJ@0H7U}2}K!v6%W%hYQoS{aBx?dm8U$;zw{6HX@&H-t%d~uU(A*xn-cO*bX zU!KEWNis1q)U-f3RK@kl<2#c$5~0TrEoe}Mg)FlTi-VSf?;h8nYfS-Rvkrq_hy3w) zpZ<>K3CvJm+W8~N(f_x`|EI#Qzy2Bz_V)lww8#^?tugC+D9ZkkA!SDw@{gfE&~pKN zVSQB>@2|KYCvVJezB7#?AV8(nm@9EjAR~h_$g(hwj+jzR$V%=8t_2P@ zGPHbGclxPx8kj4>7V)ZWQ@Pk?Q(pPnwOF~&`@2&M6=vb{@%_WVc2jS&^>@yDmJiV} zEA+)W5(q0rpuk6q;&KoT4w{V5)(-JdZ@gae+r-~>* z!ZkO}C*9sH%g108gPPJ$SPl(KBXpedmO z31sBYx-^Q&V|8qLK%Hs)q+JZ1vst_ZCfQA8z99Ndfg~oYsS;geLAVpM3TC~j5^1Ee z)L98XKH5AUpNuy8;v9$@IrcU*zgcaPtuoynG)YA`0Nf|NL0fBK)R@~r-2s!< zv{o4tk&LP~f~fr2iB4c?WS1+%p<&mwHsx8LGIDQn7lIayyOAqi+bMx=$>o$el7coP z4LZ^CFf^5@j8417E?Eq(`I~kD#6CeR zwU}~AoKwIX@Z-M&2N5fQ@;|JtLom= z{I~!G-X+N-+J7P_h)93q(`UpUWmr{OU0q&UDO|Idb+)=sedhyK8H^Yo$2h}-Wi*g) zNQ{3CK|1XHmQ5o(*0;FGo{U(ouD%>k(?ptvS;g}cknfB#T9gqtYiK8TFAS0H4Zp0u zjCGnAnX=3&jUR8!q(+;1t9bOCk1nMltZ1jatUPJO0i}XXTd%po{yBpOsC3W1h}fZX zFjf{4l4w4YBZHJqZ;nfgNpDkHt*NTU1Ko=qweU=%CP5k|;=IR)au{%xcGtN97v#DOEn4&u*~fEK&JjnK~DAK5d*yUhk&Ay$ae3jH% z9VW%bgzOaUDaADqtUR@KP!=iYlanpU`_+%?Y+A{?0O6U}Sk|s}9`-bX9`+%~l;5wz z!;7`{NRYlN!J=~=5k^qRBe5T|;G17MPLD+aNwA8UvcWF#$2qaGj@6oJ&|)}?BC zBf=$<@Wu=7;=Uik2@_C@I(zUEhvrBEa%DDGjZl2?Q^?^YOmDk&{pp!a#~U~O#GlpU zBM0Ld@67!T91y&t?5-X-{3|K&*sX!(j*Wq*H7F$XKaYUiH0U5PLf9@fh;(OnfagxS z;x{$BvPc4keJhWj0f&ZvxUu^-K2Qw{!Sf5n%&%<9B6)@*=gI>P0~}&mU#G}Hb+Dd; zjQZ3R6$MkY29eF3a!9AJu&B^aW0V|W1!64Ll#wXDXQj#p(T6|*v2AKnY7I&aX&JG7 zxc2gq(MhWY9WW~TwZ|Cp7{qkR01On((cvM;ZKOiYk#THKYpcqzq`ObJ}0r7-E;lo616d0hf!Md|CtPWflAv$CAf2+Vn7-kg>d4Wqz$3Ut6@% z^zBT!%WYO+#tKv<@F7%9crnzs2%~6_1`m_Fjccg2>Jj*}fVi7!L@M0-0Q5Eu5l~j$ zT{1s1d^1Aw5UooMxdxUXV!V=k@5td7)eQ`xqAOw1*&NBBo<;J`WMF?X6mgAb$hwDR z!{CII&7kGYVBFkUZc1yb@SoE?l_OJpvFLR}=QS}m!_=VN_1MJ~)1`G!A9Rao(ccg} z**5!i{?W%Yco!0}m!M8#4_H^l_zRd36@)qyEkL|QAt}urKYMz0{C?csc_f)0uBjyk(Z6LB+bra zxUCS>!p_ay7lv+J%jgE?meIw9f`DQqNW?_yYacVmrvoyD@%qw92Fn{ruBn-QQ+;im z`kWY&_IUc*T=r(XD1cP#q||LVjq#5bX%xQ}9>P?Zgd(T7>|fmnZsN{I5s)bK2+4=10tao~@opN>Da{Q)HD~68_Vt5EBx+m;$!Bk6BkJEO z4cW}DUPZXG{RYO19bQ%Wd|3C!N+Fo$_|#dfUy-PcyFKF~2ml&qlq)#1v+<1Dp6Ivc zHpWD_Q4u1qV71Eyx~d7zRWdzM3+82sk;SG%N3mkGop%dwBpa)}&zkoM1p)&kjFey6 zi;c|)Fv@Y+mW!(f@9{fORoh13m~?uRR}3+cXm?Srsf5kvpyjXKEMIggq*!+rg4`vQ z3w9KEerniJR01qBWd0;PC&y;(3(&&WN+a698D=N&1Xdjyey8BsGgovyn$oVUv|FoK zmiWjKV&RVBYM~KO#W%lBBPGOAa2)Ve79z@-;CNry5tVLybtIkS$9KGToN+-4Hh+y! z}-tg-X|da0Cp@P@8Zm-yj7@m=gx(v(}IxpW${mre&+#^N^j**~lcv;54;u=OqRP z%qF z{GF?0n}v?Fgh&_A76E5INj%wJ*HCep!DsT2Wy=GkhjYIJ`c~Q%)*jkwI4LQGm(%R8 zZG}3kUeMx3$4(gX2C2PY(PvunR|Ta({wfBR&6c z#?ne{3e_O5zYZNWU5}@umsAhH`$@UE57s|$yvQDI>xQbO$ydk`&+G)6IO;ZQEzd-T z$)izk)~lP2~UMWOCk)mjaN( zK!oF?SzV{5pF&rUa-&;SF;%lRcf8DXW4)?cKIj&DZ}qa|4r_5+DM}hMnd_^_K}OcX zMUh0iOMlHFT=3R?Ul7(^&sm6MaRkR;VSzvDMC)H+_H$Piva{o)^y`MYq8b~ODDt{4 zUtCn<6Z}4tA(TXUj06j;G$F^%tEg#3^r87{Z`<#FK_kUYPvzPgX$y(lIeW zUJ}^6y~N}yJCXtQmMmV<^wzP_6jM%z$tOz;)?&Jb5*FLqc!<@>+2ueaEK*-=g=t!8@uh_^xz?f#p3MY9WN;MuSNFjJ{ss zh9UxuO{fQ6zhse^DczPHS42L+2qs+sk-kV~wu!+TVcbwy6i+SrS9$CHWAO715B1hQ zqcH6H`4-eXli>L_;VCUTwSOCPPLTG)NI|i>TX_I5@V)8bJGC_C7~9ISgzaZO4{wC! zC!F8NVgH|^1S*KQwGi^k2C&v~$i-@MdB`+^MU>}$-8?*IG@iFV@3N$hgDF`6whOrJ zRHEoQo%Ncnes{b4e%szEEoj^W?Iivf0SSpQqgU@X;zYf59?ESS1x2;|O!{X#dn);~x7ymoq|QXMQq+x~a|S%+P<5=#Kdye@ zAas$PL5VN8_4QKtT49P`eAIITmgYhdT$ui32Doh@1V8KL>YdXsHEauelI6ImTD$+9 zB;B@T3dZ$B)2E-W8(_t&iRrMjBYs18{VlO{6yJt>hU07vu?=h}{eaigD{b=NevdOQ z0lAw;pSY#GY-;kK@a?CrvlpUNWG}=f^l#LIoT-7YyAYf&h*x8)W5$dEC>)-Rjp=b* z08K8+0vy83kl&*WeRoD+fRkHr)YiY6v=_v*ikvahmv`MO{*+(ZtlLocZvZJ|2hU&_ zjDlZUx6I$h7qV6`QZ2hjw4p+QR$U%Y8YSuxCjBpIi43oyg7wkRzh)s@ACnH?Kr%RAsC}zN`d5-(qJ9)>z)v20oXAqiKVCY#4I=3u~Z=W~#u#jUsi&(C~H0 zS9A1?)skbhARDz$s*t1=5QJ;~z_`;r({dTeGI4gMCEt@D9?@NP(%VRmxuJk`L$9XV z{ZOmi?SVUL$oC8gk(`GHgFiND@v6`tyNv>c?(6t`-6$w!8FIKFQKSZ1oyzROR6{R8 z@^D)Uu*fcgueSab$@5LibFPTlOBLc53eS?$)#@`_qgixt9>EyjA?a&N85mzV)fDcc zbi!Mxz$gipWSnFiW+p=Q_Ju<=YPge8{nZWbrTNXe5kV8cv;p-?i_XS^)xy&|iJ=dp zR88*WRwnCxy8um{D(#JODKSLn{>;6uv@J=c86tqlHI4$80mF#R!YARAB1we>CaAu* zo=OoAg@vArUW2U9rm1K`fJaLty|)x%W}G6kKw`S+(HGYb#)e#Ku-%M+!$p+<_p(z0 zNSWeCXJ!Im+1Z18E>pQnsr3jq^q1Rs z6@~_D*n~K+b4EfAxa`O@uwCC_*V6NyUw-}-5}d?my!chRf-p4XYfzV#Pk1cWD+HXB zilHo6K`liPJK*<7X^QziK{&{s_S5$l_it^{&O<_BzNjEH1u!@T*mB282>IOv2@MPi zLl*!GrNVc{z79ySt8ev&3{k{JN^l50Ct_4`p}>bNP)kJ#3TW(?o-KrEvEMboRY+q= zIi+WO2mbGcFAekT(M8sGVHf!!d!sWqoCzLYh7Gwop|!x{a2+FeA#NF!{8-6N$wG)r z%ZN#Nxry<$`7%Ym=>p@_wHb>rdp2N`6DA;!G1J|O6+SK5c-}YmkdgD?k|$@T#CSx` zXa;@V2|j>g_n5l^-m84Bj;z+yGmw4i7)?!28M9B-cY$0C)35<)K&RG0ZPj)H|_7{6WwX)vR5d>+9ka7c-P&;M^#k0xVEY zY=W9Lc`8zJAQrw^@lRiK=)hRk0?`Ma9g3s|uV$xan<6M_7q}zy6iQvo8m1Hu>B#3Y z^Yd#=0I1Qms^>=|BJ0V>ji+n#{M=|IjuK?X7seUU@5}v^#r^zZT8*Z#5AZ%)2;)Cg zf!1i?=4-_E~nMN!or1OvU>oV^Gts3)Cd985f=C}2&4 zY=0T3qu9iU=MoN|5n4xobIO39^8kx&gk{!6S#Im^#hr$T8!Te_AyR*q0C?FA8sc0D z7yeO~S0V`@{>Ins8H7;b&pxqQq+DcFgUZY2vI$;Tg@1okceqC*?#}=$SkR zB5fI0*uaUWC1ox}My4cL%BQYl{pN%j_b9BLZx%a0O8DqM&8JPBW}Iz2-HLzlz%{k{ zfcuJTk1D69&s^-jLvnmU39z9YUBuzw_;9g!OhPAXAJl4QmA8k!X!S*OnO+3j!5`Cv zl(wRkwj#N|D5PCNbmmDRLza_Z7-vf0TzO=(eN0|!now=lUj&@8I%{2#x*mXMoXj8`2MN)R9evD{!*UC_$%Ol&HJmuBx z`Ig?w5$$b`D+1(Ob~~cSB!Ky5e!GB<5xs56SSROQ2nu#nu6y(6DN{j==WR_U%C?sPYF?O*@8!_hfsd*xZXITd~>W^)x3lFK>Ghn(JY=l9)Q z4%+n?WmOG`R5Qrl`D^=LD!6mb#OSh*^txO2hF;TUE0}M&2F8vI_YS3E8e8f}^b>eb zr^3KAnbtbxGOAcJnby^fKp)*lMs{~`*OZ*RejIL{8!z*!1XvRrB_ZUQ?c7wnqFnJq zOZ6g>)<2S*kA$=X_N zsWjP-_5M0KCEEOCH9oNq1PMgiI*oHflR7Np7!Q^9YZ2gTXk=wigV>14?SV;}M66 zzlmml`zD2bU)*sUow%%Y^Y34FwBU8xjef)zd7Ip z6Qeho!M(e;lg|oWY}_w@IWqCOVW9YRc2!_RHQ{U|0F0_L5>hiK@EDo8j)7}n3{SpJ zy|P}*eBo9bnT+iSUamr!3Gt!|xV@7yCt&1%lTDN^f|=>iHh)vbeD=&{yEktR#R#jd z+7%O9fVH=x``CEO|4K7)grwSy)?*^)cZog?m;uRS%vwh--gqM}Z9q)T=)6 zU2Y%fs^Q~Z2p=T7zU5quZU6LJmKN~tfc9JOFz6uPK4@QJxGOZf6AYLgzgo_`Xxs)jRrS~3W}h9lX56vlqDNQDr)7+-^Bs}fFgNEc`!JUsF*c>j531dn*|6wG@ZTkQ)ICGMrrP)AJOkKa)2{n# zo`o-10Rfvw3^%BE2p(m$yOw__d3ELbC+iYkP;O;BnX|}_chOrBo5xrj(>oBS<2d#_ zoxm6p+i!`VX*)Fd5g6jCd!!G`9ol{H?!9lFo)J8PeK@WXA9q#%_;twnp;xB>dT!(bkApniso8D+2 zL88-}VrgG?BKDi6raxrjB4-XR#m`kjg;nApr7la$1QkmZ=al)a8(HT*DZ9dun)T`}L)7=-Jbx_5X z?!d9-PJ#}aM^49tvT!iyyA7q5{M<0em!~pe|t07{m55*xvDhZcd zUVp%Xb%>oX4(@xiABEQNCA^gcP#${kcy|8sKaJ}-Tzx-Is8M7Xl0Q1hNDxd%Qw~~6 z5!nsSjOAgS`ebu#H}Ph|+QNdoG{3nDV8x4z9$baVxBSqOIE4&f>i(OPTY-_h^w7H< zlIN=_{7PyLR0qUc7;Ank3cfG5$d7x9M|>*$s5f9gl`;TVBd=P%3Iv&3r9?!PtR%)0 zgXW1sg2$v7>M>zLFN)01Q84MDWy0Su0+~QTF|2hEtQ-k49wg-ylnFs+0tYdowjssU zCC0Hs8gwY;#J)mep<ZtPA3(J0g{0;$*)Kq+wRyu9CR z;&5Bv+5p&kTQ^@`ZZ>saH@zD-UuJGLxw}))3p!J}257*s8NtzF0Be*g0vGqdIOQ_H z&VwN3P$zegs69k!T1O>Y_}wI5(Bt|z(vP*!2kZ%){*H%oOPBTB3GOt)wlqxl@IH)80&YmVnl*!@ zC&OGC9{wvr79Ax+GpKP{n6lIuoCKn~##W_5ubiG7eDR+? ziWvxXE#Jh#VJuyx_qf{?=9zm+1k3YpMtdU}@&+*ygmplUZ}eRU&;`VFYLQ&6!2y1_ zqH?lVAD&9jPf_Q+aXeiswmBGbph;{ltHwEs+5G} zsvzQ8l!!sqgEIAgrCXko;)J%CAwfsH))OFU^imM#(ZGP=HfX+E&q+Vj;7}K-9U$-0 z%d$P4NOwajz*6>y8C|X+1I^6L!JAMo>1~X0ZN&PI&&!}sc%x%EqvNkTJ#jOg;FXE& z-M6Das0DuUuy&|kzJ{JqiecW$pVCSL-!w<6=XY5M8d27oXBBUD8Xx;C9Jdk2H-CMs zG$F(`Gbd*`YCra1s9c8**>1w<11!{Hu@I*8^FF%v2+WDW_Fv?DS9!X`cLhZ3< zA1W_-s21B1J~}bZEc7D!9=+~B+4lb`!mb;LC_XVs+AvXyT!0!Ny-F$}#FOLaVZJj` zy(y;B;gbXlz|#z%pax_SKl)&|4b~4x@j$rv?{FH$eDeM!2R@NCWrxX30Ytrbjw#uL z0Ku@g#D^s*VUOLtGPlesfN=F4%vp`PZajZ z#~s{TejQ5wU*iLz4#7{DRVdkgz`Z-7F$5#=i6Hg_)A~Oc*2pw9eC@Pw;t7n%0R}_1 ziZUcGaLtMWnXjPsQq4#V53DW{Mf|w+C=)7cm<1*_=@969Cpdd20PVS>ZYm{T1i4#K z$9obPGyx=YfxAzlKEyJ1^1qycC3|mfDPl6rDcM>VC&%f_6?=(}eBtI6eEh{UnMSqfDsQ^fi~Mj@mNSxb`Ua`o!^YvVz+3Yi@0 zSkd2bF&5-=I2#M>6@*&vf4< z7?)`L@?6Wn#b#2yZ+*AdOzi6UA`8_(R@TG9|j{UnWT@C;krfHZ0-JNT{}VBo$m5EM=f)%Otm;TsPdgKMVWtpuTy~~ zDabdBVujIBf;x~YWR(65Ctbir3d-Rk>AZ_-iJw7~)L&fyP8u2PP}T5*WR2rUF4j?* zILyueBlPX=72xP(EFfpO5vcsQ+u+OT%kW04I4avsa=IKFqN$=olGOV5TqYDf!t*^< zmOQo|W2(!#giKjVD%A6!@G$oKT`xF{MOT1SK`?4ixdAyXnNS<6Q(Ns%nD(&M)W~Op zXMukhxg2mq^%!K|zI_V+|MnE4a^M^GiDU5}t7QbZo7 zLr#n19+-F;r{kX36QA+uKDbKZ)#>(iclY1V`MY_6Z6C-S$ZYUhm{(BDLrfSzUm&Ox z=40=NC!spzp@aK36x;;Cc-%cs+GCO=&Isf0GT=yke$o3*U7`DWT-z7}@0`82J;Z3Q zx^*SE^Ma&tdo!G7q>Ph}N=B(~&L*64juS67=f8GFoDK@ArVPQDLg#UdR3@A?aKWP? z3rksW?{Hyo5gd6ZZhs8t3tkKWjOS*D4{yMR6Tb7J^~}S5;9>C@UmBHI*z)x4;4v#< z_rJ_WRpC({6tUgKa%Yl-a}=AogtRSri^-QFl+{+06&oicr_Ii<7aBQC`zWQ?Glyg$ z>|lkgoq|i_Fv_~_#yY03UlZEC_ckrU76@3PP86`m#|y zQyCACtMHi~K*USZWxMZ8B&M39@rE9wb^O9W`!d1B5~8_eyy;KK1WgbQ4_fdD?)%MF z2Lr7)X#KsTY6q@kRH0kRwkCG8h&5rihz|v2AH|U=P4c`l*xn2mXoi)mKX4N!!Mj~tvzpxV~Q%AfEbQjnNY?X+fpxThCeqTM}*fgu!9r` zn-2NMb25>TDPM_Rc``3&`fLd6UF6YcdWOB$xmb3ElJZoDgI3EGz|);IH!;I&dBDn) z?)XM2UayU-SPwqwc=|~P=k^&>xHVU>1M1TQ_I__~|A=n^ze_L*XmJ_@F2$Z#v5{HJc(h|3uEj;d=v zu!WS>Ylv{^^NJEacD1l0!cY|-xypVZRuvD64guri0Qfj|k8LVAlKE5KXtJiVID77b z?2=*IaE`WH2KGyy;cr7V8ghFYFiYUpvpx?X?ClG7@m7MNEIxNmY=ijax+jy!x}9UA z3c4le%@qcANh>qN>5Q)_@g!YaI*Z1re*NJmEZ^OHm}PGgz^_6T2L z-0Qm?Q+0=tVi3gnR5_1I`xA?yhWWG|s?9MGJRSt^O>#VCCOnSf9x}w?y(vK$23dq; z0TSvXM%`UPlbAWrD@NpE&C#wt&EA!U#u8OkKAd0Ab z_8E>tmSfl~EO0^WXL-4eNP>o#=>9}4K6h~)sR)?EP8foJ0a`(^GYBW*qL1O}IqWI! z(_D{P-q)`$A5UNoLB60(;UH4nO|l0H^gTV%(GlUiZmue>7fhH)7`JdSpdnVDSpqj{ z02WWw+m+Ui!z!Go_%p_X7*X0fln|YIHWP(unxIq6=8a!egp$33S4C@(6as!#R*>=|v!q9IyGD zuedfIW15M6L8w8G7!3)*lcAWRIFlb?MYT}mpV5ECzfj%beWpj3?Zdv?SHPxt@gf($ zBFBpqwZ6awl8-($76GHp(ueAWhHGfXO89$+-y(bCLGqlZpe zPauj=0I5$y^{DnX2-&fChLx<^d2*&_Txkz!0kZDVm{O^-9$|iX;f_3uPHdTQJQ`r967CqwX^f)A4gHH-(WdO0bsYG>C$1x7a6T? z+9X8yY!-tK1j`+VaBK%T^gB1YYSs-#c-6JY7%=DbJhOYtg8WTJ)RU5{*DHTVJ&06F za;QmDPBNbQmf(k@^rj1OJlP>rZLTmzPuZD;*Yz%M$giir; zPL819QkBH6#3UGx4%voU<3Z)}#Ly-Kpm+|#jab3Mu+sejdQ!O!W8Wa$wXLyKe-lTW z+Aw<=3<#%~F<$K{FF53A&to<$88FMRK+M+-+s%R(3IQFwshLoSA@4yxQ& zP$v3non6XaN-QP#Z6|l;CbSIzBtqD;7){ElVy9QSSE0sA`Nrwh3Z!kC%+ubMtR4d{M}&uH}Jm*%C)sAa|(N{xdQH+nTg-^oV0d zHo^F42|t=jSLeIt)T(3 zrY?piUvEeS6=W3*om?zkEbafpHzQb0(_2{;RhK9Dh`j*Rwy=;6@hDzt>|mj6CK1FR z-oL>@GMU)-%8U{UjuT&tvcP9pn?~mG8Ce@A1QO z2J39sC9YSQ^Q(gt0E7Pbn(qMhjhT&>X;2I?UP9c5926!55Kg6`N=5&cpF%&gLrIm$ zdKSxtt}!H}_08zb_x0)pXkt+~srNwVxXBsGZ*qEsK@ebgiEm1J9Q{#1Vp<*NKnbEL zJ#_Y{{O3XBJ#I*+C_SWl=lil1Zz=+gQF*V2G{G4>W+J}Q@`4>x@M-|1hib1iw4VA+ zNB{>~N8yew_%)@6dapP1RthRX%WW>Cw!;)KW|LDsHC-ymm;?+O88shIDL=@wRHXVh z^niH#U)sp_ABUwP7PJLL^}Dp7z2g};&qVkM52aARoizf&L@Yi~W2(v24VF6D$+9Jr zr64SpN|6c^XDn+A!Zg4{b$>Vp)F1zC!4JUDA~? z5?vCI>^=%78ws8D5mzy$%(m7f9ha`8*l87hR3TGp_-_R+6FDG1@WoeB=zZcOc4XH^ zOBrRzL!L8DTD;+sNwd&O`#M^Wu3U`kkULGV#F^Guj-2%{sYgTYT&8%jmUuO?y;gt6 z*OjoUe)@yWBNjUq=0b*Zxc=yoB9@xsg_5=2R`F$*sZa0nRj5EPus+m zelkaC>T0U0fjQ(IU>S|z|1y+d~ZPCy%G;;G%@*Y3?5 z{2zRdrVDl(JH16zL(wgoKriwXDYAJ@y0uF2c*U-OfcnnVA#e^q;tJU!@ik(f9tmcq z3M<>$fsxuKV*9ES*n4!^sp8fU2v=Qc_rXOOvGJ9w4!~0w`fhaxd3UA(z|eJFUFpDN zpN7g3Jp*w4gx=D0lWOtgpcDZa1ARAJNKul`YXMxziX3iLNGvN&EV?`1wyIP$365rq zrXR1wd#h!GG*3vfVZJV2Gdu2y&LhD<`{qe*=*a&Dx4b^Xuj#RD1GDV7+x8){4mBB> zeIJxW`cz|m=|~WE&t8%8=Vjw-H_msbIYe5$utoQ!h2L}2G+u9wn%CB7)NDP zzb!y?P+yg-c0zz)em=|5U{7S>}pzh?2(#)qmb$f=J4jp5}SP3uI=>bNDzu8yxF!cfdlV>#Uh z@#{X9O!X8(UfbZc3YL7gG)_@t1VTemQlemlPR#nb2$ACq3Go>3Q)Npc# zX3CZ>)Xk|<3CgXDD(GLxv9jic3b%}DxN@uQQPr4Pd-?h#Y!=jpA@yviog*Rs zE45Jc&CZU=)3<7AW`DUXl0(R{{SN z3AXc~t<+yd!VT>IDXfaIyan8(W|{l!LZ98sBz& z1;gQbauTO($3O&1KnJOtkfk(U`+c%XxJ_YlLQYF1&A31`vZhl(^$>kx1LByRX5U<0 zVJ?|2@(4AVV|vq17}O9`1C0=0Xi%2#A%>V^H3J!s_l+8Wr3R0S*DvXz=i`?9w(mBB ze!CBNk64GvFkNb`(Ncu>CF8EGTjK7eo6CL|nFl2NI%m6nEF{>g9L(Qr<{z`|U|hr_ z?ckm>5sxd1z(=iHexBsL_W+-s2!yexSiJFD!(IW>eG;R$5<&u$BLa;2d^I1TA&N_j zfnuz z&`<(%R{U+lsb7x~H?IIdcBqp1#ndLQRyAZeLRl>%+29fn>-_HWheRwdGWCnmY!G^s zReL~Oft68<(vZn?PmO$yDa85xUn$CC8-tQ<)@cF&l=R3Y?i&BWI$wjLP$NIq`TfgF zQw$Ky4fcsF5$F_oI2ciznX@W82>9gi_7lUN0fKM%b3d;liDy9_ycts_=2<#9nG6OWl}kCry1dLP=Ef z>{kT1QgX3X4T%TrBT3O-&FUE%5Trtt&TFN%*6hLRx|#FB46nTgYR#Zz%2{Rh&6Ev# znX|D8%DCTAvgFB>Y1wZXUJZv`qFzmST}`m?h07!&C%2|c57N*0JpT-Dq6<747i$lS zqQIz;J!ZxxtL;IlU(Xj$rgRWZMeRx7T(1L=d%g{Tyoumh93Oy2pTt8^VVK zDDNpWXt1kzI#U{DglrN>4+)brPFG?HOTFZbw-~%s(VlG|KggE6=9Y%o~Aq#|Dd9F$5Q(Z4#gE^T4D{G(m7MYO!T5!$o6N1kO6>y-lW>??l1-D z@rUuJCK6-LINdQhAA9rGJqD8LDpL%SRuB(2Cdkd)x@0tvyM9H0>lF6t{#3O)8nNF3 zOZyAP;R}-FflPCQy0mMl6O+Ijqdakxg2CxZamAeR!jy?j@P*jra_=}4@BW=KEDdv5 zHP9aS9HCkWn;nW11_x|%S@66tQXkdu?sU)t(WV=*{*S*C`0CNXgj zqzd7Eo@pyvaAro9;HVaur!LjYoO&)W?XXGQGS0PNVQBKCcyy&;jpFuQ)IhEpnBVdy zyn)~wjMGH9!MZbWyNbEhoh;~+!X>jdqNR6tX6pRyfIdzZ9Z`k*Sr)X|(4^jJ=3xc62INK#1Zj^DV9xS;_J|?qP(z3tf zpPER{ml@4pCtT53o>8*Df49VZg_~DpMFZF0QX1xF=rR!? zkn=%Ql~YIWE*H!f+Tsm1brbQ0wHWdYOoU-;x}(c(Ez#%}U4^{tYpkx->_XI29$?=w zX-rVWq!ysu0ay>M*_1V_Z$94O@1OV{eS$yB-~6@wNCB8D{R8NJ6)d(@ByUOk7CQ>f zxzgX32?8%^mlkZfeMN{L>dQLD32fava!%rHZc1fTpNe7k9a> zI8F2M3INTL-Gl{=(uzujm$I0urjV2CL+ynQGT$~HK?C|nVlpRt+W zoe+A1rb}|GmT?ei_)73kT0xZPzyI(xiKO}eIf;bxTf%p1tp83b{;R6}S9bA_UD1Dd z)TrqGGmV6A-cGYkHz==CrDU6+u(E2wzKpOiZ;_Z38+LcFkY{PJPP$1O{7t4ue>a_h zKV1SxG<WXEa_e9iXb@q?C09V%$+wG$Mqkg;o0N#WYxcf^nHMwAFrYgX!{?ASARDM^Vx5>Z&fe+JkJUrcq@r(M)HP z-5$fP!)(E=df#(HbDhggLW?`|v`uYoUho+dtzPYUpp5}ue^c&cuRNw+QHVo0o~0{E zqL`G*RgSP8-h=@x!Y<_`ge9h%j1g_IIGTa1P!EVoi#j`5@gTjr>*vJ6#7vFgev!Ds z<<|2IX=-UNX(zTqZ)0ZZK9<~`Dib`JXx4#Ejk=vEE8^}fLMfY}HJt3MFp<%7C&e)G zp^<8C^Xd?Ete|l~PvpvQPdKqk<#1qIGtizAinjm-)jgNm6f@+*M^Bm8>a^kkq(d!W?j`EUrc(Od(J@=oZn10)t6QFk5zg1m+4 ze_&BOK2iV&pqvtl5?x|*+7`S*eSP_-i{C#jsfY*lb7}D6nBV4?oF=vGaS`TDCz^&MHHq(_a4CAk?hYd}6cCtM9{b=~sfHc~A-iaO zTr|(f>txE4CvTsCtK+xh3;+P|xvjqmJ`?C}iW^G3?>M2_`w`y#hia6tG2qYQ&JR{G zzW#RBKp12fELYRrNaUl{_M%OZ2qYo6t*W)ezM(p=C<56N8s`~teyj4pQXc3Z7A|7 z11H;jo@3()muz=hBsg4SXz{!orA280 z4#fb&3TrxX@D`>fade+ydIZi}{>Dy~he2x;DcW~ix;is5a$v#BzfM9Z2eSZ|F4n6A zXRS4f+9<2j38JLe$(jeyD*I(@7ItyWTyRxtQxv5fG1OtG$LwY1jc^Y$;!Fbp0}^UR zY{ri#gKRuEF;%L?m?WzYA1xv;#wIO`^b$824G+Db=JGK05bMj;+$T&Oh@jTWuUk-2 zn^$4qREOj+nVv=ivMBB<+#C(#@UJ1$9Q-cG)I4#L*jVW(lZkENVrD{C25>qt{ws;R9Hv^1&8 zSpGu}u5y@;b;d2vURNep)%apIW`wmU0VyfQG1nA@%MtlpFvPDYbH2yda{;~g6cV6* zQx*X3qukr<;SLQj1m7NVN6k3e#0mocZF?yyJq<>c;Yl~hrGBH^A!fy)h3=3Iyha!d z?KfiIp#pN7X|v)Iz>9`ViwS*M zpx$m~8rK>_`$g+BK9L>fvM_V|Ih~;rZ4YQ8Z>inD+bNf>-EWQ3G35|`ZyQ}}^deIU zS8T^egjF4XMI&^z%<9)RVszcclbz6Ah+kOgg)Fq1_gQH&qT{XA>IIP_z|e9PW0_k5 zf0elFRhe_GbtN z31)Cl>N`94sgKj9rVz?B*&4^KO5HNc1GNX(%JJ=3TH6Z0faY#`gF1#{37W*RrqYwW z3KBQ~z8L^Tj7Zr#3tOxvgl1bV3=7{*ZD9%S+p-p7C$P`ch;iLwpHDtBs`ANGLM8an z+-7TYN!^rOD+>~(ikXXOgykAewtz5FP?FoN*0ztY0J6ng$h51JV>oO-H?CZiy8)_pWjr+PZk+==dr(m5Qw=7SBISTvzH3T?I88 zLLsEo6w|gV+T3nkcfeim#et87OxAc@>yw^THuJ69dOw`lUNkySe7BffQI~VY@LmO& z9?u&d&)e%G61}_Y&rm-A1I1(!!0clP>yg+x6tH+IAM{^ zj%pjd4Nss`;Q~ZN9|3pp;T^o{r-8*M@-gs&XW$z-StUhm_&2;_r8%@$QEuA+zN-uO z#uje7yu$XuMIMF2Lwrt`O)~WBcaoh`29_&dfuVlWp~i-*!fD+d5)+H$_*Ygkr{wrz z;xI0&TT-@LTsEr+i0_>PXv1=`#_(F}8RF~j?)G`3+gr`QsE;ep0}?;yU9DBUX`aft z;W+4X@VRw$emmTm-1VEx+j&X>oEs}`hnb^ElW#rxt}pIkX$>8q#7T50$#AvrnzO_Z zDOV@=c-IDB7Pv;7@g?OG06oG3!@?I(b!d66VN2{ce=w&JjX3enM}c3ik@A?7}``^k~aAfvn$pG=!% z4Xeq04Vg!hxXJ`;T&UH$b)>!l)$%9PxS5VuSaM~u2FG*n=MX=1cYo!eMMOh&2jPO! zGn^rPe{%3C?F$niK@?jJy*`y>tg}FW!{FPYsHFCZs4_b?N`mUD0!;njj{C{tVzneY#Oe8drR{EKQ z`OB^$BeQ;QuX_Pg^Ay`75;Okwz$$6LbrjJ{@J2lP#IEeA2IejJ=kf}{C;Wlv;G^|3 zMBaYu(>Yrt%LD`*HbG`qA9v8iM);b_2Ppqf9TX#qvJmryDmVU5RQZ3S1pMEY_CJO( zW~%&qFx`4kDz9S@58M03~|rF;HIHi$TZ3DzbIS@#-542}DE$ zpKk=gsjigZXyK^RTbeQMQ)y{@?b}^|XXu=WAySu&c}G|l?kQunVNIPGN2HVm8-N^K z$|7U+KC}#+IvXl0Di*WjbmRndf1?{>Tk@o_9pt($J+1lrX5&VeIp2oIM!bE%u?}>% z98!7K-#xYvBg2kZqfnwvSlr%NTW=-aOM7?Gr+9bYKbW9bkD~R%g)|vp&XEXDRcMzU zbBzN(M^>!76+5VW42Sgymy>9E7XTcAeio79S$(6Qa;+7NVYa$!euzjjAz|MB`MD;9 zk#+w2oVkXxJ;=#$8YLDb*d>O8J+2#!4k*pA8$)<-?r;mWQkz)CO7%nEs7uKTf28yO zLo+x~VNR9@*P3qARsrkp6R=Vt2w=pVaP+`Z0$)UQ&RAlSX(zrascO!91x%?4L|A%) z+(vkf*=mc#X;#LPp6%P+5O_a`IL6EUfy`Kd$-^%s$w+n?uv9HaL>`j^B;)EpS?z(SvTibVuVnoL=jOi$tX!EP}6!;Nprtpe;1 zrI0l#3riBwZUXD}R$}-~l+3Za>+z=R@4UXh0R^DiLq4FZd+022&`^ZgUgpK7`%O_4 zXiD+`b%ka5WwiMpK^0K?P-H75%1@@@cNHrne+RcBr}8h#7O)V!{lAT-X@r-h<34T% z+7VWYWWaj@=J`B)59a+hwjC$uY$N1QD3}bxS(h7dY=JcbRaY$LT)*Fj_bzvbbWjM7ReYE&kWn zoI6x@i}hrYQd8Dnm~X;Yc-pO%!HDq9jSQ&^#?%J&&}BQAs&p~GW|c#d5L{#Gd zdm{-dOiSfrMg6ksGt)+VRn&s0Y&f|2}6rRV#Q~ z{}a0IZEW5oF(b`RM0Ms5 zL<7x5*zE*SguL+ssQ_07!$yTo#bl-@jf{c)6tJ&E=WUqKFD-;Cbzi@x!ps( zOM&8|e+-!YBC}wiXx*}2{~XM*12eRMDN`8IMC4no(H?@eSj2C~!K9K*y_c2GYBXCq zCk%&_xG|wfF|+308+02PA2#1uj72ahMKuwfLeU5b>HIdOFz;qhq=jm|AfK4qCU2m{ z5I*|L*wa*)WjU+IPadJUNWaR}G!Mo%Mw+L_t_?5~m9Zr?O%>hq$057u7aw-d-jfKF zQ3H?sgFEbuGIDGJV%3U?g*4TS8UBi0yoExDD_f*2Z{6|ty1cwR1cAL!8w*pL5zWQp zwZ!7l@G({_(<~Q;Hojl0PPr@w$Qw1Iwc@}>WpxcQz2a!sYKH_#4LHlFnjBXL0CoN3 zCJMm9byK#+mz{9>EsOG^Gbog5fy@NUhvKqd4YkdrJ5=D*3}%~%MK)XzsLUYYv=SLw zL|M~4;W3QOF%4V7gTK>J3W6G+U>?Bu+Cp@PO~)?S?`52-^i8&1RjHq{NT`I zi#sNdSji|Fo0Q(EtWuI)8{4wYQR3F^#s&!gdBQt%YN$W_ZX54(!2#QFfT-Ig+eqFM z)jke9t5RKI2|dwm!A`szM5s9lM!GS^5LxIH9+|l=uM$znqaGAX^B$aM#TpBMOAkr9 z;oQ!08s10U9`Qwxt2WYs?Y>1ATI8V(3$18ML2B4{oc4TmguOlhhb7wY3Qh33X93i+ z)$Wgy4cR&_b2g{OeiWMer}N}95UdmWk?yJaQSQ3-?l6)2MdhIO4k(1LywcCi3-0hq zhS4UfU6BK6S@j6>-2tzTc{tEoaviD$Mkx8cx%G@y*s_wX_@!DngdTpC@;&)D8W+3s zk=bnoF&5@~>dqQe7+d&)yHV0n9Dog~NB*YaYEy!8VsD*%8D5GttluYW?(9Qs%yzo* zr6mpLCQ%ec`At^(nLerni>y{w=ay*LZN+Ju*3x>_rZwuY=srnqCw@4X+g$M}R#DK0 zVi)vy)qo4a$v_h)puy9#(BL9T^nl^gBIDi9E?v+a)nD|C7_dT#i)FMUUI67X*(^=j z`ueO44*wPVG9~!4=bpTnr z3K}fb@BV_ja0s3wc*sL_g-T7uSFz$;R8jatbz<^~szRZbL|u}HOnykBEFi`=`J`GU z@qn;)vIOPQ!0=@U`fM<=G(f~39l{uym*3k1$>z&?{i@kUlv4hX?5a+k_;obKkdK5J zC4a!OE49d^!hSF+uRwlUSR@{6sd}beZY>-(0um&9jaz7DBNT4=vm3mB)%gNk=isdO z9P4Kfq6!9xk^^j^n=;qa&_kf?M`@$Y;YX?vVMATeudoMsV@(A{Q2;|0Zi{w{5@Gc5 z4GVF4Yk@|MD4yeYp7sL;)T~Q>>z;>K%qwoe zxbv0o#-X?K96`kK$A3>)y-i%4&l&SczUnEEiWSErI$oIIGKlTOvliT&D5(kLwmMZ5 zKh@`Sb9=d48?O*}{2Hh9m~nm7M3XSX2E5dl`Dwu`&8IBofC}#nBIlea$}UVa89}Wr zMbjFe^u(>o9fhDcFleJ6988Dag~uI2#EgnyECjiXD2XQHGfMO8G&F#gY0oqD5kdjg zfMQt>(I@evGSsJ9q=3ScuBaAF7Mg-D5W2JOh|0AFP*{u)Bj3eVEnJrN$MZdT@(9%$j|>OpZ=Xh>NFg_lE}9JMp*kuEn=0@ zXiRGrQDseG2l(X-$=HEPYif+;6}j&dI@yfRC0*m9leMxLpfoo4T>5e&`-+z!iKXizhO8clZ_ z(Oqi~gU@=-nMt)N#_W5JXL++Bb8rP%w`twBBLhqr3dszJL7Iv}$gbw}x@+~Rnso#9 z8j3r&TR>Z?+P1U3gD*yq^=ws_xBt*SaJ!|gwMG`lcSc9KjWNy@3^fEh8GAHQxQBx* zDutWkmLdi;w>S~seqPf;fFWtnJ?JU-QC>;ygE&LP%E4KzGyg~@-hkw9-~r~$V{rY) zIS-zt%;%oE0NWKWFwP#)70MNrD>1zzN)J_M6TsrEWg7G-5cNLZq-{E<6iX;gZx*&7 z7A56Hf6Jx`f$FDh=uLZ_s+GnGf3#n&Q>$y~x;K-yk|!zQ8{@N7qKeu&Rb+0%bJE#j z7tXh%^;}btpY`2dX#ugLHBE6J>ImlHdJW^nkxmcef-m9FppO4%A$3VIBM_Iwxnm+7 z2aqFLAzQ7w;FgpUHEr#YAc%AgCsMMEmz%oOr(uIn--^-QJ;Ii@#^-|;wVwlBIzLgZ zZ2iDcH}3jdSYkmakQ8S6sw?8HXAZwb3@V`LtPa{x=5hi_yI`>@CTd#ncSG9q?mY#N zAKwLcEhpYi;NW8I-0}O)$pUeO&@HO&6yUH)+xaou!@!_2ZY1n;+Sjg-kk(daX(Poc z)y>BU(j;>GDd3GabbgeHu!u9@!Pcj+9#SZcypPl_wS{;q%MVnfudQ$5+e@}N79^<8 zH%SDP;VACS!k=P%zxs0y=|az=IVXGX|F$Rd)Grjj zK)*jwy6KGYWsu^XA;cS++Mu_hD5lhM`V-wbPn6%98NWeIdKxNr@2GiLEgX*$U=*7Du@Xw6tTKmshy zR*Jc5SbQeA3kK|FMjMSxIR-WyAv1NiPCnWSf|#dA24FWr^0mJuX0*#mk+p?ByX}mD zh5e$*AzXNp1}5BjrDbG8mWFDRA-{Qikz`9%(PpkG>?#dsS)pS8c%=HQpx2|e1kn-R zPS}lHXQ1;RNm0mzd(OKTj@kFonL;<|ldNO&YFb zP#orlM`W(vz$kIh8>^@)RN3F(~8`09(Y%z9t={aMn_0C znc~KMXIjzXqP5s_h!RUEl6pRo#8|j3KS|b7MXGLhJb}(n`fi`F)UW@S93bA*nvL@| z=LNKP>X?afpR4bo>!9N7m|~FA4roWX!g6CULvx$lKl)MFId`6={S<8yR}fOD_q)ns z9sM1nOCY7dG=fRz_@QQj2?C|pW$2qOmmxKC>6}7Sul~f}Dq?xBIA3YkN#+KtdX}mw zX*Dj~`d|cy??0urjnYnb&`$9T7BtI?y> z0=xzf@+|BVLK&r$$!AzpJ~=JeE|UD{LQo|QXEE1)5!TQGhQd@}k@L;yW&OR9YgQ04 z(08|J?AQ2YH;4l-S`Z}+8q`$QTO^grocWca3gloKElH&^5wz=M_Kre#XPy`Y8lg3( zA7iimS@+{R!QqA9uB7mwsxnN9$*@b1w3wst%PR{5`uafmNw%eqs48#9(Cg5YP?b;s zIL3glH4P0D-;8}+{Z-3!|F4i6^?zj}W&1CT`@gSw4LQ#*9`_$bBQ6DGhc_s1bht21 z1_+UFhec(Oy7EPfx>d-BoSmiZ3g0hg6mo)<-45rY)J~8LVz%ok^VqSZ@pb^H@Z!o*V}Upm@YRw^Iy^3f z&Di2z`&evj4DYG_ZWZ?QJQ2B7TM0r zQoAOCx((;k)VHBeS;;L6J||x-jB4Naa&+79Ty{WnPO`^#m%;RmHY45m;u5uqn4;sr zgr0Xom?Twhan29NwI3VojDLwwuV{F*4jA+oJK*wvy(SBlx?nol@69$ z9N^DVw_M`aNeV%s^Lh{!jmqRMc2JMc@Zpx;QZibTJL}#H<}P?e#*WgnUe5kN12(c$ zupk3|R2$Or^o$?d9VV_ile>ZP|7H7i{e4s3l+gj>Sip)Ti6bMgIHTi?cO=ZbP%cD2 z4y+PGg|)Hv7AAp1a4dS1t+uf@NdW;dUiB1n4V@DG5`DiN6Y8g(sOUXJ{G% zE@GdTrRZ7;=ieRplfEhp8et>GWBq#y(%-nN!wE~?l$9a4u{BVd_1S61CkFn!qW zyuuZD;d%YA&z$1PUKTbd%fay#becn*gL1n&RP&G~>dRl27YqDF5kD-8jGLUS*2WJ3 zbmczw@DQDVJ0XfhOZ$q!@%k%5f=?ny=^82g)d2E3T36>}!7ta~#<>O0w)9 z`bsc3$Il-%_JS)eg8REMMikE}x@nuk!gpPe$y|(yei&fhj4g8!?>#v|J=p8A+t~FP zHjgT_0|^Zxw_1+^h+%a4c&`?qrj;T9HqsADjfom{MK!?P#gIW-RG;wU1Fo&6id<`a zbyGA9(5HGqgIyV@4y1ijb|_tMiPolQ%d&+Bu4uGq^ju+t#=p3-53l>VMWfy}X_-$6 z5;dqqMedmiNjOY_y1Z~pqr{~7;TJDX8|m>7Q z8wNK(Ben-n%M$lNl?=??m8c6=D*qkmAXgZubG{mfnE$b5K?nJN^$uD8E6`~;+BrIT zI*NbES2S%bJpX&h)70}s`zPdOdn_`y*jUGG%63*btgi(JLMY?BNrl8ebm zTTYsb!dE^9d#ZnFwQmNMoEi8G z|1#bIJiitIAm?Mc9ml!PM;XP*V>?trN*>vHDEB(>+`}d+Lr*pb|U{UIGUyn+b zX3{b21>44xTyWFuBAm$p zGzwXg7njXm?e#gv#lq(Xmk(N1>6E0J#kcFp`J zhpboy#~5&o_U&MI8jspy`Cignug(1u^w3eQ*5XzA=ju__Hz4v1Rlp}Mhuw@x3*gl0 z_*x|u%edKIYbE{nAHq7D$baO`SB%d~QajT1+C)w`eDN0%<15AESh& zP<~LW4ZJ&;YWaE5I;I)KR+8uff@aShYj7ZS{jD%v2ofrQ;sZG`Js2^+j%!|yX=NSE z=)i&UVZE$FhE-JQqQ4+k7(_Ab$)d~U(UWRWmmkY{tFdJ%ODr#g;cN9-Glp~Q{r7A;;UkEKo}Gc~{FrGOs(iJ0Rdl(4n_!JWTej9se=>jUl5ihI z4g?OK(r=&j5ofta;uS=^RSEh^$bSKq;aRfuhsGOXuY;66pyLnoRS_Y7cVt{|D2(O0 z=Z!rkT)5CSD6ajb>{`ww6>JT|U4doKkZbu(pGqUu1ElD~yBO_NU!1V-o^E6y>!KJf5`8Zd6#C z8hOsOiCOJ$td=p`o}6Nq3Qt#d&5JG6ydh2ajp*HD(vH@{>ekchF!%57$Qx#*^|?dw zFjI{1z4eS0Vez`<&g@Y&3T%IMP7ej(*+gIAsTaF&PP06{ju{@7wPDZ;UzWn3w7nKZ z8wga1doEIv#MlE37$ok-cOd>Yn2==JET9Q@sZtDpU|VZQNoE z|EulZuKLHy`sVaJ|Imj2B&BH1RfqYvpHzhoCOGPs$JYM=SJM1DuB*A3xP2X8 zZOmN%TR7)?bXpaJf`a<0kQt#Yp$I*o3_ZS#o}u1911XQ1bv8(1!P1Zrz`!<)&7_aVCcPNBd{T3v-Q9>kD$VlQVM*a#Ay^ z3zBmTi-`1-wUc%9le6>@+{3<=lVPJ{X9mt%85={GVnS&$$Do)~Cmw>_nGg6uL21@q zA;jVhEanO)Bhs&dlXnKPqk(h%>yWQ7Xk54Th2Ntf|4*6sS0%ggF9WiC1L}VbercXC zM1=a+KflZwzyRP7|7HV#{EzpE_#ZZat+|D(otu+0(?1{N|9vU?|Gd=R#M{Z;?O%8N zI|={KhyP;;`j3{>*8Ho1{;#M1=N1tccN0+)R||U^$N!7~sPpkQUIw=Q<>6wx&y(+k zC1DPVGC_e96^(?8$HqjI2^=P;hn3zOCuf5NPm#~eYNWNsaH(0VZY`|r2-MZXU=LJ} z0Y+G3*mturL#~~Z7c8?3VK)tPsM0Oc;^PVc@P zB9D7AC?VQFaL0h@-LbOw(3}GHmqIt>&R3d{g7n{Pj(?H|=48J{7XOJJn3H+-=IS#B z+?bpZy4=S=^^tD{a1n95WV$7EzgmPSNk7*(28`@#mA!Ky7aXo4{PE$O*;_617Rv@C z9j8Li}32#4t+u{dsX4g zCh|S?{pfuVOgt9j`dbq*ccb(J^iNeH;FBv0VqNWJr;LYTMsG3jSn5ar+~I+lO#tId zU*a~E=--URk4dq-4S(ND?joyn7H{tw?jVn~0J{>o+l<$O^J{wqY7Jq$=c zHnUNbyH97oo`Cy%Q3U_WG zqsu5lKsI1{qf>W8oWf3BDXtgX{S}*i#bej;7_XX{I*41({+rVHMC+308~JyUW=+j zCGPE1H=@SWVZEKLW0h^Sq^GPH`-(=BAa=Bqw74%FX;9rluebzow70)lm>(VXIrJD5 zpvK+eZBa=!z}{x!Z>&~G+Q_3q5-6;sC2mG8s)vdh&bNtj)zoF_Fq6FAIx|&MeUY8c z>_VXC=-xsVZxaO!k~X3Sz`u%vHk5fNOo8O*2$?S3tRHnDEiVTNp{_eI;B; z!)=N`o|exo>9b+TMbq;$%hM4S47OrTma`Bys7_*KAxytHc$3egoUho&4_cWS!w(zT zvZ>{gkcY2}4IF_2ykf>rQLv=S47KL}X zj*m!fOz^?}nzn(0%E0*y#VZUIOl}$!k60H>nMar6^N z`s0}4{NfUQqvL8M=rCNE_xoPr)*hh^xSp^}O26hH9ZNrly!X#Nh9YS{Z)!`k4fK*I z@fN-B;&bK70D6>QDLyV87_&wGZlo!95#-DjoU79qDvsaLcAx!&L)9~jEd0Q?HZ4X1 z!!fpSgSjS>77X~fW~g`6J!uICB_mI2%x@!+cu+$Gi-^N*<(KsfwyHPeM0@!ne(18w zBgF1QqLW%XmN2Cq8HP(0n{@)V-|0Gk_^%D5M45P$b=DO z!^Jsjj3qxqXm;SLq;Vf_#Y$*QQ#>ha<#{}~5$u8_$#HHASVXaXBOq2lu3TAdHn3%W z-)6BdD&tevG;b_^NhR{Jb%8teZLIV3ahqbrDM*AAVdqJNmDApRivff+kTQcUPQsU<)2j9TijpN|+Ya z>!OX~bBN)*;QmSC4$Qfc!J>{cyH3rD&NXB~055(BV6G5-)jhNVDv_)k(yzji5zGj& zB;rxmgO%aZ(V4{jELn{&H=l<>5j>_WhVXHa&BU3iOnodSvYgFohn7vVTCh@qF6u6e z!+9A~ZP#dMM9MK$QL-iQMZzss@-9{LKy>)Wes$8tVG(ImCSZ}Yd6@u`et|X{y+rXc zK(n|HRIvi-SUq@M)kSxrG=z;XiZuBLpTvEQ`*9Jo$Wn*e%8NPeGKUwj}Y zSL;?*Xnuq=jvLPf#p{ORo2Jg>LbE{v82yNkG}!jZF7a=QpWkmZKUg@^_@pOsT%>xC zQ)AGi?%KlSsv#CLlxu;&lymFr}1|uiuv#r-&(O`YjCRE>6p8Fz|4@c<)uoMq0 zGE<;LM?e%w@#TgqiYP`=+i4YYg<+AP5soLIRVv8 z@^kw>LbhRma_$6jzG#_1%$-^pkn-slRg|91FB4_LrpQ=cUBOn~C7KOogS#+KRXw3T zwftSJPMHo7XkU%lI;mb$)~Q;@qFz%~uUb=>3hH517LOd>wXVKeX;;>Xgu{qvwWc=k zG9V6x1XHdXgK-8poum9r`(wEn@z7hf-jDAeNcfq#ErorMO319yea`F+Xp{bi&M4-` zhi-}Es;LWUU#$qVsCExVJKj)eHT1!oKY;I;K2&9=C2e%H@hOd}HcX+a=2df0XAv7w z$ge^TKW76{7B%WPG+_u;qGK{RasW9+eleQYW9bBl5QQ9ZuzG>ll3->7QKCl0M0ldI zY$Mifs_}pdkR3hIc4PRbCTAbQb0w5{9_~iL!?it&13}t3%#7TkdO^{P&`L) z4yz^*74CUkH&1m5Q2tWYAJf?6ryt|k^pc|ys?6b@PnEw-Dxax&E;ohUp8^V(OE zmHVjtG_MR$Bfuc_tT8L+tvBQZ!nO{p8(|3fO1Qm4pZ%=vwX94j_fhZ&qW@XMT^nb9 zS7Csd^&s|^M6eDBX$WluAaZ#dH?TGRt*c&=&>@(OF_T-IGpovp>jBj^6P_KIP3G-3 zMs}YplNO}~x0)85Y}*)<1J`!<$zgAdwU}6-U<+3t@P4v3yCW9*Ne)hBHrqcDaOv!P zsIM%apV!DRwPKc+TYXeKgqxvVCAy<$x-(*~AAM*wxSI}mY9T)p>E5sI8WmP5lsjip z5Ip!TW#^>x?vrV`?d&OJCL10S|6@(D8**}VoKzYm)(RbBX0d({hdUQWE=XXMwGBzW zkV~6tT#RgmZK%epk`DoxrtRJFJ`TXthYLan(RQp^_&4fC!2fj?;BE~6skV7^rz zQu{h(YBCRi)8?Y_mxiMY~Jg|9*3Fz_^L|3q0c_2)J# zHiHnCnThp@>9GX%*5DVg|DNZIZW*OlfGwBWSIhv`r|^|%`0b;lN=$Z#z!Z5{9~yq zyyU{;?TT;B->9*ZaWpri9<(dj&||`aXZ9SvPo)qlaF~n}wYzCCqi4s`TEN&DPyiFd`;JdYo%`_i$dnw_siYxU@M_V3xGw@{T2PCWG8hVbiv-G`D!~>?4 z?OnViSh`Qd`uoN9aCVdknY>pSD5&3R5+8@|;wt4TiyC(8t0q25R=iATo~J=lsG8h{ z8)UbH_%N*qT3Ft;gD!FAojo6ZO}JTKk;O?;bs&vzHYa|!Gig=tQ4=`u2(Ds# z%VCinx5mrc(uK{UYla$JOb3}MoaRiKU0jtP4}5VrVl0>4@LwM(T}^tfo+O&}BHRst z8={un3zx*+y#{xQ>F+`tp$GeeuC5?+SQ2sJG`u>0cR$e{m{l!}H?2NW=v_S7g_|vZ zy@(t+E_P5RDBd8A#P{|Y^!aB#;4fX?K-MnR9UJi{`p%c_aGb23+TfW;AHcB>P_!e+ zUog+aa-empu^UGQ#Uq!1+E*y^0j&$jfKn{~D{iL?^I$iFx#V=(zGAK+qtj2`TVG2= zgmmQjh7YNulnl)@CW33A>yey`7N0zI%|DCJXG!7UWfF(Yi-c&m8WOV$|4+K62g@^kKbU6l4tc1_NYlLzpN~0?ZEp*Y9d? z%o2zO;l&h)=CDf+LIv*(9eA?dPXm%q)z2Jwve91!qKIY;AGqXT3>(M>;e``e#@UF_ zp9Mw_*|-Tc3)UzaXb8f@E$t1~^Q}MTL$N`PpybzFdF^+)yqG7r)1IIoRY{{NXbNQ* z>^YjM9IeU%b)wzj_2rsyMO%`9)ddIiLV;z)cN%FW5TDGhQ|`JFE*k;=9M1l#u02M9 z2jBBDp(RNVm0VYvfs=X4e9@d&u=UA|dCvN>FT$JSE}c!qQ*>DRkwZh`_O)<`JF*nH zGrd5r>4=mU;wRQ87Y}ug)mY&4czfOrxix4(z0e6xkpzLRDVQK&fyc`-W|_)b z(e5n9jfGGsU+!jFKsH0rY3QUpp=^MuZ46?k0P49S0hYh)NYq)%jSXXoF&q4oV?J+w zYfJZBG)C#oh`@C5JqAgTq8%fh{jxs;&#Y$Z8)n)kdqcr76SZOHk>{>&5E-?He<$mD2THzo-VR+zgfU{rCFcIJsCkE>;{#hmgV$+76%DGV zDEV%FJL08>=qJ;>wND`BB9;yART=9#^fpnc_ro`hfhP{^nhNlnw6R^1h!*`acNKO$BputWwhZ21ei+IcNZb(WTpunN^D^bR}xy0#ktPj=vski5oKxbK4@ zf`j@Lo;q!kgd?@~^W0=`UYP-*tHtHPwn-Bz${|=Ftz*_MWo%VHWVLL5sp#%=AuTP^ ze_T{_4XGEL8ziN1_?+l81SPN*)D#A>Bo=^k&qH2ga~MWF$1ESZJ}&*>?9&ZV88>BvWJ5n!8CHz=~T*&mE7{XkX#uR(>+w z%3crdGGRSk)=`MT&SDGsQk41(q|~S>g9tsR7NS|ftG(a2CVt^Og&lhIyn^m|q28~3 zN8{2}7)`{6!Q#~+?KSSBshAMJ*|>U1k-)WaVS8`o+dO50&0nW%)Ryl+vt;Mh91>s1 zws`z(tQ)@yIGC}y&oRsp(xSd3(@GawwexY^`0(E5Ct0Ml?3%p3>v~d+@0bBbj5A!@ z(IOVOL~qZ{-F63Y@8H~a<)MUPVWze|RR2K8w7ow;uei@+M8+O0*jZ+OKhvF=aR0;K zV)t3nQ{v%!@8M~Xea+#SFqdGcyE}869dDcis9kLZB+Nb@zx*`3uD^xszaKDZ*xG8{ z!)}Fiy!S<37+$XAAP-G0AwIw`{JGt<2n$n8Au*rKJG0jdc7XQe1`ah1UHXlY4d*yN zex?gy#*JHVsMXC8e~Mja?u8eo=Z(bX zNV7NeyEm8Q^#ypI>fhX@N0p zYwR8iue(PGNAm{kL1RT$ivouSx2H#>1D(Gj0EUFCDkxY*CuL5HzMMaiPZ90yM6c0! z;cP;;ozA=!c%XmxNvUzNIAJM$^Wo3(5H&60LfqITe~@&6d=x!)r6Jnb=gki`1T{j+ zpBp;W{$1Sp)HSzoT}VJ>?wcowP9W0ew_PH}9s~F4K`@DwJk)pbmQKw1|H~U567ID8p>vf^~Jov z+3rf_@Bz}sR}t3MZOCzWg*`8T zO_X1}+k`}7R=J(>A9(7%s#WB)?SeHlYe#TrJHkF`%0!&q3ZnFi;|HP>u*Zi)0z$v- zo1z&E>siwn70}L)n$Wd>IDn=7`r{$UY_+lB>o1$`lRt!Y!B8Z4D^G1o0S2(y5yj{|A3nKwa6G>3wB}6fgQ5Cqhs+2={NwsuxS~0`4m>x#$TSh%L zuPM_5zAvA09_SS6;wVZS07beb4^Z>MQaI5&1KU<`ec{yY_bf#KmsE}AA}!Oe#&K%F z@f3wj>tf7OT=F7(Qc^d+tI1-RrlD3sSaQp3`ze#siofyo1K|-_ZRfqYrrw%Y;sdd! zg&yJ~fj8uOBPhG`PFY1+9)oXKx(Ia8{hS50DIa&7@+>*u3R!kW&KoNLM36tLLhe9o zbr)2>1_i=x^P3d7TBN? zb$1pxe!XbYk)rk(bbxoE)CY0P=eNaQf7t6V%e-jzZA1C(v{h>iyPvQj@qmL>;x#ee zGTEA8lJG0rkXW4@RbTu&2}ekBwbu6a_#b-s5(2!n6`P#775E_62|+Pqdo)VMcHGiO zelR3&_%mYTt2cY>S-PsMtv9Nr3@eSL@>BLoH0>M=tU$6R9o8)~yH@nr&21%5_Ow1p z&);SHcPVZsEL~IAH@t-9{CR%NAHPIMbW7)?KGzbRJ&w%S^ApGb@ z9=bFNw>p!_nmR-Df?JW{l!j1(X&+Ax1-;kcVJg~Y6zP3>+8fOo8G)?=#VY|_C+J4H zjRwzeXRhyFtyE`PHOe+!*Q#(z--%Yv(7fY)$p%lgvpgOe3&-`ZpdoUtgxO_ z4vs>^Zxwz;?CAaaI8caA^;~!yDF*DOU51Kgr!BMxRVoSq(wS&JYgG0R+>fgZY6L?m z{ytD89*O1`h3uJ%Gt~h2oZ*c%&R&U`52U)iYhzCzq5zH5X{R`yAhk}+0{+N3WJ`0nB zHyD;Dq>o;Jjw~uV%faO~eJTmV+H@|r%155oLG16rvp*+KvDoMSQCeIMWkl!AdYoI4 zDZ{u1AXlR@#Tr=Zp7S(6Su$H93=eADL^MDg>yPb*#Y7l%a%&ImT-vMeWis|-7? z400xF^xH~`VXj(Lb2@&hqvzFslVl?fyTCsmGCS%8#Ss)e-V&z)pdo-T(7#YYe}dF~ z(kb`wg%nt3G^1_RF&Q+FstdE{WSs*1;G^(1jQi$~m#s;@^mbJ5<>cj0nGw$erP=V8k%`XEbP zLAc?MCPKJTg!KHCb+Xv=xzEft*$FY7w^*Fygn6ShUqRn=>qR z<#{w5SBKnGE!iIBm%TIFqOR0MVlyH&EbYi?IVqe)jCH^(jIVpH@_2qqbhE0TNz;PaU7?QhSbsJD?w}I=pqYt~49aA~JW%rnkD-wiTvc^=m?D zdcB5Rr5r=qW3?cLz+<9ajUsQ@S}=oCfo!WTm11_(1CL$-h}9BBPh9(u$}t(B$e`ii zR5y1(oGMwIlx9Zq1!}v918>1b)}#l#qVkIOb2E~3F*<(?Mc_v(BbrFxiV{`Mr8Etb z7jEL}jUU0>h1YifJ=0m!_j3i-AGON9uEh3}(A_FQiCT1p`Ifk4E5aBKx?e*+f1wXe zy|7hU>kR#|X6w<0r$pFEHhqx+krfm~^7iH-JxV8FwedSv*WH|HC>470^1L*1jIyxDB<}mZD^!gmDf92)#!Ny-{2* zca%r-@ReP=;x;?&w(CzW>Y6~(K;9W`-x!>oZ|@T?NmyuqJKKP~#wQoZ;v-Yoh_k(&T~=bVa|epMO~CrJKT`WY!~FCN?v2=fP8fIS*s4)_OrM-- z(@!ESlS`Q2#!?-wgTHbGBuSMoY10mzxj?P|YCJF~=KVvjn0WX8Z7Co-8qMPA@4qGl zW6A!pmL&L64Dmgw@=-V4n+H!0mG;Dt?oQAP*1a27h4=VG(rKW8;$$*4cN>cha_XEwlpwliqXuCNc~TLyRJh zs^-VZu&?_~aQZ=1GTNvf5R-|)GB%&GvpgAAUCkD%DK{BUx=LS1-$0Yb9%8hl0A$4( zRLb+6tf#QL#O~{^Jj-q!CLTt^L)f+`Df}K?UUSiUm8EX;(d!Xn zXs1TzZ2fDk9=oer4@XOO^0Z6WfRV1eYVmsjuoCk~RfMCRzJxRbkk+NreCRu8J6SC- zqx<-ScR`ZGb?8=cYSSXnl1eqm)Ri!bstbr6Wrb=mXsEVPLaH79K^rF8mdlR$VqGMji_*O3i~clfxF+(^Y(H7SnPx z=ZphOf*^e=))$EfKs|O*6J;U~A2WMtwJAC?zy;KtWtY_|Km+`%G0ncZBf+P9`Dx0mVAnU5~vtu z@&mq5j@R_z80swVX+B}yX0CFKJ=(bE$c>;Bh#wa#X>|7ua2b<_S#Fmo3Bz{-*Nt7= zdPq(Z+|2&Hp9ibaRBj##Nm`Mhf2s6Aj9500+7||9&S4RUYJ=hyr+q|09B-N;j~s6^|Ye!V#>JLBR$00XG)_esm(Tr?I;KrDxgd`Hc&EKQs2NPh{<6Y2nvr z8>x{P`gWlfz-z;lev=t<6jHxMWAxM<-vidL7mWqXCjmwFPvEu89LWdt&E5R+0}9J+ zhfYAIhp?B_!ZS9ipt1ambIS*B3rPgBP=h0rwHYY}92mzuGHbsDV6NtZHfPX03?-}0Xw_g=?-Etv#Mgsc0x>X_ zI03@U4qfC&MXtO%YFzGWR4*QI_pLTr5+lzsui1{X3S1RAuIIT+KmYJ>5&h+P?w08- zH4)2x5}fTk*}U(4E}skd(?0~l3@+q30D*r!D%Q9;42MS5F%X2-S;c;<%$3Q#Fgzrm zdkBT4$k{UQt4Y_Mzb!c##uY>@PTS$6|4~2u0*{Zce)%`0-2bf*JB9Rb_YTj4Q;zZ+1lH zXgXrLHix3fZD9|ab?S@;x4A6MDn#J%I(PPCfF&I4$p+<7dUTo))}wal?&1cGM z!ov`_2Zmc6tw+!x^T}__gDxQQ2k}BX&RCjOhXv7wz*ciQM0O?7$iTR=ysG;v`vbPW z2gZFnuuQBlLczw$WM(-FPjMMnAa$~oY0K;Y#%^peBe5{Qu?0JqxCuN z{{ovcS?&azL-XqGhlenvzQF@yLIrp=^~*s7sO`2x7}DOb24%p1wDn)Z^oZ`JfimL2T39 zFa`;Idl3urgzu5sZS3EoUr6Za%*a6r@`c!@x(NtEhS{XM5eY(u_0!%Z0|O9YykIx@ zzRIrGzHxVvvMcGP@%!(@AeCGZ=)hopqk{jwKbfc8)AKV$XuO^V=uMQ zwD2r{TTixcggGYWUJoG_!EOtYC&I`eVs%$|zy ze8fn^#okCHZ)0AV@PH@L$dil>C$S-RiC3W zz%I>-UUxojsJi^4r=*5wZJ|pQ6fT$`MwhQk^%OWTt1;tnv7V#FNCFTeO_jI27(EJz zA&pX2V&9a4;s+f7b~+GuvgF1-kjh_MP|3%SaLI2kV=3ll$091mhqsM{C#U4}v7+0i z49y<4S#w`u+0dQwp*DAL5mJU|2arynl&c@Hoj<6+@#>oTo2=yGFR?7|pv8MO#lrNq zX**GO@uDZ(=!3eTT?5kaq?$LRZ^Bb|5z}`Od4iQ@VTIN=varv2IC|oqC#Bc3Vx^!s zzpZd!M=zaQ^ay86LDX3xJ5e;j3iI)Cx!x@Fw{t4Bn1*gHSv|LJ&$YQcs9}@F*6H&3 z?3~rWDg}wg$lVp%Oyw7uvq~NYL~X4nu8Bs5n_LygBnTx`LBvr!knXL%TjfBSW!;+sjZ~ z=ANbA%zAONperPsp(ZU2(qa>kKgpwV5w43;4CGri(;wF2Gc$NpfJahVyrT{G#(Pt= zBQ6G*GN&ibk^{VJUkYpIs8~d|0^E_IDo&y>sbuKX#?rp#=i@~`=!82oX)uN2yj%4O zy?b9;3RhN7wlg=F*Sj5+vP30Mc2j8ZobmG-N{QWF3umS6Pfpg)qPAN0O&%W{k-W{y zhsI7VvMG#LNIS(}v(|goCNw>M^`k~uqQ1o%|2|}@u>^dtno1e% z{F>7@zuMKx#Xp`zp*3501ONCGZWDsTX0584rli5r&Q*=NvW0^e{Tz-ZrG2uPyIE_c ziv02IH|H%4vS6IqH`>1$_%LX!UzzVa3W4EDu@^t)bAR_uKJ@cm!kO|o#NeW`X-TY^ zQ@zG`ArFAp>juYfW%z{uh5!Epgg|@0zJPG}LDX@Q0)OJc7x5(zJOxjC(1Aatw9f3^ zoI3w3q48(D{AK((H?Mf`7x+suZ=O<0MO}^Rt%}+uD}d1-PKKf$d=+0qm~;RFd*Dy- zfr-EJ;IHv@s`|NBSva(QJ!h6d`9H7HgTKKyxOvlqzs28~fB2RMe~)kTVMT1?VGsTR z-|?Ue-OTqt9$W{*9z2PglesyC8xw_z?|Se({G$iorv{#YM?LTeH;+++f5P8U^jO-h zqEsmAifz~s4W|Ge{D9q2xFR0gKvg%fFcjxiWm#6TAwBqK{E%XBV=NvyjcY}exNl~w z_sU^sG}0HAe=M>MZNVvJ>3Hu6_pJyGgn7}ptVJ1|2S4I%bh0(2Xf(V&$;V-gWbP;P z#UmRwCfWUl2fjcpSKO7MzDO+P*|GWSi9J9UMMBXSg{(6*D9Y4=c&MKvLG?ZhF*q0v zlk;UqWT`=hj8!0O7^*kvW)PwS%>$3KOa6j?W#Rwke}O0AQL?>FUbcz5Wn;Ma)P=FF zJQ;5nzqu!ojE8!Y)>;q#9Y5rp_=gAo5C5r>IJLGX7AJ!@wDu1sw=I-o6F>Igzwi?i z|Lwv5FzJus87r{sQ-NJ?1$KRIV51kuc<@vFEa$G0zCn9)VWh{(SS)Ed+5`8)1Egt6 z$@;;ef5b-nJQ?0f6eZcQsaEAet+hqzxy(|kggMI;IJ2%NyqTR*oM9vh><}yQM)Ojn z{v2>>c`iJ~xGb9i88^Nm9PE_^H{TBS1sU5!ZR6yxOF&B{}fcP=dS>$V+44aw*n?fA>#e;p`N#C{-OQ4EZQBIA0pt8;i!` zYr;`-S6L2$4dtdn&=XTRX10ZT!ciVM+aigi1j)?hk*Bja9*ag(1*@PlOqan>GG^7d zRJp6S*TXSsXr?f_ItL^C1h#k#MkC1-M^ip{Wa4*GWH;0EO77d*7olBJt0XQh1Wy)6 zf5Oo|o|P_+#rs1^dZcE7i&xMozJ)SB4RLnG!!jB7!UG<7kei1%Eprph3OH|;p?gB) z`>}aEAQ6R&tn!f(uq^91$uiE^Y*fZV1(u=J0pzux6ZP^KD9Hk)4udgSQ0t`dWx=e| z0v=|4pM~cTCjO5%QtE8T+?dEq>tpc_e|ZMD_!`y{8cNW()_x!C+8B>*VP9rl2{TY) zBA=AY*VB4QVW=BPYu4v=wa)%1L? zTvsCVBH(*`Lf!TJRl(__FUI`r4dzF9LVbOm{KB?)9h>J`eNYd5R(=dA-x7@we~=<= zkiv_e^V1H@6sxmuvfC2LFh!V7kKEK7yde^6SV8j9{*kWRc8SLPo{IX-KfAt(&6_g1RTttrGr)-WRiU_tm&aja6@X)K6o*#mg zvn!&Z-f+K^M?UQ`5faR6+=KfrsI)5Y!!$rUE=?CIS#Hx`0GOmFX}a2a6kFFRgbL-E zoGX`wo|C>U+8><6iWn@GPtGy+hn{+L7G?pg)z%wyEa@4Ehx^iRoK7;~e^5eN@C2xY z32-L>cws!h{b)2E?tx)I*v(&w!jEWvuWdd;^F6lteKe;lnxxyS`Uh42km?^+J-sbt z|Cs6@SN#*Je^T~k{6r)E`}pfx5Pa86&kDiKm6+zw)8`DmfWvQ8^wGp` z%zBg_%I6xi_-&n6RNM@YrVy?sXTa&LAAy2K({E}w!m65p^M3GXBza+z2#9?!X)hFZ z2ON8#s7VkqJ-Z)@by%|tDu=0M0fsyx|&+uNvc&gI)>rUy>J*oC;29iz!X2Z zZt4h38-Xe&o=(KIsy`s2d(y6{mjV4aiTVV&=1C~Sr=Sv_Cf7Uzt@tdo<8!bIpNCWM zMK}##k|sUEe-an+!E- zzFhV5e^eimS_NDr#(i)EZ`UX_W=MmAOqN1|L6ws!pNPUl1W?@i+1)8c%z@Qlxs6?5FK{FYo`<*1qo$0uG8fMaPJk_&_ zFh)BRCTNGjG;I>pYLlTsn+A$HVZD&X2a!F z{jb!T;96}C{8*a@Khx&JE7}5hQ)`B|v=;b4TLd3zi{TS(DSWE6VS(0xer-8U)K*}d zwi4HBop`dg3j4LyIH(?Sgfr5k3(})Ts#qV&bqnas{D@9l0arpF z{DojHxE4-=zY@$1m&2(R1+GoeVt;ycW_nbBZi^rK$(fQLPK1AwOm~9|uO=D(&iwEO zs`$*gfHPEOFOU8~wGZX!pET0s=wn$&e|hvTStfY&3H%!jyc{l8dT9KuqLul$m+ApW z(I3jK$Z7!VhyS5EP0jgl;xNo^a_j={Ff?*6hT+I2N6iQv)np)@s)q0ATPbM`U(-$) zLq&81=E&oA7o1JNxjP|H^C-+4f%!W?_>S2HhHn8Q!-Q_1sA-98e z22^Ti!W8W+sM5}cI_(^op`8!2wTobmb}`J?z6EXCrEr3F8HBXUVT<-1_?mVFT%lbB z*J$5`N44$nq_zY0Y1hJY+I8>~f9(be;~OcAZ-&>joie;mq`;U$#{86yEeF)4M`ZAn zBWd)RpufJO=ICq4HeE7hIqvc!pe4XicaB&EprO0 zOJSDohbDb29HWne7Ja-_e<_L7MAg|z_gW_lmsV?;OjML3Rz{Pfx0U+Kq^b@mp=97Y zu|cYuDAY?xSa(=l%muX_J8HR_x@x(Ydeg;}oVm4@OKI7te^N@QlWMt;mW?W;gj!h3 zWpu8sjLx!EQF=?jB>J1qmEO06*86-*srC4RGJKBZ@L5}1r&IVeIcj|;O36;z3EPR` z$s@4t4(r6|mbSHi<|^Lhd%;bw8NP)$_>$q^%Lg?x_P{B8id60gKU3n#7@^0YXFFrN ziOA@?mu@9If1Js~nR3{`Lu)}j4~ahKrKC>)L!U@qt|TuX3YGd{Fjb!fbM&dutWSg0 zdNrJ=*T7kN9h{@r!}t1Jl)iV7Fq z3akXUgx0VXYiss_VcbdP=xwi+!`cz(n_uBAya`N$PP+=P>lQG{o(?@zASZD0=qD3w z9XRz66zDzl$n1qNdKkv)>!pm<7XNe%*V3JYUkL?pC>CN7aT*I_u~;5Og8vmn5SFZi zdiJ%ifBHVq?rz%)4tf?DB%t#V6;}o)vy{UrA!TyEu>_-+2Kul>LVZ|D`a|lw0=fr{ zRXdbRJaOWbmeFeGm0CY8^#m$>ne&xgNQhHHJl<0NFoehyhf`A= z#3&A86o(=^2SagKbFdtCL)1G_YU33atD}jPub-%W14Q79b#|M+!Om`>n8}Z1=C!!F zZ995RrKJ2QB^BSVFyDAasthCNC`cYQhSzQJNid%z%QwXGHL-k~Nj~2e7Rk3YC57@9 ze@#X9)McL%3nkw+=6l+gkwQ0=h`DBNr7T=J~O%Czq+y8%yz2Rqi8Q= z+HZV0+Ct@qlhRd1(67x2CRG*svngVO5Q8Gc;G%R$k=}L&ZdsO`SzZ+Urx+9~1{WWE zOnMcIOB4$svLtX?9~-$1LgZr<`8U5*E_r>5Z0`OAw->8?5nQ5JoOp18mn!mae`SsY z!GBpSGLV$%-2A6l_!Wyw4_=9}ip6CI&tjZnarwcsC{rxHeekvjC>G!Oa&a&|=U_fS zvO^Tv6> zUbKT3T|IhHYLkmcZ{jkt>%9%-HuBeUK4P7jdhPpO$`FQWq>fQVdP_=Q!lh10BfCy# zjN~m+s9Q&GSZrjMXB*0EWLGO2YK)Oxk?kjrk-tFkNurc%X5}tZ%F#(-J1mTx8q2s8 z((laFFyGEp4AC*~_NHtwe^$}&O4-0`iZpVZLViDublOPE6!x|ZY3fSAW!K1G2)VQx z`HKsePa`|gY_;X~VYv1_xMMdo4#RbFaO5yV<>2^XxLyus55w(pu=bwx(@lQiLQl6z z5P+F5o1VZuE(1$lmtlju5|1qm;pv5&@T|fFo>%x)yr}Rzyp$fpFlGFl#Q^*O_}^Iw zh4iew3*7$?P)i30UaA*@iWmR@{5AjpP)h>@6aWYS2mk;`YLoFJ6@O}EWpitEZ*VVc zVR>(LbT2|-b7gF4Ze=cGY+-YAoxBHN)J66<{-$in=97?YvZN7efDl5c1_(vcfIt$E zL?ob+O?E>THrcqlp@>}+`>A)9U_BMFpkmMv!~&jz?etE+_IhVK&$Ha==~?-`H=obe zY}EhXyPeOQnK$jttA8^Sp85HqM*(1pe9p#N_#q2_+`|841Hqr5)XhYcFVP=6bgiYyyU5!p5<5;>IQ+F-oMvxs3fSR?YSVz>=Pi4l~Hv_S?z83YX# zqbM1jEXIfeoV6HB*>N|iQvY3(@N|sQv)FNu>TSrMfCCeyTPRVhUte~WUl1567r(`81C)mU)(PR;; zli*shhLRI0If;^!ZJ4YjiZ)Z?w22ncN|1{Zcd}>`>#U-k*5IMO)>E>95-%ZiSVgB* z_$c2+$$u$C0l$r{5dngNlyqCgMw{3qHYZ{678>AGLfuO3aj5S_u?;4P)2Qrpf|@CD zQi8poLEl`fIMXW5qDh=hXy;Jjxzy7(g3hyv^Tl>r7e8q8h_zh8_X3ww2mECaUF5g^;U5MeQ%_i zW`b^_WGZDl2=QjC_@hPKVuO!}vZKVUHkeI_v&C(c^w=PW2FRhZ92&1c?4)+L6Vyxz z)=n3@Y~l`aC#~Zyg6<~P-c89p#O%!$aj#X}NA%l6g?Y*1e$h+a?4@d_MLb|*Ogu<( z(tklv2SLr0IB8OSl9>OVqirUbjXSRA&ABjPEWcv?I|*$#r9rQ|uvHdEpx$!w-XL4UT2=Sk{c zpv*o>4p8ziC67?@D9K(2anfH1`YS=xDSw$kOMj7)m#l)+qnpM0` znKX-dgOJ`NjJF7S+bZ6nA>XCsJxcyY$=^wK-?xYltl~pL`^YLjrtd$fmrtzXpBC{c z<^N?BpV9YooA^R}X%+vb?|&@ft0dMazP4fVU(|Q}3BvitD!!%W|FekiP)0}}et&Oc zCy|QyLHtMt3 z8L%1#DV4s?K+xG4TM&ouV(qep3md9cgz;!cLHFjMj$!q*`Z{$`tFBs9y|!U_d1X!gBFr{cuWF3SR@W_WY+74Wk0UqWbRs?1 zbOzkP0Ct<)SYAsudv|f$0Hd?J!y~N<1 z;OTVvHU*GWp3Vkmr>n)c8AprMFKcx>J8?4I0i3Ck(JIOts%vZNtJl_*FGp;BCfz}g zcXFMxYmPzo8of5Ba#`JS+<$f4v`Dk+#>LC3801E+!S8PKBB>|Wxr6OK7j}{v)eyT2 zwHaDne|+8A0UOT19@W{hmi5>dc9I>zj^!$x*uW}-s~Dt)>lE`au(bGFYCQqugp9bY z!$KSF%xd%Y{%oi4ZE?PoAN1~Q>$4P3~(iv=b z2Wby83J}Zf4|-5!syqQ_i`VU9Fj{Zy^RFvd?{Wt=1btlvUgs8Hcd($s8E|_&oo)t` zA|q@rQ1dA0@;ciJI^030x1f&FTAy!2d8cck+wDbGS?3Ne^tin)C6)|k77pOEsDg%| zAA6iLAra|irO)Li?tj2})OUBZxc!YZaoQ+ftJAyE>Gx3HD3rl1UG(X6cDQ5r(ij7I zuzGW=yGs!PcMszd#-Jbpu76#32hJ%PTX=%R1PSDTCz{NYti zNlegRl3sI%(bnAM^gBCn$LwnoXe{PIPH&BHy=engpuFkL5z1ThOT(mja2Xri(UYB8 zICz7>_(CF?kbkHGw~|3VuD;Rlb`Qp0L*qDwaP?k-2o2B>s+z%g?6tu|Mur5U5sl1X z{l{}6;VO|-gYaP60CtREFc?L%$9%cp?Hp``+yo;KzA=CkMQ9KN)M?Z|$?UI4U!*M| ztDa3kUDh)bAut%D_uS%kEq8Vf+WoMB-5V{8*>|CG7=ILn!ARPNE>CBt+dtS4IdMZ6 z=&FB9K+hl>Bt~K|f=2LqT!Rmg9Y27=R{fg;3TEI)h{9kZ_1^0DdA-q8`mNN8wA85; z7)Y%s6jU=f+H${d9V)6og>%pa<;M*Z)kGhst0iRZ6XNJ>MPqt@D_bdKovpeE9KcpO z0;(7sI)5*ws>SC=T28J|pE$g?c*1GJjWj(2@moYm^>^8&dK!2DjF~WG+$- za}geS=C2ux1S8bcsGZy7aRu9v>g{gNx^{{dTEe~BJ%Od2zD=Dmo|Pz^fUdYe=PO?1 zqR`0rdL!AIs)4c6554NoL5r=>VL!t z)20-|3Y0pf9Xy-e-oSFVKcpS>-h8OAI&f`Umiq!8a!n~D@7#!i5QRS((H<}kw@&GD zvnN2if_=34TDt?G%}v+&Ri~dZO3@%zIAOnXgL_LLr1kVzx4IMEZNJm-nQbmlD}he` zmM{k?w5o8qq08zp(vF_T(8M+t?SINISXIRWY>O_5(cWqT2aFt0g`ed2Z3=B)TD%`O z&@Is&vvA8gR06bv83{bh#9pg%8EbUc7_(?O+B)f*6PEN`D2dY9be- zF$#s4v&BHR4|GBY+T4&wspgjAa<@4#R;+e;f@Gjms$%n64dJS=${h%Whw)t%#55vX zV|cTnC2MX~6Uv(1M(=6y9?n2I>OPH{YeoVGBVmB8dkm^gtj`jv3s2O7QXfznAo|>E zq1Wdm9h&3|tPIto?!mU|7=J5g(2y%^215f9d+IzJWnL8{1-w4=k(1ignTTSltbr}5 zVh*`Gfi5~AO9@7I6we!p#v-rD=L_lsqz`ZgF>Luo_fIzns2kks=rSVQ7(vn?ica*20O0{oy73XQz@B()SKJtH6~$g@wZg!Co-}#&=F65Uqg3m zyY6G)1NX?3hP+>-NVSo7CX9&$zxicZ3E1gP= zTZVE&bK9fJszU0VmbnZ!hkVioU$?*2z0gAk6)BPUXS&#&=2`Bj=smYOD0WU56D(PWxTM^7NJ$ZBji+oQ3E*&`Y|%#LX65A63EdjQL% zU1reDiqZndlYb7VB>6+lNtu)tPM60QsZ4G3twUuPDaajMrD*JX_5<~2XktQlB-Gy; z`k7l*55x@BXzWGy5?zIaj;jbYQx{)!>0*k9EJvzsLUS1|89Ja(Ri&}#*$XIo z%Ki|ZeV|#=*thI|C==vY5K8(0Z$o2Wv;Sf*${QHii+?KC*yrpEq-vBKMwr=y`DhyZ zC;Jq4M|buJH6ww)sjePK2@ zVn^yU_6BRB7>Uw*U!5dO#J_F&aKIzGD~Auu*)qnTa!65H)j0U!vIa@ zA+j7M^U;h9db*F{f+mN{42vA0$&oTwlcVHlO^%TT2EAgU3Qdlc<1{&*l0rE_lSMpD zlM^XhEGID-@hc9cCQIZvRI}~D4zDIB%XCdnp?}6xshdJM%_663a)vyH)WysumdgrFR>~@itk$^3 zd>T)o#Kbc-b|vYj-?7UzxsYu~?=k*%2o<1QWRZ(CStFNN;usc3Q;5=btmbrNqXoG}%O?UQNjwd7?$0q{)+Mn=>Qg zS`t1S(d1g$OtixFEumy0&IQXb{v95LpYZ%6JGR5fQHaK~c(%s#*qa(Voo&@*3(k?9 zh7dcIZACw++#*{w>5@p^<7pvnI9c2({Mon&#n=KM|x?Y}Yk+|g3Xr$9g0?r`lOu{}36Luau z7b&ocHtuZPW72yitzKWi?b16xM}MBH$!+pHjh#c7U^oMDVqD$P72Fb%;`8NpOdrVcKZyES=_yjPR= zk=&c-k_wxz$vyIZP4*H??IlWF!Y8N(cV~${Tx8mtbhHu! zJ(>jUB8L3*D48>p5vGif<^XCxSuK0=0P?X5Xw=!iaa7}tNlXXlvw!Ut`IsgT%0uXH zV1ts)U4h^hFY1^`@T1Ac<)30qq7eXT@(F&2CZ9w;WPhZMC+%Jm((Wa?b}tEQcX?Q; zny@H@-|>X{RtIp4oq_f`XO~4D(d1L|X^q`TJ*!qF*s3HdP#+TK+iUU}`7DD8191xm zyE#dTd6uHFTiI>&e19kY^-0>mM<*uZtw}VOB#N-&;){V1mBxC=>9Vx>{PpTNMG}Q` zmCo(}!o|_?U}L-Aw@JUBO<0QFYv?@)gGs*8XVq zBjCm@U33bV8QXJc4Wg?X$v-Q>Tz@N-JjSyTr~P8Cn>1)fPsaoX;pnl$BY)Pzq#ISaq&qY^}@k9*GU4K<0YR;gQIyW|;#?!^J+N<`v zJV?A>lW^Q&zqArPnu;%tqS*XIR|5lwsad^x5X!160F)^=dITsT zW7G0#{1mE#)0mTu<7?`ioz8W%3}V`t>)yQhJ&d{J%^IW%tpIjJS}rxR#yThY$fiR5 zzE^tPZGZG+EJ)|lCckkR*J50jSrDs6&6GAu_YKpd*K1rmrW&<%p-a#4g>g7>Z6ddz znTg7EDGlE;>iVFPZhG|^@{VJ;B<@x?Ext@wnl(|E%Bq{VTkHg?D&`hDqcGv!c7PO0 zcPDAz7$I(;^mtV6s5(f2X6PP=;wMC})gNo@8h`X`Ju%4!TC0H+pk0f!jyy>Itz|U{ zZ6c8@bn=<13lss<*GFnu7FJEDBDtac)U!+Ubt$qKuTir@ zY=1NG1~)TNIo;Gpw}`zOb|kDo)7S0{)cO2wLy00ilRMp;LpoKN#u`+JXwN%5olbhl zNlU7AJ6-y13E7Oug{~u!dq#R75ZY!(;lMo&Vd$E|K0pbq3`vV_e&epBW38{cSkfmI zx+}IT_i?k^Me03TJJ3y6m(L%JP%gaZp?|75@#n~qHWs4?+(3kybmOMXzCHs5>PyN> zKo(s=<_x+L-Jyv+E{WEU3Ar+?T{Po<+;Dcs#IJAQf%hDBPgUJ%JnYUaOelObr_k$f zeM9Nxz~bP9jT-kWA%8(w z5k&=7>e7~Obje#;*7oZ+RH0j5TN?opzjNV0BdfFtOaMyGWrj=@xr(F|1!%YhdQDf)=HC;_z9Z`kLGNX-o0bOhxw!O z0n7)Z^4*x<7?t0I`OQ)JEs#qmzX<2jF|hicZhX&(=_i++8J9ncolSphN2j6cyUqBX zXME3R+tv31cA@%SWaKY4@_&~Y-%E|}W$K$tw+rffh4H)8$XwbGdo&if|ymx0-I85Pc1=_D#DcS}^R412hh-G*!3iMjc}@qgHB z(ZoJ5vp%rwQFOQ+Q!_A3pJ2N%9jaroJJebUx|7|7ecr9`I8-n%{eMLry9djt-%4yt zt<#GRfwc#ciw=UdACh)kc89x91^NTGr@#VF!w`5@4WsFe*uCsN{3g*Qvfd$k8V5mq zCW`vORy*-9Buzvpd3P^phrx@cKhvW0vY{~ zxx3iz&~rokAq#WadVembA9695r&AC6sFavYP=(*BP*{1m7_mV@y+9I8xsx+`{`YXM&$uFY-6T`Fz0kBF}K-od?3( zT8h}jStsH?7Jni8&99x<3&-9LCi89t79b!AC`Z7wdl!_}_Cn7fKPH&GMj(4S$2h2rp&%P|JqHYBo~QYX;IN z30pphQqG_dQdu9{hfomw%EJ7NZvFt1qfW;&l<9eZH z;(l1dp$F_byp+R1sI4pBgJND+yX)v%I&L4-*A+i1UGwv=gPFzo)5@fMS&r<3<$Z8m z4~!siMSqzo$Mon9y`vnt9~uOlkR$hO6GwL)eU=KDUdAGtV+qm?SOJ*WSftT7aIo=6 zmqMgV5frmxn93$0T}t3sHW{ke6gZAeg;i`CoXn=fdNu<(ur9!6!5M6}qS0bh5~H#2 zN0E~_tit{tV+WCLRWL!7Ntgq(*df&8q*BgekAExmVS=sfPo(*v6qc|j*prI)4znYM zj=CSQC4TcQ^NJ=C?;V83J~)2fF3{?CffawUe%NlsphIv$73w<_H=n+_VP+Ud?8W9` z?pPSYDv=o$Kn8w?vU146Z!SZ2V^wM)^Kqjx5SzAGKo&x@#RAz2*i*R0H2r+FBv26P zL4Sth<*}!6aWwsB*t5p;iwzaaWkew;mCY7M=~B*~V}Di*^E`VYzNI<7Wo=B$zp%fm zmM^lGes#>{F)ja(y{uZk!e0H=mW?qjUt_PUmT#~(jh4+u%OYgim3Jw^Kmq-MHT`+C zQaJi=G=1f6Q?!D#69!v_jCUf8V<)3PHh)KrR>a<7Z>!PXVecBFO*2Nb;%Fz3#fqD) zE2_Pfy~qBh+W(!sAHPmZe9QKjb$-A;R4qSZAO9+ayfH2R!9Gzf|H(czT2>h??KtOE zJ*Y_gplJuG(0FT$PEIQGqsj_K^=N1RVxOrVKWASUJzk`^4xj?NT3tKw5UlBenST=x z!kRufk+xuxz70z4Oo;nU4E^HvBA2k)W>gAWKx3!ETy`eRN0({=I#dxCqk?_O{;h;} z9{Ugb3g=;?cTT@bql;o_^o`*vearr5wA_fjQ{9Xr`$>Ip@?kJp$YEGZs~KaghNN#4 z$(>O)f>sbi#o?%kfL(@4?RSvOu75yf_IoH{SHTo^4NOBvEi#80>^s9<{GR=ga1PC( zIXM6S%;5%{!;LtHn{f`e;2dtlIoytOxFco`KeC_H9DZg;4P%jy^fF=Dxj1l352WFz zbw8jl-w$q@Ok3^5Baqb#>yALm0cb}H>e&nHFkj2+uzG#{By_hX)$M{@%ztgz4_*d0 zLMp*xKXh=YD?SW`z0j$e7hrSWUg$&%-dW5AVsx3IOy)=$ENV&hN-6FJ3;K_lsPb~q zmgJ+I8^d~G5_X7O^-kkSQ;eSALz5+6F+OHuo zUq@bg6Rq4^XyM+55$ql0zIT!P{)XoKeVD^OKxzIEYS>3mk9utl`v-2#CvZAysteh_ z;1aC6l6?s`uz!cmdU4pSx1c`O&3ZlR1>LMy<2HxP`b`E=hrs2ASziEaLuQ>GTN&H- z0az7z=kiinG|}`3Y=3DI2cWTO*giP5p-B>$Phi;Km&#o*q|CGnY?PSFOb$s_UqBJ+ zxeE22hE|`xGvloOHy}{M6tSO?O@DyN_?^anM7jGJW}@WHW=GXJSKy2$8&=Qoz4_I)mQpA}Bj(!lAiuXf2EMY89=jg@ZGDq?ZiuI_T zXX-=pO^88iXbX0GHtB@qNkw_X`r(}2_H+AT8_D=#$jXt2;Jh9fk|Phod05{E=kM-^ z?P#00iq^_Zynoc3W1^5P8$TGcrQ-*KHXD90YD=T24ST(y)VzyP8OClJ#co)3;cm=l z>-ikaUqty~dJp+}4|#eI7h~-u*aJL;Wh3>nQCM~1ETg?DteQ7t4;( z%Sy5A4^&o&WwZ3M*;sZJm1SZXMt><3{bAYFrDlhj_ro=jExZu}8NiJ(aR+YEP)O(5 zkj-;&19M?2&xe_OIC9NMIF^rs3O*W6<^`~Uj|V?5gsprcoWqOZVqO9_^QmwTp8*f> zW8e^<34c%VS@1G1gSYq`_=L}cFZq1$lO9MZ+v)>s78R668!P*UVT&3+4M_QQ~uW7-e5 zVt;sJ9_BD3Pt0?e^KQe4dHyzu%KRn!ZT+ybOm5@IFSn!U=kI{@VL1}lK*{yZ&GUvu zxTpfs5L^cuZ--Rwfi%7z^7#hjA}u>&76@>WU{HTUn7>lZYxevhn?}s|S*b^7`QpQYm-V+3&(t*W2&Llmdo+*j*+= z6fHBMy1J*-+za;#{I3u0>xDgG=zby6&phfdW2OkDu9sm&S~8X+I^p%h-V^Zq0DtL> zK6tRX)Djhu+zPP~$*K6Op|8VIY*2hhGdAgmz8=U_TY4KLZL=WJ%-bwS9m*5jhp5-P z)b6+(W|zZ~puthqfMEl*bkwAYM$jAQ^I!yWuu*vEU|5xxVS=?36ApdYU4}czr2u7K=zpnU+^NuQrlpcQU#AiQr|qPA@W{x;#SmcG_flg>2#Y1(aINi&z4(lW92 z%`VcwCNHKYhq>7yo26@a6sCXaro6OFqlw9jcrKU2 zPoU~Jj4JyGRPv`_5q}1E;eT0J$)5u!e;)no7a++03Y+*#a0!1MF5_=1N}h;TdM1i# zG19;U%dwwHidLt9Fv>Q8!+?+;A*#XU2GvYt0Qh9wg=9ESQCvVeoXMvcuEtb8O{XdH zm>ESG_!3<5{vKY{4-f6&^N|zhk&GSagNN(!`v`iYkD?oJ5UwpFGJig{1HMkPmYVYv zlNt=3V^Xk*;8IIkW~o)FsZsWWswH`5*5*>P{ZKzVuB$ogF0kv|-4B22K{2p0hqW|m z7EROKrn?V7lIH0)7tT?+AML zrOA1YWLK%?&@ilV*ngx0$9l?DY9pz$9mV029X3aDGa{HvQ*h)I>S70&MQMsdbEGtv zraDq-@MdC)r-@g3l<)P-F0kO|*)mIx#SJCYrm zbTyY|A{COhCI7T7)9gqtbvVpBz>#f7^c)LzvVGl#*+Y@&*>*ikeP9W;u{#{wvxoM> z3$2%xI?#P~IL@Q&Uz`_UC&>;6&EMh3B;cu12R6Vmoh<5$t90qvh%_)Wlq2{a>ZQLS z2mc*%`TOX5et&>`{UJIsAHgyFW0ZzZpppL*R`XB6!#{(~{7ckLU&D6(4f61}a5eu9 zZs0${-TWtboF9e5=-&QWFnB`$p~zxoB8MF-a#^LwV>MzJJ6?=nE-{LoB1W^#Vt)+l5#!h`Vm!M;6ta881h!9L z03(XoQ(_W(PL!}0#ANoOn95!eGuWHr81|W%&3+VfIf!|Dh&Yz#iE>^bD)=N($)}1c zK3gp0i^WosXjY4Q`VAP$r=tWW!+U6sXCS1(G4L5bM#=Vac#)SXJ=lm^cqT$txEQYC zvk*#x$A8hZ&PK=v-$NlUqh1(;QG5>d!c1sd=OUECa>2^yA(YDgNxA}EyrHa;ne_gc z3qIh-Qh)3ecokhg?2m1Rzo?#*Sr6Q&de+!2a63AM)ZZQGMpmf)?u8xbB>FH|+y__i zD(pE8qx1`TH9~gw6r6>wqYtC~SI`k%gpdORr+->w28C=SUyM$G86Ch>E_e;DGM&#v z2lGPIQMstAbR9Jkzhjl9DB{EUQiR9_TVfopAr!U>wY<)78Xq)HeQQuM{z@@-ImXg2 z(%HtJF`6#k4=*tczO(WX`acG`9zt%Ozw78n`8v|g=&bGug^_!r;^ZPEH;83m63Zb; z9DfI?Vg)!v0}L09Fiot4x#9$vFPdPHSfkW-5l$o(ee-(04437AX^LPJ>(&@cFhLbx z&W}?|Sn(T{@VsmubO}#|mVijVvV^s`gl1fV6PM6}OK8OQ?SdM#Lp?Aw4{iK|E=-<86<@6Mi*k~N>+R52LeDslx}8K0uxl=AuIQ{o zsvep#c|Fukw2IPCLIkq6I0dqVABKqlj21yC5#4Z%*a)-4CM3_PP%gG2iOzsJaepQ> zi*uk&oC_V|eDH}2z%MR@v&AKFskjVo6<3B2tFq9f6I*i_hU#pra)n02+4T2HYPWY9 z=d=ig*?J{E!QhEK22U);rM@w*7v4Mqxd&iWll`rI@b+GK6HDyxprz@9cM+^7_xZg( z_}j1>FmmsMzoX@wM=|WBSpGg4oPWrg)k%lA8d>5RNEX-Px^X+ibudm`kL$hx+2Teh z6E}z10q0=cIUp2vFe>>f<=>Bk(duMW;Ov|DYGd~ODB#2nOM2mhBQR1;{6jVI53u9_ zeAFcIzkTp=AN&Ig>WXoipWyWI^UwK|`83}}0X@b@`M70GrBUa@qbXhxw|}9D-U)Vb zJB$%`z<6;dOcr;+3~@Is5ch=l0B2y_Kp|&2y#QjLqUgV{{QMAkEC#$;?feC6>e!@JqG-|EB%tHxFch|0H67eK^^EWPtt1 z01rW-co>SsBS^p}VYWaGB%X>|#4_Um9-;6emKY3BY><-{(ZXAeMVxDpZafbERUdp^ zSFGL*q`hNsX5qRmnvQL=W81dPj&0k??2c{QHaoU$bZk4Fbkrwnt-bHv>zq2PZq==t z->mw6zO$aUp7CIeae!Xw0rodL7a%PY+|G+f^gbe_v$# z@%dMjptrMg=^c(dHj2K9hyf!6L1U7+WJ38`vksRnMQ!=o0f{8N+U_{>{xq-c)FLcK zE~ypdF ztyZ+%6AX4xM~Q4pV$2t+`Lv@cvlfYo8f z*RR#BbJ@Yc5L(;e<0@$KWYG;$IE6eMEpFuAnBZNk*6ngS4px%V)kL@+oC~A$>zrW9 zFhRz1!?DflkUo$OVOZVU3ydOGWYG^XqDM2M2r^68iX~Y5oveL_j|pHfon!`vFkC~v z?|hX!dK@4}uVhk=g^f&qNyG6{A0nuysf-#FF8Lu{5=e0w$G}P~%k$L$F_@VJu4L4f zDwSJ_-o+>$A97@Dw@xMIyLow!i>0VY(EzAFEK)_~HH%vp9WfEPNyAvJ5^vmmgKr&HWi;~-rfB7bgh-->)nKv~72>&x zM#R92CTh8b`MJs1qqx_*9BoEYpUP-l)sQiK#wzk#aqx^kQz9YvN4VMSD%WfiYX4w zwFoG}t^1lXEi-{%BX^4@^@C?ciCW<;8iZgRTCk#ra;EuOqauyF*xXQBmJD?9aE5Jk zlE2HpQ)t21d@5&8;GV?E_A;jSV`{-2Pw@OyS{@*GhR~(PGYqv2(!2BgDOnSw-v&#V zWV6HURj?k!kksi6ZydH8HZ^=N|HejkgV|J7de2%{1!f2Ire847{W4pHy@QCkXT??S%0*y1EET`2nPyAUxpc$KeXbQ~fTd z2wFesS@P>?MiHWL(nfMdgg6miII68gCezuTN~9=(pZEQlT1*jnPI>fQ=-HEG4aB*2(y3zj00N8ofy)*)}=3R zkI-C$o|RAto7M#5AZF1%!yXnM$!iO7!)8-wfB*;3qL4Zxz!6iE9+H<8b8Qklp3X=k zkw1jX)8n+4njtr6;G}6!N$@3dmfRn8tk!tJRWBmBlrhso@^H_W&Gy+Wit#XAgT+BYN|NqiyZ+Yi7jP(}44GXu`Y#tDhk^e}}B; zdbbysRs+wjwr>9JpI^m3CXjpoxx>XKsSU76qd9PMZ0ICZNahsFdFs>H$H5gb z8e7FqfPdkAy+MffXKgD;mEZny@3R&~8kf=s#GG0b%YXjSGaN2}=V*+b($)^T5XjsD z(Y9vQ#F1!FWsIqq#mNu#cWqv86lwZocQ2aa1ek|oM*E9t z>OF8O(5^cqv}fU@=bC;_f|U~ag77WU&~rm{GIfLHl-zPDzoI(UyDl`_lTuvCJE47d zEZ_#CamhSXH&=F=3-LRcvP4CaZ9>RgU)ZG+ z6zK8NfiowbcHwWdhy-w6Z@AR|rSMV)TT}YQ^ksd!UEvfXv1xqBkbXR7wh=o;+`Z!`rZt>E_E+@GO-%ci?bR^xt}1;LAf4pH*;aZ_dwU{?-ht4)!IM2fz<@8zICi%P1ww;9fQiq%iGIDsDAeSFQ|A5dade904~4(WOsN^d`%gH!*2g|lgrWdU z?==#A_I8A)YyA4`ga&o-MiK3yx(s#gnMtKb5F4@@p`lI2?|QVS{&yowMeO#}n&DGS zH=>O?tQbN=O7=0oiv#}_cShT&v8B4=s+9br0i~$qbWNO?#j4L9#91I`WnboHrd(`Y z3dI~;CSC?vv0s&&mGK7r5o%Zzv?a%e6n#VitEP^i&NoFNUeJ>!k^|yVv03kc6DRTX z;G7T5lhfGXrmEr-rUL~&cu{5QU(_0k#Hp(pCIX=D%W54-?8)hw<8tz54c(TEu8JFQ z>qT9Twusid5ZpjXmr{<&)&$Sh$R#&HcOcOkYyZhLSf!AcJBbilZ;{&FFD`Uo9%1NO&}e)+b#s zA`VAM=8#mlsk8|jG}&=xm~W)U9Q_2d;I@C!x$ny%}edZXi_Z9 zI&wx+AE;7=Nhym;i>3?v?RhG&&BRfmuV5!t7_{Pe+r(J(*k0PM_ThE!sucAcIXHVn zL&b0bt${L4he7bF?1GkQzub7=kpIXp9KQO~vZV3>BQ?^UsFxk?!KQfb4>Wb#zl04} zQauyz9%m7&u+&mu=eDN#J= z^ig1J*Xc!c7E29+(QL((IprArRK?gE%X#4Pq zfA7`c_rJ|CFhhf?>%pi^B4?1)i?FjX=C zfwD(LwOg3@=;5%D!oCFl5}7~5J19yBpea9yu}t(n&Sq2sdXaZg&Rmjm?BTskPt9CR z-9ew2!=b2lxMe(}S-8x!(}oChcF=P6SaYOTt}Ug!oYxdpmBQ0UK;T8PnxJ5;`aOIo zKoN{Ir%%71A*wQhM$c~siJ1hUhc_%rCZs(`H|H8=vyh}xCpWTMD6KHAOUst?h~wTj z*jA#e&cIomnCFhs|EXxY`sv61Z;Ga$cC`N|eOJ=i z!Oihs;ZMf=uh{=@%U-a5xb?cbLo!G}*6h5^7aXXyPG+e|Kz?~Dc$){!9UOm~NA3Fb z>lKrLoZcDlOo&=cm^A&QrAt5#y%o5=S0yd(T_n7LzT?-)_>t++ghau^M*;ABIbL4n z;?vyWLqp|5LN3DQU(}C_&tECciYZc=SVqy9!i2wA!lQwKGl3C<#f|j$!XCMRGGi&_ z#Q#7T-TTLpprAEq0yeWh@ALBK@86F2Z#VvvzWiTKxBstbEAS6<-2ZuIVYg3%T_aOd zD|-uhBUcm4e|>^vRh!s(A#{E)DcN$kNZPX(&2P$Hmzc|~krXnEX*(}p8po{Pn0o1S zf>N5q_j~3CgT>Gc!igRvajughAmuoUPB%s-`AeTRre_R@1in!1wuFGQFw^Y>0J;p; znuFvBS_kL{>|*iC%5g1abH6hp+%Q6-WMMhbb^9N1 zgM5!SgDG7W% zeIR&qepeU6R&yq0EIp#!raRyU!Rfj&NF(Zvd%b1o@r?`qqAf;ebCT;(dU)N zA;hc0iHe1AJ-7!DC9~gN3z&QRng^7lMh==fpM05T-Akq`jt#qt$}3tVHvaSG6C^P^ zDnAs+g+ItcFN&XI{WQ?ImqS1n^5v?y4cgKff}_jN>%d%;hzc108?{F{qu&t z|L-^S-@^AZqx~P@`yZlL)zSGghW|@}_*gMlGV-XwCZpg0zRfU zGBeG<3=)oBe^0it9`pBbv;KKmw#Wsu90owiN@=BYVDg6caxm_);#fuezaCT(9fOt) z-rwB@P<2sl$QC?^?&@RSkjwuMy-Zy_=bRjf< z`h$k5Hwi8U;9|r<@8+0wNY{hpTBL4Y^DW%7NmHt%fMCowe+gnh+to-$r-Tv6l%|{y zp0;I3zjEt~DqaZJ)uG9miFB5gq*%e@Urrnq)EG4_EPo!8t4H3~8+CHElzGqDAym7;I4 zYf2-moIy>;GK`2(jDUVq?ZRbe!giKDa}xUZu&Oj=)ZpO2b5F0% z<#%g59btp|nJZp!OdAbWQ10LPVhpJ#^~vJh zm!7?YkhW~~m^N}%Xbt+K@6R#eW}0J*k}>Zgx(xm*)7@15*2XX?8P5bY8I~B?U8@$x z&5o6Ii?LtO0?v+2 z!`zFpeVR?oRU?uBa&I`m?S3tV{T?kEFt9Ce+Ur7;{k4qj@Li;VqI+0S?hTDw@WX76 zE2pk2wcpU>7TSpXu4=63Hafguv{~-iedmxVWx6hpd2$j54VNKE_SH*=B3Z^2u8e*B zO{^o>hr>E2WzA%jbb4>Ill<s?DO*?};)^6X@ z(4%~K^T-%zkS8S3bvJv+8MUrsV}%Rta~3Y(&-qljU~8;%az!KDOsxi6i{R-_(0TA7 znD6-tT(}h3Tj{)H^2^0mdsiiFm5sQ0yUKdv)rBrf+tl`#RJ){p_#6xM3=<`r721uIPigEx7< zRc(AAy4+T`5|VD6;gdZpF)SKSYzF0%q084?RYR$*5i6E-FG-B4c^O1vBI6i-=(wnW z$GUe+x%;Hh!sEMnw6hOZbE4kK6p($yL!0*+f(_%cbM-$}Wt(e|#x(PMl&=mkl42jv152wJ>(Z;*kvIypQSEY)R|Z_K&>*cQLl% z{Jq*z@PbEor~b^yTLPc1R@sEJfa*ATQ_=z?w<>8bSCGUDr-4m6K_^0_sE*$@U}9Jk zBl zxsqXK7d&PVuPB-KURrdMx7NVjd~Cea}uGm+eEF87Q}Jd>JGIA$q|V>hfLR&!n(cY!2^n%?aBJqdJtPY)zOJHPkAgy!v^W^z26Hn!ymPDKX3S zG)sOP7O#hGn-+!spXt`+;MwF*0F-l%?ONemMVYIV%s zafY~%NL%okCeI4(IC}7@M}#e}G7=sju}9Bmrawv=!n)dh8Su>#n+>sdBGC8M=y#8v z9tY0#W_D=pjdO}9=~(Ue9F_t0N&eWbPua_1Obns=vN^WnmV1 zBRE%d@13TWoD%f&5&EUK|H!B*2^LKQ2oUTqXdPH<2Wq!^*&Zp5D(`tFc_y;Zqyje! zf)f#(ZA!U+y<5lFci<^dUxzrPvMt5ipEL?19T2cWT|)Awns@f;V6FC!{yf}>)FWmQ zj*EFtqx(@2DR$f;cI*R?cOUWmuKs@fQzY4RqQKhNCd_a>qfI|6GR3$}}`mk+X`j^ndws~!e-xo|?PgHXh zFVJIzj?9rT8*v^; zmJBj%C`9%JqTV#IivsHj#eGpIj40FwGy-{l=@pY(}Y$ zD=^Zq(h%uI!4uFp7|G}2DHsfty85GOahoFD6yEzR9h6~sj)m|Ju)F8aA(K}K#{Bk} z4T_`mBK8;!2BUT&-P99^&>kICKSf9V2|P4*YQEw+wZ{0kZ5;Q#d9ti=W&q6#18uVV z9o03S(=zK;6JRs$NCAaf=j%&t#I)HK!m&`qC{@k6(o=brT|E4331h#t=vWn#w8B5+ z0Q1GbihNJ!QJJLQNC%P^8+#apY`@JL2JAXeHLluy&70_Pwi9tCTHP#IO$xgr3=Y3M zUP>QJR(0|Z!u`5z%D#TcD+m50(Y7-FI{VQ=k!Tob@zC(ul`j{j{Y6A1*I=sP5Yn}d zJG0K>9-Q%fC~VfJ+MEp~p~z!rwnDbwmNm3sSIW}$9Q5cMRF&N5;Al(7jWCmZ{!#C$ zP;h3G65sc>>^ZOSu*N9`p6TQ5z4&E+f6w`AVsq#vTda$9w~B~BN)&KRFS$MQGU0s? z<`K|o^m))dWxOmYRM4)(tM*^}5Ra1!gj znI>BrYr2AM;&;o!^cD~tO%{{XuuvR*@qpz(mZ2Wp$Ti|-GBpdncZJHYta-6Eu!k~1 zNVxljIcwlFDFYfo=Z}itVoJ1vL~w{iRsOjK?P9aJ8P#ek&IF=X>S}_)l3BjPCdM`a z=WGNAm_a`nWPzr6p4O-{9mZNJLKdlRWSqMzcAaDO4+Y<$UPM6GWCt}~FPs+M7PUd_ zVcD=c1`2^Ms2P%QxYdo%I8U~OXh;|gtsemQJAS`ag^l;z!0EX|h zkK{H{m6CsBIZ;mgGfx}j{LtbQFpWOCgopCdBF0B3uh;E1nzhEB&kF8l8OR>~=g0;+ry1Pe0lFUgeAsag8OSsHLB%Jg{^=&1;|Z_pNi zjLJ8UyCk%{_HR~EhnJ>0wb_a8T5bhFXd#K^hHb%UM-S&qJIR$3&WqD_43ErX{M{54 zT9V_ln4ubNl}4 zs`3e>w&~68>^qRHvw$f!iAPTM<3)S7&h&DE(T@-Q&04o1U-)wab`Y4$hJ7&N3;R`$ zXL`R4(gGkFbj)u+bE<~*KzZF&cmLMrPQSeTtb=A}6#2vQ9sZ$=BQPSNp1VLu7@R5y z8K>fngP#;D_dIhMSlJNoGo(BkmHEmD6_$uc^SWkBj?0+U z&QDHHn^Uxdg~4+-bOCcjBKL&CW^DN7x#E^UgglH%7QR?X6G*Zv1*Q`Aqnd$xORzXC zoD;L?x$=hfQD?-tvBLB)|McT74%YBh0MZ9c%rPAeDO%Z%!;>fvO z2yFMd#+&3?DBpt~$zf$jlZ;Mt)HOy&J!`@D8&4KeEY7RY6`5zrD~pvw&{}zEVY&iX zNV9r;LY&LxV4lT#y!JjZgs3K27`Px^I{h7WX^Lhg-nd|*3E@! z0CLC+WQ<`X6P&UCf?#-#_7s3_K`15`)LaijlrJg4qm3t|5t zB2JkjE}0|hKtTDI!g_swz59aUEZADqbz+hpqwQ}abyHjy+tK&5PxS(*-voLh>Zsiy z@I_X`lGS#a>0)m=8a->CiG1l5hM|@tqlQSC`Qdy4u0&GbJC?U`8Bm~TZ15!s758Te zd`#Vh!HH%K2Utl?7?-1Ky7#K^4k#9OU+|pF&pip@_B{TXC5BXH+aDyho4J8goT?W)6` z6+bJZEXV3;c0EJ?La)O82)l$`2Jw%r)YJS^f7W|uci2VaHB@R3XhO_ROYwto1)qiW zW*}GjF<0a3EuC&fWcUknD&ZNjnY53ck1gUXkBB!2o!OvzEJLaZC%h~V1(-8oCU`;Z z+ZiZ1(GEO<>1r?!EXo-lK`drsfH8OXYb-W?P1}hd4d5Fwp3|tp*<;_ZfSXt=uu97> z)Z~I79WQh|pu$WB?qA>GJ*pO&7ZS`LNL+b_i@mZK(^8+cZdq_oN4Qe`1JoaAJSJA^ ze)vcDzu=^v&Y+YU^p>o|7jU+z0b`y$Q^hZ|3`++4*zb_F3mu-3{u5k1p-3lwZ@~he zMrhkTC!)cRY&|IO5`QXTGjTt*%V&MVbcR4&AoVTM2Zo%0L>lvescf|d(lB%ht!{YY z&H+-%+FZa=x5C*1Bc?nG=0@+G4^kbodCxAH*}t#LQ`o=a$}M)UU2Qn%mUpF6qVw1r z;!pM7)}z%j$~#8!q9>}la!A{*%vj-R!W%Ty=EzvT74s$ik~+cbCmC~PKKI%09%Z^n z@P6unxwRkYN$GOaK=+eFw==k0w|^tSYhF;`cx|=<#?tOL{@~%g^7df;?NiKFtPA_l zGB2yw6nN{HW?!s?g)BpC{4u_7xxsN&ho;pKE>Op@4 z=hdcAz>LcF<60FJpz$k*qyeTb)6kp^A(1*yz4LY;4FfR)cTHq=5C{Q2GZ?fVbP0Z&9hwcE}JEcBp+ zqkI(BLJMcu3LhlP&}NQHshVouo?qp8zN?eCl2dYkg6vbQY4l`VL?Z0?2I=n-(D+f) z2U`#AM!HRv*)1FM&~?Nj*K@;Zd@EU-{Ugg7JDp{Gg45*t6MS$Lb#Kj?qbO7TIl9d! zYYl}N8mcRH7AUmz_mY6;0Gd0Cu2rwEk99^kuk-DoX0eM&%#F(+*Em+BoHcplF_PL7 z@XdAr^Hfuf8FVSlI3j9Ndi@m}T{N-^`pCzvoV_L`1Z+T?(Lh9v>TFY-A2`+p3yXw( zV?cC0gyKwU?h+X6+opNM1{JBpj|bV=@%DzX#vg<%W5 zfPsS8Qj$@08m91zv8_aM@$pqRMMQJGSN|w5BCa85O1ONV^@1`)lKVRa!UV;QYd}bN zqOIjbCy8-@gT+o~1{|9}+KPMA#+$2<$VoAHw1fW0lEMtbcTbIs<)QCP?jpVf+qpPz zF9Qr#Mxu#M+@Upo90BbVwTL^Ll!V6Q0SNk#E*3EW&%S0zI&4^dykiJ4C#Z_9&glUH zA`v3tet4b5lCNs@a17&95z7ZVTSt>)8Yorua9wWE- zOjCv{uG!ObSCzg*7kc-h`e1~SqgJBHz1*T`hcuh2w3cyw(tYgp(ij`5f$SU1XcW!x zz>Tfx*(XK}@9+<-=;r&`-ML@4R}TOK^S<6#(?V_k`;jF_`L>y(Q<9H;lXD#SZxgBB zUf~~H+TiVunZ4$=Xsh7_pf+_1JA@mwv(t@;Ral-Vf|x&pE%554chF1JvNY902Ri{xaah#)Nb+mrF7Ou1JieL}AGlCPsKVkwF7p9OscFx+Q$(sqh zX2*iYpTQA>x2z^5NmoX;@8$9p@kH7h)lSwo8H0_nrd&mN9YIfcBmpk645Og^G7%wx z@b_x}(oW0WFoeRqsF@)0;teo<2}?MIbK0Umuy;nE-Bp-3{A##nbbgSd#m=^Uui-Sc zFX88v%a1oZU-$-V@QdBnqtzmsn3R<0tFcQW$e(ahUXi5bp2bD(LeAXZ$k1KK zd6PGkH`FoS9fmKP`~{~3L_B=SD);G+cVcJ0A{)3Mc0aQPbd-|q5uo-Vg@vM^#^$N< zMbO-0x6FRXyfU=cs~ZE~cr!eQQ?TaV7;If!`KeZVOFZA`7IDx=l3kR%P@FM|GeQ{) zgCNp-RaRyDCIW<~(DB3esW2&#QDO@v_b78PU3ZN|(Tl zh_Q@LOTwNQZDD+x@f?$hRQrvKLyt2pRQB7g^{t;8F0}x<5^fW0GK~2bbmKbu z65=R)`E-YI;aEFZlw)UD{Ljq{{`6M^?)~aN-+7+xoDs%nwA6B3cLO@9OZZ|Sb;PT5#3f`8zgEi+KcriQ*&MoGc^p~a%W7{+twE{1roZhwa7P~c*aVQ- zuj-(cXV~f8iFx4M=GGgVUbb*M}S&W1oR)Hvdw)0K5r8c*9oLLMWoa zJULCI-*LAB1$&sjVZYzhC^K)2G9Z*B-Mj^-0>bvpD;k8$Tr&w}N5+~&Q>j#EMiAHe zzJ>F+U1WE`-!>S&!}bS06QJDNLErkQMGD420fX{;ii9NMdXbOZFNDEVUIhuGsV142Bseg_m-cN{dyKdzX&2iUv8c!HxVqx^}uUtAF5GqnJi)`}alvm;gcTrpzD<^zO5L8)WG za)UQG+MyolYk*I_YHjJ)#mV6sQ}Z|T(jQ$Kpd6`iN)W%AWL$k$VBMe*0_%-;^}k&dAx2a)ez`h1b)Erzo?m z1p;5F*Kj+vBX69n#we*g@fSgs_lTQRL~y0MQ`^5q9b`9M5wFQ=(UAU8@45Tu9N8V} zb#VzA1cVa(KjEl<43!<6E&kfG&|U{Vi@RHm#G~5mC_GIfsZc zt&{$Si{a)9)aFk(8Wu#Sr=%gO;NgDm?bWf|mfJ4YGkKycoomW&7ce5yL&GgPoBiAz z83PQAsM1Lv`01M8eYx-Ht0H2Vz`zpj(hjkK|I^;fW}cPiW~>lEn}SauYaNjiue9kw z=S_kelQS9QbEL>imPDayt-C}fg#trf*x49coK*OROpvPNPL`p8T2T_mp)PAt5FW%L zw-HK42Pd{*MV_pj2xzx|lb4J=anJ=TZJG>AP&O&zV=X8FqeoqSAXmM;sW&3`<4eSc zqbw**Sd;Vgph+hq!?U83ocSW^mD4rDhPSEmREh@cIy`1y!^vSR#5pvw)R=m%WJ_7!+7r0TGbKz2*YZ?YTG0d|Zq_&b=vnoF zIV_4)aoL!?0H7tJ3{4fH=L+ddcy4uIWUCA%nhK?1b~|DP;NoyB*1yY{VX(msh^IVd z3@OBuRbf&Mi5oq+N#V9#sD_AeG-m9zg^k_8=f@$Dz zD^v`mqa+Y0FFr%3_b|?k`v(_xiQaOAE_Y zhdYER1rk7DLVKKh=+6cv_<<9e0ahTY5B3e36q|$E#Xy8X=$Sw5M2g z=YoT@kAlZeE(ab`A7awN! zB{qQvlIMaiSw4oZKVpE{=g-OQj790%sDg|BPqR0)zs`HxEFXbite1SU5>c18^(dt* z+e?XsQl|^t$cgJbFJ0=rCg<{wO}`d;P~_I?i=~aT;qKSKHMJ@sad}}9%vY}PZB33y z0zKMb%iH&Ax-y9-eVchi2eB{3+?-EhUS~hA*>sse?n`;M(IHYJUlk-^x{XI&5*HkT zUZ)E#nQ9{cvX-At&7*BF)Nc&xVeQlM3H=7W{|y?_)f>R4en_s_^Y|xnFpivjXx>09 zuV5#PM4UrCB6w*8EZveKvxIShy~MEAR7T2b(8zJ*@+X04=c zOc#D~`A#@t| zi#xI*(?51|ziy@v<4#dDh%d$}DU|QG)hI%=i{{-820^cV!4wsg7=4gtIBY%S5>SB1 zZu}W!-fUrCwZ-^3B9VE-S>3~!t|-$Pz#vIZ7L0zU<#~+=*PZgZ_lRvffn2=Ai00Cd!p+lVGg6zR(uxlqU5 z-cGB~b2Znjx@m?Hm9Gj)yFxK*Ach(QYuOkz!{N%FuwK4xoi;3zrsYgJVCj(<@k+5n zl}_TfXP0zaa82u=sIugwTUuj$2%d7Ae@T$E{oTV7vpbWRF`LVLCwHhK>km&-{GTqz z2tUX0_cC-a^ou}Ea!3^9Si?%}@q4#c2)ow9b78oH35wAx-?)Y^DjZ6GJY~x&ysA6( zz_-pIZlZWRqjm@=JQa~U0jj>pe0liezOxoXH=R1j9zOR&$SP+)13LG^A>(g4WbUNk z3gnI>FuDP~R_GmMLs!xfdS|jG7W+uZXb1Yy*T}wI);KTvp|@RY_>=!pLmj-c4zUNbPI<4gA4vFHqG@fW#Hfz-De<`y-4}V63`yw7PVx*upiF zSTxjZ!D8)Um$_?}|6#=sTbTgQPf%<5vfWgE^t^BnF35L5^Vp*{w+Q|QdunR%aARqY zyWx$`^cHkuPrM45@ldO_zG_8t+2*0oVZlT6=mIaqSQ}|!To=*VL(hoGV9bU$wD^T; zuf#ExP-^dJ?0WPIfZtw1P7OJBD{^>FuN-|raI3Iw$eAcOFUVjP%{^63foo9yo% zbM2hO2BL$dJvnEdSX8%$dq7HjYtw_q`4r2)Wx_sorlv;7z)2RXQ(BqIMJuM`>PYL{ zgJ+1k3Uj*bd)>(em7sKjKlLX%)<8zhv56182wsf8oeY3TM*IPoJ%RYDXkfzC%J zKE(Vek_t@(vXR)?&TOorb2>#n{$T4xQcdJWphQKPgRnkWVOuxzTgk@JHbYC?4$_d z#P+!*=9!zXY(|V%Z@PBx3odEw!V7ryWfKLoT#7~m@Fw_=1yD3Ya5QBpOSf-n6ezn#NNdYRDvPh&-GR zE0S(Aa;?}=NUKREAE4LhbB4m^L35+;_{~feIFvOu%Vvx*sdqRwP|~%+l|`vwTa?Cr z_X__Dbw)rH#fq5@j}B8eknW<|?9T4MS;NS;$#fz42NISPQyM4!2-zn6eJQpyemXgShq*;k#n-os}4<4{~YBYF!q z@E=;@V_in7m^2=C?q>LOT1zLyZIKoin6zos3)wvk7betdSCp|t1}W6rT1-X6CD(9J z>C+TmscjWKNZgfd*@Hai*b(d_@?jcZ%~%OOM>d5o4Log zthX?ew@8n+Ry@Owe7j}GpycX~ad7lS%jCWq0Sn+6yZuUNECmdra(4$iur@`M0V503 z%*MqYYHnQJf!7t!gdK8@9U9Oml<1tV6y_a($J4Yh&$7SC-F299s29c6wscA8$)M$lC{BePGp9&r?1 zIk$WqQ!bt~IfftuO7FonyjESPKszqMLe~IsS-pJ5ewJoIU;@CMfl8=E2!AU!Rdy-h zJ2;67N@!|Xix&N2W!hM>?`nTVEVR`PqN~?SLld*n5pj+ed>$;sL5?pMHUukU7>Q;- zNgoLkP_!gmBwTTk?ldX??azDTEob<1CZ>vZG#+63QaeA85dibUOr(1Vh!g(4w4Xh) z(RE6c!x&c9=G3Cnp8zA0I#?%`4tdx8t7VwJAAM;+Lej9g2wLOR?7&+HD+`@R1c)`7 z*b1U$&6Jx29Geq4U-h-qD2hpiHsG@37?BIrSm4-V%LjE&G9yE_hE;n{l1t^x+Qb#Z zXM3*3^8y7_m*+WUzx%@gbm0*&UyGCFgx`Wr9SD{eTr$djA(Qdvaj*Gd(ydKR6UV8U zBl~K!pTr-*=JmwHeL%Xtw}zcL6r?^^=MdM7NSyv$Ln7U<@O?5dt%N4(e#Njm&YL{{ zOMmy5Ry}7$Uz)S2zM~!>I}b?zg%((lp8dNIm^Ns73aMkRQWB z5y;C5^u{FaJM$-u2l;J~-pi}>C}>#!L0Prp$LRpzyi<8jQAi zQOG1gzVGOP*^&d(J3=g;m>JMsC>ANSu_o!1^NOO86*y+Nd~`LtQW7ZIGl6J^2Q2xX zC-B1%lnR~VUvvQ>69cXav&G_F9JY7dxdqMKga-(*{fOgcFUa~R+;6|8O>TvBD_Ra% z&e+&;Q_1)X!i%aDf&{WYZsM(y7-uSlDVjznre|pVQFI0`8y=Qn73{q2q{pcg?Cde> zi(Xqx=VYu`bcII!n9F!Ua++jps4aWZaoPnt_px6^VkEjnqpEfER=V~*@vD2 z>A!f|k3A-BA4pYmf5VeL7Xh~N36POtZ6U;a9Z{1xhqbBchv z0YBxNQs)~X^$h3S;nW?e>_n-(rP4p1@=P6Z3~yx$=4=%Ag|XR{)q*nUYxl%E-@kN5 zSI7_7pbi7YS?PuK z;>qcLlVm&p9jmjQk=JZpPNiV>dr`|6C_0U42VEXgB=a7I;=G7{rT zpCjUBeGE<&Y88&I>>|8|;J&=2dj5iH*bL3!GM_4azIxCuzmgZD#w~)>4PITeh3U%% z+({`w)NAjx8Hh)Q84Rs~WDMqnd%C5VSD$iakax^DPtf!t-Y!_N^Y&F#t0}hJIo>m-fDk7|!Ei9rPRDbmrEc1=3nWj=FgoY)@wCVEQ?}2M zKbP+lp%B6ff}Ejpf3I0MXhfF2QRASwRsuD-vO+&=fkn}_UU4!C~nddpLnzmnd4mwzkDa4SUAQ8(U2S+AAyF2RUfKnLhVaeeZm zcUPzIVC7Z{YMMP)jrZ)eEzRHjuCOQB85!)*W3Q$CXnm9EKD<7?($y5Rqdv3GEfEDqNM zlXRSpZQHhOTOHeGbyRW1wr#Uxvt!#G8=Y+5nc3O7&+govbIwzB{(!IQd4Jz4y)t>V z-nv#`z1dP|Or^!b#XF1o2>>2y2-603SybAh*G6ddl z0cJ@XBHo82a%Jvsl~7^?r-{Fl^GZ&6kKpd0s@Q(k(>b9`9$B@#=nvIwf@P)%`3Mq)gFga03+JI)yLru)xe0{VX$OaTAJ^?zRU|K9%RX7GQ5FaMK7@WKsW8}qBC zS=(;%!pe;M<&uPYW+IM4kr0m`dPNDHvo&e4MqI2wS03NWOqZ=nGeUl$xJG~dH_Y5k z#DW+N3Tq5NI9VvUG$-h;WQyej*?$iqd5@gsyExB@ZBHVhdROk6oAJr*e^9HnAK_nt zH~3&(HQ_wIScXMiwG)MEEA4%UUw}Lt$=mmkvk@d zCi`sTY`n9F_*1T;gAfRUGly9Uxj)FUIR$W~&=~-h-9vB8?9b|WxyLzH-Y00YSh^By z0+W*`6L7KxmfH>L?6^>zW+zkkmd491Ndab_BZMl>+Cx+345KXz z6;tIotYt}BVnMEQqOXTy6M}Xfo(7_0f_7G9T^Q~$B{>QnUN@ z4Gr8V2+|gsIkSr7qZo=cg!S!)gyD#6bh&9I%4!7ZS(I&ATwTmpJ6sfmE zT#S;eoam95cB9-*4);nH3|_wjvj;HFqlN*d1cr>cGo=QT1;uFAOWl3*2qlDmBTDmp zU7O(d7MJO=;AP^99$`eC;o<20lXWA_QEaEG578`|}4Gbmct2LGF zf10*X9_7UH$r;C2@SUsrQRU8KQ)>AJ)Xv-z9hK$h3!F0g3LW?0TIi?{TX2b@B(k_u z_g5U%&ghQJqqQc7>Y<1CMS%B}$2fiA4J_CLf(UA9%Jl+-F&4dIG5d*fgaB5seTWl|nsp&W)9PSL0iH7S!!*ooTMGRCe9{b=m* zx!=?oBnl7ZeX_UlR#-c}AZ7XAB{>7bt)Mol_*4)bs%`iZ%bK@fbtO3XQVGPvT*>!L zcl2nBW_W}NP$7tQ!HH#4%>llYuq~9Qhx&uF2BKQN#sWF+J*fd@B9EDj=f&m=RLURv zyl0t?Tt%L9>f0j1WWf)rvS?cq+_>;>eE<)G>CehkAv$}#>ykBb3e5b5{)k?f;fQUC zz894KB<_MP3(}=l*Dgbew-Lo&UTNdrG zTPBGIEHQ9~cRBH?>dzht-LSf92yu$3iQZ5X<+bjz>J9Z$C}%R;LshK5gcEgzY;UL& z_pr>O)XM|>{k~Mjy5eCITX0KDY z8;n4)GEzLNzcJri7(^k{^cOG6xnlAa;UyY?}fZ;S{J|FHmMR{joxEc&G6)v?AphuD!1;U=w zkg+xSmstj2TLJ#+Oz*c(+2c^9&|0LP_r>!bcZt;HpS=7v($r`;P;65n?vu9mwo?=d zmxs_h(ytmI&*k)$5)6s=SzuQ@!z>ZlIQUZ}v>NR~6^!2ja*6%S=O2 zT;$IL;4_SrCM=L473vZUaG{E)@dO*Of<#$KS#hE4gaDSfA~fCX;``Ads51+GlT9fh zr14Z8alne_V)Td2&b@R%o};%Aq0wmB=cE6fz*;NT`w8WfFjj+88Q_y7m*fvN+qoX4%bk^%0-Vg;339wGFGqfarIQSZ_!%zDKL z?=@rQbQQXRE-u5rv};b2PebO;Wbqyy7eeC#2dY}x1dc}oRqntN+8Pd?%WE%uiTRa# zLkM|8t*MdC;4(8q@cdz7W0YupCO;J#%P39JpU1n1i)m)|5$FVWIFQtSzT{o;LVm)i z$OB+t-{niKn*QNhK9v6o*E0PdU;_mkM>|=^|3`Rbr;e_T6Ue2F1_BR(CskvP<*b$o z)v|*t$LW^%rYEkdR?P&+3S-dqJi7u0_slf^8esO|TiBC-@8@66Xx+&^BR&;ARrr$F zc+NIx$kCcmcrk?dl86PaTba|F!6R43KcSV_@^1np17MWVIgbZ z1QAg2at>F}f4HRpwh_sQscLO{ed5&FN%uQvD4if#@kf|yIfDUWI94}-IBxB@1DyVI zKz$QEr|^OwLa>|>g^+oTrTl2c)uBHNvMgd}_}t_tDibT)I};|(Kv`5=(!YviPvvMp zMQgQ=88e|*H22UaY4B)buO17GHnp{hg{oVNTj~@kQ%|#Vi49Q{n+Xew4wa1pb!!U- zYGNE#6;Z53t9*c+6{G;iNOD{9E7xU%dW!mL8(Ytj-PSXy8QmvS+lq2tixoXt+=)(2 z7jVcg_d+JQz8<**l&dkFN&3`^3`fla=R08!`ve&`ZZTU~?kG*D3Wo{xcz3wK z0#UIp9cs+cC42a^8bebE;97trJZ<0m?ayY&oyPBxM+gz1+Eiu4*tzoT}`+t3wR?({@%(%co zlFwSp*O-mg#u>YaJuoD;ZqVQF?=M#1kPSoS#O^@KWZdrzZqP~n19B+Day*?iBQhrV@eszVPfx_@h+W_ylFCD5HTo%9f3B_VhonaxisjSE%ju~nc}XHXe}#yQ z$^)d)p5hgA>bdwRuIU_yQArt8@}B0Kpk7dp5EV3%+c;{7wwIcpZj3@gx%<9?ANXS^ zF5e?Np_p&MU0!J^UU>zYl=lL@=Mg*#ONoGlrEYpvC>OktKfv(A<8mZnCVy~ei7@kr zlkY2)_k*boC>Z=KxRnD7w;KthHY)}{A_v@&L-zcOF(dE}GFpED35bt{TXUOnCDrtNG>{9zopVZ3abUCX!m?f?z%<1BlvI=+jgZAVit|x0~?RO zGC$+^13PONT&oX`D;(9ci4yq?x|w4eb&f(P)b1w;;im@t5(9V2J;1-uk-QJ1AVzb| zc7h_tw7Qhc_`V`b1-kIl??)p6APSJvZGC#!1)P9I#-t}3;*eM~MHsn)9=X!1@qW2i zVZXs2Pbf>j2dOR}SuVTXEmx1yI`fH?C##Z6-S58!Ae`S;9I_%N zYYhU+5$NCUf_>vEmmn&<=#_yTCEArWHSiRBaYG6zRO;sV7ZOXOimDfG&5&K-K`{U8 zzxl>c0WztPP+(xU{}i_>0Qql_7+|pfZZH|!{}eay|6?5cZ*p6e{~na_e=jrsW0#Sl zp{R_miXo_8%6@|rswD!6F&A}-k^TmER{~95K?^JfLUk1on$+jmSe8OKz5o!JwmRGf zM~0$Y_6BA{!w_QeV{h}ypB3dRpw)C9df&JCue0yBdvbDi>UO|nb}i8}QO#8H?-*tV zQIH1(Vp!nu$Ty*gnAi*kEO52W4KPVMJm<%8AUf5m-oyh8-BuLrbi3HiP7qoxbhaT) z1h#a!1i%a1R7uL?F-WZ3?EuRSE7q-JsPv`yvamQZYcq|lnVg$2xrTGDZ$QHb4hSp+ zT4CzW(g)yC4Nh)GK}b@mh3^6cR-uP7k@-#jf^>o0Sj=Z6x4 znoxC5saeKT(D+G;WP-7T$Ygi!G@4=Ot_nsz1>>Z%rEBK}UUSXTJpk|ZL}05Ur>h_S3;0n6lQ$MT6QJ#I9Q`mtcky$Fe zQ^z_c+>Kj={FDj!_eGQ63h6IUZq;cWnAkW9D^lnp5}QT>D8F@pTr5DtTiipFXc1>1 zE%$_!kIzM?`RN$7^#SIGFtS~c(j(3P{?qXZ_3s~aUu!_8LWI%7Yw$NrpInzBaNz?j z{EwI{%)c=kM^A6G%p3UB9Ha8Kvs{NYl`xU_4TQ#ZO)=%?vOMB32G@T`eS}u_A~k%D z=>$k0p^B;F0peMJ*3Y7cy5U|COXK;e-X)dr%EbbBkDp(%^ov;(W5g8OYZzIOeuOsT5Iq(~ zW}4SGp6h!_mvyV}Dj}54QEXu&s;B_)|JcgZWZqN)NWX!Bl|lbk$m{>?hv;fzZ*O7$ zziek(wBOw{vDLch1V zx+`nqR=p}(Y@uu`-04~+*c6QTV<~HBflxW0BdU^MT9lb{dbgLgO&TleWg zp=Zc{N9DE=$kRKV_Yb4_PG6Qk3yx1F8BcsLzgBO*%=n>N+x z@f&9%gJY+T#5_*tC~OjQ3ZEvmaVtE0`VO^=XFZ2q34`AA`52(qz{W>%)zC&dA&xfd%C0-42rd z)kUV`7@Rbx%HIJ5Tp+xy5!SA*x^!YjEE)%|eBSH|c=~h?dKoBv#|pX}rJY_bz&4#q zr@KdxV~)q#6FUXi<_$rsES6g>-)10h^QQ+QW83 zs*kR^2lp4gC;Q47#zDuBE3D3?nlxFIU2S4&i=xGMpSD!=ttl5o^%GC)8#$9B<(5$? z!47JnS#E&R{#E`;I?F`_mCDORlOx*<4eh8z&8;F7UTAvj>6r8k@&FGnaOy}6ZgpPF zxD;+2i=?43WrunlT8k+~EbYFS%ytGdad(Dcww&5wH@-xfvr~yQ(8{eK<_RW4PtDy@ z176Q!zf+Tf?t2zPm#k>xUO%@~RSMdZwbV;5hyZZM$8=-GNu+lBjS#;dHMK8;%*MZ!i*7r#t-6m8!C4)56l&;n%J>ju`9?edX8Sv6a7WV|Z=# zB>{Z-^gU5gC-fHlLgpj1nz#D}oZtTT;4f@&c@2AApDQAxU^1uf2mIaee7@d)F)r~M zTtq4i4vQtmF_b+Y%c|aN8;dmMt=i{t82+frz!09A93(I zW^-Eg`mmMgBl?BTcr7=3&Gk5>%9UoXE&)h0e1izs}q?6P0q{FH%oi7z~C|Ed6L zkk^%_QNFr?9RmWsqs;llsDaJSO%#=3?XHFG6vjWi(rSOz| zg1I7=&Az&QN3$DrJVmM2pkq&<*OME|$pot$7oQG7$TBGYreYztJ{CrGCRW{J2Ju#N zxucmh#D(0Zs8=IXIot9}QSXw%rK!q}__AKQreYPc)FWYUx}w%sa(apk2|z~ky)u`y zg5@g02VTEnSaX#Q{ZEqZ@7hd8bB24n3Z1m6n+IQRq8ia90gY+#C37)?#c+egCJdpJ zkz$VC%xfk&FN!fZWArHCSP^c8b@?{s35$RO_&@+c`gZKWK3P&KzI~!eMu=xUJVVl?IsjH!^hK59(F1d5 zrvrpj1JndDk7ENqwt0yD-fr(D>5+%W&#R_>y5 zXUqC-@M``$;jDB65(rk5bNTkObAMR9^Oz=pS;W##7)dMBpdF?g0Q0JmdcR!-#Ct1+ z2UV9Q|IvjZFW7_CyaH@tJGU9+`>=S;8QShsQc)Wk0I6JW4MT@0r%{AJp-PtQETMyvZbZ9CAxqe zLYpE2c)j4FkL*qgMdqKJcrm~_lU`&$<{!KW%sjDcQ%xkxEgX0e(7Z$l%s;TMhn2;R z^^SfG-2yX!2*A<=}RD^BK!5ON0p z=h?=bYCZ3&Xzt?-(PF`Coyl|0I6@M{xoEzr^qA7A_tZj_x)l{|Qg&A^2-7WqjrNY_i8? z!34p5&yeXu8K6Kh0^t}@p^$Ww{)AG+O(ey|vD}}MxG`irckF`K>*TTyQsb=IM^}_+ zrW3mPTe)B4xaH}!acS1IytVFm0Vw+CA&;&tSiyXa?l@QLu%*k=tSK0X`G@C_ywKHf_*5(q2v@s`-fMRpgM3^}35ea?qv zzS)(GOf&Fa3qkANAE-jB^HGW7ep$$3>OLA!7T^hOqujnF`B6{cwr3dm3=k;qgAw?o z6&8BZ09r!U75_dDJ@He}{_$CoxlJ%*%zavmS%nb3pZ#IQNs@?lVTye|g^YORJY-5=_qk-&Kw9Xv{JV8G)RUW=I}gP2o@$*vx1+#vp&-R|C*hsdH-Mhymnm1O zk%y&U{>Jf$i8_{+z@1>u_M3}Y0mq)*w6%t*C8bhiE4W&oI!l;wSP6PSBFKa~$(AW& zNH@TSI*7&f99SbrIB9Ojqx7If&eMc`>z(bUmvF0Re7 z+)BniIav;&$u7}5P+fvH&haipgLiUYR}kGz&QRXRrOAEbmi@0{?K-)c0%;;4kGGln z8Go&gC1HT0B`%B{H#$^zyfLOj5^!eDgEyIzaEvBqe~b?`A3@lG z9cOQtOkEUutaTiHYmWWf@uWIm)sG@a5cFp$8@?8CIaK(hX?v(F7n}W8+U_sx^GDJ+yI!%Bvvew+r+)-nXfm-drN7wf2Uy+{BSfeVt?&$NJ|74(RBQJz2>-_C;j;}sHod{eCXdm`A(zwew-tVG=DXA; z)-+m_JH;F&i<~GARw={=LA2!hU<1(HZw2f3a&rym?{UV$pLM)}aM%g(OskkCZs5_h zSTs$4|=^gUr=|Ul4r-c&VOF#IJ{?WUbY49B1hYFVvqqR75 zrT`E@Z=c}iL>|=T(u2yM2_eD~*g~q6(FGqkz^Z>nof5V0D-F157lkpU^P(8FWllO# z7Vd}Us7vu3795mGkrXEjqJ&=&`W~n#M-ZH4&SR&mk>yM?V44H{YmFQ63P9$g^~n*? zt~68$5Qlb{#xR?f&d0KusWJl1Oy^xr6)=r3a!y8L>#j;a0vAK1GFVfD-{rw-w0PDY z-t>=2DnAe^rHUMfAeWhViAlZ%Cg1X^xwA@UQ%cHUTSemqRR-}Y`^ftx7NjA+B(4DT z6K$lV9-87o;0HfT-MVjHzQx59LFBO3T8c2%n&e`rLyqWQ-$>*tl)0~hvEHwEtn-Hq)7K}j&^S7TTSSPvGM-#-a2Kt^ix6hWVKTqP z$P3^6u2n_Ul+HD23l`pxjvh-m zo&gmTw3d#f4;&I4fOkulMOnm_05?|t<4G|)&tRoOt;Y*UuUI%oE@T z^&NpfnS6)p{zv(aq!move;tqeerjggV8^+Iej`?_0hJa?-K$R5xzG*0>zG0MP@1raQXU$aK?#1+P(eoiwAOLODiJ-T(81MU%&asj+Bh3RrkNjC9hyG zw1=}p&9FdqhH&=O3qy^51EliAruO+bfoR$&Ct{=Pw=poeBy*JQ{yY$2R9}YOcQ-n= z2e-tDAXrMK#$PxS1t0szR13tAouJG4hxJ=W5{Dwvktj5fWvMONuKk%>wQpMUCB1hD z+@s)XBQ;&`p2xtX4AFUnZCxAYN`nsR58o4lL^i3Z!QMvqx#9A;0U-G}e?OXeb``)e zp~W}xVG*m~6tL!Aa-=fLet3dG7B?1ulTggxJV6Pd;kjkvm(K56JFX=f_2 zFPW^XS1`EIL@~P20VZ41Qx(gYySFhJ=;<#cO^hHpjAwE?8Dg0z7giVAY0t!DN=lN0 z^^1e`v1qQvZ{f(Raw-m?5s~B_D;o7^Y?E-;)GS(ZEYVLnJQ%5&37|3TCNFz%l9`2) z$%U|^u*oZix)R7Hz--sib}XWPg%BJvIx$?2%(;#lB`4eY0aTrFDDC8+pH0S+IA_I| zi8!tN1;mxo@FMmJuLkG*+vIf%TT#N+(Y`OF7KrJC@>|(pe#EBc{Ew$JN5N2R<5C4H z?*~3FXZX=*(E-IqI#(O3iNgW=F;^?Pko*JzZrk5K=DVI4(Dr_NNEmZ_x6y5qA6z`S=w3MBkyYl>Fm;?eUrl#yyp1PH{R7-gGD6n5$28{KtQ_IaeT=oj8=OzrF65(xrJ1Firk2M z`p=IJDnWk9+GGH*>I=5K$cyjEhfV1uRZ$KT90HWp)&*FR^MqURqBgw49tAN*g9 z0LaHy7h6L64eZei*AxGbnC`)AO>IPBhwJL`>kBk< zAeBh})W&mOh2OcO9G5gROSz&=Ph?tl%zF@*76zp~K>TKI=cK1p_)#goo{(g0<1(O# zDVl5-FnCvtRjgeLbCPYb{HI;}Pm+lX0FSnp4)|t}Q~JM;OG_}XT|OxB$Y1Qyb+OmY zQYx3(#={t!8XZx#`eU~!ww^_+C##6pCX2OagYDD-pbb(&LFYr5E_}zl!DUoe$VvYh zp_r2hd}2eP6{3$|5Vkghgq^=*UR4p};jK-a-+9jzjRVCj>hH?}2;-pH7GiC{Yf0TM z%DKHaJo-6802Js^Xhq07VyQ{!@Cp0v^x8zBc-k8hJphT5#BXWiWILJ_dNMG(-!=fs z0mLQWhSvZd$Xu6qxPYlY`uh?pG|cWhIV|r%a4!T)O*XUv&=g|olMYkG2*X8q>squ0475*xi*?aB2}iILb-E5A@I0#Ow_cL z0oCmYr9tIw$d*^bfaY(ZArdz0TWazVe6}$8kE`NL&u^c(KYe(?6G?SRqEJ*s7%+}F zz7#X*(F{%&wfPcu`r9I0(c6tnXUOGH;`VqqBeKddw}9f1vo!AWVqg|Vb?MP`l(Xba z97jIGYw4wj9k}JV_2?FW;2awCKN7ee~|n|Pvq%>E{1^%}^)8Xbdm3Y@K@ZNF)% zWTfy@DLl0`%eC}(MV9*u8ceST+9v-Q)D1@|+|q72B^AazY5L0xNcoqSBQiFBGe-A4 z!Aymzid7GqRcrZ2CP5sOD_QDnv*;j-mtGs9I5`z*IKA z+}|iwg)!kOXLr4@B6Z10srTmjm?MbwhYJK&TFL;_v{d%*Jzq zO@obM?%r^q)w1aw3x9hG=Ir?hXW*ju8g2D4{uqc zQ0^n&Zsx%kmDc^X#@KW9s`^RKy#zwj_?V~!*Crh11Jleu7)=&xQ)#pfa-NYMu2t44 z8$*kt=Kzd9X6(E6ZnKh!{6xiyJOs|?g*ObW?6%WnKXSs zdoU7fm>%H?j1pV2$?B?Js#-S9f_3@Qnz^L=uz@nk2;{Jt!ekS%s{1CJipk;0o8nmb zfB*4IfRt;UXq)hgr1a4`BMzl9Bd5#&V1VV5#Br*%aAok3CG{Zvb@2D(8exS#;1$bDN z?H4DqNrugVRB`N#cmfui49cQhQMX{OTGodZ0R0`z2f2(&c03Y;A?CY(99h$As9a|p zH?8v=^Ac+M!7DpOuc&(-k$w$2gZ_~UJN=Vgd#(!CL4IAa1peINv-4a@ju4{cbkru< z{V`9>6^zAMK>m7srIVn>EeVgoGoHB+`j~ufMdl){2BDquN`ayXO7eADWSWq`^^gh+ zz)V1Tw%PLc^Tk<>YWb0jn3-<}t}kP`afjg2o^@A6pUAGn26ykx%3i;Pw!-N697e{8 z$tVD!Ziide$IDWT5f1@(OP(;k3H_v^!3JI^$8R zJH)+sCwRqA35QxrBmSZTJqQ`%#v00JC zxH-39Z=@!)So`1}6ojm(CnSFq*h=Pb?c`o#kmx>bN2x94Hfa7bjf7ZMB5^mI00zW) zthY2A;A2yeO|DciQl|Vc?pFwgHi@h`7NU>0EO-1+IFT#6be>MqdxqZY*E6JHSNh;@ z0G|AzlF6?~zI7# zUYnoo{5J&v5co`1hz17cPXh+{FZwbV{tqNy|10$$t0C`%uZi(F(wiHZW3!*R=y2Z2 zi4w(5tLUAY$T0`0XOPXcNa-*rp2-u!-cO`|;F4Sqpv8}04O+z{?F4HO6`&wMnbpK5 zY4`#Dfxnx5VItsy7)hDuce3gC&((09onid>_9P9a?oA2ma%Kub&5r98B?|OURScSj z;+k!sr5a9!JcVHY?k@$L}3` zmS`sa>QFoDiEdV}W0oz;p46;OH_$?PU1QA#l`xL#Hwknp1hKc8`8C0hcuM9H85i;$ zUsP#qJI{MoN7t-J9T~A|S02j#bEP(Qns;&mgx{6=n=xYMWIHrD1?__7Y-{vnZ7J@; zToP#svzZd5QZMwXa_&{qJJt}Rxfz}2(_BnveOX_52j)tY~GK;d##AAVTOD>L?A(7k<+(3Q-Cr*YJFP>}OME98^-t`d zD8+-b4Y;`#2uI@=T#%J6ctV>&s$4K@1X5a~s@q4bwPvZY{r_U^z=gaC$~e2no{fLs z!gdjxxxpXc8EHBDJ28^#DTFccq>Rf0=r6P~H1N+mu@szQ4@uVADMvkJ>0BQm;^t07 z#6xv|GYvqEKgRz8z0ohxtQ6hx4x9co;ujGLa_>mX9kp%?#o79Xgpck(GqMta15Aiw zY9l=*wiExWX4x6{2c__5JFvYSq}mX3a47Fp=<-YAFlPwuhsPP0j(&&IjodGEfOp?$ zZix;^3s?VQpJJ7s3l&|T^gCytibVkYrIP9I*xrok~_i;z!0)Ax{`@2+V zWuNggzx$pXdG7S*AZp~^!g!H1eU0qw{AlO?Jc&>KCi(%E`%oc>ImffN5Fz2~_JOyL z0_U3D!>)D_`%$B8j^>vBOpZ?h6`gv}FOzH11$dHq!g^r1RwouKGC`T&7JVhGeEHV- z!cO7O^dt2??4)i;RJTiM2QaNl>mMowbQ26AcV)nMD>V|A+9m#veLe|6rk&_Nze>PA zTlD|F(}(r{_&-X*!rtBFe`H&$DLO5Ppaj_Qy8sgT9FkhW*Tud;I%hXC?S!jQ$UsG5 z^pk3qz`Ho_J2=ZYOuC?aP$QAdYe2xc9GBgYy6ncJw-ljKibYILZDg$ZI9Wa2*F6)1 z+wXfqH_?<7>?X3LX`a$e;8Lid;fm+W!E5fVsISWOW6Y^ERP57<54bpdCI&6RZFFPn zeFu#5gDyh7X!BPtjs&4gj@PnHYWLbd=6CCdLkz2yie!5CT57g)F?sd{;OX|*%Vt>? z9=?rU{uvT%>AbkhUv7E}P#S*(V!Kb(PQTBJ&vN@M(>tMLB7bw**^Vfck~PI z#k?_$Gm&+2uffJLbmc!j&`N6?tYI6s$_1csq?pQt8L?w*;b1-9=|~ckL@6xbLppr+ zp}w7rn%hU1A|kYxnh^0K`W$K)Se1W-2LcBuPX6}ygClcbxEKv0Zkns)No1{Jjp`S7 z=*6@)C|>)@Wm4ryD!-yvN)ASrF<+RP*?q-J%eVUHb#aMn=H-q(#GCeWRATmgt^gSR zN{0y%{>6|Piwv44wlK9kv=Bqkq3Dt*3#g1ApT!;hF*1QlVfF}nrw=bn6F;p^Uv8XV zZk(X?%S7uhNF9TDWW^beUL+I}F*=?k5w>psPsA}%4&|Nh0pZ~UHO=9l6>17u7uCP0 zoJ>Pu)Ui!G;hYof4aKZW!4n@phdu$Ui4;bJWGTu?q|i1I3V~E3jeU4~q>WBgumGu0 zy-iyQnmsXdX44FRpeuas?)Ox{xBnPU{8JeT-hYOwi+}2!|NU@M{{Igr;J;5~4IiAh z#?sQs=CkFt`5g%hsR-5&5!i7B)79sEQb-&H2sA9XD5UZD7z%b5%K@zxrt+obPVEqc z_7tsou>`Qf{1(%ymguc&z~k4~=apX9n%>vv(pUETcDE0EM*3XcYwxDlb-;73+tu0? z@5yv@o}do|SZRd1BY-FLz5Nx7duOKL81+hUVmgpWXk_}p@dJry?j|3&;~~yOw0{g| z@HgMqR4T0QoL%aRKF`Ku0Ou;>C{Zfq|b&K-rJr_9JVN%Wd zBE&s=pQ+B|-;bE{@-6q3bhdk}CynDH0e=GLZt~-!0Rb?;3;>)D;6yg^IB>e*#QqFN095T=F!>K6y4?!a7&1ydvl=+h>T(fLD4&h z?V%f#t{qkAbweoJ0<^&6C;?Ul^g+Xc1FTn5$Q%O)wyPV} zC5mQ@hg@wsUFlKOnJF|kyKZ+KTcPgv2l7V-H5nkAen+t1gDDcX8}5VvkS)&-p+dItmU#Wlw9o@&H2KpSiLmFrRA#1C6+5G*v)%0s;m8Tv@op-G3$_+FZnC=;!ApDIxU<#Rc& z<4vthjmzC3glAXP+0KcvBi2}b4to^=@T9Ihob+AGqj|rN#MKvXkZ2!X=WQOYRVp_2 zdBlckgRbgC-vd;fSA@#Y1ro}51k_nREVQSwbA8|F2H_yGQmm@M25i@ zO*Fzy{+uHMJ&!8ji=RHc-l~}D5(idVBqn~e+B2s#x~dr&<9XgY-#dI5V#Ioe2BXTV zfJ%Pi(xq-nw>R2T`pHXVp+OHyC8unp;xsi6bX54U+h7fx3OQkqb60NyYPNFBq3tH$ z^x5()aMiMQ(!glZYA9)!D!z$Ls6du7q5VmoNIr5G@BA%z_W-{4?DBA*(QEBR(Xa4( zU$zV1vT66tIa_i!CQD}mdJ=gZ9n>t>P}zT3?WT06=U@+}r~Nw#ks7nAL4a_Jr`g_H zf2X6c*&|gdi+Q7Ww?vu_-~#M=K=g+nG;V|>bQqyh*2j`LD)tHS=s`M$$@pL)vvKIe zCR$#$qTAt_Ik(mhu(qS&?Q)$0XB zU=;QtUx$D#v_q-?-HK9dV-d8llPvC~u3xNve&znuU4~3LGPB_fcsn*>D=a#*nEry; z{P6XN?NmB%f#3M5vTW9NWIfIR-^e6RGu3O{$yTgCmjf>d>-0}6 z{Eb>RUCeVEH%2~gAOFUGyf1}Nm0@uS)xLoJ<=5`psbBRTsVfuQ9aT$(pF~_}>l)Bj zXJkY(#H)`=QG8qt-~bLiF!blx3Rx_@w7>!Pedbi!W1%Rm`@vyoqF`@K3n^I!kUCBh z!=w{@P5NcS(45oQeT})yyZ~=nFmt-BLX1#q5`zkZC|b#U2%2 z&M7(`-6V+NXlFIz zPGL%bvqotRg>grP5U&J{uG;%B2?MX9W#7rOXi6Z^7Ul-RK^<=Peq-9dpMy$s$@P~{ z<&?E@HTvbUmRNm3`xieo5x}OjB!e;~0~#vUjY?%9{1xV;qfKY(?u1yje~D^d#JEKW zIgABClFhpcm<%m6jFgMTZ%o{?s+rE=8IZc$jSO2Ku>W{U`xGroaHL!Hb@38NaJLHO z>Eb$)Bh$*H8^*SF==^ihcyVXLAGB8;-XMW@l08Def0*u}$Qj1%fdj5FoG+;J^T0xo z=n~Wtni!Ow3p;YkGhVRZEl+5ct7ATeGwP1tblm3+Xkr`t7jjQfhwPwK4XR~R7$UT{ zDM&WiU!+~2VZ>9RxzEbrY6yV;7unI1ATwSQKoBeVsbr~)&US)V6iJEU(7Np41m{8d zos}vwb4G#^hP_Otc%eNbH#2v5Aq$4;V~6~iVtFmbY~Bb{Q*K>n?}V$b-%^cUS9$Hb^MimA3O7W{N}pK#F1z6alSsJOd9xShuf zn9$-aUAJENufa0D54i2cJ>;8GDyGF@NpF~7FOnruoGiWHI4RLs;avF9rVZ8#($uvp zk}CGUQB~vlN|#~A3^sxZIU8CXJ)61m2Rm@~0GAXnhg%qTOw~_Hq&$U^(wKye7}Q%0 zD>otNX%hT=g&Q(oJ$vokXo}wa;*mZ^om*HM_Z}VjdZjNFnb}Z0Xt5eno&0?6FXpxMwsp}#~MTVEoaiq8Yp#2ZN|pbE|^EKTfdLCJyEv+~9>DXBJP-pj6qsjxWE z9SJ^t3v*kEDG<2N5de35K}NOTDHGudFmz|<)CX!h5D#NI&CY};58m;X<{VNbng1GH+rfjO@o4H`eDt^cD+A%p)c%!Mgc9~ zJM)xp4)XF@I2W8DtI4Tcx21L+q{z*%w2O2~P}BjdAu3wpuc53vrUW}#Y>-YI$BJ~l zph=fVre3mIE3D1@$hz}=yZsT-_%zh=Wb<_U`Vfs)k8o`&uFMy{pkV}em!$R#)UCp3 zeIM_vcEfPtL1TA=5IatnaHd{Bke#C2wh^XPokq)MaCJ2Q8vgdMA~JVZML)gj0xQsk z@K+4Qbl0$8XM0-Bosi+5pfrz$w5)esdg9&xtFyO&iz`_gc#+`l4#C~s6EwKHyE_DD zf;$9vf+e`Sy9WsF?!g^`W4!_Ca^uMdCt8J#IYQ=v_AIJ0Ts6iMD zDKyySOr}x}ZFQozzLzxBO&RNceuxk)`e1{1;~fK{<4H50YY4MXsDof0?R~Drl`S0Qf(6Bv%-#J<;!6r> z*tDz2k^nh{&&lT-?3L>FP)T#xprHmyZklM6&cOZeymOpe5X4gnLtFod)5d+OTV^ub zJCE_lw3J-=4TFq9^(o|t7mGs7VHJHyd8O#z5)e3|#giRzGZ!8}R0Oh;q@8Y3-o(oG-Z*Z5y;gU|OY)fTTbrUYS)2zmty8&g zX{7)h!@qS2Bq_xSsR~%Y={>}ke4&~ws`{~n?|lR|e0Ug{kd0R*Ry;&i;;@S+V((Of z8Qjg`wSiXYxT(K__Jev{liT2GB0B(dB>h%WR2@I8zNgC+f5%W09%U=ZM2bQC2pt56 zNY4>%+$8&G&<<2OB!&;uj5j|pNlq)S=z!j+xL6eA@73*e@T}8f{)&y(ch$6hbTN6ZyeO61(DCRR}gEmxGVU@tmX4aFD$ zVhhPw@3HEA4%MRb=Nl(_UHj7ML=a;SORy9*@8Sga*=i?=HNnsC`PEpLD&?zcME#XB zh6`ReHAZ@ruDhwl^V>$zIbdIPc=2MDguV2Pa1m2rV%((1aS}IY?R4sikc1Z2N~FW5 zXb3o7LYE=S$#}q^+ZRYTF`XW6OaRybkasPW8%s0Qr3Q(ZJE)8z1~}wI0!MOkW!|Rr zzL8tiAn{+)GBW4IDknXUc?zA}@J5Vj4slv>`^r;UNv@C6{Z*YxnaE~dh_JLd{LcEj zb=s_unp}x0q*&j2Fy2s_>LuYR%lh9;Om)IV5ADFCBE!3|#y+I{%MMOKWAEED?BBeu;796Orf9Fm zG&Vx~PB-vb?+v@yeEHij&M&XI zBpe`5lcL0SSl!B$=f=6EWETyPa1l_-$g!n5Wi0f8GkOCV7kVPy`vx47h62L`mDC-F zVIT!tEe%^7YZ-ww`~*@?;Y^q!2xXqBMZydaKKfLK&~1K@p1Zw|{GNqnq^Ba-t+P1s zThuGx?+|FWZy=AAkh-Zpd}k^U_)v7+wWmu}<00C%Dc|x09giQxJVhV{Sat~ROd}Z( z2ZL0ENSNvn4O=5Vizb1fB8H$MAD1IuAEQJ~{PGpOQffSqJ9h4);z+VO=Z+>AvZG4q z2@JMM3zXQmuoRJ;$!#UXZa1Fp0CWh^wHL3D8kmTJ)}T-IK_j|iFPO%;@BpX@hUuSH}i;>Wk-*|epuIcSwT)@gflonokjsj{vQFzke^G(C4 zKuy>nje#N@7+`a}A})KWsTM2t0glxk<8wa+>Y*jxz6c6 zv8JtHHMwo4Z%Kl2*8`x6ptrQ)^2`X!Ns%u+4Se$#@afp`>83BEk_Y6|?Ko9S8D^q2{*7-w!wFy)s2#8;{sBcVF1U$Hm~mk#6<U+KgTQ8))v4ETxat8_?;x6n1MdX@{2%Qi z-^(rO%6*%W?yCYlKlP&OfYYb3C7aiQHro`f0M*h*s}tf4T05AF>OMuq4`jYH#5dCi zv#JDs9ryxliDA1X?l1==am}2L%q9~_m#)ju@x@VIAvsr&vkAvlU#y^GHdaxiEM2XS zkz#J4nK|T5UtB2wW}eqSi>it<=DJ9lRW^qks#7EU;}q#)&tT%Px=9l}67>m6~&XqdHP7Eg*Z%9=MqM^zs{|546f2#VB@RZ|aHR-XX>H&VR>SURW0^+ybn$?mO80FE3dZy8a%iBMXDBWxJ~+`;$R_(U}*C)FW08a?+_ zsH^c351SgHH%5VtcO-GQsKd>raVwF_X=MD7OEF}`9h4Hf{e$`ZG6F|0xHsbF37AzC zdph$nLscm1-c$EW41rxs=RGNQPX~8oQ<#Oxu-m<9q!6wVB)d5$fjK9~_GMg@mt|3a zQH=oYp&c%3~ z+Rez9wRS>9F@$HqxJptj(LZXHW$KL-uZkbMbLCuv&}#qG1nWqRRU(zP0L8sy9R|JG z^^LZ0aP?Kc+#9U#h?}QM1zms+>4*HIu2h>deU8z10H1vaTSGqB_?5ck^X^nKBkX8yWm*~R0#o#VStd+d75!MrJp zQZ{rmC1@7TI(R&6SjF@Njss3u7`!)Cs1URFl2IL>!27dJTFaB0N~z~q0??+{vf!BH z(rq?10WpEO13jIsfyQH>Ypbc)m?|Kots7BM{E*U7N=f;vSC#-M~+@?Cl|9+ z-UDZM`(NR(3aX@-rMZ^9lH$mH8(t`*_-B)V_U7OX^{OUQ)OCVYq9ukgzV>fGR}CN5 z&uu^zVyhR`Mo_4PYwE47P|}7{3pp@IYIt2`h(k~XDz>Q@Hk4iwvc$6Lf+*0?n`tF| z4Y0S%`OF)(Zm3Oh5#`851U{9!moC_s659~k2cJ8!YlbPEOPYAu)f@SQ7Nu%BwJiUt z99G$998T+Pq4PH+R{$0G?;A*o8xtf>ZRf42^p#l_-bK5+Iqu z&g08ztV_aFpPQ5DHggDV1%pni@vEs;B<=Vt_a1+FDndV)4TIBgZzeS_yrN!Gvhl|X zAwI~F4F_`+s4N})fPh;DYph^vjSa+b1YY|<9D|dNgef$pB$8Yw>NXP&HU%#$K!ri* z{=jlN5BbDCi}V9E%UM3LczOj+SZAvR_z*5ZgQGh#bUl0 zq5JKz2Mg~Jm38Tj*%I-FXwFyioUh_cA`f$78ksN?1_~6nH`s~(tW-u4MPprcgxGzp zX8Kx;)~n*uS+5xnnFx7VRn9Q%0pTCIsm`RZX?+mldW!3E<28L6Qw%5aD8cp{PxT>@ zRw^6WYt%zo_C)4~<4A=0K7eU~tEcz1_;{tFaww@|JNt&49yiU4>a}SA@D1U+_ z?Oh#E@&eO6D~x=1h6%bkQesWDB_(43#-S);gIv-1xwYRx#Gx=6ev_qJ2;i~qXz}ur z4@_^gff${V3msu8Y?va?0dvR!y#&wQsX|aB3}GCDB8Rr>C9Y_Q7+OvjD6);DDw;jo zS@7!dP0USeM8wSyq-9x=8(5j`M^m)}AzWSIRx5Wmf;+k@B-efSIs}X1Jyu4=Upz%Vf{i(S9DHHjEc;Utkf0|yT@B~(ak1P-j z@}{rSSkMfItQ#a#!1a`Nx^#y4=5jv=iziqP7G8uxxhhb6MxE71>IG1G!8If^V%}V* zEje|A&-rQ3Q3Whg)q7}sdn$IQcJ5ZO$Eh2qUwcryH@!2-@YyT@rVXP=v z5B(hRbY-<5y~AA17N(Mv?O+c1L8#tHPdNg(xx|ZHikxa0r2W_szIp*f3(&xc*T}p! zU$imVk|0X0zIUBz>M4G_O zaNLPOHO=-~Xi0ShH)w%z-ZsT9TLSAHDt#mag?!s7sKk7#wS1~3lLIb1-{lt7|;S=@&bx`GS30$d4!>Q7@TwQ_AisKvgNTmEN z_z=O%cwS=hMz|mve)+t^AjNIlq;87sv68e%6g$#KCsdP`3FJI?sH)3);xjH?%WVN&l4 ziQa&DUVFdOikyO3>9%3v!h9elRx;4d^LD20aGXe3HX@ASHT6B~2g_&e zB>Pr=u9Ww-m#$v`yR&t;ad&5hz8e227A#?T9D%QmH#evVz$d40N_|Qr_-=3rsWZRj zg;D}hC;WCllinQ;_b0UwTEV1z4Rd)zg|?;7tc{%Gbk>YX`3lB%u{a0x{TVD=7!RZr zi;Zq7YE7}z_cG*G*OUn*zS?*Ej2*X|_9q_IBq|Q*#|MG@nXO_9U!j)(v6%ety~q6v zMS&|GCYNt8fJ2r9z1NxNR@kL2uxRnC?|FR?5^2hXbI&0~5>_>IZNV}+8}vgBFCN^H zd!!^%tqqgbw`UsB2S17ll22K)q#LJoUib}xv1`zz?NT`pR2k`JZ{j3N`nj7Ep`U6C zBf+1Y8H1Cne`M+N5!e(CILB;!S8ot-ju@e~LSD2=3PA87DoQ{K`BtC(`feb0)@_2D z!Hzp*B~bNp*?h2KJk}tWT6jWTgCRFB0+f!FeJ&b=Xu8 zuwd2bxhyKamPSo!%QYzID|J^*e^`r^C~VrNLBmM?S`mk~oURY>ahppmS;DYwHDo&S zm5*LxIRJf#GT`uJP2n)`yBC~6+cs8tSFy}mecDjN7x?KmlORjRSKAJI+GB0s77@;M z0%H(wC!HV#ci~eY;1V`iRNjfJWQnL`OS^P9Ps6}X;V*7Ce#x=Q#u%1iR*^Ynd@T9= znS5-VYIjplY8TNvjiL@1#osf!#+u*RDyosy7=f-pHBB|*3B6On&Ea>L8V z+m`gMbS0*uFDl7S@NJ~}ItEec%QtuT_&O;kyLcx^(2f{!v5VVn>1Nr1jCqfR-jYRt zA#Ff$-cU^1ei(!czIjp7i?@(l#c0`YGG3rf53Z>V>!*J8=Pn`|RixDq)r8qCFzdpt zg=J9A?=p44wN}XQ=5T@3E*lLfp4K>3ap71h7!Bl|zWb7^+U@^U<21yhPNj|^$M}%e zIL0~+R#%R{Ol?lM9`7@irJ#?BDaKM774ZBMB+};WmJSR0aW`J!E{LGEMOPXmuZ)}1 zOJBX<=rBqwEF&lFChG+hb)Nqo>={U7P<{ifW5PHs~nt9P5HB4WCm1q7wb|6oE>|6OcQkG z`my$$k!}jZ61^3R1itGgKSh)~g;M%N1)>*duWYy>Wu;+qluv#^^l<6I0 z1z8AxLp@RmX;wO7$o-iw-Aj?T#Kur(fUHYai;|l=S}M=(LwULxt@T@*PdX?EGR=lF z?bemL^6x$$ajqBCO!Msp3b(-W?7PGBos#iK$3bvTUQqj;vhmA(abw_@16#!nUenOL z;r9>_A1l0k5a9Q}^vYbR|8jvoehS79cy-S)aS_aBo3$J6Y>+NBmZW_9BV-f6iv$0C z9T5n~wZ#9QlLXQ~A~z{HyIY(5C)%Ytl$+8l##8xK3FYuu-TSi$1W5R~^MC*ui3pnz zKjbNJSYl!%sXBg}5DIR<$0JmwaEnrbI{VtV(saw6PyErVy}2qgHIMnU~=q;2IJ_uf7MMz)P*ixM;;W>#90UyoXHKKn}@+ofw&pV zMf*HQ^Q~acX0Gm(Btl^F)EP69z_BO+gXd{M`nLe650`67x_m)$o~JmB0^wtWcVojl zaJpV7da*R^C7ZOmHA6;(-D>=|sZe@J%XWLWpW+`9@x7WsRy$oyF8JrY^f&}hbKnFo zH^gr%4ZWkM zY(SrgUwGnBBohM+0iot@)?4yy)07ynx59&VuWlK#Z*=K;43?F(Rn#n3~ay?k7&-+EoYstA-aK{qnT=wjpUy_nT z_9+&clc0T_6LShRbfw|J-c~kl=B7cm9%zig4illzC|9Qvy<9Wq6MMma>Rml`U~p{V8#Ym1r=F7ey3()0 zK@fWB!ESpMu*%XtlcNW*)%Qp%-p9Y^tF?b7X#15cySH|JE| z9=+Ol!0*k{mmPWY?r;Mhz# zIIOU8&MdM@Rbk=?@E1yLle%$8Z_X&PRF5J!&_%d9>^7t@UI3lfp>6TiH(IBys?(U8 zk{J4mO{VxkO>~W>z(ndJpFI%;e5KG7 zj4~B_sicfm6w;k37RcwgYF)loAEp%8VszD)q*D2V??}F+6SRK|QX0&yx*UWtV6Cp^ zIzl>TL)&>TO}z~tr(r@M9L$ZGq>l|SpIdACICWt(eMW8mGLkT8|?5zlzue>jHtuA@zso%a`KTD}pX*TqYsVpoUMU*eepLLe2n2oB=D!Og2GNR}; zf~TP!9f<_PuD_`ZrbCwjqe8^T$^gOHw`WQ5!RLdNFI01#nF#^mrgB|R)ChI zO*7-jn@(C*@_XGBy1UYN;^YIU?J>^G;jE1a%!>ZJ5soeeymr6UhYpPfBE^2u`KIYD zMffUqI#76O3)d-ja{90ko@P;}=Wqdc%NZ`x*^xCM!45q3eATje;&t38o`UQ|vBaIE;*v;}THNs!Sz{X8Nml6COHcr3Tsx`p zu`2G9cF&nm#2O*l8ATpCze}Dz`|M`=*yiBo8+#1C8`+3+FL#-G#hILvun8Wu=tPT! z7hi|i#$FT+vwaZoonRT^C(fQdx?toE|A>{!AZ+I|m8n5tW+~TkZG4u^SiG1(B)Dyoq`Muvb&1eliQh zk3sEkbIgQ(z&E*N$K0&1IdiC4g9+r;&p3K%)9+-RcLb}F`Bg$0b>GRMInuKI=p;c# zNxiZ9j>T)_DTtaaN_dtqU?+9lwl%vQrF)ftGN#;9)97O<^9RH`zHKgj?rSftF}OICJWxD0H-DVf()U_%cZoKlT^A%Q*^aqDda#ZbV#op=x|Y(uYpLk z0eYZ~eLQoZ6Cqf0pExI~OQkH8$r_YTWbb2-J9Ic2@VFCM$!mQ-;f5MXl^)=yn$0sL zX1$^tF>LNp(AX%TbC_dL2+Nb4$*s%rY#^C!D)&fQaE<&HjX8B;0jTP?xvuYhD!Z1p zj1%yl;CIKRr<8XiER6uS!Kx}Vjp2J$@~YbWRWWpy4%?>Xco=&QL55+1pSCUa+n27i zSr7D-R;G9>M|I(4d8{?}YRgE%E~9N(59)@ygMZ=TY`&PX?zx_?p!Z&we7tt1TZ zfuzGqBPgShk4Rek7zT(;KnzH5OBq>^OsnP7kXY0obs+1!RJdBOk0h~{!qfxx^oo46 zscy&9T#0sxvz{3?^|$62m0MOcB?~!t&&cyei<0`FPppz)Htc0n58`Er{7mEx_uM`H zp*P31*UpIAmoc5g>ZrO>u58tJSL`gwIx<=uG6olzJ|F5-i%kG+RFmhF@_p*N8LycA z4Vaq)Df9JKG4M}9q@LWaBujST;NRC;iXR=nC!^1q2$SIg$f%|@(3OEF}azfs`bm9{_}GV6^3w; z1IyH6P6AjY=~nT%phmH63b5)|SZina%s2QN3M~*|)v(P%qnX^xX{oY6?yQ(2*&H&e zWJuvzMot*=I)`9mlh8DRTY5_TjV=DP;R`7dze-bdgbmfU5_A|jqw0o{%1;S3(X5=7 zLwBES<_s6#k4-uGX|P9Ys;-Z~hn<5i9W>m^9eoD4zcLi)Ock21EZ!$+>Y6yJ~F!hg-!7O5=Oh%A`Z9 zeDFOX&a6uBtY3beE%aj1#0^)i%p|KV>OhMcFy5(UGN7-(9BGfyZl?yFRE^!Jhw%jr zsesq*wEg+0H`@DzD^>*H<_!1WHfS{eaMWAI#M!|5@4GZLEj2vgE=># zG-IaArkfa#G`)`*_pH>u3#qj`k@+*_*usT7T_0W?-3xdIwLcxW0zmB1>%rf2PBG;Y z6THL2sWb);A=wnCH0@>C1qd^Ac&`MvKuWzqXY=9*!4pN01$iCs)lg*cx;rPx3b&0I z-AieJ53A$Ctuq*ly#>8P*GsCq9^AZhSfGVuv>a~B<#j7f;>qo4D$?rJx~JdwCjHjz zbr}RZ>MvEjP7;#?wDOq>Uot-9^cpUfI83Ws(=r%e?AHm6CR?O&5&%eNIcR1AOhz(3 z=Zi_R=Ig5oz4CMt6IkY@6M;g%r7YXdh}budgKg=rzAJGO@@>w&$N_VilT3ldMVoKo zR!#lDaU@~HBQ8s2Kpwdy+C3V!OEW1|j022Q9fM0-#~sHSCwo%Bm&?trmri-Bk6`*a zm5Q7dqi4T2Ps6@SH4`B3I`i^e9)TruIK_h0l_iBOyjQb8a*r9p#--wI6Pw*m#z+_e z&2ibLDIXvq24*hLAb&(gu_$g369ZpD{cV#ghY98`e(|d_D^-cUer+j_uEs>xP`kVb zcNz|xMd=J?SlA7Mi7mr&I+c^S?isJnp~*(yquVpLUJ0YleF8w;c~qz59C(I9-+N44 z3`GRdVq?k?g_$sN+l4&Kf-NppUBdBPNO4FNQIFD;l$`zd1yu6L^P>ocG&v-2v#UjaRP^91kb^0Y;}y7YYcn2QJChg~oU@-Pna=<)g*b5Xea zbeFeD+l7#_6-)17$zl{{fYMY&j>hBj?nZrLA3@~pgzrA$qtLldz$Mreu z!sU<@ozSUuHD@u>g4^h=*~hi9r=}4zxJqDG-~DC-uxT3oerXtP?b@f6X=1Uvw~j`j zwOA_)h3CT*2>)E>D_{0R@JD?_aT6{k3 z{C9eicV^bb%5#WRNH9yxal@FhCN|#~J#~-Xqt%++#|%2*ukFgle=uQqatwNZ9?A>` z(TXgn3s6jF(T)ZUgQIci=-tC@QMj?oe#C8S&tl&C4(~hsp{pK@kvki5o8gk>Em;n8 z;MOP$?g@!{Uzxl)PHGdF%0Su6WOd(BL89+dJ>><<(UV-^!CRRfwv8Xe)sN%mgbzOC zJ_;PJdAz&z=d%!nLcHJ;8+_Z-NI8JB?UOkk=>+&-9HA6(d=bynnap#`eT!XtO6r@= zxaOdko0s`Yu+TvfoJ-a+Yzm7yJ0$sx9Ntl_$E#pxlW1!C)rw$lWm#gy!j?vNcamm{ z6c?&$>xY-fs{RY8gi(E6mN+p2c5|NK+N%EFita^9B0l-pC8^gYrX^dP2N7!YP0FOs z^%((NE9)b6d;n?*&}?_#0}}B<*dex77Pi{M6Irg=A!zPd{BG0%LH*UZj|gn3a2{&j z#jov%ta2f)1oTSHmTMXTIG_t#by9rGuk*h3BzIZPVO?+Y3Y<5Nrza)ez z#Z>7B?-Qi)fI$9009R#PUa@o}eaXb`M(vc^PDo|`t~A&eSC%zaq=TyKcr_y3Fk5jAEa{U(FTgAm^0oyNv_WV z>?`CDitE4NM%I?B%YUFeYz*x)SBsxEFJ+plpd^1q)VZmPP>iR+*Y)PzF81ohL;ViK z&ZTJGu9Wq1lKWLzwSt~Wcw5~{3(Ax1IB9f6JE7HgkCMlO%Ijh1XesUEwCPo) z3v-3!WW9Dkzy+iDIz_)m1+I{bjDuP`uIljy5jhejE}cqtG3EHaZI*#m=g2T0x^&K? zcG9l3><;{KX7vlvmtwV(8yRSr0FNu-m8jgd2W) zeO*K(J~x<)5w4)w?NbA8FOhC>{?qvA)%V?LgkJDOv!^f!AL8LZoS&XfI^IUKJe35E zS=_cjW!(DVw^3QNk=eD;1()yL7UeyrvaKEPv}JFm@wAbp8yIsQA%=1gtRU; zZn@(uGQ3_Wc~DN}fCzyvGYSrYM&PORA2MfgW4s zpyBbQ6-)yZfVDB=vFcs-s;5i`ce>m~jZM6y;m2krRbpatsoe`|R?iVS-R~31lhw&A$?6(WX+2IO2f=2TP z-t#+l1G@vsElYY%7$c^oIIO(!k{Z2+#sVfIgG@AvfV8||ybhYw=6;YjRRJ1V*P3M< z$NduK7_h3}{J1HRuV_&&h!f7gSPnsP@I;FZOQvkgvk!x}UQWkp67xvDvhLB7a+QAd zVHk^bg3r`#l&+w`)+*08MTULgwNxEP#Y87fxZ~+S5Tfm#xRWKu%`uAzgvSGWWz-@B zEZ&}tJOEwhLi|9ffWgrH-m5KMYL+6`0_ZQkP&JQ*!oScO;*g-1eNACQz3i(OKNaol zsIskQmw;N!u!UY^th#`%0;LOy-#SJkO9!gabjU7OX1J9iFpLc3W+H z@uDY7BO5}o^~Rkdu}Q|*o3^OhK$Q3<_gyu5t>0V}mgT2V!I0sLVCxmBsSl?Uz7tlLBBk(vMpp$nYdqSKRZ~%|dT5D* ztKNkJZbmNAOa@c+(w}`SSk=82{s9y)bvo6-l3Dqtcnl}J<{=j5&>eJiR^ODrW!M)O zR`0b;k2NtsPe9%!!}zKOvEb?hf-{eBz;gD$ z}2-Y@7`_o#;cs?XM$nU%c?V8@WMkSL6rm z#mc-ZX3+RxDWH)uFExc<_8HuAhJ1+llqKt}nblif(@y~xLlb-vY zzq&*Lnmhp&%=>YfK(^cpN2|);^-`I$EDZe>*|*~bY8;XD{=ckmwqFfRasVs31jYP6`2*egbswDb&7>E(3KUE zgh7yxZ`gbF^AheR*`5@8y)yDmE?l;4xpf>}5N1^dbbId`Efr~T)Ppt28y$3p?X);)ZxoAlbAA!qo&Sq&JTef6WZD?!=S z5;?ys^_UjM`QnsU(bqfMz%h82r5%|>ba&NGtGwh~c8KjO(Fy!=x1$YOB+yGfi^CH@4 zeGDO6Q<~oNfyuY(pW%vXIja?|WXKmrmO=(d-aZl795rWV^EL)#M6c}(Djk|)aKo7P zqo($nFw^vjNC#w)99pglr*$1)w>nPH@Rm1w6T#_!H(@|T2DIfFq3|o7c2=zsk~akJ z&#f(OPlrs3;*$trttXMSngCGSNzPbZ?!~DE)_i>3B<*de3_cgvvPM0!UE4<-=$jC{ zbwtygN5)<3IudSw}RZDo!uqtPsDd0-p;cblyaMJu_S_z_I%BI_Bx+x=TpK2|2*~oyk?%;zpZI9RJGL5)X<+GgQP=@eBT%XinEk+g|d2dYwFas7z~X_bCv>T zW{6qIz=bI?q+c99`m_s93+yS~XCbxv73&mxA8I}-=sb?5Am?;hs%eC?dVZ)LTUmV? zUD@3#ZwEXQbQpNybaJQ9GJP`O^Yf4nF<|lY7Fq}{gg)+vV3rOypzt$0)5gZ?UAQpZ z2^2#FBn22lTc`?i_)$>=7>el|Fhpp-aGw)OK{6r+g9SfYJXW#?{s4q3XB5(GKt|&5jquOL*dnloD7DvA*M?u>(aQH^p`_71TaBLc4fC0xW90FY7i}wB3{sR$`X3vP)2lc5;SH z0}c*I{I9sz9kd4NJvC^JK5HVfubyJp! zQ~c6|6Y#RNh+&eq#l%C)bUaz7p4elOI=VUcx@!CVUeKts=FXtTLQ0*P3Anxjp={kD zb{o4qHA$*fc;d;thU8hKdUu2iMKV?+Bmg6C?Uk8~Lxe-)`-6jpJl(H}M9LK>qk$;1 zL~n;7F18$JXkbMq&MT(C$t%bqz|8Gp;L(>nk~*W!U^m9d6%J8P!X*1`^na`66dGQTj?}gTr@Gi|17mqlvn26sF$9EUgG5HZ_!2fOa|^bLEKvn3h?rd-RG1aTn}e4 z>KE_m%G(!QAf}a-GQ6J|+36*q!%41^5tK_$(_z^7WVH08sCqtl6U>T|;$=cJ>bQwv zrrK=vne)L>VqrAPAL*+=+ZheutB9Fm5t?`ZNo$T^rz^|`BVB54k;TIDrq|paN=s2H<2@CvQc*0)3+GwT-J1)`!cf`o0>d3b+iX7dm9O4DR=Cfl2 z!DO?XG(9l;3ixrxD_I|m06oNc{f+gylHT#k)CB!#WZEd4cH8Nu`zj^9amzMHB?kBC z?OUZXrY>V*swn$c_|e-fBFXS?RhWCulp%z*`-UfaFlU>_(B>;ULvXplqFsn=xj{csR~Gv!KHx1!){!A>2bn|) ziOD4VJ>B&NiG=%Wp(AK8)$D7d_aGS52oeP@8%Kp8+A;5ZN$Zir`|J#MX#nG7&AB(F zhO><3lCbYan(?m`{YjN)rfr|o1_`A! z#m>hTpvy!mgTW?6#RMSBtoWUK?{H4BdMCu-KE3~<@~wO^uQ1>Q**mk3)sZ6%e)P0? zrIK`7BwFhGs}1p*@1dXeGPUM-AJG=tg+o}2_Zl=UqCR{%_qYDCpbk4aq%Hpa$Cexk zCQwuZ7+47z{(1fa1w#kSpZVz&mm8 z&G1;SfOl+7oEe`1upq#IX~6Vfz>og`e*yVFC9Jp=GrS-9AI$K;UW3L7LSn=*m=pZC zC2NicMgj@EMHwe(4*%m;wmBXseO#+KCE%}IU^vd7Qu@n3B(X3za5Oe?WHh!l{vp-R z)ykVjLR1Ga2(AC&z%t(SB7Dnn_d0El`1X!1pu= zeqw=uT#@`;mjBTHVEq*}_k|Al)o>7yWFQJC$xn$3_`%7uf-TGef7VOP!rDZ{(a!$A zqWu*|ZPI6w1#CZfU=+Jwam7G?P=DZlLu2{9a14~S?ZjX}Pk5F+f;R zb>L{_z#1L{FG}F`XM*PZ7n(Ex*cK+XCXT}Lbx#Feq<=zzuLxgA|1((h zZ5)#g#*Z%gBFzar8~FSZ@S^yIU@r5|fajj}&#n6+etowL$btb%#qNpYZ=k|8E;1 z{4xkW50F^$${-+ij%I%yAmeZ>@B|(I^EV>{X9FWU8$$z=zdrUHjpcs{{eQ2XUwlxG z1GU183$=iM`8+UI=X%P#25RT~-`Z{bj|b(6k>VCC;Gv%%_5=F;i95Ey1T#|o0l~NY zWBBE>!~;uG1Kz@k!y$u<^S1nB2#x^Wrq%p$yOaWr?yn{@KOr|q1uV7}csK!(ivvGU#wOtPt6}m)KWBx0&MM|;U=!zSgZ4vcDwP^R zN8r=?z=44Jm%@hMKj#p5&hf`i?w>k-h5$|gJurJ8u&@3)+Qr8{Bl!MA{MU+pon>q$ z!5e9S6+Q({qb$G3fSK?N5P$vz-56*=WUu9A zlj8^Hxo`hoAg9~4+UI#M9auS_ar~6R@}G%3|0VvJ{hwAD*gs_k0RbxqX2)bQbFui_ zA|P56Z7LersI|aWq5CBh*N;ph&zVGI#Ge~R-oVzx`k$Iss9g(81_)^djvT*&h%28< z|2ya(CfHS(k^mkcCz+YEf34b|YW;bc zG^>cKp$?R#1lTgqVa@+cIW5l^v1g3<^Jr~g{XZ@J9u-xMy;B6NS~F0pU(H{&;~6FR zjFPgmcK@O2-!mX)=&90xI>!9l=&aKH%y{+8khcaJ*}p*Q6`#z^fkI3G$BkdRk=Vd9 zMDiJ;Vryk<=V~hg>`kf`Ca(X2qu3EqT?Wcj0+i`j!$ll@#>J&8qr~x8|1o|_SmS{S zO#Zm-Wli#ZOFD&0GEP@RKpZk2Ugtd+1*SCIin1{gjs0|CkspjZK`afPuz-nfm^k z_1CEnYU3|it$%#W14#I3h5n4dl6*2311`;LdHy=$bN>V4wS$X+kb#qlwT12TEC6_> z+$XsYoB?h4dD`LrsRke*liz#Q${lp9=q4&a=S$&!np`McD7awKSOhUl*J3_`e7JRAtd; zLLhilNF}h!b3haSbs*7F{yjn5*3QP{&pQ84d8#yi%NanW%>b`o2LNNWe;_&9x!C_f z`rXL;ES?^wdanvlyhosTKyCe$RMr240)Cj)e^m7&@b7=9uU&xl_D5uH83W+5@b~S3 z_C(O!3hdqlm>?iPW&V_qwEisQU&;Xdw~(KGfd9OBdajBu^KFh2aNk0U_SeM|v&sKm z%75C;D`@O>Mr9PQe11rM=dVR}pS%i=*zGxEw diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index 7603650..ed81cb0 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 189L; + public static final long BUILD_NUMBER = 190L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } From b72c4611c40b11f75e415fd21354ed63959d6fd2 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sun, 12 Nov 2006 11:18:58 +0000 Subject: [PATCH 009/109] Added bzip2 library from ant. --- lib/apache-ant-1.6.5-bzip2.jar | Bin 0 -> 22195 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/apache-ant-1.6.5-bzip2.jar diff --git a/lib/apache-ant-1.6.5-bzip2.jar b/lib/apache-ant-1.6.5-bzip2.jar new file mode 100644 index 0000000000000000000000000000000000000000..344c99f85d34b5ed118ae5e9b0e2a49c918d0608 GIT binary patch literal 22195 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 Date: Sun, 26 Nov 2006 13:51:52 +0000 Subject: [PATCH 010/109] Added my own XML parser to the tree under org.catacombae.xml.parser. --- buildall.sh | 4 +- src/org/catacombae/xml/.cvsignore | 5 + src/org/catacombae/xml/parser/.cvsignore | 5 + src/org/catacombae/xml/parser/Ass.java | 977 ++++++ src/org/catacombae/xml/parser/Ass.jj | 556 +++ .../catacombae/xml/parser/AssConstants.java | 183 + .../xml/parser/AssTokenManager.java | 3052 +++++++++++++++++ src/org/catacombae/xml/parser/Attribute.java | 38 + .../xml/parser/DebugXMLContentHandler.java | 80 + src/org/catacombae/xml/parser/ExternalID.java | 19 + .../xml/parser/MutableInputStreamReader.java | 28 + .../catacombae/xml/parser/ParseException.java | 192 ++ .../xml/parser/SimpleCharStream.java | 439 +++ src/org/catacombae/xml/parser/Token.java | 81 + .../catacombae/xml/parser/TokenMgrError.java | 133 + .../xml/parser/UTF16BEInputStream.java | 108 + .../xml/parser/XMLContentHandler.java | 17 + 17 files changed, 5915 insertions(+), 2 deletions(-) create mode 100644 src/org/catacombae/xml/.cvsignore create mode 100644 src/org/catacombae/xml/parser/.cvsignore create mode 100644 src/org/catacombae/xml/parser/Ass.java create mode 100644 src/org/catacombae/xml/parser/Ass.jj create mode 100644 src/org/catacombae/xml/parser/AssConstants.java create mode 100644 src/org/catacombae/xml/parser/AssTokenManager.java create mode 100644 src/org/catacombae/xml/parser/Attribute.java create mode 100644 src/org/catacombae/xml/parser/DebugXMLContentHandler.java create mode 100644 src/org/catacombae/xml/parser/ExternalID.java create mode 100644 src/org/catacombae/xml/parser/MutableInputStreamReader.java create mode 100644 src/org/catacombae/xml/parser/ParseException.java create mode 100644 src/org/catacombae/xml/parser/SimpleCharStream.java create mode 100644 src/org/catacombae/xml/parser/Token.java create mode 100644 src/org/catacombae/xml/parser/TokenMgrError.java create mode 100644 src/org/catacombae/xml/parser/UTF16BEInputStream.java create mode 100644 src/org/catacombae/xml/parser/XMLContentHandler.java diff --git a/buildall.sh b/buildall.sh index 37f15a3..70471a0 100644 --- a/buildall.sh +++ b/buildall.sh @@ -46,8 +46,8 @@ JAVAC_EXIT_CODE=$? if [ "$JAVAC_EXIT_CODE" != 0 ]; then error else - echo "Compiling org.catacombae.dmgx.gui..." - javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation -Xlint:unchecked $SOURCES_DIR/org/catacombae/dmgx/gui/*.java + echo "Compiling org.catacombae.xml.parser..." + javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation $SOURCES_DIR/org/catacombae/xml/parser/*.java JAVAC_EXIT_CODE=$? if [ "$JAVAC_EXIT_CODE" == 0 ]; then echo "Building jar-file..." diff --git a/src/org/catacombae/xml/.cvsignore b/src/org/catacombae/xml/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/catacombae/xml/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/xml/parser/.cvsignore b/src/org/catacombae/xml/parser/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/catacombae/xml/parser/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/xml/parser/Ass.java b/src/org/catacombae/xml/parser/Ass.java new file mode 100644 index 0000000..9c44c60 --- /dev/null +++ b/src/org/catacombae/xml/parser/Ass.java @@ -0,0 +1,977 @@ +/* Generated By:JavaCC: Do not edit this line. Ass.java */ +package org.catacombae.xml.parser; + +import java.util.*; +import java.io.*; + +class Ass implements AssConstants { + private MutableInputStreamReader usedReader; + private XMLContentHandler contentHandler; + + public static void main(String[] args) throws Exception { + MutableInputStreamReader usedReader; + if(args.length == 1) + usedReader = new MutableInputStreamReader(new FileInputStream(args[0]), "US-ASCII"); + else + usedReader = new MutableInputStreamReader(System.in, "US-ASCII"); + Ass a = new Ass(usedReader); + a.usedReader = usedReader; + a.contentHandler = new DebugXMLContentHandler(); + a.xmlDocument(); + } + + final public void xmlDocument() throws ParseException { + prolog(); + element(); + misc(); + jj_consume_token(0); + } + + final public void prolog() throws ParseException { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STARTXMLDECL: + xmlDecl(); + break; + default: + jj_la1[0] = jj_gen; + ; + } + label_1: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STARTPI: + case STARTCOMMENT: + case DEFAULT_S: + ; + break; + default: + jj_la1[1] = jj_gen; + break label_1; + } + misc(); + } + label_2: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STARTDOCTYPEDECL: + ; + break; + default: + jj_la1[2] = jj_gen; + break label_2; + } + doctypeDecl(); + misc(); + } + } + + final public void xmlDecl() throws ParseException { + String version, encoding = null; + Boolean standalone = null; + jj_consume_token(STARTXMLDECL); + // Takes us to state WithinXMLDecl + version = versionInfo(); + if (jj_2_1(2)) { + encoding = encodingDecl(); + } else { + ; + } + if (jj_2_2(2)) { + standalone = sdDecl(); + } else { + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case XMLDECL_S: + jj_consume_token(XMLDECL_S); + break; + default: + jj_la1[3] = jj_gen; + ; + } + jj_consume_token(ENDXMLDECL); + contentHandler.xmlDecl(version, encoding, standalone); + } + + final public String versionInfo() throws ParseException { + Token versionString; + jj_consume_token(XMLDECL_S); + jj_consume_token(VERSION); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case VERSION_DOPEN: + jj_consume_token(VERSION_DOPEN); + versionString = jj_consume_token(VER); + jj_consume_token(VERSION_DCLOSE); + break; + case VERSION_SOPEN: + jj_consume_token(VERSION_SOPEN); + versionString = jj_consume_token(VER); + jj_consume_token(VERSION_SCLOSE); + break; + default: + jj_la1[4] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return versionString.image;} + throw new Error("Missing return statement in function"); + } + + final public String encodingDecl() throws ParseException { + Token encoding; + jj_consume_token(XMLDECL_S); + jj_consume_token(ENCODING); + jj_consume_token(XMLDECL_EQ); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case XD_SQUOTE_OPEN: + jj_consume_token(XD_SQUOTE_OPEN); + encoding = jj_consume_token(XD_SQUOTE_STRING); + jj_consume_token(XD_SQUOTE_CLOSE); + break; + case XD_DQUOTE_OPEN: + jj_consume_token(XD_DQUOTE_OPEN); + encoding = jj_consume_token(XD_DQUOTE_STRING); + jj_consume_token(XD_DQUOTE_CLOSE); + break; + default: + jj_la1[5] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + try { usedReader.changeEncoding(encoding.image); } catch(Exception e) { {if (true) throw new RuntimeException(e);} } + {if (true) return encoding.image;} + throw new Error("Missing return statement in function"); + } + + final public boolean sdDecl() throws ParseException { + boolean b; + jj_consume_token(XMLDECL_S); + jj_consume_token(STANDALONE); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STANDALONE_DOPEN: + jj_consume_token(STANDALONE_DOPEN); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STANDALONE_YES: + jj_consume_token(STANDALONE_YES); + b = true; + break; + case STANDALONE_NO: + jj_consume_token(STANDALONE_NO); + b = false; + break; + default: + jj_la1[6] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(STANDALONE_DCLOSE); + break; + case STANDALONE_SOPEN: + jj_consume_token(STANDALONE_SOPEN); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STANDALONE_YES: + jj_consume_token(STANDALONE_YES); + b = true; + break; + case STANDALONE_NO: + jj_consume_token(STANDALONE_NO); + b = false; + break; + default: + jj_la1[7] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(STANDALONE_SCLOSE); + break; + default: + jj_la1[8] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return b;} + throw new Error("Missing return statement in function"); + } + +// Needs more work to support inline DTD declarations + final public void doctypeDecl() throws ParseException { + Token name; + jj_consume_token(STARTDOCTYPEDECL); + jj_consume_token(WDD_S); + name = jj_consume_token(WDD_NAME); + if (jj_2_3(2)) { + jj_consume_token(WDD_S); + jj_consume_token(EXTERNALID); + } else { + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WDD_S: + jj_consume_token(WDD_S); + break; + default: + jj_la1[9] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case BEGIN_INTSUBSET: + jj_consume_token(BEGIN_INTSUBSET); + intSubset(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WDD_S: + jj_consume_token(WDD_S); + break; + default: + jj_la1[10] = jj_gen; + ; + } + break; + default: + jj_la1[11] = jj_gen; + ; + } + jj_consume_token(ENDDOCTYPEDECL); + contentHandler.doctype(name.image, null); + } + + final public void intSubset() throws ParseException { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WHATEVER: + jj_consume_token(WHATEVER); + break; + default: + jj_la1[12] = jj_gen; + ; + } + jj_consume_token(END_INTSUBSET); + } + +//void markupDecl() : +//{} +//{ +// +//} + final public void misc() throws ParseException { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STARTCOMMENT: + comment(); + break; + case STARTPI: + pi(); + break; + case DEFAULT_S: + jj_consume_token(DEFAULT_S); + break; + default: + jj_la1[13] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + + final public void comment() throws ParseException { + Token t; + StringBuilder sb = new StringBuilder(); + jj_consume_token(STARTCOMMENT); + label_3: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMENT_CHAR: + ; + break; + default: + jj_la1[14] = jj_gen; + break label_3; + } + t = jj_consume_token(COMMENT_CHAR); + sb.append(t.image); + } + jj_consume_token(ENDCOMMENT); + contentHandler.comment(sb.toString()); + } + + final public void pi() throws ParseException { + Token target; + StringBuilder content = null; + jj_consume_token(STARTPI); + target = jj_consume_token(PITARGET); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WITHINPI_S: + jj_consume_token(WITHINPI_S); + content = piContent(); + break; + case ENDPI: + jj_consume_token(ENDPI); + break; + default: + jj_la1[15] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + contentHandler.pi(target.image, content.toString()); + } + +// returns the content of the processor instruction, minus the trailing "?>" + final public StringBuilder piContent() throws ParseException { + Token t; + StringBuilder sb = new StringBuilder(); + label_4: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ENDPI: + jj_consume_token(ENDPI); + break; + case PC_CHAR: + t = jj_consume_token(PC_CHAR); + sb.append(t.image); + break; + default: + jj_la1[16] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ENDPI: + case PC_CHAR: + ; + break; + default: + jj_la1[17] = jj_gen; + break label_4; + } + } + {if (true) return sb;} + throw new Error("Missing return statement in function"); + } + +// SKIP: { +// " " | "\t" | "\n" | "\r" +//} + +// TOKEN: { +// < DQUOTE_STRING: (~["\""])+ > +// | < DQUOTE_CLOSE: "\"" > : WithinTag +//} +// TOKEN: { +// < SQUOTE_STRING: (~["'"])+ > +// | < SQUOTE_CLOSE: "'" > : WithinTag +//} + final public void element() throws ParseException { + Token name; + Attribute currentAttribute; + LinkedList attributes = new LinkedList(); + jj_consume_token(STARTTAG); + // DEFAULT -> WithinTag + name = jj_consume_token(WT_NAME); + label_5: + while (true) { + if (jj_2_4(2)) { + ; + } else { + break label_5; + } + jj_consume_token(WT_S); + currentAttribute = attribute(); + attributes.add(currentAttribute); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WT_S: + jj_consume_token(WT_S); + break; + default: + jj_la1[18] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EMPTY_ENDTAG: + jj_consume_token(EMPTY_ENDTAG); + contentHandler.emptyElement(name.image, attributes); + break; + case ENDTAG: + jj_consume_token(ENDTAG); + contentHandler.startElement(name.image, attributes); + content(); + etag(name); + break; + default: + jj_la1[19] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + + final public Attribute attribute() throws ParseException { + Token t, name; + LinkedList value = new LinkedList(); + name = jj_consume_token(WT_NAME); + jj_consume_token(WT_EQ); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WT_DQUOTE: + jj_consume_token(WT_DQUOTE); + label_6: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ATTR_DQUOTE_STRING: + case ATTR_REFERENCE: + ; + break; + default: + jj_la1[20] = jj_gen; + break label_6; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ATTR_DQUOTE_STRING: + t = jj_consume_token(ATTR_DQUOTE_STRING); + value.add(new Attribute.StringComponent(t.image)); + break; + case ATTR_REFERENCE: + t = jj_consume_token(ATTR_REFERENCE); + value.add(new Attribute.ReferenceComponent(t.image)); + break; + default: + jj_la1[21] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(ATTR_DQUOTE); + break; + case WT_SQUOTE: + jj_consume_token(WT_SQUOTE); + label_7: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ATTR_SQUOTE_STRING: + case ATTR_REFERENCE: + ; + break; + default: + jj_la1[22] = jj_gen; + break label_7; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ATTR_SQUOTE_STRING: + t = jj_consume_token(ATTR_SQUOTE_STRING); + value.add(new Attribute.StringComponent(t.image)); + break; + case ATTR_REFERENCE: + t = jj_consume_token(ATTR_REFERENCE); + value.add(new Attribute.ReferenceComponent(t.image)); + break; + default: + jj_la1[23] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(ATTR_SQUOTE); + break; + default: + jj_la1[24] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return new Attribute(name.image, new Attribute.Value(value));} + throw new Error("Missing return statement in function"); + } + + final public void etag(Token startName) throws ParseException { + Token name; + jj_consume_token(STARTCLOSINGTAG); + // DEFAULT -> WithinTag + name = jj_consume_token(WT_NAME); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WT_S: + jj_consume_token(WT_S); + break; + default: + jj_la1[25] = jj_gen; + ; + } + jj_consume_token(ENDTAG); + if(startName.image.equals(name.image)) + contentHandler.endElement(name.image); + else + {if (true) throw new ParseException("Expected \" 0) contentHandler.chardata(sb.toString()); sb = new StringBuilder(); + label_9: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STARTTAG: + case STARTPI: + case STARTCOMMENT: + case STARTCDATA: + case DEFAULT_REFERENCE: + ; + break; + default: + jj_la1[28] = jj_gen; + break label_9; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STARTTAG: + element(); + break; + case DEFAULT_REFERENCE: + t = jj_consume_token(DEFAULT_REFERENCE); + contentHandler.reference(t.image); + break; + case STARTCDATA: + cdSect(); + break; + case STARTPI: + pi(); + break; + case STARTCOMMENT: + comment(); + break; + default: + jj_la1[29] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_10: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DEFAULT_S: + case CHARDATA: + ; + break; + default: + jj_la1[30] = jj_gen; + break label_10; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case CHARDATA: + t = jj_consume_token(CHARDATA); + if(sb.length() != 0) sb.append(" "); sb.append(t.image); + break; + case DEFAULT_S: + jj_consume_token(DEFAULT_S); + break; + default: + jj_la1[31] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + if(sb.length() > 0) contentHandler.chardata(sb.toString()); sb = new StringBuilder(); + } + } + + final public void cdSect() throws ParseException { + Token t; + StringBuilder cdata = new StringBuilder(); + jj_consume_token(STARTCDATA); + label_11: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ENDCDATA: + case WCD_CHAR: + ; + break; + default: + jj_la1[32] = jj_gen; + break label_11; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ENDCDATA: + jj_consume_token(ENDCDATA); + break; + case WCD_CHAR: + t = jj_consume_token(WCD_CHAR); + cdata.append(t.image); + break; + default: + jj_la1[33] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + contentHandler.cdata(cdata.toString()); + } + + final private boolean jj_2_1(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_1(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(0, xla); } + } + + final private boolean jj_2_2(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_2(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(1, xla); } + } + + final private boolean jj_2_3(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_3(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(2, xla); } + } + + final private boolean jj_2_4(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_4(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(3, xla); } + } + + final private boolean jj_3R_13() { + if (jj_scan_token(XMLDECL_S)) return true; + if (jj_scan_token(STANDALONE)) return true; + return false; + } + + final private boolean jj_3R_14() { + if (jj_scan_token(WT_NAME)) return true; + return false; + } + + final private boolean jj_3_4() { + if (jj_scan_token(WT_S)) return true; + if (jj_3R_14()) return true; + return false; + } + + final private boolean jj_3_3() { + if (jj_scan_token(WDD_S)) return true; + if (jj_scan_token(EXTERNALID)) return true; + return false; + } + + final private boolean jj_3_2() { + if (jj_3R_13()) return true; + return false; + } + + final private boolean jj_3_1() { + if (jj_3R_12()) return true; + return false; + } + + final private boolean jj_3R_12() { + if (jj_scan_token(XMLDECL_S)) return true; + if (jj_scan_token(ENCODING)) return true; + return false; + } + + public AssTokenManager token_source; + SimpleCharStream jj_input_stream; + public Token token, jj_nt; + private int jj_ntk; + private Token jj_scanpos, jj_lastpos; + private int jj_la; + public boolean lookingAhead = false; + private boolean jj_semLA; + private int jj_gen; + final private int[] jj_la1 = new int[34]; + static private int[] jj_la1_0; + static private int[] jj_la1_1; + static private int[] jj_la1_2; + static { + jj_la1_0(); + jj_la1_1(); + jj_la1_2(); + } + private static void jj_la1_0() { + jj_la1_0 = new int[] {0x20000,0x290000,0x40000,0x2000000,0x0,0x18000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x290000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600000,0x600000,0x994000,0x994000,0x600000,0x600000,0x0,0x0,}; + } + private static void jj_la1_1() { + jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x50,0x0,0x6000,0x6000,0xa00,0x8000,0x8000,0x400000,0x1000000,0x0,0x8000000,0x90000000,0x10000000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; + } + private static void jj_la1_2() { + jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x8,0xc0,0x1400,0x1400,0x1800,0x1800,0x30,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x6000,}; + } + final private JJCalls[] jj_2_rtns = new JJCalls[4]; + private boolean jj_rescan = false; + private int jj_gc = 0; + + public Ass(java.io.InputStream stream) { + this(stream, null); + } + public Ass(java.io.InputStream stream, String encoding) { + try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } + token_source = new AssTokenManager(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 34; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public void ReInit(java.io.InputStream stream) { + ReInit(stream, null); + } + public void ReInit(java.io.InputStream stream, String encoding) { + try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } + token_source.ReInit(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 34; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public Ass(java.io.Reader stream) { + jj_input_stream = new SimpleCharStream(stream, 1, 1); + token_source = new AssTokenManager(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 34; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public void ReInit(java.io.Reader stream) { + jj_input_stream.ReInit(stream, 1, 1); + token_source.ReInit(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 34; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public Ass(AssTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 34; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public void ReInit(AssTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 34; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + final private Token jj_consume_token(int kind) throws ParseException { + Token oldToken; + if ((oldToken = token).next != null) token = token.next; + else token = token.next = token_source.getNextToken(); + jj_ntk = -1; + if (token.kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + for (int i = 0; i < jj_2_rtns.length; i++) { + JJCalls c = jj_2_rtns[i]; + while (c != null) { + if (c.gen < jj_gen) c.first = null; + c = c.next; + } + } + } + return token; + } + token = oldToken; + jj_kind = kind; + throw generateParseException(); + } + + static private final class LookaheadSuccess extends java.lang.Error { } + final private LookaheadSuccess jj_ls = new LookaheadSuccess(); + final private boolean jj_scan_token(int kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos.next == null) { + jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos.next; + } + } else { + jj_scanpos = jj_scanpos.next; + } + if (jj_rescan) { + int i = 0; Token tok = token; + while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } + if (tok != null) jj_add_error_token(kind, i); + } + if (jj_scanpos.kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; + return false; + } + + final public Token getNextToken() { + if (token.next != null) token = token.next; + else token = token.next = token_source.getNextToken(); + jj_ntk = -1; + jj_gen++; + return token; + } + + final public Token getToken(int index) { + Token t = lookingAhead ? jj_scanpos : token; + for (int i = 0; i < index; i++) { + if (t.next != null) t = t.next; + else t = t.next = token_source.getNextToken(); + } + return t; + } + + final private int jj_ntk() { + if ((jj_nt=token.next) == null) + return (jj_ntk = (token.next=token_source.getNextToken()).kind); + else + return (jj_ntk = jj_nt.kind); + } + + private java.util.Vector jj_expentries = new java.util.Vector(); + private int[] jj_expentry; + private int jj_kind = -1; + private int[] jj_lasttokens = new int[100]; + private int jj_endpos; + + private void jj_add_error_token(int kind, int pos) { + if (pos >= 100) return; + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + jj_expentry = new int[jj_endpos]; + for (int i = 0; i < jj_endpos; i++) { + jj_expentry[i] = jj_lasttokens[i]; + } + boolean exists = false; + for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { + int[] oldentry = (int[])(e.nextElement()); + if (oldentry.length == jj_expentry.length) { + exists = true; + for (int i = 0; i < jj_expentry.length; i++) { + if (oldentry[i] != jj_expentry[i]) { + exists = false; + break; + } + } + if (exists) break; + } + } + if (!exists) jj_expentries.addElement(jj_expentry); + if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } + } + + public ParseException generateParseException() { + jj_expentries.removeAllElements(); + boolean[] la1tokens = new boolean[79]; + for (int i = 0; i < 79; i++) { + la1tokens[i] = false; + } + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int i = 0; i < 34; i++) { + if (jj_la1[i] == jj_gen) { + for (int j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1< jj_gen) { + jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; + switch (i) { + case 0: jj_3_1(); break; + case 1: jj_3_2(); break; + case 2: jj_3_3(); break; + case 3: jj_3_4(); break; + } + } + p = p.next; + } while (p != null); + } catch(LookaheadSuccess ls) { } + } + jj_rescan = false; + } + + final private void jj_save(int index, int xla) { + JJCalls p = jj_2_rtns[index]; + while (p.gen > jj_gen) { + if (p.next == null) { p = p.next = new JJCalls(); break; } + p = p.next; + } + p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; + } + + static final class JJCalls { + int gen; + Token first; + int arg; + JJCalls next; + } + +} diff --git a/src/org/catacombae/xml/parser/Ass.jj b/src/org/catacombae/xml/parser/Ass.jj new file mode 100644 index 0000000..39fc89a --- /dev/null +++ b/src/org/catacombae/xml/parser/Ass.jj @@ -0,0 +1,556 @@ +options { + STATIC = false; + UNICODE_INPUT = true; +} + +PARSER_BEGIN(Ass) +package org.catacombae.xml.parser; + +import java.util.*; +import java.io.*; + +class Ass { + private MutableInputStreamReader usedReader; + private XMLContentHandler contentHandler; + + public static void main(String[] args) throws Exception { + MutableInputStreamReader usedReader; + if(args.length == 1) + usedReader = new MutableInputStreamReader(new FileInputStream(args[0]), "US-ASCII"); + else + usedReader = new MutableInputStreamReader(System.in, "US-ASCII"); + Ass a = new Ass(usedReader); + a.usedReader = usedReader; + a.contentHandler = new DebugXMLContentHandler(); + a.xmlDocument(); + } +} +PARSER_END(Ass) + +/* Tokens common to all states. */ +/* PROBLEMS: The class CHAR should be able to match the 10000-10FFFF range, but java's Unicode + escape does not allow it, since you have to convert it to UTF-16BE first. Do this conversion + asap! (might be non trivial) */ +<*> TOKEN: { + < #S: (" " | "\t" | "\n" | "\r")+ > + | < #CHAR: ["\u0009", "\n", "\r", "\u0020"-"\uD7FF", "\uE000"-"\uFFFD"/*, "\u10000"-"\u10FFFF"*/] > + | < #NAME: ( | "_" | ":" ) ()* > + | < #NAMECHAR: | | "." | "-" | "_" | ":" | | > + | < #LETTER: ( | ) > + | < #BASECHAR: ["\u0041"-"\u005A","\u0061"-"\u007A","\u00C0"-"\u00D6","\u00D8"-"\u00F6", + "\u00F8"-"\u00FF","\u0100"-"\u0131","\u0134"-"\u013E","\u0141"-"\u0148", + "\u014A"-"\u017E","\u0180"-"\u01C3","\u01CD"-"\u01F0","\u01F4"-"\u01F5", + "\u01FA"-"\u0217","\u0250"-"\u02A8","\u02BB"-"\u02C1","\u0386", + "\u0388"-"\u038A","\u038C","\u038E"-"\u03A1","\u03A3"-"\u03CE", + "\u03D0"-"\u03D6","\u03DA","\u03DC","\u03DE","\u03E0","\u03E2"-"\u03F3", + "\u0401"-"\u040C","\u040E"-"\u044F","\u0451"-"\u045C","\u045E"-"\u0481", + "\u0490"-"\u04C4","\u04C7"-"\u04C8","\u04CB"-"\u04CC","\u04D0"-"\u04EB", + "\u04EE"-"\u04F5","\u04F8"-"\u04F9","\u0531"-"\u0556","\u0559", + "\u0561"-"\u0586","\u05D0"-"\u05EA","\u05F0"-"\u05F2","\u0621"-"\u063A", + "\u0641"-"\u064A","\u0671"-"\u06B7","\u06BA"-"\u06BE","\u06C0"-"\u06CE", + "\u06D0"-"\u06D3","\u06D5","\u06E5"-"\u06E6","\u0905"-"\u0939","\u093D", + "\u0958"-"\u0961","\u0985"-"\u098C","\u098F"-"\u0990","\u0993"-"\u09A8", + "\u09AA"-"\u09B0","\u09B2","\u09B6"-"\u09B9","\u09DC"-"\u09DD", + "\u09DF"-"\u09E1","\u09F0"-"\u09F1","\u0A05"-"\u0A0A","\u0A0F"-"\u0A10", + "\u0A13"-"\u0A28","\u0A2A"-"\u0A30","\u0A32"-"\u0A33","\u0A35"-"\u0A36", + "\u0A38"-"\u0A39","\u0A59"-"\u0A5C","\u0A5E","\u0A72"-"\u0A74", + "\u0A85"-"\u0A8B","\u0A8D","\u0A8F"-"\u0A91","\u0A93"-"\u0AA8", + "\u0AAA"-"\u0AB0","\u0AB2"-"\u0AB3","\u0AB5"-"\u0AB9","\u0ABD","\u0AE0", + "\u0B05"-"\u0B0C","\u0B0F"-"\u0B10","\u0B13"-"\u0B28","\u0B2A"-"\u0B30", + "\u0B32"-"\u0B33","\u0B36"-"\u0B39","\u0B3D","\u0B5C"-"\u0B5D", + "\u0B5F"-"\u0B61","\u0B85"-"\u0B8A","\u0B8E"-"\u0B90","\u0B92"-"\u0B95", + "\u0B99"-"\u0B9A","\u0B9C","\u0B9E"-"\u0B9F","\u0BA3"-"\u0BA4", + "\u0BA8"-"\u0BAA","\u0BAE"-"\u0BB5","\u0BB7"-"\u0BB9","\u0C05"-"\u0C0C", + "\u0C0E"-"\u0C10","\u0C12"-"\u0C28","\u0C2A"-"\u0C33","\u0C35"-"\u0C39", + "\u0C60"-"\u0C61","\u0C85"-"\u0C8C","\u0C8E"-"\u0C90","\u0C92"-"\u0CA8", + "\u0CAA"-"\u0CB3","\u0CB5"-"\u0CB9","\u0CDE","\u0CE0"-"\u0CE1", + "\u0D05"-"\u0D0C","\u0D0E"-"\u0D10","\u0D12"-"\u0D28","\u0D2A"-"\u0D39", + "\u0D60"-"\u0D61","\u0E01"-"\u0E2E","\u0E30","\u0E32"-"\u0E33", + "\u0E40"-"\u0E45","\u0E81"-"\u0E82","\u0E84","\u0E87"-"\u0E88","\u0E8A", + "\u0E8D","\u0E94"-"\u0E97","\u0E99"-"\u0E9F","\u0EA1"-"\u0EA3","\u0EA5", + "\u0EA7","\u0EAA"-"\u0EAB","\u0EAD"-"\u0EAE","\u0EB0","\u0EB2"-"\u0EB3", + "\u0EBD","\u0EC0"-"\u0EC4","\u0F40"-"\u0F47","\u0F49"-"\u0F69", + "\u10A0"-"\u10C5","\u10D0"-"\u10F6","\u1100","\u1102"-"\u1103", + "\u1105"-"\u1107","\u1109","\u110B"-"\u110C","\u110E"-"\u1112","\u113C", + "\u113E","\u1140","\u114C","\u114E","\u1150","\u1154"-"\u1155","\u1159", + "\u115F"-"\u1161","\u1163","\u1165","\u1167","\u1169","\u116D"-"\u116E", + "\u1172"-"\u1173","\u1175","\u119E","\u11A8","\u11AB","\u11AE"-"\u11AF", + "\u11B7"-"\u11B8","\u11BA","\u11BC"-"\u11C2","\u11EB","\u11F0","\u11F9", + "\u1E00"-"\u1E9B","\u1EA0"-"\u1EF9","\u1F00"-"\u1F15","\u1F18"-"\u1F1D", + "\u1F20"-"\u1F45","\u1F48"-"\u1F4D","\u1F50"-"\u1F57","\u1F59","\u1F5B", + "\u1F5D","\u1F5F"-"\u1F7D","\u1F80"-"\u1FB4","\u1FB6"-"\u1FBC","\u1FBE", + "\u1FC2"-"\u1FC4","\u1FC6"-"\u1FCC","\u1FD0"-"\u1FD3","\u1FD6"-"\u1FDB", + "\u1FE0"-"\u1FEC","\u1FF2"-"\u1FF4","\u1FF6"-"\u1FFC","\u2126", + "\u212A"-"\u212B","\u212E","\u2180"-"\u2182","\u3041"-"\u3094", + "\u30A1"-"\u30FA","\u3105"-"\u312C","\uAC00"-"\uD7A3"] > + | < #IDEOGRAPHIC: ["\u4E00"-"\u9FA5","\u3007","\u3021"-"\u3029"] > + | < #COMBININGCHAR: ["\u0300"-"\u0345", "\u0360"-"\u0361", "\u0483"-"\u0486", + "\u0591"-"\u05A1", "\u05A3"-"\u05B9", "\u05BB"-"\u05BD", "\u05BF", + "\u05C1"-"\u05C2", "\u05C4", "\u064B"-"\u0652", "\u0670", + "\u06D6"-"\u06DC", "\u06DD"-"\u06DF", "\u06E0"-"\u06E4", + "\u06E7"-"\u06E8", "\u06EA"-"\u06ED", "\u0901"-"\u0903", "\u093C", + "\u093E"-"\u094C", "\u094D", "\u0951"-"\u0954", "\u0962"-"\u0963", + "\u0981"-"\u0983", "\u09BC", "\u09BE", "\u09BF", "\u09C0"-"\u09C4", + "\u09C7"-"\u09C8", "\u09CB"-"\u09CD", "\u09D7", "\u09E2"-"\u09E3", + "\u0A02", "\u0A3C", "\u0A3E", "\u0A3F", "\u0A40"-"\u0A42", + "\u0A47"-"\u0A48", "\u0A4B"-"\u0A4D", "\u0A70"-"\u0A71", + "\u0A81"-"\u0A83", "\u0ABC", "\u0ABE"-"\u0AC5", "\u0AC7"-"\u0AC9", + "\u0ACB"-"\u0ACD", "\u0B01"-"\u0B03", "\u0B3C", "\u0B3E"-"\u0B43", + "\u0B47"-"\u0B48", "\u0B4B"-"\u0B4D", "\u0B56"-"\u0B57", + "\u0B82"-"\u0B83", "\u0BBE"-"\u0BC2", "\u0BC6"-"\u0BC8", + "\u0BCA"-"\u0BCD", "\u0BD7", "\u0C01"-"\u0C03", "\u0C3E"-"\u0C44", + "\u0C46"-"\u0C48", "\u0C4A"-"\u0C4D", "\u0C55"-"\u0C56", + "\u0C82"-"\u0C83", "\u0CBE"-"\u0CC4", "\u0CC6"-"\u0CC8", + "\u0CCA"-"\u0CCD", "\u0CD5"-"\u0CD6", "\u0D02"-"\u0D03", + "\u0D3E"-"\u0D43", "\u0D46"-"\u0D48", "\u0D4A"-"\u0D4D", + "\u0D57", "\u0E31", "\u0E34"-"\u0E3A", "\u0E47"-"\u0E4E", "\u0EB1", + "\u0EB4"-"\u0EB9", "\u0EBB"-"\u0EBC", "\u0EC8"-"\u0ECD", + "\u0F18"-"\u0F19", "\u0F35", "\u0F37", "\u0F39", "\u0F3E", "\u0F3F", + "\u0F71"-"\u0F84", "\u0F86"-"\u0F8B", "\u0F90"-"\u0F95", "\u0F97", + "\u0F99"-"\u0FAD", "\u0FB1"-"\u0FB7", "\u0FB9", "\u20D0"-"\u20DC", + "\u20E1", "\u302A"-"\u302F", "\u3099", "\u309A"] > + | < #DIGIT: ["\u0030"-"\u0039", "\u0660"-"\u0669", "\u06F0"-"\u06F9", "\u0966"-"\u096F", + "\u09E6"-"\u09EF", "\u0A66"-"\u0A6F", "\u0AE6"-"\u0AEF", "\u0B66"-"\u0B6F", + "\u0BE7"-"\u0BEF", "\u0C66"-"\u0C6F", "\u0CE6"-"\u0CEF", "\u0D66"-"\u0D6F", + "\u0E50"-"\u0E59", "\u0ED0"-"\u0ED9", "\u0F20"-"\u0F29"] > + | < #EXTENDER: ["\u00B7", "\u02D0", "\u02D1", "\u0387", "\u0640", "\u0E46", "\u0EC6", + "\u3005", "\u3031"-"\u3035", "\u309D"-"\u309E", "\u30FC"-"\u30FE"] > + | < #REFERENCE: | > + | < #ENTITYREF: "&" ";" > + | < #CHARREF: "&#" (["0"-"9"])+ ";" | "&#x" (["0"-"9", "a"-"f", "A"-"F"])+ ";" > +} + +TOKEN : { + < STARTTAG: "<" > : WithinTag + | < STARTCLOSINGTAG: " : WithinTag + | < STARTPI: " : WithinPI + | < STARTXMLDECL: " : WithinXMLDecl + | < STARTDOCTYPEDECL: " : WithinDoctypeDecl + | < STARTCOMMENT: "" > : DEFAULT + | < COMMENT_ILLEGAL: "--" > + | < COMMENT_CHAR: > +} +void comment() : +{ + Token t; + StringBuilder sb = new StringBuilder(); +} +{ + // DEFAULT -> Comment + ( t = {sb.append(t.image);} )* + // Comment -> DEFAULT + { contentHandler.comment(sb.toString()); } +} + +/********************************************************* + * Here starts the parsing of the processor instructions * + *********************************************************/ + +/* There are two states within a PI, first the one recognizing the identifier of the target + of the processor instruction, represented by . Then the parser switches to a + state where everything is accepted except for the token. + The token of state DEFAULT takes us to the first PI state, labeled WithinPi, + the token (representing whitespace) takes us to the second PI state (where + everything goes except for ) and the token takes us back to DEFAULT. */ + + + TOKEN: { + < ENDPI: "?>" > : DEFAULT +} + + TOKEN: { + < ILLEGALTARGET: ( "X" | "x") ("M" | "m") ("L" | "l") ()* > + | < PITARGET: > + | < WITHINPI_S: > : WithinPIContent +} +void pi() : +{ + Token target; + StringBuilder content = null; +} +{ + + target = //{ System.out.println("target: " + target.image); } + ( content = piContent() | ) + { contentHandler.pi(target.image, content.toString()); } +} + + TOKEN: { + //< ENDPI: "?>" > : WithinXMLDecl + < PC_CHAR: > + //< NONCONTENT: ()* "?>" ()* > + //< CONTENT: ("?" (">" | ) | > +} + +// returns the content of the processor instruction, minus the trailing "?>" +StringBuilder piContent() : +{ + Token t; + StringBuilder sb = new StringBuilder(); +} +{ + ( + | + t = { sb.append(t.image); } )+ + { return sb; } +} + +/************************************************** + * Here starts the parsing of the actual elements * + **************************************************/ + TOKEN: { + < WT_NAME: > + | < WT_EQ: "=" > + | < WT_S: > + | < WT_DQUOTE: "\"" > : Attribute + | < WT_SQUOTE: "'" > : Attribute + | < EMPTY_ENDTAG: "/>" > : DEFAULT + | < ENDTAG: ">" > : DEFAULT +// | < DQUOTE_OPEN: "\"" > : WithinTag_DquoteString +// | < SQUOTE_OPEN: "'" > : WithinTag_SquoteString +} + +// SKIP: { +// " " | "\t" | "\n" | "\r" +//} + +// TOKEN: { +// < DQUOTE_STRING: (~["\""])+ > +// | < DQUOTE_CLOSE: "\"" > : WithinTag +//} +// TOKEN: { +// < SQUOTE_STRING: (~["'"])+ > +// | < SQUOTE_CLOSE: "'" > : WithinTag +//} + +void element() : +{ + Token name; + Attribute currentAttribute; + LinkedList attributes = new LinkedList(); +} +{ + // DEFAULT -> WithinTag + name = + ( LOOKAHEAD(2) currentAttribute = attribute() {attributes.add(currentAttribute);} )* + ()? + ( // WithinTag -> DEFAULT + { contentHandler.emptyElement(name.image, attributes); } + | + // WithinTag -> DEFAULT + { contentHandler.startElement(name.image, attributes); } + content() + etag(name) ) +} + + TOKEN: { + < ATTR_DQUOTE: "\"" > : WithinTag + | < ATTR_SQUOTE: "'" > : WithinTag + | < ATTR_DQUOTE_STRING: ~["<", "&", "\""] > + | < ATTR_SQUOTE_STRING: ~["<", "&", "'"] > + | < ATTR_REFERENCE: > +} + +Attribute attribute() : +{ + Token t, name; + LinkedList value = new LinkedList(); +} +{ + name = + ( + ( + // WithinTag -> Attribute + ( t = { value.add(new Attribute.StringComponent(t.image)); } | + t = { value.add(new Attribute.ReferenceComponent(t.image)); } )* + // Attribute -> WithinTag + ) + | + ( + // WithinTag -> Attribute + ( t = { value.add(new Attribute.StringComponent(t.image)); } | + t = { value.add(new Attribute.ReferenceComponent(t.image)); } )* + // Attribute -> WithinTag + ) + ) + { return new Attribute(name.image, new Attribute.Value(value)); } +} + +void etag(Token startName) : +{ + Token name; +} +{ + // DEFAULT -> WithinTag + name = ()? + // WithinTag -> DEFAULT + { if(startName.image.equals(name.image)) + contentHandler.endElement(name.image); + else + throw new ParseException("Expected \" {sb.append(t.image);} | )* + { if(sb.length() > 0) contentHandler.chardata(sb.toString()); sb = new StringBuilder(); } + ( ( element() | t = { contentHandler.reference(t.image); } | + cdSect() | pi() | comment() ) + (t = {if(sb.length() != 0) sb.append(" "); sb.append(t.image);} | )* + { if(sb.length() > 0) contentHandler.chardata(sb.toString()); sb = new StringBuilder(); } )* +} + +/****************************************** + * Here starts the parsing CDATA sections * + ******************************************/ + +/* To remove from a string of s we use a recursive method, cdSect_prime() */ + TOKEN: { + < ENDCDATA: "]]>" > : DEFAULT + | < WCD_CHAR: > +} +void cdSect() : +{ + Token t; + StringBuilder cdata = new StringBuilder(); +} +{ + // DEFAULT -> WithinCData + ( // WithinCData -> DEFAULT + | + t = {cdata.append(t.image);} )* + + { contentHandler.cdata(cdata.toString()); } +} + +/* +// Old but intresting code + +void xmlDocument() : +{ + Token tagName, optionName, optionValue; + LinkedList params = new LinkedList(); +} +{ + + tagName = + (optionName = + + ( + optionValue = + | + + optionValue = + ) + { params.add(new Param(optionName, optionValue)); } + )* + + { + System.out.println("Collected the following data:"); + System.out.println("Tag name: \"" + tagName.image + "\""); + System.out.println("Params:"); + for(Param p : params) + System.out.println(" \"" + p.id.image + "\" = \"" + p.string.image + "\""); + } + + + +} +*/ \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/AssConstants.java b/src/org/catacombae/xml/parser/AssConstants.java new file mode 100644 index 0000000..18423f3 --- /dev/null +++ b/src/org/catacombae/xml/parser/AssConstants.java @@ -0,0 +1,183 @@ +/* Generated By:JavaCC: Do not edit this line. AssConstants.java */ +package org.catacombae.xml.parser; + +public interface AssConstants { + + int EOF = 0; + int S = 1; + int CHAR = 2; + int NAME = 3; + int NAMECHAR = 4; + int LETTER = 5; + int BASECHAR = 6; + int IDEOGRAPHIC = 7; + int COMBININGCHAR = 8; + int DIGIT = 9; + int EXTENDER = 10; + int REFERENCE = 11; + int ENTITYREF = 12; + int CHARREF = 13; + int STARTTAG = 14; + int STARTCLOSINGTAG = 15; + int STARTPI = 16; + int STARTXMLDECL = 17; + int STARTDOCTYPEDECL = 18; + int STARTCOMMENT = 19; + int STARTCDATA = 20; + int DEFAULT_S = 21; + int CHARDATA = 22; + int DEFAULT_REFERENCE = 23; + int ENDXMLDECL = 24; + int XMLDECL_S = 25; + int XMLDECL_EQ = 26; + int XD_DQUOTE_OPEN = 27; + int XD_SQUOTE_OPEN = 28; + int VERSION = 29; + int ENCODING = 30; + int STANDALONE = 31; + int XD_DQUOTE_STRING = 32; + int XD_DQUOTE_CLOSE = 33; + int XD_SQUOTE_STRING = 34; + int XD_SQUOTE_CLOSE = 35; + int VERSION_DOPEN = 36; + int VERSION_DCLOSE = 37; + int VERSION_SOPEN = 38; + int VERSION_SCLOSE = 39; + int VER = 40; + int STANDALONE_DOPEN = 41; + int STANDALONE_DCLOSE = 42; + int STANDALONE_SOPEN = 43; + int STANDALONE_SCLOSE = 44; + int STANDALONE_YES = 45; + int STANDALONE_NO = 46; + int WDD_S = 47; + int WDD_NAME = 48; + int ENDDOCTYPEDECL = 49; + int EXTERNALID = 50; + int SYSTEMLITERAL = 51; + int PUBIDLITERAL = 52; + int PUBIDCHAR = 53; + int BEGIN_INTSUBSET = 54; + int END_INTSUBSET = 55; + int WHATEVER = 56; + int ENDCOMMENT = 57; + int COMMENT_ILLEGAL = 58; + int COMMENT_CHAR = 59; + int ENDPI = 60; + int ILLEGALTARGET = 61; + int PITARGET = 62; + int WITHINPI_S = 63; + int PC_CHAR = 64; + int WT_NAME = 65; + int WT_EQ = 66; + int WT_S = 67; + int WT_DQUOTE = 68; + int WT_SQUOTE = 69; + int EMPTY_ENDTAG = 70; + int ENDTAG = 71; + int ATTR_DQUOTE = 72; + int ATTR_SQUOTE = 73; + int ATTR_DQUOTE_STRING = 74; + int ATTR_SQUOTE_STRING = 75; + int ATTR_REFERENCE = 76; + int ENDCDATA = 77; + int WCD_CHAR = 78; + + int WithinCData = 0; + int Attribute = 1; + int WithinTag = 2; + int WithinPIContent = 3; + int WithinPI = 4; + int Comment = 5; + int WithinIntSubset = 6; + int WithinDoctypeDecl = 7; + int WithinXMLDecl_Standalone = 8; + int WithinXMLDecl_Version = 9; + int WithinXMLDecl_SquoteString = 10; + int WithinXMLDecl_DquoteString = 11; + int WithinXMLDecl = 12; + int DEFAULT = 13; + + String[] tokenImage = { + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\"<\"", + "\"", + "", + "", + "\"?>\"", + "", + "\"=\"", + "\"\\\"\"", + "\"\\\'\"", + "\"version\"", + "\"encoding\"", + "\"standalone\"", + "", + "\"\\\"\"", + "", + "\"\\\'\"", + "\"=\\\"\"", + "\"\\\"\"", + "\"=\\\'\"", + "\"\\\'\"", + "\"1.0\"", + "\"=\\\"\"", + "\"\\\"\"", + "\"=\\\'\"", + "\"\\\'\"", + "\"yes\"", + "\"no\"", + "", + "", + "\">\"", + "", + "", + "", + "", + "\"[\"", + "\"]\"", + "", + "\"-->\"", + "\"--\"", + "", + "\"?>\"", + "", + "", + "", + "", + "", + "\"=\"", + "", + "\"\\\"\"", + "\"\\\'\"", + "\"/>\"", + "\">\"", + "\"\\\"\"", + "\"\\\'\"", + "", + "", + "", + "\"]]>\"", + "", + }; + +} diff --git a/src/org/catacombae/xml/parser/AssTokenManager.java b/src/org/catacombae/xml/parser/AssTokenManager.java new file mode 100644 index 0000000..1fa6c1f --- /dev/null +++ b/src/org/catacombae/xml/parser/AssTokenManager.java @@ -0,0 +1,3052 @@ +/* Generated By:JavaCC: Do not edit this line. AssTokenManager.java */ +package org.catacombae.xml.parser; +import java.util.*; +import java.io.*; + +public class AssTokenManager implements AssConstants +{ + public java.io.PrintStream debugStream = System.out; + public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } +private final int jjStopStringLiteralDfa_1(int pos, long active0, long active1) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_1(int pos, long active0, long active1) +{ + return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0, active1), pos + 1); +} +private final int jjStopAtPos(int pos, int kind) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} +private final int jjStartNfaWithStates_1(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_1(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_1() +{ + switch(curChar) + { + case 34: + return jjStopAtPos(0, 72); + case 39: + return jjStopAtPos(0, 73); + default : + return jjMoveNfa_1(0, 0); + } +} +private final void jjCheckNAdd(int state) +{ + if (jjrounds[state] != jjround) + { + jjstateSet[jjnewStateCnt++] = state; + jjrounds[state] = jjround; + } +} +private final void jjAddStates(int start, int end) +{ + do { + jjstateSet[jjnewStateCnt++] = jjnextStates[start]; + } while (start++ != end); +} +private final void jjCheckNAddTwoStates(int state1, int state2) +{ + jjCheckNAdd(state1); + jjCheckNAdd(state2); +} +private final void jjCheckNAddStates(int start, int end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} +private final void jjCheckNAddStates(int start) +{ + jjCheckNAdd(jjnextStates[start]); + jjCheckNAdd(jjnextStates[start + 1]); +} +static final long[] jjbitVec0 = { + 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL +}; +static final long[] jjbitVec2 = { + 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL +}; +static final long[] jjbitVec3 = { + 0x0L, 0xffffffffffffc000L, 0xfffff0007fffffffL, 0x7fffffL +}; +static final long[] jjbitVec4 = { + 0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL +}; +static final long[] jjbitVec5 = { + 0x7ff3ffffffffffffL, 0x7ffffffffffffdfeL, 0xffffffffffffffffL, 0xfc31ffffffffe00fL +}; +static final long[] jjbitVec6 = { + 0xffffffL, 0xffffffffffff0000L, 0xf80001ffffffffffL, 0x3L +}; +static final long[] jjbitVec7 = { + 0x0L, 0x0L, 0xfffffffbffffd740L, 0xffffd547f7fffL +}; +static final long[] jjbitVec8 = { + 0xffffffffffffdffeL, 0xffffffffdffeffffL, 0xffffffffffff0003L, 0x33fcfffffff199fL +}; +static final long[] jjbitVec9 = { + 0xfffe000000000000L, 0xfffffffe027fffffL, 0x7fL, 0x707ffffff0000L +}; +static final long[] jjbitVec10 = { + 0x7fffffe00000000L, 0xfffe0000000007feL, 0x7cffffffffffffffL, 0x60002f7fffL +}; +static final long[] jjbitVec11 = { + 0x23ffffffffffffe0L, 0x3ff000000L, 0x3c5fdfffff99fe0L, 0x30003b0000000L +}; +static final long[] jjbitVec12 = { + 0x36dfdfffff987e0L, 0x1c00005e000000L, 0x23edfdfffffbafe0L, 0x100000000L +}; +static final long[] jjbitVec13 = { + 0x23cdfdfffff99fe0L, 0x3b0000000L, 0x3bfc718d63dc7e0L, 0x0L +}; +static final long[] jjbitVec14 = { + 0x3effdfffffddfe0L, 0x300000000L, 0x3effdfffffddfe0L, 0x340000000L +}; +static final long[] jjbitVec15 = { + 0x3fffdfffffddfe0L, 0x300000000L, 0x0L, 0x0L +}; +static final long[] jjbitVec16 = { + 0xd7ffffffffffeL, 0x3fL, 0x200d6caefef02596L, 0x1fL +}; +static final long[] jjbitVec17 = { + 0x0L, 0x3fffffffeffL, 0x0L, 0x0L +}; +static final long[] jjbitVec18 = { + 0x0L, 0x0L, 0xffffffff00000000L, 0x7fffffffff003fL +}; +static final long[] jjbitVec19 = { + 0x500000000007daedL, 0x2c62ab82315001L, 0xf580c90040000000L, 0x201080000000007L +}; +static final long[] jjbitVec20 = { + 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffff0fffffffL, 0x3ffffffffffffffL +}; +static final long[] jjbitVec21 = { + 0xffffffff3f3fffffL, 0x3fffffffaaff3f3fL, 0x5fdfffffffffffffL, 0x1fdc1fff0fcf1fdcL +}; +static final long[] jjbitVec22 = { + 0x4c4000000000L, 0x0L, 0x7L, 0x0L +}; +static final long[] jjbitVec23 = { + 0x3fe00000080L, 0xfffffffffffffffeL, 0xfffffffe001fffffL, 0x7ffffffffffffffL +}; +static final long[] jjbitVec24 = { + 0x1fffffffffe0L, 0x0L, 0x0L, 0x0L +}; +static final long[] jjbitVec25 = { + 0xffffffffffffffffL, 0xffffffffffffffffL, 0x3fffffffffL, 0x0L +}; +static final long[] jjbitVec26 = { + 0xffffffffffffffffL, 0xffffffffffffffffL, 0xfffffffffL, 0x0L +}; +static final long[] jjbitVec27 = { + 0x0L, 0x0L, 0x80000000000000L, 0xff7fffffff7fffffL +}; +static final long[] jjbitVec28 = { + 0xffffffL, 0xffffffffffff0000L, 0xf80001ffffffffffL, 0x30003L +}; +static final long[] jjbitVec29 = { + 0xffffffffffffffffL, 0x30000003fL, 0xfffffffbffffd7c0L, 0xffffd547f7fffL +}; +static final long[] jjbitVec30 = { + 0xffffffffffffdffeL, 0xffffffffdffeffffL, 0xffffffffffff007bL, 0x33fcfffffff199fL +}; +static final long[] jjbitVec31 = { + 0xfffe000000000000L, 0xfffffffe027fffffL, 0xbbfffffbfffe007fL, 0x707ffffff0016L +}; +static final long[] jjbitVec32 = { + 0x7fffffe00000000L, 0xffff03ff0007ffffL, 0x7cffffffffffffffL, 0x3ff3dffffef7fffL +}; +static final long[] jjbitVec33 = { + 0xf3ffffffffffffeeL, 0xffcfff1e3fffL, 0xd3c5fdfffff99feeL, 0x3ffcfb080399fL +}; +static final long[] jjbitVec34 = { + 0xd36dfdfffff987e4L, 0x1fffc05e003987L, 0xf3edfdfffffbafeeL, 0xffc100003bbfL +}; +static final long[] jjbitVec35 = { + 0xf3cdfdfffff99feeL, 0xffc3b0c0398fL, 0xc3bfc718d63dc7ecL, 0xff8000803dc7L +}; +static final long[] jjbitVec36 = { + 0xc3effdfffffddfeeL, 0xffc300603ddfL, 0xc3effdfffffddfecL, 0xffc340603ddfL +}; +static final long[] jjbitVec37 = { + 0xc3fffdfffffddfecL, 0xffc300803dcfL, 0x0L, 0x0L +}; +static final long[] jjbitVec38 = { + 0x7ff7ffffffffffeL, 0x3ff7fffL, 0x3bff6caefef02596L, 0x3ff3f5fL +}; +static final long[] jjbitVec39 = { + 0xc2a003ff03000000L, 0xfffe03fffffffeffL, 0x2fe3ffffebf0fdfL, 0x0L +}; +static final long[] jjbitVec40 = { + 0x0L, 0x0L, 0x0L, 0x21fff0000L +}; +static final long[] jjbitVec41 = { + 0x3efffe000000a0L, 0xfffffffffffffffeL, 0xfffffffe661fffffL, 0x77ffffffffffffffL +}; +private final int jjMoveNfa_1(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 12; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xefffff3fffffffffL & l) != 0L) + { + if (kind > 75) + kind = 75; + } + else if (curChar == 38) + jjAddStates(0, 1); + if ((0xefffffbbffffffffL & l) != 0L) + { + if (kind > 74) + kind = 74; + } + else if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 3; + break; + case 1: + if ((0xefffff3fffffffffL & l) != 0L && kind > 75) + kind = 75; + break; + case 2: + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 3; + break; + case 3: + if (curChar == 58) + jjCheckNAddTwoStates(4, 5); + break; + case 4: + if ((0x7ff600000000000L & l) != 0L) + jjCheckNAddTwoStates(4, 5); + break; + case 5: + if (curChar == 59 && kind > 76) + kind = 76; + break; + case 6: + if (curChar == 38) + jjAddStates(0, 1); + break; + case 8: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(8, 5); + break; + case 9: + if (curChar == 35) + jjstateSet[jjnewStateCnt++] = 7; + break; + case 10: + if (curChar == 35) + jjCheckNAdd(11); + break; + case 11: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(11, 5); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (kind > 75) + kind = 75; + if (kind > 74) + kind = 74; + break; + case 1: + if (kind > 75) + kind = 75; + break; + case 3: + case 4: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddTwoStates(4, 5); + break; + case 7: + if (curChar == 120) + jjCheckNAdd(8); + break; + case 8: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddTwoStates(8, 5); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 74) + kind = 74; + } + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 75) + kind = 75; + } + break; + case 1: + if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 75) + kind = 75; + break; + case 3: + if (jjCanMove_1(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(4, 5); + break; + case 4: + if (jjCanMove_2(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(4, 5); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 12 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_6(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_6(int pos, long active0) +{ + return jjMoveNfa_6(jjStopStringLiteralDfa_6(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_6(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_6(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_6() +{ + switch(curChar) + { + case 93: + return jjStopAtPos(0, 55); + default : + return jjMoveNfa_6(0, 0); + } +} +private final int jjMoveNfa_6(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + kind = 56; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xffffffffdfffffffL & l) == 0L) + break; + kind = 56; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 56) + kind = 56; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_7(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_7(int pos, long active0) +{ + return jjMoveNfa_7(jjStopStringLiteralDfa_7(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_7(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_7(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_7() +{ + switch(curChar) + { + case 62: + return jjStopAtPos(0, 49); + case 91: + return jjStopAtPos(0, 54); + default : + return jjMoveNfa_7(1, 0); + } +} +private final int jjMoveNfa_7(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 34; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 1: + if ((0x100002600L & l) != 0L) + { + if (kind > 47) + kind = 47; + jjCheckNAdd(0); + } + else if (curChar == 58) + { + if (kind > 48) + kind = 48; + jjCheckNAdd(2); + } + break; + case 0: + if ((0x100002600L & l) == 0L) + break; + if (kind > 47) + kind = 47; + jjCheckNAdd(0); + break; + case 2: + if ((0x7ff600000000000L & l) == 0L) + break; + if (kind > 48) + kind = 48; + jjCheckNAdd(2); + break; + case 4: + if ((0x100002600L & l) != 0L) + jjAddStates(2, 4); + break; + case 5: + if (curChar == 34) + jjCheckNAddTwoStates(6, 7); + break; + case 6: + if ((0xfffffffbffffffffL & l) != 0L) + jjCheckNAddTwoStates(6, 7); + break; + case 7: + if (curChar == 34 && kind > 50) + kind = 50; + break; + case 8: + if (curChar == 39) + jjCheckNAddTwoStates(9, 10); + break; + case 9: + if ((0xffffff7fffffffffL & l) != 0L) + jjCheckNAddTwoStates(9, 10); + break; + case 10: + if (curChar == 39 && kind > 50) + kind = 50; + break; + case 17: + if ((0x100002600L & l) != 0L) + jjAddStates(5, 7); + break; + case 18: + if (curChar == 34) + jjCheckNAddTwoStates(19, 20); + break; + case 19: + if ((0xafffffbb00002400L & l) != 0L) + jjCheckNAddTwoStates(19, 20); + break; + case 20: + if (curChar == 34) + jjCheckNAdd(21); + break; + case 21: + if ((0x100002600L & l) != 0L) + jjCheckNAddStates(8, 10); + break; + case 22: + if (curChar == 34) + jjCheckNAddTwoStates(23, 7); + break; + case 23: + if ((0xfffffffbffffffffL & l) != 0L) + jjCheckNAddTwoStates(23, 7); + break; + case 24: + if (curChar == 39) + jjCheckNAddTwoStates(25, 10); + break; + case 25: + if ((0xffffff7fffffffffL & l) != 0L) + jjCheckNAddTwoStates(25, 10); + break; + case 26: + if (curChar == 39) + jjCheckNAddTwoStates(27, 28); + break; + case 27: + if ((0xafffff3b00002400L & l) != 0L) + jjCheckNAddTwoStates(27, 28); + break; + case 28: + if (curChar == 39) + jjCheckNAdd(21); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 1: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 48) + kind = 48; + jjCheckNAdd(2); + } + if (curChar == 80) + jjstateSet[jjnewStateCnt++] = 32; + else if (curChar == 83) + jjstateSet[jjnewStateCnt++] = 14; + break; + case 2: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 48) + kind = 48; + jjCheckNAdd(2); + break; + case 3: + if (curChar == 77) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 6: + jjCheckNAddTwoStates(6, 7); + break; + case 9: + jjCheckNAddTwoStates(9, 10); + break; + case 11: + if (curChar == 69) + jjstateSet[jjnewStateCnt++] = 3; + break; + case 12: + if (curChar == 84) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 13: + if (curChar == 83) + jjstateSet[jjnewStateCnt++] = 12; + break; + case 14: + if (curChar == 89) + jjstateSet[jjnewStateCnt++] = 13; + break; + case 15: + if (curChar == 83) + jjstateSet[jjnewStateCnt++] = 14; + break; + case 16: + if (curChar == 67) + jjstateSet[jjnewStateCnt++] = 17; + break; + case 19: + if ((0x7fffffe87ffffffL & l) != 0L) + jjAddStates(11, 12); + break; + case 23: + jjCheckNAddTwoStates(23, 7); + break; + case 25: + jjCheckNAddTwoStates(25, 10); + break; + case 27: + if ((0x7fffffe87ffffffL & l) != 0L) + jjAddStates(13, 14); + break; + case 29: + if (curChar == 73) + jjstateSet[jjnewStateCnt++] = 16; + break; + case 30: + if (curChar == 76) + jjstateSet[jjnewStateCnt++] = 29; + break; + case 31: + if (curChar == 66) + jjstateSet[jjnewStateCnt++] = 30; + break; + case 32: + if (curChar == 85) + jjstateSet[jjnewStateCnt++] = 31; + break; + case 33: + if (curChar == 80) + jjstateSet[jjnewStateCnt++] = 32; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 1: + if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) + break; + if (kind > 48) + kind = 48; + jjCheckNAdd(2); + break; + case 2: + if (!jjCanMove_2(hiByte, i1, i2, l1, l2)) + break; + if (kind > 48) + kind = 48; + jjCheckNAdd(2); + break; + case 6: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(6, 7); + break; + case 9: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(9, 10); + break; + case 23: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(23, 7); + break; + case 25: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(25, 10); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 34 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_11(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_11(int pos, long active0) +{ + return jjMoveNfa_11(jjStopStringLiteralDfa_11(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_11(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_11(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_11() +{ + switch(curChar) + { + case 34: + return jjStopAtPos(0, 33); + default : + return jjMoveNfa_11(0, 0); + } +} +private final int jjMoveNfa_11(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xfffffffbffffffffL & l) == 0L) + break; + kind = 32; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + kind = 32; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 32) + kind = 32; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_5(int pos, long active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x600000000000000L) != 0L) + { + jjmatchedKind = 59; + return -1; + } + return -1; + case 1: + if ((active0 & 0x600000000000000L) != 0L) + { + if (jjmatchedPos == 0) + { + jjmatchedKind = 59; + jjmatchedPos = 0; + } + return -1; + } + return -1; + default : + return -1; + } +} +private final int jjStartNfa_5(int pos, long active0) +{ + return jjMoveNfa_5(jjStopStringLiteralDfa_5(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_5(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_5(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_5() +{ + switch(curChar) + { + case 45: + return jjMoveStringLiteralDfa1_5(0x600000000000000L); + default : + return jjMoveNfa_5(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_5(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_5(0, active0); + return 1; + } + switch(curChar) + { + case 45: + if ((active0 & 0x400000000000000L) != 0L) + { + jjmatchedKind = 58; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_5(active0, 0x200000000000000L); + default : + break; + } + return jjStartNfa_5(0, active0); +} +private final int jjMoveStringLiteralDfa2_5(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_5(0, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_5(1, active0); + return 2; + } + switch(curChar) + { + case 62: + if ((active0 & 0x200000000000000L) != 0L) + return jjStopAtPos(2, 57); + break; + default : + break; + } + return jjStartNfa_5(1, active0); +} +static final long[] jjbitVec42 = { + 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x7fffffff00ffffffL +}; +static final long[] jjbitVec43 = { + 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x3fffffffffffffffL +}; +private final int jjMoveNfa_5(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xffffffff00002600L & l) != 0L) + kind = 59; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + kind = 59; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (jjCanMove_3(hiByte, i1, i2, l1, l2) && kind > 59) + kind = 59; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_12(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_12(int pos, long active0) +{ + return jjMoveNfa_12(jjStopStringLiteralDfa_12(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_12(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_12(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_12() +{ + switch(curChar) + { + case 34: + return jjStopAtPos(0, 27); + case 39: + return jjStopAtPos(0, 28); + case 61: + return jjStopAtPos(0, 26); + case 63: + return jjMoveStringLiteralDfa1_12(0x1000000L); + case 101: + return jjMoveStringLiteralDfa1_12(0x40000000L); + case 115: + return jjMoveStringLiteralDfa1_12(0x80000000L); + case 118: + return jjMoveStringLiteralDfa1_12(0x20000000L); + default : + return jjMoveNfa_12(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_12(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(0, active0); + return 1; + } + switch(curChar) + { + case 62: + if ((active0 & 0x1000000L) != 0L) + return jjStopAtPos(1, 24); + break; + case 101: + return jjMoveStringLiteralDfa2_12(active0, 0x20000000L); + case 110: + return jjMoveStringLiteralDfa2_12(active0, 0x40000000L); + case 116: + return jjMoveStringLiteralDfa2_12(active0, 0x80000000L); + default : + break; + } + return jjStartNfa_12(0, active0); +} +private final int jjMoveStringLiteralDfa2_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(0, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(1, active0); + return 2; + } + switch(curChar) + { + case 97: + return jjMoveStringLiteralDfa3_12(active0, 0x80000000L); + case 99: + return jjMoveStringLiteralDfa3_12(active0, 0x40000000L); + case 114: + return jjMoveStringLiteralDfa3_12(active0, 0x20000000L); + default : + break; + } + return jjStartNfa_12(1, active0); +} +private final int jjMoveStringLiteralDfa3_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(1, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(2, active0); + return 3; + } + switch(curChar) + { + case 110: + return jjMoveStringLiteralDfa4_12(active0, 0x80000000L); + case 111: + return jjMoveStringLiteralDfa4_12(active0, 0x40000000L); + case 115: + return jjMoveStringLiteralDfa4_12(active0, 0x20000000L); + default : + break; + } + return jjStartNfa_12(2, active0); +} +private final int jjMoveStringLiteralDfa4_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(2, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(3, active0); + return 4; + } + switch(curChar) + { + case 100: + return jjMoveStringLiteralDfa5_12(active0, 0xc0000000L); + case 105: + return jjMoveStringLiteralDfa5_12(active0, 0x20000000L); + default : + break; + } + return jjStartNfa_12(3, active0); +} +private final int jjMoveStringLiteralDfa5_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(3, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(4, active0); + return 5; + } + switch(curChar) + { + case 97: + return jjMoveStringLiteralDfa6_12(active0, 0x80000000L); + case 105: + return jjMoveStringLiteralDfa6_12(active0, 0x40000000L); + case 111: + return jjMoveStringLiteralDfa6_12(active0, 0x20000000L); + default : + break; + } + return jjStartNfa_12(4, active0); +} +private final int jjMoveStringLiteralDfa6_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(4, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(5, active0); + return 6; + } + switch(curChar) + { + case 108: + return jjMoveStringLiteralDfa7_12(active0, 0x80000000L); + case 110: + if ((active0 & 0x20000000L) != 0L) + return jjStopAtPos(6, 29); + return jjMoveStringLiteralDfa7_12(active0, 0x40000000L); + default : + break; + } + return jjStartNfa_12(5, active0); +} +private final int jjMoveStringLiteralDfa7_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(5, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(6, active0); + return 7; + } + switch(curChar) + { + case 103: + if ((active0 & 0x40000000L) != 0L) + return jjStopAtPos(7, 30); + break; + case 111: + return jjMoveStringLiteralDfa8_12(active0, 0x80000000L); + default : + break; + } + return jjStartNfa_12(6, active0); +} +private final int jjMoveStringLiteralDfa8_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(6, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(7, active0); + return 8; + } + switch(curChar) + { + case 110: + return jjMoveStringLiteralDfa9_12(active0, 0x80000000L); + default : + break; + } + return jjStartNfa_12(7, active0); +} +private final int jjMoveStringLiteralDfa9_12(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_12(7, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_12(8, active0); + return 9; + } + switch(curChar) + { + case 101: + if ((active0 & 0x80000000L) != 0L) + return jjStopAtPos(9, 31); + break; + default : + break; + } + return jjStartNfa_12(8, active0); +} +private final int jjMoveNfa_12(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x100002600L & l) == 0L) + break; + kind = 25; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_4(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_4(int pos, long active0) +{ + return jjMoveNfa_4(jjStopStringLiteralDfa_4(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_4(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_4(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_4() +{ + switch(curChar) + { + case 63: + return jjMoveStringLiteralDfa1_4(0x1000000000000000L); + default : + return jjMoveNfa_4(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_4(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_4(0, active0); + return 1; + } + switch(curChar) + { + case 62: + if ((active0 & 0x1000000000000000L) != 0L) + return jjStopAtPos(1, 60); + break; + default : + break; + } + return jjStartNfa_4(0, active0); +} +private final int jjMoveNfa_4(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 8; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x100002600L & l) != 0L) + { + if (kind > 63) + kind = 63; + jjCheckNAdd(7); + } + else if (curChar == 58) + { + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + } + break; + case 3: + if (curChar != 58) + break; + if (kind > 61) + kind = 61; + jjCheckNAddTwoStates(3, 4); + break; + case 4: + if ((0x7ff600000000000L & l) == 0L) + break; + if (kind > 61) + kind = 61; + jjCheckNAddTwoStates(3, 4); + break; + case 5: + if (curChar != 58) + break; + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + break; + case 6: + if ((0x7ff600000000000L & l) == 0L) + break; + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + break; + case 7: + if ((0x100002600L & l) == 0L) + break; + kind = 63; + jjCheckNAdd(7); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + } + if ((0x100000001000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 1: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 2: + if ((0x100000001000L & l) == 0L) + break; + if (kind > 61) + kind = 61; + jjCheckNAdd(3); + break; + case 3: + case 4: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 61) + kind = 61; + jjCheckNAddTwoStates(3, 4); + break; + case 5: + case 6: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) + break; + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + break; + case 3: + if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) + break; + if (kind > 61) + kind = 61; + jjCheckNAddTwoStates(3, 4); + break; + case 4: + if (!jjCanMove_2(hiByte, i1, i2, l1, l2)) + break; + if (kind > 61) + kind = 61; + jjCheckNAddTwoStates(3, 4); + break; + case 6: + if (!jjCanMove_2(hiByte, i1, i2, l1, l2)) + break; + if (kind > 62) + kind = 62; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 8 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_13(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_13(int pos, long active0) +{ + return jjMoveNfa_13(jjStopStringLiteralDfa_13(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_13(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_13(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_13() +{ + switch(curChar) + { + case 60: + jjmatchedKind = 14; + return jjMoveStringLiteralDfa1_13(0x1f8000L); + default : + return jjMoveNfa_13(6, 0); + } +} +private final int jjMoveStringLiteralDfa1_13(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(0, active0); + return 1; + } + switch(curChar) + { + case 33: + return jjMoveStringLiteralDfa2_13(active0, 0x1c0000L); + case 47: + if ((active0 & 0x8000L) != 0L) + return jjStopAtPos(1, 15); + break; + case 63: + if ((active0 & 0x10000L) != 0L) + { + jjmatchedKind = 16; + jjmatchedPos = 1; + } + return jjMoveStringLiteralDfa2_13(active0, 0x20000L); + default : + break; + } + return jjStartNfa_13(0, active0); +} +private final int jjMoveStringLiteralDfa2_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(0, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(1, active0); + return 2; + } + switch(curChar) + { + case 45: + return jjMoveStringLiteralDfa3_13(active0, 0x80000L); + case 68: + return jjMoveStringLiteralDfa3_13(active0, 0x40000L); + case 91: + return jjMoveStringLiteralDfa3_13(active0, 0x100000L); + case 120: + return jjMoveStringLiteralDfa3_13(active0, 0x20000L); + default : + break; + } + return jjStartNfa_13(1, active0); +} +private final int jjMoveStringLiteralDfa3_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(1, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(2, active0); + return 3; + } + switch(curChar) + { + case 45: + if ((active0 & 0x80000L) != 0L) + return jjStopAtPos(3, 19); + break; + case 67: + return jjMoveStringLiteralDfa4_13(active0, 0x100000L); + case 79: + return jjMoveStringLiteralDfa4_13(active0, 0x40000L); + case 109: + return jjMoveStringLiteralDfa4_13(active0, 0x20000L); + default : + break; + } + return jjStartNfa_13(2, active0); +} +private final int jjMoveStringLiteralDfa4_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(2, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(3, active0); + return 4; + } + switch(curChar) + { + case 67: + return jjMoveStringLiteralDfa5_13(active0, 0x40000L); + case 68: + return jjMoveStringLiteralDfa5_13(active0, 0x100000L); + case 108: + if ((active0 & 0x20000L) != 0L) + return jjStopAtPos(4, 17); + break; + default : + break; + } + return jjStartNfa_13(3, active0); +} +private final int jjMoveStringLiteralDfa5_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(3, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(4, active0); + return 5; + } + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa6_13(active0, 0x100000L); + case 84: + return jjMoveStringLiteralDfa6_13(active0, 0x40000L); + default : + break; + } + return jjStartNfa_13(4, active0); +} +private final int jjMoveStringLiteralDfa6_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(4, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(5, active0); + return 6; + } + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa7_13(active0, 0x100000L); + case 89: + return jjMoveStringLiteralDfa7_13(active0, 0x40000L); + default : + break; + } + return jjStartNfa_13(5, active0); +} +private final int jjMoveStringLiteralDfa7_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(5, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(6, active0); + return 7; + } + switch(curChar) + { + case 65: + return jjMoveStringLiteralDfa8_13(active0, 0x100000L); + case 80: + return jjMoveStringLiteralDfa8_13(active0, 0x40000L); + default : + break; + } + return jjStartNfa_13(6, active0); +} +private final int jjMoveStringLiteralDfa8_13(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_13(6, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_13(7, active0); + return 8; + } + switch(curChar) + { + case 69: + if ((active0 & 0x40000L) != 0L) + return jjStopAtPos(8, 18); + break; + case 91: + if ((active0 & 0x100000L) != 0L) + return jjStopAtPos(8, 20); + break; + default : + break; + } + return jjStartNfa_13(7, active0); +} +private final int jjMoveNfa_13(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 16; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 6: + if ((0xefffffbfffffffffL & l) != 0L) + { + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + } + else if (curChar == 38) + jjAddStates(18, 19); + if ((0x100002600L & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAdd(0); + } + else if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 7; + break; + case 0: + if ((0x100002600L & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAdd(0); + break; + case 1: + if ((0xefffffbfffffffffL & l) == 0L) + break; + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + break; + case 3: + if ((0xafffffbfffffffffL & l) == 0L) + break; + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + break; + case 7: + if (curChar == 58) + jjCheckNAddTwoStates(8, 9); + break; + case 8: + if ((0x7ff600000000000L & l) != 0L) + jjCheckNAddTwoStates(8, 9); + break; + case 9: + if (curChar == 59 && kind > 23) + kind = 23; + break; + case 10: + if (curChar == 38) + jjAddStates(18, 19); + break; + case 12: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(12, 9); + break; + case 13: + if (curChar == 35) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 14: + if (curChar == 35) + jjCheckNAdd(15); + break; + case 15: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(15, 9); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 6: + if ((0xffffffffdfffffffL & l) != 0L) + { + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + } + else if (curChar == 93) + jjCheckNAdd(1); + if (curChar == 93) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 1: + if ((0xffffffffdfffffffL & l) == 0L) + break; + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + break; + case 2: + if (curChar == 93) + jjstateSet[jjnewStateCnt++] = 3; + break; + case 3: + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + break; + case 4: + if (curChar == 93) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 5: + if (curChar == 93) + jjCheckNAdd(1); + break; + case 7: + case 8: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddTwoStates(8, 9); + break; + case 11: + if (curChar == 120) + jjCheckNAdd(12); + break; + case 12: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddTwoStates(12, 9); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 6: + case 1: + case 3: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 22) + kind = 22; + jjCheckNAddStates(15, 17); + break; + case 7: + if (jjCanMove_1(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(8, 9); + break; + case 8: + if (jjCanMove_2(hiByte, i1, i2, l1, l2)) + jjCheckNAddTwoStates(8, 9); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjMoveStringLiteralDfa0_8() +{ + switch(curChar) + { + case 34: + return jjStopAtPos(0, 42); + case 39: + return jjStopAtPos(0, 44); + case 61: + return jjMoveStringLiteralDfa1_8(0xa0000000000L); + case 110: + return jjMoveStringLiteralDfa1_8(0x400000000000L); + case 121: + return jjMoveStringLiteralDfa1_8(0x200000000000L); + default : + return 1; + } +} +private final int jjMoveStringLiteralDfa1_8(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + return 1; + } + switch(curChar) + { + case 34: + if ((active0 & 0x20000000000L) != 0L) + return jjStopAtPos(1, 41); + break; + case 39: + if ((active0 & 0x80000000000L) != 0L) + return jjStopAtPos(1, 43); + break; + case 101: + return jjMoveStringLiteralDfa2_8(active0, 0x200000000000L); + case 111: + if ((active0 & 0x400000000000L) != 0L) + return jjStopAtPos(1, 46); + break; + default : + return 2; + } + return 2; +} +private final int jjMoveStringLiteralDfa2_8(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return 2; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + return 2; + } + switch(curChar) + { + case 115: + if ((active0 & 0x200000000000L) != 0L) + return jjStopAtPos(2, 45); + break; + default : + return 3; + } + return 3; +} +private final int jjStopStringLiteralDfa_10(int pos, long active0) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_10(int pos, long active0) +{ + return jjMoveNfa_10(jjStopStringLiteralDfa_10(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_10(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_10(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_10() +{ + switch(curChar) + { + case 39: + return jjStopAtPos(0, 35); + default : + return jjMoveNfa_10(0, 0); + } +} +private final int jjMoveNfa_10(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xffffff7fffffffffL & l) == 0L) + break; + kind = 34; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + kind = 34; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 34) + kind = 34; + jjstateSet[jjnewStateCnt++] = 0; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_3(int pos, long active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x1000000000000000L) != 0L) + { + jjmatchedKind = 64; + return -1; + } + return -1; + default : + return -1; + } +} +private final int jjStartNfa_3(int pos, long active0) +{ + return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_3(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_3(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_3() +{ + switch(curChar) + { + case 63: + return jjMoveStringLiteralDfa1_3(0x1000000000000000L); + default : + return jjMoveNfa_3(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_3(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_3(0, active0); + return 1; + } + switch(curChar) + { + case 62: + if ((active0 & 0x1000000000000000L) != 0L) + return jjStopAtPos(1, 60); + break; + default : + break; + } + return jjStartNfa_3(0, active0); +} +private final int jjMoveNfa_3(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xffffffff00002600L & l) != 0L) + kind = 64; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + kind = 64; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (jjCanMove_3(hiByte, i1, i2, l1, l2) && kind > 64) + kind = 64; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1) +{ + switch (pos) + { + case 0: + if ((active1 & 0x2000L) != 0L) + { + jjmatchedKind = 78; + return -1; + } + return -1; + case 1: + if ((active1 & 0x2000L) != 0L) + { + if (jjmatchedPos == 0) + { + jjmatchedKind = 78; + jjmatchedPos = 0; + } + return -1; + } + return -1; + default : + return -1; + } +} +private final int jjStartNfa_0(int pos, long active0, long active1) +{ + return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1), pos + 1); +} +private final int jjStartNfaWithStates_0(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_0(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_0() +{ + switch(curChar) + { + case 93: + return jjMoveStringLiteralDfa1_0(0x2000L); + default : + return jjMoveNfa_0(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_0(long active1) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(0, 0L, active1); + return 1; + } + switch(curChar) + { + case 93: + return jjMoveStringLiteralDfa2_0(active1, 0x2000L); + default : + break; + } + return jjStartNfa_0(0, 0L, active1); +} +private final int jjMoveStringLiteralDfa2_0(long old1, long active1) +{ + if (((active1 &= old1)) == 0L) + return jjStartNfa_0(0, 0L, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(1, 0L, active1); + return 2; + } + switch(curChar) + { + case 62: + if ((active1 & 0x2000L) != 0L) + return jjStopAtPos(2, 77); + break; + default : + break; + } + return jjStartNfa_0(1, 0L, active1); +} +private final int jjMoveNfa_0(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xffffffff00002600L & l) != 0L) + kind = 78; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + kind = 78; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (jjCanMove_3(hiByte, i1, i2, l1, l2) && kind > 78) + kind = 78; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjStopStringLiteralDfa_2(int pos, long active0, long active1) +{ + switch (pos) + { + default : + return -1; + } +} +private final int jjStartNfa_2(int pos, long active0, long active1) +{ + return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0, active1), pos + 1); +} +private final int jjStartNfaWithStates_2(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_2(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_2() +{ + switch(curChar) + { + case 34: + return jjStopAtPos(0, 68); + case 39: + return jjStopAtPos(0, 69); + case 47: + return jjMoveStringLiteralDfa1_2(0x40L); + case 61: + return jjStopAtPos(0, 66); + case 62: + return jjStopAtPos(0, 71); + default : + return jjMoveNfa_2(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_2(long active1) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_2(0, 0L, active1); + return 1; + } + switch(curChar) + { + case 62: + if ((active1 & 0x40L) != 0L) + return jjStopAtPos(1, 70); + break; + default : + break; + } + return jjStartNfa_2(0, 0L, active1); +} +private final int jjMoveNfa_2(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 3; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x100002600L & l) != 0L) + { + if (kind > 67) + kind = 67; + jjCheckNAdd(2); + } + else if (curChar == 58) + { + if (kind > 65) + kind = 65; + jjCheckNAdd(1); + } + break; + case 1: + if ((0x7ff600000000000L & l) == 0L) + break; + if (kind > 65) + kind = 65; + jjCheckNAdd(1); + break; + case 2: + if ((0x100002600L & l) == 0L) + break; + kind = 67; + jjCheckNAdd(2); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + case 1: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 65) + kind = 65; + jjCheckNAdd(1); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) + break; + if (kind > 65) + kind = 65; + jjCheckNAdd(1); + break; + case 1: + if (!jjCanMove_2(hiByte, i1, i2, l1, l2)) + break; + if (kind > 65) + kind = 65; + jjCheckNAdd(1); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private final int jjMoveStringLiteralDfa0_9() +{ + switch(curChar) + { + case 34: + return jjStopAtPos(0, 37); + case 39: + return jjStopAtPos(0, 39); + case 49: + return jjMoveStringLiteralDfa1_9(0x10000000000L); + case 61: + return jjMoveStringLiteralDfa1_9(0x5000000000L); + default : + return 1; + } +} +private final int jjMoveStringLiteralDfa1_9(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + return 1; + } + switch(curChar) + { + case 34: + if ((active0 & 0x1000000000L) != 0L) + return jjStopAtPos(1, 36); + break; + case 39: + if ((active0 & 0x4000000000L) != 0L) + return jjStopAtPos(1, 38); + break; + case 46: + return jjMoveStringLiteralDfa2_9(active0, 0x10000000000L); + default : + return 2; + } + return 2; +} +private final int jjMoveStringLiteralDfa2_9(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return 2; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + return 2; + } + switch(curChar) + { + case 48: + if ((active0 & 0x10000000000L) != 0L) + return jjStopAtPos(2, 40); + break; + default : + return 3; + } + return 3; +} +static final int[] jjnextStates = { + 9, 10, 4, 5, 8, 17, 18, 26, 21, 22, 24, 19, 20, 27, 28, 1, + 4, 5, 13, 14, +}; +private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec2[i2] & l2) != 0L); + default : + if ((jjbitVec0[i1] & l1) != 0L) + return true; + return false; + } +} +private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec4[i2] & l2) != 0L); + case 1: + return ((jjbitVec5[i2] & l2) != 0L); + case 2: + return ((jjbitVec6[i2] & l2) != 0L); + case 3: + return ((jjbitVec7[i2] & l2) != 0L); + case 4: + return ((jjbitVec8[i2] & l2) != 0L); + case 5: + return ((jjbitVec9[i2] & l2) != 0L); + case 6: + return ((jjbitVec10[i2] & l2) != 0L); + case 9: + return ((jjbitVec11[i2] & l2) != 0L); + case 10: + return ((jjbitVec12[i2] & l2) != 0L); + case 11: + return ((jjbitVec13[i2] & l2) != 0L); + case 12: + return ((jjbitVec14[i2] & l2) != 0L); + case 13: + return ((jjbitVec15[i2] & l2) != 0L); + case 14: + return ((jjbitVec16[i2] & l2) != 0L); + case 15: + return ((jjbitVec17[i2] & l2) != 0L); + case 16: + return ((jjbitVec18[i2] & l2) != 0L); + case 17: + return ((jjbitVec19[i2] & l2) != 0L); + case 30: + return ((jjbitVec20[i2] & l2) != 0L); + case 31: + return ((jjbitVec21[i2] & l2) != 0L); + case 33: + return ((jjbitVec22[i2] & l2) != 0L); + case 48: + return ((jjbitVec23[i2] & l2) != 0L); + case 49: + return ((jjbitVec24[i2] & l2) != 0L); + case 159: + return ((jjbitVec25[i2] & l2) != 0L); + case 215: + return ((jjbitVec26[i2] & l2) != 0L); + default : + if ((jjbitVec3[i1] & l1) != 0L) + return true; + return false; + } +} +private static final boolean jjCanMove_2(int hiByte, int i1, int i2, long l1, long l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec27[i2] & l2) != 0L); + case 1: + return ((jjbitVec5[i2] & l2) != 0L); + case 2: + return ((jjbitVec28[i2] & l2) != 0L); + case 3: + return ((jjbitVec29[i2] & l2) != 0L); + case 4: + return ((jjbitVec30[i2] & l2) != 0L); + case 5: + return ((jjbitVec31[i2] & l2) != 0L); + case 6: + return ((jjbitVec32[i2] & l2) != 0L); + case 9: + return ((jjbitVec33[i2] & l2) != 0L); + case 10: + return ((jjbitVec34[i2] & l2) != 0L); + case 11: + return ((jjbitVec35[i2] & l2) != 0L); + case 12: + return ((jjbitVec36[i2] & l2) != 0L); + case 13: + return ((jjbitVec37[i2] & l2) != 0L); + case 14: + return ((jjbitVec38[i2] & l2) != 0L); + case 15: + return ((jjbitVec39[i2] & l2) != 0L); + case 16: + return ((jjbitVec18[i2] & l2) != 0L); + case 17: + return ((jjbitVec19[i2] & l2) != 0L); + case 30: + return ((jjbitVec20[i2] & l2) != 0L); + case 31: + return ((jjbitVec21[i2] & l2) != 0L); + case 32: + return ((jjbitVec40[i2] & l2) != 0L); + case 33: + return ((jjbitVec22[i2] & l2) != 0L); + case 48: + return ((jjbitVec41[i2] & l2) != 0L); + case 49: + return ((jjbitVec24[i2] & l2) != 0L); + case 159: + return ((jjbitVec25[i2] & l2) != 0L); + case 215: + return ((jjbitVec26[i2] & l2) != 0L); + default : + if ((jjbitVec3[i1] & l1) != 0L) + return true; + return false; + } +} +private static final boolean jjCanMove_3(int hiByte, int i1, int i2, long l1, long l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec2[i2] & l2) != 0L); + case 255: + return ((jjbitVec43[i2] & l2) != 0L); + default : + if ((jjbitVec42[i1] & l1) != 0L) + return true; + return false; + } +} +public static final String[] jjstrLiteralImages = { +"", null, null, null, null, null, null, null, null, null, null, null, null, +null, "\74", "\74\57", "\74\77", "\74\77\170\155\154", +"\74\41\104\117\103\124\131\120\105", "\74\41\55\55", "\74\41\133\103\104\101\124\101\133", null, null, null, +"\77\76", null, "\75", "\42", "\47", "\166\145\162\163\151\157\156", +"\145\156\143\157\144\151\156\147", "\163\164\141\156\144\141\154\157\156\145", null, "\42", null, "\47", +"\75\42", "\42", "\75\47", "\47", "\61\56\60", "\75\42", "\42", "\75\47", "\47", +"\171\145\163", "\156\157", null, null, "\76", null, null, null, null, "\133", "\135", null, +"\55\55\76", "\55\55", null, "\77\76", null, null, null, null, null, "\75", null, "\42", +"\47", "\57\76", "\76", "\42", "\47", null, null, null, "\135\135\76", null, }; +public static final String[] lexStateNames = { + "WithinCData", + "Attribute", + "WithinTag", + "WithinPIContent", + "WithinPI", + "Comment", + "WithinIntSubset", + "WithinDoctypeDecl", + "WithinXMLDecl_Standalone", + "WithinXMLDecl_Version", + "WithinXMLDecl_SquoteString", + "WithinXMLDecl_DquoteString", + "WithinXMLDecl", + "DEFAULT", +}; +public static final int[] jjnewLexState = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 4, 12, 7, 5, 0, -1, -1, -1, 13, + -1, -1, 11, 10, 9, -1, 8, -1, 12, -1, 12, -1, 12, -1, 12, -1, -1, 12, -1, 12, -1, -1, -1, -1, 13, + -1, -1, -1, -1, 6, 7, -1, 13, -1, -1, 13, -1, -1, 3, -1, -1, -1, -1, 1, 1, 13, 13, 2, 2, -1, + -1, -1, 13, -1, +}; +protected SimpleCharStream input_stream; +private final int[] jjrounds = new int[34]; +private final int[] jjstateSet = new int[68]; +protected char curChar; +public AssTokenManager(SimpleCharStream stream){ + if (SimpleCharStream.staticFlag) + throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer."); + input_stream = stream; +} +public AssTokenManager(SimpleCharStream stream, int lexState){ + this(stream); + SwitchTo(lexState); +} +public void ReInit(SimpleCharStream stream) +{ + jjmatchedPos = jjnewStateCnt = 0; + curLexState = defaultLexState; + input_stream = stream; + ReInitRounds(); +} +private final void ReInitRounds() +{ + int i; + jjround = 0x80000001; + for (i = 34; i-- > 0;) + jjrounds[i] = 0x80000000; +} +public void ReInit(SimpleCharStream stream, int lexState) +{ + ReInit(stream); + SwitchTo(lexState); +} +public void SwitchTo(int lexState) +{ + if (lexState >= 14 || lexState < 0) + throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); + else + curLexState = lexState; +} + +protected Token jjFillToken() +{ + Token t = Token.newToken(jjmatchedKind); + t.kind = jjmatchedKind; + String im = jjstrLiteralImages[jjmatchedKind]; + t.image = (im == null) ? input_stream.GetImage() : im; + t.beginLine = input_stream.getBeginLine(); + t.beginColumn = input_stream.getBeginColumn(); + t.endLine = input_stream.getEndLine(); + t.endColumn = input_stream.getEndColumn(); + return t; +} + +int curLexState = 13; +int defaultLexState = 13; +int jjnewStateCnt; +int jjround; +int jjmatchedPos; +int jjmatchedKind; + +public Token getNextToken() +{ + int kind; + Token specialToken = null; + Token matchedToken; + int curPos = 0; + + EOFLoop : + for (;;) + { + try + { + curChar = input_stream.BeginToken(); + } + catch(java.io.IOException e) + { + jjmatchedKind = 0; + matchedToken = jjFillToken(); + return matchedToken; + } + + switch(curLexState) + { + case 0: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + break; + case 1: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_1(); + break; + case 2: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_2(); + break; + case 3: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_3(); + break; + case 4: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_4(); + break; + case 5: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_5(); + break; + case 6: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_6(); + break; + case 7: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_7(); + break; + case 8: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_8(); + break; + case 9: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_9(); + break; + case 10: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_10(); + break; + case 11: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_11(); + break; + case 12: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_12(); + break; + case 13: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_13(); + break; + } + if (jjmatchedKind != 0x7fffffff) + { + if (jjmatchedPos + 1 < curPos) + input_stream.backup(curPos - jjmatchedPos - 1); + matchedToken = jjFillToken(); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + return matchedToken; + } + int error_line = input_stream.getEndLine(); + int error_column = input_stream.getEndColumn(); + String error_after = null; + boolean EOFSeen = false; + try { input_stream.readChar(); input_stream.backup(1); } + catch (java.io.IOException e1) { + EOFSeen = true; + error_after = curPos <= 1 ? "" : input_stream.GetImage(); + if (curChar == '\n' || curChar == '\r') { + error_line++; + error_column = 0; + } + else + error_column++; + } + if (!EOFSeen) { + input_stream.backup(1); + error_after = curPos <= 1 ? "" : input_stream.GetImage(); + } + throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); + } +} + +} diff --git a/src/org/catacombae/xml/parser/Attribute.java b/src/org/catacombae/xml/parser/Attribute.java new file mode 100644 index 0000000..0f1e88f --- /dev/null +++ b/src/org/catacombae/xml/parser/Attribute.java @@ -0,0 +1,38 @@ +package org.catacombae.xml.parser; + +import java.util.List; + +public class Attribute { + public static abstract class ValueComponent { + public abstract String toString(); + } + public static class StringComponent extends ValueComponent { + public String content; + public StringComponent(String content) { this.content = content; } + public String toString() { return content; } + } + public static class ReferenceComponent extends ValueComponent { + public String content; + public ReferenceComponent(String content) { this.content = content; } + public String toString() { return content; } // should resolve the reference here + } + public static class Value { + public List components; + public Value(List components) { + this.components = components; + } + public String toString() { + StringBuilder result = new StringBuilder(); + for(ValueComponent vc : components) + result.append(vc.toString()); + return result.toString(); + } + } + public String identifier; + public Value value; + + public Attribute(String identifier, Value value) { + this.identifier = identifier; + this.value = value; + } +} \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/DebugXMLContentHandler.java b/src/org/catacombae/xml/parser/DebugXMLContentHandler.java new file mode 100644 index 0000000..cafdcea --- /dev/null +++ b/src/org/catacombae/xml/parser/DebugXMLContentHandler.java @@ -0,0 +1,80 @@ +package org.catacombae.xml.parser; + +import java.util.List; + +public class DebugXMLContentHandler implements XMLContentHandler { + //public void doctype(String + public void xmlDecl(String version, String encoding, Boolean standalone) { + print("xmlDecl: "); + } + public void pi(String id, String content) { + print("pi: "); + } + + public void comment(String content) { + println("comment: "); + } + + public void doctype(String name, ExternalID eid) { + print("doctype: "); + } + + public void cdata(String cdata) { + println("cdata: "); + } + + public void emptyElement(String name, List attributes) { + print("emptyElement: <" + name); + for(Attribute attr : attributes) + print(" " + attr.identifier + "=\"" + attr.value + "\""); + println("/>"); + } + + public void startElement(String name, List attributes) { + print("startElement: <" + name); + for(Attribute attr : attributes) + print(" " + attr.identifier + "=\"" + attr.value + "\""); + println(">"); + } + + public void endElement(String name) { + println("endElement: "); + } + + public void chardata(String data) { + println("chardata: \"" + data + "\""); + } + + public void reference(String ref) { + println("reference: \"" + ref + "\""); + } + + private static void print(String s) { + System.out.print(s); + } + private static void println(String s) { + System.out.println(s); + } + +} \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/ExternalID.java b/src/org/catacombae/xml/parser/ExternalID.java new file mode 100644 index 0000000..d15303e --- /dev/null +++ b/src/org/catacombae/xml/parser/ExternalID.java @@ -0,0 +1,19 @@ +package org.catacombae.xml.parser; + +public class ExternalID { + public static final int SYSTEM = 0; + public static final int PUBLIC = 1; + public int type; + public String pubidLiteral; + public String systemLiteral; + + public ExternalID(String pubidLiteral, String systemLiteral) { + this.pubidLiteral = pubidLiteral; + this.systemLiteral = systemLiteral; + this.type = PUBLIC; + } + public ExternalID(String systemLiteral) { + this.systemLiteral = systemLiteral; + this.type = SYSTEM; + } +} \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/MutableInputStreamReader.java b/src/org/catacombae/xml/parser/MutableInputStreamReader.java new file mode 100644 index 0000000..6f61b3c --- /dev/null +++ b/src/org/catacombae/xml/parser/MutableInputStreamReader.java @@ -0,0 +1,28 @@ +package org.catacombae.xml.parser; + +import java.io.*; +import java.nio.*; + +public class MutableInputStreamReader extends Reader { + private InputStream iStream; + private InputStreamReader isReader; + + public MutableInputStreamReader(InputStream iStream, String charset) throws UnsupportedEncodingException { + this.iStream = iStream; + this.isReader = new InputStreamReader(iStream, charset); + } + public void close() throws IOException { isReader.close(); } + public void mark(int readAheadLimit) throws IOException { isReader.mark(readAheadLimit); } + public boolean markSupported() { return isReader.markSupported(); } + public int read() throws IOException { return isReader.read(); } + public int read(char[] cbuf) throws IOException { return isReader.read(cbuf); } + public int read(char[] cbuf, int off, int len) throws IOException { return isReader.read(cbuf, off, len); } + public int read(CharBuffer target) throws IOException { return isReader.read(target); } + public boolean ready() throws IOException { return isReader.ready(); } + public void reset() throws IOException { isReader.reset(); } + public long skip(long n) throws IOException { return isReader.skip(n); } + + public void changeEncoding(String charset) throws UnsupportedEncodingException { + isReader = new InputStreamReader(iStream, charset); + } +} \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/ParseException.java b/src/org/catacombae/xml/parser/ParseException.java new file mode 100644 index 0000000..409aedb --- /dev/null +++ b/src/org/catacombae/xml/parser/ParseException.java @@ -0,0 +1,192 @@ +/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */ +package org.catacombae.xml.parser; + +/** + * This exception is thrown when parse errors are encountered. + * You can explicitly create objects of this exception type by + * calling the method generateParseException in the generated + * parser. + * + * You can modify this class to customize your error reporting + * mechanisms so long as you retain the public fields. + */ +public class ParseException extends Exception { + + /** + * This constructor is used by the method "generateParseException" + * in the generated parser. Calling this constructor generates + * a new object of this type with the fields "currentToken", + * "expectedTokenSequences", and "tokenImage" set. The boolean + * flag "specialConstructor" is also set to true to indicate that + * this constructor was used to create this object. + * This constructor calls its super class with the empty string + * to force the "toString" method of parent class "Throwable" to + * print the error message in the form: + * ParseException: + */ + public ParseException(Token currentTokenVal, + int[][] expectedTokenSequencesVal, + String[] tokenImageVal + ) + { + super(""); + specialConstructor = true; + currentToken = currentTokenVal; + expectedTokenSequences = expectedTokenSequencesVal; + tokenImage = tokenImageVal; + } + + /** + * The following constructors are for use by you for whatever + * purpose you can think of. Constructing the exception in this + * manner makes the exception behave in the normal way - i.e., as + * documented in the class "Throwable". The fields "errorToken", + * "expectedTokenSequences", and "tokenImage" do not contain + * relevant information. The JavaCC generated code does not use + * these constructors. + */ + + public ParseException() { + super(); + specialConstructor = false; + } + + public ParseException(String message) { + super(message); + specialConstructor = false; + } + + /** + * This variable determines which constructor was used to create + * this object and thereby affects the semantics of the + * "getMessage" method (see below). + */ + protected boolean specialConstructor; + + /** + * This is the last token that has been consumed successfully. If + * this object has been created due to a parse error, the token + * followng this token will (therefore) be the first error token. + */ + public Token currentToken; + + /** + * Each entry in this array is an array of integers. Each array + * of integers represents a sequence of tokens (by their ordinal + * values) that is expected at this point of the parse. + */ + public int[][] expectedTokenSequences; + + /** + * This is a reference to the "tokenImage" array of the generated + * parser within which the parse error occurred. This array is + * defined in the generated ...Constants interface. + */ + public String[] tokenImage; + + /** + * This method has the standard behavior when this object has been + * created using the standard constructors. Otherwise, it uses + * "currentToken" and "expectedTokenSequences" to generate a parse + * error message and returns it. If this object has been created + * due to a parse error, and you do not catch it (it gets thrown + * from the parser), then this method is called during the printing + * of the final stack trace, and hence the correct error message + * gets displayed. + */ + public String getMessage() { + if (!specialConstructor) { + return super.getMessage(); + } + StringBuffer expected = new StringBuffer(); + int maxSize = 0; + for (int i = 0; i < expectedTokenSequences.length; i++) { + if (maxSize < expectedTokenSequences[i].length) { + maxSize = expectedTokenSequences[i].length; + } + for (int j = 0; j < expectedTokenSequences[i].length; j++) { + expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" "); + } + if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { + expected.append("..."); + } + expected.append(eol).append(" "); + } + String retval = "Encountered \""; + Token tok = currentToken.next; + for (int i = 0; i < maxSize; i++) { + if (i != 0) retval += " "; + if (tok.kind == 0) { + retval += tokenImage[0]; + break; + } + retval += add_escapes(tok.image); + tok = tok.next; + } + retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; + retval += "." + eol; + if (expectedTokenSequences.length == 1) { + retval += "Was expecting:" + eol + " "; + } else { + retval += "Was expecting one of:" + eol + " "; + } + retval += expected.toString(); + return retval; + } + + /** + * The end of line string for this machine. + */ + protected String eol = System.getProperty("line.separator", "\n"); + + /** + * Used to convert raw characters to their escaped version + * when these raw version cannot be used as part of an ASCII + * string literal. + */ + protected String add_escapes(String str) { + StringBuffer retval = new StringBuffer(); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) + { + case 0 : + continue; + case '\b': + retval.append("\\b"); + continue; + case '\t': + retval.append("\\t"); + continue; + case '\n': + retval.append("\\n"); + continue; + case '\f': + retval.append("\\f"); + continue; + case '\r': + retval.append("\\r"); + continue; + case '\"': + retval.append("\\\""); + continue; + case '\'': + retval.append("\\\'"); + continue; + case '\\': + retval.append("\\\\"); + continue; + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); + retval.append("\\u" + s.substring(s.length() - 4, s.length())); + } else { + retval.append(ch); + } + continue; + } + } + return retval.toString(); + } + +} diff --git a/src/org/catacombae/xml/parser/SimpleCharStream.java b/src/org/catacombae/xml/parser/SimpleCharStream.java new file mode 100644 index 0000000..fc00e05 --- /dev/null +++ b/src/org/catacombae/xml/parser/SimpleCharStream.java @@ -0,0 +1,439 @@ +/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */ +package org.catacombae.xml.parser; + +/** + * An implementation of interface CharStream, where the stream is assumed to + * contain only ASCII characters (without unicode processing). + */ + +public class SimpleCharStream +{ + public static final boolean staticFlag = false; + int bufsize; + int available; + int tokenBegin; + public int bufpos = -1; + protected int bufline[]; + protected int bufcolumn[]; + + protected int column = 0; + protected int line = 1; + + protected boolean prevCharIsCR = false; + protected boolean prevCharIsLF = false; + + protected java.io.Reader inputStream; + + protected char[] buffer; + protected int maxNextCharInd = 0; + protected int inBuf = 0; + protected int tabSize = 8; + + protected void setTabSize(int i) { tabSize = i; } + protected int getTabSize(int i) { return tabSize; } + + + protected void ExpandBuff(boolean wrapAround) + { + char[] newbuffer = new char[bufsize + 2048]; + int newbufline[] = new int[bufsize + 2048]; + int newbufcolumn[] = new int[bufsize + 2048]; + + try + { + if (wrapAround) + { + System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + System.arraycopy(buffer, 0, newbuffer, + bufsize - tokenBegin, bufpos); + buffer = newbuffer; + + System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); + bufline = newbufline; + + System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); + bufcolumn = newbufcolumn; + + maxNextCharInd = (bufpos += (bufsize - tokenBegin)); + } + else + { + System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + buffer = newbuffer; + + System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + bufline = newbufline; + + System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + bufcolumn = newbufcolumn; + + maxNextCharInd = (bufpos -= tokenBegin); + } + } + catch (Throwable t) + { + throw new Error(t.getMessage()); + } + + + bufsize += 2048; + available = bufsize; + tokenBegin = 0; + } + + protected void FillBuff() throws java.io.IOException + { + if (maxNextCharInd == available) + { + if (available == bufsize) + { + if (tokenBegin > 2048) + { + bufpos = maxNextCharInd = 0; + available = tokenBegin; + } + else if (tokenBegin < 0) + bufpos = maxNextCharInd = 0; + else + ExpandBuff(false); + } + else if (available > tokenBegin) + available = bufsize; + else if ((tokenBegin - available) < 2048) + ExpandBuff(true); + else + available = tokenBegin; + } + + int i; + try { + if ((i = inputStream.read(buffer, maxNextCharInd, + available - maxNextCharInd)) == -1) + { + inputStream.close(); + throw new java.io.IOException(); + } + else + maxNextCharInd += i; + return; + } + catch(java.io.IOException e) { + --bufpos; + backup(0); + if (tokenBegin == -1) + tokenBegin = bufpos; + throw e; + } + } + + public char BeginToken() throws java.io.IOException + { + tokenBegin = -1; + char c = readChar(); + tokenBegin = bufpos; + + return c; + } + + protected void UpdateLineColumn(char c) + { + column++; + + if (prevCharIsLF) + { + prevCharIsLF = false; + line += (column = 1); + } + else if (prevCharIsCR) + { + prevCharIsCR = false; + if (c == '\n') + { + prevCharIsLF = true; + } + else + line += (column = 1); + } + + switch (c) + { + case '\r' : + prevCharIsCR = true; + break; + case '\n' : + prevCharIsLF = true; + break; + case '\t' : + column--; + column += (tabSize - (column % tabSize)); + break; + default : + break; + } + + bufline[bufpos] = line; + bufcolumn[bufpos] = column; + } + + public char readChar() throws java.io.IOException + { + if (inBuf > 0) + { + --inBuf; + + if (++bufpos == bufsize) + bufpos = 0; + + return buffer[bufpos]; + } + + if (++bufpos >= maxNextCharInd) + FillBuff(); + + char c = buffer[bufpos]; + + UpdateLineColumn(c); + return (c); + } + + /** + * @deprecated + * @see #getEndColumn + */ + + public int getColumn() { + return bufcolumn[bufpos]; + } + + /** + * @deprecated + * @see #getEndLine + */ + + public int getLine() { + return bufline[bufpos]; + } + + public int getEndColumn() { + return bufcolumn[bufpos]; + } + + public int getEndLine() { + return bufline[bufpos]; + } + + public int getBeginColumn() { + return bufcolumn[tokenBegin]; + } + + public int getBeginLine() { + return bufline[tokenBegin]; + } + + public void backup(int amount) { + + inBuf += amount; + if ((bufpos -= amount) < 0) + bufpos += bufsize; + } + + public SimpleCharStream(java.io.Reader dstream, int startline, + int startcolumn, int buffersize) + { + inputStream = dstream; + line = startline; + column = startcolumn - 1; + + available = bufsize = buffersize; + buffer = new char[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + } + + public SimpleCharStream(java.io.Reader dstream, int startline, + int startcolumn) + { + this(dstream, startline, startcolumn, 4096); + } + + public SimpleCharStream(java.io.Reader dstream) + { + this(dstream, 1, 1, 4096); + } + public void ReInit(java.io.Reader dstream, int startline, + int startcolumn, int buffersize) + { + inputStream = dstream; + line = startline; + column = startcolumn - 1; + + if (buffer == null || buffersize != buffer.length) + { + available = bufsize = buffersize; + buffer = new char[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + } + prevCharIsLF = prevCharIsCR = false; + tokenBegin = inBuf = maxNextCharInd = 0; + bufpos = -1; + } + + public void ReInit(java.io.Reader dstream, int startline, + int startcolumn) + { + ReInit(dstream, startline, startcolumn, 4096); + } + + public void ReInit(java.io.Reader dstream) + { + ReInit(dstream, 1, 1, 4096); + } + public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, + int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException + { + this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); + } + + public SimpleCharStream(java.io.InputStream dstream, int startline, + int startcolumn, int buffersize) + { + this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); + } + + public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, + int startcolumn) throws java.io.UnsupportedEncodingException + { + this(dstream, encoding, startline, startcolumn, 4096); + } + + public SimpleCharStream(java.io.InputStream dstream, int startline, + int startcolumn) + { + this(dstream, startline, startcolumn, 4096); + } + + public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException + { + this(dstream, encoding, 1, 1, 4096); + } + + public SimpleCharStream(java.io.InputStream dstream) + { + this(dstream, 1, 1, 4096); + } + + public void ReInit(java.io.InputStream dstream, String encoding, int startline, + int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException + { + ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); + } + + public void ReInit(java.io.InputStream dstream, int startline, + int startcolumn, int buffersize) + { + ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); + } + + public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException + { + ReInit(dstream, encoding, 1, 1, 4096); + } + + public void ReInit(java.io.InputStream dstream) + { + ReInit(dstream, 1, 1, 4096); + } + public void ReInit(java.io.InputStream dstream, String encoding, int startline, + int startcolumn) throws java.io.UnsupportedEncodingException + { + ReInit(dstream, encoding, startline, startcolumn, 4096); + } + public void ReInit(java.io.InputStream dstream, int startline, + int startcolumn) + { + ReInit(dstream, startline, startcolumn, 4096); + } + public String GetImage() + { + if (bufpos >= tokenBegin) + return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); + else + return new String(buffer, tokenBegin, bufsize - tokenBegin) + + new String(buffer, 0, bufpos + 1); + } + + public char[] GetSuffix(int len) + { + char[] ret = new char[len]; + + if ((bufpos + 1) >= len) + System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); + else + { + System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, + len - bufpos - 1); + System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); + } + + return ret; + } + + public void Done() + { + buffer = null; + bufline = null; + bufcolumn = null; + } + + /** + * Method to adjust line and column numbers for the start of a token. + */ + public void adjustBeginLineColumn(int newLine, int newCol) + { + int start = tokenBegin; + int len; + + if (bufpos >= tokenBegin) + { + len = bufpos - tokenBegin + inBuf + 1; + } + else + { + len = bufsize - tokenBegin + bufpos + 1 + inBuf; + } + + int i = 0, j = 0, k = 0; + int nextColDiff = 0, columnDiff = 0; + + while (i < len && + bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) + { + bufline[j] = newLine; + nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; + bufcolumn[j] = newCol + columnDiff; + columnDiff = nextColDiff; + i++; + } + + if (i < len) + { + bufline[j] = newLine++; + bufcolumn[j] = newCol + columnDiff; + + while (i++ < len) + { + if (bufline[j = start % bufsize] != bufline[++start % bufsize]) + bufline[j] = newLine++; + else + bufline[j] = newLine; + } + } + + line = bufline[j]; + column = bufcolumn[j]; + } + +} diff --git a/src/org/catacombae/xml/parser/Token.java b/src/org/catacombae/xml/parser/Token.java new file mode 100644 index 0000000..22fc204 --- /dev/null +++ b/src/org/catacombae/xml/parser/Token.java @@ -0,0 +1,81 @@ +/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */ +package org.catacombae.xml.parser; + +/** + * Describes the input token stream. + */ + +public class Token { + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + public int kind; + + /** + * beginLine and beginColumn describe the position of the first character + * of this token; endLine and endColumn describe the position of the + * last character of this token. + */ + public int beginLine, beginColumn, endLine, endColumn; + + /** + * The string image of the token. + */ + public String image; + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to null. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + public Token next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to null. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToken field is null). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is null. + */ + public Token specialToken; + + /** + * Returns the image. + */ + public String toString() + { + return image; + } + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simlpy add something like : + * + * case MyParserConstants.ID : return new IDToken(); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use it in your lexical actions. + */ + public static final Token newToken(int ofKind) + { + switch(ofKind) + { + default : return new Token(); + } + } + +} diff --git a/src/org/catacombae/xml/parser/TokenMgrError.java b/src/org/catacombae/xml/parser/TokenMgrError.java new file mode 100644 index 0000000..aadb7a0 --- /dev/null +++ b/src/org/catacombae/xml/parser/TokenMgrError.java @@ -0,0 +1,133 @@ +/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */ +package org.catacombae.xml.parser; + +public class TokenMgrError extends Error +{ + /* + * Ordinals for various reasons why an Error of this type can be thrown. + */ + + /** + * Lexical error occured. + */ + static final int LEXICAL_ERROR = 0; + + /** + * An attempt wass made to create a second instance of a static token manager. + */ + static final int STATIC_LEXER_ERROR = 1; + + /** + * Tried to change to an invalid lexical state. + */ + static final int INVALID_LEXICAL_STATE = 2; + + /** + * Detected (and bailed out of) an infinite loop in the token manager. + */ + static final int LOOP_DETECTED = 3; + + /** + * Indicates the reason why the exception is thrown. It will have + * one of the above 4 values. + */ + int errorCode; + + /** + * Replaces unprintable characters by their espaced (or unicode escaped) + * equivalents in the given string + */ + protected static final String addEscapes(String str) { + StringBuffer retval = new StringBuffer(); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) + { + case 0 : + continue; + case '\b': + retval.append("\\b"); + continue; + case '\t': + retval.append("\\t"); + continue; + case '\n': + retval.append("\\n"); + continue; + case '\f': + retval.append("\\f"); + continue; + case '\r': + retval.append("\\r"); + continue; + case '\"': + retval.append("\\\""); + continue; + case '\'': + retval.append("\\\'"); + continue; + case '\\': + retval.append("\\\\"); + continue; + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); + retval.append("\\u" + s.substring(s.length() - 4, s.length())); + } else { + retval.append(ch); + } + continue; + } + } + return retval.toString(); + } + + /** + * Returns a detailed message for the Error when it is thrown by the + * token manager to indicate a lexical error. + * Parameters : + * EOFSeen : indicates if EOF caused the lexicl error + * curLexState : lexical state in which this error occured + * errorLine : line number when the error occured + * errorColumn : column number when the error occured + * errorAfter : prefix that was seen before this error occured + * curchar : the offending character + * Note: You can customize the lexical error message by modifying this method. + */ + protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) { + return("Lexical error at line " + + errorLine + ", column " + + errorColumn + ". Encountered: " + + (EOFSeen ? " " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") + + "after : \"" + addEscapes(errorAfter) + "\""); + } + + /** + * You can also modify the body of this method to customize your error messages. + * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not + * of end-users concern, so you can return something like : + * + * "Internal Error : Please file a bug report .... " + * + * from this method for such cases in the release version of your parser. + */ + public String getMessage() { + return super.getMessage(); + } + + /* + * Constructors of various flavors follow. + */ + + public TokenMgrError() { + } + + public TokenMgrError(String message, int reason) { + super(message); + errorCode = reason; + } + + public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) { + this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); + } +} diff --git a/src/org/catacombae/xml/parser/UTF16BEInputStream.java b/src/org/catacombae/xml/parser/UTF16BEInputStream.java new file mode 100644 index 0000000..2bbdf16 --- /dev/null +++ b/src/org/catacombae/xml/parser/UTF16BEInputStream.java @@ -0,0 +1,108 @@ +package org.catacombae.xml.parser; + +import java.io.*; +import java.nio.*; +import java.nio.charset.*; + +/** + * This class always outputs UTF-16BE encoded data. The input encoding + * can be changed on the fly. + */ +public class UTF16BEInputStream extends InputStream { + private InputStream underlyingStream; + private Reader inReader; + private CharsetEncoder utf16beEncoder; + private int overflow = -1; + private char[] tempArray = new char[4096]; + + public UTF16BEInputStream(InputStream underlyingStream, String encodingName) throws UnsupportedEncodingException { + this.underlyingStream = underlyingStream; + this.inReader = new InputStreamReader(underlyingStream, encodingName); + this.utf16beEncoder = Charset.forName("UTF-16BE").newEncoder(); + } + + public void changeEncoding(String encodingName) throws UnsupportedEncodingException { + this.inReader = new InputStreamReader(underlyingStream, encodingName); + } + + public int read() throws IOException { + if(overflow != -1) { + int result = overflow; + overflow = -1; + return result; + } + else { + inReader.read(tempArray, 0, 1); + ByteBuffer bb = utf16beEncoder.encode(CharBuffer.wrap(tempArray, 0, 1)); + int result = bb.get() & 0xFF; + overflow = bb.get() & 0xFF; + return result; + } + } + public int read(byte[] ba) throws IOException { return read(ba, 0, ba.length); } + public int read(byte[] ba, int offset, int length) throws IOException { + if(length == 0) return 0; + + int curOffset = offset; + int curLength = length; + + // Take care of the overflow, if any + if(overflow != -1) { + ba[curOffset++] = (byte)overflow; + --length; + overflow = -1; + } + + // Do the dance... + int numberOfCharsToRead = length/2 + length%2; + int charsRead = 0; + while(numberOfCharsToRead > charsRead) { + int charsRemaining = numberOfCharsToRead - charsRead; + int curCharsRead = inReader.read(tempArray, 0, (charsRemaining < tempArray.length?charsRemaining:tempArray.length)); + if(curCharsRead == -1) + break; + else { + CharBuffer cb = CharBuffer.wrap(tempArray, 0, curCharsRead); + ByteBuffer bb = utf16beEncoder.encode(cb); + int bytesToWrite = curCharsRead*2 > curLength?curLength:curCharsRead*2; + bb.get(ba, curOffset, bytesToWrite); + curOffset += bytesToWrite; + curLength -= bytesToWrite; + if(bytesToWrite != curCharsRead*2) + overflow = bb.get() & 0xFF; + + charsRead += curCharsRead; + if(bytesToWrite != curCharsRead*2 && numberOfCharsToRead > charsRead) + throw new RuntimeException("Mind meltdown!"); + } + } + + if(numberOfCharsToRead*2 != length) { + if(numberOfCharsToRead*2-1 != length) + throw new RuntimeException("wtf?!"); + if(charsRead*2-1 == length) + return length; + else + return charsRead*2; + } + else + return charsRead*2; + } + public long skip(long bytesToSkip) throws IOException { + byte[] garbage = new byte[4096]; + long bytesRead = 0; + while(bytesRead < bytesToSkip) { + int curBytesRead = read(garbage); + if(curBytesRead == -1) + break; + else + bytesRead += curBytesRead; + } + return bytesRead; + } + public int available() throws IOException { return 0; } + public void close() throws IOException { underlyingStream.close(); } + public void mark(int readLimit) {} + public void reset() throws IOException { throw new IOException("Not supported"); } + public boolean markSupported() { return false; } +} \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/XMLContentHandler.java b/src/org/catacombae/xml/parser/XMLContentHandler.java new file mode 100644 index 0000000..1b8ce98 --- /dev/null +++ b/src/org/catacombae/xml/parser/XMLContentHandler.java @@ -0,0 +1,17 @@ +package org.catacombae.xml.parser; + +import java.util.List; + +public interface XMLContentHandler { + //public void doctype(String + public void xmlDecl(String version, String encoding, Boolean standalone); + public void pi(String id, String content); + public void comment(String comment); + public void doctype(String name, ExternalID eid); // Needs a DTD description also + public void cdata(String cdata); + public void emptyElement(String name, List attributes); + public void startElement(String name, List attributes); + public void endElement(String name); + public void chardata(String data); + public void reference(String ref); +} \ No newline at end of file From ecfbbbe4c51e8fc288a67b249dfc696af8c3b007 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sun, 26 Nov 2006 14:01:10 +0000 Subject: [PATCH 011/109] Various additions and changes. - Added 'struct classes' for the on-disk data representation of various UDIF structs. - Added a few new useful utilities. - Updated documentation on UDIF format. - Various minor fixes. --- lib/dmgextractor.jar | Bin 28141 -> 194482 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DmgFile.java | 13 + src/org/catacombae/dmgx/DmgFileView.java | 39 +++ src/org/catacombae/dmgx/ExtractPlist.java | 26 ++ src/org/catacombae/dmgx/Koly.java | 121 +++++++ src/org/catacombae/dmgx/Koly.struct | 20 ++ src/org/catacombae/dmgx/Plist.java | 73 ++++ src/org/catacombae/dmgx/Util.java | 368 ++++++++++++++++++++ src/org/catacombae/dmgx/ValidateDmg.java | 119 +++++++ src/org/catacombae/dmgx/ValidateDmgs.java | 27 ++ src/org/catacombae/dmgx/ValidateResult.java | 25 ++ src/org/catacombae/dmgx/XMLParse.java | 39 ++- 13 files changed, 852 insertions(+), 20 deletions(-) create mode 100644 src/org/catacombae/dmgx/DmgFile.java create mode 100644 src/org/catacombae/dmgx/DmgFileView.java create mode 100644 src/org/catacombae/dmgx/ExtractPlist.java create mode 100644 src/org/catacombae/dmgx/Koly.java create mode 100644 src/org/catacombae/dmgx/Koly.struct create mode 100644 src/org/catacombae/dmgx/Plist.java create mode 100644 src/org/catacombae/dmgx/Util.java create mode 100644 src/org/catacombae/dmgx/ValidateDmg.java create mode 100644 src/org/catacombae/dmgx/ValidateDmgs.java create mode 100644 src/org/catacombae/dmgx/ValidateResult.java diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index d0a7ac9319888c356dbd6325c0bdf764bb84e318..4a235f1521f2179216864cdde1f4ec7d7b14ff8a 100644 GIT binary patch delta 173957 zcmbSy1#n$GvZk41W@ct)W@ct)X1cL`&CKkWA!cS~W_HYW95b`y&HvBLzE|^hr?&Q< zI!CHoDwWjw)ZO~Jb+HNBa0UNGSq>Zm9R%jjv+v=X_=OkzuR@jz&Fn$vD;bPe7oj>ilkZ~}#ZB$pX5xO$fOtip<8}R7@@>VC+ z$kUuQ)|Ry?72$QP31;7Xi#@rE`Y4z+0S|$Wz#)`qJTnQ0C1jvwf}rYSYJY{zY*Vs~ zq$~#w(>Fap?+F6J4iW$Y0`k}3;Qo{#AbTFZ9Di5-`GNRTI$F3h{a1@W<4&dkrTT09 zjY^=~5Pw&gpQQBt#er&0n=>Oc5_DJ zfPZQZ+%+adVyM#dHs7oN%9m1+t|qG@QZL->Mjy^9U&0Hw;~CHMD%!XGRvtx&AwzDA z*-ieG1y)HQA(3%!4!~5y9HB+j`@SsWYGB+WuddpKYW>XC_}f8U2svZ(*C@I2C3(~~ zf?`L?#iZi|%3DN~OI}~0Q7>X?<0_Fk$^|9wPVT+Ui8vO9eMehpLo}W2-d&M z_sCXpD>iWtJm7aqk1ChS{L0ZR+e2w-0R<8SX=w>eS5b_3;hT3ypN@+mo$&EcFf?>{ zG(2_KHj6>11z?umyj-Q%fDEjdAjo_#*Q z^viP#nB}>uRO$r;Tm^t^UZ*4TvefMBegT!YUJE`mKk_9>7ImDHeuT?Jb}ia?DXO5$WlhG8>%ISagce9tf z46E)l^kQ>`Q>;psoJWkuB~j8i{_c|W^ywGBVbXQi&^|vRQOuCy@*bK^KDH_h;CNNxHBuwD)*|sm1X3Huw674I? z%8EUyYz`I25$&U%@~YLJJhS)$-*u(1TF%;Fu+C0KD0n^L4jkVlM+Mdj_FH)a!_DAU zmLenpDO-BujP^lsZ_d4OI|rZyfWDBbqFazrg24$wW&)a9(QiOI^MZg*Fy^f`i%dnp z#+c=F758;Qf|Lh;*r*485S0dh$$<^N)=f;D)lE*^&zs;VERQZ=y2m@ps7F^Y52S%a z>z7sM04>v1-F1CRGrpQkd|5oU7B=o|W;Rs-E3ctMd~j->{zTlcl$>_$o(BP70FU=~ z43|e&XsbsK@^cpMO&zYB*RRv}jWFB_%o-b+FX?1(>x`tFE4C}7=0ASj9o~yH#5{H} zIZ756K_%1yb9r!E_4P#LUi?+^J3PM~U`tuNyQ|~K!!a`aN*bnF(yMfX>+vIOp}=1R zI4krvK!2BK@O4(x__)a`sNG3Uwt z)S=n0XMX1a@UgjeWT%(dALKj|--DI8>KPa~HW350#yqaY2qg+5Cf-~%-4#^8(Oz7^)36w_kgtSSIqANdzIUa!x@ zm;2bK3q0J*Z0sL{yj3LZeev(t`O=#UQS0Ot_A1s@%wH$sl5i<`9jV8G_O>?u!D@2> zoVMRn9oryU5SQdtW93~qfo9e-)%e}?Auqogu6Mv zTk40rAHVOU+EQkZ_<`PElOAvFa&WyF3j}=Og2o}27>Kbowne%V!mM`*s704fz|wNR z;v1(Y=0T^r^WoMfu5NQ~du-Mt0aWpu24EPV#VI#l1l+I8#qkPMyx2Ty z3on^p>j<^HJG`DdI{kkzsG~&9h`k{P&G@imHgm8D8l#JxmzI9>T}Xdhz(quNr?k~$^ctY z>uRh`2sl6(yC+G2WLvj7l(&v)@dqq@!cRvQjJY=_xL-c^V$f1@Y6f}w@_L=f!AUoxwF89 zwC>sPI@g3Nfo1Q&CLlt9kie`_`VHbl^7oaAVxAPP=nm*#P9K^@N5nG}2*?Z4f3m2= z|HGo1GfCRmTZp?lIseN8%hmF8*4M!K49Fhc{;{2wl$NF7(D9|jkuzT5JD{lzvY?m& zVgZ`mp?PU^`qII5@_75!JOQZhjF9qDf-E0Re4FgMlQ1m3wX`{)9$z#$(*&BqbySVUge@2qxYr^!Vtv zfnRV)B!la)OepYu%tM|FV=hVUMHP(=v5T-5ouvoc=E6g`3-^MUSN5!tjTWwtm~~y$ z-My6u#c&B%uBDOVp>9%%dt_naa59@`%B9+BuJTzd$?2);C!6hScK~h*X69%lOMtb< zFojuJlv9Z516LwD{99Ck8R?aJg-x>))OE$qk-3YwY)*p#*-$*CLqwfNWmDy9%6EmZ zGq720p4lb^u83NcrXK#`>~79@0UWY)HaFneoBg7k_Fx!lV#{KrgXYNAKJR)nBw?EN z)fc_?W&>bpl(WbWd%$|y6U{)qw#8cTw)WULEu~@TOtl|Ovw-3Tx&ETn`f=QRqR1iv zGZb4FDyorVv%t;hm->Z0QrRH{?8}5-4k&XO<)j1bd+R)u^vyOS>Ob8Z+_+og^m5?s zXd6;?SEKHyX=Yu|^GpT_Sr>uMy=RB0PD4pkbqGa8!Ny=O3xRetMIh&~RD zz~E$tjk~V6WPmqG#9!v}3gX6qfaw5(U?&+(D>Vc0nw}OzHSqN5hBiGbYPQ_U0yRmF zS8)%TH!uRWCP(x*3ZJ0NMRHW8rc z%(gC_e`P;st*6Ra{c5KAppckqkp3#Y8p}JGcjllB0IX3B!^zug56k82vuN0yiM4Eu zVO!i}9mzOIgT17NtwEsU`w2$LlTLROY|bT+V`eylC8B^q*PRVA zplV?smWj#-O(6hNNvEz|0a?>-`bNAoRE&v7N77DC;pV!9-r2@5Vy3Z?wGgM(R;3<< z#oZYSaNGTKO2z107QA%sQuWrUifYyjFhIZ8*=f#mzDm8<(UyHc6Kzl8oUXSuT@#q6 z!^v3XuGDP98}&`q`gq)})ksTpntInXb|p5#|E*_Yu&s1wSBBqelXmaAgh~0HMZyjv zj!%W7p>1D5+%q&bpjT4`_9R57WqQhlex9QRPz@y`7l=Ykk!O4Y?!w^JNXqYQEtnl~ zMDH+$QH|74d#gPxY`^oG*}AQus9|U`871>uHJ;&y!`80_+)=bJ){Vq!zgjA$%tpNT)6{9=Cvp(F6hQ2K9N{@-Xf)-g-t4fcntCxk;q+=6*DczbDa1l72BlZH#+ktsuA1ld^+20hw8D0gl zMlqpEe9r@9yYMXv@OQ$3HlxNGK@4wFqC~VR6;f`qL~eK&d!l;WNdF)|ofYA|!yIN( zc#VJGigNIw!BQDC>WefIRuH>JWzT~E0IfTLb29fgO^*gZr9wT+bd+tzua7kJ9S{Mv z`?^#57yOmk1E|f;UznPf6-_D%YbJ*60b!nibj9~+-(C= za3>|kY4lsWKlnA}56D1!DvKq~B%29Pik1}BK+@}7rAFBWWu;ec+oG=7*s0EVNj(;| z3Hr9B4I1*=PpwkGPstt@BcS>gR_nSjDXx5X;B9+WgkHlI*Em6~I(6T)w<9^!B3}G% zVDGP#{am)suAesEyD8AtG7$0r$3?+cGrE=CxL&YH$IVQcUWWWRe zaQ(88#`jtpAQkhVBTo=4N8YfXZB9S5?LC1n#5BLaxQj2W+=&JIe5JNR8FCTqmb8^K ze0Lb%FOMxTC+Dge6QSHuWQBnO8h+tLZb_$GjZ=o4{MH-(?hvgLR>gThC%4?y9@q!I z(>#-NrX{o3)q&V62%yMl-{_w1Jv(q3cPq5>u6}z~Bn5b(s_F3xd#2ahkx*~}zh)>K zOG$(G`bF;y@AE2PU-x$&Aud5nV@M=0X zYIb-YpbGBS277C#9?>jbzIMA`w*N{1dA z6F9)ghoLi%P77zn?Z*#Z&czDbz-$uTM}q!2BNu_2$NV0$V1^#GqU@mWbYO&Q%Y&|| zew_m*V}~0$;>oPqwYq|K)0(0Ii$XB=1sx_Q06Pv1)gUNUZ*yaaA}FXtc4nYSSY+C4 zp-p0hOkQwf&AT_( z0ce~mBj;h}!w%9S{RoLU18mFH=pxe&dh8J#jYHX@ms#E6CBH@H| z95U`dFUz_Sh=Ysw3D;Zm17#!z*v@v*DNCOM$8Z3 zuh1S!-#nx6sF=6IX9MoHYEngVY)ca6MwrV>SgK;pRI`N*vj-Y1O%*1UXIlql0HxOn zO^S(JgX`B=e_@`+V#FdJ36`{Wd* zpm}Z5$ilQyy2a|!5oG{{1{?j*KdghS_fIKrI540(tSW4AAc#=k4oIU-CF#c6?acXl zCL5d8$KBJD7zo8yy|EchBy6#QegkrUQYZqW-IXkuRC3K57RY zK}|y`YI^&u1E$5NTP)(oEib7*{_~F-Yu4f%Ei%m2yB}rltgQ5Mx48A8QSfThtUjuwD;p!6v%K|qbj4bhKEiWHKtl1JA z%DE1%O&d(C4a2Ef$!9CNHs*Nmj7iuh776GK*5(=R5}GnQe(4YbF+Y*CmO4RRFf(k( z%|3NCkvNI>subNW9;2&w&i-XCC(XIMjK4MutOzd= zOx~gX+IgKV;Apjf=6Lz%{jUJTzZ33+|3M1>n0&RCk2Bsf&S!U7s-_`RTy;J&l}jNI zzk!^{g&362Mf4mSHHRD7>_C{t&IXMRkmfagIT5#MGnq)Zg?@tKt86XjTg>3nr|2SA zAeDb#Ox0~8SBt|d|M|;ZH|)``vf09H+y$;O^Qq}7p!e!`&(mZ3YMwW$FvD-nV0f1h zZ2C|rJ%l*#XB-qvyNPB6$TWTq>GeS_fZ5n@MGXEw(~7x9r!00!`y zkflp&QV4j4W6+ z=gb}fJ@k$ONi;kP+=_?3$rla~9T5}ZuOg09ns`nT9f^rZSDN$|@At)r-)9Tnv$F87 zf%rD+f@7py2Wx~b-$PDKgfR#UV2PRFrs3FuX>foiOulK0VF@$#+wgQ3YsFs5g_>r- znQrmOHvF=PJIA`IKu6)3-a@nx)->qx=)A$Ly?R!&a>SV(!EKQl;-g7tu+QtTRw0K| z(V@93&(&hf-+?R$$C8okes||YAJ7O zm}hlagKS{zwjs?ojSxHkD;qqdv;a?0t+Rm79-n6FdEjIiH(1OA0unb_&^RawdJL9h%a`5vA2oMk(??D;-wV3P9+FNgE?=BfVlK<;Vo3*N>7$5+AFx4tag`4mD zPy0F_So7gh9`dR9X{dh7Nu2emAN?WO$vCxFsuNMz=WLCds#x;aGnt1PblerzgC(@O z^@iFeiPXU?!;4^p{;7&({u3A6IZM#FO)~A;EN5e=x&jsZcA}qmQQXSIYTj9U{$6}%#cUqArR{ob zl9U2=N|DMp9tk-gix*^#VT+kDc58Ju4^pZ+0{a<>B638s*#I5BLcKJbWl7!Xv53sr zdmAxco}psfI#L`ZQE@kXhV`b9Kg!wS}$r_Ctw0HH9S@m~(rt&t# zRko_hWFwjl7{C!rs2ZQPm`kyB5m&ISmDk#kb`+%sg@HA11{ zN1YpNYHO6yo(_|$TJ~E~TITrqGJ=6IKw-KnbV6VI8Sg#K#DxVg{+t_yb@SG)-yu@> z9)ew?d?VFWysz}!7}Xm=oj%>Q3{%*)ma4eCda;hEFUR()NgugsY2;xJPGO@E zXLIKsVE{LoACn6mB|76hiCryrr8bq(W|fYZiIa`M`<+T1#!89#)5rBt#kh|0=iE#A zOYU&YQsS02B6TCR2pq9Pd1$6kN#;pi(M?TTT8H*L(wN*C^?SV01%x*cA3h~6HE|Q% z*-=vdfvE9ejXM*=qLCs{&r?+} zmi=30mbkg|1f{-Sj0WQk7nUp1k-=Vi8QKQ)=hFe)E#~riSJ=hsvjpp^OC<^Cf^OQv z8-SCF%K_O}{cR}WLMQ)@!nxk;;Q+{evrIPVp{xwEp-;FroIUNKc#dRBe z&jR==+M3c`J6oSdsw(Jxw6=73ityFl9Ka66S%R+Et1y2^OJ$%f`qw@484MYD8l1d{ z2t8P6wTFn-G}tg2M^A9R9Bk7jq=!#FVFQD(n}R)lzZx}96h=KPwLq{`2>`z&K4kur z*+nhBfSi!`CwejeCI#4(y)?aCRd{_$cTDp+2Kk!Mmj21(P%-u8z|slzL|(tE5kSql zpC+YMPGJ<;`iVnx=r0Y8oae5fvdEa2Z@2i4HZqB z7J+cIfkmBSr0$)40+OBtvhd&{Cew4WMOx1}t> z$V=K-r;p=(Tk!e&1A<0Xv>koKbQWky57HKeY8ZxW^p&}`kCkwMwg=|HpM&#;!}{oK zuHURJYIRrFFy63-5S*Rp7;lXK75#dOPZ1HrrE_If9GB&} zlPJ{4R&d`+11X>Vyf#I;EPcN$F&}^wAzVW;X`oDfSvXRcrU|o)(yQ;`Pdmjk%>?x` z8|6?>Wumnp#);}euP&!G>8`aP%qZ-^pGv15UhnzHdhfz~{Ag{Kj~e6TZFrF%>asK# zl`qzqUNFq##hn)IBFIZ*AMoR_q;edvx>rr;2zfD|j$n?NtVoij#Ymj?k}v1qE#(i4 zkYH%)py}qo{7$*KkN&>aP*fhZ;Yb$d3opI>-N88t9%Rr=-8^8M89e@(9&B+6M2V}$M z8!sjD6|73la+6Yi8f&8?*GqmN*qNVoJxP-Z0+#&lK%R^=xkOM@(0iwclU+kZEQq-7Kbs_PlSVEBk?<|GVs`zb{bFNH? zLE8S3GM$&jX}Q7P!GJlJKCuWG7&P-%P5;qoQN%(gT;NaQHzH_26E%6P7-4ag=TP3a zC?`Z=Ay!C`DsJPiGb#Gig^owUOV4R}3#uGT{BhM(dw_1F4wMIt;VHnuA}1jzhm_Lw^f5+e^N&zu>Q-#goODkjU-v=PvG;fOpkws4n!?X9RC$Q z2v9MQ0~0|PI9To2Oe50K*0I6P2-Z_ql0d>yA$~BvUsybi<1uY)=!E*H%11gWAexJh zy0j1LKIxn4cKey*cWKhoBP0mAq{50Ur749F4dtr6P*-IlF^DThdIHG!e1v2 zn0>^*)QNMia%0)G%H!idYT-AX(^FzSxe<1c@Srb-QN)%_U2n?O3)3F-;1>H%L*9!k z(A4f_)(Wl8(h2c^;Wblkl?BSyM-eP?bHGuvBMa zibmtgYFBtm2rm7qDtpNR)pF(bjfCJ7fN1aIWYGH7g=S5i)NT_yp|A&?gUd`#Wz$p$ z#WE*H7XQ zXW|!sZWR3aV*A%6>|TM9vt=xCTc-%cUCC!>Vb$=I60r(|TlB`1;p*g z9~#E}AlK9CPa=iIp99hV{TM*{AC3Wkt=&J40;w8$T6h}RKd8uYSYy5v!#3&GG1yE) zM&!3NsVuqHFC(khaqO0W^URrqW>x{lg)5nQp4t3cm;}8UsO>a%^e3qRDjwf5=Td}i zbE`aNrg+{qcaF}l4r`@)1t6HA)J7o;=dZtqt-1r9Wu&ke&%6nfacfTIm~jSe^p}1UQWpR%=QXl~_S9av3yN{^F^m zw9+pN{EB&U2Mf=U?7lb=Hc~&#WPcTRU&Rr0a+c=cqXuS>d9Dz2-K3TZc9Uc=dHcBX z-93G38CUCd%J$)Fz_>dXc?bbu4C3(EpqBZ9;)S=yWTONUOaTRUySSQSK&cAU~lvUo_+tDzo;-o1XF zIE$Y=&Vz*2ror7Wop0bwtHn0)G<9K+;8#V&&Mng|=iY8JEe5&Wt(0egyrVTRF$U@N z8xb~F0g(2Z1Kej2B3$lp362~r>_DhYZ0-;dRWI6tD0Trxknh)F3S>LA_S9H%U}e1P z6(4#~f|4VB$cE;D;&B{_X5w+pM8N)ITI_OToy?myXg-%W8ER-cD8c?R&?hxW<6Sm? zM(1N29k~0J)6TjMnpJAR$YBr|W{F)U$JwOt$xX{3>f8!JtG%O(Qd!hbiy{-pYqHF7 z!sSTeQ|Grn+W5HTJ=G z)r!epca3+Z(zknJp3XmyPhHI`%JTXOlfGk7X#8E|n)SI{t zwGY69Vr8#Lh_@jkoQu^a6j%xJHzO4#5#g^7yS3_)!xC`@VKWv%C!dUBTy_EFldTin zBHYM(!_jsGIHO+y^$KoNq^m$f3w}7>lsBAuB9u?G8}Tc`S6U&GKq8fzLn7jN*Xp+u zRs(uxiqB7P#g;qzWUJ8e7~`h#JB(h^9IVI0szV*%QkSX!*Wb4%gVGPG&w?XTYI~7p z2L90yPXnz~zx(>eYPm56R`;YTuDL$nf4K4wk%4n!_x)La>pN=#&H6Z=p7iBHk*I2yjTal&oqA9_+qc>pyLy}kcy!dCYKsMaB zzd5`~-~P(8KU@kH%zsiLwEw0;{)hhmOOMDnS~~qhm&B^sIiYDG3ve-wPU2GSq7wR` zfN|5r`Ya})%bHS$VQavh!ozwbce6yF8`w31>NcOM*)D6^LZ%8gsrG95!_=q9`tQ=A z3cLG`Z%x zuFC*jJ4D^q(o>WV2lt^uYtO%NmFc2S#a%R)nft6Yt}%KJNg|N@mMqb# zvVbW1y=N?5D$f`A+xWzxa~`-f@DB8T2e3Ho!{)?fFwOM~IeX0tCG0qn zWT!TvY_MODZA|d`<`w8wSCic!RLF$kom7+bXZVd%TP?Ybf3dIVH=Yt;n#xn7bisRg5 z8;8W~PnoIixb4uh!I%Jtx#@p701XtNLWX~K@5`UukN>*^K=yCD_rE)D5}p>0?*G`e z4$2Bjf0)n!Jzcnx;Cw=!3~Ywsx=5`UtW>o5kdf%Jw3@bJN0}eDo$T{~4DV~`=c1U! zYL=S=R;TT3AGTzlPwxP5=7CaZyj)6KZLfKcc{686bJ|NB-ql5krl_{5XJ878*oQK0 zMLf1=uu*eVNn+OBoi~Z4FMpe9U3{bXTz-Z6epOqvL?F&E4NYwOT(Yek7xw%5fq}V% zAR2|)Nvd;_)#PHTvadRz<<+@>7s8fQRQKkZL7OO?w)k$M?>=`P7NxF@5&fjzb=sl`hb`|JfqoTmur;+9)2;RzQf84CBKkq-J4EQVG``_tS%Ksqdf8(6vSrCK& z;+%;aqA)o}Rd}-;0wS2L!U@qMBu_I?gNQ>DqoJ2;3^ZuhgX2_?_}i}8IVFU_6LH{Q z;DX3@126b9r>#Hlzkv(z=dXYLnEzD%$|V2qN#N?PCXQ~F7Op0y_7+N}wiagY*^451Cez>VEC#K%g{Pr76FfowEsd1DpEZA`3i}rb0RKDb|KCAC{r@D5f4bb7 zf4SV~zY)nZ&9SB7k4)z`Ol92)ASzohkmZ7?9op8E*{h=l&A;|Dhp;8RQS--SEGW-~?p7b1$WyBpT;o7CPv7jfykSN?1jRn>{p@ zhQ!D{r-JVfuUnsc3V`g$!=@7AR~>F!`3m87z1_OINh^k;ASG$DQ9iw(TNVKPrScfh%B zxT_Oa%-q$wg4B}deqe$940ldLDeB)>2FQM`*rTqoIj}yAaTo?!A}9NzT0!^ zm$W`l{5R!02P#50<)7B?Tah)p_`c{}Un7Fq{F{fuEf8q6g9?l>mX?AxNVeE>RgIz& zQ`C;;h-f27CF8{f5)p3T9{Drh5JtbZi+MH=^4U)#*M6GLSEELRrRL=DEcG~RguiTB zt}mYA_D{N_mAa3rq}#ZW;#LA4GFnzmNl_TauAEWo7<8kvx;eHZv!tWQR!Xdh^8xD0 zckj7WNF}xcg!(VPAq^^F)PG`RQ+2q{KZWm+gRy@bxN8zrFlvXozCulusfyGwrDTkL z$w`3b;gS|Y{0%=(8zhK3yXXiLxB%X9;0H5=hD1F4gfd0xiDH}jGZ%;)5t74Vve z_XbkNXb2MNh$jnY`u8(pN_B&bFidap4Mo>^#moRzF}VJNl{<6~l~=5P^7w1ZeA4)9 zE6R-hOQ=4Kzo;_C*lGgc`pbiHa&hf0Y02okPzhU}HKj;eC-)69Qr9lU zIxYaFC3Rbhj4Ij*>9^D{BaA44V?RZ_w@6nQ3e$HHTZqqx>p-WX50Jf;xbTyyZK*dX zFme?9w)iwZjW6AbC$;ddMg=o&jx4WUE1_241%SV;UV+(uLgJrmLNBoYQ2+n^9#L{N zG5%lIf|93*Y5y)?h?&6usKQ1%l6cU+D#_iXW`OG&A_~QYXg6=Rt7*T%_xHd+(6#}S z2u3K-Fi=S#wc(HHGN#F8(w+eFIe`M9`r~DpgO!Hz)Nq3Uw0Ap)rcM&~*_l<~_K;;1 zbB0|}nnz~&sSYJ1-ClBarTVnHSeQ$7w0&#u))*I#2@=WPkY>AdNpb}PT7|gg@zwsf zbk*coJ@kdceUkO^r9E_l-vq=l^C6=@tX4$&&^WAco^*H|d3Fu_zqU9Ko8If)MAYw$ zApZVi>7Zc>4dK7;{ZZuT|J&gI)804UkR^isJ-;#?isW8f%*H;-?~s4b+<`s}^zWNe zj|{=^049daB)Ok?FTZQHzm|1}u&-pDQ8UocxT!<)pAj^tB!rMp>(IuQrqAdQol?Vn zM|Zd4!)K@=w)twPdQD#ft`l?sL$5}F*HNYnd!Es3qS&NW?1`mvPJuwhEq#Ix*%6|v zPPy)f*#V{=!F`Of-%t@}OEj7(?2?M<1S2Iy4Olv&XMA+GHkRmbA^kRi!AM|pmc`58 zFODH=z-94do#&C9dF#5p2Yj`NLsRF?PDbHyZ}k?aj?+aVz^gdPzq3iWC|&A@?)UL` zhePMV)!?XiQc_Y<=~N=?ZA;~T`0h}!|H$a1B2~Vq_lx*!;nBI$oO7Ev(;nIvU0+Hw z2w->`DdZAlvU`7uE!DysM^8_vsyCL=_I3QYqdW)=Au=?s!G0ZalooJr+_u3&=Sg1U zUX_Kx2d0%|wW18PKJd*xZkmXsK%ONsj6Y?J*zlC+7a(MPG;XTX@X={#kf3(vcI^nU z)oax{7^}8WtA3B={o~KIw#YH3Gl8MH0PNw8LUckzgG0!h8|lij4Jy1K-wtl$w~!FMd)3gy1VxH>{7X};}+F4FCY$*=&^?!iSF&youw^`Y!{$3tOQ zdQ*ryzIXRHB3rGCYn2g5 z-2Sfo-|nL^XG@=XuX%-0h@#@lVFa>P-W}$5(eH^0non@%GmU4DEM)E_+u<>J5Q|2Y zSW2mOVJjMw5n>357qAmus8+~d>z^SC?g2d^q=Lh!67SJO-&|H+a)^u~08A+MVnz$| zBJ{sag;j_G$|7oqde=94OB;X%_}~GtOOHYwoJARrJG;=iPw7onMcCrDcsWfAXorkA z%DuSy2Ihh4O6Z6lP98(*=hu^3lm$c8x{@;q>9(06_!f~ZCLz(a?UE3D?*bm^++(fZ z`59}!B}_$KT%E$I_+FeB0{pMwr>g{Vsxzf7i+{L&Ar*r1rN15hiO}KH z*>QN*B*AZSJu;%IcuAU7qMC4~@UbH^ z@>=N7j#MXG?$ou;X{w6An`@!Kx6|7vb>sN-F$_}`^0k|#&g(iIZqIKb6a>x&O8cIS6u{K8amAq#0D?nlvpO26(2 z-297UuY|N;Tf@g5_W***Zdk2w zEG9!ROes2vhP{)_l&jTn;l`*qC^AGhB+Y0;_|&O-t-z{c%G4klj=GxNrp zn^5+6l1|Q}r6u}8qOfFr$0rl5W0xHR84Z|v{$1L4>PY^;F94Lr{CrQkT7!(Ldtcoq zEtqbe(H;oF*X7swohp1(3Zt-9=5`13_W9@+ayJh~23PmnRycw2pd%AvNs)lH9(<`C*O-(M=noZ7gQ_unhAwvlJ@{x}QKS zx@ps$d~>`|Z@Uf%U9*!E%NFccUIu$>c59!`akTwtbvCMdZ_3#Zr-i7>6nVi^juH~B zAM&uuY$hyI4r~A9PpZ@@-(r*)}Vh*B^WnSz3xgcJSHb)9LoP7IuLHg0CAlgmI_>$a*YM)4zynQ zjf<3Mu8o;zgcKLcOlJS1f<2Gb*q=964myS@A8>Os&Z1ay(*%0JikpsvtyFds18PPU zYlYb7MGYBbT;#39UhQVa>qN6C)BfHFej z1zb$u_yiCSD64m3xo?_~5`qNW1u|>Lpd{Rp85fS2mP$dW(nl>p58e{>NNq|%OD33R z#}o((3rusUIKht1feh}6QwK>>hg!7Bhm>8*kkiK}GmC;kN)yWN7-IJj#B>BC$PN|% zA`C{ER?R_#zv#wVAWINIXMYTO09nhj0SqLy6G^U^=Bl@2ohym@xNkV(NGy6lia)x9 z+?d;VpUd!@U>8)z3}{Q5_uvsauVHRhRx3^yz zZp{+cTX#pvnBwC&gI1WV|0Ot9|I7ZiBZg<9VQBr5A-B9Ph>kq?9dXcy(?O_UuvR2U|DcVkRMEK(AceXeUVhT z1#5y~k&IbPs{AE2`6tq;r>L)eQRYqTg^g;38!!N9p$S3Tq-X(QX_w2RYgO0u6ZPT| z1tr6a8SIWhL*>n+kYQQeA?&d!4j>I~Yp<$P%CYFk*M_Hh!D&~z)Wm}}`0N><3#M$$Y5yCg_Gob3vp>E|n z^5S_mu;{S{b|^|gxad|qyK^+6py3&rN13z@n574iZnuU2S0Z|v+4|V}BS724D1s$0 zRkH32M7Fsp^H`)xLdhtIO-wL50k}C%i2TY>^Sd=O-5ROu8Yk3OYskJL&USSzZwvH(n;r@h#shtT=WI&5R(<_T~87decn({(d-#}`nQ9$^6; z9J9QG1fU)c>oLxsQl6|sEe-G12ZyBs;Jo}t6yuH+D-28#oDwVVg4#cGDq#C~G8!M~ zD-!8xm>#N*=vNevJt^ge(i05h9B5q{9H6lsAdl1>)Ep#+(wgo0)B(2I(NJa&Y%5?R z8zm3+IyIn|Q-im`%-jx;lmp&f&Hm8nHr5T$MLeNcRuo#N6BG72N02S3o77r9}g&)Z7GYwW7<2Ryo?Cy3CA#)yV9jK+Y;7_vct7v8F@FJ08O^IdE*!k&x zMQyFWm~E?G($u{APXO8=+_7bxe9rfXxp^MAX@Qhq7rpxFioE*hH}(+pU?J-l`tkE* zxL*uNV{8s{Q_(vEGz0rjx}80Va?sK)oi&F%H}N-P*S0`oLtGqrFtgL{0zs`FqhNBB z%(FQp`%pLC>3ZSihD~hv>pex1p5W2Cim3NE$9c11kPh5d-U&ua528Mq+|?6(YquaZ zT1X$28mpI@9QZ~SuUbGIUH`B(HF4RxNpZ~Y(kM0neL+wYero+&j7#amVJ1#Ct2PDzB?4JYY4jD zK_CEHIi?kUt(~qR7MXfiAyU4#&Rdww>D73}MRzyEn|U_04z4}t@ioI5*3q@^hFP!j z#6>L-Fn1$)O2IbAFYX@^7dn}XjxrZ;Q6!sUTiR5dct!d?TE_kE>ZF*8C)3n%EFiVU z?rg{Orw2eP1t*%j(9!Iz)Q!a;U1SD0XS?~+i*6Bq*+HA*nHLlU^Kv$D5!#BZBbaRW z!Wtk$&WAJGS92~1xb1dswb^`d*3?%-lm0sOl84>NBeg=9vwFdk(n;owwAjs6fiSZY zxti1Dc2{vez0$Im#mw~0&2JCRkFnM6ygg-N&>0XLu%GOF^oa}k7}>-p^w_@Ngpi>c zFPR?D;AZ;#lM3pq>%0P{@9;czt~Rd||Ua zqTin3WPtkrV(cBGE8DuQ;i@D%wr$(CZQHg}!LHbL#kOtRtk^cHl2rKSoafx<`R;w& zd)v2vthU!~>(8EZt~vS`y^lWGwndK9*ngRPDL(C4{4o8($?*+;J~>~QB0KTqrYT`s zs3$;J6HcBJ%e)V}G^h!v2%zW2YwC5j47PV15Vs7Jn}t8_<8BRzG5`4;qdHW+70#y? z;uXXg{Z)WXwqdr z;>P!`TAY~>94DBKC=3zInjjrVij4@4{w_}%QOfNr3W?JJ5k~=_A1uTTj3;7GaNrXQ zFSYDVnq<*3bm$W^hV*r>JE4qK*lsjvcaZI{=w!GCJ56;$F$_>ExdWqrmvf zFnU*4*On9E91dd#dBAMNuoYf`^}TqR)IlNZ0BKRRfEEWGTeKFFcv;^epc29d)Q+ix)i|Jvon%WpwHd^{y{3%F0A3r%oKnX}u z4JfFf@AW93-83YjJ$a3fJ&8p`7!+3y)F^Y`Zc}}IbQZ0tcYlH+!K|y6XSI^S?g#1K7n8_Kzl^gVvwbBitBUrKrXyON1U&cUI0n3(Js#ym&ZrwKmVrWB9+csI0al zxTZkRLOk#Eq50k@65tlHo-79Eb~lQ|J^p*h{czXJ!*AC>N3A zJ92XovNs`4y@}q+PPA$f{Ce=@uLF-C{Cyc#aspKH#h$oh#=W!}wW!37P7)w_dr172 zkYcYHNUQy68OR5?_jBJ|uk_;Z#ZZAm#s~wDKenN$AO!P&Gw@YrpoNIJZhQvKF5d6Hzvr|mOn6B|yePsh7;>LV@90)aZv^sv5i4v^MI^?XBnAypS)4>= z$0TDm>coUf9CA{mtvCFE2`3*>jAl$riwIv@P};5=6}V)~+oqsEB0&0xSOFO;;r6eEk!7a9mg{nrg1F8gN5VmTG<}yovWYS#PPnC~7F$9uH zXYE+ciBvI2T!|j(lvgTNQ#ufxpY7TSHiH4@8LtU#{*KXB*D;7=;t_sXVE^;oy&~Dq z>|KS&8sk1^?beRq0|~E*;*J0at<=H&;Gs{`)I$tnId9MRRsAMsR;gq8E|o7u<3Uq@ z)5Oaz_OQmAw&uF-_48XaUkb+~sXfg-rCER`c#|=J7HO(hwKBlWm@SiZxtDr3AW@8_ zH3-^%PTsyAS!2kaWt&v_3HnZWA@iw9ME}=(-j-^0!zuI5wX0z5iYqX9F|t>u+F7sl z!z6?LdI$Z70eLc3Wk_S=W}Fq9EtRZH1NMdvrnOBv(Z)yLO8*KV$Y$C+Q1&~QQ*UP9 zcXqrf>rw|SZ;OBuuQ+jDuQ5vQKH^tHG(AS~OpxFt;t5em^Dz4~5_ZAF6-XOVhQ=_J zJ`(xBg`v}0vCOYJL+QZVo$o!w)fy@hvE^3aIQRx{G4-9k;%lRF1+>?h@#GHNHc5v$ zi}t)Wi;yQJf1)im;|Yg*VFt~G8^C`K&nCrXW6EJ;uwRSs@L88Jdoy^2^JacDD(J#8 zo8758QB}EQ`Ltv8FCoat0AY;10^$t zNQ$r-Q>zIS+iL;N3R1WtM8EBUJI`fE;?hAmO@@UJv|}i@41^Ux4fS`E+81B;H*V6! z5!sXUHIjlgB+S;PqFGtq`Q;fVJW14P4&eoT$oB&=>RdSLTt2S|@#{YbJvxiMzU=RU zS#QG)b_MP5Yww7&9a)KKClG^=3Qv!IN8nqGIo*(!=mie^+(IB31P!EZfm=6O=NH`? z*Zd}7w+cg`l0|^oWJcgqsU_sj%Lx>w#u;M!C{fz{-PhBvD019hV)**?sS=AWN2fb( ze&c0#!gs9`)xRcxs;3MK4R5FxPW1CGaWDmB>1>aPF+7m8EK~|5Rx!#i3H6;*79&)0 zSD`n24=4pKq>$*%4~jG7GAIr4Egz&Weh~lT^gs^#mO`_eh?xuHGT4FSMi1;=1k1`P zJ7r;S?7&-|Tm&@a#b9jR<%=I-0#G;8;tv&wz_HddiKG}8`?Z8pMh=D$l|e*q48ilO zE34>iTI{LhQnD39)L3k8TTD#(j01#kAO4S6UtkN=V~_us;5rCN_&J7D7cdC5e4=4+ zA}Q}(HuD2e9HEh`-3bjdWHb1NgBr9=di5dS_ehYGwH5Gt&+Y{ITCnAbB9nY8@P6pU zvF_5MA7`!3m+ohE+{t(o;Yi&0pRyr}gZ3D|h~JseOt@hm*${wuh0Vv_WO73m6S_g&i8 z5%)W3pb&E)aZ#_Olt0wG<7lF?QF#)0@;qc3iI!n}61@S6Y#UN}|BbaesCC%}Gq_h|F*F#6>|usxA_>*l%JWm&SV z^vfIf%^V5Uylu~L%^JfX@%-}n+3}@SA=i7XlD{u0$q!|6%8cVMj()Aa4LX@;t zgz0XJS~3;k@$b-g^U|XMt2^JhSOrp{3%yVSDvYRUiG@M1xr8Q{0_gX^GKqt@44(!5 zqH;Q7w%4*qzkGof`TvR-{_?mxQI7hXut^-#Cj*MwS^Onu{ueJF95*99Ac#2JV`uzx zu&HTj83=J&CD%7p5rI)uk_$n$I`Sh+b#0i9;O|4<4@FzOF=hPq2Gum%jZlUs!g4k;ny$xF+ z0dM=cG0pMUXzs=-N&Q8N{YMG&kMZFr-}mo9RJSto_}4(XsoJR^E1~+)2f(aH1UN|k zNMPtQPUuQC@5TsO%{AHoWu;|*j(x#iTl^d5nZkD}y+7Uc%v)gmbb}^<&3~ZlIQu^H zh4(m{q-VzO6^t>uGQy7(tuSC#?I{jE4=}7O~Mcup$u)4E$TcW?k z5}sO%xtwAWO@K>-Eo#Pkm9dX!aXqpP?b%?!@HCsCOd4fLvh^*Igw@{gR;#bb{$A{C zKQx{eVv%OwW_SY&#RHriWrR}HfR}sUYS1eg&sE%lY55gzR4eu)Oj*5`woMIrJ_XhF zthmE~sV&#yM4Mixf35jXUy@=OQH)cFCe09RB{8D{>mXzAtnb%Jd)CG|8fk|y$4Xhh z?b{1x2Qaa_%#d@;r5n_HZ1lnUFfzCaO(RT8t)5Zcr5o7$!Wy7j8^|x+fiz0vCt$7& zK;@5I7EUmqy)umWhm~D5)aozlW|Oh(p@h^|oes1|!C%@Tjgjv5YdO;dzR^TJySfJ{ zm$D0us$4(`9cQ^|`CuF|Yt_3cV``o4u}%HGn8V8ip%`0h94PGHem{)G8)Rk_)W2VF zR?l-wme6sx%<%*B2?9?kZY~Q8>_%>Y5<4*5%L=&{viKxV=V3Q~qH~e%^&ylb^5}@f zHRA8`5w3_Dm;)yXus_dWxtU%pHONGM(DNsJ8^kjj!;9w#Ju!&l{*ELZ*~vR3s`}Fg z@^GH5G)E!u{Fwu6v|Blld~yt%TR(@8R@B|kZeu-E(DxEZp~j@;6~Ib1dQK5l>VH%= z-6+JF$4F<7x{clb4RLo6>2{Yjts)V+_$rH)PeCD(S{frDB0Aw0X1Ky=4>{bFT9$c~ zeAL4Zmzcvnma3G1yZ|c-@KAmN*y5l_cck7tP^eBl|7!6>wPgA76Dj(cGXFM}y#B38$` zA0<9$zWtabhz=Q4MQPtFB!v`_&*_-k>a+(YQO@bKC;r4|GPVy;ExJ10zV7My^|5fj zAh7KNkqeOnsDpU{#XQ7>0rm%iI%7Wey?YUAKpZ-Hd_loY6iUF|%Q z>i3J;ckT||*XP>C7<}XGyX_@Ld(o>e#a$30jo+K)G$&=8a#A)k(>JSb+nkK@iF3+E^?cMWM@_7+ztLnyDS zEH5!hOi7M%cj$Svv*D;4sR$?Z!E!vR@P0z4bLO!4?Wwp-vXE zC&UjY?bdZc`3|2X00jXZP80*;I#ecuvp^F?!h;q)gZqE5)x$vR57~U}tloj^98>I3wyTXBD`rjHE#^Z(*++3= zN|!n>S7T(0pGyp}vX-iliNXZ%k!hoTI`2`vqpwZq{P=-942-gjH`i`Q%^c$S+F7xK zJ1rAMhyI6o^U1GYxA(r0BThOUHLn(yDRt_gs`cdaujL0k-tdbQ*yt?S;h3R{BqE06 zRwb76#bI@wL0eO0|=O<@*tqxe3GMrv1B^q>al^Ot3PNyGqaPA+mMO*WQJD@(T^Sb`y zKjEj$=)X@eD-bBDMW*51jHn9IuuyAzuj3vk6@d)_2HNuywVl}wMxkts)6 zL{LPse7j(~TQPCEqlt8(^R!?qQqCOhC}}L%`0TQhfI<9BS#@`&C5;q$&<}g`fSf%% ztyWZw^Wqyg7Q6xzl|*rS?Iq(f-EaKOD{vFg-+Z1?)$l~*%IJ{y58+K$=G)sxmalYr z_KP+@UP=k>ez41^ob$J7St-B8pw_PfB81%O$Ih(Y5vVU+g{G9#kXqbE<}U39CJ+PKQ?L#EmGwBE3_E>x5cQk2e~)|T0}IoND8 zO(7@8)YJ`-0%;`aRhX?MkIu-xla$tP)U-n$I?_$Z*^H&?B1nQlZPqK03jJ;bBP&Zu zxz3Zc*%K)J8ONaXa&clSfS_VLMZ{K{4Oda87nxh7QYK;jhEBn(}*^Fv|d&IiCj*_KrpS z1Z$yC7N2`(wjulqy^|?qy{_>wMZHq=mP$kWv8{i7Qjjko~qNsIszDPdL zr5KW4jI`yu4t|YYtg@0uCq0kiA2KE2y(vK$hFFBQ72gF7 zax$40!BBMKN-DJv6uz2}W(;BplV8j%`+iztd}6XCK0^<+PyM$(%x6%7{kJgnFLl-f z9VPIuXe91zWcLrYbyJd)0Z~HbbI5cWwi?G~VSx)`Kg-W+LJ~5m= z_##34To{E@Rt^nH3pD-lO-N&Okh`b-WXNMI?_wgiMi~a(8a5fYL8{kcXdJyuC^Zr@ z!g56xKLI)tJIrDccPlH)yen78oAm4!GHfuPY{GGfG-dMPtm}Vxip?b0W!J!!^Z?QpUp}4JEuupx@I&Ofhpr+5 z)vgpZ=L9rcsUODLlgvDk5uo#TN`c$#=EV02g4_R_I_$qtz^82N?+?}I)xp^!5!?p# z?>W%0vNv_`_^&?6Xr+nI6a$rSVYx6`&4f-n=ZR982D3wbqmf#;0!9p@ntW^}rjUg! zJhtYRKsRhBpI}EKoCArLUKHZU>6*{wifiLBwuR_BxH|Nx@vtyF8HyQ-3;7XNR4YZn z8U1Jc3)LIhXL@wqKJ34J0d7i^EOGHGaXd>?8wgw=`4~`R5ir^=zx!{un~t(IF<=(2 zDTgm~bkp?1T!AN1ZH)?wRw*KY_ghddRj;?aX7ecXNPOZUo#SWvU!uq;dk}x*LCCj6 z4guT=N*m$Af1OeOtHO)H-tU^L&*(k)11hEG{fz>86UX-~rqs1CLWIdOPKRjfMs@@8jT=@01v zavm|5(rI!PSmnM|q)e){hN%31s~RcQ8U>s`C(iJ{wM_o?vh?bHW-$LkZ~vOBf8{XI z|JZRA>vde#YgTSJtSLHmP?H4w2)iu;11(F1^v_jTxYC4J*Q)OTyr+aWhs(WweW%<{ zN6#l^YehKrVey{+Gi~Sh{`?NwOP$S)IglCc1wl1=$QTh!i;g$nV!P3-tN?CIF6!Rzrk{r2EuMb(`CR;EHPT&v`dQe*)9bg2vs-@B|u2c(O;P+FW6b znYLevIdhi5+VAHY^Pd;;Y&XW$-5BHqikt%Hot;1d(pAK6#3UGxjyXo!6G0UU#L%XL zpm>fVO<2JrurdPy`qFug<6po%bZoHHeh|l)*)o4K927}4XS~`&TE>jf7iMSHeskfXJ(B;PZbY0S#YSq5cIHtp^(=Z7467ny@)#VoDo_^T zf#_`%KS8V-=D7FTaL@v;)!^9)NFhZ(|MErLuum)-(;{qP1XZ0enr)I;!t*(E?%d)_ zD_<1ys#`_iYmVd*7RWuSjsL8yz_u1`JU!yL@l6#X!OVf*-)?YO{8&MBpDS$mvp47e zP89yxA-*vGYl~noF>*CBaj-KsN<_4Q2FjVa8kv6nLMo&vr)cEtYUOI>@K29!u)3DF ziW;gOPw)|YA*fwZ5gp=Dg7WymV)<+mh(El4qor8f`hm7^Vn*86GL*1f&OP2(&Rov? zW;E?T{06_LAP9UO`>yXHo=C5JujPJB99A&cR^~fzET2 zGm_ur_KJWY!0-~^l=eFLqkzP=In9F-#87(b?os(KfGBw0kWN#2O7|`F=P2D&1{|aE zUJq*l7(8bqK4E#`jv1f^Na?B8X9KOTaT5~2f!0~HV+XjV^wj9{hTcj=C1}0PgV1rD zj*i{rR7lH^4l*GDgGNRzz*8;=@+uRp`2jsB(eaBmvIFw4Ow^LLu()BD7PN076Xy>R ze&RzJRP@do0bvprAE*h{RN4khz1&p!vgvXV7E6_ArKt;+jU{0^aI$6~91h)EktS~1 zlGW~lNr4?*vn5+D7E21oR{R2c>HrxWrYI4KE>WsD8iz6FVr@o4@tclptl9O>*3p|k z+Y6*idxDaFYduA=jc?mvZ3@0(=ze|jl?f7Eax~fRD4ZN5bk;{)rPy-2I@1hXy3!Ko zRroQ*Ea{P7mAFjgz=FVMUn$|Y$&{OVGnJ(c5V@FC@>Pi>N zHu_s7m)&MQeLt^41p@mVZ7f=8Fq3%NC$9`rILgvi)6}f)8xFEG99`$?i%W_M=8vpT zZ>OKy!y?kFfOhDedV_ERIxv$@9hTpBZ(iZ=@Hv_<*lq3gmr#wwwrB#sk*7+NEojlL zRY@c$bq54AbfpagIQ)n!<%%WNh<$n`nVBlB?dAqY>zaujs!w2lqti~8w1t4X>B)Eu zEy;>ctXy>hpTf|0YdXn$vJ8PnZtEJ#2d4WpR95Jj!0RXU*5;cu%O^+W2#8qd`?(^D z(hOe9=#}iqkv7Go^0K7j`{QlvDmByK7`7Pti7LF;IyMN4#AI9M>ykC|EvhXOYwEOB$!b|`_lZ0wWAxojMh z$5=fz=Fua5p<#K@aP~%N;nSGDJ;Tj_4!ssQ%)i(8$ZT`Pi{AKU1fM)0gH~D;Y?%*U z2`n^Qk({UtR?m%9-}_P}oTmnPH3gd7V$8dI}-0Yy7qfmU6#5K~ZZALPJqo zo?FSD3|%sBOTC1m=@Pxik&In3Z%o|;lsBWJQL)5JIIhv>2xmW9I>)NUYB4g;WL|HL zK9YvXq_Ja8<}RsURXxiZk1npCE!!}qhLb-uSFv)XZb_3)RB2mMMdwO(SJApq<(4%I zS8205svbA*s92wZ&4$`AqCU?1br)#cH5%eyv9&Y`td;{M5XHmsgu%9?VOOC5X0Ux9 zSPV{Vgu^Js>6vqXmE$Q*a<9hnuA73`2I!RHp~a*cVm{PBG10X^5#IHINiS}neI zZk=B{ArYwSMcf$yqvT_~NV&K6g2XSh3j8Zcuv-9aqy9`1Zeahnfb>@xD-qNN<3BM- z*w(?sM%2v3#M#Qx)!`q@yl4$5M;#3`zU_ochQsxgWKOxx!3dOqPEvPaD;d0w-zlo$ zwnZt4xvf<+69O^FTF!+v!}Ljwh~x5F{qyxjd1QLXqts+h8O?$)s3B&CnjyZ>pe$cQ zj4;P*2QwdkH)#Tw8$B;xw)D2V9=ANUeYY75I(z`V;+>`=bZK?Q%Msp}jJtO3NxPTs zuKV3&o)GZsoE-*n5MVFzFu!t`A?G^4xQItP0A8~Zk1I;ikJ`8VJSlr`0Y1GE2;)z2 zcoVlqeFCKWB*w3$gajx@1Q-nk>OR856qlBRC1A@X059N5goLTja7>f&rS|0LQzfPV z#l}l#ny=6>6A%8-r!8F4ZCccbnU55u{HUk!a3XVd!foTJU#~GYuK-YPxQhAN%r?GG zEo3A@MLjdc@DdN}{QeSBGL9FS`q_9c2tCTWBOt!e+PGDD*mS11R-x7m{QUPXY06_; z!_sZm83G`b%;+WV8vnsMU!#(66F=7Z@8{>{*k~|!*e9~2Xy?eop@_P?Y@s|o?z2sT zPKp(LC~=DQH*H?rtcxT=oY+BO2yycgwX4i1{IFqoF{)@Xw(YGhD7Av^^-`j1gl!od zF5D^V@qxLhN*@m@?#5;nbC@^Z}j+wE^>UvQc)(a$3C>_PpPY zfR5+6zU>i`%5_*@@%n(zP_>VFlnu43OHp@-wnY_!(H; z8Knn(1m*?qLFK8=c}!W&i9ap>@r)1586kOS&o{(rrnxa@^o9itca1rk3P+=us{#cs z{Me8pLQ9%3#gr2Rj&C{xz=WY$gFJuptXLW--l+LRbIcsF+t$cf!4RO0* zozdrw>HVhne|F1bx93@M*LdhojMq!YnJIHEL1SPZse3Z@4x>Pgkc);`dI&EYOMeKE z*6A31EEhu_LWwTF?UrPWN95=tv;%hEzFCJo8e27^^L7W^>&0JV1A@yQqtC>|ru2m` zgDA$+Y0bCNIOCGNqWZBHgbqY*Ym3iltT!UpLmBH%$+0LWwj`PBVofNKWx^`5PW8U| zs+8;8Wv+tAm?T4#lq{Wq+0-nWM~aI3x|#Y)dA{z>c0eqYu>*<#$Pk+K#V$2?KqJ3G=1-h?kxG<1J$%=?Wj*< zA4+dxFej12R9|`8>KJTpeRBDgCqinP$ zWQ8?iM(08aGuek~DL0TALI#Y!dzJ36zsD4y#~;C;o=l282t4cLY zUO_zEm?SrM@0Qg>?*1MD&@JlI6I8Q58gdNFF}(DV!kccJ3Kd*l_3zPu1Gq z9;WuO5CTI{bg@r9+$iT%J6QIRdQ4%hqGf->KQ)zFC^ufXPQ0SAI-_KN`)Y;x0=J;X ziUu&)QXb)E=r$D~5PxLnzt70?_N=jtK96|ZG6Q3<43wx6`5QC?B4{H7wVrX}p= zE3T#{{QD?sTq)OiD;L4^9%>yd_}8`UionVb12LHQF^DUJ3(k*WqgRO7ogQ1KpPuVS zPRVRH9A!~*eCgh`Am47k>fNzCd>^}jNu%rjKIB!vps0TYqnX9=XF5;HFNJUTz$a3` z(0%Koq3aUjcmFSWF6WoTuQpi!0TutwYX3$Te_12^(+{tz_m}fI--5kXyIxR!m1^lWK~Yup zqC+`hQT`G!DK_lxP!Z4aQoT&G4&YU`*I+k;fj>hMM=X41n80`ssCZpTi6$Av;9-89 z$@O^A#&ZAXYhrY~wRhGz^&H#-(?^9XB(AT5Y$Vgou4H^RyJDs2<&OXr zc$1;l23GaS5;cXOdATKzSyf@jx3TQ>!lq~pfdlS8GeGw>n=``l5W^3Z*;Svx4K z|DbBMM}QD^Go1WVMDb9~PxIn77nPi9Me#OPjlG6yD;+hgMk9-SPX%DEO>xy>c!%NC z@`kODBA5lROi`G{a`xUm5K?&KutvS;Bv=t!$``pLclcIR3~~kwh^mSEwFgJ-mtlSwvhbNC->KHW?$@ z<8ZVBS)m>fm6vpPvJ*i1^w!UbMTnW20Dh6UA{90Z4C(6W&*>+2!ms1z89r9rUaFHk zS!gza%}sh;C@T^kEW)Xqp|zastT2%=^Cu-R3Zaqe?h6{=bgZEHV`#NwXiwxSa8EdK z$`x>6TeHw!l1jHgMYTQGx>R%I!$&XKm!E0+%JhQ!Ri>bHV~pKCmUBLn0Ybb*8F#QKp6{u^15i#$CCP5_c^yk$;r{-D z)1|K;R#e1826;4i@yu`jsD$wRwV)g{$)<${g9JO^I2vB{x=i$|5=SD`vmq=#AtsNIRC4@^v^q|uH%Sf zf%fhv^)P<^TdoeTA_k?z3PsB~f5kp?QGR~3MKs*BB4uBdX{WlVs=ltVLb~Dz|X13=(AUn;-(=cQgt)GkL5Ar&h%GAm02k`3n^*9p< z1b%EAYyxHjJe9FYhu~^{Pcmg?p&ksr^^%;w1 zXeco-A~7&?6zTs7mZV6Ft#Y4Ye_AXwQfp-SXE#cl(h>m00K*DvHhJ(GrY?E(JJak4 zz+3UkPL+>AYaA)oe_OUXJ34w`$;-b^LMRWj2$vz=rwnJKJ%!pNr`rXhtl!0&57aLI zZekvGam-wJRc2cpr4ljRX{68m&DBz6w9vG=Eqa$6lw{1KF*pa6Hm!u$zmI<(ZSq= z6rDu}`R+LgTU)2SrqMo@O0J!pRaBi5O--4WjzP4QX?5n$J92>PVFuP2w*q^8xqNlg zv-!9&){-QIlsLzHa}+K|x;el5g_)eDFmhj*uTgpK}S1zC;T~yO*NjgQvz*%Lj*txqw-7$ z%of$`$APxrwE$V?0OwR)1hP;?bDQh1;u64%h0KTxf7-3xZf2R(nLzu+7%)DO9pL72a-@x0el&$^V8lz*%CH&exw$}8GOf_7o10NAqZQ=!u(9J4)K*yNT zZ5vN+Qg1O~aitHU$a=wNrP-K{w@$kcM4kXc+fAHhei`s0dEcit3vBe#_9;m}DaMu; zldX=z-ikqE*^qKaQn)WA)Lp5yHEJKb4BBqbJYV=Rv^ykg4cGnM`f@e@M_!2Ktr&X< z=O|pgZ&i-xT~M^{95!qNeaR2$x`Jo5@f6eaJRg0s5}(JW`G{gVM^aI2Vrqmjx+;b3 zZEOwbloYZC^LRk>1<*M{V(O4J@OABaoftGjFE;3=gNdT434v%RElPN|aviBiMNLo~*6 z3nyDd7%eQ#>rrpt$5#Z|VlHCZRpXVDxq)4*d$XIeG=JIRRjL7(^b(~`z$#9`J6hvzLCnx{DuZ@p={?wK6Ii+2|Bh8?jv zqB(j?yriXXmE+LP)eA@0SEad3d_AdT;bHQ+%3$~^sKp2hA+@%IwnNGGcI&zm?s_jC zFdi~h>v?TJdQ#QGw{GYCaAJ4SQG3WsAqsK-dAw*I_N0Meb(igknYLcYPxNqkA48 z%d&)fGc>f0z3yZl8wfiu7;u)eWf=>vbcj% zPGBWq0z*)l=nb4C^I?!EO7SDDtr1X8a7?$*w|#z5$Iudw;^84ar|Tve z`t=*h&M5=Sm9N0?fZ1?U<5kg&-VTYWWlF*eE17djLJ4sgm-Q_v+bu4ebp-g=u0gaB z`8X4J?e$EF^*0ZP{ITt=mhaTZRp$Xo9}8|aYTh(Y72I$f^tt%ldb&Rx?@jLqOc(6E zq>Wsfs_aIXV@OkOJ^QaOe#6olIYLR0=u(p5>fEbXME_@paAim*v_DLtF*ZNwGYtlfKTV5@=#ia+5rQnOour zF#wPonK=O(yp}Y?3_zo)X1G(-TN%FeBPuCM1J)O7y=j0hM4!)TkkHQCY?@KGR{1)@73(vRaf9dc48APJ{Sk)QDi0u9#_9XW$pWxXfr8=m7AH`cFEi5jy^%bB} zJO-N0Ci}@^AEUE@Vx8+SopW@{jA4zZ2K+$&`-h%uPu3WHdjGbNn+ z3%=srrN4tKXZwD%MYwVEfQHXq2U2fkMQEcJ7p-zGW2h z&afzU%hTXSVY*N5l2fR23eExi#%jQ>?^qolR+i`(r z5%O|bnB4fZvUqk9A9;}I6V|hZ&d|`u-z+#Ed(vCTCqK#kkC5?S-ah{mG-Cdhx1keS zxLGm$ze!BmzaIkr_0T`;xuTK1neD%Y4$2eKpiHQIRyHFsOU?YZZ`AYZj*E6;hz6+I zXw>$)X2njj>E?zB4h|BnrcH}gL}lZlO_Req*n{&H)`$gE#G>Yu^Xy~Ov3 z#7(|Guu2(n9YypJyb_N+v8#BggLwNZ&5aU(7LF>jr4{Qj zou1CuvE2>)1DzW&OzN7s-~`LUJ#C^sqNO|Qgp|5y3zUaTU1F@+hn9uYU_)g^#bS1v ziJXKUXmUqvPnj~YhgjF6r?pt$Y})9y;M?%rNN@-^)`jkoN2Y}6TN97?na zi`y4x=dH|p>EI#ul;GiehY5Q1DAq7iM3V{T5{d9sjdtld-!v#Vx?=6E)Jf%IG@?)V zGnuAu5y%nfXBjDx-9Ppr-&V;OW~aC2hln&A66Wn+kY`F5S?|BknP)WDi<|$bt@h|&VPF^mW20k>Euy@^$#+%Wuwx{Ry{GK2pwSOki zz*?0cfDv=j$rDQ%u!QK6xy&TnL3~wO-ID(ToK_czu<`=AjrcZhrz0A#RTW2iwr_t! z;Qb)#lpucxk+}$yk6%QRnc_NV-@m?gtf$l&Epn^vL(%+$*LCgHZdPN`+mH>={0tPk zDDy?Aa4rq$w7+(EHpfLK7LxlQ)8WQaVp#b@_BwYhIGhPDttkMha$yL6mYF!+>&!(4 zG;9A#elkTYvBf)ebgJX^OZg9p<|)dj{)fsXVi;B{u9S)(^R?|AFfSReM~x8wEmZgv zbj6}Dlye?aj)kNkdU9@c4KeX0P6ZX7HPYQ~tPHtg|B@mE|Jai(N z{dYx4xJL&>?sHXk{aa#<{!fd+|F5O_&v|0e$~J#jl0*nPs%Vm`o`g-8BJ7xGlTI)Q zpokO5s}g9*>|a^+hU;B<7FINKZo;LG++2<}T&}WuKKydN zY7Tt+`g0eRDH;MC|A(h(zVTjNI2nq9EKpT$QFak!w%)%4To;^Vxj^y3IOMKmndqZ` zGi)OJyl4&s*2@=hI9V;EC6U^3=$cGehBko z4VLv%1z*`ElPSkiw_%!9uyQ8>Lc4L}LsRQ9a?Q?h)zb=8>RoG%SBDADf_b6{Ep zyA6gZ@B}|XFflB@WVk@E69y$_HS$y)nbmA9L8#D}c@_Ox@DfL}sWbo%rlFQDY0i*R zuNtCg8(lfd^B`z&Bo0U1NS1jVZ#DHyl6z^m;aL7rG_rMA(G#UC_Zs#ot}mN#85>2= z%Y-v3s9`{YdoeFTp2vS$K9_)E6liN8MuBdwm@lteRG#bx9=BCY+LeJ6Ya+y_FNurS zaf_7h#L>R!jeml!WvTLqBxGEz6stH9-l4otQR+-2^T8Ye{;k65IaGyJic*o9Y^YEt z#2kx5at1fc=RkR~;`xqB^9`f;jO-qP*>8CIo8R)Zm*4cXx8D{!?{=-+43Oh8;5hZp zJzjmF`zWjb*?(|LPCJrH3j*MY+7`TiY<0CD&nDRYjz&r?qSsx*m1lfwkN3> z1;(@e;SepDR;<_oOF+X)1TriG$f5%=IgHh3>y%AGsq&j0d+W@ zpB0(|P-gSEEm-Ij;z{??vgx%Z3upKt0I?e*vP2V0&fR|3q0vFp_4z1Rqe5gO;Rz(Q zz`!=d3AtHUTLKMa%Q@M&%w}0V4Z4uwRYMPBL8is@P9Is=hCJOe7vn5Q??_3m3Y%u& zRCwy9#3V&T=eymHyj32|&fNzgaDy5y*`gKOHie^bpo7hATyvek-b~ zk?7<{xRl$)imO4JhgW2{*a0c4$2X9GW-c4j72d4)lh5ho=WYH$6muj-7~jY)dR35{ zjXHw(PD~)T2$-Zp_?Hyv#2l8xg7U~KI>y`wG1(@e3b=5$Tg$vG=ha;dv1V&oGM1K(z7Ey1>99l}k%lg(=8cR?ZkLuRNUw}+T4yM5YIk4)1>YZV z4jgK#51g%I9M0LGYWCr@+ofwsJHuN>mrl!+mzjc&wHqJs5= z_UtD;{@6oZ?}I}9AHLo(y0UKD8jg*MZQEAGwr$(aj&0kvom6Z)sn|9vN!6R@Jm-G* zoOAE}e(Yas&E49XZLKlK=zWad3HCdK<2)Xi0JSXD`y(WSR(4D5P07(8`9{8}T)A|3 z8~8rNd&)lKyUx8k45U60S;)QpvY{()w9|9^J3L|`)bYw!q|4OI+W5JyfH%7wEJ$_f zb|qbXq}<-@TKWo1DX|vZVs$KhH=lBu?p!R@i`}{K%vQW8Qk}4N)3tF5?zyVlzyeWZ zzuw{k{e4fT7VwVJIxRgKv_Skq3H7iCK%qn`Lrto-HY1JAcg3be9=8t>k>Ppi;gj&0u6E9mveyAc_t|s>; zT$qh41be7LNIG7TFVGyXMf8}?3r>)+jP^|?p;}(VFQknmPNCR8bjg-B6NDrM5cXRW zKT7iTdb>Z-WJ$YE>1)(n+!vfx$-V=(hROi^2|umqH%Ml=I*E8lBfY{3_@}99{IR-{ zd&=e3{9!#HPOR6UnQA6X_Kr8R&U3xS8{j+(W3gvfJ97|`*H4h>X9d}izLA0&1Yt8m z9ccnPTmcUq?1*}WIlvul#5aNj7&LWRuwD=ip^dGZkI`Q9*RMx%AG>$A>CYqmQ@HpV zhROS(>uenDJwpX7proTUzQd+$QFN_!9$Gdhw*}?OQ@R_2+QxMR7Q-9s6t{X8zc80I z>XmraohKeGfynwqz&&C|4|<7RVkQ9=1x;k4I%|e z#*=o$_=fO{OhH&cc=JapZ(%h0k*ZV>j>!|6JS4&2ycjOf8}aoQApiWI@W8(%G4%gk zI*I>fNNH&ESF`><%BQ~%ks4LouS4XUA3d~9xH_R?aU{BhqL6~xcU#z{G_mOZatlhd zr4?zXam~!jh3QhIACJNS#o2}nuHHw;NAXAX*X6Vf8>o06AYQ+*DHi7&7I(Aj!)w5e z{%=?V5c$H>Q3+Ivct!vtwkQ-yjtQw|bOR?&KbKpaxPh3%cAp3;a?(_~kxRhvFeUw7 z7G>|SdvvMhR6W;Z)lQRV#xNRt9d^6fE+nuqUzM7xrO>X0o9<^V`}BnJBz@)s+l!3x zpb4lfw9AxM>ya)x6q#5W*Z@^oK6qzSYR!$xWYvbQN)_3?%N?LKS$W&R#?~7xz+$GN z)6;iwe|fvPwWUf5%X?Z=p_M+y83Z{9GZAwn{(CnYNkkGS*&SIFaCTuluFag9DIZpt-Gsa7XTuW~?sJAO8dN>8HTjk8>^@Gs(|A6+V_L?&TO8cxMP_ zWRCdM_6Tic%}oH4gSt_`6JNypSc8Vqtb8=S1g&w%yl{lL2kjk;8W^&Vf}SV!O|p6l zJM7VZsb;m7ne*Os%1VxysCSgtVv!PZ%VdFxCD%zuvvnxXj`~YgS#E}tjr=@(drOMk zKEx5!7RtPd;T)BK@*E0e@nssjJSg zU){5~&B73V1!pyodXksp2pV|{6;TmW{MU6UFS`$9%e=Ub*lSs_)_eySYv*=OJ16sm zWde7|T9bgo1`UU&OgCNK@|fX}&na)~e0*vv$;F>Z_Q@_@`rwA)+s}T#xP#|L81M_& z{T{8n@@v5bQb>OgTPHUYZe{oY3;t;RG5+l}(*y$?*z21Z9MVt(=VpG7Fwc5l)*(%B zsy^Wd;zpa{C_8K7>^y$lt4p7=%TN(8<9--acc2cSlmyW{$(X-$WMqK96Z+{je3?<% zcPImsGAKEYgsD5`^R0hWk)Ve^_KFxHyEi_L0c0DU)J`An&kZ5|4!tXGn8b4uZ-ntu z3DLP~;vs6y%s%U}1H=Pnzy9O0uWT;+y(7gs?72rce;P7Yq+7(J?Lt&B04^%-uQYE} z2^(Eg<15Fj{sQy<4dnR8JiuS5hP1tn=f8ZDIVu-&f7x?GXrrkuR#3CUS`_V7$|)N-geG2?)1)Xe@_I! zt*E*fDu|*A!-T4`8Z(MaNYIFtFqiJuMyf?i1LB~mwvtSgLSoZN9nqjS(^{z{OVKc4 z@EIw)G;>i_;Dp`X(g3?*VsCxTQ6ru9a?H)NnXPAZOsp3TwxQoAsGvd}R+@)@N>Nd4 z(&aXdEf8%f$yv@egj}UyEyp8i^LKkqN&P{O3nb2EFBRk9v4NG6Wg_38ZHBjtlftS`; zxy5Bbt(G`S2~{m-t0tOeq!xVGJn$?_J{X`(jtmoPFv5;;Vpvh#=NO-##7XI$PUK(@w$OK1nC7 z;nxOth2cVHjN&q}f7F=YF?*h&@f>LwlNXe)eO+O?f%=Zt$(NL86vm)={8%;50EX1- zIQUJALywZNcviNdS7-cB1)+>bjJJgI1Y@0fEmOs$gfa(qZ6KVjQ%{Bauaq|{O@N(W zkm5!q+bEmB1ipM2<_|aijaE6KHS}8ZW1Ksb)yNS_K5pGd879_ofwW@s#4`*EudHTF zM=@Sh0f?fyv#1-NFbhaNz3&tt;d4!>C4IeOYvy2*koR{etT(tMxA6V1>R?55s+1HK zTSVmw?78JavZNrY%?ZVlVbmKWHg*E{XYOcts=-yKAER%584qJSfuZ@|uEcR5D$)!K zNid5L)EOgiOUv{9e*6IDCE6B0qA0%|MXf=RN0vtdU>W>9wjA4pd0hEb%XIz!QpA-1 zeH#4(xc=97URB!tYwqB;oIZyvqU|pTPgIx?b~-S@Z-)gX;94>T3tAP3hwL52ZL&@m z)3RBC3ND9p5y~eBx>4J;WYXqxxLhxgoGzy_pU=~_ix{x3@l6EgH#e7;pE=Hew~Mem zpzc_PqB+cH;#g|{L}+38hyh=WA?RvRISmd6+-7uPuT3;2CYtADUzZ|lYL2Al2;63D zVaa6&$z(h2jpVtmCOL6B>RT_Nyy$HJuDksAQqwnu)HpaF++idiV%IHp%CR-HxJ=?y9t9#d`U1GDW3>SnT&DbXfCG9~T$o6Nr2ZclN&yZ7sm z(8@FK)-D=%o0yyynf+Xg%*gUX za3F`}4657iJeP5aFz*$Ucps@eQLCL=C6iRgWwCVwUd>O3)8t=+pHgC5raboE>S&eT z@1>|#q1mi}rmRG_?M~gPX$^Xsv4urSLt#0){&8*3xDYXl?82-@yS2ujtn_~fPp_!B z)DP%%7TRHQ*WVHaiXGAIZFXuOFYs3T~P`TX*3PvQe7uqSu zrg^Z7@5t#bNFB5u__OCd!lOrMnJ;G=QI_kO%9s!Vjg@-TT-{^G)`#({4x}!?ynk5M zZ=5z|jOcCAj`_@q64=sm3e(!pxQ9bb@}+}xVnE8#6q)O*@1Ww?_(vm0SgPxL6J+7w zW0g+P*HEcaoSaxnQzTB9OGHX7D5yVAOkmI{Qs|EFag}9n%BPm|Z)%%VD6N%vwSVF` z1TQxLfKhTM`E?T4$i<*)&~aB`D{#azrS*)0Km~1bGUS|#VSKy%duS^{AmM&SxotQl zA^eHCIvh9SPFfj+8C?UW+L)QLd$y$`yU8G}#K~WQ{XVA?@|jgQ(aXeQZ#FQtf=YF$ zc~EM7k8BduKzX@tb}`Re5Y}i`V9;Q1zBYCUpegmTfd%UT+zXJ!o7t2NjMZM@<9!l< zOH_&DuKJPIPhtg=k~tYBNb(HyBk z)|z1jyS$>>tlE8r799KP%sRB;;}VH{*Pw1P$xl$H7!kf_EFfw-3GDdFDS;G~;)7eb zFr}}}MMz#6M;{sM+86t+UiVQ-qbqI@z~Eq#d7jJWLLvJ6&bhIpe{hfvrpi_|I!yz3 zKfQDGiF#k@d>2trsXJ^e2a44&z5^!k1qC$}qhsma2HM!Cw*^uSy+_s6c_{*hoC^p# z93^TjjAG%Bwr(Doi}B`+MD>avcJ$y3pg0{?Kb+@?{z$!ii=Fb6TltX4{g7EP`H&j< z5DVTJPZDrYT;7Z14i`iljpvRsbOl~r#*3~D6R8{c2^_ZFk6aSJ4=k^1;wn#>w^IIh zpaWl_qs;mO4$=Q%NH`W6E!4$B)poIZ=B$9C^8)5(HuP9mtQ9o_^Js1Sk^okS&=PMq3pKC=L3Wl#zbh03F=b(j;lMu;^B7Y z#0AZauZ}qyhdj%fH1}x?1!a( z7a6S%@brLZ0jV`~?fgUrr#^7)CQ=Z{CwnASj34BT!{D^I!!*fsW@7&K?*AEm?6-?xU|sXuCs=6OwR zxiRsH(?&%$UyD`jo2^Aw`3aVzrwBTJIpktMoCl*q!_y)rSHj8iRxRec{}|HIK-!oy zS2i{$fgMEQI+&{Bk+)R^Y&ro)+pH1qzDzYv`V{e99I25~x&PhPNZrSS+Ac*mx|~Q0 z5HNFYSA_+xOf6+=OarOeDzpx^LMMb~ zLlRjkgPKrZ?Q$dprxD8YtKzwvWi<7mzC7b|3GyhQ%|5@(EBo8S? zRkDVYrs?(z-)D&|>$E;Ve3RJW@Q$Tr)0e~-vnbR{jt!2DtN7bzZP;1%kw_T;kN;DFW|Aqxr(r$KRc4nw`2y=oisLBv{Jt=+K&1Qi*Y7W0WLUe z%qq!&HyqfImMelvjDQnduuoip1rdYr5eTnCAbiewFbqCZTptqjRxY1-57o`H?y$@? z-0Y@uvX)pCOLTgr3rW{mBk&653L|uyNh{Ebm|`!pd6CMrCDkSidY0y7EG-_u0E~Q7 z$Z~Z%EwA9haAyb`sa22lx`81cAcFkH3l>MhayKHRRhcyF#?ZL>8l!pCsynNYsm$G( zRqbL6IcHGqOF3!xn7F;=u(IW}GQ`!%74fHWac%ZsEYu`DY;P@nSxBr_sRL_7l`P92 z&C^3ZSQeo-SjvS?tkVp4k7K&WB@HOl{MW_MXAO@9p*lPz0`L5Io3ca4FNtD%!?K-O z5jeu%IItgRW`OZc?b<`M=J|F6ntJ@2wePaa5CT04FZnrIMkr$SSY-|1&^E%Mxw+(S z2BBI9+?@_d@$U0MJKy>U9=CtP`o7}u+#$9c{8);ASR-jQ`oS3x&neAN`hbb52^V3_ zNo{w)=_S~DgMZaB z_&4AL|L+L?S7r7$P~xkmsexjS$|nHK9E^lqzuan}Y-es`;l0kagcI$gG)pIf>;QsqauJ_~Q zvQg31p71a{CPu(fKw! zP@Ky{rvG3{p3)=njS5_zMWAR`^Z08%cJ?DM5F6ZC{21d`+PqzPJDh#c=pSJ?A z3-yp3$dM68?Gg3%H6_dVqiUD$_+{(0F9s1@>IM7YOhF>wLcYqMIT!a!&5<+>Ho0v7 zSNeM8uuH5@hJ`ZohBYaxvb=>cm$UG7Ba?dvv3rM-f!kN#*J9YdmW4)CbZiX8FLEWV znFgu8EZ0X0*Cus=_%e1h72!CVNs$mhsTno15n?Y9KFdNUSN1oBCa%e=V4Oj-^liTw zIeBeqi~zoxs}@j@VImT#-U&Ir3fCBl&}J9?^hjcH9qExNLtyp%)*PvDOS3FK*CUs$ z8yOwP{M53>z(l?`Wr-KpIT4e^5a$dI5n;h4jc+xS;TC!)w+;&x(+~5PYA0_1CzR|H z%S=6{lmaspmd)vvs9>`hcT>HMPC5bOX)jOe8j5Ll-6-+1<)DC>gxj}0udVW%J)gRa zm4OI!8Z1N#%u+4qO+eThUfboT^Wt{MM_?@X4#taN4WX@ak)* znvqve&4CwhWr?a!)J?hA57#-hchz8~vGp6(4}XHKSIObo*O1cTJU(9=Y@uM;9}AtY z53$73iWan=Vo|$!j`ZvG7+Tv7@Y#`Q#n@bII`LZlR6T?(iOM9|nFncr9Q{;r*lUg9 z3Qh>i!MCzJ^HgM7u4{5RG9)UWVVMpH#HwF8&NCe<{Y9BvEphg_S9y-tn$izV)SquB zd5gv&mfH#0?4HHQ+Y(i((FZ^zN|<;^=Bc@RXbX)@v-NL&5m6V zQK5QJj7!BJ3u&|E!YGIVVpha$%MaH!mTASzITF7<{FLJs(_MrLuOypXQI=(LqHq!^ zgd~+=P4S1WXct3xFE3dwILvC6f}{p3l2fB$XrU$K)}xbq612grK(78!(3BdMSjd8~ z#2l8VX1f5pA1jO|fsBsBV5h5<^GW~Fw-^OXa)$8xXPvnVqkSp^s>XC&*Sd#~<+9o~ zHcg$|ruo?In>@Rwd)QyrH|-z%r+I9)Eg$H!+|6G-pw11yZ1|%p1Nk=x zF_vA~YWsH$Q9CvP%IUi52giL!_bVpEb$NqEY3dCFKw)HZ?a_lu6gJ0mSHTxtD%rQR z2$R|MVZw1J*N63+^aI}P;#Ta~hZd=mT>>b-9HI{*FKhTeW*klFeV1~^0C3=$8dP>z5k8xvJJQh$k)TDr7AxpLygK;?tCKoLpc z)Wot+8*Kndp9a+@YuWR)G?}L7=QTmj`&*CsLRH-oX5R8WVv!h#uztyd&2V-QP zOS7ya4AdV09#Ndt_KtD~92d88f*(r~+jW&Wf2UYp*91S_Ict!Eb6K~SE zrb%pW1v6E2sq9}9;ih(OA-}K->7J{RUS9>1D7j}0ZAo)dyLyve^AEJUxK5B&Ey}0I zcdABs`!iDMPHHB$YzkUPT-3%d^&~NpxvEQTc0s)WBx&xXsMlrFQ+rF~?^C^@MvJeh zBeJv`sA`I}l*YM&AAk1S?O-SqBZbPEs(X!SO z?}8!;?vf&TB&0A6EEejM&V=Qs+H2j?8?qbQ_B(`V8eO8hJIBbLDRkMV0NoCzAJzM0 zWBcqbXrA#Te7$6xT8lCyb)F(Q(Uoh0f+Mvspx!>~>V}1sgGz>j zig&OQ_a$J(Qk#ab8`-QfK#Y5MrN0 z(Q)FU!v>QF$iHTMb?CKo0g9;bR`vz71rNCMeO@7;(CV`>Z)6cObo8Wd)(6-zV$fAcE38YGyG2%bWE_%iSPI3*E zvQCo;<)?m0X}1G9u);JIhvl0H61DeL7~V!bWnXO4=4w(o$27>~0ZlGaZ?aZv^3sYs zm85QB{I-wMhZ2MaX;d^@>o1=jBC;y>(tbXf2T(NfZ1z)QmSrVk0>sN%abWKZ4N`jS z&!zfFvR=du)03>Byzj}R1vJl0j8DB$zX?F6LBi}yMFsUxLDA~hUlayZE@@%m<5*H` zeNegvTsYIY8j4b60XG$9N3u?F%gsDxW^BHI<>huO;Jy1SE7q>giw#KLTAze((-o$f z!DP^i*eYo=q?tRytg8X!A|7+EWjO7U-YlfKgw3%FR}g_izyrp2-#>~W&fGf{SA=Vs7tjq_wy0B!}zJ1#e@7?AK`W@tN|LYd>9)hNhD49>p zqX@$E4ys1Ayo2NQ64O@1GR{Ti&a*I50xd_?MRh(We5ZDQ!X9%RspAE{R_s@}SM=`~ z5qQuWCv%EGUBD!nT;Pw!#@{hxPuPVw$N}DU<9KL`9x_a~y~p0O*QHb$eQbpY%3@-t zJKp~9>7-L|1|`1O&tv{Y4L927&Je zq2~s{F9xw!oc(clnK%)sa`Lgzo#;Q*y@V?Ufs|K0)Hnq5xqm;^?c&Q&U(QAXnk8$d zXBL4+0@@U6hDib%Rc{2|*#42Eh5FnUZUn4rOT1@y_*S zN_uh?6l;92Z=`Q#EI(U6xi&9bBQZTYFDp5{GA}VpuYf=&Q6o`PCow|@&Nbv)DG4Sj zX1f23xq$(g5jun#V-%7JW&9z~y-B|h1cX}661v!iDV6H2b5Jb{tMk2H6hG(jghs+ zZ}L$o1pWly9B^$g0;8G0*1tIrjy)TR#F&@>vs;1`m&#_c(*-w&6bHwInTngOt95XDZTNH_XQ!|IZ=vaaLxBoWPB1M z!qPp`BjlOxpiuJ6_E}_j&-15tTvy&{QSyxU!B8kNJfb6%Wq4iGL?1X!WeJIh<2NzohZbc)A_|7J z!4kESd@(cT@#QV>AfKNsDrPihfmlWPNGxl(QX*qq$X6`~=Uu3CPch0lm$n+)eeEv| zs?7*fPwU1{)uB}a10;srEWEf+3QXZ&3=xCl#^_!x!VvYx_~G;^xkCWk+jR^}W>ski z5kXqiF%Ve}?yzdiCBwfqlCZoW7h6rmNUHaYiV{RNFr!T%=hH_Zio6pmHXT@baF_Yo z3_4=wQ!mRi(&%(kLtC8nG-n+KxHW20ZGJJ!u{b*zxH8X%|F$`hXUSck3~NzQx>zh) zk7YK5>4~azG)wFWu`UF3l3Q62caj@fY`Dm3i;*B$YG{Rc?;)Vs;V)+)Z7J+QY_4oY zy_K}A9PUc2#EbLOjTqr;HU0T+WOu=_hU|umVIqPW=or__S+QO=hFa-Il8TFaDS}(uO zJHo zUAzkSVik1efoy$v0sTCJ+%Lk6cR3#joxgAwgsmN##-}2>%n6=Y@jG){gL@@wa}{OL z>eurV;%YrO%9!N%K^WcU*JX%lRu>`}dqt=bj)(B( zkyY>mM+>8M-06K?rfJ3uUA%5?o`)(9l^5sHgL^3juwY|Z*iXbh#=m~TDPPh=mZ!6| zTYb+pIvym^7CQm;AS-e`^F~kpe9aJ2$6P!TcbMD{;A*!kN)a>3NTw_~VD-(uuSo#s z@=AgC3WfKg7w6c>?_odn#P#h8m>Cq93vi^a7o0t@Hoxm^@0;yh#u$Job=+e*Olo#E*4gMj2uKd}OQ{*Xe*kx#q zt~$m@U6m+x3uoZnQQwj2S_drB*KVSUTecsS3YF?)6BX-=sfB*y*D`gnsp{PwZiaVP zizz5S^PC!ut2~)(!!YCp!93;#(HQ)MyPlf{cq+D$H{?^ii69xRHe4pER{Iscg=(f> zZ;-|5789!*Cu*Wxew0wZbw!7D?0DPi{z{1$|H9|csTcPO}ip^G+?Mk=1Z5_9CLwgFCRLp zB&U>xEH6*64Cw`{8!va)EeqhL7<qhFx=$R;(nisZTaC!Rsa@DyikwQAF@ z(&tD`b%L&yO@AjiyRYQPmG-c$y{qCrMLN_(DsfPRC-o2LFC$B8R-9Y)+_Mwtp zn%VZDeLl5c(6jv=IRJF|j>n@XtMyC|!)W;RGj$8q5f{vP)davXJ9(oB1lT42>6!%o zD@90g^1}@sFtq$Czgg%Flh~n_#36W(&e1WNYmzveCwR}^w#EcL&RaFkL+F{7b=gdj zVREM){}H3TX&uk$L|W^ZY0vh?Be8uz-UWvoCTL`ShZz5Xg8quSOlJq0YdSM3Ko@`P zv3yoT1=Zm z13QgSfj?JN2;aR3%Z{{HbPqyb0*fQIBTEd=&5pF)u`dRUgL(6k{kkcYAqzb9XWj1p zsUMzh%-H(n{pV^jLQA#OW8C5Z^&}UC429$vMI0k&tM^xb?oT(P=p)+zZlqk!Np_9r z=V)u^HT_A|jGs-Gv*2s)1&m4AAiZP3M%3TT6e|>j{F+aoo45wI|9}c}VS*Sy1sc+0 z9tRLXg}!C)6}9y#U_7sGMHhg;5iynb!%<^aat`*2J9g)RznD*U}ka&3z?rT#07+?LFAp+LBCte z<*-w3XNWXFpjrzyAfO^qqimGpUcC)?$t5gNwVo%H*DFmaeNGPiHdVKn#|k>Uk|f0u zY=kDw5<~_Uq?i`;E|>#P6x^swaxuogHzarAJ*1V_=X4M7u_~_t7v`joBUGYZgDXz7GuaRJ4?o`< zH7IT=aLto8CKY_}rl_3@_-7M&M)MX0_Q^-IO;kUemGBnCMS{b_wq}70;Ackph16rP z3M(eBSPFURbp!wTye7F;HXoykNg&m_E)W7~;y3s>WeLke6qx}5=O9@A)r6P?c{f!g z{0IE6Y?o!@hBD=ABn=nqe}OIlYKAtJU;3D)UzQzzC$}-`?*L_UtUtY$nc2Cx7C0LV z-?7RnuFscJ%W$;0oTJ=4E#hzXn7`Y@(mwF$o$i*v-Lyf8J}F_dFJ=v&~Z$eP009Z zx1uBOWYGGl4zc#LEN_v)by6Ne1K`l|sRM8AgnQP=z4Uv9!S)ibr5I`59#VZxe5ujv zJm6A+F=1evx?(CAls8diPrqG^WH`c_8#o;|q3Kdl%b{bR0eFk0&8_XJ*%mm>(;7~N zL1;(U8R5B&#$pTiMrz+P7WNy;%`UuSUL^w(4Akh%n&BVj*vS+h!Lg>O z+9SDu(<+(c31B=_w^-p9i6y9gDXGqz&B&pv(3EaL0LMM;rMu!9-!vRa27KmGyTd=T z13p3E|L~k8A8Rij4#%N=fC)V9oBt`tlsm%@9<>iI>?h4|TZB@CO_L}nDRDNN+ zhg+`X;vA*|9z+%1YA%y?;jWy!vr7>W(Uxx`CmK`nJ{wWU zU>RNo0D4x8Cw&Tz^n5@D{-b{q#xF`8Y-3^kK+>4ILo?=FnF(fEX;hY^;5-v6?yS@* zTC0ciE1>5-V1Vz ze%@pL36 z6i6~v`(BZjyr{YHsFIEDI`-Afd6%i(ns9Imwz+(AiqBnSOIo;#a>WE!hslZf zy38HOLxcU;h``S;V{<`sp|i~l0<;TpfZPzBJEk*FF!~E}LnM@IG^Gu|B7dJU(W-BI2N%Dsu5a!2iJkO0`SA&p?tGAann43qLE2h0uOd zZ-X!?ToSMVHzAzssq$@6p9>Pu=Zr=pv<-Bo9zxoy5;h^#I{)$g;J)@-LYyG5(Dc$s_?Gt2 z#@||!3G~S&BHj0*g(i6muTZmj;f*8fhG_{|m2z2=aRAp{QGf(T{~CMle%NupIk1RQ~Nte77O0E798gU4#jpl zot0yqO&s%vY5;!CAf2;?cSGTICaaDTGwWrkKGi4hc7Y*-F4-?t4*<1F;fKZ^ZyHlV z#_OgCYOnT)30IO6IhqW0#%o5kfzohsrX+k)ii}kTSbDWlW2Z^^j}S(?&dBMLg5x{o z;bPi%ybhpk$yx2zjtIN0W1>#mER}=WyKKI&((a8eiT2Qqx2@mbc06BeN%8`)IZ905 z*I_LtX)ecTE{l2edI6fI=sB|8z0#fJA%~?vch`JVZ-`@Z=fb`IvpZ*`KWvHwE-jM7 ze6mmc<4}5_96LvxvuNB z7Y!e|EqARHnL65=og!F}R-kV<)>wSU8E;D(ArC%dc+|5g`NSCbDi+%;_0x>XZVl7Q zMKr+X$gYR+=cC?-P`!o+*J$JlvbXFza*NQ2x!cPje+jK=F*U5@^a3wk81{-vRpjze1cIW~5`NU8R z``p!sbTWH+`!^x8>0iPRDCnUzc#*9g->3?^M{;dQ@}^(A}`O4yKN|s||%mc=h-hQT9V-OB5JI75kC^;Uo(JVuY7z$>%4WIQ?xE#we(md5DuCv;3oq#WX zJ{wtB{zKJEwj0e%F!}zt@r1kNBiU(*z*fs?(0QT+1}}9|bu}>#?+9xmJkS_co*wlf zh3Uv9AHx?8fFz)>>xiS1v>ghr~3c_#%SSc2D4j+-vbFm=Uu^%7(h0s7U z{jTyFZv{6g{xiI7nQW152;~oXq3^d=-@g55Mq3L>-4gZRChXzGfnAzc z6ZgjR!ZTOu*Qkde88-faBp%1CD>xYDZ|-^V#_<{~dldVsr5oEf2lEfdYt` zgiV}_qt~77*q~+>GW6vSaEG52t6mQ93V8(D$UAM$pzglKIloiK6Q+D8%zdLAs#b21 zvc9W7$eHAFHtPob_WJ|A%LD>RuV%C9sL(Hk;;g}TTTW{(L@&I2fybyZyAZ!tiyY#S5f>(O^~-VfU%SfF31^sIlsU*kHUl7>UY6iZE8W@$jx!x=@t|wuUD1ZPG6If*%V`wUojQn& zYGvYkrDwklFK}(Bh?2EI@~+5kQ4#GAx8|1`6{Zh#!1aYPbDdJ?#m0|93bD!Tnq~1d zWLb1+z@kaY6KUATP^n!kle&w8%XL>#(nlVo?mRSHr29u)XnVGqzUWPpMY&&)t6z<80V@?n7f_T{*_b+~RlW!yB9)LnOCJ znsfo1^KVEtWP3E}u21}ba6VZHRzPQ8oJIM6j!`$|>Qes0ez9p>4;}*ai;8YqH=zRo zfP($+S|lj{>6Kv0;9+aS@K=x6|GohGe_!BW=;Unb^pAD_TX%5M*q2D&Uw{11`vjex z|4YflH(C&8fbpB?AB&b2^hc0F*ws*cL6QED_FFJZxE3;5(u)0c9SNG4`kF+sh zTqNl}=8>(dcpOYC^VsHAyhwxE6nvmy#l(oLhOCr=Ch@wOPwN+Foo~`bcjwXWVv{*S z>?8*AX{@s>ViPeDOG1PZnFqBwdC7Y>Io?cr`UE1D5oi`a0$A)H*MjeLt)f!rv|ci$ z$@er6G&SwPgF6t-nfD5H>>m(3(!HU8c=!I{2S&FJ9LAMM_ut@m>$or2G*Q=q!fokX zYa`soeU(AFBftM4SK$IAYJ~Lle%JjQFZZ8~6|DdFX8&`qW$f*(4J}L!O_W`Y0mi1z z|CIy$W7og=W);gu&kxN8DRe(7c%N=G5lbk33rvfAk>y^pNKDx(eQo1~#{bK9#*r95 zSZFIGC&$x%8}8=e;uEwFGmJ=Qh=_NH-_7R|+GRGXQ$q);Jt)Z=*uK!5^jn#zY@2LK zLWi=ZB>yuw;kT_NHb91CMKu}C96|BMlxZzG^{Q&AM6XJTkJ?CLLfXpnsCkVA=W@*W zStq3?_wKJ#MLN}BgwC(c6}u2ss>xddtypg!cW&h6(4-r#DW+BBOH&`QAaVGZwF2pB zfy-{x#NRl$Ju+Pf%4@?V{R3GkJus?fxJ3OGz|Dg#YpF{+&s+Xh9pO9NqnyerI1dY3eg0 zA|iqgmNrQGCK3N0>K}kRW_jyRrYS@?9y$%d1;zj-I1Gxo4^E6NY6C6_0wFjo)S~9? zvC?W~t*EVSyKL1m@r41jiSLsS{nj4Hy7AbV;#lQix#{t}>na1pf?~?uXp9?{c;K)) zjVQR|gnJDsfskocl)MViLjl<2XqQHnxTFz1lxxB2sfEPy|zbbS`D>h}R*A)q?s z!a+h~(i(&VrTN1FXRuEc7C0u$4py^nhVnN~vn7*MA8J_!r_8h&0>vb^6oEyjwip+4 zsP%Eu#Iz9wDS-iGzA-AI%OrXym2eD8Dcg=EfU9Ma8+5`w9B#t_vzT6k0KchanhtV0 zX;t)vLNB0eR;-1NyA;4DS=7cH&-?UieiMc@woruACB@}2{fV5RPrGYW;3^5HOC2;R z0xk_ki?)kiFN2;8L)nxlzHtOH0bc!0fyki5UloKJjrBXgFdPUL6km`Gx=#uCDT&CX z3e^D(k>UY&d0wb2W*pamt62C(XJVhXOzD-_$K-0WpvTcGX!9Ft-I){O)`VD>bkV;Es*Pk zr9?f@s`uMs;_!j#{gSz*C7@@0>f&IN7j|o=Mi_B z7Y_$x3f`-r$uNbdz(UUdy59r4+V?RAk4uGvbqx#as`{eNb01V|Yyd)nioL zK3C{^nZRr0nv6A8NVf&n0%4zf&aCU1O6?Bbls;B?hDx)we6()EwsO!;1pD@z)gH@R zx-Br$N?uWSnK{nB*Ml;P(B8J9Y(#$#Ez*&;-^JciH%0ui6av=FC1zIpjLux_u(S-& zoS0T~_iBYj^24hmZO-^M{^n-f>`^7nYqH&bS7bF63$JtnJ%;8X_1EgMM|8(pq}8A9 zPSY0r9}-GmmTaw!a`5cUnJ{{a%7(dMLQ=u-Wh<&G*pO4_6_1$V4R!)M+G;1}Opr`+ zkSj2>CO%Q4H)fWQaQtOqQEt^Gz_o<{>B-|SG+=ZJ>81&8217B%Q7%6T=QNt}gT?(i zaj&D`8tTC9I?;fFV{RPUB{VE`a`QFv9OjRR(1L+59oqI~{a8`cS)>n5W1YzC(U@v~ zq6?y7#+|es;*|u8t#B+MXS%wYGF{g)GK&wK!Lkc+pbJxwDA2Ut^&N)i%C8du&fsr6 zY_{*Dp$Rfz&wR0Ha;4|=G}`-jZ{58>XXX8GZv!^OkQi~ZS1(gY)cu3~0gZ#xT6L+M zHx;R%twT4?X^lp2rzxsStr^fGssE3#bBqoo3ikZO$;7rj@x-=mTNB%v^u)Gp+qP|E zV%wh0zPDfAp56D(>2pt4*S+`LZ(ZH>tNMRKbzHLAv|7Bo`>l6eF1U17PL`zK>plh_ z7iMHQ%W+vvx6A!dc&j81zS07SlEXA9fAC94f`J>KpRmEPTq9;umpw;6* zlUXy*oR?@m81l#?S5oLBuj$$S6<%n(7BV|}wl3R6H2Mf%+~d7rW||Dn-{pODhg4E+ z%JIj}D(~9J@7CapgX5uJ%fC;_xrQC4Jooh@yQ^iq zbAnJpG;CuT8Wf*maAyt6pK}BnyJlc?b>}I&zN0Zn(Ap~7t=y3Km<>;xu8zA0DT^MR z2@-p+Mfr0KAoC(=VA$tWm)^W;EPI$iAh}v|{j@k+ARYiLhof)6bEi4;I`IE)TS4|s zvim)tcM^4Cp5K$;hJ~^LD1fdQV=0fLhd+6R2Dm7^hHhr~9f@ zrvOK_FuuKW#Y21fMgGAp zgDRKEjFR00B~^Na>Xr%gh@=}Z0$pfhQpWWi83WQ-sm>hkmw|b~?<&|Em`>R`+sB zTv-D%PV6QcCaui`VAC?sLCtiLRfhAgtwUgkyGFOp46^j$OyuJH7axE`r*PS*$MOLEY( zDt&deY?I$>-K$wk^`(6dRgV)OwGpO^oZz_T;mF5~zTnLzWwz@cjHb2t2M-D6GFR-bdu zaF7p)K#1WNpp*f+;g|{IanBVpZENn|VFn^DJSaqMF}yHQYRK~~u1ha|prV-}eNX-V26|u@ z^O-yv7|f?Zf*-tqsM<^7JzfO;Vd1N`tHe2}AScZX%#KGFGJHZEuYFqHhKG`LJ-0vgpb0B?n zs}vIBVW>D5nPOo1^;q!cxa;{z2DjS@;{%aD9Yo=I;oswl@h9e%A9wKIj2LNn{JoBh zp?@%;>B04L!I^^{?fzhUZNv%`XH3fU;Nd<6z+I;#&&A?bS&M4?Wo-(Z+5L;$Lyu^8 zDO4mx>BT!%{;W#;uoq<|Z6#phIad8@vEeyzL-YVW7q+&nZl^qC(&gELH!3u(;?j_7 zDIV7~Y`DVwvpy=X8G_h@G7q<(=g7h;@?Vb z&k2bWck}L1c?gAlM@>?@7^4wiigCZAoZv&U$N0)OE4FQl7b*3EmRNg|bhk=v9;?1B zq*9Ypt}!E}r#P5zdAVo+uU0?%dj$>vXng-7K+Dw9)^J?p3;KHD%2p#Bi1|{xhY^VO z1V=I?lP(HennSPfQ@MvRW!p|X!K3m}_-*r`)AX_D5^{?e!a^pPuo>r+BK1YKz`8l* zFrqOF^Ov4!GT~}4sb8Yk zuBcGY_?2h_(H}*AdTcy?Vvy(y#ln-`Hb2ZlN;BZPn%eP%xrD};9O|A=2bUFY$dXB= z?P>RL8CMRle*7N%P*F@H<%(OvqZh7bZ^OgJzfHky(hqC>n}hHazMn-eUR0Z1OBP40 zi~zpr20Ki??bGibTXAjYWV&{I00jOw*l-pa=_D=<4!Ve8gmw9s!xv+F{aPQdMZx>ElG5>>msow zbW&lw;s~t+1NasL1F>ci`1k#fKjDmE4`HzfQ;A*N84GR=^YXDO`ut9f&D z)T_u)TB0QOq>R2n{e!DQJFKb0xEUMF$mPwzvEApWi_ag`^)`sA<&xjUulmAJ!ghbF z-D4B{9=M)<#se%0pWXZb$-*(2A?3AL#z8duhO7wu{Qg7>c2S(gHk{)@Q^;#}vsY!a z*Q@i*Y(u!u(U*&HHJJ`vlU>93(1Qy`CJNemL^ftGeP(I%dXFF$qHtVw|BST&dtB#G zdn%y}go6r*j6rCU2nzVU5kE<^z)}-YzQLS7)*2!XEeYq>3d?H1MmOgEXAX8>xmHXs zt_emP-X{0$w15rMR0-X#i&%TwRNS#+1Zwg$%dXv0UQoS!E1of^T)*k&O#aAHpEpJD zI9&`X(*ph`RcxT-5EY-RGBvu#LVDn_KSV-QcnL$20>6sVKQ+I1;))(d@YXO5@L-2I ziqj*8Ix^oH&Mg*ToQ#@6Cra`#7hA1l-PpT@w@q}4?bVRc1ed^vVCa_m8@!*GKeDv& zHWB8K6IH61X3L)-BR2Sc9h|A#10(9-Svb-6y zyeW_w6q+z>mgP&5779yEm^?#Eo4=|d8Mq>fxl5219BjcyP$*ida$9V0PRH((_(xtV zrXTLe(Pnj#@iRf-8ecJ*EZI2CV&x9DenpLRm32CUhF*?&cemlXW`{={PS2psG)U5% zLZ4J83VR3ejW3^746C05Pc}A7f0_M0v4^EDhB^c}G1uA8SffKLL!((){tT{49BVm~ ze##iL)FYZ~j8!R0U%7|c;443aUa=)xl2`7)pc@Wl!Hh8H!XcwQE3~`^u@;m)@A@8Q z+hgU7x>bnJAfcX^+gpk&1|XzbrrCPR6X=`k zM4jLh7p8L58=!G1i9UW0$RQ{i)?MwgI1Jb+PJ7l#nMC0qwd`#{sTE`%!rgKR99J~h zO8vTiZDE~n$zG>5P50SCswCvb9|&b zjp=!wsTO_dX|_MBD6`B#wIAX-`FuICcWo_ZaRdjMY6eh%$#G1!N zz{xZS?Z#i{GZihW;e(xN@Lr7^=gV!o2^jJSbfIlloh8jlLcbeX$`)P~B9r7AwfMEF zABrp2zO7YdigPyzI+wErT+Zk;NRJnIHPWtCn$G*!VDaX{7n82N+;_1B@y!g)@;BVv z2eK*R=EyGnY@l9K`5d1wvH~FB!W&c9j4nWJN|UN9w^Jvza+_3XEL|QyQE1KLCSEU7 z6_~d2nXzkUCPGAau$emV%xh-u5qppFnr9eSBk9Ez(=B~6Xg&nUVuD-PkLVAT<`ilcg+%-WR|E zlS0MVFM2e>XQi7m3`pcCctWh$Ee?7OkSG}}oEU}d`nS-m$~DvZ?q}bz3KshYE0ujN zW~q}ff;8#^H0r=L>wtH2+Dg-;B_?Uyl){IJImn^cf_PfG@3m;?M$|t>loo)Yxx|S% z)rmRQiMhqEG2+33QnQU}K*>3z@R&$?_8+#ic1mI8#2lO1iKm$buJH$cH?t;=jSr2) zoc?0s0_m8e0HAB`ta@y!qRz{|6~JKwh0>UwI>zs(5|p9>v>gxjJt^2YZZu>@cyj0e z#t^}^$Rj^B^>6iH#t`4~#N1oX4|Zjrf98q%wn_}*xQ4#%Q&g7@vC^;71+9cVP^l2Q zcfk-f@yRz}iO4j^PfDVTf_BzI__+}2C4z!ti$bb_R zajI2kz&R;A!*6!6RcPN?EhJ|uk)#xXo388+8b~SV9QZxPjCdo8qpCKsevk56`0LZi zpBTGTAwGOf3G|p+R1B3$_+QAi;2ii&Bx*ca$i2H>A)Y7^6ij@QX<1_N`&bkxr{mMa zdAVm@z#LELSd&p#fbrV2$05!8I9h%8OVP^dSdN)Wqv$hhUZc88Ks7x0DOh<`Dh8kC zBK;zCwKU5@2zc^?#R7{_qs%M#LYr1iPQd6ZuHx_qYeq7I-GEl|Qiuz^c&b6=(F;5| zb}EK6bJeebAxLNHI7BkdTi<{yUCq8&cVp%%z;a-brz1#GXFY^dsE^u^LD?Ds}h1WqQxW2=gHrnc1(ueO}d8q-75bPhjvXd>iaNK zb!UXh1^WGxkMHLXu+=hfkae~#B3E>F|H_$?8=-Ld9Ws;cQuUmzx2~>iBUni9E6Xz zrblryi>v(ZM@qQGDI)c^Z~2Xgtzxgx z4|&z#HyZgZ%a)-@(s+R~p41{^M`c_5yD@ z>_w#*8)ke}`bD_P)~y#Ahj0Hz3{x(oR~o8gaz0>B)|RnKe)k6scDD|EU?f}qJu!P* z+P|u%0Nmc2Cz5XXnWFV-nX@y0Mw6gX!G|aGk&l5khxOs0N3JKTvdaqG%N892qW?&< zyqppO>WHNVdvnhv6m(~#T}<`ba}_vOcDnjC@33jsXnCKcCpDGavDW2pz~bRr#%V{@ z;jlxmSau+*q?)0y7cnY!}ZVfaBclYZ{al{eBJxHLx9{Z1)cXFvmWyhn;*UW&8k z4CEV4>Ti+E%6cSWTNR32A!cR=q8nKtlcE%Fulm}L1TMk6d^7B1wtYJo! zLPr#NnFPse@#9t@J69m7snkoa%UGUO?W`4l+s8`{)A0bsr_o*u0_TcHJH)J1@1asY zFIHNo+RP+;Q{Flw%NxP5lqeY5V+9IFl1pH;^YFF^bRvTOZ9@`=-<9tc} z^J#2vAup^}g3I?%O~*T8XVZMMo3yWpm+;QHf`+^iyBQ~hz36?Mm5DeZO3f zu_ejwfqGlfk1>~rk#TIGpPlQ9g7`0zag)z?MdjFnqFT@*4GDGcr&BF4+R9hYSs}3U zzB9$W?Wr=oDWPgk{60$Wi-Har*|+76OlbO9N7v#&5c9GQ>c12SwCz&jtAu=}7Qz6w@@mk{4MU+0Xte{knHyE-+P*N{m)2=A_ByCnSAtXQOdJrcFi ziDAFi&|1$6xmyuvT$ga1i9_f@)0)wKQq? zq{&@>`BOwLPA-B7B!aNFBj;1F5xF|C%>SmWB$$PN|99@&(Ejk$Vr8m{da8W(;6{6< zTT1&+PFhpSfeJ&H!tP^1Nh1;W#uEFrRLP|5=TaL~{Gwx2GQor@4Wqv5wWjXqjU#%M zT4IZu>J4Y*knO=BSQ+G-dx!qwZcbUhVIw5v;(@ztCD`Z{FesbJ_bWp!jCsF%UD10& zi72+gouSR7pzOsn=RM-8svTV0R5Gqh=`Fr9@J z`(l4utXV1mT@Grj9Yo4&Q!1kxBrBUly@@e>%FSne%g8~>+DuSNA8sq8m?cGrFrVM` zEE}4_%}Kol>?w_L+|rJB${VZa8aiWNh*ryVW-kT2!KLFoEO_05N@cLzAzj)HUB;Z9 zbz>{4*ATPyRk7s;x5Y(oQQWJk8|SnIMLN<2m7g(++4RCSqKlq-(yFc7r?!F6EJkWn zy4riUV5h%qx$3!vx8b)h;J4^+j)L6N<0-VyOgPB{(qCT9>et(w2V*BHPpB`VMu-*1BkUhEA^y zS;z7K`0GPpHg!@wUe7z>YtU>dn))$1-D7u`q8?U4ASnJSAGjgn<>oK!SqBn25pj)R za0KW)kP-U!XVl>+7NseS7U@@J?e5L^J)B~(-Mmhoax|5q($@1LiM1p!f||qcU&dO9hB?V6;;k7>u5qbMf>QYbq*uJLe3_MlTzHUn8rg#%9Ktdu({ z(@s6_FhOO?=hVfVUhim33*;sLa*Hml#jksi&w2fzgq<^9&1cPX8;+i9_sEi!rkywv zqCs(7_Mi|wMA0LIP1(iaEL(n~Nmj7ZJUYz~1WU5u)>>yus*GHi*d7r*{`-$QSy#Yt zd$1h;+c$2({|BOq(+T>I{W?Eo3`^qo&zURTM|o%{5ix}IODMz8jJo!iOtDtE1acNd>s zshJ+kZ;z4Nmv5IX;Y>@zP$cJn{XWEN{(X1NHu#5{0W$@mPwXDK-RQRrqsQPbVo&Vu zza8nv4zoq;9==`a*9@~o?;gCZbS>Ab{=G};deN^M*}HQ43|yb#84~Da|K25eJ?UqM z>|MUC>n9HJm*UyA*A2Q$`P#PE4W>)`n%D0N-8*}m*YD{&0jhWR_HREzr1vjXJ#c>7 zXXM`K?>;iudw$tS?TcZgV)c!DSPOJG08B@H8({&qnsdY_lLvHg)oM|AsNQNd=Ne{~WVvU(u zl0CT*R3GwpZJc62UWeQi4)3%~3(P@8$aVB@+s(!o>Dor%X#X(j`9INKRL=J&MMI z6O*BVORBB&N^-!4LMgQ&>KCl5k%#>-{+*ZY;1>OxrN7G)eRVtPCBZ`*ckbnS44Mx| zycyD-tB4*GjjmfvmE4RA<;kf^n=9$^a3|i{L8k;DIPP>lgq!1Yu*$oLsA9IJ{n2x4 z@`eOzF{1fO_dukzTf{teF4`oYQuIV%yy6Mb3)Mupw+$=?qg2V0gLj42I+K{Dk8$RR zO>tJSrq%6GIyd`|jGwm(u9IyMn?ybOMPD#(_2#fz7gJs|oMqrT(`I&yGZIl$u|=01 zi=k8GdGgAnyQF8P zQa%K;jt|t%Yp$-+g~-cFXirnZYdMljcW&FWqubmB-zav;theS})5v{N1Xw%fbYtfCRI` zjEFL~SQZ*9dE?vA)!WGW!GctVquLyi)(%GQMnHwWWbg!oo!|dyZ`0f+;mt8uLv8Ol z>PJT5i-*nY=DE?TW||gl&&f4jJ&SIaYoWmxY0RO0=23S4hY}x;F!|Q0kmOM3tMWrn zLnDI@ol~38bN{eVsdbxZVRynM(oEG@T9wrAp`3g!Pp7R^q2cI`Ii=-J=+yDkl8-H! z0hk)-FpstBOUX*7n@U=YZMJ%9;hK?3o@u9J)ut^-J}mwYYwKfKm1C)EVPV+D$Wop| zTHAt^5gy)YsgvM$eLcbqHe7nDZ10H_w6BbVQL zL|Hzv+`!CHo)04j8i=eIxhjill(2&T4v-!Aqpid@P8*liXv_3lGBkbj#Pm)TwWae* zAfyW7>B-FnEY}4+)z2U1DN!UGJ>N2iT#D6oWSNncr&XtD@FlvVwu4ICPKFAJJr|{s zH`v8s2T$h6t?6<&+cYF;a#;E(B@@mQhQrn!6q!E|-_B0!4WpY71O@W`F~A z2Fj97E-`es`dXb|4>YA^b@p2DT1F3#>Zj!dq8D1S_eLs+SD5nnI`Z;5P`Pfci#ZR9 z(<-WnF3y5X5#=pOG`T+GKG+LSKJW`L96Oz*YrkYBo90@&a0Y2y-NDu)Pq_;EyWE*B zD+d|)Zptx@^l`Gh$j2*@)a&7sYE&0(T_@%!kX@pc@p!FTSq@pj&P z8IZa_ykl#^fVgY09*;idZHvC-9*90f@M)wjWFG0~pU)J1PTL-RqV}QJ=)m=40A^2k z!1y+KpL#DMi8t&s&JL76q0n>gb}+IJ$Fo{r^f&&v>-?T*ig&DQV;FvfclSQ|Z~U>> z@jdbs?`YS`F#PcE&VAG0_~WnZd!{Mg@vfa<_z~Z|`xw4;$6SZ^Fi^asTuZ}r!@WE9 zRe$S_yDsmkrg+D>wu0$Kcn3WD?7nr!UZ?liQM_YZYr}NIzq|Hbeful+oVmRY(+&G> z+jj-hoqYY)b4BS5^$Zrk58V}it-Fng{K@!C8o>Yk6Kf~hpI`7fep?>-ljWH?;0h8* zx<2a3rhJFE#)JW2-c9@TL4d^T68z7FH*U&rx!=i<*L+{I9jk0rm058CFMp=Sm$!T}pO=ODjyGUoMiD_uv@JA z1Rez05!4yM&aDC-7*-eSq$o>?U2*xhnkYk&uTN(Aai3#s?BJsPZ_X-NenqBzt(ov! zMf!Aa{5cOTKk=M1K9q|GyFdQ}!nI085ib3zJdpc>X#Wcl8h@mc2=ggvWB*X z=BAGSNzV;-LV2r-&U5gzd#&+Ol3~Wppb){3+gn%!pb$Aj2ax1A69;?~goe(g$?=1L z4Z#;B$x{>*&_Y8(5)mET61-7V?Df+nME;6^R=u2@l&$|Aee~IxKTTMtu6_ydYy$O9 z*SmqdZy-dP9mhM!?=HB#xZqm_!_CkgvfKFS-Q$1r7v3oT{rQPk9E=LiM|O?u8xPJ$ zaS9B~&CMxE{m#p#qno5vmCv4=*ZVhb-loX~ax9NoxJ@xJHwU|HICEnN12N_v)^h~j zMRZN>JI|%+q@?N+)T6Ev0`esmo(Yh0ktdA}s99s>z$gq=pHTZ}yOXhY;^d>;j4Mn`5Az>T+;1HLW8DFsjRoHi{Oz{rK_9G!C=+F{{k9h@?@T< zmnsJxvt#7hd(ql^blZl1*KJU)|DJnK?Vw*HMiR?`^tA^?E&zvm_ur*pbo=wW`tnif zk5lUQX8`($M!W#s*PA&HS_HL3HYaMAU+%C{I)}jb72F7V0OglJPVN}&=5Z;qFURHu zZ*!^p7^8>-k(VMx+sg?|$t#e@ z4Bt<1NTd-8#+gGsrV&!eaN>J+WZzt}D@M?Mh*L&VqPJ}$WgVk1WH!K?9#YeYY%m`> zqGl})7$Y7x(TXGz-Qm9fQ zheXf;x5lX@?I#`ioD#4+bSw?1q!#v4^8$kZNK;V=#amLxPX!NN;595PatOZV$}F{S zI)_m4@_U~s0f+JQxReYD=$LII-sq?gOJ{|c35p~>FLQO@lTQuOY_(1HHh6yiWH?rT zKIj{UnZa1MJSX9!h+r9N<8bV1xbHqgCKa%bPr(joMPT|xLJyG3?AakX*`5uLU85YP zbfY~>h_|G5@zRrwEgfD=={o3hlfAk(#yJ@v zGNV=%OFoSaWUSA~J%svuJY%_AR30D9_;F+^t{Xp|%7Rx!i!N9fzTG=Hz$#Vja>^ug zx+nibDIYabiWJbZaR$YmygWQwt%O?5xzwTXBET^;tFKVUh2UbI|2vIrYlJPJ$-7ej zxixZ6(bJ{! zUDVnCHr`~!yAbrg<5$lE&QNkmo{&U)e?Iq^0BR~;pyR?|SoPJ=ZM%zN;-|*afyYM; zx1TLR%FIClA?Y37B?VKVAQtVz4_E1#l<(d%%u@bCDhXy$%ZTWqN;_pGI66MW_4j?g zA@K>p>?Eu~RZ2j(Nw9noLiW{_y`{iZwM-z>;7@5C)6jA{he+}yZKFW)s>T7Aq?Rod zb`7IKfZVoWKsKpm6{T6jD3M%Edsj`mqISS0sbv$zO=DM1dc!odoz5Yed`W9pPkO^V z^lRl`lruU-lTawy+FleyEu(yLg1UkJB&wzXQWGfx)(dQWH9ce;PiV=#s7q0-^ zDF)^LZ9qE3;7kZwGD4MpP5Unf@Sm0zBb3FL3&JTT2roc3T`i{hn<`~7qaA{UG={&{ ze9V(sf5*j~(?fF_ zGPP`dMl0K$XHF?YZPV!t-a;E&IYYV232aoS+co+Wrp}9sj8!M#)~p#niQjnXz9UQ7 z$qed#C5_GIaiSF>{!pUmNFlNR_B(b;tCP917-R+I6pZ%|tJvIc$nm!nM-!QP8bK~E zafrOIC6KE1=YOy{16!5vDBx31zUL4??W1yf%jp?bZ*!_Qdlbf34U)q(WHD13Y9p_{ zKzR5cPNk%uddeSbR*qBdc-Z+KYX3gz>c|L3w$A$m>9-uh zof#5zPA2QWI%!|j$&lW{7PsXWl{q*qq_f#kfIQNXc46gTdOE6?cABajx<#Du~IKFe^tZ8~K z`4{8tOI>9{YwGhFZ;p|zoHT@UCZ)or!lBbHKL}Y17OEW^;>hQH=_`xm*Ap?Tbyas8 z%f&j%EJj7<)1Iounw6-+w>DJwa`Y_KWf=+s?v+^ zTo;k&%SoGn>Zp}mE+cVCIJLxtGF9@*jNXlhk;WWfz5qVuzT;^+sE-oV|NjQSt1jD#i_uPs?Nui=N2N- zg^XHy(iHN!wiD#6EpJr2bfkZ@^qt|&?>v!E6sZ6+)JGeTA-`UzJ>l|POgH_ls_ z;MFI{!gYkXkLhYU)AaK9hIw>e@>QF>z{vz|a=h=b=4x|5;h;1xIZ(xF<=xwvG7MNY$`J|J(xAm7<=*e z6ke*SfgDKNN&R|^70!^=%?Kl(Uo_la{7VWWUjicB9wzc}|6AJb4P&jSHT>Sk%Qxq< zk16Y=?JZcxJ2UjdX(0Y|3PHX*I2HWKrBmXR;^DCkBK9O2sE z@Esd87+PjWx&PU@%oMVazF39eAYC^4?%08^FiFXhshcE1e>6GZ1|oo42Awv4VNyg_ zZUJ4SGt7Qj>68m}8MVc?M+%f3r6sh7F5!ypM|;p%Ro?JA3>xyKZQrKw%O%l<79h1L zz0C)D2E8F~!0QX2@FFN>Q!o*&01>TZ30p`&d1`#$lE~$Sx#NmtOPRPL*0Kryh+>F{ zEOmTiA$3tq+vwqp6-}a$EWiu;05gCTLO%0HKo~RFa^lJ#ECKmyg>1xoylfG1t5K=z}t|%qKm|y`u7s*rod223B-CyJ4j^rBtn=y zhPYdv>1alY_jn6N`?2$_dh_WF*>KsBsruoK_mlYBm^q!pW3*(}LIVoq-CNkh1DWY; zwBWb7_l=Ab2giA=WomjEYfNtF^8w()CY{3qdG8QoUv5z9j-n9;wSB;LUm+o7ca-ra zVFi`q5oMa!eVVZr(PG!4mR|;Md#`^$kSxTU$|Xc8nEHXXFiPQ+Q;Js}^_=|E5$kUh zhYz)HF|;*>J&ms@I6Wz2cn=u(BQg~QV{#8G_+_4yevaPRWIOY>-CHU!yI(-|_EIym z?KXEac}ysQ$C1prB4pOoO(*0N9-pOzo%25TaI-C)qOs@WDPPAM)p8U;um`h(AZuJ=iH4Qd zczN2*LzHsxw@oQ1dqc#|zXX9XhT~OOC<4wCy^sm{3~4XtXld*${|nKU6JkwXa}2b@ z*{IE1soZ?uH2R|DiH*L%`diO~10%!*7Y9-(v-!JcL%}?e zWJ=v#%uXMP*zuz&+KIa-C+J#rPNPUi5tAnME51#JDFT8aubV75Eft{hp17%F0|_yU zgN^}n&`Qn5;hYwySO^dPufG0NjU7|kK0(R$>0*6{BVC4aO0dVkMC(ddEVGpwL1uV^ zt=DtuJXInI^^a`&D9_vsOfrrb$~cv8rJ*k@B3r zeRHu`jdid=UsiO`MPF8S_>DeX!l5<@ud<;q7^(8rR?HopvIJO^8*-#wJRLRKQo%(T^ zw_EjNN`O7t=@q8^Q4lgZOx@T@Qbs?@zEEV$&E1RXKa z0VL{}kq>WY@EKS@YVmHidDglFeFX26*h`+N_s%`+U7Dd$@%SB*zYep*l)isPD!$al zsW6np8o1L9P0Rj6p^7u5E@Sy9JhZ$r@musPMZ%vIyg4njBq4sKL`(n1S?*MO{d4*m zZ>DyEVIx!1KJrHTV+BO*s%X>UTZgi9=$U<*s)4#XzQ2GRqpN=_Y=zOa^IQqNJ{UhK zhcpom&0Wcu)%Y$vGMmsB%&~hz4T9SnsLA>h5}T-L-FPx-opk2=MmZ=95yMXbk{}Ac zoeOo)N3)3f4UL5OE{sj>KV~a3u;=ATG2oT8#P_MH!eFuRWepH)`vVPvSWN^tMk@X6 zmXra}OBBF)9}_lhsR-V?h{Phb0@z&4KUa<4UKKc*_Np%GGp6i8OHKGBMr&|Uno}Cq ziYG_%0nVO~kK*RPzUkIfN&2>Fm4P^UGm&#F)j|uwy7nKo83#Z1_<8vHQQwoqr96z9 z)n-^e2hZI8w*T`gBzsIb{`OXk|6TF}6`zU$bu9p3ORQo1Rz4!8iW{OT^GK7P74QQG zgeVK`ByAcuh&QM3Y=M%*%)T=1gu+EOh0XAu9=cq$9$H2p#xcDA@}kMNvXQ#6rc?AK z`AcrvGkv&ZcCbon#9|J;|2LMap*vW=IhId953(&EMl>;gzdc-hK2cp$7NdO9|-G7ZO{<(t*oPSp2NgezUT@ z5dSDdP*bw3Cv*Mb2lcy171Sl%&<1Tm`Jv)=uPU+iXV|t>1*aG3#GRS)B=ZNWyz2{n zkb@#p{&&O&54vV&{?tkbWRoDqZPr+@>}(w1>W+(}YEYrMA`U0Si3WMrvq8<-(1$6W zb~(Tl*Pt1X$nG%iyD@lkIa6H$PMm8?i{g)ssy;Y4>CMZZrR^p_KVx%uy{?d5Ghw@! zAlRT^0LQ6zY=$!gghW%tV0UL7kw0EYOWB`(sH92Z0A;zWtN zeZjSNA;2rARR4L!Kxog4XhL3L_c5H!YEdV84c{iNRxG@7K0$j5dkl^5hwf9*OCD>6 z=T5v>p_ORPuq^`HAs};UGMEQ}i5L!04#;&wm?!U&e7pWR^lJ)&DXiPIv{CG4H$1WA*I&hXcEf2mQ?$r#pmZ-p zOJUIlHZR~w19zG~7)&g@Va|HgYogvgms0{vIX3=D-}TX#^Ia2hdmZnLI>Jfigz7}5 z2em+0gCwOsA|^i;snTAYf1g=RG^i&>noJTBZi2&YrLAdrQkC{HnwbOS#yNL}VvGHx zJ>Ghhwpa$J4aalo+YxqG;5AO1|Kapk+b?4^#V%o8T+uSkbnl|MJ44X?HvIK3GY0YiP zz+iqkaK)6CB}G>PW(q*V>G^12U=^>S)e4synnL==42GsQgkL3O_~v&6ZLr1_8-?^u zn8_90ZDTj#AKI|k*7y+vj>fBCjQ%!%G|!1srU`;XE3lI4#SPKd;nG*ts0`N)5V9d=)pH@a_4T|UkNrqOhPFl7QGHTztlOIMjvkwxjd#M+(GOj&HI~C`=Jb1sysSF*B z)p&hyHopNKvvc!a4HbQFv-9~&%3(WfKvyE49lko51`ZP1_wkySF!_}2yCo-&;BYV$ z!GAxki}=mkrg8To6I+rLW6B)Aj+Fnw+5fK7R&@8CU_>|DEpg4P`a1azVOl)etmD7K z!na1B1u6|ERb0{n8#L?43)PU?<7(tiO7+*x)B?bULtj>Ls0b_VBF6g8xDl{Z`!ksP zr^TYDxbNqn^dANax`M0&IA=kmnYH#O0Z-(nbq8UtBy)KTl`O|>%0 zSJd;Z+9t7Eq9xbpj~eHWl6ZOpML~6YL@p`WtDm_Gj0H{c3yPu@s#J}TN@vgGLFyz_ z@9Kb(7e=pJ?n0UbF9F1b%2iiTJFQ(x29o&Ly_0+@s4d-i`0es_(0Iqw$ZLI=fy=KC zy$YbVzznnZT)`5oAS!-=K$MXuVa>iqe}{o05HXic$kN-z|4Q9mpGo>(GT-=<=8^1b2w`vNTy`t`ch6g$at9&z zI8@DFcQ#CKM#LjwcV4~-%IlpDazdbY{zYOdGkWLaMZ<@QaGG+vd)%F#VL$#^X+y4Z zU-<<;q?M2zJ~|J!5tTOs%o_m!aq5`DyncEX^2uP>Eq+FS=k8M37^uc@yE)kP=@PQu zUJf(z>0BAILlS?My7}I%=sjkK{P$LM*Q-nGeaP-BN5+b?*KC2)EnMDvwE*nC@M^(! zsaXwP&Cfk^Rr2aryX=Xs*?;D+McFNw-5J?10V3Ly>=sYglWQ1Vsx&+64aqME7dBnW z-2KuG*)Q>2*PU&HPbUa}tHp1@JZ(NB2&NHFDxZ-%@d3H3>FCq`=kQk*ADQlq?mYc* z{bltV_WQ_pn-7Q2D4!4@2OvBcen@^1e_eks@bLpGvUmT@0^8ZgM=#X*xc}y``s8u@ zpRtWu{*ARH05u0Km@s^MJ&xNyro)iIiMF zdn;f`kp2Us2DCP25;=Uu+W|tGtjeT(5T!|s*7OWKb9(}DqMh3TVYUOe?C{Ls`d<(# zkyxa_dJEMtRVVuJ(PWR$e)`Mdx2Oz?-*j|7BDXN-MtM+^FKE#HpIRWbyPoISi8E3g z&^7~;F=T3jlz;<`GiI}(z5};OIJaR;3vN(I&6-(uCguO`IjQ3EM+BqJrw2Bphg&62Bq?05R)kl;c`WjH^~nGq)I!?hKm| zk-Z$wUFrEBO9I#67Y7=$f6Y za1>ve2NdIp1p=sd}X{RCkRkU=!0pLeDR4 z*L0zD8OVv{fV|m7|3$Ai*!sj(_l9wgY1glC15(${V&IZaRnGl!rM;=As<~NoP-)9> zu(ZAfw?;-o<6ME21*fqhr>eEmc0g-w4?&35{|?wFfUOAuioF<((Qjt7#>UWpq5fq) zcnfJx&(cQA!bfa>+}EjR2%WufYE3gJ+;oYY0UkJsmsSl3f48B1!k6y28?yNG9^N4; zkE(xhPWK+{B2u9p&3Y#F!Q%u+rXfWCg0!CFsnM-BOjZMXwA!&33IC(c!hpAI*>|Lc zHs8QSD^@;^(x9;!onSPw_%YicR0fmlh6Tgqyj-zbt)JiFU{e&xZeWu=l% z2GF{xs$!H^v;6!JqD@*t7}xngq*Lqu@pX^vT#34(1u0^cnVTzil~oO+Q2{n)q>E`H zQq^PNcQ$zs`lRd47DSH~WIQs!h#^c6B#CuskP>A`5F~W(W3(V>SP^zM&hfoY%HZ4J z>JNf~UE-e<;aCf#lfT}IU4nhI7_jml0N+?G{*;`D;8HENuX=&rue2NOd{7?aI9Spx z#Nzl@2L#87L%C`Lws zrvC?yO6!^hY0vCXP9Qc6@)}i1Wn@s>nnr>x58NU}&o4Sm$3~u%Dp}uFoK7+=0GYAu zP4UOivU=f&)0(kJ%fANsQo>>kS56D|hkkFT#%w_>`W^e;&t_64Z>Yj1ewH|Dvuka2 z6Cy5Y5Uh>k#A@lVkqxUz)sw!5TEx!{9voV*h6znr6qf3JrfaHH0f&86NsoJ4Z(vZ|k2O zcWm3~*hZ)0q+{E*)yW&%wr$(&*mlw}IyNTfoO^yV_s+U!rq-%jRjcZcTJQ7jy}#Pe zCu@k<4br%km}snCGO3S9eLSpAIEOYVVNkP3R(k;{X20xEm4>|kXkwr><4NC%YW};7 zmukgKy0Lbmcsv4|TpB6Wgd^3&4b_Ac)dT=bH6fpHAYxY98IgZY9X0xS@YEBG!rZnG z?p!;;%=mkrmt>y0Ac{IV`E{PKj%s;_NsanxPC*)I)u9CGToP7tpYTgZQFE>?7Mjzz zNpl+Y@Byc!BWU3hQsEP#hDFFUh>sLMjf8Wpi~{Y4Xl_y1mwWT zAc%xrycCk8P2CsM1-~#+gat*`gmL5~kjgm~P%omzWFSqp=!2{rv@f zw;`KI@CAF}2-B?c4YISrkx`CDgxwaVM!iC7@v7HKB~K_$x==Wah&}xqyZKuP8U35a z-W7Ws{&^#{soJEzwoj#{oYYdT?*;I=E$suo0iJCmXt@!j;{lIV5ZwPY6G7SLo~P;z z^q!8Z>g~gI7@})?&(8yJ(6V#xNwrolWRWUv-A>}vh7)>kd^ky1co^(eX)IBppfA{E!Vgy+c#WFYe{;v^`s8NCc`Kr}4@ZMCzlbO!Gv zqSFS7SedWYcZ>AZLVdZs51^NbBp92*BUV<9}wPYiB|pGgi>3A2*f z`%7ub9_+{zxDtC{7T{i_$CUeT=?m$Tb5VdVFm}XYv?Z1k7slbik70kaW&C@>ymxFs z@VEJAh3G;uHb|F(mnc9ZNYnUBhej2O1Ful-zKyjElt(_M-0UGpO%k4N-&sDU__u06 zj5C>Rq~AB=xCr_sO@*wk-fE>>L-LK42CXRWM5pAsMH8m-D+a6TlWNQ#&!-URLHcS1 zvxrK+lwB3cf6uqy zi*L2%j**mK*jEBW}D|6nHD1o_!pMM@xqW|XBR56>X3dR$J2R|wv~ zc}jo*omtts_-D$qi1%;pIlv^}GbZoPk2tZDVt4#EI3RkVdpGjdwpCVOO!IW>iuKKN zQ}DyrbpiOZai{Cn^iD%q@iD|O^D!oN+I<84%#~HHyFGWSz~8_9D~tFsF=(io&B;4m z|MCSM5g7ZrmyON#h$+hXu^6%~fTi=EE+3!GLK0{w9BN0ZA&lE7!j~UqW;BluE$S6( zFc9J*3RE0fu_A3m1m#7~h#O&F86?CK4dFzJRLuzgWJ(Le7G+@?Gb290r5i-aZ&b5s zK<2=*9-I)ZQ?o7zF(6guwI~S9gv4K7e}7Oh$VUypc7k*iQ>L-+(&8-+tQdgQe(Sy= ztQwdrQwxpc&%yQTWq%fIh=qWUd|&>p?VIRU0%(M;fzw4nTYPRis2bREHWEN2C-%Ut zN`^Q@j7jMa5tUeK1vn!Hnhe=hd|dS8y(XdjQa28F@O~0WwTYfxjHjQRmbcfmlWiR# z{awJ4;)jybh`l#fm}>1??hIbJ7?Qdt0R8|;=r>jPT37glzH}{<0%?fGImG#uLsTe$ z34pY~HI$E&%1w_2Qx~O&W1;B9GKBeq{bZNQ1aE>pr=QCNOa94}Zg*3(_N#*CYERXD zT9Nj?T$v!UlP%GZT5yQoRp{-E7VDH%o%Ng>G82TRjl*pld>=@BAJ9t8`K(2?x@<7^ zkB2{`4G9Kt!gFGo2zMhPrq|WJ@*6Tm0IW&hqiW%buvPo<47s%QwW2|*;J-fBqFffm zfMrU8&lma#LUEJ+06!}Q&sUYXt&8^NVGQ}BC}tPLG287d0+ReJqH~h$RO&ge7+P>) zw;2$(84Pn~5vV|#i; z8y*#cOT$%ljX0}(fh|XVHs)1R3lOdd_?!_6-)D>5XA9mV62An;zL8E(xq;9#>jcaU z(fqz|vshuLsXG_=7(wL!FfU!Ea5;VrMhHMfTT^{m>00GGD~&tnh&ktoJ#UUVe~3A6 zjy-pcId{!1yyCC(0$q9ky7CUb(k0Myk1=@vCq^jiNg40@PcYtf1N4dgDu6w6$dXRI zSbbIR9m%~~8uu_2`@j(Mz!3XT9s4l%`vu!f{})7Mge}q9BLY3Uw~th$Zp_0S$fmB+ zA$j-tWf$3Db9qBfo(wfAu2b;Y-!C@jdi=w&o`ZSf|YehfIMe7)9H z{&^wOCU&m+#*x%WqOll-2-w=^T&yS&y1KZT{c1`v#n7W3_&vD9OrS78=Q1BR1%6ap zE~-Qh@BOl#bmP>PX8)*@s-=l`Dm?LE<#1 zl=gZtw>i%7)j;+pTpMn0%zK@E{SaOe-RNmPdb=%9@@)IPyf8a$o3t22q(W6iij(OK z`aM$1iir?uS!J@!1JE3S{HFU24oq8e3+7_-1r@Ha>Th2MHJpMkeTD1ghg(6}l}oi= zG!5uj@e{-8?i^I&8C^EbgHQq`O{I;0x1Z+^>Kt9hs*;A^KY`eh#0IW;+3~nDbfJg3 zN=J{ClD3Vm?=GGx-D|js&Yo&dHd|_Nwr?+)r_^i|xBY`;cfeWno4E!I49zAZj+VKs z6Wr62PB=3NZqTa_Lq|jbdrm9R26Cs;48q5;vEgGOvPxks^#osn4c!+38jTIFZ(<$7 zdiou|o}Vm@X?ivykhPxJiG6R!r5?J1BfYoZgoM|GJ^0)NcG>t@uX_b0i$$~d)CAXU z$_kcpoa`|=6@bf5{dO6dI@*#tX_0cCx^&ial7g=uu@X9%id|8=^63QIUT4G-@66a< zJ89y&ICj?ioYuK4SI^PDeAYjd=CuM|Pnd3DQad&dQZYSlA~n%#Rmc^vp^spQnA*Q$ z;t0NG9AyMG!E{FMNb5O_HzkvXx-4r#&togI8^jg31h5ugt2uJpT1{?GjDuzwP3~eJ z;B~EM46CNXK4u>L=vveo;7AF75;{Qt74A;HrBA=}GG6$~c4Oha-Vp=@WO|Ki^~$C% zUH_dpeUv?bf9+^hm}j-caGuZf%M2wNK$8_>9subo_{C15ASj84}auyHKsw6a01PT^r4`=wBB$zM2_ z;@JT1SiLyDUfjr(y%;wErr~;%lVnY>IFvSJp*W7&0D2>0UG-Ggw9H#X$D%uvlwNJV zlv-{1kZx-xa*)1CaYLuoPw@3@X|d#Ob%03M7tonM9o_#4_F&AD_O02wEzCY zA@EnXGf6Jq*)gt{y6IN#Ov4RRKk9w8&oWFZ%EYf zsn~9K-?zDD%b}xAKXcfqxPh4JzNbPY9B4^3802B-^`0-xiUQsYZ1t#Yuh<)msVly((xCC1J{t11+%^=-aWCkUk~vcGGdd&FsA9V*`$S8%?} zRamK6!3U5pBB|+XgD+_c=|{5REvl1lOIWg=)erSBS<-fxL)`)W5UN|wYlH5j#Aiw5jl zZEALyPK8#s@P!9qq!Mt=FYbX;|y0_Qtlw9UJo^>p87j*|f3Fbi(Q! z+YPPAX=)s~ug%{bE!mo`)RY}xWVrDE!ep+w>ZMA5*x76;FRXV#9kO2lm4K(c%~tTw zs(w-Sj}2E}*LKI3s_E9ZFO%nyoXvzol7t_Ye?kAgzI?uv?rIY)?x<-Judl)(FYcB6 z(u~Qpjxjp-ky(^E(&r1bvVQtFWVdJrJaHS>KAx=SZE%Gi-?uhI8}IXvIem)uh@!Sx z%(xMDj_`X+Z}8Hh4riS30Fk*X=Cml)8K;gQlRdhYbq`#aO4n(p4k!+_Vg39&WL|^J z0O>`_nvG{P7xnCZ?^9S#125=mwc?!?XGs3$F8#DS{P5Z?Q|QI1ioiP>sk-;E*~+aM zrwqf?MR!(0%w_TNgh)}y8(ugz6U*%vIaeB0!xmEw{cH;rX1< z3ViXz{qcyTd~?K0EMP_M^uc3%^|{k5P)TkFeehWjH8b^C1Xo%h>AX_=wxsFY)mEX+z?PtgFsH{KWH=@W*d{A%^n_aW=W zvo6~W+F;&wofTF1gE(t56{*_kji0V+M(y-c&8M|dF0`j69D01`oJrQh_4+QLxRx9y zPcEn`W|Vd9)`Xq|HY4mSm7i8;Y-`rd`kv=aR^6H7I<<<+r!LfXD(*~F5EBU z7r(peSe6l8Fz?eh5;L1wxa!*-CoXz{(=|T#ij8o})lU1(b6BiO@=-H*cxDZwnAc(V z%7ht`y+k;{;TW@sH0u0>k_cscXkN)HLo`cb9*uSZvK6pge?F|X6-+?^Pb|1v22q_X zgykY_3$b+F33<{^cJ#33p|EC`?Jk}3aCQsF?eDdr+y?8rGA;wGH-t^a_%zHGp|3jtg+WxpB^;q}>=UKk&k$nr-uBFZs5Bt97i z6aq@RDiC9)i_pY}+jqt#H=G4^cm5-!@$iR`Cx5|8cusjI*7LGdO?tAR*Yg$>8n72D z&}O*W<^7a?d5hVKpA}-QshJGWrf4vk8Qi!m6U?#e7&uuwPMd1&`I6pe?b-fxTOWFaw=vA1@1B>B#8-ju&bOK{XR88Q+QhbC60`gA?1vDHS%;jy zVVH8fnfXMoTT^2A5QjcVcqlE6F5NAv-!?gF=$h6Mn$OHz6Q2J64y zE)cY3ckk8(w=1>y4xQv`v-nBjoWK!yZF$a0mbrLn@?4aK&#OYHOG7;BNKQ(_O8C&_ zJ!$gpm4*4VksG^7PQHuG_lA|2Qs*Hk3*%RXcr=lmh>OfSqRUUI3U|sOJ2#M=42~`| z`{04TxVSBL!EQGG^<@F>JMA`ghCA*(SQij;+`VIrR}gc#=uKG8#a0&XDO`fzIMenj z&HS>z-?W2CU(nyjYxhaNd}FQlbhmsl-<;s@30|4H9J$x;n&$6QU7or+Jv+45z=Qc2 zeqfj)yYGbQdA^@&qnvlLc>XZ&L9Lx!)Ue87+0Lzg=C|< zP@FR;Ps0eFZ*bF;4rf?s;4ChJI2f!XzI0>bo1MQsDlZx~W8*U^Ij*(h>9|cU8XiNJ zAEwUJ`Mf5LBqxnwB}+7Un?{+;>edSq*;dg{LeJW^4!!>Ahl5d)G9Z^t(`>=5hY#_CvwW3y0`FE zTz(hn7EUuU<*&7!er-NTr z1i#e$LV#YrK>wIq`0}_%|0qEYY(jLG{Hbo==16?~OaIup-}HsSVfZWpVhkHf=TM;p zIE)aZOZjq+@5GZC$~Zj|7&}Qe?lnG@&FOD^L=%9z@_m)1{Vpq>-(*6D8z089YvXb_ zXK^j&HrBJ%ydsUUh3q%scs!;E!(lZDch{GkQs*y6Fswb8Sd*<;SVFStjl+yRs^vu= z1K5d&zuHvB8?IYmL;4Y@gK5auLmfCFfdJ23-Y8@nQ+GT{EqV70qIKzgdz>ANgyG|W zbR_~)BpY$}42hP>eS3_ZwB%v;ub9dNriNSj?9(z$u=rz^sCkX>ND}?X(r8|B?B*Pf zf8?x8^%I)mbrF&IKftI9@kkVq+z$j#Vr^<QRD!+rP^vcR2y0jwT4EF-Pb!MjVu#6R<DsF}xluEv4jY`|x#NDw&v{Vczm#!z8Knq5oC&opFbVlMzVg*HBY3;whVeBb^EUm4 zO3RMGuy196_Y=x|V5Q%fQCSgHAIWByrDs2husFUlqQTv+R#%^1$R%3`$V@8I&aL!& z@OY{V9GbKLUYQEwf?B3JB*Hz#GeFJkw+g$VP2a)Oug^GK;XQP^D z<(mxV9eN7kaFV%pJ2cz`2A%>axwEfSCckAJ{Ft8K>guP@;%fbHV%W%+&SjnpjCk&v^w|^zpN5Vy-ZLp zGBT!3QGSoSv9^FcabCFK0%oTmu%JPB)JD0gk#2{e(aSpQ_ZK{EkEdKWM%)%%ip-DrR0@{Eo;v zJ1;V}!9I>%Gzl+yz8Ia2^7~zh!wWjOs=~EV>$f^Beg#DE$lu0-g$O~n>u~A@6bf1L zciQx0Y{5OcU=w$` z#W2xqz0GH+Qz3MyGI<^<=GlTP(v$J?Owx}N%P}mR^vmhj1o@@oDE(VZK);kkl<$O+VDiPt^V z&K(>K6eT}oJ@m1Q^Dn9ur zBm7F&qXmf<{O+?$VlzW6<^ir6#Ch_to@lh`xU2o!CN8}WNsQMz?nehw)q4k;QAsZ;TL8c}PK6@NY!CsMm7ixsbcyj76JymGj+VGy>^~Ki;6pU2;o2dVC4gO^&$2z_q z0%uQbMi6J5Bi8s}F0V!B4` zni1zwT*q)3f#3rFXV{p$Ez=Pe92^B?c>F9%4rTSPTcjFjPVm03^F&Bh@l_`v+IK+` z#)VE~$JPnok)*jSQA>n!s^<4S5-MbghE9nh3Xk`!zq5?2#Y{(4D<;X+2_5^h5kMt!2z~_Di)Q z8#f7LOs@2WuwtP#Vdz7-ht?W=_u22@*Ba*Ok*s(z;fGbZ(cET#XIvja?B#nUZHfMX zJQcBCCYs$QWUX%T8#!~W zktrLK&&%&@WawBnL)lb0E9JsekH`JH??3*Dy(#;~4uA`M`63bXKbrX2KFy5&&x7~# zovni@gQ32YzM-wPf&RZRS^uV4IXO9)8#p@|lPMUR7&{o-7#a%!w$^sGHpVvpMQDqZ z{|D#klQ>i)jccfBc{<$dPZ-?bCy1znCJ5sv$E$Yig}Q_y;WB1I`c4ZWa=DFoDHb}X zB5Z+ZtiL(F#$lV9IaU3MI1FBP($7~B1aXFfhoXa|RG9s0j)l|d`QGCnFs47v!JX8P z8Z>K8Yv>3JO<#ZLHbcR=sBXXnX)q-1Qp*bE+PbA6DY9Eo8=5_zyKma)?sKDHUa9Hu zaSQ~vB10LLLP4Dpgi&!V>v5`hU|>|vDGFrdW+gVpFh&?fqft7S zvqo;qQs$T`g220Y5=Y-hMl3rjYqwdjooEF531(Wh|bu%nXH{iUz4&vXXr# zP5TM*ACNrD;yg^=Pd*XRCn)c~xh?!Rp}77n6!8C{l;WpkHl{-Vt4irZD*v}ieAIqu z;JI$4w_Tx9p=9mG^~gYyABo!~)MNgDIW z3`GZp|6eL;`2R~Kdq!67q&=3PQTI=kdZ({2tJ_H-+p90Yg&dKj?Bk1br<-|yhLqy4 z#WOX$T>zUGa-SlpUMX$1u>M0NF~v`j(g{XOIF}7Ll|AtOA0natOC44sYt<%f}}WNkYuhvrRRgDyF2m!5tm zl8IZ@qvm|Vs;{0$CMAv}pl7n)47;wEJR7&BS>L_Oa9K_<$}Am`{f7UJaEG=GcWInf zbl7mX&m}w6S}fr0^#r-ipLLYds{smWV*#`jl7=;s*% z{lkiebz8J_>``TxI2BWsb=kZQlW?x4yrxPXB)nnMt_7jMSP<2M8geZH>i^kuMm&b_ z;3aq*YlEZbB`p_&oK+EOFK6Sc5Ei#h92me7Ffi;|w7QwT=Q-D%t2#I2XYF$`eu zM`0NlSBp5AlsC~>2o@9nk=nHTt$>aAAq%M=+j4z^w%vq{F~0s~X~$*_M=i8a=K*vD zE!ahk+ZnnUH3&zor^y%11UqTSF&m<34n;v|rU!u*{sAs+x5^jFtz-we|DwB|J*KzL zmyg%vw>DR%zD3C#Akk%(5keu&VF3hriATC5;26>nw_cO=?}`{cUyM%6RHmjkFq_%7 z=%N;b{V~MJUjwkuFLF2qt+aMXj|whrR9onR^0>J2MoQs%bo;pJ#^C4>^TUILnWb%! z$LFLI>@sgj)UOLj3+`UA)w(XRW24_H$m71PlFAuHkf0i26Ri_5MEV(}0Km^AtmDq= zkS>0qinNb_-&{plS+?1RX*>ALw>eC|#5z={?qiMwfxGvIsUL_Vh{=ry&s5l}JH|$} zKZcDHV^p8fRY!0|g@30HHmW_6{zkbO_$Mh&U0BzV;q#6o{*UZT&M(0KzXblz8}ff< zg&5g?LtJCaqs2QQtUcKrtA`n3;kCM-%ASC|J%jx#^LnxUcEO+^b zU~}#5Jbgo-pMPr;Bm*!M5GIuOk@wN|1JsZDw2`0ZR>HQ)4`QMBL~@_1N)?(Asp$f( zxaysnrnz?XxHT&l;=`m0ZywWikopSEt%f*6a0#_}cFgx4D@%FyhyFgxFVI6sE|aG;BgOlt^X#mHqyMa)o zkjal6Yz$Hbt^$RbZU>R9m-lnfAH?wNwZc&&N(JbQXqFZ_7?U1tKuDHN_i*>NAv6|q z3;5v%{IX(+Kz7hcUunN9Fex`tU58!6EHebk5L>U`O!v=Ca(J3(e(XT?PPn?R9N|Ndqhv%_V;TUNd#YK``4B5k9f8-O1fNq_H zn(UTF!n}Ev#z6SZYB+|CuT*KsAM&h4DWPH<6P*3U+@=L7m8&czO>Y6QtCOe-(e}Hv zhOv=8D2CYTN-@I}QU?a7?h#%ak=Le|UJbw^*O0wQyt^M)_N4cxfKXo7+(OhkTgo3{PQS?i66 zSV8x&^jX?=W_@Oh@zG_bw;Ey#_0Q%HmO0a468$l!5Jx4JJ?M>1QqHpFU{i7{4R61$ zh}e+Rrhti7(W6V(d%KhDneztyRP9LWsvT))6iVA2YjiQBIJsj=QW`+Ur%Dvs@|8Cn zdkH0})Rk@2O>D5eWpXopZte_zZg+aFa<}Abr8u?$BFQs$swKDu4k(ByIOy5RiPlwM z6F|nx&&0i*e3cdUa0L?2!p_9b&-jNj7x4;tDZluc#9zPmU9Cb2_w5fEvT3H~FJA}# z^(~%F&#a*l37kdx3rJwq_*dSp;(E+gYS@&$_8{h?Lf^fzlH#DM!5m6#N%d9d??q{P ze}m*f^aFa7G6KxhQ=*#`2B**EANu(;DQtm~M`VGK7V_Lq&iFo&!yUq84>Avt=vrHi z@O-o{CDRJut`m`{oWxX195M%BXrdC8C6=cLnxDJ#2^vw*!}z z^VcRii?jXDw8W!7RcWQaHzC2@`MKej+k1!}@2<2dTqwK$ihu@e;YjKRVwGJOo*Tk=%8kei z^6@T1GB_u4f}?Nn_I@d23~=TQz2o$^(CUE{#V_EKx+5t~Qn;9MR8P)ti`#!Dr%kpm z(T5pO^Or8^H#w+Ddgj*PK^i@Gj`2*Cvl$_MzBVtN?5F>6+t#J&US?WyEUb#K|A4n= z>7MX;N>&V5yD%_ZOPyUa8-1Dodf{4YZVrF3{e7|Vj2+Z{X+nKTV@E@kaa^@Kz>HK8 zkzEGf)Ok6I;vKREjC6Sf@Jq8tr@K9)&kCY@Vzr`63t}%K{w|HEv#pV{o`d!+do-W7 zo)sRkM!L^#8|0C$J(OMshm2R)P;6z_V=-xC(4`h|R3qC$+@BX&3=8lEPJdK)aCiK`a%nz3-I$KjiY zLlax++#Ra^eoQKvlGZ;cuaO<)kU}NKDNyG#E8OW8pRhG8isQSFJWRC5c_ACDO-n_Gr8F^iK~v-6%}QM2Ih6lHvYGRgW)L|8E|4B5qE`4mSE$ z62ku~-PUrNQlNrZe0yoliC9JmnB2%0E1MXCUR$r*M$gh&KX>VCSq>(`L{23n1lCi+D zivx&TkH^1=2o$xL9(e0Fu9sJgU=rSUqQbh}S+4Vx)(rFEfeSqF5wM@z(b=*Z>A8PC z{KK9WRbU4M87QyS??d$KyW9V|DxA%2NZZP9u$sFcIA3lQo<2wtVkrMmqY^CJkM^%> zX5DVyWUix>f?8mu!E$#MYv_x_J=@kb*(3*-# zKip6Un@NPzXr1llZ^X{GDbXH?&FPC9AQ4B_eIImglh;xEW{s59dKocI7Y(`tQ%h~X z;5_37!V+Z?f;G%yCh8P)pkqMot(w#B+``ZuG`!xxc1_6Kq zB5uyK4=?qPL{$=1AWfwg=syZKL9Mi^(`Vrp_>VJT&i`1rrJbGh4XlhMZ0ww!KBvOQ z`qm1cl;nSxZf6B+**Q5hz?*)Jie}%sWAyuXqV5jJ za48p-LgiRd-?^y^oW*_Lc#4cY+Cf`?{!ykgRj!v&zD`**C-x*mVpv5N()%;r5Rn|Y zTD#LR6IK4_^W3LX{zYojzN8yP%yfB^)VmsmCz*b93flx1W&F1*KA{d8juYp#tB5ed z`z(ax{ly|-4kLcF6+qHRid<)+fu)gZVK?>Qj7>&HJe+WRe5%VCKHA1%YJ$7lC58_P zYjH|ExYqXAB``tmj(O(#Pu+%{(_ZUH+<`7DFUEuJ9eZlI9?T7l0v2Y=V*NB8TcsXo zJj?;7H%K^4lATa5vkI0Ca|Lt7x8Ik7NqY{zVXf9COUo>?ih#97!wESC3+2WtuBx4q zP6yK3Oe5~7#HhW>eHZG@Zz9c>pnKZL)onVXP6;MhNBPkO&on4PD!zKw4cWQcAkb-w zdfcuMv17V<3=gQau1|L~0}Qc`qGC!EeQ3J@%sWJJ+t+aVNxb&lvU9Q`7P_tCJc2Gn z5BQ-J&mS8ze}R|a_KwqAMeVf?ashRskq#$Rg%nN{A_a!8qy%`6D7%p;3UhgLQbGB{ zpw)8O`Lkmj#KEDZNcN4=S`>s!Hq(@o6C6xfMNz>emVBE^eFLFiVv86x{>Y_pU~e0H z-q~=j`;~r)Ht9?^8z&?cmI8Ilcs-$K+|XX`rjuc^#3so~Jyvu%OHGcS{a_AMJPcs*izDl-k)JN_NyrIBsym7|Xa+6gC_g+D4S8*90yq?%EI!MzFUZNzGrW$o7lTFvqJeJTQ=b#oO zfUSCvx$WpZR#DIReMO?h&!eWS-}f%ZqK1HNQLSvVL(sxe04-(-^E0#wuEcQ7%yK5j zct9-brISk&bbyt)&FO+-P|u&q`@>s44?|H7#YkLh8tbBvZKgVG2kOJ?YVmY)&&2PJ zw?HYQHumF_CU^(k3R%6Zm2A4GSXc8HP{V$#jjh2ee~chDCJS2#=b0Hh#x-9oe3(qi zDI-haiqjgfNtw*sjHl3Qo*TK+k;q6OErk)kG-ljzPZ`0_lgWl_)bT}$H$cS~8oSQs zH?~&!#o{-#9(iR)-ZInZ^it1yYdzKUhi4&JHK3;0sT_W zC{*xpJ4_rLoE8b>ckrR+v{0+f2KX^?Q426PiNP^73b{Ag6eo(~-3+BGn8gw|bTDe2 z_=LqDNnPxDYseA;dArWXJW-0Ey>4W&6MsCVHMV-ba526FRC>_wx}emit0(Zl#nKAa zZA^e~Zza;~ z%7iz)o(}0#WcP$WUOx2FAY!l)PbE3-UpZ9q>UVhTA3KsjM6X$l2D>*y5P0~sGD%0| zkrcVJ{*`_d-Hvt_Lkd}l1ipt3iXlZTL=!pn_gdy=_#PPj!XeUOh`{JBLem24Y?HtPip5oh8yVd#y(_=I~d?HB{@}w191E4A{sn6mCm!u zM-5DAXepLolCQ4h?U5slf5})>55v) zGz8Cpt^PsKNYwvne(!0Pj) z42j_hwsgbe!3-bdSyPIIkitJHK&bl>3iSv^X+$M+9@u9bEce>mf92R+M>5t7_b75WPYg2Q|zh zD}G2D?@QC#jm?~ee;jLwk11^_5hmk`b0>p_y&dgB?pc+-WX@f!O^pk9R>V;d5^h^6 z^s1{|;aR%)HhLsGw+?u8M3c6R+lB~sAq#BtypW1|1LGy-Ziw02Fjev|3D+#Ye5aWF za3AAVIk1KvI$j_km>}}=a5zNZC&Sb$8hZ@KRegv5#mgWOQwv~*{PKk#_CJ*-#{XEF z6wR#xJ1b)$Gku4D4bc8;$xO}MPICeMz3Prky>6E?d{@MtsQqRa!pwk*op_+OH)cQ& z${!WRyD1BwtFBA!$Pl->Ny7;dR>m>V{RAf z$ppPXsaXnd?|e)m^gg@E2Y>i_ts~Iuow{*246@F!4Z=WhYe>*V=edP^8H4mowWlAH z0Qs`SXV~b$9z^zWM$eJ=+jb7-){P-k7RqIV9s;zRXiq(8*3GWFfW@UBCJ_8K9jH8v z3?kOac`z6b^B$WJ8+O|)5-AALD6Ov|#Ve{syI?IWCXK261;Tdgs7Kr=S|ZK`BD;1h zL^!gGYUy3+S26aQ9)hR=3_%?EE-AYgE6SetjEnwuod5woK1SNOa6L3=XhCbaad4~^ zq4{w}-THiy97-s;sG@dh0bmYClVFXLcM>GtkvqrQXHqw!!lg$cA|L+axQ3}|5Kl@S z)IcA?m8?nM$p^A9qKp3Y%R4elBU}Bn#j2{aqgiNhYg%V0hBY?+1xvhU<{bP1@(ttr zVr>92tm2u^c2lU&Zj(5xg`pOkACY`_s<_CJ6g};O6}p)E3v0vK5ForPo|;!fz89T_ zA%zx=gYk0AZZUNhC+%d*dYtX;aBZbyV_WC-Tiud2Blm7i%CkBFRthlTh!I?V$>Prk z4$b^N-Ck+qG>U6-D7Gff&y&*qAlShLY;kmIvSjKrLD5ef*3Mha*jIj+AmdsQQJ~;9 zEV$Wg5i6w(*5==r1F&e81DjhA{-0y7d;^Joyq~^hM%E z5#}RGalaPWhsYrXNqJehFZe}=S^^oN#w`(|)jjcE+hpl|)f z65Q&$)R$y~N=!;nH|XOp^r*K>_U>P#LD>!H@{{WAPos=pT>zdv)5Ds|5hGsg9tk+8 z>F{JQGqi8%wd6i`Eu-OzAioHU!Q3F0ObbE{x$8<9td^kcaI2tmaJ4~L!+mJ%?Z2r0 zw#ppWFkU2f(zMUFyQI>`f=PtXvMx@RJ4a(A>p^3r`dRcv$I$p`6ElpED&cUCBSJJU zsYBJC!l!;4Js%j3_lKut%opHaH%);z?4Jn=h{a=yhkx?U&MV2c{e5Oy$1tYmWoTu@ z8XH2XURGKA?v`>=7nN$Udl8$!McZt_Y<_kTP3dx2cg;H^eGVb#;!=~tkxojgat&b# zQ*3iQ4`X~X!q+cVVB#s&?p)pal7EHF5*`b~jsmS{GXu2!_)(mTXUn`0u4s=t*rha; z1d))7f?1nNt<|TD+$H*3EAfKF+&D5>BR|e)zeJ)-!|-!yjOURiBlg%ZQk9!DeikS7 zeX(UG*V1{2-BN34WuYa=W3^R7STl^%<93>JUR~;=vF_ljmiX#v%}8$L0ab&|8+^%} zdqKFw=qykpu~0nV!HE#pU?#)lvE^brDf6c3F!$-|Puwxt7%ot$q8B^fXRBeMRkcbR z)I++wY9GE#^SkXAWOca>j?hMnh!*W{NxJO(W#v+7!_xU7iRuTt)Q!^(c7!R;U*=~i zy_*a*XW>>UWj|p}@5VdVy%5Ox5-*^^DVR?Ah--mYb{QLFrYMCCHiUE9jV@ufQs-YT zD}pP7W*{_=pqil&zd+~&=~VB=b0M9Wb!`kF5m>BF*V7cUytuSVc1A#x}B(zEs8{){h=P$!W<3c|hi zehvVNo*!xW{5qLK_Qh&sCP(}6!~(0@-Ao9h>5B6>Bks9U)}#zOFVcF>Sm_-L z%!au*y~Pbf^^7QgmJZA1Sz_2rh*AVIQ`+&1`7rSMa`8 z!awI}UkQuAz_=+9pxXVdKVqEGu=;Rx1Lg)m{k`V0^aQ>t2XM^2tR1~+s);pUPq^b+ zb|=5HA8qk_P>nk<*@HofGyU$ykI(@3to=Mfay#~QO$w%Z&t;S#|CY}U(RG`$1y!J5 zJ7QYr71A|c*Fsahjc3OAC2OYP)T2x0(Cir;gVpp5eqYj+p3CgDBauumP>;qrGM4&K#TZASNjbPi%ccB>vG*0Gzg%y@ zWIlXmTzhr803lHS7>}#qYIm(klA&zQ%88<~${sKXnL6TJz+*^4TU1!@OogtzvZItm zJIdpboBkx(CSkc2X!VbCdC=s{?JsCWSSthJg9BWfQE2F{) zcF$nFtKi~G>~T#9PV4DA^R6dI`+nz+yx@*i6Zg4xCguSvWgj){9{kyM{?ZG)bUX+c zCB25+eas|`w}!4*;I;?kYaP8u%$?j+KWFDd-J8xd`DtzXX?2e}SW_lHhqZZ2yGaQ? z_i6AGzYaxQH=5selXp0aKFu8iVs4sEo;s)CE`jLst@LLhK@~h&Hq}3&c9JNQ-CQ=_ zVr!pKsV_|_HgsG1i?c}|=q`YEuKVM7H8S+G*aoWP*Xjo9QF?CBY@Zk%mGO(pYJ%dS zz#od%s=)*a%=N3na{m`$-xwZQl(n0VZL?$Bwr$(CQL&wl?WE$4ZFj7W?WALMbTjkK z)jao`TTlHwr+(Brd+oE=E8lhc%cx>QpCo?FV>=tu9uPqB(Q5UOH`TD;07O$=PPZAc zzv`61PiXgN-o{g+3!MC0h+CY?cS_b%!`MH))}MfC*L&_`t#Q>cY1#WFxGKQ$4`WoU z1N6Vc?m*~(!=D*{XH02+X0p{VrKHOZ4}~@o@=8C!Lj71ea;$)ta*zcU7W&p48=i;ucsaszhMIR~nHgi}nKNlRX;LG3 zTgrweo(hOf2)}OFnAE&(T1dLeka%kM_?6=moUd5yvcN>hAC)n5%LMVlRaWu!)AO1u z$)nMCKmA&op({rCHj{8%ZM_A2(Kcu8m=U;jY%A3B$iCSuStxZ7lAi&9e5JgWzox8Z zbSs;tV1Iv}zJfY;#rJHp4ga`Kf9?rP#5;Lah;f%-lrs_+(B$lPQq4Qd>|zQ^eYsda z4b!D7%LFqJvSkEwIIzy8-hpV!TBMOv?yvNk8IpJartW{>Z%%kFP*@3gsd^U z$&%J$#)~Nymm6rj>eGZ=FBA3S_CxR&#uxCN#e{7AHL$&3jKGVzTpcK=YbDj%I9b2a zIGr(UA$RnAexwB~ISXWFi~ZcbhsZidYCLnfIGquk#!mWp^WV%{k%e-hGsc?Wb_Gez z5fHN!7#Q%2ecyAY(}bF<&a+D7a%M07< za)+SK&;^bxpRbl^pXIuNKX{7S9y+pWwv^Ok^Y@-Y-paodKM4L~;Cj6f8mRsCDnE|( zZ?E$y-6a3lko=!1FaMe%Da(G52C#GNao0<3^tTg8ysY@KyMbQR&?ZZwF+0vF494qb zq|EA{DOeD~O8;aMF|JDqLrm>vuNpsQOW%In+(H^*vExx_&|z!Q8&6T_Q5)wL{!Rx@ z_Qm7SDT1psm!QI9Ol1R{xgya;r7Qj@wMP0^mc@Drt;to5I=11tV6Fk#OXL)j*CU*J^RlLL6 z0jNU7F*UX95S$j^1N@ zKY>bZAj)yx39**6c>6Z}%=>mCXyo_DLB=+U)$Az8*C5aJal`db_siYs6##@QxDDXE^m z%8-qvcvaiq#l=J=*laefa*chZY16tWjMyP3mv9Q# zw9&Q_Tm@^Ip5$|AsC|{0zueO0Zw3=286cE?w2~*&W-b|-IYzu&g9)o9D->+}g8eQ$ zvo^znn*Wf;ypwJ5vrAfJ7U|Den*F(*Kd~b>H>+VGc~-MS8k~hVmSJK6IU`>9jbFIj zWOY*VVZ3g0mbOV*?s!_pW3hSXMZ6R=*=srZg^h9pG5+S~llcr@CU7}7*u99(2B6`x zbe_g<;L=ru6opK&h40-Zz-h^?9J|wvj9FB#9A|<;B>kHuC1F5VUaHop#mF_7JNN;1 zneumR=;q8Zy=F9KQ2*dtl$Znb1C_&$X@9sl{!+HcmlZIrZHv}JSw&W@&MvyzZujsi zVnvuuX^&AAs!4>JdMn&g$E8lZIsjiy{PjKxjTF6Pi%MYll4@&U{Vg=hO!5`#1UlPQ ztSW@&n0&|AO+CG)i=xmVES~(25-$zJ9>DhvJdm5* zbA}Ll+NjDg2ltu@ed$3fZ;HWYpPprKcS_xyOG^y$WO|lrEaVPihd1y9g)a3hVq?dK zQtONT?Bu;ehe1Ls>>Xccr40anQQlSoQCWal$OrDj3g?MqqU++prBr0G@C>h?d4S0g zN9}9AP)AcR{c4|-BJeA?37{egEDzdYjP;U&9sJCt952yZ@CZXEo=Pbqi)e~-%U+c2 zkUS&Zq?}45q}xv_Yhs@bFvbzIl^IL#SwLS+?^*s)&*)!Cjbf-X|D&eoz(!^?6>Lq~#vDJkN-ibD?ku_e5^Uq)Lg3t=^QWqNd$r9x#t_0qas%Sk%gf z{G=SPR-a~Nv=Y|&&HCk3PzS7&$b06Y^MIpc{B;!?0XCawMp@7Dm7t}2T4URy>Z*SD z>GxipSNoqYM?E8KB(Kq)QDzP|^vSUu&DdS$Pa_RyR7Im5#+;FDE>idJwA9$?TrQ{N zas!VFb{QAoL z#gVJ6Ee{H%E9bu;u`kbk9gkrT#$UqOY|nOSs_iQ=F1F!olJ2bSMV{;fdv2d`*ak>p zH$)N@(*ucY2iVt!0qe^@T7orIqqd!l_^mpRb@pDm2f_1wg8;=-eQY9I+?z>f3im@H z`t~=E>i5Hr?}m??DKV50hC#DmOP*Gr?YK42)eGQCcl_wMq*!br@ty#T#WPagvL zPu??s&wFPKKu!iCXb^XUiRir~>9B@TRc8U^10k{|3s-}I(VouQbRh#QC42nvRc*m2 z7@E%V!>`!t-b@rt&JZj9ZG}aUXaauUFH(v|hW&|v>iwb2#=jmUrL`EZ+0 z#U8qrB_$Og&EP!6NzvfpG-1MekNRl@Gn&U`L3ZP)yE)VG)leOz=+9X3#s?|QaLY17h z%kWLt>Mcl`oWdI~ImyQShjYkP9X*)YBS;g@aqw+j0YLnAMrCiZD1JmWXAApYMa|&uM+uuJVc(;~Ge| zhMRKL?y~31BKH}?$iE65Zlqiz*>DAGn9Sr5kW>a!BS4n14<*gch8M%iA)o-rFn(EO zh|BcngnO4@n6YV%MGvZq?9Wc|2F77l`_Y(U3RCoHs%R9ko0i>0T_i72OnACnm-^j` zWJ}GL5=T40G!Mtu{fTBE8b8v-@(kq8oSG8blh}&1WL*fyd7(;)r-PO_B>5b*^qk*Z z-d|rn*I<6&_~xb3YRNQDFHlv8 zAVs`_t5t9x{3yQ!#nuEgkH;@s0 z-$;T8Sy2xONQcrUV^5gkQ%&D0a!Q5aQzv16XRsnZr(of!GK7je4e=TE!h4?f=3Rz! z9tM>O)>78Q@37jMVjq#Q%8F`VH+qyq5`4lUnnksikc#PgYL6Cot>Y%G4}A6%_GY{a z-}ax})xP|VK@rdZSZc}&?$HjeWsLPl=)6AQY;Gy^(Xkk=Sy=keE!vld?ea~4&JD%Y z8NBxg$5ly0XXD#S4E8i}&|StLgqah{WD}ndQO^LmUqpak!Z*I%nQ+Ulbwj4m?dQQ= zPxyVs*d0c_!R@#1Ya|JB2vZgIky4$FL|kTVm&|hQDPv(kGRF-U&v5o_+;iul&&yc) z_Ks79DZzts-5>Ysx{7r7D@%#iuAeWG-EV`0h+9W)o)w#ivTdW~?BW`@IZV^1sMU69 zYJ#eM1XCL@!1fK_aZXj#{!f(_5}j5OaPemw+`NmZZ2BnQnBOuUdMWSzg;!gF=qq_9 ze~bO92Y>%1U219@QfP#!p3#bO>xQjnGr{eitMiY^%5{PPXb zZ>5H{^J*lTA9JK3DwwQX&zhnro?=;K6_LWWh^A=9G*&sp05E`oEs#{vX|Jq&W{x%e znx!_PqWe#z5-r0OPfIz82%70^A6c=p=H5Z;D_r>zx-4U4gxQS`V?27fUN&+6_OF*@ z<8-sc0EH97-)AF^B1sW?uUHtTt)`bWXn3wGdlF^BIo|{!Y0xEPeEv zg<}3HvBpka0IxyDP~p2*1*G?Hus{~3E0|&DNqCI{c%vpz^(w^0>gE3C4xR@DE!K^W zLYaDFzq^R-oTHYq4*d%0i{E1BaQ`S0oF_St=-25b>tCmruUdV5cHMpcFD@>^zlvmI zX6|b1=IHdbse^$7{@>T4|NFIe#@>$ZZvVXHzl0h8{_7O~%^kwd?#3dA)c}IvA;qF)~&duoStB%z7Ft z4Ckufz~+LAwm=zF%fnW{+zjj7TUqiF=*`5pBklJ6UL-N!9usVDs z_s_^YO*(u;_s>W_d2{v}T^pYgI^V@W_L6M|a1yaUXSgMFzL1Rrm_iX_7~>64tHB$@aA93*tREj9q)J@KH?*`53gVk z_&EVHQ`_l(kU}4kN?(*YvWR?7eBXNR1rm=$IX|l+X08=~e*36QeCNyrUsHYFF6E}5 z(wz@HlKj~>bFgn}9l-G1o47?O@|iyWHu2?YN(B0jRfo~ZX6EpX8nOufe_qh z`08|Klw;SrpxGydl{U$R6uwryJXl0OX9KLuCOT9hs+8oDj`*ynvHHd3aJ)3--K(rY z^BCl#*jP)bQ_Fsda*I$&PW>q3lblk)_;M8$U;zARSeOs|h3%dsIi=yscV==pN=Z@Z z8O7#$c-O?%=PEN(={pdss^LBXRM1|cuHsoLo&O=dA$+r~ntD>{J)g}O2ll7}$7fU6 z@vDZxvx-KP9u?58+oWP&fqOIAiJ(4tP-|=BP-z2{@RSi{TUKunz>ap567!`c396av z5d(-Xjr8;t3Gt!BJcS;81E_K}d7D>|_OrDZ`x~hikkoT469)<@YKobXiRhwYhVyQq zTsCxA*iR*|HBU`e0nfA2n4Aez9o(BJO%WtQw`_~-tz^!8 z^t86BXnJ>p{JTRUW!1?zRhjrpb4HQYYG6b5XXg$`!#bdsC_=EfMFc@(XF_yz+Z?k= zT3GR>bG1rEJZqbHmoN`x$rC17N-Py*c_GT8ykf>qP_U%-cn(O%y-jI>rxA|D^f zM3^a3Pt0%Qq%hcci}|C-rgFr-qXJ-tLt(j&s>FhYd{sahp9wN}e_GF<*ekKGYZZWX4}42y82Kdu$KZ2`XeWKkhpWdfIq>~U&C3`< zYP+#Fk^=2%X9fM>7KL}PhL1pH^d*9RNnJ-lrRR8pzTS2@9CQ#a#N)D?xVcMc4W=vPoYJQ;K+D|6 zF6Z67OJ6AE=S^i{x{h8PCDx?tA~sW|M28YA$;+t?Z931_i8$#ljFhpAb9oX&$^IwW z_PuXl5I8l@%(wKnMU#QRU=+X_u0PX2+=Kxa*9iHFx+^7auW0B=g^4^Ii3d4IFpn_Q zQg%^0XQOgWMzotJ?1wI+G+d#)>T``jaoH;m4W1B@HglT=aaJ7S+`D zsQF)B3Hs=G@DAx*B*F;Np`vV6hT`rJ>TTFcDcpw}(PCbzsNl~smY;7VI8`anXUNIt{4H?QQf(9$H zTR?frH~g52Xe4=SYc4JImL*|bo4<(PX|RUI#%NXsmrX2Q3-k`5!+Cjcl1r%Z)(hUq zqEA^PrkqQHp?TC2Y47`96$#-dHy?ih(F8Dyu@~TweURG&c0rS)Z^~VgchQ zklRa+8qhfp$F_1xenm`k;F?Ii*bG8A514RY~kQX2LQjQ>9 zZf)&+62IDZg&~Azi2MBIdJ*1Bk@AZx+9k_V;}g~c3~4G?*Dtq=K{A#A7Ey~ z1GcnAT%GXkmXPc&v9@SmRJPi!w7~2TaSS(}6OzXb#Wz)r(V2Rkc;qcUQh&=QtJuFG zes-_kY=7=l{hf~3VV?3{R+V0Zs$&zAv+BF3fou~TCLRC;J&rDVy!BdMi>i`Nct#%w zI=p!Nlw#Y;_%|UL_Li~#c!UXsq+IQu_!xOial;=WP4F>S{5@C-M+>pQLQ{DPba({e6kjgb(wG^zi4$Vpi18R4A9lBJJQ?v2d4p-% zg8HUhJtn|tLeo^XA2F$AXU%|!(kQ&@dIn$g9SW02I7(B)U@2kBI`)SNqMb}Ik3%TJ z2^?3OTy#;bQKCgyvIAl^PXN@aO50UxnANH(YgMWWeth$=ER9F{ z3I7ss|J*MIi3nY$6N7OIIGLe%PyMi%kGSutTk11c<;1Koqsj@IRy4Seus_u<-p9jLI;kkmU^ z`v6L!fCgWZX&zO3HD=La`MgTh@H5sWio$wr`vwfb3Uo|*2lgcn;Z+8+S}g4VVWN;j zb`~$NYGTZ+C6uTUQDN?=Oq+-`Yarf|eA(aFj#ahR3jOeor4qqt^#BT27+8WbwTjC> z@^;OOHo(m@4%JNt+bv?-j~oGxrQ99b z59^6?Ec7y-0z%fM{h}FyGZwE7WN> zu*aezrOZd(BZ#iMkgGb*?6zDVA@g4JZxX>;NL^?>0D;rnsE)Pavj(^zu1zo@_2+4h-6d)x+17`V4V4`JxR2EFj-6xx^KGuAEj+`}It>636 z%JlZTU^f{UrRj9vc)*2|(}A9nTwZQH{p7M~ZVvFUXb?ADt5RfJ*JOLxOfUMta$qOz zv5D+dxN{HKF(RZ`AbZ9vFR=ed($-P?)hEMZ%gIyFR3)G{S$w{++A8((B5pbETsBn(!_WcR*RFiT{@V4Hy)wjxZhL$Ha4|*D!mKGIpR`R z1+EH(UEkBN^&RE6i9eTV5x^8&OnNHTC#K6{siz7*pY6{qZ*;?8|DgXehs*p6dNd!YT^U>{2CP# z^oR3SbX^D&cx+4z2!@zM$kUuw6FUujyfhFUWV5t_2t(p18UT;1jQ)$n*T|wI$r_OQ zzt+coH&dyVuTkSTaPY38yNh9wZ8t`XTT%s$BEJpPIT`meQaH>QGdegc-tKwha739e zI^n*Gl%^^*Q%fApavtu68={)r1DnLw`5X2E)8CmULKo&IZB2g0kOacqNjNZXXD`ui zDHAA#_e*WK0N`CT(Se&KcQua`IVQSaDj-%Tg~-fZAIi{RX9z4yjP~DQ2q!eQ!I3 zx!`!xx@@K{t=&h~Q(H|$gm~!r7au}fF&T<+R2WxZ2jG#MgBG7WdBrz`1!kpX`X_{q zf;;WfDrL?Y#1~PeHqaG>BOl`X3gp2zCK-?y#d)hP30*VT3-S>oFS^KC&u{l@eIg*E zFxMC$qw7LMf#RTkuzjv}M$Ca|;9iV@X!bi~Ae3-UP=Uv5ebgX%lzmKr$LoESAPQ(k zaDfZyt=3iqF1;|@5(%3Hg((z2ICXq2y-`VQ& zj~J;8G7dd=e1k}-Jp2=BCc35rbhJ)y+ZB`>X54caOmFefx*+9xW^K_0g&88Yon!7U z3LCfS+upF%)p;DpRnQ>23X^YVw<4aqhydM;vsONV6!TctxR<3YYfxK6CEoYQ>iv)G z*j43V*QujB#1Tz&D}511N&@c$sMs0oNgu+N#xO+s(5!iLI$F6+j5QV(5HRwA-VM{ur3230t0&Fp4u%Egu~T#vs|RGUKs(QD@A3&Hc8{kN+DPv&45uW z=Tg?npE8=(tI9fioQMnabZ_V79fNB5XZlI0>^{fZbwLR%`Beo$%!&D6T(b~Y*z5*T zPce%Jt`7@8IeK+9W~beAr;XDb<%bpmk4e0JHxI92^U>t9s}NMX{#Y{Gau>LUfac-d z;|kZU<4TXVe7EUik!ORvOfOinBnG^s-#p-xJTXE82ohy3=--;&7sWL9~JkXnyAfaxF`R1BR7#|X{QT&k+7B~;~+?HYrcteAwqQuQexPUPK2Ia4Gw6O_iF7k zs*0aGOJRc=IV-1qnyd9|-B!PF6+#oXrZ<1FPko7dYbYWFaMZ6{kSB1ipWED7`Zi7) zWAoK08MfrvQ!m(hHHO3&u+ASn8R^8Y>`z(WWgDamYEoU0YNiRU*!sAxzj<%*5zkXt zbWB{`c08)Yw@ocYjL~1&(f|$wHHhzwcuhbZ<4x!vLU*$i-)qd8T%I zK=;ue-M}D!L6smgu;Lu$#ZPs>uRoZS9QlBIqS^Jpmi0pRcMt~opozF)>76lfE$}-P zL;WuKnka(tMduxX`oxdUo?nzM=t*rKnEVZ-oTucA3Ybjc&Y#&Q5g_WWTkhp7BpIDInRHve{*t3(%-%sVL-T|jDl5o zTKN=>xB$CDRq@XZi0Z)WgB>rYYpW5>+gRRIB|nQyKDI)QMD-&V0GTMX=r2f+kl z)-PV~4n(6+JsV#BK5{-$$8snYVx0-|$M6?ODk-0|L_5bE?`X`Ki*m%54#d}(;y12c zwZ?QmgVViVPRRhCU4uROcu`Bhk-Ju80*SUM?}gn1PrS;?9bY{}nh5KVI<{dbeJAei zO5nau)==m0_se~EUNys zqEr(m#NHSx1SA>gUb!^c`htwqB7Bt2_c&$WY`x6EyuHT`OwCe45!2W7^g?d(hO?4-Ww*%k_0%f0;C&yg{sU z`a*$2#{hs=8~Nml-8ozEX64HS(lADOnMfd zZH6p5A?1$dN02?KKx{*4cIE?Lf`VXu5_#zlCY#9QTgVoe6`yB{Vv_b4RuHw~7A@6h zWdH#)&E_&z?ao}_uKCueM4j#V4qtyX$#7w73_8HOK=SQ-(>wC~>IYj5W~mqTo=qs9 zt(HoaLFXej1m4m>rC3#rw{(_9m;~JN76ev1d!^2#xB~>4YIEya{7+qcaekia@(qrh za(s}hgrJzwU1~)mTP~?XKWO5=_*0@|D}d`=woDxrmgZ}f68h!(61hn`Me0^|dX^>9 z25pv2Q`=_r*o`ekPqx%v3C};Jd$%cW$IKm*SJym*Wqi4QOmC~g#5yH2lJCD0ojeXr z+42%dq^@25~lttdgxHg-)K)HYiJMB32a7&Qy4%Bq`p1c=l5KJg(+*9k^|Cu zb+y(T)6)Z+`HPkVI*!o|b?Wt>{+_zNdX>2e8lK*BZ@;d`;ad)^ z9>Gs6r{Y8Zh3A3*ie!d$ov^bPARw3f6|$lC>ES>kIM#CFv8U*>nRFN^n4UDz>{lww zlT1bPTA{MN;l5p-Q^6ZZ^7VdGsh?MMQMb-s+cLG>n}?u+t_Tb>YnPhhr8A?iE5pBh1Br`f{(RYfe&KEJ3O?N8TkBw&g1benief7I1cOY}6PaA< zuO~iei@%rzK_Jlkac@hhq{&31sfPGJ7FEY|KrFj=W8 z+vYK!LIlp}9;t8T*aw%iB#pj-WaW(c>L=!?_Af7Gi!O;UU+bn=ZbcR1@X>yLre_tw zhe`Z%%h_f-pTvL`y&3<{nMcI_)QFhTYwI$+8RVX?oT*cgql$xEwQOHoU zH0nwINt;^Jq1`8OD1##9iaygou^2K+RAxH|XrE_3*|=;K>ARwtIV(qVc@9hM^`VU4 zR;YVL!6mKx9>2vP9cdqsZgr9x;M0uy-LR#HvY(iT{~e(111zy)PqOj`E4E~2i+bRW~u;0P-j`=dpI+O}oQTN=s z`5=}HcA#9 zjoKOG4l$_HG)uG$l1#j`Y8*l5mZk>{~`#T>QyKV?`LIyO?rnas{*Ka}Y zwxlTPD`K2MhTb8DUMsAXImn@T_{#jg=;K>N7^1~T_2d9ZS55+PMB-` zdkR>GxWXqJbdJQ=E;1y1-WA)7wf2nVy5uF5Uyrl7nO;<6wRK+-a~p^8X?>vbe}eAz z4DN~8dP*3xZ`-U=d`O#^YSBv~ER{`|-NI5Cs)4(7O_D5I(4y%-b%tD9t>4!#;`yLc zNW6VTUI@sFMl*l>1p5bMj3x77B|!iJ0%+#>KY{&!M|J#kSjQ@oL{{z*P`zIu< z>gH`{PWHb%&!in(&D~u8i_?{xI`_k-2U@(ae(W}{#HFHeXT^Xzp(c}?^^5*pe~N4%*08Djy?lzS>?P-z)}U~p^7kj zD_t>3dTNJq)?&Tgp)EF^y?DoN>Z|A%>Sa5$%n{Lp^d<6=5U`?>_=_H)Q5KE!?YY6{C}C zi{nL|*D}lC4Py)svIs(QC1-d13YzAU`;-OM+sDjGX4oyAj@NNe*}4&`#77hW<66e$`)PwvjJ!3zQ zL%B|VgVQ=JFNXJvJpI&hpS#wekFv|o_yvy+5W*g;oKDUO`vyA`0CspRysN&lC*icU z+4Tn(=5A^fxmWo2@xt8ddkcx7DEd}`rq{X&-3Alp2!vjf`pAhHz6Xp!4;nM5PXda} zN8pw84DlP(_3iB9Jqq(pn>HXI!$ZhRa_$KmRlrE@*{W(7UqO^UT(-@wYM4oZ`HwlM zrrsudYgt7x?avwP`iJ=0{eDL9we0)K(h@6Cva@I}ChKFvQuqLod+S0#yfOIaKTTF% z)4j)TzStP*UozhR&6WK3)%9g}2l%Hk?EhzZ{cAaK!x^P4EgkzA_V{sHuZ1@SLF!iA z()feQEZrumz>2K}Hw9u~EN}=h*>{i~7P|6mt8%)lQa*dY-ZfiiiVr`S~Y6 zg33`j28S{opm)TA8o>#t2TA2}E-4^Gd(rUpy~qg7_vRb`T(MZ}&Vmuy?Hj*b_x<=J zc0dhylPa^?wa4UR;5OPKvo#zrT^mDDWH+&gOxv|bf?J#yrsX5>c%0h%FhCRbcV&Wd zDLmSZ32RZ?barrqMzeokhKIp(^$#^WSPi2=eX`&IsynUV1~k_! zLFsUBEqzzeT_QWFpmnIv`azm-8w^eneYW5RwAVasL@mG_TG+UhpmIYla{};T8J@nCcuC)*XVQ?2N^p+t=)bUv%7k4Ti^kwR` zZ~Z5Bjt;i_FeDkYy6M$6wg%&>2*!GjcHeQLXX9l>LShEaNx_oLLcPBKsMWW<#6Uo> zv(nmXq~6FbnR>f%V*3IAbjU!&$yQG!XKhvhNVvxnujfw2h815Iy+KF{qKmaOx7Bsk zJTG#W&C*Pq7*4|$9hYh<hsw!P|Frs) z{rOt9CIhi3$qzY;^O3`V7?LO@MYat|NWO3VOYQdG+nIA>?@8pY%qivKhdJf87O@m^ z09mmJ3i07B!{Ny(*}W|2HYtPC2Q5}ymsr-cr@W|*ZJdM@AzA?><0xfnhpcD!%CI~- zCjQ3DIrt0Ai`!`No(-|kJuO;}R2@9%3D>#A=AaDmOPQwVU zt!HANakF>DJxxfhWyVTEav(3WV@EHX0nEFE(kH=dERh_^8(@TZc{yFL=lWVX6q`&! zHx?|PTDN9eobOe!Nn&esczw1{t6&s^L}Fxb3#=#e3e8v~4g#V!*Ajn=M24GU$uQ9~ z)j%{-;i0CDB2L*7W!p!}Z1*K|AOEbrv(_Ppkambo{H}^P)PoO!H!zNIbN$ze55V9G zMy!=eZ?*>I`Ur&t$r^4aO@5Jc`r~@qi;EduKG_sCX<>i{n}F<54waK|O@zEZ&$5y3 zpcSLZ(E<1vsFy}c63 zOx>H9sGUY_w&sg)9@bEQ{8fK0{jy3voz*uGB zQaPD2;vHSmlDc$G7d90=UgzPlAMcP=kbgQQ0Z&++lcVVNq8;*ZgnA0I2P9$h<&F{%dH? z1mzIGz_#+e)>=)G8r4~}{cmK1auC9|z)j^g62f&Mbk=3rHI6m=LwPq$3c%x_SbYzN>Jg&X+(<3#k)k_XZFo74;upda7n#Ejt7c`Vnph0> zs>ml5eh`3T=E6ouxignEs}v58RsU{_4dgtvKrRBC0!wI={Rjq_?|vQyQSK`L?3OoZ ziRv^rZF^b_YpCJFam4Cvr%Z~C@JU(LLHZyNJji*DfcixG1XLz-HMdY=QigCgJt9%G z(*H0;6MWq1y+%X(yzKvEI!)Ncp{+kx4bpdn@bGsqD#jZ1x>kLoJFZRc5%zU8E*YKB zqO;~+1A7_-E3uXt|Jz?UB=O3Jvn7L0zS>Z!aVS#LEPmSlO9dFpJ&DfMSWDTJnX8;* zOa^m-OnW172T&>bz<09oX5brcqs#t=!`VZOe~}8oxsCV;fwL}l;HS5|(Zf<~oCEi0 zb&A0?=xoX*V|_T2)EYJ)ta_i=wN_G3&V9YC6x@X}CTqIuLcJXNq-eZ*f!;u+PCx_y zLdC*mh`WXtGqPtppzNZljTnS*SSB)yrpj&666Q0Y3?SrQCy6QnAOCfjRNlx*7$fmT zqAOsPOYc`=u~=$TYp-fu8DzG$Dr4&4fg*haZ}EbcARR}SR2A?t+w)X5<6O9t`Ln); zRj990MaDo6u81i)Fei|g$`C*NDk|+$Vi6RhIZNFW#v+K|>@hsZg7Y*0M(CB89l=HK ziuMbZ3*eYm=qqyY+ThLi9VINL`Zfu*p6;A$oMrmAo!W>9L|Wm}w}a+;!vbLkoQvRwWaX{2!Am3rQLn2fo(E%cWWQ7689^xf)!3ctN{D48z6N}#|w~Hr@hHl}T zu1|cpo~_ErBMSb}NLy66<<$E_Qs9yW1r_kib|d7Kp`wZAYLHEcmq8wjM%!V*5G137 z(z;{K2VHlCIu!OWGlw=kEH9;pevK$+C>onCO>vs}F(S{$4b$RV_0lq)8{H{RRK)AN zV~zsLu9Aq(HF!lRj1wh@moZ=OyA>PZpCDtQ-&2NB0|{0Eb@l=xcl<3c{%qy6StWq= zs=rX`pNVHg8vNb#W}g{nM4IntK!D1l`I{K&$LsUC4zk~h+zf30RBFc2%)*gm&^HJW zE_cR^O<$p=)4Pc(q8^;l(>q$=q$R%}>kk!8=5uBzd#IImoOZ* zTakGir$9&gGg&jDdqCm)7F0+hv+#EkMZ0S?!qG(ZcY?`)nt+e+Awc-{OBSW`p(1}9 zh5qp;I6iQ}kw*dNo8XP>S%53}2uHgOXze}6pFm%tSkn<-BfXStrEjgn{5yz%$op_o zC5mP(r`qsNflt$^&3QvcrA{20F`ISa9mMNB_MJgnV^{+ub}v%4J^6ZM$MDoeqJ&l< zXvZ+BKcU1M5as(%yCPi(JyETLOI}bLVV?bH&tP8Pu7Wh3v9|^`uTi$(KKoFf;hzfn zUK`*Y`(fI^DE9}i(bit|Zg=MZOeh8=*ep9DTF{LBisO@Y1E9}1U2?^(1tcg-`*~q`6evqzZLGU>jV70pd(?`(Od|q)I#B zUb%8or59L>3Alhzzx^Y*?hA+@+72dA~8A9(v@f}$JolR+=ItNeq z?rgUcwlL)jMM59CV7tQ^v>aX#4Mm>9P%}{Qdy(&aZDsnmcdn?v;O$4!RD&TcO(%q0)U1S-F&df`)~$QV2vAP_C~42eU#fGg6opr{p!4 zY%=$>%?HOVl>7 zu_@Cjhy#vc-eT}j?Y(X>Ye&Z(@l7imN^s$5@P7b!K!?98+5&h}Yk!8fv=;b4TLd3z zi{TS(DSWE6VS(0xer-8U)K*}dwi4HBop`dg3j4LyIH(H$a5AIh!BY5?np|Diff&G~QQFn`Q$a_j={Ff?*6hT+I2 zN6iQv)np)@s)q0ATPbM`U(-$)Lq&81=E&oA7o1JNxjP|H^C-+4f%!W?_>S2HhHn8Q z!-Q_1sA-98e22^Ti!W8W+sM5}cI_(^op`8!2wTobmb}`J?z6EXC zrEr3F8HBXUVT<-1_?mVFT%lbB*J$5`N44$nq_zY0Y1hJY+I8>~?FI_t8!3!$hS#*6 zGQ3Wtz?eeD{FII@2h^oUWbl+DY4n-pNE&@?9eFhRP=7jdHo4uRm;<-N=X8V`l;FGQ zG~mM&;R^)i$Omb)Aj&taGFGR`m{DElr)u8TF72owaeAlaz$o)~OKaq|WQ&wVPGt-(-jds*L2JPFS@?6Ik zT%aX*hJRdBXicafnoOC)w=)z-B6o1oY=RjVh#sT3E|vbgr$8&azcedP~40`kT&`-nWF-`+Q5O_4tA^e1DGR z@L5}1r&IVeIcj|;O36;z3EPR`$s@4t4(r6|mbSHi<|^Lhd%;bw8NP)$_>$q^%Lg?x z_P{B8id60gKU3n#7@^0YXFFrNiOA@?mu@9IoXNwPa@fE_Ye78^i9YA0q)z}tpGaP= zBrhKdmHJ^YRi6ZN^r_ISPlMHZHGiC_*T7kN9h{@r!}ZLgKX+7alRUw`2(ya`N$ zPP+=P>lQG{o(?@zASZD0=qD3w9XRz66zDzl$n1qNdKkv)>!pm<7XNe%*V3JYUkL?p zC>CN7aT*I_u~;5Og8vmn5SFZidiJ%i`aaO^ZrckEdKMWZpz{$GR|Y4ul*1_@Wpcl< z1f!P*`mjVoeOOBRL+ZN%x_<|aRXdbRJaOWbmeFeGm0CY8^#m$>ne& z!v^t4h*Ls5-ctTBgvbn8}Z1=C!!FZ995RrKJ2QB^BSVFyDAasthCNC`cYQhSzQJNid%z z%QwXGHL-k~Nj~2e7Rk3YC57@9O-1(9WuFoYCEqsYd)k+g&julo^2F)N6Y2eoteG== zbD^ldn(<#|mjjT5Rex6UpTY8fEk$LsT{`kIkUaMFrW80cC5oNk0GP6&l_+PiC|^%2 zK%r$*-s{%s*Di)mzlwuPaX6bfoMY#ZWdUZPLN3E2Erwe$IhUE7mu1H+IryXJ+9M@N zfnst#Gr8cuy0P2LcB5Z0`OA zw->8?5nQ5JoOp18mn!maWsU^Fe_1Rtkd*1%{HIv>6^ly`UWu`a#bpQ2Vw_@e`N6X& zQ!KuH@U{pj7JuLQa&a&|=U_fSvO^Tv6Po<6*T`Q8xwIPjiwl=eBRkP-wSVRIVYv1_xMMdo4#RbFaO5yV<>2^X zxLyus55w(pu=bwx(@lQiLQl6z5P+F5o1VZuE(1$lmtlju5|1qm;pv5&@T|fFo>%x) zyr}Rzyp$fpW&E7Q0Q>;>-&qKS^sK!L-2V?yO9u#EsuzNa7ytnLHUI!nO9KQH00;mG z00ZH5dXw=Z6@O}EWpitEZ*VVcVR>(LbT2|-b7gF4Ze=cGY+-YAoxBHN)J66<{-$in z=97?YvZN7efDl5c1_(vcfIt$EL?ob+O?E>THrcqlp@>}+`>A)9U_BMFpkmMv!~&jz z?etE+_IhVK&$Ha==~?-`H=obeY}EhXyPeOQnK$jttA8^Sp85HqM*(1pe9p#N_#q2_ z+`|841Hqr5)XhYcFVP=6bgiYyyU5!p5<5;>IQ+F-oMvxs3f zSR?YSVz>=Pi4l~Hv_S?z83YX#qbM1jEXIfeoV6HB*>N|iQvY3(@N|sQv)FNu>TSrMfCCeyTPRVhU zte~WUl1567r(`81C)mU)(PR;;li*shhLRI0If;^!ZJ4YjiZ)Z?w22ncN|1{Zcd}>` z>#U-k*5IMO)>E>95-%ZiSVgB*_$c2+$$u$C0l$r{5dngNlyqCgMw{3qHYZ{678>AG zLfuO3aj5S_u?;4P)2Qrpf|@CDQi8poLEl`fIMXW5qDh=hXy;Jjxzy7(g3hyv^Tl>r z7e8q8h_zh z8_X3ww2mECaUF5g^;U5MeQ%_iW`b^_WGZDl2=QjC_@hPKVuO!}vZKVUHkeI_v&C(c z^w=PW2FRhZ92&1c?4)+L6Vyxz)=n3@Y~l`aC#~Zyg6<~P-c89p#O%!$aj#X}NA%l6 zg?Y*1e$h+a?4@d_MLb|*Ogu<((tklv2SLr0IB8OSl9>OVqirUbjXSRA&ABjPEWcv?I|*$#r9 zrQ|uvHdEpx$!w-XL4UT2=Sk{cpv*o>4p8ziC67?@D9K(2anfH1`YS=xDSw$kOMj7) zm#l)+qnpM0`nKX-dgOJ`NjJF7S+bZ6nA>XCsJxcyY$=^wK-?xYl ztl~pL`^YLjrtd$fmrtzXpBC{c<^N?BpV9YooA^R}X%+vb?|&@ft0dMazP4fVU(|Q} z3BvitD!!%W|FekiP)0}}et&OcCy|QyLHtMt38L%1#DV4s?K+xG4TM&ouV(qep3md9cgz;!cLHFjMj$!q*`Z{$`tFBs9y|!U_d1X!gBFr{c zuWF3SR@W_WY+74Wk0UqWbRs?1bOzkP0Ct<)SYAsudv|f$0Hd?J!y~N<1;OTVvHU*GWp3Vkmr>n)c8AprMFKcx>J8?4I0i3Ck z(JIOts%vZNtJl_*FGp;BCfz}gcXFMxYmPzo8of5Ba#`JS+<$f4v`Dk+#>LC3801E+ z!S8PKBB>|Wxr6OK7j}{v)eyT2wHaDne|+8A0UOT19@W{hmi5>dc9I>zj^!$x*uW}- zs~Dt)>lE`au(bGFYCQqugp9bY!$KSF%xd%Y{%oi4ZE?PoAN1~Q>$4P3~(iv=b2Wby83J}Zf4|-5!syqQ_i`VU9Fj{Zy^RFvd?{Wt= z1btlvUgs8Hcd($s8E|_&oo)t`A|q@rQ1dA0@;ciJI^030x1f&FTAy!2d8cck+wDbG zS?3Ne^tin)C6)|k77pOEsDg%|AA6iLAra|irO)Li?tj2})OUBZxc!YZaoQ+ftJAyE z>Gx3HD3rl1UG(X6cDQ5r(ij7IuzGW=yGs!PcMszd#-Jbpu76#32hJ%PTX=%R1PSD< zrgI~11EDoK{W#y~R>TCz{NYtiNlegRl3sI%(bnAM^gBCn$LwnoXe{PIPH&BHy=eng zpuFkL5z1ThOT(mja2Xri(UYB8ICz7>_(CF?kbkHGw~|3VuD;Rlb`Qp0L*qDwaP?k- z2o2B>s+z%g?6tu|Mur5U5sl1X{l{}6;VO|-gYaP60CtREFc?L%$9%cp?Hp``+yo;K zzA=CkMQ9KN)M?Z|$?UI4U!*M|tDa3kUDh)bAut%D_uS%kEq8Vf+WoMB-5V{8*>|CG z7=ILn!ARPNE>CBt+dtS4IdMZ6=&FB9K+hl>Bt~K|f=2LqT!Rmg9Y27=R{fg;3TEI) zh{9kZ_1^0DdA-q8`mNN8wA85;7)Y%s6jU=f+H${d9V)6og>%pa<;M*Z)kGhst0iRZ z6XNJ>MPqt@D_bdKovpeE9KcpO0;(7sI)5*ws>SC=T28J|pE$g?c*1GJjWj z(2@moYm^>^8&dK!2DjF~WG+$-a}geS=C2ux1S8bcsGZy7aRu9v>g{gNx^{{dTEe~B zJ%Od2zD=Dmo|Pz^fUdYe=PO?1qR`0rdL!AIs)4c6554NoL5r=>VL!t)20-|3Y0pf9Xy-e-oSFVKcpS>-h8OAI&f`Umiq!8 za!n~D@7#!i5QRS((H<}kw@&GDvnN2if_=34TDt?G%}v+&Ri~dZO3@%zIAOnXgL_LL zr1kVzx4IMEZNJm-nQbmlD}he`mM{k?w5o8qq08zp(vF_T(8M+t?SINISXIRWY>O_5 z(cWqT2aFt0g`ed2Z3=B)TD%`O&@Is&vvA8gR06bv83{bh#9pg%8EbUc7_(?O+B)f*6PEN`D2dY9be-F$#s4v&BHR4|GBY+T4&wspgjAa<@4#R;+e;f@Gjm zs$%n64dJS=${h%Whw)t%#55vXV|cTnC2MX~6Uv(1M(=6y9?n2I>OPH{YeoVGBVmB8 zdkm^gtj`jv3s2O7QXfznAo|>Eq1Wdm9h&3|tPIto?!mU|7=J5g(2y%^215f9d+IzJ zWnL8{1-w4=k(1ignTTSltbr}5Vh*`Gfi5~AO9@7I6we!p#v-rD=L_lsqz`ZgF>Luo z_fIzns2kks=rSVQ7(vn?ica*20O0{oy73XQz@B()SKJt zH6~$g@wZg!Co-}#&=F65Uqg3myY6G)1NX?3h zP+>-NVSo7CX9&$zxicZ3E1gP=TZVE&bK9fJszU0VmbnZ!hkVioU$?*2z0gAk6)BPUXS&#&=2`Bj=smYOD0WU56D(PWxTM^7NJ$ZBji z+oQ3E*&`Y|%#LX65A63EdjQL%U1reDiqZndlYb7VB>6+lNtu)tPM60QsZ4G3twUuP zDaajMrD*JX_5<~2XktQlB-Gy;`k7l*55x@BXzWGy5?zIaj;jbYQx{)!>0*k9 zEJvzsLUS1|89Ja(Ri&}#*$XIo%Ki|ZeV|#=*thI|C==vY5K8(0Z$o2Wv;Sf*${QHi zi+?KC*yrpEq-vBKMwr=y`DhyZC;Jq4M|buJH6ww)sje zPK2@Vn^yU_6BRB7>Uw*U!5dO#J_F&aKIz zGD~Auu*)qnTa!65H)j0U!vIa@A+j7M^U;h9db*F{f+mN{42vA0$&oTwlcVHlO^%TT z2EAgU3Qdlc<1{&*l0rE_lSMpDlM^XhEGID-@hc9cCQIZvRI}~D4zDIB%XCdnp?}6x zshdJM%_663a)vyH)WysumdgrFR>~@itk$^3d>T)o#Kbc-b|vYj-?7UzxsYu~?=k*%2o<1QWRZ(C zStFNN;usc3Q;5=btmbrNqXo zG}%O?UQNjwd7?$0q{)+Mn=>QgS`t1S(d1g$OtixFEumy0&IQXb{v95LpYZ%6JGR5f zQHaK~c(%s#*qa(Voo&@*3(k?9h7dcIZACw++#*{w>5@p^<7pvnI9c2({Mon&#n=KM|x?Y}Y zk+|g3Xr$9g0?r`lOu{}36Luau7b&ocHtuZPW72yitzKWi?b16xM}MBH$!+pHjh#c7 zU^oMDVqD$P72Fb%;`8NpOdrVcKZyES=_yjPR=k=&c-k_wxz$vyIZP4*H??IlWF!Y8N(cV~${Tx8mtbhHu!J(>jUB8L3*D48>p5vGif<^XCxSuK0=0P?X5Xw=!i zaa7}tNlXXlvw!Ut`IsgT%0uXHV1ts)U4h^hFY1^`@T1Ac<)30qq7eXT@(F&2CZ9w; zWPhZMC+%Jm((Wa?b}tEQcX?Q;ny@H@-|>X{RtIp4oq_f`XO~4D(d1L|X^q`TJ*!qF z*s3HdP#+TK+iUU}`7DD8191xmyE#dTd6uHFTiI>&e19kY^-0>mM<*uZtw}VOB#N-& z;){V1mBxC=>9Vx>{PpTNMG}Q`mCo(}!o|_?U}L-Aw@JUBO<0QFYv?@)gGs*8XVqBjCm@U33bV8QXJc4Wg?X$v-Q>Tz@N-JjSyTr~P8Cn>1)fPsaoX;pnl$BY)Pzq#ISaq&qY^}@k9*G zU4K<0YR;gQIyW|;#?!^J+N<`vJV?A>lW^Q&zqArPnu;%tqS*XIR|5lwsad^x5X!16 z0F)^=dITsTW7G0#{1mE#)0mTu<7?`ioz8W%3}V`t>)yQhJ&d{J z%^IW%tpIjJS}rxR#yThY$fiR5zE^tPZGZG+EJ)|lCckkR*J50jSrDs6&6GAu_YKpd z*K1rmrW&<%p-a#4g>g7>Z6ddznTg7EDGlE;>iVFPZhG|^@{VJ;B<@x?Ext@wnl(|E z%Bq{VTkHg?D&`hDqcGv!c7PO0cPDAz7$I(;^mtV6s5(f2X6PP=;wMC})gNo@8h`X` zJu%4!TC0H+pk0f!jyy>Itz|U{Z6c8@bn=<13lss<*GFnu z7FJEDBDtac)U!+Ubt$qKuTir@Y=1NG1~)TNIo;Gpw}`zOb|kDo)7S0{)cO2wLy00i zlRMp;LpoKN#u`+JXwN%5olbhlNlU7AJ6-y13E7Oug{~u!dq#R75ZY!(;lMo&Vd$E| zK0pbq3`vV_e&epBW38{cSkfmIx+}IT_i?k^Me03TJJ3y6m(L%JP%gaZp?|75@#n~q zHWs4?+(3kybmOMXzCHs5>PyN>Ko(s=<_x+L-Jyv+E{WEU3Ar+?T{Po<+;Dcs#IJAQ zf%hDBPgUJ%JnYUaOelObr_k$feM9Nxz~bP9jT-kWA%8(w5k&=7>e7~Obje#;*7oZ+RH0j5TN?opzjNV0BdfFt zOaMyGWrj=@xr(F|1!%YhdQDf)=HC;_z z9Z`kLGNX-o0bOhxw!O0n7)Z^4*x<7?t0I`OQ)JEs#qmzX<2jF|hicZhX&( z=_i++8J9ncolSphN2j6cyUqBXXME3R+tv31cA@%SWaKY4@_&~Y-%E|}W$K$tw+rff zh4H)8$XwbGdo&if|ymx0-I85Pc1=_D#D zcS}^R412hh-G*!3iMjc}@qgHB(ZoJ5vp%rwQFOQ+Q!_A3pJ2N%9jaroJJebUx|7|7 zecr9`I8-n%{eMLry9djt-%4ytt<#GRfwc#ciw=UdACh)kc89x91^NTGr@#VF!w`5@ z4WsFe*uCsN{3g*Qvfd$k8V5mqCW`vORy*-9Buzvpd3P^phrx@cKhvW0vY{~xx3iz&~rokAq#WadVembA9695r&AC6s zFavYP=(*BP*{1m7_mV@y+9I8xsx+`{`Y zXM&$uFY-6T`Fz0kBF}K-od?3(T8h}jStsH?7Jni8&99x<3&-9LCi89t79b!AC`Z7w zdl!_}_Cn7fKPH&GMj( z4S$2h2rp&%P|JqHYBo~QYX;IN30pphQqG_dQdu9{hfomw%EJ7NZvFt1qfW;&l<9eZH;(l1dp$F_byp+R1sI4pBgJND+yX)v%I&L4-*A+i1 zUGwv=gPFzo)5@fMS&r<3<$Z8m4~!siMSqzo$Mon9y`vnt9~uOlkR$hO6GwL)eU=KD zUdAGtV+qm?SOJ*WSftT7aIo=6mqMgV5frmxn93$0T}t3sHW{ke6gZAeg;i`CoXn=f zdNu<(ur9!6!5M6}qS0bh5~H#2N0E~_tit{tV+WCLRWL!7Ntgq(*df&8q*BgekAExm zVS=sfPo(*v6qc|j*prI)4znYMj=CSQC4TcQ^NJ=C?;V83J~)2fF3{?CffawUe%Nls zphIv$73w<_H=n+_VP+Ud?8W9`?pPSYDv=o$Kn8w?vU146Z!SZ2V^wM)^Kqjx5SzAG zKo&x@#RAz2*i*R0H2r+FBv26PL4Sth<*}!6aWwsB*t5p;iwzaaWkew;mCY7M=~B*~ zV}Di*^E`VYzNI<7Wo=B$zp%fmmM^lGes#>{F)ja(y{uZk!e0H=mW?qjUt_PUmT#~( zjh4+u%OYgim3Jw^Kmq-MHT`+CQaJi=G=1f6Q?!D#69!v_jCUf8V<)3PHh)KrR>a<7 zZ>!PXVecBFO*2Nb;%Fz3#fqD)E2_Pfy~qBh+W(!sAHPmZe9QKjb$-A;R4qSZAO9+a zyfH2R!9Gzf|H(czT2>h??KtOEJ*Y_gplJuG(0FT$PEIQGqsj_K^=N1RVxOrVKWASU zJzk`^4xj?NT3tKw5UlBenST=x!kRufk+xuxz70z4Oo;nU4E^HvBA2k)W>gAWKx3!E zTy`eRN0({=I#dxCqk?_O{;h;}9{Ugb3g=;?cTT@bql;o_^o`*vearr5wA_fjQ{9Xr z`$>Ip@?kJp$YEGZs~KaghNN#4$(>O)f>sbi#o?%kfL(@4?RSvOu75yf_IoH{SHTo^ z4NOBvEi#80>^s9<{GR=ga1PC(IXM6S%;5%{!;LtHn{f`e;2dtlIoytOxFco`KeC_H z9DZg;4P%jy^fF=Dxj1l352WFzbw8jl-w$q@Ok3^5Baqb#>yALm0cb}H>e&nHFkj2+ zuzG#{By_hX)$M{@%ztgz4_*d0LMp*xKXh=YD?SW`z0j$e7hrSWUg$&%-dW5AVsx3I zOy)=$ENV&hN-6FJ3;K_lsPb~qmgJ+I8^d~G5_X7O^-kkSQ;eSALz5+6F+OHuoUq@bg6Rq4^XyM+55$ql0zIT!P{)XoKeVD^OKxzIE zYS>3mk9utl`v-2#CvZAysteh_;1aC6l6?s`uz!cmdU4pSx1c`O&3ZlR1>LMy<2HxP z`b`E=hrs2ASziEaLuQ>GTN&H-0az7z=kiinG|}`3Y=3DI2cWTO*giP5p-B>$Phi;K zm&#o*q|CGnY?PSFOb$s_UqBJ+xeE22hE|`xGvloOHy}{M6tSO?O@DyN_?^anM7jGJ zW}@WHW=GXJSKy2$8&=Qoz4_I)mQpA}Bj(!lA ziuXf2EMY89=jg@ZGDq?ZiuI_TXX-=pO^88iXbX0GHtB@qNkw_X`r(}2_H+AT8_D=# z$jXt2;Jh9fk|Phod05{E=kM-^?P#00iq^_Zynoc3W1^5P8$TGcrQ-*KHXD90YD=T2 z4ST(y)VzyP8OClJ#co)3;cm=l>-ikaUqty~dJp+}4|#eI7h~-u*aJL;Wh3>nQCM~< zl|6uEWAw5DEW3=#ZpN~4df9j^`yG{Cf@Kr*vLY1ETg?DteQ7t4;(%Sy5A4^&o&WwZ3M*;sZJm1SZXMt><3{bAYFrDlhj z_ro=jExZu}8NiJ(aR+YEP)O(5kj-;&19M?2&xe_OIC9NMIF^rs3O*W6<^`~Uj|V?5 zgsprcoWqOZVqO9_^QmwTp8*f>W8e^<34c%VS@1G1gSYq`_=L}cFZq1$lO9MZ+v)>s78 zR668!P*UVT&3+4M_QQ~uW7-e5Vt;sJ9_BD3Pt0?e^KQe4dHyzu%KRn!ZT+ybOm5@I zFSn!U=kI{@VL1}lK*{yZ&GUvuxTpfs5L^cuZ--Rwfi%7z^7#hjA}u>&76@>WU{HTUn7>lZYxevhn?}s|S*b^7`Qp zQYm-V+3&(t*W2&Llmdo+*j*+=6fHBMy1J*-+za;#{I3u0>xDgG=zby6&phfdW2OkD zu9sm&S~8X+I^p%h-V^Zq0DtL>K6tRX)Djhu+zPP~$*K6Op|8VIY*2hhGdAgmz8=U_ zTY4KLZL=WJ%-bwS9m*5jhp5-P)b6+(W|zZ~puthqfMEl*bkwAYM$jAQ^I z!yWuu*vEU|5xxVS=?36ApdYU4}czr2u7K=zpnU+^Nu zQrlpcQU#AiQr|qPA@W{x;#S zmcG_flg>2#Y1(aINi&z4(lW92%`VcwCNHKYhq>7yo26@a6sCXaro6OFqlw9j zcrKU2PoU~Jj4JyGRPv`_5q}1E;eT0J$)5u!e;)no7a++0 z3Y+*#a0!1MF5_=1N}h;TdM1i#G19;U%dwwHidLt9Fv>Q8!+?+;A*#XU2GvYt0Qh9w zg=9ESQCvVeoXMvcuEtb8O{XdHm>ESG_!3<5{vKY{4-f6&^N|zhk&GSagNN(!`v`iY zkD?oJ5UwpFGJig{1HMkPmYVYvlNt=3V^Xk*;8IIkW~o)FsZsWWswH`5*5*>P{ZKzV zuB$ogF0kv|-4B22K{2p0hqW|m7EROKrn?V7lIH0)7tT?+AMLrOA1YWLK%?&@ilV*ngx0$9l?DY9pz$9mV029X3aD zGa{HvQ*h)I>S70&MQMsdbEGtvraDq-@MdC)r-@g3l<)P-F0kO|*)mIx#SJCYrmbTyY|A{COhCI7T7)9gqtbvVpBz>#f7^c)LzvVGl# z*+Y@&*>*ikeP9W;u{#{wvxoM>3$2%xI?#P~IL@Q&Uz`_UC&>;6&EMh3B;cu12R6Vm zoh<5$t90qvh%_)Wlq2{a>ZQLS2mc*%`TOX5et&>`{UJIsAHgyFW0ZzZpppL*R`XB6 z!#{(~{7ckLU&D6(4f61}a5eu9Zs0${-TWtboF9e5=-&QWFnB`$p~zxoB8MF-a#^LwV>MzJJ6?=nE-{LoB1W^# zVt)+l5#!h`Vm!M;6ta881h!9L03(XoQ(_W(PL!}0#ANoOn95!eGuWHr81|W%&3+Vf zIf!|Dh&Yz#iE>^bD)=N($)}1cK3gp0i^WosXjY4Q`VAP$r=tWW!+U6sXCS1(G4L5b zM#=Vac#)SXJ=lm^cqT$txEQYCvk*#x$A8hZ&PK=v-$NlUqh1(;QG5>d!c1sd=OUEC za>2^yA(YDgNxA}EyrHa;ne_gc3qIh-Qh)3ecokhg?2m1Rzo?#*Sr6Q&de+!2a63AM z)ZZQGMpmf)?u8xbB>FH|+y__iD(pE8qx1`TH9~gw6r6>wqYtC~SI`k%gpdORr+->w z28C=SUyM$G86Ch>E_e;DGM&#v2lGPIQMstAbR9Jkzhjl9DB{EUQiR9_TVfopAr!U> zwY<)78Xq)HeQQuM{z@@-ImXg2(%HtJF`6#k4=*tczO(WX`acG`9zt%Ozw78n`8v|g z=&bGug^_!r;^ZPEH;83m63Zb;9DfI?Vg)!v0}L09Fiot4x#9$vFPdPHSfkW-5l$o( zee-(04437AX^LPJ>(&@cFhLbx&W}?|Sn(T{@VsmubO}#|mVijVvV^s`gl1fV6PM6} zOK8OQ?SdM#Lp?Aw4{iK|E=-<86<@6Mi*k~N z>+R52LeDslx}8K0uxl=AuIQ{osvep#c|Fukw2IPCLIkq6I0dqVABKqlj21yC5#4Z% z*a)-4CM3_PP%gG2iOzsJaepQ>i*uk&oC_V|eDH}2z%MR@v&AKFskjVo6<3B2tFq9f z6I*i_hU#pra)n02+4T2HYPWY9=d=ig*?J{E!QhEK22U);rM@w*7v4Mqxd&iWll`rI z@b+GK6HDyxprz@9cM+^7_xZg(_}j1>FmmsMzoX@wM=|WBSpGg4oPWrg)k%lA8d>5R zNEX-Px^X+ibudm`kL$hx+2Teh6E}z10q0=cIUp2vFe>>f<=>Bk(duMW;Ov|DYGd~O zDB#2nOM2mhBQR1;{6jVI53u9_eAFcIzkTp=AN&Ig>WXoipWyWI^UwK|`83}}0X@b@ z`M70GrBUa@qbXhxw|}9D-U)VbJB$%`z<6;dOcr;+3~@Is5ch=l0B2y_Kp|&2y#QjLqUgV{{ zQMAkEC#$;?feC6>e!@JqG- z|EB%tHxFch|0H67eK^^EWPtt101rW-co>SsBS^p}VYWaGB%X>|#4_Um9-;6emKY3B zY><-{(ZXAeMVxDpZafbERUdp^SFGL*viA6NTj+|5YK^C{27Lb z=W%i`K%V#ujDHm`g(sAS5pAlWmc|?RCkPo+v%(1OV)v<2L^p3U;>`1L%BiTR$emqH zvsu%_DseVzD1`X-Fq>)rkbpioZU>u)(EsSj>xj}&-|1lb0rn76MB6X^z4cw_b&hk z^srN%bXJ3Y<3iu{_}h#>dUA57@)=DS5nf|LUoQn6vy^5>lBwCXTR3bcuc_JOB1bJ$ z;mR@N&O2<))Cv`!BUu$RV~L4!4y~CAuBU431N~j}RLNJS8uCABIEA6~Ce?>)RTokF zb_Ru8;(t|Ss@FghuS2?c0}8}jP$b?)$$SU3>AR>^-h;*BeW({7LWB4SHR&hd7N4Rf z{TBqqXRuX#4(Et3;5_jqTqOPj4~wtiS@8|LBEEwU#1HU;_?ab1V7XGTF;cQJX<_Bk z%4((lRN)p3zfMB8XB|qH8J@)uteu<~_yDpDsDFr!R)LX(dfYG%`wF?j4IdjVI^bO; zj}{2RYw9G!3R^K8UawrRbKn^jK-u6tIHI(8GF*gC=?3MGFh#T~IKtBk}!rh!SOgC^~eE;AuZ zIv`&Tg)uSOPY4;ze2R)oU3q<@WXV)r9)R$^4E8_H(fJlYCU$eZ~VL#ymY zLX%c$#Fben4(nr9io^O?5~*iq>to6FMS1;9E1HzSQpk|3#bOMa*bw}sh0lI4lO8$# ziBsn4;7=Anh8zdOWFd@_MX*>-iPDFS#$_Nv#u_r9Tpf&&v7Z%I>ZkIp##TRq?SDwL zkKoAmIy2^1eI0VCcAlt|sgyChT{2Y_M$12>k_p^*1 zn7vK#ZS2Qg^biT1tD+2++0Pt$Px(2rpA98V)yJ|f&1Biv+=vmP!l&y&LOKMa(5K3$ zQ~goc_odCHCgo;X9VUrt!L*xbn}6HK^3>?D#OkDzS&6n*9s@R63Pa^gWT9EeLbKr* zIR{y2E-aA?V7V+u_Njm-SqW?9LU79(=#WdmFPFj=SqtaOI=E2Q!zFSBTqzr1hirsh z@_4vMu7qB>3Lcbe;4yik+Jr8YymAa;h~bFM#`8`5G$imAw5+G|Gq9`!ZGXU->@Ff%z1Lpm%sK?Z$XrATAa zx=3;&^5{M`rVNX6tm;70gnzW>@gnPnB-sXOaveBiJB*edD3t4AvfKc(q!*5r9k5V# z!ZO)~wDv=*3_zRg4vXwUNaE)z&E|mP!d_{WqKAY+n6Ic{g2^zGZ{z17)6POMK3@rM z6Nd6c57Jrfd^^8D(Xw4>K!!9~%P+(hq~k8)7aJn`wjr|Jw7h~oHh;EGm(M;nj;@)8 zpq!5HV};6@FDgc%#Tq)lapISnOvGPtSZ*gB0gKQjeiF&AV$*b8ij}7?n|DX$;(Q)? z8j|h|NR?-yY@dyCeGaneb~s-C4%W!a!6UDXlJRcivK=9VS(3o3md{bzThOh$OUd{p z{8D47FC($YCE1FzD}SlOIiqm*Jjf>N(2fV;0few_3g)gu@Buct+4UfsiXiEN>!}DH zprUEGhVcKzYAnFt)YaI7>h9j~|KscKkM)uzdinAi7$UEQ9NB|BvI8pQb#Su09!`}v zM4tD-R^u5OLSf0+7?KS7JNxhrjeaw^qL)qI0rPv=j3bbi!GDhFXQfSh*^FIa#-a>1 zvyaVMT7>LAo8ACgYBN|FMzo9j*c|k)b}yBC+4NpEZwD%jy=-1T!+wt4jboZ&4$Nh9 zjTMxjl!Lq(%<>l8rdyHAZ-WxK6Xwd>VV=ALHOt*-n0CWbc@Naf`@*Xk13CP6{BqSp zD!)QK!RBkMJiiWzY9_bbl@T@>WL%kSbcFnt45(e47N!K(ZwuEu*9h+IZT$@jJw*s z>{z;#mUJb&2z=mY3!_hul0C{vD@@PNgqUIkfAAf?0@&J^|N1zgQbTumMMe+%# zlTRYw9tNL$3f1Tl2+F6!>Tx={L02md9SeE<8YSGhFo9pIUTiK1*Ve&k-lJ;QKqlXz zL_df;bREB5owj%K)7f1rz*)y{P>fLxQ;c2~p<=k&kb)b-EHVOg6^mZ#)_ypPM36<^ z^~mQG@_$VR@)ZU@&8A!K47NzU5A9`(cR*$atLX=}mn}h})gqrP?qy33qpY(fC_+mk zH{T5GXoAS{Ml=3jkhlJde$7i@moGz}d<}-nS7C&F9a-tk@D(1qto&yFM>XTw#{IaB z{wb4$YdJH1E$=Gi&|1ok*FahNT55Nqe{zV`4S&3&*Bied^{^)^Joc^Ou_q|P0HB|; z6+5(_etT3$(X;p%n=Ki%*%^a1`xKkq7H+oR*oZ~FtX>g+nIisjY)Rr;-^-RO;xDIe ziToz9yPqAm6kUxKeXQXiYovEZmR@#z?ZiH|QkQ0WWf|I*X}DC7U!XMq8}-rGxGi5H zgMa@QUCwV|g8U8{{0G!eKSG)O8RpBQP+?+WiOw*#3D7EK^POC`g(-X&zXQjS^iP=? z%b0GwCo>i8V<$wEp?cM0N&{(1kD|JX-^J;@JEMQ0C;Uc;DecdB+1?;kq@Nj%~AJ+qP}nwlTY7+qTW_*tV07?G8KX@MiCGzH|5fPMuS?>aLn= z*82Oddfs}*gE0o*>yIG3INs`e#_!m_Z_g2)*Q4TVeE}P!Z&vG2s40b~%=_Kr=oBgM z3Lnc%X_>8S1(-(<;wkHe@wI zBiqbB4QP-3Z^l-N*zIYx!>5?;L>u*3v4lpH>|_2H2LY`fjCRpuOZ6qysRc&^O3^79 zS~#(b)t^0xvmnl@zO2hExw!gNiaEF}yiBqZ|7v$@lMVPI)bMC%D~=5*`p807EnPuf zO+_JI(35781L9G!S)afYXYq`X+;^>$)3}i4>XH+t0|h>KQDy31)EbJ!X{(v00-zqt zY8}b!DH&Pga`NVl-ByfliW_k2#a&Kzh&H712XU*UWV%w)=)w)m<%ocn&re2JCVT5-N<%NzQf+kSA6szEz z0~Obj7pEFO&^-ECPnx=+J$tj#Uy!c?8Fw7;eUV^6LZ`9`$0k5tiSAnX-Jq=aU{y|uLh*W|7-~<5y zb^2Gr;{UDTNb^7VUP?MR+MEB2MCyNNIL4^xE20Ub^NY51l<0#e95!Jn7aR5#G7ke< zLsAiD(xz^<5*BO+ivKn)J04ZUt4P>Ei@yi@JxtjYAw4pQWByZ+8_ z{r$74C*b1=#t89oUTQa1i(+Bci8F@!K$R+7N?BA|G(*^b&r5-ACY}m?1v|OYunot@ zHrBGo?$U0x53hSyrMTzF(Zw?cDwYdq3zBI*42D-_7qm+M<<9$x{8xVA@FjqjC5;al zsg>?Tz3lJ^F~jq?r>WomC2X{k=9Sb(v)KAqvfDDWBX)%;t?FH2;n9w<(k)Uqbu!(L zlclN~%lVA09G%`}7CACniQ-W-GSbIoJ4yD#qR*XYd&CMxm@K zFX%=x@<_FG@Ff8ovet&Y)jJ@Sf}U1N0O-a zJbgGi^bon?ZYR1+^NCuYtAt+LyjJZ&_?>zwIBX)pQxJ9Xv)cf)eO?4 z#Bod1ZK-5H617cOgd6f=VxR=}WYCd&0(I|k%Dx7`JSQ2?PN1?_TQ*b5S{iM`xCxi3 zr}W{S6sX6+{0KEz&%jpm%it%;MdqhUDRT{FN#qk<@loI(PA(`njOR!exWpDMX)MSl zxlv+Y6rFXMFUuo4VpJhaQ!Kcr>=9Az7A8KrKWw6KD22a7<`4A=jurxFDh^_;l6;PH z7?prtPfm+*SwweUwm&d}_dC0%^fi`R52vvDs1sZ{kY`(h0?r)B8`b< z6pbld_=^=h8W=be7%^Dv8L8nbz2>ZQ{SPHh(7@0lMA5koVKAi9^t`JEgIDaTQKx-l}z zU-q~$J!42D@P%r(H58nMnQkW#&||RC8YD;1K0rTU7fVo9j&CiW`;!^zju9Fy3(JA7 zXA$21r`H-5LK7QRyIM@-4v}rfmJNmR2v+Wy)h+qKteaEq9Z%{WXUF zIyx+t|768akTs-U8l2E`y`QwqM5ojGgV`LPjC3nknx5h}Vt8PiPVjBI?-YM%4A@$kZMpqY)A^Rx;LF`(R+ak` ztpa6DD|2XqOnaYNYU9V|%Go;=QF>#}f#CJ|ZG9|T?U|H`^oa6Ly#aR!PPdIg8c`qI z-&;nWnq2S~KVx-Q7o8z#0rZ-=7ZJ!RSQ_{e@00?hmx=r0ITZP4)@bfSV`$66Z|=`^ z6uOH8MA}cbGwBD?>5F!$!UcQuTcj0*o!eL%Q3dHaDefAl4J_atF1?luZ+iLXFu^Ap ziB|{oGN)sqr}F#Q*s)1%qLgM72}Iuy;a;E*qh6qU?qn5bGey9|0YHN69irh$lWwrb zIOEoG#GET);ZtlF_sBPqN(^a=KEEO!AweBZR4kP1-XoAGh5hEYfQ65rMPLPL)S#Km z$(MQ7y%f5VxbUm!{NhDolfSRN!4k8h@grq$n=gI(W!2qj;q zOT5e*sZpDvRkhv`{+X~0F|~%&KX2&U|9wOMEqp&S+J6h*|0Q}=om@U+_&*hhHKTmh zhA=)Z&m9_FzmuD(Vv4|EORa)rT?3&Yn5f@}uBmp7krT+Z`}Zt7H^aWEM9K6?*0iY8 zs>5lJFRRd|l6|dN5~y!MdU-$!e4pOP$}$HtOgwt|Gx?MCn7@ac_3!htWgeK-FaSzc zMk}2QlRvbVi*cJB&ngn|^`M&Q7_@xw?)D~-s*7qvw(wqb*8uaDbjDf-VF$o?)f%mW z73@83@syW`G~M5Ly8JL1Xo+1eXGEG2*Cyeat$f=SlKgq<&xPHNvY| zORBVxV9c*z31UFU%~(dalo801rkoF%wqwY+a_@^SS%}cnrOBO%a*>s!Si$38P8t=| z7&R-Zcp8&yK;F!rKyM<*tYd5vI)Cr>D)>~;@x2?PJRQPtEeOPf%XwbNnj(+=v2z-g zw_H*-QfO=ZZ-K>4TqU%OarTbF4F8Hv25kWjN`thFW zaCe@bph=@B8Ty%v zCcEQ)0ROfw$8T%B-Z$VLV?k}!5dHQL^_g}Q))Pw=eZzW5eDZ{hrZK~>F@Ca`y84Uw zZsN0jQ)#MP@sUm#xhMJGi7hzoR0GRhGa6xS$JgKs&u>QVBz&HanW;3x6nYO4j%bQ0 zg1q=i%HhX8C57F&VwK30&_5b~eMHe8#qkUQ#moTv?#v=jqZ%~HH~x@BeACoqK(5rdy0)P*BV=tjC~8$ zV+c^0?xqT`F@Z_Vd?KjLw8F^gTD3H3ajL3cjQfHXgw5iNu=4gKr$OZf*5g^=U3k1S zh*Hfq7eXlb{?$0ZVJ}Xk8#&8xPjN#T=1zUU7h%{W=PVJz6wiU|Zg- z*Oe&eYdP8Bn@A%?_pqScD;l@pyZIhhZhco;zme$;v@!W@^;pkMOhn;mi`>Fi?=RCii{gvIs5plSVxF2hfQwkn&~R(^xkGC`RzkhX2i@N=Z&BH zC+(lpj3{90W@Eq8h+^AYlKIP~n+V?nIi>r^uIXf}yO!Pzie;yaUkvjm5ud+w?r#~I z-=pNdA)I4vG50;0yG4duU&4wEsFmyR70G2Li{YFFgj{MKsl28ApEQhx6zhOUnEVe>E8bTY}~?DwsVJS&Dbk4%6@c|sCB5A*xnQJZ=;R=BV}7vVzw z+)tGYwx)V#H#EY{v>LFrNS^LQ-Fshx`JS)9g=?{cweE8kzg%36Pj%u}`G~uZn{3!3 zX;yKrC75}d;{wkD*G%pBZ~0fAK}ODzb*TlAjf7HSFOoi8uxp#MC@)AOy}4G7q~%_y zawY)O1~Slw!bXkWqEdUcaHW}G@H+pGs;w_Xm;35gV)Bg(e2P~UhGo-yc9T|}d{S+THCK`fR}!FNVaU_gp@u*@Cw6S&;nS66q>lbBgO z+6!^CS_e8$M@>az;Ks~~>DoFx=c(5I{L4CKg>(X5`Gtwk_b=rxNmESfvJqp_v18J> zmL@J(Jdz=tcd`9it?Au50dd#ht|qpee^y%ypYiB!)t?x7OW`xrs+w^YP@N{POIv}I zHYJ_qN|FTObg)Th=p=|#)$yA~Obi=>B)zzbvv<@g^;UH(LYL~R`kK(@lJKYpR25<} zt=Pwy$<`PpD@t_2ujm{p*ht*N9rfERS2E1(g2xQvm8J7OON;Jud|qgh+&}6HY+mGk zi%-@Il;%j5H1z+9lNRoQml%Tmq<908?Aw9-w0^|fy5Zw;qn-rBoJ8pCw$baOh4Gwr zdP8l&azr9exE9sC`yHFWOHXpiMAW3XN)^WPaRM}jx_sBSGbyYU+rv9t3&QrI=nkbR zJ5#1b4Yf)r?|xn;eftr*7BB=GO3Vszwq!h;^3ug_)S(S z+!spXZk7A1bqYJ_KB)d@$qW+=YW2)M@kY3iNL%n(rcVm(IQsBuM}(~}G7_F3aYs*Q zX5UL2!@Ju381T)LT8yxFBGLEN=y#7E9|q3#XLe{EOmd4U=~x~19G3z1N&dL5Pu^%B#{(N%$KP7V zM2`yIH##ZI2FtkoTW-LmkF-d@tn9UXP<+)H#Y6Af5b?OX;VRt5R+Xj_^Bzs+01D-A zakUgt+Wodo*$1JgUCY`OzaN;qzNpqHUXbSq$vdViwpjDVP8m6*WWU`=Qu2B+ciWbU zXf9$ct@(PAEFh%hgCbzw0}a1-2nqH}vt(q6h7rprZ>01cU(de=B-e|98{~cz;4jvj3ym^v^=*KPw(hUnjN0 zPsn(+*~Q(#$^3;O{Q?q|9GN3=Hu5}(ECpoPNQmqUM1xsU7X{WMiYF&qIenp)pRS>L zBIb1lkNk+UUAV}S#>=&G*+Rp<+pzO+>_S+}TTu?rTT$zu?B84d-#qd&#(7We9b1H&&gxx)V3Z1+{FyVK=Y*ZYj7jeL7G#s@T>874Qg!b&H{vkRVK;Wsd zQ~MRyxh>Y$edD-%(TRH7&DlJpnf3ffQJzeZIc*lbANgQaBEZ z7^S*JPkJi9s*8u8EphCRHXW;CvUbF~9AL2+R9WEVGAfh&2kAiaVq*`3knN8}W5jpG7l0&UO;cM4P)Mt7%bJq~YP0hfC>W$?8u2LAYO+%{jmC^DBVA$+T^Zzs|n5 zQY0A#S>88(cI7LCX@3zB$u*iOIEHqu36ny7ZD0>&f{<|c3v>3sX>uksg6>}x|Haf81&NSQiRyxL z4cf&P3v;T~G@J=U?X=ZI!zJ?q$4!iF0?ye;4lu)hFvvnJi+t@-7dni!G=ywYy{LE( zH|%<+n(qpJL%oQAp6L#1f_?-oyd7$z*!{9mO)L}wUvLW~;c%NfpGm%KDbbKH7+OC9 zOva!mJX!Dy10oI=-9dQ#h}q%3$pH-CX&=c=k}4(t#&VLJ&S#!B%>Ay-DPR_JbO{gT ztxb%NP|={*Z9Hp(J)s>D>cx^o=&)*U{*!kw2|)$UrLqigt6a`fICI}W} z+MiP>W74t>h_f}|PL%2ME78*sZeF1+0T~rd&)a0Q{B}+2=)+4h-MXA44{i6tV6@Pr z3ZtJPXh-+wOFJo56E2I>_6!fqWBlC|mD-Zyv*Rv3p5sy$KP0NWLTRTIVoLCTqB?yr z!1_^F5aj^8S*)pqZ5D$H?Jv!_9=6WD1#26+uv&%&@)3S>)UCo`hVk-#G3VDZp{&O# zG|JoMFZRxd$3M0Y&v+#x;RpjjM)UeU^i=r-(thgC?(92~t+RkBHj771_T$C)w9WK# zg3*r;eq^uPk}v$d20IAKW5Yfe@q_&;$1}bE6VehO8gwdXM02iz^+b8uRrk>R=|R7| z{G^L!ZyfdA>J9$BoFgbQv4Oi#NEnQ7q1@&=p%`%PWgjK+sxyYh$_rSV*(_d_tVd6<}T^`n(RlSH^AbxxVx|LjA|K zkM8xXu7-nrwew<@Z)7fW&qYj(^ENF-=>T%*Gi0n$6ce0Dz=B{zuFe#IZb>L67TnSR zLX(EZ*FX-XVS6SAh>ZEY@aMjD&y)&u#2wR67|8&mB74aK zLj?&K3q!UhaI?vt+vYFbyp z{w=}ppUQ6A#NPr5`@@n-w~r6l?!DANb>Z*v95nPzWvu8~!B3hL1(w3H{@4f!{jG?V z$zLsB?WtF|%rJL$?VkDtZ9&c+HBLfazW!$AnLBwm-Qe7l`IZ;^64j!wRm%vKH$_3e zy1$y~VPN$uYs+>TnRb~8R0@SV!}fUVeUKI|vpefo5awielC0hhrU@DV)xzl8(533N zJh7JJ8Q;l99dm$(KNpLW2xi^!^|w}LvR^ofRXB+R@FVP6BD`}lU|Ncz@S>oOw#Tl)-v`d%69B;Ud^p+;w7_ z5vvnmD|KB`AJ@_MxKH&As9y(pA?m7KBk)Dlz>?KsXkz#!85Q?ODST}GgyD%+EeBX>Za9~dTZYf7@D3;zc3;Sx z%#S?@;r4v~nI(oaX1nhscAI%YQx(Ns*Yi^wagR6hPH>)+y2kVNKzR`uSD3@`uq)L1 zDTAK)qsh0cfhjjZ#91(}aKd3S{yo1*dMP>#Fb1LB(v6;4yosTWz zERTpc3Z2=adM-n%2`4@;4+UBB*VSq7r_iHRR zeNEp<7!BkbF`3h-#@S=vu!NgfE3{58DAMABARRAqI-tT#0q$Pj;61AsnHLf*?n&Hu zhD*G&8Pn6Av~O5&Pe-`Y0s__VX*?%Z>c0m>20Y`Woz9??8TOX0BouP~R0GDmdZtRA zX&IIb_p#p~>lQk^q5>wkdcu%S{9i)^K8?_}drm|{9@u(N;3fW6!DivUZ&%Fvh3gK1 zxI!9OW(*8D14%R%fm1nZjilk|658GH#GM1Al6852m0qQbB}QyTG|aXB8y}=PX3L&^ z3UfeTmzQur<&}HfUc1_G@D1-ul|<*U55(V^y{!l9Wt2CJl0`36b>+~XyE0=%r-`r7 zP@5xT{npHv^h@dlFP~)0mHE6U|2vfFV!^wqd*-%&peMDBz+xUxz_rlwQ_0gx8qgWsQu5D4?pe69yG0nbM1q)e@*z|pT-)e*7xLP~= zO@`XK@_?sE@n_iwp5-;^A)mQy4Kf=x^k_+7t?$QQ3Z23xlnZ*R86c*XSp;hAUas zP^v5{VqKnd9u{=JMx40_PpBc;3Sqyw4gZVJ>GB)*gk*sx2)^F8y5#Tzt+HJ z_Dc*?46%A*L&}3OWhdO}GVSz>x6C_SJNA0=!;X0ZodLQ>2h#da`qI?>$b(t@YQPOg zIK5u7jQN7Y2E4%ILT|9UF@|;gvci4`JKLjk@lpLTS`xs{yGZ`P51UtS#`ll2$Vbtv2&Qqs}Zc}A;%hn=n9kJN$+-Mr#TGn>| z$g0*}cNw4HH0ACDA6!MWZBO3N7QUH1H{q=GL-n)%)v1 zy)n+qd^@Ol++s3w(=y0!9BWd}+WhfYNu3G!7JGnss=3x2x{PKV5j8oZ;fjqe23ZAt z@l`iPWJ`m0 z|0pmbt|4efxO|uWj50)$_a_y?6vdruKuCDvXX}Y>GUEUTi@oj)I5vT_HTR~i4_6V9 zvtr0-2mO&1g*k@bo*Eg;eczefMM5dIOG*A-CK#-YL^GYZV_U*F0@^8RF?S9r361GJ z5d1D(B4P-h^P3_0uyOU_mLb%FpgN`|w+9G}LWqL-2)8F z`}$+e3w8Z(M^+pa+vZNr$-WNFF7e=hOr?5zg}-y@fVVqk^;+1Wtws=l+SV)V5N^=U zPB$S|V|k$nV*UuR#A}e=K`&Ly)~L53hC9qwp)cvh$yRrc-7SUS*wOfobD?yT*gHXI zh;m{IH@zR&TlFJ>66-6rj%agNs2(T43h zxX!*Sf<5TYNKS}=$O%|nm?HMLIUCbvA13hH9ZQ-31}6;O^4ip7JsH`)=gSww6KNY% zds)8}3^vBv3Kivb1byL=M7XGOjKcQIB!oo5Kdb#qJFU0F5DN36=7PwJ*TDECEa4Q+ zX{*7&-Wh#PS5f}(i_x0#`9ZEWJKOf1hV#_EguizlKi=$o(JQRsFLpc6Hp>`dQc|L? zHp(=YtMXNL)4zl-X={F$$qL-YBdRDC)p8hlx}pluA2xdgYNs3+8Y#odun{F&t*cV~ z%~$j4Ocq=>(@pV&8N>^E&j#KWr(Fx|rZM?NiWf%DsM~a&U3DB53-czJpUvTel?D;M zyh_RojeAf>{eYA5jv}q_Dk=65a^cn_Lw6hJP1#W1P{(+49KLK05S$Va@$@6B+NVF> ziJSR~Z0L&E{lpg7QAV~$fZB%?9)^M%m#@YbNppkUI{Pm3!qDEJZUSiXW_k^$V$HoW z*txp#Q?2xtdcD#u;-HVDxGH(0xL^`zhA|ceLuB--tjhLH1PV`~K zeaG07W{ZHS##B_z^Mk}2YMPfargi_6E`b@zp9bGC(TR$~gY6bKp+$Y#%7z-}w#&r!O#8LPP=nmr}uy(L0$Ih_$pIR6K=&uGm z`qh8D@jThPAdJswtL3`w26j@H^2I{xrRQ87!cb1+xN*Bcl#snHl%HiLH^j&lwO3tn zk+40=7g?YNeAri)1_aJ40f;H@N!@|tc*=6^)1nwyO4JN08vr9QgMnn2SCBzG=P7?X z-Bbjc^|;ifgtWNI6?QAA{Imf+#z`5@f(e$u4)zPjPa)jd0lEx{OUNF6?bh%9NH+?z zxpcqsIkLZ%*WHxafKq!;YwkO8M;-dw29i0f>Y|kwWYLx$VFM}Yub4O=aElR!Bs2jb z=}+wILyk^yPe2V@K$(3Y-UK1MQJY&46wzS5oEFlb_#1)3JxsswKd)+(S=Yvy5K5Bn zK7vz$;d>U9jl$(_S%k79W6h#zRH`#0i0gcs5j^e}IbHBKjYe;<{XtIzD0lYIH@<37 zg7Hwmp!}X9A&IztRZ$~s1{dz1DN(ZR3U0CIJ3cX$ctC9YXSVy~Rr#G@h)ai#x**E1 z=PlcrVtywB)Az(XE9~q(UxTKJmA?XI8LuJPPqZaFj#}jJSIpf5?A>5IAu(0a0Yu!- zu80X)+5k*j=L)fKR@9ZRyv=$>ADPi>5`{ zcd%H99KbE}Qf=S;9S42ta~Q~9Th35?)-KX>i=TfC6aKlIN*jYePFr3n7~6Pfg->>p zvUro}^|I(ra?VXig^vXhWmo$VmmL6ghyw9|LX=7Jr8*AW*_SLhS1N)M#J{%1-vQ(~ zyv)O!(52(aAxsd#0up6rIddBb+Wwwn#&@=TKZl_MvwX^jYC6yQcBFOR{akGjD zu5@==yJqx3PV*J0kAp+kfIH52%;LC1?;3O7#B?NBv`{?C4_2_)p<>;B(u7 z(e9sy(Eqju@n1md-^a)=fa)R6M=qOnW*gLcC?t(^elm!)k8}Y&UUPB^CX)`VN_i?Z z?!2haSN@8hLVXpJ6WQ&jgYpvQtM(2*Y6|syGVBUnlcqM?KEh^lkFyt&05&ts*F*2^ zyWHbj|JvW&h8yoErXciBbwYT#o+#eJ`2>u&SG;ltE_)s3UfTKSb)UK5_s#BOM(6N> zyTHpAxSqZPx+Knw*Z8rx^iFaoL_rIeTq4T!PWo#uhU+U(+rJTLSP-3Fl18Y4hx>Uq zSI2T&?z>n|4Y%lQ&QnWNEHE&lN+*5buV-=l<*ui%nuuir153C| zC)5`HZ+kDBMRvNoi9#T4Dn5a%O=N0<(xxY!4+(B;?qsmcyGKH#*-V&J<3JiHs zXH#5Ba?vX?L7I{WS*8YRWobNzx~yekL@TSy-01Cgl796`% zxH04xAx82L6x{u}GiyZq4DAYd+=nOf^p2AKcu8!qGGWS8`Mbu~%qp_ix(FX#qDIdk z9BY-CcqUyRHCXQqFiU+0ML1Am&xkTdn~QD?0hGE<0|E21yuxzUA@ ztu~TqE|P}X?T8bAi^s8C|0ZXS!3H-Vp8A+Mq>w;b#lrk>z+?7F3(#&T$2aW#!KY=| znX&qlK%+-3R>?6(!Df;5PFiMtC6PdR@d-MkhjC^+Af%{E6el8A zDT&%flYO%cpqwpdr9o<2Ye^`2laZ4yE2>Z(?hvLFNCbfi>v8F!KO2HA8+VS)ayJ#GKHV)ih-;Du=}*Kg^TU%x(Y^ zC+mhC#=V^}q8t-R(kgwZDB?=x%a=ZW-Aa6C~A@~;W4bJ0v z9KuHgVWB<**FqV!QGS5XCOfp~1~YX-=rsNpcT{6mK-}hj{Y)Rmt)gf!U#xX<7~dc3 zQG^&*t=nr1f?kKhDJm#2`e3aH*apZYpb(MW8*uuZ+i1BkoA@hi{dW17wQD!iJ zL6V#-82?Gn_Z|_hKjro45!-eKxp_t^`(GwGZ8x2Y&Od#IA z5Irc0*-N|t0EqbmprdBo#x&8QNMFv#g*tBccG`rVYPe?A%`%Ot{8Uid6-roxFw`Je z%g3l04p;Vs^$YCkbzqUStY$I*E6=3J7m6LK3=;o6`{bL#-?Wa3Dof6KWwj=U;HftS zmjub%-#o1_yR(QHbGR&a@`ft2|MDa!{Oxjz^mmGQD@O-IzX;MIheSb+GpfQKzjJSc zux~p&7lu2SpcuXKi*Nj*!lCrnOSZhyyQWhgeCrJ2I-18TdWV3*OA)yfpz4b%kcU6+ zJ8Ly^*R6-_;qy3ztakA?r1Ll&GSSo}^B@IRAa@#p(F^RgM(-dSx{{96Ka(}J+($x2 zJ23FsE3LU*rzFO$Go2#mvaX=5PDX1V*9lrv(Ki39FP`EbPGQEbC7yxc} zfvRo_B&~1;wQ%z~9AT6JV>M-?HDzNZmTpmTULB%w4nm_bdL`$^>}+g4)ZM z?Pl_$=S6#P!F~%`$DVb0#qihIQ&WS78%ulKjjw!WH=rAP;?>BEhuU=w)hk-dw)cIG z3!b7!7kHs2I!FuSdWbHb`o>I#W463uCC^lQrA}#tQhP^Zzem3S7=APcL86_xX}c=2 zq7?$M+O+-|m|ymu>On@=3WZ{|4fIM?|McVqU$#o$Hzq1J?DDl9mE7{YVY07UD)rEd z4dI^M>Ibg?D6}H4?`U?{rz5UbI}=gphy4waEKoO?;;;D2;diTFDQ3m)O7!)F#N>2v zw1U3+|A|GdL{NJNG6^3k#)0{0-<}Zv$^Py!x6VmyASOiGi*x3YMRjYq2c*=mE+crH zPq9KX3-+NiEiF<8PO?Ou(%MWeMll0dS6cTDJX6$7nA3IN`&KTv6r~gVu|LVF7BYH{ zO?>EC0OQQZ*WZSHXWQu+k=r--~|Ea`paKreo9`)%OTMxDi%xRa$XF{9?!%w8JrcT;y;5Y8-$jOj5dH&XF z4fkE(l$5x67U~H}!3A{#(2vxnRwNj0pMk*xN*V3aaf}o}^)p9!f zk^3>*akwtvx_<)1=h_UccEBEYdCw!JTv_-Mqmx$+xL80Q4j{-I{(=DIELAT^T0R52 zm9uxtjp1o+6F>Clioji)-)m_^tabvPehEdA5it#U^py*7n>fL^1|1qz!7&7HpE z4>MKJQ1;j?n+e9G{^8g_Y1ax@Hl>1HaXS0$3;ZwC839!kYi2q;I!wJFx{Dg~Tl)hS z4P(D%vxSuJNLW%#>74i@WSjI4^Cz9{td*DTz-N_@G$A6>%01j0iW8VL?0g36y-uqu zcZh&VDLWLX?L@2XP<`HZ2b&duLvith=p)$3e`tk|bs42%+H}~to9WwWBb^w(MOsp5 z`ctDp$o_t~D6vkbvYaIqmv(6 z7WdT%SRl{X%~wJbDPRzlyF0{@wK=jJ7+IKRHYxE`bLZ*~`d#@%IP!Q?A4%l25l-at zDi!>~+|K2(qY8HVX7`j?_WcKmKGoGR=_lA#S%GHY|*9c@l=`Ey|*SZT8XvZa3 z=o%m{Z;;R2&(B>7zgbiUU8h93jN#=!om*A<6JbQs2J6K#AaA>W zwGPwwqc06eNE)>iLu;IxANUAiWuxTfwxfS#pzrQ%e%(i-Ar$MG2|U23$@& zBXW@%3mjWq#h~6vR#fQLuxjr~N|~JbPjSVF*`BNM{2&3<<#|roZvij>T|^|z*OC-D z;n(0(M}p-A*Ua)?$YlKa+-v@rbZb-7#PMnt$bK5_CkaQe`8~1m?~rb9ZQ*B*g=tSU zxx}?25~n}bkVrQy{T@xts-TIwUoh;C^C!E|M4~lh0p8PV6@ARMkWdNdqWS(ksO%b5n}Pe%!Kwvu}r0n zGtHo!R}_t^#4*R^qpRJOl0ea!2|_bEU@7oAfggsTROl4{q6Y|>8gf;dFP7}$u)X2V zEokK>-b0A(M;^C$LpDU?YW|uwy%Ex@Y&~E(V`IxpBjYcOD6Uor7RY|TPOwg9oT(C~ zXda!Io}mpu(H*>OykCY@u=lZ-9;Z^Ucfe>UerYS4ld)ORD`u5~5s8Ef*Fn{N#@0!M zqAK9H@gkhKDg=rx;tt4aOGv%3P~I44?|TZRKk#%OdQ5-5BUR6RL?pj6>eYSV;XQm9 zNqyqKw~ry>H~#3;-}|!9A5J14LY?u>kxAYP2zqqw!5<0P=KANOVJ1d1F0$ae7=Q+s%K&>TGA^HD8xgDV+UQ+&Tt| zPGiK2(KZyFK?w@u%H?~ zLo>L{r%GR-9=yx1Hnl;z|Pp!HAZ#H z0aY3OodI6-nB@({x(aj|ww1}MPYg?9zcc~?CX*taVMG43B?p$(3|sCT?+H^th?Aml zI0R{@<0;EZFMZe*lBabTo%8s3+H?9b$M-0J%kPm;2w??5&Pchx*E|9=GTXqoY0yGD zk(yjtp&vEe6JJwk5u&*ks3W}l-bI-Y#j8-Kg{Eca_3q*BDf^HMZqT;g`q&kqq<_~H z(1tSH1`&PKjdxMrYpuLXFybEA0Xk9Akn-Tu)hRq!wUvsR?!Z;+GyB_)=A)o%tu)DP zz;^8t;g=^D5rIv0G}p?7L(@6$RqHoxPyNHX)=LA$xw3JtJrgxqV2@R7?yT)nXp{0V zC!p+<&oon|YckE`H}fw&aGf$)mF~LM(0bFQ;OI*8h4UAB_Zj0M){$~ekIS;w2x_@3 zuAnMuJ=TW6%Fl5gOwtrt7H%Wx;YY5hkv0Aw=yD>6p&PipOS4=y&@>?JRhUDH6izX5~(65SS5rA{z>9|a$d;^_aV$JL>0@o zdKyRMi9^elC*8rC4Uo(fqOZnNHee@=FqopD7Z4}kUZJT4iRlGR4FZG}0!qSe5Ss4a zhU>|XoCJ#LqQRX8QB92pN%oBgSz78HJ;-cxn4-tE>hh=Xf$nd{=7yx+y{E#(rjh4| zp4higrH3=|z7ASg&X(~-SCct$?b{?X<=`!{uhwO(a_>CL6eumyV)hL0s>J~+#qViS zIzb7AE9sGWG%TSZ^;f9VA-+*_4shvZqhAf@uJQg6x?}V~&)S~^li2@8FabWp^}jx} zpTGXAGx$H?%YR!DJa@&@#Q3Ob*0h~Cw>0H^y8KExJsw9UPk_q{xuSr^-kP*nBPvp$ zEsJMqs?AcR9xl63T%)@_4>fxoz92${%p45}CJQ8&=6t^`nPhrJ^4o<=-X&#%7v(y( z=}II}?Z{noH9Wrg$7r?oHS8nc8V{u7dcvjIlqVW;ke#d_x_>W+6(hY*n}Q=RXCWTG z2)}~KBH<|K?~Zw*WoTVk#I|vw@gB<<3-`gep^eD4s^HZ zlAMfgR~TB>^U~vK=&^FIVGpYqXvnYk%b3WRyhJ49hg^zmGNXRGAL7NeyGo-y;9 z%bOjS(jOa#7UVn75pX7{mYUwJ|5C$=1SM{vnl-IRK8z+?gInKfNEiywMw6LRAg_j# zoI&1_#vy{3L%5NEtp?*YB}=^-@b&3) zr%UxF3W`y!mO6Xq;7SO5hZW{{NPoH~X0arB6n^at=_j0_kYB+qQ=2wFhW%xu8BO4L ztr*9>j5Fa}%{w$2&8U%@+lId&j|MJWt|eYFb878@b!3f=m&{ zfq%kS&F|HP8{FEHCxL+c{Qw~Pge#ipEPZf* z$E1@lw1}tFNn`|kCLoxUr`ANe@6VLE;s`sYcg`4|oX>2PQI#8)b*aU3sAlG-@Q5@o zPr#(XNAQ?C$HLDFkp<^SazgW4RX_O=&5X{7JZdXah%Q=KA2?VaS@e@9?tp^b&{+Ih zs&XBFLG(q>7>qu`909;`NPo>P5Pj&wb-X6iVTyU7;fIHSC|VZH&KsLSpj65|G=%+N z!wD+IfjW7TF)LvkOUCGxzAu#>9_O89iYQ zA49$zx2{zGGNFe|`mch6Ltl6|)KK`ASnm^ZUlM0QH`I+S56q51p?bCc8(jaHp>kb7U_dIh zlnK!v*(rov0wq9{Yv=TXCJatL}Srf+sH5WA&}4*naJhn#LW>bVj-bjg`i-CDuwH^e{h{SC7k2!lFW&= zzY^y2i%%oY(S5ZHv&JNou!&7P7skJ-NAj{>jxIGKY_V1OiYpVC|5t)-dvw(&a?u@~ z-67w~k6#=xArP<0D-G8x4rTN_fw@Kx5Gfs z>je3QiSBA3$V9NznvWJyY9ti;jEaP%$*;`9AIlPW)0*1*F=>ZQkwR^rde$4yebgaT zmw){9W}vRturJ@HMAR#3f>6TqVzE=^b`fP2&nQV2%}LCT7Ng zuoVDGiF^Kpn$dx}cx-h1G8~p36L+i(do_M8xyThl*5 zTV#f9TE<`J8|JW~=3YcKeNhiS{lOm>D;`q$v}tnrN5wNRJ%lE4mE>r&3f&`;?F!|N z>nlD!3Iidkc6RaI$RNb2Ij`}CgaG1Ls+K6Q;;|U@YQ23Y>7VD|B|u;>QuhAfcgwfd ziurO({znkA!LbZ@|C;;t0t@CPDfkW5xJPa^uRq|1ZF4z_i!7JEZ{x^x>)2G_!nBl# zmGB6u)0b5_@KNZF{Vc87!Jv*H}jW|1kCr z-j&4RmS}9-Jh5%tM#r}8)3Hx%+ntVWJL%X?I!VVyC)0Ok-g+}{y}5H&)vEdjzN)o< z``a+Xe4gkcEv213K%^JiJSU?c!#~Yn?&RHE87oEm7Kn(Nk87lg;ln)*xPweVO8vvO*Ed0f zgZ!X#mdY85jc}Ct2UiGC9MAeD2+zG8e~>F+K0@DA&pEQlL>P`Msu-%Ev0MP7v^MN} zQI2K&EWf+LWOZ_NduP(*87POETc)o>?zcQGsAT-6@9j zsw^k1Lzg=dPlqH~cOG#&Ii46T=qkrajYJRlpdvBxE?pYzv1JE@j5;R$nk{$3-&d;0 zN(~$_dcR_P(Y>63$(yLmc21sihw|_j#d}rQ60R+|;|7oHd$ntw9e7ZvzK~KzMDlok zo_kv8Av@gF1TAq9_u3=cE%*QWEUjbL$XM_rhR8mDSiQz=wl>b%N9}{5uy=$0BE7#@ zgF`h8SCV=}P^ID{F}lN~3=GPnk;?OS){$|_WOcLb_Z+Yi8N|D8eWQm=P+sSz$*t=>Vy^ z=;O(c_b3A1c*4r#l7n|m+8T|BAP<~G&pQ~Vr$B%^c|7uXT%q2 ztq$x6A%!TgN5}~e!)ziwI;{aI^hPxT8gNc*ht2Yc5}9}TC2(Wc_%*{wRcEpOMm*(# zU6LO%PG3*i;`_6H0i==sEw4<+(NV1F($8KxyOjpJP4Z`Y8W#cLMD6cW33^gjc!-qB zP&v&3KUUVxD7HK~kL}OkG zeoP6xqlD`D7h^``6Ku5c0uq!M54|`L-;wlz#Du(S2WEvth3Duzq?0P z@t$uQ2`fU$eh~Y5{>#|6EM5edR!~?1AA}dzZ!DQ!9kDr2}dkn49^+kxI~Wo`{5BVGox$4r8N%ILqQ|c=%(##TH;|MV$*oV zEcXZB#y4+Gib}U_(p{m4oA|aX)ll$drQ)Dy?QDz3|LGgBf}+;6DT7pHA1Lmb>3+f;y~+`*=ZWajM-_o30@7}x#5xv+4=c*6MGg34zlg(?_z-G|=y z9f9lI`< z2|S2S^_n+{KtuOcMf-1E9OkEpt(LkwP^N<0-?#fqn z<%Du@c(UuWjjh>STd?_t^KNeuh7X(&IEZv2G@a!S5yy3S`B_DwDdm=aix4=)o+>03 zH-(Q!W)8uEb8Fx3wzAoo4xQNgEO?(E%82U1G`yten0|vMPSd24j3q^gA7=C>jSNEeeeNX5G$seIhX%c}FIl$J>l85?{UQsLKh3Vd9 z)yV3lA_ULxUvdmfIe>9ezz(IbR0-!J(!eNPGP+SwQUuIf^aJ8k`f9dO$YpfID`Mj{ zTqCJwMuF-Yi?ME*XO<1D97sP(hiRAr2P-?n8UdnaD8c8*j$|Z(9d{hk`2>u_e zOkMU(HIN(<46Fj?KSN&swGYwF)WN~h;eTOgT6EssHFb!;wgR`Ccrw7?2|FFs)1R-X z(QIsK6U-#wesT$hs#XFicygvr28DlZcXe0SC9HW@wb()1Re8|2N+~b_zAKj zWiGrOW_`oxEI3wh%0<+V_`x?)fcx#~La}E!U|03FF@m>uB*nSLC)~8R@(eoGHWESUcJ()#QxklC6>KH#Z6(74K=n`=XxwNtQFLN>2ML|wNC zTN~0*mrTm8&_yhu2NQ!&*)~S|P0$+`(jha%Rv<1pX)22^xZm zSI-T#@7;hi5-I~+rwb|%XHXGkX1Al%Ky8WH1Qr+VZxtjU5jTindz7uKt3H#I35V9v zyO1xp3V|WhlR*|*->Hf|PkFbO8@NNS+9|DYLY|K|hP{>24w;)4Euh}VlJwbE#_FI* zlCM;H3QW#>s0+Rte^vEuw!m)ms1z&|^R|?d_{onRV&6E~MZFm+l2i&q9#dj9@iUgH z+GbKU*)IxcHvfgTjFY#aNM*ftqJ0kiDjzh@KS9Go-T^V{D%{Vd*u2N~uUunCVxQQn zoIESQ4kJb?#cX17vY6h#J8)|%Q)k3}Snbj6+u{9%-|2x$mT~Y2)GC`xxfX2>Racw1 z`jS}b-KQNjLu=Xv$F}5ajLa z7mdGjI0u9C#rAaOLz;00#?AhtJiS_a_G2v@#DHgwNrT0htzNL0G;o8JtTxl(kEvXf zGnWyb!GW-T#d*wVf8?jIj)1H3bsNWLr!NKMFJ$P6i8*Dk6cDx;rPI1SDB^^QQ8xZZjyar@}Ybj{2-{6IByK$2~|x$33J{Q`4}b^$vDw(3t6@Lxrb*+3qBozRMZQ%^q7BA?0)^oX0l+sx3AL8 zn7(=N;~}XNTNc!ukyy46Ct8X$SZcx&P8%)d?9IMrmiGpX!y9A9M2wfCW9Y)uAg?0E;<+q6xy zq5<9^a4!Ub-{@C}VN`BW{&q0U=RyUuI8Ilv zku%G;Tv*yN4+dpTSWUZf__|~Nxvkzq=gF1x+vL;wcfwii1||`$s^s$@D*fyEP0OrkX~-)=)DZrCAQvvC{fqD% zV{Fb5uRr4a)A$2N;=r4iJ}6;qg!BgMwwLUamXcdOpK1#jvM?V!#BOF9GuOmwt5ine zCytY}2j`O{bd0?~M^yas3g8k?HCD$_1D7MFrl+l<^tgzKN(u69r+Pwi<@l;ziqw4& zeaCMe7O!`|*YB>koPfd*iLE-FCqc{``lGu?bO|%Je5D*=f>NRQ5zW6>u)z2k(lxw0 zPxYz%?M()#r10%Ht8el$OpLum)asUwMZQ^W1M*Q)EJ}v18KK7%WTx~z$lw>RD9trk zd;!gFw#^5{%pqq`3IKP(Ct{Sx24Mb)_#bFW*$YHT~c4lpbP$=5p3of$tVaLJn*&JW`fyKiVJw%?N~NM2$w)P5vEP4L_M2 zAJ6JwTJpw_>D;LcL9dhBCRm-T?f_FsvYB4^=5O^uiPN^1_vWQ}*UI*W*9EZTpNB9{ zUt1N?>wVVyWK6+W@W~tubC}PGcm864@xeFBPxF8+i1g%aEXyy1 zRODno#Yix`!q-Rg03X#ua4Pf^kpEl=$8xhL6`f(=vmT1keK1&qQSYl7!}GG3!`yv5 zs3OQ4)<(5+OJ?$u$bH{1`WYx#*$*rDNhc!wU{ZAZLKE~c9hz`6r}#Iw%J?Q3Xqxk> zb+9W~Il|(5qT{gFr|_{65C4KJ62x#TfJ%KRBFOn71pHJ%6&@w^xx#GS>+`wl%X*{K zC}`9H9_$xTeGaOx@BqU!l5{yqY|j*> z4=>eup*TZv=5r2jW!=0ObLFMfA(mq?CZ0N#9Fvw#Jc^r`ae6ry(thM*D0+A@t9z6U z@G6+m&8OS_&FMHpWo$Ii4e45m8?Yd z0#sUm_qkNgU`E)*p#Gv~6Q({trmG%MFL}ET-z%7$27{ip0BGXpKGT4+R#f~{^_*%|4@)1wmA$Tby!gn?2o_w_B@dM>Cb{2pq+Tw_7mdUgosm?h+3N;FD9A z{J|xJUrPgxp5sVq#N~-!GRe1$9pAUu`s<(R@L_+d= z`tE>_&usFuD_}Kp%I7uwZAI9hMUvjanZbzh0L)Xd%8T*hltXM1#Y$}qHAGnWuj2e# zX|Ch?HNjN;y`C=!9ybYrc@5jt9Xyr}hqmdDf|kRXd>I3`B>h43OS_K_qjXxS2x10t z0gx1WEdJXFS!?P)mBxn|UebbO3$6!^O+UvD#dD(?E#ew@+{j5>J{+nIVV+gJa zm+{|g(Ur`zU|NF%>y4XQG$?VV5VH(b8FaWYfP*Qstp=Id${|1f}fcOI+%0MCvV{x(Az7 zE|rulu5~OyaCI=Bim!rya#05AOY$mEKiO7V`k^Ti1b+Cv+`aqe1u`M71R{^^hm|PP z57T@s4QMhK)33IX6wdv>cG;CzSwQnQ9TP8I;d|wx#LZ;xV%hr|Set{Y$NB)MaD9Es zD$U~~_$9=IE90q+1`n}%f+!KjJZ6hqtb)ibB<&iKrcCZBJFxf&C3T>UYWPFaM#Jy) zA515b+yt>hXDIH_EmyjuCguRwX&4RzP<)fs-k5 zd#@1XV(rHZDDQZ9CvF&>QyzWB=>mZqOO0K@KiT|88Ue?JPUKb0-G7}<`oC*s+u|m; zhe47m)q%>3rSH{dez?NamujSxcxr#)=k8YH{}q|A*@Jv6Wlo`R=1g0Bb=k9Z^I-TA z*Ob#^;Lu|*=c6J^ISzH(QUi+6yACXmkymVzp*y% z@|pvPGNJoX2%ps?kqkic}_`1F2XXAo^0 z)nt6^&mAmmZmB#K`#%pPShbho_uY+7?IA4*qKH;f>4_IEBq1jOakYYR6sMT-0pSBS z(WGI>^kj++6glckcI$tp*BqMG{mAbfgZ2U3ZRBPf-3wUQRH3?$aINbj+!-*T1Cjf} zP^hMLb+|j2zBk;yH$W6$7o_9aXE#ASQ#wLZUsmxdETHagcfZ9|=woFEJKdSMY*|@qh<<5^J`U}*#4S8!OQ&poLtz8QK zy1Hdco)zYAPERHp79tod`>D$wyi^w9R7zpo7+lJ#;jSc#Nie$&j9tr^zEGkgCTGU$ z(RsHqqtsM;f1sKR9+ka3%(Llu3fG*(3JI5WfS`nO20_#T@zv0LK%2t1;#Rcq4Gg5k z^dfP6P+==OtVw)&-v7MI^ArumH!oFj3QP$3xFV0oN)7>=ncQt`rjCakC)}-=!U~f_ z_-%jxSnPRW!8rKuqhJ9WP$?&Eb!Ug%NN`}CfD*Q^jV*d(IE@&k+4>4Ho ze*DE^Yil_!b^U#AIdg93sAf!uAMRZ)zh6Kibep+*qWY2dPE}q&J@PDgMeIgXA^JN#-3tds{C%>{+(>{0?4c5 ztqZ;t?40@UacKqSy~htN5#7fTTOWVjEUkK(YdnIrrP&caf{l(Y|UDyS)8I=Zz@ z@IUXFrga3&q5rxpf-nxAYa!JEzLwSRp`APUAYh&&210`#g;#}rqL!P4kDhSfeqWm^ zmd^M_@;rez`LY;$8GFi4`qYO^{(6?k`VRBUEc7|tnE>GeFoRcH#X0IB4k_) ziqzV;Zcu*5BWw{ND-R5D+#q$Wd!qBQ14_3&;r?0tjCpUFbCG=~s+SFZE=BH3M)`<-kI8hfW8)*Ky8|gsYS#^s-9X`b?8(0evt$(^ZAQ-* zDxt+~)Ab_ZqJhDE{VLx)Km{wyi!JLHy3TBuL#n`m#mcq#7}rk-N)I8t!R3hbw=ymo zg1<0hBug*NPMVgpzUMU+%eX&93%uh?;?=VxcPjAS>TlWZGomGbvTf~;4}?pOud)3E2xN4bLL)Ufmy z?jQOOpYbpZM`Mw4q&EICn^h2O#JYd!qy?$VK@iAJ@!~8LE@^Qzv6-l4orz_U5n#0W zOU>ajt#5chVZuc(!bfw!MRTx;&koYAM@_hKle?l=O#!LJ4-FVI?r*sG3g+9v^4!RO zBr4n>cVG!vB0fznx9j{ENO5BVjeGjY8HMp2`*pJny{NVxv^B<`Yt;Ol^4d=#HcO0) zNpfq#V>vX-{)5$IsXm=S*C6i|?deuyleRfbb?4?<)-CRkp%Y_xN8cc0#B`Ou8Wnlm za$xJ*;{z1iAv4N|KOlZ(O2dc!P0;cEYPN0PUo+z>e6CcuIA@$>(3gCt^t=^!x1z(= zEMt<8xMT#9UcWoeqvnpNiGGePWQ1AE7qky6xsL4_nZzWyEtjgH=B=h}+bmRHD5I56 zegGFFn~F#Ymn}ju8LxI=x}}sFnYtx`L-_aKehHX%ts83_S(TDGR&T_qTw&y#9T*X4 z^(1+cZX;41a%@F2#Bd#glv*c(b|X-wr}b;yoMt%4WQyD3aGlQ=vvez%q60JZc;;q8 zUzMpZp1%W8$GK4;8c)QHvnGUDRxEE^N7+ne_cxybkv7iYE%-iJV*DPH}<|qok)X%^iq)VyR*(&502BNvM1p+_)|2IdsN5AIcC{ z$fLwkqTL|8TUjkw5=BM1L5E5k8nh8wWeJ=O%*-`kK{{WW)2vk(&5E0aJal^*&rdi4 zm+`8~tZ&vaCCA=L@&+j-oK}rDthPfYY+oV35fCRt$J~%dX7l5K+U6KOO z2#+OX$3tZ&Wn4P`jHG$M1?Ke{vXBlbX?A%}j@=r*LiN%l>?yw@U8T<*{0snLJOO>X z850h)UMWBm8I@H&I3gMK2N`!<0rbXW)_2JJiOvX0pORRUZBh*ZN~x32Bdo7QgOf_B zdWX|a%VN6lbhT@&7%eBzwk41MRAY0Z$qDoBeQ)HZbT|j#o&aJt^i#4witJ_c`1bOz zaVYekc4IVF@|(1OnMXsds!@0vPJx3Gyf)jKjtKE-sHRtHSZUM#Sof<$!&@XaoQtt1 z+g7{&Xk4h(UAj-FnLWerKR2>u;8yz)Zh&3_VN$8DD1P;2T1~$LgC$hqg(SD1UF_0O z_Pq|~&w3Jm=u15a%U`Se^(kK?`1PUY>|I-&?f!QKKt#kdMKJ~#SO6^;@IUFxVEivg zzW&$Mf4ruGGocpN=V)(!be`=&_LAdyCl^`_2c42ndNSucl%7E@_Y#%kkVH0bD8~Sa z{-JB?Paqv(;#%+;HhCvlgP0(I2yIRam#o1A{DW{W_rg@r6*-!!!2fj1|DUVjIycMs z^X*9nOv8r?)aAk)jGmj&D@GC&kggOw1I<0xKu0~!__JgD1S3aE*eBmR1Cw?i;o8Wg zY51f%;({O@JF5I|XPGD+ZPbcGWL<~cRfK&{HBi(s^T)AIGaZ+~W)R5I zH&EnVd7v39ZeFfKi%ZBpc;2o~PtFc-7w(!&N1V%?ES-L#SCeQhE&do=dU+@hRl-DSt&Dqo@Ffy+TtT!4TU*1d*IY z+avuBGM>Rjz)-9ER|ga+U-RLQ!?K!J4m{2N6YrS0jPnX}<}vG_r)8J?j}cz9j2&~I z)#Kp#)2YC7S?=+AS=?z8hFRt}#iW1g@I)mMl54=jqewiKxaf+ie8C&m3{vBUT_=*( z9#h*nX8U2D9zXCe)(%|Qhp2+9d;Hn>*DYKZskuACA%T&$OMo*Ixt?M;GjH020+8WC zJ4=)Byc0*!IsS-jy`5^zOOD>{0U}}kR8%7D+b`xp=!wU~KF}M(GVN-~9p8xAcOwB& z;b4!BjQla1wlKVHNEAX$N7~WVD7=WI80I$e-=y{uf7Puz6aJtTe{YXyZwIM0#2p?f zco)0&Ngm}5W0-iJaqH@LDBsBUVFG>n$MVZ`LE8BG7YBef25xjreR3qOepSmrgiB?! zUvnc2{$`^(^SyBDRe!K}EC_ns$z?ghVXw)OZOsca#&aZ(>b}SZA>3CYZ(K+zAPb(* ze7jJS04kZJ0cl}oQAp4=Rlk`4RfJiN!)-~0+CSTJ8W%y{mBiN+Ogo5d(?BRB4j)Z+ z#XG2H@aS++7%I4X&|}CJAn_UgDAZ6?`4JkO9L+EU?&&EcK$46UbDZW25h6$+FtI|Q zk;3s0p59xH2!9Btad90^U55Ck<$Z#?C5JY z+MxcQFLEcG{H|iN7X3WY_`tsG(g4>g?c6f~mUq9?W3SzTJY>!MTUc+hrmxZ6U6Xd6 z&(p+INU;yF{D&$b?0Me(#VAQX_YZ;tGVdj3k>(nXG%fij`USG{g#!@4Y?6K-ep){)_N_~K7dWFv7Z4^L;Vu+P z>BfllR&FFAy+`^Vd_Eabw!PRtze?agTlD|A(}(T9{Ew2fbnr0!pV`*xO3sU-Xo2KLlq=c?4GP(UCIr0eNyQDh z>t0-DO9=**c+}MNX4bl|v-Q(`{WB@J!+{q}6Kz@1UNUQj)^GYre1IwjzC@usg4X`3 z#+vK^*1T#%)d9W4psV9&a_}Je&lPFpol@h z>ED3?a8yn#SEC{1Eeq8G$(%KuG5yjGy|~r}rE5R=Z0Z6jl~>GasiEi!mJ2g;`>#Y9 zh1P(AE^Y~}g8cD^M6&_TYV4lRRUqSEnQ&p^zgV*4(ZLI(mS$E*mg0!IfG)|3!0N<_ zIs7q`(MfcG`6Jw&K7t%=;*17ErEy`UaguhQsrFxx1{TZcstW;wXc!c7Y$91QT>ZhH zs1uSrs=IH8#7C1fv`2qdX#jGrYJbtWn1{n@;+uFQxh6RpO4*h}CO^Ipe*)Q(0Y=0W zX(}n?Ft$;OLDZv-{RI2ujn33?Ka(SgwCls+gO?yE+39PuV#jK_!cDok%`1SR9rPsBt_w~8_ zmHWQa?aPssIbZ+UyXAcy_?+*4wSL8SIulzU>+zY?09 z2_g|5ojG*+Kp~mGDU8_llwc+~IDt2E*Bvs#C2^G?AvwNf!xcUoJaqDbK<&7p+xg&} zE7&^$@XXn~)Dp(rqV>J!N6dAY*0Q|_^UU36YcK~4Am_b6=D(89b&vOCaDF5aPU787 zeS9<^0tZ=u!1KX^+ZSwHqJ^7Nr_7i>mqV6Y9p(=%R3pzr=Nm5E&qzdI&He>*z!0+g zt%&awu;ZrB_eP-n1^AL#?|QAY^O=sg>owHzg2EE88h(Ad7l<3wKZn}!D#SzDaf3?m z$p%YsqtfwW{ej3sYX71`{p!3GFev$%m!s10YK#l~3@!K?n-Ssqm`0v?=^*4r*n{CB z|2@GG8CDFxj4ZZ4AGV0hBz_niyL;3gwn^pIQG;1OjK(8K7jY6J$fk%nWH@+;^J)f_ zXMpA645-H+sh7c&D^7gI?vQGrT^PpWalkb9UFLP_?)DI5$?TuOcj8~a?%+xCC%sFS z+e!tVL`@XO<+zc&wV$4rhv4eCxl>=FX~lWU|Hz~-KaM#wgW=)$)?LqD{0-@W@{v(p zHiBKhBgFr~428!Xe^M}ly}%!_U1w%ykjT$JoqF~}iwi*hubS3w+l7VXm?ze-7$nJ( zZevzONP;tEK+$i(czS$lQ@n$m5CsFXl*s_pj!FZ_x-vg&yDko=)_TQqy)Y@&E)Vl7 zt45V+y@4yLo z7eK#6Xl;$4bW}2Av*T(2H_deHB+s<5mBGumJbs1aQwTMj*oO}DDhq@b&zF*Rvl<5$ zn+Pt6Rc4G9ZyUPFFs?12pC_6tIY^FktuUi_0z#mQ={)3kz~Nv8rkPOg&lCqexS$AF z91u8H$xTG_g)mg0D5F~jKv#+4Zj_%#wFX*klFSG2M@n3$-^|6jvb9&1VbY=O>g2*z z>uepW_2c)9TFtZyeWec1v;8(YTAhH)=b}vBkE7VQD@(BH+}ulCzu4<~e^|K|y3*Bs z>#3$zW$BvL^V4aIA+LTgQ&Z9)?jh5A9Pw1JTUn~-Mhj8~!bxOJcWTv~h9Z^QiidHzWDb?NL z-8reeJi^dMt%b}3?chxbR!D&HlIFK9`#wGz?UcD|!K_u`Ox6^ad6`=R4MU@tkYI9y zWL=@MwaKH>dv4iYk{Fld2e^;=8xlu}%n)iK36(&93Fun=8fO991B!O zE>Q-mq%mVUmx6ui-v8Uzha+^;@&1SrtElR&R zaj9G$X8T!eWv~TR+F#f@7cU%$_Hl;DB;rfC0RdNRkM{FdD_W_oW$@x|s)VuZMm+m)JyXlMt4Zz4fREz>ElQoyrCp>y8>RQ5gnPt@mLH7C}|pp_6yX zj7YF8+#Q66KGN*-#(Z!;51rwfAE1!VC1>qs)aSaMTzf(HmoPmU$gaFBi#9C_8ZP}7 zlg>)q7w)X9LvQBcj9hVWiEdHCv`q{(f&)R8%eMxc3M)2@mX9ZFOy0Myo5|xHl)l@G z4&NAb_;||r6e~$`qF?iK^%hL>unyzx;y#wA(9WhG!L@Ph{BzNGac3(Kyk8sHAW3kV zJ4z&Ql*J2uP%!9D$ zq~8bF#6JEn_lB4 zQM}NnvXu%Z`zb+5G!>R(>x!c@yeAbB8+CN{tRxjIM}=(ZVtZD8cK*m>4lMP@F6A>| zWj)UGsb6=hDa#9Cnh2)Jht&k8mo}O8lzkc)bXCfk2^cp}cqYhrRq%hn?=0=3-jq`_FO5j~z=n8} zEsNph=>5V=i^YlLCX6*}uu+tu`LQac>hKF)Es?)`1$NwEGlZC{q1DN&nY(bP18*OA z34lG?#=2v!eNrapEtZnOCT_%{*=|_93B}Bi6yPu3l>O@2Z|A{K@)3}T_BHC<#?id@ z>?qVLf2qpOh33VG*OcxQ;P-gR1cBTe^khV|fAeB9L`5x?wJ_p2JHvUM-H>$eo=R!Z z77bnRQxboUtIiHRVr0=}_Kwdp>3ITu2zM54*}DxQz4wX3lGg8y)H5|Lr|V)9*A!QN zKc4eq$Ru@dPpD_<%b=cUcz9;7*D-HMc2N&D8yYAMl-`}Jd*J{!3Tpe^S)@TaDk$XOU2ui2rKWS=mfLrbqc+3QEzv7O z(*&-Cs%lHThOzCM5$)!%LpgJvDAD(Vrd*?$dntZc<7^d1*PkEQAB>76W}sK5T4Xx> z4ApG)jMSm#&VJz!9zpbQO=-_U-!6{T_w~tXH;fb+GWIYCwdZn;WbOq9+bg;67-3u2 zYqo5K)W!;|6Yh*Cq4IQ94KS!JvPHNO_r(Ebx<-UL+cWC!gbn`$XLvSbbI8`1SUQJHjUmQ$j=P)WDi#QAp{~Cev0RLWheg`{;y7vtdhp zr1bhuM*ctzhmi9aUmK>PHl2BQz}2AZ0-Ldh2Oe#j;iHF1VawAgzger9Mq;bTg=Z<)Y3Yvw=`t#1er`Xg8YpSFfHN2 z48@>mg4DALLx|6T*M%e8s<_Hf=8%~M-ICgY6BpYaZrNnzk!QE#^Cw*o!VJG(A$v=V zmYeGkR;^m^-96O6DNU<>hamRoL+*Ihs z^eIn&l#!)0YsBY2Pp0~H3s#|O1|Pa9ojw!0>0ChYncNq7DP5wNw&6i5q7yScB=n;U zO9f_wODr&aQe!vF1E#9>U%ceGP3ly!L^xn&wg3PI#kV3 z!j7f!mzn4XH@;h=a$Ed>)=B74__fy|I9oUM_&H*a^}riX*Q! z8dMvbr9w6HrYfP_JL3K7_I-3xg`7Z)u6U3A0Rp(SF=YO6p3-WpEQd_^?lLwU1Mb6d z@^BLR>5N3w?O|72SW1B6ybo-~GvQoItL3SVG@v68?bJ@Qqb^@pVS<#cpVmBXoLfaQ ze5SZW$t!C_R%Q1aMd+5kxs3pBJ>^}}XY}GhAWBkKl>3g)Ie$X~l?ndPxh}0HspGmh zNnKa$tHYN=&Z@YMO071G^yq#h;be~X1HlS0o5)aEx%$5LFD)v2%*JU|?~RC5LrVr2 z)*>X}t}rM5DpmAd*tctbeux}G2}MKJR*CA5zJF4YsZ#`tAWETaSNDjy#J)TiS+So& zsDse-0s9bmsF8c{qP$2Ws!$>! z8C75ApJ&J)VWT1~@j&TA9f!k$#TVSxTNYd32gBxz7j2kv#U)Fa4#(3MHL@{zcY4F8 z$gdULL1)LqRof3~f=}@mmCctvn~&Yr+w0#27*6ZJseoSO>+#dBlY1c_V_}i+sK@uu zH%S4X0|s9*_pdbfa&)-?L5yR}FAN{?H-UqFjv>%{ClL7YUm4Qg!4ULcag8?9YIyuW zD;^}4Uf2kt$nM8{QyG(&2{xfUdhIhU_&yeTVTAkx3_BG0m#@NBEVs(Pbi7d<60#U2 zQIsP9a2D4<4A%{rtvU+OCu!Xse*0d5M^IwV9Dt_%neP$m+2(~>?f3*CN6wNV{?+i? zf{?1-mPD8;eU=92pQawxQXifp4d(=)oTsoxUa=GH4NFxJqPZ+gO7ykjh%6)yJvFu^ z2Bj}P^LQ4XP7a<7?lv-I>@|#v+N}h21o}E_x12RFcJ}iJ@{r9%ZprZ(S|U69%<#`h zpMje6H;`!X7c}OJEXJV+g7i*<(LG{z%ZzI}fKdIhB)$UKYRH6vBC1M5Owrk`- z4#l_(1dKX#+ETw%%pUn|0tGZJIW#TRf(rTm91TYL{5e*G!a_J-@>-etOr|c+i5>)+ zn^yESJf2oJtn^zHr%++dPwT!|x|0%IJN zx*C27NJ24AOR&5mlG1$%mo8sm>0;o^l-=U6DIOrkCt6s|F{-H3Q` zI=Rz>V%BNlzYvio))rW8O+iSFQ(Nk?a6J}90ffb9&N(EzsAAv$h;~J6I_W?#tT3tV zSmMap!R_=p&OMTc;A;cIR>K_`AeLH_)Kj9}`n}`6LA78O2xIju&lIKD6 zd(=OIh=8dxi%ccFp;j&HnBE23Zp;LF5Yi&YBLZTTO_y#DpSKOz_#L`)D*Rm-C{*Sg zpQy5Br1G|+INAt)cN0L{k7z>g1XwqOvp$si39fH~*(xp&v3Ics8oI$C3TJyTBeFJu zuy6Qh2fl~cVm|Ip`BMy*zGuS-aLh+FVjMJcgSsrOqT-G4u;hLmO%`!0!maL5W^4&E zS1+luwt;ybO{oLIuM310(l+uWJyk1mC>Qg=4t$F(TcX??o=Bh4wd_PfrMsqg!{_gc z(>i-P*?$MCCx=^2E@?-JIDF(beAMMWN#X$rL^al;m}!-Vwo}!F(zZp#W?gOTD0byM zCCZQ;WCsYd4=l@=%$Q~Z-t8@cZrs;iEa-ux=sl5fPAova$oC>5(q{DQrl{v{!|#n4 zyQy*?hu@-~&BHrhDN4lh_2XW0&FiDnVN^Bo2J9Ti?M%ciO_yBY#7 zWJRXV;Sz9w#Ko-@@-qVEg@E{`&7*(y?7K6POTX=3A{Vy;NafFB$X*55fCQ8mVd9%1 z7Qw>3Yg+0_LR*$yiYB?S|JK=A07Thr51$Z_1}SOj?rv#G=@wXE=?+O<=?3XWO6l&F z7Lbq@NdW;7r9%O~XL;{?1uwq${=dv|Kk0=hYtvTVyx__7j!~iE1uD6PT!PH zX%?xQSN`zz^wZbVR~tM=9Kk{<9~A7Er%G_FTptk&auXD@kUGC{A;1$luDXLT{X;(L z^(*+kY;bFNa#Jb83}*n&|@u0IO@&YGH%Y0&9<$gJe#?yDG`i~1;zhiRw#5cs$Y|+x+;ge(#Vd^f8 zT_QY)T3M;w)1$$~Pe}m&(x!N_SLqVFHIei89xPp$*K-t?FX~sQ`s;zL`%Kq#4`fR6Jwg+|8$uO|Kw~{Ls0Q=*dMq zL}ZY*mZNNzdQiwrP`gB)o1CUy@gd)W%=6@{7pKrRy>02S#T>;)>736rIiF?OrOsw# zbTg61K&rGS$9EI`x#&&hibgu?$nN&GS{UoI*)GZ|W{Id5Q-K>7Fhzw3nCoGnoycUil&TjDH*W;Mu)`*DX0YvMvA`iGS`O`DkI-X!W{=3tk;taCwMsIDv+1gd^_k} zp~B`w+~x#Wr669i@uNRu4`z4*7w9D?0;`Jo{WMM-lL6ZX`4o5~^-rCT283sF-v-Mj zSoat1ha$PF(!RYjZH(Ciq4Pm)NM^%7K1!Q&>4Kl}Gnk}!#85<&8FN$FW8#pG8C1f{hfX|(TP--(e%1ULK1i^&azEey#C2ceF zE$M+}UTJ-)!%5}=9Nx$_ytZkNO9CC{7*U4vr!^sm}1A7G&2o^Sfnpa6JR1 z=hU!>k2}QFIkwk9cgPpNk<(9h@9s8((7m&F)lf1&h}6?*icZ#V`k1~f++C1YSe}%K zT_6>Sm(+0iMjU?(c?Ws)Wfome4wLy_aZB9dap$A6L~^rik>`WTMHb`{W;kGl1OfkW z5qV6me$6j)@ak2%E|tFJI;zYzyx$pyB2`Y{2T1S53sJ~6q6RUFsN{VKQd_f6E}Vl$ zP4K43nnPM=^v;rNBrbXsY9N!07#$OXMOGGj*cg7;q z#^|7+{93Sw+me(1j4wWJr){qU@9@?}n8NeIBKA1e40}$_x>QVN@h8vpBPWm-y6ial z@z1Cz)Io-MPh1&ZJC7yIo07!{nfvbc!R2#xP=7DqQ_p+c!`vr&x1)8iasAT*OEt+w zEL_6;J9ObTq1>P%i10(z9flo7v1k1Qm>u~ox6~8JJJ8np*o{sJ1zu@~Fo`AQ>sqRq zsJ6|$k9S5z`=QZ8Q@bg4@`nydMKW7uR6pOIgT&&CJb&`ezfc;8c-Y;(BSXG$CK!ol?%CWeZ9&0_ zUwkg~6g`o#TrzhLQ7U0k*U%m=qoct%)MWq66RTT6F4fi~X?bm`5x4)Pj2O*?EoZt} zTF1WM0344lW7;~s>zgW5!|WBpWO+YNOLE*D14&G@-CZ+y8l9J%y-!6~Bm?&F8=uvK z0`@Q>v=?ZK7O5cUPsxiCFhjoAXN#Y{iJkTs6JT`^2w4c!I+(ZYuXq;=%4Luo)6r$k z&5MA{nNP-&I9n8ATR(d5K|*F|WFW`)O?u)>Q$fJ2O{4d`wCqwE1D!p8znHJWX*J82 zT7pDL^Ily>HX3m?LZ))&UdYQee(hvAleWc>$;kUpjS|ZtxC3+nU%oA=ehK{Pg9>U} zBPj1IR$8i08)z6sn`{FIS+m_=bJ{Q%Y5V>GeeY3V493a03!>OMS_%Sc!beWcXR?}E zQkvO{Zm(S@kx?f|KCCs4=GbK84JvVHD($eHm%M#TGxCmle$L6mOvH0Q_J=qAv06yC zs3SWn*G&E=Nl2p}O!0&&?-7r#8SgR=X9B@lm+QWs=k0(qqH3e3Udj328Bdn)N)jH2 zNFl7PB1KcMeg5+)o}0pq$RyGU7fvXR5RHHt&Pg~5hyBs z{`m9<$)l8S>%`wMZ#(0~#eP_8OSi}lWXn4*d?H^288Cnp=MBW9ZH6JZkysWb-Fl3; zT8xwZAmbL!WdD-(pmFMFe}N+MVKpY>P(9@J0*g+fS`=1|{7!Q>B3sq`E?zf8gR{a_hEtBjeMN*e z%9B<-eXIh*2ewB!+=Q;uBsub<_pT^Ts>q;rHN1lPDPje6h)6>{W(ZYQI!4HkU0>#V zQjaOjkai(i2V7Pq$EQs6-d$f*n5XoYPwZYj!roG9HkoR-tu$15_I8_Zxu9lJcq34< z1x0Yv6HR!BS|mCSfp2`D!Ec9K=M4Q~3v>Dd0K_u_uF*_S+{_L0RW?&;nmkPGjx z0 z96O}THoWX#bzBj(Z^-;Q4~cwiH-rEcd<^LlWc5&`XeMwo*vrv-ES9s9Yd9f~9+*6_ z%YiBSRhpF5d#51%djQglgC%uC;h=}!JA`ba;UoR0BZHq%4SleUVj0^@R+tQH229Di zv_(!*k&Ke&9X3v0#h)dT_%y>TcDRH0Mc(@u@rv!_po$%Qls&2ZaxTRyHo41%`LqnO zLO^z=)>rO&rkA-(+<2t_-n#`W<0RvY2t~rr1%I(O9pp3+$llV3;02}1)Z&LH6)xHj zk2_TQ+8&)hLGu1_6xf8&{S>w}Uufdp^n8!1N>%|^$^(nHQs&Ww(pZ zC2lwPFPD9Fd_mH93uWcg?yAl!J{Ms!Jc!O6`By=+7_vE=R4J>LX|+@Mso3wSm%`Hg z;WV?mKG}V$tUGw8V^Y8puSmA}K&nnU*GWEpDs9u1J0TQXS)198EKHW_)|j_&3}KYH z2|U~&(ns9F{HpI(;KRhK?<%~R2=b^-Dzf==o#XRqrlC6KsJ`65o`|D@aoF;S0Va@8 zOAp&s74AtoJd_j3eps%yKEsji&-!g{3a^)PFSUQ6Qlu;O^mE~NLhLL} z@>$Mp>Q!r63VzYivDhP)oTPCWuYVBn(AfG0x)fF`I`t03A9*UJ5IFhz`!<;#2y$hT z+-b00h$A}nstFK~DCxQLdMdNDdFVla8l24qCL_&lcR_)~*o&p%WCpSUWoJir2#Zkd zep+4~K6tdb9gR-2T3k9PJ?ccCA(sN5Qfiu_$SIEd1APAtmY=uIc1+d; zQHR)jc+YHh$&6p4% z3E#()jh}8PecnAY;kfq0Hk}G%jdZ12N6?!h{jIG+6b}+4d8B)7jy^sw;?-k7418~vrEL3& z&?fE(VH1&mPJPO*PM*D> z%ATMUtWni|_qZFC>89d*w&f$r6ic~?o)yHeJ>duuo26O>rH>yQREiTAO5&nm9@p$4 zo6%Q)P?T~5-OYJ`OWXj@#_Pyum=}IW@}wIMo^Md0D7`YvR4`6ol0@W2+~Iw)(1lEeYbK40vM55F_HtXA#B9GAqfY^RYjzS%rm z4p!Nbk(^LaDen{s(qZ*3hge|NzplxY-KvSM(Gwj@Jr{N)r$wujm_XK`=P8v}vWdbx zH79_18&_>8-1?L~1*I5Q>mHRte*ZJd(R9-G??LMQxm5@K$RMujYW{7^uiQAFo+~n} zp~dNfNhN~?@RM|Nn<)5Tj*;@GJ@iiJn0)MWO>00;x)KtG61XCPtue(|6I8U{I=xQ+ z*weTJW_XS&RBu+AY!Mpsz???Q4waaw{4HvpLz!)*1wJ;H=Z693sh6kb4rZ|-w3M5z zm2Y>1k+?qKkG%cL{W8m@dll!6Lj?-5f8Q}ug8zdF1kU&Gr6snR5zUj35yolY%8OlR zXVX7snN8s)jQ4AjcIItEAb7T9?D&=>{5+ahXb4>jO)KEq8hJF*5Q*r{7khB-g)j7DJjINje} zc8OCSE=h$SJp6QkJk(K_H2ab5c$I20VKAuYTYEwBSVPk^Y(TP^Gw>}SWkK8I6 z@{D%H042B?&C zC`UD3DP=z`ZGI~P!QhP(J#|BS$?sIKb;;=_dkf@KA&Ylubx*r;=HTg=7L*anUwD( z%doE2YWl^h$em;)FAYT)b)=5;Ksr9gW}C;Xur7#NbLv6V8HA^rKJ}GFAW6)fzBcE~ z+h-);6CV7P`kGy*nkD2w0ppDAdv<*;wt3qqnwg*FH12G=I5kIFw{L$-P*T@vtUl%R z8M+8!;Es}&~0k(I1iB`U^ zW~*;YO<99ypX@+f=12-MB*qWs(qg`)GLM_%Y7Z)41=8ap`sCaWmqz{^h{+US1l!mv zI0HKtLNN1+Z>+jh!CHg5LF1e9kJzuTAMrL23nX&U)cU?63N=+I-6Bb~c+Z-cb)R|2 zq`6yF_hSLG(+sO>Sf2b;Ze5Od1Lbs6xmVJxd*t_M{E2-lNL8QRQGL%v*^#1koamD= z5lUMr0;P zBQ0Z8iAY*{83u_=zz9h2NEw=yPpcKymHS{k>_pvhpn5p#7)fcXfNuor?Gt%!SKUsm zw-D_XXFD}$?r+OG{BT~)oH}IdIh)`EeL9A%UYSbL>9BiE-53WUDpQfi0y95IzC7VQ z^7%BRJv#E}OLbITDSx)svqK)v`E`GW^(Ry0TLug@puyb1tCl9yZLOk!Ah<2n(yss?Yq-^RO+v2nKO|0Hn zNM7U&w6mG_#cylgUeVEc`7XbBPb_2$!Jffok+V?C?`R-)%I)8->Fx z5c1e*hd%0!^E}~@3mur85&hEyjqwkUdMkllLAL)nOVifZCI)6{GDHw7Y7X8i69G!Z z#n*_`tWh6EZy6ByN0v$%o4$@(G30#UPmM+7#?9F%{n>NuQNvx1zU*)R5cLjfzu0nzz&PU8!$0VlV9%u> zeMU@JX$Bucxgtwv-ov>Lkz{@SWFfc(QQ-kDw~q)6u{63ejCj0HLlH>4D<{Z?sEq>G zNBxa3!RvjGj$i_w7Tni{J_=p+@Rl8eqAire<*2J};;oE{-%fT?F&7V)z5RYR8MkIH zE1^3uj8^ry$c?{YQpr>u&3H@LWAdTIX;R0QiPda>vrb|-*(!~X6hbx4%QzJP9?E!| zFQdqnZ>%kG-`hn-bY6&A3JLdwu52wMV$&=RrKPX>w8TZiw>ft|2hMFqJ_Usc=Y5NS zR_Y7hZ8=jxS!H?;s zGVpIm~TGk`WXN2s@ZZ1Hj#n8Ta)PNt&cw6z!T(nsa0{Y@&o`^(bP`z7= ze>o%n&b?BUqsaw5WI^z-#(iLCZ^7WrT*0iRR3G(YPt7Kgog)LI4CpX{M`!)J9mK9__~(I1xUGAyekRyzePbDi zRR2S*GLpMJn8UnDKh)D*)}oc8$@@tQxP&gN~n{T!zj{3E8{g=A@6IsOHh^};#m`Ccdo z96~FWm?12=QrQH$!aL-sjQTYDDA>Q6M^!55wNaBKqEh-<6|oR6t< zI09FPIf=ee>hzYWSQ4f-!D+rJyO*rvJ1j>2bE3PvU_N@BKRkFf^R<2B3t647aWj%z zFLKXCzbtt@JMkB`l19SV7nbRN+}%j`hH&j^=DSE2$P2Rw^@y+g@q!)6f+qqecWZa3 zeAC&MoYZpjGVhBOI;p|)D_e(65HMtiB=6FoIcsns@v6- zq}QUre@CnJ#XT%7|JgfaQN5kkgfXHHGv4q9TK?aQen^!>yn5=8q*I%imTa{bM5fz2 zu9P~{YYK6%tdIEg6r!DQoBQ-}q>>BIgkg0^<)(zhfOpP+v9CIXZVL zs+abYVsQs@n_PrLQKM3e`I<%uA?)mGor3VZc;5H!jareN@A)Ja- zorg{viXT{C*^C=Zw6aGoHTo@I#zyUVo(TkKMx z%}Lx*V6XH;dm5yBhE8)vidtn>UNN_=c)-r%!QhhGPQ~mKb~OAPWr_D^ApfBH3woJa z6~D0YBFe)22aVJT_l8*tRn>~}dN(42pFSN(B+QQ#KTFSylFVh3+)5S5V+xc_v1B{G zkYApLI95DFFRmXYimWYJR(V19r7^VEQagUqvXp(If{x}sdB=(&dNHxCaOZ<(>vtFT z&+0!Rd^(V>TUW51Px3r0t5!7vhqu)&v|wK-zoUw-XeYDz=~Z&RRe3acdp=f>$ zU6Ci~gJb^&k~CG6Tk!1H*NZG(4$&LwX&biYxsa38Ckiv=WnnC1q=G(39RpU9?i+77 zg+CX0Q^iVhDmaW*^S#G(*gYk!*&WZ0(-e(5-aJR*472R{+VstTs}1v`)%VSuAXo$Q zi}}?(Qtdoj6aLNPT)k z!|)D*U_Y?a6+!}XQpAwChkK4Tz=qQv{9}(ugZAydEJNv-y7uHNZD+lgA{+%REd)lU z?x^-5q^!O2-~z@LfzI*O_RFoDO%`qkwgP8p;9~wCg9He4A9Xf$cPo2~|A-P2w5{~j zHwoK}s?sI-LvpgjozRKkXg^P|EYZWO=3)`vsePyA^#B7a5;-oNUim}H*B@=utXz+_ zP4aJ-&Un?1JG7Ra!kI0(O=nCFtD zT$c#?v52FwAqJ+f2lD<9f6(;W4oJX9s!LX6Cq8=dc~=^l4;uOO4l??Sc(fOLJ3Hgf zClM_dB|#%rCoM=BCw?St^j2-u4sFcA3G`w61j)i=dB|E$8u<4=S_mKNcqiclw%%F?yR@2IKZY63Q0cB|a zyX@73;?RB%N&%u2l5lEPLqhBgqE@>FE=gT3J{(4!aa|^Ga4)kr?+Y@lnbrYeQEUP7 zl;n^IMZ>#9<<8SsXhxwlK{=Igq)2@^un9@!pEJdfMBlENwru8fOB;X`fX63wL^Kt+ zdGCbMFg8CbEYW5DPQB7n?jaVJw)==^crjyey(FEb;-$=LMP6R_rxX8l5u5iZ@voya zAHVQiJVIZ0sY~hCMer>ZUC==giW|X`<&<_|w0VipjqZCtg~2F!cV1b)N9gg>;UpgN zRfRe>R+hV(TMg&;Y>*p}AY6?R=T*A#Pf$wTfD+FZLSrtUwolf9w)7Tp)JA}(jJ~A z)sH%5pM6B=nWl#|?DaZDwOa98ijIB2Cpt z(E_%^bCt+$tBo)I;LX{{jb3c~@l=fhoH6pCEvhyUJH841?2bA&WK|m5OuvLj6FX98 z9GoLTVZ_cJfejzM!vvr2ID20QW1U^fvCJ8x^xzfB$TMm$@+g~=THnQ`dbdPwR$1S+ zpSfu0)Q*#{X$*L=y71uX91V>3XCJ>#)X(L!(C13r+o<$iTqcFDXSZ6Sjw1Fzu()N0 zgI>m6XWU5ZXR~7S8qyu_yJ#wI+*}lv<)>P~n&FFX?-QwKjQS}2Q&?S!g6bI#a~0yW z+3@SEnu=;`_FgvWl zC^&q9?kXr5FrWQq{Nm7|f9Oy)(ulFm*hleDak$OgTp`ix(R(eU`rV5GzAXQ}CpsHS0rJh{`HF9yeb@P6zHlaJzT} z(XCtFr$fhg+SNoL8?j2yidl7ESc~eWyjPeYDSHcVJw-D>vBR15*uv(qklA!$qxZ{C z$}7=N!hYP=rWp3CW~x9t#$io$%*@p%weLWPl1YIfz}Ecy{sH6L@w`O$i?ZNR{A?Ci zfyG4BCm`%0%*w{Wb9}wbt~djk!RByw{Gz?)0@(QFRptCdEr|T0M8D{O;pAo?eJ?K0 z4=rhn)WxrR_WP82fgWK>s7d46 z<%lrXofiD_?>vM>hg-;n_@uOS++Qr~8r(5V5_e?H z8QgN!299T6d}-iLT6Q=`BjV05qK~)tVZx{A^QnE{2%6j6C#6JOPpuA{yyRRSgtbHI zF_LnR?T=RPZBkY{il+TfRC>0=*FbT=QzfMF#A;6k3Io64e9JT97>+Fx*+DY_9SD#F zlvaOZF!;tO08zHKEMkf_#*?r&XY5ITGyYiTEoxCMU$vTz63y(;T*w>B#}}k_+s&ET zLX80#(MzBD)xVhI2_T#I-AU~Mb1?QwDF$Rvez9JZOzZr5)apFOC{*73gdElQCzurj z3(}TniY=nH(^0iVM$-_yIkPmkHW@N5O+qO_u$)BQ3WnTir`+Xo`ytC9y7bi7L*CJj z9`v@jmMiL<`^Yh3%NR`h*cnIfJr>c2&abkTasILxWfejd0aI->wp&IL)5|oLhU<4+ z%WaT*acEZyHgFAtjE0*}WsQcB95sfXN))G;@KwkjR>98%lDV#6iBAnyi}EhsJBqou zx9k>D@r?%Z%Hqc6z_F z9R8rB9^`a9P&$sq=`vsE6qER#;40m+7{{Q@mshVKSRXC2RLO21aL>ixo}*Zrk4K)9 zjw-&7uxfu0B2t9)Ofn~}b(5cBQsJw<0Z(>x-4OOD1ml*~rVYxhY>!srpp~CiR>AkO zb0g@w2L{R%iWRV*GB)-bt&Y!l6O^R-)|H#5@^(%f<{N#(?x$2|y z;S{W#PHS!5a4zo`)gudw7sCtdtL5#GbJEu!AHoiS^lA22AYnf*#Sjpu-xG=1;KJKq z`w%!3!$Guu7P|&_33_JtO+E$6U_g=r%x+t0N%H#9(*~Hx7=u_N3~qVONTgtzQotdF zo6v`J;05)t8{)DG!@kPvm{!pm<+q713H94HQpw7*Ij}+yx+7C)=GnH5FE9DHKiQ2r zPK&FCNT1=vbFjV|#j6Tq=uTOZ!rL@0s}A>YaTF%k0>XCCSwDjOs8*L&CxYt_5Ixf@#_R=?hm;9)n!fTu%x;gi#YVG+( z(6FoCr+(eplsXGAys;{oa^07^Z9FOrl&Lo1iQnGq%I`+%bVaz)CKEIwLh$mI?pr81 zML0D+-`bkZGyI%Lu2J!AI1qc9{P7^d{;Km7BZ}16UIl$xb4%>#if+D|TMUOMSyvr> zeujIJV);zja#a)!`)(8@yx4dos6T`$GN`2S^_zWzhq8QLuFR&=eUctJeRwT-x#aMI zhP_NghLgKQhIH;##@>mZ`G-!{Ci?$gv<18r$ulX*tBDu z;|Exv$B*r_K5y%H#eapQ6+aR9+BEE^)W_obHkM}~$|$4QtGqJrSf}(`=mBA_@hWq4 z_jurj3&IbZeo-NzksmqbTStRgY{tc(3{@Np_A%1RN?D&z4Snh%WhP9nQWATZp7x0K z<15p-3pK61{^MXS>=Yj`_6z?fw4YHQug8UfF_R%jpr)VCrc;#%|U;?W?6q=58Z0TG*S1B++XvQpsqKH95L>H4r2X zdW+*?L$n{Jl;5XW(4M$ebg?>O*@P0g_HIrlmH5N0!SD7Q8Pn-$VmWJ!CU&2BScA(! z9~?rI%RznQomo7KB#_6vS=%Nkuc_ryD8b`sKbVg`Qp$OXOKjhU)5<(qTez5T8Ze=B=6Cb&iZW+nmLcDzx`PkFQd;oad-92Ig6l~_ z4AI5&QO)n=AMy$VzF|Gd?B#Oi4MQ8=X{M)&+}M`v|Vh6fB}e_l?>F_8nMb%BGGu+X667c3ku%wOl6eRT7J9s&RZ z?A`*TI5GcDA23-CF z_yO>*B!ajF3u1WSp13m$VmNWwI59-LI95y2%S+0Z#Bh{|z$LmkF-x?|OWBshuq<({ zmUNKc4`2h1yJ2?I=+V409a4$FuXg@UI6uaxVVqib0 zzi>CuIByn?m9Dm(0uI;-&l*tMbzBPfKj64-#x>W$xhy0`JiH|4hA^<+_sb*a9#UFrY%}f3q%6g4dJyGfV;u zvj0TX}Qv5Sm`f(h)9o}UZy_MzypAFnU2fS#n5iFJd z41o5uKez6!_~rF7fQ1Z5#eR+XNcjpA@~?ic;S92OF$X(?Ol-jqO{~GDuGBJMS5wPB z8Bez9$LBG?R%)lfR%-Ou@Kz76;QvVfyN%F)IYFR}pbnBiMFR%L!P(+>2N_3bMJ(q0 zum3Xzxq?g`>`Xx5-*3Bg#D5Ef`}dp6-!C-cU~TZ@Laoq%nUWVzb*{IPIG~-M|Iu#m z{<=|x0yA#b3hg%Z<{U%RXK`Px@Zn6gE+Hh=q?aCD*qRtFNgKFC7)MBr8u!E+?ecO2 zaG6Q(@^UFH4)gCO^M35%3_Vb6E%1V##rG@W7z3Ha??DHI=BUNl44^ZiNd9gW=^)@H z%D4cVJD2`G#fBIzGU)OWp*rTZ!l0bx=c;nJKtWLZr1(`5@Qx$|$V7l(X90M}IA1%Q z%VO_XEMWHm-S|Dwy3pOmekDjK^mgIP+re5^VE4Zp@t2c_mNzM4?5+v)F+ z0EE0ZcO__6k~%jh5kSl);B~zth{Qp&-iBtCaR%A_TUvU}8Zl?!Zeu`VhF_ur?}p={ zIYgm3{+c=7_Myzj~pFs#)B!`d}dhRJ;aW#RpsC1LAeY9j@9 zF?F_bjPtd@yKFq~qZe6BKs_M9Fa|jBE9opBnqBGN+5auaB?szDZWhSpWT_T9&ZYyE zyKWAV#ZaQ)-^811NOk(ZFRVfjOo83bgML&?48zF@aVn zNaFXZ-P|(MYDBs^fGj0I<3dkj|CJzJP>c)|BMTj1K(_zZ(#@!->bswcfT}eEQeE#s zTzycK7!;-8VC#9Q>6;k{Q!MmpfR6G1V?f~?fHLkw8JAY_50HAb3kyp?h%vzRTGq7HDJwn==fZ}+eb-KAaw4bE3=7H*z z0M)tPZTRP)S>w_*u;T=6(Jp%}qOI}{bYIc|psedbw&gPPW}@GE$KL@uU=49{w#0Bp zYnMnLTgpqEQm1k0JkXq&fc;!V@L9Re|vodx0L*=1EaW(*!{Co*sGr)-p zvHMF_uGw$&2|(0HLioE*D7K(C^J=E0U#7@7c}tn1!n{Q^o5yFzfe8Icxa4YLU-rT{Sg>w!xTENmPsHJn-g`jBNC1iYSI+_7-MV#2iDR%Mp@8<*wV(J&9e_#R`;XC(4dJgl zzZ#-LwR?FtkMcP&R5}(wI*MytG1R~AzA!_-oL2qGL*iV^<&F+}8B1M>mptrj|1o9) zo=Lls3T^;E0D>dP*#!vht_C*H+72Vma_0isCxF-WCSJM$^ot|z;_@d4>g0CWq&re@)#h(0S@E3ua|-R12t~I ziUb19Zxlt~k^s1;Bp{gJy{0=H-+#!@CIvQev(Qme1Z)bJgt|Te*_+w^sp-iom9$*} z8N~o)UI|#B-54$Sp9%qDL$I?w5PnGA+!+R5(NLuU&^n+3*Ht*^vnJW zAR!$S1<_q^BFBZ^A?67AnvZ7;uidu>pK5(wlkEM`WaoD0(CR$vxFiVp(=DDz6HqWSNV17$$|F68RLELWWbv=m>ClN@!R z7c&82$@LYj31AGp$waT#xX3{F9nsm?<;qfLUHC1`N#oD@_3dV+JfT z+*}FBFFS&cwje8DN`9s3|Eais7XRvgu)^AH_XPME%HO* zl|?mB89}VSBlEv&RIdF$(4m%mb4y@D9wb7Cg;l2Ii6Te=p(2v&et%(7(<~0rY=;qG1yFKa>F&&Y$e&>PZ*Z2kZ0D z8^{pgY38df@R#bZoW1h9=vVi@xE=&0MBKo?j{i@ixewL&)vs(_XJ(e%%)CB`Tne;>G+^rz>r YR1^?^E(NTX0e`*$Ix2k!cpjMl2hkkyC;$Ke delta 8045 zcmZ9RcQ{;K_xH!>z4zXtw}{S&UNX9f&M0B@ZbTW;duI}a=p-Ual!WNLx9GhKf*=OL zE1u_fzjvN(`Vbxa%DEoliwSUKoDa7RN)dpZO|D55zfS z@?Bg=t}lyedDRxC_7hAj2ygVDFF*tU2m$~Af3m~58v%c^yIcGJ7uwy_#nwyUFGVUF z3df%UYBW)n(C#M!7+C1{6G>br@;{SQGkwPU5w6dDKbGqY+zXcU6H)FL+zhPYJD5nF zHMXzfkzyxHO=5#1hvx*X_z4PLLRf-$f-H*1-yxttlM0ICYvGp+*w@h_hnh6?8A>0d z_Z?M^Tx-XEB#eG-FeQCKn#I*_SrKnMWt;!**=w@$FoC)XU6BcV>h4

g$^qtg<#? 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 "); + return;//System.exit(0); + } + + DmgFileView dfw = new DmgFileView(inFile); + byte[] plistData = dfw.getPlist().getData(); + /*int bytesWritten = */outStream.write(plistData); +// if(bytesWritten != plistData.length) +// System.out.println("ERROR: Could not write all data to output file. " + bytesWritten + " of " + plistData.length + " bytes written."); + + inFile.close(); + outStream.close(); + } +} \ No newline at end of file diff --git a/src/org/catacombae/dmgx/Koly.java b/src/org/catacombae/dmgx/Koly.java new file mode 100644 index 0000000..1d657b8 --- /dev/null +++ b/src/org/catacombae/dmgx/Koly.java @@ -0,0 +1,121 @@ +package org.catacombae.dmgx; + +import java.io.PrintStream; + +/** This class was generated by CStructToJavaClass. */ +public class Koly { + /* + * struct Koly + * size: 512 bytes + * description: + * + * BP Size Type Identifier Description + * -------------------------------------------------------- + * 0 4 UInt32 fourCC + * 4 1*28 byte[28] unknown1 + * 32 8 UInt64 plistBegin1 + * 40 8 UInt64 plistEndSometimes + * 48 8 UInt64 unknown2 + * 56 8 UInt64 unknown3 + * 64 8 UInt64 unknown4 + * 72 8 UInt64 unknown5 + * 80 8 UInt64 possibleChecksumType + * 88 4 UInt32 unknown6 + * 92 4 UInt32 possibleUnitSize + * 96 1*120 byte[120] unknown7 + * 216 8 UInt64 plistBegin2 + * 224 8 UInt64 plistSize + * 232 1*120 byte[120] unknown8 + * 352 4 UInt32 checksumAlgorithm + * 356 4 UInt32 checksumSize + * 360 1*152 byte[152] checksumData + */ + + private final byte[] fourCC = new byte[4]; + private final byte[] unknown1 = new byte[1*28]; + private final byte[] plistBegin1 = new byte[8]; + private final byte[] plistEndSometimes = new byte[8]; + private final byte[] unknown2 = new byte[8]; + private final byte[] unknown3 = new byte[8]; + private final byte[] unknown4 = new byte[8]; + private final byte[] unknown5 = new byte[8]; + private final byte[] possibleChecksumType = new byte[8]; + private final byte[] unknown6 = new byte[4]; + private final byte[] possibleUnitSize = new byte[4]; + private final byte[] unknown7 = new byte[1*120]; + private final byte[] plistBegin2 = new byte[8]; + private final byte[] plistSize = new byte[8]; + private final byte[] unknown8 = new byte[1*120]; + private final byte[] checksumAlgorithm = new byte[4]; + private final byte[] checksumSize = new byte[4]; + private final byte[] checksumData = new byte[1*152]; + + public Koly(byte[] data, int offset) { + System.arraycopy(data, offset+0, fourCC, 0, 4); + System.arraycopy(data, offset+4, unknown1, 0, 1*28); + System.arraycopy(data, offset+32, plistBegin1, 0, 8); + System.arraycopy(data, offset+40, plistEndSometimes, 0, 8); + System.arraycopy(data, offset+48, unknown2, 0, 8); + System.arraycopy(data, offset+56, unknown3, 0, 8); + System.arraycopy(data, offset+64, unknown4, 0, 8); + System.arraycopy(data, offset+72, unknown5, 0, 8); + System.arraycopy(data, offset+80, possibleChecksumType, 0, 8); + System.arraycopy(data, offset+88, unknown6, 0, 4); + System.arraycopy(data, offset+92, possibleUnitSize, 0, 4); + System.arraycopy(data, offset+96, unknown7, 0, 1*120); + System.arraycopy(data, offset+216, plistBegin2, 0, 8); + System.arraycopy(data, offset+224, plistSize, 0, 8); + System.arraycopy(data, offset+232, unknown8, 0, 1*120); + System.arraycopy(data, offset+352, checksumAlgorithm, 0, 4); + System.arraycopy(data, offset+356, checksumSize, 0, 4); + System.arraycopy(data, offset+360, checksumData, 0, 1*152); + } + + public static int length() { return 512; } + + public int getFourCC() { return Util.readIntBE(fourCC); } + public byte[] getUnknown1() { return Util.createCopy(unknown1); } + public long getPlistBegin1() { return Util.readLongBE(plistBegin1); } + public long getPlistEndSometimes() { return Util.readLongBE(plistEndSometimes); } + public long getUnknown2() { return Util.readLongBE(unknown2); } + public long getUnknown3() { return Util.readLongBE(unknown3); } + public long getUnknown4() { return Util.readLongBE(unknown4); } + public long getUnknown5() { return Util.readLongBE(unknown5); } + public long getPossibleChecksumType() { return Util.readLongBE(possibleChecksumType); } + public int getUnknown6() { return Util.readIntBE(unknown6); } + public int getPossibleUnitSize() { return Util.readIntBE(possibleUnitSize); } + public byte[] getUnknown7() { return Util.createCopy(unknown7); } + public long getPlistBegin2() { return Util.readLongBE(plistBegin2); } + public long getPlistSize() { return Util.readLongBE(plistSize); } + public byte[] getUnknown8() { return Util.createCopy(unknown8); } + public int getChecksumAlgorithm() { return Util.readIntBE(checksumAlgorithm); } + public int getChecksumSize() { return Util.readIntBE(checksumSize); } + public byte[] getChecksumData() { return Util.createCopy(checksumData); } + + public void printFields(PrintStream ps, String prefix) { + ps.println(prefix + " fourCC: " + getFourCC()); + ps.println(prefix + " unknown1: " + getUnknown1()); + ps.println(prefix + " plistBegin1: " + getPlistBegin1()); + ps.println(prefix + " plistEndSometimes: " + getPlistEndSometimes()); + ps.println(prefix + " unknown2: " + getUnknown2()); + ps.println(prefix + " unknown3: " + getUnknown3()); + ps.println(prefix + " unknown4: " + getUnknown4()); + ps.println(prefix + " unknown5: " + getUnknown5()); + ps.println(prefix + " possibleChecksumType: " + getPossibleChecksumType()); + ps.println(prefix + " unknown6: " + getUnknown6()); + ps.println(prefix + " possibleUnitSize: " + getPossibleUnitSize()); + ps.println(prefix + " unknown7: " + getUnknown7()); + ps.println(prefix + " plistBegin2: " + getPlistBegin2()); + ps.println(prefix + " plistSize: " + getPlistSize()); + ps.println(prefix + " unknown8: " + getUnknown8()); + ps.println(prefix + " checksumAlgorithm: " + getChecksumAlgorithm()); + ps.println(prefix + " checksumSize: " + getChecksumSize()); + ps.println(prefix + " checksumData: " + getChecksumData()); + } + + public void print(PrintStream ps, String prefix) { + ps.println(prefix + "Koly:"); + printFields(ps, prefix); + } + +} diff --git a/src/org/catacombae/dmgx/Koly.struct b/src/org/catacombae/dmgx/Koly.struct new file mode 100644 index 0000000..0c2c44e --- /dev/null +++ b/src/org/catacombae/dmgx/Koly.struct @@ -0,0 +1,20 @@ +struct Koly { + UInt32 fourCC; + byte unknown1[28]; + UInt64 plistBegin1; + UInt64 plistEndSometimes; + UInt64 unknown2; + UInt64 unknown3; + UInt64 unknown4; + UInt64 unknown5; + UInt64 possibleChecksumType; + UInt32 unknown6; + UInt32 possibleUnitSize; + byte unknown7[120]; + UInt64 plistBegin2; + UInt64 plistSize; + byte unknown8[120]; + UInt32 checksumAlgorithm; + UInt32 checksumSize; + byte checksumData[152]; +}; diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java new file mode 100644 index 0000000..956c973 --- /dev/null +++ b/src/org/catacombae/dmgx/Plist.java @@ -0,0 +1,73 @@ +package org.catacombae.dmgx; + +import java.io.*; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import org.xml.sax.SAXException; +//import org.xml.sax.helpers.DefaultHandler; + +public class Plist { + private final byte[] plistData; + private XMLNode rootNode; + + public Plist(byte[] data) { + this(data, 0, data.length); + } + + public Plist(byte[] data, int offset, int length) { + plistData = new byte[length]; + System.arraycopy(data, offset, plistData, 0, length); + } + + public byte[] getData() { return Util.createCopy(plistData); } + + public XMLNode parseXMLData() { + return parseXMLDataSAX(); + } + + private XMLNode parseXMLDataSAX() { + InputStream is = new ByteArrayInputStream(plistData); + + NodeBuilder handler; + try { + handler = new NodeBuilder(); + SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); +// System.out.println("validation: " + saxParser.getProperty("validation")); +// System.out.println("external-general-entities: " + saxParser.getProperty("external-general-entities")); +// System.out.println("external-parameter-entities: " + saxParser.getProperty("external-parameter-entities")); +// System.out.println("is-standalone: " + saxParser.getProperty("is-standalone")); +// System.out.println("lexical-handler: " + saxParser.getProperty("lexical-handler")); +// System.out.println("parameter-entities: " + saxParser.getProperty("parameter-entities")); +// System.out.println("namespaces: " + saxParser.getProperty("namespaces")); +// System.out.println("namespace-prefixes: " + saxParser.getProperty("namespace-prefixes")); +// System.out.println(": " + saxParser.getProperty("")); +// System.out.println(": " + saxParser.getProperty("")); +// System.out.println(": " + saxParser.getProperty("")); +// System.out.println(": " + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); +// System.out.println("" + saxParser.getProperty("")); + + System.out.println("isValidating: " + saxParser.isValidating()); + saxParser.parse(is, handler); + } catch(SAXException se) { + se.printStackTrace(); + System.err.println("Could not read the partition list... exiting."); + throw new RuntimeException(se); + } catch(Exception e) { + throw new RuntimeException(e); + } + + XMLNode[] rootNodes = handler.getRoots(); + if(rootNodes.length != 1) + throw new RuntimeException("Could not parse DMG-file!"); + else + return rootNodes[0]; + } +} diff --git a/src/org/catacombae/dmgx/Util.java b/src/org/catacombae/dmgx/Util.java new file mode 100644 index 0000000..2c1c1fc --- /dev/null +++ b/src/org/catacombae/dmgx/Util.java @@ -0,0 +1,368 @@ +//package org.catacombae.rarx; +// Ripped from junrarlib +package org.catacombae.dmgx; + +public class Util { + public static int sectorSize = 0x800; + + public static String byteArrayToHexString(byte[] array) { + return byteArrayToHexString(array, 0, array.length); + } + public static String byteArrayToHexString(byte[] array, int offset, int length) { + String result = ""; + for(int i = offset; i < (offset+length); ++i) { + byte b = array[i]; + String currentHexString = Integer.toHexString(b & 0xFF); + if(currentHexString.length() == 1) + currentHexString = "0" + currentHexString; + result += currentHexString; + } + return result; + } + public static String toHexStringBE(int[] array) { + return toHexStringBE(array, 0, array.length); + } + public static String toHexStringBE(int[] array, int offset, int length) { + StringBuilder result = new StringBuilder(); + for(int i : array) + result.append(toHexStringBE(i)); + return result.toString(); + } + + public static String toHexStringLE(byte n) { return byteArrayToHexString(toByteArrayLE(n)); } + public static String toHexStringLE(short n) { return byteArrayToHexString(toByteArrayLE(n)); } + public static String toHexStringLE(int n) { return byteArrayToHexString(toByteArrayLE(n)); } + public static String toHexStringLE(long n) { return byteArrayToHexString(toByteArrayLE(n)); } + public static String toHexStringBE(byte n) { return byteArrayToHexString(toByteArrayBE(n)); } + public static String toHexStringBE(short n) { return byteArrayToHexString(toByteArrayBE(n)); } + public static String toHexStringBE(int n) { return byteArrayToHexString(toByteArrayBE(n)); } + public static String toHexStringBE(long n) { return byteArrayToHexString(toByteArrayBE(n)); } + + public static byte[] invert(byte[] array) { + byte[] newArray = new byte[array.length]; + for(int i = 0; i < array.length; ++i) + newArray[newArray.length-i-1] = array[i]; + return newArray; + } + + public static long readLongLE(byte[] data) { + return readLongLE(data, 0); + } + public static long readLongLE(byte[] data, int offset) { + return (((long)data[offset+7] & 0xFF) << 56 | + ((long)data[offset+6] & 0xFF) << 48 | + ((long)data[offset+5] & 0xFF) << 40 | + ((long)data[offset+4] & 0xFF) << 32 | + ((long)data[offset+3] & 0xFF) << 24 | + ((long)data[offset+2] & 0xFF) << 16 | + ((long)data[offset+1] & 0xFF) << 8 | + ((long)data[offset+0] & 0xFF) << 0); + } + public static int readIntLE(byte[] data) { + return readIntLE(data, 0); + } + public static int readIntLE(byte[] data, int offset) { + return ((data[offset+3] & 0xFF) << 24 | + (data[offset+2] & 0xFF) << 16 | + (data[offset+1] & 0xFF) << 8 | + (data[offset+0] & 0xFF) << 0); + } + public static short readShortLE(byte[] data) { + return readShortLE(data, 0); + } + public static short readShortLE(byte[] data, int offset) { + return (short) ((data[offset+1] & 0xFF) << 8 | + (data[offset+0] & 0xFF) << 0); + } + public static byte readByteLE(byte[] data) { + return readByteLE(data, 0); + } + public static byte readByteLE(byte[] data, int offset) { + return data[offset]; + } + public static long readLongBE(byte[] data) { + return readLongBE(data, 0); + } + +// public static void main(String[] args) { +// byte[] longTest1 = { 0, 0, 0, 0, 0, 0, 0, 13 }; +// byte[] longTest2 = { 0, 31, 0, 0, 0, 0, 0, 0 }; +// byte[] longTest3 = { 127, 0, 0, 0, 0, 0, 0, 0 }; +// byte[] longTest4 = { 0, 0, 0, 1, 1, 1, 1, 1 }; +// System.out.println("longTest1: " + readLongBE(longTest1)); +// System.out.println("longTest2: " + readLongBE(longTest2)); +// System.out.println("longTest3: " + readLongBE(longTest3)); +// System.out.println("longTest4: " + readLongBE(longTest4)); +// } + + public static long readLongBE(byte[] data, int offset) { +// if(false) { +// long d1 = (data[offset+0] & 0xFFL) << 56; +// long d2 = (data[offset+1] & 0xFFL) << 48; +// long d3 = (data[offset+2] & 0xFFL) << 40; +// long d4 = (data[offset+3] & 0xFFL) << 32; +// long d5 = (data[offset+4] & 0xFFL) << 24; +// long d6 = (data[offset+5] & 0xFFL) << 16; +// long d7 = (data[offset+6] & 0xFFL) << 8; +// long d8 = (data[offset+7] & 0xFFL) << 0; +// System.out.println("1. 0x" + toHexStringBE(d1)); +// System.out.println("2. 0x" + toHexStringBE(d2)); +// System.out.println("3. 0x" + toHexStringBE(d3)); +// System.out.println("4. 0x" + toHexStringBE(d4)); +// System.out.println("5. 0x" + toHexStringBE(d5)); +// System.out.println("6. 0x" + toHexStringBE(d6)); +// System.out.println("7. 0x" + toHexStringBE(d7)); +// System.out.println("8. 0x" + toHexStringBE(d8)); +// return d1 | d2 | d3 | d4 | d5 | d6 | d7 | d8; +// } +// else { + return (((long)data[offset+0] & 0xFF) << 56 | + ((long)data[offset+1] & 0xFF) << 48 | + ((long)data[offset+2] & 0xFF) << 40 | + ((long)data[offset+3] & 0xFF) << 32 | + ((long)data[offset+4] & 0xFF) << 24 | + ((long)data[offset+5] & 0xFF) << 16 | + ((long)data[offset+6] & 0xFF) << 8 | + ((long)data[offset+7] & 0xFF) << 0); +// } + } + public static int readIntBE(byte[] data) { + return readIntBE(data, 0); + } + public static int readIntBE(byte[] data, int offset) { + return ((data[offset+0] & 0xFF) << 24 | + (data[offset+1] & 0xFF) << 16 | + (data[offset+2] & 0xFF) << 8 | + (data[offset+3] & 0xFF) << 0); + } + public static short readShortBE(byte[] data) { + return readShortBE(data, 0); + } + public static short readShortBE(byte[] data, int offset) { + return (short) ((data[offset+0] & 0xFF) << 8 | + (data[offset+1] & 0xFF) << 0); + } + public static byte readByteBE(byte[] data) { + return readByteBE(data, 0); + } + public static byte readByteBE(byte[] data, int offset) { + return data[offset]; + } + + public static byte[] toByteArrayLE(byte b) { + byte[] result = new byte[1]; + result[0] = b; + return result; + } + public static byte[] toByteArrayLE(short s) { + byte[] result = new byte[2]; + result[0] = (byte) ((s >> 0) & 0xFF); + result[1] = (byte) ((s >> 8) & 0xFF); + return result; + } + public static byte[] toByteArrayLE(int i) { + byte[] result = new byte[4]; + result[0] = (byte) ((i >> 0) & 0xFF); + result[1] = (byte) ((i >> 8) & 0xFF); + result[2] = (byte) ((i >> 16) & 0xFF); + result[3] = (byte) ((i >> 24) & 0xFF); + return result; + } + public static byte[] toByteArrayLE(long l) { + byte[] result = new byte[8]; + result[0] = (byte) ((l >> 0) & 0xFF); + result[1] = (byte) ((l >> 8) & 0xFF); + result[2] = (byte) ((l >> 16) & 0xFF); + result[3] = (byte) ((l >> 24) & 0xFF); + result[4] = (byte) ((l >> 32) & 0xFF); + result[5] = (byte) ((l >> 40) & 0xFF); + result[6] = (byte) ((l >> 48) & 0xFF); + result[7] = (byte) ((l >> 56) & 0xFF); + return result; + } + public static byte[] toByteArrayBE(byte b) { + byte[] result = new byte[1]; + result[0] = b; + return result; + } + public static byte[] toByteArrayBE(short s) { + byte[] result = new byte[2]; + result[0] = (byte) ((s >> 8) & 0xFF); + result[1] = (byte) ((s >> 0) & 0xFF); + return result; + } + public static byte[] toByteArrayBE(int i) { + byte[] result = new byte[4]; + result[0] = (byte) ((i >> 24) & 0xFF); + result[1] = (byte) ((i >> 16) & 0xFF); + result[2] = (byte) ((i >> 8) & 0xFF); + result[3] = (byte) ((i >> 0) & 0xFF); + return result; + } + public static byte[] toByteArrayBE(long l) { + byte[] result = new byte[8]; + result[0] = (byte) ((l >> 56) & 0xFF); + result[1] = (byte) ((l >> 48) & 0xFF); + result[2] = (byte) ((l >> 40) & 0xFF); + result[3] = (byte) ((l >> 32) & 0xFF); + result[4] = (byte) ((l >> 24) & 0xFF); + result[5] = (byte) ((l >> 16) & 0xFF); + result[6] = (byte) ((l >> 8) & 0xFF); + result[7] = (byte) ((l >> 0) & 0xFF); + return result; + } + + public static boolean zeroed(byte[] ba) { + for(byte b : ba) + if(b != 0) + return false; + return true; + } + + public static void zero(byte[] ba) { + set(ba, 0, ba.length, (byte)0); + } + public static void zero(byte[] ba, int offset, int length) { + set(ba, offset, length, (byte)0); + } + public static void zero(short[] ba) { + set(ba, 0, ba.length, (short)0); + } + public static void zero(short[] ba, int offset, int length) { + set(ba, offset, length, (short)0); + } + public static void zero(int[] ba) { + set(ba, 0, ba.length, (int)0); + } + public static void zero(int[] ba, int offset, int length) { + set(ba, offset, length, (int)0); + } + public static void zero(long[] ba) { + set(ba, 0, ba.length, (long)0); + } + public static void zero(long[] ba, int offset, int length) { + set(ba, offset, length, (long)0); + } + + public static void set(byte[] ba, int offset, int length, byte value) { + for(int i = offset; i < length; ++i) + ba[i] = value; + } + public static void set(short[] ba, int offset, int length, short value) { + for(int i = offset; i < length; ++i) + ba[i] = value; + } + public static void set(int[] ba, int offset, int length, int value) { + for(int i = offset; i < length; ++i) + ba[i] = value; + } + public static void set(long[] ba, int offset, int length, long value) { + for(int i = offset; i < length; ++i) + ba[i] = value; + } + + public static byte[] createCopy(byte[] data) { + return createCopy(data, 0, data.length); + } + + public static byte[] createCopy(byte[] data, int offset, int length) { + byte[] copy = new byte[length]; + System.arraycopy(data, offset, copy, 0, length); + return copy; + } + + public static boolean arraysEqual(boolean[] a, boolean[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(a[i] != b[i]) + return false; + return true; + } + } + public static boolean arraysEqual(byte[] a, byte[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(a[i] != b[i]) + return false; + return true; + } + } + public static boolean arraysEqual(char[] a, char[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(a[i] != b[i]) + return false; + return true; + } + } + public static boolean arraysEqual(short[] a, short[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(a[i] != b[i]) + return false; + return true; + } + } + public static boolean arraysEqual(int[] a, int[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(a[i] != b[i]) + return false; + return true; + } + } + public static boolean arraysEqual(long[] a, long[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(a[i] != b[i]) + return false; + return true; + } + } + public static boolean arraysEqual(Object[] a, Object[] b) { + if(a.length != b.length) + return false; + else { + for(int i = 0; i < a.length; ++i) + if(!a[i].equals(b[i])) + return false; + return true; + } + } + + public static long pow(long a, long b) { + if(b < 0) throw new IllegalArgumentException("b can not be negative"); + + long result = 1; + for(long i = 0; i < b; ++i) + result *= a; + return result; + } + + public static int strlen(byte[] data) { + int length = 0; + for(byte b : data) { + if(b == 0) + break; + else + ++length; + } + return length; + } + + public static boolean getBit(long data, int bitNumber) { + return ((data >>> bitNumber) & 0x1) == 0x1; + } +} diff --git a/src/org/catacombae/dmgx/ValidateDmg.java b/src/org/catacombae/dmgx/ValidateDmg.java new file mode 100644 index 0000000..a56f2a0 --- /dev/null +++ b/src/org/catacombae/dmgx/ValidateDmg.java @@ -0,0 +1,119 @@ +package org.catacombae.dmgx; + +import java.io.*; + +/** + * This is a console application that validates a set of dmg files + * according to the currently known rules (implemented in Koly.validate). + */ + +public class ValidateDmg { + public static void main(String[] filenames) throws IOException { + if(filenames.length == 0) + System.out.println("No files to validate."); + for(String fn : filenames) { + System.out.println("Processing \"" + fn + "\"..."); + try { + DmgFileView dfw = new DmgFileView(new File(fn)); + Koly koly = dfw.getKoly(); + ValidateResult vr = validateKoly(new RandomAccessFile(fn, "r"), koly); + String[] errors = vr.getErrors(); + String[] warnings = vr.getWarnings(); + for(int i = 0; i < errors.length; ++i) { + if(i == 0) + System.out.println(" " + errors.length + " errors"); + System.out.println(" " + errors[i].toString()); + } + for(int i = 0; i < warnings.length; ++i) { + if(i == 0) + System.out.println(" " + warnings.length + " warnings:"); + System.out.println(" " + warnings[i].toString()); + } + dfw.getPlist().parseXMLData(); + } catch(Exception e) { e.printStackTrace(); } + System.out.println(); + } + } + public static ValidateResult validateKoly(RandomAccessFile sourceFile, Koly koly) throws IOException { + /* Validates the data in the koly block, as much as we can validate it + * given what we know about it.. */ + + ValidateResult vr = new ValidateResult(); + + // Check that the fourcc reads "koly" + try { + String fourCCString = new String(Util.toByteArrayBE(koly.getFourCC()), "US-ASCII"); + if(!fourCCString.equals("koly")) + vr.addError("Invalid fourCC: \"" + fourCCString + "\" (should be \"koly\")"); + } catch(UnsupportedEncodingException uee) { + throw new RuntimeException(uee); // This should never happen + } + + // unknown1 has always been a certain byte-sequence in examples. checkit + // 0000 0004 0000 0200 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 + byte[] previouslySeenString = { 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x20, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0 }; + if(!Util.arraysEqual(previouslySeenString, koly.getUnknown1())) + vr.addWarning("unknown1 deviates from earlier observations: 0x" + Util.byteArrayToHexString(koly.getUnknown1())); + + long plistBegin1 = koly.getPlistBegin1(); + long plistBegin2 = koly.getPlistBegin2(); + long plistSize = koly.getPlistSize(); + + // Plist addresses must be equal + if(plistBegin1 != plistBegin2) + vr.addError("The two plist addresses don't match (" + plistBegin1 + "!=" + plistBegin2 + ")"); + + // Address to start of plist must be within file bounds. + if(plistBegin1 > sourceFile.length()) + vr.addError("plistBegin1 out of bounds (pistBegin1: " + plistBegin1 + " file size: " + sourceFile.length() + ")"); + else { + // There must be a plist at that address + sourceFile.seek(plistBegin1); + byte[] xmlIdentifier = new byte[5]; + sourceFile.read(xmlIdentifier); + try { + String xmlIdentifierString = new String(xmlIdentifier, "US-ASCII"); + if(!xmlIdentifierString.equals(" sourceFile.length()) + vr.addError("plistBegin2 out of bounds (pistBegin1: " + plistBegin2 + " file size: " + sourceFile.length() + ")"); + else { + // There must be a plist at that address + sourceFile.seek(plistBegin2); + byte[] xmlIdentifier = new byte[5]; + sourceFile.read(xmlIdentifier); + try { + String xmlIdentifierString = new String(xmlIdentifier, "US-ASCII"); + if(!xmlIdentifierString.equals(" 0) { + if(plistSize+plistBegin1 > sourceFile.length()-512) + vr.addError("plist dimensions outside file bounds! (plistSize: " + plistSize + " plistBegin1: " + plistBegin1 + " sourceFile.length()-512: " + (sourceFile.length()-512)); + if(plistSize+plistBegin2 > sourceFile.length()-512) + vr.addError("plist dimensions outside file bounds! (plistSize: " + plistSize + " plistBegin2: " + plistBegin2 + " sourceFile.length()-512: " + (sourceFile.length()-512)); + } + else + vr.addError("plist dimensions outside file bounds! (plistSize: " + plistSize + " sourceFile.length-512: " + (sourceFile.length()-512)); + return vr; + } +} \ No newline at end of file diff --git a/src/org/catacombae/dmgx/ValidateDmgs.java b/src/org/catacombae/dmgx/ValidateDmgs.java new file mode 100644 index 0000000..a9903eb --- /dev/null +++ b/src/org/catacombae/dmgx/ValidateDmgs.java @@ -0,0 +1,27 @@ +package org.catacombae.dmgx; + +import java.util.LinkedList; +import java.io.*; + +/** + * Wrapper to allow processing of a list of dmg files. (I was too lazy + * to write a shell script for this..) + */ +public class ValidateDmgs { + public static void main(String[] args) throws IOException { + LinkedList fileList = new LinkedList(); + for(String currentList : args) { + try { + BufferedReader listIn = new BufferedReader(new InputStreamReader(new FileInputStream(new File(currentList)))); + String currentDmg = listIn.readLine(); + while(currentDmg != null) { + fileList.add(currentDmg); + currentDmg = listIn.readLine(); + } + } catch(IOException ioe) { + ioe.printStackTrace(); + } + } + ValidateDmg.main(fileList.toArray(new String[fileList.size()])); + } +} \ No newline at end of file diff --git a/src/org/catacombae/dmgx/ValidateResult.java b/src/org/catacombae/dmgx/ValidateResult.java new file mode 100644 index 0000000..f8907c5 --- /dev/null +++ b/src/org/catacombae/dmgx/ValidateResult.java @@ -0,0 +1,25 @@ +package org.catacombae.dmgx; + +import java.util.LinkedList; + +class ValidateResult { + private final LinkedList errors = new LinkedList(); + private final LinkedList warnings = new LinkedList(); + + public ValidateResult() { + } + + public void addError(String message) { + errors.addLast(message); + } + public void addWarning(String message) { + warnings.addLast(message); + } + + public String[] getErrors() { + return errors.toArray(new String[errors.size()]); + } + public String[] getWarnings() { + return warnings.toArray(new String[warnings.size()]); + } +} \ No newline at end of file diff --git a/src/org/catacombae/dmgx/XMLParse.java b/src/org/catacombae/dmgx/XMLParse.java index d8d2826..f8fc7ed 100644 --- a/src/org/catacombae/dmgx/XMLParse.java +++ b/src/org/catacombae/dmgx/XMLParse.java @@ -6,26 +6,27 @@ public XMLElement parse(InputStream is) throws IOException { readElement(is); } - public void readElement(InputStream is) { - LinkedList buf = new LinkedList(); - int currentByte = is.read(); - if(currentByte != '<') - throw new RuntimeException(); + public void readXML(PushbackInputStream is) { - while(currentByte != '>' && currentByte != -1) { - buf.add(currentByte); - currentByte = is.read(); - } - if(currentByte == -1) - throw new RuntimeException(); - else { - buf.add(currentByte); - byte[] bytes = new byte[buf.size()]; - int i = 0; - for(int cur : buf) - bytes[i++] = cur; - String s = new String(bytes, encoding); - } +// LinkedList buf = new LinkedList(); +// int currentByte = is.read(); +// if(currentByte != '<') +// throw new RuntimeException(); + +// while(currentByte != '>' && currentByte != -1) { +// buf.add(currentByte); +// currentByte = is.read(); +// } +// if(currentByte == -1) +// throw new RuntimeException(); +// else { +// buf.add(currentByte); +// byte[] bytes = new byte[buf.size()]; +// int i = 0; +// for(int cur : buf) +// bytes[i++] = cur; +// String s = new String(bytes, encoding); +// } } } */ From 93fc3e3ce9ff83417ac07e9711d08d9b4cc175fa Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Fri, 1 Dec 2006 08:23:31 +0000 Subject: [PATCH 012/109] Further fixes for my own XML parser + integration into DMGExtractor. --- buildall.sh | 8 +- lib/dmgextractor.jar | Bin 194482 -> 199080 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGExtractor.java | 99 ++++++++++++----- src/org/catacombae/dmgx/NodeBuilder.java | 9 +- .../dmgx/NodeBuilderContentHandler.java | 70 ++++++++++++ src/org/catacombae/xml/parser/Ass.java | 34 +++--- src/org/catacombae/xml/parser/Ass.jj | 22 ++-- .../xml/parser/DebugXMLContentHandler.java | 2 +- .../xml/parser/MutableInputStreamReader.java | 103 ++++++++++++++++-- .../xml/parser/NullXMLContentHandler.java | 16 +++ 11 files changed, 294 insertions(+), 71 deletions(-) create mode 100644 src/org/catacombae/dmgx/NodeBuilderContentHandler.java create mode 100644 src/org/catacombae/xml/parser/NullXMLContentHandler.java diff --git a/buildall.sh b/buildall.sh index 70471a0..0a05333 100644 --- a/buildall.sh +++ b/buildall.sh @@ -40,14 +40,14 @@ cd .. echo "Incrementing build number..." java -cp $BUILDTOOLS_CP BuildEnumerator $SOURCES_DIR/org/catacombae/dmgx/BuildNumber.java 1 -echo "Compiling org.catacombae.dmgx..." -javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation -Xlint:unchecked $SOURCES_DIR/org/catacombae/dmgx/*.java +echo "Compiling org.catacombae.xml.parser..." +javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation $SOURCES_DIR/org/catacombae/xml/parser/*.java JAVAC_EXIT_CODE=$? if [ "$JAVAC_EXIT_CODE" != 0 ]; then error else - echo "Compiling org.catacombae.xml.parser..." - javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation $SOURCES_DIR/org/catacombae/xml/parser/*.java + echo "Compiling org.catacombae.dmgx..." + javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation -Xlint:unchecked $SOURCES_DIR/org/catacombae/dmgx/*.java JAVAC_EXIT_CODE=$? if [ "$JAVAC_EXIT_CODE" == 0 ]; then echo "Building jar-file..." diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 4a235f1521f2179216864cdde1f4ec7d7b14ff8a..b7bbafc7fdc61ea857c5c94f0a6b13a800ca26ba 100644 GIT binary patch delta 30884 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

wML0Cf1)+wrV_|EIP&Zv@P|Yd=bn0%+Y`* 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 delta 26556 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 b54}{;(dcO6K_CRe1NvEqY%1=7DvS6(7iG+| diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index 5451f20..b429792 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 201L; + public static final long BUILD_NUMBER = 223L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } diff --git a/src/org/catacombae/dmgx/DMGExtractor.java b/src/org/catacombae/dmgx/DMGExtractor.java index 15ee930..85a25af 100644 --- a/src/org/catacombae/dmgx/DMGExtractor.java +++ b/src/org/catacombae/dmgx/DMGExtractor.java @@ -23,6 +23,7 @@ package org.catacombae.dmgx; +import org.catacombae.xml.parser.*; import net.iharder.Base64; import java.io.*; import java.util.LinkedList; @@ -35,6 +36,7 @@ import javax.swing.JOptionPane; import javax.swing.JFileChooser; import javax.swing.ProgressMonitor; +import org.xml.sax.XMLReader; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -58,6 +60,7 @@ public class DMGExtractor { public static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); + public static boolean useSaxParser = false; public static boolean verbose = false; public static boolean debug = false; public static boolean graphical = false; @@ -132,40 +135,39 @@ public static void notmain(String[] args) throws Exception { InputStream is = new ByteArrayInputStream(buffer); NodeBuilder handler = new NodeBuilder(); - SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); - try { -// System.out.println("validation: " + saxParser.getProperty("validation")); -// System.out.println("external-general-entities: " + saxParser.getProperty("external-general-entities")); -// System.out.println("external-parameter-entities: " + saxParser.getProperty("external-parameter-entities")); -// System.out.println("is-standalone: " + saxParser.getProperty("is-standalone")); -// System.out.println("lexical-handler: " + saxParser.getProperty("lexical-handler")); -// System.out.println("parameter-entities: " + saxParser.getProperty("parameter-entities")); -// System.out.println("namespaces: " + saxParser.getProperty("namespaces")); -// System.out.println("namespace-prefixes: " + saxParser.getProperty("namespace-prefixes")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println(": " + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); -// System.out.println("" + saxParser.getProperty("")); - - //System.out.println("isValidating: " + saxParser.isValidating()); - saxParser.parse(is, handler); - } catch(SAXException se) { - se.printStackTrace(); - System.err.println("Could not read the partition list... exiting."); - System.exit(1); + if(useSaxParser) { + SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); + try { + if(verbose) + printSAXParserInfo(saxParser.getXMLReader(), System.out, ""); + saxParser.parse(is, handler); + } catch(SAXException se) { + se.printStackTrace(); + System.err.println("Could not read the partition list... exiting."); + System.exit(1); + } + } + else { + try { + Ass encodingParser = Ass.create(new InputStreamReader(is, "US-ASCII"), new NullXMLContentHandler()); + String encoding = encodingParser.xmlDecl(); + if(verbose) System.out.println("XML Encoding: " + encoding); + if(encoding == null) + encoding = "US-ASCII"; + + is = new ByteArrayInputStream(buffer); + Reader usedReader = new BufferedReader(new InputStreamReader(is, encoding)); + Ass assParser = Ass.create(usedReader, new NodeBuilderContentHandler(handler)); + assParser.xmlDocument(); + } catch(ParseException pe) { + println("Could not read the partition list... exiting."); + System.exit(1); + } } XMLNode[] rootNodes = handler.getRoots(); if(rootNodes.length != 1) { - println("Could not parse DMG-file!"); + println("Could not parse UDIF-file!"); System.exit(0); } @@ -540,6 +542,8 @@ else if(cur.equals("-gui")) { try { javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) {} } + else if(cur.equals("-saxparser")) + useSaxParser = true; else if(cur.equals("-v")) verbose = true; else if(cur.equals("-debug")) @@ -589,6 +593,12 @@ else if(i != args.length) println(" if an iso-file is not supplied, the program will simulate an extraction"); println(" (useful for detecting errors in dmg-files)"); println(); + println(" options:"); + println(" -v verbose operation... for finding out what went wrong"); + println(" -saxparser use the standard SAX parser for XML processing instead of"); + println(" the homewritten parser (will connect to Apple's website"); + println(" for validation)"); + println(); System.exit(0); } } @@ -691,6 +701,35 @@ public static void printlnVerbose(String... lines) { public static void newline() { System.out.println(); } + + public static void printSAXParserInfo(XMLReader saxParser, PrintStream ps, String prefix) throws Exception { + ps.println(prefix + "Features:"); + ps.println(prefix + " external-general-entities: " + saxParser.getFeature("http://xml.org/sax/features/external-general-entities")); + ps.println(prefix + " external-parameter-entities: " + saxParser.getFeature("http://xml.org/sax/features/external-parameter-entities")); + ps.println(prefix + " is-standalone: " + saxParser.getFeature("http://xml.org/sax/features/is-standalone")); + ps.println(prefix + " lexical-handler/parameter-entities: " + saxParser.getFeature("http://xml.org/sax/features/lexical-handler/parameter-entities")); + //ps.println(prefix + " parameter-entities: " + saxParser.getFeature("http://xml.org/sax/features/parameter-entities")); + ps.println(prefix + " namespaces: " + saxParser.getFeature("http://xml.org/sax/features/namespaces")); + ps.println(prefix + " namespace-prefixes: " + saxParser.getFeature("http://xml.org/sax/features/namespace-prefixes")); + ps.println(prefix + " resolve-dtd-uris: " + saxParser.getFeature("http://xml.org/sax/features/resolve-dtd-uris")); + ps.println(prefix + " string-interning: " + saxParser.getFeature("http://xml.org/sax/features/string-interning")); + ps.println(prefix + " unicode-normalization-checking: " + saxParser.getFeature("http://xml.org/sax/features/unicode-normalization-checking")); + ps.println(prefix + " use-attributes2: " + saxParser.getFeature("http://xml.org/sax/features/use-attributes2")); + ps.println(prefix + " use-locator2: " + saxParser.getFeature("http://xml.org/sax/features/use-locator2")); + ps.println(prefix + " use-entity-resolver2: " + saxParser.getFeature("http://xml.org/sax/features/use-entity-resolver2")); + ps.println(prefix + " validation: " + saxParser.getFeature("http://xml.org/sax/features/validation")); + ps.println(prefix + " xmlns-uris: " + saxParser.getFeature("http://xml.org/sax/features/xmlns-uris")); + ps.println(prefix + " xml-1.1: " + saxParser.getFeature("http://xml.org/sax/features/xml-1.1")); + + ps.println("Properties: "); + ps.println(prefix + " declaration-handler: " + saxParser.getProperty("http://xml.org/sax/properties/declaration-handler")); + ps.println(prefix + " document-xml-version: " + saxParser.getProperty("http://xml.org/sax/properties/document-xml-version")); + ps.println(prefix + " dom-node: " + saxParser.getProperty("http://xml.org/sax/properties/dom-node")); + ps.println(prefix + " lexical-handler: " + saxParser.getProperty("http://xml.org/sax/properties/lexical-handler")); + ps.println(prefix + " xml-string: " + saxParser.getProperty("http://xml.org/sax/properties/xml-string")); + + //ps.println("isValidating: " + saxParser.isValidating()); + } /** Simply calculates the file pointers position relative to the file size as a percentage, and reports it. */ public static void reportFilePointerProgress(RandomAccessFile raf) throws IOException { diff --git a/src/org/catacombae/dmgx/NodeBuilder.java b/src/org/catacombae/dmgx/NodeBuilder.java index da3c3cc..721da72 100644 --- a/src/org/catacombae/dmgx/NodeBuilder.java +++ b/src/org/catacombae/dmgx/NodeBuilder.java @@ -45,7 +45,11 @@ public void startElement(String namespaceURI, String sName, String qName, attributes[i] = new Attribute(attrs.getLocalName(i), attrs.getQName(i), attrs.getType(i), attrs.getURI(i), attrs.getValue(i)); } - + startElementInternal(namespaceURI, sName, qName, attributes); + } + + void startElementInternal(String namespaceURI, String sName, String qName, + Attribute[] attributes) throws SAXException { XMLNode newNode = new XMLNode(namespaceURI, sName, qName, attributes, currentNode); currentNode.addChild(newNode); @@ -65,8 +69,7 @@ public void characters(char[] buf, int offset, int len) } public void notationDecl(String name, String publicId, String systemId) throws SAXException { - System.out.println("notationDecl(" + name + ", " + - publicId + ", " + systemId + ");"); + //System.out.println("notationDecl(" + name + ", " + publicId + ", " + systemId + ");"); } public XMLNode[] getRoots() throws RuntimeException { if(artificialRoot != currentNode) diff --git a/src/org/catacombae/dmgx/NodeBuilderContentHandler.java b/src/org/catacombae/dmgx/NodeBuilderContentHandler.java new file mode 100644 index 0000000..d4149ab --- /dev/null +++ b/src/org/catacombae/dmgx/NodeBuilderContentHandler.java @@ -0,0 +1,70 @@ +package org.catacombae.dmgx; + +import org.catacombae.xml.parser.*; +import java.util.List; + +public class NodeBuilderContentHandler implements XMLContentHandler { + private NodeBuilder nodeBuilder; + public NodeBuilderContentHandler(NodeBuilder nodeBuilder) { + this.nodeBuilder = nodeBuilder; + } + public void xmlDecl(String version, String encoding, Boolean standalone) {} + public void pi(String id, String content) {} + public void comment(String comment) {} + public void doctype(String name, ExternalID eid) {} // Needs a DTD description also + public void cdata(String cdata) { + try { + nodeBuilder.characters(cdata.toCharArray(), 0, cdata.length()); + } catch(Exception e) { throw new RuntimeException(e); } + } + public void emptyElement(String name, List attributes) { + try { + startElement(name, attributes); + endElement(name); + } catch(Exception e) { throw new RuntimeException(e); } + } + public void startElement(String name, List attributes) { + try { + Attribute[] attrs = new Attribute[attributes.size()]; + //for(int i = 0; i < attributes.length; ++i) { + int i = 0; + for(org.catacombae.xml.parser.Attribute a : attributes) { + attrs[i++] = new Attribute("", a.identifier, + "CDATA", "", a.value.toString()); + } +// org.xml.sax.ext.Attributes2Impl a2i = new org.xml.sax.ext.Attributes2Impl(); +// for(org.catacombae.xml.parser.Attribute a : attributes) { +// System.err.println("id: " + a.identifier + " value: " + a.value.toString()); +// a2i.addAttribute("", a.identifier, a.identifier, "CDATA", a.value.toString()); +// } + nodeBuilder.startElementInternal(null, null, name, attrs); + } catch(Exception e) { throw new RuntimeException(e); } + } + public void endElement(String name) { + try { + nodeBuilder.endElement(null, null, name); + } catch(Exception e) { throw new RuntimeException(e); } + } + public void chardata(String data) { + try { + char[] ca = data.toCharArray(); + nodeBuilder.characters(ca, 0, ca.length); + } catch(Exception e) { throw new RuntimeException(e); } + } + public void reference(String ref) { + try { + if(ref.startsWith("&#")) { + // CharRef + int[] codePoints = new int[1]; + if(ref.startsWith("&#x")) + codePoints[0] = Integer.parseInt(ref.substring(3), 16); + else + codePoints[0] = Integer.parseInt(ref.substring(2), 10); + char[] cp_ca = new String(codePoints, 0, 1).toCharArray(); + nodeBuilder.characters(cp_ca, 0, cp_ca.length); + } + else + System.out.println("WARNING: Encountered external references, which cannot be resolved with this version of the parser."); + } catch(Exception e) { throw new RuntimeException(e); } + } +} \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/Ass.java b/src/org/catacombae/xml/parser/Ass.java index 9c44c60..057d839 100644 --- a/src/org/catacombae/xml/parser/Ass.java +++ b/src/org/catacombae/xml/parser/Ass.java @@ -4,8 +4,8 @@ import java.util.*; import java.io.*; -class Ass implements AssConstants { - private MutableInputStreamReader usedReader; +public class Ass implements AssConstants { + //private Reader usedReader; private XMLContentHandler contentHandler; public static void main(String[] args) throws Exception { @@ -14,12 +14,17 @@ public static void main(String[] args) throws Exception { usedReader = new MutableInputStreamReader(new FileInputStream(args[0]), "US-ASCII"); else usedReader = new MutableInputStreamReader(System.in, "US-ASCII"); - Ass a = new Ass(usedReader); - a.usedReader = usedReader; - a.contentHandler = new DebugXMLContentHandler(); + Ass a = create(usedReader, new DebugXMLContentHandler()); a.xmlDocument(); } + public static Ass create(Reader misr, XMLContentHandler xch) { + Ass a = new Ass(misr); + //a.usedReader = misr; + a.contentHandler = xch; + return a; + } + final public void xmlDocument() throws ParseException { prolog(); element(); @@ -65,7 +70,8 @@ final public void prolog() throws ParseException { } } - final public void xmlDecl() throws ParseException { +/* For convenience, this method returns the encoding. We need to determine that before anything else. */ + final public String xmlDecl() throws ParseException { String version, encoding = null; Boolean standalone = null; jj_consume_token(STARTXMLDECL); @@ -90,7 +96,8 @@ final public void xmlDecl() throws ParseException { ; } jj_consume_token(ENDXMLDECL); - contentHandler.xmlDecl(version, encoding, standalone); + contentHandler.xmlDecl(version, encoding, standalone); {if (true) return encoding;} + throw new Error("Missing return statement in function"); } final public String versionInfo() throws ParseException { @@ -138,7 +145,6 @@ final public String encodingDecl() throws ParseException { jj_consume_token(-1); throw new ParseException(); } - try { usedReader.changeEncoding(encoding.image); } catch(Exception e) { {if (true) throw new RuntimeException(e);} } {if (true) return encoding.image;} throw new Error("Missing return statement in function"); } @@ -649,6 +655,12 @@ final private boolean jj_2_4(int xla) { finally { jj_save(3, xla); } } + final private boolean jj_3R_12() { + if (jj_scan_token(XMLDECL_S)) return true; + if (jj_scan_token(ENCODING)) return true; + return false; + } + final private boolean jj_3R_13() { if (jj_scan_token(XMLDECL_S)) return true; if (jj_scan_token(STANDALONE)) return true; @@ -682,12 +694,6 @@ final private boolean jj_3_1() { return false; } - final private boolean jj_3R_12() { - if (jj_scan_token(XMLDECL_S)) return true; - if (jj_scan_token(ENCODING)) return true; - return false; - } - public AssTokenManager token_source; SimpleCharStream jj_input_stream; public Token token, jj_nt; diff --git a/src/org/catacombae/xml/parser/Ass.jj b/src/org/catacombae/xml/parser/Ass.jj index 39fc89a..06345c4 100644 --- a/src/org/catacombae/xml/parser/Ass.jj +++ b/src/org/catacombae/xml/parser/Ass.jj @@ -9,8 +9,8 @@ package org.catacombae.xml.parser; import java.util.*; import java.io.*; -class Ass { - private MutableInputStreamReader usedReader; +public class Ass { + //private Reader usedReader; private XMLContentHandler contentHandler; public static void main(String[] args) throws Exception { @@ -19,11 +19,16 @@ class Ass { usedReader = new MutableInputStreamReader(new FileInputStream(args[0]), "US-ASCII"); else usedReader = new MutableInputStreamReader(System.in, "US-ASCII"); - Ass a = new Ass(usedReader); - a.usedReader = usedReader; - a.contentHandler = new DebugXMLContentHandler(); + Ass a = create(usedReader, new DebugXMLContentHandler()); a.xmlDocument(); } + + public static Ass create(Reader misr, XMLContentHandler xch) { + Ass a = new Ass(misr); + //a.usedReader = misr; + a.contentHandler = xch; + return a; + } } PARSER_END(Ass) @@ -171,7 +176,8 @@ void prolog() : | < XD_SQUOTE_CLOSE: "'" > : WithinXMLDecl } -void xmlDecl() : +/* For convenience, this method returns the encoding. We need to determine that before anything else. */ +String xmlDecl() : { String version, encoding = null; Boolean standalone = null; @@ -183,7 +189,7 @@ void xmlDecl() : (LOOKAHEAD(2) standalone = sdDecl())? ()? // Back to DEFAULT - { contentHandler.xmlDecl(version, encoding, standalone); } + { contentHandler.xmlDecl(version, encoding, standalone); return encoding; } } TOKEN: { @@ -212,7 +218,7 @@ String encodingDecl() : ( encoding = | encoding = ) - { try { usedReader.changeEncoding(encoding.image); } catch(Exception e) { throw new RuntimeException(e); } } + //{ try { usedReader.changeEncoding(encoding.image); } catch(Exception e) { throw new RuntimeException(e); } } { return encoding.image; } } diff --git a/src/org/catacombae/xml/parser/DebugXMLContentHandler.java b/src/org/catacombae/xml/parser/DebugXMLContentHandler.java index cafdcea..f821c14 100644 --- a/src/org/catacombae/xml/parser/DebugXMLContentHandler.java +++ b/src/org/catacombae/xml/parser/DebugXMLContentHandler.java @@ -7,7 +7,7 @@ public class DebugXMLContentHandler implements XMLContentHandler { public void xmlDecl(String version, String encoding, Boolean standalone) { print("xmlDecl: MutableInputStreamReader: "; + private static final PrintStream os = System.out; private InputStream iStream; private InputStreamReader isReader; @@ -11,18 +14,98 @@ public MutableInputStreamReader(InputStream iStream, String charset) throws Unsu this.iStream = iStream; this.isReader = new InputStreamReader(iStream, charset); } - public void close() throws IOException { isReader.close(); } - public void mark(int readAheadLimit) throws IOException { isReader.mark(readAheadLimit); } - public boolean markSupported() { return isReader.markSupported(); } - public int read() throws IOException { return isReader.read(); } - public int read(char[] cbuf) throws IOException { return isReader.read(cbuf); } - public int read(char[] cbuf, int off, int len) throws IOException { return isReader.read(cbuf, off, len); } - public int read(CharBuffer target) throws IOException { return isReader.read(target); } - public boolean ready() throws IOException { return isReader.ready(); } - public void reset() throws IOException { isReader.reset(); } - public long skip(long n) throws IOException { return isReader.skip(n); } + public void close() throws IOException { + try { + if(DEBUG) os.println(PREFIX + "isReader.close()"); + isReader.close(); + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public void mark(int readAheadLimit) throws IOException { + try { + if(DEBUG) os.println(PREFIX + "isReader.mark(" + readAheadLimit + ")"); + isReader.mark(readAheadLimit); + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public boolean markSupported() { + try { + boolean result = isReader.markSupported(); + if(DEBUG) os.println(PREFIX + "isReader.markSupported() == " + result); + return result; + } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public int read() throws IOException { + try { + int result = isReader.read(); + if(DEBUG) os.println(PREFIX + "isReader.read() == " + result); + return result; + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public int read(char[] cbuf) throws IOException { + try { + int result = isReader.read(cbuf); + if(DEBUG) os.println(PREFIX + "isReader.read(" + cbuf.length + " bytes...) == " + result); + return result; + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public int read(char[] cbuf, int off, int len) throws IOException { + try { + int result = isReader.read(cbuf, off, len); + if(DEBUG) os.println(PREFIX + "isReader.read(" + cbuf.length + " bytes..., " + off + ", " + len + ") == " + result); + return result; + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public int read(CharBuffer target) throws IOException { + try { + int result = isReader.read(target); + if(DEBUG) os.println(PREFIX + "isReader.read(CharBuffer with length " + target.length() + ") == " + result); + return result; + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public boolean ready() throws IOException { + try { + boolean result = isReader.ready(); + if(DEBUG) os.println(PREFIX + "isReader.ready() == " + result); + return result; + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public void reset() throws IOException { + try { + if(DEBUG) os.println(PREFIX + "isReader.reset()"); + isReader.reset(); + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } + public long skip(long n) throws IOException { + try { + long result = isReader.skip(n); + if(DEBUG) os.println(PREFIX + "isReader.skip(" + n + ") == " + result); + return result; + } + catch(IOException ioe) { if(DEBUG) ioe.printStackTrace(); throw ioe; } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } + } public void changeEncoding(String charset) throws UnsupportedEncodingException { + try { + if(DEBUG) os.println(PREFIX + "changeEncoding(\"" + charset + "\")"); isReader = new InputStreamReader(iStream, charset); + } + catch(RuntimeException e) { if(DEBUG) e.printStackTrace(); throw e; } } } \ No newline at end of file diff --git a/src/org/catacombae/xml/parser/NullXMLContentHandler.java b/src/org/catacombae/xml/parser/NullXMLContentHandler.java new file mode 100644 index 0000000..e6c277c --- /dev/null +++ b/src/org/catacombae/xml/parser/NullXMLContentHandler.java @@ -0,0 +1,16 @@ +package org.catacombae.xml.parser; + +import java.util.List; + +public class NullXMLContentHandler implements XMLContentHandler { + public void xmlDecl(String version, String encoding, Boolean standalone) {} + public void pi(String id, String content) {} + public void comment(String comment) {} + public void doctype(String name, ExternalID eid) {} // Needs a DTD description also + public void cdata(String cdata) {} + public void emptyElement(String name, List attributes) {} + public void startElement(String name, List attributes) {} + public void endElement(String name) {} + public void chardata(String data) {} + public void reference(String ref) {} +} \ No newline at end of file From 8b514b1d2a73dc0e67864f9ca79086a3cc4e4843 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sat, 13 Jan 2007 14:30:17 +0000 Subject: [PATCH 013/109] Removed old test utility. --- src/org/catacombae/dmgx/XMLParse.java | 32 --------------------------- 1 file changed, 32 deletions(-) delete mode 100644 src/org/catacombae/dmgx/XMLParse.java diff --git a/src/org/catacombae/dmgx/XMLParse.java b/src/org/catacombae/dmgx/XMLParse.java deleted file mode 100644 index f8fc7ed..0000000 --- a/src/org/catacombae/dmgx/XMLParse.java +++ /dev/null @@ -1,32 +0,0 @@ -/* -public class XMLParse { - public String encoding = "US-ASCII"; - - public XMLElement parse(InputStream is) throws IOException { - readElement(is); - } - - public void readXML(PushbackInputStream is) { - -// LinkedList buf = new LinkedList(); -// int currentByte = is.read(); -// if(currentByte != '<') -// throw new RuntimeException(); - -// while(currentByte != '>' && currentByte != -1) { -// buf.add(currentByte); -// currentByte = is.read(); -// } -// if(currentByte == -1) -// throw new RuntimeException(); -// else { -// buf.add(currentByte); -// byte[] bytes = new byte[buf.size()]; -// int i = 0; -// for(int cur : buf) -// bytes[i++] = cur; -// String s = new String(bytes, encoding); -// } - } -} -*/ From 4fc64793c8b1072719fec414bbec583a2a0e24ad Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sat, 13 Jan 2007 15:04:41 +0000 Subject: [PATCH 014/109] Made Plist.java utilize the new XML-parser. --- lib/dmgextractor.jar | Bin 199080 -> 199316 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/Plist.java | 58 +++++++++++++++++------ 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index b7bbafc7fdc61ea857c5c94f0a6b13a800ca26ba..3eea3687e47bd9ae69a687435d41b2acf5a33ea7 100644 GIT binary patch delta 16692 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 H0pR}uT!Y5@ delta 16490 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 diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index b429792..4835c5a 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 223L; + public static final long BUILD_NUMBER = 225L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java index 956c973..34f96ac 100644 --- a/src/org/catacombae/dmgx/Plist.java +++ b/src/org/catacombae/dmgx/Plist.java @@ -6,10 +6,12 @@ import javax.xml.parsers.SAXParser; import org.xml.sax.SAXException; //import org.xml.sax.helpers.DefaultHandler; +import org.catacombae.xml.parser.*; public class Plist { private final byte[] plistData; private XMLNode rootNode; + private boolean useSaxParser = false; public Plist(byte[] data) { this(data, 0, data.length); @@ -23,15 +25,49 @@ public Plist(byte[] data, int offset, int length) { public byte[] getData() { return Util.createCopy(plistData); } public XMLNode parseXMLData() { - return parseXMLDataSAX(); + //InputStream is = new ByteArrayInputStream(plistData); + NodeBuilder handler = new NodeBuilder(); + + /* First try to parse with the internal homebrew parser, and if it + * doesn't succeed, go for the SAX parser. */ + try { + parseXMLDataAss(plistData, handler); + } catch(Exception e) { + handler = new NodeBuilder(); + parseXMLDataSAX(plistData, handler); + } + + XMLNode[] rootNodes = handler.getRoots(); + if(rootNodes.length != 1) + throw new RuntimeException("Could not parse DMG-file!"); + else + return rootNodes[0]; } - - private XMLNode parseXMLDataSAX() { - InputStream is = new ByteArrayInputStream(plistData); - NodeBuilder handler; + private void parseXMLDataAss(byte[] buffer, NodeBuilder handler) { try { - handler = new NodeBuilder(); + InputStream is = new ByteArrayInputStream(buffer); + Ass encodingParser = Ass.create(new InputStreamReader(is, "US-ASCII"), new NullXMLContentHandler()); + String encoding = encodingParser.xmlDecl(); + //if(verbose) System.out.println("XML Encoding: " + encoding); + if(encoding == null) + encoding = "US-ASCII"; + + is = new ByteArrayInputStream(buffer); + Reader usedReader = new BufferedReader(new InputStreamReader(is, encoding)); + Ass assParser = Ass.create(usedReader, new NodeBuilderContentHandler(handler)); + assParser.xmlDocument(); + } catch(ParseException pe) { + //System.err.println("Could not read the partition list..."); + throw new RuntimeException(pe); + } catch(UnsupportedEncodingException uee) { + throw new RuntimeException(uee); + } + } + + private void parseXMLDataSAX(byte[] buffer, NodeBuilder handler) { + try { + InputStream is = new ByteArrayInputStream(buffer); SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); // System.out.println("validation: " + saxParser.getProperty("validation")); // System.out.println("external-general-entities: " + saxParser.getProperty("external-general-entities")); @@ -54,20 +90,14 @@ private XMLNode parseXMLDataSAX() { // System.out.println("" + saxParser.getProperty("")); // System.out.println("" + saxParser.getProperty("")); - System.out.println("isValidating: " + saxParser.isValidating()); + //System.out.println("isValidating: " + saxParser.isValidating()); saxParser.parse(is, handler); } catch(SAXException se) { se.printStackTrace(); - System.err.println("Could not read the partition list... exiting."); + //System.err.println("Could not read the partition list... exiting."); throw new RuntimeException(se); } catch(Exception e) { throw new RuntimeException(e); } - - XMLNode[] rootNodes = handler.getRoots(); - if(rootNodes.length != 1) - throw new RuntimeException("Could not parse DMG-file!"); - else - return rootNodes[0]; } } From b203e823709f7215f835d14a0282efc1e7306970 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sat, 13 Jan 2007 15:33:08 +0000 Subject: [PATCH 015/109] Added a lot of GPL notices... --- src/org/catacombae/dmgx/DMGBlock.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/DMGBlockHandlers.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/DMGInfo.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/DMGInfoWindow.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/DMGMetadata.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/DmgFile.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/DmgFileView.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/ExtractPlist.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/Koly.java | 20 +++++++++++++++++ .../dmgx/NodeBuilderContentHandler.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/Plist.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/UserInterface.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/Util.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/ValidateDmg.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/ValidateDmgs.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/ValidateResult.java | 22 ++++++++++++++++++- src/org/catacombae/dmgx/gui/DMGInfoPanel.java | 20 +++++++++++++++++ .../catacombae/dmgx/gui/GeneralInfoPanel.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/gui/KolyPanel.java | 20 +++++++++++++++++ src/org/catacombae/dmgx/gui/PlistPanel.java | 20 +++++++++++++++++ .../dmgx/gui/UnknownDataViewPanel.java | 20 +++++++++++++++++ 21 files changed, 430 insertions(+), 10 deletions(-) diff --git a/src/org/catacombae/dmgx/DMGBlock.java b/src/org/catacombae/dmgx/DMGBlock.java index ded001b..2e9759d 100644 --- a/src/org/catacombae/dmgx/DMGBlock.java +++ b/src/org/catacombae/dmgx/DMGBlock.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; public class DMGBlock { diff --git a/src/org/catacombae/dmgx/DMGBlockHandlers.java b/src/org/catacombae/dmgx/DMGBlockHandlers.java index f20d378..b59f472 100644 --- a/src/org/catacombae/dmgx/DMGBlockHandlers.java +++ b/src/org/catacombae/dmgx/DMGBlockHandlers.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; @@ -60,4 +80,4 @@ public static void processZlibBlock(DMGBlock block, RandomAccessFile dmgRaf, Ran if(!inflater.finished()) throw new RuntimeException("Unclosed ZLIB stream!"); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/DMGInfo.java b/src/org/catacombae/dmgx/DMGInfo.java index 479cd50..ea9183c 100644 --- a/src/org/catacombae/dmgx/DMGInfo.java +++ b/src/org/catacombae/dmgx/DMGInfo.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; diff --git a/src/org/catacombae/dmgx/DMGInfoWindow.java b/src/org/catacombae/dmgx/DMGInfoWindow.java index 03230dd..e2133e6 100644 --- a/src/org/catacombae/dmgx/DMGInfoWindow.java +++ b/src/org/catacombae/dmgx/DMGInfoWindow.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import net.iharder.dnd.FileDrop; @@ -27,4 +47,4 @@ public void filesDropped(java.io.File[] files) { public static void main(String[] args) { new DMGInfoWindow().setVisible(true); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/DMGMetadata.java b/src/org/catacombae/dmgx/DMGMetadata.java index 725194c..304f765 100644 --- a/src/org/catacombae/dmgx/DMGMetadata.java +++ b/src/org/catacombae/dmgx/DMGMetadata.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.ByteArrayInputStream; diff --git a/src/org/catacombae/dmgx/DmgFile.java b/src/org/catacombae/dmgx/DmgFile.java index cdf3355..7f92918 100644 --- a/src/org/catacombae/dmgx/DmgFile.java +++ b/src/org/catacombae/dmgx/DmgFile.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; @@ -10,4 +30,4 @@ public DmgFile(File file) { this.file = file; this.dmgView = new DmgFileView(file); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/DmgFileView.java b/src/org/catacombae/dmgx/DmgFileView.java index ea7abc1..63bb2ae 100644 --- a/src/org/catacombae/dmgx/DmgFileView.java +++ b/src/org/catacombae/dmgx/DmgFileView.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; @@ -36,4 +56,4 @@ public Koly getKoly() throws IOException { public void close() throws IOException { dmgRaf.close(); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/ExtractPlist.java b/src/org/catacombae/dmgx/ExtractPlist.java index edfce5a..f63f5e2 100644 --- a/src/org/catacombae/dmgx/ExtractPlist.java +++ b/src/org/catacombae/dmgx/ExtractPlist.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; @@ -23,4 +43,4 @@ public static void main(String[] args) throws IOException { inFile.close(); outStream.close(); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/Koly.java b/src/org/catacombae/dmgx/Koly.java index 1d657b8..87109f2 100644 --- a/src/org/catacombae/dmgx/Koly.java +++ b/src/org/catacombae/dmgx/Koly.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.PrintStream; diff --git a/src/org/catacombae/dmgx/NodeBuilderContentHandler.java b/src/org/catacombae/dmgx/NodeBuilderContentHandler.java index d4149ab..1faf729 100644 --- a/src/org/catacombae/dmgx/NodeBuilderContentHandler.java +++ b/src/org/catacombae/dmgx/NodeBuilderContentHandler.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import org.catacombae.xml.parser.*; @@ -67,4 +87,4 @@ public void reference(String ref) { System.out.println("WARNING: Encountered external references, which cannot be resolved with this version of the parser."); } catch(Exception e) { throw new RuntimeException(e); } } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java index 34f96ac..bccf15a 100644 --- a/src/org/catacombae/dmgx/Plist.java +++ b/src/org/catacombae/dmgx/Plist.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; diff --git a/src/org/catacombae/dmgx/UserInterface.java b/src/org/catacombae/dmgx/UserInterface.java index af45631..1c59d23 100644 --- a/src/org/catacombae/dmgx/UserInterface.java +++ b/src/org/catacombae/dmgx/UserInterface.java @@ -1,5 +1,25 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; interface UserInterface { public void reportProgress(int percentage); -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/Util.java b/src/org/catacombae/dmgx/Util.java index 2c1c1fc..db60cd7 100644 --- a/src/org/catacombae/dmgx/Util.java +++ b/src/org/catacombae/dmgx/Util.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + //package org.catacombae.rarx; // Ripped from junrarlib package org.catacombae.dmgx; diff --git a/src/org/catacombae/dmgx/ValidateDmg.java b/src/org/catacombae/dmgx/ValidateDmg.java index a56f2a0..7ec06ad 100644 --- a/src/org/catacombae/dmgx/ValidateDmg.java +++ b/src/org/catacombae/dmgx/ValidateDmg.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.io.*; @@ -116,4 +136,4 @@ public static ValidateResult validateKoly(RandomAccessFile sourceFile, Koly koly vr.addError("plist dimensions outside file bounds! (plistSize: " + plistSize + " sourceFile.length-512: " + (sourceFile.length()-512)); return vr; } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/ValidateDmgs.java b/src/org/catacombae/dmgx/ValidateDmgs.java index a9903eb..079e5d5 100644 --- a/src/org/catacombae/dmgx/ValidateDmgs.java +++ b/src/org/catacombae/dmgx/ValidateDmgs.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.util.LinkedList; @@ -24,4 +44,4 @@ public static void main(String[] args) throws IOException { } ValidateDmg.main(fileList.toArray(new String[fileList.size()])); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/ValidateResult.java b/src/org/catacombae/dmgx/ValidateResult.java index f8907c5..e5fec4d 100644 --- a/src/org/catacombae/dmgx/ValidateResult.java +++ b/src/org/catacombae/dmgx/ValidateResult.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + package org.catacombae.dmgx; import java.util.LinkedList; @@ -22,4 +42,4 @@ public String[] getErrors() { public String[] getWarnings() { return warnings.toArray(new String[warnings.size()]); } -} \ No newline at end of file +} diff --git a/src/org/catacombae/dmgx/gui/DMGInfoPanel.java b/src/org/catacombae/dmgx/gui/DMGInfoPanel.java index 62ee112..29a0cfa 100644 --- a/src/org/catacombae/dmgx/gui/DMGInfoPanel.java +++ b/src/org/catacombae/dmgx/gui/DMGInfoPanel.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /* * DMGInfoPanel.java * diff --git a/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java b/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java index 436064a..468738d 100644 --- a/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java +++ b/src/org/catacombae/dmgx/gui/GeneralInfoPanel.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /* * GeneralInfoPanel.java * diff --git a/src/org/catacombae/dmgx/gui/KolyPanel.java b/src/org/catacombae/dmgx/gui/KolyPanel.java index ffc7aac..4135dcc 100644 --- a/src/org/catacombae/dmgx/gui/KolyPanel.java +++ b/src/org/catacombae/dmgx/gui/KolyPanel.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /* * KolyPanel.java * diff --git a/src/org/catacombae/dmgx/gui/PlistPanel.java b/src/org/catacombae/dmgx/gui/PlistPanel.java index 1f11dbf..ccd76c5 100644 --- a/src/org/catacombae/dmgx/gui/PlistPanel.java +++ b/src/org/catacombae/dmgx/gui/PlistPanel.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /* * PlistPanel.java * diff --git a/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java b/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java index fac0549..776bd5c 100644 --- a/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java +++ b/src/org/catacombae/dmgx/gui/UnknownDataViewPanel.java @@ -1,3 +1,23 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /* * UnknownDataViewPanel.java * From c75a5505bd132cd09f73969f986007d331cb37bf Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sat, 13 Jan 2007 15:35:32 +0000 Subject: [PATCH 016/109] Version 0.51pre1. --- lib/dmgextractor.jar | Bin 199316 -> 73845 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 3eea3687e47bd9ae69a687435d41b2acf5a33ea7..26744f7c3347a0928478e09356e3171c0ede1377 100644 GIT binary patch delta 15072 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 SpjaQjNRKO_CdQ)y)c*s@SMOi| delta 139875 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%0DNeO%BdZl5|?!jLh{b(FIt^{7-r(#8v{_Q9c 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 Date: Sun, 14 Jan 2007 06:35:43 +0000 Subject: [PATCH 017/109] Added some small sh-script. --- extractplist.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 extractplist.sh diff --git a/extractplist.sh b/extractplist.sh new file mode 100644 index 0000000..8c43487 --- /dev/null +++ b/extractplist.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +java -cp lib/dmgextractor.jar org.catacombae.dmgx.ExtractPlist $1 $2 $3 $4 $5 $6 $7 $8 $9 From 0da1802aa621a717efda8953cf6440608a75b419 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Mon, 29 Jan 2007 08:34:36 +0000 Subject: [PATCH 018/109] Added a few stubs for new classes and implemented some new features. --- src/org/catacombae/dmgx/DMGBlock.java | 19 ++++++++++++- src/org/catacombae/dmgx/DmgFileView.java | 2 +- src/org/catacombae/dmgx/DmgInputStream.java | 25 +++++++++++++++++ .../catacombae/dmgx/DmgPlistPartition.java | 16 +++++++++++ src/org/catacombae/dmgx/Plist.java | 28 +++++++++++++++++++ 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/org/catacombae/dmgx/DmgInputStream.java create mode 100644 src/org/catacombae/dmgx/DmgPlistPartition.java diff --git a/src/org/catacombae/dmgx/DMGBlock.java b/src/org/catacombae/dmgx/DMGBlock.java index 2e9759d..e8fb645 100644 --- a/src/org/catacombae/dmgx/DMGBlock.java +++ b/src/org/catacombae/dmgx/DMGBlock.java @@ -29,7 +29,7 @@ public class DMGBlock { * 8 * 8 * --- - * 40 / 0x28 bytes + * 40 bytes / 0x28 bytes */ public int blockType; public int skipped; @@ -38,6 +38,23 @@ public class DMGBlock { public long inOffset; public long inSize; + public DMGBlock(byte[] data, int offset) { + DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); + int bytesSkipped = 0; + while(bytesSkipped < offset) + bytesSkipped += dis.skipBytes(offset-bytesSkipped); + + this.blockType = util.readIntBE(data, offset+0);//dis.readInt(); + this.skipped = util.readIntBE(data, offset+4);//dis.readInt(); //Skip 4 bytes forward + this.outOffset = util.readLongBE(data, offset+8)*0x200;//(dis.readInt() & 0xffffffffL)*0x200; //unsigned int -> long + //dis.readInt(); //Skip 4 bytes forward + this.outSize = util.readLongBE(data, offset+16)*0x200;//(dis.readInt() & 0xffffffffL)*0x200; //unsigned int -> long + this.inOffset = util.readLongBE(data, offset+24);// & 0xffffffffL; //unsigned int -> long + //dis.readInt(); //Skip 4 bytes forward + this.inSize = util.readLongBE(data, offset+32);//dis.readInt() & 0xffffffffL; //unsigned int -> long + + } + public DMGBlock(int blockType, int skipped, long outOffset, long outSize, long inOffset, long inSize) { this.blockType = blockType; this.skipped = skipped; diff --git a/src/org/catacombae/dmgx/DmgFileView.java b/src/org/catacombae/dmgx/DmgFileView.java index 63bb2ae..a78a933 100644 --- a/src/org/catacombae/dmgx/DmgFileView.java +++ b/src/org/catacombae/dmgx/DmgFileView.java @@ -40,7 +40,7 @@ public DmgFileView(RandomAccessFile dmgRaf) { public Plist getPlist() throws IOException { Koly koly = getKoly(); - byte[] plistData = new byte[(int)koly.getPlistSize()]; // Let's hope the plistsize is within int range... + byte[] plistData = new byte[(int)koly.getPlistSize()]; // Let's hope the plistsize is within int range... (though memory will run out long before that) dmgRaf.seek(koly.getPlistBegin1()); dmgRaf.read(plistData); return new Plist(plistData); diff --git a/src/org/catacombae/dmgx/DmgInputStream.java b/src/org/catacombae/dmgx/DmgInputStream.java new file mode 100644 index 0000000..7f44b69 --- /dev/null +++ b/src/org/catacombae/dmgx/DmgInputStream.java @@ -0,0 +1,25 @@ +package org.catacombae.dmgx; +import java.io.*; + +/** + * An InputStream outputting the contents of a DMG UDIF file. + */ +public class DmgInputStream extends InputStream { + private RandomAccessFile raf; + private DmgFileView dmgView; + + public DmgInputStream(RandomAccessFile raf) { + this.raf = raf; + this.dmgView = new DmgFileView(raf); + } + + public int available() {} + public void close() {} + public void mark(int readlimit) {} + public boolean markSupported() {} + public int read() {} + public int read(byte[] b) {} + public int read(byte[] b, int off, int len) {} + public void reset() {} + public long skip(long n) {} +} diff --git a/src/org/catacombae/dmgx/DmgPlistPartition.java b/src/org/catacombae/dmgx/DmgPlistPartition.java new file mode 100644 index 0000000..0164e5d --- /dev/null +++ b/src/org/catacombae/dmgx/DmgPlistPartition.java @@ -0,0 +1,16 @@ +package org.catacombae.dmgx; + +public class DmgPlistPartition { + private String name; + private String id; + private String attributes; + private DMGBlock[] data; + public DmgPlistPartition(String name, String id, String attributes, byte[] data) { + this.name = name; + this.id = id; + this.attributes = attributes; + this.data = data; + this.partitionSize = DMGExtractor.calculatePartitionSize(data); + } + +} diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java index bccf15a..244daec 100644 --- a/src/org/catacombae/dmgx/Plist.java +++ b/src/org/catacombae/dmgx/Plist.java @@ -21,6 +21,8 @@ package org.catacombae.dmgx; import java.io.*; +import java.util.LinkedList; +import net.iharder.Base64; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -40,10 +42,36 @@ public Plist(byte[] data) { public Plist(byte[] data, int offset, int length) { plistData = new byte[length]; System.arraycopy(data, offset, plistData, 0, length); + rootNode = parseXMLData(); } public byte[] getData() { return Util.createCopy(plistData); } + public DmgPlistPartition[] getPartitions() { + LinkedList partitionList = new LinkedList(); + XMLNode current = rootNode; + current = current.cd("dict"); + current = current.cdkey("resource-fork"); + current = current.cdkey("blkx"); + int numberOfPartitions = current.getChildren().length; + + // Iterate over the partitions and gather data + for(XMLElement xe : current.getChildren()) { + if(xe instanceof XMLNode) { + XMLNode xn = (XMLNode)xe; + + String partitionName = xn.getKeyValue("Name"); + String partitionID = xn.getKeyValue("ID"); + String partitionAttributes = xn.getKeyValue("Attributes"); + byte[] data = Base64.decode(xn.getKeyValue("Data")); + //long partitionSize = DMGExtractor.calculatePartitionSize(data); + partitionList.addLast(new DmgPlistPartition(partitionName, partitionID, partitionAttributes, data)); + } + } + + return partitionList.toArray(new DmgPlistPartition[partitionList.size()]); + } + public XMLNode parseXMLData() { //InputStream is = new ByteArrayInputStream(plistData); NodeBuilder handler = new NodeBuilder(); From e02c7379afe1bbf51144f40e01cacd7b46301a16 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Mon, 29 Jan 2007 08:43:13 +0000 Subject: [PATCH 019/109] Added some stuff that probably isn't finished. --- .../dmgx/DmgRandomAccessStream.java | 29 ++++++++ src/org/catacombae/io/.cvsignore | 5 ++ .../catacombae/io/RandomAccessFileStream.java | 66 +++++++++++++++++++ src/org/catacombae/io/RandomAccessStream.java | 54 +++++++++++++++ 4 files changed, 154 insertions(+) create mode 100644 src/org/catacombae/dmgx/DmgRandomAccessStream.java create mode 100644 src/org/catacombae/io/.cvsignore create mode 100644 src/org/catacombae/io/RandomAccessFileStream.java create mode 100644 src/org/catacombae/io/RandomAccessStream.java diff --git a/src/org/catacombae/dmgx/DmgRandomAccessStream.java b/src/org/catacombae/dmgx/DmgRandomAccessStream.java new file mode 100644 index 0000000..0a98c00 --- /dev/null +++ b/src/org/catacombae/dmgx/DmgRandomAccessStream.java @@ -0,0 +1,29 @@ +import org.catacombae.io.RandomAccessStream; + +public class DmgRandomAccessStream implements RandomAccessStream { + public DmgRandomAccessStream() { + + } + + /** @see java.io.RandomAccessFile */ + public void close() throws IOException {} + + /** @see java.io.RandomAccessFile */ + public long getFilePointer() throws IOException {} + + /** @see java.io.RandomAccessFile */ + public long length() throws IOException {} + + /** @see java.io.RandomAccessFile */ + public int read() throws IOException {} + + /** @see java.io.RandomAccessFile */ + public int read(byte[] b) throws IOException {} + + /** @see java.io.RandomAccessFile */ + public int read(byte[] b, int off, int len) throws IOException {} + + /** @see java.io.RandomAccessFile */ + public void seek(long pos) throws IOException {} + +} \ No newline at end of file diff --git a/src/org/catacombae/io/.cvsignore b/src/org/catacombae/io/.cvsignore new file mode 100644 index 0000000..cd5dc09 --- /dev/null +++ b/src/org/catacombae/io/.cvsignore @@ -0,0 +1,5 @@ +*~ +*# +*.class +.DS_Store +Thumbs.db diff --git a/src/org/catacombae/io/RandomAccessFileStream.java b/src/org/catacombae/io/RandomAccessFileStream.java new file mode 100644 index 0000000..3524104 --- /dev/null +++ b/src/org/catacombae/io/RandomAccessFileStream.java @@ -0,0 +1,66 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +package org.catacombae.io; + +import java.io.*; + +public class RandomAccessFileStream implements RandomAccessStream { + private RandomAccessFile raf; + + public RandomAccessFileStream(RandomAccessFile raf) throws FileNotFoundException { + this.raf = raf; + } + + /** @see java.io.RandomAccessFile */ + public void close() throws IOException { + raf.close(); + } + + /** @see java.io.RandomAccessFile */ + public long getFilePointer() throws IOException { + return raf.getFilePointer(); + } + + /** @see java.io.RandomAccessFile */ + public long length() throws IOException { + return raf.length(); + } + + /** @see java.io.RandomAccessFile */ + public int read() throws IOException { + return raf.read(); + } + + /** @see java.io.RandomAccessFile */ + public int read(byte[] b) throws IOException { + return raf.read(b); + } + + /** @see java.io.RandomAccessFile */ + public int read(byte[] b, int off, int len) throws IOException { + return raf.read(b, off, len); + } + + /** @see java.io.RandomAccessFile */ + public void seek(long pos) throws IOException { + raf.seek(pos); + } +} diff --git a/src/org/catacombae/io/RandomAccessStream.java b/src/org/catacombae/io/RandomAccessStream.java new file mode 100644 index 0000000..ccd019c --- /dev/null +++ b/src/org/catacombae/io/RandomAccessStream.java @@ -0,0 +1,54 @@ +/*- + * Copyright (C) 2006 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +package org.catacombae.io; + +import java.io.*; + +/** + * Designed to mimic RandomAccessFile but removing the limitation that + * all data has to be stored in one physical file on the disk. The + * stream may be composed of multiple files, be read from memory etc. + * It's all implementation dependent. The stream must however be + * seekable, and have a known limited length. + */ +public interface RandomAccessStream { + + /** @see java.io.RandomAccessFile */ + public void close() throws IOException; + + /** @see java.io.RandomAccessFile */ + public long getFilePointer() throws IOException; + + /** @see java.io.RandomAccessFile */ + public long length() throws IOException; + + /** @see java.io.RandomAccessFile */ + public int read() throws IOException; + + /** @see java.io.RandomAccessFile */ + public int read(byte[] b) throws IOException; + + /** @see java.io.RandomAccessFile */ + public int read(byte[] b, int off, int len) throws IOException; + + /** @see java.io.RandomAccessFile */ + public void seek(long pos) throws IOException; +} From b4f77f24cecda28857210ac09ce3914ba027c043 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Tue, 30 Jan 2007 07:52:22 +0000 Subject: [PATCH 020/109] Worked on a DmgInputStream, but it's not finished... --- src/org/catacombae/dmgx/DMGBlock.java | 65 +++++++++++++------ src/org/catacombae/dmgx/Debug.java | 10 +++ src/org/catacombae/dmgx/DmgInputStream.java | 49 +++++++++++--- .../catacombae/dmgx/DmgPlistPartition.java | 41 +++++++++++- src/org/catacombae/dmgx/Plist.java | 2 +- 5 files changed, 137 insertions(+), 30 deletions(-) create mode 100644 src/org/catacombae/dmgx/Debug.java diff --git a/src/org/catacombae/dmgx/DMGBlock.java b/src/org/catacombae/dmgx/DMGBlock.java index e8fb645..0093ece 100644 --- a/src/org/catacombae/dmgx/DMGBlock.java +++ b/src/org/catacombae/dmgx/DMGBlock.java @@ -21,6 +21,33 @@ package org.catacombae.dmgx; public class DMGBlock { + /** This blocktype means the data is compressed using some "ADC" algorithm that I have no idea how to decompress... */ + public static final int BT_ADC = 0x80000004; + + /** This blocktype means the data is compressed with zlib. */ + public static final int BT_ZLIB = 0x80000005; + + /** This blocktype means the data is compressed with the bzip2 compression algorithm. These blocktypes are unsupported, + as I haven't found a GPL-compatible bzip2 decompressor written in Java yet. */ + public static final int BT_BZIP2 = 0x80000006; + + /** This blocktype means the data is uncompressed and can simply be copied. */ + public static final int BT_COPY = 0x00000001; + + /** This blocktype represents a fill of zeroes. */ + public static final int BT_ZERO = 0x00000002; + + /** This blocktype represents a fill of zeroes (the difference between this blocktype and BT_ZERO is not documented, + and parsing of these blocks is experimental). */ + public static final int BT_ZERO2 = 0x00000000; + + /** This blocktype indicates the end of the partition. */ + public static final int BT_END = 0xffffffff; + + /** This blocktype has been observed, but its purpose is currently unknown. In all the observed cases the outSize was + equal to 0, so it's probably some marker, like BT_END. */ + public static final int BT_UNKNOWN = 0x7ffffffe; + /* * 4 * 4 @@ -31,27 +58,20 @@ public class DMGBlock { * --- * 40 bytes / 0x28 bytes */ - public int blockType; - public int skipped; - public long outOffset; - public long outSize; - public long inOffset; - public long inSize; + private int blockType; + private int skipped; + private long outOffset; + private long outSize; + private long inOffset; + private long inSize; public DMGBlock(byte[] data, int offset) { - DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); - int bytesSkipped = 0; - while(bytesSkipped < offset) - bytesSkipped += dis.skipBytes(offset-bytesSkipped); - - this.blockType = util.readIntBE(data, offset+0);//dis.readInt(); - this.skipped = util.readIntBE(data, offset+4);//dis.readInt(); //Skip 4 bytes forward - this.outOffset = util.readLongBE(data, offset+8)*0x200;//(dis.readInt() & 0xffffffffL)*0x200; //unsigned int -> long - //dis.readInt(); //Skip 4 bytes forward - this.outSize = util.readLongBE(data, offset+16)*0x200;//(dis.readInt() & 0xffffffffL)*0x200; //unsigned int -> long - this.inOffset = util.readLongBE(data, offset+24);// & 0xffffffffL; //unsigned int -> long - //dis.readInt(); //Skip 4 bytes forward - this.inSize = util.readLongBE(data, offset+32);//dis.readInt() & 0xffffffffL; //unsigned int -> long + this.blockType = Util.readIntBE(data, offset+0); + this.skipped = Util.readIntBE(data, offset+4); + this.outOffset = Util.readLongBE(data, offset+8)*0x200; + this.outSize = Util.readLongBE(data, offset+16)*0x200; + this.inOffset = Util.readLongBE(data, offset+24); + this.inSize = Util.readLongBE(data, offset+32); } @@ -64,6 +84,13 @@ public DMGBlock(int blockType, int skipped, long outOffset, long outSize, long i this.inSize = inSize; } + public int getBlockType() { return blockType; } + public int getSkipped() { return skipped; } + public long getOutOffset() { return outOffset; } + public long getOutSize() { return outSize; } + public long getInOffset() { return inOffset; } + public long getInSize() { return inSize; } + public String toString() { return "[type: 0x" + Integer.toHexString(blockType) + " skipped: 0x" + Integer.toHexString(skipped) + " outOffset: " + outOffset + " outSize: " + outSize + " inOffset: " + inOffset + " inSize: " + inSize + "]"; } diff --git a/src/org/catacombae/dmgx/Debug.java b/src/org/catacombae/dmgx/Debug.java new file mode 100644 index 0000000..e5cbf2b --- /dev/null +++ b/src/org/catacombae/dmgx/Debug.java @@ -0,0 +1,10 @@ +package org.catacombae.dmgx; + +public class Debug { + public boolean debug = true; + + public static void warning(String message) { + if(debug) + System.out.println(message); + } +} \ No newline at end of file diff --git a/src/org/catacombae/dmgx/DmgInputStream.java b/src/org/catacombae/dmgx/DmgInputStream.java index 7f44b69..edbcf40 100644 --- a/src/org/catacombae/dmgx/DmgInputStream.java +++ b/src/org/catacombae/dmgx/DmgInputStream.java @@ -7,19 +7,52 @@ public class DmgInputStream extends InputStream { private RandomAccessFile raf; private DmgFileView dmgView; + private Plist plist; + private DMGBlock[] allBlocks; + private int currentBlock; + private long totalReadableBytes; + private long bytesRead; - public DmgInputStream(RandomAccessFile raf) { + public DmgInputStream(RandomAccessFile raf) throws IOException { this.raf = raf; this.dmgView = new DmgFileView(raf); + this.plist = dmgView.getPlist(); + + DmgPlistPartition[] parts = plist.getPartitions(); + int totalNumBlocks = 0; + for(DmgPlistPartition dpp : parts) + totalNumBlocks += dpp.getBlockCount(); + + this.allBlocks = new DMGBlock[totalNumBlocks]; + int blockPtr = 0; + for(DmgPlistPartition dpp : parts) { + for(DMGBlock block : dpp.getBlocks()) + allBlocks[blockPtr++] = block; + } + + this.currentBlock = 0; + + this.totalReadableBytes = 0; + for(DMGBlock b : allBlocks) + totalReadableBytes += b.getOutSize(); + + this.bytesRead = 0; } - public int available() {} - public void close() {} + public int available() throws IOException { + long avaliable = totalReadableBytes; + available -= bytesRead; + if(available > Integer.MAX_INT) + return Integer.MAX_INT; + else + return (int)available; + } + public void close() throws IOException {} public void mark(int readlimit) {} public boolean markSupported() {} - public int read() {} - public int read(byte[] b) {} - public int read(byte[] b, int off, int len) {} - public void reset() {} - public long skip(long n) {} + public int read() throws IOException {} + public int read(byte[] b) throws IOException {} + public int read(byte[] b, int off, int len) throws IOException {} + public void reset() throws IOException {} + public long skip(long n) throws IOException {} } diff --git a/src/org/catacombae/dmgx/DmgPlistPartition.java b/src/org/catacombae/dmgx/DmgPlistPartition.java index 0164e5d..74b6819 100644 --- a/src/org/catacombae/dmgx/DmgPlistPartition.java +++ b/src/org/catacombae/dmgx/DmgPlistPartition.java @@ -4,13 +4,50 @@ public class DmgPlistPartition { private String name; private String id; private String attributes; - private DMGBlock[] data; + private DMGBlock[] blockList; public DmgPlistPartition(String name, String id, String attributes, byte[] data) { this.name = name; this.id = id; this.attributes = attributes; - this.data = data; + this.blockList = parseBlocks(data); this.partitionSize = DMGExtractor.calculatePartitionSize(data); } + public String getName() { + return name; + } + + public String getID() { + return id; + } + + public String getAttributes() { + return attributes; + } + + public DMGBlock[] getBlocks() { + DMGBlock[] res = new DMGBlock[blockList.length]; + for(int i = 0; i < res.length; ++i) + res[i] = blockList[i]; + return res; + } + + public int getBlockCount() { + return blockList.length; + } + + private static DMGBlock[] parseBlocks(byte[] data) { + int offset = 0xCC; + + LinkedList blocks = new LinkedList(); + while(offset <= data.length-40) { + blocks.add(new DMGBlock(data, offset)); + offset += 40; + } + + if(offset != data.length) + Debug.warning("Encountered additional data in blkx blob."); + + return blocks.toArray(new DMGBlock[blocks.size()]); + } } diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java index 244daec..146c6f1 100644 --- a/src/org/catacombae/dmgx/Plist.java +++ b/src/org/catacombae/dmgx/Plist.java @@ -64,7 +64,7 @@ public DmgPlistPartition[] getPartitions() { String partitionID = xn.getKeyValue("ID"); String partitionAttributes = xn.getKeyValue("Attributes"); byte[] data = Base64.decode(xn.getKeyValue("Data")); - //long partitionSize = DMGExtractor.calculatePartitionSize(data); + partitionList.addLast(new DmgPlistPartition(partitionName, partitionID, partitionAttributes, data)); } } From 3d364e8a7eec40ff44ecd0c374873ef2a56c253e Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Mon, 2 Apr 2007 07:24:54 +0000 Subject: [PATCH 021/109] Don't know what has been done. Didn't commit this when I worked on it. Hopefully it compiles... --- lib/dmgextractor.jar | Bin 73845 -> 199773 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGBlockHandlers.java | 10 ++--- src/org/catacombae/dmgx/DMGExtractor.java | 36 ++++++++++-------- src/org/catacombae/dmgx/Debug.java | 2 +- src/org/catacombae/dmgx/DmgInputStream.java | 17 +++++---- .../catacombae/dmgx/DmgPlistPartition.java | 5 ++- .../dmgx/DmgRandomAccessStream.java | 12 +++--- src/org/catacombae/dmgx/Plist.java | 2 +- 9 files changed, 48 insertions(+), 38 deletions(-) diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 26744f7c3347a0928478e09356e3171c0ede1377..360541d7c195a520acbe68b6da587b0dafe9f2ec 100644 GIT binary patch delta 140867 zcmbTe1#lfpwk0Zy$zo<^X0(`@nVFfP#AKnxXfasK3>Gspvt=G(0{ zL{(;-sHn)?xpL>)D|eo|9`KDc_|J+mVBlyV(0{(+YR(CtdBFZEq$z<;*j^?ikZt~W zkKt0oIIf6kxdOECiYn(~i_iOUV=#AT0}iizDUbOKec3HT+T!(4<;f<(d0t$=hZD$4 zjYK_nW6E$##+pQg$Dul?ZR0i8*fz@jmyA(3a5Q*!fds?JF<49iJq;sxWiMmf3oIt9 zq6I`n87Sy4*qt=)ARufYejp$qe>D#FPYD7NrsmA?cjccq@IR%!nJeReKk=vCiR7Os z|7w4|!lzB}zbj0T&=7xDc;Rf(fq#Dq(m!8fWohJWYUa#nYH#}Y3;$t{e}9_r|M0Y^ zy{N2}iz^v3gNdz?i%Y1ooWqFm#n^cynBCRA;E7<5l7tSJE!~?tK9>@JG+_U*o8byFE zMP`W6N%oKdT8=L!mUe3jV5ndW(je&kSdenoGwhO8RqjBsd}OVEw^J2BN?ZFqM5cI7 z7PSd4-_L}-e9M!~a{eQR|jiivL9))HFx71xpek>MB` z-1_+m_JL8Hr5gSc1>g6V< zuWxs+e{8pDAWr#4T;HP7#l*n;fO@m~40(gH$jc#P zG3RYDf62O(Q`g7`S`!q5OczWX7YBx@Ap7z+L<<)X5jH=8fT)7~1EK$CxZwY9Z~;si z|B07>pe0$u#s&8P-CsSWbH=+i`)eWs%4tIHS(Gd#N z)Z^*7PmYV<6!%5BLO0-d;RmvInTo{2T(ztH`ID^Wa?pwCfj4oYu>G{;J#0FXbHTR# z^_KnM7xZRJ%b+~t?l6p>4MfDJg-9v`pU_os)c113)bU^wvN6VuK4aK^#$LxE>9Z2W zsPaABw-X;g{+!8FzFQi0!%UmCCb~C;k=>#j7f?|$t7$|0Fvgq?wN6JM#5JdwC1^2x< z=U42xfF*^clbF8JYE7~66T7u#3!PcfIzH?%2|g-p(3|@=j?8eC6z*@l9b2x0F>h8? zwo#t5^|hx7Xa`WhIG8xY8A3_jIfHbekC>;MsY4NrQNv-V2{&hQteoS5d&eC`?S=#4 z?rS595KynE=wg-7xV<*O}^oL zRmnm~`X$#%I+5x8aTW!0jsu3nq9{phUsrKDy417ZGA-1=+VOYul<^-q7}7hg<;lgc zEhH3F&r=n3Y@QR6WaG9?o#o{+KU))w##~Lxtoo!fT*!8OPbe%~ko6F&8|@b?fK(>%X+P^R@3 zvvhf2b=Z8Og6lFqUc!wpY{-o-kW!7WXwM2y<0?AV;wmfl*Husyrdvlys@p5_kXuI( zH-w&8^XDZ;KMmt0?G;@L6W*$HJZW6kCRVOYCRSyDg-2g3E+{!icQkfDLPoQC#|4oBQ`YED5t$S5<6TSO)sv-v+4Xb;?~}yLiv{hKqBaiM7$kQ$ftu6Zd+VE4elswL(^At7KWh6fhe54Tplqo@yk-*4oN9 zNM+iO!}>?Ez007K)_Ix@8G=%QZUjyd_E`wANnCTrZ2wtPBzj)M6k+q5vjH}>gw&G_ zAkM;_#)0UQsoYYOw55Lx{cTLHgGa|j)@urifd9pRTdXb-bB)LLAe1xAdlT0S>-rft z{$|?en(8iRikqk8 z!Rl6>f6nw=L!jZ==JD9p?z=&+iX1g5@`4mN>BWZ8$jQ1x zd`|Y=gVh^Y)u}O}r)N>@0GZAW$k^$+o{qfnTRRtH0Hsqq)pBn1ekunf6HB-n|4&Cp z0y~#!@8iDxW`{SdKBXx8oFRw}q4THEishW=#cijfo#)D%i1EBk_B_5Az|lrgUte4% z?bYzxcr16w0qMu8DE|z1={1*-#}Z501Rl+GbS=eA;HlBcCqm|U1x>N<*OV7q5s$pg zA4JdJ@dUpkzi~^9W1dDaYH1lTuUAt)FrE%{J3(*N+`k96UmD=`eR!t63#8QId(7pN zIr5)LYM%_OaE?0Tn|JrF0TKKJ_$Kv|FW^Vw?-xe$ITAR+Tc7?SeW+$_5s#1{AWw+@ zX+=X4L74%NGEksx>& zEifPe!*LIamNzLVD|EW zN!v-))l;!g1czYpQW7Z+@+z6AOBy;BJH2tTRHCKoBA3~mjE=H)tkJf53viJ$F-0Yw z2bS-{V*_XISOsq0xKyG)V;NuX3IgFn!~3w6#Ai)l|Imo{PL@0x^osQhp{sW zLUZ^`kgOdjC58R94qSJ=ZAc9BXu zYatbzKHEs1s5&b*1GGnVDP*5T=jv4BZHk+ec(SEgn?p{AbNc?1Pn;1fcE{f{56Xi_txrb;c$ zP`=6V$nQY$_(#B0WeFcf;o+A!i4SSLN)Fk0@<(vGzG4XwvrQ_|5BQI#<&0=IC;7z1 zF{l)fTGyoVE$(J5cU3s5UQAZ*OzxEcAyvv@*f~3`VcEPrW_4?m zG3NErtaEEDgK2vyFy~Y-Rq(XDzd$LtQ)v%^Y!3N`)SRNmrM@r(`Bs>FndlE<3dy0< zc4mU~Dx2AcrK9jdk@G{B)2eEgK~%LGzYxv$7h>Sj61S3(yEw0-wYSg@ny9U2%*JZ8 zRHz1Ga{A1U(Ovnls&a7q8iox^w4g#wiQq&LJ_yii7#}mDon~nO%AurW{80!=vJ4L)+t9dG;<8)o zvnB`ZU$+>-CQ8XOVQQECZpfP$Y6fF8pUvfy zrlMv(LrnVGsB1Ow5!wly^CNWM4{{&V*BkTEa$aMlZ0X|vgq7?&9^rH!>G7*)QRHSn zS*l0?+P?c`8msR0^5=JuR;0$()Jj9B)3S;_6|Yb5JMkY+6M1~f*@Avz8!pO?-dz*I z9#{%tiDE<%`;h}=I`Pi&^R>f#YD9@K03TSRK#piu$fww3j$HLDbVqT!lH4FWo)Y4@ z!5CnadyacukFxWk##HJv=!rBCloPo`VaovrLM+=urloGL8t(N%6!LYec169$O@V9h2V8ML_nB&b ziFoq4g1Nm=^l{oexqMiC?IcHCPJ_<@4hw=V$Qq5K7xzt);KhVdie)Sr`wN53vW&Wy zNJI8~!*xpr>tCy>LnxX0?70JB*mDMath0VXS>NJ&gHQ1Bk2rb5$Q+rm&6I1(l^_+s ztV>!r!gYr6{&rgzad51dG!n=jLXzvvqvjKw;}UncRy(H8%5A>l>kQU7Vv(N#+PP#d zc0k|o9A+3D)6JPgF7`y8L4X2-U4vWN*G&Hjob}N5o7&AOp`?&AWp%e_m=m4uw)ng= zxMh9m7z%3K=g&IVI&=kFM&xe)Bt-thqct30(dOuZHe)$0VYXx4OrV}NH z0s%?;e_w%F{;7ee=qR8Hp}m{yShh2OCd*J0*;KBk%!*wG0qbmKNOC{E2{L^_XeZU1 zJ^yy57z_+sptg#l8pypW4YI-&A?euG{mM$`Ub^sod;9gG07Bj|J%h*^nAuVwDjwPH zWa_rw=ZB9NuR=m7K^$h~rZt~uLJ_MBuMY3RJkHvm(UEe8NY>|Q7RT9o@VqF#?d_}r z8MKs&g_0Sb1608NUWMl$&AgpXXZ#?mtTWhp;NOvQK1)_>PRKTs)ZingZyp7c08iQD zUTo7rWds8Zyy)9=Xf?1GT{bp&IOfW%{WFQR@9}?58#wV_-RE|Z2GMt^6l4bepamsZ zUg&d9_G#}m8s1;k5=~^$tk(WwGodc*HzxpXo7ZM^1lX{vDF;F-dzu=87eGQLurY-g zg+-=J<$EPeHcVNgtjB%k`#Fb&0ngW$A4pEeI^JNC#72(j9?Eu>u^s3*9v5i9dA68E z9yar}3tgGUls1~FCP-~z(Iw3HSJt`{Rl#lbzKjQ$0Phe8i$XwmMm@rGE6r(4c z7}L(R6#$h(Y49}6bihth=qG$aRxj&9C7RHLoeo>;*$5^L@Kk>$%dwL2XHUJJXU?1d8^GIPDb){Of+ zwU6C_Pj+dyALk{V@I*m{y96uEx&BgOy)u*}zkmU$0>)5go{|xoS#D|XQb$nrv@b#G zR0PDzY23oMwDXHYQup7&ik)Q*ulcT72gD?+F}sMropOsYV$YcLZ=wN4sw<~hSC`B} zaRy9xV9!u)3g6wMa4DHK!>9ai*Q=6+vaE~Zrw5rzi?NhCp6BaZ?6-F7R&>uvgXA7j>s+?qX z`FiqnC7qSk;_c?)K?H<+z1Gl#IufQ(PPY!}=eJOJ2Ad0MP>n{tra!}ux+H5Vw=cVo zjpEahsFq)ih4G`^H|}BMGKSJ)-C_;=3p{xDSbRli@(=o?CBulVo5B)+fT=K>`RWN1 zekN)Q4PHe}A!=gtqz$^st5YOmVS%95opOM?_+>1LzEl|{PA+Mm%9y3-!z zZP|O)A)@NqS87f&Pq!MF2rhT*g*UNW3e^j{AI?3Zmqc}})`}lI~ zN#c*nP<=ofrSU#M!U)7Ac<=YK*kh8eb35J~LAQdTya zNWCd2lw$=P!=9Hy;x%=~RCBgwI_fVVsqQWgHddLbqWBQnuAJT*(jA#6q7 zHENl>mcfoI{DL`Gz@E@%3kIq+Wcsb%OV1IO$B&+K)##ZJc zQ99*^;MI{4IuU*1brL?sLdoJnGT9TPwy{E`1yVdF&PQX{ti}=u*3piTy%jBGybI}_ zdgPsC@+5L^3n@FTWU8@wWIukpYKPtXlsB50j5xuTr$01Y_;p{rcRk#cGc(PS9ZW)_C$)7~+cecQ=oCwu3@kATeIR@9G6z4iecbJF?m*IEfCn z1Lz@_1k4>8gD+?y5G>I;X6wa<%=U=82-qGpno;d&>oGq4m;ORd)zL3#qK@4`h}*&B zk4RrCrXATLp!#2tAqWSCLe}G;u5tzaga<{0_$r8E6-FPEga@M|QWeHLMSptZ!R@jJ z?O2%kR)K#Xa>6!Htbs8=lkFm-B1G?l0hpslxv1Ht;Y_ov$2Yad0>h1E_ zEtkn)m$j*{p3YYUx3NkI$1C&la#?D}Zdf<4(2Wzb;4p95XJG5GMo=WpB3iCQ1Br=q z#^$od`Z*ToRY-b^3^%lw^ktE&Eh*B}%zJ5*z<20(vvh^l$YIQ*)9VL^pE{e0(pz%-vFHV=_$xN6_n z5RCu!R7VAytyKitWFpCg67|S(C=|A=OSfKEgkHDONM!gM><~$9(hH)Gu_Y&&U6k>& zrB$$z(rrdB2|9iHyq%AmpC7--NEdS7@40MOmhM`8TUYU~gSo#yw^%BRivWILeaRNz zl(=|*{Iad_f-xN^<|Z4Dn}GajK8C$AzVS0SGZDM`LU}X_>y))#T^UmrYchRbjh3s- zvag6nyH;etU$|d=egj@63S-P05_*(URX2tpEGCgR z1{pae!n}}VmoKXDEW(Hf`2xtDQAyZon8S2>w)E3jvM08n6e&`yPJyo^CvJ4bYD^0| zvkWsCOH;f;_f3{B@f|(m%9@ADZjfr#WIh>2(dIAPwGsZfiQ-ZmQ1Q&z@%7+6DP(oa zE^gIf6{q00QHWH$a*NM;n>!<|51UJmwpp&Rx|2}W;@?e65RxI3&IGi0^L0|J7R0qD zh9lBrZmmRkxcdvOYe=vaghgHO=vPWgnkEkpA&n+DO?_1cnjN(VSUuG%d^2MYti-Ij zR8!lEcDa2e20he#5w}vWz|aNyZ)p5O2oobZ-ovn^tYR^^<7dKT$Ewt>P+wICr&M3@ z7)x6amRKvs5)G(Vp@9SDP!(QH5vNM0y;X~hH_#Wj*I5;FmMxD)tyK_m1IKUS(~l5g zm+<-WZ#6D3$<0v)J6ep&Dw!|eQqo6G7vS{_0lA5a&{18@N8HyGBPV8H49Oie+QQLj~n1vAI2FCi}MI-B_(ARklwFk?Z<{bDr}iKtJ9i(I?O>9x-i^ zfD?036fO(vtQstyT6vzIV_{R5-oq-LF0W6UhQ0lTxgs{FR-`TJ^P%n1x3}z+6tXZo zhp-{=lj&2pFu+A>V{EpqNNc1kp`*#B*sA=iNx3~n!dQLC?N+%KL%G<@@%>7ud~93k zWA?f1IafGFF;PMicjEc^?I7q0@R zil`CJ)DQ_@Z`81pwEC3%%7}`kxw~S1J9bJQ z0t!RYQSa|2N1b<))(XqxwtX}E=+Xo1*rOmZMyK6k>6Jl6eu*!#C%O#A+5&5w!jVFd zkK+~4=0Dd<%yF`3@Qb}Y81zQ!&de7jBZEA2(lqtxPAB}hnoMPNF0cw!r|?&l=ZoS` zzqn`$t^!A8=e^R;x|@)K`3}Bq`P1E*1AY*@Cg}_?=dvE?8GVNHX&!Se;hV=uA#sPH z%oq=Itgs){;D!BM`=|}FTmB45bCyKlYY-RNkSXSYsS9WzTVmTUx|itnJy)Uxr?lV% zfiXKBCR7f$8qY(D*ogGR zE-0v)H1GsNbdgEg;gqY!k&AbXlKdVm`mE{X!FGg@T7O2qy&EiPDB%r&!W|88<% z&AOr(0}n}kjV`w5b>7GO8#uMHa4XuN@l=R89Y{+QihdZ9K>$;A4+}vrO&9c?FFVH- zyXC>j^iPwPsHJUf{W$$D0x&khL)>A$XSB<4UU>v`r}o7qS=egpBwyUOp_)=n+JW*+rzWfU+f8#`m_gW`FQry3oX+Ec<<6Pu$ieayFBSUH%fK8T z&Zgi@PPGhY+UE{Iz=6dA9D?|U|MoYk6!b5>{0i#s4(4df;!cuR~`IPGqdg5bQOWa@tk14y|o1h&XtoMxHd#4;Lca9Xrw!fUG)qL(nFmoWd-8|&AN1QiBlO>mqsra&bBD|5c2GG0sh zv@;_@pr)_5RQq{hN_LQE5HRi3BN71(jcVGg?mP5V7$M&QC*&8=3n3KHKt&cKLQojx z-kw{xKzIR+)XCFSe3$2k1m>lM0Yx9U{`!MU-g? ziS0TIL>WC=ubwPY<&Ke>G7|v17R~G z`+sd8_$lehfC{1U?=7{hr4VXqYFS~W1?i|Nh#_Jt5#1Ty&dwdjavRszwL`vDE2OjLY)yrcSRalE$q`I<$5_ow z5?_rdFm;c2t`+NA;ljLak;BV((8Omvt)swlbS3B-;YL>oEsrIgywZ@Z6Q15C;4;cK-+klGSuHaMiFjD9Nx{qCXeHG-%h* zTTMVjgK`+%Ice2d5YN)e_zO;7pJzL*V)|mp{UmTtghCBrq9HJP8tUs*a|au=}iZ z7Zm@fP||&wJn$VwVa*GZjrOu9Sr%yS>YrV3HfIw0-R_)3`r7%idVFxCaSqv&Ab{wM zh08+v4HSz&xFR{1p$-kp^~Tefp!I|%jWjir-!Pg=+q>EmwrsOax3i1*bCuGZdX443 zxyvambW8jLFph3u;Mfyg=SIT@YX=x@FJf;i*aMGFQtZ4`K=sm36btYqd#e>ZP6BVYL zgSz9XnfruU`#@Rg8iIX2-oiH;p}(D^ym&sfX;r(l(!>u}fCp;EDjX$>27i0j*J0PW z)y)xQ_L0TD6SG*;yZNp49gK0Q&?=6)CJX}XqJYS;X`<=W(`B+rFT1mu;snS!SOyiL zmt46LVs+*RX|3ABc?2QE;R+XH&%(s=hfK%f3KmlKpvjA3<7WW*aTz8@x>apUg((AC z!n0ELrUUs!e6R;e-_&0;mOa5lG`5j2~M`&r+O8sTpvxGkz}letFMSXFh;zAEI?VsQbvH( z8aem3_QHL_%v=-`Z9#xP6{(KTv-rZ-h*dOd~+-PpDM2Pe?T5 zT={auqDSXQ{_)`{-*iKlXc0ORZP+k!gWgS&g?XP)v9A>}-(l<<@P2*NCwZs*_+?N+ zWhc@^&-W|%LvJ(Xdr!}BH5YpC(vC#gCFjTMhBIG3DHsP<&!6$Pys^YruZ`vIN}buh zy5=x)?DG!|E<|bNkGPO|Ir_o$^^$?4`=u!Q5|c-DJ+hciI4KBc=qe1*Cw_*@iF@?$ zXT^E>Tf-ak{#kzVM@zwk{!cE1=HFb%|K|Vy@*`6A<_`bxB{3>C4yYPP{G5zKV>p!C zCZVe@%XjA@{2Kt4}u8@%@2f^r>w=F17!uhfXzbYqP@%! z;-W0q3Tzcm!{pk6W@J;pfYX)Djqf3cC^+^}JA;bVSHkM#0Os1v4lo)Is`kH>T6~#0 zNhaSagUk`AjGu3Az@D~-A~oh)K!oR3;U)-W6QUCk?y2R$yG3&p8cqpXERyfDD1uIbeFs^ntxxd z{nhOJlnEdMlxul!!Imd$C1z8_(tp0Yup<}(KJ0mC+Yh41hMnA7GIV2|K z*ezslv~Ajuw`}#OeC<>H4qJh+_U+ z*Q5y+<#~i(U%Q6mByzk%-VKj@@U^iab|J@@+#XI>FOwtcTS#8WhLnqe3?`j?olQ2&orMADvNoSk_QAkYDu*3Uqx4(=&kaDt-a@c87@#xS+|iL+-5AxNL{~ z$O~SSI>{%ugrpZcDY={e#+I0JUYeKLWar{2Z$ir~1@q$h3bJ2tve$1;btKQhJe-bq zP#EhXUEeQad(1?6!)1e(3CalUXQ%!}0P4s;3F!Zsy-$B~KmP9ofb`#H@BbukV(w=4 zuK$>|c8YQef0R%^9c|d6pj-m(G%Wgonn;ak%w*J=;K8pYDOD|n_EHCG*uDi^FE77i*%|ho>JHQ*SX8ZZ?IrrpJuijESSYDa|=H&(fS&LsZN7V@MLS z$eSWfSsa#okU?WqQ9{PejVH0WH(!f!OF;_az7pj%AmFy5-hJ7&T>D^(ikeEAHvdx@jzi}U5Sn7cO${GDB+4DYFk`iEv^{JH*NW#F%T?|+wDDgJ|*|4nm_ zV@3%2OLHcwi^AX-T-3DcBj{1Dl%$hAMHbf+#;Bvio9qSiq#~6Owqi~k0T@}+rylMg zk&Gyqkkep8LY@FUbX`JOEwwCUjy28t5$;{`~Z>57VE@Uzz0pGYMSP*~s3-+|1d?*w#$J*xJm* zl}y~s)x`2&qI+m8|6ihe=vIFkJ9AK|AtQ!$0)Ide5)wFEXAcGTjfkcZDt}fe)TN@a zagQ*Z0rLg3FKfrpjXM;QAsG`A7J#yzbmFJ#sEbPR^`J^ogIuOaWyNj@{KBy-Ev>J^ zwD;CBsY>2fRn<8h{46FwLDQUgT(D+3%2pWBJ(2EqYc6o9B|HV$5&r?=Z)+s&{HprXRhYj(0Q^_d|G$HP>i?HD z{z{%_Q>TvG z9o|6>LZPGqYE`XOD81d;?p&MS+V2RdFIloEIQeonjtnoSZ)a;Bllx0R*UKkCfom3V zC$-+R5GU-Ws0GXdB$aYb24IG&7zm>$V%~u3T2On7GLphQir`8&*y%?>`yGsS$M&f6{KZU#@I8JK5?K0hD0O1#dN zt!xmLkfd@jO-K_#A|5Bop8$Uad(W5t0zdSlRm8oqkJokrsrtisrV=G0EIBKSd%nw2 zE&OTCd}Zz!=jWI!YO(8(QmT~;2~Ih1m)5joOoB{5eBp>(L$Cccqmz9zGD9+obg{^S zC>Kywym`&0L@cuAC(wO*htMmBR{e#ZN!jK)^ANs62Fmum_om^CoIxw(uA=Zca%7gm<_Zn!qnOQ*-vv{3J@NjCkW^VGB?#SJctzfES~l5BSqP?kXWg~^ zH1lobxfyxV_9;{s+E-W+eRwGzxcq!)m{?f7O;R*8BT&SeV@V;D(#~~{uI2_c0i~LV zFNv%8c&>wIu}l(EGtH$kZ+VE*Zn+`YQX#rl>DOR}>ce$aiYExQ0RNa^{fx@~5P+qUV$b~Su^4IrmIwU3>gAd2#wYwaCiDdJ5BL8+ z&k-e765;)IEGTiDi01F|iHPy=A{cB{#P(!W5gCTMEtx4& zDzo8bm2nDJto@>>nEnBTW*zio;CpoEd*l2rli3&Frx-yfx!CfI3P90gU^!;kYD4Yt zd3m(qk40Nrr+VzM8-$RcR;Yv5xx0)MC%;7+mc|5W0=oMNw6iwnVIfCxd@;dkniG?j zql7J}*UKJ*TGEEyxj0~qx*cY*iF|kcUW!Z;MtO_0To^P=^hZptr`pSXU9nA}V9W58 zWOw*+7V9!3sc;r3PYRQc_6=QV9j+z4W9qqAH+~c(t3)He^SM1R$tKaY#)fmZmA>a) zAM@X;#z0^0i7wq7-E&+W;hkS`qB49$))_k zx1cVNtuF{>BehlpWcdlQ$!U<*v@8Qk$()ja8CsOvD9YkLMl*N=`9$)M{eS<*F(COf z1{8p*oeHW28o$gY#|TM8L`3c9rp8aSLJba zWO?T%(Og&4-$8&R&-3#`GvhYa)`y&zEWQW6hx2-et+yM(0NmvmL(t#Q=O)zAUo|lb z;B;Ynyda6npp03J38F^A;=c-tXb=2<2df#P!951~RtY&~a&UN|#lYlKR!56+}FX ziPC6nw{&zBbB|ylF>&s|)=Jk-#LuR0-(VlnLx!o$ZyKIEwDGLTo;qJ~bjj=3J|Rd}Ij=J5oq z&Mq?1&2hus?Ja)wG?cl7()N3uSU9VeZ)!tpyK!Q6m@Lr0Fa-CjOMlna*fy|KZDC5P zJvP60tTyF<6E7Q-<;pvu^$jUhljB_|JC~8IB}JyVp~vnWc1wz{-DPp6=T-vktfV?6 zQYhURUXv@=S7XXZ8$HFTjy9br)kp;F?>RU}IT13=Zo0^OAu$OVxQ)$2%62ev!fPsb zAfT&Ai;cu(Vaz^Dja&P=SRVGT_g4hLbwVhIt5+IxP+N~3J{|7WOW@Eji7d}34#e^4 zt)Dbkz}Ry7ePK}jin6D__iK;OrencJXs2b(KQh?@=bX5RXwgzV(X5YSG^P{yW<){j zvru4qVhS6^OX5YC^~1*| zL*FAF_ZaXfb546TA_RW-en$a-#n5ULU^5i8Uq#O|<53&)JxHKSM4oTYt4lPtd*_LJ zYRlC(?V~f4(W;x|`SYh?ze$DeFcv@hL!T>1u%Sz4_}0AdJ2j(ROrt(t@M@QiP~i}9 za9_klcUy2JKAgKy4CeF$rQ4weX0di396)9GhFK2t#+Kr@nxjdNaTNg7gm3w`8u&`7 zqVlpKveI|80rPlpQjN8a-+8naN3PP!@g_;L_RcXAeksD*-r}Th)m7>IV(AnnOnb-e z+FDx!&)$bTJL^&f81G=t@O_tx5gN*l3Hj&cR@?o`cJ!?i?q9m*B^lkm-iLS1TQc5J z(=#?m_zlR*+&^_sa~PmeGVmw$|VUhK%eLBxb_17 zt~vl!eK!m2FkT{LuW-hco3GD*iP3JT{$Y9I-?yo1<|BS}malUyh}8 zl^>O=d07_*iMJO}&BUBm$Yq!TX6{M*HcV1toOCAldB{mvEQcKeJq0$i08=fiLJU8* z$4D(a=o_epAbX`KcV=>|;Dn@bk3;Ilj{w(|jvbcvwqGqyqY*%=9xLH@rmt7~(ZzbX z{;5{!=d7TO2}j6*Z3w)i5IEklG6Zy(%Cp?Ih1XaM2^bje{i<}?Y-bClqNr2I{Z zUrRnONv?$^5$~l7+tY2Xv`?{Gen+rgz53KQx*W=H^<~TK@PH&^2SN`axiGN-+Hp~G z%zd!z3}0p}-)0rSK+mt(MmuPy&Hg?jhTAYEuU#h*Xox=T51W!IPdzx})?gGKTT-Jp zWOb^@RBVEW3ah_xg`>Z81xew`7ib5&IqwAN@Y@sD!mXok*Twd+D)zxq->@=OcC*I$ zDzNS#1A_ajoZ&*2^R$~RZ7Nmf6a0heP(1li6wBGDtUn)cDoM&u!)jz@*6YrZMZRC_ zNXC9XIvYTTm6V#yYl|pJTCX$o($cd}a#zNl#lRbBRgb*^1v;kFS9ON-#2wl*y66~H zjx;94Y4te+l?8>|$;76GN2Io+!TC?_yO`=w_+x~PtJKg?OT`|l?u=9NNQrJBWv$$h z1y}jD3%&ucEfa{o;PllD#xC+(q$u`eVNkWJZXfxN`HDz#v*LNH;#SEp*2$D5r%-S9 zEfOpAF?%wa8h`!T4!%-N) zhU?dllf~&qdMT-rW0DPD?$>&H4CwK|3-)!TYc(cp@xt~@zeS}O7EozZvIJT2L{kNe z6^m{=ZT*Dfl9Hghm#s{x5`3)&{N}A%mn4fwWO8h!P9?foOE}xe+jW3+wE!`~oB@Vk zK`sfH$v@sVwq9r~5o3E#fciW_(t<<)T9MKc!sb`sxFcaPMc>M;x0^H&C`Zyi!c5Jn(-W>|Jo>cR=E*21yd zYR?H07DKYMc%rhS&o|jtXa^|e9g>_2AOzTv=gchsZp7CjjQ)^5JZJ7Dt-dB-Q z@34L{C#$RefJ;4VW1{J+&RolZ#vMk|@1iG84rA4T zNBa5kp9s@jK>;-20^6VW2v(PfuKpaFhl1{ZeHTmklSw=OPrm(Me=3k@OJ@Zf@2ekM zv?}X9e)3P^q7EVn%H+P`>dQ+1TXn06V@G6X<8PRDpK+=^H5TjP9*!EvgI(S@!wu9{ zKui`qVWXX2A&W!T8}S@Zrzqod{2O796QlR5;%VAVVA8RDvJ-a(zwkFytMYfh;hrxZo4v zt0kQ_JW-W;$)T@)68nr*8P)a*u4!+QM|?@d1xVm5dH$>MI%QcXWZ^{z8z6(CvQUxX^77f(Wgu1lUX z%2kE&M#HQ!=@bLEv`Z6ORrf(u@_F*1k8iF388p0at#Pi|0cRt-~ ziR*LV>KNFuLjblf5yCyVJBF@MVhLS#i{v}TAu_L=G1+$B(Q4jv&-0-S@Jzhz90$`g|ns4Ak3eK-+Lkcdh@IzD1 z9g%wzcmhLLH+bDWS4cyBcn&+Bv_p)}uP8%nT$__uV|a0n9l?9qc-_5M<#;dLn*&$& zu?Bmdh(kWyo0KU}JVP(s1P6~GLne4}F0YV74$gRvJ1}_B4r7$!h_GJ#Wc@t-S2{tR z;oLcBKw@0Phy(8xFJAZ9l@CJ;1R?r_N&ZuprM#1`F34LC#MCZoFNpu}l@#UsFvOc? z?-lioz{J&1J}?+L)wca5FZbn=d*)S?ZOX-0==M(=%Z>nwj8v|!@hkM$YS{d0r&sQw zCGK}&%{@l$_o%&U?k-{?pzo?#-ggcn4z?GF+to?D^muGS1sI9$TM$z_{m9=@|CVjx zbkK1+w$-t1+qP{xS+UI(+qP}n>5gr?`_2FCea?OMdGB-Am-YQO=d7wxHO8pU&sLPb z`$Invx0dS#@@n}|Sqk$R;H`rMNpucZNsveacd9I`tjfx21r^Te7M{;S{CL+C*Kpx8 z`(srBQ0A&3feB^!(RPcUj9`XJhbtQ$XGf{D&G6@(2qZ;nEf?iwH9~z_ru_av6bn-` z9UD@NGJ-oSRa=^yDl{YIE9Vs>C29@g0yrIJ(uJ5zuv&0Y!8(P*>oR>>dYaET;Wq({%#yDbXA2Z?*k z8%B6gmUxEUor@1=e!=6UZ4N9ex@a)q4|#EYz5%hWCAob+f2JZC6JN2A5S^!N;ITac zGV(Qw#-Y4p3{;P*v7M77a;|>zk?D9%2^U40S2C6i=25 zJJ?Yz7Gs2r@>}aV{Cs8YS*pCD%?ukn5d)T(lJF;yk}tAsp<*lI<1m3r=HFvNHS(sR zT2E{P<;4XsKr?f?&j;N|5OrC*^$NKGR*9d4MK~)?L$#|n!vn#&E41L6NLP8Q%9|fV z_Uh95t@FqY5`-pZt4Go135${~zk&L3*hLX#l;{?0&(LTl*A-LiCnhGWH4<^Zbx|JD zxg1Xjg_?(i*pb53h6fChE7oE(jC@wIk(cD#k}gYa9eKHf#NzacEALdDhY=Uc?YkT zW*m92&~bV3s`0z#!)y9bR88REJL&5V)><0=dH5a%eavV_nHWttn1n^;EwEa{Vwcsqj15N zBwR9>T{z0|M(fe_XVuZ^eoWulg-5nz3{h$356vi}2MUA>`F}bmPPVuJurqF+>+t8I z^Vm^Q*bH7+c*}+Z^>|n2v6iD>w2JA1*K4S}FyKU+>vrK4WvJ$?yvCUW@gN`|4lr4F z9VjkLwx$<=lQ9S;b}Ayw!WV?r!PB%&$yf}?I7BU6@P*13>Lhx+c5D%KeY>aO>2_}D znKHLx-wQyqKkC_~Y72G&z+DsNEt+guSEl9Zl8A0ID4(=2A0aQ_wHON0As%na9gmAO z&S7InnOZc4UqF~%QW89Bv0%?}s`*rO8tQ_)a#QJ7E7-_c+6f{?wUCbYff7Wu7ItxJ zy^bc4O6W{oEj&j=XozN}ATjF5RX0&?SmN)NzA+`ur%1>w-K6&bijw%OTHo*q&yC+2 zNaEW4>;9(JyT3rZB{Eueg80E7`8Jg26JlZa#E=?M{D zl(}sW!y6VV?~%31auJnbgY9=(;m!1);ibxOa}qwu4^ra*BNkirF)5p&x*}$UuV{0uo zveze|{#BNntw#ukWvD}5xS3REe5J_PfKG;)vwEZg?Z;}Py7b3-@wb3@D{$1;0@6)8 zB_ra3d<_-A`RP)5esIxau<$^GHCcLaE|eyw6IcP%eL{jovLnlTah@2Zn2nstH^HSM zs~DzObgQ%#jyL(aQ#gp|oI0!+?0$}P8%k9B@G~KMm8j4rn8d7lQlaQ((J6|MzV10_62hCza3KV4^Sw&3` z#WJ{IH~lGV2mzZiOXC(zRQ9D=<2o)oci6P3#o=FlfLuxYI?qzDY9g6gG=}4t#wr$* zE;KB#5Zah&K=9Y~X&vr@a7HnQOl`yv)8=s*NBkdhm|!=Y?wcl{oS0ste|yL|O>%~W zf8rb90c736V~J^!e}Rc$q*z3}2K81W^ymjfG31eqh%GA1fRXGyPItl6qsu~7?%vi5 zO{%=e!xU-R)O-`6tXPL@t*GOz2&%Y1xtGkqLp;ppv|f}@zj#5s08!K&#ip3hpYG66 zj7Lu+L*<3>-0&FG#3ijALhu8T}u>*9^u zI*atr0!~J*6iy~&&xf+?0OH|5li$Il;)BY>triL*bK?=D0T;|j;b4p7Qv<1DbI0{$ zmWrBQiNTsn`g;!6gcH(QE9Ur80W3C>2O0!7PBsO#$<#VEP_y@ zIJ+v2uDF2H^m!EuRmDsgBcAt!f*s{XV$J+E@p-3U{#JO`Cw_0IhAJOe0CTwjm;zC? zaQY0-M2m7~P9m#QL@Yal3lS-woiRObUuRO=Gn-713URK&xYhO8>&#QRCP{BwhY_5e zU$X`OWkW{o+NcT?k3=0Ucye?rSbumx_ys4G?^PkJrB6}vcp|7dJ7g+xs3(E1Ma#AB z8`7V}x@WL>Y-YM=5M~15EfLg6%}gYB4;E2 z3@iDd*%^guVf=!0%&pjmWi7_W@KdsgE$P-tL&^nSTl)9McC7#v!8OCB8CuoCc*Ry# z#j)?LkTgN*2{8EHrw?hkMRsS@$Cd%RQZS6K9z-(Bb6fJax zn|*Vt1qypwWdMqTwq1?H`lZ&cZ_5LHpc~V9e5_J{L~!SR(;7J!P3!M83HThO z={+S66G#7!xiN2eW^}e^lj7{}VP@Blf~*BY2;8{}65xfNxG+*0iCpq*gw+}0P7sJr zkycHaINDTKuLd=}*ST7n(W+sS;y35w0ANm+0 zW9`jAMJGGukk_XY-up;<TvCKkbWi7g4m7~&*6;)>@|QUknxvG}xQWm~t$HX!l-Ng;{w<gB z?}DlQ)+Ymm==IkJ9jHA}pRi^5!=oeg1`) z?4sLTix0bnmsu7+ddm+C?7ys*AMDtF@qWuk{}tQ^0LWtg%I^P2eCY;R5DAe1Sni=~ zJw^WFzTg|aQihg)kUMCQZ}jHE9LtFWoaq*rzHTw!t`2yP=5HRbp(b$xR{08w8o!vay~ zjrqyy0gy}ONKQ--o1yY%goR$2XjzkItoC&An?Ps<#1(^mENIT z@n+S<3NH7I<016KprK^jhhT`GHV41GXuiW)M1<_ZVNM3Gqmd6kHY;TOh;W?Z726V+#de7f1G=uM34>LfZJyI~QbpF1Z zbs5Cqj@aZ^M(z4A=oQB$AJ_(E;>S<(Tn3B0Z~0j_R7fWiz3d0vRm2#-J=j{0g^h|E z1nhyqodW*e{BiliKx3)8baA8>ma({%QE=d5U|e^BszYP;zFR;G8-4lq`JMGFU>P4$ylKDX#oj zUH&m}Hg7UXwmv*yuo4~LY_QZUIg7T(8Bn7}-d!Q(RU_wBBk84QUI-gXKp00EY`Wlr zX*ZG@EZGB2W&)btw?^YoPXnBq3B|HuGpXmS^Uns8UgM!Kxi`ep1}U~7sxpf*0N`oE zJ=#Fq7_Zl59tvZ?6y zH$&O$FJC-cz^)CdJ@_{xgl#Z#07l3A&Nl2leRO?kYaysAW_vW;$y#U{R-cN^yJZ_5EW1JN2flq>3ZrlqCU|ur>2)ct{Rrs(x-{SzfVwC_bEKPk zOixqv99!>K>!C;}v(?gSyugwbqO~n4MTbdf3p)wzE8x|be`=;3glos3usm3utp3#r zfuDB=$@76=#&$(=ky%MeDM0{MdO0NT>1ld-PY~$YM&i<+UG`(I?*`uAFBl%1A(c44 znT>vH6bF-YpQ|GEUEO*|26$HlyKF4-F=a>#n5GGlcf!pWrUixRej~e((ipD^Y`y?# zs;e~o(fNI2&DEgcd{^nokz>rx-+DdfRwKC4a@F|;S6i0)a*d5%`j@BX+mx^7S1C$0$Tu7lezs1Ih` z6H|L&q}O#7rmo1<|6tpgJPV+7#<94t2d{n34aO#L9Q_=sUqBZ>Vg$NDmE_1#RNRm~ z!E0S*Hf@2J)CnR_eFPi0A!F^DLL|yuiK9+IebNxAJt58$5Ch(}3oaG13V#pc6S-lK zuIUo8{@B5t%%j0sbC2kIhB73gYv7TkBpM0f>&;EedhJeiiAYdf8-4}%MVgSM0 z7jTh+as~~LA{AK$NA!b60)h}z5DB3OxJZXb{q%>D4j%(YRD?##1Tm@&K1l~DP#1cT z1*w-8(qZ~GGzuUcDn=2|At$2C1u^OkZZiT6rzRUxH6~mFGu}mzYO5qDA{BQi-dE^Q z6VhS-HuQ+Rw~r#QMMz|q1+s^Nyq8o+BzEx$3M8t^Sa_w39E($KdHp83^K*yoiPR_T z6UuKmX8`qyh0c(FMC%F8t={}r>q*ZpuJ4?|= zwZ|x_j%xt8&nX9PiKi)uU1P^)`DB9_TeFD}*v%o5SyTW5#f7YdvAyEfE8cK(YdP^7 zZ^$hF0L&A@*I&Qc6CK&ZGsXHRgxC7EC3QQ{96FedVi49xlc`saSI8!E;1+X>5yTy# zPrb}%E14R0&Zg7ly@KM`2;^5rV|+eAd_b9W2iQ)iUgP`M9#%ZV^>qt75KQ}a)5S^r z$`#k3V-Q!00PN9(ml{D(>W`v|yhdrtpWWPjiRlHgpK1nw zizHqNfJ1!#>o%C^bNDc5!S|@&StCJlP$6wpIBXOb48ryTVUs22YTELpIbl0e#u1fE z`T%4TDja2H4&6-feAOm><|(HRl}sph$_-+tyac>0j}MBGh+ehv0~5;k?BzkEp}|lV zlRpspgonEJf9tqP@F4WoY(<^5E`_Bm337M>5kx*+m~hK~pf4JtCAY^{Sj3l1g^f>u z0?TQFJtv4amW;;KQw0JN*(37)vjM2l z=1Noo^Hl`H8t{cCzK2sa&z0H)Po{9SiIs=pB!6EpA=#>8=|?h!-70Sq=xwk~27z@f zubx*ggF$+ngBQM`xV)(6YM8xVJ?4ihMeKo(W1n06frubzZd9>EboUpraqYG9_hsLeRq-XO^3Om^Yev zX#6`odcqK9{KRKx!j3~aKfGKADx*L+XW`3~gT6}LrwIV&mF%`w>XHa2)24JvT!|2` z3Ry3K3tflFk&{UwKnHftzK|k(L$iE2n~(}{0?pz7MvoiDjmm|$XpZfxA_~AQ(Jv~b zUm!~6n`GK4MLh`JAwyo89NkSxAS9JXQuvNl7wY3oI~58uSB9Vur5X>myc2*;5eQ$0 zdlr#FiUg^_~I}?LfK6og=S%afY3AjFHXaMu*c}X_+|D^jlVQJ z|HVJ^up$G9*qZ;NQT!L3EF@l5dQbo{blcWwb!3g+_EX5(-WEo;tHMLk3&u+U6rcSR zyM+ZhSmjfjH#snnzmI@y<~zM!a=<#?QTj99(f#=)SRWPwokBOl+}IvhW}@ieYI%n)Y5oL(iG@t|yG??)m6F}gABx!NE?5jmIyOb)lTTy& zHCqgX7R=Z`23Q$~R?g`odvsalWd?QM2SI$fph~S(DaIN;5^%et1D7aQ%elg2@$$}v zs{6a$~6aUX=RI@a7|JSE?1=BR74s8^W%Z*dw(6kkz0 ztuZirXa(JU2>2r?uO-J+xXD>sXM@?GqSboml%oKfYTF(KN}E6pG>^Q3c~Q^KLbZ_6 zZt?Nd7@OFO&6!Rrp;zK2=l(8x+B2a|mX<%?q|A~OdUY16Ja)z;8G-kcml;5o$H&Wd z;JxZ}k?1evN1yc}9`GC6&W5bkKfzrpSwc7XbjkL(&O)LD!$OZ5NOP%mXOY#ogg8)rRdc1k*Bqezeh^Ub{Jl*(k2R;%T7 zx{BLLwzpB=CDvmlN3s+5xaIM*;1mZmU-~eTh1NT;rI_@PyMq|#_Z4b!PNAUa?BCjXgI{Ytz$@`>j6?=m;?CIrLD&1(+m1D*}LstoZ+txB03`yP&9I{;|s#wZ&v8lC|C_ zXoV;$zE-OQ|F)Sdlvlh43RA`*8_HzMghGyDdmB;k;p_&o*a{rgVv{P#LL_s{DQH%RvjO?37e!2rc5Km(HxH-69q zWM&ld)kOipJ(QuJ5sQ4BD0a|^PbsF;!5vC`Fx-HDl#!F*xJ`WKIn zhH6v=)6#^4B{m6}W7<*52>9W6g3FBC_-&MnkfQ;Yv)tMNXn5e5F_;($fsk1^cI(gb zNH~f+$}@@;8^(cu5T1sL0^oNkv82b9^8ft|`{h*DR_oGbvDcv^m%X0dbvNEQ0&w)!2q3yU&; zp;RP%o$G0n8bzCfndFo*OwNcW#O#jd*EH2Lbj*nx?&HSfc*le(B@vrmL8H;kO|L)7 zgEBY`tt(I+>nyDj9_`UatPzv#DhG&}D-kZ~yPzv%2t6j+Lh%M$ zuk=ORqT0aPN(>12DH_GHxKO+U`WtFj7Q%klHo|eJKp`JzTOJt2A#WX&9xaLlvx)jz zrB{biU``k8j@lLVjET)VnX$W8mWP=UEOB_kSv>(S*(Pmr6ix01b-MEo$HzES=UJyP zM+1%gQ+2|$L=!bebI@mwW1e|6vrG13Z5NRZMyi8BCNl@%wIy%wX=ahb;+z3o*5#*~ zzd#mWvQc!_eFI1f^Zqq1ujQfqQUKGjs~6q53f%)?cN3=;#Z{IIHlbgPsqzl7(5iiH zYn&&H0+9m^ZSRs(b7)bW2XbbuVfYdr15Oc|U zW|Ta*Ov7GHuJ6K23SR`bxt@T!yhxl}w9&*9W>j7NH&0KrM*`2G!1;qmCZajfN>G?t z7oHoC?Oh&8htFkYiCa_(&oUWBQTNESran{6B4Rv;#FmFG3Ad;!GFO2s$v#KsdQ0Ua z-m3N}T1hv^zwuj7C@;050381}}Jba=UOt0^9WuwMB&mS9~61gP>5L zUby+~ck}ug`2%*bVI|~Mtu{KHs3Ta6`t`yV#flK!nUj)Yt4QXW`#g5(hYmD3u`}Z4 zHcKq$${{gy;AR($He|t!#=c-u9=Vz`1RnCQQ=a6x!wQk3p2LWZCl0daje3lG3O8v0 zb3Gc}vNs_wvQjS#J%V``FaA%tcK&X%2TnQGA#Bhz!l2kE?#)#kYbaVMJ2&tFVc)2S zrheB=6#YU-CPJd7PThHJ>O2kOVDs^Sk|&R(a{(-09K$_X^}6a{5r`g*9{#+r5%Q|x zm~df*b+*Egp6s>oZ#D(3ZJ7?Bwm?w;q+HSinHPPRKc7#C--l4Rem#6IQ2>8kc1V4c zD8tZMyvZk~;bvVJydnLhLGrXg)}dp3cgWy{FRo$k4(2=P=z1JSzu(B`g}lj{{@mL3 z+&b&j3n=ihT5v@@EUOke)E@S($8fF3m*UN3>YXO*c6yg+dy^yT7ivK69#%epyolN) zUtd4Z3~t`%S%_S$HP+Rqwb81N;NJcP)7@q0;}a}E!+^JjSL##_e7_&L<(-~LZ)WR~ z$yt!yJi?&!{<+54@9DMq+EU&~U(IO^RBoRWJGVfFFNT&wUeh=9!xP<@G;`=aScbE< z`u)#;Db7HCcb%z!2|M**K@k2kF?~^;C;ZtI9A8#exc(` z_QiTowdxm&$-j%sEILP*sba(>Jzcx?80jW;^4xiu_c(%M%88I9?}|tcQ|g_Wdy(#N zx+vi(@VwBErLNo3sksaWWc3NABCjS;TTScLvWf)7s^xhzQ8*PHMoEfC;v{Dak$f*} zwPg!i&?975TIO7Gw}3qmcRu-SHC0V0fKS;&@$F-l@(_ft9kM|#F*t|(2Wrrfc@gt{ z)xjPAn_KoDP=oTnphi;60en)N1;l@s2I`h}Cid?C?Sm4dI4K9ph{}rw3_yaIe_079 z7L>r%wBCA&ggz50gjF{!5g4CKOc(sb{@WkI=-3bWqBz2BOzdb_C+U67%iH~&^{{{M z3zZl92!{-8ju+`4%8GzMk%kjnOAxe-Gpx-2Y`MIN=k8cN01UW!U;cc5*}Kqbe#lm- z@!R_O7NEk!V?v?+r+>TMR07{po#6mmDPmHvmhuDV_XE^;OVQ6jWBup%0aFTr+d?bu}T8vsHl4u#6c(da~@{AE!s0{L&0YB@&d(>f~G}xH*|2aZ#a$F>* zuj4cL4@;DP81VKMUr^>>W!%5c>R(_cM%nhuZWqz7h1dJiQKPDh5{6~Ti#Gv6Pa@+rc+|DX=rI@cOyl}1LIX_3R+Cd}JF`Qh z-9!sz+111;rWsCs%kaWU`ZtAIU*wP}e`&GD&d9CBWH>2f?GJE{_bdpmX)__v*%@U4 z@*nsu+uH&_i`7!N5)z^yHB5jjOuJ`E;h z7r3DrFq(fW?d`E48`9z4)Sg1+&X7p}SQ{P#@zv!V2`b+P8+TFvo++LVIQLoNMIM=l zMre>X#{*T%w#V7VN!oFkWZ+|XF_}Cs$~CfWgP(tIq17IUB&fN-nSoF;Yc41iE%G7C z%~1-3vKUPBf4i4YsK_P!gipN&gs8Tyh##T4W&3>zSQ5Ac8n2%j_Zs=O=!4n-Nx_W| zeEysoK=B+7`+V?RH*@GH4YDain8oAh--KX&yu%a;x~*?xeo zfR2M&YG(OL4~;UnZ~t@6P8q63=)SJl$d}mS|AHC5BE&zxf5gD{PUiH+hAxK2_O?bz zh@{W}TXRV}2Uizm7bjCg+kf9dm2LY?6--|Cmi-aO&YJ4Zc5Czwg7`MgL9Nt!8yDS9 zf+FkH8my2OsNIqhCh5H~$B~_oG`^c?kKe)}EYN5~MI}i0}#`iO(zdYtCc8XP*|p>vO3u$Z9-=GLE=yKSDVP$8cN_ubl`a# z(LT9;`*4!`E6re-CIpP#{d$&2;!A^CCA3ex6(m2_J<}BfRLv{&;M`W}5g4;2_c&Q& z+b(L&p_5v>&*F@B8rDI~z)^#(?+63aaa-ni)@k||9JkYw-0%c;>8%||AP@nXR3S0$&^>!1in3lbfrGj>X6PWTUBT_)QosVp#u8;}nm*97|`!g?ICsJP0Yu z-Qxx(ldt$2`EKK1SPlLmcgvA-)YG}S`z!?9Q;(h9q#8uO0J!?zGJd5-%>1+$%M`<9#qD8vu92Ws)WHJ_#; zIfCWHG(|%qS_{RWDhd+g8C4Lij;d)ao;<&b-7f`Y!ye}Rq>z*VhO||bo0u!YS{^*r z3lWC0Tgd4(W~~FHucN6l`?H}6qOC|31z{vw#q#(PIMkhA8(73;gx;pMIm@5LJ7|TY zN8)^bdK2wY2%Q9l`rXMCb_-%Qu?r(?mw2S%>Ji29lZH_r+^!znkVI}P{lWA60DJ9_ zzWO88^GEDf-s#C6pcIkRAz_a7Kp+Fz=+x!r83Meftsc#9=lhu?Ef!%@|LX@qR zOvwUF5$%Mc5F!d)d%FK@r9u@IwWMyk^X)my{K5Bf6|{Z);|6-m+bq!xv*)ehNz**L zan^QP&ad0~oDJZA*mfCuG(z-42lK|?VJ(O}nD=H^;#+Ghj0kuE=o{(~;w;$JZ?rd{ zfY4iF5+}}c#wTS!Qy(J|LE4IAfM5U$s5}%8?_i1LAXI*h}Gigd*8y>c+N*p>or07L|u2S1y<|XpxnUv(64V4Ez`{r%~93~87fwDTafnLFdk-UN8BsjGgxEbK~1?7KVQTv?ah?Q!`bzRXAAU^*GEMIn8d@bp;D zhEffZYX)UF+uc#G^H2?z9Cj>aq}^HyFN5~%cs~#33cBajP|jUEPvZSDdZr%(s!Z8T zQ8m44-pP$~ahYo_E-olqI5$6djQVB^4+ExF*cyM&?1tu6LyUZ8Gxs@om_cI2;b^a<<)&$|iT@BQR4G~C(( zV)JaICPH zaQcgoWP0pO)<-D-m;#fELezD+ucTM}1_zuLNBQ~;>C8bHR$}q`$||fSaDaYW(c+Ra z2_wO2m*^PJ(4F$~?g+|{!5v=C;PQ5pjCi4eb|utoY@zz>)HO>>+iCbVd!ta;1*Paz z-!U0(+QvmE?rhW2#>=JwIqFN7*zB3+MbCy_P-B4SId%JGyKlPsu|_(t&!{GbZu|S{ zOYwQx&XJT%!RyTeXtEL>6~K}beV(c+Z+T6^dQQ%|J`Ni(Ukta;F^ zBbd=@!2Vz`cPYBplKD?Dy3-H=;3Dy))J*X6@Zm&@lrXBp((0s z_ua>^w79}-mj~7$?|y1roH99f>wu1BiF0w7Z1Gfi6-$a!>0NmFloM5@jA@IqrY#kk zoM}wC3Rg;V3Damf3vfcGbisn^K5L@mwv!5YQnQkY#WT2OK&777bQ@&TF%ue4xux0< zsF4M`7RSQj@LyjF0i-NVn_c!BZiFy5;i#8m^e*Cm2>T|>d#^{^7;nhyy7;?rNgPWS zPcF$DqZaW~h`38Qrz{$(L*O~7F8EhQ4(NCWc16Mx`4}!y>}|YL@`?BVR|?|)SR<$T zYCzn;{lAJ_R*P5-)? zdbsA=H8dd0L80G-OlB2F#K<#it=wAKx-Iee0FYoQIZJqpoC-$X5 zT6Q@h?fRnO8`-u_{UPj~@}TV9@^IW!_GmdQOI=z?pCulvhZ+1L3B!Jqk5fwirW@~O z>lzG@>RJqS=Tr!Bm%hWt`CYl=i?Fowsr1)B@Q2hNB1t})U;MME!^;__$+H!RCy#+gB5T7t^RBOe3)`KK$StxanvC)sOPv60V)$^+8(PdBi%lrs2 zC9Tj)sFmo#zCXPdX_-_6{niUWmI536Oa++!fl5}|v{)Mbk)1(!BBf zS_Fl-vE(oJ7YCt5tY)Qktq6GnV z%hua8LSNl3*pw2B581~uYa5g+PiR-yGw~@;-6

e$TqG}Gw8EzDbei7 z4LkFTX{?MyN!8+3$7m8zB3;GR87SxjIKfl38Y7aH)iUpx*Gu&tMMg}KQ(r$8_=nqf_8P9EAB)V0+m7GEu*#q zb3AxBGL2Ik!4k954$yJv$~@p&D>235U~);F=Tt6+r>UMK_tH$j*!6 zWz#X#+kCY~f?Ug{?5_Gu6=9`KGUm`t&Z*pH$t%1mGACD#(|FOrKMOa4wd2~k&05@D z+G4KUe`?%4BEJ+wN*i2hALwwt0cLz~AysIkoUmHUJ%qj=PhE4^&G`LI#RufBQm<+$ z)#G@pz!_0=!*kAbk2{zMMWF!9mewx(XpthrN*^)9hQ6c8?@^+CO|(y-Zcp5A3Vgrp z;9t1pb2g20Oj>8~EzNS#e2>_sbr%vj&vcO=aTaWH+%oX49z076+LV9h6tpde znrrTB_%!ei;lT`-j09=D4=o+Yc*~XAYN2@#S0F9p#8}<-NH8SC|KtUf+VtEOYK0#c zQ2m0{)1UdXVrCzcHNtWgGodOw-5ItHENf;H|9v zacab_qogn#MlwExbf-X?8ZXZ6>W=j}tvHzUK1E%}peE_yr4=Pt_Y6bZVl{RVH{;R} z8qsf+)L_~6BD*2eaajTI; z4_S6SHD6oYLoMDL(ZMd>i{N@^p-_`lI*7U7ZRC(U?pcrNlRN%NPQd8FTJO=FfM2vC zK{pnqjZTQ45=Zx2Ldytl2CL?qTuKcdE-kVCVncXAA2Ch93WNp#L!rw*@j@nS*ExXz zBh4W^F=fB-`wT7lj4lP6PnXkp>WXw7bWM>7X=gI7Pr3qjj_^86_14mnLPA2;`Y^iy zk?ui3n&M1l3A*&!RFXGq&YmC7v=v_?ahbMbCf1TXX7a~an>$jf{5b2CP@A`hu`&lczoOQMpgWv-Ha z@E<>{EwaV;+hxRll@a=;n)=3)eWIV;+S&}=Z$)44c=@Dt-}7EwKc|oXKpcVPh$S#W z=Qm0KM0*2O?OKf6e3xsO8yh`4|0pjQ2&#McoX<*(A~9J5I0jNo;5SX+Z7Ze57OIn= z=?W+blU&*{>i9A(;SbcWW?v)TVcTw`pPp;$5PJ0z`oWuIG(^+uCh*5$&s&SaU^`Ne zJO9MGG~`)}_MBf!#-X~n9(Dc+V2Lg)Ip^w_2&K0yH_tsLXy8x8r@pYBefCXY38Y+X z-K=ugRSvKN*jVnZkI%TzW4xfepOE1f^WUqz!qU#G4_8PVryLu9rf2|2R<;bk7=G*x9oBH&#ZfS2avY z)V1Xc*SwyRMR}S&3dlAq%V#0-5;(UCoJon-kp3eRw5Mdpb`$YE_!e$CkgKwhGBXf$d zpUo3ci-q2=?1-)(^4a?jy7g?x5qkVWwypoMF72N-?T;(M|6eWfKbZEvii&@{6#vyX zOZkV0B8bVmXs6ks8&V)jr7{egjILYmUQq@yZ`DqU4Yxa7%)Mu|PPSQ%q|Z9<(Mx9G zb3bg3Vp&LWyZ$09^YP=1om#4$bSTZ=V{W

ss%cW5E0zzS+gw!u!H5(aRi_(_LWNx~ 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Ν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ξ#Pt>SEY0ezFPVRJ|y`+$yL_&3=7Z?Mqr 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 diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index 9dfda7b..c69b381 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 226L; + public static final long BUILD_NUMBER = 231L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } diff --git a/src/org/catacombae/dmgx/DMGBlockHandlers.java b/src/org/catacombae/dmgx/DMGBlockHandlers.java index b59f472..e626bdb 100644 --- a/src/org/catacombae/dmgx/DMGBlockHandlers.java +++ b/src/org/catacombae/dmgx/DMGBlockHandlers.java @@ -32,7 +32,7 @@ public static void processZlibBlock(DMGBlock block, RandomAccessFile dmgRaf, Ran boolean testOnly, UserInterface ui) throws IOException, DataFormatException { inflater.reset(); - dmgRaf.seek(/*block.lastOffs+*/block.inOffset); + dmgRaf.seek(/*block.lastOffs+*/block.getInOffset()); /* * medan det finns komprimerat data att läsa: @@ -43,21 +43,21 @@ public static void processZlibBlock(DMGBlock block, RandomAccessFile dmgRaf, Ran */ long totalBytesRead = 0; - while(totalBytesRead < block.inSize) { - long bytesRemainingToRead = block.inSize-totalBytesRead; + while(totalBytesRead < block.getInSize()) { + long bytesRemainingToRead = block.getInSize()-totalBytesRead; int curBytesRead = dmgRaf.read(inBuffer, 0, (int)Math.min(bytesRemainingToRead, inBuffer.length)); ui.reportProgress((int)(dmgRaf.getFilePointer()*100/dmgRaf.length())); if(curBytesRead < 0) - throw new RuntimeException("Unexpectedly reached end of file. (bytesRemainingToRead=" + bytesRemainingToRead + ", curBytesRead=" + curBytesRead + ", totalBytesRead=" + totalBytesRead + ", block.inSize=" + block.inSize + ", inBuffer.length=" + inBuffer.length + ")"); + throw new RuntimeException("Unexpectedly reached end of file. (bytesRemainingToRead=" + bytesRemainingToRead + ", curBytesRead=" + curBytesRead + ", totalBytesRead=" + totalBytesRead + ", block.getInSize()=" + block.getInSize() + ", inBuffer.length=" + inBuffer.length + ")"); else { totalBytesRead += curBytesRead; inflater.setInput(inBuffer, 0, curBytesRead); long totalBytesInflated = 0; while(!inflater.needsInput() && !inflater.finished()) { - long bytesRemainingToInflate = block.outSize-totalBytesInflated; + long bytesRemainingToInflate = block.getOutSize()-totalBytesInflated; //System.out.println(); //System.out.println("inflater.needsInput()" + inflater.needsInput()); int curBytesInflated = inflater.inflate(outBuffer, 0, diff --git a/src/org/catacombae/dmgx/DMGExtractor.java b/src/org/catacombae/dmgx/DMGExtractor.java index 85a25af..f63e24a 100644 --- a/src/org/catacombae/dmgx/DMGExtractor.java +++ b/src/org/catacombae/dmgx/DMGExtractor.java @@ -78,20 +78,24 @@ public class DMGExtractor { public static void main(String[] args) throws Exception { try { - notmain(args); + extractProcedure(args); } catch(Exception e) { - if(graphical) - JOptionPane.showMessageDialog(null, "The program encountered an unexpected error: " + e.toString() + - "\nClosing...", "Error", JOptionPane.ERROR_MESSAGE); + if(graphical) { + String stackTrace = e.toString() + "\n"; + for(StackTraceElement ste : e.getStackTrace()) + stackTrace += " " + ste.toString() + "\n"; + JOptionPane.showMessageDialog(null, "The program encountered an uncaught exception:\n" + stackTrace + + "\nCan not recover. Exiting...", "Error", JOptionPane.ERROR_MESSAGE); + } throw e; } } - public static void notmain(String[] args) throws Exception { + public static void extractProcedure(String[] args) throws Exception { if(debug) verbose = true; parseArgs(args); - + printlnVerbose("Processing: " + dmgFile); RandomAccessFile dmgRaf = new RandomAccessFile(dmgFile, "r"); RandomAccessFile isoRaf = null; @@ -489,12 +493,12 @@ else if(blockType == BT_END) { int i = 1; DMGBlock previous = null; for(DMGBlock b : merged) { - if(previous == null && b.inOffset > 0) { + if(previous == null && b.getInOffset() > 0) { String filename = i++ + ".block"; println(" " + new File(filename).getCanonicalPath() + "..."); FileOutputStream curFos = new FileOutputStream(new File(filename)); dmgRaf.seek(0); - byte[] data = new byte[(int)(b.inOffset)]; + byte[] data = new byte[(int)(b.getInOffset())]; dmgRaf.read(data); curFos.write(data); curFos.close(); @@ -503,20 +507,20 @@ else if(previous != null) { String filename = i++ + ".block"; println(" " + new File(filename).getCanonicalPath() + "..."); FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(previous.inOffset+previous.inSize); - byte[] data = new byte[(int)(b.inOffset-(previous.inOffset+previous.inSize))]; + dmgRaf.seek(previous.getInOffset()+previous.getInSize()); + byte[] data = new byte[(int)(b.getInOffset()-(previous.getInOffset()+previous.getInSize()))]; dmgRaf.read(data); curFos.write(data); curFos.close(); } previous = b; } - if(previous.inOffset+previous.inSize != dmgRaf.length()) { + if(previous.getInOffset()+previous.getInSize() != dmgRaf.length()) { String filename = i++ + ".block"; println(" " + new File(filename).getCanonicalPath() + "..."); FileOutputStream curFos = new FileOutputStream(new File(filename)); - dmgRaf.seek(previous.inOffset+previous.inSize); - byte[] data = new byte[(int)(dmgRaf.length()-(previous.inOffset+previous.inSize))]; + dmgRaf.seek(previous.getInOffset()+previous.getInSize()); + byte[] data = new byte[(int)(dmgRaf.length()-(previous.getInOffset()+previous.getInSize()))]; dmgRaf.read(data); curFos.write(data); curFos.close(); @@ -859,9 +863,9 @@ public static LinkedList mergeBlocks(LinkedList blockList) { DMGBlock current; while(it.hasNext()) { current = it.next(); - if(current.inSize != 0) { - if(current.inOffset == previous.inOffset+previous.inSize) { - DMGBlock mergedBlock = new DMGBlock(previous.blockType, previous.skipped, previous.outOffset, previous.outSize+current.outSize, previous.inOffset, previous.inSize+current.inSize); + if(current.getInSize() != 0) { + if(current.getInOffset() == previous.getInOffset()+previous.getInSize()) { + DMGBlock mergedBlock = new DMGBlock(previous.getBlockType(), previous.getSkipped(), previous.getOutOffset(), previous.getOutSize()+current.getOutSize(), previous.getInOffset(), previous.getInSize()+current.getInSize()); previous = mergedBlock; } else { diff --git a/src/org/catacombae/dmgx/Debug.java b/src/org/catacombae/dmgx/Debug.java index e5cbf2b..5d87a0d 100644 --- a/src/org/catacombae/dmgx/Debug.java +++ b/src/org/catacombae/dmgx/Debug.java @@ -1,7 +1,7 @@ package org.catacombae.dmgx; public class Debug { - public boolean debug = true; + public static boolean debug = true; public static void warning(String message) { if(debug) diff --git a/src/org/catacombae/dmgx/DmgInputStream.java b/src/org/catacombae/dmgx/DmgInputStream.java index edbcf40..d03e6a5 100644 --- a/src/org/catacombae/dmgx/DmgInputStream.java +++ b/src/org/catacombae/dmgx/DmgInputStream.java @@ -40,19 +40,20 @@ public DmgInputStream(RandomAccessFile raf) throws IOException { } public int available() throws IOException { - long avaliable = totalReadableBytes; + long available = totalReadableBytes; available -= bytesRead; - if(available > Integer.MAX_INT) - return Integer.MAX_INT; + if(available > Integer.MAX_VALUE) + return Integer.MAX_VALUE; else return (int)available; } + /* IMPLEMENT: */ public void close() throws IOException {} public void mark(int readlimit) {} - public boolean markSupported() {} - public int read() throws IOException {} - public int read(byte[] b) throws IOException {} - public int read(byte[] b, int off, int len) throws IOException {} + public boolean markSupported() { return false; } + public int read() throws IOException { return -1; } + public int read(byte[] b) throws IOException { return -1; } + public int read(byte[] b, int off, int len) throws IOException { return -1; } public void reset() throws IOException {} - public long skip(long n) throws IOException {} + public long skip(long n) throws IOException { return -1; } } diff --git a/src/org/catacombae/dmgx/DmgPlistPartition.java b/src/org/catacombae/dmgx/DmgPlistPartition.java index 74b6819..6cb033b 100644 --- a/src/org/catacombae/dmgx/DmgPlistPartition.java +++ b/src/org/catacombae/dmgx/DmgPlistPartition.java @@ -1,11 +1,14 @@ package org.catacombae.dmgx; +import java.util.*; +import java.io.IOException; public class DmgPlistPartition { private String name; private String id; private String attributes; private DMGBlock[] blockList; - public DmgPlistPartition(String name, String id, String attributes, byte[] data) { + private long partitionSize; + public DmgPlistPartition(String name, String id, String attributes, byte[] data) throws IOException { this.name = name; this.id = id; this.attributes = attributes; diff --git a/src/org/catacombae/dmgx/DmgRandomAccessStream.java b/src/org/catacombae/dmgx/DmgRandomAccessStream.java index 0a98c00..cebdd0e 100644 --- a/src/org/catacombae/dmgx/DmgRandomAccessStream.java +++ b/src/org/catacombae/dmgx/DmgRandomAccessStream.java @@ -1,4 +1,6 @@ +package org.catacombae.dmgx; import org.catacombae.io.RandomAccessStream; +import java.io.*; public class DmgRandomAccessStream implements RandomAccessStream { public DmgRandomAccessStream() { @@ -9,19 +11,19 @@ public DmgRandomAccessStream() { public void close() throws IOException {} /** @see java.io.RandomAccessFile */ - public long getFilePointer() throws IOException {} + public long getFilePointer() throws IOException { return -1; } /** @see java.io.RandomAccessFile */ - public long length() throws IOException {} + public long length() throws IOException { return -1; } /** @see java.io.RandomAccessFile */ - public int read() throws IOException {} + public int read() throws IOException { return -1; } /** @see java.io.RandomAccessFile */ - public int read(byte[] b) throws IOException {} + public int read(byte[] b) throws IOException { return -1; } /** @see java.io.RandomAccessFile */ - public int read(byte[] b, int off, int len) throws IOException {} + public int read(byte[] b, int off, int len) throws IOException { return -1; } /** @see java.io.RandomAccessFile */ public void seek(long pos) throws IOException {} diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java index 146c6f1..21a8206 100644 --- a/src/org/catacombae/dmgx/Plist.java +++ b/src/org/catacombae/dmgx/Plist.java @@ -47,7 +47,7 @@ public Plist(byte[] data, int offset, int length) { public byte[] getData() { return Util.createCopy(plistData); } - public DmgPlistPartition[] getPartitions() { + public DmgPlistPartition[] getPartitions() throws IOException { LinkedList partitionList = new LinkedList(); XMLNode current = rootNode; current = current.cd("dict"); From 38c1aa07f470d4c18e35dd2b678001a311c55f75 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Thu, 5 Apr 2007 13:29:51 +0000 Subject: [PATCH 022/109] DmgRandomAccessStream works! Integrated into HFSExplorer and functioning nicely... (much work has been done) --- buildhfsxlib.bat | 37 +++ lib/dmgextractor.jar | Bin 199773 -> 211896 bytes src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGBlock.java | 44 ++- .../catacombae/dmgx/DMGBlockInputStream.java | 269 ++++++++++++++++++ src/org/catacombae/dmgx/Debug.java | 9 +- src/org/catacombae/dmgx/DmgFile.java | 17 +- src/org/catacombae/dmgx/DmgFileView.java | 7 +- src/org/catacombae/dmgx/DmgInputStream.java | 4 +- .../catacombae/dmgx/DmgPlistPartition.java | 83 +++++- .../dmgx/DmgRandomAccessStream.java | 155 +++++++++- src/org/catacombae/dmgx/ExtractPlist.java | 3 +- src/org/catacombae/dmgx/Plist.java | 12 +- src/org/catacombae/dmgx/ValidateDmg.java | 6 +- 14 files changed, 615 insertions(+), 33 deletions(-) create mode 100644 buildhfsxlib.bat create mode 100644 src/org/catacombae/dmgx/DMGBlockInputStream.java diff --git a/buildhfsxlib.bat b/buildhfsxlib.bat new file mode 100644 index 0000000..f9d1284 --- /dev/null +++ b/buildhfsxlib.bat @@ -0,0 +1,37 @@ +@echo off +:begin +setlocal + +set SOURCES_DIR=src +set CLASSFILES_DIR=build.~ +set LIBRARY_PATH=lib +set JARFILE=hfsx_dmglib.jar +set MANIFEST=meta\manifest.txt +set BUILD_CP=%CLASSFILES_DIR% +set BUILDTOOLS_CP=buildenumerator\buildenumerator.jar + +pushd %~dp0 + +echo Removing all class files... +if exist %CLASSFILES_DIR% rmdir /s /q %CLASSFILES_DIR% +mkdir %CLASSFILES_DIR% + +echo Compiling org.catacombae.dmgx.DmgRandomAccessStream (and dependencies)... +javac -sourcepath %SOURCES_DIR% -d %CLASSFILES_DIR% -Xlint:unchecked %SOURCES_DIR%\org\catacombae\dmgx\DmgRandomAccessStream.java +set JAVAC_EXIT_CODE=%ERRORLEVEL% +if not "%JAVAC_EXIT_CODE%"=="0" goto error + +echo Building jar-file... +if not exist %LIBRARY_PATH% mkdir %LIBRARY_PATH% +jar cvf %LIBRARY_PATH%\%JARFILE% -C %CLASSFILES_DIR% . >NUL: +if "%ERRORLEVEL%"=="0" (echo Done!) else echo Problems while building jar-file... + +popd +goto end + +:error +echo There were errors... +goto end + +:end +endlocal diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 360541d7c195a520acbe68b6da587b0dafe9f2ec..3b271c62a4c9f8ace3dbb06890ff37585243243c 100644 GIT binary patch delta 35986 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 JLcjy0{{!t=#+Cp8 delta 24054 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 diff --git a/src/org/catacombae/dmgx/BuildNumber.java b/src/org/catacombae/dmgx/BuildNumber.java index c69b381..bf01bca 100644 --- a/src/org/catacombae/dmgx/BuildNumber.java +++ b/src/org/catacombae/dmgx/BuildNumber.java @@ -22,7 +22,7 @@ public class BuildNumber { //[BuildEnumerator:Opening] WARNING: The following lines are managed by an external program. Do NOT change. - public static final long BUILD_NUMBER = 231L; + public static final long BUILD_NUMBER = 267L; //[BuildEnumerator:Closing] The lines managed by an external program end here. } diff --git a/src/org/catacombae/dmgx/DMGBlock.java b/src/org/catacombae/dmgx/DMGBlock.java index 0093ece..bba2bdc 100644 --- a/src/org/catacombae/dmgx/DMGBlock.java +++ b/src/org/catacombae/dmgx/DMGBlock.java @@ -65,6 +65,9 @@ public class DMGBlock { private long inOffset; private long inSize; + private long outOffsetComp = 0; + private long inOffsetComp = 0; + public DMGBlock(byte[] data, int offset) { this.blockType = Util.readIntBE(data, offset+0); this.skipped = Util.readIntBE(data, offset+4); @@ -72,7 +75,6 @@ public DMGBlock(byte[] data, int offset) { this.outSize = Util.readLongBE(data, offset+16)*0x200; this.inOffset = Util.readLongBE(data, offset+24); this.inSize = Util.readLongBE(data, offset+32); - } public DMGBlock(int blockType, int skipped, long outOffset, long outSize, long inOffset, long inSize) { @@ -91,7 +93,45 @@ public DMGBlock(int blockType, int skipped, long outOffset, long outSize, long i public long getInOffset() { return inOffset; } public long getInSize() { return inSize; } + public String getBlockTypeAsString() { + switch(blockType) { + case BT_ADC: + return "BT_ADC"; + case BT_ZLIB: + return "BT_ZLIB"; + case BT_BZIP2: + return "BT_BZIP2"; + case BT_COPY: + return "BT_COPY"; + case BT_ZERO: + return "BT_ZERO"; + case BT_ZERO2: + return "BT_ZERO2"; + case BT_END: + return "BT_END"; + case BT_UNKNOWN: + return "BT_UNKNOWN"; + default: + return "[Unknown block type! ID=0x" + Integer.toHexString(blockType) + "]"; + } + } + + public void setOutOffsetCompensation(long offset) { + outOffsetComp = offset; + } + public void setInOffsetCompensation(long offset) { + inOffsetComp = offset; + } + public long getTrueOutOffset() { + return outOffset+outOffsetComp; + } + public long getTrueInOffset() { + return inOffset+inOffsetComp; + } + public String toString() { - return "[type: 0x" + Integer.toHexString(blockType) + " skipped: 0x" + Integer.toHexString(skipped) + " outOffset: " + outOffset + " outSize: " + outSize + " inOffset: " + inOffset + " inSize: " + inSize + "]"; + return getBlockTypeAsString() + + "(skipped=0x" + Integer.toHexString(skipped) + ",outOffset=" + outOffset + + ",outSize=" + outSize + ",inOffset=" + inOffset + ",inSize=" + inSize + ",outOffsetComp=" + outOffsetComp + ",inOffsetComp=" + inOffsetComp + ")"; } } diff --git a/src/org/catacombae/dmgx/DMGBlockInputStream.java b/src/org/catacombae/dmgx/DMGBlockInputStream.java new file mode 100644 index 0000000..cdadc75 --- /dev/null +++ b/src/org/catacombae/dmgx/DMGBlockInputStream.java @@ -0,0 +1,269 @@ +/*- + * Copyright (C) 2006-2007 Erik Larsson + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA + */ + +package org.catacombae.dmgx; + +import org.catacombae.io.*; +import java.io.*; +import java.util.zip.*; + +public abstract class DMGBlockInputStream extends InputStream { + protected RandomAccessStream raf; + protected DMGBlock block; + protected final int addInOffset; + private long globalBytesRead; + protected final byte[] buffer = new byte[16384]; // 16 KiB buffer... is it reasonable? + protected int bufferPos = 0; + protected int bufferDataLength = 0; // Initializing this to zero will make read call fillBuffer at first call + + private final byte[] skipBuffer = new byte[4096]; + + protected int fillSize; // Subclasses use this variable to report how many bytes were read into the buffer + + /** + * Creates a new DMGBlockInputStream. + * @param raf the RandomAccessFile representing the DMG file + * @param block the block that we should read (usually obtained via DmgPlistPartition.getBlocks()) + * @param addInOffset the number to add to the block's inOffset to find the data + */ + protected DMGBlockInputStream(RandomAccessStream raf, DMGBlock block, int addInOffset) throws IOException { + this.raf = raf; + this.block = block; + this.addInOffset = addInOffset; + //fillBuffer(); + //bufferPos = buffer.length; + } + + /** This method WILL throw a RuntimeException if block has a type that there is no handler for. */ + public static DMGBlockInputStream getStream(RandomAccessStream raf, DMGBlock block) throws IOException { + switch(block.getBlockType()) { + case DMGBlock.BT_ZLIB: + return new ZlibBlockInputStream(raf, block, 0); + case DMGBlock.BT_COPY: + return new CopyBlockInputStream(raf, block, 0); + case DMGBlock.BT_ZERO: + case DMGBlock.BT_ZERO2: + return new ZeroBlockInputStream(raf, block, 0); + case DMGBlock.BT_END: + case DMGBlock.BT_UNKNOWN: + throw new RuntimeException("Block type is a marker and contains no data."); + case DMGBlock.BT_ADC: + case DMGBlock.BT_BZIP2: + default: + throw new RuntimeException("No handler for block type " + block.getBlockTypeAsString()); + } + } + + /** In case the available amount of bytes is larger than Integer.MAX_INT, Integer.MAX_INT is returned. */ + public int available() throws IOException { + long available = block.getOutSize()-globalBytesRead; + if(available > Integer.MAX_VALUE) + return Integer.MAX_VALUE; + else + return (int)available; + } + /** This method does NOT close the underlying RandomAccessFile. It can be reused afterwards. */ + public void close() throws IOException {} + /** Not supported. */ + public void mark(int readlimit) {} + /** Returns false, beacuse it isn't supported. */ + public boolean markSupported() { return false; } + + /** @see java.io.InputStream */ + public int read() throws IOException { + byte[] b = new byte[1]; + return read(b, 0, 1); + } + + /** @see java.io.InputStream */ + public int read(byte[] b) throws IOException { return read(b, 0, b.length); } + + /** @see java.io.InputStream */ + public int read(byte[] b, int off, int len) throws IOException { +// System.out.println("DMGBlockInputStream.read(b, " + off + ", " + len + ") {"); + + final int bytesToRead = len; + + int bytesRead = 0; + int outPos = off; + while(bytesRead < bytesToRead) { + int bytesRemainingInBuffer = bufferDataLength - bufferPos; + if(bytesRemainingInBuffer == 0) { +// System.out.println(" first call to fillBuffer"); + fillBuffer(); +// System.out.println(" bufferDataLength=" + bufferDataLength + ",bufferPos=" + bufferPos); + bytesRemainingInBuffer = bufferDataLength - bufferPos; + if(bytesRemainingInBuffer == 0) { // We apparently have no more data. + if(bytesRead == 0) { + //System.out.println("return: -1 }"); + return -1; + } + else break; + } + } +// System.out.println(" bytesRemainingInBuffer=" + bytesRemainingInBuffer + ",bufferPos=" + bufferPos + ",bufferDataLength=" + bufferDataLength); + int bytesToReadFromBuffer = ((bytesToRead-bytesRead < bytesRemainingInBuffer) ? bytesToRead-bytesRead : bytesRemainingInBuffer); +// System.out.println(" bytesToReadFromBuffer=" + bytesToReadFromBuffer); +// System.out.println(" System.arraycopy(buffer, " + bufferPos + ", b, " + outPos + ", " + bytesToReadFromBuffer + ");"); + System.arraycopy(buffer, bufferPos, b, outPos, bytesToReadFromBuffer); + + outPos += bytesToReadFromBuffer; + bufferPos += bytesToReadFromBuffer; + + bytesRead += bytesToReadFromBuffer; + } + + globalBytesRead += bytesRead; + +// System.out.println("return: " + bytesRead + " }"); + return bytesRead; + } + /** Does nothing. Not supported. */ + public void reset() throws IOException {} + /** Skips as many bytes as possible. If end of file is reached, the number of bytes skipped is returned. */ + public long skip(long n) throws IOException { + long bytesSkipped = 0; + while(bytesSkipped < n) { + int curSkip = (n-bytesSkipped < skipBuffer.length)?(int)(n-bytesSkipped):skipBuffer.length; + int res = read(skipBuffer, 0, curSkip); + if(res > 0) + bytesSkipped += res; + else + break; + } + return bytesSkipped; + } + + protected abstract void fillBuffer() throws IOException; + + public static class ZlibBlockInputStream extends DMGBlockInputStream { + //private static byte[] inBuffer = new byte[0x40000]; + //private static byte[] outBuffer = new byte[0x40000]; + private final Inflater inflater; + private final byte[] inBuffer; + private long inPos; + + public ZlibBlockInputStream(RandomAccessStream raf, DMGBlock block, int addInOffset) throws IOException { + super(raf, block, addInOffset); + inflater = new Inflater(); + inBuffer = new byte[4096]; + inPos = 0; +// if(inflater == null) +// System.err.println("INFLATER IS NULL"); +// else +// System.err.println("inflater is " + inflater); +// if(inBuffer == null) +// System.err.println("INBUFFER IS NULL"); +// else +// System.err.println("inBuffer is " + inBuffer); + feedInflater(); + } + private void feedInflater() throws IOException { + //System.out.println("ZlibBlockInputStream.feedInflater() {"); + long seekPos = addInOffset+inPos+block.getTrueInOffset(); + //System.out.println(" seeking to " + seekPos + " (file length: " + raf.length() + ")"); + raf.seek(seekPos); + long bytesLeftToRead = block.getInSize()-inPos; + int bytesToFeed = (inBuffer.length= 0) + bytesInflated += res; + else + throw new RuntimeException("Negative return value when inflating"); + } + + // The fillBuffer method is responsible for updating bufferPos and bufferDataLength + bufferPos = 0; + bufferDataLength = bytesInflated; + } catch(DataFormatException e) { + IOException ioe = new IOException("Invalid zlib data!"); + ioe.initCause(e); + throw ioe; + } + //System.out.println("}"); + } + } + public static class CopyBlockInputStream extends DMGBlockInputStream { + private long inPos = 0; + public CopyBlockInputStream(RandomAccessStream raf, DMGBlock block, int addInOffset) throws IOException { + super(raf, block, addInOffset); + } + + protected void fillBuffer() throws IOException { + raf.seek(addInOffset+inPos+block.getTrueInOffset()); + + final int bytesToRead = (int)Math.min(block.getInSize()-inPos, buffer.length); + int totalBytesRead = 0; + while(totalBytesRead < bytesToRead) { + int bytesRead = raf.read(buffer, 0, bytesToRead-totalBytesRead); + if(bytesRead < 0) + break; + else { + totalBytesRead += bytesRead; + inPos += bytesRead; + } + } + + // The fillBuffer method is responsible for updating bufferPos and bufferDataLength + bufferPos = 0; + bufferDataLength = totalBytesRead; + } + } + public static class ZeroBlockInputStream extends DMGBlockInputStream { + private long outPos = 0; + public ZeroBlockInputStream(RandomAccessStream raf, DMGBlock block, int addInOffset) throws IOException { + super(raf, block, addInOffset); + } + + protected void fillBuffer() throws IOException { + final int bytesToWrite = (int)Math.min(block.getOutSize()-outPos, buffer.length); + Util.zero(buffer, 0, bytesToWrite); + outPos += bytesToWrite; + + // The fillBuffer method is responsible for updating bufferPos and bufferDataLength + bufferPos = 0; + bufferDataLength = bytesToWrite; + } + } +} diff --git a/src/org/catacombae/dmgx/Debug.java b/src/org/catacombae/dmgx/Debug.java index 5d87a0d..2037510 100644 --- a/src/org/catacombae/dmgx/Debug.java +++ b/src/org/catacombae/dmgx/Debug.java @@ -5,6 +5,11 @@ public class Debug { public static void warning(String message) { if(debug) - System.out.println(message); + System.err.println(message); } -} \ No newline at end of file + + public static void notification(String message) { + if(debug) + System.out.println("------->NOTE: " + message); + } +} diff --git a/src/org/catacombae/dmgx/DmgFile.java b/src/org/catacombae/dmgx/DmgFile.java index 7f92918..37a3c9e 100644 --- a/src/org/catacombae/dmgx/DmgFile.java +++ b/src/org/catacombae/dmgx/DmgFile.java @@ -20,14 +20,23 @@ package org.catacombae.dmgx; +import org.catacombae.io.*; import java.io.*; public class DmgFile { - private File file; + private RandomAccessStream stream; private DmgFileView dmgView; - public DmgFile(File file) { - this.file = file; - this.dmgView = new DmgFileView(file); + public DmgFile(RandomAccessStream stream) { + this.stream = stream; + this.dmgView = new DmgFileView(stream); + } + + public DmgFileView getView() { + return dmgView; + } + + public RandomAccessStream getStream() { + return stream; } } diff --git a/src/org/catacombae/dmgx/DmgFileView.java b/src/org/catacombae/dmgx/DmgFileView.java index a78a933..26f922a 100644 --- a/src/org/catacombae/dmgx/DmgFileView.java +++ b/src/org/catacombae/dmgx/DmgFileView.java @@ -20,21 +20,22 @@ package org.catacombae.dmgx; +import org.catacombae.io.*; import java.io.*; public class DmgFileView { //private File file; - private RandomAccessFile dmgRaf; + private RandomAccessStream dmgRaf; public DmgFileView(File file) { try { //this.file = file; - this.dmgRaf = new RandomAccessFile(file, "r"); + this.dmgRaf = new RandomAccessFileStream(new RandomAccessFile(file, "r")); } catch(IOException ioe) { throw new RuntimeException(ioe); } } - public DmgFileView(RandomAccessFile dmgRaf) { + public DmgFileView(RandomAccessStream dmgRaf) { this.dmgRaf = dmgRaf; } diff --git a/src/org/catacombae/dmgx/DmgInputStream.java b/src/org/catacombae/dmgx/DmgInputStream.java index d03e6a5..6a11c97 100644 --- a/src/org/catacombae/dmgx/DmgInputStream.java +++ b/src/org/catacombae/dmgx/DmgInputStream.java @@ -1,4 +1,6 @@ package org.catacombae.dmgx; + +import org.catacombae.io.*; import java.io.*; /** @@ -15,7 +17,7 @@ public class DmgInputStream extends InputStream { public DmgInputStream(RandomAccessFile raf) throws IOException { this.raf = raf; - this.dmgView = new DmgFileView(raf); + this.dmgView = new DmgFileView(new RandomAccessFileStream(raf)); this.plist = dmgView.getPlist(); DmgPlistPartition[] parts = plist.getPartitions(); diff --git a/src/org/catacombae/dmgx/DmgPlistPartition.java b/src/org/catacombae/dmgx/DmgPlistPartition.java index 6cb033b..e32d3f6 100644 --- a/src/org/catacombae/dmgx/DmgPlistPartition.java +++ b/src/org/catacombae/dmgx/DmgPlistPartition.java @@ -8,10 +8,23 @@ public class DmgPlistPartition { private String attributes; private DMGBlock[] blockList; private long partitionSize; - public DmgPlistPartition(String name, String id, String attributes, byte[] data) throws IOException { + + // Incoming variables + private final long previousOutOffset; + private final long previousInOffset; + + // Outgoing variables + private long finalOutOffset = -1; + private long finalInOffset = -1; + + public DmgPlistPartition(String name, String id, String attributes, byte[] data, + long previousOutOffset, long previousInOffset) throws IOException { this.name = name; this.id = id; this.attributes = attributes; + this.previousOutOffset = previousOutOffset; + this.previousInOffset = previousInOffset; + this.blockList = parseBlocks(data); this.partitionSize = DMGExtractor.calculatePartitionSize(data); } @@ -28,6 +41,10 @@ public String getAttributes() { return attributes; } + public long getPartitionSize() { + return partitionSize; + } + public DMGBlock[] getBlocks() { DMGBlock[] res = new DMGBlock[blockList.length]; for(int i = 0; i < res.length; ++i) @@ -38,19 +55,71 @@ public DMGBlock[] getBlocks() { public int getBlockCount() { return blockList.length; } + + public long getFinalOutOffset() { + if(finalOutOffset < 0) + throw new RuntimeException("parseBlocks has not yet been called!"); + return finalOutOffset; + } + public long getFinalInOffset() { + if(finalInOffset < 0) + throw new RuntimeException("parseBlocks has not yet been called!"); + return finalInOffset; + } - private static DMGBlock[] parseBlocks(byte[] data) { + private DMGBlock[] parseBlocks(byte[] data) { int offset = 0xCC; + int blockNumber = 0; // Increments by one for each block we read (each iteration in the while loop below) + + /* These two variables are part of the "hack" described below. */ + long lastByteReadInBlock = -1; + boolean addInOffset = false; + LinkedList blocks = new LinkedList(); while(offset <= data.length-40) { - blocks.add(new DMGBlock(data, offset)); + DMGBlock currentBlock = new DMGBlock(data, offset); + + // Set compensation to the end of the output data of the previous partition to get true offset in outfile. + currentBlock.setOutOffsetCompensation(previousOutOffset); + + // Update pointer to the last byte read in the last block + if(lastByteReadInBlock == -1) + lastByteReadInBlock = currentBlock.getInOffset(); + lastByteReadInBlock += currentBlock.getInSize(); + + /* The lines below are a "hack" that I had to do to make dmgx work with + certain dmg-files. I don't understand the issue at all, which is why + this hack is here, but sometimes inOffset == 0 means that it is 0 + relative to the previous partition's last inOffset. And sometimes it + doesn't (meaning the actual position 0 in the dmg file). */ + if(currentBlock.getInOffset() == 0 && blockNumber == 0) { + Debug.notification("Detected inOffset == 0, setting addInOffset flag."); + addInOffset = true; + } + if(addInOffset) { + Debug.notification("addInOffset mode: inOffset tranformation " + currentBlock.getInOffset() + "->" + + (currentBlock.getInOffset()+previousInOffset)); + currentBlock.setInOffsetCompensation(previousInOffset); + } + + blocks.add(currentBlock); offset += 40; + ++blockNumber; + + //System.out.println(" " + currentBlock.toString()); + + // Return if we have reached the end, and update + if(currentBlock.getBlockType() == DMGBlock.BT_END) { + finalOutOffset = currentBlock.getTrueOutOffset(); + finalInOffset = previousInOffset + lastByteReadInBlock; + + if(offset != data.length) + Debug.warning("Encountered additional data in blkx blob."); + return blocks.toArray(new DMGBlock[blocks.size()]); + } } - if(offset != data.length) - Debug.warning("Encountered additional data in blkx blob."); - - return blocks.toArray(new DMGBlock[blocks.size()]); + throw new RuntimeException("No BT_END block found!"); } } diff --git a/src/org/catacombae/dmgx/DmgRandomAccessStream.java b/src/org/catacombae/dmgx/DmgRandomAccessStream.java index cebdd0e..6acb601 100644 --- a/src/org/catacombae/dmgx/DmgRandomAccessStream.java +++ b/src/org/catacombae/dmgx/DmgRandomAccessStream.java @@ -1,31 +1,168 @@ package org.catacombae.dmgx; -import org.catacombae.io.RandomAccessStream; +import org.catacombae.io.*; import java.io.*; public class DmgRandomAccessStream implements RandomAccessStream { - public DmgRandomAccessStream() { + /* + We have a string of data divided into blocks. Different algorithms must be applied to + different types of blocks in order to extract the data. + Whe + */ + private DmgFile dmgFile; + private DMGBlock[] allBlocks; + private DMGBlock currentBlock; + private int currentBlockIndex; + private DMGBlockInputStream currentBlockStream; + + private long length; + private long globalFilePointer = 0; + private boolean seekCalled = false; + + public DmgRandomAccessStream(DmgFile dmgFile) throws IOException { + this.dmgFile = dmgFile; + Plist plist = dmgFile.getView().getPlist(); + DmgPlistPartition[] partitions = plist.getPartitions(); + + int totalBlockCount = 0; + for(DmgPlistPartition pp : partitions) + totalBlockCount += pp.getBlockCount(); + allBlocks = new DMGBlock[totalBlockCount]; + int pos = 0; + for(DmgPlistPartition pp : partitions) { + DMGBlock[] blocks = pp.getBlocks(); + System.arraycopy(blocks, 0, allBlocks, pos, blocks.length); + pos += blocks.length; + length += pp.getPartitionSize(); + } + if(totalBlockCount > 0) { + currentBlock = allBlocks[0]; + currentBlockIndex = 0; + repositionStream(); + } + else + throw new RuntimeException("Could not find any blocks in the DMG file..."); } /** @see java.io.RandomAccessFile */ public void close() throws IOException {} /** @see java.io.RandomAccessFile */ - public long getFilePointer() throws IOException { return -1; } + public long getFilePointer() throws IOException { return globalFilePointer; } /** @see java.io.RandomAccessFile */ - public long length() throws IOException { return -1; } + public long length() throws IOException { return length; } /** @see java.io.RandomAccessFile */ - public int read() throws IOException { return -1; } + public int read() throws IOException { + byte[] b = new byte[1]; + return read(b, 0, 1); + } /** @see java.io.RandomAccessFile */ - public int read(byte[] b) throws IOException { return -1; } + public int read(byte[] b) throws IOException { return read(b, 0, b.length); } /** @see java.io.RandomAccessFile */ - public int read(byte[] b, int off, int len) throws IOException { return -1; } + public int read(byte[] b, int off, int len) throws IOException { + //System.out.println("DmgRandomAccessStream.read(b, " + off + ", " + len + ") {"); + if(seekCalled) { + seekCalled = false; + //System.out.println(" Repositioning stream after seek (global file pointer: " + globalFilePointer + ")..."); + try { repositionStream(); } + catch(RuntimeException re) { +// System.out.println("return: -1 }"); + return -1; + } + } + int bytesRead = 0; + while(bytesRead < len) { + + int curBytesRead = currentBlockStream.read(b, off+bytesRead, len-bytesRead); + if(curBytesRead < 0) { + //System.out.println(" Repositioning stream..."); + try { repositionStream(); } + catch(RuntimeException re) { + if(bytesRead == 0) + bytesRead = -1; // If no bytes could be read, we must indicate that the stream has no more data + break; + } + curBytesRead = currentBlockStream.read(b, off+bytesRead, len-bytesRead); + if(curBytesRead < 0) { + throw new RuntimeException("No bytes could be read, and no exception was thrown! Program error..."); +// if(bytesRead == 0) +// bytesRead = -1; // If no bytes could be read, we must indicate that the stream has no more data +// break; + } + } + +// if(curBytesRead >= 0) + bytesRead += curBytesRead; + globalFilePointer += curBytesRead; + } + + + +// System.out.println("return: " + bytesRead + " }"); + return bytesRead; + } /** @see java.io.RandomAccessFile */ - public void seek(long pos) throws IOException {} + public void seek(long pos) throws IOException { + seekCalled = true; + globalFilePointer = pos; + } + + private void repositionStream() throws IOException { + // if the global file pointer is not within the bounds of the current block, then find the accurate block + if(!(currentBlock.getTrueOutOffset() <= globalFilePointer && + (currentBlock.getTrueOutOffset()+currentBlock.getOutSize()) > globalFilePointer)) { + DMGBlock soughtBlock = null; + for(DMGBlock dblk : allBlocks) { + long startPos = dblk.getTrueOutOffset(); + long endPos = startPos + dblk.getOutSize(); + if(startPos <= globalFilePointer && endPos > globalFilePointer) { + soughtBlock = dblk; + break; + } + } + if(soughtBlock != null) { + //System.out.println("REPOSITION " + currentBlock.getBlockTypeAsString() + "(" + currentBlock.getTrueOutOffset() + "," + currentBlock.getOutSize() + ") -> " + soughtBlock.getBlockTypeAsString() + "(" + soughtBlock.getTrueOutOffset() + "," + soughtBlock.getOutSize() + ")"); +// if(soughtBlock.getTrueOutOffset() == currentBlock.getTrueOutOffset()+currentBlock.getOutSize()) +// System.out.println(" Continuous! :)"); +// else +// System.out.println(" FUCKADSFOA!!!1one"); + currentBlock = soughtBlock; + } + else + throw new RuntimeException("Trying to seek outside bounds."); + } + + currentBlockStream = DMGBlockInputStream.getStream(dmgFile.getStream(), currentBlock); + long bytesToSkip = globalFilePointer - currentBlock.getTrueOutOffset(); + currentBlockStream.skip(bytesToSkip); + } -} \ No newline at end of file + public static void main(String[] args) throws IOException { + System.out.println("DMGRandomAccessStream simple test program"); + System.out.println("(Simply extracts the contents of a DMG file to a designated output file)"); + if(args.length != 2) + System.out.println(" ERROR: You must supply exactly two arguments: 1. the DMG, 2. the output file"); + else { + byte[] buffer = new byte[4096]; + DmgRandomAccessStream dras = + new DmgRandomAccessStream(new DmgFile(new RandomAccessFileStream(new RandomAccessFile(args[0], "r")))); + FileOutputStream fos = new FileOutputStream(args[1]); + + long totalBytesRead = 0; + + int bytesRead = dras.read(buffer); + while(bytesRead > 0) { + totalBytesRead += bytesRead; + fos.write(buffer, 0, bytesRead); + bytesRead = dras.read(buffer); + } + System.out.println("Done! Extracted " + totalBytesRead + " bytes."); + System.out.println("Length: " + dras.length() + " bytes"); + } + } +} diff --git a/src/org/catacombae/dmgx/ExtractPlist.java b/src/org/catacombae/dmgx/ExtractPlist.java index f63f5e2..61eaf67 100644 --- a/src/org/catacombae/dmgx/ExtractPlist.java +++ b/src/org/catacombae/dmgx/ExtractPlist.java @@ -20,6 +20,7 @@ package org.catacombae.dmgx; +import org.catacombae.io.*; import java.io.*; public class ExtractPlist { @@ -34,7 +35,7 @@ public static void main(String[] args) throws IOException { return;//System.exit(0); } - DmgFileView dfw = new DmgFileView(inFile); + DmgFileView dfw = new DmgFileView(new RandomAccessFileStream(inFile)); byte[] plistData = dfw.getPlist().getData(); /*int bytesWritten = */outStream.write(plistData); // if(bytesWritten != plistData.length) diff --git a/src/org/catacombae/dmgx/Plist.java b/src/org/catacombae/dmgx/Plist.java index 21a8206..ef78771 100644 --- a/src/org/catacombae/dmgx/Plist.java +++ b/src/org/catacombae/dmgx/Plist.java @@ -55,6 +55,11 @@ public DmgPlistPartition[] getPartitions() throws IOException { current = current.cdkey("blkx"); int numberOfPartitions = current.getChildren().length; + // Variables to keep track of the pointers of the previous partition + long previousOutOffset = 0; + long previousInOffset = 0; + + int i = 0; // Iterate over the partitions and gather data for(XMLElement xe : current.getChildren()) { if(xe instanceof XMLNode) { @@ -65,7 +70,12 @@ public DmgPlistPartition[] getPartitions() throws IOException { String partitionAttributes = xn.getKeyValue("Attributes"); byte[] data = Base64.decode(xn.getKeyValue("Data")); - partitionList.addLast(new DmgPlistPartition(partitionName, partitionID, partitionAttributes, data)); + //System.out.println("Block list for partition " + i++ + ":"); + DmgPlistPartition dpp = new DmgPlistPartition(partitionName, partitionID, partitionAttributes, + data, previousOutOffset, previousInOffset); + previousOutOffset = dpp.getFinalOutOffset(); + previousInOffset = dpp.getFinalInOffset(); + partitionList.addLast(dpp); } } diff --git a/src/org/catacombae/dmgx/ValidateDmg.java b/src/org/catacombae/dmgx/ValidateDmg.java index 7ec06ad..badfb16 100644 --- a/src/org/catacombae/dmgx/ValidateDmg.java +++ b/src/org/catacombae/dmgx/ValidateDmg.java @@ -20,6 +20,7 @@ package org.catacombae.dmgx; +import org.catacombae.io.*; import java.io.*; /** @@ -34,9 +35,10 @@ public static void main(String[] filenames) throws IOException { for(String fn : filenames) { System.out.println("Processing \"" + fn + "\"..."); try { - DmgFileView dfw = new DmgFileView(new File(fn)); + RandomAccessFile raf = new RandomAccessFile(fn, "r"); + DmgFileView dfw = new DmgFileView(new RandomAccessFileStream(raf)); Koly koly = dfw.getKoly(); - ValidateResult vr = validateKoly(new RandomAccessFile(fn, "r"), koly); + ValidateResult vr = validateKoly(raf, koly); String[] errors = vr.getErrors(); String[] warnings = vr.getWarnings(); for(int i = 0; i < errors.length; ++i) { From 4c5c33505147e249d9b25018661fb3b0e496b26b Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Mon, 25 Jun 2007 08:02:08 +0000 Subject: [PATCH 023/109] Completely reworked the XML parser in order to decrease memory usage. A lot less information is now kept in memory, and parsing is faster (though other parts might be slower, but it can be optimized later). A lot of changes are related to switching from working with byte arrays to working with streams. I HAVE WORKED LIKE HELL! --- buildhfsxlib.sh | 36 + createjavadoc.sh | 12 + lib/dmgextractor.jar | Bin 211896 -> 221299 bytes lib/hfsx_dmglib.jar | Bin 0 -> 87990 bytes src/net/iharder/Base64.java | 425 +++++++++-- src/org/catacombae/dmgx/BuildNumber.java | 2 +- src/org/catacombae/dmgx/DMGBlock.java | 2 + src/org/catacombae/dmgx/DMGExtractor.java | 31 +- src/org/catacombae/dmgx/DmgFileView.java | 4 + .../catacombae/dmgx/DmgPlistPartition.java | 103 ++- .../dmgx/DmgRandomAccessStream.java | 13 +- src/org/catacombae/dmgx/NodeBuilder.java | 6 + .../dmgx/NodeBuilderContentHandler.java | 35 +- src/org/catacombae/dmgx/Plist.java | 98 ++- src/org/catacombae/dmgx/Util.java | 15 + src/org/catacombae/dmgx/XMLNode.java | 57 +- src/org/catacombae/dmgx/XMLText.java | 116 ++- src/org/catacombae/io/ByteArrayStream.java | 66 ++ .../catacombae/io/ByteCountInputStream.java | 61 ++ src/org/catacombae/io/CharArrayBuilder.java | 35 + src/org/catacombae/io/CharByCharReader.java | 55 ++ src/org/catacombae/io/ConcatenatedReader.java | 34 + .../io/RandomAccessInputStream.java | 77 ++ src/org/catacombae/io/ReaderInputStream.java | 161 +++++ .../io/SynchronizedRandomAccessStream.java | 98 +++ .../xml/{parser => }/Attribute.java | 2 +- .../{parser => }/DebugXMLContentHandler.java | 19 +- .../xml/{parser => }/ExternalID.java | 2 +- .../MutableInputStreamReader.java | 2 +- .../{parser => }/NullXMLContentHandler.java | 10 +- .../xml/ParserInputStreamReader.java | 22 + .../xml/{parser => }/UTF16BEInputStream.java | 2 +- src/org/catacombae/xml/XMLContentHandler.java | 22 + src/org/catacombae/xml/parser/Ass.java | 543 +++++--------- src/org/catacombae/xml/parser/Ass.jj | 188 +++-- .../catacombae/xml/parser/AssConstants.java | 126 ++-- .../xml/parser/AssTokenManager.java | 676 +++++++++--------- .../xml/parser/XMLContentHandler.java | 17 - 38 files changed, 2171 insertions(+), 1002 deletions(-) create mode 100755 buildhfsxlib.sh create mode 100755 createjavadoc.sh create mode 100644 lib/hfsx_dmglib.jar create mode 100644 src/org/catacombae/io/ByteArrayStream.java create mode 100644 src/org/catacombae/io/ByteCountInputStream.java create mode 100644 src/org/catacombae/io/CharArrayBuilder.java create mode 100644 src/org/catacombae/io/CharByCharReader.java create mode 100644 src/org/catacombae/io/ConcatenatedReader.java create mode 100644 src/org/catacombae/io/RandomAccessInputStream.java create mode 100644 src/org/catacombae/io/ReaderInputStream.java create mode 100644 src/org/catacombae/io/SynchronizedRandomAccessStream.java rename src/org/catacombae/xml/{parser => }/Attribute.java (96%) rename src/org/catacombae/xml/{parser => }/DebugXMLContentHandler.java (75%) rename src/org/catacombae/xml/{parser => }/ExternalID.java (93%) rename src/org/catacombae/xml/{parser => }/MutableInputStreamReader.java (99%) rename src/org/catacombae/xml/{parser => }/NullXMLContentHandler.java (65%) create mode 100644 src/org/catacombae/xml/ParserInputStreamReader.java rename src/org/catacombae/xml/{parser => }/UTF16BEInputStream.java (98%) create mode 100644 src/org/catacombae/xml/XMLContentHandler.java delete mode 100644 src/org/catacombae/xml/parser/XMLContentHandler.java diff --git a/buildhfsxlib.sh b/buildhfsxlib.sh new file mode 100755 index 0000000..14cda95 --- /dev/null +++ b/buildhfsxlib.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +error() { + echo "There were errors..." +} + +SOURCES_DIR=src +CLASSFILES_DIR=build.~ +LIBRARY_PATH=lib +BUILD_CP=$CLASSFILES_DIR +JARFILE=hfsx_dmglib.jar + +if [ -d "$CLASSFILES_DIR" ]; then # if exists $CLASSFILES_DIR... + echo "Removing all class files..." + rm -r $CLASSFILES_DIR +fi +mkdir $CLASSFILES_DIR + +echo "Compiling org.catacombae.dmgx.DmgRandomAccessStream (and dependencies)..." +javac -cp $BUILD_CP -sourcepath $SOURCES_DIR -d $CLASSFILES_DIR -Xlint:deprecation $SOURCES_DIR/org/catacombae/dmgx/DmgRandomAccessStream.java +JAVAC_EXIT_CODE=$? +if [ "$JAVAC_EXIT_CODE" != 0 ]; then + error +else + echo "Building jar-file..." + if [ ! -d "$LIBRARY_PATH" ]; then # if not exists $LIBRARY_PATH... + echo "Making library path" + mkdir $LIBRARY_PATH + fi + jar cvf $LIBRARY_PATH/$JARFILE -C $CLASSFILES_DIR . + if [ "$?" == 0 ]; then + echo Done! + else + error + fi +fi diff --git a/createjavadoc.sh b/createjavadoc.sh new file mode 100755 index 0000000..de60434 --- /dev/null +++ b/createjavadoc.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +SOURCEFILES="../src/org/catacombae/dmgx/*.java ../src/org/catacombae/dmgx/gui/*.java ../src/org/catacombae/io/*.java ../src/org/catacombae/xml/*.java ../src/org/catacombae/xml/parser/*.java ../src/net/iharder/*.java" +CLASSPATH=../lib/filedrop.jar:../lib/swing-layout-1.0.1-stripped.jar + + +rm -r ./doc.~ +mkdir ./doc.~ +cd doc.~ +javadoc -private -classpath $CLASSPATH -link http://java.sun.com/j2se/1.5.0/docs/api/ $SOURCEFILES +cd .. +echo Javadoc constructed in directory doc.~. diff --git a/lib/dmgextractor.jar b/lib/dmgextractor.jar index 3b271c62a4c9f8ace3dbb06890ff37585243243c..c769888a51964198f4f0fbd8c381630a3203d556 100644 GIT binary patch delta 89091 zcmZs?1CS@pvo1U~cI=rQ+qP}nw!JgIv2EM7ZQIt4v18BNecyBAoOA!*7v0g7g{;Wv z&Uh*->*=;*nM6rsq><_g0i%gVBSPqV%t0Q)-U{|ZegmVNJiBkqAbFlX`+oZZc%Q#t53GTz zIgW>onmiRFpI}N>r0V1X5TIA2>i~iQCnRg9!(=uoOX!lWQsvW2l0VhO%aO@Qv5i`_9ROi!gYvDnQ=^YzyFLUs)_Zvc1a7+ zJ26h;Ph}&QHHC(HAqVObb5c|9$&%SrR^2_B)7&RxN^2ArFE9})<1?r8nF5})IsGHr zhBYIbyqyQ+j<~?l*+=9u&8H-Y(84#)_I2cA2H|Y2xJdHsoUN)77@rXkAGOo<8u`Z) zHcH<`@W{yyL8OdPo)5Nf&;3+uM67vs(4x5xa+Vy-`p)IX43c%tR?amxX^77?g6qJd zxl#({MjMfXek|34NxOoPr~>E(K?AU#&euXexzr@KfhDVxmINOxPM7Pkt-;Wz)H>{2 zF!AX3<6=yi<_vL>G_dic%#|#u6LF!7r#-eJLL*dzksEr=G#3>8L-5jNs0JGv)aV#V zaOBnk^Q)MH&HPDQk|Rmv($m|L!%=B*j;F%4eFGK?TWn2RNT+SoY5+AYIt;Po=B7Ce z)vo}PoDxn31Jg!$T3T9=B~04{cV+YzseJ1G*582hnPUVCyOIV#=EG|CH0Nd}PN(j9 zmy)_(Rj&)C;J~E;gBR@kQZ0Z(;GF`hApqF4gU%R9jC_YU(A9)JH_Z zrxax6k2@_)HpW(57=Sg!2*sD4~v1nh|7hy=9R7pefj|9K~F7 z|$V4)R=0q3Rip=nb4)UdEZH;BNc8 z+wLyG3=e{yKY%;-bzh(^&Hh+WpflvBy^&l9IPUs*{AfU5o6IfgFL7)1osjRGOG^+R zBs{eVqkd-~)u*VrJbL$if5q%)%ySek6zd&7Q6oV(O_+ z)FP=&!!<Ht=fo)v!{eqr|c^81U$LoQ1ixBdHk<21V-?mtmLh* zv@_DSqEns$AJzNz2X-nSu>aua@3(IIi@)fI}mbzdEQ~){dznz2Vy&P0-CJn_Cs4c zG`Fmc^AUQ2JwtI40F2!WA;55w9611q$Ne}1kB^C1x;dd41>uMRR*W6*hgQ@_Ju8wZ zWr2Hh;PPY3iXQ;w%R=*&1A?>UsNE+8H(4+LwV{-krM^dfB)#s$X5W~x*JxtuvP4By zhI6f)r{3&4iBD~g3g)D_nW3H_I@z@~n}Y03?v2WlOjR6U3MfUCdaL3s5tzgvVdZ|A z(jhb^t8M@RY#iKI$aFTiwRDO1FIaq&-dC)rPrDItwyXfahEHK!{c`4G#t-a%PmH#SEYd|n9_V8h~Nc=fh53L>Kavo+>91|Ajs!?qW{})3_nN?dN;;Zn=52A{u8`>oq^o+z;0V&PxmPp+CF{lx*0jg8o$dqYk zP041Xwre%UkS)|2hT6YpXi8TD}LewwF9HQ-)38?-w{S?1f{ z_a-_QPOD5%C9k-+y54el_%%d1k4zgq98q`iN$2naz$0@_Yl~0gQGxY9%;8DeQ_;+2 zbz-kM0kJ`c1N4Qng_$*2G=sguv9N@d=VmI2;TT<<<7hMX z06meKX44fb+TnKft#`D{h5nZajio0#vx-*1fKhrmE}48K}7eC+m6Glcqa zP`3N|Z}$Iuqg^Em$ErN4Og3NV1nxu68iZ#uK8TEPTX+Purz!9C8S<*)_$kg0n*b9~+#?cqb{ZW2>6#+>DRExaYmk@n=3CpQcmaQaU^5Tivl9Y1AlnmcJ z8U6uze%i6RL}r!U8!Gm|`;QO#UY2M57sJm9rP}+!wc*4>lwceOu)#myp#LDJe#8R{ z0yq#**gv80|Bi|ixnU^*S6ZGPNz2Rp&px~9?q*E>(guFxAb~W{novK&7zhR2K*qtw z>cEP}4JZ&s3SwrXCfXjZ#e(At#KeoMY_ zpQT9;vPcE=oOt6u?z`V`K5xD6c(-_8_aT1Yo}!4bNWb7M$?~fJ{&WQx!}u2MfphPT z!o*O&ga=@tbrtQEBAn-^+CD@e`z(v`J1gLKmxQg_J~%J;7%tG`vWP)QmQ0%e+MgGM$7x^+~%-FtB{NVG<8tf-ghK!M*}lM8kv|U zd1S1vU6flT60UO)@yB_7TCI{r)MItw&?};Vow0AuA(8$1a7ioJ(sZMSz?OwjHb!tN z6v_zBWzzBWmE2qb+oo6kIXMQgc}3?jL4u*RHT8Dwy&W^^ z^b#ttQgj!9%Ts7@E}=@$t8PJETkW{!0d+NXy?hGbiY_6=fT#-B(9V!p8d^+fC)rn2UMfDMQ9B_r zt2F8>ib{IwdpagUeUho%7}4)ls|+ngxxtEQ^feU$n)S$&tak{NKB@*QHV9dGWA=zH zHWQ3b6}eB;sVk?~%b0*}#QKuXL;Z;rru$N~=A( zJo*#@sv1edd{&!W!F;;4*}*zL{o$|nI0*IdZLV#?$Fwn;T$_T?VHO%oYDb!?{aX+O zjT>h;R5`7-7B*4Vf>d=h2V=Pd@HDtIew=545?w?sFiTYu<2ad>UjtzwRc+RBu0`3J zh_6~-Ow}T~wSsSKx>a1E%M#3papn^1@K(71l#Zl}xrHVw9UB%5heygk;klV|-1#o! zGDAZMoSP_UAy0z1V2LWiaPjkvqobf2#7n7zqwwSktqispK;tQii7sBajkU7awy>eA z!gLgM-oIuh*nXp&Uk*;`K=!YZ69uFX{xWz8pYK+6bGM6@!9#jI0y@mKWvh|E$`02A zd>`}e#W8in293uEI6K#snomrnGed@Hh7Vne6#R@&D}>q%IDWEN;yCB_?#v8~4^ET< zdT@OUNqjp4UcPW%;OkhHY^7-PuW??Gh53^1kA|^RbLbA(wB#R{T*bNr z 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

ovqW<5e5yi3_L=mRlKuXP3~%&}Eab-8avI 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 K% z9?#60kXgJ;++0eA;y0E-NusjX<3% zV-Ij<5l=6Q#=m`#4GuN}VT&#^5+TLBr@Iil#yJ2MlVSkOr_E5to05KIm+Ub!Cq}WH^&fzuOU$z(u_W?ZDD)6$m$+Wwl$_ z0Kes+-v2V?d>Q8m;dQQh8#iUPYucDGSnX6A zT}^o`O|154@jldoT&5(Jwtl5JJ8;%H9SANhuTDU7Yp*buq((Ur=>w+%tn+VBGmfo| z*s?-af0*%Q9GvQ7^TpK5DB)Jy-`6h6!?ka&4xhUc8Np;xt*}k`xNNw`cb*XFU+{#i z9!$-jVjsXBOevjnPv5{EKMjKHRcB@BzuvpMuRSW-FI2>2@cp- zlo1uW_ff|{)6CLq%^6ZuA_jV#x0n}rw1+w z7-T+D6k#fZ?#o?ljN6T+<>D6Zr5KbJ*rm_Dmg#(L!dHHvu|$!cj9t);UxO)&p|KQ_ zCL}2f`05O+OsuhB5YPKVSyJklx==8$)aa{oW?{5sIgG^%rcHjKTykSr{oa>C!Lm}7 z0M!^vS7D`MnK8uGbFx)iEM=77%8|@i^^iVOMup~7P)K5lDhR4xF0W9RzAT00t~P%O zem0UK-UC-TM}46vzU_x{P2vKkl(&SE2DD_Sy2DLner58RSG-H7wJW)Dj>FM`c`JmWo}%k0#SVg!Yc`I0J|WZq!QKz1*d=PeC^(+O!sPp1>~nv|u~Cr~^5??ocHjf1^q~Taw&9k+Hgp z6xux|oc^KrRE)xW$THk4A|^O(*mogz#a=C7or4ocM3FjvS`9ix`w4|WYz>VA2FZfK>xXE41h zSaD6|2sPX`T4D}=^92@A-;{+U93&u6Mru;M<^hF0EAXM#do@;~{q8rNH@=YLoim-mYGzR(R;c8~Xhl{3#& zF^^O+rz(oVB2qBZheMdAS^s5xT*BV1W|a)b8sw>V{DR#&r}U%0Df%~WwF~GAmw9JF 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 delta 79682 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 and decodes to and from Base64 notation.

+ *
* *

* Change Log: *

*

Homepage: http://iharder.net/base64.