xz-compat 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +42 -0
- package/README.md +248 -0
- package/dist/cjs/compat.d.cts +1 -0
- package/dist/cjs/compat.d.ts +1 -0
- package/dist/cjs/compat.js +23 -0
- package/dist/cjs/compat.js.map +1 -0
- package/dist/cjs/filters/bcj/Bcj.d.cts +16 -0
- package/dist/cjs/filters/bcj/Bcj.d.ts +16 -0
- package/dist/cjs/filters/bcj/Bcj.js +192 -0
- package/dist/cjs/filters/bcj/Bcj.js.map +1 -0
- package/dist/cjs/filters/bcj/BcjArm.d.cts +16 -0
- package/dist/cjs/filters/bcj/BcjArm.d.ts +16 -0
- package/dist/cjs/filters/bcj/BcjArm.js +122 -0
- package/dist/cjs/filters/bcj/BcjArm.js.map +1 -0
- package/dist/cjs/filters/bcj/BcjArm64.d.cts +21 -0
- package/dist/cjs/filters/bcj/BcjArm64.d.ts +21 -0
- package/dist/cjs/filters/bcj/BcjArm64.js +65 -0
- package/dist/cjs/filters/bcj/BcjArm64.js.map +1 -0
- package/dist/cjs/filters/bcj/BcjArmt.d.cts +19 -0
- package/dist/cjs/filters/bcj/BcjArmt.d.ts +19 -0
- package/dist/cjs/filters/bcj/BcjArmt.js +76 -0
- package/dist/cjs/filters/bcj/BcjArmt.js.map +1 -0
- package/dist/cjs/filters/bcj/BcjIa64.d.cts +15 -0
- package/dist/cjs/filters/bcj/BcjIa64.d.ts +15 -0
- package/dist/cjs/filters/bcj/BcjIa64.js +141 -0
- package/dist/cjs/filters/bcj/BcjIa64.js.map +1 -0
- package/dist/cjs/filters/bcj/BcjPpc.d.cts +20 -0
- package/dist/cjs/filters/bcj/BcjPpc.d.ts +20 -0
- package/dist/cjs/filters/bcj/BcjPpc.js +64 -0
- package/dist/cjs/filters/bcj/BcjPpc.js.map +1 -0
- package/dist/cjs/filters/bcj/BcjSparc.d.cts +19 -0
- package/dist/cjs/filters/bcj/BcjSparc.d.ts +19 -0
- package/dist/cjs/filters/bcj/BcjSparc.js +69 -0
- package/dist/cjs/filters/bcj/BcjSparc.js.map +1 -0
- package/dist/cjs/filters/delta/Delta.d.cts +16 -0
- package/dist/cjs/filters/delta/Delta.d.ts +16 -0
- package/dist/cjs/filters/delta/Delta.js +74 -0
- package/dist/cjs/filters/delta/Delta.js.map +1 -0
- package/dist/cjs/filters/index.d.cts +8 -0
- package/dist/cjs/filters/index.d.ts +8 -0
- package/dist/cjs/filters/index.js +27 -0
- package/dist/cjs/filters/index.js.map +1 -0
- package/dist/cjs/index.d.cts +4 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +58 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.d.cts +73 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.d.ts +73 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.js +148 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.js.map +1 -0
- package/dist/cjs/lzma/index.d.cts +31 -0
- package/dist/cjs/lzma/index.d.ts +31 -0
- package/dist/cjs/lzma/index.js +83 -0
- package/dist/cjs/lzma/index.js.map +1 -0
- package/dist/cjs/lzma/stream/transforms.d.cts +46 -0
- package/dist/cjs/lzma/stream/transforms.d.ts +46 -0
- package/dist/cjs/lzma/stream/transforms.js +193 -0
- package/dist/cjs/lzma/stream/transforms.js.map +1 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.cts +63 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.ts +63 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.js +231 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +1 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.d.cts +97 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.d.ts +97 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.js +582 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.js.map +1 -0
- package/dist/cjs/lzma/sync/RangeDecoder.d.cts +69 -0
- package/dist/cjs/lzma/sync/RangeDecoder.d.ts +69 -0
- package/dist/cjs/lzma/sync/RangeDecoder.js +162 -0
- package/dist/cjs/lzma/sync/RangeDecoder.js.map +1 -0
- package/dist/cjs/lzma/types.d.cts +117 -0
- package/dist/cjs/lzma/types.d.ts +117 -0
- package/dist/cjs/lzma/types.js +264 -0
- package/dist/cjs/lzma/types.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/utils/createBufferingDecoder.d.cts +10 -0
- package/dist/cjs/utils/createBufferingDecoder.d.ts +10 -0
- package/dist/cjs/utils/createBufferingDecoder.js +41 -0
- package/dist/cjs/utils/createBufferingDecoder.js.map +1 -0
- package/dist/cjs/xz/Decoder.d.cts +21 -0
- package/dist/cjs/xz/Decoder.d.ts +21 -0
- package/dist/cjs/xz/Decoder.js +325 -0
- package/dist/cjs/xz/Decoder.js.map +1 -0
- package/dist/esm/compat.d.ts +1 -0
- package/dist/esm/compat.js +7 -0
- package/dist/esm/compat.js.map +1 -0
- package/dist/esm/filters/bcj/Bcj.d.ts +16 -0
- package/dist/esm/filters/bcj/Bcj.js +184 -0
- package/dist/esm/filters/bcj/Bcj.js.map +1 -0
- package/dist/esm/filters/bcj/BcjArm.d.ts +16 -0
- package/dist/esm/filters/bcj/BcjArm.js +114 -0
- package/dist/esm/filters/bcj/BcjArm.js.map +1 -0
- package/dist/esm/filters/bcj/BcjArm64.d.ts +21 -0
- package/dist/esm/filters/bcj/BcjArm64.js +57 -0
- package/dist/esm/filters/bcj/BcjArm64.js.map +1 -0
- package/dist/esm/filters/bcj/BcjArmt.d.ts +19 -0
- package/dist/esm/filters/bcj/BcjArmt.js +66 -0
- package/dist/esm/filters/bcj/BcjArmt.js.map +1 -0
- package/dist/esm/filters/bcj/BcjIa64.d.ts +15 -0
- package/dist/esm/filters/bcj/BcjIa64.js +127 -0
- package/dist/esm/filters/bcj/BcjIa64.js.map +1 -0
- package/dist/esm/filters/bcj/BcjPpc.d.ts +20 -0
- package/dist/esm/filters/bcj/BcjPpc.js +55 -0
- package/dist/esm/filters/bcj/BcjPpc.js.map +1 -0
- package/dist/esm/filters/bcj/BcjSparc.d.ts +19 -0
- package/dist/esm/filters/bcj/BcjSparc.js +59 -0
- package/dist/esm/filters/bcj/BcjSparc.js.map +1 -0
- package/dist/esm/filters/delta/Delta.d.ts +16 -0
- package/dist/esm/filters/delta/Delta.js +66 -0
- package/dist/esm/filters/delta/Delta.js.map +1 -0
- package/dist/esm/filters/index.d.ts +8 -0
- package/dist/esm/filters/index.js +9 -0
- package/dist/esm/filters/index.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lzma/Lzma2ChunkParser.d.ts +73 -0
- package/dist/esm/lzma/Lzma2ChunkParser.js +137 -0
- package/dist/esm/lzma/Lzma2ChunkParser.js.map +1 -0
- package/dist/esm/lzma/index.d.ts +31 -0
- package/dist/esm/lzma/index.js +44 -0
- package/dist/esm/lzma/index.js.map +1 -0
- package/dist/esm/lzma/stream/transforms.d.ts +46 -0
- package/dist/esm/lzma/stream/transforms.js +190 -0
- package/dist/esm/lzma/stream/transforms.js.map +1 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.d.ts +63 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.js +211 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.js.map +1 -0
- package/dist/esm/lzma/sync/LzmaDecoder.d.ts +97 -0
- package/dist/esm/lzma/sync/LzmaDecoder.js +545 -0
- package/dist/esm/lzma/sync/LzmaDecoder.js.map +1 -0
- package/dist/esm/lzma/sync/RangeDecoder.d.ts +69 -0
- package/dist/esm/lzma/sync/RangeDecoder.js +132 -0
- package/dist/esm/lzma/sync/RangeDecoder.js.map +1 -0
- package/dist/esm/lzma/types.d.ts +117 -0
- package/dist/esm/lzma/types.js +154 -0
- package/dist/esm/lzma/types.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/utils/createBufferingDecoder.d.ts +10 -0
- package/dist/esm/utils/createBufferingDecoder.js +30 -0
- package/dist/esm/utils/createBufferingDecoder.js.map +1 -0
- package/dist/esm/xz/Decoder.d.ts +21 -0
- package/dist/esm/xz/Decoder.js +313 -0
- package/dist/esm/xz/Decoder.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronous LZMA1 Decoder
|
|
3
|
+
*
|
|
4
|
+
* Decodes LZMA1 compressed data from a buffer.
|
|
5
|
+
* All operations are synchronous.
|
|
6
|
+
*/ "use strict";
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
function _export(target, all) {
|
|
11
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
_export(exports, {
|
|
17
|
+
get LzmaDecoder () {
|
|
18
|
+
return LzmaDecoder;
|
|
19
|
+
},
|
|
20
|
+
get decodeLzma () {
|
|
21
|
+
return decodeLzma;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
var _extractbaseiterator = require("extract-base-iterator");
|
|
25
|
+
var _typests = require("../types.js");
|
|
26
|
+
var _RangeDecoderts = require("./RangeDecoder.js");
|
|
27
|
+
function _class_call_check(instance, Constructor) {
|
|
28
|
+
if (!(instance instanceof Constructor)) {
|
|
29
|
+
throw new TypeError("Cannot call a class as a function");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Length decoder for match/rep lengths
|
|
34
|
+
*/ var LenDecoder = /*#__PURE__*/ function() {
|
|
35
|
+
"use strict";
|
|
36
|
+
function LenDecoder() {
|
|
37
|
+
_class_call_check(this, LenDecoder);
|
|
38
|
+
this.choice = (0, _typests.initBitModels)(null, 2);
|
|
39
|
+
this.lowCoder = [];
|
|
40
|
+
this.midCoder = [];
|
|
41
|
+
this.highCoder = new _RangeDecoderts.BitTreeDecoder(8);
|
|
42
|
+
this.numPosStates = 0;
|
|
43
|
+
}
|
|
44
|
+
var _proto = LenDecoder.prototype;
|
|
45
|
+
_proto.create = function create(numPosStates) {
|
|
46
|
+
for(; this.numPosStates < numPosStates; this.numPosStates++){
|
|
47
|
+
this.lowCoder[this.numPosStates] = new _RangeDecoderts.BitTreeDecoder(3);
|
|
48
|
+
this.midCoder[this.numPosStates] = new _RangeDecoderts.BitTreeDecoder(3);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
_proto.init = function init() {
|
|
52
|
+
(0, _typests.initBitModels)(this.choice);
|
|
53
|
+
for(var i = this.numPosStates - 1; i >= 0; i--){
|
|
54
|
+
this.lowCoder[i].init();
|
|
55
|
+
this.midCoder[i].init();
|
|
56
|
+
}
|
|
57
|
+
this.highCoder.init();
|
|
58
|
+
};
|
|
59
|
+
_proto.decode = function decode(rangeDecoder, posState) {
|
|
60
|
+
if (rangeDecoder.decodeBit(this.choice, 0) === 0) {
|
|
61
|
+
return this.lowCoder[posState].decode(rangeDecoder);
|
|
62
|
+
}
|
|
63
|
+
if (rangeDecoder.decodeBit(this.choice, 1) === 0) {
|
|
64
|
+
return 8 + this.midCoder[posState].decode(rangeDecoder);
|
|
65
|
+
}
|
|
66
|
+
return 16 + this.highCoder.decode(rangeDecoder);
|
|
67
|
+
};
|
|
68
|
+
return LenDecoder;
|
|
69
|
+
}();
|
|
70
|
+
/**
|
|
71
|
+
* Single literal decoder (decodes one byte)
|
|
72
|
+
*/ var LiteralDecoder2 = /*#__PURE__*/ function() {
|
|
73
|
+
"use strict";
|
|
74
|
+
function LiteralDecoder2() {
|
|
75
|
+
_class_call_check(this, LiteralDecoder2);
|
|
76
|
+
this.decoders = (0, _typests.initBitModels)(null, 0x300);
|
|
77
|
+
}
|
|
78
|
+
var _proto = LiteralDecoder2.prototype;
|
|
79
|
+
_proto.init = function init() {
|
|
80
|
+
(0, _typests.initBitModels)(this.decoders);
|
|
81
|
+
};
|
|
82
|
+
_proto.decodeNormal = function decodeNormal(rangeDecoder) {
|
|
83
|
+
var symbol = 1;
|
|
84
|
+
do {
|
|
85
|
+
symbol = symbol << 1 | rangeDecoder.decodeBit(this.decoders, symbol);
|
|
86
|
+
}while (symbol < 0x100);
|
|
87
|
+
return symbol & 0xff;
|
|
88
|
+
};
|
|
89
|
+
_proto.decodeWithMatchByte = function decodeWithMatchByte(rangeDecoder, matchByte) {
|
|
90
|
+
var symbol = 1;
|
|
91
|
+
do {
|
|
92
|
+
var matchBit = matchByte >> 7 & 1;
|
|
93
|
+
matchByte <<= 1;
|
|
94
|
+
var bit = rangeDecoder.decodeBit(this.decoders, (1 + matchBit << 8) + symbol);
|
|
95
|
+
symbol = symbol << 1 | bit;
|
|
96
|
+
if (matchBit !== bit) {
|
|
97
|
+
while(symbol < 0x100){
|
|
98
|
+
symbol = symbol << 1 | rangeDecoder.decodeBit(this.decoders, symbol);
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}while (symbol < 0x100);
|
|
103
|
+
return symbol & 0xff;
|
|
104
|
+
};
|
|
105
|
+
return LiteralDecoder2;
|
|
106
|
+
}();
|
|
107
|
+
/**
|
|
108
|
+
* Literal decoder (array of single decoders)
|
|
109
|
+
*/ var LiteralDecoder = /*#__PURE__*/ function() {
|
|
110
|
+
"use strict";
|
|
111
|
+
function LiteralDecoder() {
|
|
112
|
+
_class_call_check(this, LiteralDecoder);
|
|
113
|
+
this.numPosBits = 0;
|
|
114
|
+
this.numPrevBits = 0;
|
|
115
|
+
this.posMask = 0;
|
|
116
|
+
this.coders = [];
|
|
117
|
+
}
|
|
118
|
+
var _proto = LiteralDecoder.prototype;
|
|
119
|
+
_proto.create = function create(numPosBits, numPrevBits) {
|
|
120
|
+
if (this.coders.length > 0 && this.numPrevBits === numPrevBits && this.numPosBits === numPosBits) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.numPosBits = numPosBits;
|
|
124
|
+
this.posMask = (1 << numPosBits) - 1;
|
|
125
|
+
this.numPrevBits = numPrevBits;
|
|
126
|
+
this.coders = [];
|
|
127
|
+
};
|
|
128
|
+
_proto.init = function init() {
|
|
129
|
+
for(var i = 0; i < this.coders.length; i++){
|
|
130
|
+
if (this.coders[i]) {
|
|
131
|
+
var _this_coders_i;
|
|
132
|
+
(_this_coders_i = this.coders[i]) === null || _this_coders_i === void 0 ? void 0 : _this_coders_i.init();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
_proto.getDecoder = function getDecoder(pos, prevByte) {
|
|
137
|
+
var index = ((pos & this.posMask) << this.numPrevBits) + ((prevByte & 0xff) >>> 8 - this.numPrevBits);
|
|
138
|
+
var decoder = this.coders[index];
|
|
139
|
+
if (!decoder) {
|
|
140
|
+
decoder = new LiteralDecoder2();
|
|
141
|
+
this.coders[index] = decoder;
|
|
142
|
+
}
|
|
143
|
+
return decoder;
|
|
144
|
+
};
|
|
145
|
+
return LiteralDecoder;
|
|
146
|
+
}();
|
|
147
|
+
/**
|
|
148
|
+
* Output window (sliding dictionary)
|
|
149
|
+
*/ var OutWindow = /*#__PURE__*/ function() {
|
|
150
|
+
"use strict";
|
|
151
|
+
function OutWindow(sink) {
|
|
152
|
+
_class_call_check(this, OutWindow);
|
|
153
|
+
this.buffer = (0, _extractbaseiterator.allocBufferUnsafe)(0); // Replaced by create() before use
|
|
154
|
+
this.windowSize = 0;
|
|
155
|
+
this.pos = 0;
|
|
156
|
+
this.sink = sink;
|
|
157
|
+
this.streamPos = 0;
|
|
158
|
+
}
|
|
159
|
+
var _proto = OutWindow.prototype;
|
|
160
|
+
_proto.create = function create(windowSize) {
|
|
161
|
+
if (!this.buffer || this.windowSize !== windowSize) {
|
|
162
|
+
this.buffer = (0, _extractbaseiterator.allocBufferUnsafe)(windowSize);
|
|
163
|
+
}
|
|
164
|
+
this.windowSize = windowSize;
|
|
165
|
+
this.pos = 0;
|
|
166
|
+
this.streamPos = 0;
|
|
167
|
+
};
|
|
168
|
+
_proto.init = function init(solid) {
|
|
169
|
+
if (!solid) {
|
|
170
|
+
this.pos = 0;
|
|
171
|
+
this.streamPos = 0;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
_proto.putByte = function putByte(b) {
|
|
175
|
+
this.buffer[this.pos++] = b;
|
|
176
|
+
if (this.pos >= this.windowSize) {
|
|
177
|
+
if (this.sink) {
|
|
178
|
+
this.flush();
|
|
179
|
+
this.pos = 0;
|
|
180
|
+
this.streamPos = 0; // Reset streamPos after wrap to track new data from pos 0
|
|
181
|
+
} else {
|
|
182
|
+
this.pos = 0;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
_proto.flush = function flush() {
|
|
187
|
+
var size = this.pos - this.streamPos;
|
|
188
|
+
if (size > 0 && this.sink) {
|
|
189
|
+
// Use bufferFrom to create a COPY, not a view - the buffer is reused after wrapping
|
|
190
|
+
var chunk = (0, _extractbaseiterator.bufferFrom)(this.buffer.slice(this.streamPos, this.streamPos + size));
|
|
191
|
+
this.sink.write(chunk);
|
|
192
|
+
this.streamPos = this.pos;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
_proto.getByte = function getByte(distance) {
|
|
196
|
+
var pos = this.pos - distance - 1;
|
|
197
|
+
if (pos < 0) {
|
|
198
|
+
pos += this.windowSize;
|
|
199
|
+
}
|
|
200
|
+
return this.buffer[pos];
|
|
201
|
+
};
|
|
202
|
+
_proto.copyBlock = function copyBlock(distance, len) {
|
|
203
|
+
var pos = this.pos - distance - 1;
|
|
204
|
+
if (pos < 0) {
|
|
205
|
+
pos += this.windowSize;
|
|
206
|
+
}
|
|
207
|
+
for(var i = 0; i < len; i++){
|
|
208
|
+
if (pos >= this.windowSize) {
|
|
209
|
+
pos = 0;
|
|
210
|
+
}
|
|
211
|
+
this.putByte(this.buffer[pos++]);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* Copy decoded data to output buffer
|
|
216
|
+
*/ _proto.copyTo = function copyTo(output, outputOffset, count) {
|
|
217
|
+
var srcPos = this.pos - count;
|
|
218
|
+
if (srcPos < 0) {
|
|
219
|
+
// Wrap around case - data spans end and beginning of buffer
|
|
220
|
+
var firstPart = -srcPos;
|
|
221
|
+
this.buffer.copy(output, outputOffset, this.windowSize + srcPos, this.windowSize);
|
|
222
|
+
this.buffer.copy(output, outputOffset + firstPart, 0, count - firstPart);
|
|
223
|
+
} else {
|
|
224
|
+
this.buffer.copy(output, outputOffset, srcPos, srcPos + count);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
return OutWindow;
|
|
228
|
+
}();
|
|
229
|
+
var LzmaDecoder = /*#__PURE__*/ function() {
|
|
230
|
+
"use strict";
|
|
231
|
+
function LzmaDecoder(outputSink) {
|
|
232
|
+
_class_call_check(this, LzmaDecoder);
|
|
233
|
+
this.outWindow = new OutWindow(outputSink);
|
|
234
|
+
this.rangeDecoder = new _RangeDecoderts.RangeDecoder();
|
|
235
|
+
this.isMatchDecoders = (0, _typests.initBitModels)(null, _typests.kNumStates << _typests.kNumPosStatesBitsMax);
|
|
236
|
+
this.isRepDecoders = (0, _typests.initBitModels)(null, _typests.kNumStates);
|
|
237
|
+
this.isRepG0Decoders = (0, _typests.initBitModels)(null, _typests.kNumStates);
|
|
238
|
+
this.isRepG1Decoders = (0, _typests.initBitModels)(null, _typests.kNumStates);
|
|
239
|
+
this.isRepG2Decoders = (0, _typests.initBitModels)(null, _typests.kNumStates);
|
|
240
|
+
this.isRep0LongDecoders = (0, _typests.initBitModels)(null, _typests.kNumStates << _typests.kNumPosStatesBitsMax);
|
|
241
|
+
this.posSlotDecoder = [];
|
|
242
|
+
this.posDecoders = (0, _typests.initBitModels)(null, _typests.kNumFullDistances - _typests.kEndPosModelIndex);
|
|
243
|
+
this.posAlignDecoder = new _RangeDecoderts.BitTreeDecoder(_typests.kNumAlignBits);
|
|
244
|
+
this.lenDecoder = new LenDecoder();
|
|
245
|
+
this.repLenDecoder = new LenDecoder();
|
|
246
|
+
this.literalDecoder = new LiteralDecoder();
|
|
247
|
+
for(var i = 0; i < _typests.kNumLenToPosStates; i++){
|
|
248
|
+
this.posSlotDecoder[i] = new _RangeDecoderts.BitTreeDecoder(_typests.kNumPosSlotBits);
|
|
249
|
+
}
|
|
250
|
+
this.dictionarySize = -1;
|
|
251
|
+
this.dictionarySizeCheck = -1;
|
|
252
|
+
this.posStateMask = 0;
|
|
253
|
+
this.state = 0;
|
|
254
|
+
this.rep0 = 0;
|
|
255
|
+
this.rep1 = 0;
|
|
256
|
+
this.rep2 = 0;
|
|
257
|
+
this.rep3 = 0;
|
|
258
|
+
this.prevByte = 0;
|
|
259
|
+
this.totalPos = 0;
|
|
260
|
+
}
|
|
261
|
+
var _proto = LzmaDecoder.prototype;
|
|
262
|
+
/**
|
|
263
|
+
* Set dictionary size
|
|
264
|
+
*/ _proto.setDictionarySize = function setDictionarySize(dictionarySize) {
|
|
265
|
+
if (dictionarySize < 0) return false;
|
|
266
|
+
if (this.dictionarySize !== dictionarySize) {
|
|
267
|
+
this.dictionarySize = dictionarySize;
|
|
268
|
+
this.dictionarySizeCheck = Math.max(dictionarySize, 1);
|
|
269
|
+
this.outWindow.create(Math.max(this.dictionarySizeCheck, 1 << 12));
|
|
270
|
+
}
|
|
271
|
+
return true;
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Set lc, lp, pb properties
|
|
275
|
+
*/ _proto.setLcLpPb = function setLcLpPb(lc, lp, pb) {
|
|
276
|
+
if (lc > _typests.kNumLitContextBitsMax || lp > 4 || pb > _typests.kNumPosStatesBitsMax) {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
var numPosStates = 1 << pb;
|
|
280
|
+
this.literalDecoder.create(lp, lc);
|
|
281
|
+
this.lenDecoder.create(numPosStates);
|
|
282
|
+
this.repLenDecoder.create(numPosStates);
|
|
283
|
+
this.posStateMask = numPosStates - 1;
|
|
284
|
+
return true;
|
|
285
|
+
};
|
|
286
|
+
/**
|
|
287
|
+
* Set decoder properties from 5-byte buffer
|
|
288
|
+
*/ _proto.setDecoderProperties = function setDecoderProperties(properties) {
|
|
289
|
+
var props = (0, _typests.parseProperties)(properties);
|
|
290
|
+
if (!this.setLcLpPb(props.lc, props.lp, props.pb)) return false;
|
|
291
|
+
return this.setDictionarySize(props.dictionarySize);
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* Initialize probability tables
|
|
295
|
+
*/ _proto.initProbabilities = function initProbabilities() {
|
|
296
|
+
(0, _typests.initBitModels)(this.isMatchDecoders);
|
|
297
|
+
(0, _typests.initBitModels)(this.isRepDecoders);
|
|
298
|
+
(0, _typests.initBitModels)(this.isRepG0Decoders);
|
|
299
|
+
(0, _typests.initBitModels)(this.isRepG1Decoders);
|
|
300
|
+
(0, _typests.initBitModels)(this.isRepG2Decoders);
|
|
301
|
+
(0, _typests.initBitModels)(this.isRep0LongDecoders);
|
|
302
|
+
(0, _typests.initBitModels)(this.posDecoders);
|
|
303
|
+
this.literalDecoder.init();
|
|
304
|
+
for(var i = _typests.kNumLenToPosStates - 1; i >= 0; i--){
|
|
305
|
+
this.posSlotDecoder[i].init();
|
|
306
|
+
}
|
|
307
|
+
this.lenDecoder.init();
|
|
308
|
+
this.repLenDecoder.init();
|
|
309
|
+
this.posAlignDecoder.init();
|
|
310
|
+
};
|
|
311
|
+
/**
|
|
312
|
+
* Reset probabilities only (for LZMA2 state reset)
|
|
313
|
+
*/ _proto.resetProbabilities = function resetProbabilities() {
|
|
314
|
+
this.initProbabilities();
|
|
315
|
+
this.state = 0;
|
|
316
|
+
this.rep0 = 0;
|
|
317
|
+
this.rep1 = 0;
|
|
318
|
+
this.rep2 = 0;
|
|
319
|
+
this.rep3 = 0;
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Reset dictionary position (for LZMA2 dictionary reset)
|
|
323
|
+
*/ _proto.resetDictionary = function resetDictionary() {
|
|
324
|
+
this.outWindow.init(false);
|
|
325
|
+
this.totalPos = 0;
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)
|
|
329
|
+
* This updates the sliding window so subsequent LZMA chunks can reference this data.
|
|
330
|
+
*/ _proto.feedUncompressed = function feedUncompressed(data) {
|
|
331
|
+
for(var i = 0; i < data.length; i++){
|
|
332
|
+
this.outWindow.putByte(data[i]);
|
|
333
|
+
}
|
|
334
|
+
this.totalPos += data.length;
|
|
335
|
+
if (data.length > 0) {
|
|
336
|
+
this.prevByte = data[data.length - 1];
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
/**
|
|
340
|
+
* Flush any remaining data in the OutWindow to the sink
|
|
341
|
+
*/ _proto.flushOutWindow = function flushOutWindow() {
|
|
342
|
+
this.outWindow.flush();
|
|
343
|
+
};
|
|
344
|
+
/**
|
|
345
|
+
* Decode LZMA data with streaming output (no buffer accumulation)
|
|
346
|
+
* @param input - Compressed input buffer
|
|
347
|
+
* @param inputOffset - Offset into input buffer
|
|
348
|
+
* @param outSize - Expected output size
|
|
349
|
+
* @param solid - If true, preserve state from previous decode
|
|
350
|
+
* @returns Number of bytes written to sink
|
|
351
|
+
*/ _proto.decodeWithSink = function decodeWithSink(input, inputOffset, outSize) {
|
|
352
|
+
var solid = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
|
|
353
|
+
this.rangeDecoder.setInput(input, inputOffset);
|
|
354
|
+
if (!solid) {
|
|
355
|
+
this.outWindow.init(false);
|
|
356
|
+
this.initProbabilities();
|
|
357
|
+
this.state = 0;
|
|
358
|
+
this.rep0 = 0;
|
|
359
|
+
this.rep1 = 0;
|
|
360
|
+
this.rep2 = 0;
|
|
361
|
+
this.rep3 = 0;
|
|
362
|
+
this.prevByte = 0;
|
|
363
|
+
this.totalPos = 0;
|
|
364
|
+
} else {
|
|
365
|
+
this.outWindow.init(true);
|
|
366
|
+
}
|
|
367
|
+
var outPos = 0;
|
|
368
|
+
var cumPos = this.totalPos;
|
|
369
|
+
while(outPos < outSize){
|
|
370
|
+
var posState = cumPos & this.posStateMask;
|
|
371
|
+
if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << _typests.kNumPosStatesBitsMax) + posState) === 0) {
|
|
372
|
+
// Literal
|
|
373
|
+
var decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);
|
|
374
|
+
if (!(0, _typests.stateIsCharState)(this.state)) {
|
|
375
|
+
this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));
|
|
376
|
+
} else {
|
|
377
|
+
this.prevByte = decoder2.decodeNormal(this.rangeDecoder);
|
|
378
|
+
}
|
|
379
|
+
this.outWindow.putByte(this.prevByte);
|
|
380
|
+
outPos++;
|
|
381
|
+
this.state = (0, _typests.stateUpdateChar)(this.state);
|
|
382
|
+
cumPos++;
|
|
383
|
+
} else {
|
|
384
|
+
// Match or rep
|
|
385
|
+
var len = void 0;
|
|
386
|
+
if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {
|
|
387
|
+
// Rep match
|
|
388
|
+
len = 0;
|
|
389
|
+
if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {
|
|
390
|
+
if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << _typests.kNumPosStatesBitsMax) + posState) === 0) {
|
|
391
|
+
this.state = (0, _typests.stateUpdateShortRep)(this.state);
|
|
392
|
+
len = 1;
|
|
393
|
+
}
|
|
394
|
+
} else {
|
|
395
|
+
var distance = void 0;
|
|
396
|
+
if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {
|
|
397
|
+
distance = this.rep1;
|
|
398
|
+
} else {
|
|
399
|
+
if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {
|
|
400
|
+
distance = this.rep2;
|
|
401
|
+
} else {
|
|
402
|
+
distance = this.rep3;
|
|
403
|
+
this.rep3 = this.rep2;
|
|
404
|
+
}
|
|
405
|
+
this.rep2 = this.rep1;
|
|
406
|
+
}
|
|
407
|
+
this.rep1 = this.rep0;
|
|
408
|
+
this.rep0 = distance;
|
|
409
|
+
}
|
|
410
|
+
if (len === 0) {
|
|
411
|
+
len = _typests.kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);
|
|
412
|
+
this.state = (0, _typests.stateUpdateRep)(this.state);
|
|
413
|
+
}
|
|
414
|
+
} else {
|
|
415
|
+
// Normal match
|
|
416
|
+
this.rep3 = this.rep2;
|
|
417
|
+
this.rep2 = this.rep1;
|
|
418
|
+
this.rep1 = this.rep0;
|
|
419
|
+
len = _typests.kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);
|
|
420
|
+
this.state = (0, _typests.stateUpdateMatch)(this.state);
|
|
421
|
+
var posSlot = this.posSlotDecoder[(0, _typests.getLenToPosState)(len)].decode(this.rangeDecoder);
|
|
422
|
+
if (posSlot >= _typests.kStartPosModelIndex) {
|
|
423
|
+
var numDirectBits = (posSlot >> 1) - 1;
|
|
424
|
+
this.rep0 = (2 | posSlot & 1) << numDirectBits;
|
|
425
|
+
if (posSlot < _typests.kEndPosModelIndex) {
|
|
426
|
+
this.rep0 += (0, _RangeDecoderts.reverseDecodeFromArray)(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);
|
|
427
|
+
} else {
|
|
428
|
+
this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - _typests.kNumAlignBits) << _typests.kNumAlignBits;
|
|
429
|
+
this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);
|
|
430
|
+
if (this.rep0 < 0) {
|
|
431
|
+
if (this.rep0 === -1) break;
|
|
432
|
+
throw new Error('LZMA: Invalid distance');
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
} else {
|
|
436
|
+
this.rep0 = posSlot;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {
|
|
440
|
+
throw new Error('LZMA: Invalid distance');
|
|
441
|
+
}
|
|
442
|
+
// Copy match bytes
|
|
443
|
+
for(var i = 0; i < len; i++){
|
|
444
|
+
var b = this.outWindow.getByte(this.rep0);
|
|
445
|
+
this.outWindow.putByte(b);
|
|
446
|
+
outPos++;
|
|
447
|
+
}
|
|
448
|
+
cumPos += len;
|
|
449
|
+
this.prevByte = this.outWindow.getByte(0);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
this.totalPos = cumPos;
|
|
453
|
+
return outPos;
|
|
454
|
+
};
|
|
455
|
+
/**
|
|
456
|
+
* Decode LZMA data
|
|
457
|
+
* @param input - Compressed input buffer
|
|
458
|
+
* @param inputOffset - Offset into input buffer
|
|
459
|
+
* @param outSize - Expected output size
|
|
460
|
+
* @param solid - If true, preserve state from previous decode
|
|
461
|
+
* @returns Decompressed data
|
|
462
|
+
*/ _proto.decode = function decode(input, inputOffset, outSize) {
|
|
463
|
+
var solid = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
|
|
464
|
+
this.rangeDecoder.setInput(input, inputOffset);
|
|
465
|
+
if (!solid) {
|
|
466
|
+
this.outWindow.init(false);
|
|
467
|
+
this.initProbabilities();
|
|
468
|
+
this.state = 0;
|
|
469
|
+
this.rep0 = 0;
|
|
470
|
+
this.rep1 = 0;
|
|
471
|
+
this.rep2 = 0;
|
|
472
|
+
this.rep3 = 0;
|
|
473
|
+
this.prevByte = 0;
|
|
474
|
+
this.totalPos = 0;
|
|
475
|
+
} else {
|
|
476
|
+
// Solid mode: preserve dictionary state but reinitialize range decoder
|
|
477
|
+
this.outWindow.init(true);
|
|
478
|
+
}
|
|
479
|
+
var output = (0, _extractbaseiterator.allocBufferUnsafe)(outSize);
|
|
480
|
+
var outPos = 0;
|
|
481
|
+
var cumPos = this.totalPos;
|
|
482
|
+
while(outPos < outSize){
|
|
483
|
+
var posState = cumPos & this.posStateMask;
|
|
484
|
+
if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << _typests.kNumPosStatesBitsMax) + posState) === 0) {
|
|
485
|
+
// Literal
|
|
486
|
+
var decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);
|
|
487
|
+
if (!(0, _typests.stateIsCharState)(this.state)) {
|
|
488
|
+
this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));
|
|
489
|
+
} else {
|
|
490
|
+
this.prevByte = decoder2.decodeNormal(this.rangeDecoder);
|
|
491
|
+
}
|
|
492
|
+
this.outWindow.putByte(this.prevByte);
|
|
493
|
+
output[outPos++] = this.prevByte;
|
|
494
|
+
this.state = (0, _typests.stateUpdateChar)(this.state);
|
|
495
|
+
cumPos++;
|
|
496
|
+
} else {
|
|
497
|
+
// Match or rep
|
|
498
|
+
var len = void 0;
|
|
499
|
+
if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {
|
|
500
|
+
// Rep match
|
|
501
|
+
len = 0;
|
|
502
|
+
if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {
|
|
503
|
+
if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << _typests.kNumPosStatesBitsMax) + posState) === 0) {
|
|
504
|
+
this.state = (0, _typests.stateUpdateShortRep)(this.state);
|
|
505
|
+
len = 1;
|
|
506
|
+
}
|
|
507
|
+
} else {
|
|
508
|
+
var distance = void 0;
|
|
509
|
+
if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {
|
|
510
|
+
distance = this.rep1;
|
|
511
|
+
} else {
|
|
512
|
+
if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {
|
|
513
|
+
distance = this.rep2;
|
|
514
|
+
} else {
|
|
515
|
+
distance = this.rep3;
|
|
516
|
+
this.rep3 = this.rep2;
|
|
517
|
+
}
|
|
518
|
+
this.rep2 = this.rep1;
|
|
519
|
+
}
|
|
520
|
+
this.rep1 = this.rep0;
|
|
521
|
+
this.rep0 = distance;
|
|
522
|
+
}
|
|
523
|
+
if (len === 0) {
|
|
524
|
+
len = _typests.kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);
|
|
525
|
+
this.state = (0, _typests.stateUpdateRep)(this.state);
|
|
526
|
+
}
|
|
527
|
+
} else {
|
|
528
|
+
// Normal match
|
|
529
|
+
this.rep3 = this.rep2;
|
|
530
|
+
this.rep2 = this.rep1;
|
|
531
|
+
this.rep1 = this.rep0;
|
|
532
|
+
len = _typests.kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);
|
|
533
|
+
this.state = (0, _typests.stateUpdateMatch)(this.state);
|
|
534
|
+
var posSlot = this.posSlotDecoder[(0, _typests.getLenToPosState)(len)].decode(this.rangeDecoder);
|
|
535
|
+
if (posSlot >= _typests.kStartPosModelIndex) {
|
|
536
|
+
var numDirectBits = (posSlot >> 1) - 1;
|
|
537
|
+
this.rep0 = (2 | posSlot & 1) << numDirectBits;
|
|
538
|
+
if (posSlot < _typests.kEndPosModelIndex) {
|
|
539
|
+
this.rep0 += (0, _RangeDecoderts.reverseDecodeFromArray)(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);
|
|
540
|
+
} else {
|
|
541
|
+
this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - _typests.kNumAlignBits) << _typests.kNumAlignBits;
|
|
542
|
+
this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);
|
|
543
|
+
if (this.rep0 < 0) {
|
|
544
|
+
if (this.rep0 === -1) break; // End marker
|
|
545
|
+
throw new Error('LZMA: Invalid distance');
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
} else {
|
|
549
|
+
this.rep0 = posSlot;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {
|
|
553
|
+
throw new Error('LZMA: Invalid distance');
|
|
554
|
+
}
|
|
555
|
+
// Copy match bytes
|
|
556
|
+
for(var i = 0; i < len; i++){
|
|
557
|
+
var b = this.outWindow.getByte(this.rep0);
|
|
558
|
+
this.outWindow.putByte(b);
|
|
559
|
+
output[outPos++] = b;
|
|
560
|
+
}
|
|
561
|
+
cumPos += len;
|
|
562
|
+
this.prevByte = this.outWindow.getByte(0);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
this.totalPos = cumPos;
|
|
566
|
+
return output;
|
|
567
|
+
};
|
|
568
|
+
return LzmaDecoder;
|
|
569
|
+
}();
|
|
570
|
+
function decodeLzma(input, properties, outSize, outputSink) {
|
|
571
|
+
var decoder = new LzmaDecoder(outputSink);
|
|
572
|
+
decoder.setDecoderProperties(properties);
|
|
573
|
+
if (outputSink) {
|
|
574
|
+
// Zero-copy mode: write to sink during decode
|
|
575
|
+
var bytesWritten = decoder.decodeWithSink(input, 0, outSize, false);
|
|
576
|
+
decoder.flushOutWindow();
|
|
577
|
+
return bytesWritten;
|
|
578
|
+
}
|
|
579
|
+
// Buffering mode: pre-allocated buffer, direct writes (zero-copy)
|
|
580
|
+
return decoder.decode(input, 0, outSize, false);
|
|
581
|
+
}
|
|
582
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/lzma/sync/LzmaDecoder.ts"],"sourcesContent":["/**\n * Synchronous LZMA1 Decoder\n *\n * Decodes LZMA1 compressed data from a buffer.\n * All operations are synchronous.\n */\n\nimport { allocBufferUnsafe, bufferFrom } from 'extract-base-iterator';\nimport {\n getLenToPosState,\n initBitModels,\n kEndPosModelIndex,\n kMatchMinLen,\n kNumAlignBits,\n kNumFullDistances,\n kNumLenToPosStates,\n kNumLitContextBitsMax,\n kNumPosSlotBits,\n kNumPosStatesBitsMax,\n kNumStates,\n kStartPosModelIndex,\n type OutputSink,\n parseProperties,\n stateIsCharState,\n stateUpdateChar,\n stateUpdateMatch,\n stateUpdateRep,\n stateUpdateShortRep,\n} from '../types.ts';\nimport { BitTreeDecoder, RangeDecoder, reverseDecodeFromArray } from './RangeDecoder.ts';\n\n/**\n * Length decoder for match/rep lengths\n */\nclass LenDecoder {\n private choice: Uint16Array;\n private lowCoder: BitTreeDecoder[];\n private midCoder: BitTreeDecoder[];\n private highCoder: BitTreeDecoder;\n private numPosStates: number;\n\n constructor() {\n this.choice = initBitModels(null, 2);\n this.lowCoder = [];\n this.midCoder = [];\n this.highCoder = new BitTreeDecoder(8);\n this.numPosStates = 0;\n }\n\n create(numPosStates: number): void {\n for (; this.numPosStates < numPosStates; this.numPosStates++) {\n this.lowCoder[this.numPosStates] = new BitTreeDecoder(3);\n this.midCoder[this.numPosStates] = new BitTreeDecoder(3);\n }\n }\n\n init(): void {\n initBitModels(this.choice);\n for (let i = this.numPosStates - 1; i >= 0; i--) {\n this.lowCoder[i].init();\n this.midCoder[i].init();\n }\n this.highCoder.init();\n }\n\n decode(rangeDecoder: RangeDecoder, posState: number): number {\n if (rangeDecoder.decodeBit(this.choice, 0) === 0) {\n return this.lowCoder[posState].decode(rangeDecoder);\n }\n if (rangeDecoder.decodeBit(this.choice, 1) === 0) {\n return 8 + this.midCoder[posState].decode(rangeDecoder);\n }\n return 16 + this.highCoder.decode(rangeDecoder);\n }\n}\n\n/**\n * Single literal decoder (decodes one byte)\n */\nclass LiteralDecoder2 {\n private decoders: Uint16Array;\n\n constructor() {\n this.decoders = initBitModels(null, 0x300);\n }\n\n init(): void {\n initBitModels(this.decoders);\n }\n\n decodeNormal(rangeDecoder: RangeDecoder): number {\n let symbol = 1;\n do {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n\n decodeWithMatchByte(rangeDecoder: RangeDecoder, matchByte: number): number {\n let symbol = 1;\n do {\n const matchBit = (matchByte >> 7) & 1;\n matchByte <<= 1;\n const bit = rangeDecoder.decodeBit(this.decoders, ((1 + matchBit) << 8) + symbol);\n symbol = (symbol << 1) | bit;\n if (matchBit !== bit) {\n while (symbol < 0x100) {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n }\n break;\n }\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n}\n\n/**\n * Literal decoder (array of single decoders)\n */\nclass LiteralDecoder {\n private numPosBits: number;\n private numPrevBits: number;\n private posMask: number;\n private coders: (LiteralDecoder2 | undefined)[];\n\n constructor() {\n this.numPosBits = 0;\n this.numPrevBits = 0;\n this.posMask = 0;\n this.coders = [];\n }\n\n create(numPosBits: number, numPrevBits: number): void {\n if (this.coders.length > 0 && this.numPrevBits === numPrevBits && this.numPosBits === numPosBits) {\n return;\n }\n this.numPosBits = numPosBits;\n this.posMask = (1 << numPosBits) - 1;\n this.numPrevBits = numPrevBits;\n this.coders = [];\n }\n\n init(): void {\n for (let i = 0; i < this.coders.length; i++) {\n if (this.coders[i]) {\n this.coders[i]?.init();\n }\n }\n }\n\n getDecoder(pos: number, prevByte: number): LiteralDecoder2 {\n const index = ((pos & this.posMask) << this.numPrevBits) + ((prevByte & 0xff) >>> (8 - this.numPrevBits));\n let decoder = this.coders[index];\n if (!decoder) {\n decoder = new LiteralDecoder2();\n this.coders[index] = decoder;\n }\n return decoder;\n }\n}\n\n/**\n * Output window (sliding dictionary)\n */\nclass OutWindow {\n private buffer: Buffer;\n private windowSize: number;\n private pos: number;\n private sink?: {\n write(buffer: Buffer): void;\n };\n private streamPos: number;\n\n constructor(sink?: OutputSink) {\n this.buffer = allocBufferUnsafe(0); // Replaced by create() before use\n this.windowSize = 0;\n this.pos = 0;\n this.sink = sink;\n this.streamPos = 0;\n }\n\n create(windowSize: number): void {\n if (!this.buffer || this.windowSize !== windowSize) {\n this.buffer = allocBufferUnsafe(windowSize);\n }\n this.windowSize = windowSize;\n this.pos = 0;\n this.streamPos = 0;\n }\n\n init(solid: boolean): void {\n if (!solid) {\n this.pos = 0;\n this.streamPos = 0;\n }\n }\n\n putByte(b: number): void {\n this.buffer[this.pos++] = b;\n if (this.pos >= this.windowSize) {\n if (this.sink) {\n this.flush();\n this.pos = 0;\n this.streamPos = 0; // Reset streamPos after wrap to track new data from pos 0\n } else {\n this.pos = 0;\n }\n }\n }\n\n flush(): void {\n const size = this.pos - this.streamPos;\n if (size > 0 && this.sink) {\n // Use bufferFrom to create a COPY, not a view - the buffer is reused after wrapping\n const chunk = bufferFrom(this.buffer.slice(this.streamPos, this.streamPos + size));\n this.sink.write(chunk);\n this.streamPos = this.pos;\n }\n }\n\n getByte(distance: number): number {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n return this.buffer[pos];\n }\n\n copyBlock(distance: number, len: number): void {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n for (let i = 0; i < len; i++) {\n if (pos >= this.windowSize) {\n pos = 0;\n }\n this.putByte(this.buffer[pos++]);\n }\n }\n\n /**\n * Copy decoded data to output buffer\n */\n copyTo(output: Buffer, outputOffset: number, count: number): void {\n const srcPos = this.pos - count;\n if (srcPos < 0) {\n // Wrap around case - data spans end and beginning of buffer\n const firstPart = -srcPos;\n this.buffer.copy(output, outputOffset, this.windowSize + srcPos, this.windowSize);\n this.buffer.copy(output, outputOffset + firstPart, 0, count - firstPart);\n } else {\n this.buffer.copy(output, outputOffset, srcPos, srcPos + count);\n }\n }\n}\n\n/**\n * Synchronous LZMA1 decoder\n */\nexport class LzmaDecoder {\n private outWindow: OutWindow;\n private rangeDecoder: RangeDecoder;\n\n // Probability models\n private isMatchDecoders: Uint16Array;\n private isRepDecoders: Uint16Array;\n private isRepG0Decoders: Uint16Array;\n private isRepG1Decoders: Uint16Array;\n private isRepG2Decoders: Uint16Array;\n private isRep0LongDecoders: Uint16Array;\n private posSlotDecoder: BitTreeDecoder[];\n private posDecoders: Uint16Array;\n private posAlignDecoder: BitTreeDecoder;\n private lenDecoder: LenDecoder;\n private repLenDecoder: LenDecoder;\n private literalDecoder: LiteralDecoder;\n\n // Properties\n private dictionarySize: number;\n private dictionarySizeCheck: number;\n private posStateMask: number;\n\n // State (preserved across solid calls)\n private state: number;\n private rep0: number;\n private rep1: number;\n private rep2: number;\n private rep3: number;\n private prevByte: number;\n private totalPos: number;\n\n constructor(outputSink?: OutputSink) {\n this.outWindow = new OutWindow(outputSink);\n this.rangeDecoder = new RangeDecoder();\n\n this.isMatchDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.isRepDecoders = initBitModels(null, kNumStates);\n this.isRepG0Decoders = initBitModels(null, kNumStates);\n this.isRepG1Decoders = initBitModels(null, kNumStates);\n this.isRepG2Decoders = initBitModels(null, kNumStates);\n this.isRep0LongDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.posSlotDecoder = [];\n this.posDecoders = initBitModels(null, kNumFullDistances - kEndPosModelIndex);\n this.posAlignDecoder = new BitTreeDecoder(kNumAlignBits);\n this.lenDecoder = new LenDecoder();\n this.repLenDecoder = new LenDecoder();\n this.literalDecoder = new LiteralDecoder();\n\n for (let i = 0; i < kNumLenToPosStates; i++) {\n this.posSlotDecoder[i] = new BitTreeDecoder(kNumPosSlotBits);\n }\n\n this.dictionarySize = -1;\n this.dictionarySizeCheck = -1;\n this.posStateMask = 0;\n\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n }\n\n /**\n * Set dictionary size\n */\n setDictionarySize(dictionarySize: number): boolean {\n if (dictionarySize < 0) return false;\n if (this.dictionarySize !== dictionarySize) {\n this.dictionarySize = dictionarySize;\n this.dictionarySizeCheck = Math.max(dictionarySize, 1);\n this.outWindow.create(Math.max(this.dictionarySizeCheck, 1 << 12));\n }\n return true;\n }\n\n /**\n * Set lc, lp, pb properties\n */\n setLcLpPb(lc: number, lp: number, pb: number): boolean {\n if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {\n return false;\n }\n const numPosStates = 1 << pb;\n this.literalDecoder.create(lp, lc);\n this.lenDecoder.create(numPosStates);\n this.repLenDecoder.create(numPosStates);\n this.posStateMask = numPosStates - 1;\n return true;\n }\n\n /**\n * Set decoder properties from 5-byte buffer\n */\n setDecoderProperties(properties: Buffer | Uint8Array): boolean {\n const props = parseProperties(properties);\n if (!this.setLcLpPb(props.lc, props.lp, props.pb)) return false;\n return this.setDictionarySize(props.dictionarySize);\n }\n\n /**\n * Initialize probability tables\n */\n private initProbabilities(): void {\n initBitModels(this.isMatchDecoders);\n initBitModels(this.isRepDecoders);\n initBitModels(this.isRepG0Decoders);\n initBitModels(this.isRepG1Decoders);\n initBitModels(this.isRepG2Decoders);\n initBitModels(this.isRep0LongDecoders);\n initBitModels(this.posDecoders);\n this.literalDecoder.init();\n for (let i = kNumLenToPosStates - 1; i >= 0; i--) {\n this.posSlotDecoder[i].init();\n }\n this.lenDecoder.init();\n this.repLenDecoder.init();\n this.posAlignDecoder.init();\n }\n\n /**\n * Reset probabilities only (for LZMA2 state reset)\n */\n resetProbabilities(): void {\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n }\n\n /**\n * Reset dictionary position (for LZMA2 dictionary reset)\n */\n resetDictionary(): void {\n this.outWindow.init(false);\n this.totalPos = 0;\n }\n\n /**\n * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)\n * This updates the sliding window so subsequent LZMA chunks can reference this data.\n */\n feedUncompressed(data: Buffer): void {\n for (let i = 0; i < data.length; i++) {\n this.outWindow.putByte(data[i]);\n }\n this.totalPos += data.length;\n if (data.length > 0) {\n this.prevByte = data[data.length - 1];\n }\n }\n\n /**\n * Flush any remaining data in the OutWindow to the sink\n */\n flushOutWindow(): void {\n this.outWindow.flush();\n }\n\n /**\n * Decode LZMA data with streaming output (no buffer accumulation)\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Number of bytes written to sink\n */\n decodeWithSink(input: Buffer, inputOffset: number, outSize: number, solid = false): number {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n this.outWindow.init(true);\n }\n\n let outPos = 0;\n let cumPos = this.totalPos;\n\n while (outPos < outSize) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n outPos++;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break;\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n outPos++;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return outPos;\n }\n\n /**\n * Decode LZMA data\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Decompressed data\n */\n decode(input: Buffer, inputOffset: number, outSize: number, solid = false): Buffer {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n // Solid mode: preserve dictionary state but reinitialize range decoder\n this.outWindow.init(true);\n }\n\n const output = allocBufferUnsafe(outSize);\n let outPos = 0;\n let cumPos = this.totalPos;\n\n while (outPos < outSize) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n output[outPos++] = this.prevByte;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break; // End marker\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n output[outPos++] = b;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return output;\n }\n}\n\n/**\n * Decode LZMA1 data synchronously\n * @param input - Compressed data (without 5-byte properties header)\n * @param properties - 5-byte LZMA properties\n * @param outSize - Expected output size\n * @param outputSink - Optional output sink for zero-copy decoding (returns bytes written)\n * @returns Decompressed data (or bytes written if outputSink provided)\n */\nexport function decodeLzma(input: Buffer, properties: Buffer | Uint8Array, outSize: number, outputSink?: OutputSink): Buffer | number {\n const decoder = new LzmaDecoder(outputSink);\n decoder.setDecoderProperties(properties);\n if (outputSink) {\n // Zero-copy mode: write to sink during decode\n const bytesWritten = decoder.decodeWithSink(input, 0, outSize, false);\n decoder.flushOutWindow();\n return bytesWritten;\n }\n // Buffering mode: pre-allocated buffer, direct writes (zero-copy)\n return decoder.decode(input, 0, outSize, false);\n}\n"],"names":["LzmaDecoder","decodeLzma","LenDecoder","choice","initBitModels","lowCoder","midCoder","highCoder","BitTreeDecoder","numPosStates","create","init","i","decode","rangeDecoder","posState","decodeBit","LiteralDecoder2","decoders","decodeNormal","symbol","decodeWithMatchByte","matchByte","matchBit","bit","LiteralDecoder","numPosBits","numPrevBits","posMask","coders","length","getDecoder","pos","prevByte","index","decoder","OutWindow","sink","buffer","allocBufferUnsafe","windowSize","streamPos","solid","putByte","b","flush","size","chunk","bufferFrom","slice","write","getByte","distance","copyBlock","len","copyTo","output","outputOffset","count","srcPos","firstPart","copy","outputSink","outWindow","RangeDecoder","isMatchDecoders","kNumStates","kNumPosStatesBitsMax","isRepDecoders","isRepG0Decoders","isRepG1Decoders","isRepG2Decoders","isRep0LongDecoders","posSlotDecoder","posDecoders","kNumFullDistances","kEndPosModelIndex","posAlignDecoder","kNumAlignBits","lenDecoder","repLenDecoder","literalDecoder","kNumLenToPosStates","kNumPosSlotBits","dictionarySize","dictionarySizeCheck","posStateMask","state","rep0","rep1","rep2","rep3","totalPos","setDictionarySize","Math","max","setLcLpPb","lc","lp","pb","kNumLitContextBitsMax","setDecoderProperties","properties","props","parseProperties","initProbabilities","resetProbabilities","resetDictionary","feedUncompressed","data","flushOutWindow","decodeWithSink","input","inputOffset","outSize","setInput","outPos","cumPos","decoder2","stateIsCharState","stateUpdateChar","stateUpdateShortRep","kMatchMinLen","stateUpdateRep","stateUpdateMatch","posSlot","getLenToPosState","kStartPosModelIndex","numDirectBits","reverseDecodeFromArray","decodeDirectBits","reverseDecode","Error","bytesWritten"],"mappings":"AAAA;;;;;CAKC;;;;;;;;;;;QA+PYA;eAAAA;;QAiaGC;eAAAA;;;mCA9pB8B;uBAqBvC;8BAC8D;;;;;;AAErE;;CAEC,GACD,IAAA,AAAMC,2BAAN;;aAAMA;gCAAAA;QAQF,IAAI,CAACC,MAAM,GAAGC,IAAAA,sBAAa,EAAC,MAAM;QAClC,IAAI,CAACC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAACC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAACC,SAAS,GAAG,IAAIC,8BAAc,CAAC;QACpC,IAAI,CAACC,YAAY,GAAG;;iBAZlBP;IAeJQ,OAAAA,MAKC,GALDA,SAAAA,OAAOD,YAAoB;QACzB,MAAO,IAAI,CAACA,YAAY,GAAGA,cAAc,IAAI,CAACA,YAAY,GAAI;YAC5D,IAAI,CAACJ,QAAQ,CAAC,IAAI,CAACI,YAAY,CAAC,GAAG,IAAID,8BAAc,CAAC;YACtD,IAAI,CAACF,QAAQ,CAAC,IAAI,CAACG,YAAY,CAAC,GAAG,IAAID,8BAAc,CAAC;QACxD;IACF;IAEAG,OAAAA,IAOC,GAPDA,SAAAA;QACEP,IAAAA,sBAAa,EAAC,IAAI,CAACD,MAAM;QACzB,IAAK,IAAIS,IAAI,IAAI,CAACH,YAAY,GAAG,GAAGG,KAAK,GAAGA,IAAK;YAC/C,IAAI,CAACP,QAAQ,CAACO,EAAE,CAACD,IAAI;YACrB,IAAI,CAACL,QAAQ,CAACM,EAAE,CAACD,IAAI;QACvB;QACA,IAAI,CAACJ,SAAS,CAACI,IAAI;IACrB;IAEAE,OAAAA,MAQC,GARDA,SAAAA,OAAOC,YAA0B,EAAEC,QAAgB;QACjD,IAAID,aAAaE,SAAS,CAAC,IAAI,CAACb,MAAM,EAAE,OAAO,GAAG;YAChD,OAAO,IAAI,CAACE,QAAQ,CAACU,SAAS,CAACF,MAAM,CAACC;QACxC;QACA,IAAIA,aAAaE,SAAS,CAAC,IAAI,CAACb,MAAM,EAAE,OAAO,GAAG;YAChD,OAAO,IAAI,IAAI,CAACG,QAAQ,CAACS,SAAS,CAACF,MAAM,CAACC;QAC5C;QACA,OAAO,KAAK,IAAI,CAACP,SAAS,CAACM,MAAM,CAACC;IACpC;WAvCIZ;;AA0CN;;CAEC,GACD,IAAA,AAAMe,gCAAN;;aAAMA;gCAAAA;QAIF,IAAI,CAACC,QAAQ,GAAGd,IAAAA,sBAAa,EAAC,MAAM;;iBAJlCa;IAOJN,OAAAA,IAEC,GAFDA,SAAAA;QACEP,IAAAA,sBAAa,EAAC,IAAI,CAACc,QAAQ;IAC7B;IAEAC,OAAAA,YAMC,GANDA,SAAAA,aAAaL,YAA0B;QACrC,IAAIM,SAAS;QACb,GAAG;YACDA,SAAS,AAACA,UAAU,IAAKN,aAAaE,SAAS,CAAC,IAAI,CAACE,QAAQ,EAAEE;QACjE,QAASA,SAAS,OAAO;QACzB,OAAOA,SAAS;IAClB;IAEAC,OAAAA,mBAeC,GAfDA,SAAAA,oBAAoBP,YAA0B,EAAEQ,SAAiB;QAC/D,IAAIF,SAAS;QACb,GAAG;YACD,IAAMG,WAAW,AAACD,aAAa,IAAK;YACpCA,cAAc;YACd,IAAME,MAAMV,aAAaE,SAAS,CAAC,IAAI,CAACE,QAAQ,EAAE,AAAC,CAAA,AAAC,IAAIK,YAAa,CAAA,IAAKH;YAC1EA,SAAS,AAACA,UAAU,IAAKI;YACzB,IAAID,aAAaC,KAAK;gBACpB,MAAOJ,SAAS,MAAO;oBACrBA,SAAS,AAACA,UAAU,IAAKN,aAAaE,SAAS,CAAC,IAAI,CAACE,QAAQ,EAAEE;gBACjE;gBACA;YACF;QACF,QAASA,SAAS,OAAO;QACzB,OAAOA,SAAS;IAClB;WAlCIH;;AAqCN;;CAEC,GACD,IAAA,AAAMQ,+BAAN;;aAAMA;gCAAAA;QAOF,IAAI,CAACC,UAAU,GAAG;QAClB,IAAI,CAACC,WAAW,GAAG;QACnB,IAAI,CAACC,OAAO,GAAG;QACf,IAAI,CAACC,MAAM,GAAG,EAAE;;iBAVdJ;IAaJf,OAAAA,MAQC,GARDA,SAAAA,OAAOgB,UAAkB,EAAEC,WAAmB;QAC5C,IAAI,IAAI,CAACE,MAAM,CAACC,MAAM,GAAG,KAAK,IAAI,CAACH,WAAW,KAAKA,eAAe,IAAI,CAACD,UAAU,KAAKA,YAAY;YAChG;QACF;QACA,IAAI,CAACA,UAAU,GAAGA;QAClB,IAAI,CAACE,OAAO,GAAG,AAAC,CAAA,KAAKF,UAAS,IAAK;QACnC,IAAI,CAACC,WAAW,GAAGA;QACnB,IAAI,CAACE,MAAM,GAAG,EAAE;IAClB;IAEAlB,OAAAA,IAMC,GANDA,SAAAA;QACE,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAI,CAACiB,MAAM,CAACC,MAAM,EAAElB,IAAK;YAC3C,IAAI,IAAI,CAACiB,MAAM,CAACjB,EAAE,EAAE;oBAClB;iBAAA,iBAAA,IAAI,CAACiB,MAAM,CAACjB,EAAE,cAAd,qCAAA,eAAgBD,IAAI;YACtB;QACF;IACF;IAEAoB,OAAAA,UAQC,GARDA,SAAAA,WAAWC,GAAW,EAAEC,QAAgB;QACtC,IAAMC,QAAQ,AAAC,CAAA,AAACF,CAAAA,MAAM,IAAI,CAACJ,OAAO,AAAD,KAAM,IAAI,CAACD,WAAW,AAAD,IAAM,CAAA,AAACM,CAAAA,WAAW,IAAG,MAAQ,IAAI,IAAI,CAACN,WAAW;QACvG,IAAIQ,UAAU,IAAI,CAACN,MAAM,CAACK,MAAM;QAChC,IAAI,CAACC,SAAS;YACZA,UAAU,IAAIlB;YACd,IAAI,CAACY,MAAM,CAACK,MAAM,GAAGC;QACvB;QACA,OAAOA;IACT;WAvCIV;;AA0CN;;CAEC,GACD,IAAA,AAAMW,0BAAN;;aAAMA,UASQC,IAAiB;gCATzBD;QAUF,IAAI,CAACE,MAAM,GAAGC,IAAAA,sCAAiB,EAAC,IAAI,kCAAkC;QACtE,IAAI,CAACC,UAAU,GAAG;QAClB,IAAI,CAACR,GAAG,GAAG;QACX,IAAI,CAACK,IAAI,GAAGA;QACZ,IAAI,CAACI,SAAS,GAAG;;iBAdfL;IAiBJ1B,OAAAA,MAOC,GAPDA,SAAAA,OAAO8B,UAAkB;QACvB,IAAI,CAAC,IAAI,CAACF,MAAM,IAAI,IAAI,CAACE,UAAU,KAAKA,YAAY;YAClD,IAAI,CAACF,MAAM,GAAGC,IAAAA,sCAAiB,EAACC;QAClC;QACA,IAAI,CAACA,UAAU,GAAGA;QAClB,IAAI,CAACR,GAAG,GAAG;QACX,IAAI,CAACS,SAAS,GAAG;IACnB;IAEA9B,OAAAA,IAKC,GALDA,SAAAA,KAAK+B,KAAc;QACjB,IAAI,CAACA,OAAO;YACV,IAAI,CAACV,GAAG,GAAG;YACX,IAAI,CAACS,SAAS,GAAG;QACnB;IACF;IAEAE,OAAAA,OAWC,GAXDA,SAAAA,QAAQC,CAAS;QACf,IAAI,CAACN,MAAM,CAAC,IAAI,CAACN,GAAG,GAAG,GAAGY;QAC1B,IAAI,IAAI,CAACZ,GAAG,IAAI,IAAI,CAACQ,UAAU,EAAE;YAC/B,IAAI,IAAI,CAACH,IAAI,EAAE;gBACb,IAAI,CAACQ,KAAK;gBACV,IAAI,CAACb,GAAG,GAAG;gBACX,IAAI,CAACS,SAAS,GAAG,GAAG,0DAA0D;YAChF,OAAO;gBACL,IAAI,CAACT,GAAG,GAAG;YACb;QACF;IACF;IAEAa,OAAAA,KAQC,GARDA,SAAAA;QACE,IAAMC,OAAO,IAAI,CAACd,GAAG,GAAG,IAAI,CAACS,SAAS;QACtC,IAAIK,OAAO,KAAK,IAAI,CAACT,IAAI,EAAE;YACzB,oFAAoF;YACpF,IAAMU,QAAQC,IAAAA,+BAAU,EAAC,IAAI,CAACV,MAAM,CAACW,KAAK,CAAC,IAAI,CAACR,SAAS,EAAE,IAAI,CAACA,SAAS,GAAGK;YAC5E,IAAI,CAACT,IAAI,CAACa,KAAK,CAACH;YAChB,IAAI,CAACN,SAAS,GAAG,IAAI,CAACT,GAAG;QAC3B;IACF;IAEAmB,OAAAA,OAMC,GANDA,SAAAA,QAAQC,QAAgB;QACtB,IAAIpB,MAAM,IAAI,CAACA,GAAG,GAAGoB,WAAW;QAChC,IAAIpB,MAAM,GAAG;YACXA,OAAO,IAAI,CAACQ,UAAU;QACxB;QACA,OAAO,IAAI,CAACF,MAAM,CAACN,IAAI;IACzB;IAEAqB,OAAAA,SAWC,GAXDA,SAAAA,UAAUD,QAAgB,EAAEE,GAAW;QACrC,IAAItB,MAAM,IAAI,CAACA,GAAG,GAAGoB,WAAW;QAChC,IAAIpB,MAAM,GAAG;YACXA,OAAO,IAAI,CAACQ,UAAU;QACxB;QACA,IAAK,IAAI5B,IAAI,GAAGA,IAAI0C,KAAK1C,IAAK;YAC5B,IAAIoB,OAAO,IAAI,CAACQ,UAAU,EAAE;gBAC1BR,MAAM;YACR;YACA,IAAI,CAACW,OAAO,CAAC,IAAI,CAACL,MAAM,CAACN,MAAM;QACjC;IACF;IAEA;;GAEC,GACDuB,OAAAA,MAUC,GAVDA,SAAAA,OAAOC,MAAc,EAAEC,YAAoB,EAAEC,KAAa;QACxD,IAAMC,SAAS,IAAI,CAAC3B,GAAG,GAAG0B;QAC1B,IAAIC,SAAS,GAAG;YACd,4DAA4D;YAC5D,IAAMC,YAAY,CAACD;YACnB,IAAI,CAACrB,MAAM,CAACuB,IAAI,CAACL,QAAQC,cAAc,IAAI,CAACjB,UAAU,GAAGmB,QAAQ,IAAI,CAACnB,UAAU;YAChF,IAAI,CAACF,MAAM,CAACuB,IAAI,CAACL,QAAQC,eAAeG,WAAW,GAAGF,QAAQE;QAChE,OAAO;YACL,IAAI,CAACtB,MAAM,CAACuB,IAAI,CAACL,QAAQC,cAAcE,QAAQA,SAASD;QAC1D;IACF;WA1FItB;;AAgGC,IAAA,AAAMpC,4BAAN;;aAAMA,YAgCC8D,UAAuB;gCAhCxB9D;QAiCT,IAAI,CAAC+D,SAAS,GAAG,IAAI3B,UAAU0B;QAC/B,IAAI,CAAChD,YAAY,GAAG,IAAIkD,4BAAY;QAEpC,IAAI,CAACC,eAAe,GAAG7D,IAAAA,sBAAa,EAAC,MAAM8D,mBAAU,IAAIC,6BAAoB;QAC7E,IAAI,CAACC,aAAa,GAAGhE,IAAAA,sBAAa,EAAC,MAAM8D,mBAAU;QACnD,IAAI,CAACG,eAAe,GAAGjE,IAAAA,sBAAa,EAAC,MAAM8D,mBAAU;QACrD,IAAI,CAACI,eAAe,GAAGlE,IAAAA,sBAAa,EAAC,MAAM8D,mBAAU;QACrD,IAAI,CAACK,eAAe,GAAGnE,IAAAA,sBAAa,EAAC,MAAM8D,mBAAU;QACrD,IAAI,CAACM,kBAAkB,GAAGpE,IAAAA,sBAAa,EAAC,MAAM8D,mBAAU,IAAIC,6BAAoB;QAChF,IAAI,CAACM,cAAc,GAAG,EAAE;QACxB,IAAI,CAACC,WAAW,GAAGtE,IAAAA,sBAAa,EAAC,MAAMuE,0BAAiB,GAAGC,0BAAiB;QAC5E,IAAI,CAACC,eAAe,GAAG,IAAIrE,8BAAc,CAACsE,sBAAa;QACvD,IAAI,CAACC,UAAU,GAAG,IAAI7E;QACtB,IAAI,CAAC8E,aAAa,GAAG,IAAI9E;QACzB,IAAI,CAAC+E,cAAc,GAAG,IAAIxD;QAE1B,IAAK,IAAIb,IAAI,GAAGA,IAAIsE,2BAAkB,EAAEtE,IAAK;YAC3C,IAAI,CAAC6D,cAAc,CAAC7D,EAAE,GAAG,IAAIJ,8BAAc,CAAC2E,wBAAe;QAC7D;QAEA,IAAI,CAACC,cAAc,GAAG,CAAC;QACvB,IAAI,CAACC,mBAAmB,GAAG,CAAC;QAC5B,IAAI,CAACC,YAAY,GAAG;QAEpB,IAAI,CAACC,KAAK,GAAG;QACb,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAAC1D,QAAQ,GAAG;QAChB,IAAI,CAAC2D,QAAQ,GAAG;;iBA/DP5F;IAkEX;;GAEC,GACD6F,OAAAA,iBAQC,GARDA,SAAAA,kBAAkBT,cAAsB;QACtC,IAAIA,iBAAiB,GAAG,OAAO;QAC/B,IAAI,IAAI,CAACA,cAAc,KAAKA,gBAAgB;YAC1C,IAAI,CAACA,cAAc,GAAGA;YACtB,IAAI,CAACC,mBAAmB,GAAGS,KAAKC,GAAG,CAACX,gBAAgB;YACpD,IAAI,CAACrB,SAAS,CAACrD,MAAM,CAACoF,KAAKC,GAAG,CAAC,IAAI,CAACV,mBAAmB,EAAE,KAAK;QAChE;QACA,OAAO;IACT;IAEA;;GAEC,GACDW,OAAAA,SAUC,GAVDA,SAAAA,UAAUC,EAAU,EAAEC,EAAU,EAAEC,EAAU;QAC1C,IAAIF,KAAKG,8BAAqB,IAAIF,KAAK,KAAKC,KAAKhC,6BAAoB,EAAE;YACrE,OAAO;QACT;QACA,IAAM1D,eAAe,KAAK0F;QAC1B,IAAI,CAAClB,cAAc,CAACvE,MAAM,CAACwF,IAAID;QAC/B,IAAI,CAAClB,UAAU,CAACrE,MAAM,CAACD;QACvB,IAAI,CAACuE,aAAa,CAACtE,MAAM,CAACD;QAC1B,IAAI,CAAC6E,YAAY,GAAG7E,eAAe;QACnC,OAAO;IACT;IAEA;;GAEC,GACD4F,OAAAA,oBAIC,GAJDA,SAAAA,qBAAqBC,UAA+B;QAClD,IAAMC,QAAQC,IAAAA,wBAAe,EAACF;QAC9B,IAAI,CAAC,IAAI,CAACN,SAAS,CAACO,MAAMN,EAAE,EAAEM,MAAML,EAAE,EAAEK,MAAMJ,EAAE,GAAG,OAAO;QAC1D,OAAO,IAAI,CAACN,iBAAiB,CAACU,MAAMnB,cAAc;IACpD;IAEA;;GAEC,GACD,OAAQqB,iBAeP,GAfD,SAAQA;QACNrG,IAAAA,sBAAa,EAAC,IAAI,CAAC6D,eAAe;QAClC7D,IAAAA,sBAAa,EAAC,IAAI,CAACgE,aAAa;QAChChE,IAAAA,sBAAa,EAAC,IAAI,CAACiE,eAAe;QAClCjE,IAAAA,sBAAa,EAAC,IAAI,CAACkE,eAAe;QAClClE,IAAAA,sBAAa,EAAC,IAAI,CAACmE,eAAe;QAClCnE,IAAAA,sBAAa,EAAC,IAAI,CAACoE,kBAAkB;QACrCpE,IAAAA,sBAAa,EAAC,IAAI,CAACsE,WAAW;QAC9B,IAAI,CAACO,cAAc,CAACtE,IAAI;QACxB,IAAK,IAAIC,IAAIsE,2BAAkB,GAAG,GAAGtE,KAAK,GAAGA,IAAK;YAChD,IAAI,CAAC6D,cAAc,CAAC7D,EAAE,CAACD,IAAI;QAC7B;QACA,IAAI,CAACoE,UAAU,CAACpE,IAAI;QACpB,IAAI,CAACqE,aAAa,CAACrE,IAAI;QACvB,IAAI,CAACkE,eAAe,CAAClE,IAAI;IAC3B;IAEA;;GAEC,GACD+F,OAAAA,kBAOC,GAPDA,SAAAA;QACE,IAAI,CAACD,iBAAiB;QACtB,IAAI,CAAClB,KAAK,GAAG;QACb,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACC,IAAI,GAAG;IACd;IAEA;;GAEC,GACDgB,OAAAA,eAGC,GAHDA,SAAAA;QACE,IAAI,CAAC5C,SAAS,CAACpD,IAAI,CAAC;QACpB,IAAI,CAACiF,QAAQ,GAAG;IAClB;IAEA;;;GAGC,GACDgB,OAAAA,gBAQC,GARDA,SAAAA,iBAAiBC,IAAY;QAC3B,IAAK,IAAIjG,IAAI,GAAGA,IAAIiG,KAAK/E,MAAM,EAAElB,IAAK;YACpC,IAAI,CAACmD,SAAS,CAACpB,OAAO,CAACkE,IAAI,CAACjG,EAAE;QAChC;QACA,IAAI,CAACgF,QAAQ,IAAIiB,KAAK/E,MAAM;QAC5B,IAAI+E,KAAK/E,MAAM,GAAG,GAAG;YACnB,IAAI,CAACG,QAAQ,GAAG4E,IAAI,CAACA,KAAK/E,MAAM,GAAG,EAAE;QACvC;IACF;IAEA;;GAEC,GACDgF,OAAAA,cAEC,GAFDA,SAAAA;QACE,IAAI,CAAC/C,SAAS,CAAClB,KAAK;IACtB;IAEA;;;;;;;GAOC,GACDkE,OAAAA,cA+GC,GA/GDA,SAAAA,eAAeC,KAAa,EAAEC,WAAmB,EAAEC,OAAe;YAAExE,QAAAA,iEAAQ;QAC1E,IAAI,CAAC5B,YAAY,CAACqG,QAAQ,CAACH,OAAOC;QAElC,IAAI,CAACvE,OAAO;YACV,IAAI,CAACqB,SAAS,CAACpD,IAAI,CAAC;YACpB,IAAI,CAAC8F,iBAAiB;YACtB,IAAI,CAAClB,KAAK,GAAG;YACb,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAAC1D,QAAQ,GAAG;YAChB,IAAI,CAAC2D,QAAQ,GAAG;QAClB,OAAO;YACL,IAAI,CAAC7B,SAAS,CAACpD,IAAI,CAAC;QACtB;QAEA,IAAIyG,SAAS;QACb,IAAIC,SAAS,IAAI,CAACzB,QAAQ;QAE1B,MAAOwB,SAASF,QAAS;YACvB,IAAMnG,WAAWsG,SAAS,IAAI,CAAC/B,YAAY;YAE3C,IAAI,IAAI,CAACxE,YAAY,CAACE,SAAS,CAAC,IAAI,CAACiD,eAAe,EAAE,AAAC,CAAA,IAAI,CAACsB,KAAK,IAAIpB,6BAAoB,AAAD,IAAKpD,cAAc,GAAG;gBAC5G,UAAU;gBACV,IAAMuG,WAAW,IAAI,CAACrC,cAAc,CAAClD,UAAU,CAACsF,QAAQ,IAAI,CAACpF,QAAQ;gBACrE,IAAI,CAACsF,IAAAA,yBAAgB,EAAC,IAAI,CAAChC,KAAK,GAAG;oBACjC,IAAI,CAACtD,QAAQ,GAAGqF,SAASjG,mBAAmB,CAAC,IAAI,CAACP,YAAY,EAAE,IAAI,CAACiD,SAAS,CAACZ,OAAO,CAAC,IAAI,CAACqC,IAAI;gBAClG,OAAO;oBACL,IAAI,CAACvD,QAAQ,GAAGqF,SAASnG,YAAY,CAAC,IAAI,CAACL,YAAY;gBACzD;gBACA,IAAI,CAACiD,SAAS,CAACpB,OAAO,CAAC,IAAI,CAACV,QAAQ;gBACpCmF;gBACA,IAAI,CAAC7B,KAAK,GAAGiC,IAAAA,wBAAe,EAAC,IAAI,CAACjC,KAAK;gBACvC8B;YACF,OAAO;gBACL,eAAe;gBACf,IAAI/D,MAAAA,KAAAA;gBAEJ,IAAI,IAAI,CAACxC,YAAY,CAACE,SAAS,CAAC,IAAI,CAACoD,aAAa,EAAE,IAAI,CAACmB,KAAK,MAAM,GAAG;oBACrE,YAAY;oBACZjC,MAAM;oBACN,IAAI,IAAI,CAACxC,YAAY,CAACE,SAAS,CAAC,IAAI,CAACqD,eAAe,EAAE,IAAI,CAACkB,KAAK,MAAM,GAAG;wBACvE,IAAI,IAAI,CAACzE,YAAY,CAACE,SAAS,CAAC,IAAI,CAACwD,kBAAkB,EAAE,AAAC,CAAA,IAAI,CAACe,KAAK,IAAIpB,6BAAoB,AAAD,IAAKpD,cAAc,GAAG;4BAC/G,IAAI,CAACwE,KAAK,GAAGkC,IAAAA,4BAAmB,EAAC,IAAI,CAAClC,KAAK;4BAC3CjC,MAAM;wBACR;oBACF,OAAO;wBACL,IAAIF,WAAAA,KAAAA;wBACJ,IAAI,IAAI,CAACtC,YAAY,CAACE,SAAS,CAAC,IAAI,CAACsD,eAAe,EAAE,IAAI,CAACiB,KAAK,MAAM,GAAG;4BACvEnC,WAAW,IAAI,CAACqC,IAAI;wBACtB,OAAO;4BACL,IAAI,IAAI,CAAC3E,YAAY,CAACE,SAAS,CAAC,IAAI,CAACuD,eAAe,EAAE,IAAI,CAACgB,KAAK,MAAM,GAAG;gCACvEnC,WAAW,IAAI,CAACsC,IAAI;4BACtB,OAAO;gCACLtC,WAAW,IAAI,CAACuC,IAAI;gCACpB,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;4BACvB;4BACA,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;wBACvB;wBACA,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;wBACrB,IAAI,CAACA,IAAI,GAAGpC;oBACd;oBACA,IAAIE,QAAQ,GAAG;wBACbA,MAAMoE,qBAAY,GAAG,IAAI,CAAC1C,aAAa,CAACnE,MAAM,CAAC,IAAI,CAACC,YAAY,EAAEC;wBAClE,IAAI,CAACwE,KAAK,GAAGoC,IAAAA,uBAAc,EAAC,IAAI,CAACpC,KAAK;oBACxC;gBACF,OAAO;oBACL,eAAe;oBACf,IAAI,CAACI,IAAI,GAAG,IAAI,CAACD,IAAI;oBACrB,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;oBACrB,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;oBACrBlC,MAAMoE,qBAAY,GAAG,IAAI,CAAC3C,UAAU,CAAClE,MAAM,CAAC,IAAI,CAACC,YAAY,EAAEC;oBAC/D,IAAI,CAACwE,KAAK,GAAGqC,IAAAA,yBAAgB,EAAC,IAAI,CAACrC,KAAK;oBAExC,IAAMsC,UAAU,IAAI,CAACpD,cAAc,CAACqD,IAAAA,yBAAgB,EAACxE,KAAK,CAACzC,MAAM,CAAC,IAAI,CAACC,YAAY;oBACnF,IAAI+G,WAAWE,4BAAmB,EAAE;wBAClC,IAAMC,gBAAgB,AAACH,CAAAA,WAAW,CAAA,IAAK;wBACvC,IAAI,CAACrC,IAAI,GAAG,AAAC,CAAA,IAAKqC,UAAU,CAAC,KAAMG;wBACnC,IAAIH,UAAUjD,0BAAiB,EAAE;4BAC/B,IAAI,CAACY,IAAI,IAAIyC,IAAAA,sCAAsB,EAAC,IAAI,CAACvD,WAAW,EAAE,IAAI,CAACc,IAAI,GAAGqC,UAAU,GAAG,IAAI,CAAC/G,YAAY,EAAEkH;wBACpG,OAAO;4BACL,IAAI,CAACxC,IAAI,IAAI,IAAI,CAAC1E,YAAY,CAACoH,gBAAgB,CAACF,gBAAgBlD,sBAAa,KAAKA,sBAAa;4BAC/F,IAAI,CAACU,IAAI,IAAI,IAAI,CAACX,eAAe,CAACsD,aAAa,CAAC,IAAI,CAACrH,YAAY;4BACjE,IAAI,IAAI,CAAC0E,IAAI,GAAG,GAAG;gCACjB,IAAI,IAAI,CAACA,IAAI,KAAK,CAAC,GAAG;gCACtB,MAAM,IAAI4C,MAAM;4BAClB;wBACF;oBACF,OAAO;wBACL,IAAI,CAAC5C,IAAI,GAAGqC;oBACd;gBACF;gBAEA,IAAI,IAAI,CAACrC,IAAI,IAAI6B,UAAU,IAAI,CAAC7B,IAAI,IAAI,IAAI,CAACH,mBAAmB,EAAE;oBAChE,MAAM,IAAI+C,MAAM;gBAClB;gBAEA,mBAAmB;gBACnB,IAAK,IAAIxH,IAAI,GAAGA,IAAI0C,KAAK1C,IAAK;oBAC5B,IAAMgC,IAAI,IAAI,CAACmB,SAAS,CAACZ,OAAO,CAAC,IAAI,CAACqC,IAAI;oBAC1C,IAAI,CAACzB,SAAS,CAACpB,OAAO,CAACC;oBACvBwE;gBACF;gBACAC,UAAU/D;gBACV,IAAI,CAACrB,QAAQ,GAAG,IAAI,CAAC8B,SAAS,CAACZ,OAAO,CAAC;YACzC;QACF;QAEA,IAAI,CAACyC,QAAQ,GAAGyB;QAChB,OAAOD;IACT;IAEA;;;;;;;GAOC,GACDvG,OAAAA,MAiHC,GAjHDA,SAAAA,OAAOmG,KAAa,EAAEC,WAAmB,EAAEC,OAAe;YAAExE,QAAAA,iEAAQ;QAClE,IAAI,CAAC5B,YAAY,CAACqG,QAAQ,CAACH,OAAOC;QAElC,IAAI,CAACvE,OAAO;YACV,IAAI,CAACqB,SAAS,CAACpD,IAAI,CAAC;YACpB,IAAI,CAAC8F,iBAAiB;YACtB,IAAI,CAAClB,KAAK,GAAG;YACb,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAACC,IAAI,GAAG;YACZ,IAAI,CAAC1D,QAAQ,GAAG;YAChB,IAAI,CAAC2D,QAAQ,GAAG;QAClB,OAAO;YACL,uEAAuE;YACvE,IAAI,CAAC7B,SAAS,CAACpD,IAAI,CAAC;QACtB;QAEA,IAAM6C,SAASjB,IAAAA,sCAAiB,EAAC2E;QACjC,IAAIE,SAAS;QACb,IAAIC,SAAS,IAAI,CAACzB,QAAQ;QAE1B,MAAOwB,SAASF,QAAS;YACvB,IAAMnG,WAAWsG,SAAS,IAAI,CAAC/B,YAAY;YAE3C,IAAI,IAAI,CAACxE,YAAY,CAACE,SAAS,CAAC,IAAI,CAACiD,eAAe,EAAE,AAAC,CAAA,IAAI,CAACsB,KAAK,IAAIpB,6BAAoB,AAAD,IAAKpD,cAAc,GAAG;gBAC5G,UAAU;gBACV,IAAMuG,WAAW,IAAI,CAACrC,cAAc,CAAClD,UAAU,CAACsF,QAAQ,IAAI,CAACpF,QAAQ;gBACrE,IAAI,CAACsF,IAAAA,yBAAgB,EAAC,IAAI,CAAChC,KAAK,GAAG;oBACjC,IAAI,CAACtD,QAAQ,GAAGqF,SAASjG,mBAAmB,CAAC,IAAI,CAACP,YAAY,EAAE,IAAI,CAACiD,SAAS,CAACZ,OAAO,CAAC,IAAI,CAACqC,IAAI;gBAClG,OAAO;oBACL,IAAI,CAACvD,QAAQ,GAAGqF,SAASnG,YAAY,CAAC,IAAI,CAACL,YAAY;gBACzD;gBACA,IAAI,CAACiD,SAAS,CAACpB,OAAO,CAAC,IAAI,CAACV,QAAQ;gBACpCuB,MAAM,CAAC4D,SAAS,GAAG,IAAI,CAACnF,QAAQ;gBAChC,IAAI,CAACsD,KAAK,GAAGiC,IAAAA,wBAAe,EAAC,IAAI,CAACjC,KAAK;gBACvC8B;YACF,OAAO;gBACL,eAAe;gBACf,IAAI/D,MAAAA,KAAAA;gBAEJ,IAAI,IAAI,CAACxC,YAAY,CAACE,SAAS,CAAC,IAAI,CAACoD,aAAa,EAAE,IAAI,CAACmB,KAAK,MAAM,GAAG;oBACrE,YAAY;oBACZjC,MAAM;oBACN,IAAI,IAAI,CAACxC,YAAY,CAACE,SAAS,CAAC,IAAI,CAACqD,eAAe,EAAE,IAAI,CAACkB,KAAK,MAAM,GAAG;wBACvE,IAAI,IAAI,CAACzE,YAAY,CAACE,SAAS,CAAC,IAAI,CAACwD,kBAAkB,EAAE,AAAC,CAAA,IAAI,CAACe,KAAK,IAAIpB,6BAAoB,AAAD,IAAKpD,cAAc,GAAG;4BAC/G,IAAI,CAACwE,KAAK,GAAGkC,IAAAA,4BAAmB,EAAC,IAAI,CAAClC,KAAK;4BAC3CjC,MAAM;wBACR;oBACF,OAAO;wBACL,IAAIF,WAAAA,KAAAA;wBACJ,IAAI,IAAI,CAACtC,YAAY,CAACE,SAAS,CAAC,IAAI,CAACsD,eAAe,EAAE,IAAI,CAACiB,KAAK,MAAM,GAAG;4BACvEnC,WAAW,IAAI,CAACqC,IAAI;wBACtB,OAAO;4BACL,IAAI,IAAI,CAAC3E,YAAY,CAACE,SAAS,CAAC,IAAI,CAACuD,eAAe,EAAE,IAAI,CAACgB,KAAK,MAAM,GAAG;gCACvEnC,WAAW,IAAI,CAACsC,IAAI;4BACtB,OAAO;gCACLtC,WAAW,IAAI,CAACuC,IAAI;gCACpB,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;4BACvB;4BACA,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;wBACvB;wBACA,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;wBACrB,IAAI,CAACA,IAAI,GAAGpC;oBACd;oBACA,IAAIE,QAAQ,GAAG;wBACbA,MAAMoE,qBAAY,GAAG,IAAI,CAAC1C,aAAa,CAACnE,MAAM,CAAC,IAAI,CAACC,YAAY,EAAEC;wBAClE,IAAI,CAACwE,KAAK,GAAGoC,IAAAA,uBAAc,EAAC,IAAI,CAACpC,KAAK;oBACxC;gBACF,OAAO;oBACL,eAAe;oBACf,IAAI,CAACI,IAAI,GAAG,IAAI,CAACD,IAAI;oBACrB,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;oBACrB,IAAI,CAACA,IAAI,GAAG,IAAI,CAACD,IAAI;oBACrBlC,MAAMoE,qBAAY,GAAG,IAAI,CAAC3C,UAAU,CAAClE,MAAM,CAAC,IAAI,CAACC,YAAY,EAAEC;oBAC/D,IAAI,CAACwE,KAAK,GAAGqC,IAAAA,yBAAgB,EAAC,IAAI,CAACrC,KAAK;oBAExC,IAAMsC,UAAU,IAAI,CAACpD,cAAc,CAACqD,IAAAA,yBAAgB,EAACxE,KAAK,CAACzC,MAAM,CAAC,IAAI,CAACC,YAAY;oBACnF,IAAI+G,WAAWE,4BAAmB,EAAE;wBAClC,IAAMC,gBAAgB,AAACH,CAAAA,WAAW,CAAA,IAAK;wBACvC,IAAI,CAACrC,IAAI,GAAG,AAAC,CAAA,IAAKqC,UAAU,CAAC,KAAMG;wBACnC,IAAIH,UAAUjD,0BAAiB,EAAE;4BAC/B,IAAI,CAACY,IAAI,IAAIyC,IAAAA,sCAAsB,EAAC,IAAI,CAACvD,WAAW,EAAE,IAAI,CAACc,IAAI,GAAGqC,UAAU,GAAG,IAAI,CAAC/G,YAAY,EAAEkH;wBACpG,OAAO;4BACL,IAAI,CAACxC,IAAI,IAAI,IAAI,CAAC1E,YAAY,CAACoH,gBAAgB,CAACF,gBAAgBlD,sBAAa,KAAKA,sBAAa;4BAC/F,IAAI,CAACU,IAAI,IAAI,IAAI,CAACX,eAAe,CAACsD,aAAa,CAAC,IAAI,CAACrH,YAAY;4BACjE,IAAI,IAAI,CAAC0E,IAAI,GAAG,GAAG;gCACjB,IAAI,IAAI,CAACA,IAAI,KAAK,CAAC,GAAG,OAAO,aAAa;gCAC1C,MAAM,IAAI4C,MAAM;4BAClB;wBACF;oBACF,OAAO;wBACL,IAAI,CAAC5C,IAAI,GAAGqC;oBACd;gBACF;gBAEA,IAAI,IAAI,CAACrC,IAAI,IAAI6B,UAAU,IAAI,CAAC7B,IAAI,IAAI,IAAI,CAACH,mBAAmB,EAAE;oBAChE,MAAM,IAAI+C,MAAM;gBAClB;gBAEA,mBAAmB;gBACnB,IAAK,IAAIxH,IAAI,GAAGA,IAAI0C,KAAK1C,IAAK;oBAC5B,IAAMgC,IAAI,IAAI,CAACmB,SAAS,CAACZ,OAAO,CAAC,IAAI,CAACqC,IAAI;oBAC1C,IAAI,CAACzB,SAAS,CAACpB,OAAO,CAACC;oBACvBY,MAAM,CAAC4D,SAAS,GAAGxE;gBACrB;gBACAyE,UAAU/D;gBACV,IAAI,CAACrB,QAAQ,GAAG,IAAI,CAAC8B,SAAS,CAACZ,OAAO,CAAC;YACzC;QACF;QAEA,IAAI,CAACyC,QAAQ,GAAGyB;QAChB,OAAO7D;IACT;WAtZWxD;;AAiaN,SAASC,WAAW+G,KAAa,EAAEV,UAA+B,EAAEY,OAAe,EAAEpD,UAAuB;IACjH,IAAM3B,UAAU,IAAInC,YAAY8D;IAChC3B,QAAQkE,oBAAoB,CAACC;IAC7B,IAAIxC,YAAY;QACd,8CAA8C;QAC9C,IAAMuE,eAAelG,QAAQ4E,cAAc,CAACC,OAAO,GAAGE,SAAS;QAC/D/E,QAAQ2E,cAAc;QACtB,OAAOuB;IACT;IACA,kEAAkE;IAClE,OAAOlG,QAAQtB,MAAM,CAACmG,OAAO,GAAGE,SAAS;AAC3C"}
|