package com.l7tech.gateway.common.log;

import com.l7tech.common.io.NonCloseableOutputStream;
import com.l7tech.objectmodel.imp.ZoneableNamedEntityImp;
import com.l7tech.security.rbac.RbacAttribute;
import com.l7tech.util.Charsets;
import com.l7tech.util.CollectionUtils;
import com.l7tech.util.DeserializeSafe;
import com.l7tech.util.Functions;
import com.l7tech.util.PoolByteArrayOutputStream;
import com.l7tech.util.SafeXMLDecoder;
import com.l7tech.util.SafeXMLDecoderBuilder;
import jakarta.persistence.AttributeOverride;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.Lob;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import org.hibernate.annotations.Proxy;
import org.jetbrains.annotations.NotNull;

@Entity
@Proxy(lazy = false)
@Table(name = "sink_config")
@AttributeOverride(name = "name", column = @Column(name = "name", nullable = false, length = 32))
@DeserializeSafe
public class SinkConfiguration extends ZoneableNamedEntityImp {
   private static final long serialVersionUID = 3599816920403650383L;
   public static final Charset PROPERTIES_ENCODING;
   public static final String CATEGORY_GATEWAY_LOGS;
   public static final String CATEGORY_TRAFFIC_LOGS;
   public static final String CATEGORY_AUDITS;
   public static final String CATEGORY_SSPC_LOGS;
   public static final Set<String> CATEGORIES_SET;
   public static final String PROP_FILE_MAX_SIZE;
   public static final String PROP_FILE_LOG_COUNT;
   public static final String PROP_FILE_FORMAT;
   public static final String PROP_ENABLE_ROLLING_FILE;
   public static final String PROP_ROLLING_INTERVAL;
   public static final String FILE_FORMAT_RAW;
   public static final String FILE_FORMAT_STANDARD;
   public static final String FILE_FORMAT_VERBOSE;
   public static final Set<String> FILE_FORMAT_SET;
   public static final String PROP_SYSLOG_PROTOCOL;
   public static final String PROP_SYSLOG_FACILITY;
   public static final String PROP_SYSLOG_LOG_HOSTNAME;
   public static final String PROP_SYSLOG_CHAR_SET;
   public static final String PROP_SYSLOG_TIMEZONE;
   public static final String PROP_SYSLOG_SSL_CLIENTAUTH;
   public static final String PROP_SYSLOG_SSL_KEYSTORE_ID;
   public static final String PROP_SYSLOG_SSL_KEY_ALIAS;
   public static final String PROP_SYSLOG_FORMAT;
   public static final String SYSLOG_PROTOCOL_TCP;
   public static final String SYSLOG_PROTOCOL_UDP;
   public static final String SYSLOG_PROTOCOL_SSL;
   public static final Set<String> SYSLOG_PROTOCOL_SET;
   public static final String SYSLOG_FORMAT_RAW;
   public static final String SYSLOG_FORMAT_STANDARD;
   public static final String SYSLOG_FORMAT_VERBOSE;
   public static final Set<String> SYSLOG_FORMAT_SET;
   private String description;
   private SinkConfiguration.SinkType type;
   private boolean enabled;
   private SinkConfiguration.SeverityThreshold severity;
   private String categories;
   private transient String xmlProperties;
   private Map<String, String> properties;
   private List<String> syslogHosts;
   private Map<String, List<String>> filters = Collections.emptyMap();
   private static final String[] b;

   @RbacAttribute
   @Column(name = "description", length = Integer.MAX_VALUE)
   @Lob
   public String getDescription() {
      return this.description;
   }

   public void setDescription(String var1) {
      this.description = var1;
   }

   @RbacAttribute
   @Enumerated(EnumType.STRING)
   @Column(name = "type", length = 32)
   public SinkConfiguration.SinkType getType() {
      return this.type;
   }

   public void setType(SinkConfiguration.SinkType var1) {
      this.type = var1;
      this.xmlProperties = null;
      if (this.properties != null) {
         for (SinkConfiguration.SinkType var5 : SinkConfiguration.SinkType.values()) {
            if (var5 != var1) {
               for (String var9 : var5.getPropertyNames()) {
                  this.properties.remove(var9);
               }
            }
         }
      }
   }

   @RbacAttribute
   @Column(name = "enabled")
   public boolean isEnabled() {
      return this.enabled;
   }

   public void setEnabled(boolean var1) {
      this.enabled = var1;
   }

