package com.l7tech.common.io;

import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Pair;
import com.l7tech.util.SAXParsingCompleteException;
import com.l7tech.util.ValidationUtils;
import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;

public class DtdUtils {
   public static final String PUBLIC_ID_CHARACTERS;
   private static final SAXParserFactory a;
   private static final Pattern b;
   private static final String[] c;

   public static void processReferences(String var0, String var1, DtdUtils.Resolver var2) throws IOException, SAXException {
      HashMap var3 = new HashMap();
      var3.put(new DtdUtils.EntityKey(null, var0), new DtdUtils.EntityValue(var0, var1));
      a(var0, var1, var2, var3);
   }

   public static void validate(String var0, String var1) throws SAXException {
      XMLReader var2 = a((Set<DtdUtils.EntityKey>)null);
      var2.setEntityResolver(new i(var0, var1));

      try {
         var2.parse(a(var0));
      } catch (SAXParsingCompleteException var4) {
      } catch (IOException var5) {
         throw new SAXException(ExceptionUtils.getMessage(var5), var5);
      }
   }

   public static String normalizePublicId(String var0) {
      String var1 = var0.trim();
      return var1.replaceAll(c[4], " ");
   }

   public static String updateExternalSystemId(String var0, String var1) {
      String var2 = var0;
      boolean var3 = var1.contains("'");
      boolean var4 = var1.contains("\"");

      try {
         if (var3 && var4) {
            return var2;
         }
      } catch (RuntimeException var9) {
         throw a(var9);
      }

      Matcher var5 = b.matcher(var0);

      String var6;
      label34: {
         label33: {
            try {
               if (!var5.find()) {
                  return var2;
               }

               if (var3) {
                  break label33;
               }
            } catch (RuntimeException var8) {
               throw a(var8);
            }

            if (var4) {
               var6 = "'";
            } else {
               var6 = var5.group(0).substring(0, 1);
            }
            break label34;
         }

         var6 = "\"";
      }

      String var7 = var6 + var1 + var6;
      if (!var7.equals(var5.group(0))) {
         var2 = var0.substring(0, var5.start()) + var7 + var0.substring(var5.end());
      }

      return var2;
   }

   private static void a(String var0, String var1, DtdUtils.Resolver var2, Map<DtdUtils.EntityKey, DtdUtils.EntityValue> var3) throws IOException, SAXException {
      LinkedHashSet var4 = new LinkedHashSet();
      XMLReader var5 = a(var4);
      var5.setEntityResolver(new j(var0, var2, var3, var1));

      try {
         var5.parse(a(var0));
      } catch (SAXParsingCompleteException var9) {
      }

      for (DtdUtils.EntityKey var7 : var4) {
         if (!var3.containsKey(var7)) {
            DtdUtils.EntityValue var8 = a(var7.getPublicId(), var7.getSystemId(), var7.getSystemId(), var2);
            var3.put(var7, var8);
            a(var8.getSystemId(), var8.getContent(), var2, var3);
         }
      }
   }

   private static DtdUtils.EntityValue a(String var0, String var1, String var2, DtdUtils.Resolver var3) throws IOException {
      Pair var4 = var3.call(var0, var1, var2);

      try {
         if (var4 == null) {
            throw new IOException(c[6] + var0 + c[5] + var2 + "'");
         }
      } catch (IOException var5) {
         throw a(var5);
      }

      return new DtdUtils.EntityValue((String)var4.left, (String)var4.right);
   }

   private static XMLReader a(Set<DtdUtils.EntityKey> var0) throws SAXException {
      XMLReader var1;
      try {
         var1 = a.newSAXParser().getXMLReader();
      } catch (ParserConfigurationException var7) {
         throw new SAXException(var7);
      }

      var1.setErrorHandler(new k());
      an var2 = new an(var0);
      var1.setContentHandler(var2);

      try {
         String[] var4 = c;
         var1.setProperty(var4[7], var2);
         var1.setProperty(var4[1], var2);
         return var1;
      } catch (SAXNotSupportedException var5) {
         throw new RuntimeException(var5);
      } catch (SAXNotRecognizedException var6) {
         throw new RuntimeException(var6);
      }
   }

   private static InputSource a(String var0) {
      InputSource var1 = new InputSource();
      String var10003 = var0.trim();
      String[] var2 = c;
      var1.setCharacterStream(new StringReader(var2[0] + var10003 + var2[8]));
      return var1;
   }

