JavaScriptでLZMA decoderを810 bytesで書く

## LZMAとは
LZ法と二値Range符号を組み合わせた汎用圧縮programで、高い圧縮率を誇っていらっしゃいます。圧縮速度は控え目ですが、伸長速度は超特急です。
言わずと知れた7zip、RAR、FreeArc等の書庫製造噐で採用されています。つまりあまりにも高性能過ぎるかもしれないので、皆さん遠慮なくLZMAを酷使無双し、こき使いまくってLZMA中毒重症患者になりましょうって話な訳がありません。
[圧縮編の記事](https://qiita.com/mashuel/items/01420a8b22b58d74d729)では圧縮力を体験できます。
## decoder
都合上Base64形式で掲載。復号すればきっちり828bytesとなります(制御文字多数混在)。関数名は`f`です。ちなみに大域変数 `_` が存在します。
828 bytes版
```
Zm9yKGY9JzoxVjw8VVVlVC0tUyxuUik6UTUsUD4+Pk9oT04sY00yNTY7THArfmJLPmE/SmE9N0pJaz1IZm9yKEc7RztGKytdRTEpRDFELEN8fChCZihsLGRBdCx0PXZAMTYrH10sHh5hKh9kKSkdKHUsHDpyHDMsYSofGz1kGik7GT1jGChmWxdlPRY7ZDxMKRU9HGFNKT0+FD1iLGI9E2w9b1twRT0SPTERUzspEHVbYV0PHmEpPygOaWYoDGVsc2V7C3JldHVybiAJHmQpKzIsSQhSPW5VOHxzW2lFB2QrGisGZhcFKUcVBkEpBD5lO2IrGFQrKykGGD0FNh5kAyxOMjRCaFU9OAcZAhR7dmFyIGQ9AWYBdVswHhZkLzksZgEPQg8RMDI0GWMaKihOQ2MYPm5PMD8oaBgsDys9MjA0OC1kT1AwUShoLRhSLRgsDy0aT1BEAgljfSxxFGYcMCk/ZhxEPx9yHDgsRBsyNkQrOBs1Q3IBMSwWYUZhEAZmHGQrYxkJMVReZH0scz11LHQsdix3GiU5LGosbFIsbRFUL1BnEVQlUHAaPWE9MCxiLG89Wx5oETZ8Z1NVOCxpETgtaCxrRmgQZltoXT1bXQdGO2Q9cCZtLUQMBTAdewwWBTEeYSkpBTIOBTMOBTQOFmosaj10URZAURZ2LEgwLHYTZVEoSCEFNR0mJihJOTpDa0JIcRc5CDhWMRkLSHEXOAg3VjAsaj1ALHYTchc3HjYsNj5rP2stMlU2VjkyGQxiPjMpDHU9Yk8xTRMoMnxiJkRVU3UsZBE0PmMpR2w9YiszMS1jO3UDK2wZC0c7NDx1EE4RTT1uLU4zMVItPWgmU2MsBi1jAkdiKxpVNCxkETs0AxkMYjwwKQlvfX1HFks7axASb1tlRX0LbD1mWx8obE84LXd8KHAmZylVdykeZBE7DDc+YQQ7C0cWb1tLXRUMSGVPNyYxLGVVESwGGD1BfGsrMVU4KU1eawR9EmQtTGEtPTRKYVYwSjM6Nn19JztfPS9bAS0fQC1WXS8uZXhlYyhmKTspd2l0aChmLnNwbGl0KF8pKWY9am9pbihzaGlmdCgpKTtldmFsKGYp
```
2024.2.11更新 821 bytes版(関数1個削減)
```
Zm9yKGY9J3IoV2s9Vj4+PlVoVVQ8PFNTZVI6MVExLFAtLU8pOk5wK35iTWRVNSxMPmE/S2E9N0tKMjU2O0ktPUgrPUd8fChGZm9XRTtFO0QxKUMxQyxCKytdQXQsdD12QGZbHyxkHik7HWYoHGM9GzE2KxplPRljLBg7ZDxJKRddLBYWYSk/KBU9YixiPRRsPW9bcEE9ExZhKhpkKSkSPTERdVthXRBPOykPOlcYMx4qGg5pHAxlbHNlewtyZXR1cm4gCSxuPW5TOHxzW2lBCGRHZCsHHB8GKUUXBxxsHikFPmU7YkdjUisrKQc9GwY2FmQELFQyNEZoUz04CB0DPSh1LGEsYyk9Pnt2YXIgZD0CFlYcGDApPxwYQz8aVxg4LEMOMjZDKzgONUJrRzIsSgFmAnVbMBYZZC85LGYCEEYQETAyNB0bZCooVEIbYz5uVTA/KGg9GBBHMjA0OC1MME4oaEgYbkgYEEhMQwMJY30scgJQGWFEYQ8HHHUeK2MdCTFSXmR9LHM9dSx0LHYsdz1kJTksaixsLG4sbRFSLzUsZxFSJTUscD1kPWE9MCxiLG89WxZoETZ8Z09TOCxpETgtaCxrRGgPH2hdPVtdCEQ7ZD1wJm0tQwwGMBJ7DBkGMRZhKSkGMhUGMxUGNBUZaixqPXROGUBOGXYsVjAsdhRlTihWIQY1EiYmKEo5OkJrRhsfOQE4UTEdCxsfOAE3UTAsaj1ALHYUVx83FjYsNj5rP2stMlM2UTkyHQxiPjMpDHU9YlVQYxQoMnxiJkNTT3UeETQ+YylFbD1iKzMxLWM7dQQrbB0LRTs0PHUPVBEsG24tVDNQbkhoJk8YBy1jA0ViR2RTNB4ROzQEHQxiPDApCW99fUUZTTtrDxNvW2VBfQtsPR8aKGxVOC13fChwJmcpU3cpFmQROww3PmEFOwtFGW9bTV0XDFZlVTcmUGVTESwHPRscbB58aysxUzgpLGNeawV9E2QtSWFINEthUTBLMzo2fX0nO189L1sBLR9ALVddLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
2024.2.23更新818 bytes
```
Zm9yKGY9J3IoWGs9Vz4+PlZoVlU6MVQtLVMpOlJwK35iUWRWNSxQYixiPU8+YT9OYT03Tk0yNTY7TCxqPXRLLT1KKz1JfHwoSD0xRzw8RkdGZUVmb1hEO0Q7QzEpQjFCLEErK11AMSwfZlseLGQdKTscZigbZT0aMTYrGWM9GGMsFztkPEwpFl0sFRVhKT8oFGw9b1twQD0TFWEqGWQpKRI9dix2PU8RdVthXRBTOykPOlgXMx0qGQ5pGwxlbHNlewtyZXR1cm4gCSxuPW5GOHxzW2lACGRJZCsHGx4GKUQWBxtsHSkFPmU7YkljRmUrKykHPRgGNhVkBCxVMjRIaEY9OAgcAz0odSxhLGMpPT57dmFyIGQ9AhVXGxcwKT8bF0I/GVgXOCxCDjI2Qis4DjVBa0kyLE0BZgJ1WzAVGmQvOSxmAhBIEEcwMjQcGGQqKFVBGGM+blYwPyhoPRcQSTIwNDgtUDBSKGhKF25KFxBKUEIDCWN9LHICHxphQ2EPBxt1HStjHAlkXkV9LHM9dSx0LHYsdz1kJTksaixsLG4sbUUvNSxnRSU1LHA9ZD1hPTAsYixvPVsVaEc2fGdTRjgsaUc4LWgsa0NoDx5oXT1bXQhDO2Q9cCZtLUIMBjESewwGGlcwFWEpKQYyFAYzFAY0FBpqS1IadCx0PXZSZRFlUihXIQY1EiYmKE05OkFrSBgeOQE4VDEcCxgeOAE3VDBLLHQRWB43FTYsNj5rP2stMkY2VDkyHAxiPjMpDHU9YlYfGE8oMnxiJkJGU3UdRzQ+YylEbD1iKzMxLWM7dQQrbBwLRDs0PHUPVT0fGG4tVTMfbkpoJlMXBy1jA0RiSWRGNB1HOzQEHAxiPDApCW99fUQaUTtrDxNvW2VAfQtsPR4ZKGxWOC13fChwJmcpRncpFWRHOww3PmEFOwtEGm9bUV0WDFdlVjcmH2VGPR8HPRgbbB18aysxRjgpLGNeawV9E2QtTGFKNE5hVDBOMzo2fX0nO189L1sBLR9ALVhdLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
2024.3.18更新 815 bytes
```
Zm9yKGY9J3IoWWs9WD4+PldoV1Y6MVUtLVQpOlNwK35iUmRXNSxRYixiPVA+YT9PYT03T05hPTAsTTI1NjtMLT1LKz1KfHwoST0xSDw8R0hHZUZmb1lFO0U7RDEpQzFDLEIrK11BMSxAZlsfXSweKTsdZigcZT0bYywaMTYrGSxqPXQYYz0XLGQWO2Q8TCkVbD1vW3BBPRQ9dix2PVATVDspEh5hKhlkKSkRHmEpPygQOlkaMxYqGQ9pHA51W2FdDGVsc2V7C3JldHVybiAJLG49bkc4fHNbaUEIZEpkKwccHwYpRRUHHGwWKQU+ZTtiSmNHZSsrKQc9FwY2XRYELFYyNEloRz04CB0DPSh1LE1jKT0+e3ZhciBkPQIeWBxjKT8cGkM/GVkaOCxDDzI2Qys4DzVCa0oyLE4BZgIMLBtkLzksZgIMSQxIMDI0HRdkKihWQhdjPm5XMD8oaD0aDEoyMDQ4LVEwUyhoSxpuSxoMS1FDAwljfSxyAkAbYURhEgccdRYrYx0JZF5GfSxzPXUsdCx2LHc9ZCU5GCxsLG4sbUYvNSxnRiU1LHA9ZD1NYixvPVseaEg2fGdURzgsaUg4LWgsa0RoEh9oXT1bXQhEO2Q9cCZtLUMOBjERew4GG1gwHmEpKQYyEAYzEAY0EBtqGFMbdCx0PXZTZRNlUyhYIQY1ESYmKE45OkJrSRcfOQE4VTEdCxcfOAE3VTAYLHQTWR83HjYsNj5rP2stMkc2VTkyHQ5iPjMpDnU9YldAF1AoMnxiJkNHVHUWSDQ+YylFbD1iKzMxLWM7dQQrbB0LRTs0PHUSVj1AF24tVjNAbktoJlQaBy1jA0ViSmRHNBZIOzQEHQ5iPDApCW99fUUbUjtrEhRvW2VBfQtsPR8ZKGxXOC13fChwJmcpR3cpXRZIOw43PmEFOwtFG29bUl0VDlhlVzcmQGVHPUAHPRccbBZ8aysxRzgpLGNeawV9FGQtTGFLNE9hVTBPMzo2fX0nO189L1sBLR9ALVldLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
2024.11.2更新 812 bytes
```
Zm9yKGY9J3IoWGs9Vz4+PlZoVlU6MVQtLVMpOlJwK35iUWRWNSxQYixiPU8+YT9OYT03Tk0yNTY7TC09Sys9Snx8KEk9MUg8PEdIR2VGZm9YRTtFO0QxKUMxQyxCKytdQTEsQGZbH10sHik7HWYoHGU9G2MsGixqPXQZMTYrGB5hKhhkKSkXLGQWYz0VO2Q8TCkUbD1vW3BBPRM9dix2PU8SUzspETpYGjMWKhgQHmEpPygPaRwOdVthXQxlbHNlewtyZXR1cm4gCSxuPW5HOHxzW2lBCGRKZCsHHB8GKUUUBxxsFikFPmU7YkpjR2UrKykHPRUGNl0WBCxVMjRJaEc9OAgdAz0odSxhPTAsYyk9Pnt2YXIgZD0CHlccYyk/HBpDPxhYGjgsQxAyNkMrOBA1QmtKMixNAWYCDCwbZC85LGYCDEkMSDAyNB0VZCooVUIVYz5uVjA/KGg9GgxKMjA0OC1QMFIoaEsabksaDEtQQwMJY30scgJAG2FEYREHHHUWK2MdCWReRn0scz11LHQsdix3PWQlORksbCxuLG1GLzUsZ0YlNSxwPWQ9MCxiLG89Wx5oSDZ8Z1NHOCxpSDgtaCxrRGgRH2hdPVtdCEQ7ZD1wJm0tQw4GMRd7DgYbVzAeYSkpBjIPBjMPBjQPG2oZUht0LHQ9dlJlEmVSKFchBjUXJiYoTTk6QmtJFR85AThUMR0LFR84ATdUMBksdBJYHzceNiw2Pms/ay0yRzZUOTIdDmI+MykOdT1iVkAVTygyfGImQ0dTdRZIND5jKUVsPRhiLWM7dQQrbB0LRTs0PHURVT1AFW4tVTNAbktoJlMaBy1jA0ViSmRHNBZIOzQEHQ5iPDApCW99fUUbUTtrERNvW2VBfQtsPR8YKGxWOC13fChwJmcpR3cpXRZIOw43PmEFOwtFG29bUV0UDldlVjcmQGVHPUAHPRUcbBZ8aysxRzgpLGNeawV9E2QtTGFLNE5hVDBOMzo2fX0nO189L1sBLR9ALVhdLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
2025.2.6更新
```plain:810 bytes
Zm9yKGY9J3IoWGs9Vz4+PlZoVlU6MVQtLVMpOlJwK35iUWRWNSxQYixiPU8+YT9OYT03Tk0yNTY7TGZbSy09Sis9SXx8KEhdLGFHPTFGPDxFRkVlRDEpQzFDLEIrK11BMSxAKTsfZigeZT0dYywcZm9YGzsbOxosaj10GWM9GCxkFzE2KxZHKhZkKSkVO2Q8TCkUbD1vW3BBPRM9dix2PU8SUzspETpYHDMXKhYQRyk/KA9pHg51W2FdDGVsc2V7C3JldHVybiAJLG49bkU4fHNbaUEIZElkKwceSwYpGxQHHmwXKQU+ZTtiSWNFZSsrKQc9GAY2XRcELFUyNEhoRT04CB8DPSh1LGE9MCxjKT0+e3ZhciBkPQJdLFceYyk/HhxDPxZYHDgsQxAyNkMrOBA1QmtJMixNAWYCDCwdZC85LGYCDEgMRjAyNB8YZCooVUIYYz5uVjA/KGg9HAxJMjA0OC1QMFIoaEocbkocDEpQQwMJY30scgJAHWEaYREHHnUXK2MfCWReRH0scz11LHQsdix3PWQlORksbCxuLG1ELzUsZ0QlNSxwPWQ9MCxiLG89W10saEY2fGdTRTgsaUY4LWgsaxpoEUtoXT1bXQgaO2Q9cCZtLUMOBjEVew4GHVcwRykpBjIPBjMPBjQPHWoZUh10LHQ9dlJlEmVSKFchBjUVJiYoTTk6QmtIGEs4AThUMR8LGEs3ATdUMBksdBJYciw2LDY+az9rLTJFNlQ5Mh8OYj4zKQ51PWJWQBhPKDJ8YiZDRVN1F0Y0PmMpG2w9FmItYzt1BCtsHwsaNDx1EVU9QBhuLVUzQG5KaCZTHActYwMbYklkRTQXRjs0BB8OYjwwKQlvfX0bHVE7axETb1tlQX0LbD1LFihsVjgtd3wocCZnKUV3KV0XRjsONz5hBTsLGx1vW1FdFA5XZVY3JkBlRT1ABz0YHmwXfGsrMUU4KSxjXmsFfRNkLUxhSjROYVQwTjM6Nn19JztfPS9bAS0fQC1YXS8uZXhlYyhmKTspd2l0aChmLnNwbGl0KF8pKWY9am9pbihzaGlmdCgpKTtldmFsKGYp
```
```js:使用例
a=f([93,0,0,1,0,6,0,0,0,0,0,0,0,0,49,24,74,43,255,186,138,31,255,255,111,92]);
console.log(a,String.fromCharCode.apply(0,a))
```
第一引数に数値配列を渡せば良い。戻り値はArray Objectとなります。上記例では`[98,97,110,97,110,97]`が返されています。String.fromCharCodeに渡された結果`banana`という文字列が出現。
### 無圧縮版
圧縮版とは若干処理が異なる
```js:1057bytes
f=u=>{for(var a=0,b,c,d=u[0],e=d/9,f=(b,a,d=b[a]||(b[a]=1024),c=d*(h>>>11))=>(c=c>n>>>0?(h=c,b[a]+=2048-d>>5,0):(h-=c,n-=c,b[a]-=d>>5,1),h>>24||(h<<=8,n=n<<8|u[i++]),c),q=(b,a)=>f(b,0)?f(b,1)?18+r(b,8,1):10+r(b,3,a*16+261):2+r(b,3,a*16+511),r=(b,a,c,d=1,e=a)=>{for(;a--;)d+=d+f(b,d+c);return 1<<e^d},s,t,v,w=d%9,j,l,n,m=1<<e/5,g=1<<e%5,p=d=0,o=[],h=16|g--<<8,i=18-h,k;h--;n=n<<8|u[i++])f[h]=[];for(;;d=p&m-1)if(f(f[1],s=a*16+d)){if(f(f[e=k=0],a))f(f[2],a)?(f(f[3],a)?(f(f[4],a)?(e=j,j=t):e=t,t=v):e=v,v=b,b=e):(k=!f(f[5],s))&&(a=7>a?9:11),k||(k=q(f[9],d),a=7>a?8:11);else{k=q(f[8],d),a=7>a?7:10,j=t,t=v,v=b,b=r(f[7],6,6>k?k-2<<6:192);if(b>3){if(s=b>>1,d=14>b,l=31-b+(b=(2|b&1)<<--s),!d){for(l=0;4<s--;d+=d-c)h>>>=1,c=n-h>>>31,n-=h&--c,h>>24||(h<<=8,n=n<<8|u[i++]);b+=d<<++s}for(d=1;s>e;b+=c<<e++)d+=d+=c=f(f[6],d+l);if(b<0)return o}}for(e=p+~b;k--;)l=o[p++]=o[e++]}else{l=f[16+(l>>8-w|(p&g)<<w)],d=1;if(7>a)for(;d<256;)d+=d+f(l,d);else{for(e=o[p+~b];d<256;)if(k=e>>7&1,e+=e,d+=d+=c=f(l,d|k+1<<8),c^k)for(;d<256;)d+=d+f(l,d)}l=o[p++]=d-256;a-=4>a?a:9<a?6:3}}
```
```js:1049 bytes
f=u=>{for(var a=0,b,c,d=u[0],e=d/9,f=(b,a,d=b[a]||(b[a]=1024),c=d*(h>>>11))=>(c=c>n>>>0?(h=c,b[a]+=2048-d>>5,0):(h-=c,n-=c,b[a]-=d>>5,1),h>>24||(h<<=8,n=n<<8|u[i++]),c),q=(b,a)=>f(b,0)?f(b,1)?18+r(b,8,1):10+r(b,3,a*16+261):2+r(b,3,a*16+511),r=(b,a,c,d=1,e=a)=>{for(;a--;)d+=d+f(b,d+c);return 1<<e^d},s,t,v,w=d%9,j,l,n,m=1<<e/5,g=1<<e%5,p=d=0,o=[],h=8|g--<<8,i=18-h,k;h--;n=n<<8|u[i++])f[h]=[];for(;;d=p&m-1)if(f(f[1],s=a*16+d)){if(f(f[e=k=0],a))f(f[2],a)?(f(f[3],a)?(f(f[4],a)?(e=j,j=t):e=t,t=v):e=v,v=b,b=e):(k=!f(f[5],s))&&(a=7>a?9:11),k||(k=q(f[7],d),a=7>a?8:11);else{k=q(f[6],d),a=7>a?7:10,j=t,t=v,v=b,b=r(r,6,6>k?k-2<<6:192);if(b>3){if(s=b>>1,d=14>b,l=16-b+(b=(2|b&1)<<--s),!d){for(l=0;4<s--;d+=d-c)h>>>=1,c=n-h>>>31,n-=h&--c,h>>24||(h<<=8,n=n<<8|u[i++]);b+=d<<++s}for(d=1;s>e;b+=c<<e++)d+=d+=c=f(q,d+l);if(b<0)return o}}for(e=p+~b;k--;)l=o[p++]=o[e++]}else{l=f[8+(l>>8-w|(p&g)<<w)],d=1;if(7>a)for(;d<256;)d+=d+f(l,d);else{for(e=o[p+~b];d<256;)if(k=e>>7&1,e+=e,d+=d+=c=f(l,d|k+1<<8),c^k)for(;d<256;)d+=d+f(l,d)}l=o[p++]=d-256;a-=4>a?a:9<a?6:3}}
```
## 制約
本家LZMA decoderとは異なり、圧縮元の大きさや辞書長を読む機能はありません。従って圧縮時に`-eos` optionが有効な形式にしておく必要があります(End of stream marker刻印)。
それから展開可能な大きさもArray Objectの限界値までとなります。
## 動作検証
<p class=codepen data-default-tab=result data-height=300 data-slug-hash=WNmXJbG data-user=xezz style="height:300px;box-sizing:border-box;display:flex;align-items:center;justify-content:center;border:2px solid;margin:1em 0;padding:1em"><span>See the Pen <a href=https://codepen.io/xezz/pen/WNmXJbG>Untitled</a> by xezz (<a href=https://codepen.io/xezz>@xezz</a>) on <a href=https://codepen.io>CodePen</a>.</span></p><script async src=https://cpwebassets.codepen.io/assets/embed/ei.js></script>

## 整形版+ほのかな説明的解説
```js
f =(u,a,c)=>{
	var d=u[0],e=d / 9,
		f =(u,a,c)=>{// 1 bit復号
			var d=u[a] ||(u[a]=1024);
			c=d *(h >>> 11),c=c > n >>> 0 ?(h=c,u[a] +=2048 - d >>> 5,0):(h -=c,n -=c,u[a] -=d >>> 5,1),h >>> 24 ||(h <<=8,n=n << 8 | s[i++]);
			return c
		},
		r =(u,a,c)=>{// n bit復号
			var d=1,e=a;
			for(;a--;)d +=d + f(u,d + c);
			return 1 << e ^ d
		},
		s=u,t,v,w=d % 9,
		j,l,n,m=1 << e / 5,
		g=1 << e % 5,
		p=d=a=0,
		b,o=[],
		h=16 | g-- << 8,
		i=18 - h,k;
	// modelとrange coder初期化
	for(;h--;)f[h]=[],n=n << 8 | s[i++];
	// main loop
	for(;;d=p & m - 1)
		if(f(f[1],a * 16 + d)){// 辞書から復元
			if(f(f[e=k=0],a))// repeated offset
				f(f[2],a)?(f(f[3],a)?(f(f[4],a)?(e=j,j=t): e=t,t=v): e=v,v=b,b=e):(k=!f(f[5],a * 16 + d))&&(a=7 > a ? 9 : 11),
				k||(c=f[9],k=f(c,0)? f(c,1)? 16 + r(c,8,1): r(c,3,d * 16 + 261)+ 8 : r(c,3,d * 16 + 511),k+=2,a=7 > a ? 8 : 11);
			else{
				// 一致長と距離
				c=f[8],k=f(c,0)? f(c,1)? 16 + r(c,8,1): r(c,3,d * 16 + 261)+ 8 : r(c,3,d * 16 + 511),k+=2,a=7 > a ? 7 : 10,j=t,t=v,v=b,b=r(f[7],6,6 > k ? k - 2 << 6 : 192);
				if(b > 3)
					if(u=b >>> 1,c=b,b =(2 | b & 1)<< --u,d=14 > c)
						for(l=16+b-c;u > e;b +=c << e++)d +=d +=c=f(f[6],d + l);
					else{
						for(;4 < u--;)h >>>=1,c=n - h >>> 31,n -=h & --c,d +=d + -c,h >>> 24 ||(h <<=8,n=n << 8 | s[i++]);
						for(b +=d << 4,d=1;4 > e;b +=c << e++)d +=d +=c=f(f[6],d);
						if(b < 0)return o
					}
			}
			for(e=p + ~b;k--;)l=o[p++]=o[e++]
		}else{// 1文字復元
			l=f[16 +(l >>> 8 - w |(p & g)<< w)],d=1;
			if(7 > a)
				for(;d < 256;)d +=d + f(l,d);
			else{
				for(e=o[p + ~b];d < 256;)
					if(k=e >>> 7 & 1,e <<=1,d +=d +=c=f(l,d | k + 1 << 8),c ^ k)
						for(;d < 256;)d +=d + f(l,d)
			}
			l=o[p++]=d - 256;
			a -=4 > a ? a : 10 > a ? 3 : 6
		}
}
```
よく見ると分かりますが、無駄な文字が幾つか混入しています。`for`に`var`を入れて変数宣言してないのも気になる所ですが、これらを圧縮する上ではその方が良いのです([RegPack](https://siorki.github.io/regPack.html)を改造した私家版で圧縮します)。
ついでにhtml+jsで974 bytes版も作ってみました(例によってBase64変換)。js1kでも通用する変態program。関数`f`の仕様は微妙に変更。
```
PGlucHV0IHR5cGU9ZmlsZSBvbmlucHV0PSdmb3IoZj1gPj4+cWhxcEE9bToxay0tfyk6X3JyYXlabmV3IFlkcTUsWD5hP1dhPTdXVkwrfmJUMjU2O1MpKVFyKFAtPU4rPU18fChLPTFKPDxJSkllSGZvUEc7RztGMSlFMUUsRCsrXUMxLCRmWyNdLCJmKB9pHx5lPR1jLBwxNisbLGo9dBopOxljPRgsZBc7ZDxTKRZsPW9bTEM9FT12LHY9YixiPRR/OykTImEqG2RREiJhKT8oESh1LGE9MCxjKT0+EDpQHDMXKhsPHyMOdVthXQxlbHNlewtyZXR1cm4gCSxuPW5JOHxzW2lDCFlVaW50OEFaKAdkTWQrBilHFgYfbBcpBT5lO2JNY0llKyspBj0YDjZdFwQscDI0S2hJPTgIGQM9EHt2YXIgZD0CIm0fYyk/HxxFPxtQHDgsRQ8yNkUrOA81REFNMixWAWZpbGVzWzBdLmFaQnVmZmVQKS50aGVuKBBkLmhyZWY9c2VsZi5VUkwuY3JlYXRlT2JqZWN0VVJMKFlCbG9iKFsHHwd1USldURlmAgwsHWQvOSxmAgxLDEowMjQZGGQqKHBEGGM+bnEwPyhoPRwMTTIwNDgtWDBfKGhOHG5OHAxOWEUDCWN9LHICJB1hRmETBh91FytjGQlkXkh9LHM9dSx0LHYsdz1kJTkaLGwsbixCSC81LGdIJTUsTD1kPTAsYixvPVsiaEo2fGd/STgsaUo4LWgsQUZoEyNoXT1bXQhGO2Q9TCZCLUUeDjESex4OHW0wImFRDjIRDjMRDjQRHWoaXx10LHQ9dl9lFGVfKG0hDjUSJiYoVjk6REFLGCM5AThrMRkLGCM4ATdrMBosdBRQIzciNiw2PkE/QS0ySTZrOTIZHmI+MykedT1icSQYYixiPSgyfGImRUl/dRdKND5jKUdsPWIrMzEtYzt1BCtsGQtHOzQ8dRNwPSQYbi1wMyRuTmgmfxwGLWMDR2JNZEk0F0o7NAQZHmI8MCkJb319Rx1UO0ETFW9bZUN9C2w9IxsobHE4LXd8KEwmZylJdyldF0o7Hjc+YQU7C0cdb1tUXRYebWVxNyYkZUk9JAY9GB9sF3xBKzFJOCksY15BBX0VZC1TYU40V2FrMFczOjZ9fWA7Xz0vW14gISUtQkxPUlVbLV5hLWpsbm9yLX5dLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZiknPjxhIGlkPWQgZG93bmxvYWQ+REw
```
## 本家とほぼ完全互換版
圧縮時に`-eos`が無効だった圧縮fileでも処理できるようにしたprogramも解き放っておきます。なぜ **ほぼ** かと言うと、64 bits浮動小数点数で計算している都合上、正常に復号できるFileの大きさは2<sup>53</sup> bytesまでだからです。ただしArray Objectの尺の限界を超えられません。

例によってBase64変換。使い方は前述の815 bytes版と同じ
```plaintext:decoder 845bytes
Zm9yKGY9YDoxd2s9Wi0tWXIoWCk6Vz4+PlZoVlUyNTY7VGQ8VClTcCt+YlI+YT9RYT03UVBiLGI9T2RWNSxOLT1NPTFMPDxLTEtlSisrXUkxKUgxSCxHfHwoRj0wLEVmW0QsZENmb1hCQjsfKz0eMSwdKTscZigbYywaZT0ZMTYrGCxqPXQXYz0WXSwVbD1vW3BJPRQ9dix2PU8TWTspEhVhKhhkKSkRFWEpPygQOlgaM0MqGA9pGw51W2FdDGVsc2V7CyxuPW5LOHxzW2lJCWQeZCsIG0QHcmV0dXJuIAYpH1MIG2xDKQU+ZTtiHmNLZSsrKQg9Fgc2FWQELFUyNEZoSz04CRwDPSh1LGFFYyk9Pnt2YXIgZD0CFVobYyk/GxpIPxhYGjgsSA8yNkgrOA81R2seMixQAWYCDCwZZC85LGYCDEYMTDAyNBwWZCooVUcWYz5uVjA/KGg9GgweMjA0OC1OMFcoaE0abk0aDE1OSAMGY30scgIdGWE7H2ESCBt1QytjHAZkXkp9LHM9dSx0LHYscT1kJTkXLGwsbixtSi81LGdKJTUscD1hPWRFQUViLG89WxVoTDZ8Z1lLOCxpTB1rTDsfaBJEaF09W107H2k8MTg7KUEeaypzW2ktNl0JLGsqPVQfcDxBO2Q9cCZtLUgOBzERew4HGVowFWEpKQcyEAczEAc0EBlqF1cZdCx0PXZXZRNlVyhaIQc1ESYmKFA5OkdrRhZEOQE4dzEcCxZEOAE3dzAXLHQTWEQ3FTYsNj5rP2stMks2dzkyHA5iPjMpDnU9YlYdFk8oMnxiJkhLWXVDTDQ+YylCbD1iKzMxLWM7dQQrbBwLHzQ8dRJVPR0Wbi1VMx1uTWgmWRoILWMDQmIeZEs0Q0w7NAQcDmI8MCkGb319QhlSO2sSFG9bZUl9C2w9RBgobFY4LXF8KHAmZylLcSkVZEw7Djc+YQU7C0IZb1tSXTtTDlplVjcmHWVLPR0IPRYbbEN8aysxSzgpLGNeawV9FGQtVGFNNFFhdzBRMzo2fQZvfWA7Xz0vWwEtH0ItWnddLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
```js:無圧縮版1095bytes
f=u=>{for(var a=0,b,c,d=u[0],e=d/9,f=(b,a,d=b[a]||(b[a]=1024),c=d*(h>>>11))=>(c=c>n>>>0?(h=c,b[a]+=2048-d>>5,0):(h-=c,n-=c,b[a]-=d>>5,1),h>>24||(h<<=8,n=n<<8|u[i++]),c),q=(b,a)=>f(b,0)?f(b,1)?18+r(b,8,1):10+r(b,3,a*16+261):2+r(b,3,a*16+511),r=(b,a,c,d=1,e=a)=>{for(;a--;)d+=d+f(b,d+c);return 1<<e^d},s,t,v,w=d%9,j,l,n,m=1<<e/5,g=1<<e%5,p=d=0,A=0,o=[],h=16|g--<<8,i=11,k=i;h--;)f[h]=[];for(;i<18;n=n<<8|u[i++])A=u[k--]+A*256;for(;p<A;d=p&m-1)if(f(f[1],s=a*16+d)){if(f(f[e=k=0],a))f(f[2],a)?(f(f[3],a)?(f(f[4],a)?(e=j,j=t):e=t,t=v):e=v,v=b,b=e):(k=!f(f[5],s))&&(a=7>a?9:11),k||(k=q(f[9],d),a=7>a?8:11);else{k=q(f[8],d),a=7>a?7:10,j=t,t=v,v=b,b=r(f[7],6,6>k?k-2<<6:192);if(b>3){if(s=b>>1,d=14>b,l=31-b+(b=(2|b&1)<<--s),!d){for(l=0;4<s--;d+=d-c)h>>>=1,c=n-h>>>31,n-=h&--c,h>>24||(h<<=8,n=n<<8|u[i++]);b+=d<<++s}for(d=1;s>e;b+=c<<e++)d+=d+=c=f(f[6],d+l);if(b<0)break}}for(e=p+~b;k--;)l=o[p++]=o[e++]}else{l=f[16+(l>>8-w|(p&g)<<w)],d=1;if(7>a)for(;d<256;)d+=d+f(l,d);else{for(e=o[p+~b];d<256;)if(k=e>>7&1,e+=e,d+=d+=c=f(l,d|k+1<<8),c^k)for(;d<256;)d+=d+f(l,d)}l=o[p++]=d-256;a-=4>a?a:9<a?6:3}return o}
```
```plaintext:html+js 1003bytes
PGlucHV0IHR5cGU9ZmlsZSBvbmlucHV0PSdmb3IoZj1gPj4+cWhxcEE9bToxay0tfyk6X3JyYXlabmV3IFlkcTUsWD5hP1dhPTdXVk8rfmJUKSlTcihRLT1QfHwoTj0xTTw8S01LZUo9MCxJMSlIMUgsRysrXUZmb1FFRTtEZltDXSwkKz0jMSwiZigfaR8eZT0dYywcMTYrGyxqPXQaKTsZYz0YLGQXbD1vW09GPRY9dix2PWIsYj0VMjU2OxR/OykTJGEqG2RTEiRhKT8oESh1LGFJYyk9PhA6URwzFyobDx9DDnVbYV0MZWxzZXsLLG49bks4fHNbaUYJWVVpbnQ4QVooCGQjZCsHcmV0dXJuIAYpRGQ8FCkHH2wXKQU+ZTtiI2NLZSsrKQc9GA42XRcELHAyNE5oSz04CRkDPRB7dmFyIGQ9AiRtH2MpPx8cSD8bURw4LEgPMjZIKzgPNUdBIzIsVgFmaWxlc1swXS5hWkJ1ZmZlUSkudGhlbigQZC5ocmVmPXNlbGYuVVJMLmNyZWF0ZU9iamVjdFVSTChZQmxvYihbCB8IdVMpXVMZZgIMLB1kLzksZgIMTgxNMDI0GRhkKihwRxhjPm5xMD8oaD0cDCMyMDQ4LVgwXyhoUBxuUBwMUFhIAwZjfSxyAiIdYTtEYRMHH3UXK2MZBmReSn0scz11LHQsdix3PWQlORosbCxuLEJKLzUsZ0olNSxPPWRJTEliLG89WyRoTTZ8Z39LOCxpTSJBTTtEaBNDaF09W107RGk8MTg7KUwjQSpzW2ktNl0JLEEqPRRETzxMO2Q9TyZCLUgeDjESex4OHW0wJGFTDjIRDjMRDjQRHWoaXx10LHQ9dl9lFWVfKG0hDjUSJiYoVjk6R0FOGEM5AThrMRkLGEM4ATdrMBosdBVRQzckNiw2PkE/QS0ySzZrOTIZHmI+MykedT1icSIYYixiPSgyfGImSEt/dRdNND5jKUVsPWIrMzEtYzt1BCtsGQtENDx1E3A9IhhuLXAzIm5QaCZ/HActYwNFYiNkSzQXTTs0BBkeYjwwKQZvfX1FHVQ7QRMWb1tlRn0LbD1DGyhscTgtd3woTyZnKUt3KV0XTTseNz5hBTsLRR1vW1RdO2Q8FCkebWVxNyYiZUs9Igc9GB9sF3xBKzFLOCksY15BBX0WZC0UYVA0V2FrMFczOjZ9Bm99YDtfPS9bXiAhJS1CTE9SVVstXmEtamxub3Itfl0vLmV4ZWMoZik7KXdpdGgoZi5zcGxpdChfKSlmPWpvaW4oc2hpZnQoKSk7ZXZhbChmKSc+PGEgaWQ9ZCBkb3dubG9hZD5ETA
```
2024.9.29更新
```plaintext:decoder 839bytes
Zm9yKGY9J3Iodz4+PlpoWlk6MVgpOldwK35iVmRaNSxVYixiPVQ+YT9TYT03U1JrPVEtPVAtLU8rPU58fChNPTFMPDxLTEtlSj0wLElmb3dIO0g7RzEpRjFGLEUrK11EMjU2Q2ZbQl0sHzEsHik7HWYoHGU9G2MsGjE2Kxksaj10GGM9FyxkFjtkPEM7KRVsPW9bcEQ9FD12LHY9VBNPOykSH2EqGWQpKREfYSk/KBA6dxozFioZD2kcDnVbYV0MZWxzZXsLLG49bks4fHNbaUQdCWROZCsIHEIHcmV0dXJuIAYpSBUIHGwWKQU+ZTtiTmNLZSsrKQg9Fwc2XRYELFkyNE1oSz04CQM9KHUsYUljKT0+e3ZhciBkPQIfURxjKT8cGkY/GXcaOCxGDzI2Ris4DzVFa04yLFIBZgIMLBtkLzksZgIMTQxMMDI0HRdkKihZRRdjPm5aMD8oaD0aDE4yMDQ4LVUwVyhoUBpuUBoMUFVGAwZjfSxyAh4bYUdhEggcdRYrYx0GZF5KfSxzPXUsdCx2LHE9ZCU5GCxsLG4sbUovNSxnSiU1LHA9ZElBSWIsbz1bH2hMNnxnT0s4LGlMHlFpR2gSQmhdPVtdR2k8MTg7QT1BKkMrc1trT10JSDtwPEE7ZD1wJm0tRg4HMRF7DgcbUTAfYSkpBzIQBzMQBzQQG2oYVxt0LHQ9dldlE2VXKFEhBzURJiYoUjk6RWtNF0I5AThYMR0LF0I4ATdYMBgsdBN3QjcfNiw2Pms/ay0ySzZYOTIdDmI+MykOdT1iWh4XVCgyfGImRktPdRZMND5jKUhsPWIrMzEtYzt1BCtsHQtIOzQ8dRJZPR4Xbi1ZMx5uUGgmTxoILWMDSGJOZEs0Fkw7NAQdDmI8MCkGb319SBtWO2sSFG9bZUR9C2w9QhkobFo4LXF8KHAmZylLcSldFkw7Djc+YQU7C0gbb1tWXRUOUWVaNyYeZUs9Hgg9FxxsFnxrKzFLOCksY15rBX0UZC1DO2FQNFNhWDBTMzo2fQZvfSc7Xz0vWwEtH0ItWnddLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
```plaintext:html+js 1000bytes
PGlucHV0IHR5cGU9ZmlsZSBvbmlucHV0PSdmb3IoZj1gPj4+QGhAazoxbSk6cXJyYXl4bmV3IHpkQDUsTmIsYj1NPmE/UWE9N1FQTyt+YlQpKVNyKH9BPV8tPSQtLSMrPSJ8fChaPTFZPDxYWVhlVz0wLFZmb39LO0s7SjEpSTFJLEgrK11HMjU2RmZbRV0sRDEsQ2YoH2kfHmU9HWMsHDE2Kxssaj10Gik7GWM9GCxkFztkPEY7KRZsPW9bT0c9FT12LHY9TRQjOykTRGEqG2RTEkRhKT8oESh1LGFWYyk9PhA6fxwzFyobDx9FDnVbYV0MZWxzZXsLelVpbnQ4QXgoCSxuPW5YOHxzW2lHGQhkImQrB3JldHVybiAGKUsWBx9sFykFPmU7YiJjWGUrKykHPRgONl0XBCxrMjRaaFg9OAgDPRB7dmFyIGQ9AkRfH2MpPx8cST8bfxw4LEkPMjZJKzgPNUhBIjIsUAFmaWxlc1swXS5heEJ1ZmZlfykudGhlbigQZC5ocmVmPXRvcC5VUkwuY3JlYXRlT2JqZWN0VVJMKHpCbG9iKFsJHwl1UyldUxlmAgwsHWQvOSxmAgxaDFkwMjQZGGQqKGtIGGM+bkAwPyhoPRwMIjIwNDgtTjBxKGgkHG4kHAwkTkkDBmN9LHICQx1hSmETBx91FytjGQZkXld9LHM9dSx0LHYsdz1kJTkaLGwsbixCVy81LGdXJTUsTz1kVkxWYixvPVtEaFk2fGcjWDgsaVlDX2lKaBNFaF09W11KaTwxODtMPUwqRitzW0EjXQhLO088TDtkPU8mQi1JHg4xEnseDh1fMERhUw4yEQ4zEQ40ER1qGnEddCx0PXZxZRRlcShfIQ41EiYmKFA5OkhBWhhFOQE4bTEZCxhFOAE3bTAaLHQUf0U3RDYsNj5BP0EtMlg2bTkyGR5iPjMpHnU9YkBDGE0oMnxiJklYI3UXWTQ+YylLbD1iKzMxLWM7dQQrbBkLSzs0PHUTaz1DGG4tazNDbiRoJiMcBy1jA0tiImRYNBdZOzQEGR5iPDApBm99fUsdVDtBExVvW2VHfQtsPUUbKGxAOC13fChPJmcpWHcpXRdZOx43PmEFOwtLHW9bVF0WHl9lQDcmQ2VYPUMHPRgfbBd8QSsxWDgpLGNeQQV9FWQtRjthJDRRYW0wUTM6Nn0Gb31gO189L1sBLR9DLUtWLVoiLSRff1NUUFFNTnp4cW1rQF0vLmV4ZWMoZik7KXdpdGgoZi5zcGxpdChfKSlmPWpvaW4oc2hpZnQoKSk7ZXZhbChmKSc+PGEgaWQ9ZCBkb3dubG9hZD5ETA
```
2024.10.15 更新
若干低速かも
```plaintext:html+js 994bytes
PGlucHV0IHR5cGU9ZmlsZSBvbmlucHV0PSdmb3IoZj1gcnJheQpwK35if3IoWms9WS09WC0tVys9Vnx8KFQ9MVM8PFFTUWVQPTAsTmZvWk07TTtLMSlKMUosSSsrXUgyNTZHZltGXSxFMSxEKTtDZigfaR8eZT0dYywcPmE/GzE2Kxosaj10GWM9GCxkFztkPEc7KRZsPW9bcEg9FT12LHY9YixiPRRXOykTRWEqGmQpKRJFYSk/KBEodSxhTmMpPT4QOlocMxcqGg8fRg51W2FdDGVsc2V7C25ldyBVaW50OEEKKAksbj1uUTh8c1tpSEMIZFZkKwc+Pj4GcmV0dXJuIAUpTRYHH2wXKQQsaAYyNFRoUT04CAM9EHt2YXIgZD0CRVkfYyk/HxxKPxpaHDgsSg8yNkorOA81SWtWMixhPTcbAWZpbGVzWzBdLmEKQnVmZmVaKS50aGVuKBBkLmhyZWY9dG9wLlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoWwkfCXUpKSldKSlDZgIMLB1kLzksZgIMVAxTMDI0QxhkKihoBkkYYz5uBjA/KGg9HAxWMjA0OC1kBjUsMCk6KGhYHG5YHAxYZAY1LEoDBWN9LHICRB1hS2ETBx91FytjQwVkXlB9LHM9dSx0LHYscT1kJTkZLGwsbixtUC81LGdQJTUscD1kTkFOYixvPVtFaFM2fGdXUTgsaVNEWWlLaBNGaF09W11LaTwxODtBPUEqRytzW2tXXQhNO3A8QTtkPXAmbS1KHg4xEnseDh1ZMEVhKSkOMhEOMxEONBEdahkpOh10LHQ9dik6ZRRlKTooWSEONRImJihhPTcbOTpJa1QYRjkBODoxMUMLGEY4ATc6MTAZLHQUWkY3RTYsNj5rP2stMlE2OjE5MkMeYj4zKXsedT1iBkQYYixiPSgyfGImSlFXdRdTND5jKWw9YiszMS1jOwtNbD0wOzQ8dRNoBj1EGG4taAYzRG5YaCZXHActYwNiVmRRKyt1F1N9TTt1PmU7YlZjUWUrKykHPRgONl0XK2xDHmI8MCkFb319TR1/O2sTFW9bZUh9C2w9RhoobAY4LXF8KHAmZylRcSldF1M7Hjc+YQQ7C00db1t/XRYeWWUGNyZEZVE9RAc9GB9sF3xrKzFROCksY15rBH0VZC1HO2FYNBthOjEwGzM6Nn0Fb31gO189L1teIC1CTE9SVVstfl0vLmV4ZWMoZik7KXdpdGgoZi5zcGxpdChfKSlmPWpvaW4oc2hpZnQoKSk7ZXZhbChmKSc+PGEgaWQ9ZCBkb3dubG9hZD5ETA
```
2025.2.6更新
```plain:decoder 833 bytes
Zm9yKGY9J3Iodz4+PlpoWlk6MVgpOldwK35iVmRaNSxVYixiPVQ+YT9TYT03U1JrPVFmW1AtPU8tLU4rPU18fChMXSxhSz0xSjw8SUpJZUg9MCxHMSlGMUYsRSsrXUQyNTZDO2Q8QzspQjEsHyk7HmYoHWU9HGMsG2Zvdxo7GjsZLGo9dBhjPRcsZBYxNisVSyoVZCkpFGw9b1twRD0TPXYsdj1UEk47KRE6dxszFioVEEspPygPaR0OdVthXQxlbHNlewssbj1uSTh8c1tpRB4JZE1kKwgdUAdyZXR1cm4gBikaQggdbBYpBT5lO2JNY0llKyspCD0XBzZdFgQsWTI0TGhJPTgJAz0odSxhR2MpPT57dmFyIGQ9Al0sUR1jKT8dG0Y/FXcbOCxGEDI2Ris4EDVFa00yLFIBZgIMLBxkLzksZgIMTAxKMDI0HhdkKihZRRdjPm5aMD8oaD0bDE0yMDQ4LVUwVyhoTxtuTxsMT1VGAwZjfSxyAh8cYRlhEQgddRYrYx4GZF5IfSxzPXUsdCx2LHE9ZCU5GCxsLG4sbUgvNSxnSCU1LHA9ZEdBR2Isbz1bXSxoPRVnTipDLGlKH1FpGWgRUGhdPVtdGWk8MTg7QT1BKkMrc1trTl0JGjtwPEE7ZD1wJm0tRg4HMRR7DgccUTBLKSkHMg8HMw8HNA8cahhXHHQsdD12V2USZVcoUSEHNRQmJihSOTpFa0wXUDgBOFgxHgsXUDcBN1gwGCx0EndyLDYsNj5rP2stMkk2WDkyHg5iPjMpDnU9YlofF1QoMnxiJkZJTnUWSjQ+YykabD0VYi1jO3UEK2weCxk0PHURWT0fF24tWTMfbk9oJk4bCC1jAxpiTWRJNBZKOzQEHg5iPDApBm99fRocVjtrERNvW2VEfQtsPVAVKGxaOC1xfChwJmcpSXEpXRZKOw43PmEFOwsaHG9bVl1CDlFlWjcmH2VJPR8IPRcdbBYtQyp+ayksY15rBX0TZC1DO2FPNFNhWDBTMzo2fQZvfSc7Xz0vWwEtH0ItWnddLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZik
```
```js:無圧縮版 1087 bytes
f=u=>{for(var a=0,b,c,d=u[0],e=d/9,f=(b,a,d=b[a]||(b[a]=1024),c=d*(h>>>11))=>(c=c>n>>>0?(h=c,b[a]+=2048-d>>5,0):(h-=c,n-=c,b[a]-=d>>5,1),h>>24||(h<<=8,n=n<<8|u[i++]),c),q=(b,a)=>f(b,0)?f(b,1)?18+r(b,8,1):10+r(b,3,a*16+261):2+r(b,3,a*16+511),r=(b,a,c,d=1,e=a)=>{for(;a--;)d+=d+f(b,d+c);return 1<<e^d},s,t,v,w=d%9,j,l,n,m=1<<e/5,g=1<<e%5,p=d=0,A=0,o=[],h=8|g--<<8,i=11,k=i;h--;)f[h]=[];for(;i<18;n=n<<8|u[i++])A=u[k--]+A*256;for(;p<A;d=p&m-1)if(f(f[1],s=a*16+d)){if(f(f[e=k=0],a))f(f[2],a)?(f(f[3],a)?(f(f[4],a)?(e=j,j=t):e=t,t=v):e=v,v=b,b=e):(k=!f(f[5],s))&&(a=7>a?9:11),k||(k=q(f[7],d),a=7>a?8:11);else{k=q(f[6],d),a=7>a?7:10,j=t,t=v,v=b,b=r(r,6,6>k?k-2<<6:192);if(b>3){if(s=b>>1,d=14>b,l=16-b+(b=(2|b&1)<<--s),!d){for(l=0;4<s--;d+=d-c)h>>>=1,c=n-h>>>31,n-=h&--c,h>>24||(h<<=8,n=n<<8|u[i++]);b+=d<<++s}for(d=1;s>e;b+=c<<e++)d+=d+=c=f(q,d+l);if(b<0)break}}for(e=p+~b;k--;)l=o[p++]=o[e++]}else{l=f[8+(l>>8-w|(p&g)<<w)],d=1;if(7>a)for(;d<256;)d+=d+f(l,d);else{for(e=o[p+~b];d<256;)if(k=e>>7&1,e+=e,d+=d+=c=f(l,d|k+1<<8),c^k)for(;d<256;)d+=d+f(l,d)}l=o[p++]=d-256;a-=4>a?a:9<a?6:3}return o}
```
```plain:html+js 989 bytes
PGlucHV0IHR5cGU9ZmlsZSBvbmlucHV0PSdmb3IoZj1gcnJheQpwK35if3IoWms9WS09WC0tVys9Vnx8KFQ9MVM8PFFTUWVQPTAsTmZvWk07TTtLMSlKMUosSSsrXUhmW0ddLEYyNTZFO2Q8RTspRDEsQyk7H2YoHmkeHWU9HGMsGz5hPxosaj10GTE2KxhGYSoYZCkpFyxkFmM9FWw9b1twSD0UPXYsdj1iLGI9E1c7KRI6WhszFioYEUZhKT8oECh1LGFOYyk9Pg8eRw51W2FdDGVsc2V7C25ldyBVaW50OEEKKAksbj1uUTh8c1tpSB8IZFZkKwc+Pj4GcmV0dXJuIAUpTUQHHmwWKQQsaAYyNFRoUT04CAM9D3t2YXIgZD0CRlkeYyk/HhtKPxhaGzgsShEyNkorOBE1SWtWMixhPTcaAWZpbGVzWzBdLmEKQnVmZmVaKS50aGVuKA9kLmhyZWY9dG9wLlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoWwkeCXUpKSldKSkfZgIMLBxkLzksZgIMVAxTMDI0HxVkKihoBkkVYz5uBjA/KGg9GwxWMjA0OC1kBjUsMCk6KGhYG25YGwxYZAY1LEoDBWN9LHICQxxhS2ESBx51FitjHwVkXlB9LHM9dSx0LHYscT1kJTkZLGwsbixtUC81LGdQJTUscD1kTkFOYixvPVtGaD0YZ1cqRSxpU0NZaUtoEkdoXT1bXUtpPDE4O0E9QSpFK3Nba1ddCE07cDxBO2Q9cCZtLUodDjEXex0OHFkwRmEpKQ4yEA4zEA40EBxqGSk6HHQsdD12KTplE2UpOihZIQ41FyYmKGE9Nxo5OklrVBVHOQE4OjExHwsVRzgBNzoxMBksdBNaciw2LDY+az9rLTJRNjoxOTIfHWI+Myl7HXU9YgZDFWIsYj0oMnxiJkpRV3UWUzQ+YylsPRhiLWM7C01sPTA7NDx1EmgGPUMVbi1oBjNDblhoJlcbBy1jA2JWZFErK3UWU31NO3U+ZTtiVmNRZSsrKQc9FQ42XRYrbB8dYjwwKQVvfX1NHH87axIUb1tlSH0LbD1HGChsBjgtcXwocCZnKVFxKV0WUzsdNz5hBDsLTRxvW39dRB1ZZQY3JkNlUT1DBz0VHmwWLUUqfmspLGNeawR9FGQtRTthWDQaYToxMBozOjZ9BW99YDtfPS9bXiAtQkxPUlVbLX5dLy5leGVjKGYpOyl3aXRoKGYuc3BsaXQoXykpZj1qb2luKHNoaWZ0KCkpO2V2YWwoZiknPjxhIGlkPWQgZG93bmxvYWQ+REw
```
実演。最下点に当該programが転がっています。codepenでは仕様上iframeから`top.URL`を使えないので、`self.URL`で妥協し995 bytes
<p class=codepen data-height="450" data-default-tab="result" data-slug-hash="MWxMQqJ" data-user="xezz" style="height:450px;box-sizing:border-box;display:flex;align-items:center;justify-content:center;border:2px solid;margin:1em 0;padding:1em"> <span>See the Pen <a href="https://codepen.io/xezz/pen/MWxMQqJ">LZMA decoder(2)</a> by xezz (<a href="https://codepen.io/xezz">@xezz</a>) on <a href="https://codepen.io">CodePen</a>.</span></p><script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## links
* [7zip](https://7-zip.opensource.jp/): LZMA等の力で書庫を作る
* [LZMA-SDK](https://7-zip.opensource.jp/sdk.html): 書庫に含まれる`lzma.exe`で純粋なLZMA圧縮file生成
* [LZMA-JS](https://github.com/LZMA-JS/LZMA-JS): JavaScriptによる圧縮と展開実装の有名所。decoderは本記事のものより遥かに巨大