   @RbacAttribute
   @Enumerated(EnumType.STRING)
   @Column(name = "severity", length = 32)
   public SinkConfiguration.SeverityThreshold getSeverity() {
      return this.severity;
   }

   public void setSeverity(SinkConfiguration.SeverityThreshold var1) {
      this.severity = var1;
   }

   @Column(name = "categories", length = Integer.MAX_VALUE)
   @Lob
   public String getCategories() {
      return this.categories;
   }

   public void setCategories(String var1) {
      this.categories = var1;
   }

   public String getProperty(String var1) {
      String var2 = null;
      Map var3 = this.properties;
      if (var3 != null) {
         var2 = (String)var3.get(var1);
      }

      return var2;
   }

   public void setProperty(String var1, String var2) {
      Map var3 = this.properties;
      if (var3 == null) {
         var3 = new HashMap();
         this.properties = var3;
      }

      var3.put(var1, var2);
      this.xmlProperties = null;
   }

   public void removeProperty(String var1) {
      if (this.properties != null) {
         this.properties.remove(var1);
      }
   }

   @Transient
   public List<String> getPropertyNames() {
      return this.properties == null ? new ArrayList<>() : new ArrayList<>(this.properties.keySet());
   }

   public void addSyslogHostEntry(String var1) {
      this.syslogHostList().add(new SinkConfiguration.SyslogHostEntry(this, var1).getValue());
      this.xmlProperties = null;
   }

   public void removeSyslogHostEntry(int var1) {
      List var2 = this.syslogHostList();
      if (var1 >= 0 && var1 < var2.size()) {
         var2.remove(var1);
      }

      this.xmlProperties = null;
   }

   public List<String> syslogHostList() {
      if (this.syslogHosts == null) {
         this.syslogHosts = new ArrayList<>();
      }

      return this.syslogHosts;
   }

   @Transient
   public Map<String, List<String>> getFilters() {
      return this.filters;
   }

   public void setFilters(Map<String, List<String>> var1) {
      this.filters = this.immutable(var1);
      this.xmlProperties = null;
   }

   @Transient
   public boolean isRollingEnabled() {
      String[] var2 = b;
      String var1 = this.getProperty(var2[4]);
      return var1 == null ? false : Boolean.valueOf(this.getProperty(b[12]));
   }

   @Transient
   public SinkConfiguration.RollingInterval getRollingInterval() {
      String var1 = this.getProperty(b[0]);
      return var1 == null ? SinkConfiguration.RollingInterval.DAILY : SinkConfiguration.RollingInterval.valueOf(var1);
   }