   static {
      String[] var5 = new String[9];
      int var3 = 0;
      String var2 = "\r5+\u0000Qb\u001cTx \u0004R,W\u0013;}]\u001f}T;6r)r\u0001>hZ\u0016MI'\u0019E*\u00004n\u0016/|*q1Y~'\u001d\u0007mEIg?CR0\r\u001ey2\u0015\u00122\u0018^z6\u001fI+\u000fB%7\b^.\u000bCk'\u0004R,GYk=\tQ'\u0018Î\u00195 D\u0015}V\f6r)r\u0001>hZ\u00161N9[\u001d;aU@\u00194my\u000e\u0016\fn[\u00018g\u0010a1\u0011\u0000&b_\u0005?B\u000e0\u00004n\u0016/|V \u0016\fn[\u00032.\u0011m\u0017(}C\u00101N9[\u001d;aU@jU\u000b(\b1N#GKK~7\roSm'tE\u0014iFm$|W\u0000\u001eU\n+yN}f5\u0014W(]\u0011sZ\u0003>.OAe1my2@G\u0003Gk:~TaoB\u0018!\u007f1\u0013mP\fVlV\u001chIq.\fH`9Z\u001d;c_\t?M\u0018V \u0016\fn[\u00032.D\u0014jU\u000b-\b3\u001a\u001fA\u0016vq6c`7\u001a(z\u0014\u0011'tE\u0014iF\u001f%iP\u0002yK\u001b)\u0013Ibg\u0006my(_\u0011?\u0003\u0016%t\u001add2\u000fQ'JEes\u001fX1\u0005]|6MX,\u001eX~*M\u001a";
      int var4 = "\r5+\u0000Qb\u001cTx \u0004R,W\u0013;}]\u001f}T;6r)r\u0001>hZ\u0016MI'\u0019E*\u00004n\u0016/|*q1Y~'\u001d\u0007mEIg?CR0\r\u001ey2\u0015\u00122\u0018^z6\u001fI+\u000fB%7\b^.\u000bCk'\u0004R,GYk=\tQ'\u0018Î\u00195 D\u0015}V\f6r)r\u0001>hZ\u00161N9[\u001d;aU@\u00194my\u000e\u0016\fn[\u00018g\u0010a1\u0011\u0000&b_\u0005?B\u000e0\u00004n\u0016/|V \u0016\fn[\u00032.\u0011m\u0017(}C\u00101N9[\u001d;aU@jU\u000b(\b1N#GKK~7\roSm'tE\u0014iFm$|W\u0000\u001eU\n+yN}f5\u0014W(]\u0011sZ\u0003>.OAe1my2@G\u0003Gk:~TaoB\u0018!\u007f1\u0013mP\fVlV\u001chIq.\fH`9Z\u001d;c_\t?M\u0018V \u0016\fn[\u00032.D\u0014jU\u000b-\b3\u001a\u001fA\u0016vq6c`7\u001a(z\u0014\u0011'tE\u0014iF\u001f%iP\u0002yK\u001b)\u0013Ibg\u0006my(_\u0011?\u0003\u0016%t\u001add2\u000fQ'JEes\u001fX1\u0005]|6MX,\u001eX~*M\u001a"
         .length();
      char var1 = '-';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 36;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var9 = a(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     String[] var8 = c;
                     PUBLIC_ID_CHARACTERS = ValidationUtils.ALPHA_NUMERIC + var8[3];
                     a = SAXParserFactory.newInstance();
                     b = Pattern.compile(var8[2]);
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var9;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "oH\u0011+1[s\u007fQ\tud\u0006;(O\u0004#$\u0004.hL\u0000)\u007f\u001d9t\u0013\t>s\u001d?fPH3j\u001a8kY\u0017\u000b%\u0002og\u007f\u0011/s\u0013[{";
                  var4 = "oH\u0011+1[s\u007fQ\tud\u0006;(O\u0004#$\u0004.hL\u0000)\u007f\u001d9t\u0013\t>s\u001d?fPH3j\u001a8kY\u0017\u000b%\u0002og\u007f\u0011/s\u0013[{"
                     .length();
                  var1 = '-';
                  var7 = -1;
            }

            var10000 = 18;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static Exception a(Exception var0) {
      return var0;
   }

   private static char[] b(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 78);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 21;
            case 1 -> 46;
            case 2 -> 119;
            case 3 -> 73;
            case 4 -> 25;
            case 5 -> 102;
            default -> 78;
         });
      }

      return new String(var10001).intern();
   }

   private static class EntityKey extends Pair<String, String> {
      static final long serialVersionUID = 4369894350194701698L;

      private EntityKey(String var1, String var2) {
         super(var1, var2);
      }

      public String getPublicId() {
         return (String)this.left;
      }

      public String getSystemId() {
         return (String)this.right;
      }
   }

   private static class EntityValue extends Pair<String, String> {
      static final long serialVersionUID = -4899068339415135116L;

      private EntityValue(String var1, String var2) {
         super(var1, var2);
      }

      public String getSystemId() {
         return (String)this.left;
      }

      public String getContent() {
         return (String)this.right;
      }
   }

   public interface Resolver {
      Pair<String, String> call(String var1, String var2, String var3) throws IOException;
   }
}
