From e51decb08db88b7c03683d6124b854cd9719867c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sat, 2 Aug 2014 13:58:27 +0200 Subject: [PATCH 01/26] Initial plumbing for improved certificate panel. --- .../VerifyCertificateDialogImpl.java | 43 ++++++++++++------- .../desktoputil/ViewCertificateFrame.java | 15 ++++--- .../desktoputil/X509CertificatePanel.java | 16 ++++++- 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java index 62415b5ef..6fba19222 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java @@ -9,8 +9,10 @@ import java.awt.*; import java.awt.event.*; import java.security.cert.*; +import java.util.*; import javax.swing.*; +import javax.swing.border.*; import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.util.*; @@ -54,6 +56,7 @@ class VerifyCertificateDialogImpl * The certificate to show. */ Certificate cert; + java.util.List certs; /** * A text that describes why the verification failed. @@ -110,7 +113,15 @@ public VerifyCertificateDialogImpl(Certificate[] certs, R.getI18NString("service.gui.CERT_DIALOG_TITLE")); setModal(true); - // for now shows only the first certificate from the chain + this.certs = new ArrayList(); + for (Certificate certificate : certs) + { + if (certificate instanceof X509Certificate) { + this.certs.add((X509Certificate) certificate); + } + } + // for now shows only the first certificate from the chain for + // non X.509 certificates this.cert = certs[0]; this.message = message; @@ -224,13 +235,14 @@ private void actionShowCertificate() return; } - certPanel.setLayout(new BorderLayout()); + certPanel.setLayout(new BorderLayout(5, 5)); + certPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); certPanel.add(alwaysTrustCheckBox, BorderLayout.NORTH); Component certInfoPane = null; - if(cert instanceof X509Certificate) + if (!certs.isEmpty()) { - certInfoPane = new X509CertificatePanel((X509Certificate)cert); + certInfoPane = new X509CertificatePanel(certs); } else { @@ -238,20 +250,21 @@ private void actionShowCertificate() textArea.setOpaque(false); textArea.setEditable(false); textArea.setText(cert.toString()); - certInfoPane = textArea; - } - final JScrollPane certScroll = new JScrollPane(certInfoPane); - certScroll.setPreferredSize(new Dimension(300, 300)); - certPanel.add(certScroll, BorderLayout.CENTER); + final JScrollPane certScroll = new JScrollPane(certInfoPane); + certScroll.setPreferredSize(new Dimension(300, 300)); - SwingUtilities.invokeLater(new Runnable() - { - public void run() + SwingUtilities.invokeLater(new Runnable() { - certScroll.getVerticalScrollBar().setValue(0); - } - }); + public void run() + { + certScroll.getVerticalScrollBar().setValue(0); + } + }); + + certInfoPane = certScroll; + } + certPanel.add(certInfoPane, BorderLayout.CENTER); certButton.setText(R.getI18NString("service.gui.HIDE_CERT")); diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java index 3c6bf336f..1afc95e06 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java @@ -8,6 +8,7 @@ import java.awt.*; import java.security.cert.*; +import java.util.Arrays; import javax.swing.*; import org.jitsi.service.resources.*; @@ -39,9 +40,9 @@ public class ViewCertificateFrame private static final int MAX_MSG_PANE_HEIGHT = 800; /** - * The certificate to show. + * The certificates to show. */ - Certificate cert; + Certificate[] certs; /** * A text that describes why the verification failed. @@ -74,8 +75,7 @@ public ViewCertificateFrame(Certificate[] certs, setTitle(title != null ? title : R.getI18NString("service.gui.CERT_DIALOG_TITLE")); - // for now shows only the first certificate from the chain - this.cert = certs[0]; + this.certs = certs; this.message = message; setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); @@ -124,16 +124,17 @@ private void init() this.getContentPane().add(contentPane, BorderLayout.CENTER); Component certInfoPane; - if(cert instanceof X509Certificate) + if(certs[0] instanceof X509Certificate) { - certInfoPane = new X509CertificatePanel((X509Certificate)cert); + certInfoPane = new X509CertificatePanel(Arrays.asList((X509Certificate[])certs)); } else { JTextArea textArea = new JTextArea(); textArea.setOpaque(false); textArea.setEditable(false); - textArea.setText(cert.toString()); + // for now shows only the first certificate from the chain + textArea.setText(certs[0].toString()); certInfoPane = textArea; } diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index dde05a449..027f03044 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -29,11 +29,24 @@ public class X509CertificatePanel private static final long serialVersionUID = -8368302061995971947L; /** - * Constructs a X509 certificate panel. + * Constructs a X509 certificate panel from a single certificate. + * If a chain is available instead use the second constructor. + * This constructor is kept for backwards compatibility and for convenience + * when there is only one certificate of interest. * * @param certificate X509Certificate object */ public X509CertificatePanel(X509Certificate certificate) + { + this(Arrays.asList(certificate)); + } + + /** + * Constructs a X509 certificate panel. + * + * @param certificates X509Certificate objects + */ + public X509CertificatePanel(java.util.List certificates) { ResourceManagementService R = DesktopUtilActivator.getResources(); DateFormat dateFormatter @@ -55,6 +68,7 @@ public X509CertificatePanel(X509Certificate certificate) constraints.weighty = 0; constraints.gridy = currentRow++; + X509Certificate certificate = certificates.get(0); X500Principal issuer = certificate.getIssuerX500Principal(); X500Principal subject = certificate.getSubjectX500Principal(); From 4bea72d4814eb2a8216dd6d614a88fed579b391f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sat, 2 Aug 2014 14:30:55 +0200 Subject: [PATCH 02/26] Improved X509CertificatePanel with support for displaying multiple certificates. --- resources/languages/resources.properties | 12 +- .../desktoputil/X509CertificatePanel.java | 478 +++++++++--------- 2 files changed, 234 insertions(+), 256 deletions(-) diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index 8ba6d1bda..211d07d5f 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -720,23 +720,23 @@ identity cannot
be automatically verified. \ Do you want to continue connecting?

\ For more information, click "Show Certificate". service.gui.CONTINUE_ANYWAY=Continue anyway -service.gui.CERT_INFO_ISSUED_TO=Issued To +service.gui.CERT_INFO_ISSUED_TO=Issued To service.gui.CERT_INFO_CN=Common Name: service.gui.CERT_INFO_O=Organization: service.gui.CERT_INFO_C=Country Name: service.gui.CERT_INFO_ST=State or Province Name: service.gui.CERT_INFO_L=Locality Name: -service.gui.CERT_INFO_ISSUED_BY=Issued By +service.gui.CERT_INFO_ISSUED_BY=Issued By service.gui.CERT_INFO_OU=Organizational Unit: -service.gui.CERT_INFO_VALIDITY=Validity +service.gui.CERT_INFO_VALIDITY=Validity service.gui.CERT_INFO_ISSUED_ON=Issued On: service.gui.CERT_INFO_EXPIRES_ON=Expires On: -service.gui.CERT_INFO_FINGERPRINTS=Fingerprints -service.gui.CERT_INFO_CERT_DETAILS=Certificate Info +service.gui.CERT_INFO_FINGERPRINTS=Fingerprints +service.gui.CERT_INFO_CERT_DETAILS=Certificate Info service.gui.CERT_INFO_SER_NUM=Serial Number: service.gui.CERT_INFO_VER=Version: service.gui.CERT_INFO_SIGN_ALG=Signature Algorithm: -service.gui.CERT_INFO_PUB_KEY_INFO=Public Key Info +service.gui.CERT_INFO_PUB_KEY_INFO=Public Key Info service.gui.CERT_INFO_ALG=Algorithm: service.gui.CERT_INFO_PUB_KEY=Public Key: service.gui.CERT_INFO_KEY_BYTES_PRINT={0} bytes: {1} diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index 027f03044..6558bb914 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -10,13 +10,16 @@ import java.security.*; import java.security.cert.*; import java.security.interfaces.*; -import java.text.*; import java.util.*; import javax.naming.*; import javax.naming.ldap.*; import javax.security.auth.x500.*; import javax.swing.*; +import javax.swing.border.*; +import javax.swing.event.*; +import javax.swing.text.*; +import javax.swing.tree.*; import org.jitsi.service.resources.*; @@ -28,6 +31,8 @@ public class X509CertificatePanel { private static final long serialVersionUID = -8368302061995971947L; + private final JEditorPane infoTextPane = new JEditorPane(); + /** * Constructs a X509 certificate panel from a single certificate. * If a chain is available instead use the second constructor. @@ -48,36 +53,100 @@ public X509CertificatePanel(X509Certificate certificate) */ public X509CertificatePanel(java.util.List certificates) { - ResourceManagementService R = DesktopUtilActivator.getResources(); - DateFormat dateFormatter - = DateFormat.getDateInstance(DateFormat.MEDIUM); + setLayout(new BorderLayout(5, 5)); + + // Certificate chain list + TransparentPanel topPanel = new TransparentPanel(new BorderLayout()); + topPanel.add(new JLabel( + "Certificate chain:"), + BorderLayout.NORTH); + + DefaultMutableTreeNode top = new DefaultMutableTreeNode(); + DefaultMutableTreeNode previous = top; + ListIterator it = certificates.listIterator( + certificates.size()); + while (it.hasPrevious()) { + X509Certificate cert = it.previous(); + DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert); + previous.add(next); + previous = next; + } + JTree tree = new JTree(top); + tree.setBorder(new BevelBorder(BevelBorder.LOWERED)); + tree.setRootVisible(false); + tree.setExpandsSelectedPaths(true); + tree.getSelectionModel().setSelectionMode( + TreeSelectionModel.SINGLE_TREE_SELECTION); + tree.setCellRenderer(new DefaultTreeCellRenderer() { + + @Override + public Component getTreeCellRendererComponent(JTree tree, + Object value, boolean sel, boolean expanded, boolean leaf, + int row, boolean hasFocus) { + JLabel component = (JLabel) super.getTreeCellRendererComponent( + tree, value, sel, expanded, leaf, row, hasFocus); + if (value instanceof DefaultMutableTreeNode) { + Object o = ((DefaultMutableTreeNode) value).getUserObject(); + if (o instanceof X509Certificate) { + component.setText( + getSimplifiedName((X509Certificate) o)); + } + } + return component; + } - Insets valueInsets = new Insets(2,10,0,0); - Insets titleInsets = new Insets(10,5,0,0); + }); + tree.getSelectionModel().addTreeSelectionListener( + new TreeSelectionListener() + { - setLayout(new GridBagLayout()); + @Override + public void valueChanged(TreeSelectionEvent e) { + valueChangedPerformed(e); + } + }); + tree.setSelectionPath(new TreePath((( + (DefaultTreeModel)tree.getModel()).getPathToRoot(previous)))); + topPanel.add(tree, BorderLayout.CENTER); - int currentRow = 0; + add(topPanel, BorderLayout.NORTH); - GridBagConstraints constraints = new GridBagConstraints(); - constraints.anchor = GridBagConstraints.WEST; - constraints.fill = GridBagConstraints.HORIZONTAL; - constraints.insets = new Insets(2,5,0,0); - constraints.gridx = 0; - constraints.weightx = 0; - constraints.weighty = 0; - constraints.gridy = currentRow++; + // Certificate details pane + Caret caret = infoTextPane.getCaret(); + if (caret instanceof DefaultCaret) + { + ((DefaultCaret) caret).setUpdatePolicy(DefaultCaret.NEVER_UPDATE); + } - X509Certificate certificate = certificates.get(0); + /* + * Make JEditorPane respect our default font because we will be using it + * to just display text. + */ + infoTextPane.putClientProperty( + JEditorPane.HONOR_DISPLAY_PROPERTIES, + true); + + infoTextPane.setOpaque(false); + infoTextPane.setEditable(false); + infoTextPane.setContentType("text/html"); + infoTextPane.setText(toString(certificates.get(0))); + + final JScrollPane certScroll = new JScrollPane(infoTextPane); + certScroll.setPreferredSize(new Dimension(300, 500)); + add(certScroll, BorderLayout.CENTER); + } + + private String toString(X509Certificate certificate) + { + final StringBuilder sb = new StringBuilder(); + ResourceManagementService R = DesktopUtilActivator.getResources(); X500Principal issuer = certificate.getIssuerX500Principal(); X500Principal subject = certificate.getSubjectX500Principal(); - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_ISSUED_TO")), - constraints); + sb.append("\n"); // subject - constraints.insets = valueInsets; + addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_TO")); try { for(Rdn name : new LdapName(subject.getName()).getRdns()) @@ -89,47 +158,31 @@ public X509CertificatePanel(java.util.List certificates) if ((lbl == null) || ("!" + lblKey + "!").equals(lbl)) lbl = nameType; - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel(lbl), constraints); - + final String value; Object nameValue = name.getValue(); if (nameValue instanceof byte[]) { byte[] nameValueAsByteArray = (byte[]) nameValue; - lbl + value = getHex(nameValueAsByteArray) + " (" + new String(nameValueAsByteArray) + ")"; } else - lbl = nameValue.toString(); + value = nameValue.toString(); - constraints.gridx = 1; - add(new JLabel(lbl), constraints); + addField(sb, lbl, value); } } catch (InvalidNameException ine) { - constraints.gridy = currentRow++; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_CN")), - constraints); - constraints.gridx = 1; - add( - new JLabel(subject.getName()), - constraints); + addField(sb, R.getI18NString("service.gui.CERT_INFO_CN"), + subject.getName()); } // issuer - constraints.gridy = currentRow++; - constraints.gridx = 0; - constraints.insets = titleInsets; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_ISSUED_BY")), - constraints); - constraints.insets = valueInsets; + addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_BY")); try { for(Rdn name : new LdapName(issuer.getName()).getRdns()) @@ -141,268 +194,135 @@ public X509CertificatePanel(java.util.List certificates) if ((lbl == null) || ("!" + lblKey + "!").equals(lbl)) lbl = nameType; - constraints.gridy = currentRow++; - constraints.gridx = 0; - constraints.gridx = 0; - add(new JLabel(lbl), constraints); - + final String value; Object nameValue = name.getValue(); if (nameValue instanceof byte[]) { byte[] nameValueAsByteArray = (byte[]) nameValue; - lbl + value = getHex(nameValueAsByteArray) + " (" + new String(nameValueAsByteArray) + ")"; } else - lbl = nameValue.toString(); + value = nameValue.toString(); - constraints.gridx = 1; - add(new JLabel(lbl), constraints); + addField(sb, lbl, value); } } catch (InvalidNameException ine) { - constraints.gridy = currentRow++; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_CN")), - constraints); - constraints.gridx = 1; - add( - new JLabel(issuer.getName()), - constraints); + addField(sb, R.getI18NString("service.gui.CERT_INFO_CN"), + issuer.getName()); } // validity - constraints.gridy = currentRow++; - constraints.gridx = 0; - constraints.insets = titleInsets; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_VALIDITY")), - constraints); - constraints.insets = valueInsets; - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_ISSUED_ON")), - constraints); - constraints.gridx = 1; - add( - new JLabel(dateFormatter.format(certificate.getNotBefore())), - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_EXPIRES_ON")), - constraints); - constraints.gridx = 1; - add( - new JLabel(dateFormatter.format(certificate.getNotAfter())), - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - constraints.insets = titleInsets; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS")), - constraints); - constraints.insets = valueInsets; + addTitle(sb, R.getI18NString("service.gui.CERT_INFO_VALIDITY")); + addField(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_ON"), + certificate.getNotBefore().toString()); + addField(sb, R.getI18NString("service.gui.CERT_INFO_EXPIRES_ON"), + certificate.getNotAfter().toString()); + addTitle(sb, R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS")); try { String sha1String = getThumbprint(certificate, "SHA1"); String md5String = getThumbprint(certificate, "MD5"); - JTextArea sha1Area = new JTextArea(sha1String); - sha1Area.setLineWrap(false); - sha1Area.setOpaque(false); - sha1Area.setWrapStyleWord(true); - sha1Area.setEditable(false); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel("SHA1:"), - constraints); - - constraints.gridx = 1; - add( - sha1Area, - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel("MD5:"), - constraints); - - JTextArea md5Area = new JTextArea(md5String); - md5Area.setLineWrap(false); - md5Area.setOpaque(false); - md5Area.setWrapStyleWord(true); - md5Area.setEditable(false); - - constraints.gridx = 1; - add( - md5Area, - constraints); + addField(sb, "SHA1:", sha1String); + addField(sb, "MD5:", md5String); } - catch (Exception e) + catch (CertificateException e) { // do nothing as we cannot show this value } - constraints.gridy = currentRow++; - constraints.gridx = 0; - constraints.insets = titleInsets; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_CERT_DETAILS")), - constraints); - constraints.insets = valueInsets; - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_SER_NUM")), - constraints); - constraints.gridx = 1; - add( - new JLabel(certificate.getSerialNumber().toString()), - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_VER")), - constraints); - constraints.gridx = 1; - add( - new JLabel(String.valueOf(certificate.getVersion())), - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_SIGN_ALG")), - constraints); - constraints.gridx = 1; - add( - new JLabel(String.valueOf(certificate.getSigAlgName())), - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - constraints.insets = titleInsets; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_PUB_KEY_INFO")), - constraints); - constraints.insets = valueInsets; - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_ALG")), - constraints); - constraints.gridx = 1; - add( - new JLabel(certificate.getPublicKey().getAlgorithm()), - constraints); + addTitle(sb, R.getI18NString("service.gui.CERT_INFO_CERT_DETAILS")); + + addField(sb, R.getI18NString("service.gui.CERT_INFO_SER_NUM"), + certificate.getSerialNumber().toString()); + + addField(sb, R.getI18NString("service.gui.CERT_INFO_VER"), + String.valueOf(certificate.getVersion())); + + addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN_ALG"), + String.valueOf(certificate.getSigAlgName())); + + addTitle(sb, R.getI18NString("service.gui.CERT_INFO_PUB_KEY_INFO")); + + addField(sb, R.getI18NString("service.gui.CERT_INFO_ALG"), + certificate.getPublicKey().getAlgorithm()); if(certificate.getPublicKey().getAlgorithm().equals("RSA")) { RSAPublicKey key = (RSAPublicKey)certificate.getPublicKey(); - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_PUB_KEY")), - constraints); - - JTextArea pubkeyArea = new JTextArea( + addField(sb, R.getI18NString("service.gui.CERT_INFO_PUB_KEY"), R.getI18NString( "service.gui.CERT_INFO_KEY_BYTES_PRINT", new String[]{ String.valueOf(key.getModulus().toByteArray().length-1), key.getModulus().toString(16) })); - pubkeyArea.setLineWrap(false); - pubkeyArea.setOpaque(false); - pubkeyArea.setWrapStyleWord(true); - pubkeyArea.setEditable(false); - - constraints.gridx = 1; - add( - pubkeyArea, - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_EXP")), - constraints); - constraints.gridx = 1; - add( - new JLabel(key.getPublicExponent().toString()), - constraints); - - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_KEY_SIZE")), - constraints); - constraints.gridx = 1; - add( - new JLabel(R.getI18NString( + + addField(sb, R.getI18NString("service.gui.CERT_INFO_EXP"), + key.getPublicExponent().toString()); + + addField(sb, R.getI18NString("service.gui.CERT_INFO_KEY_SIZE"), + R.getI18NString( "service.gui.CERT_INFO_KEY_BITS_PRINT", new String[]{ - String.valueOf(key.getModulus().bitLength())})), - constraints); + String.valueOf(key.getModulus().bitLength())})); } else if(certificate.getPublicKey().getAlgorithm().equals("DSA")) { DSAPublicKey key = (DSAPublicKey)certificate.getPublicKey(); - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel("Y:"), constraints); - - JTextArea yArea = new JTextArea(key.getY().toString(16)); - yArea.setLineWrap(false); - yArea.setOpaque(false); - yArea.setWrapStyleWord(true); - yArea.setEditable(false); - - constraints.gridx = 1; - add( - yArea, - constraints); + addField(sb, "Y:", key.getY().toString(16)); } - constraints.gridy = currentRow++; - constraints.gridx = 0; - add(new JLabel( - R.getI18NString("service.gui.CERT_INFO_SIGN")), - constraints); - - JTextArea signArea = new JTextArea( + addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"), R.getI18NString( "service.gui.CERT_INFO_KEY_BYTES_PRINT", new String[]{ String.valueOf(certificate.getSignature().length), getHex(certificate.getSignature()) })); - signArea.setLineWrap(false); - signArea.setOpaque(false); - signArea.setWrapStyleWord(true); - signArea.setEditable(false); - - constraints.gridx = 1; - add( - signArea, - constraints); + + sb.append("
"); + + return sb.toString(); + } + + /** + * Add a title. + * + * @param sb StringBuilder to append to + * @param title to print + */ + private void addTitle(StringBuilder sb, String title) + { + sb.append("

") + .append(title).append("

\n"); + } + + /** + * Add a field. + * @param sb StringBuilder to append to + * @param field name of the certificate field + * @param value to print + */ + private void addField(StringBuilder sb, String field, String value) + { + sb.append("") + .append("") + .append(field).append("") + .append("").append(value).append("") + .append("\n"); } /** @@ -464,4 +384,62 @@ private static String getThumbprint(X509Certificate cert, String algorithm) } return sb.toString(); } + + /** + * Construct a "simplified name" based on the subject DN from the + * certificate. The purpose is to have something shorter to display in the + * list. The name used is one of the following DN parts, if + * available, otherwise the complete DN: + * 'CN', 'OU' or else 'O'. + * @param cert to read subject DN from + * @return the simplified name + */ + private static String getSimplifiedName(X509Certificate cert) { + final HashMap parts = new HashMap(); + try + { + for (Rdn name : new LdapName( + cert.getSubjectX500Principal().getName()).getRdns()) + { + if (name.getType() != null && name.getValue() != null) + { + parts.put(name.getType(), name.getValue().toString()); + } + } + } + catch (InvalidNameException ignored) {} // NOPMD + + String result = parts.get("CN"); + if (result == null) + { + result = parts.get("OU"); + } + if (result == null) { + result = parts.get("O"); + } + if (result == null) + { + result = cert.getSubjectX500Principal().getName(); + } + return result; + } + + /** + * Called when the selection changed in the tree. + * Loads the selected certificate. + * @param e the event + */ + private void valueChangedPerformed(TreeSelectionEvent e) + { + Object o = e.getNewLeadSelectionPath().getLastPathComponent(); + if (o instanceof DefaultMutableTreeNode) + { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) o; + if (node.getUserObject() instanceof X509Certificate) + { + infoTextPane.setText( + toString((X509Certificate) node.getUserObject())); + } + } + } } From 8317166f2f2e6a2db7727e5ca5d2165adabaf7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sat, 2 Aug 2014 14:36:31 +0200 Subject: [PATCH 03/26] Fixing formatting issue. --- .../communicator/plugin/desktoputil/ViewCertificateFrame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java index 1afc95e06..a4067025d 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java @@ -124,7 +124,7 @@ private void init() this.getContentPane().add(contentPane, BorderLayout.CENTER); Component certInfoPane; - if(certs[0] instanceof X509Certificate) + if (certs[0] instanceof X509Certificate) { certInfoPane = new X509CertificatePanel(Arrays.asList((X509Certificate[])certs)); } From dfa09c310fefada02bbb839a5c598b447788fa2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sat, 2 Aug 2014 14:44:07 +0200 Subject: [PATCH 04/26] Missed one i18n string. --- resources/languages/resources.properties | 1 + .../plugin/desktoputil/X509CertificatePanel.java | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index 211d07d5f..72562eb61 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -720,6 +720,7 @@ identity cannot
be automatically verified. \ Do you want to continue connecting?

\ For more information, click "Show Certificate". service.gui.CONTINUE_ANYWAY=Continue anyway +service.gui.CERT_INFO_CHAIN=Certificate Chain: service.gui.CERT_INFO_ISSUED_TO=Issued To service.gui.CERT_INFO_CN=Common Name: service.gui.CERT_INFO_O=Organization: diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index 6558bb914..6d5bacf8f 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -33,6 +33,9 @@ public class X509CertificatePanel private final JEditorPane infoTextPane = new JEditorPane(); + private final ResourceManagementService R + = DesktopUtilActivator.getResources(); + /** * Constructs a X509 certificate panel from a single certificate. * If a chain is available instead use the second constructor. @@ -57,9 +60,9 @@ public X509CertificatePanel(java.util.List certificates) // Certificate chain list TransparentPanel topPanel = new TransparentPanel(new BorderLayout()); - topPanel.add(new JLabel( - "Certificate chain:"), - BorderLayout.NORTH); + topPanel.add(new JLabel("" + + R.getI18NString("service.gui.CERT_INFO_CHAIN") + + ""), BorderLayout.NORTH); DefaultMutableTreeNode top = new DefaultMutableTreeNode(); DefaultMutableTreeNode previous = top; @@ -139,7 +142,6 @@ public void valueChanged(TreeSelectionEvent e) { private String toString(X509Certificate certificate) { final StringBuilder sb = new StringBuilder(); - ResourceManagementService R = DesktopUtilActivator.getResources(); X500Principal issuer = certificate.getIssuerX500Principal(); X500Principal subject = certificate.getSubjectX500Principal(); From f97dccddf5f213474a8c551e7f5f471dc10f10aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sun, 3 Aug 2014 13:40:55 +0200 Subject: [PATCH 05/26] Changed from List to array type for X509CertificatePanel constructor --- .../desktoputil/VerifyCertificateDialogImpl.java | 3 ++- .../plugin/desktoputil/ViewCertificateFrame.java | 13 +++++++++++-- .../plugin/desktoputil/X509CertificatePanel.java | 16 +++++++++------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java index 6fba19222..71b6c68ad 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java @@ -242,7 +242,8 @@ private void actionShowCertificate() Component certInfoPane = null; if (!certs.isEmpty()) { - certInfoPane = new X509CertificatePanel(certs); + certInfoPane = new X509CertificatePanel( + certs.toArray(new X509Certificate[0])); } else { diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java index a4067025d..3c2d9d55e 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java @@ -8,7 +8,7 @@ import java.awt.*; import java.security.cert.*; -import java.util.Arrays; +import java.util.*; import javax.swing.*; import org.jitsi.service.resources.*; @@ -126,7 +126,16 @@ private void init() Component certInfoPane; if (certs[0] instanceof X509Certificate) { - certInfoPane = new X509CertificatePanel(Arrays.asList((X509Certificate[])certs)); + ArrayList x509s = new ArrayList(); + for (Certificate c : certs) + { + if (c instanceof X509Certificate) + { + x509s.add(c); + } + } + certInfoPane = new X509CertificatePanel( + (X509Certificate[]) x509s.toArray(new X509Certificate[0])); } else { diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index 6d5bacf8f..498a4ad9b 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -46,7 +46,10 @@ public class X509CertificatePanel */ public X509CertificatePanel(X509Certificate certificate) { - this(Arrays.asList(certificate)); + this(new X509Certificate[] + { + certificate + }); } /** @@ -54,7 +57,7 @@ public X509CertificatePanel(X509Certificate certificate) * * @param certificates X509Certificate objects */ - public X509CertificatePanel(java.util.List certificates) + public X509CertificatePanel(X509Certificate[] certificates) { setLayout(new BorderLayout(5, 5)); @@ -66,10 +69,9 @@ public X509CertificatePanel(java.util.List certificates) DefaultMutableTreeNode top = new DefaultMutableTreeNode(); DefaultMutableTreeNode previous = top; - ListIterator it = certificates.listIterator( - certificates.size()); - while (it.hasPrevious()) { - X509Certificate cert = it.previous(); + for (int i = certificates.length - 1; i >= 0; i--) + { + X509Certificate cert = certificates[i]; DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert); previous.add(next); previous = next; @@ -132,7 +134,7 @@ public void valueChanged(TreeSelectionEvent e) { infoTextPane.setOpaque(false); infoTextPane.setEditable(false); infoTextPane.setContentType("text/html"); - infoTextPane.setText(toString(certificates.get(0))); + infoTextPane.setText(toString(certificates[0])); final JScrollPane certScroll = new JScrollPane(infoTextPane); certScroll.setPreferredSize(new Dimension(300, 500)); From 0d91f834c561790bdb1f7e1f86ef2f5c10f8c91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sun, 3 Aug 2014 13:49:55 +0200 Subject: [PATCH 06/26] Curly braces on new lines --- .../desktoputil/X509CertificatePanel.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index 498a4ad9b..630487fe4 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -82,17 +82,21 @@ public X509CertificatePanel(X509Certificate[] certificates) tree.setExpandsSelectedPaths(true); tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION); - tree.setCellRenderer(new DefaultTreeCellRenderer() { + tree.setCellRenderer(new DefaultTreeCellRenderer() + { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, - int row, boolean hasFocus) { + int row, boolean hasFocus) + { JLabel component = (JLabel) super.getTreeCellRendererComponent( tree, value, sel, expanded, leaf, row, hasFocus); - if (value instanceof DefaultMutableTreeNode) { + if (value instanceof DefaultMutableTreeNode) + { Object o = ((DefaultMutableTreeNode) value).getUserObject(); - if (o instanceof X509Certificate) { + if (o instanceof X509Certificate) + { component.setText( getSimplifiedName((X509Certificate) o)); } @@ -106,7 +110,8 @@ public Component getTreeCellRendererComponent(JTree tree, { @Override - public void valueChanged(TreeSelectionEvent e) { + public void valueChanged(TreeSelectionEvent e) + { valueChangedPerformed(e); } }); @@ -398,7 +403,8 @@ private static String getThumbprint(X509Certificate cert, String algorithm) * @param cert to read subject DN from * @return the simplified name */ - private static String getSimplifiedName(X509Certificate cert) { + private static String getSimplifiedName(X509Certificate cert) + { final HashMap parts = new HashMap(); try { @@ -411,14 +417,17 @@ private static String getSimplifiedName(X509Certificate cert) { } } } - catch (InvalidNameException ignored) {} // NOPMD + catch (InvalidNameException ignored) // NOPMD + { + } String result = parts.get("CN"); if (result == null) { result = parts.get("OU"); } - if (result == null) { + if (result == null) + { result = parts.get("O"); } if (result == null) From 766162977eabb8cec4b3a5fb7822085ac3c01dda Mon Sep 17 00:00:00 2001 From: Daniel Pocock Date: Mon, 4 Aug 2014 15:42:43 +0200 Subject: [PATCH 07/26] Fix reference to transferCallButton --- src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java index 0b84eee51..51fc66963 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java @@ -1674,7 +1674,7 @@ private void initializeUserInterfaceHierarchy() settingsPanel.add(recordButton); if (showHideVideoButton != null) settingsPanel.add(showHideVideoButton); - if (mergeButton != null) + if (transferCallButton != null) settingsPanel.add(transferCallButton); if (videoButton != null) settingsPanel.add(videoButton); From ac3bf5acb389c597105136677e0a5e3fa8c79aeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Mon, 4 Aug 2014 16:54:28 +0200 Subject: [PATCH 08/26] Adding Jitsi project-specific formatting based on https://jitsi.org/Documentation/CodeConvention in the NetBeans IDE project. --- nbproject/project.properties | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 nbproject/project.properties diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 000000000..338575b80 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,29 @@ +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineImplements=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineThrows=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importGroupsOrder=* +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=8 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width=80 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap=words +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.usePackageImport=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.useSingleClassImport=false +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword=WRAP_ALWAYS +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList=WRAP_ALWAYS +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword=WRAP_ALWAYS +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList=WRAP_ALWAYS From 107b304d0eb3c476e1a5adfdc61238573f03e0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Mon, 4 Aug 2014 16:55:55 +0200 Subject: [PATCH 09/26] Ignoring folder that should not be in version control. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b57a2e0e2..591e1fe44 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ sip-communicator.utest.bin release lib/accounts.properties .DS_Store +nbproject/private From 5628ea0d2b81a9f247e0865c95c73848bed05bcd Mon Sep 17 00:00:00 2001 From: Boris Grozev Date: Tue, 5 Aug 2014 17:11:33 +0300 Subject: [PATCH 10/26] Updates ice4j to r420. --- lib/installer-exclude/ice4j.jar | Bin 360470 -> 361011 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/installer-exclude/ice4j.jar b/lib/installer-exclude/ice4j.jar index 31773f731c35adc29d7b97c4e2aacb7b45b1360a..29f5cc60985bcf64c1bf1a166a2285b3727be049 100644 GIT binary patch delta 41688 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

bZ#}u+sc9|*E%T#S?yh~azr~^i=8LDBCl0~K3 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 NK#t;ujxddQ{|9iSw@3g0 delta 40977 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 Date: Tue, 5 Aug 2014 17:13:17 +0300 Subject: [PATCH 11/26] Updates libjitsi to e999c50. --- lib/installer-exclude/libjitsi.jar | Bin 1752695 -> 1752975 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar index f9a0ca7cc5509776d0a98790af18445b013de99c..5b45076ba2113f1f4971cb716f7cc1dd8c888707 100644 GIT binary patch delta 92225 zcmY)Wb8shL_l66{wrz7_+fF97Z9AV#Y}>YN+xEn^jdyXG=0Mml} z7ubT{ApBpZQ6GgKE(0{WLAks-Wh7!ep0RD(1bv?LN3Cbtv>7BtJ* zl&GRLeT0l{vzjgKO2x8Olj|UPo<-R|y2O~?OP~Far z`Sq6jPWMTU^Y!}8ASEJiTV@!ACG6*8iN{|w``2MW?ocLw!alv-Hv4eymr2;_+aA8% zw^2mz`#9tFQRqvX=T7V~sNMI-^iKQR9NN!q1c13N_VrDF%V+B1dwLr1uY}xPcy378 zYWv#~?epD@xnBJaE&s_iaE=QSEV(0T*KZ?HDWit7v;sg?;lRc7TT;Rhg2KM6wu^*QTg0ULjZalMH$iot{ zXM@hMW9D>}-qma2(soEQeQohWW^* zmNx}C!+4_I59XIWs1t!g=1nqeT1T*-XO_;;BCecgS8jn56Qjlbq}lqwpp0z$60O4S zHM2lAqjt9w7bs_ZCi+&@<3!@Cdos29!_By!C(MCg1+~J%B1Txe&LC~?fLvH6do94` zBprV%=*tCxl;TLsuXToY^+9BaR^ep=UT^&@8TU;rNrC4$S@-i+)i3O0PR7F&g_5lE z>mIIsoRMRa#dAP&E9)v*|6#%zYisrEUT1wjd1u#BTh=p&diLa6t;CI}x65CuCl0wc zEHhFQspl*;bqu2SGv%{|n(=93vI}s}6DQ``uJ5O=x0kGbKd2ft`I45t^RigDaFQ&r z8(-P&lu2ECH$nJ*c5<&}=QlL%TGB=EAjs^{{YU+Cjn@7#f~e3Ll|z8(Xu70pIEl~C zOM3e}xs?fA;AtY)^XN*?GgM)l`er}Bv)idtf1C8?=$OB@Ylqgm+bLB2`VlYzsc}j0 zIH9Ze7N`E5#k65N5i0iV6Adhy~rq@Orf*YZLF)e{G(NogGr~|17lIdKAAyM zM)G7f9sxd?!ZxEnhZvOyd{uwCG1hVIL4_SIhAGZnZ}=x#l}v4Pw$DP+2JCYPONM2!MG$RaoJo>HRl}O`GAYQwTUik(q#o6HC@1JpTOTgOs?4K+;fO*~k!B(&5>z#*|?#QoZ+z9q*Rsse%(0 z#HZ1UF%-J7IT#+aKZv*Ns%GF>-`T~)L>Uh>zK0-W)J&v6f^ED(NdQs%SgNK6QZ_Or z$(oQwE?J4!D;&qqxB@^nBakTAOSz7=-FtQ7he*lN@Gf%}qaxTdH&+bd2$Z=#V`I>) zYv;9@-0!Zbmep zDZ)5BgqyhcVu1-i6SiLG-ePDFI*l?7xGHyXJw4bu&&da1(+qEDlOMY8I3{^F-fq*o zjUBUJY!TGA&O?Wg3$4d&wvObCLTllGBLtJ#Zq5)Lx(X0Cz!^ErvvWldgTj31k2Qvcly(0D1SLhh)nAoCT9Jj z6}*2c0t@i%P{D#W|862p13=LQL z5mii|$nADy@QOh~FEJP6#5Q)$hIf-UjmaZPZJmY}?9YAr0o_aRqr%g6j{p7{>EI-| zjtb^xHiE`#uDf7gc0212r^JRV1()NN#lwhjX#s?+grq*$VBvVzV}t`Y^>~tYPDNan z;SIV{vT>LO3B#d;CsXJCIwCOf8oM=UR9#C6e)ON1GDsU|K^gbpY>NMKJO7(-ZKCep zpc?%E5f2t>gl@US?&cP<8qAF>LOzJy2IMLGWMn#;U_lvG&Y0zuJzjfsaZoQe<(Ssl zJqF;Ady^?jZ84jjjM*=oh)q$6xdHTG%`}6I@UV3<-V-h%bS3QJCGt(#iR1NFyLItw zg|B}=w$Rvsuq?(YiA2e;c2Prm{H4g_?7}um?z`Q(?T~C@+UWOw-%=8SZ7`gv`d%>P z;E4k+c^yjX6*jYeC~fvtvN87XBb%vDCk4QUe;bRPDPQf93&g+ip2L3rCM<=|TqLTA zl(;MgwO#VeW8$vmAyDUndt5Q^Rs0eRHSv2N5nk)NPO6mQgt{=Kw-}D>*Y09KK?GkRR|C~ zkgV_Zl&aU4A}BMoS#K%98GrepubFjiFTiVSPQgVMM>%-@x-`gaAz(Bwxx+20!DOmp z<6CEBi7|pE5W?DUSl)F!HmJS|LgXWt)4x|6n_s4s!VBaSfk4AI2zzoj$8cY#tr?^0 zK;$`72l!g^u%m-mM8L*RQx;Qmb_0|XWHnc%e*Jdjgb$ldmEVEy6UK=1z8SfTPG8xa z>Bbz{#}yfOS$`JKVveR}L^lC3Q;yP1hdsSJhz&&@%B^KNPEbjbmPbs)`-2(S*>P|& zApP2)dl47op#9QOoR&e2LbJ$ggK|d3)}A;>OEa+%;l$yJBu&geQ>r!^xL=aNinf;Z{8TlK(5 zKB9TwdXFuWR?vr{TCkDOi;Adyulbfmo{PyicxP65wskFO4vCb=IEHE1Ni(U;mSgO3 zN)ET2M7mWUY5+^2ac??rJFYGmTDEJuLX-1iSSq|gw} zNB%>z(|qXt>2x1&kREJ2kZ?1JNLQa3|C#yODVDpyFB64U2o_H*U}CmoI1UI?O8G3k z)hf`FWji`Z!J1_Op(V}EK5`Q-B;rUCpjJDe2n8Wo5*}? z_ZW`Cjyrft zP+`-=iXs+gXc2(6h_>e4gWq}3)u3UMWLP(>O+D`l1IjYm($p<>QFEur1I~Nrt~oz1 z?JMc;aPL?jJ%#n9Ru}Gv2Lnp{hy`1d;s&iX&*++)K%fwOOVG8nka07^_0L~lokmgk z_SIx`sB0RA5Qm#n*!}lpIa#w-JgqV4E%oZm{0#TP<^z zgU!f-*A85%c^!<{UK(2MYKE4iYgt?m=GrS5W_khid#*@ix3zuHj%mSDv~K}w##aA&BvdIv;!K4F zIKt!UH1JqfN@0&jv`cVf)j4NMVb>I9vF;U={Ln9jfgxbt5dFnj7{cZlQM~*huDl+U zbO_@_Z;LZI?@}!^cUy%t_!LA(MHj%btI(8wDK&|R8D}OxjvY>-c$3*sg?q#CoUS(V zja3p)Ua&GgigMN>(=~?RW-=0_)wb>d;0-urw=EegpGK9Bb#s$*5bilvWG$*0LRV)G z-bBI6l;<2o5RtP@DV{zCx*}hxPEfhj+MZdMoPr*eyV8)!ESzp`^4u`+c*nq~n0dqw zfLZOp)5Q&U6AY=kmy192^2Q*by-a7r63YTg4|Q-2UB)w+J&HdBgOW@xo=znM_^+gB zct)V6hZfGzZuLv+vF3LLi^WkkxrT6n2>#)ocE}B-kDoOWm3F%hdOaPRC`<2WX=o3|@h`IzIL!&UuJpIbmXYj^wSxT*5FcammBW5WU*92F=b4>}Ci9J}9 zAuHzU?W?QADfd&2F}aP?w=+2eY+JT2=lmMQ((HRbnf4{u(qjda(!8eO+Ci#`9%`Jp zZ?CP3AyYc}3qu0^tBbFTXab1`4BLjQ@N|hlNp(z0&&*_6;p!Irp?h4TB526f2Lp+M z@1=Lk=lFQULjHNyVX(p=x=nOm&Z71*I z8b>#KO4KB|>D&nhqd&gTg5OV3{o#IOIt(}jCo5emtcIm*jBwF!Vvd#5phA(O5_O6= zKA$3+ew#8BEC5*6ff>`+v1ks8t*-`j&A(>3FKU$q7Fz{66WdZ4&s^D?9*uJ;PBKB9 z#D6RGcVTs9`-TseW<&l3$X3AoBs8}`38MIfU$+F2>VVSX;ySCd4C-GYxPrL$I`M`l z*S*S0T(1jtF61mqPfzz;zv*8W-e(O>Gc>-w2IhDYgUtn4(KzEqW)+q%sls;_|E{D( zQwaJyTEO0eIi5$nCLuD?oYY`^mCYnRv>Qe>z>PXe+!VaQv9>G&=;T#5d1!RhO}YUV z?jp)PA{!!ZlUpvM6F>US8HBPA**GwWig7Scv*$1Av*rf*9JOR2(UBTsT9KSH>nXomhI zG(Q4ACg!iuLoZJc*pp*7pK4}0*{57R!Dwetjv$$VG?_{WmLzsk|CN8?rSlingGM1| za$--ZoVjJlxv(LP+iiVphbpA-A}zJ>J<{I1Xqvzxq6vRC8;;AmNyPe_DDp^Fb<7!~ zsQ#-?2WI621Lj?CUCc2T#PY>?fH%jG;79D&18Mlk=|&nYfbZ>sSzr$*%kYI|V%7@` z7V%>*&HJq{m#JT!RRmOprZ3l_Zd4HwiTmZbxEJdTkA#_lODvT5BOMOmU|s!KY%udZ z2ZC@w)L^-e~1dj5k7AT;HLY@4Zkmy}$-0i2;eeNbNw+T$PliGR%d#gw*6j^Y-ms`4P+ zVJ2=#ZG07}hkuMKH%CUP@{D!mcKPZOcKGFFy9;OnRMRqJ{eZt=?$lM5Wk9{k^2*Qo z7eI%XyHy(SaoOhXmf(h1x&5onl!!MP>+UpY^2AhRWh^5C%kpMO{N1Zkaax}fNaL)Lo{#n}-HG@yNsp2AYIlH?cai{2AqKq-5)F@2_)z%Z)) z>K`=*=ud%3EwgDcCfli38Fqa}APZ0=+NpRaZ9dqHRh%e84)FDkky6t=x(d#!^PsKq zglR=#do(t~JR;i6^~1t;3vKpMTthr%=;2J^ofq%2b4Pf0T0pJwpe=@gPt1Yc*?Aa% zd9iI#OO&S4cv+IwF>DGI_MOb{ItNNHdC4*YqFvpvQ|o2OoqtTUL~I#eE~p8wMDp$p zqxghPn?gtC^|a&_jE)!6K6uRpMDQQ!Y>O~0S-M3}7HK0$8wJ%N-_Tb1Wb-F8s~PND zHoBC$g`sjnvS*ORuojok&=SlAlGBX@eOYqlEFn-q3$S4OMB9;#Dbg(KcU1)h55TVg zc@<`l72te=YynzUgn3#*n<|iJ$D}H&d5}+#r&QMpVAcTy$Gu9Zk6_V|7760C=`6ev zja1DaLV>Ax^iUED&bKu>x1+`Vwdb3Cnx%WJUI;xFgpz)d+_B@Fu{v?bcreP4^myBf zorqb4dDICyhcw;@{6nGZA_9dxjt(6F?kQ81fM?yZ`43j$m3-h9Lk2n_7MlT@wLkEj z{!~rh%oaX~F}LQ5;XIBW?t5!)Fo}92_1)2hZ=rQT>TpP&BzXv4v_VCGC@Msrfc8CH z{UM$?Ax3$SIuY}ajN-7O7CWLKxQ)&KNPAy0NJz4-^~@tAr3%&X-8gd3q=!BL zgiJ?aPW`b0a?nJW{w<2HbVCh`yD?vEEVh(s#r`cjynaJ#vAqeD5|?1vMIh(SFZhzZ zC=&k@l|@GdEe>q5-}xsRrfWX zuGqYn`{f45T%=4lEq=S^8B$IIG}c9uJz&&CFwO59SpK;ThaSv6#f4EHT?XiF56)5H^pnONnf^0|x{n!|$Y{G!j-Ds1R@%t(jXr)3z8)foUrBVf;zk5>5BEqcA#S@6dLA~)u zwT{Ck=W8^8`BEp0@o3~KFpY;aBpm46O|nRlhKm65;3Z`$!oOspf%T%@sR1jF@c0uB z953rvKFig}XJ+0e8S4musbF8V7M^Lv&iy&_^p9PYXZ*J5G!~)jbyh*2=#Yp9izv?A z<49PCHq1Q-#u7J2sSKHO2dNteNsd$2;(YdezlG;T#k94Fy- z0M9g~1Cmo?T|6MLNPm6$pe?s)yo0)ftcJ+rz-m~|h_q)QdbB>P7rJUa#^p)7qJFmG z_aX=dHtn$kvg)mh$echxb&s~?EigK+pwF;EzEJDn>lQSgU8sw#JGnJ$QJH*t5s+$F zVV-t^v}Icw82lo@;unGel2_CTS||defozBgw0gs3yd&10XCUW3mMnoN9-ZD29CmO5 zykpcjnrtPea`vqOJi8eUXD3Frh`S`Ean6_Jardgm>sxoeoQBcl-G z0tQT$eimp>Ojve@3?p{fBzSiWgDPk5=c@G>;z{E_8MYC|0)+>7CA0nde3ymOkIFz0 zqVpje5DIgE#?I}z^XcD>OKtIL;C#i$MG!Z2wyfl*^ciz9luIAdzV{H!US<5J%hJBx zO;!E+_>V8YXj{>Bo10u(Usz8 z3b{I=T@GSp(2nlwjLf5GicyYRSq*MIHOSvJ!&<}wg7evW0T<{^Yz1Q$+C*VMHvUDvEOdnuHcs`SQ}tfY8R zuwe-S2F>{7#q_N#}c0z7_naUA5C#xnzj?-rLuaO&^LpKRB z6k_l)rcUbaRRv_(mpumO*`E` zM3ou(Z4~M;K-{051aHUJCx!r8qe7KCgr6{uk<)0b+USi~!@-Gtcd{?w1}_1ek_MxSldMg-p5&rOJo(kU4aHv5yRRhRs%ZhCgmbo{W zP}oE(BMHTYg z{NQ_ZEt((E>U&j+yVh3;fcwyRN_(Nrl?Y- zeP7uXM$<@Kb$2Rdk_D)16DY znw+{-vrD!c+TSv{BJJiv^bdtU5BM>%L8gI@IaDj8>UVP(ZKI3B5RVK(wTtDETgNmj zwk=70t6OC3!o&V-zO(Vo+}tvvVpEQFk<0cF{vgQ+yHR1C06ERD&{CDOz*LrNw+q+IHa*H~ zwS*KzQ`jQN?~VGy`Qtc+Od0SEM^?eiSP>1$!6xz50uQ2G_Vzzb3tP8M3wUHr1~oL} zQr}y%N`cDbIb2{G9?uIvd9B#kN9nZlS;L0arHs%@{oQUP=^N63iADKB5?lCWt9({` z?1YwF@d8#6P4-e31#fiGHzs;5bWZI}A${wB%M*36zie13f(5~k;|?RORZR}rpOt6@L$^aJY$Mg zIPeB3z_Re>ktZ8~^?ig6f41UOhAnY)RUri&*>_!TSuZ+=dHD_xM%|voo^=D2N_6v^ z0_R_Q2@ot6B~w;){TFM?5c+eNj}4aa?*uh4IC(LKjo`o98xwoTak^BeOx6h1^yn;Z z8}2LQ=Q>mG>*ib4o%)62aaqwB_;Ixm6X0=?8#^FpC>>e=2zDK0ScDn@i6$ufV;8yhHRBa*8>c zPEKn#9v*uD&nREY-s$}FddR}ws;3*)0}J0IFwGo8Kv!}~5#I(^woIbl5^$^EG~$*w z5mr~Aj!DlPO0~XJCDw%D>l>p+HP7vwQkVsDsYZo%ZAXn9ag>dGxAQWJ6)bxKU3jRp z)_bTTc-DKM9Nfd2O^9ylrBV|F9%n)wf?4!E5S5MqKG8BI_Td=phxMykt^VBVX>vjw+j}&Sdm%|opGiNKkG|4?FCc|yyHT+ zsOdJbHBt{GUlwRSOT}l*CmOcB7j|d`mFEN`55_W?l%C?Sbo<0udfSpGY zZDh;15-4Ap949q0TkD#I-zjO68rB)R-)5s$wQYzDF4(amrJGQ@zUq@9aQ3U!0Cqp3@i@o$EYnu%666 z7e}FeuIvuMZ!0Gtt8aa-$PT)2I+lgPGAl{%AGa< zh;a%JM&=;ikX;?2HR6+cB&L$JHn+E|svB+ojT4L;rnomoCYMHA@D{6&3y9X~ z-j*wMwkl&QZxXbg_pY?gpq>1bbt=ujjL+fMl_j`$r}OF){qR`5&qfGvhSbug>%UGd zZwCWFDd!IE(1gAvpsoQ#Ft3>etxJWYd+UGeR=&U#=eiYd6nun{iBbosG6CVcr zV*7lEFJ5k`UVr(OUa^z2)J4;G^he(>nhv2Kf~%F<68+QFg~j*SGp;WRFR9-2@3I|X z`?J=CoySel9KTMgxf_(gr%thMzuL6&mk7^y5u^C;HjSzqjOlk&qw?=OjgWdkGM099 zz4C1*gd@@9sumdJbYI3*E@ph(Ut|5PV?Br_>P`xk8|?}e!!YHcR;ChSZ+oQFfq^p@ zf^K34<&`^TFFhYfzQCN4%AuqE&WRkSWBt0^kjgSEZrQ-ktc|2MsPQiq!wA}uamPtR zi{rs_ydb9MP0vp2xXYg!qERXU_Woi|CkXoCKlRutAninXShb$hVUYlbI0J;^swkJW zf0cuDiH5F3I}e<1b4 zt{G?ZrccK4iXCPIVfh8X?pilA$F>(D!O#C*RY@GW&oM7ShDCPgX-10wYL0^~8JrD~ zsvxwBUbPOowYp;U=t)IUxiVR}5wPKW8;FyPqzO-O4aP_F=V@M}!qiakm+}P)X9BDd zL7)$T0J_(`Wm&2Jh!=>;5p{{y=Zd#9TE5STs$}30d;s4H5e*uEgIiP%okOTe>dCKw z#FkJFiGvhfs&oIJzGx7k{XE|n9H(s`()ApsovjQxTP z!urzx2isFTVU#5zg72RI$U-qK2lqP}bl<3>ZQ2!855!xBOBm_1mL!Y5Hxm7`WuQmD zd_6Mz`Z$xxW(x#xyzPgd-i&8t9{iEx#muWbev>YqQu;@lmu1nelV(e&a-bUyo5rui zu2Y&ye`|(agc#jmC%DSWKieEXQ}_k}vb!u$54q4?6Lvu*SWb?Rord~_4wSvx5(};U z-!M%gaV(8khP(Y_zyyt)Tmtv?-l1>d@gB|Uj?C^hBm#sy832lITFq?%%q;?JwjW0B z{|%ekC<-ix*v@W&<}cnqME81*xs7j@^4LaTSxfldmPCH{wL+ZriPv4Z*JTSg>X_>8 zCXqvDD!XSvoHj+oIT~6Z>?AC}xFEtenB6maH-=%!mE#mH8hq-6W}Be`@Q2%~wJ(a< zU%CL1cM0Up_I5~k-sA3aYj(Fx^5XX^e_fCVC2@Ciiw%zca+y5aoscmd1Tui2X%4ML z&sVuw$tlxG50_{{^dc}crF0mk^keFkT2z5j^)9o%=M<7+yZ=)myRY< zIx6f_!#(^UxNefjXYcXHEy(1vVxb&J%eE7yid$aMLf+2u^@kvt52{eN8XS68Oa1eO z9<(L_unjpYm8Ofh{NVi)tcS;Wz4!v%6M;~-@gJx8eBTyj;b~_Yz%5*>a>bnKtvDd( zWKmW+CsHyeFbpZSjgamO#hG{FgUIwRsOd0bX{np-Z}5TUYgG~Dr)%RTP18ZUA_LcT zGS!r4QYzVJ_FUj+f84|Hm;<`j^*Pt;kejq_%38z+@!@_h z>-GaO{fp0~IMM;KMm35Lm=E><<~1EKB{x`6f|U14VN9>miyi2)?>iHg7ac$hQ5Y^3 zr9vA7k?Wd#$CdH@S@-clb@|WV4FsOm;!~~1mVxFba8K{f zK`Ij|12krNP`#nKvZY(a;5|UG^q@ksIKLb-jAaOu|1mCk(+X8Fy*QUG8^mJp2vo;> zSzcyz{Ppyr77iT&q%pjfG%C6=A1i3WUC>(KUxp&X&mUpY+LVrAJyU}|4hcxO4x!KA zXM*4julnJXi*`9SZL!>*UmEw5L_r-Y$sH`2mV6 z_1HQ33Obb`$khcAy(icMyQ_jy&a;o`h$u59QnvZTb9b(<4a1kaI9X<-DQt;EQ`r)K zrr;3lC)R;9anxvIixL1+rWy7_*}O#og)wk5*62L+DI*7tWpI6(8uqkH#e6`a#`#7I zhDY~Kgn8W{%%dMAr%g8a*%3-)Ntk?kx~p9mo|>x^WSQbB(4`AZS)V-?OQzV*^7@c>B!;Bv3Ky#?o+Kl>oEY*nOYd$?m$0nbPovI zooqqi1KTXHd>wFxYI*1Ow{ny0pS?8DC_aYR=y@{;zff6|V*bX^C^KHZi!B5Vwuu*y z$8-^U^}`Qjp`9!}wqL@W2?+N%hWEIo%02ZlFi}wG*tiyX^U%>@3si-Z@ZvE3K;>j$ zn;lPqO8e+wq#yvZV#QCr`c-)@)*29|&7|Hf3fpaFk>C12~mXQoijE-gbI& zriYy^t9|0Ue|mAPbq)&oixfx9abNHb3S|=>$aDLBH$MTaMCm)ux9NH9C%d&=>#erA z^Uk*?LZr8lPxFGlbN;|uhN;wBF9Q4af&t=lE&`g5^-3Rw@4I5LgO(F;FX)Q47O~t+3iz7mpev;l&!mZH>MGZzMr&)JO?_wpMQ*@Wm|?CW z(j5n`t|-`ktTdZGYB3EIrV1szlF{oo;{Ri4h64IO6Y@0-m5Kr|5KuY@5D*&>P@}nK zEbxCe(=g1IJlL@hj8xM3}LH|Ry4cq@0WSIK@ z&-{#Uar?AyjfWB4!2dDO+3@kK{}@=1)H^Ux^hEy%;?xULY?#EGC_2zh z2dGAZXvF`K;Zr>j#{bAukktMPaP&mQ7*K6#oF5|9>gP7?MQB zI2KTWklseqI8b1y|7+8I@5W1_L%c6&>UUw|ZM-co{Qq6Gt_B{;_}93^)IC>Nj70xL zV_?z7!$iCPH7?p!x4j(s-+Pd!?x{ij-yDem48}Hw&d$YJ-UiysorrIfY)41HBu(Bndcx_j`R;)RIt7Up^N=JbHmVUpSbw2f zQ5r};pBk8&+H17d+a=lQ@@RDOw*XUL@|@_6CtL|mecyWeyzrd(+=M2q@_XHx0; z+E5KYt6`D5h}G;P_HJ}ufxq>J1yH%71JSbinD0%%wXl=7F%d7|BarfXyNg6J@ux?=^^kuR%lvxB%O3={qcTBMabxnY6MD>9>>C|f)A*5pozVH7pH#}de|*dFrW zT?{+pzQs4(Ghi5tR4HKEV=M8c;hZlYWan>(F$@iWNpuK1id@ng=sC?vBB_~jPDdb^8}3)HQS{MkrPM3Tpe}8 zvWnT?CaYphsJc?Ql8fqs>q}{tru3SR1T_dT3QQ-C&3gw>%xaA90%bjVeH@7ac9FOr z!cyIGv6NAwzhf!nj8c;2l6TSWRUD(|GKBs7+LZ{8F<+Tiw57ZOG#RWRj|`-Szy9ry zEa6b>DDP^q2)2`L30TVT1xU6ZG1^orgjMi7S6yD$pwlTZL8h% z>Zh6glxa{bVaXw(T}^)o3$lIB+&N2-VcyPT0%iLYwRzdAMiW0j@11EWSM8e(FQTNX zewF$zWXVbgnaR2WYUw7)4|tPm;qKt`f%&W88h)g?=**08pS~4o5^SQbV#ST}du%Fk zQ}&fYP**bp8m?@RN;jXt2o3bjNeleGafx)em2+v(^W(;8Y@tU(Dp1QUo^mY8yg0FI z?IN+~iwJgn>U3{b54>3E$}o-KgPw=>tMPS(2T4#Ip$uREFriL;+66Y#4^D<9k{VGW ziFOVnC@Wg$HDq|JnzM4mqzlOBt2_t!79?owgWJbaD2zX7ndx2<_@zY89pMh+ctIbO z;|#v4oETRe5WgMI0+->}d1S&$deincWC^+yEpP=47Zf|Jj-)XZxTQ_Oja+>>je?cb zCFsx*wbhyd7Fu$u;RiU^L%KNE{oOd%eJ5->vAAd(HA=A8=-4wmD|0wdb<<(8g^GfO zM9o%96t{#!A~?P=8_>>+B#*6T0|fca#3>Pvo}Bw0vfv&GXIQ7>oa)7;sR!~j`Lz#0 zET_I+qO(GnIAuo6LspnX_)`h|Hws_t& zv6p~x`BpAd(RWdZo#R-F-(O$iYrC9>;kclI<3W_z4`~s1VXS0QPgqKb`nZ@HQ(8V^ z1EfCA0S&GM(H-H7%_+7%0sREg%2)EyHOIgTzt&ygo2^}{4ZP;T4AnGd3p)HFM44;l z!rHb0WC{X(`K){E_GFN91%-I2E0#@>Zuhh&J(7bj8h1^Z!Z=U+h^$)?A~<%agY-si zx^ORw8u|RuF1(eFScZBKSjiCJxFJ~2l6p8pf9bZQ67HbpFUb*NCQBCZ4pHO83j0j$~+ zMb;=QeYFa8hta=fXU9Uq>)c9CnEx(E>B>ABWciuX^?{V}3ZM9$ z9bf$;E7u5q^MseDRfz0$c8s}>Ck9-+7pC$O4{FzkM#7sVOUkA!J@TS}Kiof4vEx*V zCp+sz9dVz`Il5@+rbeq%+4nIxlGm1v`f`nEP7yGTr4VLAo-1Jj4d{`C`1~o9K-1f7`52D80 z?Z$_d3^_R8B;vKu7EE5P;oy-Gnz{UhI%@2?JDz&e`@F=nj|%RZ0&k{))4BLThl}AO znbTRHzAU8=(_fy1bH2M8KSPwg!LwkEUsX{2}1c=_2` zDannK4m8wlxj2C(;nK=NTVz?0O%#=O(uu8Pp=DdOu5D0;qJmffsF9+GaCu-H`$&U! z`_1qO+dEm!>aVfh1noV`8TO6Go7L&KRyn!_!^h6FlX$>4`S zlXvPZ>X<%dJkl&ZgWR1BKholDVPdE}(291MlBGadgc4o>#@GS&dz8asN83zoS~Mey z4seYl`A=xm+`;SSSidOY9c20>Lng$k5CtXpAzpt6Qb!n27ij#sXrQ8NrJ6F=>dnfZ zgWl9cV{yF3>mV4txz(C$?k|`;tL6+JU_y&FVcm~g=q0{@FMSHp@D8?wPaG@gU$@&!@8MP29G_jW4M)WUkbLt3d`z3}$CoLju= zw^jE#)Zo9zX?Lhq3d+BzH<4zf~)PPY6R*#e!jt1UipqEjTR9NF0qfp ztlnP!*)e*yNk|4^NJ2ZJyGP5~b$EiyY1Y639Bam@?ej&Sr$ng7>oX15RN)O)7+->u zCU$43gmCYXVZvBo9533?5xJ)XC)IW1CFt=ZlK$?(R>HVF0RMb<=Cs5Kp6%IkP77M7D{PkTw?Bw!)=uv~BR(ykDXU6|NXILh=q`_?!eFUFW2Xs})S)Gb)kll~lj-zui&Tj(VdF)s`pkT$1p( zK2++eNb>z2t<=<&TDg0u(&X7b@G+^;2!3VfK{%X3Po%mincSbT%*+k^oc{V z({Y8sj?|Zj%AG{y{UXWzYfdQgg~gsLJUHfvM<79ZVI(6XrnE@aqK1ZHizDVNwuj-1 z_6^hep0Hu;F0i(qcyfJlIqt5%y?)>TXl;~m6j)j>?5MrEbmZBRynlsnDOtk1OT7jfZ4|e|=sdiU2GTDt*0>jB)WsL!L#Id-pIS2Y_Tt|w~L~LL{R+eF^!oBUc zYAemFve~8gSwmt@gQ#oTqW>4weGX4_rB)Yut)TJ8wp3Q>QbFZ9z(kxFMeL}O1X^!V z+2x5^$D1O$Wm0sLe%^;9w`krCwy6LK0Oj#kC8N_1Qi~VdT9%qGRBI1%jw=?-F-zkk zx5D1w8>Uh1fL*?kHD?2^Vdh-8r52>6&GgwaY|%(RtlAP;x2YCkxaoA+n0z3w4SwCM zYId|em?AkOpx8A6NYALtL_K;j&G`4J+*`LoHtb9Zt&Fg7cWUBkR_w^@(71=Ro8tu4 z8T7n<4xx3*df;_sRzf^C`N!wsB*sN6OtALv=8boa?^b!@~ZbPaGiiyV{oK9CoC9cDUmm z7HO#WB(osZspjeTHr#M^DkE8jwlONFMMP$>r!HhI6EwQn2 z!9B(~=P|2->`Y7r6i69Di$J2X`~na`jvrmywIa!mko0%0L_UPSk08Pf)#Sq@5h!Mn z44uEP5k?#v1t>=W*$&w=ucnrVQxW`q*tA04o0eubeXfv z7eT8ei1|Ahy?KGz$_|;k{EC?k5t;s@i`kq7QSn?t$TKq-JQ5qkyay`+`783Hq3%3h z4oLA0GaEgkhxsHB;d38zrZB=L@+;$O5DbOytuXHrL|SurmUIMP`XvI3G*Gydo8=1| zGJ0K*#SOGJ#8~v$5b^b-SQLP$XJl9|08!`VSiTaG(NP^17tpsyk3|$QINjBh$ZF;OET@6F1Y=l!u&^_@EEx|SHHRjWSv2Se;#r)x6u!)|1K43WndLe_aFiCB zRRJ$o03-N@Sp=HUzoU+U)q{Vd zg0aXNKBsT;vEZ4Q3?T6zY;p)NbOjVEA0FWXe@Eu`UPMZV^rhQ7V4pdMW;~|=2-0bG zth&IQtxl{9AS|qX*wi6cH&)jF2}*_uL{BzOPQqb!4})Ntb&#KfE`OBuFAz=6jdcn@ zMDStV0Pa8tVEqI}f1P7>0WIec))KG|;%mgqtelW;IO`VT;jC?7Dlv}r4bXlnf%PI7 zJ(j^r0Db<~SVw@^RynNCsEB?~H|^3(^qH7M0~k3&7E(OS&rd&okF{DK8Rj_?esXpf z6Vq=W#%FktVGg?eSJr>Kkl`c2wGHYzOibhF|2qufkH9`su!Buc2cZf2yQ_o;cBUVk z(32~85y2LWc_b5~;`ufANRP*ji=jFMZgoK#D+A){kT3{7;I& zGBJG4^*q~_y+WheGJuYxIJOB8bF0_c77_5a;yE162?^a~1E9#nkg z_%s{z#22kdKU&G=2aNWnnk^T!eCya;!MyGUHY?C4`jE{8w7izUbdhlbQo$uM!5UD@f@98n3z-}qacyK9_)yYPtyN6>5Jnt`mXt85NHLf#*2hKPOWN14%5U^I>u4IdU5wn@RD!@($lf-VO6fX2G>o{6wo4=qqlJ&YVN>FuSLTTA-&}o&JS-x zzGyW4oEQ_#ks zB?Y13lP&|-_c`bnAeWWoqxXWog+laKFn7EhT?%|7p%U#2)ctu6odo1KbxT#P0rm(E zX2hyc>wR=Tf~adx<9Qq`AS+b!5k|DT77c%=i?P~fJ=zy!M87ulR%X$Aj_xNQ(;|x6 z{XW8;`8dPv5D%25iWZ>T45I%40j!45?10Ik5wt82Ic@?i0$ic=BlJMLZscMWOv>C}SOiwbw^Z_=m=J1DQkSQECn5}#j zdH@qcMg$H&EIHRE#Kh#Phd4A{#{)Aegis4cVLAXx($cYA+VBGW(3AUkQ7AtiBM7C% z@T2L9u^3~p$c1=J0cZ&(V)ld9nJXB1BEstC4U8txeIyUFPDc6$t1)%j>8$R&XvOONZtBmzG`|LPQyfj@IsMg%so8o(HX zNbNtsdR7JAjAC#|+JpRE;3U&ChOq^PiZ*!d<_!;LaQ$}}f``#`_Yasz;D~ddF;)OM zjjxy`u$@T%!N>r2xc+%;k0lNcG69eZlsK^LbZ7%}1SGy6?AWbTDT>F20_)|Gum_PA z^otw2fvEh82fLNF(EM0#0Gx;*mIRP@|4n_+49A@~MC8ZnLQ1Ldej6u@?EoOziee+d zF|KCr1AZTDp(+&Pnx;n=5yu_{yu!C(OWf*dd_nf(mvT=-Q)! z-3D4ebg}AyZl?iu8_4nYme@M5I;S<3WsA#xY#W#{=!iW9B>Ko2tCR{$?#zOOE=0`Y zXNT@w<0sLx4`Qza4rg7&8`wgt?6;D;3gbnpDJ2S7_c5GxA|a_9o~F`yF)!Kwng%9=p!*I|eI zfJUwtkl1Og0HhR)#nSUav30=hmWxO5yWsm52?r@JQbqnlgQpkKuqFVDr5NniO(5|y zHW47jn+)3ki97qwwHqO@#r#;oD*DM-VMyc_KMy@U6&nrYkemh^3` zE-=5>9c(-f$w}gBnhFfV-GK}qVKpFZA#5_^`u}ILsRpba5M=iwY!!fRt_cg*D;S(B zTCwh6d!lq;-N1%+p&JW<8Kk#ZB_KMXR4x4@969^p%L;rwW57p-XaiVqPl*`BUI1|Y z9>#tI+MJUWe(C@NJ`Z1b88aeQvAlGNF|0ShI%OLB9HbhjRV*Ze2=k4^t}2DJc4)AN zS|X@_)>RnRaAjipTMjVuFXNY?|BPYZ>xvNSd}M!u94Q;t*_ru}8EL+kR3jx}l=p%> z0WT~}-$&xeltgAs?cyNqL!|&EjN{q}-f-1`4y+q%GBN(9k=oH61z^wE% z#|J@#L&|0NpXL$dH4aKxD#HfV-a3Ys!KIeNmGC8^`#Q(gDFT0k!xlj8dXvK+_+qrW z*2R1n%z7p$@)&&jv%SZUg^0H~?jvF)2TO6(!sdkE`(hke=$p4WI)Mmpia0iq7WAfs z;};^!%Tf+Bz&p5ly66EsZDs2yio44(0Bko@uBNVvF#aWIrUrGzsW&i^STFr4%BPma65 z3e*zZ~C_hw#ZW-8s9t#n+qE7(!vu3G(!+0XP6BsuyUB?MfpfNr^EiML zzOgAnVlDg}5TTP32qx6Y`2etg_l6TLalyzM^K2ZG(1s6VWGv)%f+&*J%_&T8?B#R; zkO>ZQhJ!lDjgOpf!I8xxT)1izw)s=!2DlwrgI=+~$q$_9#Scz(5O{lDJYJfU-1B0<;`ual;abDBIFV6}RB3?E_w@#-0dYL7i}7^iV5YBe3^wC){HM zbLh7_ZUy1@#RE43N+@r&V|$n22!22UIi^|?#|imAgNthXr*Ip49O6N;S*x?{1DtM0taNv%_|7`rQmp=N8vb7 za(WSt^9Hzl51?H?1y6HeXWX*IApbNR8WQZ_7ofDr!kQKq60&KNyRK+${8;f!%U4fh-YL@yn; zb+1f5hm$ge9XpW?a+Af0L#{D6Hpo96hoy^T;=r8)QYMpSpokG125QdQQs-3`P8yWq z2CRb8=U{dIaWGJTv-SuM3pKrh4`LeEalZiSRFBgIM(`q%@EJc9E`Y)`cqsKXyb;oF z;;eyvd-8D;c%+mW{~}{996s*}QlTe}I626r6FxF;R^bx10*H>20aF?paqb|Dg$@Z)~vtz2Jii90(#%S{J`C#FfM)NpJ4L;en@jy~D+Wc}^p^O^|aA z&EbSVy)<|M2UnyRCCc5)xK3^aIW#LC0_D$q3VsrJe>5My6WF%I<4gMqcnf>YffRzX z`e4w#``~IXB!WK;Dvp@#_!EHXX(_z8B*H%30-phv++l;)2DmQ2Y;$twf!{^m36WUw zl92OT7}C=Hct0Lw3ZEDLCKn=6<9U1#Kt_p%UjZjyhp82}SlDsTV;EH$dHRt!d_Ksd zo0su*Tj*WE8*w4LHgfPOVEL4r_*DW@L8rKA#4t7oTgFBu3QgX}3qTRAI1K$w75*tR zLPD}l_wIs8F8`N=K3I((2Q^{(ef$E@v$!6=4*Ck{_$f`qIM2ziFfs7lRu)h(N4#rf zn4g>e>Ki@IhecxnT1O{||?MBXGj3UB}M@Xl`M- zzJYLP+cREJ0DGViT-Lb)quGt+BGKP+aNP%3T*h<#0BjXg_YT*?u)kGiggoM^7zQ;tv<06CTP|D$&1-u0ExGn%OH@|r&c*w!9+XJ_B&Edk)dv0-^lVivV zQiak-e$4-=o4S3XR2ISu|H6TE1e1unIbMFPvX)~GRvdFf?m2=xFbw?KkD z;^VXy*a;3ET^qjx`@sMfQmTd>Fh83hLEi`=v;t*X!wFmGJ>4jRIS}n~ z48a|oExu+Dwr;$(S%mFi^g=cv6p2a*URMw5`o)ju1mDF6Vq4xLC<4mx8bUIFhpV3O z1Azi4d+X8vpR%rx2yl{S1mE*!!X$vLtc~CSjfeP%CH$o5rtXd`rTjjUZX~H))@`K!GhW$ zUEwxFNdQlYJ+TrbaK{tGdN7sClelGZbuS{07l9uR^Q}L|twIEfQXDZ5^u;F-BS9Z$GO-tk!f^d8oB#n*xV8nE#x>#~0FQK&SP#tjvWS?& z%a9oIY$DnsqBk}Xc|dxU{1)~c!^gyQUl}0gx<=3N(X8XgAe_|BylTCa?B9@Kxl=2AUc69 z?rL_I$T_&aZ9-z4(7_Z)lq4WPSN}w$0Z*YX5kX=o75Tb#+Yw(QE&_`YH;G?CCB2#d z1ovgwKaw#}`dc`{5iN)m*yJ`GqyljIJ%8z8?keoBXx9HrqsK+sDtB2CNe%#)GEvnd z4KVd%)c>J|V2&92FEXhEXwfQiCoSKAiHR=}BnVrofDE0=O{z9PAcvExIb!>-q7oW! z;6yUY4xV>^btLgXk~{)DbT20os1QR1-${CqjgY{9A4Y?maP0`m5{N}#q83QNF#knC z`A0~$bUhc+R)wha(6(_8`1GhJz(7+D`pP4)o!;$6ItQ>a^(DctE-(_rg)<}%;L{V) zq&|R6U`Xc$85loFIC{O{$&>s7(sXhHNfk^nOCr4!B*Bx7pH3QHrNZkoo|ITa`;U+` zAXh;FGW}vHNs-=ZIsyZ?0JHlq1wWnnF6jgCfVpxK9-K{oJtiFnKJC~}A_G4^ z)j?9-$#|=VfrbqNUC^p*T0G2B7`{H(!_qzG7GQ^Lf0M{`qaUQLvfboQ5?uF&r_o8j zNqI!1Rl`9}XGK`S7f~4qMw|<}L?Gjl!7BvvZDaytpVUIS{K(`Sz=M;Ue1Z+>J1anj z57!L7X~N`oEYdnCMOFhVr0yaogBhZlmggz2h@8%zUigxD zmklUKm+B$IFSx*gg}hVaIu5Tfra%OOj}4OrLBRYOA>%-cW0Xt)Euk?oA873!C-Z}r z-2@qa5C<#B@Ie_!Ux>o-e~xl-v*fLWJTy;+pOP@Z5L+a}C3r?_&oX%{nnu2mUjv?Z zzLC#>mcS|*uC~E+#s^HsDc)tCu zYf+55+;iyhT{ie7jsK8D5GZqCxl<&HDag^3;_Xd8VNZ>NpFA?&0r(F!WThj3qi>KY z%wP&Lm7)bw-X31cJ|JNdKjkuL@d{DkquGD({W<}weMyAEfq-{egrWibM{OgP$sZ0% zM(OPr`~pdj1BD%0-XlPzb8e$-g;Rng1I~GZrAxhny*~Xk;ZS+HwC0%x{)7c8uZDWrMQAbdL@Li zAD}Q9M%f0qpkpZQiU_|qwG=#v&GEYbCxEa{GGmxkaIw{c~Tk#8MjVkE&;mujk1Bv zxVSc_Vu2FY7g8k>LE9W z5iBN!1=4ed3ji<=8K~L@J|U+PsMbK$Ng@?~8qRQsMKZOY8F2?^X0&?*JWm^XvP6XU z4j!rsU6>nAqzE0Ihx(ffY1K(mRe&qaOHg7Lx%8s51X zS9O@75IuM|6;3#e7wTSVQg;+gM5eN7nWU56?L*Chg zrWRlwkO9|w)c<|&hEdxRHKaO&>dz$;DqLn^^vRo1g+R-~oVp!kT=%t8(q8ao;MGpx zEC1m~ziUCgf>fm-&EwRsfWZlBFT$X~gW3c*wR%$bkQsvwA=E$M_0WGbY6TdqjHGIU zR}<$Gsdth0BI#LW)Ew}h?kZhWs{r0YE^|NyWz^je=Me!8I_(~{98^mc>ZsL71b{@H z#>@S`iJD<1v1Y0PD*~56NSSCo>`6PApE}mzfy55^+qo zLc761b$o`J2K?sx$N%RAvh!59AjdE%Y^A*jXQ@T%*88cx->4tJFQ|o>twl`0``ryH z^z{{08oKq3$_9m>fH#SvKh$}4hHEhxs6t=Vx!L|t2k4hi2Ig*Bm4?o}wVJ(Qm)UR-z30=3<>L3F zqZYHHqoZxj|5hviw$6@kw;HLdTi)Cs{`05S?1k~!zv1(CUvz^r69%Ov8|$KI@5(PF zMpMTp^LLF)H@`YkHEp*VOgYoAiV^xSqY!eW>u_-y{7q5j2U^$YWtVdDhx}$QVs5?B zw)gYzvGlWVd}$CH)z{G#bzd^IdonLzZ+YH(_cM=PJqlR2-1FLCb@yCFXU61~}-gbW}VE(B1`>LR?4u477H2aUK!}AkdK2zn!MxsvZ6x!2& z>U(>31g<;(%Z%RBb}OsC+bl3oZF5_>@_d-%#akJlE?zrhyS~b$6@Mo4TCV#FXWyUO zYc1QG6*;SNJ%W>>Tc6VJUdoMr^YOjMQhDDao-5O<|JCQQfXgiqR+QXydhxa;um#XXAQIo?5E?G{^pDE zIj$$wfzmOdX85RFf@oBEavS_Ng;R z?W_V%kBv8cuEd|Se05WxQ^1ap5{pFWAJ1(s6ZPx0)F_?E+A@uP1UG#y0x`Exh%`Y4dGdx-@WZRuN`>ybt zt7*@dq!T|mW-`Ol$E#Z>z9h99UX0ZnnV_WFKQpXJ%t^1**!@nFne$&T>)T4p!kt57 zl)Ko4bU$6jG6p1+K4J6jSJx6!i4#rOs9a)lS0 zf-=nSSUMSj7FA zrZw+>arWq^&t)gNMYU`BHGGwI$KMyOoS19ax7)5xS$BkYZDCtqWvsKB~`m(VS~qQR23qa>I75EEnm6Ml27jNw@{8=CMC(Ub%CI?vhW3J|>|( zZe-UPT`a((g-j#1jTa}K=eymd{F|7-efTTw`k=ti^=`IqbkRN+786?0qte}m5tdex zCma@%Vx63X4$^&2#1$uBdzV5CZKuxXzz>lrVFbUGyeT>DBM&@=tbSQ-3}|0^EJ;896uNI8GC5xQ2(>KrtKCL zX46L<&hq3)xzN9sEHB{WSjcU!q);^jqxi>{Tx@L2%uu5DSqh4}7W)d7qYc_qpR33H z*e>FJ*j?;{qnM>i^)`MN>o?Ea*|%Bxv7{Qc(C{-)OLw))o^Np6k#A#R&0@9xs!(-H zjg&6VWmn{zK6h=8z8$v1UP*N^+h(Kt{kOL`d`U2~3@mA{a}LZ9emx+3w)Zs8t&C2I zXMT&?n)sgy;eoEsZjoJk9g8}scCkjge|eYJI8?|CK02d!T%g}PqfYOz&i$jNnYWJK zKY7ZLMwt!!^)5157{7;|dC@fdvl+p07Y$Mru$wo(R)rZWMYlcq<@w@{d;3n-mS88P zEVUS48REL4P&Dq59LrVX{^RF$e?&5!dg*77Npr0ezVk0_nbTq~_Re1oiDZ82$W`pZ z(>&~iWiG{2=Via?lce%?(?Xr^t%e%ScBv<;574wCOOq=Vh(6OYJMu0Yv}NDeQ@*`i zh1YZV20t;WrVW>?p1!<1?k{mu>`Z&;3HV>#lPw9)oeRI+bgtcJ@HNo%`|8E${kon} z0*!lOw&4atCHC7EiHE$q^46%_qQsGUnVrhg{ziVl#Ng$f0K;9~Z#v&@=z2CduCpIJ z@$%1IeHv?}uGEUMPb!W_YX2qd1N=a#*@^a;>f}C-muO4B3jr_cd;?si*9unJc}|vORw(T{!pcI{0Kk##w*(3 zFU7x3qvaioOBOsu#xt3>WjC#6oYubxY({UEeQPy(zd1=$t)$VS9M);-|5CB5>fuLc zb{GAWYAyaod%xDt+E@0j*ix_qwfN0AY|K2LHR6bZhqEau;g`m1*Ji^8?Q2%RpxuVFDg@c!|F}VHF1GHIeNG3bLpSk zv1XSXZmKvXph0^Xl+d)Nkt$vKQ0=$MSVeFD+7*)vy?FwZ0{eayW>9=Hq7jFx_SvJsP zl`^aRq^gA3{9i(atYxyMEZ!=vyq<-X>vn=uUoNF}FV7n*fZ&#m?lUn}U8zUsRNi zKRlu|nYs4twoFoH`wEk~3O&G{z3{AZclQe)@8iF|CJg7s=Dp|TvNyWD++uVN;{Te? zthI)-#y964`K?6@d*Uy@$GFDl75SybqRGzvSw3?$B{z!XEn*5@@~X0j>Yde%$_bE_ zJRdi^Ylq*{ewBS;4u@{0A1FESMEqgOy=Q-(ggEZ#UU{Z+A@f@{=hED(KQtw& zviq9O@5Z(rtR4R8*C;rf-!LfoAk*gaXx&M}(KPLuqYpNqx0ZE^G@AR%U)S*|OyO2m zGAl8<6*1@KI zpGtYL>sHgqlc%#%;bkxH$9r%7TDg&3#BS)+Q2Y29D&z04D+`4`WK2{woYrb~Bf_f& zznMAnJ9G8%PSu45qv$Y`fX=LaP_o)o2#+IENeSwNmDByGvHmo^GPLW~#%rndH(olw zB(yAl-PXC-YU}8zG7mY;@C(p|Laez8?C%O}e*eeXI*TpAXB4Tu=Ja7+46<}+k+;xo zIKD_#$p}Ao&t}EnZCAn=P3m_}Z}+QWNxP8SJU07uwNC1ug!r>F96U_ay+2IfUEA@g zQ}5*Ux$#UXO=lyyIn`%D!d9h?D|ZZHzTnqFWY!#! zucFee=rbP;rqSIqLH9lEYG&su?LW&LYaG5m?(C(|e&cyOAW#O$DGAAV47K|U9b|u@V0)Vv&&Mo*&|wQflpd&#H7^Vdr7uz?=~&{^&s)aISIawcKdx$pG*+HL;uI2 z5cs!%Q*BkL119hEgKx!DR~3tejSz>=A7FkIDN_7JUwUW4tnx*n2fV#17o%>nmKNKt zT`VW zBOcEUQ+#q8imb1m`CbO&$U;5e&lCr22^tij3UhtOc>U|($ zwYug3Xcfya?<|p&VZP`u8_6cP5#c%cS8`2ts3*|%4^)?Uvox8uraiJ(ali1!6Jj<- zqUOoXa9m`;-{|=4+lOTd$0AMws+XLX`Xh9aqgq{J`(N_xWwB3b z-!+Jb9e!Wi*ShQ9CVsSQ7fL1M<}tH78@@w@3DrT_vXB4X6~5`_Oj{BzQ6G=W$a`bp ztZlU5dGO`1irE5Yj#^zeb!?jyyTxt0<2!~MBeK2;MO)(M7JELQnK!;7v=W?4r0IP! z{z=F6KL6}?ckSWH{nz%G<;qrG?)AKN#kZ}leIfGL-J_0B7fRAs_;!xL-O5h>5-nn5 zcvb1^#>hQSx`Kr1J@}^n zGz&~Hy)R@f^aCfG<6?YR>lOapZ-1Ju`6{K!O8>O^`evyocj(c+NBQ=&nhV-X@hdI` zdUiX%7stjPo>N?NYI}V~S!JK|!MU!lQLVk@?CPD5_miy*Zx-(Et#kAF#&bj2Ogr^s zaLV~ZC{tg2metL|!H5s3)9dtJj86NG?)(|3f-ascc0s6UaBuF#-jN@51*-6G@h!El zo{{Rh5#-n)xc)KS%_l>tXAfEVwB|1O%hVMZoTzuWQb zfYIRJ8Dg_l@#dX10oAo5>*$`EzZY}-6YBM4e|LX7i1vOLCUf{gLQ@DahDIn}JR&il z>+hzb)RgzwpLj9DY$WQS|0l7$k2OLP_tYNgu5$H?bQ8nA67zJ8L|1ggZZ#+SHwHEh zp2_GwC38x+C@lWP7a76ZkH!0RJ%)-1`#Z!x3l+2{6#P{xyMzz;#OsCD+gH1;oYQS% z%dTha@K^2W3svHWT6Cpf#!XgQWnYF*Od0EDbMy-tq1N21kL&qf|1-X6@OkAc6PxaM zoT-lE)bWTP(4LE!VL=N~1?}^qyR4(H%(|`W#LR`rC@4l?6KJUTkjQ{_GR`*j(gi|KNbxo|pI!Ere-&+`UcBBk;0aCU`L=-OuC)qcmksdVDVOkQCBEOW zL6WOdY?oI(b3J^AOE>1W5KwI>iXq*1dBJk&hu7r%p@{1a4JVnGh44o*xixmnRqqiP z%Htk-62d-tpSAjUX2N{hO*J!`WP5d1l%?MJZm-GuL#cVYejHrzdZBPA#bZ5eCv(Wz zr#`$%x|!kE5_OB??+8ZE83y^C7@o;=%Bs%%bHG!}iKXCx&3O-um7PGDt+y1^w>K#> zPo`BSCjPRyw25%WT7J99(KB(}*{>zirj6Vka0ixc-txcRcPouaaFyp7ri}J8yW{<@ z1meJsWA;+V-rE20YMe4=QxlDU8EJ9l-nnNf;Bkj~x4K5U%U<;diDR|Mx2ay2F`*(l(9PZoFDjs<>xhdZ9Pqqo1tZa>4gk zDEmTOAO9=j(gBg8Js+j{LK3)SQ)$KIm4G7-&qf1qg*J&l!wUsY{`#r=+`-u3W55pb zN}jDD{`*&!wF()O`q@#G(Crvi=~<0{y(wiOijWLWA^s^FfKn+jpZ zJl@{ix&NL8sn;FCm8*QeD4alQKISpZy6v}_UC3R&-*>2nAA7RC&t1&*2(xyxrWGtX z<}BUk`BYJ6ueaOPqT;&|^YSDAM7Rso)vx_TE130DU*Dpc zY}eV0ikVf+e75I{XMj0(y|w~&`1L38iPS`Wp5(=>d9|*qHnCa!AMR6oSYB7uVKZ|R z^*QZE<<*Y49Uyr{*79UliDbM(&)F6B$wVyuAOJYrZ_4jUxi#$LYi0REvL)1Rl$o@LW}SsoCu`9EKbh99UH-$?XPVEzcvRJfg( zQ=oS$++wuDU#j^2Q8!sc@#g!dqnmy`i@tpM@@A6q^I;TKPQcQ|H&C@!TXiB_dw1xg z?@LSCOq2%$k=8ddB;<^(Idr-3>l$%N@|7g-?UJsc3MbIH( zEi`^wyygh93+67|{<*5&M_JGRfm=vT>lC|HeBj_q(p>qjgEg2BhQVa{_0jb0P|# zTwOZ({2!b7)susEBGe1Q;_Y)qOCwJ*qX@%;`CP}kP~7+GIX?1m8+jUCmz&#l8k#6~ zvKW=Sf0bsas#{W>UHd}kaLNU#ZTD|;eLuG`2F+Fmlf^< z^+elFo$}a)=l%u;mki$OCQZ~xrmnRp6~6Y3?LFrAC~MoL_m!QiuI8C19^9EC|5o4L zTVB8!uO76mU?>0b<77sAlxWGhZ*?k{EDiSdsR(^?yfS^Y z*vqyIDE+5;E||Oh~ISQ{RcM5dM1^v>!Q0BMW=EesV(;GEME>8#h*X* zF1PD?7q`OS(eDpNzqj#RX#Tb;3HPqP2YErx-S-T8CW{HgOv&o&Lnd>+pl&k14js#-zLiaq$1`}=J#Je(sxw6_g6FMWN4 z&j$YGrPnLrvC&o3BTkxgKA593`S&#DobzZcpC3!{?wixftGX~5##_>Vj_aX#Y>Ub6 z&%tkuT}sc)1!ZuS_U}IT@KEXDBiUB;&q28;(Yc^UoPqO)wZh)VuCFN!&uZ@+G0H7& zG|bVCz57Tgh%PiGqPg0vvapAD%!cqH22&hjcC1yd?txSTaVhY2Qp=ZV&%(vOsA1n$-&K@Bt4k>=>WgIF zvGY?0E*cwsGt4`7t|ztVPmbE75AI#}hv8p`jJWk;!A5vZRda#Hz8b#s%6hEzJ&FbQ z@=8O4Yn{AMLVJ|*UZ3GUNeiB=fw%AMuPIhY*)~3wI9(H*uW(Eddx6!#5q&K!H~V0H zb;;eTmP_VcPw$R|a5qg0MO`qkGFDH`RH$^eZ4I7kV&g3TEXT7`^O0vwg|*}rWvRFJ zU9`gonti>miOC#3ch{d;qBvK5L%hXERQjOn329rEGgk5$%ln~6O9*mp)+BLZ52EH%Lz2m6RizNx1B zaPpnaAKW!lYn-f3hNdYM@XFM<28G=bA2PJ^I4+{NFV%QvNu7NqrlU6AKk>8e;XsWC z@;$WboqS*Fv%d`=e-do^$oh;w-T7fyh;~F4+a>a+Q#u0dsj8n;Q)+OBd2lAYnBxwS zw(>&JQi`!Sf3 z>`N-hwk+e=Wpukj|KgKZ>mNU61lv@~_q`A-cA|YvloYN!71f*bILF^MNWPDVeTTj+ z9zu`!;a^>;IsUZM3tz!)Tw5PE@}cY=!Q@1NnV{Rs+1Ms|fy<@>5>w8BTK#w0@$8iM z#ScpgFXva>=pHkpTyPjqi65+%b?7*xbuIFIG%;`7-T4i+K6W|~8_3y$gFgA?LuIdsV7QX= zK(FJtISJC>V}7=e9rU7q+HZKw<;2JP-@OjZd@a(O@*}vq=49x3-2#yZ4{oM- zWtN#g5aA&0vktg${*%_mzEYQkHJ%RVyl_LaQ#7vUq5ParT$JYBADpSI)vZ@}ZbDvrPB^oiPM(_7SKdC{zNgaFR_4d?z;imUc=o)n-laZH)kqhuVDI2j=4@Mi zYS2dTWG$){<2#iQS79|Ucrb86+V%9)VGfLJO_Hsc(8KKqyZl;Gcl&BZetw&M1Mlaa zx4t(;l@@xmIs+qzs<06MwoS-`T{En}A~$EKRi(Yj*HCQa;As=d;qd+X5_Ypaf9V<< zS0j_Iw-G*x8vk1gRA=& zD9b9ZquN=fg2`UHBYjUqrUYArQO>v}?j8&N(!7UOdbh;)P&2dV%)Y4Fb$e8Sci45y z7iX~XLoo}xjSRoJHdo(nxt4mo??oHA{ntmnwr#16&em-+9Y_39W^uRK7f%gbo1V2h z{8xK zsVjao%*pI_u92a%u+Ou*<`w2f`jL);9N{X@){eT7PO#Xd@C7CtUpbtw>rUl5>bSV` zN>Q21WZ(Qxt&J!0Ze1$Zc2D)}AGBMs)Na^Aa9&MdWi$4$xu#s^>g5q9f6nM>a-3ZM zeCv8LiFWAYle!rR{)3`e6+x%lS9wc*etO@hehSZ_$;|0^R)XwS*tL7r^uOm%PviMyJE)B%Z2?k?P(c7fg#qE!4q% zm{ajiSq{y~v9`|VzVwM^_xKxAjogoJFC?~AYH;&Dn$LKn78^%>I)CetkT~_$oh&7Z zhxPk@1l|fx<`2&J{;IPe<6TGlYris~6`SdxFh{+_4h^?JIq!WB55IH`v{Pw(^0WGy z{}juv=<~f$gv|}fg_t9T+FuJHAhRTTc1`ixRo|{YEq&}f$zs@ zFSqiQL%hx{ww=5_tKUXs{3I=2o|n^1>_`qhD_VNRPtxg!XbJ9u+%Z4t!~9c@E18!D zYenAsx(f(Ihsg-cJdX~3VdYWx*y?(wadtq!u+Y@o?u^#PZ?fSZ98F{k`3wk`2V<*j zc9vSIbWNK)r^!F;x*9hhF4+0EH^A?fiYGScrwzAF)bdUH?#e3;)^3MCiyxXc{{N_Y z>!`M#X#Kl|LUB)UXmNM97AWrS?(Qxr?(PuW-QC??i@UqGKzaF=`+L{D|71<(?3p>q zIxElFlYKsq2e`P_)FkYd)$TqzYmw)}>=V-8Q{{n>S1yTE`KzIge&QCU^>WE98Q3^4 z+A=f?-)^?dg!#t>$38?|1^d=7$mOs>`kHs{2nmerV&}XCQRrGTs7Ul-SfE7>F;F%& z`kJ^8({MS)HY%epky$9LiD%5HO*bQ$;UKJU)Nc0Es9_^hz<%Z%6yHR}OyQ5GfGss? z=y*hu|D6NnXt|^kkC!4n(9+@-YI)_?6%@kPk%x~u{(IIn92p#ESdC0lDRl7@w$z1G zg^0ua1jPJv3G$;Gh^!uD7@+h%D`x6>F;ZKCKR-DHO(Mx={QJs=pl>QXd#30j zIj;EhXgz&R*AGTvvvrGxsRp0F8kYLo2^NR`5k2p_!#r>pq%(qH<`Y@BL3Ic3fC-TU z48ZxpB$FoJ7{YXu=)cC5G&`eBlw}U2IJz^d1YElj7qgjn=h?&4WrDb4Z7mQF1}Z*{ znB~KQ+j=H|eSv-MDh!v(rZXR+69mMO#x$@q>D8Ly++|pP);@h@xx0LX*+E6`gL3Zf z3gPKxJ}eZikm9_+umd2~81#P$wNa$@dJrwRUk?1K32z2 z3ExAqIx}_SsY&>X0WHmLT$1fw$Tt$K;%TuB zMDQH@9qP7(3<2^puIS=+w%r*KC_+IBy`I9q)UzD zW3mK9dG}WUw;#yMCVrChbZWc1Y&jJ34^TdRZncJB_g#cV6yPTrsI%fNr9$w|k zx3-%go18y?=O_KM_d2lrM(rSfB7}D>ULm4bZ?i*f>^^|f>?E#v3484tpYOFV zHntyZcDPq3Vz@8@u>nYoezuT~>lM>b~ge!F6MI1Me^XKxeMUD{$Ye z)WmT6a4#R!(8H59UmvIQu$1AyfVk2=biWi)@uJPqw6oa$=VN%RUAu{~kmwzU^1-(cX>5h?$3wK&n0l_UD?&rN4d5t8I=rGET#5Qr6N8p>*Gu*U z#e%$aKZupLMpgYRnp}8OldovU`cRl{X=^JWWf&7d@V_4$iJ)YdYw^RgVON?>40x!g z$9cI8T0d}Cp>th0z-M&VPWkIC1sos%d4C=teiXN1f57;A!FQ@>TXGp= z9uDvE);>wc}+8r1L$;a;80wtvg4{4cE_4Y;G#*2|4Wvg$ z&lo=48!U4YveFR>OBohQH&zZ{`S0 z*n*&-OMIjcYN=>Mpy$6PDOcfW2HVwz3TaOg+58|c?_V^-w=PunOv_o4KDpwt5-ky+ z6A9R;t~bRRzS==PE$9E0{2EyJ0q8QDn zEX@@!0Z^RaVb7@MUGK4Hg)`VdL)|PqgS(r4C6nUSymJ9Dt%W)KXa*K88N-6T}sDu5?WeKrd8D~@&xBSJV+`a%ZlSJCG^jc zsusyDM^0+Y&YN?*{c43V4K9<1LO2#CzVCB z^|@oNH1_hAiF2vSdy}I46mzpg^4YZNC-3kFV^^lar`mSP3>uq;DWqe{_xrTklTe*LZ0$z&@wC11RUhV;UqIVP z_W87o5Bo!9QldA;PrU1RAZtwFQ4F751`>@g`^A&73bg=+)Mh8`D0Y|6`@e&nz8YZe zYg`!p)mzuoK&KLS9^1JWz87cLqwzxDIRf5GH`chcq_@xTHbtL<2F=|+MBIK!J^EUf ze~}Z>f|4IJ%^#&p%o|8Q4b72*}6n@k&o{h z?Yyn$4jnaJ>*|})%jQlXGi!aC#p{}=-DT~L`Yo&7HKZddbNb_RjCQ}yk;voc_CU~d zlwGj5K=Up1-fS8RC~`fA$UV(?n$VQ)B@{TFX-e8Ib9M{s6@WBt+%Nq=iR3P7Hv=RM z$dH#edoy8cO`vfX!xpZj(sq})nr|ff|-ORKQUzgd-NPNX@@0Uo9P8(oz4kqA3F-Cn8f(duVG~R z`+-Oaf7s1Dy8$1*fi%4_hKSOnD<2%-Xrw)ZE%7xPWZQ-vFJR0wx(V}Iwnfg2@VOkP zip6;#by}hjA@L9%+FAOOD4%OeUJ)YCrvA1$r#nsAuJJUU^#t8~sEB)Ax@ubphVyuZ z)TOAR6LT}3dCf?x9g@}F*g%I0Qv#%I4fiRNfOZSb=|D61m+RS6OLUK0nASCL*rDOd zAFgu^Wby68XC=oi>&kZAgnX`6vhwP=ExXl-XQHTFT!}w%z1D*}P3Xj~Eb9^ZFG20j zzm$&#YUB$C-I7AQ5T1An0~XA(w5U?}*(X*I(j>9Y7K;V8Z@i_$GY5Rf_m4{2GoCyKLhaQ-B6wu=?T<2xic;GGdskGsl#g*%L@^<}~()iwJZW+sILJ(#)tCZPH?ao7gc4Ify9Q@8{zFLu z^rv`X7D_1?YT72%5Z(3}pV9ccCgESfCkYa^arTtf3LXAZBSuX+znNO%sjvL)0U7cY zpaJPUoKxkFP?dPxD}z0y=Wxb2zOhV8b(dG-`46!ZDxA#Z!8U%x{$7WRg{j6w!&w*BIEAPAHDp_i(qgg#m zc;H)Jb;y%zD!-Wn_x7rGgo!N_XI%7RG_+4OTojJPe8P#&J5qOKImhKT?i-@FjcMtX z#iSs=z#e5kx$eQW6tH*5vds`0e2r8sIP%Oczwe-Ci{duIA06uqll$uux#pW9X!k;i z#?QlF%%1t`WQd;g)9*8|$%3^&^39lfr}i^M;uAjG^fq_X?iC05MHf_>-i1Jn$^#e2 z&5nHzeC~6FKqa+Bz+f{ZHTy8btAq9q&$834QDwu1sGyY4Hi^i5kZ=bK{jRUKdApU!1^af$EB|~HLnGDCsUCICgXLN3q+mll%u!jfv zR4y5LY1XL#{nKEmKxGI1ye2+N2*CX=sO-9EZp#U$f-E3&J)W0fkStGp`T|A5dVPQ< zbAa>_5BTC$CL?2;d^N>X68PLnfjKl=Gw{NLJd&AB1@h5y!<62$v5dI@5v%;>zD@w? zgRfBwC6w)nIUVo&gh5}jfQCT5R=4l*Del-c)ZK^wA zSu3_TNsafene&}1i0m-lVen)}4k|klWvGN*`EmiCTqj14i(Lh2`)%e^Tt#^CFG^~! zV%*7$ii~#UFlP*%7{_HnqeqT+cw7qQS>jHx<%&u2vRc9x^EU`5D?NqjqkFBY31MME zoiVZ;oS8aO#A4=~o@H6ny9V5=sbCic`}KMr8-yf(F6&*l!YPho>t<} z{dCk|33}q+Tt#>F;%WgQR!Q!(tMAi+#$zK@5 zLN14EG?}DBjKd<7CWX2Y1i8c^@9ySL<@{=NZFQJoq59Tk;6?H z!%bh^CW(kcB4)xh26lfda7xfhX+lxbGiw-)!jF|^$=d-wGYG|oLMAUc;3}G~LImV1 zS|=2Ym&J0L{W2b~Yy{M@y3rR=aDCCHl24lNfW#by>S`HD52kZNW29@`Nn_B*G(TBl zbbhSYQq>*=jcHvRIGQZcm7!fie_Vuj&D|hNvVeEau9bFP@{u4}LET#lkT_Wib3=4_ zAZ?D@r8#1%w2lEsjM9d7g1_9u^{&ZfFLvM`ZSO24X%&lc)nc=1^B$4o+m8!rd(3D| zu$;GZs9bRyoj>l3vwk?zJ|MU%Sy9Ex++;{2F(r}$#TJsbwC0y6+XPmu!$rAsORKQ= zR;~xw-|>TUo%JXO>&@@vH1n*xaqjF`idUv8_yQ#63a^x$$gPz#yYY|dR!jM!2Iny^ z<6DyO*D9B$UsCZ`S6pRYX!#UDQ8IJiwzB>pA(d(h7G21t{^2t!C7d$7yI_gYQ^49c zSyDp)aVP1`AB)s!zAVY+J1>k$M2j>3qBR2>76od=#&1DLv?s>SGF7r_Mg-?jn)U=~ z_NGr9v|)cPt9RLSvpCy11^0=bEd{Maz&oUK&VB!zH_L@cSxEeXQsbEFg%#(>C0NLe z?BJxwkwCnZHH(K|sldt&7Q`B`8sN`;YrL>vgX40pvEs7!$ z)T{b@hy&fC z^y3qKIn|*@>S(~Zdz(Dte(Dju(fhqrRtON!meT|J>1+^sfsHpF;4R!ow*+VL8NKjh zCq@sa%CKKzqIUGm*2c9HdcrFQxYB$==Y1fgA*bA3`$*6zZ}u}|eE(~h>aIQUs&^R< zOhZoj@Fx@390<|f-;1_tvgUKB05Vrl?4mJ{U+1Vtw9`x1$F4k{mpF7+V^|*?lxoOY z<)4CFj>1+BLsy;*--kWcrVvv(-uLN@2E*cpK`JduO�V;$T~{JT|2nBdp%s*cjcs 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 UpcQc^0Y9DAm=yE!(&K;s1CHx~^Z)<= delta 92516 zcmY&=1yCGa&}~@U-8Hxq+$~secMI+WcUT~}`{M2v+}(n^ySuyd@+I}Z|GllPtux)H zd;0dBsogr&v(X=x53iPp3ew;ZaGyTGeEQUv28czZhUrZMh>>C3*2VIF!9+Pp7M;MFEB%|p1L;UprydeJI9}Z?r|9{4P3h?eU0O-dh4nD|> z5Eu6Uo)G5Kp9HmnU~~ZR|9}nn1=4@aT75JIz+VuJafSRhHu@(HetahR--Gxna<0GL z6Y^kKq(6Kybrs0cP})zQEVMudnedqLljKOCFC@4~pgCe(6kvfiyq8M~& zm=)clrl6qyouXB}WyPJUm5rbn+s4OeyJv0d63qR}+u-SHGppIS=Qy{c`}PR*J=zq4 zO=*@M+C=iUCa}{@j_-nu#%E#-zR+z-KFBSISZ{mZMESK_-scKV@HI9~{muNnZ_H}7 zZG0?C_9{rdZK!K~`=HbAhU3=@9p}YmcxTGCu3#kEgxyW1dfP-Nv0Hzz-j(aQPhb3d zH@x8fewN-9Z1ih5*lSwa#~5l>*aS{H`05Lv1ObNrE--{ij2KU{5QAHVqJW0IEs00a zt!;V}8XctozLRlgh&FDFq$^II-1{)76tUzGfvz|Y4)oaH|eOWbX%r; zF!AV3DZs%oa$8DA*1$9++d>EB0g{pClEK(S2d${`IEiG37WMJ(0a0vwGJ=rFjbPm2 zMXH{A)`hlF`s0c0eBPNf(bvi<;|GxNuMRnUslnJO4%O=O4z8hD;~?pF2V8KjptQZ! zS@*r_*VdkdyVsS?#K?#jDdo!RnPvqtcYbz^U^*@+qjQOK33cPD=#OZ z9`4;R&d-zEksrf(?JVOnEix%zOgLTTO)T4Auh}S{oWx%dY#XXc(~m%ALvWpZ+CC!* z2SB&I#`bHS!(6@zrU?+X+g{+S9qNt)GwThSAV00Z!|=uBV1eF~uCm^K;>OL4$hCuQ z$HW+BVO!h*e{YjsVCJizy51S42u_Ao(^C!&(0G_Q&7n0bGhxAFPd?fIr0v=xt4(QT0TP~f_Tt-Np`dk_I z4TP*-jnh)@&dGvxsqRu!`FZk=I+K=iV~xG?Olo2o$hNdXe|EO6#9pyiN!agM`D;;7 z>9WXFLusKXADT_?@#?Zh9UW>I<$Ta`Yp?$RTg8v%I?KCZRoS$pxj80P>A9QfIiS@% zc;v1rt};X-`9`@;tJB?a3xzbaFDhFdHo${MEEXCkVgMW9>lMpYN^v{el#z3SUx5ZKf1*d66_~r#Fb$V>bQB z;6E9ek91|gr8Rz6b2}>8GB=dWF9WhBn6LNvC#R5xe3LNqRK=53tzS}OPOZo(w0oWX z#yZJI3MmTW*O-Ib78x7cs$}dB7Arj|@45!Ky6Z0FRx-vA*rJkiz+5{~7|Oidifkr6 z&-O`wn&YBHizLT_nU*T5#LQn9(CQi8`Np=oxK_Df*#2L(s%SUn&%7FUC{(eDtI0tz~gDDLyXTJg^cNtLvdz?U+TX!ozW*mjB z;Fb=u&EbY-Yrl`LaP-&-i#>?Px216=5EZ9MC}x8KvSSb1UkceO53wztb9&B6T%B~) z&$hf>OcOH#7ve6j@|I2^H3vA{wp`1W8UjvN#)yab+iFEbS62#qrbteu*0(4^27`@$ z&qS9L!E``l>otQW?J2G}TaZsT+02O&l80%9QQt-cY0p|jf8>7Exv*_4p%Fe+`I(r( zEOW1+FIB0Yl!@p(Bm?i9n0l0yzyDND8y_&HO?t*qro;xJGc4a-BmkW5*J5TiqK1!> znI!yf&jaVI7(#((8T{T*V93LbZ@6?j6%yRKnYjs7<)i57303JgT>@S`*AP@4NEG%v zhYS+G_Q|K6pP*k_5jwEeRRdK3yv=x&<+CY;+TC`q%m}C+}T{8nS>)OY*6za-oU+DKJ z+Rn~XVS}q7P*qy4%xu#mGkZk?k2LY+`WAJ~{B>1QDT)VOmQA6vH<=zk{Olx&5q=k1 z=YMooGlm4O8093@X#nIHPKnYiTW2@>;zNGU_?r@tBEgF-r+uy1V&}t;8qg~jGyGJM zwcagZDru?`wN(m4$2*?+`WY%Te<;B<^_tPxesF!WR&_DS?{;$f_IvUWYYWEJFx5IgpWqqzEo(z4f zhCZVr=HFZAKA}3(39e+$bquW>tYOimj!qg!vwqk8b`6+7yY-=^x7d#m)6GN}vy@W< z7uM}Zo0^@qYPnH?FIB1r=*cPm5qO3=xmz#sJ z<`$HrdBdG9i(}9sreUtK?#MN2X@at2BSwT<6tP^tO`{l{5D7-)Gc2K*nstvR&^xwu zjt}Y#9P#>q&etLBPECwJ|j=;v!W584MtY!WqD{Io=DK+ z9q9+d&=sbK*&wUY_xC1mOH7K-^Cd12_&gqadEVUYMgQIXKm7%gAi?$2>9_${fsMkRScx@ zMystQP`Blw!STYR+D(Ewwsd7ZM7fZ8kK13St2~;St`>~n<+z#);_AREx|w{BDt<2VQ%vnHWl{41`&2zP?b+PB2A2;=cOX$RDL*$_e{>jVvJB2(X;(<~yA#6Gg4A;+GhX$1@07UDYN9yD*EJ^FJw4`m-S zfwy%CS|(H4x7gw9Ih|cZoj%-1IKwXt&-m?DQ_#0L6fV=hlNQIu;#b*N-XS&Nw7*$$ zQzJBDP#N}*HgESO+1W2g^^bB%-w$VCd4G12#t27~K1X}dc4+kKiu2t4$tB7vYisYC z-wqiv6uhhVm@~a?+-@p>%pZ{xW*ESD4@5cjNTnb~)n<6In*1z&$w5V%`CwGkGlDSt zwIbB6jY}oHF4(ZOZ)g$FE`j@dV-Q-#J&giLM{LA+R=ex-)I{?!5+^^nk#g-KEkHwD zw+kF8iX)I}bdr8Y?i`*VpNx|qF{6K??@V{+(lFgzG#NVBy-8|{j(u(S>dx()0ZJs{ z(D?fgCNQzo{;1xSCN&=d9Z5^8gh(l`8-&{PkySBHuj^S;QNcOLGM{p=2S?Z9jr%d&NdJVLO}Am% zw~+v>7p>4R3^i&h!5nE0E|ep%0)~3n9*crMOxA@XNv~4cO00h$a^2mC;nTQY^O=*8 zx0+T#Ujkwc)R~;W_aNFuKbNN`5Ii>XK?o;BbGP?FDKuWWiyQnR(m)a7-OY@Cf657 zd=q9LJZJ@x$R3=ljMiV&PZnxtFHMa~8zl_|a3vBn~S{ zziWSC+WXMDR(9c-=}dYAKIRUfErjFKUlH1uP*h^5YhJSkvD(;i$=0VO{j%0*v5;Il zmc661!sL>ERax~_ZovOMUB|#I5Hf;;MAlu<`YbsL)n^X{md>4Q;jAGkB(;M=fK-l(dEcBf|dQj9QT?Rr;nc?6ekIJX|9h zl7$5{Lv@8a$7HxqwG~dOei89u$ccimrO&Ab0R`^tSp`q^1n^#i^>uug>i9iHzddg| zO7_y06{O+KAuUXS>Fix%=US_1@UEB=MxomZW@cO%X8H}>qiqn{JvIvDmrN6|>dAql zbWbrHqqA@fHccD=$)WFG!nl!Kx-Uy(ldz1tBd5i8zGeKdFd`qVx~5BT+MFxS-pr0A z1GKthDkxM8P7hp*?<@u)j9^u1X)&KDhH~glE=HjA^22HZ6|?=9A=0UqMFk|okuh}& z<%jT8Ne|DnYFh9wc%OCYj08h1j3bMk9Lg$HHYhT8!CkzT1EdIQuiPL)Er(^4)2uC& z4@Ih4MyI9rZZzg_=;V52sFW3nYz-WTveZ@wdv;;dR(c6%vcbZbw%%)xvsY8F92apR zNh5pd7z=}eIfDjBKQyN)9Bo(vGny?7Q2nF*792@FxBDVW+}=4z2}^jbEt_bqZYDj% z!KEmwVX%?+YUYdgl?49mDc_)2Z1$Z1>ohC|nI3r(7`$zV&rFyaut0qMS7_}?fMFKp%1$?5tR&uZ(ABQg-WAt$DB zbOpkxPX!mr$~R|m_-PnD-a@GB&&hi{HGQ0;d(`>=VqvG&6}K_BGcf+S3rSvtl3O2$ zjtf~1{H2uwej^`1I>i|HO$~A_Ci9jn>l4Bmo(2bgP_?*QTEy1tC>`s%x#hg4Hp48y zgr$K8RBuYUzZ#L0WIO7wmBie1I}87?j3bBq;{UTC0~}tq`1oO1O&c;BwxjZVOgG8_ zk*T6=MDGY5Sj#&*eg{s#ekHol^34!_Cf3^pI9d7C>`pbD_1D+;_|{YcD%6@0EP?mM z0*(M*6$LR17f`G-TMAsML1ToubI`V~!2>gpbptnl3gxuu^VzVtd+q)`4w<1{0IES+ zs0d7&$e8xoaHej{aO0Ea0@fa$dkFS!O=bXBetk)5On33=1`p2GjKMuh#1xt>vf~~x zu)`8|;YvrJJ)o0eaTU|*LM}i(P{Wo;_0VW4Sh&n)!di6PJqC0-e`7#s<^ioTf2Mvq zSKCq5X|6$dt~6I5raL5Ja=aPElDCN%#?wIB04>nmz{4ISU(0ROFpw@CYn?@E+-g1; z%|)!vES>b3d_r&SXT^!Vs>nlvt;>J2?_;Wcs8Sx{8#_-#7A9&P&#B4~937`7dN)vB_ds{klSIR1Os&zk zLc;D$h%0`PmWLXapA7N5{VT90QR-Hzu8fEC_Edz*%;{~iOKuTU#h6Ed9Vm{Bx&2Pe z40+O3_nsQwH0;wRP5@oGkDlW#p_bU!+aJ&RUC__BG~PiQ;Ey9zOTmym`4i3Dhrc73 z4yDV#`$zY8;Q6$h>|ts#VV*0L8??QKp>oDba+dLjow*|!pWo5=Wd}zVK)?O+5gC?EWqw+Si&tSZ zeo1YtX#VgMiiukZh$1>Y6rqeh|Zw0(7^lyiq!+zHz8l8(?Zg4^Ji-P%@qTeFD$e{;6`hcpiMiQw{l^iG8Id3_Ed)Xk zwP2Ejewf#7K2F$HiiX9-Fx!f!{Y20Jf4ve0xq2>DVs2vm2Rxohm_Z@+Yq}aCiF=I0 zq@WPyNVdBG@a4#{lt0FFXgCt?5xc|KK7H3p2orxQsOCCDr9Ff184xlAk2;ZrQr3}Y z*on4E5HXslQkP+x0Bz|q)#l8v5?1t`+xm*y$AxkXgd&mYQM@P%&t}M!V3?JQAOHms zV!`%RW$GJq#y|*}MNP7pi6PP$#*IakhG=-7p(Vx$(7e4^*^sWb+Nr|fr&S`pPTA_F z21V^4d9g1U<>r z<{V0MaVtyZf}~k*Sr^h)2bzXpnY+^wQjk_=;mQZ$K%P2>)DJ3x z$aL!gKo7>m8$w#yQmnjw90_}R*Ze`n5WsY2HlK2Ys?-;88ZgReM;hQfH=b6)j_u*Y zN^`09XQj3KM~p^74TO(!FW0aApae z^L~_bidlL_S?)M3ooQ`?X+$1P&0^W&th%3UKs?3E3c z(nBL{0yu~pzYPfHDehG6fvum8^F&&J2F5*V!*N?JO5eG4NUeIkV(c{;GCH_BT=q-{ z;C;;RZ(6Q?j2_SHG@TNfmsGSIzRzJR2Ewk>qF2(zXBm@~gq5bU zb2wwR35g#hc>l>b3GmxB+3tRF`0lX$*ld$6B)m`h`(~DTvRlSLD5rVSBRm7f#SHBg za|X3Q4#(9Gf|IPN{#MHKWKz3<9;x!;UA8aDtC&uhhZxEm+?~Wgrym z>T3qjZ%->Y>MUy~>Dg=x?}X)Zxbp^hO?k)QJZ_5artRlCzGl7B;PR^w-dYBB=xOQh zFd;vCmcVi#_~Lmnuu0LK+wp z^by^5<|Hh3rN$?qrODKcoK!IWYUF9#U*{{IQ@Nl{iZ9!~AC#f8#+Mxc0lB_t)^}#Z z7A7-oe%%9u^9qZ!iDL3iWx|l)B_J*h5UrbM-iK1x#HV{uJJG5ynp7^{kg27E=V!Hy z$Tp}YQi|p5Nr8&|s{A3&RG}){RR z*P#VmFHheEO%?2@jQv*tcCjM9Wtby`c6Z+qPl7fCnmjDLDcfwXhk!FmI-MJV2d+Pn zJN@Y~bANtakAZ#i66(0D`n(Wo1Z~hgAkzi<3AsU>07-`de+&)jYDn2c48D5*Cm}lG z&na&u%C@YZ=i10W&oRT!pSwS2rNchy33XgledZ($u99_+MMn)fEA5h7R?+W>-p{!~ zM8Y;zAyI;n#3Z%dM*tRx?zP$4%^E^W7@=a@Yw?c4a`X^@BU>$sfQ?#Ol|u|@&#MZw zfu}{~NvcSV4Zf=@qSy0W{bunW8-gApdx+B)`09SGNE_2xfa)L^881Ig{zQ;CTvRM0 zAUm=qQ!Qty3&7;LNz`OuiK$DW@ybHw#0Tsm=_b;qVd{yMuAN ziGK4OSENHc2y!*HoW-SxULNI=SSpJ1%_Rm;9_;R-b+)bXuv zW$4YtX2g-(YoflGYb=^C=S2zIm)TPL;YOY9O?QJ zr)D)d!AaU9s56)r%`~~r$taamLDX{Mvgy+Y%<-B2A=(&TZ0LPXQJ8k=sg=`NF{h38bAlK|aas0f}azIeRp-nD&QXja&xJ z$rEG^CACJGl%aNPHxbE(p|WTaS;-ZI@~udSa-Z675uGsEr?JI+SjS6;V}9HAbGFKb zP|t+Iy`DutiC?D+n|qzu?hKZ4rV9e%T#^vXh&eDq?Z5*AnJ-h;mZX42Rm-33F*__CO;|Sd0X~t~@QMDiUj6#lK9HiK_ zSrss!6oQN&#UYZ2EBNklWu>I4Je`nKW_Q8qyxvf0iHHY#{Iu=GLM|GoI(S?k`3p9e zPfU&mCSF%LR5IK+)a%ZK*$6PlnX6eu0THx)Q!QS`jtc?y&~RQe`8VS0v5Tzn2)>sa72A3rIioV zg*fvqi5IA^6DDf` zg|__8MSo&2(Ys?MR5Z!aIQ54IXk> zj*gMPF*E~YA-Op-z2Puqp-D;P-X0VS3B20aY4B zw`5^OEXj#1^6Ga+Q2{rq7vln&~3PEE>p6?wIJK`9MsdmCBl{H zOguq8uJ1jLB*G#wL_!{V;g5-%xbvZiZhC?1wCd;TQ=)@!2rRcYy9*Nm<(-h+St1gL z2TGAXL>bxo-|+7)rrn=0otk|x-xNAieM)tA^=5%`zm6NH z)1H|Q!QVJy^EPO%Z(IAny%8x^d`J-#JcMbz30LcURA}T}U?M&n8798_YD88$5L~y9w-e zY|@*~&zli%F6-w!g2^ua$p`WMs@0@+BLa9-$KZ{pxmj~N z0xGxt)?= zZxbrnosdS}X_SY+JeucLyDt~b)#_jxce?htF_%-+SNsG-I@S#8zhO%9zBj#`J3Ope z$fdLSqvL4QIdrcqe)tgYh{zNf+e1>fE9oREQ62#HYihvimo!~$8X{PO^e^YWWzx=+ zoX;1!?AhL04j5Yg( zEsN-uBdMEewV^``#HpkwR-gtm($QXY@dlTO0@P$DI)~t=^}CxgE;Tk0`l5V<#+36NC9hB~Nccy)#j{6yQ+KRk^65)9s>vWGH!cp~t}PFA-j>9d z3l!LURB*M#iOWq3Z!W;kmz}yaEB~48Qu|3Um89 z^h*|_GtRftn5|b~_SfCPQxXXb%>rIBEm`<#hb~e?l8S@eLdavDK$R5d8!0W{CGI!L+m|t}cVQS3S+-8;B*U&wjJ4d81@3TB zIqz9K{9gI_E-!>|bu}D{YX4W&1X@SPm{(Lx z_sU%R%(9a4+BIjIovz=&@KzPzw%)~c&HA26`y+07w0raDRzb97KU1O@ODNgXb9MZfj2MuCSALZmffp1n)euyee2w}#*o(r~U}up`Hx&x|cU8iFl2SuHvRC3y$W zoh>9ZzF0RMFm@695ww#3yw{ICYDT7s7Zmlfn`MUk49#YK6 zw(z_A6oP6}dT*nFBZY1@@T%V6-MTW6OBwRFRZV_h<|1@k63vrt#{=N&x&^DC&|rJ0@PQ@(byNb=r(Z;1Q}`a)(a6XKhrK{ar#jHh&Ec454G){^bF zkM$_xWUX}{K#u@hRg)YqEFB|c_c^BY*81Sg-TaGARpUC}<4x@>g-)wOSESbHK+`zp zjC^}?%>fxWoLch;McJJQZnm{#c?n#23qM6^XL0^HeCd)YuAnFpV5FjiRU~HJx_Ned zgm{Qy;>il0BzknH_o4xV$4mdtA%pL|LujDp>V8WKkb_eXsjN<ZR>JL@a?}re$F&L(4DN?dD;O`T%sZV?%>C%kU^PmH%)B-4gzuS7?Ok6FNX8l9 z`Re1}i|8-emfv~7?)nq#0SONLO?9952FGM6PhNqw*57NeYPY6EGmR7wAEsGXXf}5n zQI?$Pfdvl98b*+(Tg!P=TyW4bo zvi9$*;!OCQQ^XNjQ)c4PlM(tMIy?8q&*6mZR~sR_>^y$sDiW|j4P51%T-cW;4Q>Qv zpla{yl7ZdnWr70^8uXm^__E++?6C8GRD8Ouc+t8<2&;IjM~C{`fn2U z9FAH=9_-Vn6u_rX?Ei*wYfrVp!T!$6dgvqr5dUM5d{FS6gMa#@4-$fb#sXcE;4;-3 z>pz13W$7C={{#4DzW=6hGc7Lvg7{c#zQ2@7>%)JPRy)Lhlo5w+wEtZ3(ShuLDZc}; zq5jV1e(|}tzW7s-IyeXw1|2j0S0H@6LKGJ0f*cn*o+g4D{3Gn6)+C}G>@QoaK8=O# z4;vl;GVnwBAGQqmj2&!kRuu9-QkM=qsnH+OApnFrjrNxWLZQUP2DMY*!pFZy(}KT; zeALp#2>qjj_Zc8i{-Im{Z_fYdB=OC$wBR3s6Se!X;9xNS^`$mnEhYXc&Ko@VJ-^mI z-sWHYqn;pA>YskbLxPyAA^xW(EYJfbE@C`WB0CsPtx2LS;BWnxIqoMosGmONk;QL; z1b|-JbKW2CC$fI7R(y{G{HXl*xs;!N95{7QTmY+ zL|j7nk(0_fHyW**TqL&?+&H@`uX3Y|_;J)VF?)Hyn6Tvx{VuK8cGf5S+8ECH77g6K z2CCk`&$Z>H>eD{E>NbVwH`@`eE04XTqZf-)`!5n0s(WXOToWo~@3RMUrEg-jUQDU)0rDp9`lmLYO4AP(dDf` z#jsnH&|(}*??Or{4Yx$^JcxPRK?fw5q_HQt^ zuDTbZMn#^ZM9;CaNo(%X?dKnRA8%*qXxMMh&>dswSOd7O_;uw7*>IuYmY>P>eT@~K z#$*>KyAmadJ46hK7a#99&tRDEh}Cc+!Qe>!THRp&B?d-}EFT`qU!+;Nc2IR(RFQ8H zk5EnY%+DZG7bh$LEk}sUX%u*fJs1h_lrW3_-q4>+<16^(Yi0UcPWLyG*a-WD<<&V^ z<$}S~qeWmB3?+x{7A|Dkth2V8WPg}m&mztl=d5l{$W$i5`j0*jz)NqCe;`7zCwO(t zvz+WcMbKCK?oxU$kzTSbtw0eH9JcMNWh^B8QG-TQUJN)q0W|7e=t!VwG&3JsB&4AP zCTbC_ng(A`?mkDq?x;cxdi@Zc*jlL2B?$$)W=`M~JNuH%4+{Y_HgSx)U2DC22GL|C z2_uQ2M_>1yuZ*q(UxNX#c{3sXB3A*Zk{Y84sxo4BaGprc5!0!ZqLXvR5tmRz;_Znp z6l9^3Ra5w3!GqsL$kBkZ5K1~@6FeS<$P+j6juu!A_VC?9mmCfcB>kyDo!>1b6}W#o zLP!^ZQ^E^Y2-;M*M48v-|Bwvo&G74s`EJzz5o}=wd?tco7KV*J7m$Jq;x(E=B}>}8 z8)2+S*Xf*-Q1YZVP2?tI85`ObwHQ!(7!K3nU=(>;{vr>9;7|+X5dC1c*N`zyi|`X- zNjDE8iVDc{d$%sbXWp6;-~LUXZS9FScg{#Qj(F=#`~mgINv*-DoJFgi6Jwp&2$|Pg ze`TD1FGQ}u8y7O?A}$gefV$#QH-huUP@KHDNxkYB96Gl;>RhkD05cQ^Fep4^H}2#Z zFwe*7I_@9v1xX&r(~TQhG*Eah^^^Ihhb?SC&zc`t9u-zdAGk2xsZB<}V;FLEN{N}Z z@p#UHY=HF4W`&!T7|?OEMvhv)-hm=e`gd~qm*YhYgd+d!GTzh(NM(*{bFFl%Sr~!UR@rfoe;`}BM1I-<)@*ArNylWQ0f#lQ<6)WZ5_;h zKG>zRv42u_9&;+fgC`CXAC_09D38B8OQqu8(nN7=1pZy-_n@{77<}$sxK6wpniVGt zRn8>+@uk#9r=_Uh&IG@S4<7+?$8K2qxz1+Xfv7SAUqkaWy_k|uS+wJG>^g@#SG;50 z9KMraATWmk-3)WOb3|9;LpU%>*miUOY88d??G^(#(v%fS65Fap)~GKi1N^}vp`XK# zVDhBe8P}$}wHdu*qCmxNN3j_#x7%erw!fJPU5odD9CNEBsh%bv%2wy2-Wi^F0h1*W zrKb?I9m=^?>*49*amuFnm@8`Y`(c5Bff8CGmO`Z&Zf(Z{`eUD){7(WD#mV>ivA!i) zr?qTLzoZqKySe)vI&pYIgrIZo!S zvY?ecBrE~quD4mYf=BgFt2D)-IIyfSvwb3D?8aVPxUkHc5=QK6k)GPTuVbERUb>zu zJb3sXUW8}T3M|f+1?cEd8P50oT`1p9*RICbbe!R;(4YIkv zGI9)^pORPmANf$zwZX4GLz!b?hvt!q-`RZ+NYROJb#9grs2rklYF5XwHbW*Sqin+s zd%^6dax9;qbqjq7o~PiB@U99fs-IA$?>B4t?X?6mKjEamkIQDnq!djtkHfm2mtF$BBby!(6H~s@|IQ zRK#v;3 zf!{Q)>xXGi95Wf5&-ZMlErOl??JNZf`5Ro*-LBvC0_7RFc81=r63#|{T|O1o|9X8F zBCVpGVcNeP;zS^$bND{(g)HnS!oORTbp%{HxRjN$aipTgZUg`u@m)) zCVANk zfUwv-hs0$EZsEa9-1==QoaHu!Z}fonLh|bS&TG*X?)CMT&i$@?0br;N9?{fg8VX|P zURR#ZpmHbT%|#J58Vfy|rNk-)1y_hseH$x{E##~N4E~qy{I`&BVzwP~v`WN;w^yPl+(IiB4 z^QTUI^9y~iF6T`z;RVhfy2`$MBYxI=&E)=Qp6%G+yz38kmwLTGJ@UG5Pin|t({_e( zq@6Id^}HJ?Ci>mhVLy7o`xEj!(1@DwcdkJAHUd_(0c_Dg)h$9LSJwPR`7@uDMyhLv zmc^pq$<_{{!0`;I+ZLA_GL|~qgFq!XZE>{da$$$LZqr^#AP7jrXE1zNK)(Bh%;<-d zIJ-wg-Eou)x^`=*4eBYjJ%6=L!Md)d0!-FDsOMpL=uyBE)+?(C!Amf!`+=YYh$r zA9Tb=j;(h&EHB`D1k8H^jHPimC;Y+|GV5hZp=Op*Y8J&5wjB#5gPfz>)1!-c_+F8M zFtMiMO`SVOsSJhzQ71V&b-iIVc?Jwht@A@VHrGCXb+*uhI6>(jF;3ndaT!5f3 zyH8l+Bkuh6K@-*wWt+|~f!7)Y#sSN=VLjK$M33bCwJE?{j2ft^y70l7ON?Gj{XH5~ z@kP3Msdh8P6}2apYdQ&cUVA6(E=p*?l)rFvw}IfTxs8nJ|;YU`f#Twa7+ zCVJDts}9hSK;0pxA-SFn^T&YUK-IVv-sth|^K<&${VggZlDXDNg03oEtrU}rX@>XN zZY^%tQ@fVm?k^8m?ZHE+_pE zD;y}>4;gJF61tl)VurUS!*-g;^j#W^gNfUZZopobSoYxA#YA-O-tq+pZ=mW90Z&4H zyW5^k5qr!g@jPi}QB8BZ?(|)u>;pC*K+o^zFq8Isax0&d z*S&H22+?vI(rHN{m9rFPbi6`*yw;JEiJMQeVksGdXrS+=QS?%tUh+i3^>+b1w9da)Az1Z-#tO~ zGXc*!$Dk1v^C#NIV&B$*wUNb|-j_H{t@3Ar;kJJE*|B|!2C73*m;Lbys@MaYUjpH} zX>z0+9Tr!t&Grg2MF*WN&tL1aY+!5%4hbm!}x2opx*L*NufiNF4VtY6vF z!|(JRD{S^hbXJbJ*q&5n|51^3PmMxA-WT=vBVIe5fXl5w!QKU>T&DsDV_5Kf@m6|* z-?k=J-ss1yjsjnkKi-lVgG>g(lHOlihD1ko$EV_IM+$VtUYn;DZjR|on9yUIwfkjWbF>|TJ{^GfgDVlP9?elb=Pcd=k4ito@JD# zWpa7bX&_n~hW(S2r|%=d10knX+zN(teP6XvhpqdI>zWnK(!ymM0v9c{W$5(6);N%Z ztW9tlbTbkINNM~US)SUhgM5K&0ozP0l7~>{QPa~8u)(U)0tGcgWEW+-$B}+Bz46+<`<`td{mh%~@fUBAp+0EbMX_ z)Qamcw0-1(H#G5pZ1W)&nkPHWgJj&_^nNt=dj`gNhfMw2K1FvbAb%0Ddn5k;HLXBp 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 W4ja9ltt_o9x8Yj$E+fuI%>EAuxp&q8 From 6b6d3a467b645920d1e9e1c55af72c5ff61e6ee4 Mon Sep 17 00:00:00 2001 From: Boris Grozev Date: Tue, 5 Aug 2014 15:16:32 +0300 Subject: [PATCH 12/26] Allows PacketExtensions other than DTLS FP to be added to an IceUdpTransportPacketExtension. --- .../extensions/jingle/IceUdpTransportPacketExtension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java index f09fcaf7d..da258141a 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java @@ -232,7 +232,7 @@ public void addChildExtension(PacketExtension childExtension) else if(childExtension instanceof CandidatePacketExtension) addCandidate((CandidatePacketExtension) childExtension); - else if (childExtension instanceof DtlsFingerprintPacketExtension) + else super.addChildExtension(childExtension); } } From 71502c01ccaa990cd0c76e12ebeddbf4f90becac Mon Sep 17 00:00:00 2001 From: Boris Grozev Date: Tue, 5 Aug 2014 15:17:21 +0300 Subject: [PATCH 13/26] Adds an rtcp-mux packet extension. --- .../IceUdpTransportPacketExtension.java | 17 ++++++++++ .../extensions/jingle/JingleIQProvider.java | 7 +++++ .../jingle/RtcpmuxPacketExtension.java | 31 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java index da258141a..3ebb57671 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java @@ -235,4 +235,21 @@ else if(childExtension instanceof CandidatePacketExtension) else super.addChildExtension(childExtension); } + + /** + * Checks whether an 'rtcp-mux' extension has been added to this + * IceUdpTransportPacketExtension. + * @return true if this IceUdpTransportPacketExtension + * has a child with the 'rtcp-mux' name. + */ + public boolean isRtcpMux() + { + for (PacketExtension packetExtension : getChildExtensions()) + { + if (RtcpmuxPacketExtension.ELEMENT_NAME + .equals(packetExtension.getElementName())) + return true; + } + return false; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java index 4cefe8f02..bc46b8f3e 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java @@ -156,6 +156,13 @@ public JingleIQProvider() ConferenceDescriptionPacketExtension.NAMESPACE, new DefaultPacketExtensionProvider( CallIdPacketExtension.class)); + + //rtcp-mux + providerManager.addExtensionProvider( + RtcpmuxPacketExtension.ELEMENT_NAME, + IceUdpTransportPacketExtension.NAMESPACE, + new DefaultPacketExtensionProvider( + RtcpmuxPacketExtension.class)); } /** diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java new file mode 100644 index 000000000..21577ee63 --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java @@ -0,0 +1,31 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; + +/** + * An 'rtcp-mux' extension. + * @author Boris Grozev + */ +public class RtcpmuxPacketExtension + extends AbstractPacketExtension +{ + /** + * The name of the "encryption" element. + */ + public static final String ELEMENT_NAME = "rtcp-mux"; + + /** + * Creates a new instance of RtcpmuxPacketExtension. + */ + public RtcpmuxPacketExtension() + { + super(null, ELEMENT_NAME); + } +} + From a9d7c15c3325764f3a71f1062ed56be9db5815e4 Mon Sep 17 00:00:00 2001 From: Boris Grozev Date: Tue, 5 Aug 2014 17:22:27 +0300 Subject: [PATCH 14/26] Updates libjitsi to 4a4a400. --- lib/installer-exclude/libjitsi.jar | Bin 1752975 -> 1752985 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar index 5b45076ba2113f1f4971cb716f7cc1dd8c888707..62d00bf3690c737e57fd84ce6bc6db3d593f74d4 100644 GIT binary patch delta 34821 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 Z8em~~fC4UMXYq60H&fLta{ObS! From dc659e550af42c1d105384ae26ab1b050f5106f2 Mon Sep 17 00:00:00 2001 From: Boris Grozev Date: Tue, 5 Aug 2014 18:15:35 +0300 Subject: [PATCH 15/26] Updates libjitsi to aa4e74b. --- lib/installer-exclude/libjitsi.jar | Bin 1752985 -> 1753273 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar index 62d00bf3690c737e57fd84ce6bc6db3d593f74d4..3a63713e727b385f162be59d3378695959065ff1 100644 GIT binary patch delta 28449 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 u2cEKM#U#l;yiUR-_pH%|@ delta 28192 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 From b3b573aaf5ce7e30cc8135f24e38b593d56b0d00 Mon Sep 17 00:00:00 2001 From: Daniel Pocock Date: Wed, 6 Aug 2014 14:00:39 +0200 Subject: [PATCH 16/26] Add property to control display of the personPhoto placeholder --- .../impl/gui/main/call/OneToOneCallPanel.java | 11 ++- .../gui/main/call/OneToOneCallPeerPanel.java | 72 ++++++++++++++++--- 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java index 582a114e8..a32b70f48 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java @@ -118,7 +118,14 @@ public OneToOneCallPanel( addCallPeerPanel(callPeer, uiVideoHandler); - setPreferredSize(new Dimension(400, 400)); + int preferredHeight = 400; + if(GuiActivator.getConfigurationService().getBoolean( + OneToOneCallPeerPanel.HIDE_PLACEHOLDER_PIC_PROP, + false)) + { + preferredHeight = 128; + } + setPreferredSize(new Dimension(400, preferredHeight)); setTransferHandler(new CallTransferHandler(call)); this.callContainer.addPropertyChangeListener( @@ -457,4 +464,4 @@ public void updateHoldButtonState() { callContainer.updateHoldButtonState(); } -} \ No newline at end of file +} diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java index a0d9df77d..f90d0b2c9 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java @@ -60,6 +60,13 @@ public class OneToOneCallPeerPanel */ private static final long serialVersionUID = 0L; + /** + * Property to disable showing the dummy picture for the peer when no + * streams present. + */ + public static final String HIDE_PLACEHOLDER_PIC_PROP + = "net.java.sip.communicator.impl.gui.main.call.HIDE_PLACEHOLDER_PIC_PROP"; + /** * The CallPeer, which is rendered in this panel. */ @@ -277,7 +284,15 @@ public OneToOneCallPeerPanel( detailsChangeListener); securityPanel = SecurityPanel.create(this, callPeer, null); - photoLabel = new JLabel(getPhotoLabelIcon()); + ImageIcon icon = getPhotoLabelIcon(); + if(icon != null) + { + photoLabel = new JLabel(icon); + } + else + { + photoLabel = new JLabel(); + } center = createCenter(); statusBar = createStatusBar(); @@ -345,6 +360,21 @@ public OneToOneCallPeerPanel( updateViewFromModel(); } + /** + * Set size of the {@link #photoLabel} + */ + private void sizePhotoLabel() + { + if(photoLabel.getIcon() != null) + { + photoLabel.setPreferredSize(new Dimension(90, 90)); + } + else + { + photoLabel.setPreferredSize(new Dimension(0, 0)); + } + } + /** * Creates the Component hierarchy of the central area of this * CallPeerPanel which displays the photo of the CallPeer @@ -352,7 +382,7 @@ public OneToOneCallPeerPanel( */ private VideoContainer createCenter() { - photoLabel.setPreferredSize(new Dimension(90, 90)); + sizePhotoLabel(); return createVideoContainer(photoLabel); } @@ -584,6 +614,22 @@ public String getPeerName() return peerName; } + /** + * Tests a provided boolean property name, returning false if it should be + * hidden. + * + * @param componentHidePropertyName the name of the boolean property to + * check. + * @return false if the component should be hidden, true otherwise. + * + */ + private boolean isComponentEnabled(String componentHidePropertyName) + { + return !GuiActivator.getConfigurationService().getBoolean( + componentHidePropertyName, + false); + } + /** * Gets the Icon to be displayed in {@link #photoLabel}. * @@ -592,7 +638,7 @@ public String getPeerName() private ImageIcon getPhotoLabelIcon() { return - (peerImage == null) + (peerImage == null && isComponentEnabled(HIDE_PLACEHOLDER_PIC_PROP)) ? new ImageIcon( ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO)) : peerImage; @@ -677,10 +723,18 @@ public void loadSkin() if(peerImage == null) { - photoLabel.setIcon( - new ImageIcon( - ImageLoader.getImage( - ImageLoader.DEFAULT_USER_PHOTO))); + if(isComponentEnabled(HIDE_PLACEHOLDER_PIC_PROP)) + { + photoLabel.setIcon( + new ImageIcon( + ImageLoader.getImage( + ImageLoader.DEFAULT_USER_PHOTO))); + } + else + { + photoLabel.setIcon(null); + } + sizePhotoLabel(); } } @@ -1108,6 +1162,7 @@ public void setPeerImage(byte[] image) public void run() { photoLabel.setIcon(peerImage); + sizePhotoLabel(); photoLabel.repaint(); } }); @@ -1115,6 +1170,7 @@ public void run() else { photoLabel.setIcon(peerImage); + sizePhotoLabel(); photoLabel.repaint(); } } @@ -1582,4 +1638,4 @@ public void setInterested(boolean value) this.interested = value; } } -} \ No newline at end of file +} From ba1c0157c56c68dcf72650865b389e11a6d8f12e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Wed, 6 Aug 2014 13:54:15 +0200 Subject: [PATCH 17/26] Expand scope of X509CertificatePanel to also handle other certificate types. Actually removes some duplicated and some unnecessary code. --- .../VerifyCertificateDialogImpl.java | 45 ++----------- .../desktoputil/ViewCertificateFrame.java | 38 +---------- .../desktoputil/X509CertificatePanel.java | 63 ++++++++++++++----- 3 files changed, 55 insertions(+), 91 deletions(-) diff --git a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java index 71b6c68ad..ed09959e3 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java @@ -9,7 +9,6 @@ import java.awt.*; import java.awt.event.*; import java.security.cert.*; -import java.util.*; import javax.swing.*; import javax.swing.border.*; @@ -53,10 +52,9 @@ class VerifyCertificateDialogImpl private static final int MAX_MSG_PANE_HEIGHT = 800; /** - * The certificate to show. + * The certificates to show. */ - Certificate cert; - java.util.List certs; + Certificate[] certs; /** * A text that describes why the verification failed. @@ -113,16 +111,7 @@ public VerifyCertificateDialogImpl(Certificate[] certs, R.getI18NString("service.gui.CERT_DIALOG_TITLE")); setModal(true); - this.certs = new ArrayList(); - for (Certificate certificate : certs) - { - if (certificate instanceof X509Certificate) { - this.certs.add((X509Certificate) certificate); - } - } - // for now shows only the first certificate from the chain for - // non X.509 certificates - this.cert = certs[0]; + this.certs = certs; this.message = message; setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); @@ -239,33 +228,7 @@ private void actionShowCertificate() certPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); certPanel.add(alwaysTrustCheckBox, BorderLayout.NORTH); - Component certInfoPane = null; - if (!certs.isEmpty()) - { - certInfoPane = new X509CertificatePanel( - certs.toArray(new X509Certificate[0])); - } - else - { - JTextArea textArea = new JTextArea(); - textArea.setOpaque(false); - textArea.setEditable(false); - textArea.setText(cert.toString()); - - final JScrollPane certScroll = new JScrollPane(certInfoPane); - certScroll.setPreferredSize(new Dimension(300, 300)); - - SwingUtilities.invokeLater(new Runnable() - { - public void run() - { - certScroll.getVerticalScrollBar().setValue(0); - } - }); - - certInfoPane = certScroll; - } - certPanel.add(certInfoPane, BorderLayout.CENTER); + certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER); certButton.setText(R.getI18NString("service.gui.HIDE_CERT")); diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java index 3c2d9d55e..943a20401 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java @@ -8,7 +8,6 @@ import java.awt.*; import java.security.cert.*; -import java.util.*; import javax.swing.*; import org.jitsi.service.resources.*; @@ -123,41 +122,8 @@ private void init() this.getContentPane().add(contentPane, BorderLayout.CENTER); - Component certInfoPane; - if (certs[0] instanceof X509Certificate) - { - ArrayList x509s = new ArrayList(); - for (Certificate c : certs) - { - if (c instanceof X509Certificate) - { - x509s.add(c); - } - } - certInfoPane = new X509CertificatePanel( - (X509Certificate[]) x509s.toArray(new X509Certificate[0])); - } - else - { - JTextArea textArea = new JTextArea(); - textArea.setOpaque(false); - textArea.setEditable(false); - // for now shows only the first certificate from the chain - textArea.setText(certs[0].toString()); - certInfoPane = textArea; - } - - final JScrollPane certScroll = new JScrollPane(certInfoPane); - certScroll.setPreferredSize(new Dimension(300, 600)); - certPanel.add(certScroll, BorderLayout.CENTER); - - SwingUtilities.invokeLater(new Runnable() - { - public void run() - { - certScroll.getVerticalScrollBar().setValue(0); - } - }); + certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER); + setPreferredSize(null); pack(); diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index 630487fe4..ff4865113 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -9,6 +9,7 @@ import java.awt.*; import java.security.*; import java.security.cert.*; +import java.security.cert.Certificate; import java.security.interfaces.*; import java.util.*; @@ -44,9 +45,9 @@ public class X509CertificatePanel * * @param certificate X509Certificate object */ - public X509CertificatePanel(X509Certificate certificate) + public X509CertificatePanel(Certificate certificate) { - this(new X509Certificate[] + this(new Certificate[] { certificate }); @@ -57,7 +58,7 @@ public X509CertificatePanel(X509Certificate certificate) * * @param certificates X509Certificate objects */ - public X509CertificatePanel(X509Certificate[] certificates) + public X509CertificatePanel(Certificate[] certificates) { setLayout(new BorderLayout(5, 5)); @@ -71,7 +72,7 @@ public X509CertificatePanel(X509Certificate[] certificates) DefaultMutableTreeNode previous = top; for (int i = certificates.length - 1; i >= 0; i--) { - X509Certificate cert = certificates[i]; + Certificate cert = certificates[i]; DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert); previous.add(next); previous = next; @@ -100,6 +101,17 @@ public Component getTreeCellRendererComponent(JTree tree, component.setText( getSimplifiedName((X509Certificate) o)); } + else + { + // We don't know how to represent this certificate type, + // let's use the first 20 characters + String text = o.toString(); + if (text.length() > 20) + { + text = text.substring(0, 20); + } + component.setText(text); + } } return component; } @@ -146,13 +158,42 @@ public void valueChanged(TreeSelectionEvent e) add(certScroll, BorderLayout.CENTER); } - private String toString(X509Certificate certificate) + /** + * Creates a String representation of the given object. + * @param certificate to print + * @return the String representation + */ + private String toString(Object certificate) { final StringBuilder sb = new StringBuilder(); + sb.append("\n"); + + if (certificate instanceof X509Certificate) + { + renderX509(sb, (X509Certificate) certificate); + } + else + { + sb.append("

\n");
+            sb.append(certificate.toString());
+            sb.append("
\n"); + } + + sb.append(""); + return sb.toString(); + } + + /** + * Appends an HTML representation of the given X509Certificate. + * @param sb StringBuilder to append to + * @param certificate to print + */ + private void renderX509(StringBuilder sb, X509Certificate certificate) + { X500Principal issuer = certificate.getIssuerX500Principal(); X500Principal subject = certificate.getSubjectX500Principal(); - sb.append("\n"); + sb.append("
\n"); // subject addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_TO")); @@ -300,9 +341,7 @@ else if(certificate.getPublicKey().getAlgorithm().equals("DSA")) getHex(certificate.getSignature()) })); - sb.append("
"); - - return sb.toString(); + sb.append("\n"); } /** @@ -448,11 +487,7 @@ private void valueChangedPerformed(TreeSelectionEvent e) if (o instanceof DefaultMutableTreeNode) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) o; - if (node.getUserObject() instanceof X509Certificate) - { - infoTextPane.setText( - toString((X509Certificate) node.getUserObject())); - } + infoTextPane.setText(toString(node.getUserObject())); } } } From 472cdc5173ab2aa30abee8f4b1a183b2ce13f13c Mon Sep 17 00:00:00 2001 From: Daniel Pocock Date: Wed, 6 Aug 2014 14:05:14 +0200 Subject: [PATCH 18/26] Shorten the property name --- .../communicator/impl/gui/main/call/OneToOneCallPeerPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java index f90d0b2c9..39bd9bac3 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java @@ -65,7 +65,7 @@ public class OneToOneCallPeerPanel * streams present. */ public static final String HIDE_PLACEHOLDER_PIC_PROP - = "net.java.sip.communicator.impl.gui.main.call.HIDE_PLACEHOLDER_PIC_PROP"; + = "net.java.sip.communicator.impl.gui.main.call.HIDE_PLACEHOLDER_PIC"; /** * The CallPeer, which is rendered in this panel. From fb3f68714c6bba4565c623222bf6a39b2acf0a24 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Thu, 7 Aug 2014 22:22:44 +0300 Subject: [PATCH 19/26] Fixes show preview link for image/video replacement. Reorganize and fix configuration. Adds option to show configuration on right click over replaced images. --- resources/languages/resources.properties | 7 +- .../gui/main/chat/ChatConversationPanel.java | 144 +++++++++++++++--- .../impl/gui/main/chat/ShowPreviewDialog.java | 72 +++++---- .../main/configforms/ConfigurationFrame.java | 1 + .../replacement/ReplacementConfigPanel.java | 122 +++++++++------ 5 files changed, 245 insertions(+), 101 deletions(-) diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index 72562eb61..0e697e17f 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -1700,8 +1700,11 @@ plugin.reconnectplugin.NETWORK_DOWN=Network connectivity lost! plugin.chatconfig.TITLE=Chat plugin.chatconfig.replacement.TITLE=Image/Video: plugin.chatconfig.replacement.ENABLE_SMILEY_STATUS=Enable smiley replacement -plugin.chatconfig.replacement.ENABLE_REPLACEMENT_STATUS=Enable Image/Video replacement -plugin.chatconfig.replacement.ENABLE_REPLACEMENT_PROPOSAL=Show proposals for Image/Video replacement +plugin.chatconfig.replacement.REPLACEMENT_TITLE=Image/Video replacement +plugin.chatconfig.replacement.ENABLE_REPLACEMENT_STATUS=Enable +plugin.chatconfig.replacement.ENABLE_REPLACEMENT_PROPOSAL=Disable (show preview link) +plugin.chatconfig.replacement.DISABLE_REPLACEMENT=Disable +plugin.chatconfig.replacement.CONFIGURE_REPLACEMENT=Change Image/Video replacement settings plugin.chatconfig.replacement.REPLACEMENT_SOURCES=Sources: plugin.chatconfig.spellcheck.TITLE=SpellCheck diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java index 716616408..016a576b2 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java @@ -28,6 +28,7 @@ import net.java.sip.communicator.impl.gui.main.chat.history.*; import net.java.sip.communicator.impl.gui.main.chat.menus.*; import net.java.sip.communicator.impl.gui.utils.*; +import net.java.sip.communicator.impl.gui.utils.Constants; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.plugin.desktoputil.SwingWorker; import net.java.sip.communicator.service.gui.*; @@ -41,6 +42,8 @@ import net.java.sip.communicator.util.skin.*; import org.jitsi.util.*; +import org.osgi.framework.*; + /** * The ChatConversationPanel is the panel, where all sent and received * messages appear. All data is stored in an HTML document. An external CSS file @@ -136,11 +139,26 @@ public class ChatConversationPanel */ private String currentHref; + /** + * The currently shown href, is it an img element. + */ + private boolean isCurrentHrefImg = false; + /** * The copy link item, contained in the right mouse click menu. */ private final JMenuItem copyLinkItem; + /** + * The copy link item, contained in the right mouse click menu. + */ + private final JMenuItem configureReplacementItem; + + /** + * The configure replacement item separator. + */ + private final JSeparator configureReplacementSeparator = new JSeparator(); + /** * The open link item, contained in the right mouse click menu. */ @@ -310,6 +328,30 @@ public void actionPerformed(ActionEvent e) GuiActivator.getResources().getI18nMnemonic( "service.gui.COPY_LINK")); + configureReplacementItem = new JMenuItem( + GuiActivator.getResources().getI18NString( + "plugin.chatconfig.replacement.CONFIGURE_REPLACEMENT"), + GuiActivator.getResources().getImage( + "service.gui.icons.CONFIGURE_ICON")); + + configureReplacementItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + final ConfigurationContainer configContainer + = GuiActivator.getUIService().getConfigurationContainer(); + + ConfigurationForm chatConfigForm = getChatConfigForm(); + + if (chatConfigForm != null) + { + configContainer.setSelected(chatConfigForm); + + configContainer.setVisible(true); + } + } + }); + this.isSimpleTheme = ConfigurationUtils.isChatSimpleThemeEnabled(); /* @@ -1171,11 +1213,14 @@ public void hyperlinkUpdate(HyperlinkEvent e) { String href = e.getDescription(); + this.isCurrentHrefImg + = e.getSourceElement().getName().equals("img"); this.currentHref = href; } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) { this.currentHref = ""; + this.isCurrentHrefImg = false; } } @@ -1228,7 +1273,7 @@ else if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0 catch (URISyntaxException e1) { logger.error("Failed to open hyperlink in chat window. " + - "Error was: Invalid URL - " + currentHref); + "Error was: Invalid URL - " + currentHref); return; } if("jitsi".equals(uri.getScheme())) @@ -1261,12 +1306,19 @@ private void openContextMenu(Point p) rightButtonMenu.insert(openLinkItem, 0); rightButtonMenu.insert(copyLinkItem, 1); rightButtonMenu.insert(copyLinkSeparator, 2); + if(isCurrentHrefImg) + { + rightButtonMenu.insert(configureReplacementItem, 3); + rightButtonMenu.insert(configureReplacementSeparator, 4); + } } else { rightButtonMenu.remove(openLinkItem); rightButtonMenu.remove(copyLinkItem); rightButtonMenu.remove(copyLinkSeparator); + rightButtonMenu.remove(configureReplacementItem); + rightButtonMenu.remove(configureReplacementSeparator); } if (chatTextPane.getSelectedText() != null) @@ -1956,6 +2008,60 @@ private String getElementContent(String elementId, String message) return null; } + /** + * Returns the first available advanced configuration form. + * + * @return the first available advanced configuration form + */ + public static ConfigurationForm getChatConfigForm() + { + // General configuration forms only. + String osgiFilter = "(" + + ConfigurationForm.FORM_TYPE + + "="+ConfigurationForm.GENERAL_TYPE+")"; + + ServiceReference[] confFormsRefs = null; + try + { + confFormsRefs = GuiActivator.bundleContext + .getServiceReferences( + ConfigurationForm.class.getName(), + osgiFilter); + } + catch (InvalidSyntaxException ex) + {} + + String chatConfigFormClassName = + "net.java.sip.communicator.plugin.chatconfig.ChatConfigPanel"; + + if(confFormsRefs != null) + { + for (int i = 0; i < confFormsRefs.length; i++) + { + ConfigurationForm form + = (ConfigurationForm) GuiActivator.bundleContext + .getService(confFormsRefs[i]); + + if (form instanceof LazyConfigurationForm) + { + LazyConfigurationForm lazyConfigForm + = (LazyConfigurationForm) form; + + if (lazyConfigForm.getFormClassName() + .equals(chatConfigFormClassName)) + return form; + } + else if (form.getClass().getName() + .equals(chatConfigFormClassName)) + { + return form; + } + } + } + + return null; + } + /** * Extends SIPCommHTMLEditorKit to keeps track of created ImageView for * the gif images in order to flush them whenever they are no longer visible @@ -2322,6 +2428,24 @@ private void processText(String plainText, msgBuff.append(group); } } + else if (isProposalEnabled) + { + msgBuff.append(group); + msgBuff.append( + " " + + GuiActivator.getResources(). + getI18NString("service.gui.SHOW_PREVIEW")); + + showPreview.getMsgIDandPositionToLink() + .put( + messageID + "#" + linkCounter++, group); + showPreview.getLinkToReplacement() + .put( + group, temp); + } else if (isEnabled && isEnabledForSource) { if (isDirectImage) @@ -2355,24 +2479,6 @@ else if (isEnabled && isEnabledForSource) msgBuff.append("\">"); } } - else if (isProposalEnabled) - { - msgBuff.append(group); - msgBuff.append( - " " - + GuiActivator.getResources(). - getI18NString("service.gui.SHOW_PREVIEW")); - - showPreview.getMsgIDandPositionToLink() - .put( - messageID + "#" + linkCounter++, group); - showPreview.getLinkToReplacement() - .put( - group, temp); - } else { msgBuff.append(group); diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java b/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java index 199d61686..0249c05d4 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java @@ -38,9 +38,6 @@ public class ShowPreviewDialog private static final Logger logger = Logger.getLogger(ShowPreviewDialog.class); - ConfigurationService cfg - = GuiActivator.getConfigurationService(); - /** * The Ok button. */ @@ -54,12 +51,7 @@ public class ShowPreviewDialog /** * Checkbox that indicates whether or not to show this dialog next time. */ - private final JCheckBox enableReplacementProposal; - - /** - * Checkbox that indicates whether or not to show previews automatically - */ - private final JCheckBox enableReplacement; + private final JCheckBox configureReplacement; /** * The ChatConversationPanel that this dialog is associated with. @@ -147,23 +139,14 @@ public class ShowPreviewDialog warningPanel.add(Box.createHorizontalStrut(10)); warningPanel.add(descriptionMsg); - enableReplacement - = new JCheckBox( - GuiActivator.getResources().getI18NString( - "plugin.chatconfig.replacement.ENABLE_REPLACEMENT_STATUS")); - enableReplacement.setOpaque(false); - enableReplacement.setSelected( - cfg.getBoolean(ReplacementProperty.REPLACEMENT_ENABLE, true)); - enableReplacementProposal - = new JCheckBox( + configureReplacement + = new SIPCommCheckBox( GuiActivator.getResources().getI18NString( - "plugin.chatconfig.replacement.ENABLE_REPLACEMENT_PROPOSAL")); - enableReplacementProposal.setOpaque(false); + "plugin.chatconfig.replacement.CONFIGURE_REPLACEMENT")); - JPanel checkBoxPanel = new TransparentPanel(); - checkBoxPanel.setLayout(new BoxLayout(checkBoxPanel, BoxLayout.Y_AXIS)); - checkBoxPanel.add(enableReplacement); - checkBoxPanel.add(enableReplacementProposal); + JPanel checkBoxPanel = new TransparentPanel( + new FlowLayout(FlowLayout.CENTER)); + checkBoxPanel.add(configureReplacement); JPanel buttonsPanel = new TransparentPanel(new FlowLayout(FlowLayout.CENTER)); @@ -186,10 +169,6 @@ public void actionPerformed(ActionEvent arg0) { if (arg0.getSource().equals(okButton)) { - cfg.setProperty(ReplacementProperty.REPLACEMENT_ENABLE, - enableReplacement.isSelected()); - cfg.setProperty(ReplacementProperty.REPLACEMENT_PROPOSAL - , enableReplacementProposal.isSelected()); SwingWorker worker = new SwingWorker() { /** @@ -275,6 +254,26 @@ else if (arg0.getSource().equals(cancelButton)) { this.setVisible(false); } + + // Shows chat config panel + if(configureReplacement.isSelected()) + { + ConfigurationContainer configContainer + = GuiActivator.getUIService().getConfigurationContainer(); + + ConfigurationForm chatConfigForm = + ChatConversationPanel.getChatConfigForm(); + + if(chatConfigForm != null) + { + configContainer.setSelected(chatConfigForm); + + configContainer.setVisible(true); + } + + // reset for next dialog appearance + configureReplacement.setSelected(false); + } } @Override @@ -283,11 +282,6 @@ public void chatLinkClicked(URI url) String action = url.getPath(); if (action.equals("/SHOWPREVIEW")) { - enableReplacement.setSelected( - cfg.getBoolean(ReplacementProperty.REPLACEMENT_ENABLE, true)); - enableReplacementProposal.setSelected( - cfg.getBoolean(ReplacementProperty.REPLACEMENT_PROPOSAL, true)); - currentMessageID = url.getQuery(); currentLinkPosition = url.getFragment(); @@ -325,4 +319,16 @@ Map getLinkToReplacement() { return linkToReplacement; } + + /** + * All functions implemented in this method will be invoked when user + * presses the Escape key. + * + * @param escaped true if this frame has been closed by pressing + * the Esc key; otherwise, false + */ + protected void close(boolean escaped) + { + cancelButton.doClick(); + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java b/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java index be0877602..104382eac 100644 --- a/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java +++ b/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java @@ -253,6 +253,7 @@ public void run() this.configList.setSelectedIndex(0); } super.setVisible(isVisible); + super.toFront(); } /** diff --git a/src/net/java/sip/communicator/plugin/chatconfig/replacement/ReplacementConfigPanel.java b/src/net/java/sip/communicator/plugin/chatconfig/replacement/ReplacementConfigPanel.java index b3a7c3ed7..af0fce553 100644 --- a/src/net/java/sip/communicator/plugin/chatconfig/replacement/ReplacementConfigPanel.java +++ b/src/net/java/sip/communicator/plugin/chatconfig/replacement/ReplacementConfigPanel.java @@ -19,6 +19,7 @@ import net.java.sip.communicator.service.replacement.*; import org.jitsi.service.configuration.*; +import org.jitsi.service.resources.*; /** * The ConfigurationForm that would be added in the chat configuration @@ -42,12 +43,17 @@ public class ReplacementConfigPanel /** * Checkbox to enable/disable replacements other than smileys. */ - private JCheckBox enableReplacement; + private JRadioButton enableReplacement; /** * Checkbox to enable/disable proposal messages for image/video replacement. */ - private JCheckBox enableReplacementProposal; + private JRadioButton enableReplacementProposal; + + /** + * Checkbox to disable image/video replacement. + */ + private JRadioButton disableReplacement; /** * Jtable to list all the available replacement sources. @@ -77,16 +83,17 @@ public ReplacementConfigPanel() */ private Component createMainPanel() { - JPanel mainPanel = new TransparentPanel(new BorderLayout()); + JPanel mainPanel = new TransparentPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); + ResourceManagementService R = ChatConfigActivator.getResources(); + enableSmiley = - new SIPCommCheckBox(ChatConfigActivator.getResources() - .getI18NString( + new SIPCommCheckBox(R.getI18NString( "plugin.chatconfig.replacement.ENABLE_SMILEY_STATUS")); - mainPanel.add(enableSmiley, BorderLayout.WEST); + mainPanel.add(enableSmiley); enableSmiley.addActionListener(new ActionListener() { @@ -99,32 +106,34 @@ public void actionPerformed(ActionEvent e) mainPanel.add(Box.createVerticalStrut(10)); + JPanel replacementPanel = new TransparentPanel(); + replacementPanel.setLayout(new BoxLayout(replacementPanel, BoxLayout.Y_AXIS)); + replacementPanel.setBorder( + BorderFactory.createCompoundBorder( + BorderFactory.createTitledBorder(R.getI18NString( + "plugin.chatconfig.replacement.REPLACEMENT_TITLE")), + BorderFactory.createEmptyBorder(3, 3, 3, 3))); + enableReplacement = - new SIPCommCheckBox(ChatConfigActivator.getResources() - .getI18NString( + new SIPCommRadioButton(R.getI18NString( "plugin.chatconfig.replacement.ENABLE_REPLACEMENT_STATUS")); - mainPanel.add(enableReplacement, BorderLayout.WEST); + replacementPanel.add(enableReplacement); enableReplacement.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { saveData(); - table.revalidate(); - table.repaint(); } }); - mainPanel.add(Box.createVerticalStrut(10)); - enableReplacementProposal = - new SIPCommCheckBox(ChatConfigActivator.getResources() - .getI18NString( - "plugin.chatconfig.replacement.ENABLE_REPLACEMENT_PROPOSAL")); + new SIPCommRadioButton(R.getI18NString( + "plugin.chatconfig.replacement.ENABLE_REPLACEMENT_PROPOSAL" + )); - mainPanel.add(enableReplacementProposal, BorderLayout.WEST); + replacementPanel.add(enableReplacementProposal); enableReplacementProposal.addActionListener(new ActionListener(){ @@ -133,8 +142,25 @@ public void actionPerformed(ActionEvent arg0) saveData(); } }); + disableReplacement = new SIPCommRadioButton(R.getI18NString( + "plugin.chatconfig.replacement.DISABLE_REPLACEMENT")); + + replacementPanel.add(disableReplacement); - // the Jtable to list all the available sources + disableReplacement.addActionListener(new ActionListener(){ + + public void actionPerformed(ActionEvent arg0) + { + saveData(); + } + }); + + ButtonGroup replacementGroup = new ButtonGroup(); + replacementGroup.add(enableReplacement); + replacementGroup.add(enableReplacementProposal); + replacementGroup.add(disableReplacement); + + // the JTable to list all the available sources table = new JTable(); table.setShowGrid(false); table.setTableHeader(null); @@ -144,18 +170,19 @@ public void actionPerformed(ActionEvent arg0) JScrollPane tablePane = new JScrollPane(table); tablePane.setOpaque(false); - tablePane.setPreferredSize(new Dimension(mainPanel.getWidth(), 150)); + tablePane.setPreferredSize( + new Dimension(replacementPanel.getWidth(), 150)); tablePane.setAlignmentX(LEFT_ALIGNMENT); JPanel container = new TransparentPanel(new BorderLayout()); - container.setPreferredSize(new Dimension(mainPanel.getWidth(), 200)); + container.setPreferredSize( + new Dimension(replacementPanel.getWidth(), 200)); container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS)); JLabel label = - new JLabel(ChatConfigActivator.getResources().getI18NString( + new JLabel(R.getI18NString( "plugin.chatconfig.replacement.REPLACEMENT_SOURCES")); - label.setDisplayedMnemonic(ChatConfigActivator.getResources() - .getI18nMnemonic( + label.setDisplayedMnemonic(R.getI18nMnemonic( "plugin.chatconfig.replacement.REPLACEMENT_SOURCES")); label.setLabelFor(table); @@ -202,8 +229,10 @@ public void valueChanged(ListSelectionEvent e) table.setDefaultRenderer(table.getColumnClass(1), new FixedTableCellRenderer()); - mainPanel.add(Box.createVerticalStrut(10)); - mainPanel.add(container, BorderLayout.WEST); + replacementPanel.add(Box.createVerticalStrut(10)); + replacementPanel.add(container); + + mainPanel.add(replacementPanel); return mainPanel; } @@ -216,24 +245,25 @@ private void initValues() ConfigurationService configService = ChatConfigActivator.getConfigurationService(); - boolean e = - configService.getBoolean(ReplacementProperty - .getPropertyName(ReplacementServiceSmileyImpl.SMILEY_SOURCE), - true); - this.enableSmiley.setSelected(e); + this.enableSmiley.setSelected( + configService.getBoolean( + ReplacementProperty.getPropertyName( + ReplacementServiceSmileyImpl.SMILEY_SOURCE), + true)); - e = - configService.getBoolean(ReplacementProperty.REPLACEMENT_ENABLE, - true); - this.enableReplacement.setSelected(e); + this.enableReplacement.setSelected( + configService.getBoolean( + ReplacementProperty.REPLACEMENT_ENABLE, true)); - this.enableReplacementProposal.setEnabled(!e); - e = - configService.getBoolean(ReplacementProperty.REPLACEMENT_PROPOSAL, - true); - this.enableReplacementProposal.setSelected(e); + this.enableReplacementProposal.setSelected( + configService.getBoolean( + ReplacementProperty.REPLACEMENT_PROPOSAL, true)); - this.table.setEnabled(e); + this.disableReplacement.setSelected( + !this.enableReplacement.isSelected() + && !this.enableReplacementProposal.isSelected()); + + this.table.setEnabled(enableReplacement.isSelected()); } /** @@ -251,15 +281,13 @@ private void saveData() configService.setProperty(ReplacementProperty.REPLACEMENT_ENABLE, Boolean.toString(enableReplacement.isSelected())); - boolean e = enableReplacement.isSelected(); - - enableReplacementProposal.setEnabled(!e); configService.setProperty( - "plugin.chatconfig.replacement.proposal.enable" - , Boolean.toString(!e && enableReplacementProposal.isSelected())); + "plugin.chatconfig.replacement.proposal.enable", + Boolean.toString(enableReplacementProposal.isSelected())); table.getSelectionModel().clearSelection(); - table.setEnabled(e); + table.setEnabled(enableReplacement.isSelected() + || enableReplacementProposal.isSelected()); } /** From 4d97b7349b0c7957fb9670bd5e003dd740c9396a Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Fri, 8 Aug 2014 00:22:12 +0300 Subject: [PATCH 20/26] Fixes warnings. --- .../sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java b/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java index 0249c05d4..ef6789516 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ShowPreviewDialog.java @@ -15,12 +15,9 @@ import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.plugin.desktoputil.SwingWorker; import net.java.sip.communicator.service.gui.*; -import net.java.sip.communicator.service.replacement.*; import net.java.sip.communicator.service.replacement.directimage.*; import net.java.sip.communicator.util.*; -import org.jitsi.service.configuration.*; - public class ShowPreviewDialog extends SIPCommDialog implements ActionListener, From 41dc2b3bad3de38217dd099c26f5c1790cd23c2e Mon Sep 17 00:00:00 2001 From: paweldomas Date: Fri, 8 Aug 2014 13:22:23 +0200 Subject: [PATCH 21/26] Adds Jitsi Meet presence packet extension used to advertise info about participants media streams. --- .../jitsimeet/MediaPresenceExtension.java | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java new file mode 100644 index 000000000..74d6fd4dd --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java @@ -0,0 +1,163 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.jitsimeet; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; +import org.jivesoftware.smack.provider.*; + +/** + * Packet extension used by Jitsi Meet to advertise local media SSRCs in MUC + * presence. + * + * @author Pawel Domas + */ +public class MediaPresenceExtension + extends AbstractPacketExtension +{ + /** + * The namespace of this packet extension. + */ + public static final String NAMESPACE = "http://estos.de/ns/mjs"; + + /** + * XML element name of this packet extension. + */ + public static final String ELEMENT_NAME = "media"; + + /** + * Creates an MediaPresenceExtension instance. + * + */ + public MediaPresenceExtension() + { + super(NAMESPACE, ELEMENT_NAME); + } + + /** + * Registers packet Jitsi Meet media presence packet extensions in given + * providerManager. + * + * @param providerManager the ProviderManager to which media + * presence extensions will be registered to. + */ + public static void registerExtensions(ProviderManager providerManager) + { + // + providerManager.addExtensionProvider( + MediaPresenceExtension.ELEMENT_NAME, + MediaPresenceExtension.NAMESPACE, + new DefaultPacketExtensionProvider( + MediaPresenceExtension.class)); + + // + providerManager.addExtensionProvider( + MediaPresenceExtension.Source.ELEMENT_NAME, + MediaPresenceExtension.Source.NAMESPACE, + new DefaultPacketExtensionProvider( + Source.class)); + } + + /** + * Source extension element that specifies into about media SSRC. + */ + public static class Source + extends AbstractPacketExtension + { + /** + * Source XML element name. + */ + public final static String ELEMENT_NAME = "source"; + + /** + * No namespace attached. + */ + public final static String NAMESPACE = ""; + + /** + * SSRC media type attribute name. Can be 'audio' or 'video'. + */ + public final static String MEDIA_TYPE_ATTR_NAME = "type"; + + /** + * SSRC number attribute name. + */ + public final static String SOURCE_ATTR_NAME = "ssrc"; + + /** + * Media direction as used in SDP('sendrecv', 'recvonly', 'sendonly'). + */ + public final static String DIRECTION_ATTR_NAME = "direction"; + + /** + * Creates new instance of Source packet extension with default + * 'sendrecv' direction set. + */ + public Source() + { + super(NAMESPACE, ELEMENT_NAME); + + // Default direction + setDirection("sendrecv"); + } + + /** + * Returns media direction + * (values like used in SDP 'sendrecv', 'recvonly'...). + */ + public String getDirection() + { + return getAttributeAsString(DIRECTION_ATTR_NAME); + } + + /** + * Returns media synchronization source identifier. + */ + public String getSSRC() + { + return getAttributeAsString(SOURCE_ATTR_NAME); + } + + /** + * Sets media type of the media represented by this source packet + * extensions. + * @param mediaType media type string('audio' or 'video'). + */ + public void setMediaType(String mediaType) + { + setAttribute(MEDIA_TYPE_ATTR_NAME, mediaType); + } + + /** + * Direction of the media represented by this source packet extension. + * @param direction media direction like used in SDP + * ('sendrecv, 'recvonly'...). + */ + public void setDirection(String direction) + { + setAttribute(DIRECTION_ATTR_NAME, direction); + } + + /** + * Sets synchronization source identifier of the media represented by + * this source packet extension. + * @param ssrc synchronization source identifier to set. + */ + public void setSSRC(String ssrc) + { + setAttribute(SOURCE_ATTR_NAME, ssrc); + } + + /** + * @return type of the media(audio or video) represented by this source + * packet extension. + */ + public String getMediaType() + { + return getAttributeAsString(MEDIA_TYPE_ATTR_NAME); + } + } +} From e07f0d07d984b6c092bbecba1cc4d99b965583d1 Mon Sep 17 00:00:00 2001 From: paweldomas Date: Fri, 8 Aug 2014 09:45:38 +0200 Subject: [PATCH 22/26] Fixes NPE in AbstractCallJabberGTalkImpl.getPeer when peer's SID is null. --- .../impl/protocol/jabber/AbstractCallJabberGTalkImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/AbstractCallJabberGTalkImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/AbstractCallJabberGTalkImpl.java index ef935b845..8155cf455 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/AbstractCallJabberGTalkImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/AbstractCallJabberGTalkImpl.java @@ -87,7 +87,7 @@ public T getPeer(String sid) { for(T peer : getCallPeerList()) { - if (peer.getSID().equals(sid)) + if (peer.getSID() != null && peer.getSID().equals(sid)) return peer; } return null; From 54186891516be45b3ab67fedb74e36df025471e7 Mon Sep 17 00:00:00 2001 From: paweldomas Date: Fri, 8 Aug 2014 15:49:38 +0200 Subject: [PATCH 23/26] Adds Rayo IQ provider to jabber extensions. --- .../jabber/extensions/rayo/EndExtension.java | 104 ++++ .../extensions/rayo/HeaderExtension.java | 78 +++ .../extensions/rayo/RayoIqProvider.java | 587 ++++++++++++++++++ .../extensions/rayo/ReasonExtension.java | 88 +++ 4 files changed, 857 insertions(+) create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/EndExtension.java create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/HeaderExtension.java create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/RayoIqProvider.java create mode 100644 src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/ReasonExtension.java diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/EndExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/EndExtension.java new file mode 100644 index 000000000..affb7f7cc --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/EndExtension.java @@ -0,0 +1,104 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.rayo; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; +import org.jivesoftware.smack.packet.*; + +/** + * 'End' Rayo packet extension used to notify the client about call ended event. + * + * @author Pawel Domas + */ +public class EndExtension + extends AbstractPacketExtension +{ + /** + * XML element name of this extension. + */ + public static final String ELEMENT_NAME = "end"; + + /** + * End reason. + */ + private ReasonExtension reason; + + /** + * Creates new instance. + */ + protected EndExtension() + { + super(RayoIqProvider.NAMESPACE, ELEMENT_NAME); + } + + /** + * Checks if given elementName is valid end reason element. + * @param elementName the XML element name to check. + * @return true if given elementName is valid end reason + * element. + */ + public static boolean isValidReason(String elementName) + { + return ReasonExtension.BUSY.equals(elementName) + || ReasonExtension.ERROR.equals(elementName) + || ReasonExtension.HANGUP.equals(elementName) + || ReasonExtension.HANGUP_COMMND.equals(elementName) + || ReasonExtension.REJECTED.equals(elementName) + || ReasonExtension.TIMEOUT.equals(elementName); + } + + + /** + * Returns {@link ReasonExtension} associated with this instance. + * @return {@link ReasonExtension} associated with this instance. + */ + public ReasonExtension getReason() + { + return reason; + } + + /** + * Sets new {@link ReasonExtension} for this EndExtension instance. + * @param newReason the new {@link ReasonExtension} to set. + */ + public void setReason(ReasonExtension newReason) + { + if (this.reason != null) + { + getChildExtensions().remove(this.reason); + } + + this.reason = newReason; + + addChildExtension(newReason); + } + + /** + * Creates 'Presence' packet containing call ended Rayo notification that + * contains specified end reason. + * @param from source JID of this event. + * @param to destination JID. + * @param reason call end reason string. One of {@link ReasonExtension} + * static constants. + * @return 'Presence' packet containing call ended Rayo notification. + */ + public static Presence createEnd(String from, String to, String reason) + { + Presence presence = new Presence(Presence.Type.unavailable); + + presence.setFrom(from); + + presence.setTo(to); + + EndExtension end = new EndExtension(); + end.setReason(new ReasonExtension(reason)); + + presence.addExtension(end); + + return presence; + } +} diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/HeaderExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/HeaderExtension.java new file mode 100644 index 000000000..08546531a --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/HeaderExtension.java @@ -0,0 +1,78 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.rayo; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; + +/** + * Header packet extension optionally included in {@link RayoIqProvider.RayoIq}. + * Holds 'name' and 'value' attributes. + * + * @author Pawel Domas + */ +public class HeaderExtension + extends AbstractPacketExtension +{ + /** + * XML element name. + */ + public static final String ELEMENT_NAME = "header"; + + /** + * The name of 'name' attribute. + */ + public static final String NAME_ATTR_NAME = "name"; + + /** + * The name of 'value' attribute. + */ + public static final String VALUE_ATTR_NAME = "value"; + + /** + * Creates new instance of HeaderPacketExtension. + */ + public HeaderExtension() + { + super(null, ELEMENT_NAME); + } + + /** + * Return the value of 'name' attribute. + * @return the value of 'name' attribute. + */ + public String getName() + { + return getAttributeAsString(NAME_ATTR_NAME); + } + + /** + * Sets new value for 'name' attribute of this extension. + * @param name the new value to set for 'name' attribute. + */ + public void setName(String name) + { + setAttribute(NAME_ATTR_NAME, name); + } + + /** + * Returns the value of 'value' attribute. + * @return the value of 'value' attribute. + */ + public String getValue() + { + return getAttributeAsString(VALUE_ATTR_NAME); + } + + /** + * Sets new value for the 'value' attribute. + * @param value new value for the 'value' attribute to set. + */ + public void setValue(String value) + { + setAttribute(VALUE_ATTR_NAME, value); + } +} diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/RayoIqProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/RayoIqProvider.java new file mode 100644 index 000000000..4d94ed9e8 --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/RayoIqProvider.java @@ -0,0 +1,587 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.rayo; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; +import org.jitsi.util.*; +import org.jivesoftware.smack.packet.*; +import org.jivesoftware.smack.provider.*; +import org.xmlpull.v1.*; + +import java.util.*; + +/** + * Provider handles parsing of Rayo IQ stanzas and converting objects back to + * their XML representation. + * + * FIXME: implements only the minimum required to start and hang up a call + * + * @author Pawel Domas + */ +public class RayoIqProvider + implements IQProvider +{ + /** + * Rayo namespace. + */ + public final static String NAMESPACE = "urn:xmpp:rayo:1"; + + /** + * Registers this IQ provider into given ProviderManager. + * @param providerManager the ProviderManager to which this + * instance wil be bound to. + */ + public void registerRayoIQs(ProviderManager providerManager) + { + // + providerManager.addIQProvider( + DialIq.ELEMENT_NAME, + NAMESPACE, + this); + + // + providerManager.addIQProvider( + RefIq.ELEMENT_NAME, + NAMESPACE, + this); + + // + providerManager.addIQProvider( + HangUp.ELEMENT_NAME, + NAMESPACE, + this); + + // presence extension + providerManager.addExtensionProvider( + EndExtension.ELEMENT_NAME, + NAMESPACE, + new DefaultPacketExtensionProvider( + EndExtension.class)); + + //
extension + providerManager.addExtensionProvider( + HeaderExtension.ELEMENT_NAME, + "", + new DefaultPacketExtensionProvider( + HeaderExtension.class)); + } + + /** + * {@inheritDoc} + */ + @Override + public IQ parseIQ(XmlPullParser parser) + throws Exception + { + String namespace = parser.getNamespace(); + + // Check the namespace + if (!NAMESPACE.equals(namespace)) + { + return null; + } + + String rootElement = parser.getName(); + + RayoIq iq; + DialIq dial; + RefIq ref; + //End end = null; + + if (DialIq.ELEMENT_NAME.equals(rootElement)) + { + iq = dial = new DialIq(); + String src = parser.getAttributeValue("", DialIq.SRC_ATTR_NAME); + String dst = parser.getAttributeValue("", DialIq.DST_ATTR_NAME); + + // Destination is mandatory + if (StringUtils.isNullOrEmpty(dst)) + return null; + + dial.setSource(src); + dial.setDestination(dst); + } + else if (RefIq.ELEMENT_NAME.equals(rootElement)) + { + iq = ref = new RefIq(); + String uri = parser.getAttributeValue("", RefIq.URI_ATTR_NAME); + + if (StringUtils.isNullOrEmpty(uri)) + return null; + + ref.setUri(uri); + } + else if (HangUp.ELEMENT_NAME.equals(rootElement)) + { + iq = new HangUp(); + } + /*else if (End.ELEMENT_NAME.equals(rootElement)) + { + iq = end = new End(); + }*/ + else + { + return null; + } + + boolean done = false; + HeaderExtension header = null; + //ReasonExtension reason = null; + + while (!done) + { + switch (parser.next()) + { + case XmlPullParser.END_TAG: + { + String name = parser.getName(); + + if (rootElement.equals(name)) + { + done = true; + } + else if (HeaderExtension.ELEMENT_NAME.equals( + name)) + { + if (header != null) + { + iq.addExtension(header); + + header = null; + } + } + /*else if (End.isValidReason(name)) + { + if (end != null && reason != null) + { + end.setReason(reason); + + reason = null; + } + }*/ + break; + } + + case XmlPullParser.START_TAG: + { + String name = parser.getName(); + + if (HeaderExtension.ELEMENT_NAME.equals(name)) + { + header = new HeaderExtension(); + + String nameAttr + = parser.getAttributeValue( + "", HeaderExtension.NAME_ATTR_NAME); + + header.setName(nameAttr); + + String valueAttr + = parser.getAttributeValue( + "", HeaderExtension.VALUE_ATTR_NAME); + + header.setValue(valueAttr); + } + /*else if (End.isValidReason(name)) + { + reason = new ReasonPacketExtension(name); + + String platformCode + = parser.getAttributeValue( + "", ReasonPacketExtension.PLATFORM_CODE_ATTRIBUTE); + + if (!StringUtils.isNullOrEmpty(platformCode)) + { + reason.setPlatformCode(platformCode); + } + }*/ + break; + } + + case XmlPullParser.TEXT: + { + // Parse some text here + break; + } + } + } + + return iq; + } + + /** + * Base class for all Ray IQs. Takes care of
extension handling + * as well as other functions shared by all IQs. + */ + public static abstract class RayoIq + extends IQ + { + /** + * The XML element name that will be used. + */ + private final String elementName; + + /** + * Creates new instance of RayoIq. + * + * @param elementName the name of XML element that will be used. + */ + protected RayoIq(String elementName) + { + this.elementName = elementName; + } + + /** + * Implementing classes should print their attributes if any in XML + * format to given out StringBuilder. + * @param out the StringBuilder instance used to construct XML + * representation of this element. + */ + protected abstract void printAttributes(StringBuilder out); + + /** + * {@inheritDoc} + */ + @Override + public String getChildElementXML() + { + StringBuilder xml = new StringBuilder(); + + xml.append('<').append(elementName); + xml.append(" xmlns='").append(NAMESPACE).append("' "); + + printAttributes(xml); + + Collection extensions = getExtensions(); + if (extensions.size() > 0) + { + xml.append(">"); + for (PacketExtension extension : extensions) + { + xml.append(extension.toXML()); + } + xml.append(""); + } + else + { + xml.append("/>"); + } + + return xml.toString(); + } + + /** + * Returns value of the header extension with given name + * (if any). + * @param name the name of header extension which value we want to + * retrieve. + * @return value of header extension with given name if it + * exists or null otherwise. + */ + public String getHeader(String name) + { + HeaderExtension header = findHeader(name); + + return header != null ? header.getValue() : null; + } + + private HeaderExtension findHeader(String name) + { + for(PacketExtension ext: getExtensions()) + { + if (ext instanceof HeaderExtension) + { + HeaderExtension header = (HeaderExtension) ext; + + if(name.equals(header.getName())) + return header; + } + } + return null; + } + + /** + * Adds 'header' extension to this Rayo IQ with given name and value + * attributes. + * @param name the attribute name of the 'header' extension to be added. + * @param value the 'value' attribute of the 'header' extension that + * will be added to this IQ. + */ + public void setHeader(String name, String value) + { + HeaderExtension headerExt = findHeader(name); + + if (headerExt == null) + { + headerExt = new HeaderExtension(); + + headerExt.setName(name); + + addExtension(headerExt); + } + + headerExt.setValue(value); + } + } + + /** + * The 'dial' IQ used to initiate new outgoing call session in Rayo + * protocol. + */ + public static class DialIq + extends RayoIq + { + /** + * The name of XML element for this IQ. + */ + public static final String ELEMENT_NAME = "dial"; + + /** + * The name of source URI/address attribute. Referred as "source" to + * avoid confusion with "getFrom" and "setFrom" in {@link IQ} class. + */ + public static final String SRC_ATTR_NAME = "from"; + + /** + * The name of destination URI/address attribute. Referred as "source" + * to avoid confusion with "getFrom" and "setFrom" in {@link IQ} class. + */ + public static final String DST_ATTR_NAME = "to"; + + /** + * Source URI/address. + */ + private String source; + + /** + * Destination URI/address. + */ + private String destination; + + /** + * Creates new instance of DialIq. + */ + public DialIq() + { + super(DialIq.ELEMENT_NAME); + } + + /** + * Creates new DialIq for given source and destination + * addresses. + * @param to the destination address/call URI to be used. + * @param from the source address that will be set on + * new DialIq instance. + * @return new DialIq parametrized with given source and + * destination addresses. + */ + public static DialIq create(String to, String from) + { + DialIq dialIq = new DialIq(); + + dialIq.setSource(from); + + dialIq.setDestination(to); + + return dialIq; + } + + /** + * Return source address value set on this DialIq. + * @return source address value of this DialIq. + */ + public String getSource() + { + return source; + } + + /** + * Sets new source address value on this DialIq. + * @param source the new source address value to be set. + */ + public void setSource(String source) + { + this.source = source; + } + + /** + * Returns destination address/call URI associated with this instance. + * @return destination address/call URI associated with this instance. + */ + public String getDestination() + { + return destination; + } + + /** + * Sets new destination address/call URI on this DialIq. + * @param destination the new destination address/call URI to set. + */ + public void setDestination(String destination) + { + this.destination = destination; + } + + /** + * {@inheritDoc} + */ + @Override + protected void printAttributes(StringBuilder out) + { + String src = getSource(); + if (!StringUtils.isNullOrEmpty(src)) + out.append(SRC_ATTR_NAME).append("='") + .append(src).append("' "); + + String dst = getDestination(); + if (!StringUtils.isNullOrEmpty(dst)) + out.append(DST_ATTR_NAME).append("='") + .append(dst).append("' "); + } + } + + /** + * Rayo 'ref' IQ sent by the server as a reply to 'dial' request. Holds + * created call's resource in 'uri' attribute. + */ + public static class RefIq + extends RayoIq + { + /** + * XML element name of RefIq. + */ + public static final String ELEMENT_NAME = "ref"; + + /** + * Name of the URI attribute that stores call resource reference. + */ + public static final String URI_ATTR_NAME = "uri"; + + /** + * Call resource/uri reference. + */ + private String uri; + + /** + * Creates new RefIq. + */ + protected RefIq() + { + super(RefIq.ELEMENT_NAME); + } + + /** + * Creates new RefIq parametrized with given call uri. + * @param uri the call URI to be set on newly created RefIq. + * @return new RefIq parametrized with given call uri. + */ + public static RefIq create(String uri) + { + RefIq refIq = new RefIq(); + + refIq.setUri(uri); + + return refIq; + } + + /** + * Creates result RefIq for given requestIq + * parametrized with given call uri. + * @param requestIq the request IQ which 'from', 'to' and 'id' + * attributes will be used for constructing result IQ. + * @param uri the call URI that will be included in newly created + * RefIq. + * @return result RefIq for given requestIq + * parametrized with given call uri. + */ + public static RefIq createResult(IQ requestIq, String uri) + { + RefIq refIq = create(uri); + + refIq.setType(IQ.Type.RESULT); + refIq.setPacketID(requestIq.getPacketID()); + refIq.setFrom(requestIq.getTo()); + refIq.setTo(requestIq.getFrom()); + + return refIq; + } + + /** + * {@inheritDoc} + */ + @Override + protected void printAttributes(StringBuilder out) + { + String uri = getUri(); + if (!StringUtils.isNullOrEmpty(uri)) + out.append(URI_ATTR_NAME).append("='") + .append(uri).append("' "); + } + + /** + * Sets given call uri value on this instance. + * @param uri the call uri to be stored in this instance. + */ + public void setUri(String uri) + { + this.uri = uri; + } + + /** + * Returns call URI held by this instance. + * @return the call URI held by this instance. + */ + public String getUri() + { + return uri; + } + } + + /** + * Rayo hangup IQ is sent by the controlling agent to tell the server that + * call whose resource is mentioned in IQ's 'to' attribute should be + * terminated. Server immediately replies with result IQ which means that + * hangup operation is now scheduled. After it is actually executed presence + * indication with {@link EndExtension} is sent through the presence to + * confirm the operation. + */ + public static class HangUp + extends RayoIq + { + /** + * The name of 'hangup' element. + */ + public static final String ELEMENT_NAME = "hangup"; + + /** + * Creates new instance of HangUp IQ. + */ + protected HangUp() + { + super(ELEMENT_NAME); + } + + /** + * Creates new, parametrized instance of {@link HangUp} IQ. + * @param from source JID. + * @param to the destination address/call URI to be ended by this IQ. + * @return new, parametrized instance of {@link HangUp} IQ. + */ + public static HangUp create(String from, String to) + { + HangUp hangUp = new HangUp(); + hangUp.setFrom(from); + hangUp.setTo(to); + hangUp.setType(Type.SET); + + return hangUp; + } + + @Override + protected void printAttributes(StringBuilder out){ } + } +} diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/ReasonExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/ReasonExtension.java new file mode 100644 index 000000000..447c04fbc --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/rayo/ReasonExtension.java @@ -0,0 +1,88 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.rayo; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; + +/** + * Rayo 'reason' packet extension. + * + * @author Pawel Domas + */ +public class ReasonExtension + extends AbstractPacketExtension +{ + /** + * The name of optional platform code attribute. + */ + public static final String PLATFORM_CODE_ATTRIBUTE = "platform-code"; + + /** + * Indication that the call ended due to a normal hangup by the remote + * party. + */ + public static final String HANGUP = "hangup"; + + /** + * Indication that the call ended due to a normal hangup triggered by + * a hangup command. + */ + public static final String HANGUP_COMMND = "hangup-command"; + + /** + * Indication that the call ended due to a timeout in contacting the remote + * party. + */ + public static final String TIMEOUT = "timeout"; + + /** + * Indication that the call ended due to being rejected by the remote party + * subsequent to being accepted. + */ + public static final String BUSY = "busy"; + + /** + * Indication that the call ended due to being rejected by the remote party + * before being accepted. + */ + public static final String REJECTED = "rejected"; + + /** + * Indication that the call ended due to a system error. + */ + public static final String ERROR = "error"; + + /** + * Creates an {@link ReasonExtension} instance for the specified + * namespace and elementName. + * + * @param elementName the name of the element + */ + public ReasonExtension(String elementName) + { + super(null, elementName); + } + + /** + * Returns the value of platform code attribute. + * @return the value of platform code attribute. + */ + public String getPlatformCode() + { + return getAttributeAsString(PLATFORM_CODE_ATTRIBUTE); + } + + /** + * Sets new value of platform code attribute. Pass null to remove. + * @param code new value of platform code attribute. Pass null to + * remove. + */ + public void setPlatformCode(String code) + { + setAttribute(PLATFORM_CODE_ATTRIBUTE, code); + } +} From c4be9b4493d262a0974f3520c83cb2cc36569138 Mon Sep 17 00:00:00 2001 From: paweldomas Date: Fri, 8 Aug 2014 15:55:36 +0200 Subject: [PATCH 24/26] Prevents from including multiple CapsPacketExtension in presence packets. --- .../protocol/jabber/ScServiceDiscoveryManager.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ScServiceDiscoveryManager.java b/src/net/java/sip/communicator/impl/protocol/jabber/ScServiceDiscoveryManager.java index e068084f7..7a1c21cde 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ScServiceDiscoveryManager.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ScServiceDiscoveryManager.java @@ -393,6 +393,16 @@ public void interceptPacket(Packet packet) caps.getNode() + "#" + caps.getVersion(), this); + // Remove old capabilities extension if present + PacketExtension oldCaps + = packet.getExtension( + CapsPacketExtension.ELEMENT_NAME, + CapsPacketExtension.NAMESPACE); + if (oldCaps != null) + { + packet.removeExtension(oldCaps); + } + // Put new capabilities extension packet.addExtension(caps); } } From 7b97fb294b48d52650f8e71c81ce9937e8c81290 Mon Sep 17 00:00:00 2001 From: Daniel Pocock Date: Fri, 8 Aug 2014 16:02:31 +0200 Subject: [PATCH 25/26] Avoid showing error popup if user clicks Yes in registration popup --- .../impl/protocol/sip/UriHandlerSipImpl.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/net/java/sip/communicator/impl/protocol/sip/UriHandlerSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/UriHandlerSipImpl.java index 49b2807fb..5aa1b0fbe 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/UriHandlerSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/UriHandlerSipImpl.java @@ -316,11 +316,15 @@ public void handleUri(String uri) { // make sure that we prompt for registration only if it is really // required by the provider. + boolean handled = false; if (exc.getErrorCode() == OperationFailedException.PROVIDER_NOT_REGISTERED) { - promptForRegistration(uri, provider); + handled = promptForRegistration(uri, provider); + } + if(!handled) + { + showErrorMessage("Failed to create a call to " + uri, exc); } - showErrorMessage("Failed to create a call to " + uri, exc); } catch (ParseException exc) { @@ -335,8 +339,9 @@ public void handleUri(String uri) * * @param uri the uri that the user would like us to call after registering. * @param provider the provider that we may have to reregister. + * @return true if user tried to start registration */ - private void promptForRegistration(String uri, + private boolean promptForRegistration(String uri, ProtocolProviderService provider) { int answer = @@ -351,7 +356,9 @@ private void promptForRegistration(String uri, if (answer == PopupDialog.YES_OPTION) { new ProtocolRegistrationThread(uri, provider).start(); + return true; } + return false; } /** From b150461d58baabdc349d2fa2abf2429664e3b526 Mon Sep 17 00:00:00 2001 From: Daniel Pocock Date: Sat, 9 Aug 2014 14:07:17 +0200 Subject: [PATCH 26/26] Force transport selection when sips URI or transport parameter --- .../impl/protocol/sip/CallSipImpl.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java index b55999f70..075a318ae 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/CallSipImpl.java @@ -357,10 +357,41 @@ public CallPeerSipImpl invite(Address calleeAddress, Request invite = messageFactory.createInviteRequest(calleeAddress, cause); + // Transport preference + String forceTransport = null; + javax.sip.address.URI calleeURI = calleeAddress.getURI(); + if(calleeURI.getScheme().toLowerCase().equals("sips")) + { + // MUST use TLS + forceTransport = "TLS"; + logger.trace("detected SIPS URI, must use TLS"); + } + else if(calleeURI.isSipURI() && calleeURI instanceof SipURI) + { + SipURI _calleeURI = (SipURI)calleeURI; + // check for a transport parameter + forceTransport = _calleeURI.getTransportParam(); + if(forceTransport != null) + { + logger.trace("got transport parameter: " + forceTransport); + } + } + // Transaction ClientTransaction inviteTransaction = null; - SipProvider jainSipProvider - = getProtocolProvider().getDefaultJainSipProvider(); + SipProvider jainSipProvider; + if(forceTransport != null) + { + logger.trace("trying to use transport: " + forceTransport); + jainSipProvider = getProtocolProvider() + .getJainSipProvider(forceTransport); + } + else + { + logger.trace("trying default transport"); + jainSipProvider = getProtocolProvider() + .getDefaultJainSipProvider(); + } try {