/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.codahale.metrics.MetricRegistry
 *  com.codahale.metrics.jmx.JmxReporter
 *  com.datastax.oss.driver.api.core.CqlSession
 *  com.datastax.oss.driver.api.core.DriverException
 *  com.datastax.oss.driver.api.core.DriverExecutionException
 *  com.datastax.oss.driver.api.core.ssl.ProgrammaticSslEngineFactory
 *  com.l7tech.common.io.SslSocketUtil
 *  com.l7tech.gateway.common.audit.AssertionMessages
 *  com.l7tech.gateway.common.audit.Audit
 *  com.l7tech.gateway.common.audit.AuditDetailMessage
 *  com.l7tech.gateway.common.audit.LoggingAudit
 *  com.l7tech.gateway.common.cassandra.CassandraConnection
 *  com.l7tech.gateway.common.security.password.SecurePassword
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.objectmodel.UpdateException
 *  com.l7tech.util.Config
 *  com.l7tech.util.ConfigFactory
 *  com.l7tech.util.ExceptionUtils
 *  com.l7tech.util.JdkLoggerConfigurator
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.l7tech.server.cassandra;

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.jmx.JmxReporter;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.DriverException;
import com.datastax.oss.driver.api.core.DriverExecutionException;
import com.datastax.oss.driver.api.core.ssl.ProgrammaticSslEngineFactory;
import com.l7tech.common.io.SslSocketUtil;
import com.l7tech.gateway.common.audit.AssertionMessages;
import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.gateway.common.audit.AuditDetailMessage;
import com.l7tech.gateway.common.audit.LoggingAudit;
import com.l7tech.gateway.common.cassandra.CassandraConnection;
import com.l7tech.gateway.common.security.password.SecurePassword;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.server.cassandra.CassandraConnectionEntityManager;
import com.l7tech.server.cassandra.CassandraConnectionHolder;
import com.l7tech.server.cassandra.CassandraConnectionHolderImpl;
import com.l7tech.server.cassandra.CassandraConnectionManager;
import com.l7tech.server.cassandra.CassandraSessionBuilder;
import com.l7tech.server.cassandra.f;
import com.l7tech.server.security.password.SecurePasswordManager;
import com.l7tech.server.util.ManagedTimer;
import com.l7tech.util.Config;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.JdkLoggerConfigurator;
import java.lang.reflect.Field;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.ParseException;
import java.util.Iterator;
import java.util.Map;
import java.util.Optional;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CassandraConnectionManagerImpl
implements CassandraConnectionManager {
    private static final java.util.logging.Logger a;
    private final ConcurrentHashMap<String, CassandraConnectionHolder> b = new ConcurrentHashMap();
    private final CassandraConnectionEntityManager c;
    private final Config d;
    private final SecurePasswordManager e;
    private final TrustManager f;
    private final SecureRandom g;
    private static final Audit h;
    private final Timer i;
    private final String[] j;
    private static final String k;
    private static final long l;
    protected final Lock lock;
    private static final String[] m;

    private static void a() {
        try {
            String[] stringArray = m;
            Logger logger = LoggerFactory.getLogger((String)stringArray[15]);
            if (logger == null) {
                a.log(Level.WARNING, stringArray[14]);
                return;
            }
            stringArray = m;
            Field field = logger.getClass().getDeclaredField(stringArray[4]);
            field.setAccessible(true);
            java.util.logging.Logger logger2 = (java.util.logging.Logger)field.get(logger);
            logger2.setLevel(Level.OFF);
        }
        catch (Exception exception) {
            a.log(Level.WARNING, m[1] + ExceptionUtils.getMessage((Throwable)exception), ExceptionUtils.getDebugException((Throwable)exception));
        }
    }

    public CassandraConnectionManagerImpl(CassandraConnectionEntityManager cassandraConnectionEntityManager, Config config, SecurePasswordManager securePasswordManager, TrustManager trustManager, SecureRandom secureRandom) {
        String[] stringArray = new String[2];
        String[] stringArray2 = m;
        stringArray[0] = stringArray2[9];
        stringArray[1] = stringArray2[20];
        this.j = stringArray;
        this.lock = new ReentrantLock();
        this.c = cassandraConnectionEntityManager;
        this.d = config;
        this.e = securePasswordManager;
        this.f = trustManager;
        this.g = secureRandom;
        this.i = new ManagedTimer(stringArray2[17]);
        this.i.schedule((TimerTask)new f(this.b, this), 30797L, l);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     * Unable to fully structure code
     */
    @Override
    public CassandraConnectionHolder getConnection(String var1_1) {
        this.lock.lock();
        try {
            var2_2 = this.b.get(var1_1);
            if (var2_2 == null) {
                try {
                    var3_3 = this.c.getCassandraConnectionEntity(var1_1);
                }
                catch (FindException var4_4) {
                    v0 = new String[2];
                    v0[0] = var1_1;
                    var7_6 = CassandraConnectionManagerImpl.m;
                    v0[1] = var7_6[19] + var1_1;
                    CassandraConnectionManagerImpl.h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_CANNOT_CONNECT, v0, ExceptionUtils.getDebugException((Throwable)var4_4));
                    var5_7 = null;
                    this.lock.unlock();
                    return var5_7;
                }
                if (var3_3 == null) {
                    CassandraConnectionManagerImpl.h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_CANNOT_CONNECT, new String[]{var1_1, CassandraConnectionManagerImpl.m[12]});
                    var4_5 = null;
                    return var4_5;
                }
                if (var3_3.isEnabled()) {
                    var2_2 = this.createConnection((CassandraConnection)var3_3);
                    try {
                        if (var2_2 == null) ** GOTO lbl31
                        this.b.put(var1_1, var2_2);
                    }
                    catch (FindException v1) {
                        throw CassandraConnectionManagerImpl.a((Exception)v1);
                    }
                } else {
                    CassandraConnectionManagerImpl.h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_DISABLED, new String[]{var1_1});
                }
            }
lbl31:
            // 5 sources

            try {
                if (var2_2 != null) {
                    var2_2.getLastAccessTime().set(System.currentTimeMillis());
                }
            }
            catch (FindException v2) {
                throw CassandraConnectionManagerImpl.a((Exception)v2);
            }
            var3_3 = var2_2;
            return var3_3;
        }
        finally {
            this.lock.unlock();
        }
    }

    @Override
    public void closeAllConnections() {
        this.lock.lock();
        try {
            Iterator<CassandraConnectionHolder> iterator = this.b.values().iterator();
            while (iterator.hasNext()) {
                CassandraConnectionHolder cassandraConnectionHolder = iterator.next();
                this.closeConnection(cassandraConnectionHolder);
                iterator.remove();
            }
        }
        finally {
            this.lock.unlock();
        }
    }

    @Override
    public void removeConnection(CassandraConnection cassandraConnection) {
        block6: {
            this.lock.lock();
            try {
                block5: {
                    CassandraConnectionHolder cassandraConnectionHolder = this.b.get(cassandraConnection.getName());
                    try {
                        if (!this.closeConnection(cassandraConnectionHolder)) break block5;
                        this.b.remove(cassandraConnection.getName());
                        h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_MANAGER_FINE_MESSAGE, new String[]{m[13] + cassandraConnection.getName()});
                        break block6;
                    }
                    catch (DriverException driverException) {
                        throw CassandraConnectionManagerImpl.a((Exception)((Object)driverException));
                    }
                }
                h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_MANAGER_FINE_MESSAGE, new String[]{m[2] + cassandraConnection.getName()});
            }
            finally {
                this.lock.unlock();
            }
        }
    }

    @Override
    public void addConnection(CassandraConnection cassandraConnection) {
        this.getConnection(cassandraConnection.getName());
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     * Enabled force condition propagation
     * Lifted jumps to return sites
     */
    @Override
    public void removeConnection(Goid goid) {
        this.lock.lock();
        try {
            CassandraConnection cassandraConnection = null;
            try {
                cassandraConnection = (CassandraConnection)this.c.findByPrimaryKey(goid);
                this.removeConnection(cassandraConnection);
            }
            catch (FindException findException) {
                h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CANNOT_REMOVE_CONNECTION, new String[]{m[7]}, ExceptionUtils.getDebugException((Throwable)findException));
            }
            if (cassandraConnection != null) return;
            Iterator<CassandraConnectionHolder> iterator = this.b.values().iterator();
            while (iterator.hasNext()) {
                CassandraConnectionHolder cassandraConnectionHolder = iterator.next();
                try {
                    if (!cassandraConnectionHolder.getCassandraConnectionEntity().getGoid().equals((Object)goid)) continue;
                    this.closeConnection(cassandraConnectionHolder);
                    iterator.remove();
                }
                catch (FindException findException) {
                    throw CassandraConnectionManagerImpl.a((Exception)((Object)findException));
                    return;
                }
            }
        }
        finally {
            this.lock.unlock();
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     * Loose catch block
     */
    @Override
    public void updateConnection(CassandraConnection cassandraConnection) throws UpdateException {
        block9: {
            this.lock.lock();
            try {
                Map.Entry<String, CassandraConnectionHolder> entry;
                boolean bl2 = false;
                Iterator<Map.Entry<String, CassandraConnectionHolder>> iterator = this.b.entrySet().iterator();
                while (iterator.hasNext()) {
                    entry = iterator.next();
                    if (!entry.getValue().getCassandraConnectionEntity().getGoid().equals((Object)cassandraConnection.getGoid())) continue;
                    CassandraConnectionHolder cassandraConnectionHolder = (CassandraConnectionHolder)entry.getValue();
                    if (this.closeConnection(cassandraConnectionHolder)) {
                        bl2 = true;
                        iterator.remove();
                        String[] stringArray = new String[1];
                        String[] stringArray2 = m;
                        stringArray[0] = stringArray2[18] + cassandraConnection.getName();
                        h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_MANAGER_FINE_MESSAGE, stringArray);
                        break;
                    }
                    throw new UpdateException(m[11] + cassandraConnection.getName());
                }
                if (!bl2) break block9;
                entry = this.createConnection(cassandraConnection);
                if (entry == null) break block9;
                try {
                    block10: {
                        if (!cassandraConnection.isEnabled()) break block9;
                        break block10;
                        catch (UpdateException updateException) {
                            throw CassandraConnectionManagerImpl.a((Exception)((Object)updateException));
                        }
                    }
                    this.b.put(cassandraConnection.getName(), (CassandraConnectionHolder)((Object)entry));
                }
                catch (UpdateException updateException) {
                    throw CassandraConnectionManagerImpl.a((Exception)((Object)updateException));
                }
            }
            finally {
                this.lock.unlock();
            }
        }
    }

    private CassandraConnectionHolder a(Goid goid) {
        for (CassandraConnectionHolder cassandraConnectionHolder : this.b.values()) {
            try {
                if (!cassandraConnectionHolder.getCassandraConnectionEntity().getGoid().equals((Object)goid)) continue;
                return cassandraConnectionHolder;
            }
            catch (DriverException driverException) {
                throw CassandraConnectionManagerImpl.a((Exception)((Object)driverException));
            }
        }
        return null;
    }

    protected CassandraConnectionHolder createConnection(CassandraConnection cassandraConnection) {
        CqlSession cqlSession;
        try {
            cqlSession = this.a(cassandraConnection);
            h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_MANAGER_FINE_MESSAGE, new String[]{m[16] + cassandraConnection.getName()});
        }
        catch (Exception exception) {
            h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_CANNOT_CONNECT, new String[]{cassandraConnection.getName(), exception.getMessage()}, ExceptionUtils.getDebugException((Throwable)exception));
            return null;
        }
        return new CassandraConnectionHolderImpl(cassandraConnection, cqlSession, this.a(cqlSession, cassandraConnection));
    }

    /*
     * Enabled force condition propagation
     * Lifted jumps to return sites
     */
    @Override
    public void testConnection(CassandraConnection cassandraConnection) throws DriverException {
        CqlSession cqlSession = null;
        try {
            cqlSession = this.a(cassandraConnection);
            h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_MANAGER_FINE_MESSAGE, new String[]{m[21] + cassandraConnection.getName()});
            if (cqlSession == null) return;
        }
        catch (DriverException driverException) {
            try {
                h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_CANNOT_CONNECT, new String[]{cassandraConnection.getName(), driverException.getMessage()}, ExceptionUtils.getDebugException((Throwable)driverException));
                throw driverException;
            }
            catch (Throwable throwable) {
                try {
                    if (cqlSession == null) throw throwable;
                    cqlSession.close();
                    throw throwable;
                }
                catch (DriverException driverException2) {
                    throw CassandraConnectionManagerImpl.a((Exception)((Object)driverException2));
                }
            }
        }
        cqlSession.close();
        return;
    }

    private Optional<JmxReporter> a(CqlSession cqlSession, CassandraConnection cassandraConnection) {
        return cqlSession.getMetrics().map(metrics -> {
            MetricRegistry metricRegistry = metrics.getRegistry();
            String[] stringArray = m;
            JmxReporter jmxReporter = JmxReporter.forRegistry((MetricRegistry)metricRegistry).inDomain(stringArray[10]).build();
            jmxReporter.start();
            h.logAndAudit((AuditDetailMessage)AssertionMessages.CASSANDRA_CONNECTION_MANAGER_INFO_MESSAGE, new String[]{String.format(stringArray[0], cassandraConnection.getName())});
            return jmxReporter;
        });
    }

    private CqlSession a(CassandraConnection cassandraConnection2) {
        return new CassandraSessionBuilder(cassandraConnection2, this.d).sslEngineFactorySupplier(cassandraConnection -> {
            try {
                return this.b((CassandraConnection)cassandraConnection);
            }
            catch (KeyManagementException | NoSuchAlgorithmException generalSecurityException) {
                throw new DriverExecutionException((Throwable)generalSecurityException);
            }
        }).passwordSupplier(cassandraConnection -> {
            try {
                return String.valueOf(this.c((CassandraConnection)cassandraConnection));
            }
            catch (FindException | ParseException throwable) {
                throw new DriverExecutionException(throwable);
            }
        }).build();
    }

    private ProgrammaticSslEngineFactory b(CassandraConnection cassandraConnection) throws NoSuchAlgorithmException, KeyManagementException {
        String[] stringArray;
        SSLContext sSLContext;
        block2: {
            TrustManager[] trustManagerArray = new TrustManager[]{this.f};
            String string = cassandraConnection.getTlsEnabledCipherSuites();
            String[] stringArray2 = m;
            sSLContext = SSLContext.getInstance(stringArray2[5]);
            sSLContext.init(null, trustManagerArray, this.g);
            stringArray = this.j;
            try {
                if (string == null || string.equals("")) break block2;
            }
            catch (NoSuchAlgorithmException noSuchAlgorithmException) {
                throw CassandraConnectionManagerImpl.a(noSuchAlgorithmException);
            }
            stringArray = SslSocketUtil.filterUnsupportedCiphers((String[])string.split(m[3]), (String[])sSLContext.getSupportedSSLParameters().getCipherSuites());
        }
        return new ProgrammaticSslEngineFactory(sSLContext, stringArray, false);
    }

    private char[] c(CassandraConnection cassandraConnection) throws FindException, ParseException {
        block5: {
            try {
                if (cassandraConnection.getPasswordGoid() == null || Goid.isDefault((Goid)cassandraConnection.getPasswordGoid())) break block5;
            }
            catch (FindException findException) {
                throw CassandraConnectionManagerImpl.a((Exception)((Object)findException));
            }
            SecurePassword securePassword = (SecurePassword)this.e.findByPrimaryKey(cassandraConnection.getPasswordGoid());
            try {
                if (securePassword == null) {
                    return new char[0];
                }
            }
            catch (FindException findException) {
                throw CassandraConnectionManagerImpl.a((Exception)((Object)findException));
            }
            return this.e.decryptPassword(securePassword.getEncodedPassword());
        }
        return new char[0];
    }

    protected boolean closeConnection(CassandraConnectionHolder cassandraConnectionHolder) {
        if (cassandraConnectionHolder != null) {
            cassandraConnectionHolder.getJmxReporter().ifPresent(JmxReporter::close);
            CqlSession cqlSession = cassandraConnectionHolder.getSession();
            try {
                if (cqlSession != null) {
                    cqlSession.close();
                }
            }
            catch (DriverException driverException) {
                throw CassandraConnectionManagerImpl.a((Exception)((Object)driverException));
            }
        }
        return true;
    }

    public int getConnectionCacheSize() {
        return this.b.size();
    }

    /*
     * Unable to fully structure code
     */
    static {
        block13: {
            block12: {
                var5 = new String[22];
                var3_1 = 0;
                var2_2 = "?/\n\nK\u00063%#^G\u0018H!<'\f\u0016\u000e\fr?/\n\nK\"\u001f\u0010f\u001b\f\n\n>-\"C\u001d(\u001f\u0000\u0007\rr<)^\u0016\u001e\u001a<h)\u0018\u0004K\u0004=/5^\u0004\u0019\u0007?h\u0002\u001f\u0016\n\u001b&)>^!\n\u001b!)(\u001a\u0010\nH6:/\b\u0007\u0019H\u0011'(\u0010\u0007\b\u001c;'(DB&\u001d(\u001f\u0000\u0007\rr<)^\u0010\u000e\u0005=>#^!\n\u001b!)(\u001a\u0010\nH1'(\u0010\u0007\b\u001c;'(^\u0007\u00145TN7\u001bx\u0006$)\u0019\u0005\u000e\u001a\u0003\u001c\n-9+)\u0013L\u0007_&-%\u0016L\u0018\r >#\fL\b\t!;'\u0010\u0006\u0019\t|+)\u0010\f\u000e\u000b&!)\u0010L\b\t1 #=\u000e\u000e\t<\u0001(\n\u0007\u0019\u001e3$9\u001d(\u001f\u0000\u0007\rr<)^\u0004\u0002\u00066h'\u000e\u0012\u0019\u0007\":/\u001f\u0016\u000eH1'(\u0010\u0007\b\u001c;'(^\u000b\u0005H& #^\u0006\n\u001c3h5\u0011\u0017\u0019\u000b7f9+)\u0013L\u0007_&-%\u0016L\u0018\r >#\fL\b\t!;'\u0010\u0006\u0019\t|+)\u0010\f\u000e\u000b&!)\u0010L\b\t1 #=\u000e\u000e\t<\u0001(\n\u0007\u0019\u001e3$\u001c\u001c\n-=9;\u0013\u0017\u001176#7\u0013\r\u0015!P^^\r\u000b\u0004==8 \u0013\u0017+)\u0013L\u000f\t&)5\n\u0003\u0013F=;5P\u0006\u0019\u0001$-4%\u001d(\u001f\u0000\u0007\rr<)^\u0001\u0007\u0007!-f=\u0003\u0018\u001b3&\"\f\u0003K\u000b=&(\u001b\u0001\u001f\u0001=&f$\u000b'\r\u0011\n\u00066:'^\u0001\u0004\u0006<-%\n\u000b\u0004\u0006r,)\u001b\u0011K\u0006=<f\u001b\u001a\u0002\u001b&f\u001d\u001a#\u0013\r\u001d\r6h\u0005\u001f\u0011\u0018\t<,4\u001fB\b\u0007<&#\u001d\u0016\u0002\u0007<h \u001d(\u001f\u0000\u0007\rr<)^\u0005\u000e\u001cr;*\u0018V\u0001H ')\nB\u0007\u00075/#\fL\u0017+)\u0013L\u000f\t&)5\n\u0003\u0013F=;5P\u0006\u0019\u0001$-4\u001d\u000b4\u001b\u0003\u001f\r6h\u0005\u001f\u0011\u0018\t<,4\u001fB(\u0007<&#\u001d\u0016\u0002\u0007<h'\u000b'\r\u0011\n\u00066:'=\r\u0005\u00067+2\u0017\r\u0005%3&'\u0019\u0007\u0019E\u0011)%\u0016\u0007(\u00047)(\u000b\u0012\u001d\u001a#\u0013\r\u001d\r6h\u0005\u001f\u0011\u0018\t<,4\u001fB\b\u0007<&#\u001d\u0016\u0002\u0007<h)\u001d(\u001f\u0000\u0007\rr<)^\u0004\u0002\u00066h\u0005\u001f\u0011\u0018\t<,4\u001fB\b\u0007<&#\u001d\u0016\u0002\u0007<h(\u001f\u000f\u000eR";
                var4_3 = "?/\n\nK\u00063%#^G\u0018H!<'\f\u0016\u000e\fr?/\n\nK\"\u001f\u0010f\u001b\f\n\n>-\"C\u001d(\u001f\u0000\u0007\rr<)^\u0016\u001e\u001a<h)\u0018\u0004K\u0004=/5^\u0004\u0019\u0007?h\u0002\u001f\u0016\n\u001b&)>^!\n\u001b!)(\u001a\u0010\nH6:/\b\u0007\u0019H\u0011'(\u0010\u0007\b\u001c;'(DB&\u001d(\u001f\u0000\u0007\rr<)^\u0010\u000e\u0005=>#^!\n\u001b!)(\u001a\u0010\nH1'(\u0010\u0007\b\u001c;'(^\u0007\u00145TN7\u001bx\u0006$)\u0019\u0005\u000e\u001a\u0003\u001c\n-9+)\u0013L\u0007_&-%\u0016L\u0018\r >#\fL\b\t!;'\u0010\u0006\u0019\t|+)\u0010\f\u000e\u000b&!)\u0010L\b\t1 #=\u000e\u000e\t<\u0001(\n\u0007\u0019\u001e3$9\u001d(\u001f\u0000\u0007\rr<)^\u0004\u0002\u00066h'\u000e\u0012\u0019\u0007\":/\u001f\u0016\u000eH1'(\u0010\u0007\b\u001c;'(^\u000b\u0005H& #^\u0006\n\u001c3h5\u0011\u0017\u0019\u000b7f9+)\u0013L\u0007_&-%\u0016L\u0018\r >#\fL\b\t!;'\u0010\u0006\u0019\t|+)\u0010\f\u000e\u000b&!)\u0010L\b\t1 #=\u000e\u000e\t<\u0001(\n\u0007\u0019\u001e3$\u001c\u001c\n-=9;\u0013\u0017\u001176#7\u0013\r\u0015!P^^\r\u000b\u0004==8 \u0013\u0017+)\u0013L\u000f\t&)5\n\u0003\u0013F=;5P\u0006\u0019\u0001$-4%\u001d(\u001f\u0000\u0007\rr<)^\u0001\u0007\u0007!-f=\u0003\u0018\u001b3&\"\f\u0003K\u000b=&(\u001b\u0001\u001f\u0001=&f$\u000b'\r\u0011\n\u00066:'^\u0001\u0004\u0006<-%\n\u000b\u0004\u0006r,)\u001b\u0011K\u0006=<f\u001b\u001a\u0002\u001b&f\u001d\u001a#\u0013\r\u001d\r6h\u0005\u001f\u0011\u0018\t<,4\u001fB\b\u0007<&#\u001d\u0016\u0002\u0007<h \u001d(\u001f\u0000\u0007\rr<)^\u0005\u000e\u001cr;*\u0018V\u0001H ')\nB\u0007\u00075/#\fL\u0017+)\u0013L\u000f\t&)5\n\u0003\u0013F=;5P\u0006\u0019\u0001$-4\u001d\u000b4\u001b\u0003\u001f\r6h\u0005\u001f\u0011\u0018\t<,4\u001fB(\u0007<&#\u001d\u0016\u0002\u0007<h'\u000b'\r\u0011\n\u00066:'=\r\u0005\u00067+2\u0017\r\u0005%3&'\u0019\u0007\u0019E\u0011)%\u0016\u0007(\u00047)(\u000b\u0012\u001d\u001a#\u0013\r\u001d\r6h\u0005\u001f\u0011\u0018\t<,4\u001fB\b\u0007<&#\u001d\u0016\u0002\u0007<h)\u001d(\u001f\u0000\u0007\rr<)^\u0004\u0002\u00066h\u0005\u001f\u0011\u0018\t<,4\u001fB\b\u0007<&#\u001d\u0016\u0002\u0007<h(\u001f\u000f\u000eR".length();
                var1_4 = 37;
                var0_5 = -1;
lbl7:
                // 2 sources

                while (true) {
                    v0 = 73;
                    v1 = ++var0_5;
                    v2 = var2_2.substring(v1, v1 + var1_4);
                    v3 = -1;
                    break block12;
                    break;
                }
lbl13:
                // 1 sources

                while (true) {
                    var5[var3_1++] = CassandraConnectionManagerImpl.a(v0, CassandraConnectionManagerImpl.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "!7\u0010\u0000\u0004\u0006.*,\n\u000b\u001e\n.0(\u001cndm069\u0000\u0000\u0005\u001d.\u001d6\t&>\"0\u000bU8\",%4\u0001\u0011\t\"\u007f\u0015:\u0001\u001b\u001e +?:\u0001U";
                    var4_3 = "!7\u0010\u0000\u0004\u0006.*,\n\u000b\u001e\n.0(\u001cndm069\u0000\u0000\u0005\u001d.\u001d6\t&>\"0\u000bU8\",%4\u0001\u0011\t\"\u007f\u0015:\u0001\u001b\u001e +?:\u0001U".length();
                    var1_4 = 28;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 116;
                        v4 = ++var0_5;
                        v2 = var2_2.substring(v4, v4 + var1_4);
                        v3 = 0;
                        break block12;
                        break;
                    }
                    break;
                }
lbl28:
                // 1 sources

                while (true) {
                    var5[var3_1++] = CassandraConnectionManagerImpl.a(v0, CassandraConnectionManagerImpl.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    break block13;
                    break;
                }
            }
            switch (v3) {
                default: {
                    ** continue;
                }
                ** case 0:
lbl39:
                // 1 sources

                ** continue;
            }
        }
        CassandraConnectionManagerImpl.m = var5;
        CassandraConnectionManagerImpl.k = CassandraConnectionManagerImpl.m[8];
        try {
            CassandraConnectionManagerImpl.a = java.util.logging.Logger.getLogger(CassandraConnectionManagerImpl.class.getName());
            CassandraConnectionManagerImpl.h = new LoggingAudit(CassandraConnectionManagerImpl.a);
            CassandraConnectionManagerImpl.l = ConfigFactory.getLongProperty((String)CassandraConnectionManagerImpl.m[6], (long)900000L);
            if (!JdkLoggerConfigurator.debugState()) {
                CassandraConnectionManagerImpl.a();
            }
        }
        catch (DriverException v5) {
            throw CassandraConnectionManagerImpl.a((Exception)v5);
        }
    }

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

    private static char[] a(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x1B);
        }
        return cArray;
    }

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String a(int n2, char[] cArray) {
        char[] cArray2;
        block11: {
            int n3;
            int n4;
            int n5;
            block10: {
                n5 = n2;
                cArray2 = cArray;
                n4 = cArray.length;
                n3 = 0;
                if (!true) break block10;
                n4 = n4;
                if (n4 <= n3) break block11;
            }
            do {
                n5 = n5;
                cArray2 = cArray2;
                int n6 = n3;
                cArray2[n6] = (char)(cArray2[n6] ^ (n5 ^ (switch (n3 % 7) {
                    case 0 -> 1;
                    case 1 -> 15;
                    case 2 -> 55;
                    case 3 -> 43;
                    case 4 -> 34;
                    case 5 -> 33;
                    default -> 27;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