   public boolean equals(Object var1) {
      if (this == var1) {
         return true;
      }

      if (var1 == null || this.getClass() != var1.getClass()) {
         return false;
      }

      if (!super.equals(var1)) {
         return false;
      }

      SinkConfiguration var2 = (SinkConfiguration)var1;
      if (this.description != null ? this.description.equals(var2.description) : var2.description == null) {
         if (this.type != null ? this.type == var2.type : var2.type == null) {
            if (this.enabled != var2.enabled) {
               return false;
            }

            if (this.severity != null ? this.severity == var2.severity : var2.severity == null) {
               if (this.categories != null ? this.categories.equals(var2.categories) : var2.categories == null) {
                  if (this.filters != null ? this.filters.equals(var2.filters) : var2.filters == null) {
                     if (this.securityZone != null ? this.securityZone.equals(var2.securityZone) : var2.securityZone == null) {
                        Map var3 = var2.properties;
                        if ((this.properties == null || var3 != null) && (this.properties != null || var3 == null)) {
                           if (this.type != null && this.properties != null) {
                              for (String var7 : this.type.getPropertyNames()) {
                                 String var8 = this.properties.get(var7);
                                 String var9 = this.properties.get(var7);
                                 if (var8 == null) {
                                    if (var9 != null) {
                                       return false;
                                    }
                                 } else if (!var8.equals(var9)) {
                                    return false;
                                 }
                              }
                           }

                           return true;
                        } else {
                           return false;
                        }
                     } else {
                        return false;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         } else {
            return false;
         }
      } else {
         return false;
      }
   }

   public int hashCode() {
      int var1 = super.hashCode();
      var1 = 31 * var1 + (this.description != null ? this.description.hashCode() : 0);
      var1 = 31 * var1 + (this.type != null ? this.type.hashCode() : 0);
      var1 = 31 * var1 + (this.enabled ? 1 : 0);
      var1 = 31 * var1 + (this.severity != null ? this.severity.hashCode() : 0);
      var1 = 31 * var1 + (this.categories != null ? this.categories.hashCode() : 0);
      var1 = 31 * var1 + (this.filters != null ? this.filters.hashCode() : 0);
      var1 = 31 * var1 + (this.securityZone != null ? this.securityZone.hashCode() : 0);
      if (this.type != null && this.properties != null) {
         for (String var5 : this.type.getPropertyNames()) {
            String var6 = this.properties.get(var5);
            var1 = 31 * var1 + (var6 != null ? var6.hashCode() : 0);
         }
      }

      return var1;
   }

   public void copyFrom(SinkConfiguration var1) {
      this.setGoid(var1.getGoid());
      this.setName(var1.getName());
      this.setDescription(var1.getDescription());
      this.setType(var1.getType());
      this.setEnabled(var1.isEnabled());
      this.setSeverity(var1.getSeverity());
      this.setCategories(var1.getCategories());
      this.setXmlProperties(var1.getXmlProperties());
      this.setSecurityZone(var1.getSecurityZone());
   }

   @Column(name = "properties", length = Integer.MAX_VALUE)
   @Lob
   protected String getXmlProperties() {
      if (this.xmlProperties == null) {
         Map var1 = this.properties;
         List var2 = this.syslogHosts;
         Map var3 = this.mutable(this.filters);
         if (var1 == null && var2 == null && var3 == null) {
            return null;
         }

         PoolByteArrayOutputStream var4 = new PoolByteArrayOutputStream();

         try {
            XMLEncoder var5 = new XMLEncoder(new NonCloseableOutputStream(var4));
            var5.writeObject(new Object[]{var1, var2, var3});
            var5.close();
            this.xmlProperties = var4.toString(PROPERTIES_ENCODING);
         } finally {
            var4.close();
         }
      }

      return this.xmlProperties;
   }

   protected void setXmlProperties(String var1) {
      if (var1 == null || !var1.equals(this.xmlProperties)) {
         this.xmlProperties = var1;
         if (var1 != null && var1.length() > 0) {
            SafeXMLDecoder var2 = new SafeXMLDecoderBuilder(new ByteArrayInputStream(var1.getBytes(PROPERTIES_ENCODING))).build();
            Object var3 = var2.readObject();
            if (var3 instanceof Object[] var4) {
               this.properties = CollectionUtils.cast(var4[0], Map.class, String.class, String.class, new HashMap());
               this.syslogHosts = (List<String>)CollectionUtils.cast(var4[1], List.class, String.class, new ArrayList());
               if (var4.length > 2) {
                  this.filters = this.immutable(CollectionUtils.cast(var4[2], Map.class, String.class, List.class, new HashMap()));
               }
            } else {
               this.properties = CollectionUtils.cast(var3, Map.class, String.class, String.class, new HashMap());
            }
         }
      }
   }

   private Map<String, List<String>> immutable(Map<String, List<String>> var1) {
      return Collections.unmodifiableMap(Functions.map(var1, null, Functions.identity(), new a(this)));
   }

   private Map<String, List<String>> mutable(Map<String, List<String>> var1) {
      return Functions.map(var1, null, Functions.identity(), new b(this));
   }

   static {
      String[] var5 = new String[36];
      int var3 = 0;
      String var2 = "h\u001b%@D)#z\u0017;S\u000b,\u0016}\u000b:I\u0005'c}\u0001%\u000b\u0001%4}\u0006&W\u000fn$j\u0003[6\u0019\u0003[6\u0019\fh\u001b%@D2\"b\u001e K\r\rh\u001b%@D,\"i1&P\u00044\b]&\bk.\u0001\u001fJ\u0003B=\u000e\u0003Z1\u0019\u000f}\u000b:I\u0005'c~\u0000&Q\u0005#\"b\u000bh\u001b%@D&\"|\u001f(Q\u0003]!\u0005\fh\u001b%@D2\"b\u001e K\r\u0003B=\u000e\u000e}\u000b:I\u0005'cm\u001a(W9%9\u0007X7\u001bg%\u0013\b\fh\u001b%@D-,v! _\u000f\u0003Z1\u0019\u0003\\3\u001e\u0007Z \bc,\t\u000e\u000f}\u000b:I\u0005'ch\u0013*L\u0006)9w\r}\u000b:I\u0005'ch\u001d;H\u000b4\u0004]!\u0019f\u0003\\3\u001e\u0007X7\u001bg%\u0013\b\u0004]!\u0019f\u0007Z \bc,\t\u000e\u000f}\u000b:I\u0005'cz\u001b$@\u0010/#k\rh\u001b%@D)#z\u0017;S\u000b,\u0005O'\rl>\u0012}\u000b:I\u0005'cb\u001d.m\u000539`\u0013$@\u0015}\u000b:I\u0005'c}\u0001%\u000b\t,$k\u001c=d\u001f4%\u0005O'\rl>\u0003]!\u0005";
      int var4 = "h\u001b%@D)#z\u0017;S\u000b,\u0016}\u000b:I\u0005'c}\u0001%\u000b\u0001%4}\u0006&W\u000fn$j\u0003[6\u0019\u0003[6\u0019\fh\u001b%@D2\"b\u001e K\r\rh\u001b%@D,\"i1&P\u00044\b]&\bk.\u0001\u001fJ\u0003B=\u000e\u0003Z1\u0019\u000f}\u000b:I\u0005'c~\u0000&Q\u0005#\"b\u000bh\u001b%@D&\"|\u001f(Q\u0003]!\u0005\fh\u001b%@D2\"b\u001e K\r\u0003B=\u000e\u000e}\u000b:I\u0005'cm\u001a(W9%9\u0007X7\u001bg%\u0013\b\fh\u001b%@D-,v! _\u000f\u0003Z1\u0019\u0003\\3\u001e\u0007Z \bc,\t\u000e\u000f}\u000b:I\u0005'ch\u0013*L\u0006)9w\r}\u000b:I\u0005'ch\u001d;H\u000b4\u0004]!\u0019f\u0003\\3\u001e\u0007X7\u001bg%\u0013\b\u0004]!\u0019f\u0007Z \bc,\t\u000e\u000f}\u000b:I\u0005'cz\u001b$@\u0010/#k\rh\u001b%@D)#z\u0017;S\u000b,\u0005O'\rl>\u0012}\u000b:I\u0005'cb\u001d.m\u000539`\u0013$@\u0015}\u000b:I\u0005'c}\u0001%\u000b\t,$k\u001c=d\u001f4%\u0005O'\rl>\u0003]!\u0005"
         .length();
      char var1 = '\r';
      int var7 = -1;

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

         while (true) {
            String var9 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     String[] var10 = b;
                     PROP_SYSLOG_FORMAT = b[21];
                     PROP_ROLLING_INTERVAL = var10[28];
                     PROP_SYSLOG_CHAR_SET = var10[14];
                     SYSLOG_PROTOCOL_SSL = var10[33];
                     PROP_FILE_FORMAT = var10[10];
                     SYSLOG_FORMAT_RAW = var10[23];
                     FILE_FORMAT_STANDARD = var10[35];
                     SYSLOG_FORMAT_STANDARD = var10[35];
                     CATEGORY_GATEWAY_LOGS = var10[13];
                     PROP_FILE_MAX_SIZE = var10[16];
                     PROP_SYSLOG_FACILITY = var10[20];
                     PROP_SYSLOG_PROTOCOL = var10[9];
                     PROP_SYSLOG_SSL_KEYSTORE_ID = var10[1];
                     PROP_SYSLOG_SSL_KEY_ALIAS = var10[34];
                     FILE_FORMAT_RAW = var10[23];
                     PROP_SYSLOG_LOG_HOSTNAME = var10[30];
                     PROP_SYSLOG_SSL_CLIENTAUTH = var10[31];
                     FILE_FORMAT_VERBOSE = var10[24];
                     SYSLOG_FORMAT_VERBOSE = var10[24];
                     CATEGORY_SSPC_LOGS = var10[22];
                     CATEGORY_AUDITS = var10[29];
                     SYSLOG_PROTOCOL_TCP = var10[17];
                     CATEGORY_TRAFFIC_LOGS = var10[26];
                     SYSLOG_PROTOCOL_UDP = var10[2];
                     PROP_FILE_LOG_COUNT = var10[5];
                     PROP_ENABLE_ROLLING_FILE = var10[12];
                     PROP_SYSLOG_TIMEZONE = var10[27];
                     PROPERTIES_ENCODING = Charsets.UTF8;
                     String[] var11 = new String[4];
                     String[] var8 = b;
                     var11[0] = var8[32];
                     var11[1] = var8[7];
                     var11[2] = var8[19];
                     var11[3] = var8[25];
                     CATEGORIES_SET = CollectionUtils.set(var11);
                     FILE_FORMAT_SET = CollectionUtils.set(new String[]{var8[18], var8[6], var8[15]});
                     SYSLOG_PROTOCOL_SET = CollectionUtils.set(new String[]{var8[8], var8[3], var8[11]});
                     SYSLOG_FORMAT_SET = CollectionUtils.set(new String[]{var8[23], var8[35], var8[24]});
                     return;
                  }

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

                  var2 = "\u000fyH;wU\u0011\u000fsWysWFRaW>yA\b/Tz\u0019\\sm8";
                  var4 = "\u000fyH;wU\u0011\u000fsWysWFRaW>yA\b/Tz\u0019\\sm8".length();
                  var1 = 20;
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String b(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 -> 123;
            case 1 -> 7;
            case 2 -> 60;
            case 3 -> 80;
            case 4 -> 31;
            case 5 -> 53;
            default -> 56;
         });
      }

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

   public enum RollingInterval {
      HOURLY,
      DAILY;

      private final String pattern;
      private static final String[] a;

      RollingInterval(@NotNull String var3) {
         this.pattern = var3;
      }

      public String getPattern() {
         return this.pattern;
      }

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var5 = new String[8];
         int var3 = 0;
         String var2 = "\u0000`\u00137o\u0000n>1s\u00006g\u0017n\u0004!\u0001,xR@>n\u0013\r\u007f\u001elPq\u00061k\u001fe\u0004d\u0015c-WsW!\b%*Ws^$\u0014cg\u0007s\u0004!\t,~Rb\u0015!\t6f\u001e\u00068N2\u0011F+\r\tx\u001e:'?M]e\u0003nB:\u0006Lh\t*~L?\u0013n\nlfEt\u0015b\u000flm\u0013t\u0015v\u0006:%\u0011o\u001dl\b-%\u001eo\u0017.4*d\u0019C\u001fo\u0001*m\u0007r\u0011u\u000e,dVR\u001fm\u000b*d\u0015I\u001eu\u00021|\u0013l";
         int var4 = "\u0000`\u00137o\u0000n>1s\u00006g\u0017n\u0004!\u0001,xR@>n\u0013\r\u007f\u001elPq\u00061k\u001fe\u0004d\u0015c-WsW!\b%*Ws^$\u0014cg\u0007s\u0004!\t,~Rb\u0015!\t6f\u001e\u00068N2\u0011F+\r\tx\u001e:'?M]e\u0003nB:\u0006Lh\t*~L?\u0013n\nlfEt\u0015b\u000flm\u0013t\u0015v\u0006:%\u0011o\u001dl\b-%\u001eo\u0017.4*d\u0019C\u001fo\u0001*m\u0007r\u0011u\u000e,dVR\u001fm\u000b*d\u0015I\u001eu\u00021|\u0013l"
            .length();
         char var1 = 7;
         int var7 = -1;

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

            while (true) {
               String var9 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var9;
                     if ((var7 += var1) >= var4) {
                        a = var5;
                        String[] var8 = a;
                        HOURLY = new SinkConfiguration.RollingInterval(var8[3]);
                        DAILY = new SinkConfiguration.RollingInterval(var8[7]);
                        return;
                     }

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

                     var2 = "p\u0004jK\u0017\nM<Z~c{\t\u0019!G";
                     var4 = "p\u0004jK\u0017\nM<Z~c{\t\u0019!G".length();
                     var1 = 5;
                     var7 = -1;
               }

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

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

         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 -> 71;
               case 1 -> 54;
               case 2 -> 80;
               case 3 -> 116;
               case 4 -> 61;
               case 5 -> 69;
               default -> 55;
            });
         }

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

   public enum SeverityThreshold {
      ALL,
      FINEST,
      FINER,
      FINE,
      CONFIG,
      INFO,
      WARNING,
      SEVERE;

      private final Level logLevel;
      private static final String[] a;

      SeverityThreshold(@NotNull Level var3) {
         this.logLevel = var3;
      }

      @NotNull
      public Level toLoggingLevel() {
         try {
            return this.logLevel;
         } catch (IllegalArgumentException var1) {
            throw a(var1);
         }
      }

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var5 = new String[15];
         int var3 = 0;
         String var2 = "\u0002v\u0001\u0006\u0006\u0002v\u0001\u0006j|A'P\"lU\u001f\b!\\'l^I\b!H.:\u0016K\u0013)R -\u0016D\u0013#\u0010\u001c*WC?+Q)*^]\u000e%K&,W\f/!I*1P\\\u0005\u0010W=&J@\u0013([*\u0004q 7w]\u0010(\u001f\"&M@\u0013 \u001fj0\u0017\r\u000fdR:0M\b\u0012+Ko1\\\\\t6Qo-LD\u0010\u0006\u0017z\u0019\u0006km\u0004\rq\t\f\u0005\u0002v\u0001\u0006k\u0006\u0007p\u0001\u0005po>\u0005M(6TM\u00120\u001f),K\b<\nP;\rLD\u0010dO.1XE\u00190Z=c\u001e\r\u000fc\u001f %\u0019\r\u000fj\u001a<cT]\u000f0\u001f!,M\b\u001e!\u001f!6UD\u0003\u0005s\u0003\u000e0P\u0003,^O\u0015*X\u0003&OM\u0010\u0006xV!*M\u0016\u0007\u0013~\u001d\rpf;";
         int var4 = "\u0002v\u0001\u0006\u0006\u0002v\u0001\u0006j|A'P\"lU\u001f\b!\\'l^I\b!H.:\u0016K\u0013)R -\u0016D\u0013#\u0010\u001c*WC?+Q)*^]\u000e%K&,W\f/!I*1P\\\u0005\u0010W=&J@\u0013([*\u0004q 7w]\u0010(\u001f\"&M@\u0013 \u001fj0\u0017\r\u000fdR:0M\b\u0012+Ko1\\\\\t6Qo-LD\u0010\u0006\u0017z\u0019\u0006km\u0004\rq\t\f\u0005\u0002v\u0001\u0006k\u0006\u0007p\u0001\u0005po>\u0005M(6TM\u00120\u001f),K\b<\nP;\rLD\u0010dO.1XE\u00190Z=c\u001e\r\u000fc\u001f %\u0019\r\u000fj\u001a<cT]\u000f0\u001f!,M\b\u001e!\u001f!6UD\u0003\u0005s\u0003\u000e0P\u0003,^O\u0015*X\u0003&OM\u0010\u0006xV!*M\u0016\u0007\u0013~\u001d\rpf;"
            .length();
         char var1 = 4;
         int var7 = -1;

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

            while (true) {
               String var9 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var9;
                     if ((var7 += var1) >= var4) {
                        a = var5;
                        String[] var8 = a;
                        ALL = new SinkConfiguration.SeverityThreshold(Level.ALL);
                        FINEST = new SinkConfiguration.SeverityThreshold(Level.FINEST);
                        FINER = new SinkConfiguration.SeverityThreshold(Level.FINER);
                        FINE = new SinkConfiguration.SeverityThreshold(Level.FINE);
                        CONFIG = new SinkConfiguration.SeverityThreshold(Level.CONFIG);
                        INFO = new SinkConfiguration.SeverityThreshold(Level.INFO);
                        WARNING = new SinkConfiguration.SeverityThreshold(Level.WARNING);
                        SEVERE = new SinkConfiguration.SeverityThreshold(Level.SEVERE);
                        return;
                     }

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

                     var2 = "1F4zC\t\u001e7J1zH_\u001e7^8,\u0000]\u0005?D6;\u0000R\u00055\u0006\n<AU)=G?<HK\u00183]0:A\u001a97_<'FJ\u0013\u0006A+0\\V\u0005>M\b>F>\u0019JH\u000f>";
                     var4 = "1F4zC\t\u001e7J1zH_\u001e7^8,\u0000]\u0005?D6;\u0000R\u00055\u0006\n<AU)=G?<HK\u00183]0:A\u001a97_<'FJ\u0013\u0006A+0\\V\u0005>M\b>F>\u0019JH\u000f>"
                        .length();
                     var1 = 'A';
                     var7 = -1;
               }

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

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

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

         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 -> 98;
               case 1 -> 25;
               case 2 -> 105;
               case 3 -> 101;
               case 4 -> 31;
               case 5 -> 14;
               default -> 90;
            });
         }

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

   public enum SinkType {
      FILE,
      SYSLOG;

      private final String[] propertyNames;

      SinkType(String[] var3) {
         this.propertyNames = var3;
      }

      public String[] getPropertyNames() {
         return this.propertyNames;
      }

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var0 = new String[12];
         int var4 = 0;
         String var3 = "?m=\u0004MKs/|/\u001aqI)\u000f?m=\u0004MKs<f!\u001cMO2 \f*}\"\r\fA<4G'\u0012G\u000f?m=\u0004MKs*u-\u0001NE)5\u000f?m=\u0004MKs8}#\rXC3)\u0006\u001fM\u001d$mk\u0014?m=\u0004MKs?g\"FII$bu\"\u0001C_\u0016?m=\u0004MKs?g\"FII$?`!\u001aG\u00024(\u0012?m=\u0004MKs {) M_)\"u#\r\u0004\n]\u0002-";
         int var5 = "?m=\u0004MKs/|/\u001aqI)\u000f?m=\u0004MKs<f!\u001cMO2 \f*}\"\r\fA<4G'\u0012G\u000f?m=\u0004MKs*u-\u0001NE)5\u000f?m=\u0004MKs8}#\rXC3)\u0006\u001fM\u001d$mk\u0014?m=\u0004MKs?g\"FII$bu\"\u0001C_\u0016?m=\u0004MKs?g\"FII$?`!\u001aG\u00024(\u0012?m=\u0004MKs {) M_)\"u#\r\u0004\n]\u0002-"
            .length();
         char var2 = 14;
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 4;
            String var10001 = var3.substring(++var7, var7 + var2);
            byte var10002 = -1;

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var0[var4++] = var8;
                     if ((var7 += var2) >= var5) {
                        FILE = new SinkConfiguration.SinkType(new String[]{var0[2], var0[10]});
                        SYSLOG = new SinkConfiguration.SinkType(new String[]{var0[1], var0[3], var0[8], var0[0], var0[4], var0[11], var0[7], var0[6]});
                        return;
                     }

                     var2 = var3.charAt(var7);
                     break;
                  default:
                     var0[var4++] = var8;
                     if ((var7 += var2) < var5) {
                        var2 = var3.charAt(var7);
                        continue label25;
                     }

                     var3 = "u\"}RS\u001fmt\b~B\u0013\u0007\u0015`2b[\u0012\u0014,`8}\u0019\u001e\u001fkv%ev\b\u0007j";
                     var5 = "u\"}RS\u001fmt\b~B\u0013\u0007\u0015`2b[\u0012\u0014,`8}\u0019\u001e\u001fkv%ev\b\u0007j".length();
                     var2 = '\r';
                     var7 = -1;
               }

               var10000 = 91;
               var10001 = var3.substring(++var7, var7 + var2);
               var10002 = 0;
            }
         }
      }

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

         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 -> 72;
               case 1 -> 16;
               case 2 -> 74;
               case 3 -> 108;
               case 4 -> 38;
               case 5 -> 40;
               default -> 89;
            });
         }

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

   public class SyslogHostEntry implements Serializable {
      static final String HOST_ENTRY_DELIM = ":";
      final String hostName;
      final String port;
      static final long serialVersionUID = 2403801027622776052L;
      private static final String[] a;

      SyslogHostEntry(SinkConfiguration param1, String param2) {
         // $VF: Couldn't be decompiled
         // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
         // java.lang.RuntimeException: parsing failure!
         //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
         //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
         //
         // Bytecode:
         // 00: aload 0
         // 01: aload 1
         // 02: putfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.this$0 Lcom/l7tech/gateway/common/log/SinkConfiguration;
         // 05: aload 0
         // 06: invokespecial java/lang/Object.<init> ()V
         // 09: aload 2
         // 0a: aconst_null
         // 0b: invokestatic com/l7tech/util/InetAddressUtil.getHostAndPort (Ljava/lang/String;Ljava/lang/String;)Lcom/l7tech/util/Pair;
         // 0e: astore 3
         // 0f: aload 3
         // 10: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
         // 13: ifnull 2d
         // 16: aload 3
         // 17: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
         // 1a: checkcast java/lang/String
         // 1d: invokevirtual java/lang/String.trim ()Ljava/lang/String;
         // 20: invokevirtual java/lang/String.isEmpty ()Z
         // 23: ifeq 3e
         // 26: goto 2d
         // 29: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 2c: athrow
         // 2d: new java/lang/IllegalArgumentException
         // 30: dup
         // 31: getstatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a [Ljava/lang/String;
         // 34: bipush 0
         // 35: aaload
         // 36: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
         // 39: athrow
         // 3a: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 3d: athrow
         // 3e: aload 3
         // 3f: getfield com/l7tech/util/Pair.right Ljava/lang/Object;
         // 42: ifnonnull 56
         // 45: new java/lang/IllegalArgumentException
         // 48: dup
         // 49: getstatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a [Ljava/lang/String;
         // 4c: bipush 1
         // 4d: aaload
         // 4e: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
         // 51: athrow
         // 52: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 55: athrow
         // 56: aload 0
         // 57: aload 3
         // 58: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
         // 5b: checkcast java/lang/String
         // 5e: putfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.hostName Ljava/lang/String;
         // 61: aload 0
         // 62: aload 3
         // 63: getfield com/l7tech/util/Pair.right Ljava/lang/Object;
         // 66: checkcast java/lang/String
         // 69: putfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.port Ljava/lang/String;
         // 6c: return
         // try (9 -> 18): 19 java/lang/IllegalArgumentException
         // try (12 -> 28): 28 java/lang/IllegalArgumentException
         // try (30 -> 40): 40 java/lang/IllegalArgumentException
      }

      public String getHostName() {
         return this.hostName;
      }

      public String getPort() {
         return this.port;
      }

      public String getValue() {
         return this.hostName + ":" + this.port;
      }

      @Override
      public boolean equals(Object param1) {
         // $VF: Couldn't be decompiled
         // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
         // java.lang.RuntimeException: parsing failure!
         //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
         //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
         //
         // Bytecode:
         // 00: aload 0
         // 01: aload 1
         // 02: if_acmpne 0b
         // 05: bipush 1
         // 06: ireturn
         // 07: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 0a: athrow
         // 0b: aload 1
         // 0c: ifnull 21
         // 0f: aload 0
         // 10: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
         // 13: aload 1
         // 14: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
         // 17: if_acmpeq 27
         // 1a: goto 21
         // 1d: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 20: athrow
         // 21: bipush 0
         // 22: ireturn
         // 23: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 26: athrow
         // 27: aload 1
         // 28: checkcast com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry
         // 2b: astore 2
         // 2c: aload 0
         // 2d: getfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.hostName Ljava/lang/String;
         // 30: aload 2
         // 31: getfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.hostName Ljava/lang/String;
         // 34: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
         // 37: ifne 40
         // 3a: bipush 0
         // 3b: ireturn
         // 3c: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 3f: athrow
         // 40: aload 0
         // 41: getfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.port Ljava/lang/String;
         // 44: aload 2
         // 45: getfield com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.port Ljava/lang/String;
         // 48: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
         // 4b: ifne 54
         // 4e: bipush 0
         // 4f: ireturn
         // 50: invokestatic com/l7tech/gateway/common/log/SinkConfiguration$SyslogHostEntry.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 53: athrow
         // 54: bipush 1
         // 55: ireturn
         // try (0 -> 5): 5 java/lang/IllegalArgumentException
         // try (7 -> 14): 15 java/lang/IllegalArgumentException
         // try (9 -> 19): 19 java/lang/IllegalArgumentException
         // try (24 -> 32): 32 java/lang/IllegalArgumentException
         // try (34 -> 42): 42 java/lang/IllegalArgumentException
      }

      @Override
      public int hashCode() {
         int var1 = this.hostName.hashCode();
         return 31 * var1 + this.port.hashCode();
      }

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

      static {
         String[] var5 = new String[2];
         int var3 = 0;
         String var2 = "Y\u0001$\u000f0jMb\u0017$\u0017\u0011l\u0000oX4\u00021c\u0002~X5\u0006\u007fc\u0018f\u0014w\f--\bg\b#\u001a#Y\u0001$\u000f0jMz\u0017%\u0017\u007fn\fd\u00168\u0017\u007fo\b*\u0016\"\u000f3-\u0002xX2\u000e/y\u0014";
         int var4 = "Y\u0001$\u000f0jMb\u0017$\u0017\u0011l\u0000oX4\u00021c\u0002~X5\u0006\u007fc\u0018f\u0014w\f--\bg\b#\u001a#Y\u0001$\u000f0jMz\u0017%\u0017\u007fn\fd\u00168\u0017\u007fo\b*\u0016\"\u000f3-\u0002xX2\u000e/y\u0014"
            .length();
         char var1 = '\'';
         int var0 = -1;

         while (true) {
            String var10002 = a(83, a(var2.substring(++var0, var0 + var1)));
            byte var10001 = -1;
            var5[var3++] = var10002;
            if ((var0 += var1) >= var4) {
               a = var5;
               return;
            }

            var1 = var2.charAt(var0);
         }
      }

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

         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 -> 89;
               case 1 -> 43;
               case 2 -> 4;
               case 3 -> 48;
               case 4 -> 12;
               case 5 -> 94;
               default -> 62;
            });
         }

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