public class io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder extends io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder
{
public static final int DEFAULT_COMPRESSION_LEVEL;
public static final int DEFAULT_WINDOW_BITS;
public static final int DEFAULT_MEM_LEVEL;
private int compressionLevel;
private int windowBits;
private int memLevel;
private final io.netty.handler.codec.http.Http2Connection$PropertyKey propertyKey;
private final boolean supportsCompressionOptions;
private io.netty.handler.codec.compression.BrotliOptions brotliOptions;
private io.netty.handler.codec.compression.GzipOptions gzipCompressionOptions;
private io.netty.handler.codec.compression.DeflateOptions deflateOptions;
private io.netty.handler.codec.compression.ZstdOptions zstdOptions;
private io.netty.handler.codec.compression.SnappyOptions snappyOptions;
public void <init>(io.netty.handler.codec.http.Http2ConnectionEncoder)
{
io.netty.handler.codec.http.Http2ConnectionEncoder v;
io.netty.handler.codec.compression.CompressionOptions[] v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.handler.codec.http.Http2ConnectionEncoder;
v = staticinvoke <io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.CompressionOptions[] defaultCompressionOptions()>();
specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void <init>(io.netty.handler.codec.http.Http2ConnectionEncoder,io.netty.handler.codec.compression.CompressionOptions[])>(v, v);
return;
}
private static io.netty.handler.codec.compression.CompressionOptions[] defaultCompressionOptions()
{
io.netty.handler.codec.compression.CompressionOptions[] v, v;
io.netty.handler.codec.compression.SnappyOptions v, v;
io.netty.handler.codec.compression.GzipOptions v, v;
io.netty.handler.codec.compression.BrotliOptions v;
io.netty.handler.codec.compression.DeflateOptions v, v;
boolean v;
v = staticinvoke <io.netty.handler.codec.compression.Brotli: boolean isAvailable()>();
if v == 0 goto label;
v = newarray (io.netty.handler.codec.compression.CompressionOptions)[4];
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.BrotliOptions brotli()>();
v[0] = v;
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.SnappyOptions snappy()>();
v[1] = v;
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.GzipOptions gzip()>();
v[2] = v;
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.DeflateOptions deflate()>();
v[3] = v;
return v;
label:
v = newarray (io.netty.handler.codec.compression.CompressionOptions)[3];
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.SnappyOptions snappy()>();
v[0] = v;
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.GzipOptions gzip()>();
v[1] = v;
v = staticinvoke <io.netty.handler.codec.compression.StandardCompressionOptions: io.netty.handler.codec.compression.DeflateOptions deflate()>();
v[2] = v;
return v;
}
public void <init>(io.netty.handler.codec.http.Http2ConnectionEncoder, int, int, int)
{
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.handler.codec.http.Http2ConnectionEncoder v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder$1 v;
io.netty.handler.codec.http.Http2Connection v, v;
io.netty.handler.codec.http.Http2Connection$PropertyKey v;
int v, v, v, v, v, v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.handler.codec.http.Http2ConnectionEncoder;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: void <init>(io.netty.handler.codec.http.Http2ConnectionEncoder)>(v);
v = staticinvoke <io.netty.util.internal.ObjectUtil: int checkInRange(int,int,int,java.lang.String)>(v, 0, 9, "compressionLevel");
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: int compressionLevel> = v;
v = staticinvoke <io.netty.util.internal.ObjectUtil: int checkInRange(int,int,int,java.lang.String)>(v, 9, 15, "windowBits");
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: int windowBits> = v;
v = staticinvoke <io.netty.util.internal.ObjectUtil: int checkInRange(int,int,int,java.lang.String)>(v, 1, 9, "memLevel");
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: int memLevel> = v;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection connection()>();
v = interfaceinvoke v.<io.netty.handler.codec.http.Http2Connection: io.netty.handler.codec.http.Http2Connection$PropertyKey newKey()>();
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection$PropertyKey propertyKey> = v;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection connection()>();
v = new io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder$1;
specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder$1: void <init>(io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder)>(v);
interfaceinvoke v.<io.netty.handler.codec.http.Http2Connection: void addListener(io.netty.handler.codec.http.Http2Connection$Listener)>(v);
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: boolean supportsCompressionOptions> = 0;
return;
}
public transient void <init>(io.netty.handler.codec.http.Http2ConnectionEncoder, io.netty.handler.codec.compression.CompressionOptions[])
{
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.handler.codec.http.Http2ConnectionEncoder v;
io.netty.handler.codec.compression.CompressionOptions v;
int v, v;
java.lang.String v, v;
boolean v, v, v, v, v, v;
io.netty.handler.codec.compression.CompressionOptions[] v;
java.lang.IllegalArgumentException v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder$2 v;
io.netty.handler.codec.http.Http2Connection v, v;
io.netty.handler.codec.http.Http2Connection$PropertyKey v;
java.lang.Class v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.handler.codec.http.Http2ConnectionEncoder;
v := @parameter: io.netty.handler.codec.compression.CompressionOptions[];
specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: void <init>(io.netty.handler.codec.http.Http2ConnectionEncoder)>(v);
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "CompressionOptions");
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object[] deepCheckNotNull(java.lang.String,java.lang.Object[])>("CompressionOptions", v);
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = staticinvoke <io.netty.handler.codec.compression.Brotli: boolean isAvailable()>();
if v == 0 goto label;
v = v instanceof io.netty.handler.codec.compression.BrotliOptions;
if v == 0 goto label;
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.BrotliOptions brotliOptions> = v;
goto label;
label:
v = v instanceof io.netty.handler.codec.compression.GzipOptions;
if v == 0 goto label;
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.GzipOptions gzipCompressionOptions> = v;
goto label;
label:
v = v instanceof io.netty.handler.codec.compression.DeflateOptions;
if v == 0 goto label;
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.DeflateOptions deflateOptions> = v;
goto label;
label:
v = v instanceof io.netty.handler.codec.compression.ZstdOptions;
if v == 0 goto label;
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.ZstdOptions zstdOptions> = v;
goto label;
label:
v = v instanceof io.netty.handler.codec.compression.SnappyOptions;
if v == 0 goto label;
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.SnappyOptions snappyOptions> = v;
goto label;
label:
v = new java.lang.IllegalArgumentException;
v = class "Lio/netty/handler/codec/compression/CompressionOptions;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getSimpleName()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,io.netty.handler.codec.compression.CompressionOptions)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Unsupported \u0001: \u0001");
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = v + 1;
goto label;
label:
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: boolean supportsCompressionOptions> = 1;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection connection()>();
v = interfaceinvoke v.<io.netty.handler.codec.http.Http2Connection: io.netty.handler.codec.http.Http2Connection$PropertyKey newKey()>();
v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection$PropertyKey propertyKey> = v;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection connection()>();
v = new io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder$2;
specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder$2: void <init>(io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder)>(v);
interfaceinvoke v.<io.netty.handler.codec.http.Http2Connection: void addListener(io.netty.handler.codec.http.Http2Connection$Listener)>(v);
return;
}
public io.netty.channel.ChannelFuture writeData(io.netty.channel.ChannelHandlerContext, int, io.netty.buffer.ByteBuf, int, boolean, io.netty.channel.ChannelPromise)
{
io.netty.util.concurrent.EventExecutor v;
java.lang.Throwable v, v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
java.lang.Object[] v;
io.netty.channel.ChannelHandlerContext v;
io.netty.buffer.ByteBuf v, v, v, v;
io.netty.channel.ChannelPromise v, v;
int v, v;
io.netty.handler.codec.http.Http2Stream v;
boolean v, v, v, v, v, v;
io.netty.util.concurrent.PromiseCombiner v;
io.netty.channel.ChannelFuture v, v;
io.netty.handler.codec.http.Http2Connection v;
io.netty.handler.codec.http.Http2Connection$PropertyKey v;
java.lang.Object v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.ChannelHandlerContext;
v := @parameter: int;
v := @parameter: io.netty.buffer.ByteBuf;
v := @parameter: int;
v := @parameter: boolean;
v := @parameter: io.netty.channel.ChannelPromise;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection connection()>();
v = interfaceinvoke v.<io.netty.handler.codec.http.Http2Connection: io.netty.handler.codec.http.Http2Stream stream(int)>(v);
if v == null goto label;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection$PropertyKey propertyKey>;
v = interfaceinvoke v.<io.netty.handler.codec.http.Http2Stream: java.lang.Object getProperty(io.netty.handler.codec.http.Http2Connection$PropertyKey)>(v);
label:
if v != null goto label;
v = specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: io.netty.channel.ChannelFuture writeData(io.netty.channel.ChannelHandlerContext,int,io.netty.buffer.ByteBuf,int,boolean,io.netty.channel.ChannelPromise)>(v, v, v, v, v, v);
return v;
label:
v = newarray (java.lang.Object)[1];
v[0] = v;
virtualinvoke v.<io.netty.channel.embedded.EmbeddedChannel: boolean writeOutbound(java.lang.Object[])>(v);
v = staticinvoke <io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.buffer.ByteBuf nextReadableBuf(io.netty.channel.embedded.EmbeddedChannel)>(v);
if v != null goto label;
if v == 0 goto label;
v = virtualinvoke v.<io.netty.channel.embedded.EmbeddedChannel: boolean finish()>();
if v == 0 goto label;
v = staticinvoke <io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.buffer.ByteBuf nextReadableBuf(io.netty.channel.embedded.EmbeddedChannel)>(v);
label:
if v != null goto label;
v = <io.netty.buffer.Unpooled: io.netty.buffer.ByteBuf EMPTY_BUFFER>;
goto label;
label:
v = v;
label:
v = specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: io.netty.channel.ChannelFuture writeData(io.netty.channel.ChannelHandlerContext,int,io.netty.buffer.ByteBuf,int,boolean,io.netty.channel.ChannelPromise)>(v, v, v, v, 1, v);
label:
if v == 0 goto label;
virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void cleanup(io.netty.handler.codec.http.Http2Stream,io.netty.channel.embedded.EmbeddedChannel)>(v, v);
label:
return v;
label:
interfaceinvoke v.<io.netty.channel.ChannelPromise: io.netty.channel.ChannelPromise setSuccess()>();
label:
if v == 0 goto label;
virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void cleanup(io.netty.handler.codec.http.Http2Stream,io.netty.channel.embedded.EmbeddedChannel)>(v, v);
label:
return v;
label:
v = new io.netty.util.concurrent.PromiseCombiner;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.util.concurrent.EventExecutor executor()>();
specialinvoke v.<io.netty.util.concurrent.PromiseCombiner: void <init>(io.netty.util.concurrent.EventExecutor)>(v);
label:
v = staticinvoke <io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.buffer.ByteBuf nextReadableBuf(io.netty.channel.embedded.EmbeddedChannel)>(v);
if v != null goto label;
if v == 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
if v == 0 goto label;
v = virtualinvoke v.<io.netty.channel.embedded.EmbeddedChannel: boolean finish()>();
if v == 0 goto label;
v = staticinvoke <io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.buffer.ByteBuf nextReadableBuf(io.netty.channel.embedded.EmbeddedChannel)>(v);
if v != null goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
label:
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.ChannelPromise newPromise()>();
virtualinvoke v.<io.netty.util.concurrent.PromiseCombiner: void add(io.netty.util.concurrent.Promise)>(v);
specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: io.netty.channel.ChannelFuture writeData(io.netty.channel.ChannelHandlerContext,int,io.netty.buffer.ByteBuf,int,boolean,io.netty.channel.ChannelPromise)>(v, v, v, v, v, v);
if v == null goto label;
v = 0;
v = v;
goto label;
label:
virtualinvoke v.<io.netty.util.concurrent.PromiseCombiner: void finish(io.netty.util.concurrent.Promise)>(v);
label:
if v == 0 goto label;
virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void cleanup(io.netty.handler.codec.http.Http2Stream,io.netty.channel.embedded.EmbeddedChannel)>(v, v);
goto label;
label:
v := @caughtexception;
interfaceinvoke v.<io.netty.channel.ChannelPromise: boolean tryFailure(java.lang.Throwable)>(v);
label:
if v == 0 goto label;
virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void cleanup(io.netty.handler.codec.http.Http2Stream,io.netty.channel.embedded.EmbeddedChannel)>(v, v);
goto label;
label:
v := @caughtexception;
if v == 0 goto label;
virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void cleanup(io.netty.handler.codec.http.Http2Stream,io.netty.channel.embedded.EmbeddedChannel)>(v, v);
label:
throw v;
label:
return v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
public io.netty.channel.ChannelFuture writeHeaders(io.netty.channel.ChannelHandlerContext, int, io.netty.handler.codec.http.Http2Headers, int, boolean, io.netty.channel.ChannelPromise)
{
java.lang.Throwable v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.channel.embedded.EmbeddedChannel v;
io.netty.channel.ChannelFuture v;
io.netty.channel.ChannelHandlerContext v;
io.netty.channel.ChannelPromise v;
io.netty.handler.codec.http.Http2Headers v;
int v, v;
boolean v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.ChannelHandlerContext;
v := @parameter: int;
v := @parameter: io.netty.handler.codec.http.Http2Headers;
v := @parameter: int;
v := @parameter: boolean;
v := @parameter: io.netty.channel.ChannelPromise;
label:
v = specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.channel.embedded.EmbeddedChannel newCompressor(io.netty.channel.ChannelHandlerContext,io.netty.handler.codec.http.Http2Headers,boolean)>(v, v, v);
v = specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: io.netty.channel.ChannelFuture writeHeaders(io.netty.channel.ChannelHandlerContext,int,io.netty.handler.codec.http.Http2Headers,int,boolean,io.netty.channel.ChannelPromise)>(v, v, v, v, v, v);
specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void bindCompressorToStream(io.netty.channel.embedded.EmbeddedChannel,int)>(v, v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<io.netty.channel.ChannelPromise: boolean tryFailure(java.lang.Throwable)>(v);
return v;
catch java.lang.Throwable from label to label with label;
}
public io.netty.channel.ChannelFuture writeHeaders(io.netty.channel.ChannelHandlerContext, int, io.netty.handler.codec.http.Http2Headers, int, short, boolean, int, boolean, io.netty.channel.ChannelPromise)
{
java.lang.Throwable v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.channel.embedded.EmbeddedChannel v;
io.netty.channel.ChannelFuture v;
io.netty.channel.ChannelHandlerContext v;
short v;
io.netty.channel.ChannelPromise v;
io.netty.handler.codec.http.Http2Headers v;
int v, v, v;
boolean v, v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.ChannelHandlerContext;
v := @parameter: int;
v := @parameter: io.netty.handler.codec.http.Http2Headers;
v := @parameter: int;
v := @parameter: short;
v := @parameter: boolean;
v := @parameter: int;
v := @parameter: boolean;
v := @parameter: io.netty.channel.ChannelPromise;
label:
v = specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.channel.embedded.EmbeddedChannel newCompressor(io.netty.channel.ChannelHandlerContext,io.netty.handler.codec.http.Http2Headers,boolean)>(v, v, v);
v = specialinvoke v.<io.netty.handler.codec.http.DecoratingHttp2ConnectionEncoder: io.netty.channel.ChannelFuture writeHeaders(io.netty.channel.ChannelHandlerContext,int,io.netty.handler.codec.http.Http2Headers,int,short,boolean,int,boolean,io.netty.channel.ChannelPromise)>(v, v, v, v, v, v, v, v, v);
specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: void bindCompressorToStream(io.netty.channel.embedded.EmbeddedChannel,int)>(v, v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<io.netty.channel.ChannelPromise: boolean tryFailure(java.lang.Throwable)>(v);
return v;
catch java.lang.Throwable from label to label with label;
}
protected io.netty.channel.embedded.EmbeddedChannel newContentCompressor(io.netty.channel.ChannelHandlerContext, java.lang.CharSequence) throws io.netty.handler.codec.http.Http2Exception
{
io.netty.channel.ChannelId v, v, v;
io.netty.util.AsciiString v, v, v, v, v, v, v;
boolean v, v, v, v, v, v, v, v, v, v, v;
io.netty.handler.codec.compression.ZstdOptions v, v, v, v;
java.lang.CharSequence v;
io.netty.handler.codec.compression.SnappyOptions v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.channel.ChannelHandlerContext v;
int v, v, v;
io.netty.handler.codec.compression.BrotliOptions v, v;
io.netty.channel.ChannelMetadata v, v, v;
com.aayushatharva.brotli4j.encoder.Encoder$Parameters v;
io.netty.handler.codec.compression.BrotliEncoder v;
io.netty.channel.embedded.EmbeddedChannel v, v, v, v, v;
io.netty.handler.codec.compression.SnappyFrameEncoder v;
io.netty.handler.codec.compression.ZlibWrapper v, v;
io.netty.channel.ChannelHandler[] v, v, v;
io.netty.channel.Channel v, v, v, v, v, v, v, v, v;
io.netty.handler.codec.compression.ZstdEncoder v;
io.netty.channel.ChannelConfig v, v, v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.ChannelHandlerContext;
v := @parameter: java.lang.CharSequence;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString GZIP>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v != 0 goto label;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString X_GZIP>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v == 0 goto label;
label:
v = <io.netty.handler.codec.compression.ZlibWrapper: io.netty.handler.codec.compression.ZlibWrapper GZIP>;
v = specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.channel.embedded.EmbeddedChannel newCompressionChannel(io.netty.channel.ChannelHandlerContext,io.netty.handler.codec.compression.ZlibWrapper)>(v, v);
return v;
label:
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString DEFLATE>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v != 0 goto label;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString X_DEFLATE>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v == 0 goto label;
label:
v = <io.netty.handler.codec.compression.ZlibWrapper: io.netty.handler.codec.compression.ZlibWrapper ZLIB>;
v = specialinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.channel.embedded.EmbeddedChannel newCompressionChannel(io.netty.channel.ChannelHandlerContext,io.netty.handler.codec.compression.ZlibWrapper)>(v, v);
return v;
label:
v = staticinvoke <io.netty.handler.codec.compression.Brotli: boolean isAvailable()>();
if v == 0 goto label;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.BrotliOptions brotliOptions>;
if v == null goto label;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString BR>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v == 0 goto label;
v = new io.netty.channel.embedded.EmbeddedChannel;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelId id()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelMetadata metadata()>();
v = virtualinvoke v.<io.netty.channel.ChannelMetadata: boolean hasDisconnect()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelConfig config()>();
v = newarray (io.netty.channel.ChannelHandler)[1];
v = new io.netty.handler.codec.compression.BrotliEncoder;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.BrotliOptions brotliOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.BrotliOptions: com.aayushatharva.brotli4j.encoder.Encoder$Parameters parameters()>();
specialinvoke v.<io.netty.handler.codec.compression.BrotliEncoder: void <init>(com.aayushatharva.brotli4j.encoder.Encoder$Parameters)>(v);
v[0] = v;
specialinvoke v.<io.netty.channel.embedded.EmbeddedChannel: void <init>(io.netty.channel.ChannelId,boolean,io.netty.channel.ChannelConfig,io.netty.channel.ChannelHandler[])>(v, v, v, v);
return v;
label:
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.ZstdOptions zstdOptions>;
if v == null goto label;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString ZSTD>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v == 0 goto label;
v = new io.netty.channel.embedded.EmbeddedChannel;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelId id()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelMetadata metadata()>();
v = virtualinvoke v.<io.netty.channel.ChannelMetadata: boolean hasDisconnect()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelConfig config()>();
v = newarray (io.netty.channel.ChannelHandler)[1];
v = new io.netty.handler.codec.compression.ZstdEncoder;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.ZstdOptions zstdOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.ZstdOptions: int compressionLevel()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.ZstdOptions zstdOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.ZstdOptions: int blockSize()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.ZstdOptions zstdOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.ZstdOptions: int maxEncodeSize()>();
specialinvoke v.<io.netty.handler.codec.compression.ZstdEncoder: void <init>(int,int,int)>(v, v, v);
v[0] = v;
specialinvoke v.<io.netty.channel.embedded.EmbeddedChannel: void <init>(io.netty.channel.ChannelId,boolean,io.netty.channel.ChannelConfig,io.netty.channel.ChannelHandler[])>(v, v, v, v);
return v;
label:
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.SnappyOptions snappyOptions>;
if v == null goto label;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString SNAPPY>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v == 0 goto label;
v = new io.netty.channel.embedded.EmbeddedChannel;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelId id()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelMetadata metadata()>();
v = virtualinvoke v.<io.netty.channel.ChannelMetadata: boolean hasDisconnect()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelConfig config()>();
v = newarray (io.netty.channel.ChannelHandler)[1];
v = new io.netty.handler.codec.compression.SnappyFrameEncoder;
specialinvoke v.<io.netty.handler.codec.compression.SnappyFrameEncoder: void <init>()>();
v[0] = v;
specialinvoke v.<io.netty.channel.embedded.EmbeddedChannel: void <init>(io.netty.channel.ChannelId,boolean,io.netty.channel.ChannelConfig,io.netty.channel.ChannelHandler[])>(v, v, v, v);
return v;
label:
return null;
}
protected java.lang.CharSequence getTargetContentEncoding(java.lang.CharSequence) throws io.netty.handler.codec.http.Http2Exception
{
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
java.lang.CharSequence v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: java.lang.CharSequence;
return v;
}
private io.netty.channel.embedded.EmbeddedChannel newCompressionChannel(io.netty.channel.ChannelHandlerContext, io.netty.handler.codec.compression.ZlibWrapper)
{
io.netty.channel.ChannelId v, v, v;
io.netty.handler.codec.compression.ZlibEncoder v, v, v;
io.netty.handler.codec.compression.DeflateOptions v, v, v, v;
boolean v, v, v, v;
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.channel.ChannelHandlerContext v;
int v, v, v, v, v, v, v, v, v;
io.netty.channel.ChannelMetadata v, v, v;
java.lang.String v;
io.netty.channel.embedded.EmbeddedChannel v, v, v;
io.netty.handler.codec.compression.ZlibWrapper v, v, v;
java.lang.IllegalArgumentException v;
io.netty.channel.ChannelHandler[] v, v, v;
io.netty.handler.codec.compression.GzipOptions v, v, v, v;
io.netty.channel.Channel v, v, v, v, v, v, v, v, v;
io.netty.channel.ChannelConfig v, v, v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.ChannelHandlerContext;
v := @parameter: io.netty.handler.codec.compression.ZlibWrapper;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: boolean supportsCompressionOptions>;
if v == 0 goto label;
v = <io.netty.handler.codec.compression.ZlibWrapper: io.netty.handler.codec.compression.ZlibWrapper GZIP>;
if v != v goto label;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.GzipOptions gzipCompressionOptions>;
if v == null goto label;
v = new io.netty.channel.embedded.EmbeddedChannel;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelId id()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelMetadata metadata()>();
v = virtualinvoke v.<io.netty.channel.ChannelMetadata: boolean hasDisconnect()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelConfig config()>();
v = newarray (io.netty.channel.ChannelHandler)[1];
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.GzipOptions gzipCompressionOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.GzipOptions: int compressionLevel()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.GzipOptions gzipCompressionOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.GzipOptions: int windowBits()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.GzipOptions gzipCompressionOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.GzipOptions: int memLevel()>();
v = staticinvoke <io.netty.handler.codec.compression.ZlibCodecFactory: io.netty.handler.codec.compression.ZlibEncoder newZlibEncoder(io.netty.handler.codec.compression.ZlibWrapper,int,int,int)>(v, v, v, v);
v[0] = v;
specialinvoke v.<io.netty.channel.embedded.EmbeddedChannel: void <init>(io.netty.channel.ChannelId,boolean,io.netty.channel.ChannelConfig,io.netty.channel.ChannelHandler[])>(v, v, v, v);
return v;
label:
v = <io.netty.handler.codec.compression.ZlibWrapper: io.netty.handler.codec.compression.ZlibWrapper ZLIB>;
if v != v goto label;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.DeflateOptions deflateOptions>;
if v == null goto label;
v = new io.netty.channel.embedded.EmbeddedChannel;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelId id()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelMetadata metadata()>();
v = virtualinvoke v.<io.netty.channel.ChannelMetadata: boolean hasDisconnect()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelConfig config()>();
v = newarray (io.netty.channel.ChannelHandler)[1];
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.DeflateOptions deflateOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.DeflateOptions: int compressionLevel()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.DeflateOptions deflateOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.DeflateOptions: int windowBits()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.compression.DeflateOptions deflateOptions>;
v = virtualinvoke v.<io.netty.handler.codec.compression.DeflateOptions: int memLevel()>();
v = staticinvoke <io.netty.handler.codec.compression.ZlibCodecFactory: io.netty.handler.codec.compression.ZlibEncoder newZlibEncoder(io.netty.handler.codec.compression.ZlibWrapper,int,int,int)>(v, v, v, v);
v[0] = v;
specialinvoke v.<io.netty.channel.embedded.EmbeddedChannel: void <init>(io.netty.channel.ChannelId,boolean,io.netty.channel.ChannelConfig,io.netty.channel.ChannelHandler[])>(v, v, v, v);
return v;
label:
v = new java.lang.IllegalArgumentException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (io.netty.handler.codec.compression.ZlibWrapper)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Unsupported ZlibWrapper: \u0001");
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = new io.netty.channel.embedded.EmbeddedChannel;
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelId id()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelMetadata metadata()>();
v = virtualinvoke v.<io.netty.channel.ChannelMetadata: boolean hasDisconnect()>();
v = interfaceinvoke v.<io.netty.channel.ChannelHandlerContext: io.netty.channel.Channel channel()>();
v = interfaceinvoke v.<io.netty.channel.Channel: io.netty.channel.ChannelConfig config()>();
v = newarray (io.netty.channel.ChannelHandler)[1];
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: int compressionLevel>;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: int windowBits>;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: int memLevel>;
v = staticinvoke <io.netty.handler.codec.compression.ZlibCodecFactory: io.netty.handler.codec.compression.ZlibEncoder newZlibEncoder(io.netty.handler.codec.compression.ZlibWrapper,int,int,int)>(v, v, v, v);
v[0] = v;
specialinvoke v.<io.netty.channel.embedded.EmbeddedChannel: void <init>(io.netty.channel.ChannelId,boolean,io.netty.channel.ChannelConfig,io.netty.channel.ChannelHandler[])>(v, v, v, v);
return v;
}
private io.netty.channel.embedded.EmbeddedChannel newCompressor(io.netty.channel.ChannelHandlerContext, io.netty.handler.codec.http.Http2Headers, boolean) throws io.netty.handler.codec.http.Http2Exception
{
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
java.lang.CharSequence v;
io.netty.channel.embedded.EmbeddedChannel v;
io.netty.util.AsciiString v, v, v, v, v;
io.netty.channel.ChannelHandlerContext v;
io.netty.handler.codec.http.Http2Headers v;
java.lang.Object v;
boolean v, v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.ChannelHandlerContext;
v := @parameter: io.netty.handler.codec.http.Http2Headers;
v := @parameter: boolean;
if v == 0 goto label;
return null;
label:
v = <io.netty.handler.codec.http.HttpHeaderNames: io.netty.util.AsciiString CONTENT_ENCODING>;
v = interfaceinvoke v.<io.netty.handler.codec.http.Http2Headers: java.lang.Object get(java.lang.Object)>(v);
if v != null goto label;
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString IDENTITY>;
label:
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.channel.embedded.EmbeddedChannel newContentCompressor(io.netty.channel.ChannelHandlerContext,java.lang.CharSequence)>(v, v);
if v == null goto label;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: java.lang.CharSequence getTargetContentEncoding(java.lang.CharSequence)>(v);
v = <io.netty.handler.codec.http.HttpHeaderValues: io.netty.util.AsciiString IDENTITY>;
v = virtualinvoke v.<io.netty.util.AsciiString: boolean contentEqualsIgnoreCase(java.lang.CharSequence)>(v);
if v == 0 goto label;
v = <io.netty.handler.codec.http.HttpHeaderNames: io.netty.util.AsciiString CONTENT_ENCODING>;
interfaceinvoke v.<io.netty.handler.codec.http.Http2Headers: boolean remove(java.lang.Object)>(v);
goto label;
label:
v = <io.netty.handler.codec.http.HttpHeaderNames: io.netty.util.AsciiString CONTENT_ENCODING>;
interfaceinvoke v.<io.netty.handler.codec.http.Http2Headers: io.netty.handler.codec.Headers set(java.lang.Object,java.lang.Object)>(v, v);
label:
v = <io.netty.handler.codec.http.HttpHeaderNames: io.netty.util.AsciiString CONTENT_LENGTH>;
interfaceinvoke v.<io.netty.handler.codec.http.Http2Headers: boolean remove(java.lang.Object)>(v);
label:
return v;
}
private void bindCompressorToStream(io.netty.channel.embedded.EmbeddedChannel, int)
{
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.handler.codec.http.Http2Connection v;
io.netty.handler.codec.http.Http2Connection$PropertyKey v;
io.netty.channel.embedded.EmbeddedChannel v;
int v;
io.netty.handler.codec.http.Http2Stream v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.channel.embedded.EmbeddedChannel;
v := @parameter: int;
if v == null goto label;
v = virtualinvoke v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection connection()>();
v = interfaceinvoke v.<io.netty.handler.codec.http.Http2Connection: io.netty.handler.codec.http.Http2Stream stream(int)>(v);
if v == null goto label;
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection$PropertyKey propertyKey>;
interfaceinvoke v.<io.netty.handler.codec.http.Http2Stream: java.lang.Object setProperty(io.netty.handler.codec.http.Http2Connection$PropertyKey,java.lang.Object)>(v, v);
label:
return;
}
void cleanup(io.netty.handler.codec.http.Http2Stream, io.netty.channel.embedded.EmbeddedChannel)
{
io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder v;
io.netty.handler.codec.http.Http2Connection$PropertyKey v;
io.netty.channel.embedded.EmbeddedChannel v;
io.netty.handler.codec.http.Http2Stream v;
v := @this: io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder;
v := @parameter: io.netty.handler.codec.http.Http2Stream;
v := @parameter: io.netty.channel.embedded.EmbeddedChannel;
virtualinvoke v.<io.netty.channel.embedded.EmbeddedChannel: boolean finishAndReleaseAll()>();
v = v.<io.netty.handler.codec.http.CompressorHttp2ConnectionEncoder: io.netty.handler.codec.http.Http2Connection$PropertyKey propertyKey>;
interfaceinvoke v.<io.netty.handler.codec.http.Http2Stream: java.lang.Object removeProperty(io.netty.handler.codec.http.Http2Connection$PropertyKey)>(v);
return;
}
private static io.netty.buffer.ByteBuf nextReadableBuf(io.netty.channel.embedded.EmbeddedChannel)
{
java.lang.Object v;
boolean v;
io.netty.channel.embedded.EmbeddedChannel v;
v := @parameter: io.netty.channel.embedded.EmbeddedChannel;
label:
v = virtualinvoke v.<io.netty.channel.embedded.EmbeddedChannel: java.lang.Object readOutbound()>();
if v != null goto label;
return null;
label:
v = virtualinvoke v.<io.netty.buffer.ByteBuf: boolean isReadable()>();
if v != 0 goto label;
virtualinvoke v.<io.netty.buffer.ByteBuf: boolean release()>();
goto label;
label:
return v;
}
}