From 3ad96672d4d2c359cd74ccc4e6ae8d110bf1a599 Mon Sep 17 00:00:00 2001 From: Raventric <78981416+Ravencentric@users.noreply.github.com> Date: Thu, 23 Nov 2023 21:50:13 +0530 Subject: [PATCH] feat: automatic portable mpv releases --- .github/workflows/links.yml | 2 +- .github/workflows/mpv.yml | 80 + .github/workflows/retype-action.yml | 2 +- docs/static/index.yml | 1 - .../fonts/Cabin-Bold-Italic.ttf | Bin 0 -> 176992 bytes .../mpv/portable_config/fonts/Cabin-Bold.ttf | Bin 0 -> 172576 bytes .../portable_config/fonts/GANDHISANS-BOLD.OTF | Bin 0 -> 106728 bytes .../fonts/GANDHISANS-BOLDITALIC.OTF | Bin 0 -> 114888 bytes .../tutorials/mpv/portable_config/input.conf | 5 + .../tutorials/mpv/portable_config/mpv.conf | 59 + .../script-opts/playlistmanager.conf | 174 + .../script-opts/thumbfast.conf | 37 + .../script-opts/trackselect.conf | 26 + .../mpv/portable_config/script-opts/webm.conf | 80 + .../mpv/portable_config/scripts/autoload.lua | 328 ++ .../mpv/portable_config/scripts/osc.lua | 3074 +++++++++++++++++ .../scripts/pause-when-minimize.lua | 20 + .../scripts/playlistmanager.lua | 1483 ++++++++ .../mpv/portable_config/scripts/thumbfast.lua | 933 +++++ .../portable_config/scripts/trackselect.lua | 224 ++ .../mpv/portable_config/scripts/webm.lua | 3053 ++++++++++++++++ .../shaders/nnedi3-nns256-win8x4.hook | 674 ++++ docs/tutorials/mpv.md | 122 +- 23 files changed, 10282 insertions(+), 95 deletions(-) create mode 100644 .github/workflows/mpv.yml delete mode 100644 docs/static/index.yml create mode 100644 docs/static/tutorials/mpv/portable_config/fonts/Cabin-Bold-Italic.ttf create mode 100644 docs/static/tutorials/mpv/portable_config/fonts/Cabin-Bold.ttf create mode 100644 docs/static/tutorials/mpv/portable_config/fonts/GANDHISANS-BOLD.OTF create mode 100644 docs/static/tutorials/mpv/portable_config/fonts/GANDHISANS-BOLDITALIC.OTF create mode 100644 docs/static/tutorials/mpv/portable_config/input.conf create mode 100644 docs/static/tutorials/mpv/portable_config/mpv.conf create mode 100644 docs/static/tutorials/mpv/portable_config/script-opts/playlistmanager.conf create mode 100644 docs/static/tutorials/mpv/portable_config/script-opts/thumbfast.conf create mode 100644 docs/static/tutorials/mpv/portable_config/script-opts/trackselect.conf create mode 100644 docs/static/tutorials/mpv/portable_config/script-opts/webm.conf create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/autoload.lua create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/osc.lua create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/pause-when-minimize.lua create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/playlistmanager.lua create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/thumbfast.lua create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/trackselect.lua create mode 100644 docs/static/tutorials/mpv/portable_config/scripts/webm.lua create mode 100644 docs/static/tutorials/mpv/portable_config/shaders/nnedi3-nns256-win8x4.hook diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml index dbd60616b..27a9e33c1 100644 --- a/.github/workflows/links.yml +++ b/.github/workflows/links.yml @@ -9,7 +9,7 @@ jobs: linkChecker: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Link Checker id: lychee diff --git a/.github/workflows/mpv.yml b/.github/workflows/mpv.yml new file mode 100644 index 000000000..62e340725 --- /dev/null +++ b/.github/workflows/mpv.yml @@ -0,0 +1,80 @@ +name: mpv + +permissions: + contents: write + +on: + push: + paths: + - "docs/static/tutorials/mpv/portable_config/**/*.*" + - "docs/tutorials/mpv.md" + - ".github/workflows/mpv.yml" + schedule: + - cron: "0 0 * * *" # daily + workflow_dispatch: + + +jobs: + mpv: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: docs/static/tutorials/mpv/portable_config + + - name: Download mpv + uses: robinraju/release-downloader@v1.8 + with: + repository: zhongfly/mpv-winbuild + latest: true + fileName: "mpv-x86_64-20*-git-*.7z" + + - name: Get the filename of the mpv archive + id: mpv-filename + run: | + echo "fullname=$(ls | grep mpv)" >> $GITHUB_OUTPUT + echo "basename=$(ls | grep mpv | xargs -I {} basename {} .7z)" >> $GITHUB_OUTPUT + echo "commit=$(ls | grep -oP '(?<=git-)[0-9a-fA-F]+')" >> $GITHUB_OUTPUT +# echo "date=$(ls | grep -oP '\d{8}')" >> $GITHUB_OUTPUT + + - name: Extract mpv archive + run: 7z x ${{ steps.mpv-filename.outputs.fullname }} -o${{ steps.mpv-filename.outputs.basename }} + + - name: Copy portable config to the extracted mpv folder + run: cp -r "docs/static/tutorials/mpv/portable_config" "${{ steps.mpv-filename.outputs.basename }}/portable_config" + + - name: Remove the original mpv archive + run: rm ${{ steps.mpv-filename.outputs.fullname }} + + - name: Compress mpv using 7zip + run: 7z a ${{ steps.mpv-filename.outputs.fullname }} ${{ steps.mpv-filename.outputs.basename }} -mx9 + + - name: Compress portable_config using 7zip + run: | + cd docs/static/tutorials/mpv + 7z a portable_config.7z portable_config -mx9 + mv portable_config.7z ${{ github.workspace }} + + - name: Create release + uses: ncipollo/release-action@v1 + with: + name: mpv + artifacts: ${{ steps.mpv-filename.outputs.fullname }}, portable_config.7z + allowUpdates: true + removeArtifacts: true + replacesArtifacts: true + makeLatest: true + tag: mpv + body: > + Pre-configured portable MPV based on [zhongfly's build](https://github.com/zhongfly/mpv-winbuild) using + the [config](https://github.com/${{ github.repository }}/tree/master/docs/static/tutorials/mpv/portable_config) + from [thewiki](https://thewiki.moe/tutorials/mpv/) + + + This release is updated daily using [this workflow](https://github.com/${{ github.repository }}/blob/master/.github/workflows/mpv.yml) + + + Based on: mpv-player/mpv@${{ steps.mpv-filename.outputs.commit }} + + Logs: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id}} diff --git a/.github/workflows/retype-action.yml b/.github/workflows/retype-action.yml index 7b10f1ea5..d7831acc7 100644 --- a/.github/workflows/retype-action.yml +++ b/.github/workflows/retype-action.yml @@ -10,7 +10,7 @@ jobs: name: Publish to retype branch runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: retypeapp/action-build@latest - uses: retypeapp/action-github-pages@latest with: diff --git a/docs/static/index.yml b/docs/static/index.yml deleted file mode 100644 index 4708564f6..000000000 --- a/docs/static/index.yml +++ /dev/null @@ -1 +0,0 @@ -visibility: hidden \ No newline at end of file diff --git a/docs/static/tutorials/mpv/portable_config/fonts/Cabin-Bold-Italic.ttf b/docs/static/tutorials/mpv/portable_config/fonts/Cabin-Bold-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8183502ec505546c983b6436f13810969c2fd00b GIT binary patch literal 176992 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�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%0Df&K&mYQaA0 z$e#$%>W?PiPyHxEz-9Ja2+-1B5TF$w5uk4}0~+90BV@$?o!h7X&)%W@^iJyE?x-?r zsp}Omj0(e$U@3EwI#P6^T`+`O!EQmfd7M4V7O}s(@op+~nN8fT%7u z4qP{`9~a4)xf$FXZa%ky+s>Wjinzx-$5-SHd|kdi-;^K3r}CNn6n+-JfZxWSujl$Dj$lqO|uWr(t|vX!!%vcGbua=0>8`I&OLa+~s?vQT+Oc}{s*`AGRp`HS+M z2j`*o@bU2T2=Zv?(ZZvnM^BGPk3<&V@~M;4qp$w;b0{15974wiO7)( zylR-B*;-T7MAZ>A-YRX6!kCK}PVD{q>+pSjdPhX}Fns5;D{tAFHESls#W^QCotcYw z8PxD|jusk1l^>vyQR+#wrA?GgM|Cq1k1;nN7^Fa~=%6HBplVz2GpOJT?5qd22r3!j zKB-L3D0_Ibnd~_+F$We!%wywLztQ-18g1dR_YY1zzd<;#JWX?+vDz+L%e^ z@W@F=w;o)!``EeJJti1bk@oPW1&JE(#zI8Sdnx*z*To^?#hL>6 zXs-JTnz|}&A81GPiQrGdICZ`yd~qLrK&w%N4Y?h6F~zti>+rZ(UB>i;&ZE2Kt&KNi z`EhZlu1-IoS3woc^;#kV&^+@ORn5ZB7K7V~FTTI`MI`Yg>VZ)$jHr5kUDaCr%RR`=J}ZZ#wztT6RfvhjXm{=@`bYFbWQ zc$YP6Ee3laXFGT^^PK+m;}gFaRZ=(%)Iu!TJ@bR^@PYNGPo2n4+i%DNmRmo%PhMv| z@d)Wcsu;;|*tUdt=|)7y^%~lK?Y2n6Si*9NXKrL()I*JD51^t^1p%!=MS79W&4@c` zglaN^G=w^2F#a_p^++Tc3Jpnp7>s`np*{>XwDlp4kocb1T%V}G6B=PdMNmO7etVJ% zq=7-L1QP1)o#uB%d|l?IhC9Z#1IEd2v#8$V;xq_KMEgw=VojQ1Duo3abWBxX9|6Ia=H ztrYFOQ zh$Nq?8Yt*BUSma#&{%+8a9i6;xH>^79Rq5m3M%-68tQ_&CRA7?s?OzSK-gQUo)bB9 z4T5pxC_z&@SOgE~2JYYw9;*C|l15G{<4%iZ;wXKSxKl44?z!~+zP;mfwiwqv;nv3w z&g-QomHir#=BkT6Lj+YzQSA_6dydvDsutuJK+Au&=Cl2qbw~2|ZQqYprp}{Zp)u5N z^^|xF87{MiC$ZxoUDCpo(W2_YSI_2?TFpqK zq^{kJMBxsGpHQ$;VMu$Zg;ExvIwD98qUKe~=;Y{Zv%Yisx8J?qcJ8K8MXJv(2KVBJ z#VQimvLR`uiV+AmF-A~dM-h^&Jlrm|a!*Sd5wB8zo@|%=Ibz^d$9$wk;6YyS@IZ>< zo|dMg$v&?ncS>V875R{#Ax(CwCgyLMyhH!w#L-i#zBwN{P7_qCa^AtcVpY}~Zfw%< zv4ix)JNm}6E1RD}wG)SPvUVC(`+TGhZ^$wp=E4c?UTL5oj8~G+$qAGp$(;;6@Q`dk z8;l?G!%}?b)YHX6IHh4U`EXwK22Op*6JRt{QK)btl;WjMRz>D+7ht;rE`vq;fNXE7 zR6oxFPw6YCiY=6eD5M#xNRd@(lZ4nYD^_F}RilI;l=eF8(r{7nNVNkT9I4IkBo0pX z0V3Z(z*|;z?ZK7}+f_tu<5Vl%9g|nD&tI6oVfD&!X^u%w2QqBestr4~Wv-(#o-k&m zW7jOB>H_f$>ykWlu;ENyZqM$M+b-w}RocFZy9%#=aq7zXZ85_-3=HpLRGoYFCHv!d zcZw80s#fNFkeWDE?|Q!TQbA>f3e=hlBScLDmG);;>;1Kfl2q^AgfukPSAhV-W{9dn z0R)ALy$Z_}D%-r=Nd@{1dCS(W&0b(%U{r;FCII>-g=(mH6WZ++RN9C9mj@^GipU7B zZS2FVk!1_=L=}?qnF_o$7vcn*Do22e`vj?zYJ_kA+HFFWKsCJe7^;9S^fal8OI@3p zuFNAoD5IIg4b`5k3xaiM8gBD%j}Hq79@&ow#%`(z2!07}FEd5eFA)EZ-8EahqIxk$ zfFD)P$5RBHPl3ce^@g26xraDf#WPcc{i2G!4qE8FLxhn&DtPjaBuI5hWyE!wz^+v7 z7hyeA!9F|0>pm*4&4TJ8sL>i<{PyMh_JzcaYEBqbF@4#9gmNn0L5$ps?V^fb2S!c> zTBN7~rK5i=7pw%$Do!<&49|dQ6&aJkA~vcIDro1WItobrA?&XZp@1N{6s~|1s)&bD zFZQYwqEL|zq~W8I+(#%DP+9eoh4fccs7Mo7$^Jk`D>Mw+3CZWV>JBuztKt_FbE+Ib zMlrtCnGV&NZ49%MVKD2yn_+g~kN+5E56c{2n0+jBkYSE6%psQfoMDc#4E}-ZVdjIay3mxGjkbCTVl=v#PlWo4du5iQ^YV=SmqkT z++djNEVF=RZnDf>hPjQum}Kx*e#|0Fy+lMKe#cQ7-k(qbK8qqCYh$cFssGP zW7z5KnJS*_MFU3T%mxPUGPBP(OzbkN7zTfexSqlECuYhRJ&U<8Og`dq7N-9&cZ^9= z%8~g;&5OB8`pd_$45mRbbISh0U^bYU$zV2+@nkW>iRnR_Z6C>Cb`=xE zjE%*VCX>oy(v;cCFa->=0)GL@u&)_RFf%bMCgLy?hY48B&S5%~$!9Pr%WPyY700Y$ zFyYF+VVPV8vvZgz#SAQ_^Vqj6CLq~&ET(cXyUDD@pP(}A2L-d7VSjVSd?lu|F=xq4 zVVM~WCeoQ{uEhUThMCT=_~TDZ1#4M0oo-aTae_$*pb&G%&oGN>W5;4{?-w^Ww=m4( z^><5lJE#ayG*t{$;O|=%hZVmlB+R*0b8q85!hN&*0rxN6B~Hm{x&GWrZX*X=DeuYq z^DX&wej5J;e}jLgtfLH9rYOfLXDe4JcPY;+?<$KuYIp>AH1p`=5#^ETG1Fs}$3Bn8 z9)EaN@T~3`=-C;!1K)YR@%&v71cT5_=r1G+Glc`fO_h%-M&(q^Qms~$&nv|1bFV{Qm%VO#z0kDPBxn*f3pMvNPrY^Cb-WvR z_wk_OAAY_BS83kDpI-p8-Ded{+5v@;TyD`sw}V~8~DFy_se9zWW)T&V{tk#TLw`(`89Z@^6_BOwcesO*W{k!^asZ+Ji$U48(O{)8_ zUcGuN0{DQefO!E00eb?@2mBcDOQ3IHY@j`GRp8}72&xp+FsNBjyPzIH;X&hq_6L0z z^d#u_;HJU0;Kw2TLym+ztM6C8fBlX1?=)x`S}oKRS~s*wXot`qp#wrkgjzzAL(@ZZ zLJLB#h29PQG4ypPg#Hnx4AX?^!)k>!4Qm_LHLPz~WLR`qVwgQ_LfG`Md11@K)`YDK zD+t>hu}8cs=@fU#1g)g|ZCt62R}U50)g=mrpQz5-FF?-^7)E(`UB_s(EmRK#J^Gb* z7*I^(q2`ZQz~}L>bHS^O8tMG%Lnp83K-JpMob4El&Svwd9@aiR}L@9NrxLHt06>_wfzF)Pq&^S;eN#IQ?gW0HlvR{yT zfCst{Z}sP_LqBCaO&s-yOnOF#tR^is)z#K`d}27T;IlHm3%! zzIjT7ni%QXcZvt0Dx3w4Lh{McK6$Wa^${c7A=8LED2canO2(LJse00&D=-+xxBu}w zsB!6=EZctLI&kCGjqI8qswe5VL(~xmNrjrE0*o}Of5F*L0uM`^E;I|*h|)BS?lI8v zCQC>mEFs>%H$wbRLLskqBGPNbI6+OWVZh0Lk0B1kKr^j0msBa8r6d(5rv;BPoC@JU zd;G}P&|Ih9HRY$?G&n^bXp#84r60c6I{CCIi`R@Zl1?xc=D}5t)aS_raubG=V_ejx zotcOAtJlq5w9}|bEnVRQTEs=mtHY3(C!8Ba2?JhIAf2FfV9gS*Llvpj4D`MD9mGSA z(je|Uen|mbX#iBlu_h%MTsnY6N&`4jlUF~XLo`TbFU1&9JwjkN3qZg};VY=4kQVtE z=5_*)bt2?16G_JJjd;*XCl-kB$b?@@27~)1k@m)=ypgV<+^ya>Z{AYl^Rdbyu{++h zF+z=lUn8-a>e>sW&qGod2Id&*U3o$(|Ewntc%%&y)GH}PU=vQ$+9jG==;4Al4xwkw<>9fwdPQ|`TXXo% zEgjUUcYvr3B#qaM`@NBp;;X&JUp_Fg+wiPWO^q#i^-+O643(h48nL~o-iuK{A$YQ| zXoq;Xq>&aw=Gf9g994*d=c!aXMfNg^;i(;BJyE?cOI$6zIV8YJ%#7UTAs6!`q#93J zmqy|?`8KxxRuNl~PTV~ns!KIMTUvt_r<8T{FC9#LB;4~=yh5Bi4v~p+-iOM9w zs3vuD-ox?t80;w^H%EKn>$U5*8HbCcOL1GMVniSxLY`qTXvJ8N!iIcF)b8CjF?)lN zB*uzU-)KpLPK3jqb;Em&!0q^{)%$iCHJPJ8T`~rzCS#SF!>g>Zi(>WaWPwJMol)R? zMK#$|C_=5b>>Ug+TOzJx!h2BWi!h#OwZr2(p;9DdPffuLz7#r)o1t66?hImR)+Ak&Cj_U_OV5;;}~m-!$kxIBoc7!?E;H8~W(`4o{C9X~aFUdY(8~RHwLTItC3;EkV6o93`Gr619{2 zy(fapR!-QkbK)+2ApD#yVq?B2F(gfkoC)UBgh2Q;Q6L$p1ZwcekypAKK1dF&=E{Pp z&P7@J0VDe)*o`mb?KtdJ9^8BU_(A=mC9`HO#HF>$c?IW+*+WqI{XU@`GBg=CdB>lz zPj(1vq^jDhWGP?!Wc0&BCsySa7;>I)pE=_urs&fqtl4CQ&%x&z@c~tDWj~_gI`irj z(d#5)+ykkd8HG~TNKpH45TyhKjP`lL!vG1leLj3Gvdfmni?=UB$?uY=VDOUPGO}-fFy(RU~)$pV%?rl3k zHb;E<0AdWn%?JtLp*5MzsTT@f^QCdrT6YvQsZNxY-F89UaP}M6@+-Sf>Yzvy)$_$t zH<;A`lbq)yb0-W=O6SS1xLKdwT^uUjfW~`;(%!I~_Sr4{(OMWP{)oFstc=91@?$?y z!{GXUAB24$LLIE05iVk1pIB*(3G2?_9uzBE;x5$HSsyR$uPZM3T)3Pe-2(-h;r7Qx z&3ITGE*v^P_xj2so2#Sijd+h?LWJ=3bO9@gcesePJ~zKMiB93>KJ*seDD$&4S8y*{cQ-~mnhsu?OJk63QYDD5FDw;{VAg^9 zV&@W%PU2EAA7(wRFFr15)Lk4Q?1#pi#N)8Mu)Y{mvaz)=LO6}I-z08_Qw8X4E@3X0 z0r!#(^|9py)Y&9X4i_h3LlHIv5%-cRCInLM8GDMaY(EaYWc(3STreNemD@6+-|7x} z5*I*%NQD1}hNpWO!-$f5&L8`lOF8`I*sFTd1%A~+&=(IueQ4LDj7!1snq>V~gl9y_PrBKYRid#IqpN_QX(~(p#psPBLv_x-Zf#uyX18}`PCVfeev^QGF z6>!1XO>sq;oy1%r3uawwD&8wuhYXNRE+)22U#E@3$Q9CT#UikqX?77 zK}1n9$s|sR6p^hk7Wt~CeC>iW9F#_Nq769a!$-DZOOs(zyh$u`IhSx2^g5*)SgyH} zh{NDSNwsJJ6c}p`zls*lgMD5W>pjmF$nF-M(Gz;ZF#z3Wh8aRzpOmIwJb8ih)8|RU(8tv8n)SH4tf4 zuSG&MEN_cdjp1xP>~$X{ZjsOvPSr>2R)D_QjAtSYoPk}g45k+zGhp&_sBjzVEE4>} zMN$p>Z7J*Lb073*282^+1{MjKXa)LU=80i68zy3p(GwAro_PXe>WZZ9=fc$tspfmD zaLr{Ae8YvqU(Ee-&6c&*(VYj~Z2daZs9q)y@)OKnPaA=dEZz(*N-&T`%E`PZQ zj%ZJ#P52hU{7ZRmJ$Fyp&(6WF2?Cz-3`T1Zj$X?P-0x2pH;et@)F33urNPvYMwY}x zi21@ch#1#IuuE40g?zyR;a@ZnPD(#D5L4teI$*h@i4apVqn?oBVvkiA4W}?ssku~( zvW6+KMPOgo>YIm)&9R{f8-fTYeQ&~sPWLeyLZ6GS;nr50_9wnz7ni+#-;~38Fg^PY z59l<9?_^$#J7_p}pKHKtZl%R>tHwkx9S>c!8qj*g zb5qyMSYM#~KmxVtS@W0V7$FGaxdrKSZ7I6u$z9qQ${j9rcY2}EZ3@dfLnY1icGN1= zlG?TrmtsyZVnC?SP?{eoEEW1f_>oXygtQS?Exy_$pnHvlb&KFWomK{h zi*-=m642{zX@usUjFR$9;zHro6ak$d*@e=A-Xl&b2^1CzbPU#(HVYTA)`!$BQJO^A zA;M6n7y3lASx`fpoX3scfzQ3~fvx?PhRrBx7?>hMokj3QyXNGD+=Kd48zv6xAhfxdbm{Q5 zW!J76`X4MxyQ7~V8e55QNV#D3f`i+1nq8pkaDlk>8j_t9W7wKz&h4p>Y?K|{$q4nx zzqIzTtJW3X*?eiKaZdVN=lo0$b8>iEk{+JG6+EdWA>5_COL1PY~w zc-Z9q&DRf&5I~|Aesc!u9foQ;&G?@J4iOLHPuzNtFhgeN;H#xRpq3^mZ|yw$qHud= zia}G@miSq4SJMy@=XBIr?c+y|?3 zL92@dZzV-FiGp7w2$MSL9=$%_LkLcIznll%7oBK=kPqiaPum9rsu07|r89^W> zE;c?YJyNgPK1XVx-MnG-uAOU~_S7u<;4y}@ZCRW0b!svW?q7!JyX^MoFCHtvCiT!- zor&YK^b>Oy{!8$|Y zycLtS>kn>Q@cA6$p-g4Y)Ojn7&{_G-n7vIBdQVD@Km%Zb`?p}kEq41;sQFX@;ZlG$ zB4fu_*Vb-5eso<*`#zbm;l^2Qv_F4y0`*8a@RG@QKu_dbg>MGEG^)o7>?uLvFRGi( zeh+R>e=hbqB4T!=N-$`Ur0?(?IEDw+%_ASajXBt28RmkHFWYnIxb9iET|_XD-aJ$$ zN3@4A74+Tq2_vl;w)U9#fs>dD`kLRdc5HHLw!OR2!mE4WX7c{8V~(R4)m(wQIoeZ2 z%QhS^riz-~d2cw)m9+wC1xyIEGpgqxA}5PkL?e5Lcx^1Egeuosi5a0dk;T-#qBU+Q znqnd%q4>vQSA|(nPs@4t{jcEnYr=5>94=Y-Sy~O7wIs>!SzCTuj(uj1o>Yzc{x(#( zcIfqqGZUOUjGB9EUvrwDS6c?G>Zm9EeFI5n(j8RIpv{eIxy$z$)r)bGNl{6j zAtEU%Loy_jWT-4Hz&ufJEcK=b9S(uqUY#K=cCvT(33sIh+R}>31~VqM8e=%sgadZ> z!GoaJN#07e^|L$SS%TL!my1Z1*7|66U$ZMSCoNhw#Yi;J6}rG=j`;DUC7Fu5{&X&G zeL>C1x8%y!HxC%~Pg;x{b+3%#f&JDtP@qMOn4b4;$ZXd7VzIQth)yQ`4 zG=9+&=Uu3g3y4mMYI+XyE$29bS-?efNEJxhCyWu)R*@|b6}3cl9bE8$Ux6#$BKW|7 z!^$lp8CJT0$0_S+X9=rF*Jr?FNMXgayOd43YF8eZJ9n}1hY3n^a^B_s#t%DBzJN+P zypK|=h_Fz9yrKOU--Udy$Gy}#Z4*)5fAYQX42b--xR_D^%{i5@Oo)I;Z63dT)$EMr znAW*Xs&PrHH`)*ASMQsHX`O3n%CS=y=T0&XedOFWVSe<|>d#i}{pzF+Gd z(Y)~O>hCMWeW4nzty+bDPyHW$>%7!=eiX2Fhb#*RFc>Oq_0(wJJ% zhF4D$*>91n<7S8fqB<>8*dVP@Kx5<}QVG)V4$BQ5oOq*!RK*~Ye2pocDC|@+T>0j_rz`gC!>I1x@| zp((h87k}t(Q>>2-SEggv!QtW%Y$(D88eGmaA&dm4R{{3Z-0C4<9C~c%nyzU2v8#^@Qe&%-`#AMl#318@m4%XoDFWxEIv|;M_d;=Lo zCUTS3Pu;Rphr6pVZCd*LrI|(;06E-Z$NZE8o$J;SdKXk9aN8slf~pm!127)A1S4{^ zZAH!2yk9uYrG_Y9=cMOt#A)J>Qv_6|vk>8EDomGt3>2n`k70-x)+Issw@rmp(r*p0 z8*&G$a$tE*Qz5P-w;pyw{$N$7aIqa!))WQMRWlOC|E(9|6&cVFH_GpB7(9L}ae+eX z1j^9wAUGK`E{0-DlSoNp5@jX%Zj*p&f(n8WXDSK_tdwT75m%vG(OfPrW*?!#qi1)VpBXr~)L2!b9)sW#rf!b^Uw-jP-h!BUL7(9&&Wk@oO% zJihQYTp;JedE)K3dE2Ol4b;?usujcOLYGhplV!(dziWzZl{F4*o8@X-FMgKuCioe=e&V$iDnvr1Ti}6fOpuRd?n+_`wVw4dDlQJWUObno^}1qU`5@7L$j zQj^Ax!N_U_T+!yPSiW)1s!8M0GqbE&hOGPvdCPU`2s~H{-zgqhFTkdswShAsJ z5hJ!DdNPvOo}z&ejp~TmFQn5>7BcY6Ce7z3C8@NClM1^lcZsDvlteRyYoNqF#Zv#B zB0QTR;$4|`Cq*)u$0*7BIX$F`ocZd!8J)u5=H_^ z4V)xrzK~N}jL64J7+3KUMz0c6GrSu(UWDIv2(Tolt`LTe8PdMD>?Nt4;=NCAF+_}5 zm;p;y2|xM?xDxnMUdhJZ0>!uiVw{Z_TPen#h;dMNtgnZBHsM5h*QwN!SvBQV|i_hX@TsgeW!lBRUUU)I@|{=88y7 zD7po?7^c66itiOLTrz40e|G!Cuj{t&JvY1l=z8f%7UPUI+F!0-rl*-hf5yWTrf)OM zbZWnD^9w5Z-6EL!n1#k~74Qq(?IU8%J(&KGg~_iJJK=7Bgn#$h<)81eu;8Tv20~Fg z0p4Uhx&hOvM7>ZzHg>{MMR$L_e)k3obFo)nDAN9X@${{m1CNo)#`$+SygxYq21hda z43f!R=kIRHNKSF4$0Utjx!!J!=)ooJJ>ocr8`GkjpeTYS2s!VW0v?pq)u!LX!=4P{ zS({YT`JeCe_RYy}ioP3iv_V$(%;{qd8}=7&dz$M(s*w8HFXxV)5Sx~n+;7t9b&F;% z{(O;fL0y9BxE#-rJCSlRf$ZJYFb{ zN*%PFzcN30@#V3i!)Y7M8w@+w=5INmyV`$Gi;kV++efdo?@cvCrKiOY(?Q$3pG|cI&qJd282Cw%fDErREq$ubs3sSEq)j8PKE%6gSy@ z&!EaH#bwE$UE7v}dimh_7I(jI`d+B*KeT(N_NRvbv^saryp;x9)Ud?**&Z0#*4GZ0 zf!Bu%^0u5?GT339JZs8i-85&$42ND_T6_833DT;kuQUM++=6+1L``P~=8)BWMa}$)QczTX;h6BG=)M!Wmh~=>R&9Er z(U$j~JQ4P}ddIhu4n-lyj|tcBK5?!?(V);5y~L@vzR*l+2S4Eans}3R6nklWCYI)1 zZzqtqIlJ)0uS$+K49j?Hbp~#-yc8BZ(|(%+b-+;88X~|RciIKkPsiXO0FMA@nk3&M zXij~Q+;KDnAf(q2fd6@?Qh+#Qu8-@1j39S$w5E)FeP^ z0S@*o{4f&@h))hSKP#)LJrkSH!E3yM_#Ff&-oturOsSdrdW&S{qB8_?4yh&WaN<3` z00s2JTaA0Mfi&UwV7Gn5PRScZM!%Q(PZw50)ul*5HFz!(;W&aK?)=>B&ogrZNt-C* zqYJ#&8{DrHZCJm<5c8bNN{Y-h>!Z?E?=(Ju2HQc@<<8hRb+tkBrVmcriB8-9y;m^; z^aIbmP?g4vARq$Z&d@?|1g>*7hTl!^F=}X*+1(8O-bz)CJ1qEJo{#FaUZliZK-ZMns<4DJ*L``aw89Fip zumByK8unqe@m_1}(+iU*@?g9WfTK6zXws`S@gl|+hJ7tK==cD4zO`Y74rUXO0QN95AKy1}JKWJpP_5*uI|w!k!O`8}5m3583)bt9KT zmFjf@Cg^cY8#<;2Jf|jxwZ}1WK=@+j++T%XcBsXzqn~; zsFC<6gEmJ#Pcww1Bo7bPksxI+%k-g!KB2cT{Zh1<{+b~``C`Mmm$@|MD`h(mIP;w} z>AOj)fE;cH*;2F?_mpZ*v-~_Tq{(h*vbQf@l-Je0OAr5^Y3 zjQ1D3m{Ny5NhMnYQ&E)P!`hcH<|kBW7D0L508a(1Yl<1&lE53k2jW-2gQuk)JgFPh zpVT5AMNJ{l_|iSO+1y`0+@7-&A$kTBOIM3=k8>QVghAzVP#N!p;<}2CV;V&F;N>gqhKv9%d&}AEGy39N$9}#Lx68cIsJT>>ceL;-G$!^X=XL8=<{sN~ zdVJ1$gJy63&$v;^P41sNNMEZ>WI&&taR*b4nxc-*5yLv`VC6dP;C|!cXBcd`S*r_l zr_Qe2IoD7yc6C;oPCZ0YzJ^Hja*0$}erT$lCXIqFpKWwOaa;%Sag%Fs8`!tky>{LKf7Atnk-%bf)fe`V#Ao=MhFzpJ-l(5Xmf>$3dSi-6fGUU1-!?{{=OVh9q6niWbBI6G zfC=~)48CB+n+Rde@D`M+A4Xs~6PM;;;L#`N#_jvyyk~QQ_cgDBH=n+V&jPh zoMYLVaU1kYcYHo~sqw@(<)kU|mw#rA{dVG-2}>OFt6yBUY0q)p{r>B^8A$a~CI17Q z*KXqXtobZ9Im;PswDMBbG@R|Y^y&%=LHA+UZJ2!zFAT#;?R`9Vt8#@r=mM2_*iO!9 zZ^Ib=B^kqg$v=lN92s*@Qlc^7$#NpVa;^zpP#a&|Dx)OCxz_1*8!8^U(dov1+#HXA z8zl?0?FhpM<+LA2+;ug-jr(D=Vd+#(vzQE4M$8?!a=^~9rfS<9R~)yed-&f_Y6ibk z{<8Y=wO2aL!1w+3)jDaw^zQ!YJI5We=7C$an1T_@2ha7`Uz(xS435rpq)jk@pHee$ zTjuhy@jA^g(hM$Ycjd3%xX3`NDWf+`S-sJhbm#fgaUE?;75 zaowY~P*Z>E;KJ=EjH$RkO^S-0nxJnTcl!2tBXqbzy799xDqEymG<(tKiw)523Te+5 zE#GqV1AHQS#j(xgK zOHbZCu<^60YYm!POMv4v&laX9EEu6D>IPkjdi3JBWr@ZXI49;S8(t~A3};Y5W7ptu z|7I;1BZ#pJ81clx8-J#wze4ndpub#~N1Jwr{v?7_B@6K46ej5~4cC&K;rtO034S9P zu7F?hRC-u7l57DLs&G|!p}osn$p)_Dl<^VW^iwC!nKR8eram`u^R}6J`lsJr1izKW zEwCT$DdPW_2>iU=+@qyi*WTB!#N)l(SDfbY+==$N+4?}j#*nsI#_2I!W1Md>y+t$& z4Y=1;sB-TH>e6s1CcO5o^2CDUs|)g+KUGT{8#^&}h6fx`?wGz~(uRp1nxyqlQdUQ; z8or?VukDnYTz@6;$Z6Pw1Y-8)r`DjHVDMA6fDhWM8&96jGmu@%!7Edb-bGn}Do>!( zWA@FjQ2UKS8U$ywd#3zBs=UCpYvZd6t@Hdf=>kQW@*e82OXj06P!?*IEfhI8J_ zEBD=V?(dvi-o5ATp0Pdc*s+_BUR`QjKW4;=p`M{5=S>^uz53moZ+^FnamKiL_Y83l zTYk^lv1wOdee~wPy=|PnW7pjMo&!&=Sii&jcGsgvOW!fB-LZW4KKB)lNejDO({15v zWy>Bs@y_GVProWHuHXLDl@hbzxijnStxadI`*or5JJWARZ^5*{?{M^&g+>gx?6Tm` zUlwNly3mY$j5ODovd)^!-~Pweum=HFRHSMv?B9g1*1BYcyM(*6(Yk~?f2(yya|6xU zDL7efiR)drV6ystT?>8P=(;QIrEg2e35`;FX;-xL9N2ff+ZC9w<1hQWZ)0c?E4F&S zr==XKeMw7EwZU2n)&pqE?X_onWt&ln#Mp=K9KCP<&Yk=AkKQ?W=;+ad)3g(YA(3O{ z<&k4U(&E;mCtYr->lGd-na~oy8}Qxk@2;Hm%6Cavw}O(ryY8yG;lnJ++oxMf!$sKH zFx?_IwSzzd%Tqnaw-M`j=V zLc0r^I7m(8XCWR2HIebHmSNVe4j;6Cakf{k=;X66)VkJR>Fegz71?n}`z74=E1*sr zi@Y`DY725@u@9d!bMi<}a{s=TeGi))yEH{epG<&(}#`zK9E{bkXknlYa}7YThLI~ZfO&_ zrVTQ8r568{*6SK?G?m2}3-wwS+n{_L|?E8pJl?Y8Hon`%6t|KmLj zfW%z&UVi>9J-goReRD*w*9$z4gb&zzjjed`#m8SbeE7*ey>@u-7(crItsd>9*315K zS>N8h$Mm`5j^P!rjQ75{edlvWJaMSuXUTNNpH5=JR$Krz&`#~8GfnODKQk_!H}j#{ zp5*edtw)z|>mf^fFYDz^-uW2bD=fSHq5i|%ZDtQHNtNsFaJq1 zmOt?F!b4unYSR`P7rwOU;0x~eSHAduTHFnIX+H#WbMETEl)~D-Do*U-=ZP$z2UjN7&_w0k3T6a{S0}xNvRC^d$$gfk4+Dm6g z+mD;WtLi?*biVMav)D+VW5gtFoUB~Kd``|4JXEI}oSJ+*WI6koIjpO=<%@}Fhdws; z+dgUAQTHD6;+3lwul5`{y6x$w(7I_|_p)YEfk2x!2))RRuo*AA&*W=^{*%wGs+s;% zgyq$$DQ?k%PkV^xMiiDLEmpIAg85fUa^d6X?tT@9Cj0hY-tCczvRH7z)_HGNxV5RD zgztl^4qKla_uihTA6~jT?ZfHjzB5<6?nO%rL;h#?o8#^X$7rUyBgn%xAnu8}udt>x z{7!ge_?Yp^x;bdkzhy?>v^?BJ!&;L+Yo@bPfiu&Cc&*n)_p_QK!?u(xiPQhC8oX?9YMx|l3WgIR{Hg$M) zz&|yM`{VsTYu>cDW>zd3ST}Rc%)ef*=`j4>Hf-HBWBsmm)Bkzr)+)T2%-A^R+bj&s zCu`2IQ*#$RimsXLwSqOEU8 zba?x#8!PbBlub`)o!>&cbJ3={!`QUYZblvcYa_HLK_j|)PnUWI_;Yd-!cFoxv>h7%R zKhpZ{POGXbF^1m{pR{9P-=Skij=Xzx&ye1wx7>EMH(Al8&sLN(iHqjrRf}?^PEoWR z?HkO@PnYBK`WT-cbK92NJQ)0qLB}*B9P^J3TH=w{w^WpSmza{3m@BcSY2I!7E$`Qj zHsa41ESvh?an;$;`!U9_2uCF1k@Ci>vO|CKy!hy-ky95ATQu1_EIfX{<)F6TxOD47 zTh_Vp;B;K|S^vuP>v~V_*(Yr=QbtH7<;s-M1EyCo6;Ym5y?fo(Z}-p_yv=@o?LSZA#cpy8gn=I0PBAAdSK_C^9rwyn3awl;@O}l|GiV z1b<5^XODo;@5A){v>&MQVwP5DFwABmeu9)hXK4-z~ zx!!ftuv}An+<|qQH=3s|n0oKbxsPm4duK`)^Svvl?p*umBaf~~n`XXOOR#U#ipPM=-ReQMXHp`FD$IvM~&}2CBOlsYcHkP_0&!*N@ z=U`vE;h|Kl)t;JVse5li>Y2Ma0keNMOWoVkQ|sPNPpx}yLFyTAX6hOLWL!AE?zQ67 zx|)rtXRcbCTKCtDmb$-QYpHwb8PM?5y0;cs>fQ>aF0mwO!|{rItX3WN*qD`` zDvlbvm`bwo!n|Bwn2#NWmsH_dmFmAS5sS3GigHVFQ!{9XC_Qf zJu@La^~`O^^oz*!I9@aV%(y|8GqaKF6Khk?jM!*7GvZp1cAdJW&Y(YZX2h;kZQ!I` zsc~nr8Ntp7%T%AgpU8d43N3|AR$H1sx1GVC%uXL!Z%y5Y1@XKaGCpPh}@ z8E-WXG7dA2GOjZ2GCpN|(fF$IedE83|2Ec}Voj|~?M(qhTD#UX*fh>G+w_2GnQ5hI zujw_@$EI4-&!&2FjJc^f(Tq_)^Ht^>&ArV1%!ACsux50D`2q8C^G5SFbD4RU`6=_O z<~PjmnEzq^1fghtFrSIh$Hc@W#<*iz#AG5EO#y<@+!)g_1?{h=GHi9PtdoX87!3^`mPwPg?Tln(3Rrqdh(FnXb=z zldF%G?>~&iRr-P#!iH8IZVl_MdVKJo`(eQNhGG4?hupaQ=yLmgGkbLEb@z@#hxQzJ zX>(fDpxx8&a3@z|(Bf@-I`5Wt&;OAZS`0huZ_QcuCS{b#Wv!w-@j5zdh+pQ zE4HT%EiSnsoH1I$O{}mNPJ6BV-M!BpJ+US4#_5ZvJuuxnXY4%-2YTW*zwpk6r#-K3 zn%cj!<(k8TjvcMsxo>xx^-qs%o?hWOaB%scfv@$Y|S?l--@=DAPO9yP74H9kCh+(Y+yI=1*z zINv+4tJylizGUH&g%8~yv&nS-^2Mt+x}P?0pSfz}`1|IKUzoOWk#Wt^=UQWo-%v(Bad!vnnete-k@%!u)w7J9EKH@~-S{OCzj@9RHg$cC+x!P%tcjX@>AH?Fxx8u@eiNhRFh_ofDAvk6(KIOYbeK zjQwVh8#%x;VBD_fW_xd$W6XJ}`^RZa4N;p{>LRSIAEMUKqvh|IE%%(1pESeu5KD9a}=NAx626+>Jp z?G4j1yhX||9sm0al^?j@9Q;b_Yi=4dZe-e1U5s1Gp59#U*}Zkvh?`nuXLbQD4O-z( zkx4dI`-Hi(r%xf)`xEQkEcO|T=3~R~Y4z1Z}wH`zh@E zOdIr5_=L%-)eT0ZurIU>gmt8MFy?K~!qEvPt%d|hq z(AKi>pTb?2;gyiJx8+q?OJ_&)k|YU4f^{sLQ2Vu0G18E)*X~4K?nQ{B)=AdA2&aO1 zVRa$jI)2hCyZPQyPTC{&+tY(50 zQ!VFVs-+w_g#(KL#4{sI$W@2%tgo+{bf({AYtmi`h7!+Nk~vmP6FPwlr&_UAWS%Sw zv5vAlXt82`DRTL;__NlKQ>J1+I9Vo+zZHob^YVkKpIRr&Dl#lEv(`L>)n8V1XR38d zs)J*c*3pv6mciX0?dgGMk0}WEwBm(r?x%I_C)GI-qXjy>1EU&N^_a}NwuV0)Zn4hz zUi<9(QBc7RN!DjI2hIUx2!5p3dRxOU?@#^yTfNrD`ebTb#*ndUgHNb?ty)urez}Rk zV-gWO25&7fSHWuk=4`JvW~&jMVQUiNAwXcg^+5!R(t4@~w7=`MnbseZumTw?K;xk5 zY*_`KVzQ#Oe5G2gE!Ly(PU=ES?e&TV=pG!SSRB(Yciq$p|Ez<F>PaPMfvjTk2QhdAicUp%*uU?ukq9zR-%i|~f~5il9! z2@(-L)_PrQe6U_;lY3O7<&AN4Ku-3=e=hZ$=1@9N)0 zD8*ll{f&oB>DCNWcT=&Uvo*tb%Fx4br(u|>yYZCqlqubmju^tzjlWtma7~OU#<1KJ zW6iUiI`=cIG471~&?3fD&ixD@8fqJUzsQr2n-RS7u<^GaQZ0`BjIUcWED6SUB@go4 z=r8i@=<}_4rX-w^drFz>TP^Qd-ZSe=L(I+0BP=}-+;Og@N91STB3tta(-P2L^J>!} zb63-c_?O;IXI8I%_AE9R-3yv{CeP9M9hL-c-?Q{WX^76>v&^+D!eXwcEl05bwdE8vmTAqi27nKY z_9zGg#5m_>g!w5!)blRDT?jF|hay(baKyU4OR2{1dBhX?S*cKdQNjo}^ee{7su9QD zt$d5f<6h;I+FWg^{ESH0tr2fNOU;tF_G&vsxW5uZBmY5c@-DasamST<7J>*{OO8<4iCArDoJo_d;3b>peEN()d+PI_zAo4q)5t$RgToZK*|l;M5@(DwHjKjQYFpsuQ*?Q*qULkd!IrxB-J@KlQ&rQolBGN(0&?=CoK zffQPT+T(m4w&!#uC9oVNAi1u@U8fsL;eXPXltdLuq82)E5{SdiJ;FQ zSt`pfk~8E75{ZO0#2+xLSfJ6&294(ZrqPI0l3ML=Pi>SZqP+rVL^`>)mL(uIAQDwm z-Vb>+`ef09=wEVIMk!!()O{*#J#t+o&Q^+5H2A2C`KPQ%dC^Ddh#V<>JrKuSs9D%b zsnyW4;T(=g>XE%#V0Q@0dKPjT^&KBT58?rjBX|F-|4R9^{s(BiQoRDYYYob(-=Jn= zEB@06sU_tfaK{fw^DCUKVrgF-Sq-^uK*qn2H_?A3B#-Qsb5BaKT=@)n02+Bk1@=zk zX&=^y@suCv+i(wMF)N=zM_=H4#M^xZZ+BX7g0q#7J%a37NrBgkHp+Q@B!ybkMt4Kz z!Kj6XpcWKw{RH-Rp*Dn#(Zauk%{HwsgUsc>U7d!j3vqRIqpLG{-2Zqj3juzxVO0Okyr2FlB^tjYpg-A`jN5pf8 zrC0J^6}7r}1aLJ8`Ig9bD&q4=iY@V+d~7>|x?ulqY~|S#v7H2xT3{zgbRc;_ogw!l zAF5a(+6CSK><^W+&KZywT=x@ZIKS89+R@beo`c9A>FAdmRW z3P?H_xr%BjBB^*{slmm=p8m2vUx{=ho>%Hqk*Jbdjc8B)mZQhX zm*Dw`d8j6-pXev)m*@`|zBisWoodp{a)aeZ%a7I=>u76T>|M#@V=H6dZF+ChOBww<=awl{4xwzH0Roo$^V zXAkFL=X)ugQ_i}Q@XK^9c0K7j;yUS$bMJK5cvgD0dA>)Eu0k&58#VHMngo26#)h{? z=?&kTX^UDqkKgpU?YD39Oh?T)51|bgK?h6l9g`KxD#TcP97x@TxQ4HyW%m&RM*dSd zfl!g3DW5A}ASC-&%D zxNw48D1jX4Jr|S@D!@4($PWsDf}jwn6R0cb8ql?%ZlLQx*Mn{ZbqC!9>H)eLY4!y5 z!v5``iAZ-6Xg+kY2(%2e9JCFz7qkyl4%!bo0D21a5~v#1p8;wCl4qhd0GrSw*Je;W zC=ry5Gait%CeuJ(P;*eU&D9!D&IE}M&BnG3wr#O(2RdK!a!6hd$;%;mIV3NKK$AdwYUz!TtY@cA{FCj_1q(%>>N_UM|$g1{~W6 z+63AR+5*}Nx||k7@{d6^pp&3qAZZx%E9x5+WB?iA5#Z4TgXj%k=n?Edumg8EK`zu5 zsgMx;QsC({v~n7FIt@Gtmd^RT%USu2NUuBSCQuL1%}BE+NUZ)Yq|*=7A2a|o5HtdG z4`?K46lgSP4CtH{iv^!1hAxMd#&{45t%1Z*$s4RtV&$Ud)T6a&2E~ICK@p!=1l;7RulctDuQ8_`@pr!%A3~)CT7)tRs#W;Jgpy2L(VuPzcls z&*=)f26Qc`8|XUF^`MAfEQ5xQ!7o<9FIK@XR>3b;!7o<9FIGWwWzbw1G*<@Al|gf5 z@QYROhgI;0RnTG?v{(i$mO+bU&|(?1SO$Ms3G1webymYVt6`nhzgg#G+&2Z+OvQE@ zw$mZ=4A4x_TwrA$w)26%1=ubG-49xXzaPMMG3Y_i63|1SrJ#pF%W(b?Y?ouZ0^5~% z-fC1Jd6J+63AR+5*}N+J^fc!};x?9iTGMIASw$i6c0cF%5gLgRw+bV;9uR=WM|HeoE|MbaGuXACo*Vyk~ zuBMA>EmGrM-nVA4{<@UsxJxIU3LbR3kzw!Ixn=_!Hn)7O%#;F(J zoDbv&1wcVi2-FMozkT8_Kw}v6E6}Qf3?ONdiM-Jkh~((v-ae|G|HflCE+2WyY1ApF zQK!gL&Tnl>>#_~#+*5wv>bq16Zwl_429nm79%Y<|GR{L8=b`@yIpNJ~&#TYeIF^Ha zKM6D!&svY|25dKiHi0&Swt%*RUck9V zh$Iq;K(yS@)>B<0Ov4k?5E0*or{>|Qd3b6bo|=cJ=HaP%cxoP=nun+6;i-9eY95}N zho`2&2J`ULG}vFB+5}_)H7XzEBo8^sLr(H!l%C}j?N?n`Mi*}h-;6Tp$+D4FKFfxd zjS*X(r1bV)~bN>Dz=@X_>o#J>ObpIV<@OWblB=qtHd`#XEhKP>HV$7 zxX-ydvIccn7t_Fss4_OVYR$ioK zSqa=$0=JdGZ6$D93EWm*wq+?JyVAP67_O!NV1XRb(mQ9#jcb>v24avWv7OV%!)fH< zH1cp7c{q(coW`ge`qxM+>XXj(ismEzMWAJ%<)GELavQdLLHj`Ep#7i&pr=63;QX_o z=RgNRFX32w`rUKwTWO(P+}B1+T6}Iqhv)YeA4Q65K#>-V$a5*3Ub^=f)rk0uh<-2b zH^fhOxCo}jvsD6Zl|Wm?|A6CKw8GJ61oZ&jjO%-X1jiTlJ67Y^qbSiepmm_j^*5fu zwaoL|D1ZWUg-)Ma#BO8R0rjrPI?uj$a|`6D}> z@b{%gX=Ehk_j(fiUAjm5d;CeS^tVwN)>h}dy`jNpil-KznTEIFQSUq(b=e#c#$w=o zGvR$R;e9jVeKX;GGvR$R;e9jVeKX;GGm%mzyl*B_%0x<;@V=SwzM1g8g{WN$QM(kv z`)0!XX2Sbs;=9ff?;G`8Vio_h$DNC78slUG{@w`M1lkPR0@@0SV&X7sJsE*NhuX^D z>R7SnbE#GR&U&ARPptqM*@B3+6h6k-_(_l+N6&drY1u_v8|VCo3D=zatFcd>2>GQS zcz&IMcPHroRiXb^r8Ea&+(u~$Y7NQ+$;f{;wr#M*`z?-%UAn(_={lwto-KBG7t-km z>JJ(K8VDMMbngZY1`P!b2aUk-dq5*Wqd=oUV?bk(#uRL)fn+>k9{!$>{RP-A1l zgufrab}{Hd&=Sx?prxRPLCbLd5p0)Zy8_#lpi7TKRH1KHi@sSc`ewE0o7JLkR*Sw_ zE&67)$}Z4u&>qlUq_+=L4%!bo0D21aG|s&UdI|e4WBUr|2ncm5`e1J;pFrLkoI8pA zud#ozR&3O&Ga_|xL*EOd81y;kYLc2u){{{*Me0lGjb6N6cNo10@g0J;Dj+w~`Vh25 zYrbXa9fN_8&Lo;Uu`@loQZ%8t4%X$w*j4OBX}WwRpa0@0{;zT(0LzFxoOpfs}%z zi?jl9OQ>d#EJl!fVY?r`TZQjd;k#Al zH=46^9#lq+FPk%_-sGaPMp~s64Xx4&wEtDSk4i;u(?DJjW>3K5Rm0m!dvgQYn;X#H z+<^Ax2DCRfpuM>P?ad7+%W8PBYIw0~c(H1Dv1)j%YIv+_c&uu8tZI0yYIrOe53Yu{ zijE~zqns{f;WE-9{nZWfy)9hT7}u97i*r^jR*Ux*yz}>7{!)0ocnM#ww;-h-@#KGe ztUNj{BOVV}jrJs%WAQWRtT`Dq)cJ33I^pk2yQ8Sk*v>GD5{S5X4Zl zjeV}>)M0WS-U3=r#Vtg;patgQ)zp{Q!?V|)uCKy=EqOJp<-hueJm4R!5b6C_H=cJf zG{k?BPUC;kAQY^2HHSt?jpx)aYi(C`j6xb zS22xq*G7*tN?B$KUFP4#auK;4xxnu-w>CNzEgAGC&ie=5RG>|*phbay_)Fx&+ZCn_ z4N%tKN)^`3e}b9FUc=v&f+O5tDY-?8f+V!(8p=Wbl5`t%)_@n$;cqERIv4zP5$!jA zCay1M&QC{kb^h54|7s|SAAWZn(ju+j9l!9p%l{1tso6`H*5&VyoQ2LJ<#3*M|Hz$< zuMy%$mpxZq!-vo#G8{omz9+IRmC{z<;h>c#RAJ@?19u!aiJF6{)~Npu8TInNsYNJ_Z>4@whF?P8^YCpUP7NP3cw^V7ZH zum7q<8>IU~_niNnXr3>>m3uDK-1(Te*!>sYaj|PIb?nk5_4`z#N21$vX*TGkk=KYy z|NAnE-hJU2$Qi*=Bo*T4w^Zm!&OMK4gRhUAm#5>0k{2J^_+Rw?^NxMh_^&^*f6-LV z^XSpq;Bu*5-kRmk|K0+A|2$|>S_-rz=tp!Ut)dI{auMr{mP;f}=<@=dBW0;u{s$X{ zAC9yVBISqn#rb)Jrq0tGQoP{r^RJh`E~OXDfc!)MF8>6eM&x2^;KJNSlE3`@4cEwc zL4)l^(u!s+s| zOjd5hyOnA9Qt%A?`YE$9r=dUQc`d}Owg>Q0uqaP(EyJ^F21fl} zW7al$3nM5@s#2CHN|J0#~=@5@r#E(@5S+nm<^hUl9`O>-iKctzO6hBcS#8) zpoHc??z#A-qMYWVTo>S%ff8E?3`m)!qs$(H#7ptf>2#FdGMtt2%V7DnK>4kP4jx4* zwnBNWLqB^xeyvenTao5A{L=6>YRox7sqIDzPvX}c-`C!Q{k@pmm!Uk3UkiL_`ykSJ z9;;QZP+q{VH4t$KXAfiUpBE82UdA=A;Fk`J96<_#5(80^Oq9eCCCNmIlPIw%zv5@Z z*m1pl23u8>W-9*SUAa!x;fP+<BN4Dnu2{7Mlf8e8{^MTV6lZ_P+O`ku`laqoN6~9GJ%McEW|h9 z(hRK0U-95#g(|U_L@XMJMIEuICl(WkMF;fh1wPX8YX%K8$G+e%h4@PW{<3f+8^08y z&mkNrjX*?`4|u`l?uVK(d|*cTMqFfVom_QjWYiN!Qx(Ml}F5{ntcVjQt(0~UAV zdcmKa__GmzUg9r}_=_d}GBC^bMOEUwVzCLl`kY*!ou28_H{Ss3Ai@+J&YmNxJK69y|Q2ayjM zKVXouF2YBSo;XU`65(THzpR0ezk9UuW&pSIfYt@@m@->ie5TCUeuy4(8IZah2wjQU+pCGpwLs?j%iMAC z>o=h0+k}~;Ti{i<0mIvs9q_4-WA?qw2Y(W1-ivwD<(M;l06z6;p!r$lIe1j@r!T;d zzDPfM`BZlQ;dEZ64ZI3{NgeBkHkzRZbi?z^f-llHXh(%N%~tM23*cEi{m)7j)*yb2 zS?d2*PQx08pw^!R>t6^xt%hu6kl!u<^_U(12Hq{|VV{4&`$awG%KsJb81=B#H}RfPuY9Atg%*Y$ z`K)Gof5X}lN$+jUwU_kX!Hj!J?_JEhm-LQd_PwO{9;A}={*Jl$lHU992a?`DFf;#W z>PT7=3jMQ+yncgYzaa>Sx$1v~p#QgJsY9MTs1X!+_L(TjbNQRA6#sw7-ycP6V~iD` z=5YgIvoHrSnm@5q3-YdmUf)9QtD$pCiTd9)AA6IuFa2t_QYvD>>>}rG>7gQmj^T+d|cp7HTKOf@3Xotza{!(ds%~e?*tU{bGGcDVF0p zN8~=aPMw7N%P}`%mSWR2Q#z_YDe=0mK?$g(&niasS0$73h)frf$OqXP6J<-nT-_wa zjP+t~>5`G3sB9wN`P7OsihPYpwFY)g>CFVCBh#t--ujoSb(3q%)s4mPA-RX5o3;lK2p9cAI8|ZPg!N)4i)%#IK zJr$SEs9dWFP81`xg8?0Q*)@a{aHmLTvwn<3~XKLBo^|>Z!<9mxgms zD=l>)r9d}S>7pxET>2}J?)6Hx&Vp@*;^%YZSr-zX%V)}SBb3W$S}|9~ivEGM{tf>9 z55*aMt~~n!YQg8rvm28O4?VbgRSMP4y`5KZ<*gBF#kXCt^PydAm`$0u)m3Qmz1n)FU7R=nAC^X))y4 z$#X4mzJ=}%U~4|MSJa2qmz4rgNZqBBf^yUkaova5mZRUeLh+*&(-GLoQ9o01buD14 zApIWPpQN-Q%~qO0cUOW$|DszXC==8b)KS+~X(9yQI#>wD@*3#+M*GoYvTfIJT<#Z& zp7Ud0$}CBrp)@mW;&aF1?{q!NL@k2dxuA=Ayrx+94fb!tHLZZZzbH9z`AS#lc}N4v zejdmQx&tJCU)4aZv7G`M2pR;sv4JjkPg7hY_x$1XQD-TnJZxEOA4gQxmQTE_C`~=5 z;qT?GG1~0pvRV{9Y3?VI%i2*D^J8TNyaOYen0Y|%;&GV|u5$g4$`wE=<^jkNSp}qG zE`ad%yjNz_s+?1+a#pR1`H1pdc|Wak{h!JefGXDjs$2!Aavh+GS+?@@?&LBN_i-wjGbM*na%*8>RTJGb0 zCicH2|2O$}j27Pvob_e-$(7ZrywS&g z3-Xpc-j4fSxPKk@W%aKP^B<(WCi5P3z=QC3@=}vMv@aCSD^mGIc0T$;l*gSs|-K4?%b&(t)g%)uB}>d=;;kRkJ$u zorKHES)C$lXLVdXtK<4v9aqrmxQ13I^EJ_L%^=50TI@^CFOqg$C320de%C{G z*`Gu%^6H63S$&TF9Z{htD&P%p4aRSgbBP6T4BXCr2aiiB8@Qs}z*06~MWh^&c{K*E zLor~ckL(A?gXAG{S*vDXZVk+>fw?s>w-^sYc^O!02CR~l6nc@*MGg&&oMFIBDcP5K zqXy0#HE`~zfwM;qoIh&7tSLGBA)oaT`3a`;3y+7%e-)0E7QzkWP30O@JexsQU4YB{ zPXlMx7*v_zZ%}W*HAa-CtOkZyT8tDU#^nphDKqGyik#nz& zC|OBC))AmRMJ{Uzj9g7%z38)h;tI173op4!EZh}7%E_P(19hq3Om{_xzXh$a2EGF8KiEAlMK%Lwr zwqxQ-a}(E^o4DHC#P#MTt~fVw&AADsBUkn#?@vB}d?5KC=JRgy!Q>Lx$;7qjCd|+k zSw`^6d&ozUk0KvUK89T8>ze4nO!QzTl%_ma)~K6Mrm{ba`*Y#FO_<9o#}|>ynspOq z=?a&1>n2!`@J-~hdffyI626su8?ThOQzp#CmAhm$y9x7gh3_YqHSH$M$`vlN=uMcF zEBjK%nHZVE#MxvfU`dWh^bwOpmjaiWdnU|mtN@p_?1BX2d#|n6G%+m!ID>JEx zZvmbr>C;o0=&4MId4W8`LXk4oPfGL*@vag%M)qYcuNk$HaIs}GJdAKzGjAsT%@SV( z_lO^`z=H|*k^9L5eoiR9ult(@O#1^(rFFL`tF zEb=zwvew=TY|Fj5T>-w!+ zM_~mr<=%bdG7G^9WD1ux{#GDU`19oQF5Zf9Qb}3XnplBS$@y{M&`OkAIrG;_WLk+m zE3s!qs|nWtb+{g=t5#xJ?y)TQSmG^~xY8K&wjac|4;ew4=)G5LR8?nSjEU^&_3`jmFkqZW5 z;fsXNMms!KnL{pkh^58FqTDO6|0pas7UeEn+R3qu;tXvfN`??y)TQShl5O z*_MuFX~wb~V;R3H7Nsfa)bQ!GeD1g8|0e&A{Cn~r$bTgNiTo7#&*b&O(V|8^(V~`p zJ@=b%-$L#tN5nOp6>P*tu%Wi(@pe4Y1^ajh32n!-PK;-3DxR$=S=A!Pr8O1L)>J%O zQ}Jv~#j`aP&(>5tTT}6DO~s>Llk25570=o#p0*!P+mEO1$J6%X*_w)HYbu_tsd%=g z;<464*3_(pEyuGp70=dGJX=%oY)!?pH5Jd+R6JW#@oY`SGwxM9BSyu;drLafnu>?_ z24`z3o~@~Pcx>d5t*LmnrsCO}if3yoo~@~Pwx$x;qDWwbxCH3uG~R@zAhiT&L-yU= z7pqC2)g;hr5)_HLfmswhF1C|E+ev`l%CRr)fdsY(64)L{V0$2e?STYnMpBko90`oZ zfw!-Scb7n0NT4kw&=wMC3kkG^1lmFZZ6SfSkU(2Vpe-cO77|b+OHKs;33&S|Ih2SU z35vw*NI>l@$7QWe0)1lwYG*mJj9k280!l>AN*s>_l!$PN<&l6A5iapO66pOB==~Dt z{Sr_w%e~_L66pOB==~BHIV}MtxB4*GoGgiR)&QSVttWj!0r1k;FP8iFHI0>xd-Q_(`ZE z$<%E! zb(>6ol1zV+Oo@^yQ8M18*>L?lrY55e$#{<~d?ES$6 zR$}egU<#8i zHrSwWiS1)Uoh4l2``BQE!X?I!jZuDVjPqk-q#qk&{n*&Tx3Pt9QzYV#4R$JbP36AC z{jo9f4`Nfnb`YJ4d=|Mx0kSa;ki_q*z`n!+vN0Nvjq!kNr~&2p13bQ%{6X?15`t9TrO~}T0LN-PevN5KRjZuYc7)23;@8&go$R)y%4Yjjyi85qE?JQg( z4cSmT3zuj^HpUyWG2)PoF^6o7I%K0Cv(b;)5FtdKeu&q<$bG5PC32ah^D>XW!sAEC zU*!>rOe7J6rF=hTc}a{S8>9K!5aClwQ{pPy7+Kkd+FyI~6W{c024;cz|5`>~`3xa2Zdw z!%l_Ec(NUKDqO~s?XXkfGM;Q_YtRlmmAhob*v^)Nooxm?+YENL8SHE`*x6>Vv(13H zY`jZGfb9}#8E@O94Qz+JI0AWv%eVnF0*pBzovb;QHb5k9wS#Q{2ipJ+_&_->u~4z9 zpWI8Hj&vOGfpT1Ypo2cp0Uub6{Y-L+>*|0Hlp}4p-pBScW{-w1Kv!cjW1vd3(4;%m-X@vu9$al&AfxF z<{ex&@8HUL2iML!xO(2f_45v{pm%T$y@RXh9au*%Ph8D3rAOdkkHEnmfrC8)2YUn# z_6Qv45y*2Nsi0e>Z2 zR^B_{uY^C%Ts^}ypCx~e{2=*@hc@Jn+2%e?*-9zQ}ZF~uEhk2&C%q#VUBInWak z#D2kRWSr2!{)mGf$sy6%aYRN79q>rPWwg)%k0e}13mx!CxCR~x^1>s@ehl}m+?V+5 z4tgY+VGJzMBRM3_JN9L*vV$!^2kaD@XOG6g9*qNjNzTeUN35qt-kh{t%xA}yPWD@! zv|J}G*GbED(sB_g3355nN*6Ac>!js6X}L~Xu9KGQq~$u%dXX!|a-FnXCt5GEFP4jW z56pvDt`mMwaw7d)CoR`W%XQLnowQshE!RoQb<%R3Z1X#5xlUTHla}j*$CGqq#M?>B zb<%R3Xqm_nv0NuwCc?#XooJazKE-mKXqgBX%XOmVFI+6wi8vI(#d4jrTqiBpNy~Mj zWg=IK!js6X}L~X zu9KGQq~$tkxlUTHlYMz7E!RoQb<%R3v|J}G*GbED(sG@QjNxQ#3@4*wIBB^~TCS6p z>!js6X}L~Xu9KGQq~$tkxlUTHla}kG!js6X}MS(z!b!C zQ(&`*><^n2E^W0G*sSc!SbYk|C{kdva;5l$6pk{bz*=Qr#+NYbpS(SAl>*C>yJTcO z1(qdTM&?ssS;A#xJ_VK~Tt?2$3T)ex3p(;5!3Af^ZpkO+mS1A7zSt zl%{Zri<5#f!u2R4M2UqLEd!Slaj`@q-=lD`L|iNp7kh#(_5`tNiq}g|(1mglo{p3; z=Z5>@v0d<`!lftZf-e;=JwX?Hf-aPu>`PD31z%bLF0)Wv>u7kh#(V!*|o zpo=|07kh#(_5@w*3A)%5bg?JsVo%V;o}i08K^Jf$d5}o1F8EvF;%{B_w=VVsUGTSZ zTzY~o_5@w*3A)%5bg?JsVo%Toe=C|9$8wQ~uP*ikUF->BtqJuriF`6OBRxSEdx9eu!|npMGx$v2X@f|yXb*k z^uR7)TXOpdpCUa$7d^0x9@s?>?1BfD=SpAC1rID-`g$&SVByl&bHNJaUTHhI=z(4I zz%F`V7d^0x9@s?>>|&fE7d^0x9@qs7k`$z`=VD*a#lD`4eLWZZdM z?4k#D(F42SftMo%>C?IBfnD^#E_z@WJ+O;*=VG7E#V@nCV10<^hS)Wdf9c=3*uQhp zC%fpAUG&K=*rr_hHLsL5m5aSR7khaw_VQft%(w=gS-6p0+EgysvK)~%m5ZL)MbGSl zX9l|HnXzJv`{F-c@XT_(SiLJ^_4Ldx_Vrxw%yQTDyi(p+x#10Jz@<%v`Ih7|-^>lq zTnjF9DiDd1T*f@zuzle&ugneW7B2H=+!)UhF7s#HZ2!2~{&BPY<7WHE&GwI*?H@PW zKW=zwd5X*^bHhsu??EmtA~&p0(wA{gH>^+i0P=z4GS2CSWeJyYPB$z|xJ06M!?J|S z+#5GWQG`$7k!j@OvEB68Zu)9BeYG2-d2(F*vzz|eP5_^_8d;s}C@)6|skdGuEMLwE*4EYrD zY2-EF^8FDTR`SW0ki5ttBH|&3!sY#i7rI4sc<5GmKDoSE@bb-q7iB8PCxNGNorj`_BEGV60LFpXZNvB1p6O-x0 zWI8dKPE4i~lj+1{Ix(3}Or{f)>BJ;fTQXN-#p$%Nba+~M$}cFvba+(ZzmnHW-c*Se zl#X)5ajcJ(eZ-jtH}HtGa?`N_R*oR%G&rJ8gUfhPbCz{;Xc95yp-JHqPp&!MI|%Oy zo;0A*UCa_ za$LMt7QI#$Q_f<_S@c?2Oh1cWD+^DN>&0tj(Q9R)%_;Ya*UCbhQ@D7oEVMa=i`U9x zezKUKEPAahdaW$J56waw192_+6)Jq+khv1Cl|`?WMX!}bua%{W*UF|W*_0)lvS2ke zkBcnXlqH+8WK))G%7XP@cuF>9$)+sXlqH+8WK))G%7XQf$a6Mj$)+sXlqH+8WK))G z%92f4vMEb8Wyz*2*_0)lvSh=GCC}o4vnfk9Wyz*2Z6Hgf(gw01q9_tFs80hI z+iZgzBGxDTm_(D4`O`S(VPm{A^7j0=5ZD|*6X%}s27j0=5ZP}M>ON+qzHm3Xw zrI2XwZJ`ZtXhXPxyeah17M=WKwj->-{jw9`n4!#$ObcBmF3+i&$p+aZ%;qpo_@YP{d{}+`S$el?dj*+)6ci3pKs50MSJ@B4$NBz%GiN2c3`=8 zV2O8NiRYli5i^`6o`bXa_7Uefol<7+7>cS*rV?k5kB z2gyU^H#6m)Iu|Y)$fX8ysexQ-AeS1*r3P}T zfm~`Jmm0{W26Cx^TxuYf8px#va;bq_Y9N;y$fX8ysexQ-AeS1*r3P}Tfm~`JkFw_h zC-~YWa3WkVoCggEPb2q|Hz${w&w0>*aKUgMF`NfkWWOJ|%r4G@EW%}WaUNt5eh<0K z9L|F*!e!=g9%K0vvly?JLof?rIXLn$!F>0vvl%V zI{7S}e3ni=ODCVDlh4x0XX)g#bn;m``7E7$mQFrPC!eL0&(g_f>EyF?@>x3hES-Fo zPCiQ~pQV$}(#dD(0vvl%VIvpW<6;@=+jE;_! zx+A6TNU1wg>W-AUBc<+$o=zB7-puQJl8cpfq!b+~MMp}}ky3P|6dfr=M@rF=Qgoyg z9Vtae^lK!|@#GW8?qxmeQmz8_jtkg3F5u{80sF`WeB)36S;`P;M0&~vz*{-E z^yvy9ogA0;a{;6iE`8?$NGDu;W&xxVE~8-u@Y0Cn4KFQRzI0H)9&`bF&;{&47qACi zz#en~d(Z{!K^L$GUBDi60ejE|>_HbmW0D7Hbzp@#uvdW6mnTYZx&V3;F1_gj=uNov z2MeG#;nJHffZl{lZ@K__6E0s;C_qgiT-xCU(3NmmlU0Bjr^03KPyzbUh(3$?0K(Uh zujAS0$t%dKnX3=TrJq>9HCY9UtjQ|inydmv)?^hZvL>rQku_Nb$`9nSCaXY^HCYA9 zDRNnpRe%s5kW^Jft6Y;+fElE+--O34RC&i* zpvs$ZACcfA5`090k4W$l2|gmhMf{#e>5eYsb!AB(chy)*z;3E=z zM1qe<@DT|Dc|d_;neNbnH}J|e+KB>0E~ACcfA5`090k4W$l2|gmh zMf{#e>5eYsb!AB(chy)*z;3E=zM1qe<@DT|hmmd3 zsvyC~@e?1vhUtUd;oFQvf{#e>5eYsb!AB(chy)*z;8O$%J|e+KB={6Tf{#e>5eYsb z!AB(chyf{#e>5eYt3kl-T{d_;nuNbnO0ej>q7B>0I0Kat=k z68uDhpGfc%34S8MPbBz>1V54BCldTbf}cq66A6AI!A~Uki3C59;3pFNM1r44@DmAs zBEe52_=yBRk>Dp1{6vDENbnO0ej>q7B>0I0Kat=k68uDhpGfc%34S8MPbBz>1V54B zCldTbf}cq66A6AI!A~Uki3C59;3pFNM1r44@DmAsBEe52_=yBRk>Dp1{6vDENbnO0 zej>q7B>0I0Kat=k68uDhpGfc%34S8MPbBz>1V54BCldTbf}cq66A6AI!A~Uki3C59 z;3pCSL_&Z_2oMPYA|XH|1c-zHkq{sf0z^W9NC*%K0U{wlBm{_r0Fe+N5&}d*fJg`s z2>~J@KqLf+gaDBcAQA#ZLV!pJ5D5VyAwVPqh=c%<5Fio)L_&Z_2oMPYA|XH|1c-zH zkq{sf0z^W9NC*%K0U{wlBm{_r0Fe+N5&}d*fJg`s2>~J@KqLf+gaDBcAQA#ZLV!pJ z5D5VyAwVPqh=c%<5Fio)L_&Z_2oMPYA|XH|1c-zHkq{sf0z^W9NC*%K0U{wlBm{_r z0Fe+N5&}d*fJg`s2>~J@KqLf+gaDBcBocx|LXb!Z5(z;fAxI zg~)9!Vt2~SfkNiC5V@88L~`lN6cU+*L}nq8Sx96S5}Ad_xm@3s{2Fo@MK46oh08c( zA#yJKc5>;D6cSy9L{}lvRY-IdGXI6dSRpZ1NQ@N{V}-<6Au(1+Ton>mg}{;xY0BE_ zLP#pll5yrjypH<_9Dt&MA?fddl6+XqGc6P_9Dt&MA?fddl6+XqU=SKy@;|GQT8Ir zUPRf8D0>lQFQV*4l)Z?u7g6>i%3eg-izs^$WiO)a#gx66vKLeKV#;1j*^4QAF=a2N z?8TJ5n6ejB_F~FjOxcSmdog7%rtHO(y_m8WQ}$xYUQF4GDSI(xFQ)9pl)ad;7gP3P z%3e&_iz$0CWiO`e#gx66vKLeKV#;1j*^4QAF=a2N?8TJ5n6k?^m1_~LR?5AEvX@Zy z63Sje*%1>Mm?@#`C6v8{vX@Zy63Sje*-I#U31u&#>?M@FgtC`V_7cioLfK0wdkJMP zq3k7;y@axtQ1%kaUP9SRD0>NIFQM!ul)Z$qmr(W+%3ea*ODKB@WiO%ZC6v8{vUgVT z1xuwf-gya^uS#~okvwpGl@naP%h^T6n6ZL5zUaS~LQBHMkCj48vM)2ZN>QUN0+&^{ zrKr(1fXk}eQq*X|mD@TihQS#?{AQjjC^KC2WpS{e8p^10NK_@YwO zYZc&+q8C|;dQJE`a+&@Ae_A@T=&H^$P3v$J2a__@sUnKZTIIA6t19WTdv#TJJf!== zt6@n;M*`_=2?!^ttX>uJsDN&$*5XSM%8-yzV-Bd z>&d8EFMZA8*Pyd**GpfQ?yTGO>H&?;x?Qgx(CDn&_38nQ&bnQ%9? z%B8q|2~dg~y;E5(#f@H(F4vl;u~+^nCj+sZY=UyK3ChVPC?}hsoNR(}vI)w`CMYKZ zv78LVa(1c8*_kS5XR2Iln|fy`1o~`1dB_Ltp9=g_ zfqyEr_N!lP#XlAJrvm>};GYWoQ-Oaf@J|H)MDR}p|3vUl1ph?vPXzx&@J|H)MDR}p z|3s)i5$aC_|3vUl1ph?vPXzx&@J|H)MDR}p|3vUl1ph?vPXzx&@J|H)MDR}p|3vUl z1ph?vPXzx&@J|H)MDR}p|3vUl1ph?vPXzx&@J|H)MDUNkY%G-{_$PvYD)CPx{;9-2 zmH4L;|5W0iO8irae=6}$CH|?zKb82W68}`#XnK}6U9GK{1e4LQT!9dKT-S>#XnK}6U9GK z{1e4LQT!9dKT-S>#XnK}qc5c@{zUOl6#qo=PZa+|@lO>0MDb4)|3vXm6#qo=PZa+| z@lO>0MDb4)|3vXm6#qo=PZa+|@lO>0M5#Yf{1e4LQT(GXq03`c_@@g0RNPZj>D!ar5` zrwad6;h!q}Q-y!3@J|)~slq>1_@@g0RNNENR+EEV zO%8IkzN77TItRI$9OPo7#TfImp%IAXn@A+P-!Ua<#s*ZFCNDwZ6A)bT(zR zz9esS4stbLV5=qvxtbj0YI2aP$w96r2f13K6qn^3v+BaY~+r|0~@Gm8>nd;sA(IhX&b0%8>nd;sA(HC;_`cb@Bg9}ZP55fcQpPn zdX~2lb{k>05q2A4w-I(5)tc_>8ME66yN$5hsCMK#X17u8$Y^#OHTw1QX15V`8)3H* zb{jSN^?kG32)m7HNB%Ff+emBL2)m82+X%aju-gc`jj-DYyN$5h2)m82+X%aju-gc` z8rapqt_F5Bu&aSx4eV-QR|C5m*ww(U26i>DtASk&>}p_F1G^g7)xfR>b~Ui8fn5#k zYG79byBgTlz^(>%HL$CJT@CDNU{?dX8rapqt_F5Bu&aSxE$nJxR|~sZ*ww}p|G3%gp_)xxe8cD1mpgH+u&ae#E$nJxR|~sZ*ww-=CUz(EYZsou#l+6ILiHpjj=uH`E=FGvBjY2c`I?`1 z#)rPN3;t)-u2_*XK4L{a!yGGe#z%~dj~E#rG0o=uSLgo6G^g{mGd^NP&iIJ2Vi_aj zBS!p;5kF&`E{hRGV>(@CtDO5ElZTDY{g27R#-~B&{>PXb#^hmJ?zv%19yWSz7-Mc2 zlZSon-2a$7?EmuYFGj{kjEs*M86Pn+K4N5i#K`!FX@=hqYvq+`ITBjY1R#z%~d zj~E#rF)}`4WPHTP_=u755hLRxM#e{sjE@)@A2GF{e%a%Uj~E#rF)}`4WPHTP_=u@} z*`LnhkExYe1!sK3$oPn9-fb2Bgddzg8`BvWbG(L6obeGO<0D2cUQFW?-*H}lOyd)w z#wSK+e8kB3h>?pIBjY1R#z!plCEK9Zty&lI$(dNlS+uc`Gd^PE;>AMF_=u_P`$^Br zV`O~96ai!*86UBb*Ii>Fua*SFgn*b35EBAoLO@IihzS8PAs{9M#DsvD5D*iBBFBV) zm=F*X0%AfyObCbx0Wl#UCIrNUfS3>v69QsFKuidT2>~%7ASMLFgn*b35EBAoLO@Ii zhzS8PAyCvkAxpeo6c7^vVnRSn2#5&*F(Du(1jK}Zm=F*X0%AfyOwg|!$g2S{As{9M z#DsvD5D*grVnRSn2()VC(j5~5VnRSn2#5&*F(Du(1jK}Zm=F*X0%AfyObCbx0Wl#U zCIrNUfS3>v69QsFKuidT2>~%7ASMLFgn*b35EBAoLZCccd&V&#ASMK4fd#~bfS3>v z69QsFKuidT2>~%7ASMLFgn*b35EBAoLO@IihzS8PAs`DZASMLFgn*b35EBAoLO@Ii zhzS8PAs{9M#DsvD5D*grVnRSn2#5&*F(Du(1jK}Zm=F*X0%AfyObCbx0Wl#UCIrNU zfS3>v69QsFKuidT2>~%7ASMLFgn*b35EBAoLO@IihzS8PAs{9M#DsvD5Re5H5EBAo zLZCI+D^lSvv>j)G1;m7am=F*X0%AfyObCbx0Wl#UCIrNUfS3>v69QsFKuidT2>~%7 zASMLFgn*b35EBAoLO@IihzS8Pp-$0YPQQocEU-Go0ppiJuV~e=5?;qjcpWR@b!z+f zb>Ao1>eRZ8-pQ&{D>iy3t4^)b=$))OwMwIB>vd|CMxU*!Q>!#O3#?9aMx(R9>NICG zdMB%nHS;>w%a)>nr1c@!sQQrC zNb5shBdu4R^nI_9)-wm+B>!A3+C;CkNnTpewa=w*l7D7|Uj@B}yh;A?eV^mnq(11r z&{O=1uaR@mpXuW%+FUCV9zN$9zfG`>#F$zDb_+b+!D{pmx0=^bS{p=H&VkmRh&3y{p?myKbOeH_)yd zXx9z2>jv6&gIckl^sa7$TCve{-UhW|qg88AD>gQQ-qmfOwKmXN8)&T!wAKcC#s=DK z18uf}Hrqg(ZJ^CI&}JKGrwz2z26ng_*x_nWD|1=i)ooyhtASS5zz$b~TAA*vl`ZI3 zmCU^n?u~G7gnJ|08{ysv_eQuk!o3mhjc{*-dn4Q%;ob=MMz}Y^y%FyE^+3up_eQuk z!o3mhjc{*-dn4Q%;ob=MMz}Y^y%Fw>aBqZrBitL|-U#;i$TjD&^&1!Kj z%U?O(j88V>lg;FrZYIxEzw3qljn2z?!MaI3+Kk?B)=jW(f^`$Dn_%4p>n2z?!MX|7O|Wi)brYtt_RtXp8+0_zsEZh>_RtXp8+0_zr7x4^mu)-AAZfprV4TVUM+>lRqI zz`6z2EwFBZbt|k}VciPrR#>;fx)s)~ux^EQE38{#-3segShvEu71ph=ZiRI#tXpB- z3hP!_x5By=)~&E^g>@^eTVdS_>sDB|!nzgKt*~x|bt|k}VciPrR#>;fx)s*?m1VW) zR#>;fx((KCux^8O8?4)4-3IG6ShvBt4c2Y2Zi96jtlMDS2J1Fhx52s%)@`tEgLNCM z+hE-W>o!=o!MY9BZLn^GbsMbPVBH4mHdwd8x((KCux^8O8?4)4-3IG6ShvBt4c5`YwpjS+_5S z)(QRf0i(W~DD=sqmt>VuUw{xQS6*1g9sk!$%K!GAe+0GatZS_^33qX4k4_)GB>RoO z=KccL*FpU{n(p5OZ-I;8ZSW3w7rX~9`3+*B{}Kydhq-fZNFC-bOa}Hs*udm=A7aKDaI9`QSF@gWE!$JG8^49WL!~X@^TY zT-xE%4wrVgw8NzxF70q>hf6zL+Tqd;mv*?c!=)WA?Qm&_OFLZJ;nEJ5cDS^|r5!Hq zaA}82J6zh~(hiq)xU|Ei9WEVk>3~ZITsq*=0hbQAbikzpE*)^`fJ+BlI^fa)mkzje zz@-B&9dPM@O9xy!;L-t?4!Cr{r2{S3~ZoTsq;> z371Z|bi$<*E}d}cgi9w}I^og@mrl5J!le@~op9-dOD9}9;nE40PPlZ!r4uflaOs3g zCtNz=(g~MNxOBp$6E2-_>4ZxsTsq;>1(z zU2y4wOBY4Hl)T)N@X4VP}Xbi<_^F5PhHhD$eGy5Z6dmu|Rp!=)Q8-EirKOE+A);nEG4Zn$*A zr5i5YaOs9iH(a{m(hZkxxOBs%8!p{&>4r-;T)N@%inv@UdPQ93gzi0G5ewgO)OrQW zUyu)M)$(sEtE zc8&Us{tCf%DeF@F6@u+jRw!kS{wl?G)}VUuKo1`1!2>;bpa&21;DH`I(1QnhG;bpa&21;DH`I(1Qnh@IVh9=)nU$c%TOl^x%OWJkWy&dW!6U z9*ua7_COCF=)nU$c%TOl^x%OWjeGr!Jm9J(p}9$3&-gUa4ly!X#~rZP0gD~5*a3?ju-E~M9kAE|iyg4o z0gD})iTIt)bKjwvh|ziOJK(hgUOV8mQ+h2F?L@Dg)a{+r?VXA(bGq-=v{S9}zR+X) zowUlGYL&kJCja{c=rb)lrIhh$&}Uk9(mHn1I(AAU-|<{vr`oSj9$WC3PvekXD*cMk zqncerwp}XS_x-({T|~BB#D`tPhh0RrUBri7M7CWj%g=jMvx~^Ki^#T%$hM2fwu{KN zi^#T%$hM1kvWs}Ki^#T%$hM2fwu{KNi^#T%$hM2fwu{KNOX|yhBHJz^+pFR-t=~%b z{ODD2F*>rniVt7Khp*zjS7oj5JEpygPhQ0*uknW0c*ASF;Wggy8gF=wH@wChUgHg~ z@rKuU!)v@@H|w9fS^wP4%I9uYK6j(?Zgw1YqxEjI-i^w;nJMp9DOdG7I{qTTZk1y6 zI`D4RLU*$kx|_97{oXkDJ(krVi|;4(w*VbhoVan|na7 z>+WU^b2n?4`u!gHD))7rg!gq=*L#R&dx%JTh)8>gNPCD#dx%JT zh)8>gKYKKbdPM*Al4b{cv{P_Z=->X^qg@qa67+BX?a{7^F$4Nn|MqBa#dkiZTu0hH z#F;(BnLWgrJ;a$kp@$TW_YiINV&Psa+>3>Kv2ZUI?#05rShyDp_hR8*EZmEQd$DjY z7VgEuz1sJ=s@az<+>3>KwF>=pUE9LFSh$x+xEBleV&Psa+>3>Kv2ZUI_EH;rsg1qV z#$IZpG9|R8+N;{QAoR?rR|*=vUfoNr>!sH9QtNuDb-mQOURL0Hsdc^VA@;I|*vlSb zFMEi+ssnzHSE_rdb-m;s_L6(ps~td>`!;w0><0&V{@tZ(`s?NzQm#oHKvKo8IYV0Mev6rmI zUa}f{$!hE+tFf1?#$MIrt3|!4$;M@17<^E5rdK%~M(>*SDyPG^#--ElddX_+C7-c3 zKMHe^&|P#=vAg4seSp$cNL|7B#-%e7(5Jq#QoFY8SpGP#b2j| zZ>W?Rp%r-pMc!cV;|=Z1`i^yZL+`&YwEy4GzQ57_e?vR7M*IH_?aUhO|2MSb@8?g0 zXTY6@?axZ|Y=%af-K1gXehXMgHqD|K+IlmRQUQ zOLXTgu`qhf`IhWA2B5!p`W8FgZ?V(;7CYT@h?zhyN&pDxIC2z~0Mt>XXZTZtUs5ieY^^L=zdzQE9S>D!J=mnkXwwHda z_xSp&pmq5%y8IYje!??9;hCTC%umqnCp_~Lo>3N=-t+IOf%k=RFaajP6qp7x;6>p( z{MS3Y`5oT;4sU*kH^0N1-;pA7dh%`X0N4+@mA#|7;lG{)N5L_09Gn0rLASDZXl3uH z_WIhb>>c@kPN&#?wq(B|ztLw)_ABxm9r^bY`S;7t6T1E?=+?Jik>Ahw^vHfiexuI` z>{sMBdXIa*BEQk6NA?r>_Y?W|6Z!Xxso&%FyI+ytPwt__y`Z`8hx>ljMqiuzekp59 z-sO6T>tWE5e?LCik5Bfi2KssXWWQ>l(LUL)8fg3oJPn=!&w`Hp`&C1X=dt`hyfnjK z{ayF{j5GHu{`;Bh;0^F5cne$vZ-aNhyWl-=$*A}*?u!4uc23{^(1TpB09S+lrJMbV z|0-AU-?*0h>p*+>r_`mNQkQ;8UHU0?>8I4CpHi28#xp~9YC)G#M=YJ+XKYg1H{_{#M=YJ+XKYg1H{_{#M=XE9SeGc z?t{mX($^p)<9N_HA0i6VMiH^4ih_?rbw+D!~2Z*-^q|S`~>UevAvn~g89?bvc zc-yBKI45*()h8}S_lbRCaaHJ3I(>?Y#wWq2K%dg-(-_R?b%{PPH8ya^5wcJ1@xIW% zBhaVQcg6!?KR5^ufy3Y-{@0PGPag2|j-q`;(LQ;=*N&on@_^A%w2zqIN6had=Jyfv z`-u5{#QZ*Dejm}Sk7(8>Z}|O=t9|qZeZAFsJdtLN%%q4J)=*;57Lhe(vJ+%j||d}4APGb(vJ+% zj||dB465$=zuZ#{s@>ThpMV-vySpm%sAiCMH%Pl1q}>hD?gsfykU^aw)$_E$LB=`n zN|CvuccsXJ(BqSLrHIkv#&@NNu~)N|cj5Ie5$0X7^PL2k1XExd%z%y+@5<(DMML;` zh_Z%Q&l$q!L->3MpAX^lA$&fB&xi2&kV?OzH`v=lczXzM58>@0V!{v+Z-|IDM8q2+ z;tdh;hKP7WczXzM58>@0ygh`shw%0g-X0<*4B_)3d_IKFhiLUfM7$w6;xO%D@84iiHT6GILYLk<%|4iiHT6GIM5->XGO(D4ZM^9c3x2=(&_ z_45c?9HH(Vq3#`_?j51-9ii?Wq3#`_?j1pkBWQ61EsmhY5o%zZel|`&8>gR*)6eP) z8uDtKepbJIr!hlZam?toqd5I+oPIV=KO3i?jnmJ@>1X5gvvK;_IQ?v#el|`&8&@Rs zd%SiOr=N|pb`)prC@$^`y6-v}r#8l^jd9gRKkv1pxcaOsLa!ag)o1y>>t~$$8K-{6 zsh@G`XPo*Or+&ue6TiW0M{)VY=(VG``ZB-AGl)2KHBO%!XYDA?+EJXfqd03van_FF ztR2N!JBqV*6ld)y&e~C&wWBy|M{(AU;;bFTSv!hr?r^mzuDQdE&}&EWkk^jltR2Pa z<>U17an_FFtR2N!J4&Ek0__rLmq5D&+9l8~fp!VBOQ2l>?Gk90K)VFmCD1N`b_ujg zpj`s(5@?q|y9C-L&@O>?3A9U~T>|YAXqP~{1llFgE`fFlv`e5}0__rLmq5D&+9l8~ zfp!VBOQ2l>?Gk90K)VFmCD1N`b_ujgpj`s(5@?q|y9C-L&@O>?3A9U~T>|YAXqP~{ z1llFgE`fFlv`e5}0__rLmq5D&+9l8~fp!VBOQ2l>?UHDhM7t!~CDAU4c1g5LqFoa0 zl4zGiyCm8r(JqO0NwiC%T@vk*XqQC0B-$m>E{S$Yv`eC0677;`mqfcH+9lC0iFQe} zOQKy8?UHDhM7t!~CDAU4c1g5LqFoa0l4zGiyCm8r(JqO0NwiC%T@vk*XqQC0B-$m> zE{S$Yv`eC0677;`mqfcH+9lC0iFQe}OQKy8?UHDhM7t!~CDAU4c1g5LqFoa0l4zGi zyA;}`&@P2`DYQ$WT?*||XqQ5}6xyZGE`@d}v`e8~3hh#8mqNP~+NIDgg?1^lOQBr~ z?NVr$Lc0{&rO+;gb}6(=p+GWr#gLWCT%b;Bb?J{VWLAwmvWza5zb{VwGpj`&-GH91UyA0Z8&@O{^8MMow zT?XwkXqQ2|4BBPTE`xR%w9BAf2JJFvmqEJ>+GWr#gLWCT%b;Bb?J{VWLAwmvWza5z zb{VwGpj`&-j!L5$eKW=5x}*5&D07XYc#ezVIuCcZ|Ob)2$}Q`T|HI!;-~DeE|89jC10ly#i4j#Jig$~sP2$0_SLWgVxi zM3CcP_StlqpjYPPh~CW>p5OCd5^N*qpbJf^&aQC-{V~Odz|ZjkMAhH&;P#9|Gv-vzR&-@ z&;P#9|9-$TAMnfvJo5q1e84jw{QqZslKBJ9V}HO&<_|cJ{h?;XE3`xJ)7Kwz`uaou z_e1{oL;m+eohJCY{<;@j0I!2Lz?-U07|_rN8iY%neZ!{CG93h-}0pQip$ zKG9cM;A-x#1^u1L4|ST_Px>_VFYv=J@WU_g!!O|S3%L9OE+dMxb44SHv_|hM zjVRI@Ju4g`(vIj2Cv@$7r4hYhTIhYH5k*>~_mxHzX^q}j8d0P*de>uwNIOEL9U;<= z5NStbgWuzQr4dD1Kk0p?5k*>~SF1);(~RC%8c|I%dS7Wo(Zko?R~k{IHF{P!qI&52 z-fJ6CJv4e>X+-tV=zXOT)kCBAl|~d#jNVroQ9LnvRyabW9bwi#q8jV_-d7sYOy4*U zdS7Wo@z&^lr4hwjqxY3Y6mN~*R~k{gHF{rZMDf<>eWek_TX9#s^|kkvMig&-?R}*Y z#apBIl|~eARj%T#(fdjxinm64_?M{sOH}?PD*qCde~HS!MCFruW?EmN@}AL2J!33Y zggJ?tC(+_0TAb91*@EtSE#;)VJty>Ogp=~NuZO`yJmb~xlk60n)T)dB%X>yAwd!I_ zf!?D(sZ|%F*HTW(^M0H6=ugV?M(@#|l;{1nY0!H{C$-+<|ME)9Np=cGVKEAeQCN(^ zViXpmuo#8KC@e-{F$#-OSd7AA6c(fGcZ{m$%;?KpM^xe{EJk553X4%#jB4#@L4P%i zQCN(^ViXpmuo#8KC@e-{G0J|&C@e-{F$#+@Sd76!zgjOX#$ch}@|8yV_6g{Ap|dtB zaSRq(x0Z!tuo#2I7%awMp;a-l7=wk@Gx#rSF$RkIUs7=y(aEXH6l28%IR zjKN|I7Gtm&gT)vu#$hoIi*ZC6KEGA$v0gDM(Ou%9S z789_TfW-tXCSWlEiwRgvz+wUx6R?2d(WAIij6hB?0y)J9}y|;CWQOZZMXRhcY*|Q+@DCHyBWAupVBiUp0&dx{j*nOe*jz5yGe8)RG zAIVon@9caeUm3l#^N~E@C%v?v%4teDO(~}-@rDQ76<45gf*lrxla zhEmQ@%2`S|ODSh5Q>sNq?;uRk zE~aFUpYhJ)l$D_-v!zm(|BVVZ%pHjX}mFwH>UB%G~SrT8`F4W8gESFjcL3wjW?$8#x&lT z#v9XkV;XOqqXwR1^mvZZ<2go;=NLVnQ>?pRbdFKtIYx=+7$u%#lz5I&;yFf%=NKiP zQ#AAQo^_s6G&6eEd5$sRd6gw5s_j>W?#Is)bBy64p*{EYkY^J*7!Ligk6RS%6GQ=OORjUJ7hm*By61_y z=ZU)K)q?y^kEzb%?ej$43#va0`rfF|T3mq31-M)g3*Y%Be|-Xc5_}4L8vGXMb2t~o z)Y!ls^SvOZGeV!2xFC*3pR~CE#|yB#0J{sYy8ycju)6@e3)p`F`!8Vm1$`~YZ=Usg zr1*lr=dSCEvi!c#bN`FPoQuSqi^QCZ^colGH7?R?T%^~yNbhiw-r*v>!$o?Bi}Vf` z=^ZZ8J6xnkxI|f(DC-hsU81Z@ly!-+E>YGc%DO~ZmniEJWnH4IOO$nqvMy29CCa)) zS(hm5vdWq%x~#J1gzgP5t1P2?!^-!Xl`)+c$gdcz5!=aN~yVOsb<#U;yJGRs^t%Um+cTr$gCGRs^t%Um+cTr$gC zGRs^tD;xYCx3w&D$t-ipEOW^$(I87S$Px{*M1!onWE(t}%*t23_FOV6U)fsEC9_0{ zEKwp$l*ke#vP6k2Q6j6>=O;av%&PSnJ(tYNhklQD7_&sYEO8^tTr$gCGRs^ttF=2n zxn!2PWR|&Pmbqk>xn!2PWR|&Pmbqk>xn!2PWR|&Pmbqk> zxn!2PWR|&Pmbqk>x#Y)E>Ppea(#Yu3Rv$|vqw{M%mWPdlpkwLBwC;~--5<+uS9QlR z^J8M>$HdH!iJ2eE8~*FGa7Hm_PWbnFaz-WoU*T7{c5R=bw$CV*&glAKa5eY82|fWn z2|fir4f;&r3}5b=Q9bdS{hK~Bswc);&?oKn#W>Jk?$WoNK*y^Y#w6O6<=RnqhPX6C zT$&*+%@CJnh($Aexod_mcg+xyX4G5xzw%(gsNTw04EoDmGa%>pLP9Py!2Z=DQjT&TjJzzdFHoz z|3cC4XurRcviEiEIQcvMm+yNt`#b%Y@i*M}n}3H@zvr3X^UUvg=J!&0q3HKg(>M+K z`QKB@AM}QN(H~UqqR`*-{DW$^khjfB_Y+04iV_P#pQM^)ZGV=v{aNMrUDcgOz^{Ri zf?oHSEm{ly6Zm!T8~pXZaQ)9*`}mf+u;y zC^!a=gA?E+c#0=4fEV?vG_#7R_P}NC{0hv1A9H_(>tAb4cb0ZKs}`j73w?9)n(z-x z|3~-0wP>TWbY~fV&NBX-)tSI6y0gY5D!Ll~ zk!Su1{D!R!`PdpFPZ?69b=={?;*=h7wHRi}aog@Erj{MU(@=xc;KULN{ z&ur&^d%zvwtK9d9agO}cIr`i=V)Y!cdQQs95@Pinv3d?~&k>FPC`MO{{wVv69_#*5 zRv8`H{-nQN5xVF46Ft|Tc=As?`6r(I6Hk7oC&!9D(~~p8uY&H~K2zMgFMI_28tCuH zeOBb}f_|pFW}{>KXL_5_-^crmZ!3MKjAmbN0sZx`&y>+@^p`w8Q%1AVU-JA+8O_FS za3}a0_z5@%n$c(aw(9+&&$0G%czq79ad%aS?$)%E9d?L7KPuZLgL^V356;Tq3h z!%G$oKzna}O*jd*93f2NiF8IAso?(=G8SBvJ!H=ifpe4c#s zd0D=o``-YaWk1hcd!D)WJag@N=Gybjwda{@&#RUBZO`)jbKvvf7H})*Z2EceGCG@n zo;>t<^3dnWL!T$#e4c#sdD`qeZFZhEJ5QUPr_IjOX6I?M^R(G{{4lRrcVBOw0nh6jmfUw9@d8=8%Fg7D^N1JZH)9e^fzHxhkl&2X($)Nu zYv&O!;D-hLuz(*H@WTRrSilbpc;Gq~UdO`g)Q#)Zjq6x=9Sg5x;dLy$P9E`fEWD0| z*QM;$qU%_A9Sg5ZS>LgR*Rk+A7GB4~>r(KF?pvwrSa=-^uVdkLEWD0|*Rk*h7T&VBrlc zyn%%`uOiG??@@Fo`C#KN0ccoPe6V&P3JyoH6gu<#ZZ-onCLSa=HyZ(-pr zEWCwy;Vmq@g@w1U@D>&> zV&NhdE@IA|7pA{H)U;UX3;V&NhdE@IA|7pA{H)U;UX3;V&NhdE@IA|7p zA{H)U;UX3;V&NhdE@I(rEWC|{x3Tax7T(6f+gNxT3vXlLZ7jTvg}1TrHWuE-!rNGQ z8w+n^;cYCujfJ_ptCD7T&|cdsui63-4j!JuJM3h4--V9v0@9ljfL{=J?8Sj+tqW znQ2b_)Rm%~`YEkPtDiD@RV2pYeUa-2ZRaRM#J3A7w1&~ltW%W(oN#|g9?C(v@7K+ACg zEf-qtcd~MoV{VmWZk6NIS&ma@d9=%;T^{Z7XqQL3Jlf^aE{}G3w9BJi9_{jImq)ui z+U3zMk9K*q%cET$?eb`sN4q@Q<3P0p-s; z+U3zMk9K*q%cET$?eb`sN4q@Q<D#P6Kei<8j9&)-0el4f8u%#q4e*~quhcEkFD%h7 zEYUA4(Jw5~FD%h7EJ-`R+2_rcq@B_0rAyMz=<{Yv($45H|B_Vm^|Rn};Pc=Xa4V>9 z#Oj$BHO^mBUsEpJ#{G7%1MCF5z;4j%a!XRs?|%(^9rVm%i5;0Gc4U^=ky&C#W{Li5 ziT-Pe{%eW;Yl;4AiT-Pe-I*o*hM?{FP^bHr*r{1!r)G(rnk9B>me{FTVy9+_{%(mq znk9A?miWr+l2*EA^oBWX`&@n2l6u1{LjQKsl6pg-dPAdsJ84O4S+ZYiS;mL7>arx= z#ZkH&AJYtR$$h0xE9$?5(p@Osh0T8jK? zPk~Q^-vXt(o|NuF=`NJ+Lg_A)?n3Dz9T zzDT#;(u#|rhUKtip@3Uyvl_%^8Xin{IxwRWm& zt(^+Bb}H1`sZeXDLam(&kMg8+*R^yP>I9=uCm4k~!6+ODCqSKG)SZj`?(5GryV5ULIczu^B>9WXw$r0g}<0io)EP<22U z(UT#mui3BTwot!_A^cmezYJ=;q&pff2{m34YP=-;2mbm9_%%@DCEeG&UZ@onp}v_W z{1;H)Ow+Yi>4p033}FSRonKv7f>E#v)ObnvHC_^GtzM{A7ok>Ngj#hGYSl%kRTrW9 zT%pEGLan+8JHaln8`Rg;biW7O$(`50J>1y~YP_Upw9_rrPPb6wC85SkLiM>qjhBS# zbA{@2g&HpjuY)(ho8T>Q5xfoF0q=tMz$K&Ows0A!>_S~@yd>1AQQ;bwCGCuBxxY@h z%yC=j_PdPsyNvd`jP|=s8u`BBwoq|fsJJau+!iWs3*CN~Ic^KJ0wdH4j8La;ginLt z0^NR>(SDcFewWdHm(hNg(SDcFewR6J>q)oYWsciI#ciSDwoq|fxD|B!UFNtgRNNLS zZVMH+g^Jrk#ciSDwoq|f==QtJaa*XkEmYhVDsBt4lP*+tfKb^1LS+XCwGJcHN|8`2 zMMAB^2(=C)%z#IE((QK{?RS~uwyu>;AXGMiP$&F_I^i$W34fthmV`RzFLe7|=D00X z+!oGpM{!%%ZnMj1v&(3+%V@L9XtT>4w?oSuw}pz^LbusvwAp2}*=5A-FmXGK?qPHf zqk9aUH~J&f*QbPuC@ z7~R9@9!B>taXXCeVd8dJy1PWj?J#jWEZu!=-NVG~FmXFf+zu1B!^G_{aXU=h4imS- z=pH6+hl$%^;&zz09VTvviQ8eH4bb}?x5LtXTIjePCT@p`+hO8%n7AD#Zin4p>lw%G zFmXFf+zu1B!^G{dPYdX;j@x14cGxEYbZy}?J#jWOdSYQ2g1~WFmbzB>TA7{xLr)#E+%dls}A_S<90D|yO_9L zOx!LeZWnvJt-m^M7pra<9k+{#+r`A~V&ZnO$J@H^xLr)#E+%dls}A^%<94y?fYEWg z*yC-X<90D|yO_9LOx!LeZWj}`i;3IC#O-3@b}@0gn7Cc+@wVRJxLxe=w$O3ASnB(Z z<92b8<94yf+d{|fV&Zl&al4qfT}<3ACTJpFbc!_`Y`b zh1%H{YG+@#WR$hWWuWWN1Nt?+tHR~rgYw}6I%i_kw={)1;UKhy4}@&t10ns2R_Ke^ z|3&QoBKCg~`@e|&U&Q_|V*eMhe>wIq$NuHmza0CQWB+pOUyl9Dv41)CFUS7n*uNb6 zmt+5O>|ZW#FNBt3|8neK9*bMvI0w1D6-AyzAagy$Y!)9&VTy4(3Y%F zT+$n`WCfP2z>*bM@+HNPM?zncQgcGrv@fC5m!y%em6s&c-lb4`m!ZGGlE2~o5AnYb z>3?TJ5AnYb@xKr8zYpnu|CjFje;?w1SHgNFtXIN%C9GG%dL^t^!g?jFSE{T>LMvgt z64onWy%N?dVZ9R8D`CA-R{43eUP&*!(yNHN&Z(ZSRO~etjEcQR?SBcs;OFHTqcvKI zXa2Tmz25epz%PS;_a7MgJB^}O5r^E91V_SHp$>4!#e%=UPRSTZPuE z#7OTKBcqjF+9fqMzuOXxvL;9gQ>?j>+9fqMzuOW?j`ivC2%i+dkNf2;9dgv61bPZy@beI0{5?K?I5H~JbUJ={_Pl{emh2}-;NRL zw_`$Il@E;kRrz|MP$}F?;a&>&Qn;7Gy%g@Ha4&^>DcnopUJCb8xR=7c6z-*PFNJ$4 z+)LqJ3indDm%_ai?xk=qg?lO7OW|G$_foi*!o3vkrEo8Wdnw!>M)!x&{b6)}SZ(&I z7+Uv-(fwg`e;C~#M)%cfzgP9^FP=55R{J%2*05Ub*XUWpYPDaZ=K`x4>8*yvYPDkD z@o0RtTCvfi@zspRS2G%4&1ifzv1PSdvH$A!yPEd9n)bVz_Pd()yPEd9nwY;@ZT4#D zYkK}_=uxpVI+{I7M0%7S=TWh{qB|a?tRWVy@d-v<>ja}vCm4lp3v2Mn8ueB)x^^U7 z{{a!jJnndMxjnH3Uz`}s1uAr$HO(m!!`a^zpfqO z*T_E$Lgk?db%If-6O6(nm;%#a2D}LByq})=EjY`2a@@~@1*3dr)CoqRPB04Hzps(9 zM)&V)hGwim%aaVJ&T8Ep1^fZDB2KVJ&T8Ep1^fZDB2KVJ&T8Ep1^fZDB2KVJ&T8 zEp1^fZDB2KVJ&T8Ep1^fZDB2K;hz)}7DC?;>U^sHH!i%UJCC94V<`0)N={}jsKwcKckt8@oV6t;5Wd32EWOZ zPk>K?Pk~Q^-vS%JXLPL?W_-_Re&OrSHGhAG z8Q(J~^$bcqgHq3+)H5jcjAHfG&@+nFM*W(t@G&qVJJ(UW)=|6GQM=YryVg;=)=|6G zQM=YryVg;=)=|6GQM=YryVg;=)=|6GQM=YryVg;=)=|6GQM=YryVhazI&5Bt&Fipv z9X79{cCDj!RZxp6hz1ozg9@TSg|wavRZzPss9hD*t_o^b1+}Y!+Et;N;3osnF|dNV zR6#9@sGpq+Mbyt4y*?RHKkI9+QAbqAP6!>xBC=sjs9$##>WrdL=kbI(k0;cLHK9(d z33VP%sPlNj|H}V*tun%#H^Q7Z!n#L9J+({mdUZrSwXqWPdUZrSwQ&P)*a+5uwV=*D z>aRNYDD-MrL~~)6_#CM7e!A9qKcP;<33Vb)sPle8o%a*!yq{3#{e(L2C-hu6!dy6_ zxv=l(bezz0;Rti#2xEhYW>Pb{Aq>`FeNlmLHo>US^Dv2afYGahKS(LF^lu=of zQCXDL4}DKT_C#6zh^jvL+N&Q?RzITD*eEqNN{x+DW24mAC^a_9h%U+~F3Kn_$|x?% zC@#tcI$-oVc9ivyDC;3n z)@1LJEH|L)5oaa3IJm;hXhYcIZ zRARCi1=G1(&z{CED_^Z(nEDSGX3V)>g9Z+Ly|CpihMAGiFm0q>Lqog%+|p+R!<@)v z82-kMJYO%uVLG#_-Pr76;-EJ zU5NeN@x5+rf+Lly)BY2NIUmn3+^smX-CF8fTVR;0of+nrISHoJL^gR4c4ZsjgSVOz z%(>4BZTP-~VT|#Kwj{?NyO?0a_ZYSt8J2csy2kCR)^uFu_P;O+#rIglTwNF)C4V2? z@JF{lG~VYGOL4sl#*NnEKOE=w`yU$Sk}3q-t6}^1Oz|JM?uvhGGQ$jF=#z1C^Km=I za9B9zHV@wy$lvTk#N#)ttr&tNWp)o@jD0IA%z=@yOl`(U+~m0shaZftx$*JDZ5{SA zB2EmWWjnf7LI?K54_y^~D)CJ&yJ2~7d0D~OnDFwlJ5!yxT3+TDZ|3XrGS6t3H|1py zrX5mWhU3YEvz^MzULTbO<}kaayk5!FbQ@M)_V)B}OF$f1cQ3?ff#4`Fvy88jDKEQW z*|)r`U>+$0%FFIdqe?<~nPaq-nwOXPkLo>`lu852>phu6mCluyy*?@ntlc}Kyk5x! zt6rCvy{o7y8@t&O)9jX*Sch?&F}P{7U}Hp@v7aTvZnj%YNyc6#YgDYoI5enBkTJ?^ z>=qOjWb6_jZ*+}FGTO~aW_yY`DyX8L$(q#F79VBo<1ocrBD>iwNe)|tDZaPaYEE+4 zZAqs3Lrlr>gW^rrNR!=R4zO4wZSnD@2%FvHu-L3lizBwXDa8`i*OHKIH`VWDim+SE z@uo179iKsM|HKF9F@7{rTNmmdA@OlznAx6$u#L@vnl^1F_Zf=g1L=4f&yNRMl8h#! z!)}T)Cz$MUMqBiMr^cU4G=5m4vA&V6()eMSMvK+>mxUVXN{z0i8s)X(po-NR%a_~J zlwgUsAU2jnTa4WlZHY7?6Ov4JJEd8a$(U%eoBj>G0Asw#n1H;qBqZAG4wKbkHb&xd ztaPw3{!iALt;YW5R7<2S$e3XqmX>IaHbt5#d`pbg9A%8Q+5Z8wBNjoRjj~u{j1e|l z9J1Gr;A2g=K>V*9V64ND*tSU%r_&h};}W2tNLxZsLTZ!I!*F~LYfQW)Db|=$&KD%H zBNoZt&k||2CYg;`w3`#{wy5Mt#3RBSZ*vBX@gChH-smu=I&4Nn+?l-VzN2P+}1m=k2MKp*kng)CK;oX5w1DuV@@PdJScT3d`l7~BsoP@Ntxz=e*3i9?I zWVYMrTonZCZ;P@}5&bVKMT+4(2nD4%!6lC7C=2Ds$Am?M!_3wwv)yPzIY7?-XMl*s z0Gq>T!%B??hP1pcE?qCLjp zv^l|&M6EytB)b_)cGq}Z3N9Ii9_7MfLwf%W4;cm`m1wgjnIfoE(IHW&a#YssNGw}Y z0BX~RGGdoxjx5&_s%ViGv^c0hIJN=4#V4mBPi@9{3c&@3LQFKXU}#M@xx5BB`M)y~*|oNCi3;HJj2L-A$qi zaWX~G$!H~h{U;)#SOo?KdV6=X;R>l+N}_HcImztpJ<^tp0+jZreL$Op7A+cigMHBc zAlXgUGz6Z4#tfN@`iLW(Xzo5T2B=jZMxg-W2%FXXanDecxer~aVMCxOkmXu!MA}(x z*1(TyDy#ucGt`vw_tE9LjWA6Pqtlj*9y$UA*cfeb&}oqq$#&FiGu7+zCE^4QT&7E_ z)Bc8xYr#g;T@+nok}cZdMB3At%@`VB6;)fKE!pv5n5?O0s;Sfk$OJ>z;98gsmx?AP zQr5UM>RX(snJDfQ*azkOQ+1KB=ylMJV5ER1+YiZXN%C{~R5~kSLp3pta*Yx$4kfih z1Cy{n0(B`N#w|vQ4XR+Q&5nXe?b)BhWn#IwkZg^V#egayx;lh`JaIL-IPbLJx)aQ1 zdBG?sc7N)_(CFCB)I=j$UCXYRC@I#21L#~4)FV?Bqa1P}E9=w;?FyippG1|H+LrhL z7xsUu7b;VNDdtZlbNS_ps%X0{fhwF!dLxq2KboK4F7(D!aK)I&L zt(0YS-SL(v^rWrnsOa!(XnSR(FfxXPGo+c&<>v}OJ#>zzDC=0#~WrCP4_%ULQ z8K2#-9OioO!o=gB@uNBDXbLOI1uq4kQP}hE@F?^orYm9?kL^aL4`OG+vW1C6=oI55 ztg#_pw6-@wvASS7u+4^TCZ;|!1fR*+ItV`$UL-#4ILgcf;CT8@q0_bqEZOnff%P_Q zapJcF*VY~DQm`Dw^u=caLZiLvyRfAcu^=ouJ`6u}O|%@uv_*XXc|FGeup&C5g6bcS z9E$KL9RmLx_c0y9a7H_}$~YU5XF--I7ZCzFd?3HWVi;;_!f zMC0>+&+UKbi}4>hV?+uX|KyJGANfOZwPLUT%p>EUTrz&dC*xl@CC@~u@iDiIf8$qA zY)`=XsC3D+v7lbqP$wvjqOq1rjx5_$vh4U*Avsa5mPA)A?ejlTF97>cDKX-VvL;cv zqO(!Sq-8h_sbLqjD|FCWR91 z>M2VjeW%#{yH3y+nI09gTY*2NGVM>-PsgUX%CbJwbyaAS8OH~?aOsY{C@z#15jeZ$ ze~AyJ`b5`wiW%j`zt0uw!imaI`v2v+DSskywgeX)D!41lE|p8lFG^h*59&>+#8lAX z?>%Hn^g?))8`QS^-|!?E=c>?gYHeisrL>`XAWJOOWD{~qwmNhb6A(W-t1P`#j;P#F zi}!(_l&=(5Z?xTX4Rl5Fy8bR<{jrTod4(1Izh94xi)@?esw%XF$~D!X3UBz&5-U@f zdQNI-DDKqn$q|XHv;P|mWm*hCNK_A!%C)PXtNeeWOH@9nG*OAEkYO1^Ij)ht2IUpi z6530)L=_feR*FJ%lw<$F@=>c!{V1ib>|bT;MzNwEgi0ypqHIwq)-sPN9PX0+J4wZ<&?&IRLW&5Tp^Qx#eix&T}Oo;RM<^w@jlpBSzjr2WE)7a zrJC}=;(a`hQjT(kw*Ir+(H2TsnGzrDER8#okOMO0zvD#LA=goUSIjR*3zR;T|5QU| zdqE{%mhb;gkB{+?DMcYtPe9|O3R_h%3!RnfHeCVLFgk+rnbuG)Q7-;dy-Yhg7nSIb zDJ1hzrZtrXS??<5ZQz0!iFhPq1VdY8>7ssF#^D1#6*$s3huTY-Mimx8jwfhu*$RKa zSJogq&XDM8qpO!kQHoNp5rebIwuG+npW)M$%MldipWK_mp;}D+o*YwB>8Fy>5Nj*= zOF3poODjtvr9lNJDQ!N`hgxPCGUWpG;Ii(>-o4`O|5OrXYZZw8KhR~vyWxy752@_R zl0dPby8$|r+0|<#)=-_NYfbxy_<^pVB1WWCpl4&c;Hyvwr(TA>s?yP9!MSIEZ zY2|a!{TGeyWNGg1dixL=$iC{I=8`>}JO`bZ+PZ&+8R}ZsKVwY!N->f#l`SOoj32x? zT@|&ddsAyzv0927 z^~833QmvuAWUl{}i}DH_<=p(>tEmM46MZWvBV$K7Osx>rJK5?|xuK6n{Bl9ag>z_*lXyr>JgJaEy9kx>ul7pxPsINA_`P zh^xGBabi2gn@SVqw~X08dCq_Ly0XO5RaC@Aa+W}jvi)#Y+JnllAAVP46Drm!)26~F zQd-NpR)K$<3&*H`^MRC)be%G$A3Pzg4Z`{g+Q?oo*42;VA=^(XtCZ4zo&96U`oII( z6Mk$BC=F#hP3b4&Axp!DQF0GDBVDn~Z>l$D*Sr<|WQ$^F{9QDnG^AEh_A3=pv@ETG z|8YgsHqhvYN>s(Vs4h^yN@EP!i&f~*2g&%@PX%Cax`Myg$t$I_maR2iwH#~F5f!xm zcke~%O!EjP^c}KI``DAwS!B8Ud#`AeLmGoo+^Mco`pNP@cR}+0k;0?(a_lSXy6nyV zy$_w|WB*pcMT-6ZJOds5!KZyZwnED)_(&-ohbyIijp{m;_KG!DNV>d^iV-sBD^~Y` zl9XR^_Qm1y4YC!l=v^`TgT@Ep89u#lKtHwQ6MnZ#^fcY|?(Vh&zr&f%c-Ns8W)9k5 zX%sUacY2eVKiFn$S9U0CVpG}4>{7RjZVwfwjDoS6QESv2{qXd+sj;oGyD`z2X53NR zuXcSuH$UF5vY(Hi)=%%(*sr(Wct3N!E7Bjt?TEg7xd)}^T#Rt9Ko5GKU&f!!~E+j zEa%YD@AIEdc=E3&FQ0tFFi-A2^?CC7lf6$e@Gt#|+Y|rCJsx*`+>T)$*MIE)Soi41 zN4Fo{y`Stkkjp?ih2!v4{7l2oJO=Niu>IHpEM8cVKkN{!FaP&(xuQ<~#@inM@Q<~# zl~^yfJ6n(K!c1WWwi>HpwRq2lu$7tL*Z`)C`JHXcHfP(hDz-N3%LcO5*^aE59mLjP zgV>sE8#akmvW-}OwlUj)ZNlo2Uw%v$%dxH5Dr_A#jP1s@VqP|i#O9nOwqhq0qkI!3St*2wCR;>{SIm5_v946ycc znwEe617Sa^`X6b0jycaC*mOB-JD7o z>8Y5?OckaoS12jpJ{*= zp%K#QTc7n{J()~qGV-q$>&~)lSCq4kC~cik#$?&*Lgk7bfbvBpY5)_1+#iB6EAxL8 za(^@%N-ftPzvAZrX8r%+AIrGoO(&N1{l|MUw56p~g^{+i(vC`uw9`%6rI4z*Pp#xe z29qfw!+4+ntv-j}YHQ_N_%%fDgHKJ{s?2gXWV{D5S&a-eAj2BtVL>ZIz8fxlAPPS< zWHCtSBoyQ+%uHrJlg;EXYniRgKISa*IrD&d#=Jvfd7+~Ev%yH>{?8ICTk7V4m(GlCjom`rI=FRr>+3ek&EyvAmf|+WZMNHDw^eQ%+_t;z zb32ZP_`2I2w})=uxc%Vvvs;-p0MR`w;hW z?y>H6_e}TM?z!%p-HY9ixLHft1h5I}Ae{r5%P0pVS;#zQ%_~v|HKFk!9ln|L1 z;d(~8o>8u++4YQeJ!4$YSl83ydQNaX<6O^p*E7NOw7Q-)*E7-eoalPmUC$)f)8Tq1 zyPheor_=RJbv@Hu&ve(*WQt67$cUKm7Dq~XG16kk+bGfTW_bi&=8BIhZ;Ha37kH^i zo(NA2tupG7c)16UP35(kKR`8qfQmOK{sI*Td;|*b_f%kF`7j1=R{Uj*lRp4W{s1)j zZ$Oj(0x9jon6$q%qpVetuLFBEWT7=lmQ?xMoMN`RN@jYM z&{e`KFmfjs)SP$mgLd2`Px2S}Yy4gQ5l=i+9zh=MJUV&w^cdnX$|Kst>XGV^88uo*AAqJ(qaqdam~@^epn+=XuWarsqS? zuRWi6{_4ehX}t7ab-WsRHSr4ZYUS0#Yk=1fuW?@SUN$eMSBBSAubEzRy;gXw@mlY- z(QB92VXsqO7rj39y6*L**FCRCUSE5C@AcN}7q5Q_9zqqNx=>5-6a0k$p{dYZXss~{ zkmzd^R0Bl)YGHaqVZqX+`}BUdGy$R#{54G<^Z*~I_UbF}{ygg7nB98ytuKqup8Hz+ zO~>=ZjcD4p@(bM@vD>0of8W;JcVHteT-~f086FoF7F&4W{OMh1^7SQgyAz_d>RYwp ztmfeMod@?8r9_V#A3fHgpHOHo+^JPb{iUj!$Gx}qAl(|1HYAw%TpR?71){!{NSf#M z5|nC29otn@7u80Tu4ZbWGcb=JV3XmV6v`0|-?c1+YdR@xKz&_6)c#LbFD_cN&hUj~ zq)pvUiL)JZCZ=mi5O@!U8hRz%`&6@9nA%WSxGH;x{u01tkq;+3xPhWlI68!+VAg@837^ z;9<~s0Y+BG7G{Bvl@K`P%L4r=z1K^*btm6E?N zROU%_DVyuelP84&4!Zi5gW-G_q-csr4UX`zw>{beRbFr2Fk{*(gHi)QPrrw%;1hg>XboBXE~vvn6u%kVIPwMG zg#60A<$u{9*?&;Dx%c?c4f`h;IydD;9lsTSU#EgxX_@BC(sieg>(=JYoVmhq>_={e zGkQg=u2VBJX>T>mh~zqS7H&(Q>=g4}bA;uUUr0%Tg3`P>?w~;ll^Y1^YD$eMt7yZi zO=pfBSP}0Cvkx0(n9)H4?sx9}@@>z9t%!T44z+`?k9%xT7C~2T(V8WjbF|yja>kiP zX3d_mT$r0XXR>zgeC6o4@Ky6Asj@PcnIv;gFwb5_Iaitr4+~g8KVrf)XkP(Se#Z zMh<2kfCy*{3$#$R{r5yo8it@~i-8wAgV*+LOO|iahjj^3f<}F-u4_mqaX54*ni%jU z!JKN%#O~|*>j>X!XhQ=rz~Ho=+W16AX!x+z8^-Hn8*qswHzr-xDfc99AE%TiNrN=K z1%onJEaRk}!J>&sV+2*|RH0;A zhs8Z}bC4>t=Vi`})+>981IVu%MWrW9f<>DC*1adMA31sX>gIvHQs$=2N-<1Mm@qv` zr_vB5@jI6O=E~)M$MOb(AE$z9m!NvS2t6}3!$kF=-9K^ayPZYl_wB`j#1P+GEIGP# zX~7mTdST|GmD(i>mMz_{-vq(j;`~M1^R;(lE{6;Zn=lR$0E;wLb9(Q_Qzx&bChyW0 zgM!---DQ0r9TDsGAfkbEfUFF{XorL)3>e-sZ~Jh4G;!nNjz37ftb@>7pa9kYt;qE4 z&$UY8b86^UCr%X|-mZ*J9n>vUXUQroTDxTX;*C_4$B<^=PeSpp8EHsHli|>eG=Wh3 zYX(hVxV{rIf_UK{Rud(7K`=IWgAxMq+ly2pP4y}b*d7q(8EH&>IhCdlPY#mR+)xPf zNNvHr;q#tyCH$(}oQd!FM3dT*Ym2fqSqjti5|6@O?%?J#7mw+RRyiW`g%}dX&6zZB z@(isK8hrNPu>oq3VcRcicWlbpd*XO{#%3f;s|~_F7!A|l3P=2SVkE=+!Elb$;1QXV zoRVmuPfBmCBQ?!Dvft+Q3Hot?TyoJJ+f5y?U!Hw#P_`0?W^5|~c~>80jA;rJ+9KNm zcz7j!&fO^s_DDoR!U3kXbsK2D|7f-giCkYxVtZRn14X{mkH^OsTLTRC^lYVGHHuO2AT zqp}SZl)eafBdS{>|L6czehrniKXgCZvRRW+QDZ3B;(b?l9@A~xm>$=Lj3f>Hh8R@f zk)HxBf0i0LmHotpxeIfaX_ec2M+!=+gX2*L^E(O}SPaNmn5HCS5uZAwzY;v5H@HK6 z@I-TG5|#NWrNK_+*aqi&>H1l^4xD7Tk;3g^3oj}+p?!9~8TVObQ1Lz+Ny!fk6ydU4A9ED;eM zBT_43nL61SuTzJ|ipq&1@yMDesyLLf;nC@V;JZdS{~fr$d-6`XTx5&Dt{5Y#y2yT3 z33W5UOS*5-NlADt{H+|X#QF-IZ_RV{htKA*b)^5ySnqRnfb;d-;RHp-x z-o2)9=l0YM6XH@GmIk@b^(p7e?(ho!#O#m`ekXyGk%?Rz2pBpqB(CcNtNu!Yfn2^6r~=^PN6LQoGH{nS$?k zWns-cl!j9tN)ny|k?%XFNQQSl$_vjfu+ZxESGN_gQ#n*n9Y>)r1`P$AsN?`WC-n1C zLT4W(1|bISC4U4AobolqzGsz18>p93U=J3mK&}F2BMvOIL;->*C297wH1DZW^Fvu! zV-F=q5GnmMLCNP_=agI_Qf@*Dt0b|!(k^~GO;o;vlkeGGNYS!JoN_)Wq(0!zDl@S# z0u-!r0ZQoUcb)DiiE8?!rf6(D)r?Xbmp`RMStPY!l|E-cjgu&qi*nKKh4?60#;+#R zwI;KjVRkVL9v&1k%uf6bB*W}snF9>7k7Y_2<}kw?WSIpFbA)A1Fbw`~^CZI@XBhlZ z=qZ*t$1rDD=DZuTn!#)t=G2)*3}#<3^@%}xR=2Ync zKpaa`k+BRj-t_~}NepIlF#*iJW-zJE%w;gC$#}7tsKqQNJv120V3HW~+>D*Y%q)}0 zV(ynIVsIW7-un^O$;NrnAf(2G0YS zS+4VonG7?VVevPxn9I{me5=@H#L%xrP1FP2twut&>}Cw*_v` z6ydmwTCP~9IEnef#_lcLySs-co`Ig}o@{eTO@e=0Z1Nh!87G78VF=gks^G@J{Ki)F~S( zJ1R#gCn|re^R<7E(YR9Vk zt3LCw`dm=gQx8^8t5&bt!fIEl-O|+44AewwteVN1+rEsin{OlEc;89BJA6xgPx^ja zy>9iK>g%hYss3s8S2b$a7+PaYjpQ10YpkoWx5mvH&uhBX>`-%PO-s$Jnk#BW%% z-UiW7-wE*NH=Hp1%UH$O+W3ial(E2AT3c6paqVZdOZ__f zMf)xH+vvB?@2cO6I$m|Obpq;is?(>=s5%qsOs=!EPC=dGI;ZP=Ugve)%5}r*=GWa& zx3KQsx~J>jt*5Tnzg}{^HT8x1sr8T5e^mb`|Mvc0`oC#Vx543tx`uNb-fk4p=w9PN zjkgA90;UE?fvUiIfz1MY1;z#@1#Ss^83;j!pus_tgH{HW1RW1LA9O9~VH37Vn$uiQttYjf z-g-mp>#d)({;3Vqrb-)Qo8UHG+YD|qu1#{AnQa!fSG0dD!N= zHb1ucsm;4Kzh)m3UrJiVOEN_xX@AQo)AFiuBAZgGP&5!#2aXBQ_g82Do~%?KL#qkDK6sKjL`DRfdQ8$Im{{zV3gV)X*OnuatRcuJModTSL2r+S(bK@pq(8G!OVw znTD5xe1>^5n>qM4u?j{(&|;Ghxq*(S}USZVkZaFA~4)&s{8GrtKMaj=Zf2T!i7 z8alzsI4jh~cxqzB%s*sm9(}()@3`Rt+~>#)K83h*;K3)6>fFqf*x89X;@$fa`lt5q zF%oNj{aSMBF2g?DFBXJ%C}^T1Q%DHuOs0_`z&C{Mh;&m#>Ll>6!pUwc4OU2_F~l27 zR&eAve+X7^yM*<^NjS;Dab7i3WYL`}Ornac!Jv-q0`C>E#8U%`;`>*(LA&SD>Kddf z->htzlX#foI>**j-I)HYKMeqVwn?Qs#M0`e!5Y$lCk5!f)y2?;9Ofc76gUp*w(MK7 zXszLq)5AV}`T8kz2R4;cCz2=Rt!AX4ibleoK>Vb(NVEOIE9nH{rGl-q#cicUl#EsR z8&U`;FoSTBhis`)cl3`?1tUcxPm0Qh5HD%SQ5@h;2Q*YzMb!j>JynDW6x9k`em-Uf zx>LS&ff@?f4f#ktaJz@Q4$safh~7ZP@Wcyu{u=%;7cLr(4!;| z=j2sIQw(FlZEE49UFM}V!DHQ*H-FMXrB0`aj~=B-ow{B)3R}4C{I*pyEx88uq3fg@ zXUf|+@rX{HT6lEPk^%!cB%RRQTK7bnUK&R+0s&40}NXNm8 z{Z9H^0Se@wE0m7r8&2hUBH-oZS$$&p4p=AKfTLkdUg@lcCg;Z&c^ z7T-vx6vG77=O{;ga4osgD@CHHvWPyX1gHnyc8HjlI#gR!*)re5$#*RLu}_5j(g_+; z86|m*IPT`HnFp4LuM@JxL`RO`mkA6Ueb4T|UgI-07anZOFEZGE=HdiWw>6PH!nH5EPK5{l_aoh1!x166?IVg`dt*HC9lEw3rl!uzamIfO(auL-A{^e zMw+G}1KW}Iq-nj~ZJr-Jly~unA+sabEz>@3h;D4({Ja=LY#naW?#GVLbs!$P2|=4N z0XLE>>CtWJcwHemHd$P_O7M|9ppv>ZY$y>(rQgFg{+Io;dc=7_o!bvpO2j?v3Z!Eb zQJoqpkS%1&PoWvfVcRVc%ia77PX$&Q|4gR+|&MfI^_i09M~ zW^OK=Q!rf^Im(WEv;{c}bCzmf4a^oN+Lx`EY}f`pxwE@UjvUgV2+V&un}~VMKk~$R87zG*$+g09iB^^CTG>0x!DGF@mBO&%V$nrHc2-wG(0@YuyD=d z4J(ld$6!CFzW&*zU8{HMR7A{t1y|p&mq2+L1jS%MMS5rc(h|2;uYE20@dgi#~tmM_*vQEV)#@6Hlbp}2%;PIikFssPdVCmudQqj>0g z&YoiJri|hlIr`cbZt>*B8B?^0lM_a@*Y_aq7MRbSm@#YPc-_Pi(`Tj`CWq~tmpyZ_ zwWbP&yP)}ODIGw(!5iuRM5^cehDXwLg00;C&vJL}({9b!HEk6IyCiGzq$yg*l&Hww z`rd>OhwFs5a!aNxN}Z~;W=)9ct?x%X6VTh8nK5(27@a+0#*9Rq?9jYLGjOsqWm@h> z9y0`!I8{vM=W!{h13R5QGo?TDLFC(WK!v#dFWlf;({r-EkWUqb+=-nzRvH)!Kp z=U!dGzWJ+4wumDZ%vzeUt3UYFfPOIRsDL|WPCX*-8?I#1q_q=t*65kj;|;1@!N(-! z5f!L*U`}&_MqNBZRBvq}sQS)-2_-MtwNiV9T~I9*NeSe%!z}C*$uwBR*FRt>eT5Wh z{s?iLcpE|v3FI#1x+;C8Kl)(hH@J_-+V9||`r8Jgnt^T7?=+RmHk)p?Y6NDCL#8O~9h z`dGAZaXZv2DbaBF1_-^IBqC>R^0(21~cL z6v0-yVT3qA*ngEKT+mA7W?`l9n{OYiJiVG${tP!qV@z=cv+oQn|E*dZY&p4@w%myl zdSc5BYzfFOon{oFcP6+a!QI*OMFL#Uj1(_toVJ!2(Ee278uR^oaobG8*7nlH3jJ3N z+dAGr7*xm~_{-P0`2AK6OV~svEHGF8}Kuiowms7&=L`vXm%H6IX4){ zP4Y80bM4&x4O$5P2E(9+dJIU8T@^7TnFqO;G1jSX^{2Ep!i;z!Pk<1}X@u{0>Du#z zB3Me_pcP$wI%NgMB(EWtR{lWOo=!P|b*G~QtP5B~7x!5V%@tvkKwd$P`uZ?DAOJTh zVlZvM-q=tU9woRM0=7!=MzK7SxN=p*Sc3clx$5hQIDu57v_`xDEphu1{sjh+7*m$u zUf{rVaU?0`y6{taa9{Em%S~H|Tn?vxA?FK@ROVe_Xf-(u1*4Niwqhi@1!E%`e-}VC z?lF(+XR=T7e{F+#)YnZ z$ao$@Ry7$#(nzBRLD176CGgD!^^USGHI}ew*0PGBv-$&5+ zX(ikw{arpg3gfg*wNdWBg*VA)HkylSpN`n`F3PMh3H(<>Hk0yGa1l7!DTh)(FUxS6;EdUq7D9r|4o=0a{z zGcgNZ1z?Z6;D1RN1O8W`GU34=57;zyp^H(RAU=k$6(Syb*wNgI>R5j?rq8|#5hjRF zr(s0V2V1H(71T8#_;p9xdzZKusWn8d{07zpV9!^J#W~;~i=G<%v9EUSa|##(vSNgo z=#O4E4`ZJ_NXPuGa6oe^KZ;D5k1^(WImS#wkXiSNxceUc>_=cb2BpKvm0pP)jY3?E zSRrJVkrxb%hYiRLjzM;KF&%|jB9i6`*c-JI+r#P*d`HqO zg+BA!iLlGPlZfq_|0G$a6fxTd%yOhs0E;~ZD&phbEhwMVek5Ncft)I~ij z_B@VrbmHPF!62xFr(&^@!v5*IGq>TE=lM@uGhTgnd^oqk z7M(jr7biw6jaijoXi}g1mM=NVC2cLnICJ$IO>+9O)maAA&H)_po;N(CkM1~J(iE(j zp1IP10rdb5DxLb~Gkrxo<0Hp2)dvfmr7nGhbm1||HYh(wnKwYU+K70hG&Kb4k%d@4 z9r`%r>h;o!jv{tPp$Fx1HhO9Q?~);rcDuC&%%l##YDMMqi(U?#mKsdTX?rXhObuBRsq{vq++ z_{)atg)8q9-*D63ky}Tst2w~GaQen68!~DRN#S;vWoQP^y}bE($;+1;3TI8z*1GmOM_^gF$QeUWy<|zej<&T!KV$gna z*mUpu)g5Q|>j!Q;Wxc0cAR1bUx5M_d96CHDW}JR^dSrfQUEdDLmSG04kU1K4N%M)} z6QXqX)SP^SI_3P$^^ce9)mGe9j$b6egv>Yo6c6CvH2&cdhTljJ+>Rk82O%<3^XaLA z-TMqtTaKh&p%bZ{tweegqT68G_;LC}*3p|jL9sKa4-)Uooxok+Qc&-P>2DVa-&_=c zdj%(6L%pAT;20zP`|?e+v`wXtMX38(MYQ4d}NGYH1&II76xvWAj#| zmP0>lBG<9A@V&H;`)2il6JO{KZ%els`jb}UiB_w6kKnZ_yHcd8uU9#7cUJ!wAG%}Q z3su$2m>^NzFAKWO3q%i}6)HT%z71$k+*i7KMWdxSgq;}N3(nJ^J>b;c|FT!|&V1eE zoiysL&lae>8mRYDBib=cGJVsM@)?D1l~0s?74g9 z8|~fBrveGzW)nX0&DN(X;0c9WOMzMjw_KF*d`jQy;q|HP!6cl)qzZK}JGsM0~VUpIS6|^E$1H zw1tQFVEnCEr_ZftFQ6J4hHcVBjU_!k#;UVtt=)6J;JeS)Gi! zTX=96#@=ObK7(4%6p~ijula89@lK@bAb;Z7?EJ_(Q1!wa@YFZ;Z5KUgta;Mbo%f3` z9NM+cZq};pE)EHCLQkH=6Cct*@KqGe5r3((R#bIz;yI_( zLD51~1!9(r9+lyHJH>E8wSV&4CqF^`x0VaSd;yM4)?B;4V$FWTNm$Jt7gOqUFZk4U z+}zBhIg@k&BM*KD?hl`W_l1kjDTN00-Mw!(_4jKcd#r7%!}IG}#2aq})O+0#{0*vW zI8VZ_(BFv@T~_QB4?qG3Hry8`a6|FTzCTB7{BG!fNK~bYWa;V@DaXmi!Ue^`rkcn3 zUme^GwZ4+-)F74kPGvRHTSPfSQ);S~&b&J^OT;6-jXOl?jFhb*2A;%_xikUkOD1yh zYxC2Jbp?kOFI;1|k?xT;W9h1C2EyWX7R(x4AnP^@!Smls4G<;x7cymu0G(zFMWszC zgDUZ-Vb^1_i#yH3P}nn^?BPI}AP^l-;>h`CaGvI_FaaeLNf#A~f@+e;ZWk4G1=Uzw z=#aO-A+O7j*U;2=Hw@uE-6W8Xd_%lFG)`)mD?TQ@?gO79b$UxjNk-C3Q&f_@Qun3P zBf@;*z(hRw-u?&`uer8A8vRc@zsFRf-{T_dC0%V;-(676n)YBs3WWdk1{fcZ@a7B6 z9VTM#@a9C1^l3SprWoSBn6@r+Tg;-GuaWnH2#SCJB!Vg|B$L_EUTqBWx^P zpo8!*VCQUMwsco9+ZWS=P!~pjNk(&kocG3QM#D^3y2yvL?+5LV3c!*qPPKTp@QpN4 z5h|+Aiar~q#Z+l_3n(RD!$VY-JP}p(TL?QSkPNVQ!07Xp{M>i12IT1%iahOH?yY%Pfv4j=k- z(X}<(SJy;k-$j+Z1eINTqYc!`G*HdHK21d3CfQ)`M1zP**FyxXy&>1`fZx@SO@oG>#u+Ij6^(DNF(cFsQQpFas=B<{hDptcV z&G}VPB!XKdZi4E+ZpyvqXWt89hs1Ftc~B;%dF|q_s}ZA%WlFj`PDG=Jd8k42XV7BIYgKwo^w^*g+7})h~O_R?MS=rqTRlL+%X-*d!;P{u-mQGwCV)h zY=P=?1uu>1-7;L(MO#vCwd?U8RJAJl``C^!WN^>^-Nc=ASokv^< zA2l9>o%ONfR*uv~i9_?ki((C(T4M;h=Kz?{B~PaYO#htUNt&konw< zygBO&w4fl>G>(+)mFWg>z&vhg`l8fitzTz<+!~|80l!PU3Dr_ClI#i9QEIQ0UkWRt zm%^@eruhy(=|vx5hJfOGNyM8~_C~nF{Y?5c1nW?IFNwv_hgN~NBy|*NzkZj*)3|BI zx;v$L0oV;?^OCp*_sqD^snT1cxcG#K>Ozj-p5=Nd-Eq51?jgcrJLM)elm*ZYGd2Wl zkg6KRv*MS#L{utr4fo27`VuPER#~wws}-6V|V*M2`qphmPRe-S>- z6=B-^cMHE;|E?hA@jIVMrJHg3Jou5`KwO6xqT+e=j;^koh%flE!8j_2SBHQ53$+yo zAWmZ^Rk?O(f*j}!k7F9Uw7GA40dMz|)#OQR9lWa6jdAAP4th_mq3fa^RQrTRQp0@luHFU8md%|-6=o?niAcWhhYRZE@V+d2vjD%(f8Po# z|D|?dV9K6=1__S)t*hXHfu zbY9^hy*l2yal_2*I*hZ@pKD?g^LFmpw`2EO!vo^MrB8^RK2fLMaRR>3Y%E;5dR^fR zdrDl2HAA0SFfD(zR+W7QcfvIwktQwPj}Wrwzm!fp+0P`sLK@_|<{7EB{FQVpMeJDi z$vH9mv?ysd3Tu5wi`kiJ0(`qskfNYpeF0qtG$|G~NSO+08S0pjojFy6_jGTPl^G~z zPZiGK?aI~uBK0jh@N(1%X@=s2??|z=n7uRwR_+lWFB7izMW{c+t#|Am%yz_~R7gIf zT?jREvezg=Lu7<*NC7G02yz4w!b>y9Fs+3_S5-yvSTUQlM6|9VT77pTRx68zWfY|u z(h@|8v_za9Qk*QLr3W6CTS75Os36HLB+1&bqSZx`62zw^k|Y^PvVh`}Nl9XMk>nypW+){IV&fvk62xVR zixh~>ZnLl(u|bL)SSA$o72w8Q$h*tlc@MSUD^HDi0sn&gWAWtX{sWl(WSG+j zuDnI%C_WAMb42y^tHTa-#v_D218j*C4C?DyIP?7%pTD}#!nT(R$y4grPk{URpWcSq zm~?AiY8!%DdE={}Z{2#x!X7-pv{BTUbC+)49eSXFVHUsP76-NYf`=SQ<9m}-?iPQm z&~BR$pB@_(vu=H|VMrft!k$a1XLJbW4k&Iwb0_=oIn;QekU~o9XeQ%@x2_XO{Xi0+ zZGE}l%Qu%UJv|?JszqwroH-f#y~S6HzRUB(BjQGylC`OEaVfZcOxk*A*#i7CEL&f& zWHZA3DFwc|jlx3|x8c49R6I z4*Tu})OfD=R;r`PZOcK|O;G;@1ZW@izY^d-U_gt(`@){C%Uig3jXu)cHz7FP6FNd8 z&G@u++qdU$DLJ^&I(GWJ>2s$Wrl%&)O2nh1S4&e$TRK@XxRg_nDw%l8S_+^4pi2s@ zy|ECv4QbylbNb+kJZV_U?Ru-O$JhiIOV*A-M~%7hu_yv_I?FP!q;t6t%;}sZoE5&i z@z4pqDn=_xIkkq4o#7h0l_|9VL0LE}+`9jrb0Z22P6N(TuI$^F>MmJu2r*G(uNc}( z?c2G`9ftQ4$dOE_&u)PFiWiwZFyD5B_`w`@|3+ao@zXfuX3SdGXA7~*57^}(>~;0S z3!wG!bgh~{)ITR+kHQ`Tsah7SQJ-=M5K#{F9n{DFswGm`u*kQC{7}^{H8|O?q1xGa z5j2OwMXczI4zU^5;5FK7QoG?I?qx$@6}wBW3MC;}RpJ^JkEh8ca)0bxU22EdmGMfo ztM^7>ISIk{eHX<&(rTLi$+U^k82oJ_t=ociQX`mW74XWgzZJ)g#*VPPyrb)N3w>=z z`>2dkTX3*H!t* z1ZfvdSJlT<72f59O4vr4^W(8+!CaBFBIAFNh9DVD;QJWr6C-fAGwq4MY#w-ZJkdfz zwC%4Bdvp6{;l^V9=og$beq4HtE;@PjR>M~??i%=Nk9w$o8ts~mqq7b9g~cQf_Z>ze z7@=U*ijz+BDkBO0 ztvh>spD0Zz4b?=Uy_knL;&mj9tkTj;JH!V(hw2YK;Obl%@fNCU(L$;4prPk$efdzp zTM5pNn!Tue^DxrWK^Uyk!Vt_i`w-8w`mt@fcl}P(Bh|IUMpT&A?AZYG7gb9{b|LP4 zq$r$p^;3>q;YquH_2%FTPv64uCPir;ry^CbUo`eh?ykweql7CwwEL|$?M>gpcv9=l5QTBV>Asrpl&Z$M}bUh@TMR_S(43!X3?tfZ#HkVFjW0SWd7={2Wx<-W|^k{+s6 z{}dWa^dq#*uOz?I-=VV(JI)w2#CM%MtDe+_na$J^P~|`^&uUaT<-!Z zOa}hK;ZLkIi9NFKJUMsdo7l2qVG)T$Op92{!b4MEI6k3#x<5UX(Tbj8V^QAlm+=dv< zR%q=MtfV#Rv^2Fgbj^++V>$5Vi(o8tpSkWAykyjzIBtRXReO4E`sZ6dd+uWtR!MSx zg=>9WTK7}Uw3&-mtjgZCbf4iUY|9Ynts8A@$+TiT(5MM|d`>2P@yeEk?8AgnAG~xP zff=L0fKfPZ)KA>iTds3sx)b-Y#6w3CP%?awoy(E8P4Pz~y`VuGGJw=;fxp~Q7*PFc zYSbt3-apLBynXK>I3L)ZQ0=DA`8zLufZy&=jHLEp(Cj|8e9acajC)*Ga@5plU5NA2 z5rg{8ft7ck?cAP~xlylvocn-NzgcaIUJ;=q%1-Txw?X}wRDJjf@Os=(jU0sXl6m|7 znU^pFP)vf+;E~P=g3)~QK(zFbHSpOh7%bc zQ>QPei@P^)cQnSp1{~9i8w(xt_&xlS)b4D6$yi|Q6 z&h|?B@j832^ppY`Vgm9Ze+tgvbrC-II`{t&_a5+372W&zy<3yrkYqQz+3aqzn?|xp zz(NzTBT`fpQIICm6hXQWLVyr@QF<={f=KV(C`F776|uY;yP^_bi3LmU;-dLI=h;Le z0{VX6_y75GInPdRojG&PnKN@|&JBHPDroskk~T1O)cL*%(@|au4KO}y!lH!!4~6<; zn%8SVv$2s(*jmt1TY#5`(R1hLo^1%-s)M)HsyOeB&(3w;Y|2Z0C24%qR-rnct4}<5 zthcXUs6&_8_pIo?&fPb8-{3d$Uzq03&ww%%{bR;7wfpt%%Ut;ICUu@2r33gI0;7U11+^AlQoORchw2ZXIdXO$UM9vu`cc# zs{cdKcS6hf5z8!!f(y|oyR~nepP4#`_8adVKfYTxZ~pLkbI1Az)i)Nd-!@^VSF>z9 zSy|*iq&;WUqVb#<)4UzVkC(1kx5v9;_4JABWd!*f6k}<>9`>wt1@ICJzH;ygdIB|z}=hg+wH~3$;?e!yf|I4^x=kjL{deGuK zon6OoT7P8Yt1qnGUfA)TM>^c=kDmE#(#>a^>Vw~&UGA)FI``J^Q!rIOdiJwPnl%`s z52j-}^tYza)?cR>vrN$&Eco-+DOtZyF(Vz!at2LV=S=2re{)o)P>T7dRc+F@$1K`> z=jjk$%V%Lk}+uY(^#D$hvsb2Qo|%q zq~qUeiP2~${&K!`A{4J-iQe3Iw1j6X4r>W2e5eFGWuCL*T*qv)))2E7`feDsedmS^ z+jkDy@KE1DgC6o}pBf$x@7u8>yzgOO^h%2s+Mg8c80sZ?&}`rL{C@NIH|IY0z5TUd zN7&6i!FIuZ!;|9H&PZwzx&et5Gm_+@`Y2CN^P8CZta(p2H~Y zSbG;r%z4+;?dGjXCGR4qkAJ0gui?c3@}glDCQFkSso!d;X6?4n0Vh`oAsb(Or3Ran z>x1)xH#o6qNc%NZuN=~@4MFxKW2F{k%TlwVtj8lsajTK7Lzd69E#s07S%MR_PYN(D z@zuJdRoWNhFbMG#7TT@Dtizxa`_JNa!<)f7^;*%{fHQReIm2f?!^^}%Yd_l?x<6<@ ze$lo6HCOv;q`E6OL$AGz1=VA^6n=oqOv+E#DY2qx*PlnnizBef8F)vu&qYp03p5D)qlkdKGJ3W8c3u zX|DF~H?>x8s#?8|wI(0ywIg^*sVQ&1`|THPUuYasZo4U~;VbPw_s@CL`B4AO`;P72 zb7<$5{ypyO-MfsYRSbSgOQlwO+=obGIJQ*(5B zBL3C_^u=bYE!PH@D=T z{pGYB3*2NC*baEwQO;2P$fBm@~m2H{{_)c*Qhv`TnsbUhOJOf6&tA`WI^@ zMy<>IMbDOaSFW5qd6|F5=f=f@x-IPO4W*0=wF)In_D2_t{Rw`APJ8qRbv;~)$F*pE zux@aWbHMZgQwRE%4eh<;K`$22BC1%Ze(DSDf6@xR)0SzIG+R#%%js^ren9{3{%5W? z7H@oJ)n4x_Pu|(k4@bYbbKklNd8_>?{o38s#`{3wj?HiEf9E5A^qI#ojqZh!cm)Yz z?xCs9(7Q0_LDi@YJ2%MrkvUX9_&L_mhJHJTA9M63EJ)La9&i2gHM#3@gJWbe;yUoO zlg!Rh;vO&5u9)bIn_oD6?((TCyi?#&jc;a&d!g`_3)kt#Jz02nQp2S2lY0AFoC|RE z;b_lI&-8q2l<(jtM%?JpRk^EncosadVCEuUw01}Eh-Ok>KigIRI_$<)i)KCB$f)%; zg{;3dLYpLiZiOP5jKAH0c~PdVNzrdk{=A(u23X=`|3QoYM(c!Xy8dX;0I};G$~VS! zo78(s=YgJ4T6~dtZRBWAi-V(H+Hhd@ti`?$#+dsS z%-Og=+H(I6tuG{Wm1Z!W+i8lPh8ahu;8Eo7;b4{i<6yZ{%f@@d;?O6?n}fs6lB>{L zCU}HfLtbs8Q9F(+O~!N6plJ#fL!mK3~tho%eZw0a@yrm@R6EgSQ3m*V4EAe34({@W}qE)=J^ zLN3j7!(yyCkW^jR4hQC^SV3<4F|9?g*UC{^^N_CSz{(d^ZYp|VK+>3-vMQ_0Y7EAPWx z6G-V5p^T8}y=%4T50C6xyUw4IKe%&4?|{BbH&6BBjdxruVv{Kf7GAqLV=hW_P5+_R zZL{xq@FrvET}&ju`_b*szJ2uQTQ6*VxO0npJKW}vQ*_CNigMOAZMF;u-K@i0rK_~l zcoCW``zLla?it)+bq6n|xI~2Ng;GNi?_H_cj=sFQWQYF=Q=AfUGnVm9?C>;#Bn&d* z&j>`0`yu|8bAz6??9`@VkHjidURk*A**Clg7Y`heKjo2WBQdRe*wdB++D_xF;+Ys7 z$Agn`))zfWlW*@lvVB+I4BQ#P)RdbS95eoEftG1eXJ;Ej*I{>ZGM4vsgx#*rS0nf$ z^^q@g*_B%C(N|WNZ1>NUs|~p4#12O7$$0HL(@t%w@#un$rLTLRT{7UI!s&U_3s`cT z(@4MxO%g)&?3i_BT8S3FRnRu zB`aeK=B}9T*Rp0h64<0ltR@Gl!3 z(wVjO@tQ8LtvP>k{_uhcb65G^%)8Y*d_n$(rHkh-p6?rN9zZ{*0-&Pwn0{;HkcS z2Mq1gd(+VE{-uT?BZ@a}C@x;Nu6V?tfg?r?@sC^P+_ccVVgRNDjNEKo^u+u*OFhfS z&l%+#+}yP873bUqGbT=$JY#~tV5KQBWDIR{J~eEp`E0BBr-lwSp9^Up%(k4H5&G1* z(9+jJuKUhD)z=9z>R?_lar~Td-hKrGhxIKQzH!OIIg94`$C?K%agLZ+ylU0_;?=7c zjvUcHe?oy@TRLVI7FTMs*Y&de2!8auev)Cv1oLgmZ4R1m9Q>N=^#y-v~!1#}a($7dv{e@^bQswlDZn z8%yxyLCe`&rdxuq9tGWH2_8NS8j%!yZLcNxT00BgzZ#Vjn>T*p@|WIy zZSOjN^x6K}&6sndE!J!O&-TA3Dg1XMZJs{Z;Ov4vri?$BKB@W$Dp z11x6?zfn=(UHV|Fv!714ob7*7)oy)3ukAkD|1SKc-HzJ@U3x9`Z2ygryxfhJXxyT{ zim|r(dTrm?q3ytJaQ&TqzY+kRV;1}Ta7vS});B`;% z`a@X_4`$;&!4JXdN^rUZIQ=O&{V6#8HaPt@IQracLqO_>RQFWe(iVmhb zFgNR+IAyaemX5~q>zfez@gb};{{ev=qY;ZW0kJXLs}HID)u$1b>UH%!^-DFRGw70Z zSLqt-9?)+FVW-uD;2*7x! z;a)>mL%w0WVU}S70xp&telTVjn;Bafdl?rPpEn*e!f!B{O-@r?Q(G*!e!$e%^n_`p zX{~9$={eJ9rmxIKbBsB~oMFy3-)6qg{Gj;}^FZ@(^F;G9^D6UR^I`Mz<`d>J^QY!h z=5HdD2y28ZA~B+F#I+IEN8BB8e?+&4hav_>42_r&F*RaQ#A*bk+7@vr;-!dJBmNcf zQN$M!-$Z;D@gss$86wS*w#dZDtjMb)uZ_GhvUz07$aaw(BfCZRiX0f3i{Mn#B4W0nB0SZB$fJ=jM!peQ7WsMPsmO}RA0rVKC9=w*-?wG!zFU%d^zYZ>Dn!=6 zY=jKNe8NJUV^b{FV6)(f+mbk|-yhPS`=oag7DZNuZhXWNs`o{*b|WH6^zM!6KW*O& z86L$N3z;qHZ(^}_v|xsliyom>xcDk*`P;yp+El$<9gF)&-c6Q{$73C-Pd{Zra}H& zuQvAB`(>Z6yqfX*SF}Wb^xk8OW-VBs)OY5XV@dO7KRJ7~?|`=4cq_tPeUp}CZDzRz zsS|Y(r=)o4m=S|U4jVpV?6TqwtJbdZ7vMGD8_$=Vc)82wdt2Sxt>s=^m84;+_c0ZvW>>+1ye_k^Yqy=aih-~_f8s^&_H|LxcmL0=XQA37i=h8 z<_jrU##A_W)L0K92lc-N>x}~UX-^rSD=b{v+dHD?mLv=bfXwzlno>HyOkuP6=c2%$TVEy~g zz4v9gXW@*6cUxNbxua(fpLJkTqa>@dsf1>^$#|Q#$vil8ll-e#(= zUF95%p{G!!DH_AG>n7~jb8x|&Rbax`fh22q3P*D=`RA-8>*nWr?espgx#ZK0{^+=` z8z)&!d9tqTwsTh-TaGIj`jB_zzy%9N`}?IE3%2aR+|pBrN;Fro-+IJcy(ZII46k0h zVN6o!2Gh#Vj9OQdbym@wP0KtxADug(U&q3!V^N4U-JktHChEL?pv(0#3kRW38e6Qn zmKjT?j`NJ4K6=U^oU~?X;mEFS1~nP)e}Cby<;lL)-Ve zW;PhPRWXT9(Gq;?_yqpg#iB?Gp1 zo9{b3@5uI-J#V$zc*i|mM+|$^x4Vt;$#t6+Z18SaHg41-10Tzp=pWnKxXSeY>c@r* z&l}mZci&Yj^ZXrdHxAkI!jRX!pB+0;hBxkx1|Nm|eNa`Oyz=s?<^J{yjlD)a+OMa# zXYQu`)BN|1hkVW$H_mh0p6+k?qTzQSY}*rsGe?g>V3z}1w;k9$c*_Ib`#sWKR)6Ad z=QNMAdS3I|)yp^TC>b^SDc`<-8&?c#yXG!$&h;Gv{*Fo3y<4{Ky#?YFiz$_ejG}ca z!7J0b+MZxzPT#vTw7r40-55$TX{kq&teKec^JO~=Z9{jwx=YjAT6ZPw(fS#+Yfz!r zm{xpY)Vi4@=-B%vs|>6RY#f?|C~=+_>*FQbz|YZ#?xlI!{W}!x&kO0D2a6uKMdl(j zzq0eFr~jojcu8wsE{y1B*=Dg~>gu%^xNdCKUUX)33q@SjVfen6ekjo*PCd7#$K4o) zUEtK>8oz~JdaF!?j=Col_jwC6iLJiJ>)m^N(b>*O`!b_z{tI;j8=i<|}1#*ZKE9XYOOKr?5Qo$(ih>1l{ zu9>%T&9eCu3TF9>W*Jvc9kXPZx8LZ;`uAV{*w%H+maU!bx56IZ_$mC8Mu-XYj+TkY zKfSb=U$i>SH2dQg>-eH=h*k9N+dEI}@B7sKerw*G@lP!BELt>c$&z`K$IbT1U8jv% zFw{G83RSza?J-d`L`^e&i|L_OOaTtnKh_qW z%)_B9t@ri!;m&2+?CzGh=7kcQF2?j4UZu1Roivt1@}f;0LR&*uV_h#|e_4lNL7=rL zKA2=$_Kh(#(}dxtH;r$Eelw4)XVftAwj}hH(b@zn#Iabwa@zXQ;degx5C(6>-IjX? z-Pi2_Uvy8)z$EJg%MPn{)1;NZgqly@qji@txB&>E)nYE*WVM=S4RzdQ(Mm9?SDX~u zf>+0?cE{HkKvGoe(y>1W-57R37$2L-YHTg5#jTtV_6S#OZkPlWmFWmQn`mqC-WasE zNf3VP*rQNnEk;O!dIXs}|9 zDf(a9aCs{*1tTir2z+fFYIzN@i>(ZnTg8|I8XEWGwYg^pj)&${A8Ur5*aDZ z8)04)oLkX!0h^DOJA|XS|U$G!29EdUOOHf;`@-*|JM9AE7ZM zE+L4Ho!*MkzE6I7WTaJQ0KmGKtRc|a_~0$DSsM}kDwv3B35`4QXf9${eX6c!_^75@ z8w4S-1~Vki**cg;_~rMCUtVODum#a0t#&Lbu-Xw11p%tAGg;%2ePhUHLe!`TD;)ng zas02g&iyQSr}|m&3dE;suYRZfpw|vqx1s0{ik=PBj8=3Cve7A6X2ral)njwNe^+X9 zwYAUYiJN^^nR*kCylINnUW8h)nymWZVypDJ5$N?Qd<{U?qUD|UDbWLZ4j-g=5Y!0& z@O=k4em;%pMUOr-Y>*NiMjVsl2n3JO7WvXeRAfQMBm|^4@S5KueY%zUpCc9+R_gZX z-qL-f|2<-X?z@Nu`UFF|zM0_){WNTc42=wfBHNjc8Y&DG`m%^whLXs35wpxk5c<5t zbkuY-VwV0B^AYor$aaR;46orh2;o`(*z`XeR)#mZ|M|_3Zn&a)Yb4J=KJw%|c+1tB zJTbh5_ZW8I8GNQZS2lTS^|A1?KM3a&p?x0%Cu z#QY+zc@h1TGV@6U&(%dlMc5-IMYNB&88j&}Dq@y!7{7-QGWS@-3G_=aIWJO&d;7qt zE|EPVAC4RVd2mB65C@FkYcM0uR}#M7Ai?|-@b!h8kZOUgDZWE+Kfbfj8DY5O+r?w? zg@thl;Xha@!?p*3#!e!(*_X;M2xj)H5>ieesJ~Tt3tvWvRz6eh7-Kw%FL!v9FYt|y zbmbd-`yfO44&PJA!gn|7saGO!@y!@a`UT%%xD{VUXsx!zw>ON6qpD0vsH#ASGKaDd zUpV**WL7M|{Hl}6IM611AL3Be4&_wU4z&*c)>WTd0lBu|s>cz!Ya#CNQPpw$Emu15 zR|3ww0!QTz3-S9b_8qEP_s3l#c&!81)Lj2Q?@^&9RaL0Ui~4C)Ikm%7i=!7lc1Gr7V*(u${tFYxs9k`IOH;jysf9b4czf z-{^<|KPKWn<<)#EQQpTnA61=1N!OvIr8r+WCOlNZw@UQyg^N=9d^{su2M*+Q9!e{D zttssal=ft;lFE~%4y&JxlmmB9z|)rEUWbtW0J;1Wf1l!YWvoF9^R)@(lk0ThdO=RY zwJUcxhx+>sr2pf7r*IDg{yNTjZh-5g{8Ek*q$;YQs(|c_<~4lE~c`B4s8|qz>c`&*E3=9Ng!5Cf-{lSdNIC);vRUd$OA6m8eMv zjx7WU_rD?>dsCU$zJXIyuf%H^Rdct~g903a*)%PmJy-unb(34E)Nfv&y!OwcgtAR4|A@25Z z^)sZdcCgGf_53A{h`yEM_unXOxUT+^XrFQqA!>rp1L3k|?G(W*m8i*$;lL1We1QOY|}B9(F{wyq3mDXj@P z_0b}4Ku$M-gtPTfE-AGSJZK4d(QEEZOSHr|hYlc>CxDJCQx|a?8jjPQa zBM(@!qpphDRcAx=jnPN29gqGfW@XHtm}4;&vDr2U!ZP--mDmg8@*O=KCmlaHb_Gd@2SM7#0H6-5=#<;czQFG zSiaCCUuTNNH<=u$y=1iY_0S$Rz{@82o>d2g@*IQKeIg=ZPD7cWz(;%Lqn%ue;Gr8) zu7hazKR}GpkCaalSM&?C`d>kJ%9VdBr|}&mwD_t^O+l+(A8q>W_*zn1iN*;I#)Atk zkQ+7C7=JebT?1+gx)#(7bPtZT2X#bx5^^~WGzT;fv=}wD1hfpa27hk@Z3pcD?F8)t z?FK!K<0YWOu#&BDpS$t&5=D5^s2J)gdl0ZI?ACv+TEzSYe$5oASO%u>Hpr)W} zLCrwd;o6pc$F_mCgLZ&+f_8y+ zgARkrkiV0-=da*$2=qH_tO_!Kj8&DY8I%eQO9Qn=d5oyHO4M5=>P_mW67^Gw7_WLf z%M6ME*+7@$=T&&#)u4u;>u_#MP%BVtP#e(gpgTbKgZ>x18-eHKg8twiwX+JZRJw4Z^rpMkWWfwZ52 zw4Z^rpTRfPq+e;lr@JglLr`N}*93G8s43`LP&3dyxL147y|`aT{M`xHb_R6;bp>?; zJpk$sdJxnD)DzST)F1RHXaHy+Xb@;HXegdH4D=XiIA{bY7nFx%qd{TGuV76{jYw@Q z#_=VfOKU*IB{?fxJc;}MiZX;izk_os$N*}MG7W@We+;?)7;^nF{gYE#e#Xau=-3@97 zx(D}dPuuY^xLN_OR)DJ&;A#c9S^=(BfU6bYY6ZAj0j^ens}*2RPYWYh1*0xxU z@WjTre-qF(pr)W}LCrwd;W;fqtw60oZ9un!q*vDw$M45)C)~R;s0*kos2k`3Pvnpv=Ou!v=y`s=WPe=0PO_r z0__Iv!SnXw_&(5n&;d}5g?t9-gP_AW?+DI&4(X$yGNi*6a)(&ROSE_;stFd;3@iHda~$<@oP4iatG6P2uRy6Q z|I+TKVqaZQ2B^jds430=N&-jW-qMDP^ocao^r57EyR;{A56){3`d{UuCI@;*YXeAY z14t`IqVQKs{M8bFwS*6;B1h+arBXt(h6v41+=sRT3P`ut$@6SdwTccoR0W= z0)8*-@rj?k9OYkuV@05qpjDvNpkmNJ=>(LX0MpmGvD^SxFsObvSbcN~!xj=4^ z^yQ?lQ=@HV$YGd=vbO>{SOF~%U+p9~E2D(xOIm`xVGmAnTx0QKa7ImSiT4~X?;_-9 zG4yH)Xc;7LFaF*K+7CJadK&vmK+V8S=_^-&gJs}g88}!54wiv~W#FLXFYJ$ZM7j{8 zG~+=N@RYyy6idOqQgE*n+$#n5O2NI-%k~syJXU&(@RDHf0$nj0DBjJ zy$itJ1z_(27udT1>|LPR-UVRq0@d~|0DBjJjSIlW1z_U>;CdPA<~-NW^S5^UQp3>* zlux9g66L8xc`8w!N|dJ(<&kkBj4{-zE0M7)4qK8&k7dU4g; zDDB&n_ci$YQvKe&IJOV8A9MgzqYKh&D+5)4z6E^;`X2NH=nUvb&`+SBLBBwkJs`A5 z@Zc)cbkMEXe=YUtQo0n@p>R7t0bIDS6f3Z=2(%Kk3bYzj47yxt4&k`u{D0{)7*QIG zV!?NCK$kA`7s}8==pj`Y!$B{o61^blhgPD8Qi&c)C3+~8=%G}ihf;|iiujZmWrI}I z_Ujg*cYJx>IDKFSCHfDQ=s#4V|4@nkgY+dU(SN8!|Dh87hf4GxD$#$CaVPOv zMJ6l36-p7_y`0ZUDfIZ`UQ_3y9p~$)f^}5e+dKY8 z`6Zt<-d@=Aztm{od5-<}BX)Usruf+B^GR)HJ{z*-l3MlRj7#O_QY~AJzbY+UCtTkd z)CJTP^nV#!tjX!$$l}FHLT^vFUL%p`ee6i=t?|62*Xu)lg#GL>NRI^-fNEcR-sevE z+m`+B^7<=sbYU;BW;|UyRFmi{+ANiGW$wXmd%W+IZ^YHk(RoWB$=2plEeu)~wh~h2 z8cs-=8`LUu1C+S|%G?06G*pbAH3l^ST?1+gx)#(7)DiPuTH{xEaPlt}|5A44a;<=P zt<^2SA3l_Ljxo6VpT}1(H+m(bRT%BT9XO80w&Q$l>#Qy1EofA;nBz*8l7{(fWmS8t zVA-lFtKj3|ual%o{2u34fp?~V`wzKPAk~-nCwIQYp+D`0y}InbzdIhjxayUvnb_V& zj>@sUQZ=t?9cBb6C=uRURFxt(A-o;_+Z=%p$E!jYd#3OTp1zdWQuQ&;lfN(e4@ac1sj!4g!|y0-dk z+^^*PO>kb#T}qIP9rzm@mw(_lT4&q^c@wJM%d^9I4)3YGA6H$3XEoRU>HN}gZZCFz z?ei|57CDzQF7|}WUwQuM`5gQ=cR?P)dBOYO^Y{MGQ;LZuXp_(hemuk7Z_*4GbUPxe=FPG61)WIK`a`C(3E@62ozxeTg zy7%v%^Y`~bPD)rue>oLLV9Woq`;t3q^!Jh{TyWrG=htvId@7z_odc=intHt8Hu&@W zoi2UOpRW?`pTFwQ$1eMq?{Y_BpZ+2hDA9kw!@u7BuXp_GIkHDeQ~OE(x%QLC7x3ku zKK*>2BoAWO|CE=%az)w+*!Y_3#Ab!-1HW>FJj2`Jzx{W)S`6R+?>T|C<&T_P_`plI zzJEEhRvUNWv48qEq-CA7pf%@%6V=*@)DCzb;a2Z&B}%whbB{m&!rOpfgZdF4hX2k# zjr(i08e##$=Uj-wvA^eQ_^OL(#rgY5F3#uRpWgHQ_0`XS9i`M&bFOy2|M@*Jsvo`! zZ8Op$%Qbhb#g_}8Ui)uwhBp0go{F(A^gu8S2Jaf*%EsKwD0tN|*o+7YVneS5%StfU z&xxK(1bQxh%=t?}KisZlC^_iS)W?>H**{lfOs*kj`X_Uye|@~kxev1eJ7T{74V>?P z6XyGmRPMruzenTS+hfry>7f*2PDwAkubF~blhZMO>JiMHnuD)^&%-tdbEOtwWxyiL z%NT+$m_LizJ%=!7X%W{7ELT3mwgT$~Fpi;ogKZ^7NPoc`Dp@zM5$gsl%4V(=IH0Dg z>B?cQ2{?*10c|kvP=|Z!vB?Z@*^Jm^Mk78W&hqOqmp&S4;er7(93|R>@WOynOPmwo z2<8D}Q@|G|dv-4HC;^)S9=X9O54K2*7<%DdCt`~Qf0FP7AGRoP(T^u2V^hG*6g)2# zTMT+JX*fR}TOG`&tc#-=*rKq8B7mb=N;dA3gRKtcTGqo+;l2%gz5?khtLI={jXXBM zrl39=BHajEoYENYf)wRCZ1U;!n^4}HF-ucnZRwTUuqmjsJ5a_uu^BP*s~yU95BjJP z%DvbkQJ?qWXa{Tx>s6<8!ls~hA3&bFW3%GB>Ag^{-dNvZL2W*Qqy4bOpiT!P=R>gB zFk34;M=KY38;LCrGez@o<|u5j_{jQb++mD-R~=F^7WXN@7KNFlX(8N~LlZY0(5HRyO>G^zYc5 z7)7sA5~=J-D*h=>Rj2B(N3ZIYB-NlAu*axkG(tt_1I4A9RWs5NY6Q}e&?qlv<|1eg z^va>QRVT(SJZe1VU%N3^*M)R~nt(Jmq_HUps#i_H`KfA}Vo=l7bnL0CHpd=Wp_8Dt zP+KG220CehJkEw>B2P%^kmDNtG$C!qra}&DbW%mxYjjeD6xHY?=0E(QlLpu(7w&Xk zC-v0HcSg*s-Ujv1k2`6$`ucB+|l}f#euBBJe(5qI^tJcsiC$-BC zsgZS`oz&Dnt^2$JwgvyN?o(Pm9sV*wUM$dsXy}*B>py>7g+>~ohmkn94lKG2Tz4w* zJ$nuqu1pDI?*@q;|Ssli~l3rJh!}<(TwhSf? zk^Q^E_}IYSLzDy6IAREVfX9f#<($$mGVdrbekGTJ2w(+_BpQiQ5|!l)uT#X@R_?*r z7xtS_W{=ub*G+d$ze4|wzC{0){u@Jt@e1Q291Y)5hs0QD$3$qwWVAH0u0dKEX=7%x zb(sT=mr4 zg&kP0unXLge~;I29ASO ztl_tc79$($IeQ>4hm;qUZ! z)90Y=*Q4DlMJuO=zP^AtC3>tIc@fXhWA(^Om|LR96JN&s5_55>}H|4%1|EE&96GGyIt|=Mk|eV`|xYV%#C00yBvQ%i*%gKAgS7?>xv}1DbiI{2I){>`GvK`aN{Y^{ zq^YkeDe5CtvvejLON9rWqFjkJlaq9Iq@$G-eM==vccqf0euwihhXUuNsdMo6;;P@( z0oZqilB0g3Bi_knp{ZTe4Uu}8^ z&yX@o`D&AtucnMg6_@Zt|9I6Y{Qz7qWxfar4_JQTK@Cay!<4C}RQ<+uf|69j1L4D; zC|LEW@Iv@do5+V6UKqe9%t6w<3%+2Mfi4gHo({?dEd}55l{TQ(y1P(MR>iMtq%_d= zRQ&2YpriP^4gT(fbR7`Zc<3_m`x5rQ3hD(Kj`^oQg@1Kk96Lgpx(l*$jqW<7t^P`- zy{>uHIbFKaNtdD|@Hz6V3klEVGv&E8B+oogNlYJ8Vrrf%&%S`-`FweHZIWl#JpU1t z88a^Q(N#a7(QTkFM1J4E-_ucsKHznRay6(q$PV&>T%Z)tHK2x|`k2PDfff!RJT;U1@Gd1(4ER}Rd4B9qin6gr_M?SC{f)D`>cV!!Wy3x z$lzG$*>>eVwL6Z1be)t${UrQmVCBYM)Fb8&s!u99b#2v$>T~d(pTqg27o$)o&+rfjRP$L^#&aVMS;>m+d!*9i$RZr z27-2hWWQXu9VGk8K>zsuXo(b(j99UC{sl2*0{=duD0Ld=D)8trh6dn95aPD%OEX9&(8?V@JiR z2jP#*F;cN2OwwbC1;j$U%~COcS5W4@s+_~CqK71_*kvxS%C(m&VhqSRi-}8!GK*d1 zOjwmOdsVJ!Rk^BF<+@gtD_d2rZB;p2Qso?XmGfia^)a8as$RvsA(01pN00cDzh!9YA)@#hF623j`IIHZWkgvKp+gT%P}aul6j>dw zjxjBCm`#K^ywF_CCW7V)#t>~pnE|TDEK=FulGutU zGlcZe7eV2V9{M6EvqkkNm*D-}Bhsa(bm>_xJ*7)e>C$sPyq>b8r!46yOM1$Zp0cE; zEa@prdX_@ZQs^m5ddQMI_ak`<>Je$wqr~P=(GD4uIFwG}Wk}QvC*B)jtP%BPV67P# zb;5vJlcO>((?I)UpoKBewiswz42(@-K+VcMn-H%dHYHw5Y(~73Pi)I)-9@~c*p4W3 z2o2zmpv>|#p!VgSqOAtZ_mntBA_)dcf&o2gNs9~^&>I(&l>`Q^B``2rhJidZVBL&d zD>If2oU?4;tYrh|EgLv<*}%EW28>h4eMDvqloVHhR7AvSLR#jp<2@Gf zI-<;CH^M#(ij*2Tm)*$O>_*OKH*!Y15f)62P9uu$7$IY_N8%mC?vdCMCgi^YD6_56&*grZb!|fa1-&Sv z39Xo*kLV|+5M|!0iEBhnj67k2T**Bp`h*EH{sbigg$c9%1SJZEi8HxPoXc$jPvj{w z^V|fU2nuga;EA9_r7&?$p9!s!JWFQPnmDi4#F@1w&aE|}Rg(SPi4PKc5PK4P5oN`l z39XXg0HQ>#Frifv984TS4&*VNPaI7gN0c@FCf1ROb!1}gm{>a|NUR){$QC9@te`}< zFhODkCBlV?HE2Q&29TB-G_eLvuo9A%8Z@y6O{_r^BQKd)k0#Wk@I+=*m=O162T&qm zm@xlS5YaFc6IRR!A|eJ*<{g=^=0dQJT!q@l9Z>s%GM5`~T5!}18zSf?-b0i~8D?5J zv&80sT+1p1iLfBpgm?|HDe+ojGh#iOFGw6bVXP4lATcP-1gfDL+=q zkCpOcrTkbaKUT_*mGXo4iF~fej}=~xpvaFEUX7s0kCpOcg;yhKksmAN$I4agRz~o! zVlKJt7x}Sbq(;gvkqoT#Qmh!wm9)h3uwqnKa2h!#Q9Y~}*AWyS#>)5}R*d$_9*OZ` z#oG`;@olUa{gw1QrX|{k6(hkhK&dq=Y^*$e2~pZvDU?wp@ly%KfSUoTMWqorLR?tgYV%0@qCB5KPeD2l6hQ#ZLEs3p& zt%+@jw-fImwq-u=BHm4GN4$r*ZBM+PXUdA|D9F5^tg4QJ%nQoO>L|#(pscQr;`-_+ zuCR{c8tW*?yzKAIocAFFYoe$lQM5}@l>aD7eiWp=1m`S*EJe}7kAlog zy)T0$jH1j(QRbs4^HG%fD9U^kWj>0YTNLFsigFu8xs9USMp15~D7R5q_bN}>N8C?5 zKzy3dDj|vtM^T2OAh9B8(npAb+@1tVPaz6&Do;jG@mNL!UE-K4%Pl&KUZf zG4wfO=yS%<=ae`|a{nd7r9`ocG4wfO=yS%<=ZvAx8AG2lhCXKuea;yAoH6t{W9W0n z(C3Vy&ly9XGlo8A41LZR`kXO%QzlkNe9mxuq!?Pf82X$sj1w2bzDx{#&KUZfF%mOQ ziJ{LKL!UE-K4&ayrxfo>#aoL-?Nk60AVsmL3rUOr9}Caz3{WB`#lmU{O7x^yw5@^? zK?$>Zh!RgUmh*UG8BHmc@swf}iKrBdT9aoq>`>#6LhFF{$$Zs#bX9r{~=w2$Z~%E%$+1QBI~&<RzOi6iKK(A@-Nbf8Ss!ml4GP}RGduBForztDU5T<1&kkJ{ zludXSUO4w$qZ>=`GvoE!*LHNG-q5 zQpgB^oxTTRS~D%ahg~8=1M#*BC^5h z9HdTA#ya9S))B|CjyR5W#Br=6j$<8hun%&M^fBW&?h!|x$C2l8-+^{e($W`pz|kHmp^PL?B(9r-F~=RyYe|pc)5j7E zh~rpBiS~xbf4oW}zBw544e>9zXDU%5zd0ED4RJ8J=W*f_#F@ld#MwlN1m|EZIEjrZ zX^97i_?Ud+BBrIk?0^IcE+vY8=s>$8dn862VrLR1P8{NA5+zm~VrUX2UYvsw;}A)c zS3O0PxN(T5N!&o(NR+7Sh^xu;R-#0bbHD-!N;EkKEP$XylykrW2uf5r2jj{)&=Zk6 z?XGYl+Q>V!;p>iYTMCPFgT0Etr!Q%t;I8gjXZ??8vL`=b00@X9cl{ zxRSVvxSCi@JVX?0=A<=q(waF@I>hUwZy%2mNm|A+;_2tdqg;}fcNv&X49>*EvI+W# zexh(Jo;EF>HZ7huEgs&2?9aw?<6+YzEjA77D2P`eC-L<2^C3U+utLHO8QqPCUn!xlGSvdOp(&_(U16h=)~?=Sqy8 zczCmd5~n8~-mIX+>WPP6A^Cig=dUF`MO;T*PuxJx=rM6n+6upW}1BRu~(?mtR=p8LzVU;K@DT90^G4>@0= zmB-U!#G{WR=@9XELD&jG0};`JkT!{A!d6H+g6TSPAJ_`n4_yI@j>oGqVjK@`5|p=Q z@%+w2JbOv;v>1qi0GV`Av#@Rk=eVd@E^3yGn&qNqxu{u)#e-+L;4=t{X1S3$b1WMYCLd`{tr% zxu{t#cy&2mw*T+}QVHB06#mEauFEEif~AT`TH&2pg?#@(n{SZl+y zXqF4DFz!#ya#6Ef)GQY@%SFv{QL|jsEEhG)Ma@cpPT^}e^uQD7fhW)dPe9+c68pW# zGv?(H+=H3G}5C=u0Qimrg*RSMGcl@or)}qIlN{&?$Mkyk|^+P6>7;N(`R_=#-$m zXH0-j3Ceq-1n88YyeCS4PRacxf^7n0*d{QFZ35%iCP1fTzr0IIfKCa@yT}CSl%Tvz zN`OuY4rNJYhD-we>IC}L3G}NI=vOE39a92yP0k<3GbJio0<=j`-XA4EQzR{sZxh(h zN?<=Lf&Hum_OlY81#)y7aXV2~AtykR1tlVG0wh^be9Hv-mI;tm*(1JU0%TI~6G%}4 zWK#BjEosOb(vUPk@$nKUU0Ainw0L(3kSjrn?}jgNKnvWIC^sd_O)KrDT)8P%Zb(!K z&XE}}h}1^(6QyV8hFr;hX$9PnE5QIUi~F;g&SAP9)Afm0@Y=?FdK2O`#HPe+iOq=8 zYeUpfqV(F_lr%Rb%}q&jQ_|e9)lwFbD>vjya@CpGh1iwYjrahuJMlqc4`NSZFJf=z zvk&nh;={zg#D2v7Jo8cF0OCO6AmU)+5T2RGbUy0H4f&D0Nngy(c-wA9+;-D?yJ5X| zV88f9Zdh+QQ>?d}*4s_%?S{O`ezD$eT5mV4x0}}6P3!HZ^>)*GyCIWuzF2QJ`(kcd zZ#S*Co7UUS-j20|ow{joxi`=x{Zdz|Qt+$)j+fD23ruBAn zyv0rH?WXm1L+0fU(%W*gx8-JU%gx@Fo4qYJt+$)j+fD23ruBBydb?@8-LT&Ca0lsC zxoN%KwBBx7Z#S*Co0{TgugXp9?Pg>zH}plWlD?H2mRw|}oN4J>xfw}IW}za=CHq!x z_O0Bo>e$1+6;^u5`LODOqHAvWOM=q3a?`52sdsK#bvLX!?hLCgDB9J+$W@ctnyGyX~P(_E1wiw8UVAmM0kI*m z5mDwbCc*<3yoT76cr8)pF(!gbl85$0>D?#7ddq%k%@f(0C$cq9WNV(t);y7|c_Lb5 zIX{;;k~oT2eG17;E5oN4C z3AHRZfH;sih&Y&-N0jmTBz_q!2~v%(i@noY{mCX7|W_=}N6&J?+v64$rYAqS<>~WxslO|&&nc#Os`8Gl_R+S0L z_Ysn@x=c{Mk&uj4W`gpagk-eHQlb#?cOoJNE6FOpm;faARKyNO8sAL-8sr=m-%bGH z>j^-7KLIEa1dC*n&A*drrsDUhpDpxB2L+J_X{hZNKfRw==v7=h9jq_8bW zVOxN;C)^{k1yT@EKv1Fzq_A~JL9NO8VmDG~H&Re9vPW8n6x55Lv<@k39a7jjq_A~J zVe62>)**$hLke4m6x55HFReogTZa_Xi=?G>NMY-Mr~pilVos!uNI{KMDyeMmQd!be zwh^gpBU0Hqq_U(~^@gibS<+ONG?gVyWl6(P6jE8zRF*WAB~4{XQ`u)sWuGyXea2MU z{8ZZfRF*xJWlv?OB=Je+17Feyv1LZwE7EL}QFmre;!r-Wlw8?O}!PiN`US-NzVE}f-IXX(;e zx^$K>C#!cbe1lirAue&(pkE6mM)#8OJ~idvyAC1V_lT-IC2>ejjoF_3Q8+q z7iBC5$_&H0D4n3pFszHx3CeuJx+sgFXlq@Tr7p@Mdt`QBU6e&oX7|-aSp;QvUtN?% zP`;j07iAHYFR0W-Sp;R~UR{($P-gDcMOg%8=3ZTtMNnqt)kP@;WyV?t+xHB%?-^|0 zGuXaopcMFu3Q8d;Ed|!45ye-@Kq&;Jea~R~p27A#gYA0;`UUtF3ETG!w(nTK#y!%$ zXP~5Vm9*~}D5+pqqWCizD5;>d?^vBn6n`cIB^8wRJp&~b6n`cIB^8wRJp&~bl=eLX zB^8wRJ%jCg2Fi;x+xHB%@0rxNOv-8|H7=7Hmq{CyNm>CL3{W>R`H zDZQDL-b_kwCZ#u%(wj-?&7|~ZQhGBfy_vL8nY2-vl;liGawa7?laic?b&+^$P8*d; z8iF@K#m2-u>d(1AjbmaSb!W0kYfRIEI^J0$gu!979ht0?>uluar&xWRpMHS?WV0`s zP5xw)KZv@39A=Y0+2l_)`IAllWRpMHMN-L8? zUCW`aq_H&B~!>nw3M%%K3jSy=icj=bi1lx6$cfx;nRV$|jg|Px{2-bf>RnkdXI?f!szV zZEZ1VZwa_&Ff)|U)J(DkfyBfyPTEdDAX~`VlWpjj5RinKWH7Ys&wM#w)NvBU3WSh| zdH8^;#9iyxT`sSB>*dw^JnO&KGe7UMDOoR2vRhAm+?YzbqW62>?sjB!dBMz1WCC}Kv>VwEUj##NwK7D^N`qgNJ66fvV$4N4R-qgM?|6fvV$4NBMz zTf%PG5_ZFuup737-LNI>hAmN4{bW0=y>?K7yGj&WUwdR!qS1|U3>-HGgP?wAOxOM` z`4Yw^FG__gI*ZJHdlA3AC@sF!wMViqDh^-jj50qnUC#^&JuaS(Uel%2sIEQdGhIsg z+C7KqQp)I_!*t5;bV}}YO73*}64RxW|J9zHPPC^h!oK5v!gNL0=zhX6<~hn?bpoLAjejxzni~iogs?*$m>Qb0Bzw`>Qi3Wiu#cGbm* zl$TP}EJe*y)GS5KQq(L(%~I4XMa@#wEJe*y)GS5KQq(L(%~I4XMa@#wEJe*ybSy>3 zQu$vT@%DfIa#k5}C?gJK#G#Bhlo5wA;-HgA<$*HdP(~ceh(j51C?gJK#G#Bhlo5wA z;!s8$%7{Z5aVR4WWyGP3IFu2GGU8B19Lk788F45h4rRolj5w4Lhce<&MjXnBLm6=> zBMxQ6p^P|`5r;D3P(~ceh(j51m`Ma?QhsMrerJlie&-(UGvPiH?la*&6YewNJ`?W# zg$O_IU-p{`qnR+838R@XnhB$sFq#RYnJ}6OqnR+838R@XnhB$sFq#RYnJ}6OqnR+8 z38R@X@~@HTm%QOpj+*7DS&o|Js96r9av15%3TavnqjDIP!>Ala<)~SXn&qfjj+*7D zS&o|Js9BDh<)~Q>_j0(G!@V5tDdpX?8;a(2+a=4eny&Uf4a4&~@Io!+PUJmzi zxR=Ad{J*%{)#a%95)pWb2)slDUJ~~!I-ASm(3iyB=yB*v;%@Xf^d)gOdK~(ac=>tv z1YQy&-|;x~B{4F39Qu+N89fetNsNphhrT36Mvp^Z5+kF>p)ZM%(c{pU#K`Dz=u2W` z^f>e-F*14_8qzpazdyt(RfthWh_$K^YgHj}JgR^7?)s3Jo)-Fyj*yu42;J_4Xm>(r z9YX66T8B8JBZT51TAxtBXLN*UgF>`HA)FAx2_eqt2(c?Tq~4=*Ngs_UL0Z- zEW|2Uh*hua8U>s zg>X>_7lm+92p5HLQ3w}>a8U>sg>X>_7lm+92p5Iefe>P6Z-^ZTA$A~y)JHX=HqfnM zh}JNK-$IYrgIPeMUz}`xA`*f-j`~ z3C0ik*Aw7LuovtD`@vJ-d7d8tFLB5F6GD7{7t-pRpj>fA zM@aka2XsA;XOcW$BMjs4Fb)sn@GuS!9>(co>I=sVBoYJdDG`I6REQ!#F&Q!^1c{jKjk?JdDG`I6REQ!#F&Q z!^1c{jKjk?JdDG`I6REQ!#F&Q!^702VH_UD;b9ye#^GTc9>(Ee93IBuVH_UD;b9ye z#^GVDAYYNPc6b z7>9>(co>I=ad;SqhjDlqhllk$lzxL99@cMB8tw3~evi^9>(co>I=gLZfr zhlhi9csOW>hjDlqhlg=^7>9>(co>I=gLZg0Xop8|cm#(>aCiiVM{sxqhevRD1cyg( zcm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxq zhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(> zaCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD z1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiV zM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCiiVM{sxqhevRD1cyg( zcm#(>aCiiVM{sxqhevRD1cyg(cm#(>aCj7lM{#%*hevUE6o*G~coc_6ad;GmM{#%* zhevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6 zad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE z6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6ad;Gm zM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~ zcoc_6ad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%*hevUE6o*G~coc_6ad;GmM{#%* zhevUE6o*G~coc_6ad;GmM{#%*hsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWf zaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu z42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d z$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>X zcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNI zhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWfaCi)d$8dNIhsSVu42Q>XcnpWf zaCi)d$8dNIhsSVu42Q>XcpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu$8mTZhsSYv z9EZnocpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu z$8mTZhsSYv9EZnocpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu$8mTZhsSYv9EZno zcpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu$8mTZ zhsSYv9EZnocpQhvad;eu$8mTZhsSYv9EZnocpQhvad;eu$8mTZhsSYv9EZnocpQhv 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 WR9>J|MuH2Z+K|vQ8w;ex(EkrOj}IvT literal 0 HcmV?d00001 diff --git a/docs/static/tutorials/mpv/portable_config/input.conf b/docs/static/tutorials/mpv/portable_config/input.conf new file mode 100644 index 000000000..0d3bf46c3 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/input.conf @@ -0,0 +1,5 @@ +# deband by pressing SHIFT + d +D cycle deband + +# restyle subtitles by pressing k +k cycle_values sub-ass-override "force" "no" diff --git a/docs/static/tutorials/mpv/portable_config/mpv.conf b/docs/static/tutorials/mpv/portable_config/mpv.conf new file mode 100644 index 000000000..819349e47 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/mpv.conf @@ -0,0 +1,59 @@ +## Video +profile=high-quality +vo=gpu-next +gpu-api=vulkan +scale-antiring=0.5 +deband=no + +# Dither +# This must be set to match your monitor's bit depth +dither-depth = 8 + +## Behavior (personal preference) +keep-open=yes +save-position-on-quit + +## Screenshots +screenshot-format=png +screenshot-dir="~/Pictures/mpv" +screenshot-template="%F-%p-%n" + +## Language Priority +# Sub +# Add enm before eng for honorifics +slang=eng,en +alang=jpn,ja + +# Dub +# Uncomment this section to prefer English dub with subtitles for English dub +#slang=zxx,eng,en +#alang=eng,en +#subs-with-matching-audio=no + +## Deband +# Set deband to "no" as we only need to enable it for specific cases +deband=no +deband-iterations=4 +deband-grain=48 + +## Restyle Subtitles +# Set sub-ass-override to "no" as we only need to enable it for specific cases +sub-ass-override=no +sub-ass-style-overrides=playresx=1920,playresy=1080 +sub-font="Gandhi Sans" +sub-font-size=50 +sub-color="#FFFFFF" +sub-border-size=2.4 +sub-border-color="#FF000000" +sub-shadow-color="#A0000000" +sub-shadow-offset=0.75 +sub-bold=yes +sub-ass-style-overrides=Kerning=yes + +## Auto profiles +[simulcast] +profile-cond=string.match(p.filename, "SubsPlease") or string.match(p.filename, "Erai%-raws") or string.match(p.filename, "Tsundere%-Raws") or string.match(p.filename, "%-VARYG") or string.match(p.filename, "HorribleSubs") +profile-restore=copy +sub-fix-timing=yes +sub-ass-override=force +deband=yes diff --git a/docs/static/tutorials/mpv/portable_config/script-opts/playlistmanager.conf b/docs/static/tutorials/mpv/portable_config/script-opts/playlistmanager.conf new file mode 100644 index 000000000..127ec0e6d --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/script-opts/playlistmanager.conf @@ -0,0 +1,174 @@ +#### ------- Mpv-Playlistmanager configuration ------- #### + +#### ------- FUNCTIONAL ------- #### + +#navigation keybindings force override only while playlist is visible +#if "no" then you can display the playlist by any of the navigation keys +dynamic_binds=yes + +# To bind multiple keys separate them by a space + +# main key to show playlist +key_showplaylist=SHIFT+ENTER + +# display playlist while key is held down +key_peek_at_playlist= + +# dynamic keys +key_moveup=UP +key_movedown=DOWN +key_movepageup=PGUP +key_movepagedown=PGDWN +key_movebegin=HOME +key_moveend=END +key_selectfile=RIGHT LEFT +key_unselectfile= +key_playfile=ENTER +key_removefile=BS +key_closeplaylist=ESC SHIFT+ENTER + +# extra functionality keys +key_sortplaylist= +key_shuffleplaylist= +key_reverseplaylist= +key_loadfiles= +key_saveplaylist= + +#json format for replacing, check .lua for explanation +#example json=[{"ext":{"all":true},"rules":[{"_":" "}]},{"ext":{"mp4":true,"mkv":true},"rules":[{"^(.+)%..+$":"%1"},{"%s*[%[%(].-[%]%)]%s*":""},{"(%w)%.(%w)":"%1 %2"}]},{"protocol":{"http":true,"https":true},"rules":[{"^%a+://w*%.?":""}]}] +#empty for no replace +filename_replace=[{"protocol":{"all":true},"rules":[{"%%(%x%x)":"hex_to_char"}]}] + +#filetypes to search from directory +loadfiles_filetypes=["jpg","jpeg","png","tif","tiff","gif","webp","svg","bmp","mp3","wav","ogm","flac","m4a","wma","ogg","opus","mkv","avi","mp4","ogv","webm","rmvb","flv","wmv","mpeg","mpg","m4v","3gp"] + +#loadfiles at startup if 1 or more items in playlist +loadfiles_on_start=no +#loadfiles from working directory on idle startup +loadfiles_on_idle_start=no +#always put loaded files after currently playing file +loadfiles_always_append=no + +#sort playlist when any files are added to playlist after initial load +sortplaylist_on_file_add=no + +#default sorting method, must be one of: "name-asc", "name-desc", "date-asc", "date-desc", "size-asc", "size-desc". +default_sort=name-asc + +#linux | windows | auto +system=auto + +#Use ~ for home directory. Leave as empty to use mpv/playlists +playlist_savepath= + +#constant filename to save playlist as. Note that it will override existing playlist. Leave empty for generated name. +playlist_save_filename= + +#save playlist automatically after current file was unloaded +save_playlist_on_file_end=no + +#show file title every time a new file is loaded +show_title_on_file_load=no + +#show playlist every time a new file is loaded +show_playlist_on_file_load=no + +#close playlist when selecting file to play +close_playlist_on_playfile=no + +#sync cursor when file is loaded from outside reasons(file-ending, playlist-next shortcut etc.) +sync_cursor_on_load=yes + +#allow the playlist cursor to loop from end to start and vice versa +loop_cursor=yes + +#youtube-dl executable for title resolving if enabled, probably "youtube-dl" or "yt-dlp", can be absolute path +youtube_dl_executable=youtube-dl + +#allow playlistmanager to write watch later config when navigating between files +allow_write_watch_later_config=yes + +#reset cursor navigation when closing or opening playlist +reset_cursor_on_close=yes +reset_cursor_on_open=yes + +#### ------- VISUAL ------- #### + +#prefer to display titles for following files: "all", "url", "none". Sorting still uses filename +prefer_titles=url + +#call youtube-dl to resolve the titles of urls in the playlist +#if yes, prefer_titles must be set to "url" or "all" for this to work +resolve_url_titles=no + +#call ffprobe to resolve the titles of local files in the playlist (if they exist in the metadata) +#if yes, prefer_titles must be set to "all" for this to work +resolve_local_titles=no + +#timeout in seconds for url title resolving +resolve_title_timeout=15 + +#how many url titles can be resolved at a time. Higher number might lead to stutters. +concurrent_title_resolve_limit=10 + +#osd timeout on inactivity in seconds, use 0 for no timeout +playlist_display_timeout=0 + +#when peeking at playlist, show playlist at the very least for display timeout +peek_respect_display_timeout=no + +#the maximum amount of lines playlist will render. Optimal value depends on font/video size etc. +showamount=9 + +#font size scales by window, if no then needs larger font and padding sizes +scale_playlist_by_window=yes +#playlist ass style overrides +#example {\fnUbuntu\fs10\b0\bord1} equals: font=Ubuntu, size=10, bold=no, border=1 +#read http://docs.aegisub.org/3.2/ASS_Tags/ for reference of tags +#no values defaults to OSD settings in mpv.conf +style_ass_tags= +#paddings for top left corner +text_padding_x=10 +text_padding_y=30 + +#screen dim when menu is open 0.0 - 1.0 (0 is no dim, 1 is black) +curtain_opacity=0 + +#set title of window with stripped name +set_title_stripped=no +title_prefix= +title_suffix= - mpv + +#slice long filenames, and how many chars to show +slice_longfilenames=no +slice_longfilenames_amount=70 + +#Playing header. One newline will be added after the string. +#%mediatitle or %filename = title or name of playing file +#%pos = position of playing file +#%cursor = position of navigation +#%plen = playlist lenght +#%N = newline +playlist_header=[%cursor/%plen] + +#Playlist file templates +#%pos = position of file with leading zeros +#%name = title or name of file +#%N = newline +#you can also use the ass tags mentioned above. For example: +# selected_file={\c&HFF00FF&}➔ %name | to add a color for selected file. However, if you +# use ass tags you need to reset them for every line (see https://github.com/jonniek/mpv-playlistmanager/issues/20) +normal_file=○ %name +hovered_file=● %name +selected_file=➔ %name +playing_file=▷ %name +playing_hovered_file=▶ %name +playing_selected_file=➤ %name + +#what to show when playlist is truncated +playlist_sliced_prefix=... +playlist_sliced_suffix=... + +#output visual feedback to OSD when saving, shuffling, reversing playlists +display_osd_feedback=yes + diff --git a/docs/static/tutorials/mpv/portable_config/script-opts/thumbfast.conf b/docs/static/tutorials/mpv/portable_config/script-opts/thumbfast.conf new file mode 100644 index 000000000..1215255e4 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/script-opts/thumbfast.conf @@ -0,0 +1,37 @@ +# Socket path (leave empty for auto) +socket= + +# Thumbnail path (leave empty for auto) +thumbnail= + +# Maximum thumbnail size in pixels (scaled down to fit) +# Values are scaled when hidpi is enabled +max_height=200 +max_width=200 + +# Apply tone-mapping, no to disable +tone_mapping=auto + +# Overlay id +overlay_id=42 + +# Spawn thumbnailer on file load for faster initial thumbnails +spawn_first=no + +# Close thumbnailer process after an inactivity period in seconds, 0 to disable +quit_after_inactivity=0 + +# Enable on network playback +network=no + +# Enable on audio playback +audio=no + +# Enable hardware decoding +hwdec=no + +# Windows only: use native Windows API to write to pipe (requires LuaJIT) +direct_io=no + +# Custom path to the mpv executable +mpv_path=mpv diff --git a/docs/static/tutorials/mpv/portable_config/script-opts/trackselect.conf b/docs/static/tutorials/mpv/portable_config/script-opts/trackselect.conf new file mode 100644 index 000000000..720a395f4 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/script-opts/trackselect.conf @@ -0,0 +1,26 @@ +# Options are slash-separated lists of words and languages +# These are the default settings, intended for anime + +preferred_audio_lang=jpn/japanese +preferred_audio_channels= +excluded_audio_words= +expected_audio_words= + +preferred_video_lang= +excluded_video_words= +expected_video_words= + +preferred_sub_lang=eng +excluded_sub_words=sign +expected_sub_words= + +# Settings for selecting dubs + +#preferred_audio_lang=eng +#preferred_audio_channels= +#excluded_audio_words= +#expected_audio_words= +# +#preferred_sub_lang=eng +#excluded_sub_words= +#expected_sub_words=sign diff --git a/docs/static/tutorials/mpv/portable_config/script-opts/webm.conf b/docs/static/tutorials/mpv/portable_config/script-opts/webm.conf new file mode 100644 index 000000000..ae2d38937 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/script-opts/webm.conf @@ -0,0 +1,80 @@ +# Defaults to shift+w +keybind=W +# If empty, saves on the same directory of the playing video. +# A starting "~" will be replaced by the home dir. +# This field is delimited by double-square-brackets - [[ and ]] - instead of +# quotes, because Windows users might run into a issue when using +# backslashes as a path separator. Examples of valid inputs for this field +# would be: [[]] (the default, empty value), [[C:\Users\John]] (on Windows), +# and [[/home/john]] (on Unix-like systems eg. Linux). +# The [[]] delimiter is not needed when using from a configuration file +# in the script-opts folder. +output_directory= +run_detached=no +# Template string for the output file +# %f - Filename, with extension +# %F - Filename, without extension +# %T - Media title, if it exists, or filename, with extension (useful for some streams, such as YouTube). +# %s, %e - Start and end time, with milliseconds +# %S, %E - Start and end time, without milliseconds +# %M - "-audio", if audio is enabled, empty otherwise +# %R - "-(height)p", where height is the video's height, or scale_height, if it's enabled. +# More specifiers are supported, see https://mpv.io/manual/master/#options-screenshot-template +# Property expansion is supported (with %{} at top level, ${} when nested), see https://mpv.io/manual/master/#property-expansion +output_template=%F-[%s-%e]%M +# Scale video to a certain height, keeping the aspect ratio. -1 disables it. +scale_height=-1 +# Change the FPS of the output video, dropping or duplicating frames as needed. +# -1 means the FPS will be unchanged from the source. +fps=-1 +# Target filesize, in kB. This will be used to calculate the bitrate +# used on the encode. If this is set to <= 0, the video bitrate will be set +# to 0, which might enable constant quality modes, depending on the +# video codec that's used (VP8 and VP9, for example). +target_filesize=2500 +# If true, will use stricter flags to ensure the resulting file doesn't +# overshoot the target filesize. Not recommended, as constrained quality +# mode should work well, unless you're really having trouble hitting +# the target size. +strict_filesize_constraint=no +strict_bitrate_multiplier=0.95 +# In kilobits. +strict_audio_bitrate=64 +# Sets the output format, from a few predefined ones. +# Currently we have: +# av1 +# hevc +# webm-vp9 (libvpx-vp9/libopus) +# avc (h264/AAC) +# avc-nvenc (h264-NVENC/AAC) +# webm-vp8 (libvpx/libvorbis) +# gif +# mp3 (libmp3lame) +# and raw (rawvideo/pcm_s16le). +output_format=webm-vp8 +twopass=yes +# If set, applies the video filters currently used on the playback to the encode. +apply_current_filters=yes +# If set, writes the video's filename to the "Title" field on the metadata. +write_filename_on_metadata=no +# Set the number of encoding threads, for codecs libvpx and libvpx-vp9 +threads=4 +additional_flags= +# Constant Rate Factor (CRF). The value meaning and limits may change, +# from codec to codec. Set to -1 to disable. +crf=10 +# Useful for flags that may impact output filesize, such as qmin, qmax etc +# Won't be applied when strict_filesize_constraint is on. +non_strict_additional_flags= +# Display the encode progress, in %. Requires run_detached to be disabled. +# On Windows, it shows a cmd popup. "auto" will display progress on non-Windows platforms. +display_progress=auto +# The font size used in the menu. Isn't used for the notifications (started encode, finished encode etc) +font_size=28 +margin=10 +message_duration=5 +# gif dither mode, 0-5 for bayer w/ bayer_scale 0-5, 6 for paletteuse default (sierra2_4a) +gif_dither=2 +# Force square pixels on output video +# Some players like recent Firefox versions display videos with non-square pixels with wrong aspect ratio +force_square_pixels=no diff --git a/docs/static/tutorials/mpv/portable_config/scripts/autoload.lua b/docs/static/tutorials/mpv/portable_config/scripts/autoload.lua new file mode 100644 index 000000000..4003cbcd3 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/autoload.lua @@ -0,0 +1,328 @@ +-- This script automatically loads playlist entries before and after the +-- the currently played file. It does so by scanning the directory a file is +-- located in when starting playback. It sorts the directory entries +-- alphabetically, and adds entries before and after the current file to +-- the internal playlist. (It stops if it would add an already existing +-- playlist entry at the same position - this makes it "stable".) +-- Add at most 5000 * 2 files when starting a file (before + after). + +--[[ +To configure this script use file autoload.conf in directory script-opts (the "script-opts" +directory must be in the mpv configuration directory, typically ~/.config/mpv/). + +Example configuration would be: + +disabled=no +images=no +videos=yes +audio=yes +additional_image_exts=list,of,ext +additional_video_exts=list,of,ext +additional_audio_exts=list,of,ext +ignore_hidden=yes +same_type=yes +directory_mode=recursive + +--]] + +MAXENTRIES = 5000 +MAXDIRSTACK = 20 + +local msg = require 'mp.msg' +local options = require 'mp.options' +local utils = require 'mp.utils' + +o = { + disabled = false, + images = true, + videos = true, + audio = true, + additional_image_exts = "", + additional_video_exts = "", + additional_audio_exts = "", + ignore_hidden = true, + same_type = false, + directory_mode = "auto" +} +options.read_options(o, nil, function(list) + split_option_exts(list.additional_video_exts, list.additional_audio_exts, list.additional_image_exts) + if list.videos or list.additional_video_exts or + list.audio or list.additional_audio_exts or + list.images or list.additional_image_exts then + create_extensions() + end + if list.directory_mode then + validate_directory_mode() + end +end) + +function Set (t) + local set = {} + for _, v in pairs(t) do set[v] = true end + return set +end + +function SetUnion (a,b) + for k in pairs(b) do a[k] = true end + return a +end + +function Split (s) + local set = {} + for v in string.gmatch(s, '([^,]+)') do set[v] = true end + return set +end + +EXTENSIONS_VIDEO = Set { + '3g2', '3gp', 'avi', 'flv', 'm2ts', 'm4v', 'mj2', 'mkv', 'mov', + 'mp4', 'mpeg', 'mpg', 'ogv', 'rmvb', 'webm', 'wmv', 'y4m' +} + +EXTENSIONS_AUDIO = Set { + 'aiff', 'ape', 'au', 'flac', 'm4a', 'mka', 'mp3', 'oga', 'ogg', + 'ogm', 'opus', 'wav', 'wma' +} + +EXTENSIONS_IMAGES = Set { + 'avif', 'bmp', 'gif', 'j2k', 'jp2', 'jpeg', 'jpg', 'jxl', 'png', + 'svg', 'tga', 'tif', 'tiff', 'webp' +} + +function split_option_exts(video, audio, image) + if video then o.additional_video_exts = Split(o.additional_video_exts) end + if audio then o.additional_audio_exts = Split(o.additional_audio_exts) end + if image then o.additional_image_exts = Split(o.additional_image_exts) end +end +split_option_exts(true, true, true) + +function create_extensions() + EXTENSIONS = {} + if o.videos then SetUnion(SetUnion(EXTENSIONS, EXTENSIONS_VIDEO), o.additional_video_exts) end + if o.audio then SetUnion(SetUnion(EXTENSIONS, EXTENSIONS_AUDIO), o.additional_audio_exts) end + if o.images then SetUnion(SetUnion(EXTENSIONS, EXTENSIONS_IMAGES), o.additional_image_exts) end +end +create_extensions() + +function validate_directory_mode() + if o.directory_mode ~= "recursive" and o.directory_mode ~= "lazy" and o.directory_mode ~= "ignore" then + o.directory_mode = nil + end +end +validate_directory_mode() + +function add_files(files) + local oldcount = mp.get_property_number("playlist-count", 1) + for i = 1, #files do + mp.commandv("loadfile", files[i][1], "append") + mp.commandv("playlist-move", oldcount + i - 1, files[i][2]) + end +end + +function get_extension(path) + match = string.match(path, "%.([^%.]+)$" ) + if match == nil then + return "nomatch" + else + return match + end +end + +table.filter = function(t, iter) + for i = #t, 1, -1 do + if not iter(t[i]) then + table.remove(t, i) + end + end +end + +table.append = function(t1, t2) + local t1_size = #t1 + for i = 1, #t2 do + t1[t1_size + i] = t2[i] + end +end + +-- alphanum sorting for humans in Lua +-- http://notebook.kulchenko.com/algorithms/alphanumeric-natural-sorting-for-humans-in-lua + +function alphanumsort(filenames) + local function padnum(n, d) + return #d > 0 and ("%03d%s%.12f"):format(#n, n, tonumber(d) / (10 ^ #d)) + or ("%03d%s"):format(#n, n) + end + + local tuples = {} + for i, f in ipairs(filenames) do + tuples[i] = {f:lower():gsub("0*(%d+)%.?(%d*)", padnum), f} + end + table.sort(tuples, function(a, b) + return a[1] == b[1] and #b[2] < #a[2] or a[1] < b[1] + end) + for i, tuple in ipairs(tuples) do filenames[i] = tuple[2] end + return filenames +end + +local autoloaded = nil +local added_entries = {} +local autoloaded_dir = nil + +function scan_dir(path, current_file, dir_mode, separator, dir_depth, total_files, extensions) + if dir_depth == MAXDIRSTACK then + return + end + msg.trace("scanning: " .. path) + local files = utils.readdir(path, "files") or {} + local dirs = dir_mode ~= "ignore" and utils.readdir(path, "dirs") or {} + local prefix = path == "." and "" or path + table.filter(files, function (v) + -- The current file could be a hidden file, ignoring it doesn't load other + -- files from the current directory. + if (o.ignore_hidden and not (prefix .. v == current_file) and string.match(v, "^%.")) then + return false + end + local ext = get_extension(v) + if ext == nil then + return false + end + return extensions[string.lower(ext)] + end) + table.filter(dirs, function(d) + return not ((o.ignore_hidden and string.match(d, "^%."))) + end) + alphanumsort(files) + alphanumsort(dirs) + + for i, file in ipairs(files) do + files[i] = prefix .. file + end + + table.append(total_files, files) + if dir_mode == "recursive" then + for _, dir in ipairs(dirs) do + scan_dir(prefix .. dir .. separator, current_file, dir_mode, + separator, dir_depth + 1, total_files, extensions) + end + else + for i, dir in ipairs(dirs) do + dirs[i] = prefix .. dir + end + table.append(total_files, dirs) + end +end + +function find_and_add_entries() + local path = mp.get_property("path", "") + local dir, filename = utils.split_path(path) + msg.trace(("dir: %s, filename: %s"):format(dir, filename)) + if o.disabled then + msg.debug("stopping: autoload disabled") + return + elseif #dir == 0 then + msg.debug("stopping: not a local path") + return + end + + local pl_count = mp.get_property_number("playlist-count", 1) + this_ext = get_extension(filename) + -- check if this is a manually made playlist + if (pl_count > 1 and autoloaded == nil) or + (pl_count == 1 and EXTENSIONS[string.lower(this_ext)] == nil) then + msg.debug("stopping: manually made playlist") + return + else + if pl_count == 1 then + autoloaded = true + autoloaded_dir = dir + added_entries = {} + end + end + + local extensions = {} + if o.same_type then + if EXTENSIONS_VIDEO[string.lower(this_ext)] ~= nil then + extensions = EXTENSIONS_VIDEO + elseif EXTENSIONS_AUDIO[string.lower(this_ext)] ~= nil then + extensions = EXTENSIONS_AUDIO + else + extensions = EXTENSIONS_IMAGES + end + else + extensions = EXTENSIONS + end + + local pl = mp.get_property_native("playlist", {}) + local pl_current = mp.get_property_number("playlist-pos-1", 1) + msg.trace(("playlist-pos-1: %s, playlist: %s"):format(pl_current, + utils.to_string(pl))) + + local files = {} + do + local dir_mode = o.directory_mode or mp.get_property("directory-mode", "lazy") + local separator = mp.get_property_native("platform") == "windows" and "\\" or "/" + scan_dir(autoloaded_dir, path, dir_mode, separator, 0, files, extensions) + end + + if next(files) == nil then + msg.debug("no other files or directories in directory") + return + end + + -- Find the current pl entry (dir+"/"+filename) in the sorted dir list + local current + for i = 1, #files do + if files[i] == path then + current = i + break + end + end + if current == nil then + return + end + msg.trace("current file position in files: "..current) + + -- treat already existing playlist entries, independent of how they got added + -- as if they got added by autoload + for _, entry in ipairs(pl) do + added_entries[entry.filename] = true + end + + local append = {[-1] = {}, [1] = {}} + for direction = -1, 1, 2 do -- 2 iterations, with direction = -1 and +1 + for i = 1, MAXENTRIES do + local pos = current + i * direction + local file = files[pos] + if file == nil or file[1] == "." then + break + end + + -- skip files that are/were already in the playlist + if not added_entries[file] then + if direction == -1 then + msg.verbose("Prepending " .. file) + table.insert(append[-1], 1, {file, pl_current + i * direction + 1}) + else + msg.verbose("Adding " .. file) + if pl_count > 1 then + table.insert(append[1], {file, pl_current + i * direction - 1}) + else + mp.commandv("loadfile", file, "append") + end + end + end + added_entries[file] = true + end + if pl_count == 1 and direction == -1 and #append[-1] > 0 then + for i = 1, #append[-1] do + mp.commandv("loadfile", append[-1][i][1], "append") + end + mp.commandv("playlist-move", 0, current) + end + end + + if pl_count > 1 then + add_files(append[1]) + add_files(append[-1]) + end +end + +mp.register_event("start-file", find_and_add_entries) diff --git a/docs/static/tutorials/mpv/portable_config/scripts/osc.lua b/docs/static/tutorials/mpv/portable_config/scripts/osc.lua new file mode 100644 index 000000000..4d2ee8d1e --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/osc.lua @@ -0,0 +1,3074 @@ +mp.set_property("osc", "no") +local assdraw = require 'mp.assdraw' +local msg = require 'mp.msg' +local opt = require 'mp.options' +local utils = require 'mp.utils' + +-- +-- Parameters +-- +-- default user option values +-- do not touch, change them in osc.conf +local user_opts = { + showwindowed = true, -- show OSC when windowed? + showfullscreen = true, -- show OSC when fullscreen? + idlescreen = true, -- show mpv logo on idle + scalewindowed = 1, -- scaling of the controller when windowed + scalefullscreen = 1, -- scaling of the controller when fullscreen + scaleforcedwindow = 2, -- scaling when rendered on a forced window + vidscale = true, -- scale the controller with the video? + valign = 0.8, -- vertical alignment, -1 (top) to 1 (bottom) + halign = 0, -- horizontal alignment, -1 (left) to 1 (right) + barmargin = 0, -- vertical margin of top/bottombar + boxalpha = 80, -- alpha of the background box, + -- 0 (opaque) to 255 (fully transparent) + hidetimeout = 500, -- duration in ms until the OSC hides if no + -- mouse movement. enforced non-negative for the + -- user, but internally negative is "always-on". + fadeduration = 200, -- duration of fade out in ms, 0 = no fade + deadzonesize = 0.5, -- size of deadzone + minmousemove = 0, -- minimum amount of pixels the mouse has to + -- move between ticks to make the OSC show up + iamaprogrammer = false, -- use native mpv values and disable OSC + -- internal track list management (and some + -- functions that depend on it) + layout = "bottombar", + seekbarstyle = "bar", -- bar, diamond or knob + seekbarhandlesize = 0.6, -- size ratio of the diamond and knob handle + seekrangestyle = "inverted",-- bar, line, slider, inverted or none + seekrangeseparate = true, -- whether the seekranges overlay on the bar-style seekbar + seekrangealpha = 200, -- transparency of seekranges + seekbarkeyframes = true, -- use keyframes when dragging the seekbar + title = "${media-title}", -- string compatible with property-expansion + -- to be shown as OSC title + tooltipborder = 1, -- border of tooltip in bottom/topbar + timetotal = false, -- display total time instead of remaining time? + timems = false, -- display timecodes with milliseconds? + tcspace = 100, -- timecode spacing (compensate font size estimation) + visibility = "auto", -- only used at init to set visibility_mode(...) + boxmaxchars = 80, -- title crop threshold for box layout + boxvideo = false, -- apply osc_param.video_margins to video + windowcontrols = "auto", -- whether to show window controls + windowcontrols_alignment = "right", -- which side to show window controls on + greenandgrumpy = false, -- disable santa hat + livemarkers = true, -- update seekbar chapter markers on duration change + chapters_osd = true, -- whether to show chapters OSD on next/prev + playlist_osd = true, -- whether to show playlist OSD on next/prev + chapter_fmt = "Chapter: %s", -- chapter print format for seekbar-hover. "no" to disable + unicodeminus = false, -- whether to use the Unicode minus sign character +} + +-- read options from config and command-line +opt.read_options(user_opts, "osc", function(list) update_options(list) end) + +local osc_param = { -- calculated by osc_init() + playresy = 0, -- canvas size Y + playresx = 0, -- canvas size X + display_aspect = 1, + unscaled_y = 0, + areas = {}, + video_margins = { + l = 0, r = 0, t = 0, b = 0, -- left/right/top/bottom + }, +} + +local osc_styles = { + bigButtons = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs50\\fnmpv-osd-symbols}", + smallButtonsL = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs19\\fnmpv-osd-symbols}", + smallButtonsLlabel = "{\\fscx105\\fscy105\\fn" .. mp.get_property("options/osd-font") .. "}", + smallButtonsR = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs30\\fnmpv-osd-symbols}", + topButtons = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs12\\fnmpv-osd-symbols}", + + elementDown = "{\\1c&H999999}", + timecodes = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs20}", + vidtitle = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs12\\q2}", + box = "{\\rDefault\\blur0\\bord1\\1c&H000000\\3c&HFFFFFF}", + + topButtonsBar = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs18\\fnmpv-osd-symbols}", + smallButtonsBar = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs28\\fnmpv-osd-symbols}", + timecodesBar = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs27}", + timePosBar = "{\\blur0\\bord".. user_opts.tooltipborder .."\\1c&HFFFFFF\\3c&H000000\\fs30}", + vidtitleBar = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs18\\q2}", + + wcButtons = "{\\1c&HFFFFFF\\fs24\\fnmpv-osd-symbols}", + wcTitle = "{\\1c&HFFFFFF\\fs24\\q2}", + wcBar = "{\\1c&H000000}", +} + +local function create_osd_overlay(...) + if not mp.create_osd_overlay then return end + return mp.create_osd_overlay(...) +end + +-- internal states, do not touch +local state = { + showtime, -- time of last invocation (last mouse move) + osc_visible = false, + anistart, -- time when the animation started + anitype, -- current type of animation + animation, -- current animation alpha + mouse_down_counter = 0, -- used for softrepeat + active_element = nil, -- nil = none, 0 = background, 1+ = see elements[] + active_event_source = nil, -- the "button" that issued the current event + rightTC_trem = not user_opts.timetotal, -- if the right timecode should display total or remaining time + tc_ms = user_opts.timems, -- Should the timecodes display their time with milliseconds + mp_screen_sizeX, mp_screen_sizeY, -- last screen-resolution, to detect resolution changes to issue reINITs + initREQ = false, -- is a re-init request pending? + marginsREQ = false, -- is a margins update pending? + last_mouseX, last_mouseY, -- last mouse position, to detect significant mouse movement + mouse_in_window = false, + message_text, + message_hide_timer, + fullscreen = false, + tick_timer = nil, + tick_last_time = 0, -- when the last tick() was run + hide_timer = nil, + cache_state = nil, + idle = false, + enabled = true, + input_enabled = true, + showhide_enabled = false, + windowcontrols_buttons = false, + dmx_cache = 0, + using_video_margins = false, + border = true, + maximized = false, + osd = create_osd_overlay("ass-events"), + chapter_list = {}, -- sorted by time +} + +local thumbfast = { + width = 0, + height = 0, + disabled = false +} + +local window_control_box_width = 80 +local tick_delay = 0.03 + +local is_december = os.date("*t").month == 12 + +-- +-- Helperfunctions +-- + +function kill_animation() + state.anistart = nil + state.animation = nil + state.anitype = nil +end + +function set_osd(res_x, res_y, text) + if state.osd.res_x == res_x and + state.osd.res_y == res_y and + state.osd.data == text then + return + end + state.osd.res_x = res_x + state.osd.res_y = res_y + state.osd.data = text + state.osd.z = 1000 + state.osd:update() +end + +set_osd = state.osd and set_osd or mp.set_osd_ass + +local margins_opts = { + {"l", "video-margin-ratio-left"}, + {"r", "video-margin-ratio-right"}, + {"t", "video-margin-ratio-top"}, + {"b", "video-margin-ratio-bottom"}, +} + +-- scale factor for translating between real and virtual ASS coordinates +function get_virt_scale_factor() + local w, h = mp.get_osd_size() + if w <= 0 or h <= 0 then + return 0, 0 + end + return osc_param.playresx / w, osc_param.playresy / h +end + +-- return mouse position in virtual ASS coordinates (playresx/y) +function get_virt_mouse_pos() + if state.mouse_in_window then + local sx, sy = get_virt_scale_factor() + local x, y = mp.get_mouse_pos() + return x * sx, y * sy + else + return -1, -1 + end +end + +function set_virt_mouse_area(x0, y0, x1, y1, name) + local sx, sy = get_virt_scale_factor() + mp.set_mouse_area(x0 / sx, y0 / sy, x1 / sx, y1 / sy, name) +end + +function scale_value(x0, x1, y0, y1, val) + local m = (y1 - y0) / (x1 - x0) + local b = y0 - (m * x0) + return (m * val) + b +end + +-- returns hitbox spanning coordinates (top left, bottom right corner) +-- according to alignment +function get_hitbox_coords(x, y, an, w, h) + + local alignments = { + [1] = function () return x, y-h, x+w, y end, + [2] = function () return x-(w/2), y-h, x+(w/2), y end, + [3] = function () return x-w, y-h, x, y end, + + [4] = function () return x, y-(h/2), x+w, y+(h/2) end, + [5] = function () return x-(w/2), y-(h/2), x+(w/2), y+(h/2) end, + [6] = function () return x-w, y-(h/2), x, y+(h/2) end, + + [7] = function () return x, y, x+w, y+h end, + [8] = function () return x-(w/2), y, x+(w/2), y+h end, + [9] = function () return x-w, y, x, y+h end, + } + + return alignments[an]() +end + +function get_hitbox_coords_geo(geometry) + return get_hitbox_coords(geometry.x, geometry.y, geometry.an, + geometry.w, geometry.h) +end + +function get_element_hitbox(element) + return element.hitbox.x1, element.hitbox.y1, + element.hitbox.x2, element.hitbox.y2 +end + +function mouse_hit(element) + return mouse_hit_coords(get_element_hitbox(element)) +end + +function mouse_hit_coords(bX1, bY1, bX2, bY2) + local mX, mY = get_virt_mouse_pos() + return (mX >= bX1 and mX <= bX2 and mY >= bY1 and mY <= bY2) +end + +function limit_range(min, max, val) + if val > max then + val = max + elseif val < min then + val = min + end + return val +end + +-- translate value into element coordinates +function get_slider_ele_pos_for(element, val) + + local ele_pos = scale_value( + element.slider.min.value, element.slider.max.value, + element.slider.min.ele_pos, element.slider.max.ele_pos, + val) + + return limit_range( + element.slider.min.ele_pos, element.slider.max.ele_pos, + ele_pos) +end + +-- translates global (mouse) coordinates to value +function get_slider_value_at(element, glob_pos) + + local val = scale_value( + element.slider.min.glob_pos, element.slider.max.glob_pos, + element.slider.min.value, element.slider.max.value, + glob_pos) + + return limit_range( + element.slider.min.value, element.slider.max.value, + val) +end + +-- get value at current mouse position +function get_slider_value(element) + return get_slider_value_at(element, get_virt_mouse_pos()) +end + +function countone(val) + if not (user_opts.iamaprogrammer) then + val = val + 1 + end + return val +end + +-- align: -1 .. +1 +-- frame: size of the containing area +-- obj: size of the object that should be positioned inside the area +-- margin: min. distance from object to frame (as long as -1 <= align <= +1) +function get_align(align, frame, obj, margin) + return (frame / 2) + (((frame / 2) - margin - (obj / 2)) * align) +end + +-- multiplies two alpha values, formular can probably be improved +function mult_alpha(alphaA, alphaB) + return 255 - (((1-(alphaA/255)) * (1-(alphaB/255))) * 255) +end + +function add_area(name, x1, y1, x2, y2) + -- create area if needed + if (osc_param.areas[name] == nil) then + osc_param.areas[name] = {} + end + table.insert(osc_param.areas[name], {x1=x1, y1=y1, x2=x2, y2=y2}) +end + +function ass_append_alpha(ass, alpha, modifier) + local ar = {} + + for ai, av in pairs(alpha) do + av = mult_alpha(av, modifier) + if state.animation then + av = mult_alpha(av, state.animation) + end + ar[ai] = av + end + + ass:append(string.format("{\\1a&H%X&\\2a&H%X&\\3a&H%X&\\4a&H%X&}", + ar[1], ar[2], ar[3], ar[4])) +end + +local c = 0.551915024494 -- circle approximation + +function hexagon_cw(ass, x0, y0, x1, y1, r1, r2) + if r2 == nil then + r2 = r1 + end + ass:move_to(x0 + r1, y0) + if x0 ~= x1 then + ass:line_to(x1 - r2, y0) + end + ass:line_to(x1, y0 + r2) + if x0 ~= x1 then + ass:line_to(x1 - r2, y1) + end + ass:line_to(x0 + r1, y1) + ass:line_to(x0, y0 + r1) +end + +function hexagon_ccw(ass, x0, y0, x1, y1, r1, r2) + if r2 == nil then + r2 = r1 + end + ass:move_to(x0 + r1, y0) + ass:line_to(x0, y0 + r1) + ass:line_to(x0 + r1, y1) + if x0 ~= x1 then + ass:line_to(x1 - r2, y1) + end + ass:line_to(x1, y0 + r2) + if x0 ~= x1 then + ass:line_to(x1 - r2, y0) + end +end + +function round_rect_cw(ass, x0, y0, x1, y1, r1, r2) + if r2 == nil then + r2 = r1 + end + local c1 = c * r1 -- circle approximation + local c2 = c * r2 -- circle approximation + ass:move_to(x0 + r1, y0) + ass:line_to(x1 - r2, y0) -- top line + if r2 > 0 then + ass:bezier_curve(x1 - r2 + c2, y0, x1, y0 + r2 - c2, x1, y0 + r2) -- top right corner + end + ass:line_to(x1, y1 - r2) -- right line + if r2 > 0 then + ass:bezier_curve(x1, y1 - r2 + c2, x1 - r2 + c2, y1, x1 - r2, y1) -- bottom right corner + end + ass:line_to(x0 + r1, y1) -- bottom line + if r1 > 0 then + ass:bezier_curve(x0 + r1 - c1, y1, x0, y1 - r1 + c1, x0, y1 - r1) -- bottom left corner + end + ass:line_to(x0, y0 + r1) -- left line + if r1 > 0 then + ass:bezier_curve(x0, y0 + r1 - c1, x0 + r1 - c1, y0, x0 + r1, y0) -- top left corner + end +end + +function round_rect_ccw(ass, x0, y0, x1, y1, r1, r2) + if r2 == nil then + r2 = r1 + end + local c1 = c * r1 -- circle approximation + local c2 = c * r2 -- circle approximation + ass:move_to(x0 + r1, y0) + if r1 > 0 then + ass:bezier_curve(x0 + r1 - c1, y0, x0, y0 + r1 - c1, x0, y0 + r1) -- top left corner + end + ass:line_to(x0, y1 - r1) -- left line + if r1 > 0 then + ass:bezier_curve(x0, y1 - r1 + c1, x0 + r1 - c1, y1, x0 + r1, y1) -- bottom left corner + end + ass:line_to(x1 - r2, y1) -- bottom line + if r2 > 0 then + ass:bezier_curve(x1 - r2 + c2, y1, x1, y1 - r2 + c2, x1, y1 - r2) -- bottom right corner + end + ass:line_to(x1, y0 + r2) -- right line + if r2 > 0 then + ass:bezier_curve(x1, y0 + r2 - c2, x1 - r2 + c2, y0, x1 - r2, y0) -- top right corner + end +end + +function ass_draw_rr_h_cw(ass, x0, y0, x1, y1, r1, hexagon, r2) + if hexagon then + hexagon_cw(ass, x0, y0, x1, y1, r1, r2) + else + round_rect_cw(ass, x0, y0, x1, y1, r1, r2) + end +end + +function ass_draw_rr_h_ccw(ass, x0, y0, x1, y1, r1, hexagon, r2) + if hexagon then + hexagon_ccw(ass, x0, y0, x1, y1, r1, r2) + else + round_rect_ccw(ass, x0, y0, x1, y1, r1, r2) + end +end + + +-- +-- Tracklist Management +-- + +local nicetypes = {video = "Video", audio = "Audio", sub = "Subtitle"} + +-- updates the OSC internal playlists, should be run each time the track-layout changes +function update_tracklist() + local tracktable = mp.get_property_native("track-list", {}) + + -- by osc_id + tracks_osc = {} + tracks_osc.video, tracks_osc.audio, tracks_osc.sub = {}, {}, {} + -- by mpv_id + tracks_mpv = {} + tracks_mpv.video, tracks_mpv.audio, tracks_mpv.sub = {}, {}, {} + for n = 1, #tracktable do + if not (tracktable[n].type == "unknown") then + local type = tracktable[n].type + local mpv_id = tonumber(tracktable[n].id) + + -- by osc_id + table.insert(tracks_osc[type], tracktable[n]) + + -- by mpv_id + tracks_mpv[type][mpv_id] = tracktable[n] + tracks_mpv[type][mpv_id].osc_id = #tracks_osc[type] + end + end +end + +-- return a nice list of tracks of the given type (video, audio, sub) +function get_tracklist(type) + local msg = "Available " .. nicetypes[type] .. " Tracks: " + if not tracks_osc or #tracks_osc[type] == 0 then + msg = msg .. "none" + else + for n = 1, #tracks_osc[type] do + local track = tracks_osc[type][n] + local lang, title, selected = "unknown", "", "○" + if not(track.lang == nil) then lang = track.lang end + if not(track.title == nil) then title = track.title end + if (track.id == tonumber(mp.get_property(type))) then + selected = "●" + end + msg = msg.."\n"..selected.." "..n..": ["..lang.."] "..title + end + end + return msg +end + +-- relatively change the track of given by tracks + --(+1 -> next, -1 -> previous) +function set_track(type, next) + local current_track_mpv, current_track_osc + if (mp.get_property(type) == "no") then + current_track_osc = 0 + else + current_track_mpv = tonumber(mp.get_property(type)) + current_track_osc = tracks_mpv[type][current_track_mpv].osc_id + end + local new_track_osc = (current_track_osc + next) % (#tracks_osc[type] + 1) + local new_track_mpv + if new_track_osc == 0 then + new_track_mpv = "no" + else + new_track_mpv = tracks_osc[type][new_track_osc].id + end + + mp.commandv("set", type, new_track_mpv) + + if (new_track_osc == 0) then + show_message(nicetypes[type] .. " Track: none") + else + show_message(nicetypes[type] .. " Track: " + .. new_track_osc .. "/" .. #tracks_osc[type] + .. " [".. (tracks_osc[type][new_track_osc].lang or "unknown") .."] " + .. (tracks_osc[type][new_track_osc].title or "")) + end +end + +-- get the currently selected track of , OSC-style counted +function get_track(type) + local track = mp.get_property(type) + if track ~= "no" and track ~= nil then + local tr = tracks_mpv[type][tonumber(track)] + if tr then + return tr.osc_id + end + end + return 0 +end + +-- WindowControl helpers +function window_controls_enabled() + val = user_opts.windowcontrols + if val == "auto" then + return not state.border + else + return val ~= "no" + end +end + +function window_controls_alignment() + return user_opts.windowcontrols_alignment +end + +-- +-- Element Management +-- + +local elements = {} + +function prepare_elements() + + -- remove elements without layout or invisible + local elements2 = {} + for n, element in pairs(elements) do + if not (element.layout == nil) and (element.visible) then + table.insert(elements2, element) + end + end + elements = elements2 + + function elem_compare (a, b) + return a.layout.layer < b.layout.layer + end + + table.sort(elements, elem_compare) + + + for _,element in pairs(elements) do + + local elem_geo = element.layout.geometry + + -- Calculate the hitbox + local bX1, bY1, bX2, bY2 = get_hitbox_coords_geo(elem_geo) + element.hitbox = {x1 = bX1, y1 = bY1, x2 = bX2, y2 = bY2} + + local style_ass = assdraw.ass_new() + + -- prepare static elements + style_ass:append("{}") -- hack to troll new_event into inserting a \n + style_ass:new_event() + style_ass:pos(elem_geo.x, elem_geo.y) + style_ass:an(elem_geo.an) + style_ass:append(element.layout.style) + + element.style_ass = style_ass + + local static_ass = assdraw.ass_new() + + + if (element.type == "box") then + --draw box + static_ass:draw_start() + ass_draw_rr_h_cw(static_ass, 0, 0, elem_geo.w, elem_geo.h, + element.layout.box.radius, element.layout.box.hexagon) + static_ass:draw_stop() + + elseif (element.type == "slider") then + --draw static slider parts + + local r1 = 0 + local r2 = 0 + local slider_lo = element.layout.slider + -- offset between element outline and drag-area + local foV = slider_lo.border + slider_lo.gap + + -- calculate positions of min and max points + if (slider_lo.stype ~= "bar") then + r1 = elem_geo.h / 2 + element.slider.min.ele_pos = elem_geo.h / 2 + element.slider.max.ele_pos = elem_geo.w - (elem_geo.h / 2) + if (slider_lo.stype == "diamond") then + r2 = (elem_geo.h - 2 * slider_lo.border) / 2 + elseif (slider_lo.stype == "knob") then + r2 = r1 + end + else + element.slider.min.ele_pos = + slider_lo.border + slider_lo.gap + element.slider.max.ele_pos = + elem_geo.w - (slider_lo.border + slider_lo.gap) + end + + element.slider.min.glob_pos = + element.hitbox.x1 + element.slider.min.ele_pos + element.slider.max.glob_pos = + element.hitbox.x1 + element.slider.max.ele_pos + + -- -- -- + + static_ass:draw_start() + + -- the box + ass_draw_rr_h_cw(static_ass, 0, 0, elem_geo.w, elem_geo.h, r1, slider_lo.stype == "diamond") + + -- the "hole" + ass_draw_rr_h_ccw(static_ass, slider_lo.border, slider_lo.border, + elem_geo.w - slider_lo.border, elem_geo.h - slider_lo.border, + r2, slider_lo.stype == "diamond") + + -- marker nibbles + if not (element.slider.markerF == nil) and (slider_lo.gap > 0) then + local markers = element.slider.markerF() + for _,marker in pairs(markers) do + if (marker > element.slider.min.value) and + (marker < element.slider.max.value) then + + local s = get_slider_ele_pos_for(element, marker) + + if (slider_lo.gap > 1) then -- draw triangles + + local a = slider_lo.gap / 0.5 --0.866 + + --top + if (slider_lo.nibbles_top) then + static_ass:move_to(s - (a/2), slider_lo.border) + static_ass:line_to(s + (a/2), slider_lo.border) + static_ass:line_to(s, foV) + end + + --bottom + if (slider_lo.nibbles_bottom) then + static_ass:move_to(s - (a/2), + elem_geo.h - slider_lo.border) + static_ass:line_to(s, + elem_geo.h - foV) + static_ass:line_to(s + (a/2), + elem_geo.h - slider_lo.border) + end + + else -- draw 2x1px nibbles + + --top + if (slider_lo.nibbles_top) then + static_ass:rect_cw(s - 1, slider_lo.border, + s + 1, slider_lo.border + slider_lo.gap); + end + + --bottom + if (slider_lo.nibbles_bottom) then + static_ass:rect_cw(s - 1, + elem_geo.h -slider_lo.border -slider_lo.gap, + s + 1, elem_geo.h - slider_lo.border); + end + end + end + end + end + end + + element.static_ass = static_ass + + + -- if the element is supposed to be disabled, + -- style it accordingly and kill the eventresponders + if not (element.enabled) then + element.layout.alpha[1] = 136 + element.eventresponder = nil + end + end +end + + +-- +-- Element Rendering +-- + +-- returns nil or a chapter element from the native property chapter-list +function get_chapter(possec) + local cl = state.chapter_list -- sorted, get latest before possec, if any + + for n=#cl,1,-1 do + if possec >= cl[n].time then + return cl[n] + end + end +end + +function render_elements(master_ass) + + -- when the slider is dragged or hovered and we have a target chapter name + -- then we use it instead of the normal title. we calculate it before the + -- render iterations because the title may be rendered before the slider. + state.forced_title = nil + local se, ae = state.slider_element, elements[state.active_element] + if user_opts.chapter_fmt ~= "no" and se and (ae == se or (not ae and mouse_hit(se))) then + local dur = mp.get_property_number("duration", 0) + if dur > 0 then + local possec = get_slider_value(se) * dur / 100 -- of mouse pos + local ch = get_chapter(possec) + if ch and ch.title and ch.title ~= "" then + state.forced_title = string.format(user_opts.chapter_fmt, ch.title) + end + end + end + + for n=1, #elements do + local element = elements[n] + + local style_ass = assdraw.ass_new() + style_ass:merge(element.style_ass) + ass_append_alpha(style_ass, element.layout.alpha, 0) + + if element.eventresponder and (state.active_element == n) then + + -- run render event functions + if not (element.eventresponder.render == nil) then + element.eventresponder.render(element) + end + + if mouse_hit(element) then + -- mouse down styling + if (element.styledown) then + style_ass:append(osc_styles.elementDown) + end + + if (element.softrepeat) and (state.mouse_down_counter >= 15 + and state.mouse_down_counter % 5 == 0) then + + element.eventresponder[state.active_event_source.."_down"](element) + end + state.mouse_down_counter = state.mouse_down_counter + 1 + end + + end + + local elem_ass = assdraw.ass_new() + + elem_ass:merge(style_ass) + + if not (element.type == "button") then + elem_ass:merge(element.static_ass) + end + + if (element.type == "slider") then + + local slider_lo = element.layout.slider + local elem_geo = element.layout.geometry + local s_min = element.slider.min.value + local s_max = element.slider.max.value + + -- draw pos marker + local foH, xp + local pos = element.slider.posF() + local foV = slider_lo.border + slider_lo.gap + local innerH = elem_geo.h - (2 * foV) + local seekRanges = element.slider.seekRangesF() + local seekRangeLineHeight = innerH / 5 + + if slider_lo.stype ~= "bar" then + foH = elem_geo.h / 2 + else + foH = slider_lo.border + slider_lo.gap + end + + if pos then + xp = get_slider_ele_pos_for(element, pos) + + if slider_lo.stype ~= "bar" then + local r = (user_opts.seekbarhandlesize * innerH) / 2 + ass_draw_rr_h_cw(elem_ass, xp - r, foH - r, + xp + r, foH + r, + r, slider_lo.stype == "diamond") + else + local h = 0 + if seekRanges and user_opts.seekrangeseparate and slider_lo.rtype ~= "inverted" then + h = seekRangeLineHeight + end + elem_ass:rect_cw(foH, foV, xp, elem_geo.h - foV - h) + + if seekRanges and not user_opts.seekrangeseparate and slider_lo.rtype ~= "inverted" then + -- Punch holes for the seekRanges to be drawn later + for _,range in pairs(seekRanges) do + if range["start"] < pos then + local pstart = get_slider_ele_pos_for(element, range["start"]) + local pend = xp + + if pos > range["end"] then + pend = get_slider_ele_pos_for(element, range["end"]) + end + elem_ass:rect_ccw(pstart, elem_geo.h - foV - seekRangeLineHeight, pend, elem_geo.h - foV) + end + end + end + end + + if slider_lo.rtype == "slider" then + ass_draw_rr_h_cw(elem_ass, foH - innerH / 6, foH - innerH / 6, + xp, foH + innerH / 6, + innerH / 6, slider_lo.stype == "diamond", 0) + ass_draw_rr_h_cw(elem_ass, xp, foH - innerH / 15, + elem_geo.w - foH + innerH / 15, foH + innerH / 15, + 0, slider_lo.stype == "diamond", innerH / 15) + for _,range in pairs(seekRanges or {}) do + local pstart = get_slider_ele_pos_for(element, range["start"]) + local pend = get_slider_ele_pos_for(element, range["end"]) + ass_draw_rr_h_ccw(elem_ass, pstart, foH - innerH / 21, + pend, foH + innerH / 21, + innerH / 21, slider_lo.stype == "diamond") + end + end + end + + if seekRanges then + if slider_lo.rtype ~= "inverted" then + elem_ass:draw_stop() + elem_ass:merge(element.style_ass) + ass_append_alpha(elem_ass, element.layout.alpha, user_opts.seekrangealpha) + elem_ass:merge(element.static_ass) + end + + for _,range in pairs(seekRanges) do + local pstart = get_slider_ele_pos_for(element, range["start"]) + local pend = get_slider_ele_pos_for(element, range["end"]) + + if slider_lo.rtype == "slider" then + ass_draw_rr_h_cw(elem_ass, pstart, foH - innerH / 21, + pend, foH + innerH / 21, + innerH / 21, slider_lo.stype == "diamond") + elseif slider_lo.rtype == "line" then + if slider_lo.stype == "bar" then + elem_ass:rect_cw(pstart, elem_geo.h - foV - seekRangeLineHeight, pend, elem_geo.h - foV) + else + ass_draw_rr_h_cw(elem_ass, pstart - innerH / 8, foH - innerH / 8, + pend + innerH / 8, foH + innerH / 8, + innerH / 8, slider_lo.stype == "diamond") + end + elseif slider_lo.rtype == "bar" then + if slider_lo.stype ~= "bar" then + ass_draw_rr_h_cw(elem_ass, pstart - innerH / 2, foV, + pend + innerH / 2, foV + innerH, + innerH / 2, slider_lo.stype == "diamond") + elseif range["end"] >= (pos or 0) then + elem_ass:rect_cw(pstart, foV, pend, elem_geo.h - foV) + else + elem_ass:rect_cw(pstart, elem_geo.h - foV - seekRangeLineHeight, pend, elem_geo.h - foV) + end + elseif slider_lo.rtype == "inverted" then + if slider_lo.stype ~= "bar" then + ass_draw_rr_h_ccw(elem_ass, pstart, (elem_geo.h / 2) - 1, pend, + (elem_geo.h / 2) + 1, + 1, slider_lo.stype == "diamond") + else + elem_ass:rect_ccw(pstart, (elem_geo.h / 2) - 1, pend, (elem_geo.h / 2) + 1) + end + end + end + end + + elem_ass:draw_stop() + + -- add tooltip + if not (element.slider.tooltipF == nil) then + + if mouse_hit(element) then + local sliderpos = get_slider_value(element) + local tooltiplabel = element.slider.tooltipF(sliderpos) + + local an = slider_lo.tooltip_an + + local ty + + if (an == 2) then + ty = element.hitbox.y1 - slider_lo.border + else + ty = element.hitbox.y1 + elem_geo.h/2 + end + + local tx = get_virt_mouse_pos() + local thumb_tx = tx + if (slider_lo.adjust_tooltip) then + if (an == 2) then + if (sliderpos < (s_min + 3)) then + an = an - 1 + elseif (sliderpos > (s_max - 3)) then + an = an + 1 + end + elseif (sliderpos > (s_max-s_min)/2) then + an = an + 1 + tx = tx - 5 + else + an = an - 1 + tx = tx + 10 + end + end + + -- tooltip label + elem_ass:new_event() + elem_ass:pos(tx, ty) + elem_ass:an(an) + elem_ass:append(slider_lo.tooltip_style) + ass_append_alpha(elem_ass, slider_lo.alpha, 0) + elem_ass:append(tooltiplabel) + + -- thumbnail + if not thumbfast.disabled and thumbfast.width ~= 0 and thumbfast.height ~= 0 then + local osd_w = mp.get_property_number("osd-width") + if osd_w then + local r_w, r_h = get_virt_scale_factor() + + local tooltip_font_size = (user_opts.layout == "box" or user_opts.layout == "slimbox") and 2 or 12 + local thumb_ty = user_opts.layout ~= "topbar" and element.hitbox.y1 - 8 or element.hitbox.y2 + tooltip_font_size + 8 + + local thumb_pad = 2 + local thumb_margin_x = 20 / r_w + local thumb_margin_y = (4 + user_opts.tooltipborder) / r_h + thumb_pad + local thumb_x = math.min(osd_w - thumbfast.width - thumb_margin_x, math.max(thumb_margin_x, thumb_tx / r_w - thumbfast.width / 2)) + local thumb_y = user_opts.layout ~= "topbar" and thumb_ty / r_h - thumbfast.height - tooltip_font_size / r_h - thumb_margin_y or thumb_ty / r_h + thumb_margin_y + + thumb_x = math.floor(thumb_x + 0.5) + thumb_y = math.floor(thumb_y + 0.5) + + elem_ass:new_event() + elem_ass:pos(thumb_x * r_w, thumb_y * r_h) + elem_ass:an(7) + elem_ass:append(osc_styles.timePosBar) + elem_ass:append("{\\1a&H20&}") + elem_ass:draw_start() + elem_ass:rect_cw(-thumb_pad * r_w, -thumb_pad * r_h, (thumbfast.width + thumb_pad) * r_w, (thumbfast.height + thumb_pad) * r_h) + elem_ass:draw_stop() + + mp.commandv("script-message-to", "thumbfast", "thumb", + mp.get_property_number("duration", 0) * (sliderpos / 100), + thumb_x, + thumb_y + ) + end + end + else + if thumbfast.width ~= 0 and thumbfast.height ~= 0 then + mp.commandv("script-message-to", "thumbfast", "clear") + end + end + end + + elseif (element.type == "button") then + + local buttontext + if type(element.content) == "function" then + buttontext = element.content() -- function objects + elseif not (element.content == nil) then + buttontext = element.content -- text objects + end + + local maxchars = element.layout.button.maxchars + if not (maxchars == nil) and (#buttontext > maxchars) then + local max_ratio = 1.25 -- up to 25% more chars while shrinking + local limit = math.max(0, math.floor(maxchars * max_ratio) - 3) + if (#buttontext > limit) then + while (#buttontext > limit) do + buttontext = buttontext:gsub(".[\128-\191]*$", "") + end + buttontext = buttontext .. "..." + end + local _, nchars2 = buttontext:gsub(".[\128-\191]*", "") + local stretch = (maxchars/#buttontext)*100 + buttontext = string.format("{\\fscx%f}", + (maxchars/#buttontext)*100) .. buttontext + end + + elem_ass:append(buttontext) + end + + master_ass:merge(elem_ass) + end +end + +-- +-- Message display +-- + +-- pos is 1 based +function limited_list(prop, pos) + local proplist = mp.get_property_native(prop, {}) + local count = #proplist + if count == 0 then + return count, proplist + end + + local fs = tonumber(mp.get_property('options/osd-font-size')) + local max = math.ceil(osc_param.unscaled_y*0.75 / fs) + if max % 2 == 0 then + max = max - 1 + end + local delta = math.ceil(max / 2) - 1 + local begi = math.max(math.min(pos - delta, count - max + 1), 1) + local endi = math.min(begi + max - 1, count) + + local reslist = {} + for i=begi, endi do + local item = proplist[i] + item.current = (i == pos) and true or nil + table.insert(reslist, item) + end + return count, reslist +end + +function get_playlist() + local pos = mp.get_property_number('playlist-pos', 0) + 1 + local count, limlist = limited_list('playlist', pos) + if count == 0 then + return 'Empty playlist.' + end + + local message = string.format('Playlist [%d/%d]:\n', pos, count) + for i, v in ipairs(limlist) do + local title = v.title + local _, filename = utils.split_path(v.filename) + if title == nil then + title = filename + end + message = string.format('%s %s %s\n', message, + (v.current and '●' or '○'), title) + end + return message +end + +function get_chapterlist() + local pos = mp.get_property_number('chapter', 0) + 1 + local count, limlist = limited_list('chapter-list', pos) + if count == 0 then + return 'No chapters.' + end + + local message = string.format('Chapters [%d/%d]:\n', pos, count) + for i, v in ipairs(limlist) do + local time = mp.format_time(v.time) + local title = v.title + if title == nil then + title = string.format('Chapter %02d', i) + end + message = string.format('%s[%s] %s %s\n', message, time, + (v.current and '●' or '○'), title) + end + return message +end + +function show_message(text, duration) + + --print("text: "..text.." duration: " .. duration) + if duration == nil then + duration = tonumber(mp.get_property("options/osd-duration")) / 1000 + elseif not type(duration) == "number" then + print("duration: " .. duration) + end + + -- cut the text short, otherwise the following functions + -- may slow down massively on huge input + text = string.sub(text, 0, 4000) + + -- replace actual linebreaks with ASS linebreaks + text = string.gsub(text, "\n", "\\N") + + state.message_text = text + + if not state.message_hide_timer then + state.message_hide_timer = mp.add_timeout(0, request_tick) + end + state.message_hide_timer:kill() + state.message_hide_timer.timeout = duration + state.message_hide_timer:resume() + request_tick() +end + +function render_message(ass) + if state.message_hide_timer and state.message_hide_timer:is_enabled() and + state.message_text + then + local _, lines = string.gsub(state.message_text, "\\N", "") + + local fontsize = tonumber(mp.get_property("options/osd-font-size")) + local outline = tonumber(mp.get_property("options/osd-border-size")) + local maxlines = math.ceil(osc_param.unscaled_y*0.75 / fontsize) + local counterscale = osc_param.playresy / osc_param.unscaled_y + + fontsize = fontsize * counterscale / math.max(0.65 + math.min(lines/maxlines, 1), 1) + outline = outline * counterscale / math.max(0.75 + math.min(lines/maxlines, 1)/2, 1) + + local style = "{\\bord" .. outline .. "\\fs" .. fontsize .. "}" + + + ass:new_event() + ass:append(style .. state.message_text) + else + state.message_text = nil + end +end + +-- +-- Initialisation and Layout +-- + +function new_element(name, type) + elements[name] = {} + elements[name].type = type + + -- add default stuff + elements[name].eventresponder = {} + elements[name].visible = true + elements[name].enabled = true + elements[name].softrepeat = false + elements[name].styledown = (type == "button") + elements[name].state = {} + + if (type == "slider") then + elements[name].slider = {min = {value = 0}, max = {value = 100}} + end + + + return elements[name] +end + +function add_layout(name) + if not (elements[name] == nil) then + -- new layout + elements[name].layout = {} + + -- set layout defaults + elements[name].layout.layer = 50 + elements[name].layout.alpha = {[1] = 0, [2] = 255, [3] = 255, [4] = 255} + + if (elements[name].type == "button") then + elements[name].layout.button = { + maxchars = nil, + } + elseif (elements[name].type == "slider") then + -- slider defaults + elements[name].layout.slider = { + border = 1, + gap = 1, + nibbles_top = true, + nibbles_bottom = true, + stype = "slider", + adjust_tooltip = true, + tooltip_style = "", + tooltip_an = 2, + alpha = {[1] = 0, [2] = 255, [3] = 88, [4] = 255}, + } + elseif (elements[name].type == "box") then + elements[name].layout.box = {radius = 0, hexagon = false} + end + + return elements[name].layout + else + msg.error("Can't add_layout to element \""..name.."\", doesn't exist.") + end +end + +-- Window Controls +function window_controls(topbar) + local wc_geo = { + x = 0, + y = 30 + user_opts.barmargin, + an = 1, + w = osc_param.playresx, + h = 30, + } + + local alignment = window_controls_alignment() + local controlbox_w = window_control_box_width + local titlebox_w = wc_geo.w - controlbox_w + + -- Default alignment is "right" + local controlbox_left = wc_geo.w - controlbox_w + local titlebox_left = wc_geo.x + local titlebox_right = wc_geo.w - controlbox_w + + if alignment == "left" then + controlbox_left = wc_geo.x + titlebox_left = wc_geo.x + controlbox_w + titlebox_right = wc_geo.w + end + + add_area("window-controls", + get_hitbox_coords(controlbox_left, wc_geo.y, wc_geo.an, + controlbox_w, wc_geo.h)) + + local lo + + -- Background Bar + new_element("wcbar", "box") + lo = add_layout("wcbar") + lo.geometry = wc_geo + lo.layer = 10 + lo.style = osc_styles.wcBar + lo.alpha[1] = user_opts.boxalpha + + local button_y = wc_geo.y - (wc_geo.h / 2) + local first_geo = + {x = controlbox_left + 5, y = button_y, an = 4, w = 25, h = 25} + local second_geo = + {x = controlbox_left + 30, y = button_y, an = 4, w = 25, h = 25} + local third_geo = + {x = controlbox_left + 55, y = button_y, an = 4, w = 25, h = 25} + + -- Window control buttons use symbols in the custom mpv osd font + -- because the official unicode codepoints are sufficiently + -- exotic that a system might lack an installed font with them, + -- and libass will complain that they are not present in the + -- default font, even if another font with them is available. + + -- Close: 🗙 + ne = new_element("close", "button") + ne.content = "\238\132\149" + ne.eventresponder["mbtn_left_up"] = + function () mp.commandv("quit") end + lo = add_layout("close") + lo.geometry = alignment == "left" and first_geo or third_geo + lo.style = osc_styles.wcButtons + + -- Minimize: 🗕 + ne = new_element("minimize", "button") + ne.content = "\238\132\146" + ne.eventresponder["mbtn_left_up"] = + function () mp.commandv("cycle", "window-minimized") end + lo = add_layout("minimize") + lo.geometry = alignment == "left" and second_geo or first_geo + lo.style = osc_styles.wcButtons + + -- Maximize: 🗖 /🗗 + ne = new_element("maximize", "button") + if state.maximized or state.fullscreen then + ne.content = "\238\132\148" + else + ne.content = "\238\132\147" + end + ne.eventresponder["mbtn_left_up"] = + function () + if state.fullscreen then + mp.commandv("cycle", "fullscreen") + else + mp.commandv("cycle", "window-maximized") + end + end + lo = add_layout("maximize") + lo.geometry = alignment == "left" and third_geo or second_geo + lo.style = osc_styles.wcButtons + + -- deadzone below window controls + local sh_area_y0, sh_area_y1 + sh_area_y0 = user_opts.barmargin + sh_area_y1 = (wc_geo.y + (wc_geo.h / 2)) + + get_align(1 - (2 * user_opts.deadzonesize), + osc_param.playresy - (wc_geo.y + (wc_geo.h / 2)), 0, 0) + add_area("showhide_wc", wc_geo.x, sh_area_y0, wc_geo.w, sh_area_y1) + + if topbar then + -- The title is already there as part of the top bar + return + else + -- Apply boxvideo margins to the control bar + osc_param.video_margins.t = wc_geo.h / osc_param.playresy + end + + -- Window Title + ne = new_element("wctitle", "button") + ne.content = function () + local title = mp.command_native({"expand-text", user_opts.title}) + -- escape ASS, and strip newlines and trailing slashes + title = title:gsub("\\n", " "):gsub("\\$", ""):gsub("{","\\{") + return not (title == "") and title or "mpv" + end + local left_pad = 5 + local right_pad = 10 + lo = add_layout("wctitle") + lo.geometry = + { x = titlebox_left + left_pad, y = wc_geo.y - 3, an = 1, + w = titlebox_w, h = wc_geo.h } + lo.style = string.format("%s{\\clip(%f,%f,%f,%f)}", + osc_styles.wcTitle, + titlebox_left + left_pad, wc_geo.y - wc_geo.h, + titlebox_right - right_pad , wc_geo.y + wc_geo.h) + + add_area("window-controls-title", + titlebox_left, 0, titlebox_right, wc_geo.h) +end + +-- +-- Layouts +-- + +local layouts = {} + +-- Classic box layout +layouts["box"] = function () + + local osc_geo = { + w = 550, -- width + h = 138, -- height + r = 10, -- corner-radius + p = 15, -- padding + } + + -- make sure the OSC actually fits into the video + if (osc_param.playresx < (osc_geo.w + (2 * osc_geo.p))) then + osc_param.playresy = (osc_geo.w+(2*osc_geo.p))/osc_param.display_aspect + osc_param.playresx = osc_param.playresy * osc_param.display_aspect + end + + -- position of the controller according to video aspect and valignment + local posX = math.floor(get_align(user_opts.halign, osc_param.playresx, + osc_geo.w, 0)) + local posY = math.floor(get_align(user_opts.valign, osc_param.playresy, + osc_geo.h, 0)) + + -- position offset for contents aligned at the borders of the box + local pos_offsetX = (osc_geo.w - (2*osc_geo.p)) / 2 + local pos_offsetY = (osc_geo.h - (2*osc_geo.p)) / 2 + + osc_param.areas = {} -- delete areas + + -- area for active mouse input + add_area("input", get_hitbox_coords(posX, posY, 5, osc_geo.w, osc_geo.h)) + + -- area for show/hide + local sh_area_y0, sh_area_y1 + if user_opts.valign > 0 then + -- deadzone above OSC + sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize), + posY - (osc_geo.h / 2), 0, 0) + sh_area_y1 = osc_param.playresy + else + -- deadzone below OSC + sh_area_y0 = 0 + sh_area_y1 = (posY + (osc_geo.h / 2)) + + get_align(1 - (2*user_opts.deadzonesize), + osc_param.playresy - (posY + (osc_geo.h / 2)), 0, 0) + end + add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1) + + -- fetch values + local osc_w, osc_h, osc_r, osc_p = + osc_geo.w, osc_geo.h, osc_geo.r, osc_geo.p + + local lo + + -- + -- Background box + -- + + new_element("bgbox", "box") + lo = add_layout("bgbox") + + lo.geometry = {x = posX, y = posY, an = 5, w = osc_w, h = osc_h} + lo.layer = 10 + lo.style = osc_styles.box + lo.alpha[1] = user_opts.boxalpha + lo.alpha[3] = user_opts.boxalpha + lo.box.radius = osc_r + + -- + -- Title row + -- + + local titlerowY = posY - pos_offsetY - 10 + + lo = add_layout("title") + lo.geometry = {x = posX, y = titlerowY, an = 8, w = 496, h = 12} + lo.style = osc_styles.vidtitle + lo.button.maxchars = user_opts.boxmaxchars + + lo = add_layout("pl_prev") + lo.geometry = + {x = (posX - pos_offsetX), y = titlerowY, an = 7, w = 12, h = 12} + lo.style = osc_styles.topButtons + + lo = add_layout("pl_next") + lo.geometry = + {x = (posX + pos_offsetX), y = titlerowY, an = 9, w = 12, h = 12} + lo.style = osc_styles.topButtons + + -- + -- Big buttons + -- + + local bigbtnrowY = posY - pos_offsetY + 35 + local bigbtndist = 60 + + lo = add_layout("playpause") + lo.geometry = + {x = posX, y = bigbtnrowY, an = 5, w = 40, h = 40} + lo.style = osc_styles.bigButtons + + lo = add_layout("skipback") + lo.geometry = + {x = posX - bigbtndist, y = bigbtnrowY, an = 5, w = 40, h = 40} + lo.style = osc_styles.bigButtons + + lo = add_layout("skipfrwd") + lo.geometry = + {x = posX + bigbtndist, y = bigbtnrowY, an = 5, w = 40, h = 40} + lo.style = osc_styles.bigButtons + + lo = add_layout("ch_prev") + lo.geometry = + {x = posX - (bigbtndist * 2), y = bigbtnrowY, an = 5, w = 40, h = 40} + lo.style = osc_styles.bigButtons + + lo = add_layout("ch_next") + lo.geometry = + {x = posX + (bigbtndist * 2), y = bigbtnrowY, an = 5, w = 40, h = 40} + lo.style = osc_styles.bigButtons + + lo = add_layout("cy_audio") + lo.geometry = + {x = posX - pos_offsetX, y = bigbtnrowY, an = 1, w = 70, h = 18} + lo.style = osc_styles.smallButtonsL + + lo = add_layout("cy_sub") + lo.geometry = + {x = posX - pos_offsetX, y = bigbtnrowY, an = 7, w = 70, h = 18} + lo.style = osc_styles.smallButtonsL + + lo = add_layout("tog_fs") + lo.geometry = + {x = posX+pos_offsetX - 25, y = bigbtnrowY, an = 4, w = 25, h = 25} + lo.style = osc_styles.smallButtonsR + + lo = add_layout("volume") + lo.geometry = + {x = posX+pos_offsetX - (25 * 2) - osc_geo.p, + y = bigbtnrowY, an = 4, w = 25, h = 25} + lo.style = osc_styles.smallButtonsR + + -- + -- Seekbar + -- + + lo = add_layout("seekbar") + lo.geometry = + {x = posX, y = posY+pos_offsetY-22, an = 2, w = pos_offsetX*2, h = 15} + lo.style = osc_styles.timecodes + lo.slider.tooltip_style = osc_styles.vidtitle + lo.slider.stype = user_opts["seekbarstyle"] + lo.slider.rtype = user_opts["seekrangestyle"] + + -- + -- Timecodes + Cache + -- + + local bottomrowY = posY + pos_offsetY - 5 + + lo = add_layout("tc_left") + lo.geometry = + {x = posX - pos_offsetX, y = bottomrowY, an = 4, w = 110, h = 18} + lo.style = osc_styles.timecodes + + lo = add_layout("tc_right") + lo.geometry = + {x = posX + pos_offsetX, y = bottomrowY, an = 6, w = 110, h = 18} + lo.style = osc_styles.timecodes + + lo = add_layout("cache") + lo.geometry = + {x = posX, y = bottomrowY, an = 5, w = 110, h = 18} + lo.style = osc_styles.timecodes + +end + +-- slim box layout +layouts["slimbox"] = function () + + local osc_geo = { + w = 660, -- width + h = 70, -- height + r = 10, -- corner-radius + } + + -- make sure the OSC actually fits into the video + if (osc_param.playresx < (osc_geo.w)) then + osc_param.playresy = (osc_geo.w)/osc_param.display_aspect + osc_param.playresx = osc_param.playresy * osc_param.display_aspect + end + + -- position of the controller according to video aspect and valignment + local posX = math.floor(get_align(user_opts.halign, osc_param.playresx, + osc_geo.w, 0)) + local posY = math.floor(get_align(user_opts.valign, osc_param.playresy, + osc_geo.h, 0)) + + osc_param.areas = {} -- delete areas + + -- area for active mouse input + add_area("input", get_hitbox_coords(posX, posY, 5, osc_geo.w, osc_geo.h)) + + -- area for show/hide + local sh_area_y0, sh_area_y1 + if user_opts.valign > 0 then + -- deadzone above OSC + sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize), + posY - (osc_geo.h / 2), 0, 0) + sh_area_y1 = osc_param.playresy + else + -- deadzone below OSC + sh_area_y0 = 0 + sh_area_y1 = (posY + (osc_geo.h / 2)) + + get_align(1 - (2*user_opts.deadzonesize), + osc_param.playresy - (posY + (osc_geo.h / 2)), 0, 0) + end + add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1) + + local lo + + local tc_w, ele_h, inner_w = 100, 20, osc_geo.w - 100 + + -- styles + local styles = { + box = "{\\rDefault\\blur0\\bord1\\1c&H000000\\3c&HFFFFFF}", + timecodes = "{\\1c&HFFFFFF\\3c&H000000\\fs20\\bord2\\blur1}", + tooltip = "{\\1c&HFFFFFF\\3c&H000000\\fs12\\bord1\\blur0.5}", + } + + + new_element("bgbox", "box") + lo = add_layout("bgbox") + + lo.geometry = {x = posX, y = posY - 1, an = 2, w = inner_w, h = ele_h} + lo.layer = 10 + lo.style = osc_styles.box + lo.alpha[1] = user_opts.boxalpha + lo.alpha[3] = 0 + if not (user_opts["seekbarstyle"] == "bar") then + lo.box.radius = osc_geo.r + lo.box.hexagon = user_opts["seekbarstyle"] == "diamond" + end + + + lo = add_layout("seekbar") + lo.geometry = + {x = posX, y = posY - 1, an = 2, w = inner_w, h = ele_h} + lo.style = osc_styles.timecodes + lo.slider.border = 0 + lo.slider.gap = 1.5 + lo.slider.tooltip_style = styles.tooltip + lo.slider.stype = user_opts["seekbarstyle"] + lo.slider.rtype = user_opts["seekrangestyle"] + lo.slider.adjust_tooltip = false + + -- + -- Timecodes + -- + + lo = add_layout("tc_left") + lo.geometry = + {x = posX - (inner_w/2) + osc_geo.r, y = posY + 1, + an = 7, w = tc_w, h = ele_h} + lo.style = styles.timecodes + lo.alpha[3] = user_opts.boxalpha + + lo = add_layout("tc_right") + lo.geometry = + {x = posX + (inner_w/2) - osc_geo.r, y = posY + 1, + an = 9, w = tc_w, h = ele_h} + lo.style = styles.timecodes + lo.alpha[3] = user_opts.boxalpha + + -- Cache + + lo = add_layout("cache") + lo.geometry = + {x = posX, y = posY + 1, + an = 8, w = tc_w, h = ele_h} + lo.style = styles.timecodes + lo.alpha[3] = user_opts.boxalpha + + +end + +function bar_layout(direction) + local osc_geo = { + x = -2, + y, + an = (direction < 0) and 7 or 1, + w, + h = 56, + } + + local padX = 9 + local padY = 3 + local buttonW = 27 + local tcW = (state.tc_ms) and 170 or 110 + if user_opts.tcspace >= 50 and user_opts.tcspace <= 200 then + -- adjust our hardcoded font size estimation + tcW = tcW * user_opts.tcspace / 100 + end + + local tsW = 90 + local minW = (buttonW + padX)*5 + (tcW + padX)*4 + (tsW + padX)*2 + + -- Special topbar handling when window controls are present + local padwc_l + local padwc_r + if direction < 0 or not window_controls_enabled() then + padwc_l = 0 + padwc_r = 0 + elseif window_controls_alignment() == "left" then + padwc_l = window_control_box_width + padwc_r = 0 + else + padwc_l = 0 + padwc_r = window_control_box_width + end + + if ((osc_param.display_aspect > 0) and (osc_param.playresx < minW)) then + osc_param.playresy = minW / osc_param.display_aspect + osc_param.playresx = osc_param.playresy * osc_param.display_aspect + end + + osc_geo.y = direction * (54 + user_opts.barmargin) + osc_geo.w = osc_param.playresx + 4 + if direction < 0 then + osc_geo.y = osc_geo.y + osc_param.playresy + end + + local line1 = osc_geo.y - direction * (9 + padY) + local line2 = osc_geo.y - direction * (36 + padY) + + osc_param.areas = {} + + add_area("input", get_hitbox_coords(osc_geo.x, osc_geo.y, osc_geo.an, + osc_geo.w, osc_geo.h)) + + local sh_area_y0, sh_area_y1 + if direction > 0 then + -- deadzone below OSC + sh_area_y0 = user_opts.barmargin + sh_area_y1 = (osc_geo.y + (osc_geo.h / 2)) + + get_align(1 - (2*user_opts.deadzonesize), + osc_param.playresy - (osc_geo.y + (osc_geo.h / 2)), 0, 0) + else + -- deadzone above OSC + sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize), + osc_geo.y - (osc_geo.h / 2), 0, 0) + sh_area_y1 = osc_param.playresy - user_opts.barmargin + end + add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1) + + local lo, geo + + -- Background bar + new_element("bgbox", "box") + lo = add_layout("bgbox") + + lo.geometry = osc_geo + lo.layer = 10 + lo.style = osc_styles.box + lo.alpha[1] = user_opts.boxalpha + + + -- Playlist prev/next + geo = { x = osc_geo.x + padX, y = line1, + an = 4, w = 18, h = 18 - padY } + lo = add_layout("pl_prev") + lo.geometry = geo + lo.style = osc_styles.topButtonsBar + + geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("pl_next") + lo.geometry = geo + lo.style = osc_styles.topButtonsBar + + local t_l = geo.x + geo.w + padX + + -- Cache + geo = { x = osc_geo.x + osc_geo.w - padX, y = geo.y, + an = 6, w = 150, h = geo.h } + lo = add_layout("cache") + lo.geometry = geo + lo.style = osc_styles.vidtitleBar + + local t_r = geo.x - geo.w - padX*2 + + -- Title + geo = { x = t_l, y = geo.y, an = 4, + w = t_r - t_l, h = geo.h } + lo = add_layout("title") + lo.geometry = geo + lo.style = string.format("%s{\\clip(%f,%f,%f,%f)}", + osc_styles.vidtitleBar, + geo.x, geo.y-geo.h, geo.w, geo.y+geo.h) + + + -- Playback control buttons + geo = { x = osc_geo.x + padX + padwc_l, y = line2, an = 4, + w = buttonW, h = 36 - padY*2} + lo = add_layout("playpause") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("ch_prev") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("ch_next") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + -- Left timecode + geo = { x = geo.x + geo.w + padX + tcW, y = geo.y, an = 6, + w = tcW, h = geo.h } + lo = add_layout("tc_left") + lo.geometry = geo + lo.style = osc_styles.timecodesBar + + local sb_l = geo.x + padX + + -- Fullscreen button + geo = { x = osc_geo.x + osc_geo.w - buttonW - padX - padwc_r, y = geo.y, an = 4, + w = buttonW, h = geo.h } + lo = add_layout("tog_fs") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + -- Volume + geo = { x = geo.x - geo.w - padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("volume") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + -- Track selection buttons + geo = { x = geo.x - tsW - padX, y = geo.y, an = geo.an, w = tsW, h = geo.h } + lo = add_layout("cy_sub") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + geo = { x = geo.x - geo.w - padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("cy_audio") + lo.geometry = geo + lo.style = osc_styles.smallButtonsBar + + + -- Right timecode + geo = { x = geo.x - padX - tcW - 10, y = geo.y, an = geo.an, + w = tcW, h = geo.h } + lo = add_layout("tc_right") + lo.geometry = geo + lo.style = osc_styles.timecodesBar + + local sb_r = geo.x - padX + + + -- Seekbar + geo = { x = sb_l, y = geo.y, an = geo.an, + w = math.max(0, sb_r - sb_l), h = geo.h } + new_element("bgbar1", "box") + lo = add_layout("bgbar1") + + lo.geometry = geo + lo.layer = 15 + lo.style = osc_styles.timecodesBar + lo.alpha[1] = + math.min(255, user_opts.boxalpha + (255 - user_opts.boxalpha)*0.8) + if not (user_opts["seekbarstyle"] == "bar") then + lo.box.radius = geo.h / 2 + lo.box.hexagon = user_opts["seekbarstyle"] == "diamond" + end + + lo = add_layout("seekbar") + lo.geometry = geo + lo.style = osc_styles.timecodesBar + lo.slider.border = 0 + lo.slider.gap = 2 + lo.slider.tooltip_style = osc_styles.timePosBar + lo.slider.tooltip_an = 5 + lo.slider.stype = user_opts["seekbarstyle"] + lo.slider.rtype = user_opts["seekrangestyle"] + + if direction < 0 then + osc_param.video_margins.b = osc_geo.h / osc_param.playresy + else + osc_param.video_margins.t = osc_geo.h / osc_param.playresy + end +end + +layouts["bottombar"] = function() + bar_layout(-1) +end + +layouts["topbar"] = function() + bar_layout(1) +end + +-- Validate string type user options +function validate_user_opts() + if layouts[user_opts.layout] == nil then + msg.warn("Invalid setting \""..user_opts.layout.."\" for layout") + user_opts.layout = "bottombar" + end + + if user_opts.seekbarstyle ~= "bar" and + user_opts.seekbarstyle ~= "diamond" and + user_opts.seekbarstyle ~= "knob" then + msg.warn("Invalid setting \"" .. user_opts.seekbarstyle + .. "\" for seekbarstyle") + user_opts.seekbarstyle = "bar" + end + + if user_opts.seekrangestyle ~= "bar" and + user_opts.seekrangestyle ~= "line" and + user_opts.seekrangestyle ~= "slider" and + user_opts.seekrangestyle ~= "inverted" and + user_opts.seekrangestyle ~= "none" then + msg.warn("Invalid setting \"" .. user_opts.seekrangestyle + .. "\" for seekrangestyle") + user_opts.seekrangestyle = "inverted" + end + + if user_opts.seekrangestyle == "slider" and + user_opts.seekbarstyle == "bar" then + msg.warn("Using \"slider\" seekrangestyle together with \"bar\" seekbarstyle is not supported") + user_opts.seekrangestyle = "inverted" + end + + if user_opts.windowcontrols ~= "auto" and + user_opts.windowcontrols ~= "yes" and + user_opts.windowcontrols ~= "no" then + msg.warn("windowcontrols cannot be \"" .. + user_opts.windowcontrols .. "\". Ignoring.") + user_opts.windowcontrols = "auto" + end + if user_opts.windowcontrols_alignment ~= "right" and + user_opts.windowcontrols_alignment ~= "left" then + msg.warn("windowcontrols_alignment cannot be \"" .. + user_opts.windowcontrols_alignment .. "\". Ignoring.") + user_opts.windowcontrols_alignment = "right" + end +end + +function update_options(list) + validate_user_opts() + request_tick() + visibility_mode(user_opts.visibility, true) + update_duration_watch() + request_init() +end + +local UNICODE_MINUS = string.char(0xe2, 0x88, 0x92) -- UTF-8 for U+2212 MINUS SIGN + +-- OSC INIT +function osc_init() + msg.debug("osc_init") + + -- set canvas resolution according to display aspect and scaling setting + local baseResY = 720 + local display_w, display_h, display_aspect = mp.get_osd_size() + local scale = 1 + + if (mp.get_property("video") == "no") then -- dummy/forced window + scale = user_opts.scaleforcedwindow + elseif state.fullscreen then + scale = user_opts.scalefullscreen + else + scale = user_opts.scalewindowed + end + + if user_opts.vidscale then + osc_param.unscaled_y = baseResY + else + osc_param.unscaled_y = display_h + end + osc_param.playresy = osc_param.unscaled_y / scale + if (display_aspect > 0) then + osc_param.display_aspect = display_aspect + end + osc_param.playresx = osc_param.playresy * osc_param.display_aspect + + -- stop seeking with the slider to prevent skipping files + state.active_element = nil + + osc_param.video_margins = {l = 0, r = 0, t = 0, b = 0} + + elements = {} + + -- some often needed stuff + local pl_count = mp.get_property_number("playlist-count", 0) + local have_pl = (pl_count > 1) + local pl_pos = mp.get_property_number("playlist-pos", 0) + 1 + local have_ch = (mp.get_property_number("chapters", 0) > 0) + local loop = mp.get_property("loop-playlist", "no") + + local ne + + -- title + ne = new_element("title", "button") + + ne.content = function () + local title = state.forced_title or + mp.command_native({"expand-text", user_opts.title}) + -- escape ASS, and strip newlines and trailing slashes + title = title:gsub("\\n", " "):gsub("\\$", ""):gsub("{","\\{") + return not (title == "") and title or "mpv" + end + + ne.eventresponder["mbtn_left_up"] = function () + local title = mp.get_property_osd("media-title") + if (have_pl) then + title = string.format("[%d/%d] %s", countone(pl_pos - 1), + pl_count, title) + end + show_message(title) + end + + ne.eventresponder["mbtn_right_up"] = + function () show_message(mp.get_property_osd("filename")) end + + -- playlist buttons + + -- prev + ne = new_element("pl_prev", "button") + + ne.content = "\238\132\144" + ne.enabled = (pl_pos > 1) or (loop ~= "no") + ne.eventresponder["mbtn_left_up"] = + function () + mp.commandv("playlist-prev", "weak") + if user_opts.playlist_osd then + show_message(get_playlist(), 3) + end + end + ne.eventresponder["shift+mbtn_left_up"] = + function () show_message(get_playlist(), 3) end + ne.eventresponder["mbtn_right_up"] = + function () show_message(get_playlist(), 3) end + + --next + ne = new_element("pl_next", "button") + + ne.content = "\238\132\129" + ne.enabled = (have_pl and (pl_pos < pl_count)) or (loop ~= "no") + ne.eventresponder["mbtn_left_up"] = + function () + mp.commandv("playlist-next", "weak") + if user_opts.playlist_osd then + show_message(get_playlist(), 3) + end + end + ne.eventresponder["shift+mbtn_left_up"] = + function () show_message(get_playlist(), 3) end + ne.eventresponder["mbtn_right_up"] = + function () show_message(get_playlist(), 3) end + + + -- big buttons + + --playpause + ne = new_element("playpause", "button") + + ne.content = function () + if mp.get_property("pause") == "yes" then + return ("\238\132\129") + else + return ("\238\128\130") + end + end + ne.eventresponder["mbtn_left_up"] = + function () mp.commandv("cycle", "pause") end + + --skipback + ne = new_element("skipback", "button") + + ne.softrepeat = true + ne.content = "\238\128\132" + ne.eventresponder["mbtn_left_down"] = + function () mp.commandv("seek", -5, "relative", "keyframes") end + ne.eventresponder["shift+mbtn_left_down"] = + function () mp.commandv("frame-back-step") end + ne.eventresponder["mbtn_right_down"] = + function () mp.commandv("seek", -30, "relative", "keyframes") end + + --skipfrwd + ne = new_element("skipfrwd", "button") + + ne.softrepeat = true + ne.content = "\238\128\133" + ne.eventresponder["mbtn_left_down"] = + function () mp.commandv("seek", 10, "relative", "keyframes") end + ne.eventresponder["shift+mbtn_left_down"] = + function () mp.commandv("frame-step") end + ne.eventresponder["mbtn_right_down"] = + function () mp.commandv("seek", 60, "relative", "keyframes") end + + --ch_prev + ne = new_element("ch_prev", "button") + + ne.enabled = have_ch + ne.content = "\238\132\132" + ne.eventresponder["mbtn_left_up"] = + function () + mp.commandv("add", "chapter", -1) + if user_opts.chapters_osd then + show_message(get_chapterlist(), 3) + end + end + ne.eventresponder["shift+mbtn_left_up"] = + function () show_message(get_chapterlist(), 3) end + ne.eventresponder["mbtn_right_up"] = + function () show_message(get_chapterlist(), 3) end + + --ch_next + ne = new_element("ch_next", "button") + + ne.enabled = have_ch + ne.content = "\238\132\133" + ne.eventresponder["mbtn_left_up"] = + function () + mp.commandv("add", "chapter", 1) + if user_opts.chapters_osd then + show_message(get_chapterlist(), 3) + end + end + ne.eventresponder["shift+mbtn_left_up"] = + function () show_message(get_chapterlist(), 3) end + ne.eventresponder["mbtn_right_up"] = + function () show_message(get_chapterlist(), 3) end + + -- + update_tracklist() + + --cy_audio + ne = new_element("cy_audio", "button") + + ne.enabled = (#tracks_osc.audio > 0) + ne.content = function () + local aid = "–" + if not (get_track("audio") == 0) then + aid = get_track("audio") + end + return ("\238\132\134" .. osc_styles.smallButtonsLlabel + .. " " .. aid .. "/" .. #tracks_osc.audio) + end + ne.eventresponder["mbtn_left_up"] = + function () set_track("audio", 1) end + ne.eventresponder["mbtn_right_up"] = + function () set_track("audio", -1) end + ne.eventresponder["shift+mbtn_left_down"] = + function () show_message(get_tracklist("audio"), 2) end + + --cy_sub + ne = new_element("cy_sub", "button") + + ne.enabled = (#tracks_osc.sub > 0) + ne.content = function () + local sid = "–" + if not (get_track("sub") == 0) then + sid = get_track("sub") + end + return ("\238\132\135" .. osc_styles.smallButtonsLlabel + .. " " .. sid .. "/" .. #tracks_osc.sub) + end + ne.eventresponder["mbtn_left_up"] = + function () set_track("sub", 1) end + ne.eventresponder["mbtn_right_up"] = + function () set_track("sub", -1) end + ne.eventresponder["shift+mbtn_left_down"] = + function () show_message(get_tracklist("sub"), 2) end + + --tog_fs + ne = new_element("tog_fs", "button") + ne.content = function () + if (state.fullscreen) then + return ("\238\132\137") + else + return ("\238\132\136") + end + end + ne.eventresponder["mbtn_left_up"] = + function () mp.commandv("cycle", "fullscreen") end + + --seekbar + ne = new_element("seekbar", "slider") + + ne.enabled = not (mp.get_property("percent-pos") == nil) + state.slider_element = ne.enabled and ne or nil -- used for forced_title + ne.slider.markerF = function () + local duration = mp.get_property_number("duration", nil) + if not (duration == nil) then + local chapters = mp.get_property_native("chapter-list", {}) + local markers = {} + for n = 1, #chapters do + markers[n] = (chapters[n].time / duration * 100) + end + return markers + else + return {} + end + end + ne.slider.posF = + function () return mp.get_property_number("percent-pos", nil) end + ne.slider.tooltipF = function (pos) + local duration = mp.get_property_number("duration", nil) + if not ((duration == nil) or (pos == nil)) then + possec = duration * (pos / 100) + return mp.format_time(possec) + else + return "" + end + end + ne.slider.seekRangesF = function() + if user_opts.seekrangestyle == "none" then + return nil + end + local cache_state = state.cache_state + if not cache_state then + return nil + end + local duration = mp.get_property_number("duration", nil) + if (duration == nil) or duration <= 0 then + return nil + end + local ranges = cache_state["seekable-ranges"] + if #ranges == 0 then + return nil + end + local nranges = {} + for _, range in pairs(ranges) do + nranges[#nranges + 1] = { + ["start"] = 100 * range["start"] / duration, + ["end"] = 100 * range["end"] / duration, + } + end + return nranges + end + ne.eventresponder["mouse_move"] = --keyframe seeking when mouse is dragged + function (element) + -- mouse move events may pile up during seeking and may still get + -- sent when the user is done seeking, so we need to throw away + -- identical seeks + local seekto = get_slider_value(element) + if (element.state.lastseek == nil) or + (not (element.state.lastseek == seekto)) then + local flags = "absolute-percent" + if not user_opts.seekbarkeyframes then + flags = flags .. "+exact" + end + mp.commandv("seek", seekto, flags) + element.state.lastseek = seekto + end + + end + ne.eventresponder["mbtn_left_down"] = --exact seeks on single clicks + function (element) mp.commandv("seek", get_slider_value(element), + "absolute-percent", "exact") end + ne.eventresponder["reset"] = + function (element) element.state.lastseek = nil end + + + -- tc_left (current pos) + ne = new_element("tc_left", "button") + + ne.content = function () + if (state.tc_ms) then + return (mp.get_property_osd("playback-time/full")) + else + return (mp.get_property_osd("playback-time")) + end + end + ne.eventresponder["mbtn_left_up"] = function () + state.tc_ms = not state.tc_ms + request_init() + end + + -- tc_right (total/remaining time) + ne = new_element("tc_right", "button") + + ne.visible = (mp.get_property_number("duration", 0) > 0) + ne.content = function () + if (state.rightTC_trem) then + local minus = user_opts.unicodeminus and UNICODE_MINUS or "-" + if state.tc_ms then + return (minus..mp.get_property_osd("playtime-remaining/full")) + else + return (minus..mp.get_property_osd("playtime-remaining")) + end + else + if state.tc_ms then + return (mp.get_property_osd("duration/full")) + else + return (mp.get_property_osd("duration")) + end + end + end + ne.eventresponder["mbtn_left_up"] = + function () state.rightTC_trem = not state.rightTC_trem end + + -- cache + ne = new_element("cache", "button") + + ne.content = function () + local cache_state = state.cache_state + if not (cache_state and cache_state["seekable-ranges"] and + #cache_state["seekable-ranges"] > 0) then + -- probably not a network stream + return "" + end + local dmx_cache = cache_state and cache_state["cache-duration"] + local thresh = math.min(state.dmx_cache * 0.05, 5) -- 5% or 5s + if dmx_cache and math.abs(dmx_cache - state.dmx_cache) >= thresh then + state.dmx_cache = dmx_cache + else + dmx_cache = state.dmx_cache + end + local min = math.floor(dmx_cache / 60) + local sec = math.floor(dmx_cache % 60) -- don't round e.g. 59.9 to 60 + return "Cache: " .. (min > 0 and + string.format("%sm%02.0fs", min, sec) or + string.format("%3.0fs", sec)) + end + + -- volume + ne = new_element("volume", "button") + + ne.content = function() + local volume = mp.get_property_number("volume", 0) + local mute = mp.get_property_native("mute") + local volicon = {"\238\132\139", "\238\132\140", + "\238\132\141", "\238\132\142"} + if volume == 0 or mute then + return "\238\132\138" + else + return volicon[math.min(4,math.ceil(volume / (100/3)))] + end + end + ne.eventresponder["mbtn_left_up"] = + function () mp.commandv("cycle", "mute") end + + ne.eventresponder["wheel_up_press"] = + function () mp.commandv("osd-auto", "add", "volume", 5) end + ne.eventresponder["wheel_down_press"] = + function () mp.commandv("osd-auto", "add", "volume", -5) end + + + -- load layout + layouts[user_opts.layout]() + + -- load window controls + if window_controls_enabled() then + window_controls(user_opts.layout == "topbar") + end + + --do something with the elements + prepare_elements() + + update_margins() +end + +function reset_margins() + if state.using_video_margins then + for _, opt in ipairs(margins_opts) do + mp.set_property_number(opt[2], 0.0) + end + state.using_video_margins = false + end +end + +function update_margins() + local margins = osc_param.video_margins + + -- Don't use margins if it's visible only temporarily. + if (not state.osc_visible) or (get_hidetimeout() >= 0) or + (state.fullscreen and not user_opts.showfullscreen) or + (not state.fullscreen and not user_opts.showwindowed) + then + margins = {l = 0, r = 0, t = 0, b = 0} + end + + if user_opts.boxvideo then + -- check whether any margin option has a non-default value + local margins_used = false + + if not state.using_video_margins then + for _, opt in ipairs(margins_opts) do + if mp.get_property_number(opt[2], 0.0) ~= 0.0 then + margins_used = true + end + end + end + + if not margins_used then + for _, opt in ipairs(margins_opts) do + local v = margins[opt[1]] + if (v ~= 0) or state.using_video_margins then + mp.set_property_number(opt[2], v) + state.using_video_margins = true + end + end + end + else + reset_margins() + end + + if mp.del_property then + mp.set_property_native("user-data/osc/margins", margins) + else + utils.shared_script_property_set("osc-margins", + string.format("%f,%f,%f,%f", margins.l, margins.r, margins.t, margins.b)) + end +end + +function shutdown() + reset_margins() + if mp.del_property then + mp.del_property("user-data/osc") + else + utils.shared_script_property_set("osc-margins", nil) + end +end + +-- +-- Other important stuff +-- + + +function show_osc() + -- show when disabled can happen (e.g. mouse_move) due to async/delayed unbinding + if not state.enabled then return end + + msg.trace("show_osc") + --remember last time of invocation (mouse move) + state.showtime = mp.get_time() + + osc_visible(true) + + if (user_opts.fadeduration > 0) then + state.anitype = nil + end +end + +function hide_osc() + msg.trace("hide_osc") + if thumbfast.width ~= 0 and thumbfast.height ~= 0 then + mp.commandv("script-message-to", "thumbfast", "clear") + end + if not state.enabled then + -- typically hide happens at render() from tick(), but now tick() is + -- no-op and won't render again to remove the osc, so do that manually. + state.osc_visible = false + render_wipe() + elseif (user_opts.fadeduration > 0) then + if not(state.osc_visible == false) then + state.anitype = "out" + request_tick() + end + else + osc_visible(false) + end +end + +function osc_visible(visible) + if state.osc_visible ~= visible then + state.osc_visible = visible + update_margins() + end + request_tick() +end + +function pause_state(name, enabled) + state.paused = enabled + request_tick() +end + +function cache_state(name, st) + state.cache_state = st + request_tick() +end + +-- Request that tick() is called (which typically re-renders the OSC). +-- The tick is then either executed immediately, or rate-limited if it was +-- called a small time ago. +function request_tick() + if state.tick_timer == nil then + state.tick_timer = mp.add_timeout(0, tick) + end + + if not state.tick_timer:is_enabled() then + local now = mp.get_time() + local timeout = tick_delay - (now - state.tick_last_time) + if timeout < 0 then + timeout = 0 + end + state.tick_timer.timeout = timeout + state.tick_timer:resume() + end +end + +function mouse_leave() + if get_hidetimeout() >= 0 then + hide_osc() + end + -- reset mouse position + state.last_mouseX, state.last_mouseY = nil, nil + state.mouse_in_window = false +end + +function request_init() + state.initREQ = true + request_tick() +end + +-- Like request_init(), but also request an immediate update +function request_init_resize() + request_init() + -- ensure immediate update + state.tick_timer:kill() + state.tick_timer.timeout = 0 + state.tick_timer:resume() +end + +function render_wipe() + msg.trace("render_wipe()") + if state.osd then + state.osd.data = "" -- allows set_osd to immediately update on enable + state.osd:remove() + else + set_osd(0, 0, "{}") + end +end + +function render() + msg.trace("rendering") + local current_screen_sizeX, current_screen_sizeY, aspect = mp.get_osd_size() + local mouseX, mouseY = get_virt_mouse_pos() + local now = mp.get_time() + + -- check if display changed, if so request reinit + if not (state.mp_screen_sizeX == current_screen_sizeX + and state.mp_screen_sizeY == current_screen_sizeY) then + + request_init_resize() + + state.mp_screen_sizeX = current_screen_sizeX + state.mp_screen_sizeY = current_screen_sizeY + end + + -- init management + if state.active_element then + -- mouse is held down on some element - keep ticking and ignore initReq + -- till it's released, or else the mouse-up (click) will misbehave or + -- get ignored. that's because osc_init() recreates the osc elements, + -- but mouse handling depends on the elements staying unmodified + -- between mouse-down and mouse-up (using the index active_element). + request_tick() + elseif state.initREQ then + osc_init() + state.initREQ = false + + -- store initial mouse position + if (state.last_mouseX == nil or state.last_mouseY == nil) + and not (mouseX == nil or mouseY == nil) then + + state.last_mouseX, state.last_mouseY = mouseX, mouseY + end + end + + + -- fade animation + if not(state.anitype == nil) then + + if (state.anistart == nil) then + state.anistart = now + end + + if (now < state.anistart + (user_opts.fadeduration/1000)) then + + if (state.anitype == "in") then --fade in + osc_visible(true) + state.animation = scale_value(state.anistart, + (state.anistart + (user_opts.fadeduration/1000)), + 255, 0, now) + elseif (state.anitype == "out") then --fade out + state.animation = scale_value(state.anistart, + (state.anistart + (user_opts.fadeduration/1000)), + 0, 255, now) + end + + else + if (state.anitype == "out") then + osc_visible(false) + end + kill_animation() + end + else + kill_animation() + end + + --mouse show/hide area + for k,cords in pairs(osc_param.areas["showhide"]) do + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "thumbfast-osc-showhide") + end + if osc_param.areas["showhide_wc"] then + for k,cords in pairs(osc_param.areas["showhide_wc"]) do + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "thumbfast-osc-showhide_wc") + end + else + set_virt_mouse_area(0, 0, 0, 0, "thumbfast-osc-showhide_wc") + end + do_enable_keybindings() + + --mouse input area + local mouse_over_osc = false + + for _,cords in ipairs(osc_param.areas["input"]) do + if state.osc_visible then -- activate only when OSC is actually visible + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "thumbfast-osc-input") + end + if state.osc_visible ~= state.input_enabled then + if state.osc_visible then + mp.enable_key_bindings("thumbfast-osc-input") + else + mp.disable_key_bindings("thumbfast-osc-input") + end + state.input_enabled = state.osc_visible + end + + if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then + mouse_over_osc = true + end + end + + if osc_param.areas["window-controls"] then + for _,cords in ipairs(osc_param.areas["window-controls"]) do + if state.osc_visible then -- activate only when OSC is actually visible + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "thumbfast-osc-window-controls") + end + if state.osc_visible ~= state.windowcontrols_buttons then + if state.osc_visible then + mp.enable_key_bindings("thumbfast-osc-window-controls") + else + mp.disable_key_bindings("thumbfast-osc-window-controls") + end + state.windowcontrols_buttons = state.osc_visible + end + + if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then + mouse_over_osc = true + end + end + end + + if osc_param.areas["window-controls-title"] then + for _,cords in ipairs(osc_param.areas["window-controls-title"]) do + if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then + mouse_over_osc = true + end + end + end + + -- autohide + if not (state.showtime == nil) and (get_hidetimeout() >= 0) then + local timeout = state.showtime + (get_hidetimeout()/1000) - now + if timeout <= 0 then + if (state.active_element == nil) and not (mouse_over_osc) then + hide_osc() + end + else + -- the timer is only used to recheck the state and to possibly run + -- the code above again + if not state.hide_timer then + state.hide_timer = mp.add_timeout(0, tick) + end + state.hide_timer.timeout = timeout + -- re-arm + state.hide_timer:kill() + state.hide_timer:resume() + end + end + + + -- actual rendering + local ass = assdraw.ass_new() + + -- Messages + render_message(ass) + + -- actual OSC + if state.osc_visible then + render_elements(ass) + end + + -- submit + set_osd(osc_param.playresy * osc_param.display_aspect, + osc_param.playresy, ass.text) +end + +-- +-- Eventhandling +-- + +local function element_has_action(element, action) + return element and element.eventresponder and + element.eventresponder[action] +end + +function process_event(source, what) + local action = string.format("%s%s", source, + what and ("_" .. what) or "") + + if what == "down" or what == "press" then + + for n = 1, #elements do + + if mouse_hit(elements[n]) and + elements[n].eventresponder and + (elements[n].eventresponder[source .. "_up"] or + elements[n].eventresponder[action]) then + + if what == "down" then + state.active_element = n + state.active_event_source = source + end + -- fire the down or press event if the element has one + if element_has_action(elements[n], action) then + elements[n].eventresponder[action](elements[n]) + end + + end + end + + elseif what == "up" then + + if elements[state.active_element] then + local n = state.active_element + + if n == 0 then + --click on background (does not work) + elseif element_has_action(elements[n], action) and + mouse_hit(elements[n]) then + + elements[n].eventresponder[action](elements[n]) + end + + --reset active element + if element_has_action(elements[n], "reset") then + elements[n].eventresponder["reset"](elements[n]) + end + + end + state.active_element = nil + state.mouse_down_counter = 0 + + elseif source == "mouse_move" then + + state.mouse_in_window = true + + local mouseX, mouseY = get_virt_mouse_pos() + if (user_opts.minmousemove == 0) or + (not ((state.last_mouseX == nil) or (state.last_mouseY == nil)) and + ((math.abs(mouseX - state.last_mouseX) >= user_opts.minmousemove) + or (math.abs(mouseY - state.last_mouseY) >= user_opts.minmousemove) + ) + ) then + show_osc() + end + state.last_mouseX, state.last_mouseY = mouseX, mouseY + + local n = state.active_element + if element_has_action(elements[n], action) then + elements[n].eventresponder[action](elements[n]) + end + end + + -- ensure rendering after any (mouse) event - icons could change etc + request_tick() +end + + +local logo_lines = { + -- White border + "{\\c&HE5E5E5&\\p6}m 895 10 b 401 10 0 410 0 905 0 1399 401 1800 895 1800 1390 1800 1790 1399 1790 905 1790 410 1390 10 895 10 {\\p0}", + -- Purple fill + "{\\c&H682167&\\p6}m 925 42 b 463 42 87 418 87 880 87 1343 463 1718 925 1718 1388 1718 1763 1343 1763 880 1763 418 1388 42 925 42{\\p0}", + -- Darker fill + "{\\c&H430142&\\p6}m 1605 828 b 1605 1175 1324 1456 977 1456 631 1456 349 1175 349 828 349 482 631 200 977 200 1324 200 1605 482 1605 828{\\p0}", + -- White fill + "{\\c&HDDDBDD&\\p6}m 1296 910 b 1296 1131 1117 1310 897 1310 676 1310 497 1131 497 910 497 689 676 511 897 511 1117 511 1296 689 1296 910{\\p0}", + -- Triangle + "{\\c&H691F69&\\p6}m 762 1113 l 762 708 b 881 776 1000 843 1119 911 1000 978 881 1046 762 1113{\\p0}", +} + +local santa_hat_lines = { + -- Pompoms + "{\\c&HC0C0C0&\\p6}m 500 -323 b 491 -322 481 -318 475 -311 465 -312 456 -319 446 -318 434 -314 427 -304 417 -297 410 -290 404 -282 395 -278 390 -274 387 -267 381 -265 377 -261 379 -254 384 -253 397 -244 409 -232 425 -228 437 -228 446 -218 457 -217 462 -216 466 -213 468 -209 471 -205 477 -203 482 -206 491 -211 499 -217 508 -222 532 -235 556 -249 576 -267 584 -272 584 -284 578 -290 569 -305 550 -312 533 -309 523 -310 515 -316 507 -321 505 -323 503 -323 500 -323{\\p0}", + "{\\c&HE0E0E0&\\p6}m 315 -260 b 286 -258 259 -240 246 -215 235 -210 222 -215 211 -211 204 -188 177 -176 172 -151 170 -139 163 -128 154 -121 143 -103 141 -81 143 -60 139 -46 125 -34 129 -17 132 -1 134 16 142 30 145 56 161 80 181 96 196 114 210 133 231 144 266 153 303 138 328 115 373 79 401 28 423 -24 446 -73 465 -123 483 -174 487 -199 467 -225 442 -227 421 -232 402 -242 384 -254 364 -259 342 -250 322 -260 320 -260 317 -261 315 -260{\\p0}", + -- Main cap + "{\\c&H0000F0&\\p6}m 1151 -523 b 1016 -516 891 -458 769 -406 693 -369 624 -319 561 -262 526 -252 465 -235 479 -187 502 -147 551 -135 588 -111 1115 165 1379 232 1909 761 1926 800 1952 834 1987 858 2020 883 2053 912 2065 952 2088 1000 2146 962 2139 919 2162 836 2156 747 2143 662 2131 615 2116 567 2122 517 2120 410 2090 306 2089 199 2092 147 2071 99 2034 64 1987 5 1928 -41 1869 -86 1777 -157 1712 -256 1629 -337 1578 -389 1521 -436 1461 -476 1407 -509 1343 -507 1284 -515 1240 -519 1195 -521 1151 -523{\\p0}", + -- Cap shadow + "{\\c&H0000AA&\\p6}m 1657 248 b 1658 254 1659 261 1660 267 1669 276 1680 284 1689 293 1695 302 1700 311 1707 320 1716 325 1726 330 1735 335 1744 347 1752 360 1761 371 1753 352 1754 331 1753 311 1751 237 1751 163 1751 90 1752 64 1752 37 1767 14 1778 -3 1785 -24 1786 -45 1786 -60 1786 -77 1774 -87 1760 -96 1750 -78 1751 -65 1748 -37 1750 -8 1750 20 1734 78 1715 134 1699 192 1694 211 1689 231 1676 246 1671 251 1661 255 1657 248 m 1909 541 b 1914 542 1922 549 1917 539 1919 520 1921 502 1919 483 1918 458 1917 433 1915 407 1930 373 1942 338 1947 301 1952 270 1954 238 1951 207 1946 214 1947 229 1945 239 1939 278 1936 318 1924 356 1923 362 1913 382 1912 364 1906 301 1904 237 1891 175 1887 150 1892 126 1892 101 1892 68 1893 35 1888 2 1884 -9 1871 -20 1859 -14 1851 -6 1854 9 1854 20 1855 58 1864 95 1873 132 1883 179 1894 225 1899 273 1908 362 1910 451 1909 541{\\p0}", + -- Brim and tip pompom + "{\\c&HF8F8F8&\\p6}m 626 -191 b 565 -155 486 -196 428 -151 387 -115 327 -101 304 -47 273 2 267 59 249 113 219 157 217 213 215 265 217 309 260 302 285 283 373 264 465 264 555 257 608 252 655 292 709 287 759 294 816 276 863 298 903 340 972 324 1012 367 1061 394 1125 382 1167 424 1213 462 1268 482 1322 506 1385 546 1427 610 1479 662 1510 690 1534 725 1566 752 1611 796 1664 830 1703 880 1740 918 1747 986 1805 1005 1863 991 1897 932 1916 880 1914 823 1945 777 1961 725 1979 673 1957 622 1938 575 1912 534 1862 515 1836 473 1790 417 1755 351 1697 305 1658 266 1633 216 1593 176 1574 138 1539 116 1497 110 1448 101 1402 77 1371 37 1346 -16 1295 15 1254 6 1211 -27 1170 -62 1121 -86 1072 -104 1027 -128 976 -133 914 -130 851 -137 794 -162 740 -181 679 -168 626 -191 m 2051 917 b 1971 932 1929 1017 1919 1091 1912 1149 1923 1214 1970 1254 2000 1279 2027 1314 2066 1325 2139 1338 2212 1295 2254 1238 2281 1203 2287 1158 2282 1116 2292 1061 2273 1006 2229 970 2206 941 2167 938 2138 918{\\p0}", +} + +-- called by mpv on every frame +function tick() + if state.marginsREQ == true then + update_margins() + state.marginsREQ = false + end + + if (not state.enabled) then return end + + if (state.idle) then + + -- render idle message + msg.trace("idle message") + local _, _, display_aspect = mp.get_osd_size() + if display_aspect == 0 then + return + end + local display_h = 360 + local display_w = display_h * display_aspect + -- logo is rendered at 2^(6-1) = 32 times resolution with size 1800x1800 + local icon_x, icon_y = (display_w - 1800 / 32) / 2, 140 + local line_prefix = ("{\\rDefault\\an7\\1a&H00&\\bord0\\shad0\\pos(%f,%f)}"):format(icon_x, icon_y) + + local ass = assdraw.ass_new() + -- mpv logo + if user_opts.idlescreen then + for i, line in ipairs(logo_lines) do + ass:new_event() + ass:append(line_prefix .. line) + end + end + + -- Santa hat + if is_december and user_opts.idlescreen and not user_opts.greenandgrumpy then + for i, line in ipairs(santa_hat_lines) do + ass:new_event() + ass:append(line_prefix .. line) + end + end + + if user_opts.idlescreen then + ass:new_event() + ass:pos(display_w / 2, icon_y + 65) + ass:an(8) + ass:append("Drop files or URLs to play here.") + end + set_osd(display_w, display_h, ass.text) + + if state.showhide_enabled then + mp.disable_key_bindings("thumbfast-osc-showhide") + mp.disable_key_bindings("thumbfast-osc-showhide_wc") + state.showhide_enabled = false + end + + + elseif (state.fullscreen and user_opts.showfullscreen) + or (not state.fullscreen and user_opts.showwindowed) then + + -- render the OSC + render() + else + -- Flush OSD + render_wipe() + end + + state.tick_last_time = mp.get_time() + + if state.anitype ~= nil then + -- state.anistart can be nil - animation should now start, or it can + -- be a timestamp when it started. state.idle has no animation. + if not state.idle and + (not state.anistart or + mp.get_time() < 1 + state.anistart + user_opts.fadeduration/1000) + then + -- animating or starting, or still within 1s past the deadline + request_tick() + else + kill_animation() + end + end +end + +function do_enable_keybindings() + if state.enabled then + if not state.showhide_enabled then + mp.enable_key_bindings("thumbfast-osc-showhide", "allow-vo-dragging+allow-hide-cursor") + mp.enable_key_bindings("thumbfast-osc-showhide_wc", "allow-vo-dragging+allow-hide-cursor") + end + state.showhide_enabled = true + end +end + +function enable_osc(enable) + state.enabled = enable + if enable then + do_enable_keybindings() + else + hide_osc() -- acts immediately when state.enabled == false + if state.showhide_enabled then + mp.disable_key_bindings("thumbfast-osc-showhide") + mp.disable_key_bindings("thumbfast-osc-showhide_wc") + end + state.showhide_enabled = false + end +end + +-- duration is observed for the sole purpose of updating chapter markers +-- positions. live streams with chapters are very rare, and the update is also +-- expensive (with request_init), so it's only observed when we have chapters +-- and the user didn't disable the livemarkers option (update_duration_watch). +function on_duration() request_init() end + +local duration_watched = false +function update_duration_watch() + local want_watch = user_opts.livemarkers and + (mp.get_property_number("chapters", 0) or 0) > 0 and + true or false -- ensure it's a boolean + + if (want_watch ~= duration_watched) then + if want_watch then + mp.observe_property("duration", nil, on_duration) + else + mp.unobserve_property(on_duration) + end + duration_watched = want_watch + end +end + +validate_user_opts() +update_duration_watch() + +mp.register_event("shutdown", shutdown) +mp.register_event("start-file", request_init) +mp.observe_property("track-list", nil, request_init) +mp.observe_property("playlist", nil, request_init) +mp.observe_property("chapter-list", "native", function(_, list) + list = list or {} -- safety, shouldn't return nil + table.sort(list, function(a, b) return a.time < b.time end) + state.chapter_list = list + update_duration_watch() + request_init() +end) + +mp.register_script_message("osc-message", show_message) +mp.register_script_message("osc-chapterlist", function(dur) + show_message(get_chapterlist(), dur) +end) +mp.register_script_message("osc-playlist", function(dur) + show_message(get_playlist(), dur) +end) +mp.register_script_message("osc-tracklist", function(dur) + local msg = {} + for k,v in pairs(nicetypes) do + table.insert(msg, get_tracklist(k)) + end + show_message(table.concat(msg, '\n\n'), dur) +end) + +mp.observe_property("fullscreen", "bool", + function(name, val) + state.fullscreen = val + state.marginsREQ = true + request_init_resize() + end +) +mp.observe_property("border", "bool", + function(name, val) + state.border = val + request_init_resize() + end +) +mp.observe_property("window-maximized", "bool", + function(name, val) + state.maximized = val + request_init_resize() + end +) +mp.observe_property("idle-active", "bool", + function(name, val) + state.idle = val + request_tick() + end +) +mp.observe_property("pause", "bool", pause_state) +mp.observe_property("demuxer-cache-state", "native", cache_state) +mp.observe_property("vo-configured", "bool", function(name, val) + request_tick() +end) +mp.observe_property("playback-time", "number", function(name, val) + request_tick() +end) +mp.observe_property("osd-dimensions", "native", function(name, val) + -- (we could use the value instead of re-querying it all the time, but then + -- we might have to worry about property update ordering) + request_init_resize() +end) + +-- mouse show/hide bindings +mp.set_key_bindings({ + {"mouse_move", function(e) process_event("mouse_move", nil) end}, + {"mouse_leave", mouse_leave}, +}, "thumbfast-osc-showhide", "force") +mp.set_key_bindings({ + {"mouse_move", function(e) process_event("mouse_move", nil) end}, + {"mouse_leave", mouse_leave}, +}, "thumbfast-osc-showhide_wc", "force") +do_enable_keybindings() + +--mouse input bindings +mp.set_key_bindings({ + {"mbtn_left", function(e) process_event("mbtn_left", "up") end, + function(e) process_event("mbtn_left", "down") end}, + {"shift+mbtn_left", function(e) process_event("shift+mbtn_left", "up") end, + function(e) process_event("shift+mbtn_left", "down") end}, + {"mbtn_right", function(e) process_event("mbtn_right", "up") end, + function(e) process_event("mbtn_right", "down") end}, + -- alias to shift_mbtn_left for single-handed mouse use + {"mbtn_mid", function(e) process_event("shift+mbtn_left", "up") end, + function(e) process_event("shift+mbtn_left", "down") end}, + {"wheel_up", function(e) process_event("wheel_up", "press") end}, + {"wheel_down", function(e) process_event("wheel_down", "press") end}, + {"mbtn_left_dbl", "ignore"}, + {"shift+mbtn_left_dbl", "ignore"}, + {"mbtn_right_dbl", "ignore"}, +}, "thumbfast-osc-input", "force") +mp.enable_key_bindings("thumbfast-osc-input") + +mp.set_key_bindings({ + {"mbtn_left", function(e) process_event("mbtn_left", "up") end, + function(e) process_event("mbtn_left", "down") end}, +}, "thumbfast-osc-window-controls", "force") +mp.enable_key_bindings("thumbfast-osc-window-controls") + +function get_hidetimeout() + if user_opts.visibility == "always" then + return -1 -- disable autohide + end + return user_opts.hidetimeout +end + +function always_on(val) + if state.enabled then + if val then + show_osc() + else + hide_osc() + end + end +end + +-- mode can be auto/always/never/cycle +-- the modes only affect internal variables and not stored on its own. +function visibility_mode(mode, no_osd) + if mode == "cycle" then + if not state.enabled then + mode = "auto" + elseif user_opts.visibility ~= "always" then + mode = "always" + else + mode = "never" + end + end + + if mode == "auto" then + always_on(false) + enable_osc(true) + elseif mode == "always" then + enable_osc(true) + always_on(true) + elseif mode == "never" then + enable_osc(false) + else + msg.warn("Ignoring unknown visibility mode '" .. mode .. "'") + return + end + + user_opts.visibility = mode + if mp.del_property then + mp.set_property_native("user-data/osc/visibility", mode) + else + utils.shared_script_property_set("osc-visibility", mode) + end + + if not no_osd and tonumber(mp.get_property("osd-level")) >= 1 then + mp.osd_message("OSC visibility: " .. mode) + end + + -- Reset the input state on a mode change. The input state will be + -- recalculated on the next render cycle, except in 'never' mode where it + -- will just stay disabled. + mp.disable_key_bindings("thumbfast-osc-input") + mp.disable_key_bindings("thumbfast-osc-window-controls") + state.input_enabled = false + + update_margins() + request_tick() +end + +function idlescreen_visibility(mode, no_osd) + if mode == "cycle" then + if user_opts.idlescreen then + mode = "no" + else + mode = "yes" + end + end + + if mode == "yes" then + user_opts.idlescreen = true + else + user_opts.idlescreen = false + end + + if mp.del_property then + mp.set_property_native("user-data/osc/idlescreen", user_opts.idlescreen) + else + utils.shared_script_property_set("osc-idlescreen", mode) + end + + if not no_osd and tonumber(mp.get_property("osd-level")) >= 1 then + mp.osd_message("OSC logo visibility: " .. tostring(mode)) + end + + request_tick() +end + +visibility_mode(user_opts.visibility, true) +mp.register_script_message("osc-visibility", visibility_mode) +mp.add_key_binding(nil, "visibility", function() visibility_mode("cycle") end) + +mp.register_script_message("osc-idlescreen", idlescreen_visibility) + +mp.register_script_message("thumbfast-info", function(json) + local data = utils.parse_json(json) + if type(data) ~= "table" or not data.width or not data.height then + msg.error("thumbfast-info: received json didn't produce a table with thumbnail information") + else + thumbfast = data + end +end) + +set_virt_mouse_area(0, 0, 0, 0, "thumbfast-osc-input") +set_virt_mouse_area(0, 0, 0, 0, "thumbfast-osc-window-controls") diff --git a/docs/static/tutorials/mpv/portable_config/scripts/pause-when-minimize.lua b/docs/static/tutorials/mpv/portable_config/scripts/pause-when-minimize.lua new file mode 100644 index 000000000..99add709f --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/pause-when-minimize.lua @@ -0,0 +1,20 @@ +-- This script pauses playback when minimizing the window, and resumes playback +-- if it's brought back again. If the player was already paused when minimizing, +-- then try not to mess with the pause state. + +local did_minimize = false + +mp.observe_property("window-minimized", "bool", function(name, value) + local pause = mp.get_property_native("pause") + if value == true then + if pause == false then + mp.set_property_native("pause", true) + did_minimize = true + end + elseif value == false then + if did_minimize and (pause == true) then + mp.set_property_native("pause", false) + end + did_minimize = false + end +end) diff --git a/docs/static/tutorials/mpv/portable_config/scripts/playlistmanager.lua b/docs/static/tutorials/mpv/portable_config/scripts/playlistmanager.lua new file mode 100644 index 000000000..03b508a73 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/playlistmanager.lua @@ -0,0 +1,1483 @@ +local settings = { + + -- #### FUNCTIONALITY SETTINGS + + --navigation keybindings force override only while playlist is visible + --if "no" then you can display the playlist by any of the navigation keys + dynamic_binds = true, + + -- to bind multiple keys separate them by a space + + -- main key to show playlist + key_showplaylist = "SHIFT+ENTER", + + -- display playlist while key is held down + key_peek_at_playlist = "", + + -- dynamic keys + key_moveup = "UP", + key_movedown = "DOWN", + key_movepageup = "PGUP", + key_movepagedown = "PGDWN", + key_movebegin = "HOME", + key_moveend = "END", + key_selectfile = "RIGHT LEFT", + key_unselectfile = "", + key_playfile = "ENTER", + key_removefile = "BS", + key_closeplaylist = "ESC SHIFT+ENTER", + + -- extra functionality keys + key_sortplaylist = "", + key_shuffleplaylist = "", + key_reverseplaylist = "", + key_loadfiles = "", + key_saveplaylist = "", + + --replaces matches on filenames based on extension, put as empty string to not replace anything + --replace rules are executed in provided order + --replace rule key is the pattern and value is the replace value + --uses :gsub('pattern', 'replace'), read more http://lua-users.org/wiki/StringLibraryTutorial + --'all' will match any extension or protocol if it has one + --uses json and parses it into a lua table to be able to support .conf file + + filename_replace = [[ + [ + { + "protocol": { "all": true }, + "rules": [ + { "%%(%x%x)": "hex_to_char" } + ] + } + ] + ]], + +--[=====[ START OF SAMPLE REPLACE - Remove this line to use it + --Sample replace: replaces underscore to space on all files + --for mp4 and webm; remove extension, remove brackets and surrounding whitespace, change dot between alphanumeric to space + filename_replace = [[ + [ + { + "ext": { "all": true}, + "rules": [ + { "_" : " " } + ] + },{ + "ext": { "mp4": true, "mkv": true }, + "rules": [ + { "^(.+)%..+$": "%1" }, + { "%s*[%[%(].-[%]%)]%s*": "" }, + { "(%w)%.(%w)": "%1 %2" } + ] + },{ + "protocol": { "http": true, "https": true }, + "rules": [ + { "^%a+://w*%.?": "" } + ] + } + ] + ]], +--END OF SAMPLE REPLACE ]=====] + + --json array of filetypes to search from directory + loadfiles_filetypes = [[ + [ + "jpg", "jpeg", "png", "tif", "tiff", "gif", "webp", "svg", "bmp", + "mp3", "wav", "ogm", "flac", "m4a", "wma", "ogg", "opus", + "mkv", "avi", "mp4", "ogv", "webm", "rmvb", "flv", "wmv", "mpeg", "mpg", "m4v", "3gp" + ] + ]], + + --loadfiles at startup if 1 or more items in playlist + loadfiles_on_start = false, + -- loadfiles from working directory on idle startup + loadfiles_on_idle_start = false, + --always put loaded files after currently playing file + loadfiles_always_append = false, + + --sort playlist when files are added to playlist + sortplaylist_on_file_add = false, + + --default sorting method, must be one of: "name-asc", "name-desc", "date-asc", "date-desc", "size-asc", "size-desc". + default_sort = "name-asc", + + --"linux | windows | auto" + system = "auto", + + --Use ~ for home directory. Leave as empty to use mpv/playlists + playlist_savepath = "", + + -- constant filename to save playlist as. Note that it will override existing playlist. Leave empty for generated name. + playlist_save_filename = "", + + --save playlist automatically after current file was unloaded + save_playlist_on_file_end = false, + + + --show file title every time a new file is loaded + show_title_on_file_load = false, + --show playlist every time a new file is loaded + show_playlist_on_file_load = false, + --close playlist when selecting file to play + close_playlist_on_playfile = false, + + --sync cursor when file is loaded from outside reasons(file-ending, playlist-next shortcut etc.) + --has the sideeffect of moving cursor if file happens to change when navigating + --good side is cursor always following current file when going back and forth files with playlist-next/prev + sync_cursor_on_load = true, + + --allow the playlist cursor to loop from end to start and vice versa + loop_cursor = true, + + --youtube-dl executable for title resolving if enabled, probably "youtube-dl" or "yt-dlp", can be absolute path + youtube_dl_executable = "youtube-dl", + + -- allow playlistmanager to write watch later config when navigating between files + allow_write_watch_later_config = true, + + -- reset cursor navigation when closing or opening playlist + reset_cursor_on_close = true, + reset_cursor_on_open = true, + + --#### VISUAL SETTINGS + + --prefer to display titles for following files: "all", "url", "none". Sorting still uses filename. + prefer_titles = "url", + + --call youtube-dl to resolve the titles of urls in the playlist + resolve_url_titles = false, + + --call ffprobe to resolve the titles of local files in the playlist (if they exist in the metadata) + resolve_local_titles = false, + + -- timeout in seconds for url title resolving + resolve_title_timeout = 15, + + -- how many url titles can be resolved at a time. Higher number might lead to stutters. + concurrent_title_resolve_limit = 10, + + --osd timeout on inactivity in seconds, use 0 for no timeout + playlist_display_timeout = 0, + + -- when peeking at playlist, show playlist at the very least for display timeout + peek_respect_display_timeout = false, + + -- the maximum amount of lines playlist will render. Optimal value depends on font/video size etc. + showamount = 9, + + --font size scales by window, if false requires larger font and padding sizes + scale_playlist_by_window=true, + --playlist ass style overrides inside curly brackets, \keyvalue is one field, extra \ for escape in lua + --example {\\fnUbuntu\\fs10\\b0\\bord1} equals: font=Ubuntu, size=10, bold=no, border=1 + --read http://docs.aegisub.org/3.2/ASS_Tags/ for reference of tags + --undeclared tags will use default osd settings + --these styles will be used for the whole playlist + style_ass_tags = "{}", + --paddings from top left corner + text_padding_x = 10, + text_padding_y = 30, + + --screen dim when menu is open 0.0 - 1.0 (0 is no dim, 1 is black) + curtain_opacity=0, + + --set title of window with stripped name + set_title_stripped = false, + title_prefix = "", + title_suffix = " - mpv", + + --slice long filenames, and how many chars to show + slice_longfilenames = false, + slice_longfilenames_amount = 70, + + --Playlist header template + --%mediatitle or %filename = title or name of playing file + --%pos = position of playing file + --%cursor = position of navigation + --%plen = playlist length + --%N = newline + playlist_header = "[%cursor/%plen]", + + --Playlist file templates + --%pos = position of file with leading zeros + --%name = title or name of file + --%N = newline + --you can also use the ass tags mentioned above. For example: + -- selected_file="{\\c&HFF00FF&}➔ %name" | to add a color for selected file. However, if you + -- use ass tags you need to reset them for every line (see https://github.com/jonniek/mpv-playlistmanager/issues/20) + normal_file = "○ %name", + hovered_file = "● %name", + selected_file = "➔ %name", + playing_file = "▷ %name", + playing_hovered_file = "▶ %name", + playing_selected_file = "➤ %name", + + + -- what to show when playlist is truncated + playlist_sliced_prefix = "...", + playlist_sliced_suffix = "...", + + --output visual feedback to OSD for tasks + display_osd_feedback = true, +} +local opts = require("mp.options") +opts.read_options(settings, "playlistmanager", function(list) update_opts(list) end) + +local utils = require("mp.utils") +local msg = require("mp.msg") +local assdraw = require("mp.assdraw") + + +--check os +if settings.system=="auto" then + local o = {} + if mp.get_property_native('options/vo-mmcss-profile', o) ~= o then + settings.system = "windows" + else + settings.system = "linux" + end +end + +--global variables +local playlist_visible = false +local strippedname = nil +local path = nil +local directory = nil +local filename = nil +local pos = 0 +local plen = 0 +local cursor = 0 +--table for saved media titles for later if we prefer them +local title_table = {} +-- table for urls and local file paths that we have requested to be resolved to titles +local requested_titles = {} + +local filetype_lookup = {} + +function update_opts(changelog) + msg.verbose('updating options') + + --parse filename json + if changelog.filename_replace then + if(settings.filename_replace~="") then + settings.filename_replace = utils.parse_json(settings.filename_replace) + else + settings.filename_replace = false + end + end + + --parse loadfiles json + if changelog.loadfiles_filetypes then + settings.loadfiles_filetypes = utils.parse_json(settings.loadfiles_filetypes) + + filetype_lookup = {} + --create loadfiles set + for _, ext in ipairs(settings.loadfiles_filetypes) do + filetype_lookup[ext] = true + end + end + + if changelog.resolve_url_titles then + resolve_titles() + end + + if changelog.resolve_local_titles then + resolve_titles() + end + + if changelog.playlist_display_timeout then + keybindstimer = mp.add_periodic_timer(settings.playlist_display_timeout, remove_keybinds) + keybindstimer:kill() + end + + if playlist_visible then showplaylist() end +end + +update_opts({filename_replace = true, loadfiles_filetypes = true}) + +local sort_modes = { + { + id="name-asc", + title="name ascending", + sort_fn=function (a, b, playlist) + return alphanumsort(playlist[a].string, playlist[b].string) + end, + }, + { + id="name-desc", + title="name descending", + sort_fn=function (a, b, playlist) + return alphanumsort(playlist[b].string, playlist[a].string) + end, + }, + { + id="date-asc", + title="date ascending", + sort_fn=function (a, b) + return (get_file_info(a).mtime or 0) < (get_file_info(b).mtime or 0) + end, + }, + { + id="date-desc", + title="date descending", + sort_fn=function (a, b) + return (get_file_info(a).mtime or 0) > (get_file_info(b).mtime or 0) + end, + }, + { + id="size-asc", + title="size ascending", + sort_fn=function (a, b) + return (get_file_info(a).size or 0) < (get_file_info(b).size or 0) + end, + }, + { + id="size-desc", + title="size descending", + sort_fn=function (a, b) + return (get_file_info(a).size or 0) > (get_file_info(b).size or 0) + end, + }, +} + +local sort_mode = 1 +for mode, sort_data in pairs(sort_modes) do + if sort_data.id == settings.default_sort then + sort_mode = mode + end +end + +function is_protocol(path) + return type(path) == 'string' and path:match('^%a[%a%d-_]+://') ~= nil +end + +function on_file_loaded() + refresh_globals() + filename = mp.get_property("filename") + path = mp.get_property('path') + local media_title = mp.get_property("media-title") + if is_protocol(path) and not title_table[path] and path ~= media_title then + title_table[path] = media_title + end + + if settings.sync_cursor_on_load then + cursor=pos + --refresh playlist if cursor moved + if playlist_visible then draw_playlist() end + end + + strippedname = stripfilename(mp.get_property('media-title')) + if settings.show_title_on_file_load then + mp.commandv('show-text', strippedname) + end + if settings.show_playlist_on_file_load then + showplaylist() + end + if settings.set_title_stripped then + mp.set_property("title", settings.title_prefix..strippedname..settings.title_suffix) + end +end + +function on_start_file() + refresh_globals() + filename = mp.get_property("filename") + path = mp.get_property('path') + --if not a url then join path with working directory + if not is_protocol(path) then + path = utils.join_path(mp.get_property('working-directory'), path) + directory = utils.split_path(path) + else + directory = nil + end + + if settings.loadfiles_on_start and plen == 1 then + local ext = filename:match("%.([^%.]+)$") + -- a directory or playlist has been loaded, let's not do anything as mpv will expand it into files + if ext and filetype_lookup[ext:lower()] then + msg.info("Loading files from playing files directory") + playlist() + end + end +end + +function on_end_file() + if settings.save_playlist_on_file_end then save_playlist() end + strippedname = nil + path = nil + directory = nil + filename = nil + if playlist_visible then showplaylist() end +end + +function refresh_globals() + pos = mp.get_property_number('playlist-pos', 0) + plen = mp.get_property_number('playlist-count', 0) +end + +function escapepath(dir, escapechar) + return string.gsub(dir, escapechar, '\\'..escapechar) +end + +function replace_table_has_value(value, valid_values) + if value == nil or valid_values == nil then + return false + end + return valid_values['all'] or valid_values[value] +end + +local filename_replace_functions = { + --decode special characters in url + hex_to_char = function(x) return string.char(tonumber(x, 16)) end +} + +--strip a filename based on its extension or protocol according to rules in settings +function stripfilename(pathfile, media_title) + if pathfile == nil then return '' end + local ext = pathfile:match("%.([^%.]+)$") + local protocol = pathfile:match("^(%a%a+)://") + if not ext then ext = "" end + local tmp = pathfile + if settings.filename_replace and not media_title then + for k,v in ipairs(settings.filename_replace) do + if replace_table_has_value(ext, v['ext']) or replace_table_has_value(protocol, v['protocol']) then + for ruleindex, indexrules in ipairs(v['rules']) do + for rule, override in pairs(indexrules) do + override = filename_replace_functions[override] or override + tmp = tmp:gsub(rule, override) + end + end + end + end + end + if settings.slice_longfilenames and tmp:len()>settings.slice_longfilenames_amount+5 then + tmp = tmp:sub(1, settings.slice_longfilenames_amount).." ..." + end + return tmp +end + +--gets the file info of an item +function get_file_info(item) + local path = mp.get_property('playlist/' .. item - 1 .. '/filename') + if is_protocol(path) then return {} end + local file_info = utils.file_info(path) + if not file_info then + msg.warn('failed to read file info for', path) + return {} + end + + return file_info +end + +--gets a nicename of playlist entry at 0-based position i +function get_name_from_index(i, notitle) + refresh_globals() + if plen <= i then msg.error("no index in playlist", i, "length", plen); return nil end + local _, name = nil + local title = mp.get_property('playlist/'..i..'/title') + local name = mp.get_property('playlist/'..i..'/filename') + + local should_use_title = settings.prefer_titles == 'all' or is_protocol(name) and settings.prefer_titles == 'url' + --check if file has a media title stored or as property + if not title and should_use_title then + local mtitle = mp.get_property('media-title') + if i == pos and mp.get_property('filename') ~= mtitle then + if not title_table[name] then + title_table[name] = mtitle + end + title = mtitle + elseif title_table[name] then + title = title_table[name] + end + end + + --if we have media title use a more conservative strip + if title and not notitle and should_use_title then + -- Escape a string for verbatim display on the OSD + -- Ref: https://github.com/mpv-player/mpv/blob/94677723624fb84756e65c8f1377956667244bc9/player/lua/stats.lua#L145 + return stripfilename(title, true):gsub("\\", '\\\239\187\191'):gsub("{", "\\{"):gsub("^ ", "\\h") + end + + --remove paths if they exist, keeping protocols for stripping + if string.sub(name, 1, 1) == '/' or name:match("^%a:[/\\]") then + _, name = utils.split_path(name) + end + return stripfilename(name):gsub("\\", '\\\239\187\191'):gsub("{", "\\{"):gsub("^ ", "\\h") +end + +function parse_header(string) + local esc_title = stripfilename(mp.get_property("media-title"), true):gsub("%%", "%%%%") + local esc_file = stripfilename(mp.get_property("filename")):gsub("%%", "%%%%") + return string:gsub("%%N", "\\N") + :gsub("%%pos", mp.get_property_number("playlist-pos",0)+1) + :gsub("%%plen", mp.get_property("playlist-count")) + :gsub("%%cursor", cursor+1) + :gsub("%%mediatitle", esc_title) + :gsub("%%filename", esc_file) + -- undo name escape + :gsub("%%%%", "%%") +end + +function parse_filename(string, name, index) + local base = tostring(plen):len() + local esc_name = stripfilename(name):gsub("%%", "%%%%") + return string:gsub("%%N", "\\N") + :gsub("%%pos", string.format("%0"..base.."d", index+1)) + :gsub("%%name", esc_name) + -- undo name escape + :gsub("%%%%", "%%") +end + +function parse_filename_by_index(index) + local template = settings.normal_file + + local is_idle = mp.get_property_native('idle-active') + local position = is_idle and -1 or pos + + if index == position then + if index == cursor then + if selection then + template = settings.playing_selected_file + else + template = settings.playing_hovered_file + end + else + template = settings.playing_file + end + elseif index == cursor then + if selection then + template = settings.selected_file + else + template = settings.hovered_file + end + end + + return parse_filename(template, get_name_from_index(index), index) +end + + +function draw_playlist() + refresh_globals() + local ass = assdraw.ass_new() + + local _, _, a = mp.get_osd_size() + local h = 360 + local w = h * a + + if settings.curtain_opacity ~= nil and settings.curtain_opacity ~= 0 and settings.curtain_opacity < 1.0 then + -- curtain dim from https://github.com/christoph-heinrich/mpv-quality-menu/blob/501794bfbef468ee6a61e54fc8821fe5cd72c4ed/quality-menu.lua#L699-L707 + local alpha = 255 - math.ceil(255 * settings.curtain_opacity) + ass.text = string.format('{\\pos(0,0)\\rDefault\\an7\\1c&H000000&\\alpha&H%X&}', alpha) + ass:draw_start() + ass:rect_cw(0, 0, w, h) + ass:draw_stop() + ass:new_event() + end + + ass:append(settings.style_ass_tags) + + -- TODO: padding should work even on different osd alignments + if mp.get_property("osd-align-x") == "left" and mp.get_property("osd-align-y") == "top" then + ass:pos(settings.text_padding_x, settings.text_padding_y) + end + + if settings.playlist_header ~= "" then + ass:append(parse_header(settings.playlist_header).."\\N") + end + + -- (visible index, playlist index) pairs of playlist entries that should be rendered + local visible_indices = {} + + local one_based_cursor = cursor + 1 + table.insert(visible_indices, one_based_cursor) + + local offset = 1; + local visible_indices_length = 1; + while visible_indices_length < settings.showamount and visible_indices_length < plen do + -- add entry for offset steps below the cursor + local below = one_based_cursor + offset + if below <= plen then + table.insert(visible_indices, below) + visible_indices_length = visible_indices_length + 1; + end + + -- add entry for offset steps above the cursor + -- also need to double check that there is still space, this happens if we have even numbered limit + local above = one_based_cursor - offset + if above >= 1 and visible_indices_length < settings.showamount and visible_indices_length < plen then + table.insert(visible_indices, 1, above) + visible_indices_length = visible_indices_length + 1; + end + + offset = offset + 1 + end + + -- both indices are 1 based + for display_index, playlist_index in pairs(visible_indices) do + if display_index == 1 and playlist_index ~= 1 then + ass:append(settings.playlist_sliced_prefix.."\\N") + elseif display_index == settings.showamount and playlist_index ~= plen then + ass:append(settings.playlist_sliced_suffix) + else + -- parse_filename_by_index expects 0 based index + ass:append(parse_filename_by_index(playlist_index - 1).."\\N") + end + end + + if settings.scale_playlist_by_window then w,h = 0, 0 end + mp.set_osd_ass(w, h, ass.text) +end + +local peek_display_timer = nil +local peek_button_pressed = false + +function peek_timeout() + peek_display_timer:kill() + if not peek_button_pressed and not playlist_visible then + remove_keybinds() + end +end + +function handle_complex_playlist_toggle(table) + local event = table["event"] + if event == "press" then + msg.error("Complex key event not supported. Falling back to normal playlist display.") + showplaylist() + elseif event == "down" then + showplaylist(1000000) + if settings.peek_respect_display_timeout then + peek_button_pressed = true + peek_display_timer = mp.add_periodic_timer(settings.playlist_display_timeout, peek_timeout) + end + elseif event == "up" then + -- set playlist state to not visible, doesn't actually hide playlist yet + -- this will allow us to check if other functionality has rendered playlist before removing binds + playlist_visible = false + + function remove_keybinds_after_timeout() + -- if playlist is still not visible then lets actually hide it + -- this lets other keys that interupt the peek to render playlist without peek up event closing it + if not playlist_visible then + remove_keybinds() + end + end + + if settings.peek_respect_display_timeout then + peek_button_pressed = false + if not peek_display_timer:is_enabled() then + mp.add_timeout(0.01, remove_keybinds_after_timeout) + end + else + -- use small delay to let dynamic binds run before keys are potentially unbound + mp.add_timeout(0.01, remove_keybinds_after_timeout) + end + end +end + +function toggle_playlist(show_function) + local show = show_function or showplaylist + if playlist_visible then + remove_keybinds() + else + -- toggle always shows without timeout + show(0) + end +end + +function showplaylist(duration) + refresh_globals() + if plen == 0 then return end + if not playlist_visible and settings.reset_cursor_on_open then + resetcursor() + end + + playlist_visible = true + add_keybinds() + + draw_playlist() + keybindstimer:kill() + + local dur = tonumber(duration) or settings.playlist_display_timeout + if dur > 0 then + keybindstimer = mp.add_periodic_timer(dur, remove_keybinds) + end +end + +function showplaylist_non_interactive(duration) + refresh_globals() + if plen == 0 then return end + if not playlist_visible and settings.reset_cursor_on_open then + resetcursor() + end + playlist_visible = true + draw_playlist() + keybindstimer:kill() + + local dur = tonumber(duration) or settings.playlist_display_timeout + if dur > 0 then + keybindstimer = mp.add_periodic_timer(dur, remove_keybinds) + end +end + +selection=nil +function selectfile() + refresh_globals() + if plen == 0 then return end + if not selection then + selection=cursor + else + selection=nil + end + showplaylist() +end + +function unselectfile() + selection=nil + showplaylist() +end + +function resetcursor() + selection = nil + cursor = mp.get_property_number('playlist-pos', 1) +end + +function removefile() + refresh_globals() + if plen == 0 then return end + selection = nil + if cursor==pos then mp.command("script-message unseenplaylist mark true \"playlistmanager avoid conflict when removing file\"") end + mp.commandv("playlist-remove", cursor) + if cursor==plen-1 then cursor = cursor - 1 end + if plen == 1 then + remove_keybinds() + else + showplaylist() + end +end + +function moveup() + refresh_globals() + if plen == 0 then return end + if cursor~=0 then + if selection then mp.commandv("playlist-move", cursor,cursor-1) end + cursor = cursor-1 + elseif settings.loop_cursor then + if selection then mp.commandv("playlist-move", cursor,plen) end + cursor = plen-1 + end + showplaylist() +end + +function movedown() + refresh_globals() + if plen == 0 then return end + if cursor ~= plen-1 then + if selection then mp.commandv("playlist-move", cursor,cursor+2) end + cursor = cursor + 1 + elseif settings.loop_cursor then + if selection then mp.commandv("playlist-move", cursor,0) end + cursor = 0 + end + showplaylist() +end + +function movepageup() + refresh_globals() + if plen == 0 or cursor == 0 then return end + local prev_cursor = cursor + cursor = cursor - settings.showamount + if cursor < 0 then cursor = 0 end + if selection then mp.commandv("playlist-move", prev_cursor, cursor) end + showplaylist() +end + +function movepagedown() + refresh_globals() + if plen == 0 or cursor == plen-1 then return end + local prev_cursor = cursor + cursor = cursor + settings.showamount + if cursor >= plen then cursor = plen-1 end + if selection then mp.commandv("playlist-move", prev_cursor, cursor+1) end + showplaylist() +end + +function movebegin() + refresh_globals() + if plen == 0 or cursor == 0 then return end + local prev_cursor = cursor + cursor = 0 + if selection then mp.commandv("playlist-move", prev_cursor, cursor) end + showplaylist() +end + +function moveend() + refresh_globals() + if plen == 0 or cursor == plen-1 then return end + local prev_cursor = cursor + cursor = plen-1 + if selection then mp.commandv("playlist-move", prev_cursor, cursor+1) end + showplaylist() +end + +function write_watch_later(force_write) + if settings.allow_write_watch_later_config then + if mp.get_property_bool("save-position-on-quit") or force_write then + mp.command("write-watch-later-config") + end + end +end + +function playlist_next(force_write) + write_watch_later(force_write) + mp.commandv("playlist-next", "weak") + if settings.close_playlist_on_playfile then + remove_keybinds() + end + if playlist_visible then showplaylist() end +end + +function playlist_prev(force_write) + write_watch_later(force_write) + mp.commandv("playlist-prev", "weak") + if settings.close_playlist_on_playfile then + remove_keybinds() + end + if playlist_visible then showplaylist() end +end + +function playfile() + refresh_globals() + if plen == 0 then return end + selection = nil + local is_idle = mp.get_property_native('idle-active') + if cursor ~= pos or is_idle then + write_watch_later() + mp.set_property("playlist-pos", cursor) + else + if cursor~=plen-1 then + cursor = cursor + 1 + end + write_watch_later() + mp.commandv("playlist-next", "weak") + end + if settings.close_playlist_on_playfile then + remove_keybinds() + end + if playlist_visible then showplaylist() end +end + +function file_filter(filenames) + local files = {} + for i = 1, #filenames do + local file = filenames[i] + local ext = file:match('%.([^%.]+)$') + if ext and filetype_lookup[ext:lower()] then + table.insert(files, file) + end + end + return files +end + +function get_playlist_filenames_set() + local filenames = {} + for n=0,plen-1,1 do + local filename = mp.get_property('playlist/'..n..'/filename') + local _, file = utils.split_path(filename) + filenames[file] = true + end + return filenames +end + +--Creates a playlist of all files in directory, will keep the order and position +--For exaple, Folder has 12 files, you open the 5th file and run this, the remaining 7 are added behind the 5th file and prior 4 files before it +function playlist(force_dir) + refresh_globals() + if not directory and plen > 0 then return end + local hasfile = true + if plen == 0 then + hasfile = false + dir = mp.get_property('working-directory') + else + dir = directory + end + + if dir == "." then dir = "" end + if force_dir then dir = force_dir end + + local files = file_filter(utils.readdir(dir, "files")) + table.sort(files, alphanumsort) + + if files == nil then + msg.verbose("no files in directory") + return + end + + local filenames = get_playlist_filenames_set() + local c, c2 = 0,0 + if files then + local cur = false + local filename = mp.get_property("filename") + for _, file in ipairs(files) do + if file == nil or file[1] == "." then + break + end + local appendstr = "append" + if not hasfile then + cur = true + appendstr = "append-play" + hasfile = true + end + if filename == file then + cur = true + elseif filenames[file] then + -- skip files already in playlist + elseif cur == true or settings.loadfiles_always_append then + mp.commandv("loadfile", utils.join_path(dir, file), appendstr) + msg.info("Appended to playlist: " .. file) + c2 = c2 + 1 + else + mp.commandv("loadfile", utils.join_path(dir, file), appendstr) + msg.info("Prepended to playlist: " .. file) + mp.commandv("playlist-move", mp.get_property_number("playlist-count", 1)-1, c) + c = c + 1 + end + end + if c2 > 0 or c>0 then + msg.info("Added "..c + c2.." files to playlist") + else + msg.info("No additional files found") + end + cursor = mp.get_property_number('playlist-pos', 1) + else + msg.error("Could not scan for files: "..(error or "")) + end + refresh_globals() + if playlist_visible then + showplaylist() + elseif settings.display_osd_feedback then + if c2 > 0 or c>0 then + mp.osd_message("Added "..c + c2.." files to playlist") + else + mp.osd_message("No additional files found") + end + end + return c + c2 +end + +function parse_home(path) + if not path:find("^~") then + return path + end + local home_dir = os.getenv("HOME") or os.getenv("USERPROFILE") + if not home_dir then + local drive = os.getenv("HOMEDRIVE") + local path = os.getenv("HOMEPATH") + if drive and path then + home_dir = utils.join_path(drive, path) + else + msg.error("Couldn't find home dir.") + return nil + end + end + local result = path:gsub("^~", home_dir) + return result +end + +local interactive_save = false +function activate_playlist_save() + if interactive_save then + remove_keybinds() + mp.command("script-message playlistmanager-save-interactive \"start interactive filenaming process\"") + else + save_playlist() + end +end + +--saves the current playlist into a m3u file +function save_playlist(filename) + local length = mp.get_property_number('playlist-count', 0) + if length == 0 then return end + + --get playlist save path + local savepath + if settings.playlist_savepath == nil or settings.playlist_savepath == "" then + savepath = mp.command_native({"expand-path", "~~home/"}).."/playlists" + else + savepath = parse_home(settings.playlist_savepath) + if savepath == nil then return end + end + + --create savepath if it doesn't exist + if utils.readdir(savepath) == nil then + local windows_args = {'powershell', '-NoProfile', '-Command', 'mkdir', savepath} + local unix_args = { 'mkdir', savepath } + local args = settings.system == 'windows' and windows_args or unix_args + local res = utils.subprocess({ args = args, cancellable = false }) + if res.status ~= 0 then + msg.error("Failed to create playlist save directory "..savepath..". Error: "..(res.error or "unknown")) + return + end + end + + local name = filename + if name == nil then + if settings.playlist_save_filename == nil or settings.playlist_save_filename == "" then + local date = os.date("*t") + local datestring = ("%02d-%02d-%02d_%02d-%02d-%02d"):format(date.year, date.month, date.day, date.hour, date.min, date.sec) + + name = datestring.."_playlist-size_"..length..".m3u" + else + name = settings.playlist_save_filename + end + end + + local savepath = utils.join_path(savepath, name) + local file, err = io.open(savepath, "w") + if not file then + msg.error("Error in creating playlist file, check permissions. Error: "..(err or "unknown")) + else + file:write("#EXTM3U\n") + local i=0 + while i < length do + local pwd = mp.get_property("working-directory") + local filename = mp.get_property('playlist/'..i..'/filename') + local fullpath = filename + if not is_protocol(filename) then + fullpath = utils.join_path(pwd, filename) + end + local title = mp.get_property('playlist/'..i..'/title') or title_table[filename] + if title then + file:write("#EXTINF:,"..title.."\n") + end + file:write(fullpath, "\n") + i=i+1 + end + local saved_msg = "Playlist written to: "..savepath + if settings.display_osd_feedback then mp.osd_message(saved_msg) end + msg.info(saved_msg) + file:close() + end +end + +function alphanumsort(a, b) + local function padnum(d) + local dec, n = string.match(d, "(%.?)0*(.+)") + return #dec > 0 and ("%.12f"):format(d) or ("%s%03d%s"):format(dec, #n, n) + end + return tostring(a):lower():gsub("%.?%d+",padnum)..("%3d"):format(#b) + < tostring(b):lower():gsub("%.?%d+",padnum)..("%3d"):format(#a) +end + +-- fast sort algo from https://github.com/zsugabubus/dotfiles/blob/master/.config/mpv/scripts/playlist-filtersort.lua +function sortplaylist(startover) + local playlist = mp.get_property_native('playlist') + if #playlist < 2 then return end + + local order = {} + for i=1, #playlist do + order[i] = i + playlist[i].string = get_name_from_index(i - 1, true) + end + + table.sort(order, function(a, b) + return sort_modes[sort_mode].sort_fn(a, b, playlist) + end) + + for i=1, #playlist do + playlist[order[i]].new_pos = i + end + + for i=1, #playlist do + while true do + local j = playlist[i].new_pos + if i == j then + break + end + mp.commandv('playlist-move', (i) - 1, (j + 1) - 1) + mp.commandv('playlist-move', (j - 1) - 1, (i) - 1) + playlist[j], playlist[i] = playlist[i], playlist[j] + end + end + + for i = 1, #playlist do + local filename = mp.get_property('playlist/' .. i - 1 .. '/filename') + local ext = filename:match("%.([^%.]+)$") + if not ext or not filetype_lookup[ext:lower()] then + --move the directory to the end of the playlist + mp.commandv('playlist-move', i - 1, #playlist) + end + end + + cursor = mp.get_property_number('playlist-pos', 0) + if startover then + mp.set_property('playlist-pos', 0) + end + if playlist_visible then + showplaylist() + end + if settings.display_osd_feedback then + mp.osd_message("Playlist sorted with "..sort_modes[sort_mode].title) + end +end + +function reverseplaylist() + local length = mp.get_property_number('playlist-count', 0) + if length < 2 then return end + for outer=1, length-1, 1 do + mp.commandv('playlist-move', outer, 0) + end + if playlist_visible then + showplaylist() + elseif settings.display_osd_feedback then + mp.osd_message("Playlist reversed") + end +end + +function shuffleplaylist() + refresh_globals() + if plen < 2 then return end + mp.command("playlist-shuffle") + math.randomseed(os.time()) + mp.commandv("playlist-move", pos, math.random(0, plen-1)) + + local playlist = mp.get_property_native('playlist') + for i = 1, #playlist do + local filename = mp.get_property('playlist/' .. i - 1 .. '/filename') + local ext = filename:match("%.([^%.]+)$") + if not ext or not filetype_lookup[ext:lower()] then + --move the directory to the end of the playlist + mp.commandv('playlist-move', i - 1, #playlist) + end + end + + mp.set_property('playlist-pos', 0) + refresh_globals() + if playlist_visible then + showplaylist() + elseif settings.display_osd_feedback then + mp.osd_message("Playlist shuffled") + end +end + +function bind_keys(keys, name, func, opts) + if keys == nil or keys == "" then + mp.add_key_binding(keys, name, func, opts) + return + end + local i = 1 + for key in keys:gmatch("[^%s]+") do + local prefix = i == 1 and '' or i + mp.add_key_binding(key, name..prefix, func, opts) + i = i + 1 + end +end + +function bind_keys_forced(keys, name, func, opts) + if keys == nil or keys == "" then + mp.add_forced_key_binding(keys, name, func, opts) + return + end + local i = 1 + for key in keys:gmatch("[^%s]+") do + local prefix = i == 1 and '' or i + mp.add_forced_key_binding(key, name..prefix, func, opts) + i = i + 1 + end +end + +function unbind_keys(keys, name) + if keys == nil or keys == "" then + mp.remove_key_binding(name) + return + end + local i = 1 + for key in keys:gmatch("[^%s]+") do + local prefix = i == 1 and '' or i + mp.remove_key_binding(name..prefix) + i = i + 1 + end +end + +function add_keybinds() + bind_keys_forced(settings.key_moveup, 'moveup', moveup, "repeatable") + bind_keys_forced(settings.key_movedown, 'movedown', movedown, "repeatable") + bind_keys_forced(settings.key_movepageup, 'movepageup', movepageup, "repeatable") + bind_keys_forced(settings.key_movepagedown, 'movepagedown', movepagedown, "repeatable") + bind_keys_forced(settings.key_movebegin, 'movebegin', movebegin, "repeatable") + bind_keys_forced(settings.key_moveend, 'moveend', moveend, "repeatable") + bind_keys_forced(settings.key_selectfile, 'selectfile', selectfile) + bind_keys_forced(settings.key_unselectfile, 'unselectfile', unselectfile) + bind_keys_forced(settings.key_playfile, 'playfile', playfile) + bind_keys_forced(settings.key_removefile, 'removefile', removefile, "repeatable") + bind_keys_forced(settings.key_closeplaylist, 'closeplaylist', remove_keybinds) +end + +function remove_keybinds() + keybindstimer:kill() + keybindstimer = mp.add_periodic_timer(settings.playlist_display_timeout, remove_keybinds) + keybindstimer:kill() + mp.set_osd_ass(0, 0, "") + playlist_visible = false + if settings.reset_cursor_on_close then + resetcursor() + end + if settings.dynamic_binds then + unbind_keys(settings.key_moveup, 'moveup') + unbind_keys(settings.key_movedown, 'movedown') + unbind_keys(settings.key_movepageup, 'movepageup') + unbind_keys(settings.key_movepagedown, 'movepagedown') + unbind_keys(settings.key_movebegin, 'movebegin') + unbind_keys(settings.key_moveend, 'moveend') + unbind_keys(settings.key_selectfile, 'selectfile') + unbind_keys(settings.key_unselectfile, 'unselectfile') + unbind_keys(settings.key_playfile, 'playfile') + unbind_keys(settings.key_removefile, 'removefile') + unbind_keys(settings.key_closeplaylist, 'closeplaylist') + end +end + +keybindstimer = mp.add_periodic_timer(settings.playlist_display_timeout, remove_keybinds) +keybindstimer:kill() + +if not settings.dynamic_binds then + add_keybinds() +end + +if settings.loadfiles_on_idle_start and mp.get_property_number('playlist-count', 0) == 0 then + playlist() +end + +mp.observe_property('playlist-count', "number", function(_, plcount) + --if we promised to listen and sort on playlist size increase do it + if settings.sortplaylist_on_file_add and (plcount > plen) then + msg.info("Added files will be automatically sorted") + refresh_globals() + sortplaylist() + end + if playlist_visible then showplaylist() end + resolve_titles() +end) + + +url_request_queue = {} +function url_request_queue.push(item) table.insert(url_request_queue, item) end +function url_request_queue.pop() return table.remove(url_request_queue, 1) end +local url_titles_to_fetch = url_request_queue +local ongoing_url_requests = {} + +function url_fetching_throttler() + if #url_titles_to_fetch == 0 then + url_title_fetch_timer:kill() + end + + local ongoing_url_requests_count = 0 + for _, ongoing in pairs(ongoing_url_requests) do + if ongoing then + ongoing_url_requests_count = ongoing_url_requests_count + 1 + end + end + + -- start resolving some url titles if there is available slots + local amount_to_fetch = math.max(0, settings.concurrent_title_resolve_limit - ongoing_url_requests_count) + for index=1,amount_to_fetch,1 do + local file = url_titles_to_fetch.pop() + if file then + ongoing_url_requests[file] = true + resolve_ytdl_title(file) + end + end +end + +url_title_fetch_timer = mp.add_periodic_timer(0.1, url_fetching_throttler) +url_title_fetch_timer:kill() + +local_request_queue = {} +function local_request_queue.push(item) table.insert(local_request_queue, item) end +function local_request_queue.pop() return table.remove(local_request_queue, 1) end +local local_titles_to_fetch = local_request_queue +local ongoing_local_request = false + +-- this will only allow 1 concurrent local title resolve process +function local_fetching_throttler() + if not ongoing_local_request then + local file = local_titles_to_fetch.pop() + if file then + ongoing_local_request = true + resolve_ffprobe_title(file) + end + end +end + +function resolve_titles() + if settings.prefer_titles == 'none' then return end + if not settings.resolve_url_titles and not settings.resolve_local_titles then return end + + local length = mp.get_property_number('playlist-count', 0) + if length < 2 then return end + -- loop all items in playlist because we can't predict how it has changed + local added_urls = false + local added_local = false + for i=0,length - 1,1 do + local filename = mp.get_property('playlist/'..i..'/filename') + local title = mp.get_property('playlist/'..i..'/title') + if i ~= pos + and filename + and not title + and not title_table[filename] + and not requested_titles[filename] + then + requested_titles[filename] = true + if filename:match('^https?://') then + url_titles_to_fetch.push(filename) + added_urls = true + elseif settings.prefer_titles == "all" then + local_titles_to_fetch.push(filename) + added_local = true + end + end + end + if added_urls then + url_title_fetch_timer:resume() + end + if added_local then + local_fetching_throttler() + end +end + +function resolve_ytdl_title(filename) + local args = { + settings.youtube_dl_executable, + '--no-playlist', + '--flat-playlist', + '-sJ', + '--no-config', + filename, + } + local req = mp.command_native_async( + { + name = "subprocess", + args = args, + playback_only = false, + capture_stdout = true + }, + function (success, res) + ongoing_url_requests[filename] = false + if res.killed_by_us then + msg.verbose('Request to resolve url title ' .. filename .. ' timed out') + return + end + if res.status == 0 then + local json, err = utils.parse_json(res.stdout) + if not err then + local is_playlist = json['_type'] and json['_type'] == 'playlist' + local title = (is_playlist and '[playlist]: ' or '') .. json['title'] + msg.verbose(filename .. " resolved to '" .. title .. "'") + title_table[filename] = title + refresh_globals() + if playlist_visible then showplaylist() end + else + msg.error("Failed parsing json, reason: "..(err or "unknown")) + end + else + msg.error("Failed to resolve url title "..filename.." Error: "..(res.error or "unknown")) + end + end + ) + + mp.add_timeout( + settings.resolve_title_timeout, + function() + mp.abort_async_command(req) + ongoing_url_requests[filename] = false + end + ) +end + +function resolve_ffprobe_title(filename) + local args = { "ffprobe", "-show_format", "-show_entries", "format=tags", "-loglevel", "quiet", filename } + local req = mp.command_native_async( + { + name = "subprocess", + args = args, + playback_only = false, + capture_stdout = true + }, + function (success, res) + ongoing_local_request = false + local_fetching_throttler() + if res.killed_by_us then + msg.verbose('Request to resolve local title ' .. filename .. ' timed out') + return + end + if res.status == 0 then + local title = string.match(res.stdout, "title=([^\n\r]+)") + if title then + msg.verbose(filename .. " resolved to '" .. title .. "'") + title_table[filename] = title + refresh_globals() + if playlist_visible then showplaylist() end + end + else + msg.error("Failed to resolve local title "..filename.." Error: "..(res.error or "unknown")) + end + end + ) +end + +--script message handler +function handlemessage(msg, value, value2) + if msg == "show" and value == "playlist" then + if value2 ~= "toggle" then + showplaylist(value2) + return + else + toggle_playlist(showplaylist) + return + end + end + if msg == "show" and value == "playlist-nokeys" then + if value2 ~= "toggle" then + showplaylist_non_interactive(value2) + return + else + toggle_playlist(showplaylist_non_interactive) + return + end + end + if msg == "show" and value == "filename" and strippedname and value2 then + mp.commandv('show-text', strippedname, tonumber(value2)*1000 ) ; return + end + if msg == "show" and value == "filename" and strippedname then + mp.commandv('show-text', strippedname ) ; return + end + if msg == "sort" then sortplaylist(value) ; return end + if msg == "shuffle" then shuffleplaylist() ; return end + if msg == "reverse" then reverseplaylist() ; return end + if msg == "loadfiles" then playlist(value) ; return end + if msg == "save" then save_playlist(value) ; return end + if msg == "playlist-next" then playlist_next(true) ; return end + if msg == "playlist-prev" then playlist_prev(true) ; return end + if msg == "enable-interactive-save" then interactive_save = true end + if msg == "close" then remove_keybinds() end +end + +mp.register_script_message("playlistmanager", handlemessage) + +bind_keys(settings.key_sortplaylist, "sortplaylist", function() + sortplaylist() + sort_mode = sort_mode + 1 + if sort_mode > #sort_modes then sort_mode = 1 end +end) +bind_keys(settings.key_shuffleplaylist, "shuffleplaylist", shuffleplaylist) +bind_keys(settings.key_reverseplaylist, "reverseplaylist", reverseplaylist) +bind_keys(settings.key_loadfiles, "loadfiles", playlist) +bind_keys(settings.key_saveplaylist, "saveplaylist", activate_playlist_save) +bind_keys(settings.key_showplaylist, "showplaylist", showplaylist) +bind_keys( + settings.key_peek_at_playlist, + "peek_at_playlist", + handle_complex_playlist_toggle, + { complex=true } +) + +mp.register_event("start-file", on_start_file) +mp.register_event("file-loaded", on_file_loaded) +mp.register_event("end-file", on_end_file) diff --git a/docs/static/tutorials/mpv/portable_config/scripts/thumbfast.lua b/docs/static/tutorials/mpv/portable_config/scripts/thumbfast.lua new file mode 100644 index 000000000..14eb9357e --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/thumbfast.lua @@ -0,0 +1,933 @@ +-- thumbfast.lua +-- +-- High-performance on-the-fly thumbnailer +-- +-- Built for easy integration in third-party UIs. + +--[[ +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at https://mozilla.org/MPL/2.0/. +]] + +local options = { + -- Socket path (leave empty for auto) + socket = "", + + -- Thumbnail path (leave empty for auto) + thumbnail = "", + + -- Maximum thumbnail size in pixels (scaled down to fit) + -- Values are scaled when hidpi is enabled + max_height = 200, + max_width = 200, + + -- Apply tone-mapping, no to disable + tone_mapping = "auto", + + -- Overlay id + overlay_id = 42, + + -- Spawn thumbnailer on file load for faster initial thumbnails + spawn_first = false, + + -- Close thumbnailer process after an inactivity period in seconds, 0 to disable + quit_after_inactivity = 0, + + -- Enable on network playback + network = false, + + -- Enable on audio playback + audio = false, + + -- Enable hardware decoding + hwdec = false, + + -- Windows only: use native Windows API to write to pipe (requires LuaJIT) + direct_io = false, + + -- Custom path to the mpv executable + mpv_path = "mpv" +} + +mp.utils = require "mp.utils" +mp.options = require "mp.options" +mp.options.read_options(options, "thumbfast") + +local properties = {} +local pre_0_30_0 = mp.command_native_async == nil +local pre_0_33_0 = true + +function subprocess(args, async, callback) + callback = callback or function() end + + if not pre_0_30_0 then + if async then + return mp.command_native_async({name = "subprocess", playback_only = true, args = args}, callback) + else + return mp.command_native({name = "subprocess", playback_only = false, capture_stdout = true, args = args}) + end + else + if async then + return mp.utils.subprocess_detached({args = args}, callback) + else + return mp.utils.subprocess({args = args}) + end + end +end + +local winapi = {} +if options.direct_io then + local ffi_loaded, ffi = pcall(require, "ffi") + if ffi_loaded then + winapi = { + ffi = ffi, + C = ffi.C, + bit = require("bit"), + socket_wc = "", + + -- WinAPI constants + CP_UTF8 = 65001, + GENERIC_WRITE = 0x40000000, + OPEN_EXISTING = 3, + FILE_FLAG_WRITE_THROUGH = 0x80000000, + FILE_FLAG_NO_BUFFERING = 0x20000000, + PIPE_NOWAIT = ffi.new("unsigned long[1]", 0x00000001), + + INVALID_HANDLE_VALUE = ffi.cast("void*", -1), + + -- don't care about how many bytes WriteFile wrote, so allocate something to store the result once + _lpNumberOfBytesWritten = ffi.new("unsigned long[1]"), + } + -- cache flags used in run() to avoid bor() call + winapi._createfile_pipe_flags = winapi.bit.bor(winapi.FILE_FLAG_WRITE_THROUGH, winapi.FILE_FLAG_NO_BUFFERING) + + ffi.cdef[[ + void* __stdcall CreateFileW(const wchar_t *lpFileName, unsigned long dwDesiredAccess, unsigned long dwShareMode, void *lpSecurityAttributes, unsigned long dwCreationDisposition, unsigned long dwFlagsAndAttributes, void *hTemplateFile); + bool __stdcall WriteFile(void *hFile, const void *lpBuffer, unsigned long nNumberOfBytesToWrite, unsigned long *lpNumberOfBytesWritten, void *lpOverlapped); + bool __stdcall CloseHandle(void *hObject); + bool __stdcall SetNamedPipeHandleState(void *hNamedPipe, unsigned long *lpMode, unsigned long *lpMaxCollectionCount, unsigned long *lpCollectDataTimeout); + int __stdcall MultiByteToWideChar(unsigned int CodePage, unsigned long dwFlags, const char *lpMultiByteStr, int cbMultiByte, wchar_t *lpWideCharStr, int cchWideChar); + ]] + + winapi.MultiByteToWideChar = function(MultiByteStr) + if MultiByteStr then + local utf16_len = winapi.C.MultiByteToWideChar(winapi.CP_UTF8, 0, MultiByteStr, -1, nil, 0) + if utf16_len > 0 then + local utf16_str = winapi.ffi.new("wchar_t[?]", utf16_len) + if winapi.C.MultiByteToWideChar(winapi.CP_UTF8, 0, MultiByteStr, -1, utf16_str, utf16_len) > 0 then + return utf16_str + end + end + end + return "" + end + + else + options.direct_io = false + end +end + +local file +local file_bytes = 0 +local spawned = false +local disabled = false +local force_disabled = false +local spawn_waiting = false +local spawn_working = false +local script_written = false + +local dirty = false + +local x, y +local last_x, last_y + +local last_seek_time + +local effective_w, effective_h = options.max_width, options.max_height +local real_w, real_h +local last_real_w, last_real_h + +local script_name + +local show_thumbnail = false + +local filters_reset = {["lavfi-crop"]=true, ["crop"]=true} +local filters_runtime = {["hflip"]=true, ["vflip"]=true} +local filters_all = {["hflip"]=true, ["vflip"]=true, ["lavfi-crop"]=true, ["crop"]=true} + +local tone_mappings = {["none"]=true, ["clip"]=true, ["linear"]=true, ["gamma"]=true, ["reinhard"]=true, ["hable"]=true, ["mobius"]=true} +local last_tone_mapping + +local last_vf_reset = "" +local last_vf_runtime = "" + +local last_rotate = 0 + +local par = "" +local last_par = "" + +local last_crop = nil + +local last_has_vid = 0 +local has_vid = 0 + +local file_timer +local file_check_period = 1/60 + +local allow_fast_seek = true + +local client_script = [=[ +#!/usr/bin/env bash +MPV_IPC_FD=0; MPV_IPC_PATH="%s" +trap "kill 0" EXIT +while [[ $# -ne 0 ]]; do case $1 in --mpv-ipc-fd=*) MPV_IPC_FD=${1/--mpv-ipc-fd=/} ;; esac; shift; done +if echo "print-text thumbfast" >&"$MPV_IPC_FD"; then echo -n > "$MPV_IPC_PATH"; tail -f "$MPV_IPC_PATH" >&"$MPV_IPC_FD" & while read -r -u "$MPV_IPC_FD" 2>/dev/null; do :; done; fi +]=] + +local function get_os() + local raw_os_name = "" + + if jit and jit.os and jit.arch then + raw_os_name = jit.os + else + if package.config:sub(1,1) == "\\" then + -- Windows + local env_OS = os.getenv("OS") + if env_OS then + raw_os_name = env_OS + end + else + raw_os_name = subprocess({"uname", "-s"}).stdout + end + end + + raw_os_name = (raw_os_name):lower() + + local os_patterns = { + ["windows"] = "windows", + ["linux"] = "linux", + + ["osx"] = "darwin", + ["mac"] = "darwin", + ["darwin"] = "darwin", + + ["^mingw"] = "windows", + ["^cygwin"] = "windows", + + ["bsd$"] = "darwin", + ["sunos"] = "darwin" + } + + -- Default to linux + local str_os_name = "linux" + + for pattern, name in pairs(os_patterns) do + if raw_os_name:match(pattern) then + str_os_name = name + break + end + end + + return str_os_name +end + +local os_name = mp.get_property("platform") or get_os() + +local path_separator = os_name == "windows" and "\\" or "/" + +if options.socket == "" then + if os_name == "windows" then + options.socket = "thumbfast" + else + options.socket = "/tmp/thumbfast" + end +end + +if options.thumbnail == "" then + if os_name == "windows" then + options.thumbnail = os.getenv("TEMP").."\\thumbfast.out" + else + options.thumbnail = "/tmp/thumbfast.out" + end +end + +local unique = mp.utils.getpid() + +options.socket = options.socket .. unique +options.thumbnail = options.thumbnail .. unique + +if options.direct_io then + if os_name == "windows" then + winapi.socket_wc = winapi.MultiByteToWideChar("\\\\.\\pipe\\" .. options.socket) + end + + if winapi.socket_wc == "" then + options.direct_io = false + end +end + +local mpv_path = options.mpv_path + +if mpv_path == "mpv" and os_name == "darwin" and unique then + -- TODO: look into ~~osxbundle/ + mpv_path = string.gsub(subprocess({"ps", "-o", "comm=", "-p", tostring(unique)}).stdout, "[\n\r]", "") + if mpv_path ~= "mpv" then + mpv_path = string.gsub(mpv_path, "/mpv%-bundle$", "/mpv") + local mpv_bin = mp.utils.file_info("/usr/local/mpv") + if mpv_bin and mpv_bin.is_file then + mpv_path = "/usr/local/mpv" + else + local mpv_app = mp.utils.file_info("/Applications/mpv.app/Contents/MacOS/mpv") + if mpv_app and mpv_app.is_file then + mp.msg.warn("symlink mpv to fix Dock icons: `sudo ln -s /Applications/mpv.app/Contents/MacOS/mpv /usr/local/mpv`") + else + mp.msg.warn("drag to your Applications folder and symlink mpv to fix Dock icons: `sudo ln -s /Applications/mpv.app/Contents/MacOS/mpv /usr/local/mpv`") + end + end + end +end + +local function vo_tone_mapping() + local passes = mp.get_property_native("vo-passes") + if passes and passes["fresh"] then + for k, v in pairs(passes["fresh"]) do + for k2, v2 in pairs(v) do + if k2 == "desc" and v2 then + local tone_mapping = string.match(v2, "([0-9a-z.-]+) tone map") + if tone_mapping then + return tone_mapping + end + end + end + end + end +end + +local function vf_string(filters, full) + local vf = "" + local vf_table = properties["vf"] + + if (properties["video-crop"] or "") ~= "" then + vf = "lavfi-crop="..string.gsub(properties["video-crop"], "(%d*)x?(%d*)%+(%d+)%+(%d+)", "w=%1:h=%2:x=%3:y=%4").."," + local width = properties["video-out-params"] and properties["video-out-params"]["dw"] + local height = properties["video-out-params"] and properties["video-out-params"]["dh"] + if width and height then + vf = string.gsub(vf, "w=:h=:", "w="..width..":h="..height..":") + end + end + + if vf_table and #vf_table > 0 then + for i = #vf_table, 1, -1 do + if filters[vf_table[i].name] then + local args = "" + for key, value in pairs(vf_table[i].params) do + if args ~= "" then + args = args .. ":" + end + args = args .. key .. "=" .. value + end + vf = vf .. vf_table[i].name .. "=" .. args .. "," + end + end + end + + if (full and options.tone_mapping ~= "no") or options.tone_mapping == "auto" then + if properties["video-params"] and properties["video-params"]["primaries"] == "bt.2020" then + local tone_mapping = options.tone_mapping + if tone_mapping == "auto" then + tone_mapping = last_tone_mapping or properties["tone-mapping"] + if tone_mapping == "auto" and properties["current-vo"] == "gpu-next" then + tone_mapping = vo_tone_mapping() + end + end + if not tone_mappings[tone_mapping] then + tone_mapping = "hable" + end + last_tone_mapping = tone_mapping + vf = vf .. "zscale=transfer=linear,format=gbrpf32le,tonemap="..tone_mapping..",zscale=transfer=bt709," + end + end + + if full then + vf = vf.."scale=w="..effective_w..":h="..effective_h..par..",pad=w="..effective_w..":h="..effective_h..":x=-1:y=-1,format=bgra" + end + + return vf +end + +local function calc_dimensions() + local width = properties["video-out-params"] and properties["video-out-params"]["dw"] + local height = properties["video-out-params"] and properties["video-out-params"]["dh"] + if not width or not height then return end + + local scale = properties["display-hidpi-scale"] or 1 + + if width / height > options.max_width / options.max_height then + effective_w = math.floor(options.max_width * scale + 0.5) + effective_h = math.floor(height / width * effective_w + 0.5) + else + effective_h = math.floor(options.max_height * scale + 0.5) + effective_w = math.floor(width / height * effective_h + 0.5) + end + + local v_par = properties["video-out-params"] and properties["video-out-params"]["par"] or 1 + if v_par == 1 then + par = ":force_original_aspect_ratio=decrease" + else + par = "" + end +end + +local info_timer = nil + +local function info(w, h) + local rotate = properties["video-params"] and properties["video-params"]["rotate"] + local image = properties["current-tracks/video"] and properties["current-tracks/video"]["image"] + local albumart = image and properties["current-tracks/video"]["albumart"] + + disabled = (w or 0) == 0 or (h or 0) == 0 or + has_vid == 0 or + (properties["demuxer-via-network"] and not options.network) or + (albumart and not options.audio) or + (image and not albumart) or + force_disabled + + if info_timer then + info_timer:kill() + info_timer = nil + elseif has_vid == 0 or (rotate == nil and not disabled) then + info_timer = mp.add_timeout(0.05, function() info(w, h) end) + end + + local json, err = mp.utils.format_json({width=w, height=h, disabled=disabled, available=true, socket=options.socket, thumbnail=options.thumbnail, overlay_id=options.overlay_id}) + if pre_0_30_0 then + mp.command_native({"script-message", "thumbfast-info", json}) + else + mp.command_native_async({"script-message", "thumbfast-info", json}, function() end) + end +end + +local function remove_thumbnail_files() + if file then + file:close() + file = nil + file_bytes = 0 + end + os.remove(options.thumbnail) + os.remove(options.thumbnail..".bgra") +end + +local activity_timer + +local function spawn(time) + if disabled then return end + + local path = properties["path"] + if path == nil then return end + + if options.quit_after_inactivity > 0 then + if show_thumbnail or activity_timer:is_enabled() then + activity_timer:kill() + end + activity_timer:resume() + end + + local open_filename = properties["stream-open-filename"] + local ytdl = open_filename and properties["demuxer-via-network"] and path ~= open_filename + if ytdl then + path = open_filename + end + + remove_thumbnail_files() + + local vid = properties["vid"] + has_vid = vid or 0 + + local args = { + mpv_path, "--no-config", "--msg-level=all=no", "--idle", "--pause", "--keep-open=always", "--really-quiet", "--no-terminal", + "--load-scripts=no", "--osc=no", "--ytdl=no", "--load-stats-overlay=no", "--load-osd-console=no", "--load-auto-profiles=no", + "--edition="..(properties["edition"] or "auto"), "--vid="..(vid or "auto"), "--no-sub", "--no-audio", + "--start="..time, allow_fast_seek and "--hr-seek=no" or "--hr-seek=yes", + "--ytdl-format=worst", "--demuxer-readahead-secs=0", "--demuxer-max-bytes=128KiB", + "--vd-lavc-skiploopfilter=all", "--vd-lavc-software-fallback=1", "--vd-lavc-fast", "--vd-lavc-threads=2", "--hwdec="..(options.hwdec and "auto" or "no"), + "--vf="..vf_string(filters_all, true), + "--sws-scaler=fast-bilinear", + "--video-rotate="..last_rotate, + "--ovc=rawvideo", "--of=image2", "--ofopts=update=1", "--o="..options.thumbnail + } + + if not pre_0_30_0 then + table.insert(args, "--sws-allow-zimg=no") + end + + if os_name == "darwin" and properties["macos-app-activation-policy"] then + table.insert(args, "--macos-app-activation-policy=accessory") + end + + if os_name == "windows" or pre_0_33_0 then + table.insert(args, "--input-ipc-server="..options.socket) + elseif not script_written then + local client_script_path = options.socket..".run" + local script = io.open(client_script_path, "w+") + if script == nil then + mp.msg.error("client script write failed") + return + else + script_written = true + script:write(string.format(client_script, options.socket)) + script:close() + subprocess({"chmod", "+x", client_script_path}, true) + table.insert(args, "--scripts="..client_script_path) + end + else + local client_script_path = options.socket..".run" + table.insert(args, "--scripts="..client_script_path) + end + + table.insert(args, "--") + table.insert(args, path) + + spawned = true + spawn_waiting = true + + subprocess(args, true, + function(success, result) + if spawn_waiting and (success == false or (result.status ~= 0 and result.status ~= -2)) then + spawned = false + spawn_waiting = false + options.tone_mapping = "no" + mp.msg.error("mpv subprocess create failed") + if not spawn_working then -- notify users of required configuration + if options.mpv_path == "mpv" then + if properties["current-vo"] == "libmpv" then + if options.mpv_path == mpv_path then -- attempt to locate ImPlay + mpv_path = "ImPlay" + spawn(time) + else -- ImPlay not in path + if os_name ~= "darwin" then + force_disabled = true + info(real_w or effective_w, real_h or effective_h) + end + mp.commandv("show-text", "thumbfast: ERROR! cannot create mpv subprocess", 5000) + mp.commandv("script-message-to", "implay", "show-message", "thumbfast initial setup", "Set mpv_path=PATH_TO_ImPlay in thumbfast config:\n" .. string.gsub(mp.command_native({"expand-path", "~~/script-opts/thumbfast.conf"}), "[/\\]", path_separator).."\nand restart ImPlay") + end + else + mp.commandv("show-text", "thumbfast: ERROR! cannot create mpv subprocess", 5000) + if os_name == "windows" then + mp.commandv("script-message-to", "mpvnet", "show-text", "thumbfast: ERROR! install standalone mpv, see README", 5000, 20) + mp.commandv("script-message", "mpv.net", "show-text", "thumbfast: ERROR! install standalone mpv, see README", 5000, 20) + end + end + else + mp.commandv("show-text", "thumbfast: ERROR! cannot create mpv subprocess", 5000) + -- found ImPlay but not defined in config + mp.commandv("script-message-to", "implay", "show-message", "thumbfast", "Set mpv_path=PATH_TO_ImPlay in thumbfast config:\n" .. string.gsub(mp.command_native({"expand-path", "~~/script-opts/thumbfast.conf"}), "[/\\]", path_separator).."\nand restart ImPlay") + end + end + elseif success == true and (result.status == 0 or result.status == -2) then + if not spawn_working and properties["current-vo"] == "libmpv" and options.mpv_path ~= mpv_path then + mp.commandv("script-message-to", "implay", "show-message", "thumbfast initial setup", "Set mpv_path=ImPlay in thumbfast config:\n" .. string.gsub(mp.command_native({"expand-path", "~~/script-opts/thumbfast.conf"}), "[/\\]", path_separator).."\nand restart ImPlay") + end + spawn_working = true + spawn_waiting = false + end + end + ) +end + +local function run(command) + if not spawned then return end + + if options.direct_io then + local hPipe = winapi.C.CreateFileW(winapi.socket_wc, winapi.GENERIC_WRITE, 0, nil, winapi.OPEN_EXISTING, winapi._createfile_pipe_flags, nil) + if hPipe ~= winapi.INVALID_HANDLE_VALUE then + local buf = command .. "\n" + winapi.C.SetNamedPipeHandleState(hPipe, winapi.PIPE_NOWAIT, nil, nil) + winapi.C.WriteFile(hPipe, buf, #buf + 1, winapi._lpNumberOfBytesWritten, nil) + winapi.C.CloseHandle(hPipe) + end + + return + end + + local command_n = command.."\n" + + if os_name == "windows" then + if file and file_bytes + #command_n >= 4096 then + file:close() + file = nil + file_bytes = 0 + end + if not file then + file = io.open("\\\\.\\pipe\\"..options.socket, "r+b") + end + elseif pre_0_33_0 then + subprocess({"/usr/bin/env", "sh", "-c", "echo '" .. command .. "' | socat - " .. options.socket}) + return + elseif not file then + file = io.open(options.socket, "r+") + end + if file then + file_bytes = file:seek("end") + file:write(command_n) + file:flush() + end +end + +local function draw(w, h, script) + if not w or not show_thumbnail then return end + if x ~= nil then + if pre_0_30_0 then + mp.command_native({"overlay-add", options.overlay_id, x, y, options.thumbnail..".bgra", 0, "bgra", w, h, (4*w)}) + else + mp.command_native_async({"overlay-add", options.overlay_id, x, y, options.thumbnail..".bgra", 0, "bgra", w, h, (4*w)}, function() end) + end + elseif script then + local json, err = mp.utils.format_json({width=w, height=h, x=x, y=y, socket=options.socket, thumbnail=options.thumbnail, overlay_id=options.overlay_id}) + mp.commandv("script-message-to", script, "thumbfast-render", json) + end +end + +local function real_res(req_w, req_h, filesize) + local count = filesize / 4 + local diff = (req_w * req_h) - count + + if (properties["video-params"] and properties["video-params"]["rotate"] or 0) % 180 == 90 then + req_w, req_h = req_h, req_w + end + + if diff == 0 then + return req_w, req_h + else + local threshold = 5 -- throw out results that change too much + local long_side, short_side = req_w, req_h + if req_h > req_w then + long_side, short_side = req_h, req_w + end + for a = short_side, short_side - threshold, -1 do + if count % a == 0 then + local b = count / a + if long_side - b < threshold then + if req_h < req_w then return b, a else return a, b end + end + end + end + return nil + end +end + +local function move_file(from, to) + if os_name == "windows" then + os.remove(to) + end + -- move the file because it can get overwritten while overlay-add is reading it, and crash the player + os.rename(from, to) +end + +local function seek(fast) + if last_seek_time then + run("async seek " .. last_seek_time .. (fast and " absolute+keyframes" or " absolute+exact")) + end +end + +local seek_period = 3/60 +local seek_period_counter = 0 +local seek_timer +seek_timer = mp.add_periodic_timer(seek_period, function() + if seek_period_counter == 0 then + seek(allow_fast_seek) + seek_period_counter = 1 + else + if seek_period_counter == 2 then + if allow_fast_seek then + seek_timer:kill() + seek() + end + else seek_period_counter = seek_period_counter + 1 end + end +end) +seek_timer:kill() + +local function request_seek() + if seek_timer:is_enabled() then + seek_period_counter = 0 + else + seek_timer:resume() + seek(allow_fast_seek) + seek_period_counter = 1 + end +end + +local function check_new_thumb() + -- the slave might start writing to the file after checking existance and + -- validity but before actually moving the file, so move to a temporary + -- location before validity check to make sure everything stays consistant + -- and valid thumbnails don't get overwritten by invalid ones + local tmp = options.thumbnail..".tmp" + move_file(options.thumbnail, tmp) + local finfo = mp.utils.file_info(tmp) + if not finfo then return false end + spawn_waiting = false + local w, h = real_res(effective_w, effective_h, finfo.size) + if w then -- only accept valid thumbnails + move_file(tmp, options.thumbnail..".bgra") + + real_w, real_h = w, h + if real_w and (real_w ~= last_real_w or real_h ~= last_real_h) then + last_real_w, last_real_h = real_w, real_h + info(real_w, real_h) + end + if not show_thumbnail then + file_timer:kill() + end + return true + end + + return false +end + +file_timer = mp.add_periodic_timer(file_check_period, function() + if check_new_thumb() then + draw(real_w, real_h, script_name) + end +end) +file_timer:kill() + +local function clear() + file_timer:kill() + seek_timer:kill() + if options.quit_after_inactivity > 0 then + if show_thumbnail or activity_timer:is_enabled() then + activity_timer:kill() + end + activity_timer:resume() + end + last_seek_time = nil + show_thumbnail = false + last_x = nil + last_y = nil + if script_name then return end + if pre_0_30_0 then + mp.command_native({"overlay-remove", options.overlay_id}) + else + mp.command_native_async({"overlay-remove", options.overlay_id}, function() end) + end +end + +local function quit() + activity_timer:kill() + if show_thumbnail then + activity_timer:resume() + return + end + run("quit") + spawned = false + real_w, real_h = nil, nil + clear() +end + +activity_timer = mp.add_timeout(options.quit_after_inactivity, quit) +activity_timer:kill() + +local function thumb(time, r_x, r_y, script) + if disabled then return end + + time = tonumber(time) + if time == nil then return end + + if r_x == "" or r_y == "" then + x, y = nil, nil + else + x, y = math.floor(r_x + 0.5), math.floor(r_y + 0.5) + end + + script_name = script + if last_x ~= x or last_y ~= y or not show_thumbnail then + show_thumbnail = true + last_x, last_y = x, y + draw(real_w, real_h, script) + end + + if options.quit_after_inactivity > 0 then + if show_thumbnail or activity_timer:is_enabled() then + activity_timer:kill() + end + activity_timer:resume() + end + + if time == last_seek_time then return end + last_seek_time = time + if not spawned then spawn(time) end + request_seek() + if not file_timer:is_enabled() then file_timer:resume() end +end + +local function watch_changes() + if not dirty or not properties["video-out-params"] then return end + dirty = false + + local old_w = effective_w + local old_h = effective_h + + calc_dimensions() + + local vf_reset = vf_string(filters_reset) + local rotate = properties["video-rotate"] or 0 + + local resized = old_w ~= effective_w or + old_h ~= effective_h or + last_vf_reset ~= vf_reset or + (last_rotate % 180) ~= (rotate % 180) or + par ~= last_par or last_crop ~= properties["video-crop"] + + if resized then + last_rotate = rotate + info(effective_w, effective_h) + elseif last_has_vid ~= has_vid and has_vid ~= 0 then + info(effective_w, effective_h) + end + + if spawned then + if resized then + -- mpv doesn't allow us to change output size + local seek_time = last_seek_time + run("quit") + clear() + spawned = false + spawn(seek_time or mp.get_property_number("time-pos", 0)) + file_timer:resume() + else + if rotate ~= last_rotate then + run("set video-rotate "..rotate) + end + local vf_runtime = vf_string(filters_runtime) + if vf_runtime ~= last_vf_runtime then + run("vf set "..vf_string(filters_all, true)) + last_vf_runtime = vf_runtime + end + end + else + last_vf_runtime = vf_string(filters_runtime) + end + + last_vf_reset = vf_reset + last_rotate = rotate + last_par = par + last_crop = properties["video-crop"] + last_has_vid = has_vid + + if not spawned and not disabled and options.spawn_first and resized then + spawn(mp.get_property_number("time-pos", 0)) + file_timer:resume() + end +end + +local function update_property(name, value) + properties[name] = value +end + +local function update_property_dirty(name, value) + properties[name] = value + dirty = true + if name == "tone-mapping" then + last_tone_mapping = nil + end +end + +local function update_tracklist(name, value) + -- current-tracks shim + for _, track in ipairs(value) do + if track.type == "video" and track.selected then + properties["current-tracks/video"] = track + return + end + end +end + +local function sync_changes(prop, val) + update_property(prop, val) + if val == nil then return end + + if type(val) == "boolean" then + if prop == "vid" then + has_vid = 0 + last_has_vid = 0 + info(effective_w, effective_h) + clear() + return + end + val = val and "yes" or "no" + end + + if prop == "vid" then + has_vid = 1 + end + + if not spawned then return end + + run("set "..prop.." "..val) + dirty = true +end + +local function file_load() + clear() + spawned = false + real_w, real_h = nil, nil + last_real_w, last_real_h = nil, nil + last_tone_mapping = nil + last_seek_time = nil + if info_timer then + info_timer:kill() + info_timer = nil + end + + calc_dimensions() + info(effective_w, effective_h) +end + +local function shutdown() + run("quit") + remove_thumbnail_files() + if os_name ~= "windows" then + os.remove(options.socket) + os.remove(options.socket..".run") + end +end + +local function on_duration(prop, val) + allow_fast_seek = (val or 30) >= 30 +end + +mp.observe_property("current-tracks/video", "native", function(name, value) + if pre_0_33_0 then + mp.unobserve_property(update_tracklist) + pre_0_33_0 = false + end + update_property(name, value) +end) + +mp.observe_property("track-list", "native", update_tracklist) +mp.observe_property("display-hidpi-scale", "native", update_property_dirty) +mp.observe_property("video-out-params", "native", update_property_dirty) +mp.observe_property("video-params", "native", update_property_dirty) +mp.observe_property("vf", "native", update_property_dirty) +mp.observe_property("tone-mapping", "native", update_property_dirty) +mp.observe_property("demuxer-via-network", "native", update_property) +mp.observe_property("stream-open-filename", "native", update_property) +mp.observe_property("macos-app-activation-policy", "native", update_property) +mp.observe_property("current-vo", "native", update_property) +mp.observe_property("video-rotate", "native", update_property) +mp.observe_property("video-crop", "native", update_property) +mp.observe_property("path", "native", update_property) +mp.observe_property("vid", "native", sync_changes) +mp.observe_property("edition", "native", sync_changes) +mp.observe_property("duration", "native", on_duration) + +mp.register_script_message("thumb", thumb) +mp.register_script_message("clear", clear) + +mp.register_event("file-loaded", file_load) +mp.register_event("shutdown", shutdown) + +mp.register_idle(watch_changes) diff --git a/docs/static/tutorials/mpv/portable_config/scripts/trackselect.lua b/docs/static/tutorials/mpv/portable_config/scripts/trackselect.lua new file mode 100644 index 000000000..9a05a759b --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/trackselect.lua @@ -0,0 +1,224 @@ +-- trackselect.lua +-- +-- Because --slang isn't smart enough. +-- +-- This script tries to select non-dub +-- audio and subtitle tracks. +-- Idea from https://github.com/siikamiika/scripts/blob/master/mpv%20scripts/dualaudiofix.lua + +local defaults = { + audio = { + selected = nil, + best = {}, + lang_score = nil, + channels_score = -math.huge, + preferred = "jpn/japanese", + excluded = "", + expected = "", + id = "" + }, + video = { + selected = nil, + best = {}, + lang_score = nil, + preferred = "", + excluded = "", + expected = "", + id = "" + }, + sub = { + selected = nil, + best = {}, + lang_score = nil, + preferred = "eng", + excluded = "sign", + expected = "", + id = "" + } +} + +local options = { + enabled = true, + + -- Do track selection synchronously, plays nicer with other scripts + hook = true, + + -- Mimic mpv's track list fingerprint to preserve user-selected tracks across files + fingerprint = true, + + -- Override user's explicit track selection + force = false, + + -- Try to re-select the last track if mpv cannot do it e.g. when fingerprint changes + smart_keep = false +} + +for _type, track in pairs(defaults) do + options["preferred_" .. _type .. "_lang"] = track.preferred + options["excluded_" .. _type .. "_words"] = track.excluded + options["expected_" .. _type .. "_words"] = track.expected +end + +options["preferred_audio_channels"] = "" + +local tracks = {} +local last = {} +local fingerprint = "" + +mp.options = require "mp.options" + +function contains(track, words, attr) + if not track[attr] then return false end + local i = 0 + if track.external then + i = 1 + end + for word in string.gmatch(words:lower(), "([^/]+)") do + i = i - 1 + if string.match(tostring(track[attr] or ""):lower(), word) then + return i + end + end + return false +end + +function preferred(track, words, attr, title) + local score = contains(track, words, attr) + if not score then + if tracks[track.type][title] == nil then + tracks[track.type][title] = -math.huge + return true + end + return false + end + if tracks[track.type][title] == nil or score > tracks[track.type][title] then + tracks[track.type][title] = score + return true + end + return false +end + +function preferred_or_equals(track, words, attr, title) + local score = contains(track, words, attr) + if not score then + if tracks[track.type][title] == nil or tracks[track.type][title] == -math.huge then + return true + end + return false + end + if tracks[track.type][title] == nil or score >= tracks[track.type][title] then + return true + end + return false +end + +function copy(obj) + if type(obj) ~= "table" then return obj end + local res = {} + for k, v in pairs(obj) do res[k] = copy(v) end + return res +end + +function track_layout_hash(tracklist) + local t = {} + for _, track in ipairs(tracklist) do + t[#t+1] = string.format("%s-%d-%s-%s-%s-%s", track.type, track.id, tostring(track.default), tostring(track.external), track.lang or "", track.external and "" or (track.title or "")) + end + return table.concat(t, "\n") +end + +function trackselect() + mp.options.read_options(options, "trackselect") + if not options.enabled then return end + tracks = copy(defaults) + local filename = mp.get_property("filename/no-ext") + local tracklist = mp.get_property_native("track-list") + local tracklist_changed = false + local found_last = {} + if options.fingerprint then + local new_fingerprint = track_layout_hash(tracklist) + if new_fingerprint == fingerprint then + return + end + fingerprint = new_fingerprint + tracklist_changed = true + end + for _, track in ipairs(tracklist) do + if options.smart_keep and last[track.type] ~= nil and last[track.type].lang == track.lang and last[track.type].codec == track.codec and last[track.type].external == track.external and last[track.type].title == track.title then + tracks[track.type].best = track + options["preferred_" .. track.type .. "_lang"] = "" + options["excluded_" .. track.type .. "_words"] = "" + options["expected_" .. track.type .. "_words"] = "" + options["preferred_" .. track.type .. "_channels"] = "" + found_last[track.type] = true + elseif not options.force and (tracklist_changed or not options.fingerprint) then + if tracks[track.type].id == "" then + tracks[track.type].id = mp.get_property(track.type:sub(1, 1) .. "id", "auto") + end + if tracks[track.type].id ~= "auto" then + options["preferred_" .. track.type .. "_lang"] = "" + options["excluded_" .. track.type .. "_words"] = "" + options["expected_" .. track.type .. "_words"] = "" + options["preferred_" .. track.type .. "_channels"] = "" + end + end + if options["preferred_" .. track.type .. "_lang"] ~= "" or options["excluded_" .. track.type .. "_words"] ~= "" or options["expected_" .. track.type .. "_words"] ~= "" or (options["preferred_" .. track.type .. "_channels"] or "") ~= "" then + if track.selected then + tracks[track.type].selected = track.id + if options.smart_keep then + last[track.type] = track + end + end + if track.external then + track.title = string.gsub(string.gsub(track.title, "%W", "%%%1"), filename, "") + end + if next(tracks[track.type].best) == nil or not (tracks[track.type].best.external and tracks[track.type].best.lang ~= nil and not track.external) then + if options["excluded_" .. track.type .. "_words"] == "" or not contains(track, options["excluded_" .. track.type .. "_words"], "title") then + if options["expected_" .. track.type .. "_words"] == "" or contains(track, options["expected_" .. track.type .. "_words"], "title") then + local pass = true + local channels = false + local lang = false + if (options["preferred_" .. track.type .. "_channels"] or "") ~= "" and preferred_or_equals(track, options["preferred_" .. track.type .. "_lang"], "lang", "lang_score") then + channels = preferred(track, options["preferred_" .. track.type .. "_channels"], "demux-channel-count", "channels_score") + pass = channels + end + if options["preferred_" .. track.type .. "_lang"] ~= "" then + lang = preferred(track, options["preferred_" .. track.type .. "_lang"], "lang", "lang_score") + end + if (options["preferred_" .. track.type .. "_lang"] == "" and pass) or channels or lang or (track.external and track.lang == nil and (not tracks[track.type].best.external or tracks[track.type].best.lang == nil)) then + tracks[track.type].best = track + end + end + end + end + end + end + for _type, track in pairs(tracks) do + if next(track.best) ~= nil and track.best.id ~= track.selected then + mp.set_property(_type:sub(1, 1) .. "id", track.best.id) + if options.smart_keep and found_last[track.best.type] then + last[track.best.type] = track.best + end + end + end +end + +function selected_tracks() + local tracklist = mp.get_property_native("track-list") + last = {} + for _, track in ipairs(tracklist) do + if track.selected then + last[track.type] = track + end + end +end + +if options.hook then + mp.add_hook("on_preloaded", 50, trackselect) +else + mp.register_event("file-loaded", trackselect) +end + +if options.smart_keep then + mp.register_event("track-switched", selected_tracks) +end \ No newline at end of file diff --git a/docs/static/tutorials/mpv/portable_config/scripts/webm.lua b/docs/static/tutorials/mpv/portable_config/scripts/webm.lua new file mode 100644 index 000000000..cb868aaa1 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/scripts/webm.lua @@ -0,0 +1,3053 @@ +local mp = require("mp") +local assdraw = require("mp.assdraw") +local msg = require("mp.msg") +local utils = require("mp.utils") +local mpopts = require("mp.options") +local options = { + -- Defaults to shift+w + keybind = "W", + -- If empty, saves on the same directory of the playing video. + -- A starting "~" will be replaced by the home dir. + -- This field is delimited by double-square-brackets - [[ and ]] - instead of + -- quotes, because Windows users might run into a issue when using + -- backslashes as a path separator. Examples of valid inputs for this field + -- would be: [[]] (the default, empty value), [[C:\Users\John]] (on Windows), + -- and [[/home/john]] (on Unix-like systems eg. Linux). + -- The [[]] delimiter is not needed when using from a configuration file + -- in the script-opts folder. + output_directory = [[]], + run_detached = false, + -- Template string for the output file + -- %f - Filename, with extension + -- %F - Filename, without extension + -- %T - Media title, if it exists, or filename, with extension (useful for some streams, such as YouTube). + -- %s, %e - Start and end time, with milliseconds + -- %S, %E - Start and end time, without milliseconds + -- %M - "-audio", if audio is enabled, empty otherwise + -- %R - "-(height)p", where height is the video's height, or scale_height, if it's enabled. + -- More specifiers are supported, see https://mpv.io/manual/master/#options-screenshot-template + -- Property expansion is supported (with %{} at top level, ${} when nested), see https://mpv.io/manual/master/#property-expansion + output_template = "%F-[%s-%e]%M", + -- Scale video to a certain height, keeping the aspect ratio. -1 disables it. + scale_height = -1, + -- Change the FPS of the output video, dropping or duplicating frames as needed. + -- -1 means the FPS will be unchanged from the source. + fps = -1, + -- Target filesize, in kB. This will be used to calculate the bitrate + -- used on the encode. If this is set to <= 0, the video bitrate will be set + -- to 0, which might enable constant quality modes, depending on the + -- video codec that's used (VP8 and VP9, for example). + target_filesize = 2500, + -- If true, will use stricter flags to ensure the resulting file doesn't + -- overshoot the target filesize. Not recommended, as constrained quality + -- mode should work well, unless you're really having trouble hitting + -- the target size. + strict_filesize_constraint = false, + strict_bitrate_multiplier = 0.95, + -- In kilobits. + strict_audio_bitrate = 64, + -- Sets the output format, from a few predefined ones. + -- Currently we have: + -- av1 + -- hevc + -- webm-vp9 (libvpx-vp9/libopus) + -- avc (h264/AAC) + -- avc-nvenc (h264-NVENC/AAC) + -- webm-vp8 (libvpx/libvorbis) + -- gif + -- mp3 (libmp3lame) + -- and raw (rawvideo/pcm_s16le). + output_format = "webm-vp8", + twopass = true, + -- If set, applies the video filters currently used on the playback to the encode. + apply_current_filters = true, + -- If set, writes the video's filename to the "Title" field on the metadata. + write_filename_on_metadata = false, + -- Set the number of encoding threads, for codecs libvpx and libvpx-vp9 + threads = 4, + additional_flags = "", + -- Constant Rate Factor (CRF). The value meaning and limits may change, + -- from codec to codec. Set to -1 to disable. + crf = 10, + -- Useful for flags that may impact output filesize, such as qmin, qmax etc + -- Won't be applied when strict_filesize_constraint is on. + non_strict_additional_flags = "", + -- Display the encode progress, in %. Requires run_detached to be disabled. + -- On Windows, it shows a cmd popup. "auto" will display progress on non-Windows platforms. + display_progress = "auto", + -- The font size used in the menu. Isn't used for the notifications (started encode, finished encode etc) + font_size = 28, + margin = 10, + message_duration = 5, + -- gif dither mode, 0-5 for bayer w/ bayer_scale 0-5, 6 for paletteuse default (sierra2_4a) + gif_dither = 2, + -- Force square pixels on output video + -- Some players like recent Firefox versions display videos with non-square pixels with wrong aspect ratio + force_square_pixels = false, +} + +mpopts.read_options(options) +local base64_chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + +-- encoding +function base64_encode(data) + return ((data:gsub('.', function(x) + local r,b='',x:byte() + for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end + return r; + end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) + if (#x < 6) then return '' end + local c=0 + for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end + return base64_chars:sub(c+1,c+1) + end)..({ '', '==', '=' })[#data%3+1]) +end + +-- decoding +function base64_decode(data) + data = string.gsub(data, '[^'..base64_chars..'=]', '') + return (data:gsub('.', function(x) + if (x == '=') then return '' end + local r,f='',(base64_chars:find(x)-1) + for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end + return r; + end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) + if (#x ~= 8) then return '' end + local c=0 + for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end + return string.char(c) + end)) +end +local emit_event +emit_event = function(event_name, ...) + return mp.commandv("script-message", "webm-" .. tostring(event_name), ...) +end +local test_set_options +test_set_options = function(new_options_json) + local new_options = utils.parse_json(new_options_json) + for k, v in pairs(new_options) do + options[k] = v + end +end +mp.register_script_message("mpv-webm-set-options", test_set_options) +local bold +bold = function(text) + return "{\\b1}" .. tostring(text) .. "{\\b0}" +end +local message +message = function(text, duration) + local ass = mp.get_property_osd("osd-ass-cc/0") + ass = ass .. text + return mp.osd_message(ass, duration or options.message_duration) +end +local append +append = function(a, b) + for _, val in ipairs(b) do + a[#a + 1] = val + end + return a +end +local seconds_to_time_string +seconds_to_time_string = function(seconds, no_ms, full) + if seconds < 0 then + return "unknown" + end + local ret = "" + if not (no_ms) then + ret = string.format(".%03d", seconds * 1000 % 1000) + end + ret = string.format("%02d:%02d%s", math.floor(seconds / 60) % 60, math.floor(seconds) % 60, ret) + if full or seconds > 3600 then + ret = string.format("%d:%s", math.floor(seconds / 3600), ret) + end + return ret +end +local seconds_to_path_element +seconds_to_path_element = function(seconds, no_ms, full) + local time_string = seconds_to_time_string(seconds, no_ms, full) + local _ + time_string, _ = time_string:gsub(":", ".") + return time_string +end +local file_exists +file_exists = function(name) + local info, err = utils.file_info(name) + if info ~= nil then + return true + end + return false +end +local expand_properties +expand_properties = function(text, magic) + if magic == nil then + magic = "$" + end + for prefix, raw, prop, colon, fallback, closing in text:gmatch("%" .. magic .. "{([?!]?)(=?)([^}:]*)(:?)([^}]*)(}*)}") do + local err + local prop_value + local compare_value + local original_prop = prop + local get_property = mp.get_property_osd + if raw == "=" then + get_property = mp.get_property + end + if prefix ~= "" then + for actual_prop, compare in prop:gmatch("(.-)==(.*)") do + prop = actual_prop + compare_value = compare + end + end + if colon == ":" then + prop_value, err = get_property(prop, fallback) + else + prop_value, err = get_property(prop, "(error)") + end + prop_value = tostring(prop_value) + if prefix == "?" then + if compare_value == nil then + prop_value = err == nil and fallback .. closing or "" + else + prop_value = prop_value == compare_value and fallback .. closing or "" + end + prefix = "%" .. prefix + elseif prefix == "!" then + if compare_value == nil then + prop_value = err ~= nil and fallback .. closing or "" + else + prop_value = prop_value ~= compare_value and fallback .. closing or "" + end + else + prop_value = prop_value .. closing + end + if colon == ":" then + local _ + text, _ = text:gsub("%" .. magic .. "{" .. prefix .. raw .. original_prop:gsub("%W", "%%%1") .. ":" .. fallback:gsub("%W", "%%%1") .. closing .. "}", expand_properties(prop_value)) + else + local _ + text, _ = text:gsub("%" .. magic .. "{" .. prefix .. raw .. original_prop:gsub("%W", "%%%1") .. closing .. "}", prop_value) + end + end + return text +end +local format_filename +format_filename = function(startTime, endTime, videoFormat) + local hasAudioCodec = videoFormat.audioCodec ~= "" + local replaceFirst = { + ["%%mp"] = "%%mH.%%mM.%%mS", + ["%%mP"] = "%%mH.%%mM.%%mS.%%mT", + ["%%p"] = "%%wH.%%wM.%%wS", + ["%%P"] = "%%wH.%%wM.%%wS.%%wT" + } + local replaceTable = { + ["%%wH"] = string.format("%02d", math.floor(startTime / (60 * 60))), + ["%%wh"] = string.format("%d", math.floor(startTime / (60 * 60))), + ["%%wM"] = string.format("%02d", math.floor(startTime / 60 % 60)), + ["%%wm"] = string.format("%d", math.floor(startTime / 60)), + ["%%wS"] = string.format("%02d", math.floor(startTime % 60)), + ["%%ws"] = string.format("%d", math.floor(startTime)), + ["%%wf"] = string.format("%s", startTime), + ["%%wT"] = string.sub(string.format("%.3f", startTime % 1), 3), + ["%%mH"] = string.format("%02d", math.floor(endTime / (60 * 60))), + ["%%mh"] = string.format("%d", math.floor(endTime / (60 * 60))), + ["%%mM"] = string.format("%02d", math.floor(endTime / 60 % 60)), + ["%%mm"] = string.format("%d", math.floor(endTime / 60)), + ["%%mS"] = string.format("%02d", math.floor(endTime % 60)), + ["%%ms"] = string.format("%d", math.floor(endTime)), + ["%%mf"] = string.format("%s", endTime), + ["%%mT"] = string.sub(string.format("%.3f", endTime % 1), 3), + ["%%f"] = mp.get_property("filename"), + ["%%F"] = mp.get_property("filename/no-ext"), + ["%%s"] = seconds_to_path_element(startTime), + ["%%S"] = seconds_to_path_element(startTime, true), + ["%%e"] = seconds_to_path_element(endTime), + ["%%E"] = seconds_to_path_element(endTime, true), + ["%%T"] = mp.get_property("media-title"), + ["%%M"] = (mp.get_property_native('aid') and not mp.get_property_native('mute') and hasAudioCodec) and '-audio' or '', + ["%%R"] = (options.scale_height ~= -1) and "-" .. tostring(options.scale_height) .. "p" or "-" .. tostring(mp.get_property_native('height')) .. "p", + ["%%mb"] = options.target_filesize / 1000, + ["%%t%%"] = "%%" + } + local filename = options.output_template + for format, value in pairs(replaceFirst) do + local _ + filename, _ = filename:gsub(format, value) + end + for format, value in pairs(replaceTable) do + local _ + filename, _ = filename:gsub(format, value) + end + if mp.get_property_bool("demuxer-via-network", false) then + local _ + filename, _ = filename:gsub("%%X{([^}]*)}", "%1") + filename, _ = filename:gsub("%%x", "") + else + local x = string.gsub(mp.get_property("stream-open-filename", ""), string.gsub(mp.get_property("filename", ""), "%W", "%%%1") .. "$", "") + local _ + filename, _ = filename:gsub("%%X{[^}]*}", x) + filename, _ = filename:gsub("%%x", x) + end + filename = expand_properties(filename, "%") + for format in filename:gmatch("%%t([aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ])") do + local _ + filename, _ = filename:gsub("%%t" .. format, os.date("%" .. format)) + end + local _ + filename, _ = filename:gsub("[<>:\"/\\|?*]", "") + return tostring(filename) .. "." .. tostring(videoFormat.outputExtension) +end +local parse_directory +parse_directory = function(dir) + local home_dir = os.getenv("HOME") + if not home_dir then + home_dir = os.getenv("USERPROFILE") + end + if not home_dir then + local drive = os.getenv("HOMEDRIVE") + local path = os.getenv("HOMEPATH") + if drive and path then + home_dir = utils.join_path(drive, path) + else + msg.warn("Couldn't find home dir.") + home_dir = "" + end + end + local _ + dir, _ = dir:gsub("^~", home_dir) + return dir +end +local is_windows = type(package) == "table" and type(package.config) == "string" and package.config:sub(1, 1) == "\\" +local trim +trim = function(s) + return s:match("^%s*(.-)%s*$") +end +local get_null_path +get_null_path = function() + if file_exists("/dev/null") then + return "/dev/null" + end + return "NUL" +end +local run_subprocess +run_subprocess = function(params) + local res = utils.subprocess(params) + msg.verbose("Command stdout: ") + msg.verbose(res.stdout) + if res.status ~= 0 then + msg.verbose("Command failed! Reason: ", res.error, " Killed by us? ", res.killed_by_us and "yes" or "no") + return false + end + return true +end +local shell_escape +shell_escape = function(args) + local ret = { } + for i, a in ipairs(args) do + local s = tostring(a) + if string.match(s, "[^A-Za-z0-9_/:=-]") then + if is_windows then + s = '"' .. string.gsub(s, '"', '"\\""') .. '"' + else + s = "'" .. string.gsub(s, "'", "'\\''") .. "'" + end + end + table.insert(ret, s) + end + local concat = table.concat(ret, " ") + if is_windows then + concat = '"' .. concat .. '"' + end + return concat +end +local run_subprocess_popen +run_subprocess_popen = function(command_line) + local command_line_string = shell_escape(command_line) + command_line_string = command_line_string .. " 2>&1" + msg.verbose("run_subprocess_popen: running " .. tostring(command_line_string)) + return io.popen(command_line_string) +end +local calculate_scale_factor +calculate_scale_factor = function() + local baseResY = 720 + local osd_w, osd_h = mp.get_osd_size() + return osd_h / baseResY +end +local should_display_progress +should_display_progress = function() + if options.display_progress == "auto" then + return not is_windows + end + return options.display_progress +end +local reverse +reverse = function(list) + local _accum_0 = { } + local _len_0 = 1 + local _max_0 = 1 + for _index_0 = #list, _max_0 < 0 and #list + _max_0 or _max_0, -1 do + local element = list[_index_0] + _accum_0[_len_0] = element + _len_0 = _len_0 + 1 + end + return _accum_0 +end +local get_pass_logfile_path +get_pass_logfile_path = function(encode_out_path) + return tostring(encode_out_path) .. "-video-pass1.log" +end +local dimensions_changed = true +local _video_dimensions = { } +local get_video_dimensions +get_video_dimensions = function() + if not (dimensions_changed) then + return _video_dimensions + end + local video_params = mp.get_property_native("video-out-params") + if not video_params then + return nil + end + dimensions_changed = false + local keep_aspect = mp.get_property_bool("keepaspect") + local w = video_params["w"] + local h = video_params["h"] + local dw = video_params["dw"] + local dh = video_params["dh"] + if mp.get_property_number("video-rotate") % 180 == 90 then + w, h = h, w + dw, dh = dh, dw + end + _video_dimensions = { + top_left = { }, + bottom_right = { }, + ratios = { } + } + local window_w, window_h = mp.get_osd_size() + if keep_aspect then + local unscaled = mp.get_property_native("video-unscaled") + local panscan = mp.get_property_number("panscan") + local fwidth = window_w + local fheight = math.floor(window_w / dw * dh) + if fheight > window_h or fheight < h then + local tmpw = math.floor(window_h / dh * dw) + if tmpw <= window_w then + fheight = window_h + fwidth = tmpw + end + end + local vo_panscan_area = window_h - fheight + local f_w = fwidth / fheight + local f_h = 1 + if vo_panscan_area == 0 then + vo_panscan_area = window_h - fwidth + f_w = 1 + f_h = fheight / fwidth + end + if unscaled or unscaled == "downscale-big" then + vo_panscan_area = 0 + if unscaled or (dw <= window_w and dh <= window_h) then + fwidth = dw + fheight = dh + end + end + local scaled_width = fwidth + math.floor(vo_panscan_area * panscan * f_w) + local scaled_height = fheight + math.floor(vo_panscan_area * panscan * f_h) + local split_scaling + split_scaling = function(dst_size, scaled_src_size, zoom, align, pan) + scaled_src_size = math.floor(scaled_src_size * 2 ^ zoom) + align = (align + 1) / 2 + local dst_start = math.floor((dst_size - scaled_src_size) * align + pan * scaled_src_size) + if dst_start < 0 then + dst_start = dst_start + 1 + end + local dst_end = dst_start + scaled_src_size + if dst_start >= dst_end then + dst_start = 0 + dst_end = 1 + end + return dst_start, dst_end + end + local zoom = mp.get_property_number("video-zoom") + local align_x = mp.get_property_number("video-align-x") + local pan_x = mp.get_property_number("video-pan-x") + _video_dimensions.top_left.x, _video_dimensions.bottom_right.x = split_scaling(window_w, scaled_width, zoom, align_x, pan_x) + local align_y = mp.get_property_number("video-align-y") + local pan_y = mp.get_property_number("video-pan-y") + _video_dimensions.top_left.y, _video_dimensions.bottom_right.y = split_scaling(window_h, scaled_height, zoom, align_y, pan_y) + else + _video_dimensions.top_left.x = 0 + _video_dimensions.bottom_right.x = window_w + _video_dimensions.top_left.y = 0 + _video_dimensions.bottom_right.y = window_h + end + _video_dimensions.ratios.w = w / (_video_dimensions.bottom_right.x - _video_dimensions.top_left.x) + _video_dimensions.ratios.h = h / (_video_dimensions.bottom_right.y - _video_dimensions.top_left.y) + return _video_dimensions +end +local set_dimensions_changed +set_dimensions_changed = function() + dimensions_changed = true +end +local monitor_dimensions +monitor_dimensions = function() + local properties = { + "keepaspect", + "video-out-params", + "video-unscaled", + "panscan", + "video-zoom", + "video-align-x", + "video-pan-x", + "video-align-y", + "video-pan-y", + "osd-width", + "osd-height" + } + for _, p in ipairs(properties) do + mp.observe_property(p, "native", set_dimensions_changed) + end +end +local clamp +clamp = function(min, val, max) + if val <= min then + return min + end + if val >= max then + return max + end + return val +end +local clamp_point +clamp_point = function(top_left, point, bottom_right) + return { + x = clamp(top_left.x, point.x, bottom_right.x), + y = clamp(top_left.y, point.y, bottom_right.y) + } +end +local VideoPoint +do + local _class_0 + local _base_0 = { + set_from_screen = function(self, sx, sy) + local d = get_video_dimensions() + local point = clamp_point(d.top_left, { + x = sx, + y = sy + }, d.bottom_right) + self.x = math.floor(d.ratios.w * (point.x - d.top_left.x) + 0.5) + self.y = math.floor(d.ratios.h * (point.y - d.top_left.y) + 0.5) + end, + to_screen = function(self) + local d = get_video_dimensions() + return { + x = math.floor(self.x / d.ratios.w + d.top_left.x + 0.5), + y = math.floor(self.y / d.ratios.h + d.top_left.y + 0.5) + } + end + } + _base_0.__index = _base_0 + _class_0 = setmetatable({ + __init = function(self) + self.x = -1 + self.y = -1 + end, + __base = _base_0, + __name = "VideoPoint" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + VideoPoint = _class_0 +end +local Region +do + local _class_0 + local _base_0 = { + is_valid = function(self) + return self.x > -1 and self.y > -1 and self.w > -1 and self.h > -1 + end, + set_from_points = function(self, p1, p2) + self.x = math.min(p1.x, p2.x) + self.y = math.min(p1.y, p2.y) + self.w = math.abs(p1.x - p2.x) + self.h = math.abs(p1.y - p2.y) + end + } + _base_0.__index = _base_0 + _class_0 = setmetatable({ + __init = function(self) + self.x = -1 + self.y = -1 + self.w = -1 + self.h = -1 + end, + __base = _base_0, + __name = "Region" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + Region = _class_0 +end +local make_fullscreen_region +make_fullscreen_region = function() + local r = Region() + local d = get_video_dimensions() + local a = VideoPoint() + local b = VideoPoint() + local xa, ya + do + local _obj_0 = d.top_left + xa, ya = _obj_0.x, _obj_0.y + end + a:set_from_screen(xa, ya) + local xb, yb + do + local _obj_0 = d.bottom_right + xb, yb = _obj_0.x, _obj_0.y + end + b:set_from_screen(xb, yb) + r:set_from_points(a, b) + return r +end +local read_double +read_double = function(bytes) + local sign = 1 + local mantissa = bytes[2] % 2 ^ 4 + for i = 3, 8 do + mantissa = mantissa * 256 + bytes[i] + end + if bytes[1] > 127 then + sign = -1 + end + local exponent = (bytes[1] % 128) * 2 ^ 4 + math.floor(bytes[2] / 2 ^ 4) + if exponent == 0 then + return 0 + end + mantissa = (math.ldexp(mantissa, -52) + 1) * sign + return math.ldexp(mantissa, exponent - 1023) +end +local write_double +write_double = function(num) + local bytes = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + if num == 0 then + return bytes + end + local anum = math.abs(num) + local mantissa, exponent = math.frexp(anum) + exponent = exponent - 1 + mantissa = mantissa * 2 - 1 + local sign = num ~= anum and 128 or 0 + exponent = exponent + 1023 + bytes[1] = sign + math.floor(exponent / 2 ^ 4) + mantissa = mantissa * 2 ^ 4 + local currentmantissa = math.floor(mantissa) + mantissa = mantissa - currentmantissa + bytes[2] = (exponent % 2 ^ 4) * 2 ^ 4 + currentmantissa + for i = 3, 8 do + mantissa = mantissa * 2 ^ 8 + currentmantissa = math.floor(mantissa) + mantissa = mantissa - currentmantissa + bytes[i] = currentmantissa + end + return bytes +end +local FirstpassStats +do + local _class_0 + local duration_multiplier, fields_before_duration, fields_after_duration + local _base_0 = { + get_duration = function(self) + local big_endian_binary_duration = reverse(self.binary_duration) + return read_double(reversed_binary_duration) / duration_multiplier + end, + set_duration = function(self, duration) + local big_endian_binary_duration = write_double(duration * duration_multiplier) + self.binary_duration = reverse(big_endian_binary_duration) + end, + _bytes_to_string = function(self, bytes) + return string.char(unpack(bytes)) + end, + as_binary_string = function(self) + local before_duration_string = self:_bytes_to_string(self.binary_data_before_duration) + local duration_string = self:_bytes_to_string(self.binary_duration) + local after_duration_string = self:_bytes_to_string(self.binary_data_after_duration) + return before_duration_string .. duration_string .. after_duration_string + end + } + _base_0.__index = _base_0 + _class_0 = setmetatable({ + __init = function(self, before_duration, duration, after_duration) + self.binary_data_before_duration = before_duration + self.binary_duration = duration + self.binary_data_after_duration = after_duration + end, + __base = _base_0, + __name = "FirstpassStats" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + local self = _class_0 + duration_multiplier = 10000000.0 + fields_before_duration = 16 + fields_after_duration = 1 + self.data_before_duration_size = function(self) + return fields_before_duration * 8 + end + self.data_after_duration_size = function(self) + return fields_after_duration * 8 + end + self.size = function(self) + return (fields_before_duration + 1 + fields_after_duration) * 8 + end + self.from_bytes = function(self, bytes) + local before_duration + do + local _accum_0 = { } + local _len_0 = 1 + local _max_0 = self:data_before_duration_size() + for _index_0 = 1, _max_0 < 0 and #bytes + _max_0 or _max_0 do + local b = bytes[_index_0] + _accum_0[_len_0] = b + _len_0 = _len_0 + 1 + end + before_duration = _accum_0 + end + local duration + do + local _accum_0 = { } + local _len_0 = 1 + local _max_0 = self:data_before_duration_size() + 8 + for _index_0 = self:data_before_duration_size() + 1, _max_0 < 0 and #bytes + _max_0 or _max_0 do + local b = bytes[_index_0] + _accum_0[_len_0] = b + _len_0 = _len_0 + 1 + end + duration = _accum_0 + end + local after_duration + do + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = self:data_before_duration_size() + 8 + 1, #bytes do + local b = bytes[_index_0] + _accum_0[_len_0] = b + _len_0 = _len_0 + 1 + end + after_duration = _accum_0 + end + return self(before_duration, duration, after_duration) + end + FirstpassStats = _class_0 +end +local read_logfile_into_stats_array +read_logfile_into_stats_array = function(logfile_path) + local file = assert(io.open(logfile_path, "rb")) + local logfile_string = base64_decode(file:read()) + file:close() + local stats_size = FirstpassStats:size() + assert(logfile_string:len() % stats_size == 0) + local stats = { } + for offset = 1, #logfile_string, stats_size do + local bytes = { + logfile_string:byte(offset, offset + stats_size - 1) + } + assert(#bytes == stats_size) + stats[#stats + 1] = FirstpassStats:from_bytes(bytes) + end + return stats +end +local write_stats_array_to_logfile +write_stats_array_to_logfile = function(stats_array, logfile_path) + local file = assert(io.open(logfile_path, "wb")) + local logfile_string = "" + for _index_0 = 1, #stats_array do + local stat = stats_array[_index_0] + logfile_string = logfile_string .. stat:as_binary_string() + end + file:write(base64_encode(logfile_string)) + return file:close() +end +local vp8_patch_logfile +vp8_patch_logfile = function(logfile_path, encode_total_duration) + local stats_array = read_logfile_into_stats_array(logfile_path) + local average_duration = encode_total_duration / (#stats_array - 1) + for i = 1, #stats_array - 1 do + stats_array[i]:set_duration(average_duration) + end + stats_array[#stats_array]:set_duration(encode_total_duration) + return write_stats_array_to_logfile(stats_array, logfile_path) +end +local formats = { } +local Format +do + local _class_0 + local _base_0 = { + getPreFilters = function(self) + return { } + end, + getPostFilters = function(self) + return { } + end, + getFlags = function(self) + return { } + end, + getCodecFlags = function(self) + local codecs = { } + if self.videoCodec ~= "" then + codecs[#codecs + 1] = "--ovc=" .. tostring(self.videoCodec) + end + if self.audioCodec ~= "" then + codecs[#codecs + 1] = "--oac=" .. tostring(self.audioCodec) + end + return codecs + end, + postCommandModifier = function(self, command, region, startTime, endTime) + return command + end + } + _base_0.__index = _base_0 + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "Basic" + self.supportsTwopass = true + self.videoCodec = "" + self.audioCodec = "" + self.outputExtension = "" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "Format" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + Format = _class_0 +end +local RawVideo +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getColorspace = function(self) + local csp = mp.get_property("colormatrix") + local _exp_0 = csp + if "bt.601" == _exp_0 then + return "bt601" + elseif "bt.709" == _exp_0 then + return "bt709" + elseif "bt.2020" == _exp_0 then + return "bt2020" + elseif "smpte-240m" == _exp_0 then + return "smpte240m" + else + msg.info("Warning, unknown colorspace " .. tostring(csp) .. " detected, using bt.601.") + return "bt601" + end + end, + getPostFilters = function(self) + return { + "format=yuv444p16", + "lavfi-scale=in_color_matrix=" .. self:getColorspace(), + "format=bgr24" + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "Raw" + self.supportsTwopass = false + self.videoCodec = "rawvideo" + self.audioCodec = "pcm_s16le" + self.outputExtension = "avi" + self.acceptsBitrate = false + end, + __base = _base_0, + __name = "RawVideo", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + RawVideo = _class_0 +end +formats["raw"] = RawVideo() +local WebmVP8 +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getPreFilters = function(self) + local colormatrixFilter = { + ["bt.709"] = "bt709", + ["bt.2020"] = "bt2020", + ["smpte-240m"] = "smpte240m" + } + local ret = { } + local colormatrix = mp.get_property_native("video-params/colormatrix") + if colormatrixFilter[colormatrix] then + append(ret, { + "lavfi-colormatrix=" .. tostring(colormatrixFilter[colormatrix]) .. ":bt601" + }) + end + return ret + end, + getFlags = function(self) + return { + "--ovcopts-add=threads=" .. tostring(options.threads), + "--ovcopts-add=auto-alt-ref=1", + "--ovcopts-add=lag-in-frames=25", + "--ovcopts-add=quality=good", + "--ovcopts-add=cpu-used=0" + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "WebM" + self.supportsTwopass = true + self.videoCodec = "libvpx" + self.audioCodec = "libvorbis" + self.outputExtension = "webm" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "WebmVP8", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + WebmVP8 = _class_0 +end +formats["webm-vp8"] = WebmVP8() +local WebmVP9 +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getFlags = function(self) + return { + "--ovcopts-add=threads=" .. tostring(options.threads) + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "WebM (VP9)" + self.supportsTwopass = false + self.videoCodec = "libvpx-vp9" + self.audioCodec = "libopus" + self.outputExtension = "webm" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "WebmVP9", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + WebmVP9 = _class_0 +end +formats["webm-vp9"] = WebmVP9() +local AVC +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getFlags = function(self) + return { + "--ovcopts-add=threads=" .. tostring(options.threads) + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "AVC (h264/AAC)" + self.supportsTwopass = true + self.videoCodec = "libx264" + self.audioCodec = "aac" + self.outputExtension = "mp4" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "AVC", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + AVC = _class_0 +end +formats["avc"] = AVC() +local AVCNVENC +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getFlags = function(self) + return { + "--ovcopts-add=bf=0" + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "AVC (h264-NVENC/AAC)" + self.supportsTwopass = true + self.videoCodec = "h264_nvenc" + self.audioCodec = "aac" + self.outputExtension = "mp4" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "AVCNVENC", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + AVCNVENC = _class_0 +end +formats["avc-nvenc"] = AVCNVENC() +local AV1 +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getFlags = function(self) + return { + "--ovcopts-add=threads=" .. tostring(options.threads) + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "AV1" + self.supportsTwopass = true + self.videoCodec = "libaom-av1" + self.audioCodec = "aac" + self.outputExtension = "mp4" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "AV1", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + AV1 = _class_0 +end +formats["av1"] = AV1() +local HEVC +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + getFlags = function(self) + return { + "--ovcopts-add=threads=" .. tostring(options.threads) + } + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "HEVC" + self.supportsTwopass = true + self.videoCodec = "libx265" + self.audioCodec = "aac" + self.outputExtension = "mp4" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "HEVC", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + HEVC = _class_0 +end +formats["hevc"] = HEVC() +local MP3 +do + local _class_0 + local _parent_0 = Format + local _base_0 = { } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "MP3 (libmp3lame)" + self.supportsTwopass = false + self.videoCodec = "" + self.audioCodec = "libmp3lame" + self.outputExtension = "mp3" + self.acceptsBitrate = true + end, + __base = _base_0, + __name = "MP3", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + MP3 = _class_0 +end +formats["mp3"] = MP3() +local GIF +do + local _class_0 + local _parent_0 = Format + local _base_0 = { + postCommandModifier = function(self, command, region, startTime, endTime) + local new_command = { } + local start_ts = seconds_to_time_string(startTime, false, true) + local end_ts = seconds_to_time_string(endTime, false, true) + start_ts = start_ts:gsub(":", "\\\\:") + end_ts = end_ts:gsub(":", "\\\\:") + local cfilter = "[vid1]trim=start=" .. tostring(start_ts) .. ":end=" .. tostring(end_ts) .. "[vidtmp];" + if mp.get_property("deinterlace") == "yes" then + cfilter = cfilter .. "[vidtmp]yadif=mode=1[vidtmp];" + end + for _, v in ipairs(command) do + local _continue_0 = false + repeat + if v:match("^%-%-vf%-add=lavfi%-scale") or v:match("^%-%-vf%-add=lavfi%-crop") or v:match("^%-%-vf%-add=fps") or v:match("^%-%-vf%-add=lavfi%-eq") then + local n = v:gsub("^%-%-vf%-add=", ""):gsub("^lavfi%-", "") + cfilter = cfilter .. "[vidtmp]" .. tostring(n) .. "[vidtmp];" + else + if v:match("^%-%-video%-rotate=90") then + cfilter = cfilter .. "[vidtmp]transpose=1[vidtmp];" + else + if v:match("^%-%-video%-rotate=270") then + cfilter = cfilter .. "[vidtmp]transpose=2[vidtmp];" + else + if v:match("^%-%-video%-rotate=180") then + cfilter = cfilter .. "[vidtmp]transpose=1[vidtmp];[vidtmp]transpose=1[vidtmp];" + else + if v:match("^%-%-deinterlace=") then + _continue_0 = true + break + else + append(new_command, { + v + }) + _continue_0 = true + break + end + end + end + end + end + _continue_0 = true + until true + if not _continue_0 then + break + end + end + cfilter = cfilter .. "[vidtmp]split[topal][vidf];" + cfilter = cfilter .. "[topal]palettegen[pal];" + cfilter = cfilter .. "[vidf]fifo[vidf];" + cfilter = cfilter .. "[vidf][pal]paletteuse=diff_mode=rectangle" + if options.gif_dither ~= 6 then + cfilter = cfilter .. ":dither=bayer:bayer_scale=" .. tostring(options.gif_dither) + end + cfilter = cfilter .. "[vo]" + append(new_command, { + "--lavfi-complex=" .. tostring(cfilter) + }) + return new_command + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.displayName = "GIF" + self.supportsTwopass = false + self.videoCodec = "gif" + self.audioCodec = "" + self.outputExtension = "gif" + self.acceptsBitrate = false + end, + __base = _base_0, + __name = "GIF", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + GIF = _class_0 +end +formats["gif"] = GIF() +local Page +do + local _class_0 + local _base_0 = { + add_keybinds = function(self) + if not self.keybinds then + return + end + for key, func in pairs(self.keybinds) do + mp.add_forced_key_binding(key, key, func, { + repeatable = true + }) + end + end, + remove_keybinds = function(self) + if not self.keybinds then + return + end + for key, _ in pairs(self.keybinds) do + mp.remove_key_binding(key) + end + end, + observe_properties = function(self) + self.sizeCallback = function() + return self:draw() + end + local properties = { + "keepaspect", + "video-out-params", + "video-unscaled", + "panscan", + "video-zoom", + "video-align-x", + "video-pan-x", + "video-align-y", + "video-pan-y", + "osd-width", + "osd-height" + } + for _index_0 = 1, #properties do + local p = properties[_index_0] + mp.observe_property(p, "native", self.sizeCallback) + end + end, + unobserve_properties = function(self) + if self.sizeCallback then + mp.unobserve_property(self.sizeCallback) + self.sizeCallback = nil + end + end, + clear = function(self) + local window_w, window_h = mp.get_osd_size() + mp.set_osd_ass(window_w, window_h, "") + return mp.osd_message("", 0) + end, + prepare = function(self) + return nil + end, + dispose = function(self) + return nil + end, + show = function(self) + if self.visible then + return + end + self.visible = true + self:observe_properties() + self:add_keybinds() + self:prepare() + self:clear() + return self:draw() + end, + hide = function(self) + if not self.visible then + return + end + self.visible = false + self:unobserve_properties() + self:remove_keybinds() + self:clear() + return self:dispose() + end, + setup_text = function(self, ass) + local scale = calculate_scale_factor() + local margin = options.margin * scale + ass:append("{\\an7}") + ass:pos(margin, margin) + return ass:append("{\\fs" .. tostring(options.font_size * scale) .. "}") + end + } + _base_0.__index = _base_0 + _class_0 = setmetatable({ + __init = function() end, + __base = _base_0, + __name = "Page" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + Page = _class_0 +end +local EncodeWithProgress +do + local _class_0 + local _parent_0 = Page + local _base_0 = { + draw = function(self) + local progress = 100 * ((self.currentTime - self.startTime) / self.duration) + local progressText = string.format("%d%%", progress) + local window_w, window_h = mp.get_osd_size() + local ass = assdraw.ass_new() + ass:new_event() + self:setup_text(ass) + ass:append("Encoding (" .. tostring(bold(progressText)) .. ")\\N") + return mp.set_osd_ass(window_w, window_h, ass.text) + end, + parseLine = function(self, line) + local matchTime = string.match(line, "Encode time[-]pos: ([0-9.]+)") + local matchExit = string.match(line, "Exiting... [(]([%a ]+)[)]") + if matchTime == nil and matchExit == nil then + return + end + if matchTime ~= nil and tonumber(matchTime) > self.currentTime then + self.currentTime = tonumber(matchTime) + end + if matchExit ~= nil then + self.finished = true + self.finishedReason = matchExit + end + end, + startEncode = function(self, command_line) + local copy_command_line + do + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #command_line do + local arg = command_line[_index_0] + _accum_0[_len_0] = arg + _len_0 = _len_0 + 1 + end + copy_command_line = _accum_0 + end + append(copy_command_line, { + '--term-status-msg=Encode time-pos: ${=time-pos}\\n' + }) + self:show() + local processFd = run_subprocess_popen(copy_command_line) + for line in processFd:lines() do + msg.verbose(string.format('%q', line)) + self:parseLine(line) + self:draw() + end + processFd:close() + self:hide() + if self.finishedReason == "End of file" then + return true + end + return false + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self, startTime, endTime) + self.startTime = startTime + self.endTime = endTime + self.duration = endTime - startTime + self.currentTime = startTime + end, + __base = _base_0, + __name = "EncodeWithProgress", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + EncodeWithProgress = _class_0 +end +local get_active_tracks +get_active_tracks = function() + local accepted = { + video = true, + audio = not mp.get_property_bool("mute"), + sub = mp.get_property_bool("sub-visibility") + } + local active = { + video = { }, + audio = { }, + sub = { } + } + for _, track in ipairs(mp.get_property_native("track-list")) do + if track["selected"] and accepted[track["type"]] then + local count = #active[track["type"]] + active[track["type"]][count + 1] = track + end + end + return active +end +local filter_tracks_supported_by_format +filter_tracks_supported_by_format = function(active_tracks, format) + local has_video_codec = format.videoCodec ~= "" + local has_audio_codec = format.audioCodec ~= "" + local supported = { + video = has_video_codec and active_tracks["video"] or { }, + audio = has_audio_codec and active_tracks["audio"] or { }, + sub = has_video_codec and active_tracks["sub"] or { } + } + return supported +end +local append_track +append_track = function(out, track) + local external_flag = { + ["audio"] = "audio-file", + ["sub"] = "sub-file" + } + local internal_flag = { + ["video"] = "vid", + ["audio"] = "aid", + ["sub"] = "sid" + } + if track['external'] and string.len(track['external-filename']) <= 2048 then + return append(out, { + "--" .. tostring(external_flag[track['type']]) .. "=" .. tostring(track['external-filename']) + }) + else + return append(out, { + "--" .. tostring(internal_flag[track['type']]) .. "=" .. tostring(track['id']) + }) + end +end +local append_audio_tracks +append_audio_tracks = function(out, tracks) + local internal_tracks = { } + for _index_0 = 1, #tracks do + local track = tracks[_index_0] + if track['external'] then + append_track(out, track) + else + append(internal_tracks, { + track + }) + end + end + if #internal_tracks > 1 then + local filter_string = "" + for _index_0 = 1, #internal_tracks do + local track = internal_tracks[_index_0] + filter_string = filter_string .. "[aid" .. tostring(track['id']) .. "]" + end + filter_string = filter_string .. "amix[ao]" + return append(out, { + "--lavfi-complex=" .. tostring(filter_string) + }) + else + if #internal_tracks == 1 then + return append_track(out, internal_tracks[1]) + end + end +end +local get_scale_filters +get_scale_filters = function() + local filters = { } + if options.force_square_pixels then + append(filters, { + "lavfi-scale=iw*sar:ih" + }) + end + if options.scale_height > 0 then + append(filters, { + "lavfi-scale=-2:" .. tostring(options.scale_height) + }) + end + return filters +end +local get_fps_filters +get_fps_filters = function() + if options.fps > 0 then + return { + "fps=" .. tostring(options.fps) + } + end + return { } +end +local get_contrast_brightness_and_saturation_filters +get_contrast_brightness_and_saturation_filters = function() + local mpv_brightness = mp.get_property("brightness") + local mpv_contrast = mp.get_property("contrast") + local mpv_saturation = mp.get_property("saturation") + if mpv_brightness == 0 and mpv_contrast == 0 and mpv_saturation == 0 then + return { } + end + local eq_saturation = (mpv_saturation + 100) / 100.0 + local eq_contrast = (mpv_contrast + 100) / 100.0 + local eq_brightness = (mpv_brightness / 50.0 + eq_contrast - 1) / 2.0 + return { + "lavfi-eq=contrast=" .. tostring(eq_contrast) .. ":saturation=" .. tostring(eq_saturation) .. ":brightness=" .. tostring(eq_brightness) + } +end +local append_property +append_property = function(out, property_name, option_name) + option_name = option_name or property_name + local prop = mp.get_property(property_name) + if prop and prop ~= "" then + return append(out, { + "--" .. tostring(option_name) .. "=" .. tostring(prop) + }) + end +end +local append_list_options +append_list_options = function(out, property_name, option_prefix) + option_prefix = option_prefix or property_name + local prop = mp.get_property_native(property_name) + if prop then + for _index_0 = 1, #prop do + local value = prop[_index_0] + append(out, { + "--" .. tostring(option_prefix) .. "-append=" .. tostring(value) + }) + end + end +end +local get_playback_options +get_playback_options = function() + local ret = { } + append_property(ret, "sub-ass-override") + append_property(ret, "sub-ass-force-style") + append_property(ret, "sub-ass-vsfilter-aspect-compat") + append_property(ret, "sub-auto") + append_property(ret, "sub-pos") + append_property(ret, "sub-delay") + append_property(ret, "video-rotate") + append_property(ret, "ytdl-format") + append_property(ret, "deinterlace") + return ret +end +local get_speed_flags +get_speed_flags = function() + local ret = { } + local speed = mp.get_property_native("speed") + if speed ~= 1 then + append(ret, { + "--vf-add=setpts=PTS/" .. tostring(speed), + "--af-add=atempo=" .. tostring(speed), + "--sub-speed=1/" .. tostring(speed) + }) + end + return ret +end +local get_metadata_flags +get_metadata_flags = function() + local title = mp.get_property("filename/no-ext") + return { + "--oset-metadata=title=%" .. tostring(string.len(title)) .. "%" .. tostring(title) + } +end +local apply_current_filters +apply_current_filters = function(filters) + local vf = mp.get_property_native("vf") + msg.verbose("apply_current_filters: got " .. tostring(#vf) .. " currently applied.") + for _index_0 = 1, #vf do + local _continue_0 = false + repeat + local filter = vf[_index_0] + msg.verbose("apply_current_filters: filter name: " .. tostring(filter['name'])) + if filter["enabled"] == false then + _continue_0 = true + break + end + local str = filter["name"] + local params = filter["params"] or { } + for k, v in pairs(params) do + str = str .. ":" .. tostring(k) .. "=%" .. tostring(string.len(v)) .. "%" .. tostring(v) + end + append(filters, { + str + }) + _continue_0 = true + until true + if not _continue_0 then + break + end + end +end +local get_video_filters +get_video_filters = function(format, region) + local filters = { } + append(filters, format:getPreFilters()) + if options.apply_current_filters then + apply_current_filters(filters) + end + if region and region:is_valid() then + append(filters, { + "lavfi-crop=" .. tostring(region.w) .. ":" .. tostring(region.h) .. ":" .. tostring(region.x) .. ":" .. tostring(region.y) + }) + end + append(filters, get_scale_filters()) + append(filters, get_fps_filters()) + append(filters, get_contrast_brightness_and_saturation_filters()) + append(filters, format:getPostFilters()) + return filters +end +local get_video_encode_flags +get_video_encode_flags = function(format, region) + local flags = { } + append(flags, get_playback_options()) + local filters = get_video_filters(format, region) + for _index_0 = 1, #filters do + local f = filters[_index_0] + append(flags, { + "--vf-add=" .. tostring(f) + }) + end + append(flags, get_speed_flags()) + return flags +end +local calculate_bitrate +calculate_bitrate = function(active_tracks, format, length) + if format.videoCodec == "" then + return nil, options.target_filesize * 8 / length + end + local video_kilobits = options.target_filesize * 8 + local audio_kilobits = nil + local has_audio_track = #active_tracks["audio"] > 0 + if options.strict_filesize_constraint and has_audio_track then + audio_kilobits = length * options.strict_audio_bitrate + video_kilobits = video_kilobits - audio_kilobits + end + local video_bitrate = math.floor(video_kilobits / length) + local audio_bitrate = audio_kilobits and math.floor(audio_kilobits / length) or nil + return video_bitrate, audio_bitrate +end +local find_path +find_path = function(startTime, endTime) + local path = mp.get_property('path') + if not path then + return nil, nil, nil, nil, nil + end + local is_stream = not file_exists(path) + local is_temporary = false + if is_stream then + if mp.get_property('file-format') == 'hls' then + path = utils.join_path(parse_directory('~'), 'cache_dump.ts') + mp.command_native({ + 'dump_cache', + seconds_to_time_string(startTime, false, true), + seconds_to_time_string(endTime + 5, false, true), + path + }) + endTime = endTime - startTime + startTime = 0 + is_temporary = true + end + end + return path, is_stream, is_temporary, startTime, endTime +end +local encode +encode = function(region, startTime, endTime) + local format = formats[options.output_format] + local originalStartTime = startTime + local originalEndTime = endTime + local path, is_stream, is_temporary + path, is_stream, is_temporary, startTime, endTime = find_path(startTime, endTime) + if not path then + message("No file is being played") + return + end + local command = { + "mpv", + path, + "--start=" .. seconds_to_time_string(startTime, false, true), + "--end=" .. seconds_to_time_string(endTime, false, true), + "--loop-file=no", + "--no-pause" + } + append(command, format:getCodecFlags()) + local active_tracks = get_active_tracks() + local supported_active_tracks = filter_tracks_supported_by_format(active_tracks, format) + for track_type, tracks in pairs(supported_active_tracks) do + if track_type == "audio" then + append_audio_tracks(command, tracks) + else + for _index_0 = 1, #tracks do + local track = tracks[_index_0] + append_track(command, track) + end + end + end + for track_type, tracks in pairs(supported_active_tracks) do + local _continue_0 = false + repeat + if #tracks > 0 then + _continue_0 = true + break + end + local _exp_0 = track_type + if "video" == _exp_0 then + append(command, { + "--vid=no" + }) + elseif "audio" == _exp_0 then + append(command, { + "--aid=no" + }) + elseif "sub" == _exp_0 then + append(command, { + "--sid=no" + }) + end + _continue_0 = true + until true + if not _continue_0 then + break + end + end + if format.videoCodec ~= "" then + append(command, get_video_encode_flags(format, region)) + end + append(command, format:getFlags()) + if options.write_filename_on_metadata then + append(command, get_metadata_flags()) + end + if format.acceptsBitrate then + if options.target_filesize > 0 then + local length = endTime - startTime + local video_bitrate, audio_bitrate = calculate_bitrate(supported_active_tracks, format, length) + if video_bitrate then + append(command, { + "--ovcopts-add=b=" .. tostring(video_bitrate) .. "k" + }) + end + if audio_bitrate then + append(command, { + "--oacopts-add=b=" .. tostring(audio_bitrate) .. "k" + }) + end + if options.strict_filesize_constraint then + local type = format.videoCodec ~= "" and "ovc" or "oac" + append(command, { + "--" .. tostring(type) .. "opts-add=minrate=" .. tostring(bitrate) .. "k", + "--" .. tostring(type) .. "opts-add=maxrate=" .. tostring(bitrate) .. "k" + }) + end + else + local type = format.videoCodec ~= "" and "ovc" or "oac" + append(command, { + "--" .. tostring(type) .. "opts-add=b=0" + }) + end + end + for token in string.gmatch(options.additional_flags, "[^%s]+") do + command[#command + 1] = token + end + if not options.strict_filesize_constraint then + for token in string.gmatch(options.non_strict_additional_flags, "[^%s]+") do + command[#command + 1] = token + end + if options.crf >= 0 then + append(command, { + "--ovcopts-add=crf=" .. tostring(options.crf) + }) + end + end + local dir = "" + if is_stream then + dir = parse_directory("~") + else + local _ + dir, _ = utils.split_path(path) + end + if options.output_directory ~= "" then + dir = parse_directory(options.output_directory) + end + local formatted_filename = format_filename(originalStartTime, originalEndTime, format) + local out_path = utils.join_path(dir, formatted_filename) + append(command, { + "--o=" .. tostring(out_path) + }) + emit_event("encode-started") + if options.twopass and format.supportsTwopass and not is_stream then + local first_pass_cmdline + do + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #command do + local arg = command[_index_0] + _accum_0[_len_0] = arg + _len_0 = _len_0 + 1 + end + first_pass_cmdline = _accum_0 + end + append(first_pass_cmdline, { + "--ovcopts-add=flags=+pass1" + }) + message("Starting first pass...") + msg.verbose("First-pass command line: ", table.concat(first_pass_cmdline, " ")) + local res = run_subprocess({ + args = first_pass_cmdline, + cancellable = false + }) + if not res then + message("First pass failed! Check the logs for details.") + emit_event("encode-finished", "fail") + return + end + append(command, { + "--ovcopts-add=flags=+pass2" + }) + if format.videoCodec == "libvpx" then + msg.verbose("Patching libvpx pass log file...") + vp8_patch_logfile(get_pass_logfile_path(out_path), endTime - startTime) + end + end + command = format:postCommandModifier(command, region, startTime, endTime) + msg.info("Encoding to", out_path) + msg.verbose("Command line:", table.concat(command, " ")) + if options.run_detached then + message("Started encode, process was detached.") + return utils.subprocess_detached({ + args = command + }) + else + local res = false + if not should_display_progress() then + message("Started encode...") + res = run_subprocess({ + args = command, + cancellable = false + }) + else + local ewp = EncodeWithProgress(startTime, endTime) + res = ewp:startEncode(command) + end + if res then + message("Encoded successfully! Saved to\\N" .. tostring(bold(out_path))) + emit_event("encode-finished", "success") + else + message("Encode failed! Check the logs for details.") + emit_event("encode-finished", "fail") + end + os.remove(get_pass_logfile_path(out_path)) + if is_temporary then + return os.remove(path) + end + end +end +local CropPage +do + local _class_0 + local _parent_0 = Page + local _base_0 = { + reset = function(self) + local dimensions = get_video_dimensions() + local xa, ya + do + local _obj_0 = dimensions.top_left + xa, ya = _obj_0.x, _obj_0.y + end + self.pointA:set_from_screen(xa, ya) + local xb, yb + do + local _obj_0 = dimensions.bottom_right + xb, yb = _obj_0.x, _obj_0.y + end + self.pointB:set_from_screen(xb, yb) + if self.visible then + return self:draw() + end + end, + setPointA = function(self) + local posX, posY = mp.get_mouse_pos() + self.pointA:set_from_screen(posX, posY) + if self.visible then + return self:draw() + end + end, + setPointB = function(self) + local posX, posY = mp.get_mouse_pos() + self.pointB:set_from_screen(posX, posY) + if self.visible then + return self:draw() + end + end, + cancel = function(self) + self:hide() + return self.callback(false, nil) + end, + finish = function(self) + local region = Region() + region:set_from_points(self.pointA, self.pointB) + self:hide() + return self.callback(true, region) + end, + draw_box = function(self, ass) + local region = Region() + region:set_from_points(self.pointA:to_screen(), self.pointB:to_screen()) + local d = get_video_dimensions() + ass:new_event() + ass:append("{\\an7}") + ass:pos(0, 0) + ass:append('{\\bord0}') + ass:append('{\\shad0}') + ass:append('{\\c&H000000&}') + ass:append('{\\alpha&H77}') + ass:draw_start() + ass:rect_cw(d.top_left.x, d.top_left.y, region.x, region.y + region.h) + ass:rect_cw(region.x, d.top_left.y, d.bottom_right.x, region.y) + ass:rect_cw(d.top_left.x, region.y + region.h, region.x + region.w, d.bottom_right.y) + ass:rect_cw(region.x + region.w, region.y, d.bottom_right.x, d.bottom_right.y) + return ass:draw_stop() + end, + draw = function(self) + local window = { } + window.w, window.h = mp.get_osd_size() + local ass = assdraw.ass_new() + self:draw_box(ass) + ass:new_event() + self:setup_text(ass) + ass:append(tostring(bold('Crop:')) .. "\\N") + ass:append(tostring(bold('1:')) .. " change point A (" .. tostring(self.pointA.x) .. ", " .. tostring(self.pointA.y) .. ")\\N") + ass:append(tostring(bold('2:')) .. " change point B (" .. tostring(self.pointB.x) .. ", " .. tostring(self.pointB.y) .. ")\\N") + ass:append(tostring(bold('r:')) .. " reset to whole screen\\N") + ass:append(tostring(bold('ESC:')) .. " cancel crop\\N") + local width, height = math.abs(self.pointA.x - self.pointB.x), math.abs(self.pointA.y - self.pointB.y) + ass:append(tostring(bold('ENTER:')) .. " confirm crop (" .. tostring(width) .. "x" .. tostring(height) .. ")\\N") + return mp.set_osd_ass(window.w, window.h, ass.text) + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self, callback, region) + self.pointA = VideoPoint() + self.pointB = VideoPoint() + self.keybinds = { + ["1"] = (function() + local _base_1 = self + local _fn_0 = _base_1.setPointA + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["2"] = (function() + local _base_1 = self + local _fn_0 = _base_1.setPointB + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["r"] = (function() + local _base_1 = self + local _fn_0 = _base_1.reset + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["ESC"] = (function() + local _base_1 = self + local _fn_0 = _base_1.cancel + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["ENTER"] = (function() + local _base_1 = self + local _fn_0 = _base_1.finish + return function(...) + return _fn_0(_base_1, ...) + end + end)() + } + self:reset() + self.callback = callback + if region and region:is_valid() then + self.pointA.x = region.x + self.pointA.y = region.y + self.pointB.x = region.x + region.w + self.pointB.y = region.y + region.h + end + end, + __base = _base_0, + __name = "CropPage", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + CropPage = _class_0 +end +local Option +do + local _class_0 + local _base_0 = { + hasPrevious = function(self) + local _exp_0 = self.optType + if "bool" == _exp_0 then + return true + elseif "int" == _exp_0 then + if self.opts.min then + return self.value > self.opts.min + else + return true + end + elseif "list" == _exp_0 then + return self.value > 1 + end + end, + hasNext = function(self) + local _exp_0 = self.optType + if "bool" == _exp_0 then + return true + elseif "int" == _exp_0 then + if self.opts.max then + return self.value < self.opts.max + else + return true + end + elseif "list" == _exp_0 then + return self.value < #self.opts.possibleValues + end + end, + leftKey = function(self) + local _exp_0 = self.optType + if "bool" == _exp_0 then + self.value = not self.value + elseif "int" == _exp_0 then + self.value = self.value - self.opts.step + if self.opts.min and self.opts.min > self.value then + self.value = self.opts.min + end + elseif "list" == _exp_0 then + if self.value > 1 then + self.value = self.value - 1 + end + end + end, + rightKey = function(self) + local _exp_0 = self.optType + if "bool" == _exp_0 then + self.value = not self.value + elseif "int" == _exp_0 then + self.value = self.value + self.opts.step + if self.opts.max and self.opts.max < self.value then + self.value = self.opts.max + end + elseif "list" == _exp_0 then + if self.value < #self.opts.possibleValues then + self.value = self.value + 1 + end + end + end, + getValue = function(self) + local _exp_0 = self.optType + if "bool" == _exp_0 then + return self.value + elseif "int" == _exp_0 then + return self.value + elseif "list" == _exp_0 then + local value, _ + do + local _obj_0 = self.opts.possibleValues[self.value] + value, _ = _obj_0[1], _obj_0[2] + end + return value + end + end, + setValue = function(self, value) + local _exp_0 = self.optType + if "bool" == _exp_0 then + self.value = value + elseif "int" == _exp_0 then + self.value = value + elseif "list" == _exp_0 then + local set = false + for i, possiblePair in ipairs(self.opts.possibleValues) do + local possibleValue, _ + possibleValue, _ = possiblePair[1], possiblePair[2] + if possibleValue == value then + set = true + self.value = i + break + end + end + if not set then + return msg.warn("Tried to set invalid value " .. tostring(value) .. " to " .. tostring(self.displayText) .. " option.") + end + end + end, + getDisplayValue = function(self) + local _exp_0 = self.optType + if "bool" == _exp_0 then + return self.value and "yes" or "no" + elseif "int" == _exp_0 then + if self.opts.altDisplayNames and self.opts.altDisplayNames[self.value] then + return self.opts.altDisplayNames[self.value] + else + return tostring(self.value) + end + elseif "list" == _exp_0 then + local value, displayValue + do + local _obj_0 = self.opts.possibleValues[self.value] + value, displayValue = _obj_0[1], _obj_0[2] + end + return displayValue or value + end + end, + draw = function(self, ass, selected) + if selected then + ass:append(tostring(bold(self.displayText)) .. ": ") + else + ass:append(tostring(self.displayText) .. ": ") + end + if self:hasPrevious() then + ass:append("◀ ") + end + ass:append(self:getDisplayValue()) + if self:hasNext() then + ass:append(" ▶") + end + return ass:append("\\N") + end, + optVisible = function(self) + if self.visibleCheckFn == nil then + return true + else + return self.visibleCheckFn() + end + end + } + _base_0.__index = _base_0 + _class_0 = setmetatable({ + __init = function(self, optType, displayText, value, opts, visibleCheckFn) + self.optType = optType + self.displayText = displayText + self.opts = opts + self.value = 1 + self.visibleCheckFn = visibleCheckFn + return self:setValue(value) + end, + __base = _base_0, + __name = "Option" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + Option = _class_0 +end +local EncodeOptionsPage +do + local _class_0 + local _parent_0 = Page + local _base_0 = { + getCurrentOption = function(self) + return self.options[self.currentOption][2] + end, + leftKey = function(self) + (self:getCurrentOption()):leftKey() + return self:draw() + end, + rightKey = function(self) + (self:getCurrentOption()):rightKey() + return self:draw() + end, + prevOpt = function(self) + for i = self.currentOption - 1, 1, -1 do + if self.options[i][2]:optVisible() then + self.currentOption = i + break + end + end + return self:draw() + end, + nextOpt = function(self) + for i = self.currentOption + 1, #self.options do + if self.options[i][2]:optVisible() then + self.currentOption = i + break + end + end + return self:draw() + end, + confirmOpts = function(self) + for _, optPair in ipairs(self.options) do + local optName, opt + optName, opt = optPair[1], optPair[2] + options[optName] = opt:getValue() + end + self:hide() + return self.callback(true) + end, + cancelOpts = function(self) + self:hide() + return self.callback(false) + end, + draw = function(self) + local window_w, window_h = mp.get_osd_size() + local ass = assdraw.ass_new() + ass:new_event() + self:setup_text(ass) + ass:append(tostring(bold('Options:')) .. "\\N\\N") + for i, optPair in ipairs(self.options) do + local opt = optPair[2] + if opt:optVisible() then + opt:draw(ass, self.currentOption == i) + end + end + ass:append("\\N▲ / ▼: navigate\\N") + ass:append(tostring(bold('ENTER:')) .. " confirm options\\N") + ass:append(tostring(bold('ESC:')) .. " cancel\\N") + return mp.set_osd_ass(window_w, window_h, ass.text) + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self, callback) + self.callback = callback + self.currentOption = 1 + local scaleHeightOpts = { + possibleValues = { + { + -1, + "no" + }, + { + 144 + }, + { + 240 + }, + { + 360 + }, + { + 480 + }, + { + 540 + }, + { + 720 + }, + { + 1080 + }, + { + 1440 + }, + { + 2160 + } + } + } + local filesizeOpts = { + step = 250, + min = 0, + altDisplayNames = { + [0] = "0 (constant quality)" + } + } + local crfOpts = { + step = 1, + min = -1, + altDisplayNames = { + [-1] = "disabled" + } + } + local fpsOpts = { + possibleValues = { + { + -1, + "source" + }, + { + 15 + }, + { + 24 + }, + { + 30 + }, + { + 48 + }, + { + 50 + }, + { + 60 + }, + { + 120 + }, + { + 240 + } + } + } + local formatIds = { + "av1", + "hevc", + "webm-vp9", + "avc", + "avc-nvenc", + "webm-vp8", + "gif", + "mp3", + "raw" + } + local formatOpts = { + possibleValues = (function() + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #formatIds do + local fId = formatIds[_index_0] + _accum_0[_len_0] = { + fId, + formats[fId].displayName + } + _len_0 = _len_0 + 1 + end + return _accum_0 + end)() + } + local gifDitherOpts = { + possibleValues = { + { + 0, + "bayer_scale 0" + }, + { + 1, + "bayer_scale 1" + }, + { + 2, + "bayer_scale 2" + }, + { + 3, + "bayer_scale 3" + }, + { + 4, + "bayer_scale 4" + }, + { + 5, + "bayer_scale 5" + }, + { + 6, + "sierra2_4a" + } + } + } + self.options = { + { + "output_format", + Option("list", "Output Format", options.output_format, formatOpts) + }, + { + "twopass", + Option("bool", "Two Pass", options.twopass) + }, + { + "apply_current_filters", + Option("bool", "Apply Current Video Filters", options.apply_current_filters) + }, + { + "scale_height", + Option("list", "Scale Height", options.scale_height, scaleHeightOpts) + }, + { + "strict_filesize_constraint", + Option("bool", "Strict Filesize Constraint", options.strict_filesize_constraint) + }, + { + "write_filename_on_metadata", + Option("bool", "Write Filename on Metadata", options.write_filename_on_metadata) + }, + { + "target_filesize", + Option("int", "Target Filesize", options.target_filesize, filesizeOpts) + }, + { + "crf", + Option("int", "CRF", options.crf, crfOpts) + }, + { + "fps", + Option("list", "FPS", options.fps, fpsOpts) + }, + { + "gif_dither", + Option("list", "GIF Dither Type", options.gif_dither, gifDitherOpts, function() + return self.options[1][2]:getValue() == "gif" + end) + }, + { + "force_square_pixels", + Option("bool", "Force Square Pixels", options.force_square_pixels) + } + } + self.keybinds = { + ["LEFT"] = (function() + local _base_1 = self + local _fn_0 = _base_1.leftKey + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["RIGHT"] = (function() + local _base_1 = self + local _fn_0 = _base_1.rightKey + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["UP"] = (function() + local _base_1 = self + local _fn_0 = _base_1.prevOpt + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["DOWN"] = (function() + local _base_1 = self + local _fn_0 = _base_1.nextOpt + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["ENTER"] = (function() + local _base_1 = self + local _fn_0 = _base_1.confirmOpts + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["ESC"] = (function() + local _base_1 = self + local _fn_0 = _base_1.cancelOpts + return function(...) + return _fn_0(_base_1, ...) + end + end)() + } + end, + __base = _base_0, + __name = "EncodeOptionsPage", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + EncodeOptionsPage = _class_0 +end +local PreviewPage +do + local _class_0 + local _parent_0 = Page + local _base_0 = { + prepare = function(self) + local vf = mp.get_property_native("vf") + vf[#vf + 1] = { + name = "sub" + } + if self.region:is_valid() then + vf[#vf + 1] = { + name = "crop", + params = { + w = tostring(self.region.w), + h = tostring(self.region.h), + x = tostring(self.region.x), + y = tostring(self.region.y) + } + } + end + mp.set_property_native("vf", vf) + if self.startTime > -1 and self.endTime > -1 then + mp.set_property_native("ab-loop-a", self.startTime) + mp.set_property_native("ab-loop-b", self.endTime) + mp.set_property_native("time-pos", self.startTime) + end + return mp.set_property_native("pause", false) + end, + dispose = function(self) + mp.set_property("ab-loop-a", "no") + mp.set_property("ab-loop-b", "no") + for prop, value in pairs(self.originalProperties) do + mp.set_property_native(prop, value) + end + end, + draw = function(self) + local window_w, window_h = mp.get_osd_size() + local ass = assdraw.ass_new() + ass:new_event() + self:setup_text(ass) + ass:append("Press " .. tostring(bold('ESC')) .. " to exit preview.\\N") + return mp.set_osd_ass(window_w, window_h, ass.text) + end, + cancel = function(self) + self:hide() + return self.callback() + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self, callback, region, startTime, endTime) + self.callback = callback + self.originalProperties = { + ["vf"] = mp.get_property_native("vf"), + ["time-pos"] = mp.get_property_native("time-pos"), + ["pause"] = mp.get_property_native("pause") + } + self.keybinds = { + ["ESC"] = (function() + local _base_1 = self + local _fn_0 = _base_1.cancel + return function(...) + return _fn_0(_base_1, ...) + end + end)() + } + self.region = region + self.startTime = startTime + self.endTime = endTime + self.isLoop = false + end, + __base = _base_0, + __name = "PreviewPage", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + PreviewPage = _class_0 +end +local MainPage +do + local _class_0 + local _parent_0 = Page + local _base_0 = { + setStartTime = function(self) + self.startTime = mp.get_property_number("time-pos") + if self.visible then + self:clear() + return self:draw() + end + end, + setEndTime = function(self) + self.endTime = mp.get_property_number("time-pos") + if self.visible then + self:clear() + return self:draw() + end + end, + jumpToStartTime = function(self) + return mp.set_property("time-pos", self.startTime) + end, + jumpToEndTime = function(self) + return mp.set_property("time-pos", self.endTime) + end, + setupStartAndEndTimes = function(self) + if mp.get_property_native("duration") then + self.startTime = 0 + self.endTime = mp.get_property_native("duration") + else + self.startTime = -1 + self.endTime = -1 + end + if self.visible then + self:clear() + return self:draw() + end + end, + draw = function(self) + local window_w, window_h = mp.get_osd_size() + local ass = assdraw.ass_new() + ass:new_event() + self:setup_text(ass) + ass:append(tostring(bold('WebM maker')) .. "\\N\\N") + ass:append(tostring(bold('c:')) .. " crop\\N") + ass:append(tostring(bold('1:')) .. " set start time (current is " .. tostring(seconds_to_time_string(self.startTime)) .. ")\\N") + ass:append(tostring(bold('2:')) .. " set end time (current is " .. tostring(seconds_to_time_string(self.endTime)) .. ")\\N") + ass:append(tostring(bold('!:')) .. " jump to start time\\N") + ass:append(tostring(bold('@:')) .. " jump to end time\\N") + ass:append(tostring(bold('o:')) .. " change encode options\\N") + ass:append(tostring(bold('p:')) .. " preview\\N") + ass:append(tostring(bold('e:')) .. " encode\\N\\N") + ass:append(tostring(bold('ESC:')) .. " close\\N") + return mp.set_osd_ass(window_w, window_h, ass.text) + end, + show = function(self) + _class_0.__parent.show(self) + return emit_event("show-main-page") + end, + onUpdateCropRegion = function(self, updated, newRegion) + if updated then + self.region = newRegion + end + return self:show() + end, + crop = function(self) + self:hide() + local cropPage = CropPage((function() + local _base_1 = self + local _fn_0 = _base_1.onUpdateCropRegion + return function(...) + return _fn_0(_base_1, ...) + end + end)(), self.region) + return cropPage:show() + end, + onOptionsChanged = function(self, updated) + return self:show() + end, + changeOptions = function(self) + self:hide() + local encodeOptsPage = EncodeOptionsPage((function() + local _base_1 = self + local _fn_0 = _base_1.onOptionsChanged + return function(...) + return _fn_0(_base_1, ...) + end + end)()) + return encodeOptsPage:show() + end, + onPreviewEnded = function(self) + return self:show() + end, + preview = function(self) + self:hide() + local previewPage = PreviewPage((function() + local _base_1 = self + local _fn_0 = _base_1.onPreviewEnded + return function(...) + return _fn_0(_base_1, ...) + end + end)(), self.region, self.startTime, self.endTime) + return previewPage:show() + end, + encode = function(self) + self:hide() + if self.startTime < 0 then + message("No start time, aborting") + return + end + if self.endTime < 0 then + message("No end time, aborting") + return + end + if self.startTime >= self.endTime then + message("Start time is ahead of end time, aborting") + return + end + return encode(self.region, self.startTime, self.endTime) + end + } + _base_0.__index = _base_0 + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self) + self.keybinds = { + ["c"] = (function() + local _base_1 = self + local _fn_0 = _base_1.crop + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["1"] = (function() + local _base_1 = self + local _fn_0 = _base_1.setStartTime + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["2"] = (function() + local _base_1 = self + local _fn_0 = _base_1.setEndTime + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["!"] = (function() + local _base_1 = self + local _fn_0 = _base_1.jumpToStartTime + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["@"] = (function() + local _base_1 = self + local _fn_0 = _base_1.jumpToEndTime + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["o"] = (function() + local _base_1 = self + local _fn_0 = _base_1.changeOptions + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["p"] = (function() + local _base_1 = self + local _fn_0 = _base_1.preview + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["e"] = (function() + local _base_1 = self + local _fn_0 = _base_1.encode + return function(...) + return _fn_0(_base_1, ...) + end + end)(), + ["ESC"] = (function() + local _base_1 = self + local _fn_0 = _base_1.hide + return function(...) + return _fn_0(_base_1, ...) + end + end)() + } + self.startTime = -1 + self.endTime = -1 + self.region = Region() + end, + __base = _base_0, + __name = "MainPage", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({}, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + MainPage = _class_0 +end +monitor_dimensions() +local mainPage = MainPage() +mp.add_key_binding(options.keybind, "display-webm-encoder", (function() + local _base_0 = mainPage + local _fn_0 = _base_0.show + return function(...) + return _fn_0(_base_0, ...) + end +end)(), { + repeatable = false +}) +mp.register_event("file-loaded", (function() + local _base_0 = mainPage + local _fn_0 = _base_0.setupStartAndEndTimes + return function(...) + return _fn_0(_base_0, ...) + end +end)()) +msg.verbose("Loaded mpv-webm script!") +return emit_event("script-loaded") diff --git a/docs/static/tutorials/mpv/portable_config/shaders/nnedi3-nns256-win8x4.hook b/docs/static/tutorials/mpv/portable_config/shaders/nnedi3-nns256-win8x4.hook new file mode 100644 index 000000000..05d266f84 --- /dev/null +++ b/docs/static/tutorials/mpv/portable_config/shaders/nnedi3-nns256-win8x4.hook @@ -0,0 +1,674 @@ +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +//!DESC NNEDI3 (double_y, nns256, win8x4) +//!HOOK LUMA +//!BIND HOOKED +//!SAVE nnedi3_int +//!WHEN HOOKED.h OUTPUT.h / 0.707106 < +float nnedi3(vec4 samples[8]) { +float sum = 0.0, sumsq = 0.0; +for (int i = 0; i < 8; i++) { + sum += dot(samples[i], vec4(1.0)); + sumsq += dot(samples[i], samples[i]); +} +float mstd0 = sum / 32.0; +float mstd1 = sumsq / 32.0 - mstd0 * mstd0; +float mstd2 = mix(0.0, inversesqrt(mstd1), mstd1 >= 1.192092896e-7); +mstd1 *= mstd2; +float vsum = 0.0, wsum = 0.0, sum1, sum2; +#define T(x) intBitsToFloat(x) +#define W(i,w0,w1,w2,w3) dot(samples[i],vec4(T(w0),T(w1),T(w2),T(w3))) +#define WS(w0,w1) sum1 = exp(sum1 * mstd2 + T(w0)); sum2 = sum2 * mstd2 + T(w1); wsum += sum1; vsum += sum1*(sum2/(1.0+abs(sum2))); +sum1=W(0,1024871952,-1091961907,1049937838,1023328805)+W(1,1026430476,-1103990249,1052012307,994719130)+W(2,1041094851,-1086639391,1057524239,-1110763811)+W(3,992987016,-1085365048,1063527595,-1102193240)+W(4,1034372511,-1087585419,1061081007,1046466539)+W(5,1007997243,-1093414958,1057188600,-1131716095)+W(6,1038248733,-1100793414,-1104832955,1042167685)+W(7,1009484684,-1099588502,-1114088341,1037858632);sum2=W(0,-1122170202,-1115075619,-1113824159,1016746290)+W(1,-1117362461,1050294809,1022334174,1016781702)+W(2,-1125932452,1041506545,-1098709995,1031697879)+W(3,-1100385246,-1100233118,-1104291570,1033455014)+W(4,1020071642,-1100362988,1072797337,1050444141)+W(5,1025043913,1047005177,1053652830,-1106922881)+W(6,1017078274,1012082941,-1100425628,-1081909907)+W(7,1018043750,-1112302377,-1155649364,-1086585813);WS(-1096195455,1061976972); +sum1=W(0,-1107583849,-1094469481,1057261454,1032308806)+W(1,1045016510,-1104061589,1051975353,1046697387)+W(2,-1102048399,-1082981042,1058403546,-1093320254)+W(3,1050507709,-1086991635,1061386858,1051876218)+W(4,-1138600128,-1087760032,1052980216,-1106246183)+W(5,1004076226,-1088999402,1052828202,-1112945129)+W(6,1049677870,-1111975782,1055128500,1045880594)+W(7,-1106918697,-1089081125,1048525839,-1116677906);sum2=W(0,976892690,-1095110912,-1080663089,1075827337)+W(1,1043646796,-1114450783,-1074060607,1075290035)+W(2,-1131052969,1052886335,-1068434194,1070007941)+W(3,1047930742,-1113296119,1048011859,1046007784)+W(4,-1099144563,-1088067101,1042920440,-1090506241)+W(5,1035354913,1040578653,1058047003,-1099371585)+W(6,-1115191227,-1102673565,1057110709,-1096675048)+W(7,-1111106463,1051335047,1038060178,-1096378099);WS(-1095930303,-1128843438); +sum1=W(0,-1113225514,1000563038,1038763268,-1104281110)+W(1,1030842449,-1103461662,1052682210,-1105449143)+W(2,-1120882464,-1098779087,1055587560,-1106219642)+W(3,-1111398934,-1156245815,1046999855,-1105879965)+W(4,-1098488134,1057689814,-1090605975,1039743648)+W(5,-1098728413,1058114717,-1106232348,1030902068)+W(6,-1111237296,1041725787,-1106563184,-1111582036)+W(7,-1104159890,1046074787,-1119168797,1033984854);sum2=W(0,-1109947141,-1078961084,1053833634,1049299145)+W(1,-1087141194,-1081851502,-1102894339,1040634467)+W(2,1007133897,1057831088,1046573470,1035108031)+W(3,-1099413759,1067440534,1058568743,-1114324751)+W(4,1026690396,-1095618356,1058025266,-1094447449)+W(5,1045509921,1022398658,-1115002147,1023241606)+W(6,-1117657274,1029712906,-1109832065,987652806)+W(7,1051942463,1049871690,-1099467737,-1104714655);WS(1018627052,-1077328537); +sum1=W(0,-1107592280,-1098360952,1054425801,-1121256842)+W(1,1011043872,-1103889731,1045838144,1016847523)+W(2,-1138466445,-1088654431,1063939041,-1114759963)+W(3,1041422472,-1079526160,1057394281,-1109966789)+W(4,-1112294435,-1109020730,1061143403,-1115564074)+W(5,1012707679,-1095389295,1057286118,-1117689671)+W(6,-1150731309,-1102056896,1040465365,-1133534770)+W(7,-1118891707,-1101414784,1042544156,1028492087);sum2=W(0,-1161717665,1033867626,1028201267,-1124228530)+W(1,-1138679732,-1115218580,-1096378423,1029766795)+W(2,-1121504639,1030621655,1071708903,-1128256742)+W(3,1050854432,-1096361601,1079482342,1035298280)+W(4,-1106511096,1044499063,-1064184100,1035336882)+W(5,1030373815,-1104067382,-1089118805,-1105361644)+W(6,980628162,1040061476,1048273255,-1119150405)+W(7,1031200951,-1122098343,-1109436715,1035049634);WS(1045693694,1057374369); +sum1=W(0,1048369598,1034312519,-1131023893,-1099588978)+W(1,-1104752283,1045853799,-1098373234,1019902402)+W(2,1031950009,1057046586,-1095062180,-1105510198)+W(3,-1123958928,1065585622,-1089164628,1033283356)+W(4,-1103831441,1061666460,-1092432965,-1115031649)+W(5,-1106189273,1060939321,-1087345809,-1122647270)+W(6,-1103850789,1050689810,-1092965100,-1126666680)+W(7,-1110300085,1060417841,-1091010256,-1103574093);sum2=W(0,-1087427905,-1098709872,1072153031,-1089481634)+W(1,1058683530,-1099141199,-1088885778,1056590706)+W(2,-1081734921,1032637312,1061509476,-1092495010)+W(3,1050776004,1072181481,1071890032,1048814690)+W(4,1042479954,1036599206,1052304550,-1095810808)+W(5,1025544982,-1080357543,-1080881103,-1097308566)+W(6,-1105492903,-1113642582,1050862866,-1094462248)+W(7,1058740427,-1086527647,-1078556244,1039671439);WS(-1081549664,1060153996); +sum1=W(0,992286043,1063391104,-1087586274,-1105647870)+W(1,-1115318586,1055271797,-1095899708,1025423024)+W(2,-1105782456,1062019397,-1085498120,1033921889)+W(3,1026471870,1061503832,-1089250259,-1113405924)+W(4,-1114468402,1058772501,-1090055577,-1113674825)+W(5,1037910210,1045594046,-1102496824,-1106446561)+W(6,-1130210466,1049908468,-1103786988,-1118412923)+W(7,1043803882,1040755007,-1104619012,-1096097592);sum2=W(0,1053790549,-1080860351,-1068185653,-1082483044)+W(1,-1110257416,-1097530578,-1077346152,-1088866791)+W(2,1033688102,1041061421,1052310674,1052658871)+W(3,-1102619530,1064966059,1072556372,-1104178634)+W(4,-1117483359,1050344847,1075004369,-1108410079)+W(5,-1098152061,1040479494,1064749402,1040931499)+W(6,-1105743952,1051151965,-1110156824,-1137891932)+W(7,-1083553679,1065962098,1045213317,1053124980);WS(-1079020096,-1097079011); +sum1=W(0,-1109501731,-1096742621,1057943754,1016000225)+W(1,1033910555,-1092191510,1055662529,1020967408)+W(2,1015347636,-1089091160,1059647341,-1102027816)+W(3,-1108027795,-1087072713,1068092504,-1109882648)+W(4,1042979875,-1087558450,1059824411,-1106889398)+W(5,1019929124,-1089417126,-1117499817,-1117366414)+W(6,1040369234,-1104831498,1043480574,-1104827345)+W(7,-1134559750,-1091818621,1050143023,1049289276);sum2=W(0,1037631964,-1097479797,1051023588,1045348435)+W(1,-1105851814,1051380185,-1097950410,1028003104)+W(2,1036652885,1028410699,1034374804,-1113269608)+W(3,-1110757790,1044594400,1053237761,1041832368)+W(4,1024508007,1041068006,-1132209182,1033918380)+W(5,-1139201564,1046036650,-1088293598,-1089693526)+W(6,-1113225064,1054960427,-1081781977,-1099925151)+W(7,-1104657620,-1105334641,1065714224,-1106359824);WS(-1087384991,1052875812); +sum1=W(0,1041733252,-1109905397,1041497057,-1113613058)+W(1,-1138647561,-1104994285,1032882549,-1117825756)+W(2,1034391503,-1107522048,1050093354,-1108789794)+W(3,-1106477875,1057597757,-1091247383,1028766931)+W(4,-1100509868,1062613266,-1087942224,1042722079)+W(5,-1098694249,1055828187,-1090201627,1013355333)+W(6,-1110959830,1052485297,-1098203032,1034047139)+W(7,-1120730421,1044647290,-1100016695,1038812681);sum2=W(0,1019350107,1041831066,1051650697,-1103332568)+W(1,-1111428867,-1130655130,-1112274143,-1077765094)+W(2,1017374087,-1138336400,-1092155273,-1073481211)+W(3,-1112005123,1035402260,-1114034096,-1087514353)+W(4,1028700445,-1116945124,1045953881,1069095754)+W(5,-1112772903,1041636268,1041190902,1074086485)+W(6,1027823157,-1107238338,1049171133,1057277153)+W(7,999439052,1033528252,1027833254,-1107727987);WS(1050457727,1041689780); +sum1=W(0,-1131312139,992358355,-1092744895,1048008788)+W(1,-1116681402,1014710691,1027381214,1036450832)+W(2,1030961105,1040368912,-1089348299,1053966377)+W(3,-1140959985,-1105027369,1050737138,933247243)+W(4,1046496193,-1089290871,1038810352,1043432004)+W(5,1048638526,-1090315138,1055368676,-1119062181)+W(6,1007270019,-1098770776,1040416748,1023583738)+W(7,1049181764,-1086147588,1051301702,1037141075);sum2=W(0,-1107193278,1057496780,1072935738,-1080570956)+W(1,1019433289,1031729137,-1080020989,1054527180)+W(2,1039188525,1037283932,-1078950448,-1096917141)+W(3,-1123892633,-1086728254,-1087453268,1050123895)+W(4,1039851328,-1087309268,1051352061,1053948249)+W(5,1032631611,-1092570464,1059438018,1042769096)+W(6,1044641782,1035754242,1051006721,1029707984)+W(7,-1097026795,1063903066,1056300653,-1106545458);WS(-1084263519,-1088250567); +sum1=W(0,-1107101246,1048954180,-1118116730,-1111017296)+W(1,1049480649,-1096698757,1027018719,1043604572)+W(2,-1097447514,1059331526,-1108150329,-1098833704)+W(3,1049647488,-1119095878,-1090501921,1050343697)+W(4,-1099235545,1040553109,1044929028,-1096264890)+W(5,1018612505,1041330418,-1094468036,1044030041)+W(6,-1103944776,1040723088,1047463532,-1121471547)+W(7,1032447885,1023387386,-1106285556,-1175819022);sum2=W(0,991719940,-1157381748,-1100952734,1029794653)+W(1,1034086314,-1121095386,1027786887,1016292894)+W(2,1055828179,-1103829652,-1085350121,1067178121)+W(3,1034571486,-1100672658,-1118546758,-1098007098)+W(4,1049088345,-1090417467,1049271738,1008607005)+W(5,-1098363481,1050795943,-1140682323,-1110134488)+W(6,-1111430799,-1113801830,1035813474,-1115483467)+W(7,-1111365517,1037803588,-1164121191,-1133015817);WS(1066054400,-1125664425); +sum1=W(0,1015260777,1054574294,-1095241461,-1127045294)+W(1,-1108545200,1053284635,-1094415406,-1111343263)+W(2,1023624464,1059735702,-1088764634,1041542629)+W(3,-1109354663,1058150961,-1078845388,-1130514988)+W(4,1023465234,1058102002,-1090401103,1035892576)+W(5,-1108921531,1063397581,-1105651068,-1136829776)+W(6,-1116445024,1046571067,-1116790272,1030749305)+W(7,-1128865616,1046728251,-1104354311,-1106930027);sum2=W(0,1041565398,-1104697837,-1115419200,-1158883614)+W(1,-1103469615,1029373537,1031260861,1035036640)+W(2,1029690269,1057447179,1026403525,1034486240)+W(3,1035794320,1080145714,1043319440,1041655252)+W(4,1035452008,-1103623095,1050811672,-1114789346)+W(5,-1107146771,-1066097425,-1103531154,-1114794272)+W(6,-1124704946,-1097535851,-1090176537,1036709484)+W(7,1040850628,-1103109309,1055196268,-1102936938);WS(-1087901375,1071177135); +sum1=W(0,-1121594272,-1110224028,1030219348,994425384)+W(1,-1122618691,-1109965218,1047787782,1027034090)+W(2,-1114434254,-1120206908,-1114914192,-1106192913)+W(3,1044010486,1010935165,-1113546820,1040356168)+W(4,-1113833999,-1108541318,1046030645,-1112701798)+W(5,-1108159437,1041417229,1035224125,-1130438655)+W(6,997526195,-1109330685,1017890711,-1151173965)+W(7,-1123472883,1039497451,1022061139,-1125745551);sum2=W(0,1042217679,-1116367239,1026421701,-1140328609)+W(1,-1108814485,1042859710,1027395369,-1114630403)+W(2,1058334461,-1078638996,1028343990,-1105295199)+W(3,-1080767453,1073929687,-1097310248,1028261520)+W(4,1050991857,-1092080339,1042808122,-1122297114)+W(5,1030602271,-1116721722,1051491707,-1105219597)+W(6,1034906705,-1106162437,1024141024,997359482)+W(7,-1127683613,1035114111,-1112071525,1017171678);WS(1066545696,-1154623394); +sum1=W(0,-1105442505,-1114054203,1057182265,-1123432545)+W(1,-1115505461,-1098488296,1049322687,1010507424)+W(2,-1102287846,-1092352928,1062190966,-1097309632)+W(3,1023914903,-1089108436,1059635472,1045294808)+W(4,1021900696,-1087887754,1057132007,-1098559779)+W(5,1016559928,-1096061654,1043675118,1042399967)+W(6,-1142506442,-1097827287,1048482034,-1110816589)+W(7,-1129232035,-1095543703,1055016957,1026256390);sum2=W(0,-1094410020,1040526244,1038890507,-1120085021)+W(1,-1073520568,-1119660436,-1105577163,1014274624)+W(2,-1076806727,1072065972,1038803075,-1119386280)+W(3,1007932024,1074284701,-1096715819,1032586275)+W(4,-1129053184,1045336233,1048625414,-1148623280)+W(5,-1126774165,-1114285571,-1106066396,1033069015)+W(6,1016297320,1027498382,1035667090,-1113847206)+W(7,1026440100,-1109537500,-1128514892,1028560484);WS(1055250687,-1106970626); +sum1=W(0,1033119688,1042190962,-1096546392,-1117586055)+W(1,-1105149829,1055784922,-1103230410,-1125652468)+W(2,1043588463,1039447718,-1093610964,1035816565)+W(3,-1098690473,1060328969,-1094495495,-1103963220)+W(4,1051357302,-1105877415,-1104321127,1047255951)+W(5,-1111820283,1050469874,-1102978667,-1108600424)+W(6,1036109552,-1123255849,1034127854,-1157028943)+W(7,-1119401059,1044861546,-1097968467,1018776031);sum2=W(0,1038757267,1030211853,1033894636,-1133782171)+W(1,-1111076574,-1147844455,1039985174,-1117005539)+W(2,1036628998,1002666567,-1092985165,-1150866734)+W(3,-1107631850,-1080902130,-1084645521,1049641986)+W(4,1045867530,-1089131777,1069738325,1051354211)+W(5,-1126199158,1067727291,-1096580382,-1100550183)+W(6,1034641438,1050167793,-1100096489,-1104598763)+W(7,1014361489,-1114432338,-1100261485,1033251244);WS(1063662431,1022143153); +sum1=W(0,-1101665898,1028101088,1045825111,-1107336877)+W(1,1044567949,-1100200043,-1112112432,1049135824)+W(2,-1113912242,-1110575390,1011332621,-1117269540)+W(3,1054985008,-1090770105,1036354680,1043762234)+W(4,-1089448239,1042239925,1053092900,-1090665684)+W(5,1031890901,1034205190,1020582213,1045380738)+W(6,-1106608329,1041117720,-1122250931,-1108114694)+W(7,1016341751,1032506575,1037368233,1027635960);sum2=W(0,-1109621945,995625223,1033690799,-1127273987)+W(1,1044140338,-1125871763,-1131300267,1031533647)+W(2,1011973298,1059194369,1019603073,-1100093028)+W(3,1054192939,-1085775903,-1105557074,1049649037)+W(4,-1083519810,-1085690186,1066625604,-1099380904)+W(5,1050669158,1055305067,-1093331249,1041330252)+W(6,1015542539,-1115586758,1025625789,-1109873113)+W(7,1007706050,1024423563,-1163078190,1021669909);WS(1065395904,1046290614); +sum1=W(0,996799560,-1125542553,1038203972,-1122586727)+W(1,1015596034,1043656950,-1105153011,1036793959)+W(2,-1100668872,1056396433,-1085640859,1049715632)+W(3,-1100927819,1054862894,-1101762943,1035554923)+W(4,1043886221,-1088911438,1057024083,-1115152096)+W(5,1025322396,-1099487682,1036429768,-1122121748)+W(6,1035443240,-1105531411,1021072448,1039652277)+W(7,-1114934548,-1117673547,1035195023,1024299964);sum2=W(0,1029237671,1017509749,-1104176053,1032328729)+W(1,-1133651707,-1140172751,1038596873,1037378915)+W(2,-1114304490,1030543605,1050264307,-1104642832)+W(3,-1114162505,-1092617066,-1093179067,1049979232)+W(4,-1125875827,1051105475,1071302855,-1110244360)+W(5,-1112015576,1033357967,-1090684841,-1085540383)+W(6,1015895733,1011455075,-1100815852,-1135016203)+W(7,1035088799,-1105982664,1003487558,1015899853);WS(1058730335,1038095077); +sum1=W(0,1050009523,-1090412329,-1116071407,-1120619710)+W(1,-1156396202,1022785342,-1112028282,1033123659)+W(2,1045232946,990514519,1027669243,-1138222105)+W(3,-1123440788,1051849503,1025171300,1042856679)+W(4,994853272,1050259497,-1091444451,1043400402)+W(5,1029074928,1048747736,-1091116387,1046148791)+W(6,-1116532263,1040337077,-1095024325,1031722640)+W(7,1016043038,1047238893,-1085293672,1050565349);sum2=W(0,1046272294,1056160584,-1069609928,-1086350256)+W(1,-1119023958,1047372879,-1100807597,1012350161)+W(2,-1106071503,1066704996,1063602974,-1093103672)+W(3,-1097641458,1062851774,1071319304,-1165704932)+W(4,-1099339001,-1127558738,-1123458905,-1099266547)+W(5,-1122591395,-1095719050,1049925865,1039176837)+W(6,-1120322169,1012197993,1037702687,-1104052164)+W(7,-1112624405,-1094334166,1046841945,1043315186);WS(-1102208382,1082454872); +sum1=W(0,-1121527792,-1097489215,1044710709,1024559218)+W(1,1019782131,-1109352802,1043005718,1025756170)+W(2,-1111677734,-1089475261,1059136208,-1098383546)+W(3,1042764822,-1094323164,-1113184692,1034230961)+W(4,-1098291428,1057233791,-1102862820,-1121795355)+W(5,-1109244559,1055571354,-1113821821,1034138424)+W(6,-1122839755,1036609181,1016630678,-1148370726)+W(7,1023050790,1023873367,-1122283881,1021065311);sum2=W(0,1012975921,-1113722375,-1109752074,1009270385)+W(1,1033684352,-1113902527,-1108511603,1034062718)+W(2,-1119837718,1034379158,1047596894,-1096952633)+W(3,1048900749,1065557700,1065261424,1042274647)+W(4,-1088385914,1033601684,-1110433219,-1110816087)+W(5,-1106132930,-1078602486,-1113936114,1038223706)+W(6,-1107812043,1048231286,-1106600777,1037668398)+W(7,1047279942,-1117907500,-1110420048,-1111923151);WS(1055139903,1066543323); +sum1=W(0,-1113216706,1025777755,1062476912,-1094834883)+W(1,1034160554,-1106690282,1047449287,-1115394087)+W(2,-1110997976,1025857819,1040533578,-1100641176)+W(3,-1104052311,-1108040417,-1088276389,-1109281747)+W(4,-1130057219,1042814916,1043316038,-1111790927)+W(5,-1100344024,1058801014,-1096553156,-1131081926)+W(6,-1109060119,1040801319,1003175286,-1127882001)+W(7,-1102181302,1061190298,-1109923206,-1116502963);sum2=W(0,1032900543,-1093611286,-1093105706,-1103368978)+W(1,1026043047,-1143136704,-1104881087,996537094)+W(2,1011969739,-1129502699,1056641171,-1097512177)+W(3,1005946567,1065137024,1062580590,1038772124)+W(4,-1104378201,1034934846,-1137732946,-1108835309)+W(5,-1106573410,1044311979,-1102271464,1035638256)+W(6,-1149079854,-1128312106,-1106196955,1028654910)+W(7,-1098913457,-1107526541,-1097055308,-1144299515);WS(1037662203,-1095462961); +sum1=W(0,1051208476,1054332722,-1088537607,1009988859)+W(1,1007151360,1048962332,-1096098779,-1120684294)+W(2,1047867778,1056131053,-1089718811,1043868050)+W(3,-1120692693,1060311124,-1086623130,1008468855)+W(4,-1102286423,1053179033,-1088149909,1024446024)+W(5,1029685138,1057524976,-1093380227,1041242535)+W(6,-1117174983,1045179237,-1094989189,-1121112609)+W(7,998066935,1053688986,-1094538289,1022948968);sum2=W(0,-1075642964,1064397427,1042055631,1049259770)+W(1,-1078284587,1070403917,1050515956,-1100572061)+W(2,-1077677369,1072178178,-1094922849,1038272909)+W(3,-1086975712,1071930150,-1096417404,-1110188613)+W(4,1050575143,-1093947328,-1094640520,1033007627)+W(5,-1109971278,-1119680819,1045435393,-1109186235)+W(6,1043550667,-1134729809,-1109099138,1040318497)+W(7,1046375822,-1094009133,-1106076462,1038207101);WS(-1091974591,1028524890); +sum1=W(0,-1119527298,1050666155,-1104886813,-1119869997)+W(1,1034997099,-1101120961,-1100807815,1044100139)+W(2,-1099802012,1057798952,-1099838668,-1103774309)+W(3,1033463662,-1146674958,1021707158,-1112176434)+W(4,-1090658116,1048486316,1057612011,-1094617942)+W(5,1044419888,1054164791,-1093871840,1036492177)+W(6,-1099353751,1033437822,1029138830,-1113521820)+W(7,-1110855131,1053708795,-1104286795,1028051362);sum2=W(0,1029285075,-1114745613,1024121756,-1127985632)+W(1,-1113245689,1037297246,1034295695,-1103172653)+W(2,1046869988,-1113507597,-1081105309,-1097344586)+W(3,-1099734421,1057852752,1063764387,-1092930743)+W(4,1045806866,1031538739,-1093953622,1039548141)+W(5,-1099048447,1019950674,1060684479,-1113791115)+W(6,1040440310,1039903515,-1099720743,1024790472)+W(7,-1129472848,-1115367833,1051222485,-1106398082);WS(1058893599,-1078409713); +sum1=W(0,-1115244150,-1102829117,1039336887,-1115623287)+W(1,1036724056,-1100240992,1053376406,-1114512019)+W(2,-1098555735,-1094663483,1053054383,1041993169)+W(3,1049246955,-1084866106,1065100884,1018575674)+W(4,1045222582,-1085064800,1054590883,-1114852275)+W(5,-1138283737,-1093243506,1056764679,-1108377677)+W(6,1044966206,-1093950047,1053059489,-1118180448)+W(7,-1115412967,-1095580366,1050610273,-1122449691);sum2=W(0,-1130929736,-1101060123,1045192083,-1105822172)+W(1,1009552185,-1090337753,1061442923,-1103557108)+W(2,-1084383778,1072779570,1050903982,-1106762492)+W(3,1050909748,1053567468,-1089269841,-1117595750)+W(4,1049209322,-1079161361,1029505799,-1111371347)+W(5,-1096700837,1057662166,-1094014597,1025228376)+W(6,1051369678,-1097661058,1046387683,-1138825972)+W(7,-1129474226,-1112521942,-1105984421,1030887459);WS(-1109369595,1048740969); +sum1=W(0,1040995480,1051718495,-1091711555,-1125552391)+W(1,1030414773,1050319297,-1095167863,1032958437)+W(2,-1118646413,1059003715,-1085356599,1042985722)+W(3,1043594790,1046504696,-1083562713,1045509569)+W(4,-1129436350,-1135436979,-1096690237,1023899916)+W(5,1037121811,1043825845,-1098326935,1019546753)+W(6,1030207412,1049475887,-1120665100,-1130219052)+W(7,1043560049,1058279379,-1098718953,-1105013544);sum2=W(0,-1113177829,-1117552581,-1100446453,1041583669)+W(1,1043809265,-1109343151,1039662186,1009024316)+W(2,-1095416462,1052574118,-1114145263,-1118793923)+W(3,1034071291,1063553374,1053677817,1018689733)+W(4,-1120341831,1070912061,-1101063801,1031195477)+W(5,1043900974,-1112203792,1042882834,-1105538343)+W(6,1020015593,-1091338378,-1094258913,-1114748986)+W(7,-1119209873,-1072794661,1055602011,-1109237633);WS(-1093437503,1065718162); +sum1=W(0,1037550096,1049488055,-1103061781,-1114711965)+W(1,-1101135841,1042594425,1046266118,-1097873069)+W(2,1044878747,1049041945,-1087470164,1046063170)+W(3,-1107014286,1066142676,-1106438298,-1091362312)+W(4,1042111087,-1100146203,-1111606545,1037494709)+W(5,1037051057,1045825417,-1091131027,1040258368)+W(6,-1099961615,1040663590,-1133427370,-1109172298)+W(7,1041500301,-1119554198,-1103590594,1033770775);sum2=W(0,-1106488910,-1123106758,1050172947,-1124712996)+W(1,1026201604,-1113590739,-1092748399,1043391307)+W(2,1035711566,-1084666863,-1097703384,-1098783459)+W(3,1060425407,1061776657,-1099741350,1048423650)+W(4,-1098764525,1055047321,-1120322586,1041036039)+W(5,-1096618367,-1119175762,1050324229,-1099280352)+W(6,-1182808622,-1103500958,1025620288,1048645442)+W(7,-1127820908,1041613778,-1105222946,-1118590758);WS(1056660607,-1113798601); +sum1=W(0,-1115305597,1041913228,1012656821,1026504084)+W(1,-1101671294,1008348404,998498191,-1151777337)+W(2,1016801995,1031963795,-1102006873,1032505286)+W(3,1039904137,-1093680051,1057450908,-1108358078)+W(4,1037148876,-1089471492,1049874551,1031920291)+W(5,1040453028,1034024758,-1111681498,1043455038)+W(6,-1110559226,-1111400057,-1109457443,-1129849213)+W(7,-1154296528,1031051312,1036430914,-1125050675);sum2=W(0,1042939003,1024638457,-1123927190,998901155)+W(1,-1114796094,-1101207597,1042777565,1022659417)+W(2,1044529628,1027593065,-1098782283,1017512357)+W(3,-1124781020,-1097759574,1059165645,-1104939928)+W(4,-1106748864,-1130307786,1062760553,-1098668376)+W(5,1016881133,1033669310,1017094385,-1089791762)+W(6,-1108227590,1022409637,-1160993898,-1106217568)+W(7,1027959261,1019735589,-1125388747,-1115680109);WS(1066155712,1004288134); +sum1=W(0,1047132567,1049267618,-1089062279,-1138510971)+W(1,1029697589,1048612844,-1092380195,1046969501)+W(2,1014062303,1055750611,-1088453014,1024451359)+W(3,1041631965,1059093756,-1084647474,1049129552)+W(4,991515041,1057479944,-1091963789,1040560290)+W(5,-1123217244,1056993158,-1088742789,1043007167)+W(6,-1154741365,1047138005,-1098495965,-1122630737)+W(7,1030265807,1055767146,-1086886676,-1122583780);sum2=W(0,1011892235,1040858440,-1127819845,1010964983)+W(1,-1111382628,-1103755803,-1109875610,-1106716388)+W(2,1037768402,-1125277089,-1096621612,1032593498)+W(3,1032283234,-1084511950,-1071556311,1040462902)+W(4,-1114728106,-1090323786,-1071973667,-1100404332)+W(5,1009460031,-1159433014,-1099343032,1040394500)+W(6,-1112526532,1053584755,1076043190,1007208771)+W(7,1030203700,1052886875,1079690007,1051792925);WS(-1086041375,1049976369); +sum1=W(0,-1125608345,-1096855193,1037693680,1048607039)+W(1,1025261033,-1097190986,1051176741,1030637974)+W(2,1032012444,-1086237883,1059434222,1026121224)+W(3,1046732297,-1083643033,1062665585,-1103554484)+W(4,-1114869141,-1093631755,1052924527,-1110078044)+W(5,1036081274,-1095059844,1052562329,-1109004102)+W(6,1036645660,-1132519191,1041010310,1035782593)+W(7,-1119140736,-1095180224,1048775023,-1118200972);sum2=W(0,1029601330,-1115199196,-1096390757,-1079547524)+W(1,-1144560396,1026958814,-1100298556,-1081990625)+W(2,1032763954,1032369083,1076866217,1041174181)+W(3,-1115106220,-1106065675,-1108884178,1041059708)+W(4,-1111454114,1042189754,-1116766618,1024602232)+W(5,-1121335223,1029124674,1025985538,-1127158528)+W(6,-1109520646,1022674491,-1115268590,1007020790)+W(7,1021645795,1026253022,1011072742,1003377428);WS(-1111980027,1060626277); +sum1=W(0,1023621139,-1102882983,1044706422,1028429765)+W(1,1032179266,-1092055397,1043529367,-1113080214)+W(2,1030954414,-1089823274,1057090380,-1101761443)+W(3,1037158526,-1095093232,1064981515,-1098683411)+W(4,1036765152,-1090725010,1047303429,1033439719)+W(5,1036680203,-1139402199,1042557255,1030304674)+W(6,-1146606447,-1116432156,1028925358,-1104492078)+W(7,-1119312598,-1108873773,1041638915,-1112219839);sum2=W(0,-1107703976,1045439570,1032849260,-1122224669)+W(1,1046455264,-1090239140,-1096329612,1035962913)+W(2,-1093472442,1028879562,1030082819,-1098806672)+W(3,1048924762,1064195571,1036056807,1041148911)+W(4,-1097201227,1016778259,1059898488,-1091828205)+W(5,1049435664,1027385222,-1091675747,1041687668)+W(6,-1106239872,1028121257,1053658286,-1098243254)+W(7,-1119402461,-1105208479,-1117889585,-1104565052);WS(1062681599,1040842201); +sum1=W(0,-1108789463,-1104300209,1042117608,-1118282400)+W(1,-1115361429,1050445194,-1097788769,-1114475276)+W(2,1048981817,-1089127203,1032428200,1049574381)+W(3,-1092926921,1063952639,1049970971,-1090427073)+W(4,1054602509,1043197406,-1088418847,1045778638)+W(5,1029602904,-1106041808,1049956321,-1112080775)+W(6,-1117967305,1039191171,-1112931212,-1097758566)+W(7,1025443329,-1114238594,-1123051255,1033393295);sum2=W(0,1038735267,-1126315713,-1111714958,-1111656758)+W(1,-1100048068,1043050536,-1115313021,-1115683900)+W(2,-1115453090,1053683464,1046662525,-1093358619)+W(3,-1110884051,1058830244,1061563017,-1105966973)+W(4,-1090743949,-1100540415,1052621807,1037413595)+W(5,-1153955669,1037942519,-1104363663,-1101879362)+W(6,-1112598570,-1098889179,-1118760183,1044482581)+W(7,-1103797208,1040830228,1007755797,-1098877089);WS(1062776447,1069975051); +sum1=W(0,-1130308944,1036893844,-1104137265,-1108240801)+W(1,-1112835078,-1114635034,-1098478453,1029922778)+W(2,-1113144126,1050058840,-1104852259,-1111877761)+W(3,-1094805377,1071110128,1041368142,-1088740684)+W(4,-1098008538,1061455014,-1095764665,-1112520550)+W(5,-1114270939,1044746969,-1109080309,-1119589855)+W(6,-1117364667,1018226642,-1103882015,-1121527653)+W(7,-1117827459,1049407081,-1120810969,-1103102129);sum2=W(0,1028834725,-1113117380,1037052904,-1113210551)+W(1,-1110297977,1026197871,996515330,1032917698)+W(2,1035091068,-1099362318,1043940575,-1106692355)+W(3,1034973002,1077416661,-1069860026,-1103487680)+W(4,-1110025415,1050456944,969317772,1034055293)+W(5,-1154986018,-1112814852,1021906202,1006658352)+W(6,-1120031976,1027999489,-1115577362,1018186436)+W(7,1030684381,1016280910,1013156184,-1124181989);WS(-1082599007,-1084302409); +sum1=W(0,-1127095446,1056665680,-1087212124,1035858193)+W(1,1011517278,1052281350,-1096260148,-1128228554)+W(2,-1110892475,1058821842,-1085877656,1043137767)+W(3,1024933540,1061132051,-1087957451,1023709101)+W(4,-1111586789,1054434479,-1089270826,1037286635)+W(5,1039136849,1052720805,-1102718609,-1111842501)+W(6,-1108207315,1043783817,-1106422582,-1130056576)+W(7,1049617952,-1159632952,-1106709957,-1115207149);sum2=W(0,1048459811,-1095160239,1026509768,-1123792544)+W(1,1071226724,1065850492,1043007163,-1127547903)+W(2,1075494724,-1121381976,1043168485,1027169380)+W(3,1074401127,-1099027008,-1093896652,-1107011198)+W(4,1044864951,1031151008,1012395574,1037067951)+W(5,-1077687291,1057399482,1019701051,1021690579)+W(6,-1072311776,1045213405,-1109946848,-1124089088)+W(7,-1066953112,-1095971461,1027278540,-1166810856);WS(-1118215158,-1130722305); +sum1=W(0,1039784439,1045520358,-1094865274,966095017)+W(1,-1119983743,1040649785,-1098235299,-1166742058)+W(2,1027132090,-1126797149,-1085881139,1023429181)+W(3,-1101267710,1070303194,-1106608186,-1127173569)+W(4,-1106141431,1059129261,-1088850304,-1112024885)+W(5,-1119840977,1056727436,-1093134907,1030946302)+W(6,-1131926580,1040938982,-1098615277,-1160489077)+W(7,-1158357571,1050582583,-1104503154,-1106263629);sum2=W(0,-1122933952,1043676402,-1122578476,1034421913)+W(1,1029904221,-1092335308,-1096734640,-1121365342)+W(2,-1104768174,1050667883,-1067932755,-1103315560)+W(3,1044174015,-1106663265,1078656606,1049347404)+W(4,-1122786276,1035773679,1056344301,1027752905)+W(5,1032455763,1033986578,-1106732625,-1114333025)+W(6,-1118952582,-1123822916,1033374173,1025409455)+W(7,-1120585334,1030027555,-1116084330,-1129253837);WS(-1112296443,-1083191171); +sum1=W(0,1030599873,1049894985,-1100141489,-1124642344)+W(1,-1102688301,1052276159,-1095734081,-1114229790)+W(2,1038739494,1055519004,1044438853,1039505712)+W(3,-1091052013,1061107959,-1078809864,-1108354137)+W(4,-1120252367,1059731464,-1100785926,1037196526)+W(5,-1118018759,1052059899,-1095185489,-1129006466)+W(6,-1105737735,1050382861,-1092887220,1034647259)+W(7,1036799090,1050879021,-1113977245,-1123394945);sum2=W(0,-1134366274,1032198029,-1102569648,-1113629492)+W(1,1040286055,-1093721101,1059013351,-1099320981)+W(2,-1103185345,1064064153,-1076328416,1062572765)+W(3,-1089934078,1038410574,1075980540,-1079072621)+W(4,-1104699884,1053501328,-1081344728,1057269325)+W(5,-1135474394,1053898256,-1093863519,1039501040)+W(6,1039368980,-1088730122,1061819985,-1089994189)+W(7,984214720,1045555557,-1089334779,1050815727);WS(1051639487,-1077445112); +sum1=W(0,1023584208,-1087680633,1058381481,1019116206)+W(1,1019039018,-1097242582,1049175941,-1110819225)+W(2,1046978951,-1087958558,1059595066,1041321753)+W(3,-1114024277,-1084584703,1058705186,-1110784681)+W(4,1042440780,-1089578188,1060807824,-1120949436)+W(5,1036430651,-1090497932,1057261083,-1111841304)+W(6,1019910405,-1100840226,1047705823,-1108976675)+W(7,1017051223,-1089989738,1052092149,1037750032);sum2=W(0,-1103483317,1043027417,1043672886,-1126025102)+W(1,-1103949071,1024633771,-1105891820,-1101612494)+W(2,1036613850,1050158855,-1113242263,1051748473)+W(3,-1096200772,-1096718424,1053817256,-1144187697)+W(4,-1094761445,1057240079,1043447632,-1129269697)+W(5,-1090478844,1037855330,1053166295,-1114569970)+W(6,-1091384835,1036780676,1043680942,-1102484885)+W(7,1024429003,-1103545669,1034776200,1044262941);WS(-1102141694,1066754929); +sum1=W(0,1024767465,-1097150806,-1121670572,1047316983)+W(1,1028037205,-1105574095,1021251426,-1123186307)+W(2,-1148374821,-1092607882,1053426631,1027553675)+W(3,996156698,-1086231302,1064662112,1037457517)+W(4,1034886379,-1085570014,1060264850,-1103359865)+W(5,1011245536,-1090150659,1058905527,1031219256)+W(6,1017269224,-1093685286,1047037217,-1108923303)+W(7,1023537404,-1100403588,1048736520,1039125668);sum2=W(0,-1127568330,1005444026,-1099850392,-1069105992)+W(1,1031019669,-1121000217,1052911126,-1075891845)+W(2,1013355589,-1135062981,1040255711,1052106082)+W(3,-1123247753,-1099801823,-1120914990,1078854269)+W(4,-1131101666,1044314830,1055431083,1061745892)+W(5,-1126559289,1052295626,-1112663055,-1097592921)+W(6,-1128009624,-1112001042,1029993103,1033712114)+W(7,-1122774763,1018744598,-1105142519,1037317546);WS(-1092827839,1049601702); +sum1=W(0,-1102748075,-1114726817,1043768535,1001409895)+W(1,1048973336,-1100496851,1037939345,1025584388)+W(2,-1101661842,1056141590,-1092531310,1043222609)+W(3,1035794226,-1092935501,1048278549,1028885900)+W(4,1035295380,-1090189951,1059458263,-1097823129)+W(5,951002293,-1127762491,-1107678146,1046084402)+W(6,1028700102,-1107070641,1040739973,1018269854)+W(7,1019995195,-1116434785,-1103464157,1033486885);sum2=W(0,1047648616,-1099866854,1040911688,-1104812914)+W(1,1049954711,-1087014785,-1127547935,1032774583)+W(2,-1086499077,1059941103,1006897087,-1118719608)+W(3,1036131868,1059724034,-1147690453,-1112213150)+W(4,1021844703,-1104253425,-1094365093,1020986307)+W(5,-1144052469,-1116739540,1046092804,1037506252)+W(6,1036766656,-1123734224,-1117733622,1020773629)+W(7,-1114852932,-1119117496,1045874226,-1120467144);WS(1062974879,-1132215613); +sum1=W(0,-1181157822,-1096960767,1047884458,1046591191)+W(1,1033235448,-1103300066,1024586364,1028472621)+W(2,-1120645311,-1098273063,1040665968,1027902609)+W(3,1032693326,-1084817024,1065496294,-1105457745)+W(4,1014937094,-1086871647,1061273423,-1099580452)+W(5,1012846527,-1093312183,1057013666,-1121668195)+W(6,1029466479,-1094276984,1048826162,-1123904424)+W(7,1027727527,-1099477807,1049029078,1033797162);sum2=W(0,-1120861164,-1114727130,1051943787,1073213517)+W(1,1023555157,-1127207629,1021361633,1067585393)+W(2,-1114715157,1049207316,-1100379929,-1095215585)+W(3,1039733942,-1100512081,1049204344,-1072102567)+W(4,-1111876903,1044392032,1029680046,-1085077901)+W(5,-1121732899,-1113639142,1040523175,1017790060)+W(6,1028106223,-1107243417,-1113800818,-1115100698)+W(7,-1136150442,1035475508,1017564481,-1111101803);WS(1038961915,-1122010239); +sum1=W(0,1004620105,1048595660,-1099376311,-1116246236)+W(1,-1113106351,1052250558,-1096833644,1027857155)+W(2,-1112775210,1058549636,-1088891129,1036452944)+W(3,-1125534724,1061573929,-1086812373,1040782707)+W(4,-1137271196,1057522353,-1093214133,1018281129)+W(5,-1126589322,1048822826,-1095914356,-1113857108)+W(6,1026657556,1040718305,-1105329661,1010557432)+W(7,-1119328748,1048641524,-1103878453,-1106455448);sum2=W(0,-1116580406,1027562258,1055923683,1077914250)+W(1,1024927837,-1162615720,-1098456431,1064911462)+W(2,-1129828931,1047581344,-1107918233,-1076359256)+W(3,-1115420496,-1109513493,-1093462217,-1072190840)+W(4,1011185933,1038795182,1043574176,1023726209)+W(5,-1123989928,-1118168090,1042713369,-1114062645)+W(6,-1146345634,1030671240,-1118222006,-1119388396)+W(7,-1132229127,1038841827,1029869485,-1111766417);WS(1058520191,-1103814144); +sum1=W(0,1017038583,-1136595532,-1118053743,1027978638)+W(1,1027734728,1016280509,-1128563239,-1097122909)+W(2,1045254802,-1109207324,1044218638,-1104843131)+W(3,-1107262661,1062837304,-1096672636,1033499055)+W(4,-1105442246,1058887264,-1085861660,1025985831)+W(5,1031430877,1040464732,-1103880229,1030848699)+W(6,-1126950445,1030731221,-1107144426,-1131329888)+W(7,1024536063,1029953906,-1145128486,-1109411553);sum2=W(0,1034702970,-1176551015,1007931783,-1110263367)+W(1,-1125598974,-1168898884,-1090251816,-1089294892)+W(2,-1114553387,1041527709,1067159008,-1085860022)+W(3,1027536136,-1101298022,1043575777,1061443693)+W(4,-1115924578,1036785061,1028484706,-1099982080)+W(5,1035052048,-1106074654,-1104273626,1042454777)+W(6,-1132148431,1030578400,-1148595850,1027614804)+W(7,1025333585,1024211757,-1114791455,-1123742626);WS(1061983711,-1098811342); +sum1=W(0,1012577103,1051270689,-1108510228,-1107438075)+W(1,-1126897281,1046420622,-1106195699,-1107699151)+W(2,-1105225996,1058683087,-1088411008,1036711743)+W(3,1024253613,1058369439,-1089548804,1026749110)+W(4,1053413654,-1097514912,-1118840551,-1116819519)+W(5,-1137207095,1052214131,-1096732498,1024709491)+W(6,1042674340,-1105013139,-1109015536,-1140694819)+W(7,-1109172700,1050302029,-1103000311,-1154413112);sum2=W(0,1018267361,1036503366,-1126101987,-1099489904)+W(1,-1110181012,1041828239,-1116783782,-1102883314)+W(2,-1146613180,1050199247,1071387060,1052019906)+W(3,1038715850,-1085432172,-1080125372,1047113133)+W(4,1024296823,1038941240,-1093021050,1035497971)+W(5,1036970119,-1123003584,-1114155200,-1112911441)+W(6,1022003098,1013422114,-1149124484,-1119585859)+W(7,-1124702635,1021003447,-1143100940,-1131838862);WS(1061194367,-1092415693); +sum1=W(0,1036390333,1051201914,-1104881972,-1115149537)+W(1,-1126263470,1053058480,-1172862130,1030237668)+W(2,1025725222,1054554894,-1093268199,1021350042)+W(3,1043857157,1047231542,-1076465248,1036659934)+W(4,1035642972,1057662314,-1087389459,1039247491)+W(5,1044002978,1050872286,-1093150623,1026362746)+W(6,998479342,1045022613,-1111846627,1017611295)+W(7,1045699251,1049392206,-1095910796,1018350484);sum2=W(0,-1129487679,1018376667,-1097777178,-1117386048)+W(1,1042193002,-1087595144,-1098446206,-1106566736)+W(2,-1108339354,1054016721,-1106280983,-1108034123)+W(3,-1095819059,1063707892,1068295659,-1104582586)+W(4,1041127864,1036978867,1052165187,-1102127104)+W(5,-1103499785,-1103064253,-1110264861,1036459063)+W(6,1034257999,-1103241982,-1135489703,-1104779766)+W(7,-1118637794,-1112191100,-1107248782,996655259);WS(-1094699455,1066131816); +sum1=W(0,1049793485,-1081848423,1059460685,1042128105)+W(1,1029004921,-1088299640,1048637514,-1139594888)+W(2,1050253240,-1084057276,1060796209,1026023615)+W(3,1043166228,-1084821317,1059873140,1020508084)+W(4,1029407446,-1084563631,1055943200,-1125172935)+W(5,1041612884,-1104203619,1047596309,1048504406)+W(6,1035949114,-1099802604,1050483936,-1115227886)+W(7,1012128942,-1096241030,-1105809528,1051471881);sum2=W(0,1060779432,1051802488,-1086062785,-1114203174)+W(1,-1118034101,-1097493973,998397725,-1112558489)+W(2,-1104519356,1057101737,-1092333837,-1099984065)+W(3,-1119327164,1060027297,1066349798,-1091352583)+W(4,-1101970936,1044004337,979464170,-1094257268)+W(5,-1106905521,1057962293,-1133317807,-1102635709)+W(6,1002331293,-1098665363,1046794021,-1094504499)+W(7,-1082144605,-1086721729,1070824403,-1114333706);WS(-1074268304,1079667699); +sum1=W(0,-1107189325,-1101508903,1054199089,1035260131)+W(1,1027760991,-1090199334,1054303683,-1107632246)+W(2,-1136873402,-1090363950,1062422475,1005391451)+W(3,-1113641470,-1087996124,1067750847,-1101800081)+W(4,1031162561,-1083961527,-1113534839,1034855959)+W(5,1033891144,-1096484091,1052689284,1046337921)+W(6,-1126712892,-1098094611,1031942551,-1150999418)+W(7,1035917755,-1093567651,1045977323,1042992013);sum2=W(0,-1109104193,-1100757902,1040683096,-1125509919)+W(1,-1121805095,1045040397,-1125556022,1026278254)+W(2,1045986101,1080470972,1049174250,-1112163985)+W(3,1048674700,-1080397282,-1095181876,1050380898)+W(4,-1091901802,-1070026310,-1122013099,-1131668233)+W(5,1048446997,1054845861,-1110936398,1033243862)+W(6,-1113936425,-1109557127,1038355211,-1144282357)+W(7,1027039508,-1113850952,-1103996340,1036778147);WS(-1085238047,-1082053459); +sum1=W(0,-1106787663,1039996894,1048926451,-1104330662)+W(1,-1138285833,1010512412,-1119213276,-1128637723)+W(2,-1108632776,1053399812,-1130975030,-1108017347)+W(3,-1094657608,1045540841,1010216242,-1096910157)+W(4,-1101713608,1051732998,1034301867,-1101323868)+W(5,1037328759,1044326914,1025236158,1015829447)+W(6,-1111697288,976543556,-1128978334,-1111437732)+W(7,-1109379868,1057105320,-1109745879,-1108664266);sum2=W(0,-1124623913,1025825838,1042257288,1021162350)+W(1,1032956443,-1119700813,-1135835500,-1114452863)+W(2,1027185909,1032253087,1053804277,-1109212782)+W(3,-1101336864,1046009611,1048892371,-1102267892)+W(4,-1094263361,1060071017,1036906607,-1105958464)+W(5,1029736763,-1108021530,-1101254223,1037505372)+W(6,-1112090109,-1111711122,-1115069322,996911332)+W(7,1039412150,-1092338318,-1114145526,-1125671849);WS(1060867039,-1136390908); +sum1=W(0,-1127355032,-1085412379,1049179798,1047055468)+W(1,1034805910,-1094311080,1049208039,-1108149971)+W(2,1035163860,-1093352008,1060583566,1036232649)+W(3,1029669941,-1084691216,1063283264,-1103012671)+W(4,1042066222,-1088428116,1058522472,1024178471)+W(5,1021674692,-1088125293,1055147879,1026233836)+W(6,1040577786,-1096644095,1050065089,-1126656770)+W(7,1021261983,-1091872390,1041474713,1049799631);sum2=W(0,1035672114,-1063752230,-1093487673,1013645866)+W(1,-1098827199,-1085747691,1041803367,1034418818)+W(2,1049155846,1077059336,1041184099,-1106855503)+W(3,1035178389,1075347264,-1096808218,1049524211)+W(4,-1107113032,1056308660,-1129382302,-1122362105)+W(5,-1144855824,1034654874,-1119639669,1030856901)+W(6,1035201737,-1121418857,-1122522987,1027103888)+W(7,-1127184278,1014935340,1011408026,-1115004359);WS(-1090674303,-1100343233); +sum1=W(0,-1120232797,-1091881416,1051419109,1036288004)+W(1,1040422273,-1094093465,1052500896,1023553551)+W(2,1026412864,-1085938046,1061270771,-1112170192)+W(3,-1138867958,-1089254334,1067891162,-1115349187)+W(4,1033879777,-1089797193,1060067146,-1112030904)+W(5,1033565615,-1085407367,1016645247,998486818)+W(6,1019476032,-1095206984,1041715172,1027103050)+W(7,988102399,-1105032111,1036835111,1040345019);sum2=W(0,1040618154,-1101425729,1012698939,-1121139419)+W(1,-1114130867,1043012943,-1135257643,1033653009)+W(2,-1122148687,1049717343,1047429512,1038119907)+W(3,1044229537,1078734719,1020747990,-1131387750)+W(4,-1110193301,1058416067,1045573328,-1162837210)+W(5,-1097134960,-1066172228,-1105653505,-1124290574)+W(6,1037070268,-1087270128,-1098650023,-1142454518)+W(7,1037459780,1051160418,1029335953,-1119987003);WS(-1083751903,-1076119444); +sum1=W(0,-1115245576,1056842307,-1093345814,-1108216057)+W(1,-1106029427,1054460828,-1096614035,-1118873130)+W(2,-1102084379,1062160243,-1087844584,1032187759)+W(3,-1113929101,1061549380,-1088621915,-1118044066)+W(4,-1115339007,1051628466,-1095344475,-1125935063)+W(5,1029734646,1034628298,1039622221,-1114025640)+W(6,-1110488366,1040780998,1023285463,-1103117229)+W(7,-1147960477,1027250487,1052549785,-1101242061);sum2=W(0,-1142266798,1041896729,-1109207785,-1116438034)+W(1,-1105635988,-1133541327,-1119640286,-1143926222)+W(2,-1108468488,1052249127,-1132044399,-1116983273)+W(3,-1104742183,1059101684,1057719514,-1107716245)+W(4,1004562934,-1116644500,1049160976,1036001553)+W(5,-1111519795,1022626513,1040987637,-1093640310)+W(6,1009402627,1036478091,-1103527129,-1115139384)+W(7,1007186587,-1114250343,-1094402391,-1102449905);WS(1032624635,1033521535); +sum1=W(0,-1131553039,-1098906814,1051615627,1045470610)+W(1,-1117491096,-1100587359,1047570260,1025984961)+W(2,-1112834618,-1081513385,1060987922,1036113314)+W(3,1049918570,-1078593782,1043587024,1040182861)+W(4,1045795365,-1105649745,1056209202,1012071435)+W(5,1016822387,-1092053629,1059398075,1032631435)+W(6,1035361729,-1096260814,1049440024,1023888652)+W(7,-1113168565,-1095243062,1051600524,1034850724);sum2=W(0,-1111826236,-1092384767,-1095745094,1034661269)+W(1,-1099208280,1027875109,-1100947515,1048636172)+W(2,1026789677,1064661507,-1112642295,-1098451609)+W(3,-1106561040,1062273543,1068550638,-1099981129)+W(4,-1093448876,-1087164405,-1104229197,-1118651857)+W(5,1046407154,-1108191451,-1106740917,1049739863)+W(6,-1102666308,1044380270,-1103404028,-1095995165)+W(7,1042570396,-1104593420,-1105841536,1048025970);WS(-1085606847,1061985400); +sum1=W(0,-1108997980,-1089905075,1057688104,1040581229)+W(1,-1117164584,-1114895517,1056544190,-1114811305)+W(2,1031768707,-1095264598,1062390314,-1107526493)+W(3,-1103105924,-1077801587,1055481056,-1110202349)+W(4,1041900981,-1097956992,1062127874,-1118208771)+W(5,-1110420181,-1088999487,1051900674,-1108027100)+W(6,1037113665,-1098379486,1048102065,1024450541)+W(7,1014163116,-1096151518,1057425872,1041210774);sum2=W(0,1025785873,1048760593,1035955606,-1126760968)+W(1,1048912334,-1090084783,-1119218892,1008603006)+W(2,-1096464036,-1114768213,1007739746,-1094704139)+W(3,1056133856,1066763200,1064934573,-1080670875)+W(4,-1104154812,-1086306359,-1089946445,1031309677)+W(5,-1121968309,1058187354,1050702067,-1125625514)+W(6,1033410161,-1113492694,1025685973,-1109240237)+W(7,1015120151,-1128581905,-1102128709,1039335694);WS(-1090966143,-1078936607); +sum1=W(0,-1116393227,-1086961670,1058706816,-1116819366)+W(1,-1108278025,-1108945587,1041859343,1035952359)+W(2,1051625062,-1086695325,1060094467,1041797992)+W(3,-1105522375,-1081986687,1059190367,-1104043025)+W(4,1058727904,-1089148367,1061098519,1053094890)+W(5,-1091195697,-1086453117,1055062080,-1093101306)+W(6,1052016408,-1092689140,1056115606,1015960496)+W(7,-1109728971,-1091172115,1058930855,1034498693);sum2=W(0,1023528661,-1118025227,1075422545,-1073269716)+W(1,-1119417071,1050920275,1065042273,-1077701631)+W(2,-1105978590,-1112399565,1069638520,-1078616397)+W(3,1009798795,-1098493686,1067662601,-1083676116)+W(4,1040834561,1036263434,-1093932676,1044144047)+W(5,-1111364082,-1124489419,-1079439326,1070390370)+W(6,1041397121,1048582480,-1078082886,1068400636)+W(7,1033368796,-1089345484,-1070108577,1077727906);WS(-1079921856,1049308945); +sum1=W(0,1030068962,-1165865787,-1187780005,1025440517)+W(1,-1133949626,-1118082277,-1108803021,-1111921110)+W(2,1050882798,1053008345,1038634079,-1120535059)+W(3,1018623990,-1094507016,-1106873963,-1104818073)+W(4,-1106924392,1052481994,-1087778738,1046575523)+W(5,-1146454049,1043504665,-1101591143,1041667424)+W(6,-1116987117,1047635255,-1101174683,1031519031)+W(7,1040905769,1026870489,-1110197734,1031554658);sum2=W(0,-1116556974,1059176005,-1096412953,-1114011261)+W(1,-1095066961,1038856572,1050790436,-1173649795)+W(2,-1100395256,-1076691076,1058179896,1024138419)+W(3,1050308919,1055715442,-1097771226,1040413046)+W(4,1040792410,1046498927,1039711359,-1106323994)+W(5,1032406727,-1123959066,-1106160519,1033840078)+W(6,1011901446,1028959950,1018212767,-1127468978)+W(7,-1141998384,1032868606,1038360912,-1107910389);WS(1060842367,-1123947436); +sum1=W(0,1024730985,1048950736,-1097448124,-1122548355)+W(1,1023159627,1047784339,-1098772880,1026072115)+W(2,-1105241169,1057388094,-1087773444,1037590622)+W(3,1017803651,1060112037,-1085451727,1037652837)+W(4,1037913699,1062491953,-1088044111,1034810634)+W(5,1035962309,1057656339,-1089872870,1033785172)+W(6,1028045772,-1114528913,-1102522557,1008900343)+W(7,1032728670,997860858,-1103124285,-1114288296);sum2=W(0,1026131421,1001103237,-1133854939,-1114822986)+W(1,-1112740722,-1121600279,1038637096,-1108393699)+W(2,1046858645,-1108221277,1037424280,1029862733)+W(3,1032928238,-1097923247,-1103185020,-1101308237)+W(4,1042166107,1069212508,-1120290433,1036213344)+W(5,1040344552,1057336110,1019342369,-1145606165)+W(6,-1082879617,-1095628134,1039461314,-1111520861)+W(7,-1091819295,-1107037379,-1122429445,1034167562);WS(1038606587,1058047160); +sum1=W(0,1026865207,-1095018974,1044423619,-1136300775)+W(1,1042118304,-1093024127,1048945010,-1117800769)+W(2,1051307036,-1082724754,1054092644,1005722288)+W(3,1033639368,-1100730470,-1097872036,1044405134)+W(4,1046742309,1036658562,-1091674216,1047528601)+W(5,-1109598961,1040951763,1033100505,1044812414)+W(6,1028927539,-1113143704,1030352835,1032954286)+W(7,1015037525,-1098528366,1047837568,1044220906);sum2=W(0,1050657429,1045860939,-1111592920,-1103122208)+W(1,-1103301852,1052242374,1013554208,-1106328874)+W(2,1060573163,-1100974944,-1111727364,1015168980)+W(3,-1091436731,1066745360,1055083328,-1113723980)+W(4,-1104427284,-1079344782,-1098647652,1051192034)+W(5,-1097267636,-1113016512,1034990326,1034643320)+W(6,1038196249,-1119497008,-1110499846,-1122594772)+W(7,-1107511544,-1113648424,1042188938,-1140986496);WS(-1095257599,1052962039); +sum1=W(0,-1106746181,-1097695335,1053309708,1036635571)+W(1,1031300369,-1111219488,1042046133,1032102291)+W(2,1046667354,-1083536631,1060606673,-1110849586)+W(3,1037361867,-1088861218,1053570633,-1103814096)+W(4,1040829967,-1107201338,-1101583222,-1130665360)+W(5,-1128966365,-1115618056,1033575580,1023220920)+W(6,1034540700,-1117058422,1029127944,1009452933)+W(7,-1115420664,-1138753100,1041019129,1041468947);sum2=W(0,-1137205193,-1089705070,-1116057142,-1106134583)+W(1,-1121249932,1025195792,1014073009,-1131583764)+W(2,-1137006201,1049206515,1040872535,1023734245)+W(3,-1101149788,1054529493,1044729510,1030258377)+W(4,1034796937,1039074115,1024555690,1045578999)+W(5,-1115985020,1050074620,-1108168105,1041497164)+W(6,-1140489533,-1104546681,-1105229574,-1131316168)+W(7,1026538132,-1103055048,-1093226929,1036128894);WS(1058062751,-1100017341); +sum1=W(0,-1129599006,1055064995,-1094744478,-1110864465)+W(1,1020928695,1054737968,-1108714620,1035506764)+W(2,-1098371705,1061839865,-1089137095,-1103907470)+W(3,-1111175932,1057524464,-1081607655,-1115102560)+W(4,-1108928286,1062722401,-1111400813,1038105413)+W(5,-1108487635,1039434185,-1089739654,-1103382940)+W(6,1028685770,1053936411,1037008853,1038153674)+W(7,-1134533769,1054765971,-1094983833,-1101904010);sum2=W(0,1046625968,1034733544,-1147999170,1026537136)+W(1,-1114205611,-1100522159,-1093312378,-1103988998)+W(2,-1097342682,1034693600,1057288295,1049229753)+W(3,-1079666171,1066071967,1059803421,-1114956972)+W(4,1041595755,-1087077400,-1088579916,-1104980683)+W(5,977545170,1062799024,1057064650,1050850828)+W(6,-1106070846,-1097179722,-1086854504,997711860)+W(7,-1145403458,1015933409,1055355590,-1115357129);WS(1033636603,-1075190676); +sum1=W(0,1030520392,1051253486,-1096251285,-1117233131)+W(1,-1125697208,1043969999,-1100430004,-1122877346)+W(2,-1114269946,1058583983,-1085953223,1036037681)+W(3,-1109653337,1064791929,-1093290764,-1109909101)+W(4,-1102211630,1057642082,-1088005167,-1123582788)+W(5,1032435172,1055881859,-1098086422,1029223000)+W(6,-1120127764,1033241689,-1102333361,-1125435099)+W(7,996293820,1053053914,-1119839106,-1103406294);sum2=W(0,-1120200303,-1113787644,-1109535466,1041916719)+W(1,1024626781,1041562727,-1106166077,1028143351)+W(2,1013431061,-1114475538,1029531851,-1097688999)+W(3,-1124733431,-1112371618,1051805575,1068535590)+W(4,1027814217,1032748777,1061661699,1074776935)+W(5,999438554,-1098117165,-1114245048,1029048009)+W(6,-1116912567,1042886038,1039886302,-1076933565)+W(7,1007930813,-1140542509,-1093997696,-1072079702);WS(1051996799,1040628126); +sum1=W(0,-1106876926,-1096999331,1064227732,1032518006)+W(1,1042171100,-1106536569,1056769919,-1132737450)+W(2,1014013938,-1087433914,1057736892,-1121739327)+W(3,1040804174,-1079279688,1052514885,1035728257)+W(4,1038633599,-1085040172,1059334684,-1115112214)+W(5,1024260165,-1090750082,1058371760,-1126170017)+W(6,1032103150,-1096245875,1051111478,-1129820331)+W(7,-1111941370,-1091794355,1050507101,1036168684);sum2=W(0,-1097197656,-1105938617,-1063141508,1047663602)+W(1,1040517176,-1119182790,-1072247475,-1106333570)+W(2,-1107105879,1048788314,1073986693,1017343300)+W(3,1050425804,1048225474,1082212097,1014706728)+W(4,-1108102513,1050055380,1063649950,1023560998)+W(5,1044838414,-1097162220,-1108483496,-1105252179)+W(6,1026907274,1028263310,1040597170,1016727612)+W(7,978890108,1043193320,-1096883524,1025416282);WS(-1079662656,1075711984); +sum1=W(0,-1136749190,1054381451,-1099895821,-1111920714)+W(1,-1108214827,1049467004,-1104318006,-1124862997)+W(2,-1112256994,1060357369,-1094055613,-1099490085)+W(3,-1102094902,1064079536,-1088977984,-1093653775)+W(4,1019461885,1058102849,-1094018397,1047054555)+W(5,-1113236619,1050217386,-1093377643,1026036560)+W(6,-1115387518,1046694646,-1102869707,-1122648846)+W(7,1015637672,1053154499,-1097489705,-1117787456);sum2=W(0,1021596406,-1120307380,1037868882,-1094559059)+W(1,1027700788,1049653321,1038499992,-1099826066)+W(2,1031902674,-1100871897,1074972319,-1070411479)+W(3,1035450862,1054975194,1073269037,-1076192259)+W(4,-1146279384,-1106853601,992333684,1024067187)+W(5,1036068426,1042197470,1032586692,-1107184127)+W(6,-1108044351,1034125536,-1129244749,1032061183)+W(7,1030087008,-1133477273,1010404410,-1104237818);WS(-1121360374,-1077155152); +sum1=W(0,-1105583845,-1092428892,1053987635,1036329976)+W(1,1042009047,-1091586093,1057449542,1039912928)+W(2,-1135496901,-1087526962,1037542524,-1114441548)+W(3,1057317824,-1088356100,1067018703,1035631092)+W(4,1037107234,-1084718223,1053143538,1024846769)+W(5,1028773828,-1086275726,1051794540,1020991498)+W(6,1042777544,-1096882940,1049337758,1032759069)+W(7,-1116736729,-1086839898,1050512766,1041911145);sum2=W(0,-1122349048,-1108922684,-1102817435,1024154790)+W(1,1027223630,1050237475,1047134367,-1105600910)+W(2,-1123059666,-1093984844,-1086242189,1041276041)+W(3,-1097496437,1061603028,1069845393,-1090292072)+W(4,-1101147358,1054912466,-1091188340,-1122818012)+W(5,1008041239,-1136134543,-1107987422,-1109079234)+W(6,-1113710228,1050990810,-1126348732,1047206075)+W(7,-1103013196,1037079763,-1097181289,-1109791787);WS(-1087087711,1067831143); +sum1=W(0,1034272753,-1110686621,1034360523,1006467012)+W(1,1043354114,-1094089577,1051348739,-1097882829)+W(2,1046815315,-1090322161,1056352764,-1098171061)+W(3,1041026663,1019000899,1049291409,-1099191041)+W(4,-1116058688,1048378971,-1098372646,1036956791)+W(5,-1131457456,1054466495,-1090870248,1036945505)+W(6,-1115558139,1045446607,-1103803571,-1124941614)+W(7,1032034947,1043401342,-1098529593,1026141794);sum2=W(0,1046033632,-1147554302,1021728539,1034466187)+W(1,-1114282503,1065651536,1061103542,-1117467216)+W(2,1044655964,1052996561,1047372498,1040544990)+W(3,-1106001859,-1076523823,-1081697027,-1105745303)+W(4,-1104436397,-1095873418,-1094800655,-1119054372)+W(5,-1101664028,1059971501,1058036758,-1110996319)+W(6,1015764662,1037179306,-1113369666,-1120190386)+W(7,1023732858,-1119149512,1033040332,1028498617);WS(1040537598,-1164677141); +sum1=W(0,1044447583,1058921623,-1079854668,1051360885)+W(1,987031402,1052904912,-1089009751,1009017491)+W(2,-1121775302,1059494147,-1082135643,1049103971)+W(3,1042738997,1059765434,-1085199868,1042102879)+W(4,1038434732,1053249925,-1087718171,1037325507)+W(5,1049696256,1045203303,-1094593271,1033340813)+W(6,1024826006,1049549231,-1098502833,1040792940)+W(7,1044766000,1032179929,-1111725730,-1103499809);sum2=W(0,-1105450770,-1076904032,1034745372,1064235564)+W(1,-1099930216,-1110661913,-1104228342,-1133206564)+W(2,-1087670985,1054929191,1055270313,-1159337186)+W(3,-1097641768,1067640588,1058849806,-1095527236)+W(4,-1093727900,1043325457,1055379319,-1097371942)+W(5,1034849198,1041628489,1047258529,-1123329564)+W(6,-1089823109,1024934811,-1091022953,1053074558)+W(7,1026936119,1071055811,-1093861556,-1079977593);WS(-1072228928,1076959210); +sum1=W(0,1049440860,-1102211417,1052420434,1046258910)+W(1,-1100954468,-1090494943,1049042513,-1094165323)+W(2,1040518102,-1089397123,1057628335,-1113742940)+W(3,1055014377,-1085929645,1059399711,-1115570152)+W(4,-1102413547,-1092416799,1055649007,-1095616949)+W(5,1056933930,-1103710088,1056457065,1054320058)+W(6,-1100924366,-1099959722,1043274798,-1096288332)+W(7,1025160513,-1097219837,1043339918,-1113497047);sum2=W(0,1037249746,-1091193116,1058952598,-1099278743)+W(1,-1106259401,1057292562,-1089499743,1035766214)+W(2,-1118512137,1045032769,990544085,-1120311473)+W(3,1033553146,-1101074553,1052938455,-1107284433)+W(4,-1118437421,1047290760,-1096914685,1032001159)+W(5,1049532353,-1085599381,1060306657,-1105441959)+W(6,-1112295163,1045403080,-1095081062,1037527897)+W(7,-1112769969,1036239865,1036770528,-1117837555);WS(-1095248895,-1088416713); +sum1=W(0,991086878,-1112623265,1049658160,1025280780)+W(1,1041397006,1023033498,-1129854724,1018002536)+W(2,-1100414321,-1095527100,1056723856,-1101036339)+W(3,-1106522737,-1085500137,1061179113,-1098081679)+W(4,1032194452,-1103431285,1050067968,-1121954805)+W(5,1040515607,-1093888960,1055178889,1040437430)+W(6,-1113785099,1025813699,1027165141,-1107604207)+W(7,-1119710941,-1112974208,1044420741,-1122583614);sum2=W(0,-1115281709,1049351198,-1101546004,-1132663474)+W(1,1038308115,-1105447726,1044927538,1036918381)+W(2,-1086190321,1061131477,-1105825160,-1104633062)+W(3,-1079410563,1070791012,-1124003323,1035199903)+W(4,1055352031,-1080774986,1054621998,-1119052371)+W(5,-1106071111,1050939464,-1100497740,1038597174)+W(6,1042421121,-1096576742,1042910101,-1126972585)+W(7,999244165,1021655353,-1123561791,-1141223925);WS(1057802399,-1081431823); +sum1=W(0,-1122831751,-1093480916,1050038833,1031929377)+W(1,-1131892376,-1097592621,1050095280,1003466633)+W(2,1041203877,-1087992005,1058335651,-1150646211)+W(3,1034931072,-1086955360,1062569267,-1108251076)+W(4,1020249162,-1094219074,1052617634,-1123920403)+W(5,1023514439,-1099624791,1053253320,-1110979235)+W(6,-1183605377,-1104094712,1037479577,1022403704)+W(7,-1102408215,-1103351679,1047799764,1031403703);sum2=W(0,-1104748298,1032567526,1030425414,1028805714)+W(1,1035677532,1015597088,-1106402955,1010146816)+W(2,-1097271446,1042180726,1036072793,-1122721452)+W(3,-1071563129,-1131466492,1026492053,-1139412188)+W(4,-1073203825,-1088097679,1021201077,-1121571686)+W(5,-1105574565,1049167232,1046304011,1013464552)+W(6,1074066983,-1104411749,-1108010622,-1115684312)+W(7,1076846054,1054919113,1040423027,-1159010626);WS(1057159391,-1098185256); +sum1=W(0,-1115997840,1062337777,-1099145229,-1108105457)+W(1,-1139848194,1059107990,-1096884471,1026934458)+W(2,-1110900998,1058844902,-1083284577,-1128707950)+W(3,1040272534,1060188982,-1081840204,1050661700)+W(4,-1124007614,1050305613,-1086268415,1025671020)+W(5,1022311680,1055455830,-1088086212,1018441343)+W(6,-1122049771,1052112283,-1093503993,1032949738)+W(7,1025640163,1058488623,-1095187909,-1115150240);sum2=W(0,1056249112,-1063663228,-1090194820,-1098679170)+W(1,-1087901783,-1065703489,1049313091,1049727089)+W(2,1050240307,1050922399,1059446328,-1118968312)+W(3,-1096100666,1074103439,-1091782161,1043947681)+W(4,1050011361,1078895155,1051412884,-1103451878)+W(5,1046757851,1075028289,999915799,1046896549)+W(6,-1111613200,1011769164,-1097222567,1036070334)+W(7,1031802636,1041242105,1040180956,-1120669738);WS(-1076050352,1072169512); +sum1=W(0,-1112010473,-1127017300,1032805651,-1127012698)+W(1,-1110549812,-1096217239,1055039585,1017026201)+W(2,1041474168,-1101316183,-1107675851,1027743346)+W(3,-1102358403,-1098236010,1058693100,-1103052317)+W(4,1035256808,-1097462672,1050718238,1025923518)+W(5,-1103941101,1015309803,1047069339,-1108585145)+W(6,-1126807163,-1109990262,1040782175,1029935559)+W(7,-1127729580,-1124828306,1033573870,1030091394);sum2=W(0,-1115222730,1013406324,1048651312,-1105744683)+W(1,-1103808603,1044516259,-1091636530,1036643390)+W(2,-1133607278,1056099238,-1082257366,1056116581)+W(3,1035011293,-1093760521,1065398243,-1087652578)+W(4,1045426354,-1097063741,1052543946,-1106429625)+W(5,1005150868,1046105407,-1105190986,1031045850)+W(6,1038138903,-1106358807,-1143243436,-1129675875)+W(7,1014354189,1034790704,-1124610775,1033997397);WS(1065781680,1039008007); +sum1=W(0,1041247860,1052873269,-1087848896,-1122380132)+W(1,-1132228043,1052030887,-1090939837,1043969975)+W(2,-1116017645,1057769989,-1086321043,-1167945460)+W(3,1029031978,1065817909,-1090130600,1043124941)+W(4,-1114552992,1059292430,-1093123180,1037414446)+W(5,1018467582,1052683781,-1089813139,1037105136)+W(6,-1119698444,1045381867,-1093950448,1016187596)+W(7,1039500994,1042767258,-1088918334,-1139723011);sum2=W(0,1038177586,-1105284792,-1114385091,1023745983)+W(1,1024852101,-1131141686,-1105200928,1044997454)+W(2,1031995320,-1123455081,1057384109,-1102654886)+W(3,1016571646,999573799,1073904332,1045931554)+W(4,1033741319,-1107419527,1075963065,-1113399825)+W(5,-1108656521,1052574782,-1130292726,1041285787)+W(6,1035134998,-1099142208,-1072886122,-1101763500)+W(7,-1120710323,-1103717942,-1070457563,1044467987);WS(-1090516543,-1087531312); +sum1=W(0,-1105337757,1040358473,1026287071,-1112133319)+W(1,-1135375282,1025750638,-1109155234,1043065477)+W(2,-1113059195,1034124454,-1111070925,1049735832)+W(3,-1111479074,-1082649657,-1113637434,1048811350)+W(4,1044282546,-1098312091,1056333811,-1104740686)+W(5,1036163039,-1114570479,1044131649,-1111303053)+W(6,-1123738614,-1112260786,1049914271,-1128712224)+W(7,-1110047807,1044483760,1039433994,-1136462731);sum2=W(0,-1122757257,1027164873,1002742314,-1111953049)+W(1,1009904581,-1112829049,-1115430893,-1116391321)+W(2,-1113467627,1020364514,-1098221748,1025748661)+W(3,-1099518373,1064179702,1059311413,-1098741962)+W(4,1032421699,-1092934445,-1139891301,1036551469)+W(5,-1095677862,1039050377,1041708988,-1119491053)+W(6,1020800146,-1106885375,-1124766450,1025848261)+W(7,-1112743661,1022655162,1032689603,-1122814953);WS(1059528063,1057564569); +sum1=W(0,993737087,-1096201122,1052073475,1036364765)+W(1,1023855952,-1112481934,1044928820,-1119101474)+W(2,1051519336,-1089271861,1057871347,1026047377)+W(3,-1100822612,-1101379550,-1090210244,-1095066725)+W(4,1027584566,-1129312776,1027452795,1043887545)+W(5,-1109486813,-1101173547,1051680014,1038809676)+W(6,-1127107174,1031993577,1038521522,-1152581582)+W(7,1035631854,-1097162722,1050823828,1037595092);sum2=W(0,-1106514375,-1115270098,1025588625,-1109616345)+W(1,1034094594,1029678117,-1103891997,1044342701)+W(2,-1112949179,-1095879627,1029083209,-1107320484)+W(3,1009317700,1052560633,1062070608,-1103446924)+W(4,-1126355148,-1128108776,-1100067512,-1131810302)+W(5,1021633582,1034084538,1035054672,-1098743078)+W(6,1010987268,1040297892,-1117785257,-1123491293)+W(7,-1106252693,1049223604,990783407,-1102218346);WS(1061977215,-1122204685); +sum1=W(0,-1124031333,1053794732,-1090279300,1017895407)+W(1,-1109554099,1053305789,-1096176108,1027213295)+W(2,-1105250724,1058003360,-1093816822,1024566052)+W(3,1036027519,1059361796,-1081723655,1033714163)+W(4,959521497,1055117810,-1090510080,-1125004641)+W(5,1055353398,1051669497,-1097892492,1006220452)+W(6,1038275624,1037705519,-1101480172,-1112881733)+W(7,-1136942561,1047158647,-1098784634,-1145512357);sum2=W(0,-1113155109,1028856727,993552399,1036996819)+W(1,1032430477,1021325630,-1128331832,-1139715524)+W(2,-1105712018,1050891972,1042508384,-1111526035)+W(3,1048044904,1070862297,1042132916,1040898786)+W(4,-1081128362,1074403261,1044319918,1025048067)+W(5,-1070110178,1035516985,-1115800491,1038841221)+W(6,-1092435520,-1108990845,1033559089,-1119663830)+W(7,-1092804751,-1122256510,-1109033129,1007165668);WS(-1096328959,1070879408); +sum1=W(0,1047483149,1056909741,-1084253114,1043610432)+W(1,-1131726569,1050717891,-1097194674,-1120381614)+W(2,1017405984,1049879450,-1084428714,1029856307)+W(3,1016192218,1064784543,-1088019878,1046790989)+W(4,-1134185032,1054175424,-1087922381,1044095416)+W(5,-1130210629,1055866677,-1096076442,-1106891777)+W(6,1039283496,1052923070,-1098682228,1045347898)+W(7,1022798351,1050331269,-1089646420,-1103492015);sum2=W(0,-1096731787,-1092572599,-1072213302,1074300082)+W(1,1041094096,-1083918511,-1081783724,1061218424)+W(2,1030029833,-1081752188,-1088492050,1062246408)+W(3,-1134738767,1050600846,-1098909280,1055931246)+W(4,-1112066554,1060518769,1054813136,1030722387)+W(5,1049526473,1056806956,1066457366,-1080408758)+W(6,-1103571503,1052566197,1061557517,-1082314750)+W(7,1038503381,1040255570,1074348460,-1074863778);WS(-1093955647,1022010191); +sum1=W(0,1027472455,1051129150,-1126583382,-1110971745)+W(1,-1118029508,1040858863,-1110637352,-1129027011)+W(2,1017520774,1058284788,-1083829535,1043546956)+W(3,-1100976252,1064764899,-1092969620,1032062845)+W(4,1048038797,-1094249656,-1093269900,1049944248)+W(5,1019653215,1054989120,-1098669306,-1114080636)+W(6,1015004427,-1137681219,-1101321193,1039113958)+W(7,1006149335,1047833420,-1092663640,-1120661351);sum2=W(0,-1125700855,-1109340305,1041739108,-1138307987)+W(1,1010923567,-1099241242,-1121076246,1010348245)+W(2,-1097524591,-1097784845,-1122648580,1043843262)+W(3,-1086770251,1061340682,1059475190,-1104554020)+W(4,-1119687254,-1091236020,-1097965354,1042867821)+W(5,-1136610695,1059369820,1048517727,-1105357691)+W(6,1034141799,-1103210716,1020884025,1021404807)+W(7,-1146172877,1042204527,-1117941982,1026766467);WS(1057685119,1067243116); +sum1=W(0,-1129459555,-1098308652,1053516928,1029422892)+W(1,1016923756,-1100618635,1049587364,-1111775882)+W(2,1004671913,-1090418529,1057639529,-1114348966)+W(3,-1095493364,-1088191051,1065512192,-1112549294)+W(4,-1098633785,-1089905135,1058720438,-1103551521)+W(5,-1112175056,-1101363479,1052631981,-1111153757)+W(6,1046138501,-1106099897,1043712557,995391206)+W(7,-1131471418,-1097291652,1052947846,1020473821);sum2=W(0,-1131225411,-1140292462,1018110051,1018006973)+W(1,-1130956898,1023877693,-1137158572,-1128428036)+W(2,-1103681442,1042914798,-1224504659,1020723155)+W(3,-1077027280,1069127322,1043315619,-1147115303)+W(4,-1076028808,1071847872,-1120948958,1020554514)+W(5,1031803188,-1103125793,1043270022,-1133954299)+W(6,-1101294062,1043076855,-1113817590,990350747)+W(7,949706042,-1132087796,1015417250,1025989218);WS(-1097928959,-1082976358); +sum1=W(0,1027664520,1057835343,-1089326063,-1108038941)+W(1,-1123678010,1050550727,-1096462854,1032858337)+W(2,-1106569905,1057764410,-1083721351,1021803093)+W(3,1052451146,1062299789,-1087127986,1042469806)+W(4,-1103556709,1049034640,-1097735566,-1104920125)+W(5,1038567635,1057826487,-1094118206,1031016631)+W(6,-1108799690,1041175724,-1100805265,-1129264698)+W(7,1040222651,1060823717,-1089053734,-1107162784);sum2=W(0,1059738223,-1087082495,-1092378156,1034470847)+W(1,1048150071,-1095900368,1046247330,1025055065)+W(2,1052511773,-1108343021,1033545850,1045395587)+W(3,-1080186607,1063110279,-1090059649,-1094453880)+W(4,-1078381471,1074904245,-1107095292,1053230483)+W(5,-1072132845,1071639576,1039712953,-1103894182)+W(6,-1071450961,1076364217,-1113577164,1032308634)+W(7,-1071397334,1077341373,1049211915,-1120241798);WS(-1093482751,1040242403); +sum1=W(0,-1101135214,1051279307,-1160860306,-1112732162)+W(1,-1123956286,1045008905,-1106067054,-1135242283)+W(2,-1107524598,1049489177,-1101021318,1029341500)+W(3,-1138012647,-1132973569,-1113266773,-1121978915)+W(4,1034129455,-1096848358,1049504725,-1098727290)+W(5,1042720691,-1098383795,1059206814,-1102892456)+W(6,-1130324184,-1104810279,1049756222,-1104163113)+W(7,998898338,-1118268600,1052043149,-1099073308);sum2=W(0,1050603120,1055811875,-1086548128,1034695967)+W(1,-1101078445,-1122671355,-1087609936,-1108269543)+W(2,1048531671,1038805789,-1088336312,-1089139562)+W(3,-1105220793,1066111209,1071017234,-1104320030)+W(4,-1091713187,1026095418,-1115602704,-1100901763)+W(5,1034851673,-1130092003,-1089969509,1049804877)+W(6,-1122031169,-1137910742,-1121274059,-1103744367)+W(7,1020293663,-1094690648,1053616941,1054827086);WS(-1112146683,-1077736475); +sum1=W(0,-1128590341,-1099064529,1049253908,1039097715)+W(1,-1130792414,-1090490649,1028859267,1017948777)+W(2,-1147973299,-1086623314,1040872136,1025770233)+W(3,-1117834531,-1101063739,1068918685,-1115616742)+W(4,1007065251,-1084449173,1059458719,-1104116690)+W(5,1033724609,-1094725676,1057886934,-1132647657)+W(6,1024083798,-1097837640,1044653558,998082042)+W(7,-1122914526,-1097461352,1048946351,1030833130);sum2=W(0,1038545045,1044965772,1038508364,1032278560)+W(1,-1104316542,-1073797636,-1092377302,-1115941315)+W(2,-1098913527,-1069601753,1050236814,-1109127211)+W(3,1054073276,1079919017,1044931722,1042591612)+W(4,990615436,1065620582,1034922622,997021068)+W(5,-1111960943,-1103381017,1033398315,1042220416)+W(6,-1127436605,1039512539,-1113162193,-1138197651)+W(7,-1131799749,-1105195767,1039327537,-1121388557);WS(-1090505151,-1074550453); +sum1=W(0,-1112838599,-1106878250,1057615003,-1131143051)+W(1,1028498739,-1103427629,1042960070,1023192930)+W(2,1023419227,-1088602192,1063645564,-1096958907)+W(3,-1117182312,-1088941275,1053033883,1048242260)+W(4,1018948122,-1087514842,1058641540,-1098164287)+W(5,-1126145258,-1096920942,1043052986,1045189988)+W(6,1024711581,-1096615233,1050742275,-1105551137)+W(7,-1125422420,-1095073209,1053972531,1026824959);sum2=W(0,1051549752,1021553919,-1106404197,1031994963)+W(1,1081443218,-1111116920,1044837835,-1113046369)+W(2,1072492444,-1073777225,-1113676512,1032624041)+W(3,1048388769,-1067599847,-1089379201,1025956540)+W(4,1035162847,-1096587672,-1109546151,1027498280)+W(5,-1139079606,1029232562,1030543674,-1132168419)+W(6,-1121149576,-1115288719,-1122606689,1034044071)+W(7,-1123800689,1042218632,-1125599605,-1115044631);WS(1051119487,1041244378); +sum1=W(0,-1124974044,-1137238551,-1116593698,-1121323393)+W(1,1028120435,-1113671305,-1103177170,1033078132)+W(2,1048876359,1036964902,-1099611151,-1156053771)+W(3,1037118035,1061504071,-1104164974,-1129960608)+W(4,-1131477080,1047204942,-1081804989,1048068278)+W(5,-1118427428,1050660570,-1114906180,1011539382)+W(6,-1120234265,1030267847,-1098831475,1035846233)+W(7,-1125985859,1049717597,-1103929310,-1115091743);sum2=W(0,1018090488,1027537220,1019973834,-1117503915)+W(1,-1104952272,1048078363,-1095697091,1045164128)+W(2,-1105226064,1055192952,-1101823824,-1106818318)+W(3,-1128161694,-1102612387,1074095781,-1087428157)+W(4,-1134153828,-1102761937,-1074759173,1061969021)+W(5,1024328280,-1101688104,1063478353,-1092430375)+W(6,-1118410723,1035228556,-1092594125,1050476000)+W(7,-1117225997,1016223417,1041310640,-1110796930);WS(1062303263,1031082743); +sum1=W(0,-1113216195,1050954912,-1095964628,-1121789260)+W(1,-1099215391,1012178225,-1095180416,1027015379)+W(2,1052151297,1065129152,-1088785601,1041954507)+W(3,1026092610,1047492794,-1089641431,-1107401421)+W(4,1051942565,1063700475,-1089295544,1049634587)+W(5,-1098039588,1049517720,-1091476104,-1112964196)+W(6,-1101893697,1028060738,-1102410709,1035520455)+W(7,1008063218,1054989200,-1096414030,-1114231491);sum2=W(0,1033145987,-1175661064,1021827842,-1165845202)+W(1,-1111827051,-1152013649,-1104895942,-1187919119)+W(2,-1103256184,1050523165,1034611383,-1125020091)+W(3,-1063595607,1084357731,-1094652398,1042933311)+W(4,-1101985731,1048919805,1029250458,-1108910008)+W(5,-1141099147,1025442742,-1102082303,1040766920)+W(6,-1136421288,-1145624409,1021034188,-1126731425)+W(7,1030655939,-1133270551,-1121842648,1017996705);WS(1057958943,-1104691893); +sum1=W(0,-1111014615,-1105424217,1044401084,-1118336456)+W(1,-1128240917,1046008396,-1100901945,1038452148)+W(2,-1146251723,-1090082375,1057785284,-1119525902)+W(3,-1095236657,1054329938,1040293502,-1093887914)+W(4,1047913107,1003615948,-1099597392,1045607070)+W(5,-1103203951,1013130820,1051440085,-1107674167)+W(6,1033356080,1044802714,-1102604718,-1113361665)+W(7,1023941889,-1101796865,1036253756,1037874639);sum2=W(0,1010987018,1041119120,-1110188142,-1127404253)+W(1,-1105807463,-1111572952,1045029856,1029477872)+W(2,-1102396693,-1117220749,1057260834,1019931869)+W(3,1054217500,-1087890507,-1087358521,1056265374)+W(4,-1123211893,1070205457,-1081682663,-1091128546)+W(5,1029628166,-1101117061,1051101181,-1124058781)+W(6,-1106898625,-1113015450,1042553654,1025549544)+W(7,1028744914,-1121743361,-1135525482,992401866);WS(1063883327,-1171419961); +sum1=W(0,-1131801844,1049833398,-1102183011,-1101850371)+W(1,1021098616,-1123871229,-1097479398,1031224740)+W(2,1022023532,1009731296,1056730033,-1123343997)+W(3,-1121742227,1044941350,1041013425,-1127214008)+W(4,-1090925859,1060653970,-1095529687,-1107029405)+W(5,1024490200,1043051923,-1097251239,1042080318)+W(6,-1102607801,1048967870,-1104750961,-1107657120)+W(7,-1123544461,1050859794,-1097963532,1009310536);sum2=W(0,-1106082604,1047581965,-1097195715,-1113941985)+W(1,1041248381,-1108094251,-1105642610,-1131232309)+W(2,-1132935321,-1111186257,1042983438,1050509566)+W(3,-1106587714,1050591326,1048334662,-1103031697)+W(4,-1104172881,1039028256,1046273630,-1127691207)+W(5,-1118244665,1025922877,-1128737701,-1115007353)+W(6,-1115368488,-1111866155,1044426238,-1112751356)+W(7,-1139264801,-1104769894,-1122157893,1031938310);WS(1064944927,1037595256); +sum1=W(0,-1116864018,-1089228760,1063040538,-1107296590)+W(1,1023806679,-1095304482,1057549004,-1106875789)+W(2,1017115436,-1087165700,1060715233,-1103245163)+W(3,1009660557,-1086682215,1064233001,-1106392275)+W(4,1028149000,-1088874517,1056983460,-1132085516)+W(5,-1109610248,-1099761351,1052917089,-1107160974)+W(6,-1148661421,-1116139780,1041500021,-1129006079)+W(7,-1102752831,-1131587330,1045020525,-1152394658);sum2=W(0,1045832950,-1084008560,-1084775302,1058474163)+W(1,-1110716731,1049995423,-1093173621,-1102301410)+W(2,1025147898,-1089165996,1054478967,-1128684365)+W(3,-1098226948,1066542501,1068786857,1031931484)+W(4,-1099749141,1049362032,1047038722,-1091779956)+W(5,-1098250414,1055260506,-1126019654,-1105326436)+W(6,1042544569,-1086997229,-1127724076,1053449115)+W(7,-1089530617,1067285885,-1088213452,-1090548395);WS(-1082101344,-1089856493); +sum1=W(0,1050831902,-1105691402,-1101015969,1029275441)+W(1,-1112019073,1030717682,-1098775681,-1120813832)+W(2,1030303546,1055521064,-1097748442,-1139280937)+W(3,-1129997454,1064695661,-1085520515,965412887)+W(4,-1110327174,1061962758,-1086646154,1041358014)+W(5,-1117704076,1058754169,-1089610799,-1122362798)+W(6,-1112251093,1047731210,-1093958751,1028938947)+W(7,-1131596868,1056158989,-1094349907,1016935004);sum2=W(0,-1065128139,-1101130808,1034565987,-1119435550)+W(1,-1076824095,1050826865,-1109355365,1023890205)+W(2,1067439244,1046966330,-1109830496,1012867020)+W(3,1079260085,1049869634,-1112614302,1015248786)+W(4,1056740148,1051236860,-1123646153,-1122661198)+W(5,-1103928218,-1114183173,1051726295,-1136992532)+W(6,-1135208116,1033256035,1035002893,-1119472799)+W(7,1039164015,-1104627926,-1109091637,-1136910724);WS(-1090711679,1035967541); +sum1=W(0,-1111795270,-1104454427,1050513973,1030482278)+W(1,1015715144,1029360119,1050454265,-1138269301)+W(2,-1118064815,-1084526809,1063535365,-1132452908)+W(3,-1124564760,-1083278737,1060834888,1007072853)+W(4,1033380937,-1083950349,1050327592,1028355007)+W(5,1041725555,-1091233609,1054941014,1029566323)+W(6,1039158191,-1102432923,1040417584,-1140656289)+W(7,1036708611,-1097260861,1042099839,1035976950);sum2=W(0,1030795338,-1099705557,-1100315818,-1124401732)+W(1,-1104698754,-1088930785,-1129318753,1047822852)+W(2,-1086482027,-1087114188,-1088371087,1041847465)+W(3,-1086674278,1063363970,1059258270,1007827043)+W(4,1048689193,1066258058,1052412907,-1114489829)+W(5,-1101252049,1055138353,1035784301,1039056173)+W(6,-1127107620,-1113111809,-1107499570,1036879119)+W(7,-1097010897,1050900036,1046424313,-1112035485);WS(-1098505599,-1075865372); +sum1=W(0,-1119631078,-1131715643,-1121509433,-1113178620)+W(1,1024188415,1032178901,-1128987132,1024883696)+W(2,-1125460739,1056750314,-1131145214,-1114020928)+W(3,-1113150415,1055366257,-1096447994,-1102601578)+W(4,-1098117352,1063530169,-1086227497,-1111953177)+W(5,1028789822,1038512989,-1117796833,-1101470933)+W(6,-1115205937,1036256496,1016180195,-1141768534)+W(7,-1134520549,1042179631,1032402616,-1114797153);sum2=W(0,-1098762498,1039073687,1035541163,1030962008)+W(1,-1112826554,1047439072,1032611741,981436096)+W(2,-1099883844,1024348972,1050751610,1048715774)+W(3,-1090598021,1068429254,1066295533,-1089341195)+W(4,1060690639,-1078855206,-1081223881,-1094541311)+W(5,-1101866176,1052294530,-1097770507,1041458546)+W(6,1051055486,-1095975199,-1126362074,1044471119)+W(7,-1111565268,1034134076,-1121819739,1024624177);WS(1057165023,-1106509195); +sum1=W(0,-1110663097,-1090373040,1057389257,1036322023)+W(1,1023353031,-1094296089,1051297995,-1110472134)+W(2,1009641338,-1087820187,1064196683,-1103525103)+W(3,-1116674588,-1090764772,1064337073,-1108191858)+W(4,-1121179137,-1101809276,1058239248,-1105116828)+W(5,-1127866586,-1095695571,1053143796,-1130262917)+W(6,1019708412,-1097119704,1049182394,-1117889432)+W(7,-1105922998,-1088811352,1042633923,1047174317);sum2=W(0,-1112942365,-1106822390,-1102090209,1043730009)+W(1,1048482322,-1115190843,1042851055,1035412483)+W(2,-1100072975,1034045428,-1103979279,-1105576965)+W(3,-1097118067,1068163863,1056641862,1028572696)+W(4,991349250,1063618710,-1105663689,-1113934073)+W(5,-1108096389,-1107942623,1049912171,-1105853831)+W(6,1053525633,-1090492700,-1130278628,1039916278)+W(7,1000921969,-1076676559,-1111476815,-1106999228);WS(-1086493375,-1079336981); +sum1=W(0,977772865,-1102983835,1026410857,1015269519)+W(1,-1123924042,-1108602044,-1098146918,1049374456)+W(2,-1109993624,1041059645,-1106936850,1036994068)+W(3,-1107908519,-1094902379,1061697492,1041174790)+W(4,1036636329,-1083260999,1061962303,-1103125248)+W(5,1038934102,-1084987377,1057432285,-1125738921)+W(6,1034769240,-1102484540,1051050960,-1130650164)+W(7,-1099048778,-1108629750,1050989872,1040252563);sum2=W(0,-1104970914,1042634099,1052960430,-1112577728)+W(1,1018133697,-1097448347,-1108255972,-1096543501)+W(2,1040842491,1055662701,1062139198,-1090800341)+W(3,-1093587851,1074010545,1064732329,-1093194079)+W(4,-1093237537,-1089724369,-1083390778,1015865539)+W(5,-1102375178,-1099392752,1025575413,991452982)+W(6,-1099804326,1049771835,-1104347883,-1126119433)+W(7,1054809337,-1092159031,-1096888027,1028159711);WS(-1088469887,1068090411); +sum1=W(0,-1113244581,1001301201,-1115331947,-1124374314)+W(1,-1123900274,1023861926,1035790701,-1105829923)+W(2,1049496346,-1082959002,1057295251,-1096521435)+W(3,-1110903326,1050701400,1048296635,-1119292644)+W(4,-1119953152,1060902689,-1081663133,1048590454)+W(5,1031904934,1043052181,-1113327662,1027826066)+W(6,1034227191,1043817559,-1110964279,-1106468266)+W(7,1025939062,1038313117,1034951606,-1117293966);sum2=W(0,1046922708,-1106472578,1033443280,-1111979165)+W(1,1033420508,-1114867820,-1109208012,1050643686)+W(2,-1112865289,-1087802072,1020845388,-1101832932)+W(3,-1096930035,1058113813,1048730658,-1129026525)+W(4,-1101802092,1050476308,1059721445,-1104558996)+W(5,1017341032,-1103417477,-1107242470,-1135034393)+W(6,1036773342,-1105807138,-1136542442,1037376476)+W(7,-1107450994,1033379085,-1104249476,1023773731);WS(1052578175,-1092643724); +sum1=W(0,-1106584961,-1102735475,1053304083,993436516)+W(1,1030893452,-1100779014,1049737317,1037510015)+W(2,1033955624,-1082492039,1060101900,-1101687426)+W(3,1037358070,-1086815439,1065824329,-1103135573)+W(4,1036710537,-1088009424,1041943502,1029815263)+W(5,-1128189432,-1095075429,1057719155,1040440469)+W(6,-1118327615,-1106908643,1051335460,-1106074638)+W(7,-1129060558,-1102841939,1036237087,1027836379);sum2=W(0,-1115440098,1015710974,1041402597,-1130229431)+W(1,1029771501,1033337736,-1114856806,1034787000)+W(2,1018065220,-1094728975,1037520917,-1082769104)+W(3,999202537,1039453548,1064530169,-1074584982)+W(4,1036811205,1050012979,-1094040689,-1090370130)+W(5,-1111720654,1032576025,1073761042,1032162938)+W(6,-1125064265,-1103861773,1063409170,-1105633547)+W(7,1019498859,1040788513,-1090935047,1034133532);WS(-1104397694,1058392920); +sum1=W(0,1012876448,1051523414,-1094911217,1023486907)+W(1,-1126111401,1050625047,-1106828476,1033392977)+W(2,-1142522206,1043902243,-1089440467,-1119682235)+W(3,-1115125816,1063861817,-1093833780,1019625524)+W(4,-1103048369,1056801600,-1087921625,-1096529922)+W(5,999529969,1053396405,-1107310585,1015514383)+W(6,1016404519,1042081404,-1104958721,1039287934)+W(7,-1117545451,1054067798,-1097217844,-1113687714);sum2=W(0,-1130009672,1013515790,1013756514,-1153587550)+W(1,1027809153,-1106180134,1023886448,1024050371)+W(2,-1106384796,1042067106,1052609397,-1094102229)+W(3,1051460883,-1094561503,1078005003,-1070026280)+W(4,-1104521112,1032257325,1072194837,-1075632186)+W(5,1033821004,-1124940473,-1094906083,1053282219)+W(6,-1112259960,-1168427353,1046140857,-1098407638)+W(7,1028508475,-1120291522,-1140922271,1033718481);WS(1063327007,-1121248448); +sum1=W(0,1017612078,-1113236667,1042967269,1035231217)+W(1,1043030576,-1096763312,1049218219,-1115130868)+W(2,1039059525,-1091103118,1058517677,-1107367965)+W(3,-1115811128,1053297652,1033504868,1009543939)+W(4,-1095615210,1063340055,-1082785422,1047061435)+W(5,-1099887459,1054079124,-1088587000,1042859328)+W(6,-1140707177,1041492110,-1101731443,-1120288724)+W(7,-1120397682,-1126620524,1029718569,-1104957341);sum2=W(0,1037909727,-1119813454,-1099212072,1032936033)+W(1,-1098298527,1048025725,1045330821,-1097673782)+W(2,-1126569464,1041835288,-1106229244,-1109675885)+W(3,-1106955476,1067026849,1067954224,-1092590328)+W(4,-1096969233,-1085288934,-1095495837,1004812688)+W(5,-1118592354,1042571631,-1108169766,-1096486003)+W(6,1042882430,-1117602980,-1164085849,1034064234)+W(7,1037216424,-1116313332,-1100305071,1045459772);WS(-1114652667,1051933605); +sum1=W(0,1026700110,-1102428549,1043087092,-1109604752)+W(1,1037508767,-1105027032,1048715843,-1113263092)+W(2,-1128033780,-1106431647,1062796090,-1098797270)+W(3,1034155035,1043250735,-1089603768,1023780992)+W(4,-1102462575,1059213449,-1090890112,-1112475685)+W(5,1024543544,1038435705,-1106007014,-1121524254)+W(6,-1147042251,1038748492,-1119096106,986589794)+W(7,1032374633,1016229610,-1104514210,1007891224);sum2=W(0,-1129141996,1043866561,1029019378,1050935854)+W(1,-1106880495,-1096921120,-1092013580,-1111274547)+W(2,1031191254,-1123077406,-1086673510,-1096956427)+W(3,-1102244397,1064276171,1064706574,-1115781076)+W(4,-1101040753,1061828176,-1113110329,-1106057540)+W(5,1046080919,-1095750750,-1091369762,1029696990)+W(6,-1112883155,1042185570,1042119352,-1113619581)+W(7,1031234782,-1128566730,-1105256367,1012473722);WS(1059465279,-1101420399); +sum1=W(0,1033088680,1043444330,-1101682761,-1124073107)+W(1,-1124176798,1000916382,-1126261266,-1118729178)+W(2,1014063089,1057398923,-1089602004,1032573720)+W(3,1035053989,1034190184,1039770557,-1114558729)+W(4,1045820204,-1087528660,1057859064,-1096323421)+W(5,1038292302,1036787650,-1106381771,1041172764)+W(6,-1115007182,1027988010,-1104773247,1024683157)+W(7,-1131477704,1042732770,-1102530758,1029511616);sum2=W(0,-1093261173,-1081648717,-1107343332,1020947921)+W(1,-1100338012,-1096055698,1016623505,-1121572837)+W(2,1016590929,1049309077,1058913944,1035038069)+W(3,-1160318928,1060463741,1061699617,-1121635630)+W(4,-1111261089,-1123677731,-1095509190,-1116667427)+W(5,1032510827,1042247124,988275856,-1130213341)+W(6,1037987285,1035681279,-1111758125,1033159595)+W(7,-1106728517,1035240533,979544481,-1112486763);WS(1060076127,1072958059); +sum1=W(0,-1103118654,-1090537599,1060753617,-1129584897)+W(1,1043365506,-1097065432,1046496158,1025963976)+W(2,-1115420333,-1086314390,1060760746,-1106610556)+W(3,1031523031,-1088162978,1055888777,1040410096)+W(4,1033412302,-1089193875,1052645932,-1138875303)+W(5,1032254402,-1091959462,1054239287,1032279415)+W(6,1031863013,-1111327644,1044639698,1032182482)+W(7,-1127560355,-1086013855,1056703661,1044337291);sum2=W(0,1034238418,-1122429687,1038471498,-1105287037)+W(1,1026722605,-1113650971,1047703041,-1106809975)+W(2,-1123083006,-1101416602,1050567163,-1099784158)+W(3,1044566349,-1095747837,1073798913,-1077245954)+W(4,-1114043742,1044375513,1074668356,-1072322090)+W(5,1029836970,1032414162,1076147895,-1070521946)+W(6,-1124457715,-1132025334,1076524889,-1071353549)+W(7,-1112207598,-1112893824,1071535287,-1076180558);WS(-1114470395,-1114976351); +sum1=W(0,1017446070,991904560,1034584479,-1110976571)+W(1,1040990896,1041627584,-1107221597,-1099251857)+W(2,-1129681934,1047992216,-1115356259,-1111571481)+W(3,-1120446036,1061349282,-1083497834,1039733326)+W(4,-1097641691,1061559014,-1089507216,1036247843)+W(5,-1110115727,1055187519,-1098995485,-1114440077)+W(6,-1110184487,1045114861,-1109668803,-1115117640)+W(7,1033457695,1047040436,-1107186297,-1120899067);sum2=W(0,-1093678598,-1084434022,1064533419,1042743345)+W(1,1002676269,1057422860,1067683118,-1108978134)+W(2,1055748356,1066493380,-1078621547,-1117769694)+W(3,1044340647,-1079318791,-1079939901,1015093293)+W(4,-1118111722,-1116089022,1054002901,1049699290)+W(5,-1120084888,1044705221,1039926847,986467602)+W(6,1001595675,-1112694927,-1112070298,-1107171922)+W(7,-1123642691,1031220790,1023903081,1037662763);WS(1048785023,1039045299); +sum1=W(0,-1104130562,-1090140327,1061197562,-1133671882)+W(1,1043168659,-1100442863,1040570004,1032880081)+W(2,-1117502116,-1085428843,1062309944,-1102819715)+W(3,1029857553,-1093347651,1050495728,1038995485)+W(4,1034838603,-1089406196,1050259320,-1127149063)+W(5,1027207566,-1093521697,1054560318,1026681976)+W(6,1024393315,-1120775857,1039464338,1035433414)+W(7,-1130533431,-1086838999,1056208688,1041402190);sum2=W(0,-1118465298,-1142302474,-1114395216,1037219807)+W(1,1011712973,1025023956,-1104707163,1039062755)+W(2,-1128433260,1041730218,-1095905892,1046574176)+W(3,1029767219,-1097771962,-1080533844,1069124140)+W(4,1021354231,-1094677866,-1075595300,1073795377)+W(5,982009542,-1122047812,-1072373863,1075522683)+W(6,1014788797,1028525757,-1072719492,1074436097)+W(7,1033540398,1020814500,-1078361330,1068741752);WS(1040594174,1002085105); +sum1=W(0,1041861603,-1113198522,-1137236930,1041085614)+W(1,-1097746587,1055071640,-1100468781,-1121524679)+W(2,1032164980,-1088672026,1047493466,-1109849488)+W(3,1031577622,1050744420,-1105375081,1048884604)+W(4,-1102982955,1057599999,-1087672398,-1113508732)+W(5,1044101411,-1103363988,1050064611,-1098107838)+W(6,1034678964,1036351259,-1102178050,1043931332)+W(7,1026039088,1034848362,1033863059,-1106488144);sum2=W(0,-1099743490,1011906269,1037961444,-1108436276)+W(1,1035577370,1026663055,-1152297667,991169347)+W(2,-1115293072,1057096352,-1095995741,1045881501)+W(3,-1102421679,979639118,1050233559,-1097952901)+W(4,1038726510,1044440375,1022991474,-1122343653)+W(5,1032210717,1032214892,-1139108605,1026937641)+W(6,-1107407193,1028754425,-1115369483,-1105994898)+W(7,-1120037205,-1123040177,-1104470915,1022469878);WS(1066613200,-1123971367); +sum1=W(0,1021072883,-1096708150,1051074184,1026036124)+W(1,-1125712504,-1090955664,1051398158,-1108624754)+W(2,1041158633,-1159875842,1058934814,1040756057)+W(3,-1106077125,-1079911082,1061682240,-1090753503)+W(4,1036847484,-1093258685,1055629981,-1114271443)+W(5,1032267227,-1103560179,1054180539,1025501945)+W(6,1016782186,-1089925031,1052861897,-1105228376)+W(7,1031886911,-1106725252,1047227273,1043536294);sum2=W(0,-1120579723,-1102098813,-1103583809,1039910130)+W(1,-1104595791,1059079365,1035649855,-1110832147)+W(2,1060943463,-1078775742,1055196914,-1115424415)+W(3,-1081375340,1070420847,1036446407,-1092581761)+W(4,1048074442,-1106373275,1050043459,-1101688097)+W(5,1049316438,-1084015554,1050724789,-1115969635)+W(6,-1088959333,1065759760,-1088425301,1051846236)+W(7,1054216959,-1087995034,1052608338,-1103333947);WS(1015488492,-1082266482); +sum1=W(0,-1115294884,-1096364772,1054950795,-1109722877)+W(1,1041881447,1036768790,1051075280,1018280484)+W(2,-1116482020,-1083421327,1062057653,-1105734603)+W(3,1028536641,-1079950554,1057564011,-1124656723)+W(4,1044897017,-1088856963,1054170231,-1129161159)+W(5,-1108243791,-1096513911,1056273768,-1113027740)+W(6,1033207234,-1104622888,1056919206,-1132093050)+W(7,1015505847,-1096156044,1054606378,1025701004);sum2=W(0,-1103335141,-1123809016,1056172663,-1093357581)+W(1,-1087173612,-1080484881,1047550056,-1112078382)+W(2,1045744538,1068142929,1051886373,-1102262951)+W(3,-1106751239,1065979347,1064817240,-1097769156)+W(4,-1089877767,1048007586,1065470183,-1095892093)+W(5,1054342226,-1086806497,-1098340366,1033891425)+W(6,1047940388,-1098712592,-1102735881,-1105000175)+W(7,-1120076732,-1082944418,-1088981287,1059622670);WS(-1089551423,-1072840444); +sum1=W(0,1041019406,1055991358,-1086576149,1027645528)+W(1,1022173115,1057526040,-1100702364,-1141651861)+W(2,-1113297010,1036785718,-1093552675,1016689751)+W(3,1015463395,1059475300,-1089572736,1031793146)+W(4,-1103473726,1056836657,-1091007140,-1125097480)+W(5,1040814976,1050051043,-1090411145,1041821422)+W(6,1007312016,1050846086,-1098618125,1015074267)+W(7,1029778436,1053584058,-1097362556,-1104623366);sum2=W(0,1069423067,-1076703167,1041694716,1032293264)+W(1,1072187327,-1073855626,-1115348910,1008297781)+W(2,1072064387,-1079134619,-1107764634,-1120515458)+W(3,1072314518,-1077864031,-1089838794,1037018177)+W(4,1066704589,-1081021850,1036250076,-1121141704)+W(5,1063804587,-1081933355,1028352388,1025803257)+W(6,1053139391,-1094622730,-1114321992,-1123317222)+W(7,1042659879,-1099654949,1035224325,1027779018);WS(1053893247,-1106302313); +sum1=W(0,1031892188,1044357278,-1093335703,-1124627014)+W(1,-1110506435,1051962248,-1098499127,-1121076939)+W(2,-1127073177,1061666784,-1085429924,1038775118)+W(3,1047997302,1064449402,-1082436051,1042378233)+W(4,1033243951,1041901099,-1118050391,-1100759903)+W(5,-1107646187,1053582704,-1104422127,-1107823800)+W(6,-1112186286,1037482077,-1118004236,-1134911574)+W(7,-1112631434,1050110011,-1103845867,-1111029158);sum2=W(0,1045534781,-1106914963,-1093884354,1048929407)+W(1,-1136883904,-1105365809,1058094665,-1099297773)+W(2,1027794169,-1087950271,-1076257974,1057853479)+W(3,-1091599460,1049402813,1070891205,-1101014716)+W(4,-1105954111,1059435817,1057695328,-1088483015)+W(5,-1110353364,1056244223,-1096007662,-1116753268)+W(6,1026306116,-1106437513,1042940020,-1107558514)+W(7,-1105327762,1049633694,1019026622,-1111740866);WS(1043803134,1031905225); +sum1=W(0,-1113675573,1045344728,-1093561052,-1125193272)+W(1,-1137620096,1015450714,1039772705,-1142985628)+W(2,1045527725,1036603287,-1087612823,1043570724)+W(3,1047471777,1057861093,-1131204708,1032608022)+W(4,1025442024,1007995990,-1109713128,-1125123818)+W(5,-1101766076,1048683192,-1098589181,1017746514)+W(6,1041363873,-1103914745,-1142310312,-1137687994)+W(7,-1104559247,1053784172,-1096789826,-1120823545);sum2=W(0,-1102611800,1052608919,-1092971881,1033368250)+W(1,1042572795,-1112317124,1050084573,-1099740129)+W(2,-1143715563,1036000712,-1099050864,1046340985)+W(3,1047906835,1058925768,1062269077,-1106615878)+W(4,1034463821,-1089628524,-1100033854,-1143169701)+W(5,-1097650393,-1097284017,-1155008883,1034459058)+W(6,1044772028,-1090965565,1043620595,-1102441858)+W(7,-1105069125,1053414419,-1099181286,-1145018737);WS(1065606800,1041895077); +sum1=W(0,1041785011,1041397665,-1108226929,-1113822832)+W(1,-1113293285,1050236482,-1089967688,-1105474774)+W(2,1031552121,1063682744,-1092426598,1045393909)+W(3,-1114204019,1055253222,-1085544687,-1106251932)+W(4,1014586031,1057927896,-1092878524,1018782386)+W(5,1032452466,1054837340,-1094102329,-1135035573)+W(6,-1103346054,1043307490,-1097746379,-1114747425)+W(7,1025447425,1058487624,-1098262983,-1119448485);sum2=W(0,1038489223,-1094743304,-1079775068,1069957645)+W(1,1032193624,-1106563024,-1075431018,1074314813)+W(2,-1137158564,1029053577,-1075905408,1067854461)+W(3,1048862753,-1103121169,1061439417,-1090496129)+W(4,-1107218869,1018988618,1061842524,-1083145579)+W(5,-1112577633,1015522148,1055667456,-1093776696)+W(6,1034028859,-1107822714,1032002642,1038458963)+W(7,-1110240510,1017646246,1047594841,-1100108785);WS(1050857279,1035401177); +sum1=W(0,1029370009,1049972466,-1100844155,-1114359850)+W(1,-1121232094,1045749679,-1097541146,-1119608387)+W(2,-1118971861,1054737744,-1089471141,1032044074)+W(3,-1116554354,1064433520,-1088203652,1039513726)+W(4,-1102118870,1057059356,-1089223685,1028806533)+W(5,1035949272,1055161550,-1095333099,1039358524)+W(6,-1118591397,1035470985,-1098430605,-1114373271)+W(7,-1155732684,1050840570,-1105548665,-1113669781);sum2=W(0,1034282103,1040723224,1028955705,-1104697256)+W(1,-1111920318,-1118965841,1031483971,-1123254751)+W(2,1023538768,-1128437695,1043259383,1034554870)+W(3,-1133376386,1038672881,-1148076972,-1078609243)+W(4,-1119100907,993338648,-1084940093,-1075024478)+W(5,1014776166,1050613235,1050550535,-1100774866)+W(6,-1117007635,-1108740075,-1098463376,1069274341)+W(7,-1121555310,1040276790,1054296012,1072481706);WS(1059068159,-1095269543); +sum1=W(0,1022243158,1058751902,-1083015108,1040310153)+W(1,-1126585055,1052633434,-1095802212,1009201364)+W(2,-1113503115,1061437964,-1083734386,1040208083)+W(3,1034732162,1062365313,-1087136899,-1116554445)+W(4,1029695369,1054753811,-1089074173,1044292534)+W(5,1045709362,1047783152,-1093733821,-1141695574)+W(6,1005846771,1043895001,-1096742887,1042140272)+W(7,1049870212,-1119990530,-1106170901,-1106848091);sum2=W(0,-1110453349,1048158098,1064329884,-1096499673)+W(1,-1118716929,-1117235638,-1122504669,1023790996)+W(2,-1111084235,1037169053,1037379653,1035642078)+W(3,1027079271,1044450691,-1106426334,-1103100998)+W(4,1058163522,-1086959067,-1081956377,1059064502)+W(5,1060433363,-1096141012,-1081432626,-1109003581)+W(6,1058751114,-1102281652,-1086790317,1048822766)+W(7,-1077532089,1061563184,1073667932,-1089552462);WS(-1079238176,-1098575359); +sum1=W(0,-1122061272,1040856756,-1106993315,-1113276757)+W(1,1012614613,-1098659523,1049053518,-1110111537)+W(2,1049213476,1050219649,-1088887964,1048270483)+W(3,-1091368434,1046432350,1061247706,-1098550683)+W(4,1050034455,-1092787824,-1113029435,1053252708)+W(5,-1115399887,1045840143,-1096901418,-1120030007)+W(6,-1105000541,-1102913028,1045569657,-1144293604)+W(7,1040609063,-1104981396,-1106428832,1037272948);sum2=W(0,1035271628,-1096995906,-1097624644,1051183735)+W(1,1033447544,1032410306,1048740225,-1095652467)+W(2,-1113618952,1053850685,-1109777102,1037584786)+W(3,-1104023060,1054515359,1058355960,-1116173683)+W(4,1022009109,-1114408860,-1139294461,-1096371453)+W(5,-1104458884,1030897990,-1116975083,1030595307)+W(6,1044684178,-1115683354,-1099524388,-1117706649)+W(7,-1104406640,-1106540716,1036671037,-1108415342);WS(1064155455,1041078114); +sum1=W(0,-1114884791,-1133388468,1031759625,-1116707016)+W(1,1038026665,-1103926126,1051074474,-1135572861)+W(2,1040569148,-1088265213,1049866386,-1145284192)+W(3,-1123095214,-1088521037,1060913876,-1110455500)+W(4,-1113346810,-1094483240,1044072016,-1116167073)+W(5,-1098688777,1052099081,1034732568,1029730485)+W(6,-1106297864,1038941559,-1138713347,1017022612)+W(7,1033022404,1027852876,1019301565,1028095637);sum2=W(0,1027468398,-1120484835,1033713911,1037828351)+W(1,-1111732215,-1115316427,-1113615213,-1102210431)+W(2,-1149402831,1042551085,1015721118,1027887653)+W(3,-1136133524,-1101059653,1005178376,-1105049969)+W(4,1058132410,1067179636,-1112798365,1033627060)+W(5,-1084703700,-1093846517,1036573120,-1112780439)+W(6,-1103172541,1015696434,1035924289,1025169534)+W(7,1011948492,-1119207903,-1106241198,1034168377);WS(1056869759,-1097268032); +sum1=W(0,1018133293,1036411431,1039633317,-1111689725)+W(1,-1105532941,1007771751,1034605623,-1107937040)+W(2,1027243330,-1116024394,1050783724,-1105991139)+W(3,-1097428310,1032024955,1010531964,-1109581452)+W(4,-1099204213,-1130187397,1045069064,-1103861656)+W(5,-1133851766,1034973653,1044277428,1044990678)+W(6,-1138393927,-1114469768,1046520720,-1106353867)+W(7,-1118550618,-1118964077,1036629184,-1155661924);sum2=W(0,1031819015,1040620760,-1130428603,-1130628701)+W(1,-1113612713,1045122152,-1113774176,-1118722775)+W(2,1040659447,-1122637452,-1093905874,1015363301)+W(3,-1113225510,-1080510307,-1073670430,-1129641903)+W(4,1023788280,-1103769905,1040925011,1045479736)+W(5,-1115035325,1050277803,1074164392,997650792)+W(6,1009487418,1041168723,1056579340,1043373785)+W(7,1023947578,-1112728330,1044922942,-1122436477);WS(1064095487,1025785067); +sum1=W(0,1026371284,-1106851535,-1128892272,1040514533)+W(1,-1097495743,1042476562,1049973404,-1103190740)+W(2,1050378694,-1104849584,-1115675316,1040022019)+W(3,1008396404,-1085976658,1058008769,1040395090)+W(4,1042871873,-1097042470,-1098054097,1050097558)+W(5,-1103138663,-1109264236,1052615848,-1102548473)+W(6,-1136206974,1035073279,1037088776,-1157051795)+W(7,1034556564,-1094929447,1045135411,1023679636);sum2=W(0,-1124722923,1033420628,-1105442746,1029168594)+W(1,-1114618025,-1100145939,1047309531,1048079041)+W(2,1043439029,-1115804833,-1084852425,-1101613108)+W(3,1036363299,1057589449,-1089136554,1042227257)+W(4,-1096133271,1053618149,1028964970,1045151454)+W(5,1049502378,-1091358477,1056312267,1041752672)+W(6,-1106999272,1030436134,-1100909906,1036382707)+W(7,1013819494,-1119548384,1043379377,-1113267324);WS(1060109055,1023402244); +sum1=W(0,1039025762,1051909299,-1098089231,-1107880995)+W(1,-1109278395,1054481389,-1093104548,1018380380)+W(2,-1125210976,1061074499,-1087624466,-1167447218)+W(3,-1107337262,1069080830,-1092709234,-1119879878)+W(4,-1119314274,991275263,-1085745760,1030906608)+W(5,1038278743,1049054227,-1093068092,1028271716)+W(6,-1120902815,1043342663,-1102438460,-1122586985)+W(7,1024999351,1051802331,-1098889074,-1107737008);sum2=W(0,995982518,1035578813,-1118279893,-1115504751)+W(1,1033194341,-1121421677,-1114972659,-1108849613)+W(2,1038373562,1046888388,1069469835,1041670894)+W(3,1040171687,-1103362299,1078927590,1050450381)+W(4,-1108098969,1050255581,-1065023683,-1097423961)+W(5,1027047733,-1096418856,-1082214759,-1114805949)+W(6,-1147696971,1042040695,1045909115,964966831)+W(7,1033796110,-1116244525,-1112457727,1025540676);WS(-1092049407,-1078216845); +sum1=W(0,1019093687,1057591089,-1089127853,-1109784091)+W(1,1030002432,1050969332,-1096074010,1043174565)+W(2,-1100550858,1056027116,-1082843219,-1126191805)+W(3,1055647027,1063070242,-1088645600,1049441628)+W(4,-1103872766,1039049940,-1097545633,-1097650089)+W(5,1041444210,1057957242,-1095349663,1024042875)+W(6,-1115845919,1034942714,-1103665506,-1123963793)+W(7,1042339236,1059965491,-1089209262,-1105758607);sum2=W(0,-1086426610,1062347208,1053593730,-1108806990)+W(1,-1096143108,1055082976,-1101252044,-1138780047)+W(2,-1089951657,1045157118,-1111940928,-1099705126)+W(3,1062855195,1048769854,1037201995,1058343455)+W(4,1068897447,-1073459143,-1091098547,-1094950430)+W(5,1074016711,-1078468086,-1119407664,1046274438)+W(6,1075026151,-1071781830,1031118734,-1128975824)+W(7,1074160921,-1072043968,-1095931446,1035271906);WS(-1092377983,1032564911); +sum1=W(0,1026968586,1051240140,-1140824311,-1108814006)+W(1,1001025293,-1135919542,-1114206145,1031981930)+W(2,-1101464865,1047585891,1035412731,-1105914151)+W(3,-1099757657,1046337282,-1093593858,-1111723206)+W(4,-1099131534,1042168181,1042300945,-1114245051)+W(5,1021990836,1042765483,-1105010841,1047084274)+W(6,-1124857771,1039475666,-1129901419,-1110153104)+W(7,1016095931,1031087233,-1150842169,1021006644);sum2=W(0,-1152594313,-1103837493,-1119502913,1035550709)+W(1,-1114711758,-1102219265,1049238470,-1111809635)+W(2,-1122222477,1021928584,1051353268,1038283603)+W(3,-1119994373,1043085394,1069806319,-1113383091)+W(4,-1117872135,-1098150014,1040245198,1038911980)+W(5,-1136114154,-1114380427,-1084770114,-1106271331)+W(6,-1118889611,-1103586212,-1097500544,-1109409577)+W(7,-1120239593,999997765,1032457879,-1130668925);WS(1066805616,-1146277627); +sum1=W(0,-1135230785,-1097679853,1046488473,1036204713)+W(1,-1149155717,-1106566573,1047676826,-1098488427)+W(2,1034010150,-1092037473,1047117051,-1103697017)+W(3,1042337650,-1085421897,1062693860,1057957971)+W(4,-1127867356,-1091217395,1049537116,-1114566390)+W(5,1036367663,-1094061036,1056189429,1034870184)+W(6,1011804270,-1108406741,1017502967,-1103604141)+W(7,998521116,-1096997053,1049188263,1029261884);sum2=W(0,-1122819855,1035645255,-1107161682,1042480496)+W(1,1029215207,-1111163705,1019166485,-1107159841)+W(2,-1109976389,1026839491,-1129473215,-1115971786)+W(3,1044451524,-1095838714,1082201538,-1067229991)+W(4,-1130065951,-1147512571,1052773623,-1091650896)+W(5,1027965847,-1156411358,1033233466,-1142132409)+W(6,-1119702735,-1110332882,1034307583,-1107215185)+W(7,1036873692,-1114357123,1001850219,1025815163);WS(1040205182,1040987841); +sum1=W(0,1032709552,1050828331,-1098789018,-1130845956)+W(1,1028035406,1054299632,-1102534446,-1131566290)+W(2,-1152624047,1000765841,-1087146945,1024089890)+W(3,1047238622,1064828620,-1084918512,1044521480)+W(4,-1110798127,1059217829,-1080798168,1041701723)+W(5,-1160283945,1057730984,-1094152707,-1105870556)+W(6,-1129145589,1050797759,-1154982570,-1121779940)+W(7,1035307633,1040620053,-1104995442,-1110323595);sum2=W(0,-1104834685,1039834326,1040649104,-1113573633)+W(1,-1098615503,1050496819,1034170750,-1119108596)+W(2,-1090508283,1045914856,-1118657109,-1128160390)+W(3,-1080862372,1070974917,-1102559609,-1095002000)+W(4,1048874616,-1085801376,1041220807,1053594264)+W(5,1063492499,-1081343708,1047362948,1022825140)+W(6,1035824034,1033985362,-1099586035,1041895669)+W(7,1062512173,-1089072248,-1130222490,-1115149866);WS(-1087487423,1060332710); +sum1=W(0,-1105878689,-1095746139,1053913286,1037671952)+W(1,1042437466,-1089004262,1055197099,-1117440135)+W(2,1040585322,-1081828961,1059867107,-1114610404)+W(3,-1121111477,-1099866351,1061690846,1028605502)+W(4,-1112195269,-1115422148,-1104536871,1040822242)+W(5,-1112892785,1039314504,-1102951638,1041433743)+W(6,-1122925576,-1117471766,-1107184778,1048192776)+W(7,1012646976,-1108492170,-1130420108,1029799624);sum2=W(0,1017331955,-1097747777,-1097037835,-1162485367)+W(1,-1104677463,1040900608,1016355419,-1104406873)+W(2,-1117673238,-1081336501,-1089023490,-1117660642)+W(3,-1094338757,1073518733,1068423959,-1096388411)+W(4,-1119646366,-1103573743,1048344480,-1093216188)+W(5,-1104710153,-1106204508,1057220074,1028492960)+W(6,-1107625181,1041186571,1033091565,-1092192530)+W(7,1022869095,-1097636016,1053959289,1049060345);WS(-1096756863,1051174382); +sum1=W(0,1025372546,-1115668125,1000611497,1034391118)+W(1,-1106905723,1039995714,-1105014230,1041916975)+W(2,-1114360751,1043101563,-1117013085,1027806076)+W(3,1025624474,-1089490746,1058174613,-1111998130)+W(4,1037998160,-1092891318,1045000731,1008039732)+W(5,1032794399,-1107085565,1035643438,1030397185)+W(6,1034992970,-1114405501,-1121180749,1018926829)+W(7,-1114244794,-1168885266,-1120880459,1029203969);sum2=W(0,-1089960886,-1095856011,1007316785,1036775569)+W(1,-1092452707,-1106157919,1041476280,-1107942220)+W(2,1049541326,1074170001,1050706137,1021239050)+W(3,1032119458,-1085150802,-1083810164,-1132331444)+W(4,1032929374,1046048366,1043182557,1036225521)+W(5,-1110883627,-1112079347,-1129593193,-1113579728)+W(6,-1123073435,1027735021,-1214669080,1009639193)+W(7,1026522309,-1111935169,1009058861,1022066674);WS(1063524863,1010978751); +sum1=W(0,1033376264,-1090913225,1054337940,1034437913)+W(1,1035248130,-1094935586,1045510498,1040021853)+W(2,1029138555,-1084407830,1057961148,-1141033844)+W(3,1040606570,-1085174115,1062831778,1032741433)+W(4,-1146340206,-1080254739,1060252175,-1127614262)+W(5,-1122169062,-1094320024,1058700983,-1136275261)+W(6,-1113033206,1033710501,1045946247,1007782611)+W(7,-1115451138,955403507,1033261261,1030604567);sum2=W(0,-1096400044,1053621644,1017015195,1037111777)+W(1,1043917783,1009306318,1005897821,-1106811629)+W(2,-1123678571,1051339656,-1141989437,1047789047)+W(3,-1090244436,1062093709,1065539532,-1093438727)+W(4,1046901313,-1080576226,-1083332175,1049955112)+W(5,1048870815,-1106342004,-1097183812,1043219374)+W(6,1033884063,-1098524562,-1097464341,1050393105)+W(7,1053211427,-1124418811,-1092155120,1044056917);WS(-1085369887,-1080302329); +sum1=W(0,1021216124,-1112260523,1035888345,-1110274640)+W(1,-1121762938,-1119192737,1049037307,-1111476420)+W(2,-1103047566,1050211017,1061443675,-1097892613)+W(3,-1094342263,1058411732,1044828010,-1097171068)+W(4,-1105630871,-1139271463,-1119204121,-1112160677)+W(5,-1107174593,1042276856,-1100915542,1026261917)+W(6,1025950537,-1113852108,-1174284878,-1110403297)+W(7,-1146340105,-1119668597,-1119790119,-1132483222);sum2=W(0,-1115512925,1035074177,-1191992884,-1115656893)+W(1,-1146353705,1040461813,1043381354,-1137020948)+W(2,1036066439,1042528734,1059049535,1021899784)+W(3,-1134998124,1058355837,1058956516,-1112812041)+W(4,-1093678923,-1081621864,-1095612272,1012903452)+W(5,-1122018103,-1089980594,1050844919,-1123282157)+W(6,-1110317749,1049357806,-1100731037,-1122890057)+W(7,1002801625,-1101025299,1036998024,1023124620);WS(-1106521214,-1077666555); +sum1=W(0,1003321829,1052142545,-1102912320,-1108686032)+W(1,-1120901013,1052094618,-1105733097,-1118608535)+W(2,-1105222370,1060439250,-1085669204,1045702647)+W(3,-1107011833,1059969903,-1113880763,-1106161276)+W(4,1029823211,-1095361591,1052882623,-1103122454)+W(5,1000924822,1039904896,-1107186882,-1106172071)+W(6,-1127794128,1000548911,-1118745688,-1113781993)+W(7,1027793952,1046166153,-1096551831,-1132637458);sum2=W(0,1034079401,1025264110,-1123371956,-1116991392)+W(1,-1123608512,-1119278092,-1104246380,-1156408861)+W(2,999851902,1031056700,1051208451,-1098806852)+W(3,-1128074608,1059405503,1063218900,1038716729)+W(4,-1102099502,-1123208440,-1110007228,-1136590423)+W(5,-1109589984,-1081290516,-1131612640,1034885175)+W(6,-1127758712,1015173988,-1124651080,1009682031)+W(7,1032460032,-1121242732,1025045004,-1115963068);WS(1061862175,-1081928168); +sum1=W(0,-1105584175,-1105871745,1043886056,1027658214)+W(1,1024897880,-1093982770,1052657028,992865878)+W(2,1038516044,-1092069365,1055074797,-1121064957)+W(3,1040792761,-1083616743,1065026281,-1106374835)+W(4,1041867802,-1089303929,1056987882,1015027694)+W(5,-1146323132,-1089274268,1054263413,-1132520748)+W(6,1033649803,-1106858177,1043742846,-1137844354)+W(7,-1113939311,-1096909360,1049053899,1017619030);sum2=W(0,1078367032,1027322757,1023449836,-1115583846)+W(1,1056220347,1044756153,-1148770222,993742973)+W(2,-1078889751,-1096547764,1043960988,-1130380138)+W(3,-1073546091,-1101560565,-1126862726,-1147412718)+W(4,-1104234997,1042443775,1029550531,-1115461788)+W(5,-1129365336,1048890957,-1133306383,1019814478)+W(6,-1132392998,-1104280017,-1130422948,-1143007558)+W(7,-1105729449,1028418751,1042854212,-1123464959);WS(1052938943,-1103606318); +sum1=W(0,-1114719934,-1087051802,1058073278,-1114447856)+W(1,-1110318513,-1108424920,1044445625,1040769086)+W(2,1051495307,-1085940948,1060893495,1037779432)+W(3,-1100729633,-1082198177,1058839039,-1103818980)+W(4,1058926789,-1090825863,1060585177,1053070735)+W(5,-1090569589,-1088355266,1053564817,-1091337376)+W(6,1050591187,-1096343413,1054456219,-1131842819)+W(7,-1120060704,-1090847836,1059253187,1026807692);sum2=W(0,1015621136,1033006755,-1072583370,1074691924)+W(1,1032703681,-1098289077,-1084108607,1067219112)+W(2,1048700747,-1098808895,-1081224226,1064576163)+W(3,-1098355550,1046984196,-1081041246,1066863963)+W(4,1047054427,-1083721832,1069053051,-1084686190)+W(5,-1097901072,1061110777,1046858869,-1086075738)+W(6,-1126056922,-1109410901,1068664236,-1079374171)+W(7,-1165737020,1047097145,1076043754,-1071293986);WS(-1083248351,1041375270); +sum1=W(0,998616699,-1087439008,1054645196,1045294540)+W(1,-1142901727,-1092067298,1052452449,-1128264947)+W(2,1043282847,-1097778587,1050602866,1042620067)+W(3,-1128981712,-1084179155,1058025241,-1146688137)+W(4,1049050406,-1090979219,1061357806,-1127282486)+W(5,-1110272759,-1086455104,1053431193,-1125997182)+W(6,1045114289,-1095775369,1052134295,981342481)+W(7,-1170526381,-1087021556,1053157267,1046767364);sum2=W(0,-1076239116,1068235144,1054062613,-1114529265)+W(1,-1079299620,1068687973,1019509447,-1116897962)+W(2,-1079042334,1068481951,1057377046,1041823371)+W(3,-1083365485,1066921525,-1100834259,1032806429)+W(4,1049726715,-1106704213,-1095788298,-1104989857)+W(5,1066758659,-1080829299,-1107253929,-1107915189)+W(6,1069675355,-1077473679,-1112126912,1021289065)+W(7,1075688460,-1073149491,-1090199615,1034867372);WS(-1089965567,1041739713); +sum1=W(0,1014059625,1050606464,-1097348868,1016608410)+W(1,-1109541748,1046384755,-1098095776,-1110057610)+W(2,-1120181702,1052952467,-1098227712,-1165355548)+W(3,-1113826001,1062759283,-1097909490,-1103909923)+W(4,-1099389050,1061539071,-1089710746,1018410859)+W(5,-1107441048,1056969105,-1097990985,-1097884829)+W(6,-1110918155,1043585729,-1112431723,-1109883584)+W(7,-1129336123,1054439728,-1101291373,-1118732474);sum2=W(0,1035083591,-1113211599,1032203968,-1112771443)+W(1,-1112359157,1037267536,-1129901649,999833884)+W(2,1037205500,-1110383577,1050641640,-1113848439)+W(3,-1119560270,1053336900,1062183610,1048127168)+W(4,-1130432545,1036846600,1052549520,-1087091182)+W(5,1033928454,1029308948,1037218786,-1080175934)+W(6,-1111608107,1035214305,-1098666781,-1106600446)+W(7,1027763767,-1137000642,1041216407,-1105808372);WS(1040803966,-1079223548); +sum1=W(0,-1103550802,-1108233168,-1115946235,1021078213)+W(1,-1113401739,-1097729981,1016715200,-1123835458)+W(2,-1105545077,-1112466052,1051122342,-1103483180)+W(3,-1095164520,1056711305,1072346450,-1092700173)+W(4,-1102562113,1033129898,1046866637,-1104392485)+W(5,-1106149592,-1100704991,1041579689,1033532004)+W(6,-1123094707,-1106323272,1017795558,-1128003929)+W(7,-1105989383,-1109921151,1019070562,-1109398092);sum2=W(0,-1132003761,-1097131135,1033952970,-1114013558)+W(1,-1126076753,-1098724323,-1102131199,1027012993)+W(2,1028715469,-1094337061,1043946979,-1109613274)+W(3,-1094940877,1075670208,1037045260,1026138301)+W(4,-1096054213,-1092647285,1052392413,-1107006741)+W(5,1050064171,-1119763725,-1101691459,1032910718)+W(6,-1095828963,-1104609741,-1104710657,-1127911473)+W(7,1024912709,-1103386045,1042676905,-1109320626);WS(-1077711088,-1080462700); +sum1=W(0,1016976667,-1095463505,1048382760,1033669226)+W(1,-1143635214,-1094028818,1043759401,1023995271)+W(2,1050435883,-1084473735,1060944248,1038367764)+W(3,1025648038,-1081613943,1061061657,-1104130812)+W(4,1033190198,-1092817267,1059085444,1035230572)+W(5,-1119077035,-1089963906,1058923652,-1115548134)+W(6,-1127874241,-1112556483,1024757337,998948881)+W(7,-1124293633,-1096263708,1052630131,1035279350);sum2=W(0,-1118714905,1038737245,1045939428,-1084863446)+W(1,-1128906105,1033599435,-1124872105,-1120736313)+W(2,-1104617441,1047074065,1073600723,1072627800)+W(3,-1102497202,-1081197801,-1069501955,1076529178)+W(4,1052988680,1051590837,-1078764847,1066278053)+W(5,1025452854,1036478618,-1078626366,-1115729701)+W(6,-1147569173,1034730428,-1094352359,-1119746081)+W(7,1045309195,-1096538670,-1097394746,1001372341);WS(-1085605823,1039908372); +sum1=W(0,-1110519177,-1101464226,1050281295,-1136474287)+W(1,998302542,-1097280531,1040574050,1017687606)+W(2,-1105109851,1050325520,-1112501642,1027599892)+W(3,1051114493,-1093718398,-1095999987,1038451002)+W(4,1047758692,-1109283231,1052111506,-1112873934)+W(5,1047411644,-1103804777,1013903280,1026946257)+W(6,1008966514,-1107759461,-1131548857,1007362713)+W(7,1027414133,-1099881946,1037344125,1030395745);sum2=W(0,-1115357326,-1098998597,1033193484,-1119934044)+W(1,-1129481498,-1104582263,1041990652,-1109942748)+W(2,1037423788,-1098625511,1052524895,1028176618)+W(3,-1149109833,1036322812,1029624616,1032249206)+W(4,-1107237807,1050926614,-1102468922,-1117055607)+W(5,-1098320683,1045914812,1016354632,1026298641)+W(6,-1118016391,1029306918,1029333966,-1116685452)+W(7,-1111060805,1035368549,1036818044,-1113790705);WS(1066221936,-1112686252); +sum1=W(0,-1111426931,1042737360,1039181581,-1110677245)+W(1,1049363148,-1108750629,-1105687720,1035534704)+W(2,-1090113310,1053136109,1051677110,-1101864162)+W(3,1038796336,-1095853365,1031102479,1019901392)+W(4,-1102958241,-1108890233,1058267293,-1107302241)+W(5,1041899238,1023718298,-1089545128,1048841797)+W(6,-1104001476,1033191264,1047293124,-1106653499)+W(7,-1112879133,-1165972390,1010166848,989728967);sum2=W(0,1019579309,-1121628281,-1104132268,-1133616314)+W(1,-1115216952,1041466962,-1110659898,1046938970)+W(2,-1101014764,1044350744,-1092586315,-1089581193)+W(3,1035949455,-1096356807,1067161402,-1097777539)+W(4,-1125343389,1019949697,1044980625,1025080038)+W(5,1020295703,1011899626,1028945397,1042942659)+W(6,-1107189524,1020414781,1024223321,1000298789)+W(7,1032252124,-1108620092,-1106879950,1034429670);WS(1065647552,1042223795); +sum1=W(0,-1118213891,-1090185691,1054600851,1042956769)+W(1,1047859212,-1099254654,1056675965,1045938459)+W(2,-1102035956,-1085546115,1052764224,-1095542592)+W(3,1049817209,-1090115457,1060918524,1048397149)+W(4,-1136727619,-1086839140,1050058698,-1107166488)+W(5,1018314812,-1089622500,1053194074,-1115710386)+W(6,1048950515,-1103143659,1055030644,1046421002)+W(7,-1111834851,-1088857895,1046059111,1019098869);sum2=W(0,1038047795,1045715537,1062099960,-1074982428)+W(1,-1100534663,-1109612723,1074456323,-1071944747)+W(2,1043709757,-1109559353,1074047524,-1086420775)+W(3,-1098906327,-1088589586,1061406543,-1087600981)+W(4,1054998296,1046750383,-1109444720,1058024333)+W(5,-1097979318,1030039799,-1095255331,1040647828)+W(6,1042447686,-1112135838,-1106577876,1042372587)+W(7,-1135615252,-1108474833,-1098188594,1051479186);WS(-1099261566,-1102058551); +sum1=W(0,1037460750,-1099740733,1035868896,1046250530)+W(1,-1118752449,1038344912,1028635221,1040547388)+W(2,1048855473,-1097823268,-1135561696,1049218244)+W(3,1046116085,-1077722267,-1089090112,1053686776)+W(4,1041532007,-1086845489,1054063629,1041462458)+W(5,1043443965,-1109540512,1036245196,1041323791)+W(6,1035797482,-1112472539,1039520068,-1116084210)+W(7,1048656673,1006300060,-1115462467,1050214602);sum2=W(0,-1107023704,-1099880087,1047853298,-1106650230)+W(1,-1103130345,1049640504,-1100868353,1035820630)+W(2,1025081245,-1099241173,1050410790,-1111373979)+W(3,1007138702,1060797185,-1096656068,1048085306)+W(4,1020633935,-1096100738,1053061345,-1098540289)+W(5,1042694232,1034621436,-1092716332,1045275377)+W(6,-1116958023,-1100840753,1057695342,-1095110662)+W(7,-1117764771,1051814059,-1092707384,1026583068);WS(-1081437504,-1086037448); +sum1=W(0,1002898847,1048903167,-1098037791,-1124004134)+W(1,1034161364,1048827465,-1110924302,1038960439)+W(2,-1097339820,1058952469,-1089826679,-1109622563)+W(3,-1102052735,1062493730,-1082951605,1046141833)+W(4,-1122224578,1056452878,-1095802941,1037494008)+W(5,-1116847174,1052097743,-1093057352,-1142221339)+W(6,-1124219870,1046287775,-1115921615,1018754897)+W(7,-1114337484,1051622635,-1097214606,-1115514650);sum2=W(0,1026296217,-1098267531,1056065541,-1107249906)+W(1,1046658552,1054123387,-1080723543,1049528827)+W(2,-1092482457,1031912087,1068312252,-1094476247)+W(3,1048926974,-1103258874,-1095327126,-1114829012)+W(4,-1093986590,1064081451,-1101319294,-1110151549)+W(5,1051240634,-1081783631,1054428583,-1109929036)+W(6,1031417427,1052301313,-1095108256,1023898518)+W(7,-1116201775,-1136084293,1032992382,-1131461985);WS(1059931039,1045326059); +sum1=W(0,-1105339195,1027626820,1035394960,1020852317)+W(1,-1116497429,-1102542884,1045819641,-1110241387)+W(2,-1104905094,1042432944,1050447189,-1120454715)+W(3,1048600749,-1087368655,1050459387,1028063406)+W(4,1017781140,-1090841955,1058872902,-1135766366)+W(5,1028510504,-1098837680,1038310627,1046575867)+W(6,-1104151378,-1135818261,1009721182,-1121800177)+W(7,1006123003,-1102238241,1039487803,-1138241103);sum2=W(0,-1108715925,1033521028,-1130002309,1043372642)+W(1,-1125695753,-1107049318,1043711791,-1096562690)+W(2,-1106861101,-1126359337,1069432650,1055907536)+W(3,1037467647,1024736242,1069236178,-1077602923)+W(4,1049447879,-1096919459,-1089672176,-1079492159)+W(5,-1108013135,1030099711,-1104043463,1048192702)+W(6,1016159100,1038861546,-1102967963,1041544949)+W(7,1025122350,1027296385,-1115278753,1038199238);WS(1065273279,-1155200022); +sum1=W(0,1032043190,-1110724474,1048813356,-1107914275)+W(1,1042748400,-1113644224,-1113329098,1017813644)+W(2,1044363154,-1103694886,-1138873982,-1119126921)+W(3,-1101712885,1049530899,1013956115,1030506334)+W(4,1020290996,1032343156,-1088512539,1047677002)+W(5,1042545917,-1119655327,-1118975351,1035449518)+W(6,1023679047,-1113927803,-1112426340,1040385292)+W(7,969146311,1014066252,-1102619473,1037002750);sum2=W(0,-1105379539,1040024171,1054804566,1020126178)+W(1,-1114326988,1033596237,-1100858724,1058095820)+W(2,-1128505094,1027874005,-1108932212,-1095228668)+W(3,-1127815582,-1090164335,1015111122,-1114002666)+W(4,-1144273240,1026082941,1057491035,-1109234902)+W(5,1011114412,-1098155637,-1123558275,-1117423595)+W(6,1010998384,1010514392,1041639386,-1148517800)+W(7,1008109660,-1110656550,1025837089,1028462436);WS(1064822335,-1095840736); +sum1=W(0,1049019197,1056391992,-1082098174,1047279757)+W(1,-1114924672,1052717533,-1097259572,-1158101509)+W(2,1006539024,1053226600,-1083318869,1028150783)+W(3,1027273471,1063307800,-1085358981,1048033194)+W(4,1024001604,1051465786,-1093212548,1040827508)+W(5,1023329786,1056189595,-1096912972,-1122795750)+W(6,1034076369,1051405604,-1097995110,1040247311)+W(7,1032078653,1049885284,-1090164049,-1102713147);sum2=W(0,1044291516,1057945825,1075245425,-1075047571)+W(1,-1105536143,1059138923,1063262829,-1084742426)+W(2,-1123279074,1064153610,1058517731,-1087050661)+W(3,-1102729189,-1117658388,1055818216,-1094508761)+W(4,1019015608,-1082824416,-1095331241,-1107921801)+W(5,-1098099014,-1088923796,-1082492094,1066223948)+W(6,1041233257,-1114762777,-1084810008,1065694420)+W(7,-1116414073,-1093119165,-1076437009,1070896480);WS(-1090760447,1052695066); +sum1=W(0,1032827391,-1086160295,1058956361,-1122589400)+W(1,1004836815,-1100507696,1050270371,1011775197)+W(2,1040820154,-1085279840,1061054293,-1126907788)+W(3,1033221771,-1085951050,1060000376,-1109718672)+W(4,-1142824410,-1090476887,1053225609,1031459881)+W(5,1019263487,-1096291378,1052048107,1014310644)+W(6,1033909728,-1104244158,1044967298,1002236306)+W(7,1030288497,-1096098979,-1123372967,1050105184);sum2=W(0,-1115548553,-1119133376,1034230379,-1106450540)+W(1,1010795990,1054475337,1049648601,-1130742967)+W(2,1025233265,-1126101085,1031862009,1074765700)+W(3,-1108773712,-1096206384,1056453743,1076253468)+W(4,1028577219,1025243447,-1092511031,1067142167)+W(5,-1123367926,-1123699076,1040231624,-1082850789)+W(6,1027045545,-1116348436,1052333940,-1074864896)+W(7,1016487959,1026289255,-1098871930,-1066441953);WS(-1098442559,1026469881); +sum1=W(0,-1149983818,1050517915,-1114000872,-1106643136)+W(1,-1119522441,1049663660,-1102209381,-1107005098)+W(2,-1111872220,1057681670,-1097110004,-1107624656)+W(3,-1148708523,1054270423,-1080449641,1044397088)+W(4,1033974589,1065584902,-1089390067,1040137492)+W(5,1034687077,1060962908,-1088971425,1011262833)+W(6,-1121497336,1043551013,-1096207069,-1152197144)+W(7,1040191316,1037520938,-1098201593,-1111636393);sum2=W(0,-1093666199,1067471948,1044138823,-1087858714)+W(1,1049995354,-1083836095,-1089657247,1040673003)+W(2,-1104373549,1067519925,1068116530,-1086283540)+W(3,-1108191449,1075025493,1070698122,-1107890740)+W(4,-1086862321,-1079149522,-1077256496,1052510667)+W(5,-1109961150,-1092122258,-1092830464,1044801958)+W(6,-1105617480,-1118106953,-1104600439,-1113062539)+W(7,1057348983,-1090446878,-1095892285,1040940184);WS(-1089367999,-1080592817); +sum1=W(0,1050901372,1020565079,-1098563453,-1123752726)+W(1,-1142600967,1046045566,-1094642094,1032349343)+W(2,1043029392,1051791856,-1092783656,1017360893)+W(3,1042662963,1059303201,-1082254536,1040706037)+W(4,-1131715556,1060541458,-1088235102,1038984656)+W(5,1028335344,1057651322,-1083519131,1042767141)+W(6,1009439676,1050310918,-1088554180,1039511244)+W(7,1040529906,1061742083,-1084895582,1037250730);sum2=W(0,-1086948904,1072921984,-1102597600,-1081008410)+W(1,1044777691,-1096214776,-1086612116,1053678014)+W(2,-1085906527,1069427540,1055370552,-1094318103)+W(3,-1107333159,1069014322,1068187895,1040782350)+W(4,-1094251850,1068759557,1049876941,-1097053445)+W(5,-1101622483,-1095651744,-1098339283,1052418274)+W(6,1054103540,-1080635176,-1098368915,-1116179967)+W(7,-1095334551,-1071443034,-1119710681,1057760894);WS(-1072329816,1074376722); +sum1=W(0,-1119826815,-1097135645,1051061560,1001332238)+W(1,1034466519,-1100415357,1050212013,1009264740)+W(2,-1121811611,-1123247055,1057003368,-1119531350)+W(3,1040071236,-1078161261,1050094223,1047608180)+W(4,1034412551,-1086793716,1060987117,-1139666027)+W(5,-1125783811,-1092987820,1053182609,1053959834)+W(6,1025497578,-1117997032,1030369595,-1130537576)+W(7,989295697,-1097292445,1040352158,1003451511);sum2=W(0,1010850411,1033963983,1041326744,-1110591524)+W(1,-1119692159,1024673399,-1126975570,1039643589)+W(2,-1110113403,-1107122545,1049177676,-1098235771)+W(3,1041465994,1041917938,1075051781,1061676083)+W(4,1019542894,1031918417,1057547658,-1072022345)+W(5,1041361680,1016152214,-1100210466,-1080793678)+W(6,-1128076954,-1119110501,-1101468559,1038326573)+W(7,1035827461,-1108745692,-1111890885,-1115279667);WS(-1089734463,1065567745); +sum1=W(0,-1115310942,-1089748010,1053493076,1041536229)+W(1,1048676446,1033541431,1047890913,-1111760907)+W(2,1051913151,-1091844976,1060749357,1031051700)+W(3,1041943745,-1078026925,1057682191,1033727319)+W(4,1032260949,-1083863979,1060855949,-1117552023)+W(5,-1123414147,-1088695462,1057895644,-1123512523)+W(6,1025799735,-1097284573,1049355215,-1134918146)+W(7,-1118314271,-1090712276,1052101531,1037093278);sum2=W(0,-1087048499,1067110585,1062551012,-1088705293)+W(1,-1089227831,-1073947481,-1107011493,1063056164)+W(2,-1081828818,-1100054441,1044700801,-1091908804)+W(3,-1106022394,1057992187,1053279159,1049660447)+W(4,1057638724,-1096117153,1047077354,1041467137)+W(5,1053589051,1049824990,-1098858111,-1112699600)+W(6,1030725267,1008667589,1055551992,991046018)+W(7,1050363813,1047082764,-1093863007,-1118599281);WS(-1079109040,-1085312521); +sum1=W(0,1023769582,1037365911,-1113299189,-1127522065)+W(1,-1140282322,-1117579705,1042794748,-1098682508)+W(2,-1105105824,1052645482,-1086336671,1041518392)+W(3,1041551140,1061549365,-1087637436,1049784787)+W(4,1030694836,-1092653220,1051894263,-1104535548)+W(5,-1111084358,1050958145,-1111723928,-1112540051)+W(6,955351653,-1113919416,1039072513,997865134)+W(7,-1133450021,1047664699,-1111528112,-1121426302);sum2=W(0,-1112127727,-1182735741,1027967369,-1099828018)+W(1,1037755147,-1116775242,-1108084106,-1106208929)+W(2,-1117076760,-1110833901,1047419656,-1106621688)+W(3,-1096944427,1050960349,1057406540,-1093670465)+W(4,920706880,1057824022,-1106635563,1046907280)+W(5,-1126463908,1025802869,1030718323,-1104727129)+W(6,1025583781,-1117624689,-1129307942,1024731263)+W(7,1016301114,-1106817101,-1146210056,-1133403952);WS(1066445424,-1114782683); +sum1=W(0,-1105169880,-1110498524,1042140161,1033176686)+W(1,1037849343,-1092096849,1045982494,1027992139)+W(2,-1111719878,-1089773556,1059787797,-1104315937)+W(3,1053025475,-1093199580,1058443885,1034263873)+W(4,-1106443352,-1085224723,1058982105,-1099213011)+W(5,-1118185334,1017432168,1051015495,1015617473)+W(6,-1115180998,-1097477655,1049335790,-1134277975)+W(7,-1104379365,-1120659192,1047806371,-1124174113);sum2=W(0,1035156885,-1104443938,1020765936,1034215267)+W(1,1010861092,-1111353322,-1131256669,-1119467871)+W(2,1053142713,-1092519845,1043066295,1043572605)+W(3,1050643378,1033492110,-1093594884,-1120345789)+W(4,-1093995815,1061622434,-1090891830,1035132204)+W(5,-1100307988,1045835461,1051701313,-1120193257)+W(6,-1094190457,1054276307,-1115303200,-1107758441)+W(7,-1095534688,-1118030035,1044764145,1010759898);WS(1053797695,1034928741); +sum1=W(0,-1113709609,1027306577,-1089618673,1039738506)+W(1,-1101985872,1036410350,-1094568298,1041675949)+W(2,-1098832221,1048222316,-1089721378,1049870789)+W(3,-1106547453,1049396519,1057932790,1032602030)+W(4,1032341932,-1093507345,1051551069,1041034929)+W(5,1038712045,-1098128846,1042310981,1020376402)+W(6,1020651977,-1102358117,1032076306,1038606871)+W(7,1037110646,-1095739626,1049811664,1036847389);sum2=W(0,-1107569978,-1096371488,-1091206842,-1113379832)+W(1,1048834253,-1100415470,-1140716449,-1098639187)+W(2,1032955728,-1097656368,-1099982688,-1102236471)+W(3,1047116738,1057366407,1067804624,-1112454303)+W(4,-1095875849,1049724515,-1107732848,1037256860)+W(5,1024141754,1047568587,-1101898886,1039735469)+W(6,-1117854930,1025784853,-1104360749,1034482735)+W(7,1031286951,1040928209,-1099991629,-1122662653);WS(-1100599294,-1113486107); +sum1=W(0,1041832895,1058015130,-1095482492,-1123207408)+W(1,-1113994869,1043005476,-1095369841,-1120610968)+W(2,-1101582062,1065539217,-1088297536,1040056719)+W(3,-1100675730,1054749782,-1085935041,-1111595960)+W(4,1015862616,1046936430,1054414015,-1110844045)+W(5,1033573462,1043027144,-1096194081,1041950395)+W(6,-1123901241,-1122192647,-1118572185,1007333963)+W(7,-1147102474,1047923809,-1106262926,-1097939280);sum2=W(0,1033496750,-1105017139,-1118941046,1012703263)+W(1,-1118187780,1043450683,-1142467441,1009095593)+W(2,1041080086,-1106458832,-1096734279,1025973118)+W(3,-1102935461,1057933296,1063076098,-1089439993)+W(4,1023898015,-1098239652,-1119844388,-1124882200)+W(5,-1122438380,-1111698692,1048742138,1004297609)+W(6,1007185073,1023645924,-1096898561,1046154393)+W(7,999989929,1034431733,-1090457759,1048791679);WS(1058454143,-1086058342); +sum1=W(0,-1115074879,1051341170,-1123276713,1040408770)+W(1,-1099743710,1054019099,-1112675511,1042487060)+W(2,-1103933280,1057240637,-1095853513,1044345774)+W(3,-1113530407,-1085932301,1048593300,1034191179)+W(4,-1124606630,-1090466976,1059272419,-1105205160)+W(5,-1115568198,-1097279225,1052135974,-1111240730)+W(6,-1123572016,-1108988935,1039376368,-1135917288)+W(7,-1118699368,-1095706385,1041536544,1043157563);sum2=W(0,1047642666,-1106684338,-1097565895,1038757740)+W(1,-1094360366,-1104496052,-1137000462,-1120606628)+W(2,-1111839157,-1101578828,1017360469,1043520604)+W(3,-1101124559,1062389037,1056361687,-1110716481)+W(4,-1119401007,-1099504899,1057357121,-1121032787)+W(5,-1114275291,-1102577927,-1111580608,-1174578992)+W(6,1010413358,-1121638606,1047557438,1020758339)+W(7,1018914035,-1100286365,-1108198790,1031842399);WS(-1116191222,-1087222261); +sum1=W(0,1051378220,-1092140039,-1098282527,-1115126509)+W(1,1026061480,1041212802,-1108686318,1018050395)+W(2,1051132746,1028855632,-1114615088,1028919646)+W(3,-1131139769,1054776996,-1096808426,1031880915)+W(4,1029438530,1052461054,-1090181940,1047407636)+W(5,1010253799,1056191968,-1089672580,1041055121)+W(6,-1140691900,1041996679,-1095415146,1025713945)+W(7,1032111196,1051463563,-1084069643,1049760258);sum2=W(0,-1120688670,1075791226,1072772368,1033088733)+W(1,988781159,-1079951996,-1096143661,-1126178338)+W(2,1023531678,-1080919050,-1087274515,1039982901)+W(3,1034244658,-1078043585,-1074830486,-1153355920)+W(4,1038669521,1061514147,-1138433181,1047086021)+W(5,-1125227753,1050383220,-1091737459,-1117938706)+W(6,-1122152897,1043495776,1043710967,1036258954)+W(7,-1123518214,1056154705,1064633897,-1090859740);WS(-1086114623,-1084816591); +sum1=W(0,-1119067590,1036163639,-1106221778,1015833809)+W(1,1041053515,-1112478813,-1114565991,1041839788)+W(2,-1123050946,1045609440,-1102274148,1038604869)+W(3,1050414506,-1091176571,1041957568,1049671879)+W(4,1017204584,-1096458464,-1140250052,1016035267)+W(5,1033253648,-1092456237,1042499428,1004159150)+W(6,-1109025761,1039781304,1024592194,1019624502)+W(7,-1142909644,1019336538,-1110741472,1038938427);sum2=W(0,1006657945,-1115603798,1043167348,1032033598)+W(1,-1145756082,-1129023472,1029036192,-1122908214)+W(2,-1102183527,1024575987,-1134024937,1013148193)+W(3,1043063832,-1070476153,-1079118960,-1117007948)+W(4,1048257970,1078068971,1058188063,1026806223)+W(5,1030027167,1034687231,1026633068,-1106350665)+W(6,-1129422896,1014471457,-1138449465,1037397710)+W(7,-1120006792,998969122,1035752331,-1119066852);WS(1058895967,-1115291633); +sum1=W(0,-1125313920,-1118075736,-1101537045,-1102743433)+W(1,-1110715998,1028840739,-1106860038,-1113756805)+W(2,-1110540830,1050429809,-1109809347,-1112821659)+W(3,-1093243535,1056177832,1062536899,-1094426092)+W(4,-1098773368,1050921353,1050429425,-1112140166)+W(5,-1114664694,1021103494,1042267175,-1105504016)+W(6,-1108229374,1039051533,-1104944731,-1123143221)+W(7,-1128878150,1048765371,1019165331,-1113092552);sum2=W(0,-1118991740,1049660250,-1072802862,-1093107290)+W(1,1035161218,-1092533458,-1084844108,-1131472334)+W(2,1031409558,1052404039,1059153934,-1099814906)+W(3,1025873763,1059098325,1066715964,1050189246)+W(4,-1130385854,1035329255,1054800035,1033113369)+W(5,-1109675818,1033133876,-1121630224,1032032260)+W(6,1035221069,-1100849576,1017402854,999987753)+W(7,-1106515599,1041079456,1051036492,-1109656332);WS(-1088275071,-1079832501); +sum1=W(0,-1121609972,-1140631216,1031902612,-1114449795)+W(1,1054795207,1001216956,1053928586,1049117898)+W(2,-1091175970,-1109051587,-1100362195,-1089874193)+W(3,1036185063,-1108520810,-1118566269,1024185910)+W(4,1036253081,-1112588624,1050418310,1033419200)+W(5,-1095852779,-1111932116,-1106845532,-1098704820)+W(6,1056993046,1018114011,1057036918,1052334541)+W(7,-1099614386,-1114447781,-1106898567,-1103629998);sum2=W(0,1034198694,-1099753021,1052074243,-1101897553)+W(1,981839325,1036479145,1033443852,-1125560160)+W(2,1050051875,-1087878645,1061175239,-1090657055)+W(3,1043520387,-1099082069,1044393022,-1126528836)+W(4,-1099547613,1049181233,1036533430,-1113239720)+W(5,1020237946,-1106552091,-1125692060,-1111189720)+W(6,-1112528204,1051666481,-1100952955,1038783930)+W(7,1032634213,-1105193718,1038429221,-1110455840);WS(1055684799,1057467177); +sum1=W(0,-1115635180,-1084593518,1057349085,1044528285)+W(1,1040983065,-1097583958,1048845932,-1108137881)+W(2,1033664034,-1088354001,1059080519,1042415046)+W(3,1047016048,-1083875169,1057461395,-1130549589)+W(4,1040303666,-1089538899,1055847004,1025308788)+W(5,1031194256,-1090088564,1052697432,1040121956)+W(6,1036112338,-1096939300,1050363555,-1124884732)+W(7,1031542812,-1092334596,1025617138,1051059157);sum2=W(0,1039076253,1084724252,1055999642,-1111202323)+W(1,1043377438,1057352437,-1108204793,982595482)+W(2,-1111770710,-1070809771,-1115649819,1026864091)+W(3,-1129064764,-1070013447,-1084654208,1008953953)+W(4,1041506513,1024963427,1027889169,1041107952)+W(5,-1117340191,-1115045950,1023558847,-1112891517)+W(6,-1113661124,1037860995,-1108774739,-1161342746)+W(7,1006037802,-1120758055,1034794526,1036271073);WS(-1089965247,1033154456); +sum1=W(0,-1118330000,1037068672,1043453383,-1112803845)+W(1,1043361746,-1091726905,1027410848,1030795409)+W(2,1028536899,-1106295439,1047994631,-1111747193)+W(3,-1106541856,-1087991002,1053447482,-1109712917)+W(4,-1103233833,-1094017778,1058853977,-1110327970)+W(5,1037178020,1026207675,1049286760,-1111739348)+W(6,-1122355891,-1102222128,1044913013,1037236782)+W(7,-1148310999,-1106998176,1056026770,-1104668925);sum2=W(0,-1104081637,-1104712414,1038273275,-1102746442)+W(1,-1115350296,1065017407,1027805677,1038124336)+W(2,-1102551062,-1101193417,-1097697554,1025981021)+W(3,1033477476,1054909386,1069044481,-1090398660)+W(4,1048930937,-1096226206,1051154993,1049254524)+W(5,-1092653578,-1094950793,-1097937335,-1111378843)+W(6,1049862570,1042131871,-1115393002,-1100983150)+W(7,-1095610208,-1100838677,-1090656582,1038627466);WS(1053522367,-1088249107); +sum1=W(0,1041083642,1049354980,-1104528935,-1116245577)+W(1,-1109062519,1050121221,-1089361286,-1108913352)+W(2,1041255149,1062047573,-1094323010,1044478835)+W(3,-1129341567,1050256849,-1085946707,-1106612546)+W(4,-1122816004,1058306025,-1092704114,1010650184)+W(5,1034422596,1054029415,-1096738148,-1127765836)+W(6,-1105678140,1043380368,-1095183726,1004046811)+W(7,1002201935,1057986114,-1098664466,-1116617606);sum2=W(0,-1115691041,1047105417,1066880006,-1078420733)+W(1,-1122196578,1040512713,1072356775,-1074089832)+W(2,-1133382325,-1115639944,1070833917,-1079250237)+W(3,-1119943136,-1093984910,-1106032356,1053171659)+W(4,1035619338,-1128164365,-1084317659,1063302165)+W(5,1026693101,-1112542694,-1103058628,1050228647)+W(6,-1121646682,1040561229,-1106694088,-1111273903)+W(7,1035287249,-1122951759,-1109474775,1041535222);WS(1054980735,-1118400611); +sum1=W(0,1023857233,1056052581,-1108899938,-1098911041)+W(1,-1136534172,1054619866,-1084632317,1014993130)+W(2,-1109579886,1062631892,-1087670245,1019079234)+W(3,1024279465,1063340895,-1087714282,984908360)+W(4,1031638446,1054891904,-1089981519,1040973935)+W(5,1042081899,1032051762,-1091518889,1034243544)+W(6,1025101580,1036582853,-1100292439,1038263499)+W(7,1037741818,1040187076,-1096282711,1035333164);sum2=W(0,1048663857,-1103126769,-1090522781,-1135969141)+W(1,-1115607290,-1089284711,-1135630263,-1096474341)+W(2,1050959246,-1106476140,-1116194786,-1110761886)+W(3,-1094885185,1065597134,1068281966,-1097679100)+W(4,1032263390,-1114774312,-1114594327,1030603925)+W(5,-1094433235,1044112203,1034641663,1025157613)+W(6,1034671855,-1110680696,-1120338125,-1121778209)+W(7,-1100445080,1044150663,1039802827,-1101519530);WS(-1099426814,1028666567); +sum1=W(0,1017347599,1050515008,-1097546199,-1122852442)+W(1,-1114817850,1054909169,-1091252816,1034424401)+W(2,-1102332157,1058789976,-1088740593,1040697053)+W(3,1038414608,1049870885,1026332624,-1119196265)+W(4,1040863441,-1096181150,1050979384,-1096850298)+W(5,1043586729,-1094822147,1046083753,-1101867410)+W(6,1033560385,-1110297504,1043042893,-1112505198)+W(7,1024225691,1035801215,-1106319780,1022200238);sum2=W(0,1032296335,-1113854030,-1123218166,1034439881)+W(1,-1113414658,1056314261,1057288090,-1106401889)+W(2,1032045591,1056282685,1048444709,1027355020)+W(3,-1096252543,-1076472908,-1076465599,-1099548772)+W(4,1039836782,1041975936,1054239999,1041344971)+W(5,-1130462124,1060789196,1064414385,-1137373456)+W(6,1032505935,-1113045826,-1101415652,1031341874)+W(7,1017080436,-1114544525,1017354944,-1131418272);WS(1048405758,1021439377); +sum1=W(0,-1095783591,1056714988,-1095028931,-1099026446)+W(1,1004365570,1053912029,-1097931508,1040281084)+W(2,-1111296393,1060368018,-1093355890,1042667324)+W(3,-1090472608,1058906144,-1084869763,-1099317986)+W(4,1053249340,1059710205,-1111710658,1058667863)+W(5,-1096289768,1050004859,-1089344390,-1094050929)+W(6,-1116930177,1050104788,-1098648430,1032145973)+W(7,1031327257,1057263364,-1095692170,-1127343131);sum2=W(0,-1137650289,-1102128439,1065729447,-1085103011)+W(1,-1108324664,1038586891,1042582877,-1096095433)+W(2,-1107068637,-1102631398,1055966210,-1096657292)+W(3,1053004242,-1096144010,1066736444,-1084794119)+W(4,-1096186406,1065778432,-1077760412,1061684194)+W(5,1044011702,-1087564484,-1109340585,1053274132)+W(6,1031462490,1041037240,-1088233524,1060428365)+W(7,1016473473,-1095964556,-1079487884,1070082531);WS(-1120621558,-1109747932); +sum1=W(0,1041405257,1056552380,-1086075216,1021959803)+W(1,1034046808,1057052863,-1102283433,1009707220)+W(2,-1118447615,1034826244,-1089852749,1002695151)+W(3,1031113092,1061462741,-1087896594,1030648525)+W(4,-1118172841,1057041023,-1089300195,1017359341)+W(5,1039149197,1051800560,-1089266110,1034838445)+W(6,1025628006,1051243933,-1098077639,1033512688)+W(7,1023987646,1054503948,-1098034299,-1099231069);sum2=W(0,-1072120352,1076686179,-1096491690,-1109988374)+W(1,-1071453180,1075980741,1055107632,-1125676035)+W(2,-1069998225,1075876198,-1100816518,1033428305)+W(3,-1071241469,1076219984,1048961210,1018908197)+W(4,-1073669228,1072219376,-1123192163,1040773271)+W(5,-1079882002,1071235859,-1097056656,-1129279043)+W(6,-1086087106,1056170781,1049622318,1030403985)+W(7,-1096258120,1057784547,-1098632303,-1116156171);WS(1014286296,1057122707); +sum1=W(0,-1100574608,1045128364,1045637171,-1113867461)+W(1,-1134927261,-1112841149,1041785732,1021982785)+W(2,-1096946922,1023155519,1051848326,-1106336253)+W(3,-1115033128,-1094208427,1066937726,-1099783438)+W(4,-1104533485,-1099169249,1058599142,-1105189673)+W(5,-1121259095,-1097752701,1049921902,-1131816685)+W(6,-1131995140,-1111007544,-1118760834,-1114789302)+W(7,-1118839498,-1093400894,1043420320,-1116552190);sum2=W(0,1049653051,-1095117458,1052542945,1018695699)+W(1,-1094509070,1054995367,1021265631,-1101605993)+W(2,1050525055,1042728281,1046926465,1044635344)+W(3,-1103662151,1058124872,1063131010,-1104882803)+W(4,1043452805,1049859565,1029162962,1042944443)+W(5,-1102028885,-1097129382,-1116537562,-1110047725)+W(6,-1109754017,-1098619851,-1092457406,-1107003327)+W(7,-1111709279,1051259496,-1078653130,-1114867517);WS(-1089617919,-1078924764); +sum1=W(0,1038586191,1054651431,-1087542485,1032587193)+W(1,-1112517470,1043170193,-1101086846,-1121720345)+W(2,1021690773,1058605998,-1088163691,1034793549)+W(3,-1148410045,1062049174,-1087004528,-1139319682)+W(4,-1123773533,1056236357,-1089020247,1040971627)+W(5,1037589846,1058401044,-1089711896,1052009144)+W(6,-1114886949,1034515388,-1095006441,1017461287)+W(7,1015916580,1056139353,-1089662071,-1138694970);sum2=W(0,1041183203,-1104791361,-1113641717,1040266660)+W(1,-1109901203,-1103309504,1018299463,-1124518657)+W(2,1047303939,-1109225788,993644855,1039912380)+W(3,-1146453442,1050748307,1050538753,-1107008276)+W(4,-1103370030,1032462009,1024125183,-1094411631)+W(5,1035308463,1055570013,1058013570,-1087158984)+W(6,-1107592095,-1104507532,1044744090,-1091454514)+W(7,-1129723226,1050955773,-1110543421,-1122733934);WS(-1102088830,1068463311); +sum1=W(0,1007817678,1054791531,-1088166471,1034628887)+W(1,-1114291787,1051084317,-1097682087,-1130503387)+W(2,-1106493040,1059023407,-1087032011,1042839161)+W(3,-1121377148,1060487316,-1087032009,1025313797)+W(4,-1120569345,1053262386,-1090195409,1040112167)+W(5,1037434082,1049438849,-1104445288,-1112558866)+W(6,-1121570543,1043319351,-1110294871,-1130274577)+W(7,1048479966,1037267389,-1112047510,-1107488086);sum2=W(0,-1092702026,1046572938,-1113806693,1023924734)+W(1,-1078842502,-1092761370,1010298098,-1134107544)+W(2,-1073165872,1048469719,-1106037347,-1114438827)+W(3,-1075365553,1050413401,1041503306,1017902665)+W(4,-1101579557,-1110447061,1037192623,1011674154)+W(5,1066341075,-1104166524,1033398310,-1109271682)+W(6,1071992070,-1123716833,1031702363,1028552632)+W(7,1076187261,1056626852,-1110743783,-1123830383);WS(1050299903,-1120086405); +sum1=W(0,1001761330,1015037916,1045981578,1032160884)+W(1,1051426245,1042953374,-1094503950,-1131440192)+W(2,-1097473350,-1103780307,1055197076,-1100940622)+W(3,1050955122,-1082933123,-1099126616,1056645367)+W(4,-1098718343,1055455844,-1118831961,-1095742542)+W(5,-1119699408,-1145769035,1049761702,1031622998)+W(6,1038117517,-1132909758,-1105955296,1041481643)+W(7,-1107622229,1039587926,1047033256,-1103124921);sum2=W(0,1033493706,-1100025935,-1117747708,-1131691420)+W(1,1004282338,1036668146,-1097774825,1042472719)+W(2,1032395114,1043333590,-1106149887,-1122758767)+W(3,1035721710,1058018229,-1110236537,-1106477628)+W(4,-1138557465,1035348312,-1105971349,1046834331)+W(5,-1094630455,1040910383,1017216296,-1101697584)+W(6,1050323990,1034465026,-1110352462,1040100106)+W(7,-1102984389,1044530527,-1108832665,-1099114129);WS(1059761855,-1093333930); +sum1=W(0,-1114738580,1026403632,-1105736123,-1114933837)+W(1,-1114617627,1045397583,-1109519752,1044731740)+W(2,-1102727321,1028768699,-1092041414,-1111636685)+W(3,1053910378,1067649611,-1090720496,1058839312)+W(4,-1094270689,-1104323849,-1112030179,-1095377736)+W(5,-1107452471,1042776267,-1103704317,1034877772)+W(6,-1130455238,1036450873,-1131764742,1031929286)+W(7,-1108958070,1044075076,-1106063752,-1113359528);sum2=W(0,1033753751,-1111931472,1037689465,1023732592)+W(1,-1102724392,1032416705,-1105246922,-1126463180)+W(2,-1104466296,1029992729,1052475163,-1118149766)+W(3,-1083668043,1069568682,-1090236396,-1106129378)+W(4,1048180527,-1114422988,-1122305941,1038071226)+W(5,-1130490520,-1133345747,-1123788932,-1124715334)+W(6,-1103926430,1038116955,-1127253836,-1117123194)+W(7,1029490699,-1129834714,-1122171294,1029091180);WS(1058247519,1058950523); +sum1=W(0,-1149972914,-1088063023,1055543086,1037155715)+W(1,1038957612,-1093535488,1052729022,1026693813)+W(2,1039970419,-1086741707,1058924163,1030719286)+W(3,1008158544,-1077128706,1057693884,1032127358)+W(4,1041515382,-1087332234,1060656868,1000958261)+W(5,1036144305,1032313207,1056531259,-1112386573)+W(6,1048236362,-1113848378,1049522521,-1144612480)+W(7,-1101573740,-1089306475,1052006205,1039554949);sum2=W(0,1037957789,1050553491,-1089722328,1050994656)+W(1,-1128637884,1004874497,1058234547,-1095571828)+W(2,-1110859440,-1106433025,-1098594890,1041665953)+W(3,1052981065,1058989771,1052545864,-1129708900)+W(4,1040710261,1058251934,-1106724054,-1111634443)+W(5,-1090346288,-1076253449,1032950959,1015279680)+W(6,-1107045102,-1079150504,1055215751,1053553553)+W(7,-1092015484,1073146781,993278274,-1088813426);WS(-1079689312,1054955487); +sum1=W(0,-1112827293,-1094091800,1053343716,1046408387)+W(1,1038847520,-1099397203,1057879171,-1099233409)+W(2,-1106748654,-1102151838,1023820222,-1154890390)+W(3,1038138418,-1086663035,1057249493,1012875058)+W(4,1035397268,-1087965823,1057985827,-1109124523)+W(5,1020226162,-1095805620,1053821069,-1126965269)+W(6,1030022886,-1098762192,1051466543,1036334304)+W(7,-1108673687,-1096846716,1049463311,1027304762);sum2=W(0,1029906557,-1118908362,-1075330978,1069116571)+W(1,-1110945783,-1110004947,-1081100797,1067844910)+W(2,1046588193,-1089040350,-1089891752,1066162938)+W(3,-1121400966,-1106443118,-1103643831,1048795077)+W(4,-1106274145,1054044230,-1095873523,1049522444)+W(5,1040948990,-1115139995,-1120742988,1042365723)+W(6,-1114149785,-1112260837,-1107023588,1011222152)+W(7,1030737726,1025987216,1017833328,1031208089);WS(1045323518,-1099573370); +sum1=W(0,1043494028,1054678847,-1087400961,1041221965)+W(1,-1110296205,1050638833,-1098183847,1038272854)+W(2,-1129034139,1058657792,-1085969705,1035507984)+W(3,1040205415,1062545342,-1082320511,1038672050)+W(4,1019451328,1053087270,-1092792902,1018934299)+W(5,1037480760,1054717567,-1090230188,1028598065)+W(6,-1144942569,1044080591,-1094581114,1032398451)+W(7,1019441962,1056118375,-1090342307,-1135273190);sum2=W(0,-1115726367,-1100272494,1026681555,-1095030133)+W(1,1028786141,-1113941052,-1107020345,1043410282)+W(2,1044450180,-1104186275,1044693748,-1120312046)+W(3,-1097529180,1042859033,1067055887,-1093369648)+W(4,1047479398,-1097402721,1064288021,-1083945294)+W(5,-1105649332,1051025911,1073649944,-1073003592)+W(6,-1127420023,1025042835,1067916626,-1079526678)+W(7,1035799966,-1139194229,1054550763,-1086831079);WS(-1086660959,-1095040438); +sum1=W(0,-1137772688,-1101831491,1047762270,1026497863)+W(1,-1103872010,-1108733164,1048734598,-1112526127)+W(2,1033664792,-1099393082,1053294440,1036444877)+W(3,-1114303830,-1091611870,1032897582,-1105948909)+W(4,1043631948,-1111668992,1054700448,1045765800)+W(5,-1110960013,-1092153253,1051790266,-1102627253)+W(6,-1112201312,-1104258339,1038982672,1030853145)+W(7,1004207675,-1111896549,1042342295,1024477884);sum2=W(0,1047134358,-1100773581,1038575217,-1121016162)+W(1,1032860761,1019143260,-1097448906,1027754828)+W(2,1058187056,-1086969962,1050436365,-1118814167)+W(3,-1089859690,1060822499,-1092585260,1047705700)+W(4,-1073724300,1074524802,-1097001013,992280012)+W(5,-1113017653,-1127402252,1052022456,-1115523910)+W(6,-1123513506,986153015,-1101541136,1026625966)+W(7,1005834992,1026902445,1040058169,-1115254226);WS(1065625968,1033455989); +sum1=W(0,1037701789,-1151616802,-1102944307,1035789757)+W(1,-1137040283,-1099349487,1053320242,-1106274637)+W(2,1000406064,1047711372,-1098462560,1048627484)+W(3,-1094784938,-1115632781,1053161728,-1098374228)+W(4,1050863995,-1088133648,1049613697,-1120581030)+W(5,-1103592251,1049293870,-1128175786,-1114622845)+W(6,1032127959,-1118922740,1017489163,1038993832)+W(7,1038622703,-1120882929,-1119810116,-1165953346);sum2=W(0,1035866397,-1099238508,1052038184,-1107491561)+W(1,-1103116216,1047962584,-1105248240,1027069673)+W(2,1059558286,-1082734190,1057669233,-1098068789)+W(3,1058384307,-1088122523,-1091086098,1053762892)+W(4,-1096953271,1056069525,-1083280561,1064349048)+W(5,1042132369,-1106560803,1032403631,-1107462772)+W(6,-1111426470,1038442279,-1104452063,1040922744)+W(7,-1128202268,1028886015,-1150402298,1012204557);WS(1066439152,-1108830929); +sum1=W(0,-1102916748,1055608939,-1103898045,1013732302)+W(1,-1108788820,1051866141,-1097938907,1035488645)+W(2,-1097607254,1058768962,-1093577324,1043113957)+W(3,-1099017414,1030462560,-1125603603,1027216291)+W(4,-1168846782,-1113005110,1040477611,-1143171172)+W(5,-1109193920,-1109987210,1050862423,-1118580993)+W(6,-1128476473,-1109670205,1039038758,-1107320747)+W(7,-1106724277,-1105116142,1053895221,-1107171108);sum2=W(0,1050905005,1051409035,-1123874142,-1099079861)+W(1,1051922636,-1107944278,-1131839644,1035659117)+W(2,1052154527,1040207956,-1100926997,-1109355656)+W(3,1005525738,1060123319,1046139234,1029590720)+W(4,1024591478,1032045878,-1113252250,1032543174)+W(5,-1094205878,-1096175996,1039675350,1044310065)+W(6,-1094330307,-1086096303,-1128729660,-1129395200)+W(7,-1105421569,-1081193369,1062516858,1042520685);WS(-1094347903,1040885342); +sum1=W(0,1027015666,-1119901274,-1109404651,-1145327523)+W(1,-1097151811,1047615033,1051228067,-1096635113)+W(2,1050782150,-1115052947,-1096976391,1048638245)+W(3,-1106442815,1051587896,-1096200649,-1105180361)+W(4,1051184308,-1105704339,-1126487153,1051518582)+W(5,-1091810963,1046407197,1040585575,-1092825760)+W(6,1034433919,1009768300,-1132445914,1038762547)+W(7,1042242605,-1122889273,-1108464678,1040013733);sum2=W(0,-1121205117,-1124056141,-1106581817,1026565438)+W(1,1031829824,-1109805410,1007706034,1029970286)+W(2,-1105324964,1045427632,1046732003,1047283254)+W(3,-1090390675,1059020251,1057752640,-1089850616)+W(4,-1110420773,-1107061510,-1101115525,1031976810)+W(5,1018005966,-1118368537,-1103994134,1036394258)+W(6,-1113281242,-1115675784,1036673543,-1112565336)+W(7,1032068637,-1113920834,1042522746,-1145818031);WS(1066366016,-1121083386); +sum1=W(0,-1127500850,1026624689,1013565235,-1127181143)+W(1,-1122305754,-1114017662,1052467062,1035730049)+W(2,1025706181,-1088657475,-1121688536,1045310349)+W(3,-1104671484,-1098749979,1066224034,1026340635)+W(4,1043832110,-1085705014,-1112016562,-1121566277)+W(5,-1111488580,1037547214,1041900405,-1127673329)+W(6,-1123271764,-1112264441,1043675185,998683632)+W(7,1015742169,-1105147876,1022047173,-1132045794);sum2=W(0,-1102951634,1043023116,-1104735391,1035018995)+W(1,1044058166,-1093545812,1058451408,-1112978123)+W(2,1037657608,-1093647750,-1104370519,1043811519)+W(3,-1091261805,1070997171,-1105620254,1052846459)+W(4,1057746121,-1082044166,-1091103100,-1097428497)+W(5,-1106029228,1051593249,-1096225251,-1127092852)+W(6,1006392595,-1100798567,1052307063,-1107453736)+W(7,-1119100020,1013819138,-1121077487,1041369362);WS(1059191103,1030618557); +sum1=W(0,1034200101,1032351793,-1100440271,-1148363237)+W(1,1053678608,1049973094,-1098031908,1026486548)+W(2,-1114145283,1058794603,-1087452589,-1194991971)+W(3,1047695489,1053292689,-1078695803,1043453347)+W(4,-1114663316,1055818163,-1125225546,1033675947)+W(5,-1137634576,1053263444,-1094543429,966472909)+W(6,-1125278731,1041016873,-1116533557,-1115520783)+W(7,-1138534517,1043320696,-1104858229,-1119664758);sum2=W(0,1021496216,-1095812325,-1116672596,1031503244)+W(1,-1072453458,-1094113031,-1112299630,1023122856)+W(2,-1079530578,1068683999,-1135088113,1036078566)+W(3,1063841069,1074699170,-1126165044,1036242384)+W(4,-1095958945,1043477830,-1107446259,-1100441243)+W(5,1042172731,1031880682,-1119142347,1009915385)+W(6,1015153576,-1121439437,1037216194,-1114450875)+W(7,-1132334880,-1115200049,1034903618,1017712520);WS(-1096433855,1052342409); +sum1=W(0,-1117693364,1042163431,1006023611,-1113444755)+W(1,1041070378,-1095385709,1034697390,1049542464)+W(2,-1105417036,1060080198,-1109633387,-1112382959)+W(3,1052133240,-1090036408,-1085473397,1048891757)+W(4,1042648272,-1090327769,1057448056,-1111238376)+W(5,-1123398616,1043184694,-1105658040,-1106505885)+W(6,1044512510,-1111854479,-1104977148,1049508979)+W(7,-1105041790,1043408999,1041051171,-1110665802);sum2=W(0,1039259027,1043188759,-1165551167,-1113326246)+W(1,-1119373866,-1082984200,-1105050294,1045229872)+W(2,-1086821333,-1077733706,-1103802686,-1109909290)+W(3,1052826002,1067327309,1068967257,1052700624)+W(4,-1117342490,-1149070344,1054626023,-1098764713)+W(5,1036052293,1052358305,-1101813629,-1099183932)+W(6,1037381955,-1102382047,-1103461210,1052205497)+W(7,-1101694007,1050777563,-1106555317,-1096821402);WS(1046655614,1069864308); +sum1=W(0,1035633391,-1106200785,-1105260712,1050507575)+W(1,1040943483,1031319761,1026979270,1034433460)+W(2,1045417382,-1120751363,-1106053451,1045765948)+W(3,1043913370,-1093886310,-1121044950,1041581532)+W(4,1050212129,-1098821847,1042106970,1029812249)+W(5,1047844019,-1088130094,1049054225,1017929306)+W(6,1039058852,-1092291401,1041620790,1028938706)+W(7,1043891960,-1082722808,1042598038,1034869942);sum2=W(0,-1098805029,-1082465618,1017798412,1045866690)+W(1,-1101136548,-1084472150,-1108050411,1039888035)+W(2,-1094351375,-1085764460,1031330790,1027046574)+W(3,-1097728468,-1140347496,1053843229,1038111290)+W(4,1040878916,-1100091144,1043199898,-1100094208)+W(5,1049713965,1049328541,986797508,-1104239104)+W(6,1037060075,1062808960,-1119994130,-1098800085)+W(7,1058810464,1071144827,-1097822096,1017716576);WS(-1077527440,1065234224); +sum1=W(0,1031059492,-1088676934,1055802445,-1159469258)+W(1,1014606833,-1098001853,1051162632,1001612013)+W(2,1041495444,-1087241405,1059501583,-1109463457)+W(3,1031584061,-1083911392,1061276187,-1105280809)+W(4,-1143158030,-1095088526,1050088278,1038556792)+W(5,-1140389945,-1096536807,1049527800,986827883)+W(6,1035424519,-1104484775,1042937212,1030875577)+W(7,1013235228,-1100223239,1037087943,1047418837);sum2=W(0,1026928347,1019217071,1027288437,-1112677997)+W(1,1006719462,-1098369589,-1099640354,-1146387796)+W(2,-1103317527,1041304779,1050941648,-1072403340)+W(3,1043604137,-1134457784,-1112266437,-1071428003)+W(4,-1106627965,1048134757,1027462477,-1082446250)+W(5,1034526167,-1118427047,1040843010,1059493547)+W(6,-1117999031,1029994729,-1104465031,1072461191)+W(7,-1134258967,-1113504087,1054764710,1077848621);WS(1034219259,-1130863201); +sum1=W(0,-1122470601,1036468120,1033355302,-1104067775)+W(1,-1125729883,1031973022,-1125640547,-1112351746)+W(2,-1119868741,1045421587,-1122038588,-1106594245)+W(3,-1092963050,1062931954,1044707408,-1094830635)+W(4,-1102984950,1062738826,-1104269382,-1127079049)+W(5,1017182198,1050208654,-1106320445,-1109997276)+W(6,-1107264969,990945063,-1110744610,-1112571199)+W(7,-1116589116,1023027040,-1098846428,-1117279521);sum2=W(0,-1120041672,1041156572,-1103868400,1036471018)+W(1,999703935,1029144962,1036670980,-1107170022)+W(2,-1109032994,1037796455,1043292537,-1115113192)+W(3,1041627711,1046556501,1059414852,1029249656)+W(4,-1111815622,1060385029,1048639871,-1126242312)+W(5,1029813110,1040466231,-1105513272,1043143286)+W(6,-1110751572,-1103822492,-1100107078,-1101226736)+W(7,-1114401610,-1076222058,1043280503,1034327293);WS(-1097041087,-1081891922); +sum1=W(0,1045201037,-1097075376,-1126257330,-1115394372)+W(1,1042240134,-1091271089,1049467348,-1097795722)+W(2,1049780286,-1094847921,1057610047,-1097045891)+W(3,1039927583,1059654550,-1141428591,-1103383438)+W(4,-1122695635,1056430510,-1089703504,1036098616)+W(5,-1110484942,1057233913,-1087958744,1033721138)+W(6,-1117417409,1041827328,-1096746586,1035539581)+W(7,1039840796,1050554535,-1096159486,-1131932502);sum2=W(0,1012982255,1052214657,-1136022111,1032353073)+W(1,-1101224821,1042508745,-1093748656,1020863779)+W(2,-1109376974,1042044290,1045672838,-1113516472)+W(3,-1116588919,1071547407,1065241977,1040242686)+W(4,-1096183361,-1089469015,1049249478,-1120964187)+W(5,-1092858264,-1090264503,1047260540,-1103746594)+W(6,-1090462581,1039700797,1046964814,-1100885683)+W(7,-1119652925,-1083767147,-1107087862,1028764718);WS(-1088621983,1079497913); +sum1=W(0,1027161409,1052712773,-1102058289,-1100368317)+W(1,-1102075462,1051824794,-1098602113,1021667349)+W(2,-1120075900,1057942154,-1096292664,-1106147487)+W(3,-1109063205,1060662493,-1082645434,1039175801)+W(4,-1104005172,1062931830,-1090788424,-1129475640)+W(5,-1136555883,1057800198,-1090185155,1036809656)+W(6,-1112015962,1047971474,-1098101583,1009161622)+W(7,1033292370,1059753504,-1088742454,-1143403778);sum2=W(0,-1150684740,-1095235693,1044985054,1035589955)+W(1,-1114056841,-1115238312,-1127339724,-1108218072)+W(2,-1164208415,-1080604054,-1106549807,1022130402)+W(3,1034698244,-1071093346,-1080554397,-1106288272)+W(4,-1134574697,-1083926997,-1104923511,1024268734)+W(5,1043895716,1068501149,1052487431,1036117000)+W(6,-1101980686,1079699126,1054997905,-1130803558)+W(7,1050191679,1056576712,1029700329,1031345667);WS(-1087955103,1023517655); +sum1=W(0,-1106663590,-1090071677,1062902614,1013889298)+W(1,1037773274,-1103425461,1055773525,-1100022495)+W(2,-1116651838,-1089596734,1059014377,-1101161913)+W(3,1022742037,-1082614473,1060267482,1030094516)+W(4,1040438284,-1088542372,1057943128,-1120043085)+W(5,-1117813952,-1092404165,1054561254,-1116951793)+W(6,1032561623,-1100716355,1051603940,1035114019)+W(7,-1102318801,-1098396937,1049819671,1026546470);sum2=W(0,-1107653444,-1094858135,1084595456,-1065438414)+W(1,1032757863,1061839668,1074196920,-1069856939)+W(2,-1150202006,1049735190,1067688119,-1073375528)+W(3,1037010009,-1123088190,1070729644,-1082206819)+W(4,1026258576,-1089824138,1050587980,-1086758222)+W(5,1041748319,-1098358767,1057889952,-1097734258)+W(6,-1131622502,1049699018,-1127981435,-1106404220)+W(7,-1112646994,-1103776938,1048602984,-1098587943);WS(-1089607615,1063931357); +sum1=W(0,-1156148665,-1089422721,1059281720,1041177357)+W(1,1033042784,-1099513696,1053472432,-1107985659)+W(2,1027235975,-1086976804,1060428066,-1122980350)+W(3,-1117005684,-1083936660,1061258678,-1103260375)+W(4,1045226606,-1089259880,1055780369,-1111710595)+W(5,-1112863441,-1092850238,1057981025,-1109580750)+W(6,1040283212,-1096473171,1051704489,-1125267169)+W(7,-1102751384,-1096124078,1054893029,1035448166);sum2=W(0,1024298597,1074606150,1080820206,1030125639)+W(1,1037699935,1048614297,1047271097,-1121834510)+W(2,1030404477,-1085515118,-1079656120,-1166463196)+W(3,-1094400051,-1071672142,-1066721483,-1101580999)+W(4,1052543759,-1091215560,-1078287609,1028051862)+W(5,1024136176,-1095087497,-1096732136,1009399200)+W(6,-1159281410,1050441058,1057126689,-1117118368)+W(7,-1102232478,1071366890,1074685383,-1113696211);WS(-1083901183,1060981851); +sum1=W(0,-1106299749,1048978486,1016862419,-1121286832)+W(1,1039492049,-1107896957,-1115539879,1049662006)+W(2,-1113140273,-1119192025,-1098481927,-1106196840)+W(3,1055856482,-1090009641,1058119768,-1149152444)+W(4,-1103186821,-1088174932,1052019064,-1101797848)+W(5,-1108369378,1034759564,1048477348,-1146708651)+W(6,-1115937041,1008970428,1034559233,1024756171)+W(7,-1127954738,1027686380,1044214632,-1111878699);sum2=W(0,1030335348,-1130369060,-1106797797,1006653296)+W(1,-1110488253,1056034410,1040331307,-1094310491)+W(2,-1096373435,-1097486091,1063611375,-1113782011)+W(3,1042224202,-1094958491,-1106971469,1042512890)+W(4,1038378538,1057631708,-1093142933,-1140559356)+W(5,-1117770266,-1114209587,1037075531,-1114686161)+W(6,1036930446,-1105273765,-1115233817,-1115373149)+W(7,-1168276161,-1115537765,1025218793,1026640233);WS(1063762143,-1098158381); +sum1=W(0,1027555010,-1106988831,1031921883,1033567284)+W(1,-1113176415,1049655577,1032851437,-1099137927)+W(2,1044835884,-1089572014,-1106152127,1052671923)+W(3,-1094480963,1041189880,1057311541,-1101762329)+W(4,1042205032,1035602487,-1100163979,-1106014811)+W(5,1038186408,-1095655321,1046700975,1044902280)+W(6,-1112247611,995617211,1050763922,-1094051821)+W(7,1041241393,-1102946366,-1119959180,1044480349);sum2=W(0,1010916279,1040615985,-1103581164,-1126424725)+W(1,-1108274646,1037755544,1053142923,-1119616718)+W(2,-1108043460,-1107213139,-1091384808,1062997316)+W(3,1049469526,-1085933104,-1093682556,1050086980)+W(4,1061284555,-1098201753,-1095835641,1044548392)+W(5,-1097521196,1027381238,1044225612,-1099920539)+W(6,1047936551,1007266289,-1101597200,1043928239)+W(7,-1106103943,1039340208,1011948943,-1120667237);WS(1060336095,-1119657045); +sum1=W(0,1023788715,1048279897,-1106238784,-1110161279)+W(1,-1117126579,1044311660,-1096869700,-1136931731)+W(2,-1108875843,1062204714,1019770348,-1115905233)+W(3,1022815367,1060724749,-1081389759,1034904806)+W(4,-1100562722,1063043033,-1084472996,-1124661292)+W(5,1043213137,1050929706,-1097593661,1017832853)+W(6,-1111482971,1037241746,-1106654286,-1109716592)+W(7,-1142747249,1051192212,-1102133781,-1109353889);sum2=W(0,1036664563,1009247708,1013790140,1035577258)+W(1,-1103288529,-1126560341,-1102369678,1008412166)+W(2,-1102134383,-1067246446,1047852878,1016094574)+W(3,1057556566,1067728497,-1093152080,1045655865)+W(4,-1099512639,1078180911,-1110504691,-1123477495)+W(5,1031668335,-1085231458,1042704555,1023608957)+W(6,-1103860103,1047956293,-1132621098,-1112760821)+W(7,1028018661,-1114058193,1030531898,-1120624893);WS(1035518203,1045613832); +sum1=W(0,1044215468,1057279232,-1097478568,1042423606)+W(1,-1096085823,1043513429,-1096451901,-1098498663)+W(2,-1102751483,1057361220,-1091716958,1012832112)+W(3,1007706274,1061539183,-1085528932,1054368634)+W(4,-1098118842,1057962612,-1093017477,-1103819295)+W(5,1051305356,1058710773,-1091718961,1057808613)+W(6,-1096250919,1037420261,-1100741095,-1100568821)+W(7,-1106455273,1053125757,-1097230063,-1111733504);sum2=W(0,-1105709018,1058997495,-1086433444,1022365788)+W(1,1050542737,-1084246791,1065459234,-1101303092)+W(2,-1106108137,-1103685622,1055198365,1040995532)+W(3,1027983028,-1106510960,-1102412567,1044759128)+W(4,1053295819,-1089515541,1057925132,-1104466949)+W(5,-1091042532,1066680974,-1080963495,1043286350)+W(6,1049054259,-1088412186,1056230430,-1096360229)+W(7,-1108416827,1037143386,1049505110,-1106131860);WS(-1103921662,1072713673); +sum1=W(0,1042712209,-1111681022,1029885560,-1123292759)+W(1,-1130675027,-1104528338,1032835743,-1124533373)+W(2,1041149044,-1103688784,1053127408,-1101763282)+W(3,-1108819823,1055222237,-1089836355,-1143773237)+W(4,-1099465033,1063848575,-1089832742,1044926036)+W(5,-1102885798,1053207587,-1090841456,1032528402)+W(6,-1108891552,1051374172,-1098121506,1040294582)+W(7,-1122152216,1044600823,-1101098252,1018003689);sum2=W(0,-1116466906,1017580326,-1100144980,1018640494)+W(1,1032691193,1031996320,1045143645,1067424527)+W(2,-1110682367,1040673767,1055366708,1071822180)+W(3,-1134651946,-1121084452,-1112456349,1057195246)+W(4,1019799157,1012141662,1037079065,-1078565795)+W(5,1020309206,-1123645954,1036705771,-1073530916)+W(6,1028255175,-1125118807,-1112096331,-1087156462)+W(7,-1118897648,1005021204,1021253254,1033125682);WS(1054959295,1011151216); +sum1=W(0,-1124554365,1043778462,-1140499785,-1103855992)+W(1,1028540695,-1104732576,-1111020475,-1113072532)+W(2,-1107828893,1063706911,-1098481604,-1121738665)+W(3,-1135601758,1052343180,-1081762405,1048654720)+W(4,-1135515507,1050410381,1053053447,-1096321673)+W(5,1032466990,-1128754020,-1112972157,1012954617)+W(6,-1110097877,1034222620,1023071124,-1110289546)+W(7,950109203,1043960229,-1120112616,-1114439871);sum2=W(0,-1104841432,1047456971,1024424907,991739097)+W(1,1047690020,-1094867354,1033457856,-1129013032)+W(2,-1084375561,1068880529,1046341732,-1103560341)+W(3,-1086552004,1065412328,-1087761187,1059009805)+W(4,1046416693,-1080289298,1062384539,-1098849357)+W(5,1025710892,-1110380578,-1103331799,1045332030)+W(6,-1130856953,-1105039836,1024509174,-1104241974)+W(7,-1113936449,1016290713,-1126452938,1019994493);WS(1061669311,1066543312); +sum1=W(0,-1120030840,-1097490380,1038501126,1026361650)+W(1,-1111872182,1051889621,-1110528784,-1112085217)+W(2,1046388965,-1085299564,1050043436,1019064063)+W(3,-1109640224,1043197314,1054292822,-1116217609)+W(4,1051640445,-1099578605,-1095700775,1045441021)+W(5,-1104742312,-1114905437,1056051928,-1097066005)+W(6,1040612129,1033952272,-1108619674,-1146667493)+W(7,1018742870,-1095793020,1044337364,1039394788);sum2=W(0,1041249103,-1098300344,1041141085,-1123648820)+W(1,1040922446,-1147221163,1014590689,-1115292810)+W(2,1047169006,-1097103704,-1094689158,1021735499)+W(3,-1133026152,1055827658,1056443342,1023898168)+W(4,1045305983,-1082349433,1051958562,-1153021086)+W(5,-1121038685,-1105225178,1035590360,1038130213)+W(6,1032067159,1036618956,-1098250629,1035045284)+W(7,986169209,-1102095468,-1145857885,1030074795);WS(1066007616,1040865170); +sum1=W(0,1016703369,-1154003525,-1104662792,-1111826720)+W(1,-1106398093,1038441464,1031083397,-1146451379)+W(2,-1114560988,-1112021256,1052887594,-1102003526)+W(3,-1096325697,1050813825,1061249791,-1102172436)+W(4,-1094335779,1059033474,-1126656183,-1104413998)+W(5,1023023221,-1108543232,-1106571274,-1109007926)+W(6,-1113231876,1040892233,-1121820472,-1112600993)+W(7,1022983872,1034570898,-1115038347,-1123919488);sum2=W(0,-1117895883,-1109314178,1043196819,1029963629)+W(1,1036640719,-1103775527,1047073701,-1117061975)+W(2,-1092695525,-1079308608,1032498235,1053147047)+W(3,-1109277526,-1088245301,1071134194,-1113344034)+W(4,1054484712,1032194306,-1098274857,1027577620)+W(5,-1102073467,1058556412,-1102222667,-1104158962)+W(6,1047716642,-1097777200,1028797614,1019489703)+W(7,-1115714917,1049638324,-1109885254,-1106961770);WS(-1112959995,-1090797387); +sum1=W(0,998546749,-1107113888,1042251615,1034524319)+W(1,-1102515009,-1157171375,1043372984,-1109045169)+W(2,1018649191,-1095395659,1057847906,1025715818)+W(3,1024148768,-1088418302,1049085946,-1107024218)+W(4,1036601843,-1108499994,1054314562,1036766314)+W(5,991750171,-1092700079,1052242560,-1102346050)+W(6,-1134314668,-1100812608,1010001228,1041369791)+W(7,1024106779,-1106951576,1043704436,-1136260253);sum2=W(0,-1097076796,1045091130,1028367411,1016501386)+W(1,1000463738,1024736081,1040206702,-1122385083)+W(2,-1083533587,1064625577,-1112850496,-1104146558)+W(3,1064100942,-1096201033,-1086258418,1050125885)+W(4,1074997490,-1071550159,1052069491,-1105686824)+W(5,1043707697,-1106033160,-1098690685,1041978517)+W(6,1028507309,-1118548401,1050202273,-1109567340)+W(7,-1152835380,-1111712908,-1113053149,1032203802);WS(1065286463,-1155116140); +sum1=W(0,-1127743664,-1099417962,1047837241,1035108393)+W(1,1036265535,-1091060822,1038987540,-1121911642)+W(2,-1118137852,-1088882712,1061626690,-1119901843)+W(3,-1121018025,-1089265061,1069311516,-1100290432)+W(4,1024160014,-1088513194,1053957977,-1101311755)+W(5,1028265374,-1090887512,1051214117,980641778)+W(6,1031461691,-1097685517,1050330231,1030945477)+W(7,-1116217572,-1096201501,1045642342,1036102670);sum2=W(0,1023964675,-1104287950,-1095527688,-1107378538)+W(1,1054178647,-1098771138,-1106164282,-1107123343)+W(2,-1104607531,1030951671,1049293814,-1102317974)+W(3,-1088748842,1062304002,1069791349,-1093097006)+W(4,1034720649,1056993385,-1106129898,-1107155572)+W(5,1027793575,-1095484784,-1093744890,-1104614583)+W(6,1026748348,-1103591056,1040804508,-1111048704)+W(7,1048440611,-1115722179,-1102843948,1036145149);WS(-1107864827,-1106183398); +sum1=W(0,-1106667222,1028246417,1062610107,-1094330385)+W(1,1032383543,-1105288567,1048732230,-1113355593)+W(2,-1104095901,1024277645,1033194034,-1100412503)+W(3,-1105126732,1031807228,-1097352540,-1110531197)+W(4,-1119082647,1024663749,1042072353,-1106817153)+W(5,-1099092218,1059042594,-1097841594,-1119219065)+W(6,-1106477481,1038514313,-1132497297,-1116226478)+W(7,-1100466619,1061247795,-1116357250,-1112377140);sum2=W(0,-1124057659,1049202878,1055877653,1043135164)+W(1,-1107748661,1029365940,1040631102,-1120955446)+W(2,-1106641450,-1100669682,-1121942624,1048773070)+W(3,-1106278570,-1090514146,-1097531540,-1096084011)+W(4,-1115427744,1050790854,-1095195500,1040842880)+W(5,1045306633,-1101749265,1044511371,-1101432694)+W(6,-1107251222,1044664667,-1123742683,-1108344435)+W(7,1044220643,1051259000,1035140356,-1156279482);WS(-1107710971,-1103335008); +sum1=W(0,1020774038,1057965326,-1096736580,-1108312647)+W(1,-1097452822,1052789750,-1097416740,1007270548)+W(2,-1103681302,1061528673,-1090723228,1008435167)+W(3,-1142400543,1059882105,-1082070814,1032878150)+W(4,-1130541650,1058381533,-1096313647,1024150455)+W(5,1035627390,1052101646,-1092903493,1029066731)+W(6,1026485526,1047827121,-1095953623,1024752368)+W(7,1026933710,1048909172,-1094072619,-1129872006);sum2=W(0,-1091198687,1051358993,1026242284,1036983987)+W(1,-1096592719,1056674994,-1102658445,-1112372364)+W(2,-1088722291,1050253089,1039492851,-1109827680)+W(3,1017819408,1057806550,1048044980,1033031265)+W(4,-1104841225,-1098514434,1047848116,-1106004699)+W(5,1047280108,-1095745001,-1114927114,-1128936304)+W(6,-1133964792,-1121773836,1009730080,1044703642)+W(7,1046210234,-1101840089,-1115459009,-1121859563);WS(1046617982,-1079283690); +sum1=W(0,-1112235521,-1103103206,1050398983,1031782004)+W(1,-1112371935,1005568807,1053710959,-1112406582)+W(2,1046025067,-1082068590,1059470764,-1109731202)+W(3,-1114138877,1053438832,1056782757,-1120370051)+W(4,-1100106092,1050481934,-1084354719,1047048563)+W(5,-1106636112,-1113851306,1044662919,-1114617505)+W(6,1006684852,-1101804759,1028720557,-1122334215)+W(7,-1134743124,-1101795702,1040488963,1035089325);sum2=W(0,-1123583696,-1114190125,-1123424510,1035265901)+W(1,1041752924,-1107057915,-1108427412,1011193218)+W(2,-1096033091,1054169171,-1101097272,-1097576107)+W(3,1045050816,1066165326,1060681517,1037309084)+W(4,-1111810372,-1090934807,-1093738003,-1094306097)+W(5,1044170848,-1094482563,-1094742214,1047478278)+W(6,1035342189,1030376713,-1122528198,999245333)+W(7,-1107148363,-1140242036,1046835784,-1118953940);WS(1057107647,-1115492411); +sum1=W(0,1043432615,1037909322,-1092726398,1042270260)+W(1,1017716083,1044219192,-1094557923,1036944691)+W(2,-1115224236,1059480955,-1089724826,1049175094)+W(3,1034158091,1055275264,-1079486955,1036017407)+W(4,1031606075,1062186253,-1094016652,-1112299996)+W(5,1040917102,1051479740,-1090199321,1012181234)+W(6,-1119339928,1036604907,-1111430132,1026270626)+W(7,1006053250,1049031914,-1124163213,-1106538704);sum2=W(0,1018646782,1037675363,1056993548,-1095820604)+W(1,-1107779390,1041358579,-1114299594,-1106961783)+W(2,1048577488,-1103110037,-1108103869,-1113810892)+W(3,-1094766117,1063077105,1069120744,-1094104293)+W(4,1029078775,-1094239344,1019393926,-1100654825)+W(5,-1115207772,-1097294293,-1090842684,1030620215)+W(6,1041354677,-1106609062,-1103795001,1015746998)+W(7,-1134027235,1005749079,-1111892981,1031888221);WS(1038408187,-1104646224); +sum1=W(0,-1100666444,1031841147,1045835257,-1121385297)+W(1,1032659338,-1095811512,1046356758,-1115316924)+W(2,-1096791479,1046629869,1055310447,-1109718991)+W(3,1050254507,-1086582314,1049546009,1043876936)+W(4,-1125163769,-1092033141,1059064223,-1115882186)+W(5,1034716030,-1095590162,1032941357,1051195252)+W(6,-1104041563,1012740704,1016606100,-1110386378)+W(7,1024265746,-1097384267,1043234370,-1121465454);sum2=W(0,1033146053,1033178697,-1110558215,-1107600367)+W(1,1034495435,1013274853,-1103797816,1046600596)+W(2,1033891153,1044565157,-1074394842,-1096372667)+W(3,1015618236,-1083473003,-1075035519,1071496075)+W(4,-1102272365,1047899954,1070896015,1070598351)+W(5,1026402836,1033829854,-1107786181,-1103057086)+W(6,-1126192412,1026659107,1039466503,-1099451771)+W(7,-1130670616,-1129244632,1033633210,-1106841766);WS(1060540543,-1145107984); +sum1=W(0,1016949312,-1111708420,999025948,-1110878953)+W(1,1033700674,-1115158282,1037057540,1034636061)+W(2,1008485935,-1112773425,-1111113150,1006219749)+W(3,1050394829,-1105627788,-1105528438,1047777444)+W(4,1025975118,-1166436080,-1092533512,1034379342)+W(5,1027755062,1049090616,-1097657169,1023310559)+W(6,-1166944971,-1131929874,-1125616567,1042471825)+W(7,1036625882,1027903943,-1104970374,1029991232);sum2=W(0,-1112727972,1028528033,1050127712,1039139414)+W(1,1041061913,1047913039,-1120606988,-1090975722)+W(2,1030171918,1058299937,-1075312291,-1096898908)+W(3,1049192765,-1088725965,1051042420,1056682084)+W(4,-1097932217,1006741474,1061621025,1043329296)+W(5,-1108991614,1028842331,-1120436768,-1136718330)+W(6,-1128255593,-1119404040,1041035795,1019658885)+W(7,-1128975721,1019613109,1038145345,1017746289);WS(1058512095,1047466767); +sum1=W(0,1025672397,-1102753041,1037445664,1037433000)+W(1,1032743763,1015664161,1032570339,1033220516)+W(2,1046625694,-1102686879,-1091026739,1035056566)+W(3,1040236986,-1099087483,-1089271035,1024398415)+W(4,1041791363,-1097904327,-1100626131,1043847942)+W(5,1042422310,-1097334084,1051389809,1042353123)+W(6,1024317081,-1123206279,1041773046,1037697617)+W(7,1034505416,-1096407969,1050962859,1047698739);sum2=W(0,-1111694157,-1097429792,1052756319,-1115035673)+W(1,-1113457231,1040318944,-1131566802,-1108486657)+W(2,1007020677,-1109123041,1066240251,1057627634)+W(3,-1110494513,-1087577139,1071158756,1052796029)+W(4,1036239980,-1115766281,1055974927,1037312144)+W(5,1042151096,1033854974,-1085216854,1031946717)+W(6,1014804229,1056323633,-1076147337,-1107413695)+W(7,1038268008,1058473731,-1078122726,-1088208012);WS(-1087119871,1051442968); +sum1=W(0,-1106951233,-1101188351,1055191809,-1118371512)+W(1,1026199466,-1102133666,1046522759,1024298399)+W(2,-1111827529,-1096477343,1061746551,-1102462991)+W(3,1034911407,-1081083296,1062137809,-1118895495)+W(4,-1110066258,-1093686286,1056808794,-1105243164)+W(5,1036906330,-1089794286,1061657374,1028468933)+W(6,-1121489041,-1102503648,1025414769,1001909715)+W(7,-1123695161,-1096524016,1043754020,1039027467);sum2=W(0,1036012528,-1111568121,-1125130883,1019317279)+W(1,-1136414534,1023613585,1037328619,-1141870971)+W(2,1028357901,1046290638,-1077265349,-1105362146)+W(3,1018170307,-1086518431,-1068062671,1041918725)+W(4,996800246,1032866656,1083861052,1040576139)+W(5,-1115554829,1040198779,1057186482,-1110577355)+W(6,1018408279,-1115393969,-1101393956,1032099345)+W(7,-1128152611,1031067220,1024816461,-1109411807);WS(1041081598,-1101063046); +sum1=W(0,1038662072,-1123374599,1035193857,-1104056554)+W(1,-1105628103,1048894326,-1098151405,1009505700)+W(2,1046838359,1044003395,-1109376817,-1107771451)+W(3,-1112508084,1062900743,-1082115704,1039692648)+W(4,-1112561351,1058339600,-1087104856,1049374543)+W(5,1047812813,1041428913,-1097118497,-1126547869)+W(6,-1106996345,1044355834,-1098603955,1037690530)+W(7,1045311157,1013224727,-1110120844,-1121969199);sum2=W(0,1034938637,-1102665080,-1083931487,-1096043986)+W(1,-1110454828,1066739686,1057500561,1050111041)+W(2,1044300205,1063593500,1069787057,1057117236)+W(3,-1094841314,-1072571644,-1073076170,-1094917255)+W(4,1049263704,1050585763,1057940110,992791419)+W(5,-1123904781,1033188794,1049962317,-1119131193)+W(6,1032882093,1040935597,-1103057884,-1129197337)+W(7,1018550156,992411043,1032437745,-1139242755);WS(1047493374,1019974383); +sum1=W(0,1039818779,1024992878,-1099980259,-1119405261)+W(1,1022499782,1056719767,-1093967742,1017537921)+W(2,-1111466513,1056992349,-1089692488,-1134657044)+W(3,-1128872350,1066523241,-1081677329,1032226588)+W(4,-1102282821,1057279594,-1104336096,-1110606353)+W(5,1027318580,1050310409,-1095763174,1029746358)+W(6,-1112367361,1043633508,-1147598863,-1105211995)+W(7,-1121442618,1050332018,-1103201160,-1109613299);sum2=W(0,-1109381660,-1099927212,1032613200,1013674604)+W(1,1024006001,1048105027,1031703418,-1113331152)+W(2,1048332575,1083214625,1051352300,1010546556)+W(3,1030946168,-1068785948,-1082836395,-1137462284)+W(4,-1111460550,-1080184440,1047472657,1033485356)+W(5,-1115660792,-1125303858,1027323348,1034637753)+W(6,1027780517,-1129923962,1006215943,-1112671380)+W(7,-1125113546,972536438,-1123338357,1033990282);WS(1049191295,1026054180); +sum1=W(0,1015431080,-1104530451,-1120791464,1041795830)+W(1,-1114491642,1045418990,-1105318659,-1107859847)+W(2,-1106844240,-1091806904,1059085476,1035107546)+W(3,1052544606,-1092275830,-1096734436,1050727987)+W(4,-1101337172,1032037152,1055073816,-1098252244)+W(5,1006821496,-1091613549,1054997266,1024892180)+W(6,1048579163,-1136631349,-1117752159,-1114835508)+W(7,-1107367092,-1104046587,1054027444,-1107321874);sum2=W(0,1026733028,1045033945,1006278578,1045459634)+W(1,-1099170713,1052123052,-1100795787,1045732660)+W(2,-1116840904,1011374557,-1137517037,1036547859)+W(3,-1119731112,1034116255,-1093051584,1049735621)+W(4,-1105853851,1042679995,1032967726,-1115758581)+W(5,1023766170,-1103542762,1030006514,1012804929)+W(6,-1109160117,1002727514,1010971477,-1107202197)+W(7,-1110446049,-1116987471,1032206215,-1108882618);WS(1061349183,1052960956); +sum1=W(0,-1129777715,-1091852750,1051531432,1028688348)+W(1,-1138324169,-1098630008,1050117038,1001458973)+W(2,1040354025,-1086948121,1058780391,1026112190)+W(3,-1113069161,-1087783598,1063142264,-1101543047)+W(4,1026875928,-1090578505,1054898923,1001807913)+W(5,-1148679486,-1098392878,1055753851,-1107707133)+W(6,1026350741,-1105317245,1035239971,1009551482)+W(7,-1099366619,-1113156712,1049214940,1035358529);sum2=W(0,1030464194,1016786912,-1124271380,-1112870762)+W(1,-1114101658,-1111442214,1036708968,1035127660)+W(2,1031167290,1040962599,-1145350210,-1119263136)+W(3,1076423743,1052649879,-1106763968,1030450749)+W(4,1075592137,1059016603,1036666460,-1114823676)+W(5,-1122765276,-1109148248,-1102467968,1030453841)+W(6,-1073082101,1031660172,1040647493,-1120712732)+W(7,-1067763317,-1093716078,-1123536642,1004437586);WS(1049240575,1032641532); +sum1=W(0,1013730783,1058635434,-1096215015,-1112522509)+W(1,-1105480706,1033988870,-1101342144,-1114702617)+W(2,-1114036922,1060052265,-1095577996,1026538642)+W(3,-1113879072,1060507082,-1090178495,-1118644393)+W(4,-1104229785,1060417175,-1088104859,1026113715)+W(5,-1108053747,1056801557,-1096180920,-1115402364)+W(6,-1114764169,1045744608,-1096622362,-1165415829)+W(7,-1146082265,1050162924,1035143657,-1096614130);sum2=W(0,-1122276311,-1070701037,-1102500792,-1123484857)+W(1,1035291415,-1088124412,-1135890037,-1122878839)+W(2,-1120194245,1066415245,1041496354,1004310705)+W(3,1040446858,1074084237,-1104713726,1043449641)+W(4,-1120530587,1049852139,-1121031703,1033156545)+W(5,-1138075205,-1122804719,-1103825640,1027648711)+W(6,1025217366,1023048268,-1123990667,1022832518)+W(7,-1118638617,-1139513797,1028358694,-1136916673);WS(1058199967,1050173679); +sum1=W(0,1035142580,1049466778,-1090097411,-1180331449)+W(1,1027370573,1058691576,-1101732588,1040649373)+W(2,-1130262537,1039593430,-1086371009,-1120260556)+W(3,1035504777,1068404719,-1088745136,1040680775)+W(4,-1114438555,1055172389,-1085029652,1044382793)+W(5,-1117883815,1049428736,-1087836907,-1124005336)+W(6,1019391016,1057860609,-1099893249,1042216563)+W(7,1002653538,1038434456,-1090680108,-1112700144);sum2=W(0,-1116884059,-1098591960,1049382153,-1103314039)+W(1,1053572077,1057696884,1027480579,-1088718218)+W(2,-1098664530,-1094622297,-1090176467,-1083506692)+W(3,1052736946,1068603564,1060239128,-1093271444)+W(4,-1109898534,-1110319390,1035982822,-1100206230)+W(5,-1100793752,-1092295148,-1110105636,1032439700)+W(6,1049155169,1060435963,1048950002,1034453968)+W(7,-1110972354,-1093610507,1038370396,1006875670);WS(-1089372991,1071972514); +sum1=W(0,-1138920887,1036533027,-1102318256,994211079)+W(1,-1111770809,-1104793556,1048489074,-1105180974)+W(2,-1102811010,1055175791,-1087761408,1048668925)+W(3,-1115715559,-1099167419,1059252133,1002658941)+W(4,1039086134,-1087507272,1053162297,-1118760057)+W(5,-1097310634,1049070430,-1114433380,1015366427)+W(6,1031148825,-1119324807,-1118494745,1042346841)+W(7,1025838913,1003453989,1042268638,1035401151);sum2=W(0,1030112837,1042265630,1026971571,-1110663804)+W(1,-1120976510,1036120703,-1114486026,1036038820)+W(2,990074782,1034066763,1060265655,-1093575269)+W(3,-1093456890,1054439327,1048349987,-1097582212)+W(4,1037465699,-1093016348,-1099844302,1034062294)+W(5,1026987255,1018637880,1021593632,1015927322)+W(6,-1141406991,-1135344000,-1122669452,-1131991172)+W(7,-1139369648,1039303764,-1105461723,-1112258092);WS(1064707295,-1106068023); +sum1=W(0,-1099232505,-1122722466,1050522762,-1163785122)+W(1,1035233224,-1096714286,1050648196,1029641572)+W(2,1008917721,-1092366070,1057836626,-1106158547)+W(3,-1113461090,-1085444145,1065526616,-1112344246)+W(4,1030936392,-1087864449,1058128499,-1120989814)+W(5,1004172005,-1089654074,1053303385,1023496586)+W(6,1027313190,-1109977746,1046037453,-1132212895)+W(7,-1115756158,-1096643772,1045431365,1026679026);sum2=W(0,-1064765544,-1093639717,1043466147,-1118670633)+W(1,-1081497441,1052279998,-1106897145,1026058867)+W(2,1073825520,1049786220,-1111313590,-1120615525)+W(3,1076205171,1062543003,1028519541,1005098917)+W(4,-1119211273,-1112239696,-1110796836,1002459349)+W(5,1027623494,-1095053933,1038884306,1024155429)+W(6,1025169073,1041086677,-1138045203,-1139354443)+W(7,1044157267,-1111173396,-1103601885,1031190784);WS(-1111449083,-1157616163); +sum1=W(0,-1140902742,1050785866,-1096435822,-1106580347)+W(1,-1108906886,1041550344,-1095149714,-1111739842)+W(2,-1107746707,1063519767,-1097214657,-1112949561)+W(3,-1091492130,1070223306,1059314470,-1090511327)+W(4,-1106259270,1056548545,-1091358630,-1115482851)+W(5,-1123578095,1033679887,-1102873285,-1102694659)+W(6,-1112828291,1033485706,-1098893397,-1119291392)+W(7,-1129218172,1037279241,-1105253969,-1105806553);sum2=W(0,1036877913,-1106537131,1030920508,-1107276407)+W(1,-1107073590,1029358898,-1148982309,-1158332371)+W(2,-1107699229,1059152956,-1101290720,-1104066278)+W(3,1043855187,1059494373,1057939604,1057817844)+W(4,-1112562117,-1100478450,1054005616,-1089434898)+W(5,1015957137,1042289801,-1078154452,1041374005)+W(6,-1137092650,-1117856531,1052159854,-1109759735)+W(7,-1113777301,1034651775,-1095096566,-1112996199);WS(-1078462192,-1081042006); +sum1=W(0,1031777492,-1099264287,1046006998,987183826)+W(1,1032754472,1043123090,-1098614104,1036343655)+W(2,1041664052,-1089905073,-1129274543,1009990171)+W(3,-1097597536,1061087074,-1106235787,-1097811109)+W(4,-1104816664,1058804947,-1084543524,1031138063)+W(5,-1113883983,1049386855,1054195792,-1097275448)+W(6,1034668408,1033759807,-1107840264,1026038601)+W(7,-1123431127,1048603595,1024992909,-1120606380);sum2=W(0,1045113399,1042319052,-1096815184,-1116743882)+W(1,-1114091637,-1104675582,-1111655631,-1101972302)+W(2,-1107885511,-1091877193,-1112520325,1050965596)+W(3,-1138476145,1051152873,1061790396,1049921296)+W(4,-1105540689,-1091823953,1058061302,-1092103725)+W(5,1035866831,1034466874,-1097657024,1042351236)+W(6,-1106333432,1039480371,1040922298,-1102843808)+W(7,1027850472,1012452041,-1158709515,-1125733657);WS(1056694143,-1116016311); +sum1=W(0,-1113789237,1051083644,-1097139864,-1123205479)+W(1,-1100431022,-1126988186,-1094809972,1034447326)+W(2,1050877939,1064972735,-1089357240,1036660918)+W(3,1018856325,1040063173,-1094444318,-1108178982)+W(4,1050520537,1063261729,-1089641983,1047968461)+W(5,-1097203011,1049408537,-1094346349,-1113292277)+W(6,-1103919120,1026641091,-1100978845,1038849023)+W(7,-1146363818,1053332672,-1097363714,-1114302469);sum2=W(0,-1117908102,1019359999,-1120905960,1017197102)+W(1,1013765983,-1145413682,1028148573,1027705717)+W(2,1045942570,-1095749402,1032861566,-1127537989)+W(3,1086231745,-1062836828,-1087097136,1031521084)+W(4,1048993826,-1094656357,-1145044098,1027867224)+W(5,-1110131683,1037693606,1040390747,-1114691836)+W(6,1005670802,-1125761673,-1112982831,1031905995)+W(7,-1126497913,1018172516,1016402027,-1122299754);WS(1058898623,-1129627348); +sum1=W(0,-1115961291,1024824451,1015893437,-1111982511)+W(1,-1114910804,1028416398,-1107386562,1040362701)+W(2,-1099814536,1053775806,-1081677098,1049488325)+W(3,1014875535,1049045373,1054905786,1016424474)+W(4,1042946610,-1081844071,1057687981,-1105282974)+W(5,1008636276,1031972351,1045923489,-1118478155)+W(6,-1106406626,1007262993,1043411542,1018226304)+W(7,-1120594878,1044145240,1016529769,1008933435);sum2=W(0,-1133545882,1024635319,-1123675276,1049399700)+W(1,1048887568,-1104650552,1009836758,-1109494815)+W(2,-1092588040,-1106613727,-1090053582,-1105276085)+W(3,1040041167,1061771033,1063348295,-1099749985)+W(4,-1098849827,1059347143,-1095509129,-1094328117)+W(5,1009986974,1020453405,-1091467004,1040581639)+W(6,1044263399,-1100016935,1034750124,1041257354)+W(7,-1120224962,1003801667,1013849670,-1116729410);WS(1051954047,1053754534); +sum1=W(0,-1115617616,1038078984,1012663597,-1106689047)+W(1,1024010640,1036755054,-1111840872,1027644834)+W(2,-1105864485,1063482792,-1094956956,1000291764)+W(3,-1104806436,1054877383,-1088048944,-1099610254)+W(4,-1109064955,1061183100,-1092794954,1030290339)+W(5,-1116880702,1032370277,-1106496725,-1110075188)+W(6,-1125878182,1043596932,-1106933961,-1134690355)+W(7,1017392662,1041423460,1027390113,-1125796047);sum2=W(0,1032585330,1041153226,-1098242715,1045110917)+W(1,-1120362784,1038083675,-1097998955,1041971655)+W(2,1053495069,-1085822417,-1097864806,-1094674500)+W(3,-1103911013,1062089523,1056336567,-1090235355)+W(4,-1152525762,-1088542584,1061326318,-1100885631)+W(5,-1128147020,1044421032,1046053205,-1141849761)+W(6,1012657824,-1113855086,1042938789,-1114518568)+W(7,-1104983105,1041652917,-1160964996,1032164357);WS(1061027871,-1104546242); +sum1=W(0,-1105616597,999947493,1020340785,1044086916)+W(1,1044372474,-1093243621,1054887248,-1111771647)+W(2,1021564129,-1093936864,1050165368,1042456335)+W(3,1044930783,-1082760108,1059757863,-1109427891)+W(4,1046184033,-1089254915,1059995997,-1109416824)+W(5,1039863327,-1087020314,1055330116,-1114227250)+W(6,1037242932,-1095491356,1049586618,-1119355674)+W(7,1036593932,-1089177610,1053764638,1025046581);sum2=W(0,-1071093827,1060306884,1049935328,-1107356858)+W(1,1026041138,-1087262504,-1137957530,1030953599)+W(2,1068370917,-1080863241,1024099582,1026067688)+W(3,1068180608,-1104665609,-1097098353,-1149593287)+W(4,-1099034443,1065726420,-1115701817,1031805059)+W(5,-1126398467,1036496204,1043337171,-1111590832)+W(6,-1114641099,1052019191,-1155572887,-1110320626)+W(7,1032038973,-1112342652,1039831002,-1165279566);WS(-1085156031,1045210454); +sum1=W(0,1032928297,1062377574,-1090582815,-1097791665)+W(1,-1111119484,1050029461,-1097825399,1025846477)+W(2,1023710638,1062121112,-1087364538,1032229097)+W(3,1012189550,1061895670,-1084850381,1038427330)+W(4,-1119437633,1058328143,-1086721078,1040335420)+W(5,1039427612,1050106073,-1087870448,1036234257)+W(6,-1114651991,1051812528,-1095972450,1026163704)+W(7,1039591187,1050020631,-1089842983,-1146480404);sum2=W(0,-1123647935,1061817512,1083879676,1056516802)+W(1,1039341132,1048143772,1075567701,1037735150)+W(2,1035983028,-1106274437,-1081957201,1028242764)+W(3,-1100132407,-1080635557,-1069811820,-1096421593)+W(4,-1107056231,-1101127944,-1080342730,1035329144)+W(5,1035406254,-1113472410,-1083251742,1030744652)+W(6,-1116224056,1025367216,-1113852980,-1094803270)+W(7,1039408558,-1101636583,-1087422720,1049804166);WS(-1079692512,1054562755); +sum1=W(0,-1109749038,1042438683,-1092016161,1050333996)+W(1,-1107273417,1049923207,-1091034933,1042543591)+W(2,-1102577952,1044388569,-1089719139,1055304278)+W(3,1030213964,-1113189609,1050309800,1034159515)+W(4,1036563817,-1089184118,1048990040,1040366472)+W(5,1046944740,-1087748930,1053009554,-1122229091)+W(6,1031914983,-1096053014,1048709856,1006842402)+W(7,1050658577,-1091524869,1049517424,1034826102);sum2=W(0,1041125733,-1094982607,1055140379,1061130686)+W(1,-1097603156,1045744428,1049918932,990353951)+W(2,-1103003109,-1102781952,-1106862916,1058588396)+W(3,-1107000988,1063877853,1066829095,-1096233798)+W(4,1032085636,-1096755169,-1090474230,-1095838692)+W(5,1048646468,1041101455,-1081598978,-1089860215)+W(6,-1094740103,1038162032,1049572267,-1096717844)+W(7,1056003520,-1106723297,-1085369603,1044183141);WS(-1080283264,1053171958); +sum1=W(0,1045885175,1054395509,-1083475508,1028512496)+W(1,-1113658461,1050045174,-1095192933,1035446876)+W(2,1034538909,1055879386,-1085810962,1026195253)+W(3,974135701,1060600957,-1084797135,1044250612)+W(4,-1122513036,1061640838,-1086057732,1037521197)+W(5,-1118011958,1060753746,-1087204563,-1117222317)+W(6,998696774,1054788217,-1092652351,1038575473)+W(7,-1108239136,1061053402,-1108529436,-1101819472);sum2=W(0,1049760823,1082611215,-1114287788,-1130959534)+W(1,-1132622893,1077078383,1055018182,1035090608)+W(2,1033001558,1066257283,-1101461080,-1112584386)+W(3,-1136534149,986681348,-1078537691,-1090394759)+W(4,1043696998,-1084657320,1054805894,1058031741)+W(5,-1092886300,-1069070549,1065047159,1038822180)+W(6,-1098156850,-1072372844,1049854091,1041633511)+W(7,1058228696,-1074505611,-1082348593,-1115499033);WS(-1073398920,1057727890); +sum1=W(0,1041979362,1052994159,-1092671491,-1110295050)+W(1,-1106188342,1056847849,-1087976920,1033778006)+W(2,-1108985859,1060197326,-1085676269,1040328063)+W(3,1040300287,1059196498,-1108460501,-1114468666)+W(4,1044683952,-1094535618,1051731585,-1102804911)+W(5,1046284093,-1094105983,1046385743,-1098429184)+W(6,1044621499,-1102914751,1031818215,-1104640754)+W(7,990388050,1043962286,-1104493131,1033981777);sum2=W(0,1021160276,-1089430647,-1102895535,1031984432)+W(1,-1093219342,-1135654176,1044152573,-1096279754)+W(2,-1089562294,-1079796815,-1095163331,1011763192)+W(3,-1106388958,1074674993,1074136497,-1101895278)+W(4,-1099093932,-1098010580,-1095203310,-1117345690)+W(5,-1180890998,1052929457,-1099885509,-1095468231)+W(6,-1090965228,1040584224,1041387674,-1107912603)+W(7,1057228486,1047748991,-1131585606,1045144673);WS(-1087643711,1073414034); +sum1=W(0,1043421796,1043019738,-1091862260,1028452722)+W(1,-1116796288,1056957030,-1093379129,-1112484637)+W(2,1042590607,1048028053,-1089120888,1043084437)+W(3,-1098636497,1065994910,-1081315117,-1120978641)+W(4,1008405302,1061262410,-1088787029,1046109207)+W(5,1005024220,1059267719,-1093593189,-1105879924)+W(6,-1106384411,1045820026,-1108751805,1024805700)+W(7,1029633907,1054563645,-1106230054,-1095994501);sum2=W(0,1015257573,-1101361376,-1151605286,-1114431290)+W(1,-1117575950,1051853927,-1126719224,-1122150057)+W(2,1040590395,1007636882,-1099060090,-1123376079)+W(3,1040031817,-1085239439,-1069257368,-1122292554)+W(4,-1104875608,1029484438,1078894141,1045790053)+W(5,-1111928738,1055085469,1065488662,-1105709439)+W(6,-1124331304,-1104410806,-1097362053,1046590167)+W(7,-1104400845,1055334030,-1099504604,-1096100911);WS(-1089052703,1050218486); +sum1=W(0,1024924308,1032977094,-1127622480,1016061078)+W(1,-1124263665,1048865735,-1103037451,1027347950)+W(2,-1114112032,1032370348,-1093324152,1047024376)+W(3,-1101857739,1057017435,-1130658874,-1114101947)+W(4,1004177297,-1096925880,1049797356,-1136753151)+W(5,-1132101549,-1106597310,-1147023991,-1136950735)+W(6,1037546120,-1101706323,-1148374781,1016234194)+W(7,-1127618735,-1138126252,1041185327,-1135392976);sum2=W(0,-1103127935,1033687244,1044282132,-1115309191)+W(1,1034551493,-1111330163,-1132159854,-1101537844)+W(2,-1131095837,-1111327049,1043675418,989659429)+W(3,1056852609,-1097897810,1038437355,-1126658673)+W(4,1041291951,-1092598078,-1085166716,-1101159602)+W(5,1031312786,1027703970,-1122838335,1065573620)+W(6,-1119687326,-1119650108,1030316614,1035948285)+W(7,-1125922018,1037109557,-1115941571,1021015548);WS(1065854560,-1114586365); +sum1=W(0,1025132845,-1093129789,1039292161,1052478106)+W(1,-1132208108,-1097600366,1047014713,-1114318540)+W(2,1043375962,-1094779500,1054220253,1045472794)+W(3,1036127555,-1085251325,1059484531,1040640636)+W(4,1042813603,-1085614646,1058902029,1026772633)+W(5,1042302785,-1083792532,1058554289,1030110605)+W(6,1041475414,-1088034874,1049492791,-1123458066)+W(7,1044294516,-1081301837,1057966909,1048041627);sum2=W(0,-1082315074,-1085719643,1072912386,-1097858732)+W(1,1044643809,1026206592,-1098026838,-1097387905)+W(2,-1098370418,1060376399,1068488422,-1097681385)+W(3,1032322202,1066420950,1072201946,-1095903963)+W(4,-1088636595,1042910065,1055106268,-1092707091)+W(5,1057109638,1025783712,-1087763572,-1104219349)+W(6,-1093539506,-1117795056,-1084317601,-1087895305)+W(7,1061431798,-1120476284,-1077472196,-1105350768);WS(-1071370880,1080498273); +sum1=W(0,-1117491793,-1117320376,1025681812,-1112958490)+W(1,1039364315,-1100646881,1049740511,-1103504723)+W(2,1035846886,-1094786920,1058631773,-1105396320)+W(3,1023528601,1045848824,-1094741601,1032469201)+W(4,-1131889533,1057069771,-1088346742,1034336534)+W(5,-1106314247,1055228236,-1102894479,-1144513794)+W(6,1028375004,1020389492,-1138962992,-1116565942)+W(7,1013100112,-1127017775,995411618,1002008579);sum2=W(0,-1097850747,-1108946242,-1129761151,1024320851)+W(1,-1107398437,-1114277717,-1118690429,1012636527)+W(2,-1085613590,1063125687,1040789135,1029278628)+W(3,1042292809,-1084555354,-1101999238,1026191463)+W(4,1054106205,1059764079,1051725304,-1119736004)+W(5,-1106648125,1041901467,-1128317719,-1127460399)+W(6,1035361236,-1103098774,1022272136,-1115360404)+W(7,-1122554235,-1148617751,1025957669,997652141);WS(1058528159,1053906024); +sum1=W(0,-1112917396,-1104256080,1023681564,1039659283)+W(1,1035675727,-1092229473,1058833811,1021887717)+W(2,-1104938189,-1097223269,1051100098,1033492802)+W(3,1040468760,-1082484606,1061928249,-1119337706)+W(4,-1105254898,-1103704557,1057519273,-1099217437)+W(5,1020887917,-1100912091,1047691241,-1127325712)+W(6,-1113141838,-1118771074,1047329733,-1114402703)+W(7,-1149793215,-1099449368,1044776397,1024214504);sum2=W(0,-1129442596,1040644144,-1106302200,-1105488042)+W(1,1023778714,1033307012,1056981996,1014815489)+W(2,-1113953277,1056896617,1082625405,1048992482)+W(3,1026809294,-1080168883,-1064674592,1043950232)+W(4,1035644478,1030172798,-1098216535,-1120732434)+W(5,1034718426,1046899220,-1107268878,-1121557578)+W(6,1016827280,-1114672577,-1138831353,1026207834)+W(7,1038084720,-1138817753,-1118740750,-1122753582);WS(1050028863,1057904824); +sum1=W(0,1016998719,-1115527732,1049960370,1033316845)+W(1,1031484924,-1114471481,-1097014217,1045307870)+W(2,-1113918453,-1092713340,1059124695,-1113659631)+W(3,1035763396,-1086973069,1055821255,-1113580281)+W(4,-1100192683,1048884339,1045748179,-1104759887)+W(5,1046082071,-1093669960,1046233018,1024760783)+W(6,1023767163,-1109475380,972758359,1028768132)+W(7,-1109585801,-1102684193,1047341446,-1118597711);sum2=W(0,1042577042,1058174637,-1093234196,1036828005)+W(1,1035985609,1022451597,1028288917,1036599280)+W(2,-1132583692,-1083350192,-1089654696,1043707159)+W(3,-1108557005,-1102051996,1066585170,-1099096459)+W(4,1045882832,-1096734805,-1112976831,-1117191962)+W(5,1049978360,1040525485,-1101233023,1038823523)+W(6,-1123148614,-1111555351,1016281700,1010883764)+W(7,1037998467,1012738322,1035922998,-1106116243);WS(1064158815,1035299335); +sum1=W(0,-1112803360,1016610641,1043480489,1023721675)+W(1,987363362,-1111853690,-1116662313,-1114846141)+W(2,1040202935,-1090418272,1043761841,1040437218)+W(3,-1148543050,-1086418793,1062267936,1044974085)+W(4,-1119103150,-1096774480,1026731899,-1112576238)+W(5,1016866897,-1106302329,1046949595,1035797256)+W(6,-1120253212,-1125874772,1044534239,-1118929285)+W(7,-1136961231,-1111706212,1038415821,1017229376);sum2=W(0,982347958,-1130481715,1039697927,1029826582)+W(1,1032509555,-1105443060,-1102232537,-1106323503)+W(2,-1111294086,1041532435,1059036310,-1087181565)+W(3,1034453505,-1090026061,1065332554,-1095157490)+W(4,-1107492941,-1115327745,1049776291,1032022369)+W(5,1047671755,-1099067440,1035057967,-1113855935)+W(6,-1114281099,1007189687,-1116755236,-1137758215)+W(7,1041657921,-1106888056,1039394631,-1116441678);WS(1064590463,1056702913); +sum1=W(0,1029043770,-1118119137,1044521535,-1108622774)+W(1,1053372231,1049750478,1040212560,1055292354)+W(2,-1096751755,-1090400466,1048069253,-1086796959)+W(3,1042753121,-1089893441,-1098259842,1028130891)+W(4,-1132040847,1035942347,1046519145,1043794349)+W(5,-1098166823,-1098407696,-1126503113,-1097599727)+W(6,1054745035,1057009004,1029470901,1057963224)+W(7,-1101919647,-1105867448,-1137574860,-1099480944);sum2=W(0,-1112469736,1047380321,-1107309008,-1130012001)+W(1,-1109993908,1048112351,-1096267194,1044766357)+W(2,-1113626244,1039961237,-1149218892,1024449363)+W(3,-1101975228,1053720344,1041967405,-1105185961)+W(4,-1113395603,1033059361,-1105421186,1034928166)+W(5,-1115391866,-1117206471,1041082150,-1103730760)+W(6,-1111764318,1050486894,-1097114178,1041700935)+W(7,-1114050909,1029031616,-1116211284,-1133808950);WS(1049282175,-1081654589); +sum1=W(0,1026879882,1056840376,-1089715922,1023576205)+W(1,-1106636470,1051340514,-1103588481,1019713064)+W(2,1025593670,1059046350,-1087728227,1018583793)+W(3,-1120434947,1060994015,-1081081863,-1116831948)+W(4,-1109057316,1062254571,-1089160278,1040563949)+W(5,-1103814142,1054415372,-1110084674,-1148705741)+W(6,-1108405355,1044610849,-1097611347,-1130543166)+W(7,1025046173,1057281100,-1102762237,-1108038889);sum2=W(0,1021240677,-1112389783,1025718250,-1104779102)+W(1,-1117500355,-1154883848,-1096682611,1051908652)+W(2,-1104166105,-1102583420,1048911763,-1093040032)+W(3,-1110155670,1061056453,1065471868,1051220588)+W(4,-1101525323,-1123615532,-1149445264,-1113750073)+W(5,-1099065181,1038434309,-1090281103,-1098156535)+W(6,-1135933351,1041908272,1042017461,1046751376)+W(7,-1100288377,-1120914319,-1131934595,-1100861861);WS(1044733566,-1111466942); +sum1=W(0,1033634167,1060020808,-1092913556,-1112663104)+W(1,-1105078967,1041929508,-1103349137,-1134753630)+W(2,-1104340430,1062221635,-1092289734,-1126194825)+W(3,-1106426842,1060048443,-1090785767,-1110397240)+W(4,-1101553619,1059584252,-1094348262,-1114529117)+W(5,-1110993602,1054717575,-1097827057,-1113238887)+W(6,-1113465444,1044713794,-1098824243,-1140846474)+W(7,1020428386,1047352089,1041060918,-1094820883);sum2=W(0,1040248415,1084299283,1054267917,1002599056)+W(1,-1113076108,1066146464,1032173778,1029289900)+W(2,1043824330,-1073408210,-1102778436,1027082476)+W(3,-1105221470,-1067326117,-1084477148,-1116688572)+W(4,1036602392,-1097425816,-1149511007,1024010398)+W(5,-1134849104,1016852200,1040914456,-1121212984)+W(6,-1163695359,-1119512248,1026379762,1007530464)+W(7,1011808464,-1118870508,1011171408,1020903456);WS(1041204862,1020998748); +sum1=W(0,1041320410,1040787048,-1129649268,-1136864165)+W(1,-1111643799,1044400490,-1096018340,-1123167632)+W(2,1033147201,-1112000574,1041936758,1014392453)+W(3,1033305824,1057857240,-1090212595,1043382402)+W(4,-1110534482,1058317173,-1083609992,1046901861)+W(5,1048653459,1013490791,-1108280561,1040774794)+W(6,-1106102028,1040475768,-1098465902,-1121200123)+W(7,-1129433652,1032979455,-1104103124,-1123801518);sum2=W(0,1033367466,-1105739926,1035166617,-1121294834)+W(1,1036408153,1041467605,-1116824529,1020242785)+W(2,1049195658,-1097896497,-1127250349,1024987646)+W(3,-1116950481,1069287141,-1103787577,-1113169844)+W(4,-1081345874,1045676499,-1104285546,-1109755223)+W(5,1035726191,-1097322898,-1110450029,-1162599282)+W(6,-1109751565,1034595972,1041775082,-1128984227)+W(7,1034565507,1022861151,-1111377560,1015705141);WS(1061587071,-1140717261); +sum1=W(0,-1112565188,-1082585266,1063001355,1029148274)+W(1,1035683412,-1091946062,1057075562,-1133150565)+W(2,1034588141,-1086181493,1061257307,-1121255338)+W(3,-1105710858,-1084260507,1062016535,1031972073)+W(4,1024277837,-1087521200,1059484653,-1140527211)+W(5,-1104681461,-1094344584,1051726365,1015752222)+W(6,1033519565,-1109665588,1053582679,-1140031633)+W(7,-1097426768,-1092361421,1050023351,1054184694);sum2=W(0,1052095029,-1068831962,-1076286348,1061242602)+W(1,1040595366,-1076957703,-1081349117,1046002483)+W(2,-1098987175,-1081538085,-1088771362,1040290526)+W(3,-1084153168,1037971476,1057908839,-1093902656)+W(4,-1091290481,1070110671,-1114213425,-1094367529)+W(5,-1096720628,1069986978,1063483875,-1094489561)+W(6,-1101102486,1074264190,1068552571,-1099236623)+W(7,1044734380,1070997731,1075267150,-1081182731);WS(-1071242520,-1095264341); +sum1=W(0,-1097248122,1057257956,-1095464807,-1098637431)+W(1,1017326143,1050464317,-1098731544,1039614697)+W(2,-1105336241,1059871125,-1096805078,1034135507)+W(3,-1091856432,1058219580,-1088025845,-1098503641)+W(4,1051920949,1056167546,1032394345,1057766069)+W(5,-1097210280,1051126389,-1089070234,-1095933097)+W(6,-1122345698,1047883744,-1102431837,1030493340)+W(7,999615444,1055359408,-1098523426,-1112287963);sum2=W(0,-1132961311,1038597560,-1089057302,1055074030)+W(1,1034954689,-1114842936,-1113751042,1048893008)+W(2,-1131131128,1039456110,-1095192990,1046429121)+W(3,-1105685093,-1104727669,-1097910004,1057064004)+W(4,1044104138,-1085849936,1064526735,-1091871118)+W(5,-1118659572,1053272959,1045257331,-1096323208)+W(6,-1117347443,-1117746499,1054461586,-1090448877)+W(7,-1140373421,1049759548,1062278408,-1081803378);WS(1055746431,1040288248); +sum1=W(0,-1154016945,1057716289,-1093759650,-1122750430)+W(1,-1117613130,1055590360,-1094487986,-1117149477)+W(2,-1108247483,1059644857,-1089867895,1031955359)+W(3,-1114072538,1067207252,-1085229664,1016534394)+W(4,-1103530014,1062212336,-1089860607,1044969554)+W(5,-1134724696,-1104299500,-1088563377,-1137442922)+W(6,-1102903742,1049302591,-1097577389,1035178328)+W(7,1046496384,1054319858,-1094962569,-1108831509);sum2=W(0,1041968914,1051752153,-1123800846,-1117011966)+W(1,1026703145,-1115260470,1035127537,1031245794)+W(2,1033601916,1038625472,1035458769,-1109678904)+W(3,1035338047,1052354182,1035609386,1050054059)+W(4,-1106207855,-1118891350,1057116581,-1098815779)+W(5,-1094112140,-1081023345,-1104080857,1038926653)+W(6,-1100978937,-1084581041,1055976243,-1108176195)+W(7,-1106593629,1066756564,-1101750238,-1107244818);WS(-1089881759,1037957184); +sum1=W(0,1000251530,-1098029886,-1105974859,1041712355)+W(1,-1117869170,-1095515176,1060224425,1040628361)+W(2,1029072469,-1089055515,1060210489,1042449912)+W(3,1031851625,-1079829205,1061092856,-1119516507)+W(4,1024508279,-1094362449,1060581840,-1102207965)+W(5,-1105582638,-1105281331,1056017638,-1107063314)+W(6,-1121710869,-1112643769,1040568609,-1112932479)+W(7,-1105403363,-1102959900,1050032516,-1124065669);sum2=W(0,1051114274,-1102532150,-1093533301,1042271071)+W(1,-1105565679,-1114476854,1038543175,-1112348507)+W(2,1055378846,-1082969540,-1075201485,-1087360189)+W(3,-1098769061,1064670328,1077554590,-1100903801)+W(4,-1106275827,-1102001010,1048871628,-1115312306)+W(5,-1101598109,1044770567,1040464379,1031777408)+W(6,-1109849433,-1114021751,-1111404687,-1125205988)+W(7,-1104426610,1049459491,1049461049,-1104546886);WS(-1089609215,-1090633405); +sum1=W(0,-1095985139,1060468726,1029992257,-1106189340)+W(1,-1131730646,-1114989785,1035463235,-1121474072)+W(2,-1106836118,-1111340153,1053834481,-1109753904)+W(3,-1120898567,-1083229835,1057093887,-1170836447)+W(4,-1122196780,-1097505195,1060127651,-1099640750)+W(5,-1108220230,-1091862496,1056095953,-1106303115)+W(6,-1113602180,-1118278055,1053644551,-1102165833)+W(7,-1111282801,-1094974325,1060964715,-1114233933);sum2=W(0,-1102755055,1028184991,1014375557,1018724927)+W(1,-1123071369,1018963304,1034540123,-1154538439)+W(2,-1101642458,1042446539,-1110958917,1030328833)+W(3,-1121616776,1048904011,1055634924,-1104340897)+W(4,-1123659230,1022095962,-1122273513,-1123674010)+W(5,1034971308,-1102092583,1047229966,-1103087688)+W(6,-1114444448,-1115812270,1006913192,-1118183380)+W(7,992820811,-1115600403,1032293939,-1116477720);WS(-1089497119,-1083970920); +sum1=W(0,1049400081,1017038202,-1096866095,-1129668560)+W(1,-1112985379,1054102421,-1092440080,1023489999)+W(2,1032734776,1052273107,-1090492445,1039999326)+W(3,1046931016,1050677101,-1077775563,1047866250)+W(4,1032966898,1056472798,-1095500286,1031139121)+W(5,1026703569,1054012759,-1141821439,-1128248842)+W(6,1023567673,1046736000,-1103091876,1037611037)+W(7,1020804657,1054561791,-1096856494,-1102316761);sum2=W(0,-1119432539,-1113150368,1049552369,-1123950204)+W(1,-1114702364,-1107904829,-1109676099,1034167140)+W(2,-1131454616,1051795717,1049548364,1018171432)+W(3,1045807900,1065572002,1052256292,1024318084)+W(4,-1107556037,-1104213250,1058452060,-1104886632)+W(5,-1138592655,-1096394963,-1077576443,-1103410805)+W(6,-1120197723,991774812,-1102019177,-1103678409)+W(7,-1116354551,991245404,1049782966,-1123412946);WS(-1092399743,1070790531); +sum1=W(0,1031557241,-1110110152,-1086332927,1040307665)+W(1,1024013147,-1123928476,-1104003948,1029330819)+W(2,1045977841,-1100428029,-1091187884,1054647477)+W(3,1049827334,-1093314535,-1110202001,1048337215)+W(4,1044712430,-1098211617,1031718940,1045074033)+W(5,1042539942,-1120318828,1031171411,1042256462)+W(6,1022243624,-1110797385,-1118825252,1034920639)+W(7,1042631871,-1103475236,1047659449,1041342974);sum2=W(0,1035080118,1049091174,1068767241,1056655092)+W(1,-1111978522,1049791001,1068692590,-1120502660)+W(2,1043189101,1038894820,1041587068,1054889999)+W(3,-1107203795,-1088677682,-1079138335,-1094007639)+W(4,1020874649,-1074681252,-1088844169,-1106617291)+W(5,1040978901,1032440616,1033618204,1037089622)+W(6,-1103963851,-1139760881,1036797334,-1115116202)+W(7,1014904337,-1132242473,1040720920,1029103732);WS(-1076899872,-1090262268); +sum1=W(0,-1111775583,-1105212520,1053805936,-1130865048)+W(1,-1105515965,-1109220950,1044900104,-1124779047)+W(2,1031134981,-1105276619,1061229259,-1108606366)+W(3,-1152866339,-1081197371,1056451270,1012899053)+W(4,1022185487,-1085735312,1061180827,-1111684786)+W(5,1031461535,-1090100176,1061600458,1038272628)+W(6,991487050,-1106571081,1040836429,-1123743158)+W(7,1013082739,-1094472404,-1114201801,1043636133);sum2=W(0,-1092758077,1054372816,1025999909,1025560437)+W(1,-1099940688,1036990346,1044094629,1015649794)+W(2,-1096959860,-1102824961,-1093700170,-1134776466)+W(3,-1093749782,1072234824,1074465248,-1118772240)+W(4,1047974360,-1091574668,-1086059593,-1097328702)+W(5,-1120633714,-1098403340,-1083936129,1035273338)+W(6,1036248767,-1097220109,1045585843,-1098634116)+W(7,-1113388587,1024848209,-1093741871,1051989609);WS(-1097318719,-1106686758); +sum1=W(0,-1138034233,1031803579,-1107190316,-1118470609)+W(1,1022220430,-1105675680,-1110575515,1013564641)+W(2,-1115259277,1060345356,-1091489993,1028754310)+W(3,1037878284,1040095311,-1082557626,1043380040)+W(4,-1109043646,1057210483,1054616755,-1126688788)+W(5,-1118564628,1018511203,-1113047197,-1103180903)+W(6,-1132126739,1038086620,1037558661,-1105313401)+W(7,-1123355602,1040876381,1040895458,-1110366427);sum2=W(0,-1116780480,1011610145,-1126532250,1031867194)+W(1,1034654933,-1109786563,1049246354,-1117436106)+W(2,1033980194,1034290987,-1098441369,1050453777)+W(3,-1106740681,1058839838,1055488745,-1098876833)+W(4,1037910476,-1112504437,-1081564854,-1101879397)+W(5,-1110588743,1048688059,-1109313096,-1105182695)+W(6,1033369701,-1100404580,1046210019,1033744368)+W(7,1006481529,1024874106,-1122526519,1042001428);WS(1061957727,1058150789); +sum1=W(0,1009728708,-1099288198,1046412713,1036440691)+W(1,1031914819,-1097230757,1055587995,-1109853493)+W(2,1043097483,-1087266183,1056802398,-1106212891)+W(3,-1106863550,1043273168,1049133325,1023154886)+W(4,-1097372952,1055416522,-1086687979,1047286155)+W(5,-1108191069,1050026271,-1105368103,1036106272)+W(6,1032793786,-1110590381,-1107437206,1024106902)+W(7,-1129266281,-1108247452,1042988739,-1120124353);sum2=W(0,1021676194,1026925373,-1130821928,1011207236)+W(1,-1104415808,1041631623,1047340087,-1118374396)+W(2,1041444786,1049347642,1055108729,1032289888)+W(3,-1104915444,-1075706495,-1078646873,-1097824639)+W(4,1042839409,1068941883,1058328878,1041964936)+W(5,1025561656,1049874161,1054741696,-1122940124)+W(6,-1111488206,-1096918949,-1108156193,1033049167)+W(7,-1119893126,1030080935,-1107876167,-1131526532);WS(1058678303,1013994144); +sum1=W(0,-1118673511,1050426208,-1111022430,-1110204509)+W(1,-1145988558,1032382213,1019043839,-1116037137)+W(2,-1107600786,1059103555,-1086017695,1043824660)+W(3,-1097799452,1061451838,-1090188381,-1111434373)+W(4,1050901309,-1098106458,1050664020,-1123560275)+W(5,1025019066,1032049821,-1093177128,1043538778)+W(6,1034380585,1038038624,-1133222475,-1104489131)+W(7,-1117490811,1043957152,-1113568728,-1110765932);sum2=W(0,-1105859137,1052524883,-1116369180,1025172812)+W(1,1047608842,-1096529292,1033298597,1035180205)+W(2,-1101390223,-1103682938,-1095014501,-1138831970)+W(3,1011548907,1018027622,1063707518,-1096368530)+W(4,-1098146078,1039330573,1056731707,-1094263126)+W(5,1047719826,-1101134187,-1086128756,1061932077)+W(6,-1099968186,1054816538,1037701277,-1095466983)+W(7,1028887915,-1105962981,-1150004284,1016476277);WS(1063038079,1033861047); +sum1=W(0,-1111914898,1016779545,-1107257338,-1114919788)+W(1,1040884807,1014390112,1045397811,-1162045399)+W(2,-1102681756,-1109833994,-1096677860,-1101855164)+W(3,1061986003,-1095449911,1065846455,1049909751)+W(4,-1095429920,-1097838100,1029008656,-1097193708)+W(5,-1109559865,1019923216,1039008680,-1113534130)+W(6,1034752240,-1148961393,1033037520,1007645095)+W(7,-1104233906,1009274926,1029851870,-1103320918);sum2=W(0,-1112457849,-1117177515,1031942991,-1106095669)+W(1,-1106002020,1017665294,1033022206,1041685053)+W(2,-1103752624,-1098231154,-1133545004,-1095196752)+W(3,-1114732591,1062239338,1061426536,1046863079)+W(4,-1102536580,-1097906884,-1109528685,-1105989872)+W(5,1029961226,-1101585142,1032626487,-1120505375)+W(6,-1114728817,1037597321,-1114069131,1028074076)+W(7,1038070251,-1112453861,1032988844,-1124888510);WS(1060691839,-1121680521); +sum1=W(0,-1112633460,-1105323108,1045243383,-1113361469)+W(1,1034282296,-1097943963,-1117038833,-1109479713)+W(2,1016470792,-1091137362,1060606770,-1110311799)+W(3,-1124091490,-1083253895,1065759511,-1102522287)+W(4,1036530779,-1090987401,1062311590,-1114082482)+W(5,-1110508885,-1090137469,1056765570,-1104777690)+W(6,1036991882,-1098291034,1054157412,1016563642)+W(7,-1133939630,-1093525810,1057599172,-1167556095);sum2=W(0,-1097189010,1057901747,-1086723052,-1086497310)+W(1,1041454563,1039698409,-1087530727,-1090377488)+W(2,-1110771302,-1122301550,-1094374456,-1110538585)+W(3,1043926258,-1125642190,1064818137,1061014784)+W(4,-1109373654,-1108285138,1036021291,1034378960)+W(5,-1109768355,1020817735,-1109979249,1044647130)+W(6,-1114304258,1040279727,1055924705,1013465199)+W(7,1043669875,-1101494695,1040712355,1050381101);WS(-1087684831,-1094525449); +sum1=W(0,1038107891,-1093934649,1052573184,1038198313)+W(1,-1121734275,-1096975274,1049163549,-1113930844)+W(2,1035814365,-1093954738,1040479417,1035537105)+W(3,-1107604308,-1090018791,1066601083,-1102439448)+W(4,1038052214,-1088075930,1058232216,-1113118893)+W(5,-1101928869,-1090123804,1057618495,-1148589172)+W(6,-1104767443,-1106254226,1040796439,-1146582942)+W(7,-1127021124,-1100235009,1051666987,1033628463);sum2=W(0,-1102391770,1038892506,-1109920182,1034045130)+W(1,1032495868,1032348345,1035913564,-1111661823)+W(2,-1140349122,1055934176,1043439866,-1148365864)+W(3,1051494072,1066287204,1049172795,1035742233)+W(4,-1080481573,1070533091,1048700512,1024670194)+W(5,-1072283498,1056179234,-1122911277,1043482108)+W(6,-1085993190,-1098172645,1042548330,-1117726050)+W(7,-1091499210,1038613315,-1103404378,1024343165);WS(-1095407551,-1073547033); +sum1=W(0,-1103915126,1043640456,-1106314263,-1099126911)+W(1,-1101976843,1041775803,-1098551608,1023142916)+W(2,1024335748,1061599658,-1096990689,-1110220795)+W(3,-1108044768,1057524528,-1095708126,-1106562202)+W(4,1050893513,1060862745,-1102020840,1056016670)+W(5,-1095324014,1028413803,-1092797676,-1099653918)+W(6,-1107189281,1044362232,-1110398586,1031215069)+W(7,-1114975198,1051352312,-1097969466,-1138223071);sum2=W(0,-1112168075,1034632723,1034960798,-1112860057)+W(1,-1111493200,-1122920764,1040740621,-1108202591)+W(2,-1123529566,1009053647,-1105159128,-1115675116)+W(3,1022286331,1049936313,1057592446,-1112708946)+W(4,-1103466952,1051909492,-1126339526,-1146770753)+W(5,1035493883,-1099948229,1041517424,-1116950762)+W(6,-1113566520,1029419308,1016655048,-1115594520)+W(7,-1106265315,-1107051081,1024151142,-1103163741);WS(1063407871,1051042354); +sum1=W(0,1005154604,1049807310,-1113122997,-1107282310)+W(1,-1120529264,1052429035,-1100831547,1042685852)+W(2,-1106161584,1057743574,-1088929544,-1113923042)+W(3,-1130858780,1063894449,-1086654500,-1129272494)+W(4,-1114354154,1058090310,-1089886688,-1164896285)+W(5,-1127255711,1052514789,-1092092086,-1131567786)+W(6,1023693521,1044231916,-1106897472,-1131959253)+W(7,-1115504868,1049931918,-1097639884,-1115987013);sum2=W(0,-1113031572,1043434467,-1088941888,-1067187434)+W(1,1030565628,-1108784254,1056568736,-1079041185)+W(2,-1127702936,-1111949688,1036016830,1074040966)+W(3,992883874,1036810375,1060861120,1075709893)+W(4,1014952720,-1111107284,1023742716,-1099161149)+W(5,990495554,1042918247,-1098281783,992814626)+W(6,1018238740,-1120169364,1022041004,1039733673)+W(7,1023316920,-1112993936,-1112517088,1028892682);WS(1053166591,-1107822593); +sum1=W(0,1033874440,-1120335240,-1105709561,1042509273)+W(1,1022746982,1031831786,-1108379508,1008295657)+W(2,1035703758,1052124034,-1093762507,1044631286)+W(3,1019810386,1048792350,1046826502,-1124953572)+W(4,1044260196,-1095582904,1053612659,-1112928126)+W(5,1042374543,-1088629918,1045805451,-1113071488)+W(6,1040749291,-1097950065,1037463342,-1120529605)+W(7,1041374685,-1085974448,1042845918,-1132054272);sum2=W(0,1010990056,-1096561981,1040308359,-1119485380)+W(1,1039106059,-1097601992,1052717590,-1115258493)+W(2,-1102786881,1031463124,1058176412,-1101721469)+W(3,-1114641521,1058004743,1045709336,-1138490792)+W(4,-1133768253,1042505523,1034355291,-1101570252)+W(5,-1101476912,1041182740,-1096768246,1029590734)+W(6,-1103607882,-1105959219,1033275384,1037679123)+W(7,-1113060394,-1099775079,-1105804625,1036565969);WS(1028916214,1067075549); +sum1=W(0,1039584518,-1148995491,-1098323934,1026160863)+W(1,-1119264713,-1109885152,-1096386895,1022848653)+W(2,1016298993,1055889168,-1096985498,-1150434165)+W(3,-1105861885,1067421167,-1085982162,1034469007)+W(4,-1113980813,1059632007,-1087532161,1044152506)+W(5,1020015061,1055091716,-1088331431,1024761132)+W(6,-1134777055,1045130509,-1095878225,1032543553)+W(7,1032661512,1052375930,-1104015130,-1104676378);sum2=W(0,-1120016029,-1101422768,-1104653664,-1122344899)+W(1,-1096222017,-1103630239,-1105545071,1042131820)+W(2,-1119382227,1040689805,-1120927281,-1120071349)+W(3,-1092715875,1064582511,1058022283,-1101606830)+W(4,-1110818689,1043406218,1060808344,-1096987934)+W(5,1049876716,-1089499537,-1107109410,1051590178)+W(6,-1103484103,1029271710,-1107008053,-1099435532)+W(7,1032841990,-1117522613,-1105419897,1050342947);WS(1047020030,1040511430); +sum1=W(0,-1108637223,-1092384755,1057603229,1031927268)+W(1,1033110649,-1090443530,1053549631,-1122999800)+W(2,1044090139,-1085982557,1061618217,1026366340)+W(3,1043424750,-1080046633,1047924234,1032840448)+W(4,1036624046,-1083957593,1053999549,1015929108)+W(5,-1120308481,-1096279270,1057048888,1020572028)+W(6,1033721201,-1149642107,1057845673,994286645)+W(7,-1106849700,-1100324533,1052833857,1039624063);sum2=W(0,1035208568,-1124082321,-1093736918,1048736861)+W(1,1043030610,1008382386,1050323039,-1118377912)+W(2,-1107699159,-1107061123,-1114950423,-1106119918)+W(3,1044796248,1049576136,1074526989,-1111443567)+W(4,1034655700,1051573865,1073198167,-1132389881)+W(5,-1103668262,1048541752,-1080621030,1034733436)+W(6,1045164876,-1093669891,-1074078238,1034120076)+W(7,-1095424772,-1134934914,-1079139349,1029501600);WS(-1080108544,1072234904); +sum1=W(0,-1115070415,1027588151,1031137458,1018404227)+W(1,-1130610603,1029085890,-1104252646,1044293186)+W(2,-1098588213,1032775046,1056995037,1028038521)+W(3,1057466749,-1089931562,-1083673968,1050777268)+W(4,-1104374087,-1123371019,1052314097,-1093125043)+W(5,1029557602,-1094030554,1050628415,1046325824)+W(6,1018553236,1034779836,1033643941,-1108340394)+W(7,1001112594,999211181,1036988180,1020739741);sum2=W(0,-1115557063,1043108929,-1138826120,-1108049897)+W(1,-1118678156,1033401680,-1093193803,-1109597407)+W(2,1045099863,1036186051,-1079584214,1013268663)+W(3,-1102856438,-1124450766,1068262877,1049634970)+W(4,1035209289,-1112637977,-1121148137,1046161245)+W(5,1035167397,-1114646959,1041792105,-1111895568)+W(6,-1117208818,1012643139,-1138286224,-1127251156)+W(7,-1120387027,-1132473655,1032348301,-1116707942);WS(1061770399,1033097145); +sum1=W(0,-1127803310,-1100493560,1049484359,-1117956049)+W(1,-1108446526,-1122290538,1040952192,-1101349332)+W(2,1046619869,-1090144134,1049567736,1015706547)+W(3,-1102069216,-1124504076,1060283011,1051006353)+W(4,-1115166002,-1096124978,1036170309,1027971186)+W(5,-1107462472,-1113245389,1049188012,-1105896346)+W(6,-1113123881,-1115437168,1004781969,1011773295)+W(7,-1109525661,-1114380655,1043620172,-1118021614);sum2=W(0,-1115090363,1035607607,1036976780,-1102631851)+W(1,-1146121477,1032878473,1008730983,-1105868946)+W(2,1029869322,1020296178,1050702114,-1106613659)+W(3,1039239074,-1094567498,1060438996,1056742871)+W(4,-1123366919,-1133024223,-1092544833,1056526109)+W(5,-1123569769,-1111505684,-1088372125,-1103439045)+W(6,-1115297931,1036037468,-1119747923,-1114092237)+W(7,1022224092,1025152664,1015952550,-1109382916);WS(1063262431,1041246684); +sum1=W(0,-1095604910,-1094141452,1054301899,1050361575)+W(1,1035931377,-1103734011,1050116188,1015464930)+W(2,-1116408259,-1088213584,1059695011,-1130477940)+W(3,-1113418944,-1084116356,1063045487,1005018697)+W(4,1035543059,-1088057339,1060587189,-1114430457)+W(5,-1109446615,-1084926720,1062081288,-1112900435)+W(6,1041501409,-1095142868,1055163174,968128030)+W(7,-1111045021,-1085134126,1061043357,1012274924);sum2=W(0,-1088652568,1079171932,1068650823,-1089634291)+W(1,-1101936220,1073764649,1062997529,-1106083041)+W(2,-1091191468,1074855165,1053027607,-1102140198)+W(3,-1102444501,-1113430470,1039600983,-1123235056)+W(4,-1123800532,-1095064501,-1105207914,1028735871)+W(5,-1111069004,-1078839186,-1082346847,1056073450)+W(6,-1088813372,-1078450334,-1088354544,-1114344542)+W(7,1050243792,-1071519758,-1081653443,1060600412);WS(-1071343712,-1080188504); +sum1=W(0,1048814204,1024112567,-1101821021,-1155239198)+W(1,-1112944093,992179242,-1105846854,-1115614373)+W(2,1038698214,1035991718,-1110088095,-1117961066)+W(3,-1110388460,1065540811,-1086620536,1022833410)+W(4,-1102353903,1062800155,-1085891530,1037955557)+W(5,-1113346827,1057270438,-1092189183,-1130491710)+W(6,-1115354285,1047814390,-1094362793,1026576596)+W(7,-1172877482,1055244391,-1096652125,1021561214);sum2=W(0,1077488778,1057844910,-1110901413,-1157420388)+W(1,1067869852,1017329883,-1123912240,1016773013)+W(2,-1080283979,-1112258962,1048616910,-1127671945)+W(3,-1070445594,1038200220,-1103189448,1027002057)+W(4,-1085461181,1045877800,1033584054,-1139116556)+W(5,-1113067149,1016515143,-1113680120,-1108492850)+W(6,-1135625536,1029029881,1006246833,1033508697)+W(7,-1105631704,1026840239,1028070058,-1122607860);WS(-1114300667,-1123436789); +sum1=W(0,1048745214,1024457460,-1084727981,-1124831645)+W(1,-1106612992,1049280824,-1099711469,-1120312678)+W(2,1040619730,1061265254,-1091611130,991636461)+W(3,-1101020989,1066754197,-1090437274,-1115033343)+W(4,-1120049178,1060475010,-1087975654,1037659252)+W(5,-1129452308,1056957204,-1087165059,1036876438)+W(6,-1112058252,1052291799,-1095257281,1024723233)+W(7,1040777596,1051532558,-1091858685,-1128167880);sum2=W(0,-1102675226,-1096018291,-1064870457,1050758265)+W(1,1045758589,1033992894,-1078407710,-1091427154)+W(2,-1106608364,1053924217,1074354229,1044800412)+W(3,1037856863,1023354017,1077566439,-1122690967)+W(4,-1121700495,1045521037,1055978728,1037435194)+W(5,1038509645,-1112080608,-1100523264,-1101170582)+W(6,1041300787,1019757091,1032114149,1048475585)+W(7,1013024414,-1111416466,-1096094745,1031501486);WS(-1081349952,-1073531246); +sum1=W(0,-1130396178,-1092471918,1052933181,-1120779255)+W(1,-1123247001,-1094799967,1040552427,1032899791)+W(2,1049234666,-1087091570,1062313536,1048808240)+W(3,-1123595694,-1083589055,1056428784,1047688662)+W(4,1044575749,-1090515766,1060166366,1025076592)+W(5,-1118849787,-1088301188,1052569014,-1104574961)+W(6,1027091408,-1100895532,956727337,-1114767697)+W(7,1015989072,-1095518837,1057005798,1028829344);sum2=W(0,1036727690,-1101780564,1047063866,-1095151348)+W(1,1038605852,1036224480,1003722492,-1101329253)+W(2,1000461252,1043313873,1071364196,-1071443435)+W(3,-1108807283,1058417373,1075919102,-1072909475)+W(4,-1118764382,-1110550387,1031984760,-1137970650)+W(5,1040753555,1041024731,1052825370,-1094681513)+W(6,1025474323,1032765623,-1104266299,-1130737363)+W(7,1026410269,-1114514162,1049040777,-1100563228);WS(-1087415039,1075227720); +sum1=W(0,1014202565,1030200505,1042588557,1032642210)+W(1,-1121306305,-1093044977,1045750086,1039690838)+W(2,-1115466670,1052765481,-1099185023,-1099716881)+W(3,1055732347,-1086016434,-1102841730,1054066516)+W(4,-1088701572,-1108244135,1060432915,-1089156724)+W(5,1045428619,1044242725,1001272287,1045967960)+W(6,-1106855619,-1102530383,1047811955,994787170)+W(7,-1113272762,1042147022,1043051755,-1114980876);sum2=W(0,1034817173,1033088277,-1105460751,-1119967238)+W(1,-1106843150,-1115275500,1042281307,-1122100142)+W(2,1035283571,-1108330169,-1117933953,-1118763227)+W(3,-1117324330,1059951304,1055263105,1033190213)+W(4,-1106783723,-1114610359,1036736577,-1099584511)+W(5,1033652183,-1130129964,1034893511,-1097591398)+W(6,-1105003316,-1100855920,1040893249,1043864443)+W(7,-1109219720,1017452836,1026860110,-1097701018);WS(1061885343,-1093433134); +sum1=W(0,-1119074171,-1116612499,1043937396,1026065358)+W(1,1040591342,-1106037336,1035985530,1035233146)+W(2,1024365415,-1090085717,1054530437,1023445318)+W(3,-1112185530,-1110885309,-1105284753,1041032751)+W(4,-1102861510,1058148680,-1085809524,1043298226)+W(5,1047951017,-1098920364,1042740717,1028431483)+W(6,1033079635,-1104145445,-1143903027,1030877520)+W(7,1030794670,-1102965524,1048819605,-1110782149);sum2=W(0,-1120425303,-1115506247,-1089905659,-1106986872)+W(1,1041777983,-1109249837,-1082926483,-1093100415)+W(2,1008642595,1051302633,976609774,-1100742938)+W(3,1038578170,1062460419,1062992305,-1121360027)+W(4,-1103931105,1046700430,1016533657,1026171953)+W(5,-1144970974,-1110379832,1046952726,-1123505732)+W(6,-1139607395,-1121481149,-1128426413,1047068010)+W(7,-1105571910,-1125592805,1044012895,-1108759193);WS(1057387711,1071476886); +sum1=W(0,1029774760,-1088145158,1058722665,1026644842)+W(1,1046876472,-1090879061,1046940920,-1124024690)+W(2,1049447728,-1087750555,1062289140,1034805113)+W(3,-1104814472,-1081209882,1060559271,-1101227374)+W(4,1047761369,-1102041597,1057163193,1041428045)+W(5,-1107998911,-1088704948,1046238393,-1112057972)+W(6,1035672969,-1101378696,1049034574,-1123650077)+W(7,1025453339,-1090772220,1051154538,1045125730);sum2=W(0,-1079574021,1066168402,-1106633910,1033041398)+W(1,-1076424748,1072246945,1039775524,1025560740)+W(2,-1084651933,1055648588,-1122282375,1042767844)+W(3,-1079383446,1069722149,1050613020,-1122422479)+W(4,-1094010079,-1105729737,-1112550614,1029478726)+W(5,-1105513599,1052366950,1046757765,1029747528)+W(6,-1094989946,1046266897,1041413657,-1132333344)+W(7,-1083946107,1064021500,-1117589808,-1110924549);WS(-1088291167,-1076464582); +sum1=W(0,1038365083,1048475643,-1115380053,-1113517956)+W(1,1013092187,1039614653,-1115741870,-1118168192)+W(2,1049005176,-1105893787,-1115211424,1038779144)+W(3,-1096083994,-1090164821,-1106465144,-1103584918)+W(4,1046666973,1048630844,-1092124773,1051487172)+W(5,1029385568,1052597003,-1097273638,1036949051)+W(6,-1130846211,1030762351,-1104199584,1029432699)+W(7,1035921309,1049653618,-1098780292,1041505439);sum2=W(0,-1102442432,-1119046775,1038119755,-1116688635)+W(1,1042447103,-1103497340,-1117033259,-1109692823)+W(2,1009200726,-1108371687,-1111757198,-1136365839)+W(3,-1140140535,1063726871,1053430514,-1103585210)+W(4,1018235219,1023996549,-1097582390,1035998106)+W(5,1038566242,-1100556235,-1130738637,-1122627505)+W(6,-1105836948,-1134905751,1027482933,-1113769016)+W(7,-1119461411,-1115426548,1038939472,-1131103707);WS(1063535295,-1106643391); +sum1=W(0,998897947,1049160779,-1095715331,1022592892)+W(1,-1114069468,1050551697,-1114097198,1035333911)+W(2,1030590255,1037435628,-1091439068,-1105875754)+W(3,-1120649212,1059662980,-1098500149,1036951763)+W(4,-1112623985,1051258674,-1093374928,-1097348874)+W(5,-1135800742,1051146291,-1112852607,1021555078)+W(6,-1126057998,1042046535,-1104302276,1032877804)+W(7,-1118923687,1051522915,-1098602138,-1118947123);sum2=W(0,1020791040,1023004440,-1131522740,-1130592194)+W(1,-1119848331,1035188360,1010552055,-1114014595)+W(2,1028098574,1036866165,-1087402238,1057774258)+W(3,1024075228,-1081188844,-1063807577,1085749988)+W(4,1036335573,1036267331,-1074297638,1072260443)+W(5,-1114214294,1020492762,1044255896,-1101071935)+W(6,1028067710,1026996488,-1109527927,1041502854)+W(7,-1123998545,1028180222,-1125487816,-1121770211);WS(1065370528,-1140007425); +sum1=W(0,-1119191691,-1089109360,1051697742,1048704645)+W(1,-1123119348,-1093467562,1051845168,-1120571445)+W(2,1043193134,-1104035088,1049231373,1047054964)+W(3,-1144777506,-1082641845,1058881533,-1128753754)+W(4,1048874737,-1090665335,1060727795,-1122636375)+W(5,-1114692372,-1085597050,1053776045,-1135014444)+W(6,1047204584,-1097312497,1050811579,962936920)+W(7,1028382351,-1084438004,1054559607,1047044271);sum2=W(0,1072219394,-1078126224,-1093298188,1011861728)+W(1,1068804680,-1079031251,-1110022070,1040923692)+W(2,1068134846,-1078951161,-1084926454,-1105857084)+W(3,1066171639,-1087436811,-1107767815,-1121892273)+W(4,-1095987744,1039512383,1055586357,1026590003)+W(5,-1080918851,1067164113,1031793821,1040751494)+W(6,-1077110574,1069504242,1041030661,-1123439499)+W(7,-1071545857,1075315134,1055897321,-1109554506);WS(-1089696543,-1143233957); +sum1=W(0,-1115482013,-1129127938,1041381507,-1122467892)+W(1,1045323653,-1098483714,-1110243009,1049605572)+W(2,-1096516931,1045383939,1059582003,-1090424421)+W(3,1035013745,-1091150045,-1106321908,1043667267)+W(4,-1162367211,1043411549,1034020454,-1109629626)+W(5,1054106403,-1086835476,1026676964,1048548650)+W(6,-1107204469,1048447553,1034191370,-1105600748)+W(7,1036179510,-1103773800,-1159158363,1035568493);sum2=W(0,-1134008573,1032064725,-1117795542,-1113496357)+W(1,-1125596513,-1121806942,1035355315,998755498)+W(2,1011008945,1045441656,1024667789,-1119910472)+W(3,1051842604,1065460002,-1089961367,1041632626)+W(4,-1125276577,-1114964420,-1081892598,1035390555)+W(5,-1118729604,-1130705389,1026896379,1032979221)+W(6,-1111959837,-1121883022,1020053498,-1129745921)+W(7,-1117720498,1034360078,1023648883,-1115672512);WS(1065278079,-1120402802); +sum1=W(0,1031924074,1052390115,-1097070063,-1116671142)+W(1,-1115548942,1049303261,-1099757447,-1118597165)+W(2,-1106896516,1045251552,1040981136,1041336272)+W(3,-1112658654,1060948388,-1081623390,1043338841)+W(4,-1103991244,1062622505,-1085365853,-1145407604)+W(5,-1121670257,1054395391,-1096062708,1032773481)+W(6,-1115583119,1045812503,-1101077740,-1123616408)+W(7,1031270934,1048618059,-1099232531,-1127437558);sum2=W(0,-1114021356,-1110767736,-1100377718,1034493514)+W(1,1032565152,-1122384971,1041858293,1019779384)+W(2,1056835748,-1085457975,-1085697040,1016590225)+W(3,-1085160508,1068814369,1060746614,-1097525969)+W(4,1058685385,-1085213012,1057245366,1043875459)+W(5,-1086618535,1063574785,-1094120608,-1097974912)+W(6,1047242231,-1144776155,-1093482365,1054776673)+W(7,1032715041,-1097434793,1056356490,-1096653037);WS(1055688959,-1109584743); +return clamp(mstd0 + 5.0 * vsum / wsum * mstd1, 0.0, 1.0); +} // nnedi3 +vec4 hook() { +vec4 ret = vec4(0.0); +vec4 samples[8]; +samples[0][0] = HOOKED_texOff(vec2(-3.0, -1.0)).x; +samples[0][1] = HOOKED_texOff(vec2(-3.0, 0.0)).x; +samples[0][2] = HOOKED_texOff(vec2(-3.0, 1.0)).x; +samples[0][3] = HOOKED_texOff(vec2(-3.0, 2.0)).x; +samples[1][0] = HOOKED_texOff(vec2(-2.0, -1.0)).x; +samples[1][1] = HOOKED_texOff(vec2(-2.0, 0.0)).x; +samples[1][2] = HOOKED_texOff(vec2(-2.0, 1.0)).x; +samples[1][3] = HOOKED_texOff(vec2(-2.0, 2.0)).x; +samples[2][0] = HOOKED_texOff(vec2(-1.0, -1.0)).x; +samples[2][1] = HOOKED_texOff(vec2(-1.0, 0.0)).x; +samples[2][2] = HOOKED_texOff(vec2(-1.0, 1.0)).x; +samples[2][3] = HOOKED_texOff(vec2(-1.0, 2.0)).x; +samples[3][0] = HOOKED_texOff(vec2(0.0, -1.0)).x; +samples[3][1] = HOOKED_texOff(vec2(0.0, 0.0)).x; +samples[3][2] = HOOKED_texOff(vec2(0.0, 1.0)).x; +samples[3][3] = HOOKED_texOff(vec2(0.0, 2.0)).x; +samples[4][0] = HOOKED_texOff(vec2(1.0, -1.0)).x; +samples[4][1] = HOOKED_texOff(vec2(1.0, 0.0)).x; +samples[4][2] = HOOKED_texOff(vec2(1.0, 1.0)).x; +samples[4][3] = HOOKED_texOff(vec2(1.0, 2.0)).x; +samples[5][0] = HOOKED_texOff(vec2(2.0, -1.0)).x; +samples[5][1] = HOOKED_texOff(vec2(2.0, 0.0)).x; +samples[5][2] = HOOKED_texOff(vec2(2.0, 1.0)).x; +samples[5][3] = HOOKED_texOff(vec2(2.0, 2.0)).x; +samples[6][0] = HOOKED_texOff(vec2(3.0, -1.0)).x; +samples[6][1] = HOOKED_texOff(vec2(3.0, 0.0)).x; +samples[6][2] = HOOKED_texOff(vec2(3.0, 1.0)).x; +samples[6][3] = HOOKED_texOff(vec2(3.0, 2.0)).x; +samples[7][0] = HOOKED_texOff(vec2(4.0, -1.0)).x; +samples[7][1] = HOOKED_texOff(vec2(4.0, 0.0)).x; +samples[7][2] = HOOKED_texOff(vec2(4.0, 1.0)).x; +samples[7][3] = HOOKED_texOff(vec2(4.0, 2.0)).x; +ret[0] = nnedi3(samples); +return ret; +} // hook +//!DESC NNEDI3 (combine_y, nns256, win8x4) +//!HOOK LUMA +//!BIND HOOKED +//!BIND nnedi3_int +//!HEIGHT 2 HOOKED.h * +//!OFFSET 0.000000 -0.500000 +//!WHEN HOOKED.h OUTPUT.h / 0.707106 < +vec4 hook() { + vec2 dir = fract(HOOKED_pos * HOOKED_size) - 0.5; + if (dir.y < 0.0) { + return HOOKED_texOff(-dir); + } else { + return nnedi3_int_texOff(-dir); + } +} +//!DESC NNEDI3 (double_x, nns256, win8x4) +//!HOOK LUMA +//!BIND HOOKED +//!SAVE nnedi3_int +//!WHEN HOOKED.w OUTPUT.w / 0.707106 < +float nnedi3(vec4 samples[8]) { +float sum = 0.0, sumsq = 0.0; +for (int i = 0; i < 8; i++) { + sum += dot(samples[i], vec4(1.0)); + sumsq += dot(samples[i], samples[i]); +} +float mstd0 = sum / 32.0; +float mstd1 = sumsq / 32.0 - mstd0 * mstd0; +float mstd2 = mix(0.0, inversesqrt(mstd1), mstd1 >= 1.192092896e-7); +mstd1 *= mstd2; +float vsum = 0.0, wsum = 0.0, sum1, sum2; +#define T(x) intBitsToFloat(x) +#define W(i,w0,w1,w2,w3) dot(samples[i],vec4(T(w0),T(w1),T(w2),T(w3))) +#define WS(w0,w1) sum1 = exp(sum1 * mstd2 + T(w0)); sum2 = sum2 * mstd2 + T(w1); wsum += sum1; vsum += sum1*(sum2/(1.0+abs(sum2))); +sum1=W(0,1024871952,1026430476,1041094851,992987016)+W(1,1034372511,1007997243,1038248733,1009484684)+W(2,-1091961907,-1103990249,-1086639391,-1085365048)+W(3,-1087585419,-1093414958,-1100793414,-1099588502)+W(4,1049937838,1052012307,1057524239,1063527595)+W(5,1061081007,1057188600,-1104832955,-1114088341)+W(6,1023328805,994719130,-1110763811,-1102193240)+W(7,1046466539,-1131716095,1042167685,1037858632);sum2=W(0,-1122170202,-1117362461,-1125932452,-1100385246)+W(1,1020071642,1025043913,1017078274,1018043750)+W(2,-1115075619,1050294809,1041506545,-1100233118)+W(3,-1100362988,1047005177,1012082941,-1112302377)+W(4,-1113824159,1022334174,-1098709995,-1104291570)+W(5,1072797337,1053652830,-1100425628,-1155649364)+W(6,1016746290,1016781702,1031697879,1033455014)+W(7,1050444141,-1106922881,-1081909907,-1086585813);WS(-1096195455,1061976972); +sum1=W(0,-1107583849,1045016510,-1102048399,1050507709)+W(1,-1138600128,1004076226,1049677870,-1106918697)+W(2,-1094469481,-1104061589,-1082981042,-1086991635)+W(3,-1087760032,-1088999402,-1111975782,-1089081125)+W(4,1057261454,1051975353,1058403546,1061386858)+W(5,1052980216,1052828202,1055128500,1048525839)+W(6,1032308806,1046697387,-1093320254,1051876218)+W(7,-1106246183,-1112945129,1045880594,-1116677906);sum2=W(0,976892690,1043646796,-1131052969,1047930742)+W(1,-1099144563,1035354913,-1115191227,-1111106463)+W(2,-1095110912,-1114450783,1052886335,-1113296119)+W(3,-1088067101,1040578653,-1102673565,1051335047)+W(4,-1080663089,-1074060607,-1068434194,1048011859)+W(5,1042920440,1058047003,1057110709,1038060178)+W(6,1075827337,1075290035,1070007941,1046007784)+W(7,-1090506241,-1099371585,-1096675048,-1096378099);WS(-1095930303,-1128843438); +sum1=W(0,-1113225514,1030842449,-1120882464,-1111398934)+W(1,-1098488134,-1098728413,-1111237296,-1104159890)+W(2,1000563038,-1103461662,-1098779087,-1156245815)+W(3,1057689814,1058114717,1041725787,1046074787)+W(4,1038763268,1052682210,1055587560,1046999855)+W(5,-1090605975,-1106232348,-1106563184,-1119168797)+W(6,-1104281110,-1105449143,-1106219642,-1105879965)+W(7,1039743648,1030902068,-1111582036,1033984854);sum2=W(0,-1109947141,-1087141194,1007133897,-1099413759)+W(1,1026690396,1045509921,-1117657274,1051942463)+W(2,-1078961084,-1081851502,1057831088,1067440534)+W(3,-1095618356,1022398658,1029712906,1049871690)+W(4,1053833634,-1102894339,1046573470,1058568743)+W(5,1058025266,-1115002147,-1109832065,-1099467737)+W(6,1049299145,1040634467,1035108031,-1114324751)+W(7,-1094447449,1023241606,987652806,-1104714655);WS(1018627052,-1077328537); +sum1=W(0,-1107592280,1011043872,-1138466445,1041422472)+W(1,-1112294435,1012707679,-1150731309,-1118891707)+W(2,-1098360952,-1103889731,-1088654431,-1079526160)+W(3,-1109020730,-1095389295,-1102056896,-1101414784)+W(4,1054425801,1045838144,1063939041,1057394281)+W(5,1061143403,1057286118,1040465365,1042544156)+W(6,-1121256842,1016847523,-1114759963,-1109966789)+W(7,-1115564074,-1117689671,-1133534770,1028492087);sum2=W(0,-1161717665,-1138679732,-1121504639,1050854432)+W(1,-1106511096,1030373815,980628162,1031200951)+W(2,1033867626,-1115218580,1030621655,-1096361601)+W(3,1044499063,-1104067382,1040061476,-1122098343)+W(4,1028201267,-1096378423,1071708903,1079482342)+W(5,-1064184100,-1089118805,1048273255,-1109436715)+W(6,-1124228530,1029766795,-1128256742,1035298280)+W(7,1035336882,-1105361644,-1119150405,1035049634);WS(1045693694,1057374369); +sum1=W(0,1048369598,-1104752283,1031950009,-1123958928)+W(1,-1103831441,-1106189273,-1103850789,-1110300085)+W(2,1034312519,1045853799,1057046586,1065585622)+W(3,1061666460,1060939321,1050689810,1060417841)+W(4,-1131023893,-1098373234,-1095062180,-1089164628)+W(5,-1092432965,-1087345809,-1092965100,-1091010256)+W(6,-1099588978,1019902402,-1105510198,1033283356)+W(7,-1115031649,-1122647270,-1126666680,-1103574093);sum2=W(0,-1087427905,1058683530,-1081734921,1050776004)+W(1,1042479954,1025544982,-1105492903,1058740427)+W(2,-1098709872,-1099141199,1032637312,1072181481)+W(3,1036599206,-1080357543,-1113642582,-1086527647)+W(4,1072153031,-1088885778,1061509476,1071890032)+W(5,1052304550,-1080881103,1050862866,-1078556244)+W(6,-1089481634,1056590706,-1092495010,1048814690)+W(7,-1095810808,-1097308566,-1094462248,1039671439);WS(-1081549664,1060153996); +sum1=W(0,992286043,-1115318586,-1105782456,1026471870)+W(1,-1114468402,1037910210,-1130210466,1043803882)+W(2,1063391104,1055271797,1062019397,1061503832)+W(3,1058772501,1045594046,1049908468,1040755007)+W(4,-1087586274,-1095899708,-1085498120,-1089250259)+W(5,-1090055577,-1102496824,-1103786988,-1104619012)+W(6,-1105647870,1025423024,1033921889,-1113405924)+W(7,-1113674825,-1106446561,-1118412923,-1096097592);sum2=W(0,1053790549,-1110257416,1033688102,-1102619530)+W(1,-1117483359,-1098152061,-1105743952,-1083553679)+W(2,-1080860351,-1097530578,1041061421,1064966059)+W(3,1050344847,1040479494,1051151965,1065962098)+W(4,-1068185653,-1077346152,1052310674,1072556372)+W(5,1075004369,1064749402,-1110156824,1045213317)+W(6,-1082483044,-1088866791,1052658871,-1104178634)+W(7,-1108410079,1040931499,-1137891932,1053124980);WS(-1079020096,-1097079011); +sum1=W(0,-1109501731,1033910555,1015347636,-1108027795)+W(1,1042979875,1019929124,1040369234,-1134559750)+W(2,-1096742621,-1092191510,-1089091160,-1087072713)+W(3,-1087558450,-1089417126,-1104831498,-1091818621)+W(4,1057943754,1055662529,1059647341,1068092504)+W(5,1059824411,-1117499817,1043480574,1050143023)+W(6,1016000225,1020967408,-1102027816,-1109882648)+W(7,-1106889398,-1117366414,-1104827345,1049289276);sum2=W(0,1037631964,-1105851814,1036652885,-1110757790)+W(1,1024508007,-1139201564,-1113225064,-1104657620)+W(2,-1097479797,1051380185,1028410699,1044594400)+W(3,1041068006,1046036650,1054960427,-1105334641)+W(4,1051023588,-1097950410,1034374804,1053237761)+W(5,-1132209182,-1088293598,-1081781977,1065714224)+W(6,1045348435,1028003104,-1113269608,1041832368)+W(7,1033918380,-1089693526,-1099925151,-1106359824);WS(-1087384991,1052875812); +sum1=W(0,1041733252,-1138647561,1034391503,-1106477875)+W(1,-1100509868,-1098694249,-1110959830,-1120730421)+W(2,-1109905397,-1104994285,-1107522048,1057597757)+W(3,1062613266,1055828187,1052485297,1044647290)+W(4,1041497057,1032882549,1050093354,-1091247383)+W(5,-1087942224,-1090201627,-1098203032,-1100016695)+W(6,-1113613058,-1117825756,-1108789794,1028766931)+W(7,1042722079,1013355333,1034047139,1038812681);sum2=W(0,1019350107,-1111428867,1017374087,-1112005123)+W(1,1028700445,-1112772903,1027823157,999439052)+W(2,1041831066,-1130655130,-1138336400,1035402260)+W(3,-1116945124,1041636268,-1107238338,1033528252)+W(4,1051650697,-1112274143,-1092155273,-1114034096)+W(5,1045953881,1041190902,1049171133,1027833254)+W(6,-1103332568,-1077765094,-1073481211,-1087514353)+W(7,1069095754,1074086485,1057277153,-1107727987);WS(1050457727,1041689780); +sum1=W(0,-1131312139,-1116681402,1030961105,-1140959985)+W(1,1046496193,1048638526,1007270019,1049181764)+W(2,992358355,1014710691,1040368912,-1105027369)+W(3,-1089290871,-1090315138,-1098770776,-1086147588)+W(4,-1092744895,1027381214,-1089348299,1050737138)+W(5,1038810352,1055368676,1040416748,1051301702)+W(6,1048008788,1036450832,1053966377,933247243)+W(7,1043432004,-1119062181,1023583738,1037141075);sum2=W(0,-1107193278,1019433289,1039188525,-1123892633)+W(1,1039851328,1032631611,1044641782,-1097026795)+W(2,1057496780,1031729137,1037283932,-1086728254)+W(3,-1087309268,-1092570464,1035754242,1063903066)+W(4,1072935738,-1080020989,-1078950448,-1087453268)+W(5,1051352061,1059438018,1051006721,1056300653)+W(6,-1080570956,1054527180,-1096917141,1050123895)+W(7,1053948249,1042769096,1029707984,-1106545458);WS(-1084263519,-1088250567); +sum1=W(0,-1107101246,1049480649,-1097447514,1049647488)+W(1,-1099235545,1018612505,-1103944776,1032447885)+W(2,1048954180,-1096698757,1059331526,-1119095878)+W(3,1040553109,1041330418,1040723088,1023387386)+W(4,-1118116730,1027018719,-1108150329,-1090501921)+W(5,1044929028,-1094468036,1047463532,-1106285556)+W(6,-1111017296,1043604572,-1098833704,1050343697)+W(7,-1096264890,1044030041,-1121471547,-1175819022);sum2=W(0,991719940,1034086314,1055828179,1034571486)+W(1,1049088345,-1098363481,-1111430799,-1111365517)+W(2,-1157381748,-1121095386,-1103829652,-1100672658)+W(3,-1090417467,1050795943,-1113801830,1037803588)+W(4,-1100952734,1027786887,-1085350121,-1118546758)+W(5,1049271738,-1140682323,1035813474,-1164121191)+W(6,1029794653,1016292894,1067178121,-1098007098)+W(7,1008607005,-1110134488,-1115483467,-1133015817);WS(1066054400,-1125664425); +sum1=W(0,1015260777,-1108545200,1023624464,-1109354663)+W(1,1023465234,-1108921531,-1116445024,-1128865616)+W(2,1054574294,1053284635,1059735702,1058150961)+W(3,1058102002,1063397581,1046571067,1046728251)+W(4,-1095241461,-1094415406,-1088764634,-1078845388)+W(5,-1090401103,-1105651068,-1116790272,-1104354311)+W(6,-1127045294,-1111343263,1041542629,-1130514988)+W(7,1035892576,-1136829776,1030749305,-1106930027);sum2=W(0,1041565398,-1103469615,1029690269,1035794320)+W(1,1035452008,-1107146771,-1124704946,1040850628)+W(2,-1104697837,1029373537,1057447179,1080145714)+W(3,-1103623095,-1066097425,-1097535851,-1103109309)+W(4,-1115419200,1031260861,1026403525,1043319440)+W(5,1050811672,-1103531154,-1090176537,1055196268)+W(6,-1158883614,1035036640,1034486240,1041655252)+W(7,-1114789346,-1114794272,1036709484,-1102936938);WS(-1087901375,1071177135); +sum1=W(0,-1121594272,-1122618691,-1114434254,1044010486)+W(1,-1113833999,-1108159437,997526195,-1123472883)+W(2,-1110224028,-1109965218,-1120206908,1010935165)+W(3,-1108541318,1041417229,-1109330685,1039497451)+W(4,1030219348,1047787782,-1114914192,-1113546820)+W(5,1046030645,1035224125,1017890711,1022061139)+W(6,994425384,1027034090,-1106192913,1040356168)+W(7,-1112701798,-1130438655,-1151173965,-1125745551);sum2=W(0,1042217679,-1108814485,1058334461,-1080767453)+W(1,1050991857,1030602271,1034906705,-1127683613)+W(2,-1116367239,1042859710,-1078638996,1073929687)+W(3,-1092080339,-1116721722,-1106162437,1035114111)+W(4,1026421701,1027395369,1028343990,-1097310248)+W(5,1042808122,1051491707,1024141024,-1112071525)+W(6,-1140328609,-1114630403,-1105295199,1028261520)+W(7,-1122297114,-1105219597,997359482,1017171678);WS(1066545696,-1154623394); +sum1=W(0,-1105442505,-1115505461,-1102287846,1023914903)+W(1,1021900696,1016559928,-1142506442,-1129232035)+W(2,-1114054203,-1098488296,-1092352928,-1089108436)+W(3,-1087887754,-1096061654,-1097827287,-1095543703)+W(4,1057182265,1049322687,1062190966,1059635472)+W(5,1057132007,1043675118,1048482034,1055016957)+W(6,-1123432545,1010507424,-1097309632,1045294808)+W(7,-1098559779,1042399967,-1110816589,1026256390);sum2=W(0,-1094410020,-1073520568,-1076806727,1007932024)+W(1,-1129053184,-1126774165,1016297320,1026440100)+W(2,1040526244,-1119660436,1072065972,1074284701)+W(3,1045336233,-1114285571,1027498382,-1109537500)+W(4,1038890507,-1105577163,1038803075,-1096715819)+W(5,1048625414,-1106066396,1035667090,-1128514892)+W(6,-1120085021,1014274624,-1119386280,1032586275)+W(7,-1148623280,1033069015,-1113847206,1028560484);WS(1055250687,-1106970626); +sum1=W(0,1033119688,-1105149829,1043588463,-1098690473)+W(1,1051357302,-1111820283,1036109552,-1119401059)+W(2,1042190962,1055784922,1039447718,1060328969)+W(3,-1105877415,1050469874,-1123255849,1044861546)+W(4,-1096546392,-1103230410,-1093610964,-1094495495)+W(5,-1104321127,-1102978667,1034127854,-1097968467)+W(6,-1117586055,-1125652468,1035816565,-1103963220)+W(7,1047255951,-1108600424,-1157028943,1018776031);sum2=W(0,1038757267,-1111076574,1036628998,-1107631850)+W(1,1045867530,-1126199158,1034641438,1014361489)+W(2,1030211853,-1147844455,1002666567,-1080902130)+W(3,-1089131777,1067727291,1050167793,-1114432338)+W(4,1033894636,1039985174,-1092985165,-1084645521)+W(5,1069738325,-1096580382,-1100096489,-1100261485)+W(6,-1133782171,-1117005539,-1150866734,1049641986)+W(7,1051354211,-1100550183,-1104598763,1033251244);WS(1063662431,1022143153); +sum1=W(0,-1101665898,1044567949,-1113912242,1054985008)+W(1,-1089448239,1031890901,-1106608329,1016341751)+W(2,1028101088,-1100200043,-1110575390,-1090770105)+W(3,1042239925,1034205190,1041117720,1032506575)+W(4,1045825111,-1112112432,1011332621,1036354680)+W(5,1053092900,1020582213,-1122250931,1037368233)+W(6,-1107336877,1049135824,-1117269540,1043762234)+W(7,-1090665684,1045380738,-1108114694,1027635960);sum2=W(0,-1109621945,1044140338,1011973298,1054192939)+W(1,-1083519810,1050669158,1015542539,1007706050)+W(2,995625223,-1125871763,1059194369,-1085775903)+W(3,-1085690186,1055305067,-1115586758,1024423563)+W(4,1033690799,-1131300267,1019603073,-1105557074)+W(5,1066625604,-1093331249,1025625789,-1163078190)+W(6,-1127273987,1031533647,-1100093028,1049649037)+W(7,-1099380904,1041330252,-1109873113,1021669909);WS(1065395904,1046290614); +sum1=W(0,996799560,1015596034,-1100668872,-1100927819)+W(1,1043886221,1025322396,1035443240,-1114934548)+W(2,-1125542553,1043656950,1056396433,1054862894)+W(3,-1088911438,-1099487682,-1105531411,-1117673547)+W(4,1038203972,-1105153011,-1085640859,-1101762943)+W(5,1057024083,1036429768,1021072448,1035195023)+W(6,-1122586727,1036793959,1049715632,1035554923)+W(7,-1115152096,-1122121748,1039652277,1024299964);sum2=W(0,1029237671,-1133651707,-1114304490,-1114162505)+W(1,-1125875827,-1112015576,1015895733,1035088799)+W(2,1017509749,-1140172751,1030543605,-1092617066)+W(3,1051105475,1033357967,1011455075,-1105982664)+W(4,-1104176053,1038596873,1050264307,-1093179067)+W(5,1071302855,-1090684841,-1100815852,1003487558)+W(6,1032328729,1037378915,-1104642832,1049979232)+W(7,-1110244360,-1085540383,-1135016203,1015899853);WS(1058730335,1038095077); +sum1=W(0,1050009523,-1156396202,1045232946,-1123440788)+W(1,994853272,1029074928,-1116532263,1016043038)+W(2,-1090412329,1022785342,990514519,1051849503)+W(3,1050259497,1048747736,1040337077,1047238893)+W(4,-1116071407,-1112028282,1027669243,1025171300)+W(5,-1091444451,-1091116387,-1095024325,-1085293672)+W(6,-1120619710,1033123659,-1138222105,1042856679)+W(7,1043400402,1046148791,1031722640,1050565349);sum2=W(0,1046272294,-1119023958,-1106071503,-1097641458)+W(1,-1099339001,-1122591395,-1120322169,-1112624405)+W(2,1056160584,1047372879,1066704996,1062851774)+W(3,-1127558738,-1095719050,1012197993,-1094334166)+W(4,-1069609928,-1100807597,1063602974,1071319304)+W(5,-1123458905,1049925865,1037702687,1046841945)+W(6,-1086350256,1012350161,-1093103672,-1165704932)+W(7,-1099266547,1039176837,-1104052164,1043315186);WS(-1102208382,1082454872); +sum1=W(0,-1121527792,1019782131,-1111677734,1042764822)+W(1,-1098291428,-1109244559,-1122839755,1023050790)+W(2,-1097489215,-1109352802,-1089475261,-1094323164)+W(3,1057233791,1055571354,1036609181,1023873367)+W(4,1044710709,1043005718,1059136208,-1113184692)+W(5,-1102862820,-1113821821,1016630678,-1122283881)+W(6,1024559218,1025756170,-1098383546,1034230961)+W(7,-1121795355,1034138424,-1148370726,1021065311);sum2=W(0,1012975921,1033684352,-1119837718,1048900749)+W(1,-1088385914,-1106132930,-1107812043,1047279942)+W(2,-1113722375,-1113902527,1034379158,1065557700)+W(3,1033601684,-1078602486,1048231286,-1117907500)+W(4,-1109752074,-1108511603,1047596894,1065261424)+W(5,-1110433219,-1113936114,-1106600777,-1110420048)+W(6,1009270385,1034062718,-1096952633,1042274647)+W(7,-1110816087,1038223706,1037668398,-1111923151);WS(1055139903,1066543323); +sum1=W(0,-1113216706,1034160554,-1110997976,-1104052311)+W(1,-1130057219,-1100344024,-1109060119,-1102181302)+W(2,1025777755,-1106690282,1025857819,-1108040417)+W(3,1042814916,1058801014,1040801319,1061190298)+W(4,1062476912,1047449287,1040533578,-1088276389)+W(5,1043316038,-1096553156,1003175286,-1109923206)+W(6,-1094834883,-1115394087,-1100641176,-1109281747)+W(7,-1111790927,-1131081926,-1127882001,-1116502963);sum2=W(0,1032900543,1026043047,1011969739,1005946567)+W(1,-1104378201,-1106573410,-1149079854,-1098913457)+W(2,-1093611286,-1143136704,-1129502699,1065137024)+W(3,1034934846,1044311979,-1128312106,-1107526541)+W(4,-1093105706,-1104881087,1056641171,1062580590)+W(5,-1137732946,-1102271464,-1106196955,-1097055308)+W(6,-1103368978,996537094,-1097512177,1038772124)+W(7,-1108835309,1035638256,1028654910,-1144299515);WS(1037662203,-1095462961); +sum1=W(0,1051208476,1007151360,1047867778,-1120692693)+W(1,-1102286423,1029685138,-1117174983,998066935)+W(2,1054332722,1048962332,1056131053,1060311124)+W(3,1053179033,1057524976,1045179237,1053688986)+W(4,-1088537607,-1096098779,-1089718811,-1086623130)+W(5,-1088149909,-1093380227,-1094989189,-1094538289)+W(6,1009988859,-1120684294,1043868050,1008468855)+W(7,1024446024,1041242535,-1121112609,1022948968);sum2=W(0,-1075642964,-1078284587,-1077677369,-1086975712)+W(1,1050575143,-1109971278,1043550667,1046375822)+W(2,1064397427,1070403917,1072178178,1071930150)+W(3,-1093947328,-1119680819,-1134729809,-1094009133)+W(4,1042055631,1050515956,-1094922849,-1096417404)+W(5,-1094640520,1045435393,-1109099138,-1106076462)+W(6,1049259770,-1100572061,1038272909,-1110188613)+W(7,1033007627,-1109186235,1040318497,1038207101);WS(-1091974591,1028524890); +sum1=W(0,-1119527298,1034997099,-1099802012,1033463662)+W(1,-1090658116,1044419888,-1099353751,-1110855131)+W(2,1050666155,-1101120961,1057798952,-1146674958)+W(3,1048486316,1054164791,1033437822,1053708795)+W(4,-1104886813,-1100807815,-1099838668,1021707158)+W(5,1057612011,-1093871840,1029138830,-1104286795)+W(6,-1119869997,1044100139,-1103774309,-1112176434)+W(7,-1094617942,1036492177,-1113521820,1028051362);sum2=W(0,1029285075,-1113245689,1046869988,-1099734421)+W(1,1045806866,-1099048447,1040440310,-1129472848)+W(2,-1114745613,1037297246,-1113507597,1057852752)+W(3,1031538739,1019950674,1039903515,-1115367833)+W(4,1024121756,1034295695,-1081105309,1063764387)+W(5,-1093953622,1060684479,-1099720743,1051222485)+W(6,-1127985632,-1103172653,-1097344586,-1092930743)+W(7,1039548141,-1113791115,1024790472,-1106398082);WS(1058893599,-1078409713); +sum1=W(0,-1115244150,1036724056,-1098555735,1049246955)+W(1,1045222582,-1138283737,1044966206,-1115412967)+W(2,-1102829117,-1100240992,-1094663483,-1084866106)+W(3,-1085064800,-1093243506,-1093950047,-1095580366)+W(4,1039336887,1053376406,1053054383,1065100884)+W(5,1054590883,1056764679,1053059489,1050610273)+W(6,-1115623287,-1114512019,1041993169,1018575674)+W(7,-1114852275,-1108377677,-1118180448,-1122449691);sum2=W(0,-1130929736,1009552185,-1084383778,1050909748)+W(1,1049209322,-1096700837,1051369678,-1129474226)+W(2,-1101060123,-1090337753,1072779570,1053567468)+W(3,-1079161361,1057662166,-1097661058,-1112521942)+W(4,1045192083,1061442923,1050903982,-1089269841)+W(5,1029505799,-1094014597,1046387683,-1105984421)+W(6,-1105822172,-1103557108,-1106762492,-1117595750)+W(7,-1111371347,1025228376,-1138825972,1030887459);WS(-1109369595,1048740969); +sum1=W(0,1040995480,1030414773,-1118646413,1043594790)+W(1,-1129436350,1037121811,1030207412,1043560049)+W(2,1051718495,1050319297,1059003715,1046504696)+W(3,-1135436979,1043825845,1049475887,1058279379)+W(4,-1091711555,-1095167863,-1085356599,-1083562713)+W(5,-1096690237,-1098326935,-1120665100,-1098718953)+W(6,-1125552391,1032958437,1042985722,1045509569)+W(7,1023899916,1019546753,-1130219052,-1105013544);sum2=W(0,-1113177829,1043809265,-1095416462,1034071291)+W(1,-1120341831,1043900974,1020015593,-1119209873)+W(2,-1117552581,-1109343151,1052574118,1063553374)+W(3,1070912061,-1112203792,-1091338378,-1072794661)+W(4,-1100446453,1039662186,-1114145263,1053677817)+W(5,-1101063801,1042882834,-1094258913,1055602011)+W(6,1041583669,1009024316,-1118793923,1018689733)+W(7,1031195477,-1105538343,-1114748986,-1109237633);WS(-1093437503,1065718162); +sum1=W(0,1037550096,-1101135841,1044878747,-1107014286)+W(1,1042111087,1037051057,-1099961615,1041500301)+W(2,1049488055,1042594425,1049041945,1066142676)+W(3,-1100146203,1045825417,1040663590,-1119554198)+W(4,-1103061781,1046266118,-1087470164,-1106438298)+W(5,-1111606545,-1091131027,-1133427370,-1103590594)+W(6,-1114711965,-1097873069,1046063170,-1091362312)+W(7,1037494709,1040258368,-1109172298,1033770775);sum2=W(0,-1106488910,1026201604,1035711566,1060425407)+W(1,-1098764525,-1096618367,-1182808622,-1127820908)+W(2,-1123106758,-1113590739,-1084666863,1061776657)+W(3,1055047321,-1119175762,-1103500958,1041613778)+W(4,1050172947,-1092748399,-1097703384,-1099741350)+W(5,-1120322586,1050324229,1025620288,-1105222946)+W(6,-1124712996,1043391307,-1098783459,1048423650)+W(7,1041036039,-1099280352,1048645442,-1118590758);WS(1056660607,-1113798601); +sum1=W(0,-1115305597,-1101671294,1016801995,1039904137)+W(1,1037148876,1040453028,-1110559226,-1154296528)+W(2,1041913228,1008348404,1031963795,-1093680051)+W(3,-1089471492,1034024758,-1111400057,1031051312)+W(4,1012656821,998498191,-1102006873,1057450908)+W(5,1049874551,-1111681498,-1109457443,1036430914)+W(6,1026504084,-1151777337,1032505286,-1108358078)+W(7,1031920291,1043455038,-1129849213,-1125050675);sum2=W(0,1042939003,-1114796094,1044529628,-1124781020)+W(1,-1106748864,1016881133,-1108227590,1027959261)+W(2,1024638457,-1101207597,1027593065,-1097759574)+W(3,-1130307786,1033669310,1022409637,1019735589)+W(4,-1123927190,1042777565,-1098782283,1059165645)+W(5,1062760553,1017094385,-1160993898,-1125388747)+W(6,998901155,1022659417,1017512357,-1104939928)+W(7,-1098668376,-1089791762,-1106217568,-1115680109);WS(1066155712,1004288134); +sum1=W(0,1047132567,1029697589,1014062303,1041631965)+W(1,991515041,-1123217244,-1154741365,1030265807)+W(2,1049267618,1048612844,1055750611,1059093756)+W(3,1057479944,1056993158,1047138005,1055767146)+W(4,-1089062279,-1092380195,-1088453014,-1084647474)+W(5,-1091963789,-1088742789,-1098495965,-1086886676)+W(6,-1138510971,1046969501,1024451359,1049129552)+W(7,1040560290,1043007167,-1122630737,-1122583780);sum2=W(0,1011892235,-1111382628,1037768402,1032283234)+W(1,-1114728106,1009460031,-1112526532,1030203700)+W(2,1040858440,-1103755803,-1125277089,-1084511950)+W(3,-1090323786,-1159433014,1053584755,1052886875)+W(4,-1127819845,-1109875610,-1096621612,-1071556311)+W(5,-1071973667,-1099343032,1076043190,1079690007)+W(6,1010964983,-1106716388,1032593498,1040462902)+W(7,-1100404332,1040394500,1007208771,1051792925);WS(-1086041375,1049976369); +sum1=W(0,-1125608345,1025261033,1032012444,1046732297)+W(1,-1114869141,1036081274,1036645660,-1119140736)+W(2,-1096855193,-1097190986,-1086237883,-1083643033)+W(3,-1093631755,-1095059844,-1132519191,-1095180224)+W(4,1037693680,1051176741,1059434222,1062665585)+W(5,1052924527,1052562329,1041010310,1048775023)+W(6,1048607039,1030637974,1026121224,-1103554484)+W(7,-1110078044,-1109004102,1035782593,-1118200972);sum2=W(0,1029601330,-1144560396,1032763954,-1115106220)+W(1,-1111454114,-1121335223,-1109520646,1021645795)+W(2,-1115199196,1026958814,1032369083,-1106065675)+W(3,1042189754,1029124674,1022674491,1026253022)+W(4,-1096390757,-1100298556,1076866217,-1108884178)+W(5,-1116766618,1025985538,-1115268590,1011072742)+W(6,-1079547524,-1081990625,1041174181,1041059708)+W(7,1024602232,-1127158528,1007020790,1003377428);WS(-1111980027,1060626277); +sum1=W(0,1023621139,1032179266,1030954414,1037158526)+W(1,1036765152,1036680203,-1146606447,-1119312598)+W(2,-1102882983,-1092055397,-1089823274,-1095093232)+W(3,-1090725010,-1139402199,-1116432156,-1108873773)+W(4,1044706422,1043529367,1057090380,1064981515)+W(5,1047303429,1042557255,1028925358,1041638915)+W(6,1028429765,-1113080214,-1101761443,-1098683411)+W(7,1033439719,1030304674,-1104492078,-1112219839);sum2=W(0,-1107703976,1046455264,-1093472442,1048924762)+W(1,-1097201227,1049435664,-1106239872,-1119402461)+W(2,1045439570,-1090239140,1028879562,1064195571)+W(3,1016778259,1027385222,1028121257,-1105208479)+W(4,1032849260,-1096329612,1030082819,1036056807)+W(5,1059898488,-1091675747,1053658286,-1117889585)+W(6,-1122224669,1035962913,-1098806672,1041148911)+W(7,-1091828205,1041687668,-1098243254,-1104565052);WS(1062681599,1040842201); +sum1=W(0,-1108789463,-1115361429,1048981817,-1092926921)+W(1,1054602509,1029602904,-1117967305,1025443329)+W(2,-1104300209,1050445194,-1089127203,1063952639)+W(3,1043197406,-1106041808,1039191171,-1114238594)+W(4,1042117608,-1097788769,1032428200,1049970971)+W(5,-1088418847,1049956321,-1112931212,-1123051255)+W(6,-1118282400,-1114475276,1049574381,-1090427073)+W(7,1045778638,-1112080775,-1097758566,1033393295);sum2=W(0,1038735267,-1100048068,-1115453090,-1110884051)+W(1,-1090743949,-1153955669,-1112598570,-1103797208)+W(2,-1126315713,1043050536,1053683464,1058830244)+W(3,-1100540415,1037942519,-1098889179,1040830228)+W(4,-1111714958,-1115313021,1046662525,1061563017)+W(5,1052621807,-1104363663,-1118760183,1007755797)+W(6,-1111656758,-1115683900,-1093358619,-1105966973)+W(7,1037413595,-1101879362,1044482581,-1098877089);WS(1062776447,1069975051); +sum1=W(0,-1130308944,-1112835078,-1113144126,-1094805377)+W(1,-1098008538,-1114270939,-1117364667,-1117827459)+W(2,1036893844,-1114635034,1050058840,1071110128)+W(3,1061455014,1044746969,1018226642,1049407081)+W(4,-1104137265,-1098478453,-1104852259,1041368142)+W(5,-1095764665,-1109080309,-1103882015,-1120810969)+W(6,-1108240801,1029922778,-1111877761,-1088740684)+W(7,-1112520550,-1119589855,-1121527653,-1103102129);sum2=W(0,1028834725,-1110297977,1035091068,1034973002)+W(1,-1110025415,-1154986018,-1120031976,1030684381)+W(2,-1113117380,1026197871,-1099362318,1077416661)+W(3,1050456944,-1112814852,1027999489,1016280910)+W(4,1037052904,996515330,1043940575,-1069860026)+W(5,969317772,1021906202,-1115577362,1013156184)+W(6,-1113210551,1032917698,-1106692355,-1103487680)+W(7,1034055293,1006658352,1018186436,-1124181989);WS(-1082599007,-1084302409); +sum1=W(0,-1127095446,1011517278,-1110892475,1024933540)+W(1,-1111586789,1039136849,-1108207315,1049617952)+W(2,1056665680,1052281350,1058821842,1061132051)+W(3,1054434479,1052720805,1043783817,-1159632952)+W(4,-1087212124,-1096260148,-1085877656,-1087957451)+W(5,-1089270826,-1102718609,-1106422582,-1106709957)+W(6,1035858193,-1128228554,1043137767,1023709101)+W(7,1037286635,-1111842501,-1130056576,-1115207149);sum2=W(0,1048459811,1071226724,1075494724,1074401127)+W(1,1044864951,-1077687291,-1072311776,-1066953112)+W(2,-1095160239,1065850492,-1121381976,-1099027008)+W(3,1031151008,1057399482,1045213405,-1095971461)+W(4,1026509768,1043007163,1043168485,-1093896652)+W(5,1012395574,1019701051,-1109946848,1027278540)+W(6,-1123792544,-1127547903,1027169380,-1107011198)+W(7,1037067951,1021690579,-1124089088,-1166810856);WS(-1118215158,-1130722305); +sum1=W(0,1039784439,-1119983743,1027132090,-1101267710)+W(1,-1106141431,-1119840977,-1131926580,-1158357571)+W(2,1045520358,1040649785,-1126797149,1070303194)+W(3,1059129261,1056727436,1040938982,1050582583)+W(4,-1094865274,-1098235299,-1085881139,-1106608186)+W(5,-1088850304,-1093134907,-1098615277,-1104503154)+W(6,966095017,-1166742058,1023429181,-1127173569)+W(7,-1112024885,1030946302,-1160489077,-1106263629);sum2=W(0,-1122933952,1029904221,-1104768174,1044174015)+W(1,-1122786276,1032455763,-1118952582,-1120585334)+W(2,1043676402,-1092335308,1050667883,-1106663265)+W(3,1035773679,1033986578,-1123822916,1030027555)+W(4,-1122578476,-1096734640,-1067932755,1078656606)+W(5,1056344301,-1106732625,1033374173,-1116084330)+W(6,1034421913,-1121365342,-1103315560,1049347404)+W(7,1027752905,-1114333025,1025409455,-1129253837);WS(-1112296443,-1083191171); +sum1=W(0,1030599873,-1102688301,1038739494,-1091052013)+W(1,-1120252367,-1118018759,-1105737735,1036799090)+W(2,1049894985,1052276159,1055519004,1061107959)+W(3,1059731464,1052059899,1050382861,1050879021)+W(4,-1100141489,-1095734081,1044438853,-1078809864)+W(5,-1100785926,-1095185489,-1092887220,-1113977245)+W(6,-1124642344,-1114229790,1039505712,-1108354137)+W(7,1037196526,-1129006466,1034647259,-1123394945);sum2=W(0,-1134366274,1040286055,-1103185345,-1089934078)+W(1,-1104699884,-1135474394,1039368980,984214720)+W(2,1032198029,-1093721101,1064064153,1038410574)+W(3,1053501328,1053898256,-1088730122,1045555557)+W(4,-1102569648,1059013351,-1076328416,1075980540)+W(5,-1081344728,-1093863519,1061819985,-1089334779)+W(6,-1113629492,-1099320981,1062572765,-1079072621)+W(7,1057269325,1039501040,-1089994189,1050815727);WS(1051639487,-1077445112); +sum1=W(0,1023584208,1019039018,1046978951,-1114024277)+W(1,1042440780,1036430651,1019910405,1017051223)+W(2,-1087680633,-1097242582,-1087958558,-1084584703)+W(3,-1089578188,-1090497932,-1100840226,-1089989738)+W(4,1058381481,1049175941,1059595066,1058705186)+W(5,1060807824,1057261083,1047705823,1052092149)+W(6,1019116206,-1110819225,1041321753,-1110784681)+W(7,-1120949436,-1111841304,-1108976675,1037750032);sum2=W(0,-1103483317,-1103949071,1036613850,-1096200772)+W(1,-1094761445,-1090478844,-1091384835,1024429003)+W(2,1043027417,1024633771,1050158855,-1096718424)+W(3,1057240079,1037855330,1036780676,-1103545669)+W(4,1043672886,-1105891820,-1113242263,1053817256)+W(5,1043447632,1053166295,1043680942,1034776200)+W(6,-1126025102,-1101612494,1051748473,-1144187697)+W(7,-1129269697,-1114569970,-1102484885,1044262941);WS(-1102141694,1066754929); +sum1=W(0,1024767465,1028037205,-1148374821,996156698)+W(1,1034886379,1011245536,1017269224,1023537404)+W(2,-1097150806,-1105574095,-1092607882,-1086231302)+W(3,-1085570014,-1090150659,-1093685286,-1100403588)+W(4,-1121670572,1021251426,1053426631,1064662112)+W(5,1060264850,1058905527,1047037217,1048736520)+W(6,1047316983,-1123186307,1027553675,1037457517)+W(7,-1103359865,1031219256,-1108923303,1039125668);sum2=W(0,-1127568330,1031019669,1013355589,-1123247753)+W(1,-1131101666,-1126559289,-1128009624,-1122774763)+W(2,1005444026,-1121000217,-1135062981,-1099801823)+W(3,1044314830,1052295626,-1112001042,1018744598)+W(4,-1099850392,1052911126,1040255711,-1120914990)+W(5,1055431083,-1112663055,1029993103,-1105142519)+W(6,-1069105992,-1075891845,1052106082,1078854269)+W(7,1061745892,-1097592921,1033712114,1037317546);WS(-1092827839,1049601702); +sum1=W(0,-1102748075,1048973336,-1101661842,1035794226)+W(1,1035295380,951002293,1028700102,1019995195)+W(2,-1114726817,-1100496851,1056141590,-1092935501)+W(3,-1090189951,-1127762491,-1107070641,-1116434785)+W(4,1043768535,1037939345,-1092531310,1048278549)+W(5,1059458263,-1107678146,1040739973,-1103464157)+W(6,1001409895,1025584388,1043222609,1028885900)+W(7,-1097823129,1046084402,1018269854,1033486885);sum2=W(0,1047648616,1049954711,-1086499077,1036131868)+W(1,1021844703,-1144052469,1036766656,-1114852932)+W(2,-1099866854,-1087014785,1059941103,1059724034)+W(3,-1104253425,-1116739540,-1123734224,-1119117496)+W(4,1040911688,-1127547935,1006897087,-1147690453)+W(5,-1094365093,1046092804,-1117733622,1045874226)+W(6,-1104812914,1032774583,-1118719608,-1112213150)+W(7,1020986307,1037506252,1020773629,-1120467144);WS(1062974879,-1132215613); +sum1=W(0,-1181157822,1033235448,-1120645311,1032693326)+W(1,1014937094,1012846527,1029466479,1027727527)+W(2,-1096960767,-1103300066,-1098273063,-1084817024)+W(3,-1086871647,-1093312183,-1094276984,-1099477807)+W(4,1047884458,1024586364,1040665968,1065496294)+W(5,1061273423,1057013666,1048826162,1049029078)+W(6,1046591191,1028472621,1027902609,-1105457745)+W(7,-1099580452,-1121668195,-1123904424,1033797162);sum2=W(0,-1120861164,1023555157,-1114715157,1039733942)+W(1,-1111876903,-1121732899,1028106223,-1136150442)+W(2,-1114727130,-1127207629,1049207316,-1100512081)+W(3,1044392032,-1113639142,-1107243417,1035475508)+W(4,1051943787,1021361633,-1100379929,1049204344)+W(5,1029680046,1040523175,-1113800818,1017564481)+W(6,1073213517,1067585393,-1095215585,-1072102567)+W(7,-1085077901,1017790060,-1115100698,-1111101803);WS(1038961915,-1122010239); +sum1=W(0,1004620105,-1113106351,-1112775210,-1125534724)+W(1,-1137271196,-1126589322,1026657556,-1119328748)+W(2,1048595660,1052250558,1058549636,1061573929)+W(3,1057522353,1048822826,1040718305,1048641524)+W(4,-1099376311,-1096833644,-1088891129,-1086812373)+W(5,-1093214133,-1095914356,-1105329661,-1103878453)+W(6,-1116246236,1027857155,1036452944,1040782707)+W(7,1018281129,-1113857108,1010557432,-1106455448);sum2=W(0,-1116580406,1024927837,-1129828931,-1115420496)+W(1,1011185933,-1123989928,-1146345634,-1132229127)+W(2,1027562258,-1162615720,1047581344,-1109513493)+W(3,1038795182,-1118168090,1030671240,1038841827)+W(4,1055923683,-1098456431,-1107918233,-1093462217)+W(5,1043574176,1042713369,-1118222006,1029869485)+W(6,1077914250,1064911462,-1076359256,-1072190840)+W(7,1023726209,-1114062645,-1119388396,-1111766417);WS(1058520191,-1103814144); +sum1=W(0,1017038583,1027734728,1045254802,-1107262661)+W(1,-1105442246,1031430877,-1126950445,1024536063)+W(2,-1136595532,1016280509,-1109207324,1062837304)+W(3,1058887264,1040464732,1030731221,1029953906)+W(4,-1118053743,-1128563239,1044218638,-1096672636)+W(5,-1085861660,-1103880229,-1107144426,-1145128486)+W(6,1027978638,-1097122909,-1104843131,1033499055)+W(7,1025985831,1030848699,-1131329888,-1109411553);sum2=W(0,1034702970,-1125598974,-1114553387,1027536136)+W(1,-1115924578,1035052048,-1132148431,1025333585)+W(2,-1176551015,-1168898884,1041527709,-1101298022)+W(3,1036785061,-1106074654,1030578400,1024211757)+W(4,1007931783,-1090251816,1067159008,1043575777)+W(5,1028484706,-1104273626,-1148595850,-1114791455)+W(6,-1110263367,-1089294892,-1085860022,1061443693)+W(7,-1099982080,1042454777,1027614804,-1123742626);WS(1061983711,-1098811342); +sum1=W(0,1012577103,-1126897281,-1105225996,1024253613)+W(1,1053413654,-1137207095,1042674340,-1109172700)+W(2,1051270689,1046420622,1058683087,1058369439)+W(3,-1097514912,1052214131,-1105013139,1050302029)+W(4,-1108510228,-1106195699,-1088411008,-1089548804)+W(5,-1118840551,-1096732498,-1109015536,-1103000311)+W(6,-1107438075,-1107699151,1036711743,1026749110)+W(7,-1116819519,1024709491,-1140694819,-1154413112);sum2=W(0,1018267361,-1110181012,-1146613180,1038715850)+W(1,1024296823,1036970119,1022003098,-1124702635)+W(2,1036503366,1041828239,1050199247,-1085432172)+W(3,1038941240,-1123003584,1013422114,1021003447)+W(4,-1126101987,-1116783782,1071387060,-1080125372)+W(5,-1093021050,-1114155200,-1149124484,-1143100940)+W(6,-1099489904,-1102883314,1052019906,1047113133)+W(7,1035497971,-1112911441,-1119585859,-1131838862);WS(1061194367,-1092415693); +sum1=W(0,1036390333,-1126263470,1025725222,1043857157)+W(1,1035642972,1044002978,998479342,1045699251)+W(2,1051201914,1053058480,1054554894,1047231542)+W(3,1057662314,1050872286,1045022613,1049392206)+W(4,-1104881972,-1172862130,-1093268199,-1076465248)+W(5,-1087389459,-1093150623,-1111846627,-1095910796)+W(6,-1115149537,1030237668,1021350042,1036659934)+W(7,1039247491,1026362746,1017611295,1018350484);sum2=W(0,-1129487679,1042193002,-1108339354,-1095819059)+W(1,1041127864,-1103499785,1034257999,-1118637794)+W(2,1018376667,-1087595144,1054016721,1063707892)+W(3,1036978867,-1103064253,-1103241982,-1112191100)+W(4,-1097777178,-1098446206,-1106280983,1068295659)+W(5,1052165187,-1110264861,-1135489703,-1107248782)+W(6,-1117386048,-1106566736,-1108034123,-1104582586)+W(7,-1102127104,1036459063,-1104779766,996655259);WS(-1094699455,1066131816); +sum1=W(0,1049793485,1029004921,1050253240,1043166228)+W(1,1029407446,1041612884,1035949114,1012128942)+W(2,-1081848423,-1088299640,-1084057276,-1084821317)+W(3,-1084563631,-1104203619,-1099802604,-1096241030)+W(4,1059460685,1048637514,1060796209,1059873140)+W(5,1055943200,1047596309,1050483936,-1105809528)+W(6,1042128105,-1139594888,1026023615,1020508084)+W(7,-1125172935,1048504406,-1115227886,1051471881);sum2=W(0,1060779432,-1118034101,-1104519356,-1119327164)+W(1,-1101970936,-1106905521,1002331293,-1082144605)+W(2,1051802488,-1097493973,1057101737,1060027297)+W(3,1044004337,1057962293,-1098665363,-1086721729)+W(4,-1086062785,998397725,-1092333837,1066349798)+W(5,979464170,-1133317807,1046794021,1070824403)+W(6,-1114203174,-1112558489,-1099984065,-1091352583)+W(7,-1094257268,-1102635709,-1094504499,-1114333706);WS(-1074268304,1079667699); +sum1=W(0,-1107189325,1027760991,-1136873402,-1113641470)+W(1,1031162561,1033891144,-1126712892,1035917755)+W(2,-1101508903,-1090199334,-1090363950,-1087996124)+W(3,-1083961527,-1096484091,-1098094611,-1093567651)+W(4,1054199089,1054303683,1062422475,1067750847)+W(5,-1113534839,1052689284,1031942551,1045977323)+W(6,1035260131,-1107632246,1005391451,-1101800081)+W(7,1034855959,1046337921,-1150999418,1042992013);sum2=W(0,-1109104193,-1121805095,1045986101,1048674700)+W(1,-1091901802,1048446997,-1113936425,1027039508)+W(2,-1100757902,1045040397,1080470972,-1080397282)+W(3,-1070026310,1054845861,-1109557127,-1113850952)+W(4,1040683096,-1125556022,1049174250,-1095181876)+W(5,-1122013099,-1110936398,1038355211,-1103996340)+W(6,-1125509919,1026278254,-1112163985,1050380898)+W(7,-1131668233,1033243862,-1144282357,1036778147);WS(-1085238047,-1082053459); +sum1=W(0,-1106787663,-1138285833,-1108632776,-1094657608)+W(1,-1101713608,1037328759,-1111697288,-1109379868)+W(2,1039996894,1010512412,1053399812,1045540841)+W(3,1051732998,1044326914,976543556,1057105320)+W(4,1048926451,-1119213276,-1130975030,1010216242)+W(5,1034301867,1025236158,-1128978334,-1109745879)+W(6,-1104330662,-1128637723,-1108017347,-1096910157)+W(7,-1101323868,1015829447,-1111437732,-1108664266);sum2=W(0,-1124623913,1032956443,1027185909,-1101336864)+W(1,-1094263361,1029736763,-1112090109,1039412150)+W(2,1025825838,-1119700813,1032253087,1046009611)+W(3,1060071017,-1108021530,-1111711122,-1092338318)+W(4,1042257288,-1135835500,1053804277,1048892371)+W(5,1036906607,-1101254223,-1115069322,-1114145526)+W(6,1021162350,-1114452863,-1109212782,-1102267892)+W(7,-1105958464,1037505372,996911332,-1125671849);WS(1060867039,-1136390908); +sum1=W(0,-1127355032,1034805910,1035163860,1029669941)+W(1,1042066222,1021674692,1040577786,1021261983)+W(2,-1085412379,-1094311080,-1093352008,-1084691216)+W(3,-1088428116,-1088125293,-1096644095,-1091872390)+W(4,1049179798,1049208039,1060583566,1063283264)+W(5,1058522472,1055147879,1050065089,1041474713)+W(6,1047055468,-1108149971,1036232649,-1103012671)+W(7,1024178471,1026233836,-1126656770,1049799631);sum2=W(0,1035672114,-1098827199,1049155846,1035178389)+W(1,-1107113032,-1144855824,1035201737,-1127184278)+W(2,-1063752230,-1085747691,1077059336,1075347264)+W(3,1056308660,1034654874,-1121418857,1014935340)+W(4,-1093487673,1041803367,1041184099,-1096808218)+W(5,-1129382302,-1119639669,-1122522987,1011408026)+W(6,1013645866,1034418818,-1106855503,1049524211)+W(7,-1122362105,1030856901,1027103888,-1115004359);WS(-1090674303,-1100343233); +sum1=W(0,-1120232797,1040422273,1026412864,-1138867958)+W(1,1033879777,1033565615,1019476032,988102399)+W(2,-1091881416,-1094093465,-1085938046,-1089254334)+W(3,-1089797193,-1085407367,-1095206984,-1105032111)+W(4,1051419109,1052500896,1061270771,1067891162)+W(5,1060067146,1016645247,1041715172,1036835111)+W(6,1036288004,1023553551,-1112170192,-1115349187)+W(7,-1112030904,998486818,1027103050,1040345019);sum2=W(0,1040618154,-1114130867,-1122148687,1044229537)+W(1,-1110193301,-1097134960,1037070268,1037459780)+W(2,-1101425729,1043012943,1049717343,1078734719)+W(3,1058416067,-1066172228,-1087270128,1051160418)+W(4,1012698939,-1135257643,1047429512,1020747990)+W(5,1045573328,-1105653505,-1098650023,1029335953)+W(6,-1121139419,1033653009,1038119907,-1131387750)+W(7,-1162837210,-1124290574,-1142454518,-1119987003);WS(-1083751903,-1076119444); +sum1=W(0,-1115245576,-1106029427,-1102084379,-1113929101)+W(1,-1115339007,1029734646,-1110488366,-1147960477)+W(2,1056842307,1054460828,1062160243,1061549380)+W(3,1051628466,1034628298,1040780998,1027250487)+W(4,-1093345814,-1096614035,-1087844584,-1088621915)+W(5,-1095344475,1039622221,1023285463,1052549785)+W(6,-1108216057,-1118873130,1032187759,-1118044066)+W(7,-1125935063,-1114025640,-1103117229,-1101242061);sum2=W(0,-1142266798,-1105635988,-1108468488,-1104742183)+W(1,1004562934,-1111519795,1009402627,1007186587)+W(2,1041896729,-1133541327,1052249127,1059101684)+W(3,-1116644500,1022626513,1036478091,-1114250343)+W(4,-1109207785,-1119640286,-1132044399,1057719514)+W(5,1049160976,1040987637,-1103527129,-1094402391)+W(6,-1116438034,-1143926222,-1116983273,-1107716245)+W(7,1036001553,-1093640310,-1115139384,-1102449905);WS(1032624635,1033521535); +sum1=W(0,-1131553039,-1117491096,-1112834618,1049918570)+W(1,1045795365,1016822387,1035361729,-1113168565)+W(2,-1098906814,-1100587359,-1081513385,-1078593782)+W(3,-1105649745,-1092053629,-1096260814,-1095243062)+W(4,1051615627,1047570260,1060987922,1043587024)+W(5,1056209202,1059398075,1049440024,1051600524)+W(6,1045470610,1025984961,1036113314,1040182861)+W(7,1012071435,1032631435,1023888652,1034850724);sum2=W(0,-1111826236,-1099208280,1026789677,-1106561040)+W(1,-1093448876,1046407154,-1102666308,1042570396)+W(2,-1092384767,1027875109,1064661507,1062273543)+W(3,-1087164405,-1108191451,1044380270,-1104593420)+W(4,-1095745094,-1100947515,-1112642295,1068550638)+W(5,-1104229197,-1106740917,-1103404028,-1105841536)+W(6,1034661269,1048636172,-1098451609,-1099981129)+W(7,-1118651857,1049739863,-1095995165,1048025970);WS(-1085606847,1061985400); +sum1=W(0,-1108997980,-1117164584,1031768707,-1103105924)+W(1,1041900981,-1110420181,1037113665,1014163116)+W(2,-1089905075,-1114895517,-1095264598,-1077801587)+W(3,-1097956992,-1088999487,-1098379486,-1096151518)+W(4,1057688104,1056544190,1062390314,1055481056)+W(5,1062127874,1051900674,1048102065,1057425872)+W(6,1040581229,-1114811305,-1107526493,-1110202349)+W(7,-1118208771,-1108027100,1024450541,1041210774);sum2=W(0,1025785873,1048912334,-1096464036,1056133856)+W(1,-1104154812,-1121968309,1033410161,1015120151)+W(2,1048760593,-1090084783,-1114768213,1066763200)+W(3,-1086306359,1058187354,-1113492694,-1128581905)+W(4,1035955606,-1119218892,1007739746,1064934573)+W(5,-1089946445,1050702067,1025685973,-1102128709)+W(6,-1126760968,1008603006,-1094704139,-1080670875)+W(7,1031309677,-1125625514,-1109240237,1039335694);WS(-1090966143,-1078936607); +sum1=W(0,-1116393227,-1108278025,1051625062,-1105522375)+W(1,1058727904,-1091195697,1052016408,-1109728971)+W(2,-1086961670,-1108945587,-1086695325,-1081986687)+W(3,-1089148367,-1086453117,-1092689140,-1091172115)+W(4,1058706816,1041859343,1060094467,1059190367)+W(5,1061098519,1055062080,1056115606,1058930855)+W(6,-1116819366,1035952359,1041797992,-1104043025)+W(7,1053094890,-1093101306,1015960496,1034498693);sum2=W(0,1023528661,-1119417071,-1105978590,1009798795)+W(1,1040834561,-1111364082,1041397121,1033368796)+W(2,-1118025227,1050920275,-1112399565,-1098493686)+W(3,1036263434,-1124489419,1048582480,-1089345484)+W(4,1075422545,1065042273,1069638520,1067662601)+W(5,-1093932676,-1079439326,-1078082886,-1070108577)+W(6,-1073269716,-1077701631,-1078616397,-1083676116)+W(7,1044144047,1070390370,1068400636,1077727906);WS(-1079921856,1049308945); +sum1=W(0,1030068962,-1133949626,1050882798,1018623990)+W(1,-1106924392,-1146454049,-1116987117,1040905769)+W(2,-1165865787,-1118082277,1053008345,-1094507016)+W(3,1052481994,1043504665,1047635255,1026870489)+W(4,-1187780005,-1108803021,1038634079,-1106873963)+W(5,-1087778738,-1101591143,-1101174683,-1110197734)+W(6,1025440517,-1111921110,-1120535059,-1104818073)+W(7,1046575523,1041667424,1031519031,1031554658);sum2=W(0,-1116556974,-1095066961,-1100395256,1050308919)+W(1,1040792410,1032406727,1011901446,-1141998384)+W(2,1059176005,1038856572,-1076691076,1055715442)+W(3,1046498927,-1123959066,1028959950,1032868606)+W(4,-1096412953,1050790436,1058179896,-1097771226)+W(5,1039711359,-1106160519,1018212767,1038360912)+W(6,-1114011261,-1173649795,1024138419,1040413046)+W(7,-1106323994,1033840078,-1127468978,-1107910389);WS(1060842367,-1123947436); +sum1=W(0,1024730985,1023159627,-1105241169,1017803651)+W(1,1037913699,1035962309,1028045772,1032728670)+W(2,1048950736,1047784339,1057388094,1060112037)+W(3,1062491953,1057656339,-1114528913,997860858)+W(4,-1097448124,-1098772880,-1087773444,-1085451727)+W(5,-1088044111,-1089872870,-1102522557,-1103124285)+W(6,-1122548355,1026072115,1037590622,1037652837)+W(7,1034810634,1033785172,1008900343,-1114288296);sum2=W(0,1026131421,-1112740722,1046858645,1032928238)+W(1,1042166107,1040344552,-1082879617,-1091819295)+W(2,1001103237,-1121600279,-1108221277,-1097923247)+W(3,1069212508,1057336110,-1095628134,-1107037379)+W(4,-1133854939,1038637096,1037424280,-1103185020)+W(5,-1120290433,1019342369,1039461314,-1122429445)+W(6,-1114822986,-1108393699,1029862733,-1101308237)+W(7,1036213344,-1145606165,-1111520861,1034167562);WS(1038606587,1058047160); +sum1=W(0,1026865207,1042118304,1051307036,1033639368)+W(1,1046742309,-1109598961,1028927539,1015037525)+W(2,-1095018974,-1093024127,-1082724754,-1100730470)+W(3,1036658562,1040951763,-1113143704,-1098528366)+W(4,1044423619,1048945010,1054092644,-1097872036)+W(5,-1091674216,1033100505,1030352835,1047837568)+W(6,-1136300775,-1117800769,1005722288,1044405134)+W(7,1047528601,1044812414,1032954286,1044220906);sum2=W(0,1050657429,-1103301852,1060573163,-1091436731)+W(1,-1104427284,-1097267636,1038196249,-1107511544)+W(2,1045860939,1052242374,-1100974944,1066745360)+W(3,-1079344782,-1113016512,-1119497008,-1113648424)+W(4,-1111592920,1013554208,-1111727364,1055083328)+W(5,-1098647652,1034990326,-1110499846,1042188938)+W(6,-1103122208,-1106328874,1015168980,-1113723980)+W(7,1051192034,1034643320,-1122594772,-1140986496);WS(-1095257599,1052962039); +sum1=W(0,-1106746181,1031300369,1046667354,1037361867)+W(1,1040829967,-1128966365,1034540700,-1115420664)+W(2,-1097695335,-1111219488,-1083536631,-1088861218)+W(3,-1107201338,-1115618056,-1117058422,-1138753100)+W(4,1053309708,1042046133,1060606673,1053570633)+W(5,-1101583222,1033575580,1029127944,1041019129)+W(6,1036635571,1032102291,-1110849586,-1103814096)+W(7,-1130665360,1023220920,1009452933,1041468947);sum2=W(0,-1137205193,-1121249932,-1137006201,-1101149788)+W(1,1034796937,-1115985020,-1140489533,1026538132)+W(2,-1089705070,1025195792,1049206515,1054529493)+W(3,1039074115,1050074620,-1104546681,-1103055048)+W(4,-1116057142,1014073009,1040872535,1044729510)+W(5,1024555690,-1108168105,-1105229574,-1093226929)+W(6,-1106134583,-1131583764,1023734245,1030258377)+W(7,1045578999,1041497164,-1131316168,1036128894);WS(1058062751,-1100017341); +sum1=W(0,-1129599006,1020928695,-1098371705,-1111175932)+W(1,-1108928286,-1108487635,1028685770,-1134533769)+W(2,1055064995,1054737968,1061839865,1057524464)+W(3,1062722401,1039434185,1053936411,1054765971)+W(4,-1094744478,-1108714620,-1089137095,-1081607655)+W(5,-1111400813,-1089739654,1037008853,-1094983833)+W(6,-1110864465,1035506764,-1103907470,-1115102560)+W(7,1038105413,-1103382940,1038153674,-1101904010);sum2=W(0,1046625968,-1114205611,-1097342682,-1079666171)+W(1,1041595755,977545170,-1106070846,-1145403458)+W(2,1034733544,-1100522159,1034693600,1066071967)+W(3,-1087077400,1062799024,-1097179722,1015933409)+W(4,-1147999170,-1093312378,1057288295,1059803421)+W(5,-1088579916,1057064650,-1086854504,1055355590)+W(6,1026537136,-1103988998,1049229753,-1114956972)+W(7,-1104980683,1050850828,997711860,-1115357129);WS(1033636603,-1075190676); +sum1=W(0,1030520392,-1125697208,-1114269946,-1109653337)+W(1,-1102211630,1032435172,-1120127764,996293820)+W(2,1051253486,1043969999,1058583983,1064791929)+W(3,1057642082,1055881859,1033241689,1053053914)+W(4,-1096251285,-1100430004,-1085953223,-1093290764)+W(5,-1088005167,-1098086422,-1102333361,-1119839106)+W(6,-1117233131,-1122877346,1036037681,-1109909101)+W(7,-1123582788,1029223000,-1125435099,-1103406294);sum2=W(0,-1120200303,1024626781,1013431061,-1124733431)+W(1,1027814217,999438554,-1116912567,1007930813)+W(2,-1113787644,1041562727,-1114475538,-1112371618)+W(3,1032748777,-1098117165,1042886038,-1140542509)+W(4,-1109535466,-1106166077,1029531851,1051805575)+W(5,1061661699,-1114245048,1039886302,-1093997696)+W(6,1041916719,1028143351,-1097688999,1068535590)+W(7,1074776935,1029048009,-1076933565,-1072079702);WS(1051996799,1040628126); +sum1=W(0,-1106876926,1042171100,1014013938,1040804174)+W(1,1038633599,1024260165,1032103150,-1111941370)+W(2,-1096999331,-1106536569,-1087433914,-1079279688)+W(3,-1085040172,-1090750082,-1096245875,-1091794355)+W(4,1064227732,1056769919,1057736892,1052514885)+W(5,1059334684,1058371760,1051111478,1050507101)+W(6,1032518006,-1132737450,-1121739327,1035728257)+W(7,-1115112214,-1126170017,-1129820331,1036168684);sum2=W(0,-1097197656,1040517176,-1107105879,1050425804)+W(1,-1108102513,1044838414,1026907274,978890108)+W(2,-1105938617,-1119182790,1048788314,1048225474)+W(3,1050055380,-1097162220,1028263310,1043193320)+W(4,-1063141508,-1072247475,1073986693,1082212097)+W(5,1063649950,-1108483496,1040597170,-1096883524)+W(6,1047663602,-1106333570,1017343300,1014706728)+W(7,1023560998,-1105252179,1016727612,1025416282);WS(-1079662656,1075711984); +sum1=W(0,-1136749190,-1108214827,-1112256994,-1102094902)+W(1,1019461885,-1113236619,-1115387518,1015637672)+W(2,1054381451,1049467004,1060357369,1064079536)+W(3,1058102849,1050217386,1046694646,1053154499)+W(4,-1099895821,-1104318006,-1094055613,-1088977984)+W(5,-1094018397,-1093377643,-1102869707,-1097489705)+W(6,-1111920714,-1124862997,-1099490085,-1093653775)+W(7,1047054555,1026036560,-1122648846,-1117787456);sum2=W(0,1021596406,1027700788,1031902674,1035450862)+W(1,-1146279384,1036068426,-1108044351,1030087008)+W(2,-1120307380,1049653321,-1100871897,1054975194)+W(3,-1106853601,1042197470,1034125536,-1133477273)+W(4,1037868882,1038499992,1074972319,1073269037)+W(5,992333684,1032586692,-1129244749,1010404410)+W(6,-1094559059,-1099826066,-1070411479,-1076192259)+W(7,1024067187,-1107184127,1032061183,-1104237818);WS(-1121360374,-1077155152); +sum1=W(0,-1105583845,1042009047,-1135496901,1057317824)+W(1,1037107234,1028773828,1042777544,-1116736729)+W(2,-1092428892,-1091586093,-1087526962,-1088356100)+W(3,-1084718223,-1086275726,-1096882940,-1086839898)+W(4,1053987635,1057449542,1037542524,1067018703)+W(5,1053143538,1051794540,1049337758,1050512766)+W(6,1036329976,1039912928,-1114441548,1035631092)+W(7,1024846769,1020991498,1032759069,1041911145);sum2=W(0,-1122349048,1027223630,-1123059666,-1097496437)+W(1,-1101147358,1008041239,-1113710228,-1103013196)+W(2,-1108922684,1050237475,-1093984844,1061603028)+W(3,1054912466,-1136134543,1050990810,1037079763)+W(4,-1102817435,1047134367,-1086242189,1069845393)+W(5,-1091188340,-1107987422,-1126348732,-1097181289)+W(6,1024154790,-1105600910,1041276041,-1090292072)+W(7,-1122818012,-1109079234,1047206075,-1109791787);WS(-1087087711,1067831143); +sum1=W(0,1034272753,1043354114,1046815315,1041026663)+W(1,-1116058688,-1131457456,-1115558139,1032034947)+W(2,-1110686621,-1094089577,-1090322161,1019000899)+W(3,1048378971,1054466495,1045446607,1043401342)+W(4,1034360523,1051348739,1056352764,1049291409)+W(5,-1098372646,-1090870248,-1103803571,-1098529593)+W(6,1006467012,-1097882829,-1098171061,-1099191041)+W(7,1036956791,1036945505,-1124941614,1026141794);sum2=W(0,1046033632,-1114282503,1044655964,-1106001859)+W(1,-1104436397,-1101664028,1015764662,1023732858)+W(2,-1147554302,1065651536,1052996561,-1076523823)+W(3,-1095873418,1059971501,1037179306,-1119149512)+W(4,1021728539,1061103542,1047372498,-1081697027)+W(5,-1094800655,1058036758,-1113369666,1033040332)+W(6,1034466187,-1117467216,1040544990,-1105745303)+W(7,-1119054372,-1110996319,-1120190386,1028498617);WS(1040537598,-1164677141); +sum1=W(0,1044447583,987031402,-1121775302,1042738997)+W(1,1038434732,1049696256,1024826006,1044766000)+W(2,1058921623,1052904912,1059494147,1059765434)+W(3,1053249925,1045203303,1049549231,1032179929)+W(4,-1079854668,-1089009751,-1082135643,-1085199868)+W(5,-1087718171,-1094593271,-1098502833,-1111725730)+W(6,1051360885,1009017491,1049103971,1042102879)+W(7,1037325507,1033340813,1040792940,-1103499809);sum2=W(0,-1105450770,-1099930216,-1087670985,-1097641768)+W(1,-1093727900,1034849198,-1089823109,1026936119)+W(2,-1076904032,-1110661913,1054929191,1067640588)+W(3,1043325457,1041628489,1024934811,1071055811)+W(4,1034745372,-1104228342,1055270313,1058849806)+W(5,1055379319,1047258529,-1091022953,-1093861556)+W(6,1064235564,-1133206564,-1159337186,-1095527236)+W(7,-1097371942,-1123329564,1053074558,-1079977593);WS(-1072228928,1076959210); +sum1=W(0,1049440860,-1100954468,1040518102,1055014377)+W(1,-1102413547,1056933930,-1100924366,1025160513)+W(2,-1102211417,-1090494943,-1089397123,-1085929645)+W(3,-1092416799,-1103710088,-1099959722,-1097219837)+W(4,1052420434,1049042513,1057628335,1059399711)+W(5,1055649007,1056457065,1043274798,1043339918)+W(6,1046258910,-1094165323,-1113742940,-1115570152)+W(7,-1095616949,1054320058,-1096288332,-1113497047);sum2=W(0,1037249746,-1106259401,-1118512137,1033553146)+W(1,-1118437421,1049532353,-1112295163,-1112769969)+W(2,-1091193116,1057292562,1045032769,-1101074553)+W(3,1047290760,-1085599381,1045403080,1036239865)+W(4,1058952598,-1089499743,990544085,1052938455)+W(5,-1096914685,1060306657,-1095081062,1036770528)+W(6,-1099278743,1035766214,-1120311473,-1107284433)+W(7,1032001159,-1105441959,1037527897,-1117837555);WS(-1095248895,-1088416713); +sum1=W(0,991086878,1041397006,-1100414321,-1106522737)+W(1,1032194452,1040515607,-1113785099,-1119710941)+W(2,-1112623265,1023033498,-1095527100,-1085500137)+W(3,-1103431285,-1093888960,1025813699,-1112974208)+W(4,1049658160,-1129854724,1056723856,1061179113)+W(5,1050067968,1055178889,1027165141,1044420741)+W(6,1025280780,1018002536,-1101036339,-1098081679)+W(7,-1121954805,1040437430,-1107604207,-1122583614);sum2=W(0,-1115281709,1038308115,-1086190321,-1079410563)+W(1,1055352031,-1106071111,1042421121,999244165)+W(2,1049351198,-1105447726,1061131477,1070791012)+W(3,-1080774986,1050939464,-1096576742,1021655353)+W(4,-1101546004,1044927538,-1105825160,-1124003323)+W(5,1054621998,-1100497740,1042910101,-1123561791)+W(6,-1132663474,1036918381,-1104633062,1035199903)+W(7,-1119052371,1038597174,-1126972585,-1141223925);WS(1057802399,-1081431823); +sum1=W(0,-1122831751,-1131892376,1041203877,1034931072)+W(1,1020249162,1023514439,-1183605377,-1102408215)+W(2,-1093480916,-1097592621,-1087992005,-1086955360)+W(3,-1094219074,-1099624791,-1104094712,-1103351679)+W(4,1050038833,1050095280,1058335651,1062569267)+W(5,1052617634,1053253320,1037479577,1047799764)+W(6,1031929377,1003466633,-1150646211,-1108251076)+W(7,-1123920403,-1110979235,1022403704,1031403703);sum2=W(0,-1104748298,1035677532,-1097271446,-1071563129)+W(1,-1073203825,-1105574565,1074066983,1076846054)+W(2,1032567526,1015597088,1042180726,-1131466492)+W(3,-1088097679,1049167232,-1104411749,1054919113)+W(4,1030425414,-1106402955,1036072793,1026492053)+W(5,1021201077,1046304011,-1108010622,1040423027)+W(6,1028805714,1010146816,-1122721452,-1139412188)+W(7,-1121571686,1013464552,-1115684312,-1159010626);WS(1057159391,-1098185256); +sum1=W(0,-1115997840,-1139848194,-1110900998,1040272534)+W(1,-1124007614,1022311680,-1122049771,1025640163)+W(2,1062337777,1059107990,1058844902,1060188982)+W(3,1050305613,1055455830,1052112283,1058488623)+W(4,-1099145229,-1096884471,-1083284577,-1081840204)+W(5,-1086268415,-1088086212,-1093503993,-1095187909)+W(6,-1108105457,1026934458,-1128707950,1050661700)+W(7,1025671020,1018441343,1032949738,-1115150240);sum2=W(0,1056249112,-1087901783,1050240307,-1096100666)+W(1,1050011361,1046757851,-1111613200,1031802636)+W(2,-1063663228,-1065703489,1050922399,1074103439)+W(3,1078895155,1075028289,1011769164,1041242105)+W(4,-1090194820,1049313091,1059446328,-1091782161)+W(5,1051412884,999915799,-1097222567,1040180956)+W(6,-1098679170,1049727089,-1118968312,1043947681)+W(7,-1103451878,1046896549,1036070334,-1120669738);WS(-1076050352,1072169512); +sum1=W(0,-1112010473,-1110549812,1041474168,-1102358403)+W(1,1035256808,-1103941101,-1126807163,-1127729580)+W(2,-1127017300,-1096217239,-1101316183,-1098236010)+W(3,-1097462672,1015309803,-1109990262,-1124828306)+W(4,1032805651,1055039585,-1107675851,1058693100)+W(5,1050718238,1047069339,1040782175,1033573870)+W(6,-1127012698,1017026201,1027743346,-1103052317)+W(7,1025923518,-1108585145,1029935559,1030091394);sum2=W(0,-1115222730,-1103808603,-1133607278,1035011293)+W(1,1045426354,1005150868,1038138903,1014354189)+W(2,1013406324,1044516259,1056099238,-1093760521)+W(3,-1097063741,1046105407,-1106358807,1034790704)+W(4,1048651312,-1091636530,-1082257366,1065398243)+W(5,1052543946,-1105190986,-1143243436,-1124610775)+W(6,-1105744683,1036643390,1056116581,-1087652578)+W(7,-1106429625,1031045850,-1129675875,1033997397);WS(1065781680,1039008007); +sum1=W(0,1041247860,-1132228043,-1116017645,1029031978)+W(1,-1114552992,1018467582,-1119698444,1039500994)+W(2,1052873269,1052030887,1057769989,1065817909)+W(3,1059292430,1052683781,1045381867,1042767258)+W(4,-1087848896,-1090939837,-1086321043,-1090130600)+W(5,-1093123180,-1089813139,-1093950448,-1088918334)+W(6,-1122380132,1043969975,-1167945460,1043124941)+W(7,1037414446,1037105136,1016187596,-1139723011);sum2=W(0,1038177586,1024852101,1031995320,1016571646)+W(1,1033741319,-1108656521,1035134998,-1120710323)+W(2,-1105284792,-1131141686,-1123455081,999573799)+W(3,-1107419527,1052574782,-1099142208,-1103717942)+W(4,-1114385091,-1105200928,1057384109,1073904332)+W(5,1075963065,-1130292726,-1072886122,-1070457563)+W(6,1023745983,1044997454,-1102654886,1045931554)+W(7,-1113399825,1041285787,-1101763500,1044467987);WS(-1090516543,-1087531312); +sum1=W(0,-1105337757,-1135375282,-1113059195,-1111479074)+W(1,1044282546,1036163039,-1123738614,-1110047807)+W(2,1040358473,1025750638,1034124454,-1082649657)+W(3,-1098312091,-1114570479,-1112260786,1044483760)+W(4,1026287071,-1109155234,-1111070925,-1113637434)+W(5,1056333811,1044131649,1049914271,1039433994)+W(6,-1112133319,1043065477,1049735832,1048811350)+W(7,-1104740686,-1111303053,-1128712224,-1136462731);sum2=W(0,-1122757257,1009904581,-1113467627,-1099518373)+W(1,1032421699,-1095677862,1020800146,-1112743661)+W(2,1027164873,-1112829049,1020364514,1064179702)+W(3,-1092934445,1039050377,-1106885375,1022655162)+W(4,1002742314,-1115430893,-1098221748,1059311413)+W(5,-1139891301,1041708988,-1124766450,1032689603)+W(6,-1111953049,-1116391321,1025748661,-1098741962)+W(7,1036551469,-1119491053,1025848261,-1122814953);WS(1059528063,1057564569); +sum1=W(0,993737087,1023855952,1051519336,-1100822612)+W(1,1027584566,-1109486813,-1127107174,1035631854)+W(2,-1096201122,-1112481934,-1089271861,-1101379550)+W(3,-1129312776,-1101173547,1031993577,-1097162722)+W(4,1052073475,1044928820,1057871347,-1090210244)+W(5,1027452795,1051680014,1038521522,1050823828)+W(6,1036364765,-1119101474,1026047377,-1095066725)+W(7,1043887545,1038809676,-1152581582,1037595092);sum2=W(0,-1106514375,1034094594,-1112949179,1009317700)+W(1,-1126355148,1021633582,1010987268,-1106252693)+W(2,-1115270098,1029678117,-1095879627,1052560633)+W(3,-1128108776,1034084538,1040297892,1049223604)+W(4,1025588625,-1103891997,1029083209,1062070608)+W(5,-1100067512,1035054672,-1117785257,990783407)+W(6,-1109616345,1044342701,-1107320484,-1103446924)+W(7,-1131810302,-1098743078,-1123491293,-1102218346);WS(1061977215,-1122204685); +sum1=W(0,-1124031333,-1109554099,-1105250724,1036027519)+W(1,959521497,1055353398,1038275624,-1136942561)+W(2,1053794732,1053305789,1058003360,1059361796)+W(3,1055117810,1051669497,1037705519,1047158647)+W(4,-1090279300,-1096176108,-1093816822,-1081723655)+W(5,-1090510080,-1097892492,-1101480172,-1098784634)+W(6,1017895407,1027213295,1024566052,1033714163)+W(7,-1125004641,1006220452,-1112881733,-1145512357);sum2=W(0,-1113155109,1032430477,-1105712018,1048044904)+W(1,-1081128362,-1070110178,-1092435520,-1092804751)+W(2,1028856727,1021325630,1050891972,1070862297)+W(3,1074403261,1035516985,-1108990845,-1122256510)+W(4,993552399,-1128331832,1042508384,1042132916)+W(5,1044319918,-1115800491,1033559089,-1109033129)+W(6,1036996819,-1139715524,-1111526035,1040898786)+W(7,1025048067,1038841221,-1119663830,1007165668);WS(-1096328959,1070879408); +sum1=W(0,1047483149,-1131726569,1017405984,1016192218)+W(1,-1134185032,-1130210629,1039283496,1022798351)+W(2,1056909741,1050717891,1049879450,1064784543)+W(3,1054175424,1055866677,1052923070,1050331269)+W(4,-1084253114,-1097194674,-1084428714,-1088019878)+W(5,-1087922381,-1096076442,-1098682228,-1089646420)+W(6,1043610432,-1120381614,1029856307,1046790989)+W(7,1044095416,-1106891777,1045347898,-1103492015);sum2=W(0,-1096731787,1041094096,1030029833,-1134738767)+W(1,-1112066554,1049526473,-1103571503,1038503381)+W(2,-1092572599,-1083918511,-1081752188,1050600846)+W(3,1060518769,1056806956,1052566197,1040255570)+W(4,-1072213302,-1081783724,-1088492050,-1098909280)+W(5,1054813136,1066457366,1061557517,1074348460)+W(6,1074300082,1061218424,1062246408,1055931246)+W(7,1030722387,-1080408758,-1082314750,-1074863778);WS(-1093955647,1022010191); +sum1=W(0,1027472455,-1118029508,1017520774,-1100976252)+W(1,1048038797,1019653215,1015004427,1006149335)+W(2,1051129150,1040858863,1058284788,1064764899)+W(3,-1094249656,1054989120,-1137681219,1047833420)+W(4,-1126583382,-1110637352,-1083829535,-1092969620)+W(5,-1093269900,-1098669306,-1101321193,-1092663640)+W(6,-1110971745,-1129027011,1043546956,1032062845)+W(7,1049944248,-1114080636,1039113958,-1120661351);sum2=W(0,-1125700855,1010923567,-1097524591,-1086770251)+W(1,-1119687254,-1136610695,1034141799,-1146172877)+W(2,-1109340305,-1099241242,-1097784845,1061340682)+W(3,-1091236020,1059369820,-1103210716,1042204527)+W(4,1041739108,-1121076246,-1122648580,1059475190)+W(5,-1097965354,1048517727,1020884025,-1117941982)+W(6,-1138307987,1010348245,1043843262,-1104554020)+W(7,1042867821,-1105357691,1021404807,1026766467);WS(1057685119,1067243116); +sum1=W(0,-1129459555,1016923756,1004671913,-1095493364)+W(1,-1098633785,-1112175056,1046138501,-1131471418)+W(2,-1098308652,-1100618635,-1090418529,-1088191051)+W(3,-1089905135,-1101363479,-1106099897,-1097291652)+W(4,1053516928,1049587364,1057639529,1065512192)+W(5,1058720438,1052631981,1043712557,1052947846)+W(6,1029422892,-1111775882,-1114348966,-1112549294)+W(7,-1103551521,-1111153757,995391206,1020473821);sum2=W(0,-1131225411,-1130956898,-1103681442,-1077027280)+W(1,-1076028808,1031803188,-1101294062,949706042)+W(2,-1140292462,1023877693,1042914798,1069127322)+W(3,1071847872,-1103125793,1043076855,-1132087796)+W(4,1018110051,-1137158572,-1224504659,1043315619)+W(5,-1120948958,1043270022,-1113817590,1015417250)+W(6,1018006973,-1128428036,1020723155,-1147115303)+W(7,1020554514,-1133954299,990350747,1025989218);WS(-1097928959,-1082976358); +sum1=W(0,1027664520,-1123678010,-1106569905,1052451146)+W(1,-1103556709,1038567635,-1108799690,1040222651)+W(2,1057835343,1050550727,1057764410,1062299789)+W(3,1049034640,1057826487,1041175724,1060823717)+W(4,-1089326063,-1096462854,-1083721351,-1087127986)+W(5,-1097735566,-1094118206,-1100805265,-1089053734)+W(6,-1108038941,1032858337,1021803093,1042469806)+W(7,-1104920125,1031016631,-1129264698,-1107162784);sum2=W(0,1059738223,1048150071,1052511773,-1080186607)+W(1,-1078381471,-1072132845,-1071450961,-1071397334)+W(2,-1087082495,-1095900368,-1108343021,1063110279)+W(3,1074904245,1071639576,1076364217,1077341373)+W(4,-1092378156,1046247330,1033545850,-1090059649)+W(5,-1107095292,1039712953,-1113577164,1049211915)+W(6,1034470847,1025055065,1045395587,-1094453880)+W(7,1053230483,-1103894182,1032308634,-1120241798);WS(-1093482751,1040242403); +sum1=W(0,-1101135214,-1123956286,-1107524598,-1138012647)+W(1,1034129455,1042720691,-1130324184,998898338)+W(2,1051279307,1045008905,1049489177,-1132973569)+W(3,-1096848358,-1098383795,-1104810279,-1118268600)+W(4,-1160860306,-1106067054,-1101021318,-1113266773)+W(5,1049504725,1059206814,1049756222,1052043149)+W(6,-1112732162,-1135242283,1029341500,-1121978915)+W(7,-1098727290,-1102892456,-1104163113,-1099073308);sum2=W(0,1050603120,-1101078445,1048531671,-1105220793)+W(1,-1091713187,1034851673,-1122031169,1020293663)+W(2,1055811875,-1122671355,1038805789,1066111209)+W(3,1026095418,-1130092003,-1137910742,-1094690648)+W(4,-1086548128,-1087609936,-1088336312,1071017234)+W(5,-1115602704,-1089969509,-1121274059,1053616941)+W(6,1034695967,-1108269543,-1089139562,-1104320030)+W(7,-1100901763,1049804877,-1103744367,1054827086);WS(-1112146683,-1077736475); +sum1=W(0,-1128590341,-1130792414,-1147973299,-1117834531)+W(1,1007065251,1033724609,1024083798,-1122914526)+W(2,-1099064529,-1090490649,-1086623314,-1101063739)+W(3,-1084449173,-1094725676,-1097837640,-1097461352)+W(4,1049253908,1028859267,1040872136,1068918685)+W(5,1059458719,1057886934,1044653558,1048946351)+W(6,1039097715,1017948777,1025770233,-1115616742)+W(7,-1104116690,-1132647657,998082042,1030833130);sum2=W(0,1038545045,-1104316542,-1098913527,1054073276)+W(1,990615436,-1111960943,-1127436605,-1131799749)+W(2,1044965772,-1073797636,-1069601753,1079919017)+W(3,1065620582,-1103381017,1039512539,-1105195767)+W(4,1038508364,-1092377302,1050236814,1044931722)+W(5,1034922622,1033398315,-1113162193,1039327537)+W(6,1032278560,-1115941315,-1109127211,1042591612)+W(7,997021068,1042220416,-1138197651,-1121388557);WS(-1090505151,-1074550453); +sum1=W(0,-1112838599,1028498739,1023419227,-1117182312)+W(1,1018948122,-1126145258,1024711581,-1125422420)+W(2,-1106878250,-1103427629,-1088602192,-1088941275)+W(3,-1087514842,-1096920942,-1096615233,-1095073209)+W(4,1057615003,1042960070,1063645564,1053033883)+W(5,1058641540,1043052986,1050742275,1053972531)+W(6,-1131143051,1023192930,-1096958907,1048242260)+W(7,-1098164287,1045189988,-1105551137,1026824959);sum2=W(0,1051549752,1081443218,1072492444,1048388769)+W(1,1035162847,-1139079606,-1121149576,-1123800689)+W(2,1021553919,-1111116920,-1073777225,-1067599847)+W(3,-1096587672,1029232562,-1115288719,1042218632)+W(4,-1106404197,1044837835,-1113676512,-1089379201)+W(5,-1109546151,1030543674,-1122606689,-1125599605)+W(6,1031994963,-1113046369,1032624041,1025956540)+W(7,1027498280,-1132168419,1034044071,-1115044631);WS(1051119487,1041244378); +sum1=W(0,-1124974044,1028120435,1048876359,1037118035)+W(1,-1131477080,-1118427428,-1120234265,-1125985859)+W(2,-1137238551,-1113671305,1036964902,1061504071)+W(3,1047204942,1050660570,1030267847,1049717597)+W(4,-1116593698,-1103177170,-1099611151,-1104164974)+W(5,-1081804989,-1114906180,-1098831475,-1103929310)+W(6,-1121323393,1033078132,-1156053771,-1129960608)+W(7,1048068278,1011539382,1035846233,-1115091743);sum2=W(0,1018090488,-1104952272,-1105226064,-1128161694)+W(1,-1134153828,1024328280,-1118410723,-1117225997)+W(2,1027537220,1048078363,1055192952,-1102612387)+W(3,-1102761937,-1101688104,1035228556,1016223417)+W(4,1019973834,-1095697091,-1101823824,1074095781)+W(5,-1074759173,1063478353,-1092594125,1041310640)+W(6,-1117503915,1045164128,-1106818318,-1087428157)+W(7,1061969021,-1092430375,1050476000,-1110796930);WS(1062303263,1031082743); +sum1=W(0,-1113216195,-1099215391,1052151297,1026092610)+W(1,1051942565,-1098039588,-1101893697,1008063218)+W(2,1050954912,1012178225,1065129152,1047492794)+W(3,1063700475,1049517720,1028060738,1054989200)+W(4,-1095964628,-1095180416,-1088785601,-1089641431)+W(5,-1089295544,-1091476104,-1102410709,-1096414030)+W(6,-1121789260,1027015379,1041954507,-1107401421)+W(7,1049634587,-1112964196,1035520455,-1114231491);sum2=W(0,1033145987,-1111827051,-1103256184,-1063595607)+W(1,-1101985731,-1141099147,-1136421288,1030655939)+W(2,-1175661064,-1152013649,1050523165,1084357731)+W(3,1048919805,1025442742,-1145624409,-1133270551)+W(4,1021827842,-1104895942,1034611383,-1094652398)+W(5,1029250458,-1102082303,1021034188,-1121842648)+W(6,-1165845202,-1187919119,-1125020091,1042933311)+W(7,-1108910008,1040766920,-1126731425,1017996705);WS(1057958943,-1104691893); +sum1=W(0,-1111014615,-1128240917,-1146251723,-1095236657)+W(1,1047913107,-1103203951,1033356080,1023941889)+W(2,-1105424217,1046008396,-1090082375,1054329938)+W(3,1003615948,1013130820,1044802714,-1101796865)+W(4,1044401084,-1100901945,1057785284,1040293502)+W(5,-1099597392,1051440085,-1102604718,1036253756)+W(6,-1118336456,1038452148,-1119525902,-1093887914)+W(7,1045607070,-1107674167,-1113361665,1037874639);sum2=W(0,1010987018,-1105807463,-1102396693,1054217500)+W(1,-1123211893,1029628166,-1106898625,1028744914)+W(2,1041119120,-1111572952,-1117220749,-1087890507)+W(3,1070205457,-1101117061,-1113015450,-1121743361)+W(4,-1110188142,1045029856,1057260834,-1087358521)+W(5,-1081682663,1051101181,1042553654,-1135525482)+W(6,-1127404253,1029477872,1019931869,1056265374)+W(7,-1091128546,-1124058781,1025549544,992401866);WS(1063883327,-1171419961); +sum1=W(0,-1131801844,1021098616,1022023532,-1121742227)+W(1,-1090925859,1024490200,-1102607801,-1123544461)+W(2,1049833398,-1123871229,1009731296,1044941350)+W(3,1060653970,1043051923,1048967870,1050859794)+W(4,-1102183011,-1097479398,1056730033,1041013425)+W(5,-1095529687,-1097251239,-1104750961,-1097963532)+W(6,-1101850371,1031224740,-1123343997,-1127214008)+W(7,-1107029405,1042080318,-1107657120,1009310536);sum2=W(0,-1106082604,1041248381,-1132935321,-1106587714)+W(1,-1104172881,-1118244665,-1115368488,-1139264801)+W(2,1047581965,-1108094251,-1111186257,1050591326)+W(3,1039028256,1025922877,-1111866155,-1104769894)+W(4,-1097195715,-1105642610,1042983438,1048334662)+W(5,1046273630,-1128737701,1044426238,-1122157893)+W(6,-1113941985,-1131232309,1050509566,-1103031697)+W(7,-1127691207,-1115007353,-1112751356,1031938310);WS(1064944927,1037595256); +sum1=W(0,-1116864018,1023806679,1017115436,1009660557)+W(1,1028149000,-1109610248,-1148661421,-1102752831)+W(2,-1089228760,-1095304482,-1087165700,-1086682215)+W(3,-1088874517,-1099761351,-1116139780,-1131587330)+W(4,1063040538,1057549004,1060715233,1064233001)+W(5,1056983460,1052917089,1041500021,1045020525)+W(6,-1107296590,-1106875789,-1103245163,-1106392275)+W(7,-1132085516,-1107160974,-1129006079,-1152394658);sum2=W(0,1045832950,-1110716731,1025147898,-1098226948)+W(1,-1099749141,-1098250414,1042544569,-1089530617)+W(2,-1084008560,1049995423,-1089165996,1066542501)+W(3,1049362032,1055260506,-1086997229,1067285885)+W(4,-1084775302,-1093173621,1054478967,1068786857)+W(5,1047038722,-1126019654,-1127724076,-1088213452)+W(6,1058474163,-1102301410,-1128684365,1031931484)+W(7,-1091779956,-1105326436,1053449115,-1090548395);WS(-1082101344,-1089856493); +sum1=W(0,1050831902,-1112019073,1030303546,-1129997454)+W(1,-1110327174,-1117704076,-1112251093,-1131596868)+W(2,-1105691402,1030717682,1055521064,1064695661)+W(3,1061962758,1058754169,1047731210,1056158989)+W(4,-1101015969,-1098775681,-1097748442,-1085520515)+W(5,-1086646154,-1089610799,-1093958751,-1094349907)+W(6,1029275441,-1120813832,-1139280937,965412887)+W(7,1041358014,-1122362798,1028938947,1016935004);sum2=W(0,-1065128139,-1076824095,1067439244,1079260085)+W(1,1056740148,-1103928218,-1135208116,1039164015)+W(2,-1101130808,1050826865,1046966330,1049869634)+W(3,1051236860,-1114183173,1033256035,-1104627926)+W(4,1034565987,-1109355365,-1109830496,-1112614302)+W(5,-1123646153,1051726295,1035002893,-1109091637)+W(6,-1119435550,1023890205,1012867020,1015248786)+W(7,-1122661198,-1136992532,-1119472799,-1136910724);WS(-1090711679,1035967541); +sum1=W(0,-1111795270,1015715144,-1118064815,-1124564760)+W(1,1033380937,1041725555,1039158191,1036708611)+W(2,-1104454427,1029360119,-1084526809,-1083278737)+W(3,-1083950349,-1091233609,-1102432923,-1097260861)+W(4,1050513973,1050454265,1063535365,1060834888)+W(5,1050327592,1054941014,1040417584,1042099839)+W(6,1030482278,-1138269301,-1132452908,1007072853)+W(7,1028355007,1029566323,-1140656289,1035976950);sum2=W(0,1030795338,-1104698754,-1086482027,-1086674278)+W(1,1048689193,-1101252049,-1127107620,-1097010897)+W(2,-1099705557,-1088930785,-1087114188,1063363970)+W(3,1066258058,1055138353,-1113111809,1050900036)+W(4,-1100315818,-1129318753,-1088371087,1059258270)+W(5,1052412907,1035784301,-1107499570,1046424313)+W(6,-1124401732,1047822852,1041847465,1007827043)+W(7,-1114489829,1039056173,1036879119,-1112035485);WS(-1098505599,-1075865372); +sum1=W(0,-1119631078,1024188415,-1125460739,-1113150415)+W(1,-1098117352,1028789822,-1115205937,-1134520549)+W(2,-1131715643,1032178901,1056750314,1055366257)+W(3,1063530169,1038512989,1036256496,1042179631)+W(4,-1121509433,-1128987132,-1131145214,-1096447994)+W(5,-1086227497,-1117796833,1016180195,1032402616)+W(6,-1113178620,1024883696,-1114020928,-1102601578)+W(7,-1111953177,-1101470933,-1141768534,-1114797153);sum2=W(0,-1098762498,-1112826554,-1099883844,-1090598021)+W(1,1060690639,-1101866176,1051055486,-1111565268)+W(2,1039073687,1047439072,1024348972,1068429254)+W(3,-1078855206,1052294530,-1095975199,1034134076)+W(4,1035541163,1032611741,1050751610,1066295533)+W(5,-1081223881,-1097770507,-1126362074,-1121819739)+W(6,1030962008,981436096,1048715774,-1089341195)+W(7,-1094541311,1041458546,1044471119,1024624177);WS(1057165023,-1106509195); +sum1=W(0,-1110663097,1023353031,1009641338,-1116674588)+W(1,-1121179137,-1127866586,1019708412,-1105922998)+W(2,-1090373040,-1094296089,-1087820187,-1090764772)+W(3,-1101809276,-1095695571,-1097119704,-1088811352)+W(4,1057389257,1051297995,1064196683,1064337073)+W(5,1058239248,1053143796,1049182394,1042633923)+W(6,1036322023,-1110472134,-1103525103,-1108191858)+W(7,-1105116828,-1130262917,-1117889432,1047174317);sum2=W(0,-1112942365,1048482322,-1100072975,-1097118067)+W(1,991349250,-1108096389,1053525633,1000921969)+W(2,-1106822390,-1115190843,1034045428,1068163863)+W(3,1063618710,-1107942623,-1090492700,-1076676559)+W(4,-1102090209,1042851055,-1103979279,1056641862)+W(5,-1105663689,1049912171,-1130278628,-1111476815)+W(6,1043730009,1035412483,-1105576965,1028572696)+W(7,-1113934073,-1105853831,1039916278,-1106999228);WS(-1086493375,-1079336981); +sum1=W(0,977772865,-1123924042,-1109993624,-1107908519)+W(1,1036636329,1038934102,1034769240,-1099048778)+W(2,-1102983835,-1108602044,1041059645,-1094902379)+W(3,-1083260999,-1084987377,-1102484540,-1108629750)+W(4,1026410857,-1098146918,-1106936850,1061697492)+W(5,1061962303,1057432285,1051050960,1050989872)+W(6,1015269519,1049374456,1036994068,1041174790)+W(7,-1103125248,-1125738921,-1130650164,1040252563);sum2=W(0,-1104970914,1018133697,1040842491,-1093587851)+W(1,-1093237537,-1102375178,-1099804326,1054809337)+W(2,1042634099,-1097448347,1055662701,1074010545)+W(3,-1089724369,-1099392752,1049771835,-1092159031)+W(4,1052960430,-1108255972,1062139198,1064732329)+W(5,-1083390778,1025575413,-1104347883,-1096888027)+W(6,-1112577728,-1096543501,-1090800341,-1093194079)+W(7,1015865539,991452982,-1126119433,1028159711);WS(-1088469887,1068090411); +sum1=W(0,-1113244581,-1123900274,1049496346,-1110903326)+W(1,-1119953152,1031904934,1034227191,1025939062)+W(2,1001301201,1023861926,-1082959002,1050701400)+W(3,1060902689,1043052181,1043817559,1038313117)+W(4,-1115331947,1035790701,1057295251,1048296635)+W(5,-1081663133,-1113327662,-1110964279,1034951606)+W(6,-1124374314,-1105829923,-1096521435,-1119292644)+W(7,1048590454,1027826066,-1106468266,-1117293966);sum2=W(0,1046922708,1033420508,-1112865289,-1096930035)+W(1,-1101802092,1017341032,1036773342,-1107450994)+W(2,-1106472578,-1114867820,-1087802072,1058113813)+W(3,1050476308,-1103417477,-1105807138,1033379085)+W(4,1033443280,-1109208012,1020845388,1048730658)+W(5,1059721445,-1107242470,-1136542442,-1104249476)+W(6,-1111979165,1050643686,-1101832932,-1129026525)+W(7,-1104558996,-1135034393,1037376476,1023773731);WS(1052578175,-1092643724); +sum1=W(0,-1106584961,1030893452,1033955624,1037358070)+W(1,1036710537,-1128189432,-1118327615,-1129060558)+W(2,-1102735475,-1100779014,-1082492039,-1086815439)+W(3,-1088009424,-1095075429,-1106908643,-1102841939)+W(4,1053304083,1049737317,1060101900,1065824329)+W(5,1041943502,1057719155,1051335460,1036237087)+W(6,993436516,1037510015,-1101687426,-1103135573)+W(7,1029815263,1040440469,-1106074638,1027836379);sum2=W(0,-1115440098,1029771501,1018065220,999202537)+W(1,1036811205,-1111720654,-1125064265,1019498859)+W(2,1015710974,1033337736,-1094728975,1039453548)+W(3,1050012979,1032576025,-1103861773,1040788513)+W(4,1041402597,-1114856806,1037520917,1064530169)+W(5,-1094040689,1073761042,1063409170,-1090935047)+W(6,-1130229431,1034787000,-1082769104,-1074584982)+W(7,-1090370130,1032162938,-1105633547,1034133532);WS(-1104397694,1058392920); +sum1=W(0,1012876448,-1126111401,-1142522206,-1115125816)+W(1,-1103048369,999529969,1016404519,-1117545451)+W(2,1051523414,1050625047,1043902243,1063861817)+W(3,1056801600,1053396405,1042081404,1054067798)+W(4,-1094911217,-1106828476,-1089440467,-1093833780)+W(5,-1087921625,-1107310585,-1104958721,-1097217844)+W(6,1023486907,1033392977,-1119682235,1019625524)+W(7,-1096529922,1015514383,1039287934,-1113687714);sum2=W(0,-1130009672,1027809153,-1106384796,1051460883)+W(1,-1104521112,1033821004,-1112259960,1028508475)+W(2,1013515790,-1106180134,1042067106,-1094561503)+W(3,1032257325,-1124940473,-1168427353,-1120291522)+W(4,1013756514,1023886448,1052609397,1078005003)+W(5,1072194837,-1094906083,1046140857,-1140922271)+W(6,-1153587550,1024050371,-1094102229,-1070026280)+W(7,-1075632186,1053282219,-1098407638,1033718481);WS(1063327007,-1121248448); +sum1=W(0,1017612078,1043030576,1039059525,-1115811128)+W(1,-1095615210,-1099887459,-1140707177,-1120397682)+W(2,-1113236667,-1096763312,-1091103118,1053297652)+W(3,1063340055,1054079124,1041492110,-1126620524)+W(4,1042967269,1049218219,1058517677,1033504868)+W(5,-1082785422,-1088587000,-1101731443,1029718569)+W(6,1035231217,-1115130868,-1107367965,1009543939)+W(7,1047061435,1042859328,-1120288724,-1104957341);sum2=W(0,1037909727,-1098298527,-1126569464,-1106955476)+W(1,-1096969233,-1118592354,1042882430,1037216424)+W(2,-1119813454,1048025725,1041835288,1067026849)+W(3,-1085288934,1042571631,-1117602980,-1116313332)+W(4,-1099212072,1045330821,-1106229244,1067954224)+W(5,-1095495837,-1108169766,-1164085849,-1100305071)+W(6,1032936033,-1097673782,-1109675885,-1092590328)+W(7,1004812688,-1096486003,1034064234,1045459772);WS(-1114652667,1051933605); +sum1=W(0,1026700110,1037508767,-1128033780,1034155035)+W(1,-1102462575,1024543544,-1147042251,1032374633)+W(2,-1102428549,-1105027032,-1106431647,1043250735)+W(3,1059213449,1038435705,1038748492,1016229610)+W(4,1043087092,1048715843,1062796090,-1089603768)+W(5,-1090890112,-1106007014,-1119096106,-1104514210)+W(6,-1109604752,-1113263092,-1098797270,1023780992)+W(7,-1112475685,-1121524254,986589794,1007891224);sum2=W(0,-1129141996,-1106880495,1031191254,-1102244397)+W(1,-1101040753,1046080919,-1112883155,1031234782)+W(2,1043866561,-1096921120,-1123077406,1064276171)+W(3,1061828176,-1095750750,1042185570,-1128566730)+W(4,1029019378,-1092013580,-1086673510,1064706574)+W(5,-1113110329,-1091369762,1042119352,-1105256367)+W(6,1050935854,-1111274547,-1096956427,-1115781076)+W(7,-1106057540,1029696990,-1113619581,1012473722);WS(1059465279,-1101420399); +sum1=W(0,1033088680,-1124176798,1014063089,1035053989)+W(1,1045820204,1038292302,-1115007182,-1131477704)+W(2,1043444330,1000916382,1057398923,1034190184)+W(3,-1087528660,1036787650,1027988010,1042732770)+W(4,-1101682761,-1126261266,-1089602004,1039770557)+W(5,1057859064,-1106381771,-1104773247,-1102530758)+W(6,-1124073107,-1118729178,1032573720,-1114558729)+W(7,-1096323421,1041172764,1024683157,1029511616);sum2=W(0,-1093261173,-1100338012,1016590929,-1160318928)+W(1,-1111261089,1032510827,1037987285,-1106728517)+W(2,-1081648717,-1096055698,1049309077,1060463741)+W(3,-1123677731,1042247124,1035681279,1035240533)+W(4,-1107343332,1016623505,1058913944,1061699617)+W(5,-1095509190,988275856,-1111758125,979544481)+W(6,1020947921,-1121572837,1035038069,-1121635630)+W(7,-1116667427,-1130213341,1033159595,-1112486763);WS(1060076127,1072958059); +sum1=W(0,-1103118654,1043365506,-1115420333,1031523031)+W(1,1033412302,1032254402,1031863013,-1127560355)+W(2,-1090537599,-1097065432,-1086314390,-1088162978)+W(3,-1089193875,-1091959462,-1111327644,-1086013855)+W(4,1060753617,1046496158,1060760746,1055888777)+W(5,1052645932,1054239287,1044639698,1056703661)+W(6,-1129584897,1025963976,-1106610556,1040410096)+W(7,-1138875303,1032279415,1032182482,1044337291);sum2=W(0,1034238418,1026722605,-1123083006,1044566349)+W(1,-1114043742,1029836970,-1124457715,-1112207598)+W(2,-1122429687,-1113650971,-1101416602,-1095747837)+W(3,1044375513,1032414162,-1132025334,-1112893824)+W(4,1038471498,1047703041,1050567163,1073798913)+W(5,1074668356,1076147895,1076524889,1071535287)+W(6,-1105287037,-1106809975,-1099784158,-1077245954)+W(7,-1072322090,-1070521946,-1071353549,-1076180558);WS(-1114470395,-1114976351); +sum1=W(0,1017446070,1040990896,-1129681934,-1120446036)+W(1,-1097641691,-1110115727,-1110184487,1033457695)+W(2,991904560,1041627584,1047992216,1061349282)+W(3,1061559014,1055187519,1045114861,1047040436)+W(4,1034584479,-1107221597,-1115356259,-1083497834)+W(5,-1089507216,-1098995485,-1109668803,-1107186297)+W(6,-1110976571,-1099251857,-1111571481,1039733326)+W(7,1036247843,-1114440077,-1115117640,-1120899067);sum2=W(0,-1093678598,1002676269,1055748356,1044340647)+W(1,-1118111722,-1120084888,1001595675,-1123642691)+W(2,-1084434022,1057422860,1066493380,-1079318791)+W(3,-1116089022,1044705221,-1112694927,1031220790)+W(4,1064533419,1067683118,-1078621547,-1079939901)+W(5,1054002901,1039926847,-1112070298,1023903081)+W(6,1042743345,-1108978134,-1117769694,1015093293)+W(7,1049699290,986467602,-1107171922,1037662763);WS(1048785023,1039045299); +sum1=W(0,-1104130562,1043168659,-1117502116,1029857553)+W(1,1034838603,1027207566,1024393315,-1130533431)+W(2,-1090140327,-1100442863,-1085428843,-1093347651)+W(3,-1089406196,-1093521697,-1120775857,-1086838999)+W(4,1061197562,1040570004,1062309944,1050495728)+W(5,1050259320,1054560318,1039464338,1056208688)+W(6,-1133671882,1032880081,-1102819715,1038995485)+W(7,-1127149063,1026681976,1035433414,1041402190);sum2=W(0,-1118465298,1011712973,-1128433260,1029767219)+W(1,1021354231,982009542,1014788797,1033540398)+W(2,-1142302474,1025023956,1041730218,-1097771962)+W(3,-1094677866,-1122047812,1028525757,1020814500)+W(4,-1114395216,-1104707163,-1095905892,-1080533844)+W(5,-1075595300,-1072373863,-1072719492,-1078361330)+W(6,1037219807,1039062755,1046574176,1069124140)+W(7,1073795377,1075522683,1074436097,1068741752);WS(1040594174,1002085105); +sum1=W(0,1041861603,-1097746587,1032164980,1031577622)+W(1,-1102982955,1044101411,1034678964,1026039088)+W(2,-1113198522,1055071640,-1088672026,1050744420)+W(3,1057599999,-1103363988,1036351259,1034848362)+W(4,-1137236930,-1100468781,1047493466,-1105375081)+W(5,-1087672398,1050064611,-1102178050,1033863059)+W(6,1041085614,-1121524679,-1109849488,1048884604)+W(7,-1113508732,-1098107838,1043931332,-1106488144);sum2=W(0,-1099743490,1035577370,-1115293072,-1102421679)+W(1,1038726510,1032210717,-1107407193,-1120037205)+W(2,1011906269,1026663055,1057096352,979639118)+W(3,1044440375,1032214892,1028754425,-1123040177)+W(4,1037961444,-1152297667,-1095995741,1050233559)+W(5,1022991474,-1139108605,-1115369483,-1104470915)+W(6,-1108436276,991169347,1045881501,-1097952901)+W(7,-1122343653,1026937641,-1105994898,1022469878);WS(1066613200,-1123971367); +sum1=W(0,1021072883,-1125712504,1041158633,-1106077125)+W(1,1036847484,1032267227,1016782186,1031886911)+W(2,-1096708150,-1090955664,-1159875842,-1079911082)+W(3,-1093258685,-1103560179,-1089925031,-1106725252)+W(4,1051074184,1051398158,1058934814,1061682240)+W(5,1055629981,1054180539,1052861897,1047227273)+W(6,1026036124,-1108624754,1040756057,-1090753503)+W(7,-1114271443,1025501945,-1105228376,1043536294);sum2=W(0,-1120579723,-1104595791,1060943463,-1081375340)+W(1,1048074442,1049316438,-1088959333,1054216959)+W(2,-1102098813,1059079365,-1078775742,1070420847)+W(3,-1106373275,-1084015554,1065759760,-1087995034)+W(4,-1103583809,1035649855,1055196914,1036446407)+W(5,1050043459,1050724789,-1088425301,1052608338)+W(6,1039910130,-1110832147,-1115424415,-1092581761)+W(7,-1101688097,-1115969635,1051846236,-1103333947);WS(1015488492,-1082266482); +sum1=W(0,-1115294884,1041881447,-1116482020,1028536641)+W(1,1044897017,-1108243791,1033207234,1015505847)+W(2,-1096364772,1036768790,-1083421327,-1079950554)+W(3,-1088856963,-1096513911,-1104622888,-1096156044)+W(4,1054950795,1051075280,1062057653,1057564011)+W(5,1054170231,1056273768,1056919206,1054606378)+W(6,-1109722877,1018280484,-1105734603,-1124656723)+W(7,-1129161159,-1113027740,-1132093050,1025701004);sum2=W(0,-1103335141,-1087173612,1045744538,-1106751239)+W(1,-1089877767,1054342226,1047940388,-1120076732)+W(2,-1123809016,-1080484881,1068142929,1065979347)+W(3,1048007586,-1086806497,-1098712592,-1082944418)+W(4,1056172663,1047550056,1051886373,1064817240)+W(5,1065470183,-1098340366,-1102735881,-1088981287)+W(6,-1093357581,-1112078382,-1102262951,-1097769156)+W(7,-1095892093,1033891425,-1105000175,1059622670);WS(-1089551423,-1072840444); +sum1=W(0,1041019406,1022173115,-1113297010,1015463395)+W(1,-1103473726,1040814976,1007312016,1029778436)+W(2,1055991358,1057526040,1036785718,1059475300)+W(3,1056836657,1050051043,1050846086,1053584058)+W(4,-1086576149,-1100702364,-1093552675,-1089572736)+W(5,-1091007140,-1090411145,-1098618125,-1097362556)+W(6,1027645528,-1141651861,1016689751,1031793146)+W(7,-1125097480,1041821422,1015074267,-1104623366);sum2=W(0,1069423067,1072187327,1072064387,1072314518)+W(1,1066704589,1063804587,1053139391,1042659879)+W(2,-1076703167,-1073855626,-1079134619,-1077864031)+W(3,-1081021850,-1081933355,-1094622730,-1099654949)+W(4,1041694716,-1115348910,-1107764634,-1089838794)+W(5,1036250076,1028352388,-1114321992,1035224325)+W(6,1032293264,1008297781,-1120515458,1037018177)+W(7,-1121141704,1025803257,-1123317222,1027779018);WS(1053893247,-1106302313); +sum1=W(0,1031892188,-1110506435,-1127073177,1047997302)+W(1,1033243951,-1107646187,-1112186286,-1112631434)+W(2,1044357278,1051962248,1061666784,1064449402)+W(3,1041901099,1053582704,1037482077,1050110011)+W(4,-1093335703,-1098499127,-1085429924,-1082436051)+W(5,-1118050391,-1104422127,-1118004236,-1103845867)+W(6,-1124627014,-1121076939,1038775118,1042378233)+W(7,-1100759903,-1107823800,-1134911574,-1111029158);sum2=W(0,1045534781,-1136883904,1027794169,-1091599460)+W(1,-1105954111,-1110353364,1026306116,-1105327762)+W(2,-1106914963,-1105365809,-1087950271,1049402813)+W(3,1059435817,1056244223,-1106437513,1049633694)+W(4,-1093884354,1058094665,-1076257974,1070891205)+W(5,1057695328,-1096007662,1042940020,1019026622)+W(6,1048929407,-1099297773,1057853479,-1101014716)+W(7,-1088483015,-1116753268,-1107558514,-1111740866);WS(1043803134,1031905225); +sum1=W(0,-1113675573,-1137620096,1045527725,1047471777)+W(1,1025442024,-1101766076,1041363873,-1104559247)+W(2,1045344728,1015450714,1036603287,1057861093)+W(3,1007995990,1048683192,-1103914745,1053784172)+W(4,-1093561052,1039772705,-1087612823,-1131204708)+W(5,-1109713128,-1098589181,-1142310312,-1096789826)+W(6,-1125193272,-1142985628,1043570724,1032608022)+W(7,-1125123818,1017746514,-1137687994,-1120823545);sum2=W(0,-1102611800,1042572795,-1143715563,1047906835)+W(1,1034463821,-1097650393,1044772028,-1105069125)+W(2,1052608919,-1112317124,1036000712,1058925768)+W(3,-1089628524,-1097284017,-1090965565,1053414419)+W(4,-1092971881,1050084573,-1099050864,1062269077)+W(5,-1100033854,-1155008883,1043620595,-1099181286)+W(6,1033368250,-1099740129,1046340985,-1106615878)+W(7,-1143169701,1034459058,-1102441858,-1145018737);WS(1065606800,1041895077); +sum1=W(0,1041785011,-1113293285,1031552121,-1114204019)+W(1,1014586031,1032452466,-1103346054,1025447425)+W(2,1041397665,1050236482,1063682744,1055253222)+W(3,1057927896,1054837340,1043307490,1058487624)+W(4,-1108226929,-1089967688,-1092426598,-1085544687)+W(5,-1092878524,-1094102329,-1097746379,-1098262983)+W(6,-1113822832,-1105474774,1045393909,-1106251932)+W(7,1018782386,-1135035573,-1114747425,-1119448485);sum2=W(0,1038489223,1032193624,-1137158564,1048862753)+W(1,-1107218869,-1112577633,1034028859,-1110240510)+W(2,-1094743304,-1106563024,1029053577,-1103121169)+W(3,1018988618,1015522148,-1107822714,1017646246)+W(4,-1079775068,-1075431018,-1075905408,1061439417)+W(5,1061842524,1055667456,1032002642,1047594841)+W(6,1069957645,1074314813,1067854461,-1090496129)+W(7,-1083145579,-1093776696,1038458963,-1100108785);WS(1050857279,1035401177); +sum1=W(0,1029370009,-1121232094,-1118971861,-1116554354)+W(1,-1102118870,1035949272,-1118591397,-1155732684)+W(2,1049972466,1045749679,1054737744,1064433520)+W(3,1057059356,1055161550,1035470985,1050840570)+W(4,-1100844155,-1097541146,-1089471141,-1088203652)+W(5,-1089223685,-1095333099,-1098430605,-1105548665)+W(6,-1114359850,-1119608387,1032044074,1039513726)+W(7,1028806533,1039358524,-1114373271,-1113669781);sum2=W(0,1034282103,-1111920318,1023538768,-1133376386)+W(1,-1119100907,1014776166,-1117007635,-1121555310)+W(2,1040723224,-1118965841,-1128437695,1038672881)+W(3,993338648,1050613235,-1108740075,1040276790)+W(4,1028955705,1031483971,1043259383,-1148076972)+W(5,-1084940093,1050550535,-1098463376,1054296012)+W(6,-1104697256,-1123254751,1034554870,-1078609243)+W(7,-1075024478,-1100774866,1069274341,1072481706);WS(1059068159,-1095269543); +sum1=W(0,1022243158,-1126585055,-1113503115,1034732162)+W(1,1029695369,1045709362,1005846771,1049870212)+W(2,1058751902,1052633434,1061437964,1062365313)+W(3,1054753811,1047783152,1043895001,-1119990530)+W(4,-1083015108,-1095802212,-1083734386,-1087136899)+W(5,-1089074173,-1093733821,-1096742887,-1106170901)+W(6,1040310153,1009201364,1040208083,-1116554445)+W(7,1044292534,-1141695574,1042140272,-1106848091);sum2=W(0,-1110453349,-1118716929,-1111084235,1027079271)+W(1,1058163522,1060433363,1058751114,-1077532089)+W(2,1048158098,-1117235638,1037169053,1044450691)+W(3,-1086959067,-1096141012,-1102281652,1061563184)+W(4,1064329884,-1122504669,1037379653,-1106426334)+W(5,-1081956377,-1081432626,-1086790317,1073667932)+W(6,-1096499673,1023790996,1035642078,-1103100998)+W(7,1059064502,-1109003581,1048822766,-1089552462);WS(-1079238176,-1098575359); +sum1=W(0,-1122061272,1012614613,1049213476,-1091368434)+W(1,1050034455,-1115399887,-1105000541,1040609063)+W(2,1040856756,-1098659523,1050219649,1046432350)+W(3,-1092787824,1045840143,-1102913028,-1104981396)+W(4,-1106993315,1049053518,-1088887964,1061247706)+W(5,-1113029435,-1096901418,1045569657,-1106428832)+W(6,-1113276757,-1110111537,1048270483,-1098550683)+W(7,1053252708,-1120030007,-1144293604,1037272948);sum2=W(0,1035271628,1033447544,-1113618952,-1104023060)+W(1,1022009109,-1104458884,1044684178,-1104406640)+W(2,-1096995906,1032410306,1053850685,1054515359)+W(3,-1114408860,1030897990,-1115683354,-1106540716)+W(4,-1097624644,1048740225,-1109777102,1058355960)+W(5,-1139294461,-1116975083,-1099524388,1036671037)+W(6,1051183735,-1095652467,1037584786,-1116173683)+W(7,-1096371453,1030595307,-1117706649,-1108415342);WS(1064155455,1041078114); +sum1=W(0,-1114884791,1038026665,1040569148,-1123095214)+W(1,-1113346810,-1098688777,-1106297864,1033022404)+W(2,-1133388468,-1103926126,-1088265213,-1088521037)+W(3,-1094483240,1052099081,1038941559,1027852876)+W(4,1031759625,1051074474,1049866386,1060913876)+W(5,1044072016,1034732568,-1138713347,1019301565)+W(6,-1116707016,-1135572861,-1145284192,-1110455500)+W(7,-1116167073,1029730485,1017022612,1028095637);sum2=W(0,1027468398,-1111732215,-1149402831,-1136133524)+W(1,1058132410,-1084703700,-1103172541,1011948492)+W(2,-1120484835,-1115316427,1042551085,-1101059653)+W(3,1067179636,-1093846517,1015696434,-1119207903)+W(4,1033713911,-1113615213,1015721118,1005178376)+W(5,-1112798365,1036573120,1035924289,-1106241198)+W(6,1037828351,-1102210431,1027887653,-1105049969)+W(7,1033627060,-1112780439,1025169534,1034168377);WS(1056869759,-1097268032); +sum1=W(0,1018133293,-1105532941,1027243330,-1097428310)+W(1,-1099204213,-1133851766,-1138393927,-1118550618)+W(2,1036411431,1007771751,-1116024394,1032024955)+W(3,-1130187397,1034973653,-1114469768,-1118964077)+W(4,1039633317,1034605623,1050783724,1010531964)+W(5,1045069064,1044277428,1046520720,1036629184)+W(6,-1111689725,-1107937040,-1105991139,-1109581452)+W(7,-1103861656,1044990678,-1106353867,-1155661924);sum2=W(0,1031819015,-1113612713,1040659447,-1113225510)+W(1,1023788280,-1115035325,1009487418,1023947578)+W(2,1040620760,1045122152,-1122637452,-1080510307)+W(3,-1103769905,1050277803,1041168723,-1112728330)+W(4,-1130428603,-1113774176,-1093905874,-1073670430)+W(5,1040925011,1074164392,1056579340,1044922942)+W(6,-1130628701,-1118722775,1015363301,-1129641903)+W(7,1045479736,997650792,1043373785,-1122436477);WS(1064095487,1025785067); +sum1=W(0,1026371284,-1097495743,1050378694,1008396404)+W(1,1042871873,-1103138663,-1136206974,1034556564)+W(2,-1106851535,1042476562,-1104849584,-1085976658)+W(3,-1097042470,-1109264236,1035073279,-1094929447)+W(4,-1128892272,1049973404,-1115675316,1058008769)+W(5,-1098054097,1052615848,1037088776,1045135411)+W(6,1040514533,-1103190740,1040022019,1040395090)+W(7,1050097558,-1102548473,-1157051795,1023679636);sum2=W(0,-1124722923,-1114618025,1043439029,1036363299)+W(1,-1096133271,1049502378,-1106999272,1013819494)+W(2,1033420628,-1100145939,-1115804833,1057589449)+W(3,1053618149,-1091358477,1030436134,-1119548384)+W(4,-1105442746,1047309531,-1084852425,-1089136554)+W(5,1028964970,1056312267,-1100909906,1043379377)+W(6,1029168594,1048079041,-1101613108,1042227257)+W(7,1045151454,1041752672,1036382707,-1113267324);WS(1060109055,1023402244); +sum1=W(0,1039025762,-1109278395,-1125210976,-1107337262)+W(1,-1119314274,1038278743,-1120902815,1024999351)+W(2,1051909299,1054481389,1061074499,1069080830)+W(3,991275263,1049054227,1043342663,1051802331)+W(4,-1098089231,-1093104548,-1087624466,-1092709234)+W(5,-1085745760,-1093068092,-1102438460,-1098889074)+W(6,-1107880995,1018380380,-1167447218,-1119879878)+W(7,1030906608,1028271716,-1122586985,-1107737008);sum2=W(0,995982518,1033194341,1038373562,1040171687)+W(1,-1108098969,1027047733,-1147696971,1033796110)+W(2,1035578813,-1121421677,1046888388,-1103362299)+W(3,1050255581,-1096418856,1042040695,-1116244525)+W(4,-1118279893,-1114972659,1069469835,1078927590)+W(5,-1065023683,-1082214759,1045909115,-1112457727)+W(6,-1115504751,-1108849613,1041670894,1050450381)+W(7,-1097423961,-1114805949,964966831,1025540676);WS(-1092049407,-1078216845); +sum1=W(0,1019093687,1030002432,-1100550858,1055647027)+W(1,-1103872766,1041444210,-1115845919,1042339236)+W(2,1057591089,1050969332,1056027116,1063070242)+W(3,1039049940,1057957242,1034942714,1059965491)+W(4,-1089127853,-1096074010,-1082843219,-1088645600)+W(5,-1097545633,-1095349663,-1103665506,-1089209262)+W(6,-1109784091,1043174565,-1126191805,1049441628)+W(7,-1097650089,1024042875,-1123963793,-1105758607);sum2=W(0,-1086426610,-1096143108,-1089951657,1062855195)+W(1,1068897447,1074016711,1075026151,1074160921)+W(2,1062347208,1055082976,1045157118,1048769854)+W(3,-1073459143,-1078468086,-1071781830,-1072043968)+W(4,1053593730,-1101252044,-1111940928,1037201995)+W(5,-1091098547,-1119407664,1031118734,-1095931446)+W(6,-1108806990,-1138780047,-1099705126,1058343455)+W(7,-1094950430,1046274438,-1128975824,1035271906);WS(-1092377983,1032564911); +sum1=W(0,1026968586,1001025293,-1101464865,-1099757657)+W(1,-1099131534,1021990836,-1124857771,1016095931)+W(2,1051240140,-1135919542,1047585891,1046337282)+W(3,1042168181,1042765483,1039475666,1031087233)+W(4,-1140824311,-1114206145,1035412731,-1093593858)+W(5,1042300945,-1105010841,-1129901419,-1150842169)+W(6,-1108814006,1031981930,-1105914151,-1111723206)+W(7,-1114245051,1047084274,-1110153104,1021006644);sum2=W(0,-1152594313,-1114711758,-1122222477,-1119994373)+W(1,-1117872135,-1136114154,-1118889611,-1120239593)+W(2,-1103837493,-1102219265,1021928584,1043085394)+W(3,-1098150014,-1114380427,-1103586212,999997765)+W(4,-1119502913,1049238470,1051353268,1069806319)+W(5,1040245198,-1084770114,-1097500544,1032457879)+W(6,1035550709,-1111809635,1038283603,-1113383091)+W(7,1038911980,-1106271331,-1109409577,-1130668925);WS(1066805616,-1146277627); +sum1=W(0,-1135230785,-1149155717,1034010150,1042337650)+W(1,-1127867356,1036367663,1011804270,998521116)+W(2,-1097679853,-1106566573,-1092037473,-1085421897)+W(3,-1091217395,-1094061036,-1108406741,-1096997053)+W(4,1046488473,1047676826,1047117051,1062693860)+W(5,1049537116,1056189429,1017502967,1049188263)+W(6,1036204713,-1098488427,-1103697017,1057957971)+W(7,-1114566390,1034870184,-1103604141,1029261884);sum2=W(0,-1122819855,1029215207,-1109976389,1044451524)+W(1,-1130065951,1027965847,-1119702735,1036873692)+W(2,1035645255,-1111163705,1026839491,-1095838714)+W(3,-1147512571,-1156411358,-1110332882,-1114357123)+W(4,-1107161682,1019166485,-1129473215,1082201538)+W(5,1052773623,1033233466,1034307583,1001850219)+W(6,1042480496,-1107159841,-1115971786,-1067229991)+W(7,-1091650896,-1142132409,-1107215185,1025815163);WS(1040205182,1040987841); +sum1=W(0,1032709552,1028035406,-1152624047,1047238622)+W(1,-1110798127,-1160283945,-1129145589,1035307633)+W(2,1050828331,1054299632,1000765841,1064828620)+W(3,1059217829,1057730984,1050797759,1040620053)+W(4,-1098789018,-1102534446,-1087146945,-1084918512)+W(5,-1080798168,-1094152707,-1154982570,-1104995442)+W(6,-1130845956,-1131566290,1024089890,1044521480)+W(7,1041701723,-1105870556,-1121779940,-1110323595);sum2=W(0,-1104834685,-1098615503,-1090508283,-1080862372)+W(1,1048874616,1063492499,1035824034,1062512173)+W(2,1039834326,1050496819,1045914856,1070974917)+W(3,-1085801376,-1081343708,1033985362,-1089072248)+W(4,1040649104,1034170750,-1118657109,-1102559609)+W(5,1041220807,1047362948,-1099586035,-1130222490)+W(6,-1113573633,-1119108596,-1128160390,-1095002000)+W(7,1053594264,1022825140,1041895669,-1115149866);WS(-1087487423,1060332710); +sum1=W(0,-1105878689,1042437466,1040585322,-1121111477)+W(1,-1112195269,-1112892785,-1122925576,1012646976)+W(2,-1095746139,-1089004262,-1081828961,-1099866351)+W(3,-1115422148,1039314504,-1117471766,-1108492170)+W(4,1053913286,1055197099,1059867107,1061690846)+W(5,-1104536871,-1102951638,-1107184778,-1130420108)+W(6,1037671952,-1117440135,-1114610404,1028605502)+W(7,1040822242,1041433743,1048192776,1029799624);sum2=W(0,1017331955,-1104677463,-1117673238,-1094338757)+W(1,-1119646366,-1104710153,-1107625181,1022869095)+W(2,-1097747777,1040900608,-1081336501,1073518733)+W(3,-1103573743,-1106204508,1041186571,-1097636016)+W(4,-1097037835,1016355419,-1089023490,1068423959)+W(5,1048344480,1057220074,1033091565,1053959289)+W(6,-1162485367,-1104406873,-1117660642,-1096388411)+W(7,-1093216188,1028492960,-1092192530,1049060345);WS(-1096756863,1051174382); +sum1=W(0,1025372546,-1106905723,-1114360751,1025624474)+W(1,1037998160,1032794399,1034992970,-1114244794)+W(2,-1115668125,1039995714,1043101563,-1089490746)+W(3,-1092891318,-1107085565,-1114405501,-1168885266)+W(4,1000611497,-1105014230,-1117013085,1058174613)+W(5,1045000731,1035643438,-1121180749,-1120880459)+W(6,1034391118,1041916975,1027806076,-1111998130)+W(7,1008039732,1030397185,1018926829,1029203969);sum2=W(0,-1089960886,-1092452707,1049541326,1032119458)+W(1,1032929374,-1110883627,-1123073435,1026522309)+W(2,-1095856011,-1106157919,1074170001,-1085150802)+W(3,1046048366,-1112079347,1027735021,-1111935169)+W(4,1007316785,1041476280,1050706137,-1083810164)+W(5,1043182557,-1129593193,-1214669080,1009058861)+W(6,1036775569,-1107942220,1021239050,-1132331444)+W(7,1036225521,-1113579728,1009639193,1022066674);WS(1063524863,1010978751); +sum1=W(0,1033376264,1035248130,1029138555,1040606570)+W(1,-1146340206,-1122169062,-1113033206,-1115451138)+W(2,-1090913225,-1094935586,-1084407830,-1085174115)+W(3,-1080254739,-1094320024,1033710501,955403507)+W(4,1054337940,1045510498,1057961148,1062831778)+W(5,1060252175,1058700983,1045946247,1033261261)+W(6,1034437913,1040021853,-1141033844,1032741433)+W(7,-1127614262,-1136275261,1007782611,1030604567);sum2=W(0,-1096400044,1043917783,-1123678571,-1090244436)+W(1,1046901313,1048870815,1033884063,1053211427)+W(2,1053621644,1009306318,1051339656,1062093709)+W(3,-1080576226,-1106342004,-1098524562,-1124418811)+W(4,1017015195,1005897821,-1141989437,1065539532)+W(5,-1083332175,-1097183812,-1097464341,-1092155120)+W(6,1037111777,-1106811629,1047789047,-1093438727)+W(7,1049955112,1043219374,1050393105,1044056917);WS(-1085369887,-1080302329); +sum1=W(0,1021216124,-1121762938,-1103047566,-1094342263)+W(1,-1105630871,-1107174593,1025950537,-1146340105)+W(2,-1112260523,-1119192737,1050211017,1058411732)+W(3,-1139271463,1042276856,-1113852108,-1119668597)+W(4,1035888345,1049037307,1061443675,1044828010)+W(5,-1119204121,-1100915542,-1174284878,-1119790119)+W(6,-1110274640,-1111476420,-1097892613,-1097171068)+W(7,-1112160677,1026261917,-1110403297,-1132483222);sum2=W(0,-1115512925,-1146353705,1036066439,-1134998124)+W(1,-1093678923,-1122018103,-1110317749,1002801625)+W(2,1035074177,1040461813,1042528734,1058355837)+W(3,-1081621864,-1089980594,1049357806,-1101025299)+W(4,-1191992884,1043381354,1059049535,1058956516)+W(5,-1095612272,1050844919,-1100731037,1036998024)+W(6,-1115656893,-1137020948,1021899784,-1112812041)+W(7,1012903452,-1123282157,-1122890057,1023124620);WS(-1106521214,-1077666555); +sum1=W(0,1003321829,-1120901013,-1105222370,-1107011833)+W(1,1029823211,1000924822,-1127794128,1027793952)+W(2,1052142545,1052094618,1060439250,1059969903)+W(3,-1095361591,1039904896,1000548911,1046166153)+W(4,-1102912320,-1105733097,-1085669204,-1113880763)+W(5,1052882623,-1107186882,-1118745688,-1096551831)+W(6,-1108686032,-1118608535,1045702647,-1106161276)+W(7,-1103122454,-1106172071,-1113781993,-1132637458);sum2=W(0,1034079401,-1123608512,999851902,-1128074608)+W(1,-1102099502,-1109589984,-1127758712,1032460032)+W(2,1025264110,-1119278092,1031056700,1059405503)+W(3,-1123208440,-1081290516,1015173988,-1121242732)+W(4,-1123371956,-1104246380,1051208451,1063218900)+W(5,-1110007228,-1131612640,-1124651080,1025045004)+W(6,-1116991392,-1156408861,-1098806852,1038716729)+W(7,-1136590423,1034885175,1009682031,-1115963068);WS(1061862175,-1081928168); +sum1=W(0,-1105584175,1024897880,1038516044,1040792761)+W(1,1041867802,-1146323132,1033649803,-1113939311)+W(2,-1105871745,-1093982770,-1092069365,-1083616743)+W(3,-1089303929,-1089274268,-1106858177,-1096909360)+W(4,1043886056,1052657028,1055074797,1065026281)+W(5,1056987882,1054263413,1043742846,1049053899)+W(6,1027658214,992865878,-1121064957,-1106374835)+W(7,1015027694,-1132520748,-1137844354,1017619030);sum2=W(0,1078367032,1056220347,-1078889751,-1073546091)+W(1,-1104234997,-1129365336,-1132392998,-1105729449)+W(2,1027322757,1044756153,-1096547764,-1101560565)+W(3,1042443775,1048890957,-1104280017,1028418751)+W(4,1023449836,-1148770222,1043960988,-1126862726)+W(5,1029550531,-1133306383,-1130422948,1042854212)+W(6,-1115583846,993742973,-1130380138,-1147412718)+W(7,-1115461788,1019814478,-1143007558,-1123464959);WS(1052938943,-1103606318); +sum1=W(0,-1114719934,-1110318513,1051495307,-1100729633)+W(1,1058926789,-1090569589,1050591187,-1120060704)+W(2,-1087051802,-1108424920,-1085940948,-1082198177)+W(3,-1090825863,-1088355266,-1096343413,-1090847836)+W(4,1058073278,1044445625,1060893495,1058839039)+W(5,1060585177,1053564817,1054456219,1059253187)+W(6,-1114447856,1040769086,1037779432,-1103818980)+W(7,1053070735,-1091337376,-1131842819,1026807692);sum2=W(0,1015621136,1032703681,1048700747,-1098355550)+W(1,1047054427,-1097901072,-1126056922,-1165737020)+W(2,1033006755,-1098289077,-1098808895,1046984196)+W(3,-1083721832,1061110777,-1109410901,1047097145)+W(4,-1072583370,-1084108607,-1081224226,-1081041246)+W(5,1069053051,1046858869,1068664236,1076043754)+W(6,1074691924,1067219112,1064576163,1066863963)+W(7,-1084686190,-1086075738,-1079374171,-1071293986);WS(-1083248351,1041375270); +sum1=W(0,998616699,-1142901727,1043282847,-1128981712)+W(1,1049050406,-1110272759,1045114289,-1170526381)+W(2,-1087439008,-1092067298,-1097778587,-1084179155)+W(3,-1090979219,-1086455104,-1095775369,-1087021556)+W(4,1054645196,1052452449,1050602866,1058025241)+W(5,1061357806,1053431193,1052134295,1053157267)+W(6,1045294540,-1128264947,1042620067,-1146688137)+W(7,-1127282486,-1125997182,981342481,1046767364);sum2=W(0,-1076239116,-1079299620,-1079042334,-1083365485)+W(1,1049726715,1066758659,1069675355,1075688460)+W(2,1068235144,1068687973,1068481951,1066921525)+W(3,-1106704213,-1080829299,-1077473679,-1073149491)+W(4,1054062613,1019509447,1057377046,-1100834259)+W(5,-1095788298,-1107253929,-1112126912,-1090199615)+W(6,-1114529265,-1116897962,1041823371,1032806429)+W(7,-1104989857,-1107915189,1021289065,1034867372);WS(-1089965567,1041739713); +sum1=W(0,1014059625,-1109541748,-1120181702,-1113826001)+W(1,-1099389050,-1107441048,-1110918155,-1129336123)+W(2,1050606464,1046384755,1052952467,1062759283)+W(3,1061539071,1056969105,1043585729,1054439728)+W(4,-1097348868,-1098095776,-1098227712,-1097909490)+W(5,-1089710746,-1097990985,-1112431723,-1101291373)+W(6,1016608410,-1110057610,-1165355548,-1103909923)+W(7,1018410859,-1097884829,-1109883584,-1118732474);sum2=W(0,1035083591,-1112359157,1037205500,-1119560270)+W(1,-1130432545,1033928454,-1111608107,1027763767)+W(2,-1113211599,1037267536,-1110383577,1053336900)+W(3,1036846600,1029308948,1035214305,-1137000642)+W(4,1032203968,-1129901649,1050641640,1062183610)+W(5,1052549520,1037218786,-1098666781,1041216407)+W(6,-1112771443,999833884,-1113848439,1048127168)+W(7,-1087091182,-1080175934,-1106600446,-1105808372);WS(1040803966,-1079223548); +sum1=W(0,-1103550802,-1113401739,-1105545077,-1095164520)+W(1,-1102562113,-1106149592,-1123094707,-1105989383)+W(2,-1108233168,-1097729981,-1112466052,1056711305)+W(3,1033129898,-1100704991,-1106323272,-1109921151)+W(4,-1115946235,1016715200,1051122342,1072346450)+W(5,1046866637,1041579689,1017795558,1019070562)+W(6,1021078213,-1123835458,-1103483180,-1092700173)+W(7,-1104392485,1033532004,-1128003929,-1109398092);sum2=W(0,-1132003761,-1126076753,1028715469,-1094940877)+W(1,-1096054213,1050064171,-1095828963,1024912709)+W(2,-1097131135,-1098724323,-1094337061,1075670208)+W(3,-1092647285,-1119763725,-1104609741,-1103386045)+W(4,1033952970,-1102131199,1043946979,1037045260)+W(5,1052392413,-1101691459,-1104710657,1042676905)+W(6,-1114013558,1027012993,-1109613274,1026138301)+W(7,-1107006741,1032910718,-1127911473,-1109320626);WS(-1077711088,-1080462700); +sum1=W(0,1016976667,-1143635214,1050435883,1025648038)+W(1,1033190198,-1119077035,-1127874241,-1124293633)+W(2,-1095463505,-1094028818,-1084473735,-1081613943)+W(3,-1092817267,-1089963906,-1112556483,-1096263708)+W(4,1048382760,1043759401,1060944248,1061061657)+W(5,1059085444,1058923652,1024757337,1052630131)+W(6,1033669226,1023995271,1038367764,-1104130812)+W(7,1035230572,-1115548134,998948881,1035279350);sum2=W(0,-1118714905,-1128906105,-1104617441,-1102497202)+W(1,1052988680,1025452854,-1147569173,1045309195)+W(2,1038737245,1033599435,1047074065,-1081197801)+W(3,1051590837,1036478618,1034730428,-1096538670)+W(4,1045939428,-1124872105,1073600723,-1069501955)+W(5,-1078764847,-1078626366,-1094352359,-1097394746)+W(6,-1084863446,-1120736313,1072627800,1076529178)+W(7,1066278053,-1115729701,-1119746081,1001372341);WS(-1085605823,1039908372); +sum1=W(0,-1110519177,998302542,-1105109851,1051114493)+W(1,1047758692,1047411644,1008966514,1027414133)+W(2,-1101464226,-1097280531,1050325520,-1093718398)+W(3,-1109283231,-1103804777,-1107759461,-1099881946)+W(4,1050281295,1040574050,-1112501642,-1095999987)+W(5,1052111506,1013903280,-1131548857,1037344125)+W(6,-1136474287,1017687606,1027599892,1038451002)+W(7,-1112873934,1026946257,1007362713,1030395745);sum2=W(0,-1115357326,-1129481498,1037423788,-1149109833)+W(1,-1107237807,-1098320683,-1118016391,-1111060805)+W(2,-1098998597,-1104582263,-1098625511,1036322812)+W(3,1050926614,1045914812,1029306918,1035368549)+W(4,1033193484,1041990652,1052524895,1029624616)+W(5,-1102468922,1016354632,1029333966,1036818044)+W(6,-1119934044,-1109942748,1028176618,1032249206)+W(7,-1117055607,1026298641,-1116685452,-1113790705);WS(1066221936,-1112686252); +sum1=W(0,-1111426931,1049363148,-1090113310,1038796336)+W(1,-1102958241,1041899238,-1104001476,-1112879133)+W(2,1042737360,-1108750629,1053136109,-1095853365)+W(3,-1108890233,1023718298,1033191264,-1165972390)+W(4,1039181581,-1105687720,1051677110,1031102479)+W(5,1058267293,-1089545128,1047293124,1010166848)+W(6,-1110677245,1035534704,-1101864162,1019901392)+W(7,-1107302241,1048841797,-1106653499,989728967);sum2=W(0,1019579309,-1115216952,-1101014764,1035949455)+W(1,-1125343389,1020295703,-1107189524,1032252124)+W(2,-1121628281,1041466962,1044350744,-1096356807)+W(3,1019949697,1011899626,1020414781,-1108620092)+W(4,-1104132268,-1110659898,-1092586315,1067161402)+W(5,1044980625,1028945397,1024223321,-1106879950)+W(6,-1133616314,1046938970,-1089581193,-1097777539)+W(7,1025080038,1042942659,1000298789,1034429670);WS(1065647552,1042223795); +sum1=W(0,-1118213891,1047859212,-1102035956,1049817209)+W(1,-1136727619,1018314812,1048950515,-1111834851)+W(2,-1090185691,-1099254654,-1085546115,-1090115457)+W(3,-1086839140,-1089622500,-1103143659,-1088857895)+W(4,1054600851,1056675965,1052764224,1060918524)+W(5,1050058698,1053194074,1055030644,1046059111)+W(6,1042956769,1045938459,-1095542592,1048397149)+W(7,-1107166488,-1115710386,1046421002,1019098869);sum2=W(0,1038047795,-1100534663,1043709757,-1098906327)+W(1,1054998296,-1097979318,1042447686,-1135615252)+W(2,1045715537,-1109612723,-1109559353,-1088589586)+W(3,1046750383,1030039799,-1112135838,-1108474833)+W(4,1062099960,1074456323,1074047524,1061406543)+W(5,-1109444720,-1095255331,-1106577876,-1098188594)+W(6,-1074982428,-1071944747,-1086420775,-1087600981)+W(7,1058024333,1040647828,1042372587,1051479186);WS(-1099261566,-1102058551); +sum1=W(0,1037460750,-1118752449,1048855473,1046116085)+W(1,1041532007,1043443965,1035797482,1048656673)+W(2,-1099740733,1038344912,-1097823268,-1077722267)+W(3,-1086845489,-1109540512,-1112472539,1006300060)+W(4,1035868896,1028635221,-1135561696,-1089090112)+W(5,1054063629,1036245196,1039520068,-1115462467)+W(6,1046250530,1040547388,1049218244,1053686776)+W(7,1041462458,1041323791,-1116084210,1050214602);sum2=W(0,-1107023704,-1103130345,1025081245,1007138702)+W(1,1020633935,1042694232,-1116958023,-1117764771)+W(2,-1099880087,1049640504,-1099241173,1060797185)+W(3,-1096100738,1034621436,-1100840753,1051814059)+W(4,1047853298,-1100868353,1050410790,-1096656068)+W(5,1053061345,-1092716332,1057695342,-1092707384)+W(6,-1106650230,1035820630,-1111373979,1048085306)+W(7,-1098540289,1045275377,-1095110662,1026583068);WS(-1081437504,-1086037448); +sum1=W(0,1002898847,1034161364,-1097339820,-1102052735)+W(1,-1122224578,-1116847174,-1124219870,-1114337484)+W(2,1048903167,1048827465,1058952469,1062493730)+W(3,1056452878,1052097743,1046287775,1051622635)+W(4,-1098037791,-1110924302,-1089826679,-1082951605)+W(5,-1095802941,-1093057352,-1115921615,-1097214606)+W(6,-1124004134,1038960439,-1109622563,1046141833)+W(7,1037494008,-1142221339,1018754897,-1115514650);sum2=W(0,1026296217,1046658552,-1092482457,1048926974)+W(1,-1093986590,1051240634,1031417427,-1116201775)+W(2,-1098267531,1054123387,1031912087,-1103258874)+W(3,1064081451,-1081783631,1052301313,-1136084293)+W(4,1056065541,-1080723543,1068312252,-1095327126)+W(5,-1101319294,1054428583,-1095108256,1032992382)+W(6,-1107249906,1049528827,-1094476247,-1114829012)+W(7,-1110151549,-1109929036,1023898518,-1131461985);WS(1059931039,1045326059); +sum1=W(0,-1105339195,-1116497429,-1104905094,1048600749)+W(1,1017781140,1028510504,-1104151378,1006123003)+W(2,1027626820,-1102542884,1042432944,-1087368655)+W(3,-1090841955,-1098837680,-1135818261,-1102238241)+W(4,1035394960,1045819641,1050447189,1050459387)+W(5,1058872902,1038310627,1009721182,1039487803)+W(6,1020852317,-1110241387,-1120454715,1028063406)+W(7,-1135766366,1046575867,-1121800177,-1138241103);sum2=W(0,-1108715925,-1125695753,-1106861101,1037467647)+W(1,1049447879,-1108013135,1016159100,1025122350)+W(2,1033521028,-1107049318,-1126359337,1024736242)+W(3,-1096919459,1030099711,1038861546,1027296385)+W(4,-1130002309,1043711791,1069432650,1069236178)+W(5,-1089672176,-1104043463,-1102967963,-1115278753)+W(6,1043372642,-1096562690,1055907536,-1077602923)+W(7,-1079492159,1048192702,1041544949,1038199238);WS(1065273279,-1155200022); +sum1=W(0,1032043190,1042748400,1044363154,-1101712885)+W(1,1020290996,1042545917,1023679047,969146311)+W(2,-1110724474,-1113644224,-1103694886,1049530899)+W(3,1032343156,-1119655327,-1113927803,1014066252)+W(4,1048813356,-1113329098,-1138873982,1013956115)+W(5,-1088512539,-1118975351,-1112426340,-1102619473)+W(6,-1107914275,1017813644,-1119126921,1030506334)+W(7,1047677002,1035449518,1040385292,1037002750);sum2=W(0,-1105379539,-1114326988,-1128505094,-1127815582)+W(1,-1144273240,1011114412,1010998384,1008109660)+W(2,1040024171,1033596237,1027874005,-1090164335)+W(3,1026082941,-1098155637,1010514392,-1110656550)+W(4,1054804566,-1100858724,-1108932212,1015111122)+W(5,1057491035,-1123558275,1041639386,1025837089)+W(6,1020126178,1058095820,-1095228668,-1114002666)+W(7,-1109234902,-1117423595,-1148517800,1028462436);WS(1064822335,-1095840736); +sum1=W(0,1049019197,-1114924672,1006539024,1027273471)+W(1,1024001604,1023329786,1034076369,1032078653)+W(2,1056391992,1052717533,1053226600,1063307800)+W(3,1051465786,1056189595,1051405604,1049885284)+W(4,-1082098174,-1097259572,-1083318869,-1085358981)+W(5,-1093212548,-1096912972,-1097995110,-1090164049)+W(6,1047279757,-1158101509,1028150783,1048033194)+W(7,1040827508,-1122795750,1040247311,-1102713147);sum2=W(0,1044291516,-1105536143,-1123279074,-1102729189)+W(1,1019015608,-1098099014,1041233257,-1116414073)+W(2,1057945825,1059138923,1064153610,-1117658388)+W(3,-1082824416,-1088923796,-1114762777,-1093119165)+W(4,1075245425,1063262829,1058517731,1055818216)+W(5,-1095331241,-1082492094,-1084810008,-1076437009)+W(6,-1075047571,-1084742426,-1087050661,-1094508761)+W(7,-1107921801,1066223948,1065694420,1070896480);WS(-1090760447,1052695066); +sum1=W(0,1032827391,1004836815,1040820154,1033221771)+W(1,-1142824410,1019263487,1033909728,1030288497)+W(2,-1086160295,-1100507696,-1085279840,-1085951050)+W(3,-1090476887,-1096291378,-1104244158,-1096098979)+W(4,1058956361,1050270371,1061054293,1060000376)+W(5,1053225609,1052048107,1044967298,-1123372967)+W(6,-1122589400,1011775197,-1126907788,-1109718672)+W(7,1031459881,1014310644,1002236306,1050105184);sum2=W(0,-1115548553,1010795990,1025233265,-1108773712)+W(1,1028577219,-1123367926,1027045545,1016487959)+W(2,-1119133376,1054475337,-1126101085,-1096206384)+W(3,1025243447,-1123699076,-1116348436,1026289255)+W(4,1034230379,1049648601,1031862009,1056453743)+W(5,-1092511031,1040231624,1052333940,-1098871930)+W(6,-1106450540,-1130742967,1074765700,1076253468)+W(7,1067142167,-1082850789,-1074864896,-1066441953);WS(-1098442559,1026469881); +sum1=W(0,-1149983818,-1119522441,-1111872220,-1148708523)+W(1,1033974589,1034687077,-1121497336,1040191316)+W(2,1050517915,1049663660,1057681670,1054270423)+W(3,1065584902,1060962908,1043551013,1037520938)+W(4,-1114000872,-1102209381,-1097110004,-1080449641)+W(5,-1089390067,-1088971425,-1096207069,-1098201593)+W(6,-1106643136,-1107005098,-1107624656,1044397088)+W(7,1040137492,1011262833,-1152197144,-1111636393);sum2=W(0,-1093666199,1049995354,-1104373549,-1108191449)+W(1,-1086862321,-1109961150,-1105617480,1057348983)+W(2,1067471948,-1083836095,1067519925,1075025493)+W(3,-1079149522,-1092122258,-1118106953,-1090446878)+W(4,1044138823,-1089657247,1068116530,1070698122)+W(5,-1077256496,-1092830464,-1104600439,-1095892285)+W(6,-1087858714,1040673003,-1086283540,-1107890740)+W(7,1052510667,1044801958,-1113062539,1040940184);WS(-1089367999,-1080592817); +sum1=W(0,1050901372,-1142600967,1043029392,1042662963)+W(1,-1131715556,1028335344,1009439676,1040529906)+W(2,1020565079,1046045566,1051791856,1059303201)+W(3,1060541458,1057651322,1050310918,1061742083)+W(4,-1098563453,-1094642094,-1092783656,-1082254536)+W(5,-1088235102,-1083519131,-1088554180,-1084895582)+W(6,-1123752726,1032349343,1017360893,1040706037)+W(7,1038984656,1042767141,1039511244,1037250730);sum2=W(0,-1086948904,1044777691,-1085906527,-1107333159)+W(1,-1094251850,-1101622483,1054103540,-1095334551)+W(2,1072921984,-1096214776,1069427540,1069014322)+W(3,1068759557,-1095651744,-1080635176,-1071443034)+W(4,-1102597600,-1086612116,1055370552,1068187895)+W(5,1049876941,-1098339283,-1098368915,-1119710681)+W(6,-1081008410,1053678014,-1094318103,1040782350)+W(7,-1097053445,1052418274,-1116179967,1057760894);WS(-1072329816,1074376722); +sum1=W(0,-1119826815,1034466519,-1121811611,1040071236)+W(1,1034412551,-1125783811,1025497578,989295697)+W(2,-1097135645,-1100415357,-1123247055,-1078161261)+W(3,-1086793716,-1092987820,-1117997032,-1097292445)+W(4,1051061560,1050212013,1057003368,1050094223)+W(5,1060987117,1053182609,1030369595,1040352158)+W(6,1001332238,1009264740,-1119531350,1047608180)+W(7,-1139666027,1053959834,-1130537576,1003451511);sum2=W(0,1010850411,-1119692159,-1110113403,1041465994)+W(1,1019542894,1041361680,-1128076954,1035827461)+W(2,1033963983,1024673399,-1107122545,1041917938)+W(3,1031918417,1016152214,-1119110501,-1108745692)+W(4,1041326744,-1126975570,1049177676,1075051781)+W(5,1057547658,-1100210466,-1101468559,-1111890885)+W(6,-1110591524,1039643589,-1098235771,1061676083)+W(7,-1072022345,-1080793678,1038326573,-1115279667);WS(-1089734463,1065567745); +sum1=W(0,-1115310942,1048676446,1051913151,1041943745)+W(1,1032260949,-1123414147,1025799735,-1118314271)+W(2,-1089748010,1033541431,-1091844976,-1078026925)+W(3,-1083863979,-1088695462,-1097284573,-1090712276)+W(4,1053493076,1047890913,1060749357,1057682191)+W(5,1060855949,1057895644,1049355215,1052101531)+W(6,1041536229,-1111760907,1031051700,1033727319)+W(7,-1117552023,-1123512523,-1134918146,1037093278);sum2=W(0,-1087048499,-1089227831,-1081828818,-1106022394)+W(1,1057638724,1053589051,1030725267,1050363813)+W(2,1067110585,-1073947481,-1100054441,1057992187)+W(3,-1096117153,1049824990,1008667589,1047082764)+W(4,1062551012,-1107011493,1044700801,1053279159)+W(5,1047077354,-1098858111,1055551992,-1093863007)+W(6,-1088705293,1063056164,-1091908804,1049660447)+W(7,1041467137,-1112699600,991046018,-1118599281);WS(-1079109040,-1085312521); +sum1=W(0,1023769582,-1140282322,-1105105824,1041551140)+W(1,1030694836,-1111084358,955351653,-1133450021)+W(2,1037365911,-1117579705,1052645482,1061549365)+W(3,-1092653220,1050958145,-1113919416,1047664699)+W(4,-1113299189,1042794748,-1086336671,-1087637436)+W(5,1051894263,-1111723928,1039072513,-1111528112)+W(6,-1127522065,-1098682508,1041518392,1049784787)+W(7,-1104535548,-1112540051,997865134,-1121426302);sum2=W(0,-1112127727,1037755147,-1117076760,-1096944427)+W(1,920706880,-1126463908,1025583781,1016301114)+W(2,-1182735741,-1116775242,-1110833901,1050960349)+W(3,1057824022,1025802869,-1117624689,-1106817101)+W(4,1027967369,-1108084106,1047419656,1057406540)+W(5,-1106635563,1030718323,-1129307942,-1146210056)+W(6,-1099828018,-1106208929,-1106621688,-1093670465)+W(7,1046907280,-1104727129,1024731263,-1133403952);WS(1066445424,-1114782683); +sum1=W(0,-1105169880,1037849343,-1111719878,1053025475)+W(1,-1106443352,-1118185334,-1115180998,-1104379365)+W(2,-1110498524,-1092096849,-1089773556,-1093199580)+W(3,-1085224723,1017432168,-1097477655,-1120659192)+W(4,1042140161,1045982494,1059787797,1058443885)+W(5,1058982105,1051015495,1049335790,1047806371)+W(6,1033176686,1027992139,-1104315937,1034263873)+W(7,-1099213011,1015617473,-1134277975,-1124174113);sum2=W(0,1035156885,1010861092,1053142713,1050643378)+W(1,-1093995815,-1100307988,-1094190457,-1095534688)+W(2,-1104443938,-1111353322,-1092519845,1033492110)+W(3,1061622434,1045835461,1054276307,-1118030035)+W(4,1020765936,-1131256669,1043066295,-1093594884)+W(5,-1090891830,1051701313,-1115303200,1044764145)+W(6,1034215267,-1119467871,1043572605,-1120345789)+W(7,1035132204,-1120193257,-1107758441,1010759898);WS(1053797695,1034928741); +sum1=W(0,-1113709609,-1101985872,-1098832221,-1106547453)+W(1,1032341932,1038712045,1020651977,1037110646)+W(2,1027306577,1036410350,1048222316,1049396519)+W(3,-1093507345,-1098128846,-1102358117,-1095739626)+W(4,-1089618673,-1094568298,-1089721378,1057932790)+W(5,1051551069,1042310981,1032076306,1049811664)+W(6,1039738506,1041675949,1049870789,1032602030)+W(7,1041034929,1020376402,1038606871,1036847389);sum2=W(0,-1107569978,1048834253,1032955728,1047116738)+W(1,-1095875849,1024141754,-1117854930,1031286951)+W(2,-1096371488,-1100415470,-1097656368,1057366407)+W(3,1049724515,1047568587,1025784853,1040928209)+W(4,-1091206842,-1140716449,-1099982688,1067804624)+W(5,-1107732848,-1101898886,-1104360749,-1099991629)+W(6,-1113379832,-1098639187,-1102236471,-1112454303)+W(7,1037256860,1039735469,1034482735,-1122662653);WS(-1100599294,-1113486107); +sum1=W(0,1041832895,-1113994869,-1101582062,-1100675730)+W(1,1015862616,1033573462,-1123901241,-1147102474)+W(2,1058015130,1043005476,1065539217,1054749782)+W(3,1046936430,1043027144,-1122192647,1047923809)+W(4,-1095482492,-1095369841,-1088297536,-1085935041)+W(5,1054414015,-1096194081,-1118572185,-1106262926)+W(6,-1123207408,-1120610968,1040056719,-1111595960)+W(7,-1110844045,1041950395,1007333963,-1097939280);sum2=W(0,1033496750,-1118187780,1041080086,-1102935461)+W(1,1023898015,-1122438380,1007185073,999989929)+W(2,-1105017139,1043450683,-1106458832,1057933296)+W(3,-1098239652,-1111698692,1023645924,1034431733)+W(4,-1118941046,-1142467441,-1096734279,1063076098)+W(5,-1119844388,1048742138,-1096898561,-1090457759)+W(6,1012703263,1009095593,1025973118,-1089439993)+W(7,-1124882200,1004297609,1046154393,1048791679);WS(1058454143,-1086058342); +sum1=W(0,-1115074879,-1099743710,-1103933280,-1113530407)+W(1,-1124606630,-1115568198,-1123572016,-1118699368)+W(2,1051341170,1054019099,1057240637,-1085932301)+W(3,-1090466976,-1097279225,-1108988935,-1095706385)+W(4,-1123276713,-1112675511,-1095853513,1048593300)+W(5,1059272419,1052135974,1039376368,1041536544)+W(6,1040408770,1042487060,1044345774,1034191179)+W(7,-1105205160,-1111240730,-1135917288,1043157563);sum2=W(0,1047642666,-1094360366,-1111839157,-1101124559)+W(1,-1119401007,-1114275291,1010413358,1018914035)+W(2,-1106684338,-1104496052,-1101578828,1062389037)+W(3,-1099504899,-1102577927,-1121638606,-1100286365)+W(4,-1097565895,-1137000462,1017360469,1056361687)+W(5,1057357121,-1111580608,1047557438,-1108198790)+W(6,1038757740,-1120606628,1043520604,-1110716481)+W(7,-1121032787,-1174578992,1020758339,1031842399);WS(-1116191222,-1087222261); +sum1=W(0,1051378220,1026061480,1051132746,-1131139769)+W(1,1029438530,1010253799,-1140691900,1032111196)+W(2,-1092140039,1041212802,1028855632,1054776996)+W(3,1052461054,1056191968,1041996679,1051463563)+W(4,-1098282527,-1108686318,-1114615088,-1096808426)+W(5,-1090181940,-1089672580,-1095415146,-1084069643)+W(6,-1115126509,1018050395,1028919646,1031880915)+W(7,1047407636,1041055121,1025713945,1049760258);sum2=W(0,-1120688670,988781159,1023531678,1034244658)+W(1,1038669521,-1125227753,-1122152897,-1123518214)+W(2,1075791226,-1079951996,-1080919050,-1078043585)+W(3,1061514147,1050383220,1043495776,1056154705)+W(4,1072772368,-1096143661,-1087274515,-1074830486)+W(5,-1138433181,-1091737459,1043710967,1064633897)+W(6,1033088733,-1126178338,1039982901,-1153355920)+W(7,1047086021,-1117938706,1036258954,-1090859740);WS(-1086114623,-1084816591); +sum1=W(0,-1119067590,1041053515,-1123050946,1050414506)+W(1,1017204584,1033253648,-1109025761,-1142909644)+W(2,1036163639,-1112478813,1045609440,-1091176571)+W(3,-1096458464,-1092456237,1039781304,1019336538)+W(4,-1106221778,-1114565991,-1102274148,1041957568)+W(5,-1140250052,1042499428,1024592194,-1110741472)+W(6,1015833809,1041839788,1038604869,1049671879)+W(7,1016035267,1004159150,1019624502,1038938427);sum2=W(0,1006657945,-1145756082,-1102183527,1043063832)+W(1,1048257970,1030027167,-1129422896,-1120006792)+W(2,-1115603798,-1129023472,1024575987,-1070476153)+W(3,1078068971,1034687231,1014471457,998969122)+W(4,1043167348,1029036192,-1134024937,-1079118960)+W(5,1058188063,1026633068,-1138449465,1035752331)+W(6,1032033598,-1122908214,1013148193,-1117007948)+W(7,1026806223,-1106350665,1037397710,-1119066852);WS(1058895967,-1115291633); +sum1=W(0,-1125313920,-1110715998,-1110540830,-1093243535)+W(1,-1098773368,-1114664694,-1108229374,-1128878150)+W(2,-1118075736,1028840739,1050429809,1056177832)+W(3,1050921353,1021103494,1039051533,1048765371)+W(4,-1101537045,-1106860038,-1109809347,1062536899)+W(5,1050429425,1042267175,-1104944731,1019165331)+W(6,-1102743433,-1113756805,-1112821659,-1094426092)+W(7,-1112140166,-1105504016,-1123143221,-1113092552);sum2=W(0,-1118991740,1035161218,1031409558,1025873763)+W(1,-1130385854,-1109675818,1035221069,-1106515599)+W(2,1049660250,-1092533458,1052404039,1059098325)+W(3,1035329255,1033133876,-1100849576,1041079456)+W(4,-1072802862,-1084844108,1059153934,1066715964)+W(5,1054800035,-1121630224,1017402854,1051036492)+W(6,-1093107290,-1131472334,-1099814906,1050189246)+W(7,1033113369,1032032260,999987753,-1109656332);WS(-1088275071,-1079832501); +sum1=W(0,-1121609972,1054795207,-1091175970,1036185063)+W(1,1036253081,-1095852779,1056993046,-1099614386)+W(2,-1140631216,1001216956,-1109051587,-1108520810)+W(3,-1112588624,-1111932116,1018114011,-1114447781)+W(4,1031902612,1053928586,-1100362195,-1118566269)+W(5,1050418310,-1106845532,1057036918,-1106898567)+W(6,-1114449795,1049117898,-1089874193,1024185910)+W(7,1033419200,-1098704820,1052334541,-1103629998);sum2=W(0,1034198694,981839325,1050051875,1043520387)+W(1,-1099547613,1020237946,-1112528204,1032634213)+W(2,-1099753021,1036479145,-1087878645,-1099082069)+W(3,1049181233,-1106552091,1051666481,-1105193718)+W(4,1052074243,1033443852,1061175239,1044393022)+W(5,1036533430,-1125692060,-1100952955,1038429221)+W(6,-1101897553,-1125560160,-1090657055,-1126528836)+W(7,-1113239720,-1111189720,1038783930,-1110455840);WS(1055684799,1057467177); +sum1=W(0,-1115635180,1040983065,1033664034,1047016048)+W(1,1040303666,1031194256,1036112338,1031542812)+W(2,-1084593518,-1097583958,-1088354001,-1083875169)+W(3,-1089538899,-1090088564,-1096939300,-1092334596)+W(4,1057349085,1048845932,1059080519,1057461395)+W(5,1055847004,1052697432,1050363555,1025617138)+W(6,1044528285,-1108137881,1042415046,-1130549589)+W(7,1025308788,1040121956,-1124884732,1051059157);sum2=W(0,1039076253,1043377438,-1111770710,-1129064764)+W(1,1041506513,-1117340191,-1113661124,1006037802)+W(2,1084724252,1057352437,-1070809771,-1070013447)+W(3,1024963427,-1115045950,1037860995,-1120758055)+W(4,1055999642,-1108204793,-1115649819,-1084654208)+W(5,1027889169,1023558847,-1108774739,1034794526)+W(6,-1111202323,982595482,1026864091,1008953953)+W(7,1041107952,-1112891517,-1161342746,1036271073);WS(-1089965247,1033154456); +sum1=W(0,-1118330000,1043361746,1028536899,-1106541856)+W(1,-1103233833,1037178020,-1122355891,-1148310999)+W(2,1037068672,-1091726905,-1106295439,-1087991002)+W(3,-1094017778,1026207675,-1102222128,-1106998176)+W(4,1043453383,1027410848,1047994631,1053447482)+W(5,1058853977,1049286760,1044913013,1056026770)+W(6,-1112803845,1030795409,-1111747193,-1109712917)+W(7,-1110327970,-1111739348,1037236782,-1104668925);sum2=W(0,-1104081637,-1115350296,-1102551062,1033477476)+W(1,1048930937,-1092653578,1049862570,-1095610208)+W(2,-1104712414,1065017407,-1101193417,1054909386)+W(3,-1096226206,-1094950793,1042131871,-1100838677)+W(4,1038273275,1027805677,-1097697554,1069044481)+W(5,1051154993,-1097937335,-1115393002,-1090656582)+W(6,-1102746442,1038124336,1025981021,-1090398660)+W(7,1049254524,-1111378843,-1100983150,1038627466);WS(1053522367,-1088249107); +sum1=W(0,1041083642,-1109062519,1041255149,-1129341567)+W(1,-1122816004,1034422596,-1105678140,1002201935)+W(2,1049354980,1050121221,1062047573,1050256849)+W(3,1058306025,1054029415,1043380368,1057986114)+W(4,-1104528935,-1089361286,-1094323010,-1085946707)+W(5,-1092704114,-1096738148,-1095183726,-1098664466)+W(6,-1116245577,-1108913352,1044478835,-1106612546)+W(7,1010650184,-1127765836,1004046811,-1116617606);sum2=W(0,-1115691041,-1122196578,-1133382325,-1119943136)+W(1,1035619338,1026693101,-1121646682,1035287249)+W(2,1047105417,1040512713,-1115639944,-1093984910)+W(3,-1128164365,-1112542694,1040561229,-1122951759)+W(4,1066880006,1072356775,1070833917,-1106032356)+W(5,-1084317659,-1103058628,-1106694088,-1109474775)+W(6,-1078420733,-1074089832,-1079250237,1053171659)+W(7,1063302165,1050228647,-1111273903,1041535222);WS(1054980735,-1118400611); +sum1=W(0,1023857233,-1136534172,-1109579886,1024279465)+W(1,1031638446,1042081899,1025101580,1037741818)+W(2,1056052581,1054619866,1062631892,1063340895)+W(3,1054891904,1032051762,1036582853,1040187076)+W(4,-1108899938,-1084632317,-1087670245,-1087714282)+W(5,-1089981519,-1091518889,-1100292439,-1096282711)+W(6,-1098911041,1014993130,1019079234,984908360)+W(7,1040973935,1034243544,1038263499,1035333164);sum2=W(0,1048663857,-1115607290,1050959246,-1094885185)+W(1,1032263390,-1094433235,1034671855,-1100445080)+W(2,-1103126769,-1089284711,-1106476140,1065597134)+W(3,-1114774312,1044112203,-1110680696,1044150663)+W(4,-1090522781,-1135630263,-1116194786,1068281966)+W(5,-1114594327,1034641663,-1120338125,1039802827)+W(6,-1135969141,-1096474341,-1110761886,-1097679100)+W(7,1030603925,1025157613,-1121778209,-1101519530);WS(-1099426814,1028666567); +sum1=W(0,1017347599,-1114817850,-1102332157,1038414608)+W(1,1040863441,1043586729,1033560385,1024225691)+W(2,1050515008,1054909169,1058789976,1049870885)+W(3,-1096181150,-1094822147,-1110297504,1035801215)+W(4,-1097546199,-1091252816,-1088740593,1026332624)+W(5,1050979384,1046083753,1043042893,-1106319780)+W(6,-1122852442,1034424401,1040697053,-1119196265)+W(7,-1096850298,-1101867410,-1112505198,1022200238);sum2=W(0,1032296335,-1113414658,1032045591,-1096252543)+W(1,1039836782,-1130462124,1032505935,1017080436)+W(2,-1113854030,1056314261,1056282685,-1076472908)+W(3,1041975936,1060789196,-1113045826,-1114544525)+W(4,-1123218166,1057288090,1048444709,-1076465599)+W(5,1054239999,1064414385,-1101415652,1017354944)+W(6,1034439881,-1106401889,1027355020,-1099548772)+W(7,1041344971,-1137373456,1031341874,-1131418272);WS(1048405758,1021439377); +sum1=W(0,-1095783591,1004365570,-1111296393,-1090472608)+W(1,1053249340,-1096289768,-1116930177,1031327257)+W(2,1056714988,1053912029,1060368018,1058906144)+W(3,1059710205,1050004859,1050104788,1057263364)+W(4,-1095028931,-1097931508,-1093355890,-1084869763)+W(5,-1111710658,-1089344390,-1098648430,-1095692170)+W(6,-1099026446,1040281084,1042667324,-1099317986)+W(7,1058667863,-1094050929,1032145973,-1127343131);sum2=W(0,-1137650289,-1108324664,-1107068637,1053004242)+W(1,-1096186406,1044011702,1031462490,1016473473)+W(2,-1102128439,1038586891,-1102631398,-1096144010)+W(3,1065778432,-1087564484,1041037240,-1095964556)+W(4,1065729447,1042582877,1055966210,1066736444)+W(5,-1077760412,-1109340585,-1088233524,-1079487884)+W(6,-1085103011,-1096095433,-1096657292,-1084794119)+W(7,1061684194,1053274132,1060428365,1070082531);WS(-1120621558,-1109747932); +sum1=W(0,1041405257,1034046808,-1118447615,1031113092)+W(1,-1118172841,1039149197,1025628006,1023987646)+W(2,1056552380,1057052863,1034826244,1061462741)+W(3,1057041023,1051800560,1051243933,1054503948)+W(4,-1086075216,-1102283433,-1089852749,-1087896594)+W(5,-1089300195,-1089266110,-1098077639,-1098034299)+W(6,1021959803,1009707220,1002695151,1030648525)+W(7,1017359341,1034838445,1033512688,-1099231069);sum2=W(0,-1072120352,-1071453180,-1069998225,-1071241469)+W(1,-1073669228,-1079882002,-1086087106,-1096258120)+W(2,1076686179,1075980741,1075876198,1076219984)+W(3,1072219376,1071235859,1056170781,1057784547)+W(4,-1096491690,1055107632,-1100816518,1048961210)+W(5,-1123192163,-1097056656,1049622318,-1098632303)+W(6,-1109988374,-1125676035,1033428305,1018908197)+W(7,1040773271,-1129279043,1030403985,-1116156171);WS(1014286296,1057122707); +sum1=W(0,-1100574608,-1134927261,-1096946922,-1115033128)+W(1,-1104533485,-1121259095,-1131995140,-1118839498)+W(2,1045128364,-1112841149,1023155519,-1094208427)+W(3,-1099169249,-1097752701,-1111007544,-1093400894)+W(4,1045637171,1041785732,1051848326,1066937726)+W(5,1058599142,1049921902,-1118760834,1043420320)+W(6,-1113867461,1021982785,-1106336253,-1099783438)+W(7,-1105189673,-1131816685,-1114789302,-1116552190);sum2=W(0,1049653051,-1094509070,1050525055,-1103662151)+W(1,1043452805,-1102028885,-1109754017,-1111709279)+W(2,-1095117458,1054995367,1042728281,1058124872)+W(3,1049859565,-1097129382,-1098619851,1051259496)+W(4,1052542945,1021265631,1046926465,1063131010)+W(5,1029162962,-1116537562,-1092457406,-1078653130)+W(6,1018695699,-1101605993,1044635344,-1104882803)+W(7,1042944443,-1110047725,-1107003327,-1114867517);WS(-1089617919,-1078924764); +sum1=W(0,1038586191,-1112517470,1021690773,-1148410045)+W(1,-1123773533,1037589846,-1114886949,1015916580)+W(2,1054651431,1043170193,1058605998,1062049174)+W(3,1056236357,1058401044,1034515388,1056139353)+W(4,-1087542485,-1101086846,-1088163691,-1087004528)+W(5,-1089020247,-1089711896,-1095006441,-1089662071)+W(6,1032587193,-1121720345,1034793549,-1139319682)+W(7,1040971627,1052009144,1017461287,-1138694970);sum2=W(0,1041183203,-1109901203,1047303939,-1146453442)+W(1,-1103370030,1035308463,-1107592095,-1129723226)+W(2,-1104791361,-1103309504,-1109225788,1050748307)+W(3,1032462009,1055570013,-1104507532,1050955773)+W(4,-1113641717,1018299463,993644855,1050538753)+W(5,1024125183,1058013570,1044744090,-1110543421)+W(6,1040266660,-1124518657,1039912380,-1107008276)+W(7,-1094411631,-1087158984,-1091454514,-1122733934);WS(-1102088830,1068463311); +sum1=W(0,1007817678,-1114291787,-1106493040,-1121377148)+W(1,-1120569345,1037434082,-1121570543,1048479966)+W(2,1054791531,1051084317,1059023407,1060487316)+W(3,1053262386,1049438849,1043319351,1037267389)+W(4,-1088166471,-1097682087,-1087032011,-1087032009)+W(5,-1090195409,-1104445288,-1110294871,-1112047510)+W(6,1034628887,-1130503387,1042839161,1025313797)+W(7,1040112167,-1112558866,-1130274577,-1107488086);sum2=W(0,-1092702026,-1078842502,-1073165872,-1075365553)+W(1,-1101579557,1066341075,1071992070,1076187261)+W(2,1046572938,-1092761370,1048469719,1050413401)+W(3,-1110447061,-1104166524,-1123716833,1056626852)+W(4,-1113806693,1010298098,-1106037347,1041503306)+W(5,1037192623,1033398310,1031702363,-1110743783)+W(6,1023924734,-1134107544,-1114438827,1017902665)+W(7,1011674154,-1109271682,1028552632,-1123830383);WS(1050299903,-1120086405); +sum1=W(0,1001761330,1051426245,-1097473350,1050955122)+W(1,-1098718343,-1119699408,1038117517,-1107622229)+W(2,1015037916,1042953374,-1103780307,-1082933123)+W(3,1055455844,-1145769035,-1132909758,1039587926)+W(4,1045981578,-1094503950,1055197076,-1099126616)+W(5,-1118831961,1049761702,-1105955296,1047033256)+W(6,1032160884,-1131440192,-1100940622,1056645367)+W(7,-1095742542,1031622998,1041481643,-1103124921);sum2=W(0,1033493706,1004282338,1032395114,1035721710)+W(1,-1138557465,-1094630455,1050323990,-1102984389)+W(2,-1100025935,1036668146,1043333590,1058018229)+W(3,1035348312,1040910383,1034465026,1044530527)+W(4,-1117747708,-1097774825,-1106149887,-1110236537)+W(5,-1105971349,1017216296,-1110352462,-1108832665)+W(6,-1131691420,1042472719,-1122758767,-1106477628)+W(7,1046834331,-1101697584,1040100106,-1099114129);WS(1059761855,-1093333930); +sum1=W(0,-1114738580,-1114617627,-1102727321,1053910378)+W(1,-1094270689,-1107452471,-1130455238,-1108958070)+W(2,1026403632,1045397583,1028768699,1067649611)+W(3,-1104323849,1042776267,1036450873,1044075076)+W(4,-1105736123,-1109519752,-1092041414,-1090720496)+W(5,-1112030179,-1103704317,-1131764742,-1106063752)+W(6,-1114933837,1044731740,-1111636685,1058839312)+W(7,-1095377736,1034877772,1031929286,-1113359528);sum2=W(0,1033753751,-1102724392,-1104466296,-1083668043)+W(1,1048180527,-1130490520,-1103926430,1029490699)+W(2,-1111931472,1032416705,1029992729,1069568682)+W(3,-1114422988,-1133345747,1038116955,-1129834714)+W(4,1037689465,-1105246922,1052475163,-1090236396)+W(5,-1122305941,-1123788932,-1127253836,-1122171294)+W(6,1023732592,-1126463180,-1118149766,-1106129378)+W(7,1038071226,-1124715334,-1117123194,1029091180);WS(1058247519,1058950523); +sum1=W(0,-1149972914,1038957612,1039970419,1008158544)+W(1,1041515382,1036144305,1048236362,-1101573740)+W(2,-1088063023,-1093535488,-1086741707,-1077128706)+W(3,-1087332234,1032313207,-1113848378,-1089306475)+W(4,1055543086,1052729022,1058924163,1057693884)+W(5,1060656868,1056531259,1049522521,1052006205)+W(6,1037155715,1026693813,1030719286,1032127358)+W(7,1000958261,-1112386573,-1144612480,1039554949);sum2=W(0,1037957789,-1128637884,-1110859440,1052981065)+W(1,1040710261,-1090346288,-1107045102,-1092015484)+W(2,1050553491,1004874497,-1106433025,1058989771)+W(3,1058251934,-1076253449,-1079150504,1073146781)+W(4,-1089722328,1058234547,-1098594890,1052545864)+W(5,-1106724054,1032950959,1055215751,993278274)+W(6,1050994656,-1095571828,1041665953,-1129708900)+W(7,-1111634443,1015279680,1053553553,-1088813426);WS(-1079689312,1054955487); +sum1=W(0,-1112827293,1038847520,-1106748654,1038138418)+W(1,1035397268,1020226162,1030022886,-1108673687)+W(2,-1094091800,-1099397203,-1102151838,-1086663035)+W(3,-1087965823,-1095805620,-1098762192,-1096846716)+W(4,1053343716,1057879171,1023820222,1057249493)+W(5,1057985827,1053821069,1051466543,1049463311)+W(6,1046408387,-1099233409,-1154890390,1012875058)+W(7,-1109124523,-1126965269,1036334304,1027304762);sum2=W(0,1029906557,-1110945783,1046588193,-1121400966)+W(1,-1106274145,1040948990,-1114149785,1030737726)+W(2,-1118908362,-1110004947,-1089040350,-1106443118)+W(3,1054044230,-1115139995,-1112260837,1025987216)+W(4,-1075330978,-1081100797,-1089891752,-1103643831)+W(5,-1095873523,-1120742988,-1107023588,1017833328)+W(6,1069116571,1067844910,1066162938,1048795077)+W(7,1049522444,1042365723,1011222152,1031208089);WS(1045323518,-1099573370); +sum1=W(0,1043494028,-1110296205,-1129034139,1040205415)+W(1,1019451328,1037480760,-1144942569,1019441962)+W(2,1054678847,1050638833,1058657792,1062545342)+W(3,1053087270,1054717567,1044080591,1056118375)+W(4,-1087400961,-1098183847,-1085969705,-1082320511)+W(5,-1092792902,-1090230188,-1094581114,-1090342307)+W(6,1041221965,1038272854,1035507984,1038672050)+W(7,1018934299,1028598065,1032398451,-1135273190);sum2=W(0,-1115726367,1028786141,1044450180,-1097529180)+W(1,1047479398,-1105649332,-1127420023,1035799966)+W(2,-1100272494,-1113941052,-1104186275,1042859033)+W(3,-1097402721,1051025911,1025042835,-1139194229)+W(4,1026681555,-1107020345,1044693748,1067055887)+W(5,1064288021,1073649944,1067916626,1054550763)+W(6,-1095030133,1043410282,-1120312046,-1093369648)+W(7,-1083945294,-1073003592,-1079526678,-1086831079);WS(-1086660959,-1095040438); +sum1=W(0,-1137772688,-1103872010,1033664792,-1114303830)+W(1,1043631948,-1110960013,-1112201312,1004207675)+W(2,-1101831491,-1108733164,-1099393082,-1091611870)+W(3,-1111668992,-1092153253,-1104258339,-1111896549)+W(4,1047762270,1048734598,1053294440,1032897582)+W(5,1054700448,1051790266,1038982672,1042342295)+W(6,1026497863,-1112526127,1036444877,-1105948909)+W(7,1045765800,-1102627253,1030853145,1024477884);sum2=W(0,1047134358,1032860761,1058187056,-1089859690)+W(1,-1073724300,-1113017653,-1123513506,1005834992)+W(2,-1100773581,1019143260,-1086969962,1060822499)+W(3,1074524802,-1127402252,986153015,1026902445)+W(4,1038575217,-1097448906,1050436365,-1092585260)+W(5,-1097001013,1052022456,-1101541136,1040058169)+W(6,-1121016162,1027754828,-1118814167,1047705700)+W(7,992280012,-1115523910,1026625966,-1115254226);WS(1065625968,1033455989); +sum1=W(0,1037701789,-1137040283,1000406064,-1094784938)+W(1,1050863995,-1103592251,1032127959,1038622703)+W(2,-1151616802,-1099349487,1047711372,-1115632781)+W(3,-1088133648,1049293870,-1118922740,-1120882929)+W(4,-1102944307,1053320242,-1098462560,1053161728)+W(5,1049613697,-1128175786,1017489163,-1119810116)+W(6,1035789757,-1106274637,1048627484,-1098374228)+W(7,-1120581030,-1114622845,1038993832,-1165953346);sum2=W(0,1035866397,-1103116216,1059558286,1058384307)+W(1,-1096953271,1042132369,-1111426470,-1128202268)+W(2,-1099238508,1047962584,-1082734190,-1088122523)+W(3,1056069525,-1106560803,1038442279,1028886015)+W(4,1052038184,-1105248240,1057669233,-1091086098)+W(5,-1083280561,1032403631,-1104452063,-1150402298)+W(6,-1107491561,1027069673,-1098068789,1053762892)+W(7,1064349048,-1107462772,1040922744,1012204557);WS(1066439152,-1108830929); +sum1=W(0,-1102916748,-1108788820,-1097607254,-1099017414)+W(1,-1168846782,-1109193920,-1128476473,-1106724277)+W(2,1055608939,1051866141,1058768962,1030462560)+W(3,-1113005110,-1109987210,-1109670205,-1105116142)+W(4,-1103898045,-1097938907,-1093577324,-1125603603)+W(5,1040477611,1050862423,1039038758,1053895221)+W(6,1013732302,1035488645,1043113957,1027216291)+W(7,-1143171172,-1118580993,-1107320747,-1107171108);sum2=W(0,1050905005,1051922636,1052154527,1005525738)+W(1,1024591478,-1094205878,-1094330307,-1105421569)+W(2,1051409035,-1107944278,1040207956,1060123319)+W(3,1032045878,-1096175996,-1086096303,-1081193369)+W(4,-1123874142,-1131839644,-1100926997,1046139234)+W(5,-1113252250,1039675350,-1128729660,1062516858)+W(6,-1099079861,1035659117,-1109355656,1029590720)+W(7,1032543174,1044310065,-1129395200,1042520685);WS(-1094347903,1040885342); +sum1=W(0,1027015666,-1097151811,1050782150,-1106442815)+W(1,1051184308,-1091810963,1034433919,1042242605)+W(2,-1119901274,1047615033,-1115052947,1051587896)+W(3,-1105704339,1046407197,1009768300,-1122889273)+W(4,-1109404651,1051228067,-1096976391,-1096200649)+W(5,-1126487153,1040585575,-1132445914,-1108464678)+W(6,-1145327523,-1096635113,1048638245,-1105180361)+W(7,1051518582,-1092825760,1038762547,1040013733);sum2=W(0,-1121205117,1031829824,-1105324964,-1090390675)+W(1,-1110420773,1018005966,-1113281242,1032068637)+W(2,-1124056141,-1109805410,1045427632,1059020251)+W(3,-1107061510,-1118368537,-1115675784,-1113920834)+W(4,-1106581817,1007706034,1046732003,1057752640)+W(5,-1101115525,-1103994134,1036673543,1042522746)+W(6,1026565438,1029970286,1047283254,-1089850616)+W(7,1031976810,1036394258,-1112565336,-1145818031);WS(1066366016,-1121083386); +sum1=W(0,-1127500850,-1122305754,1025706181,-1104671484)+W(1,1043832110,-1111488580,-1123271764,1015742169)+W(2,1026624689,-1114017662,-1088657475,-1098749979)+W(3,-1085705014,1037547214,-1112264441,-1105147876)+W(4,1013565235,1052467062,-1121688536,1066224034)+W(5,-1112016562,1041900405,1043675185,1022047173)+W(6,-1127181143,1035730049,1045310349,1026340635)+W(7,-1121566277,-1127673329,998683632,-1132045794);sum2=W(0,-1102951634,1044058166,1037657608,-1091261805)+W(1,1057746121,-1106029228,1006392595,-1119100020)+W(2,1043023116,-1093545812,-1093647750,1070997171)+W(3,-1082044166,1051593249,-1100798567,1013819138)+W(4,-1104735391,1058451408,-1104370519,-1105620254)+W(5,-1091103100,-1096225251,1052307063,-1121077487)+W(6,1035018995,-1112978123,1043811519,1052846459)+W(7,-1097428497,-1127092852,-1107453736,1041369362);WS(1059191103,1030618557); +sum1=W(0,1034200101,1053678608,-1114145283,1047695489)+W(1,-1114663316,-1137634576,-1125278731,-1138534517)+W(2,1032351793,1049973094,1058794603,1053292689)+W(3,1055818163,1053263444,1041016873,1043320696)+W(4,-1100440271,-1098031908,-1087452589,-1078695803)+W(5,-1125225546,-1094543429,-1116533557,-1104858229)+W(6,-1148363237,1026486548,-1194991971,1043453347)+W(7,1033675947,966472909,-1115520783,-1119664758);sum2=W(0,1021496216,-1072453458,-1079530578,1063841069)+W(1,-1095958945,1042172731,1015153576,-1132334880)+W(2,-1095812325,-1094113031,1068683999,1074699170)+W(3,1043477830,1031880682,-1121439437,-1115200049)+W(4,-1116672596,-1112299630,-1135088113,-1126165044)+W(5,-1107446259,-1119142347,1037216194,1034903618)+W(6,1031503244,1023122856,1036078566,1036242384)+W(7,-1100441243,1009915385,-1114450875,1017712520);WS(-1096433855,1052342409); +sum1=W(0,-1117693364,1041070378,-1105417036,1052133240)+W(1,1042648272,-1123398616,1044512510,-1105041790)+W(2,1042163431,-1095385709,1060080198,-1090036408)+W(3,-1090327769,1043184694,-1111854479,1043408999)+W(4,1006023611,1034697390,-1109633387,-1085473397)+W(5,1057448056,-1105658040,-1104977148,1041051171)+W(6,-1113444755,1049542464,-1112382959,1048891757)+W(7,-1111238376,-1106505885,1049508979,-1110665802);sum2=W(0,1039259027,-1119373866,-1086821333,1052826002)+W(1,-1117342490,1036052293,1037381955,-1101694007)+W(2,1043188759,-1082984200,-1077733706,1067327309)+W(3,-1149070344,1052358305,-1102382047,1050777563)+W(4,-1165551167,-1105050294,-1103802686,1068967257)+W(5,1054626023,-1101813629,-1103461210,-1106555317)+W(6,-1113326246,1045229872,-1109909290,1052700624)+W(7,-1098764713,-1099183932,1052205497,-1096821402);WS(1046655614,1069864308); +sum1=W(0,1035633391,1040943483,1045417382,1043913370)+W(1,1050212129,1047844019,1039058852,1043891960)+W(2,-1106200785,1031319761,-1120751363,-1093886310)+W(3,-1098821847,-1088130094,-1092291401,-1082722808)+W(4,-1105260712,1026979270,-1106053451,-1121044950)+W(5,1042106970,1049054225,1041620790,1042598038)+W(6,1050507575,1034433460,1045765948,1041581532)+W(7,1029812249,1017929306,1028938706,1034869942);sum2=W(0,-1098805029,-1101136548,-1094351375,-1097728468)+W(1,1040878916,1049713965,1037060075,1058810464)+W(2,-1082465618,-1084472150,-1085764460,-1140347496)+W(3,-1100091144,1049328541,1062808960,1071144827)+W(4,1017798412,-1108050411,1031330790,1053843229)+W(5,1043199898,986797508,-1119994130,-1097822096)+W(6,1045866690,1039888035,1027046574,1038111290)+W(7,-1100094208,-1104239104,-1098800085,1017716576);WS(-1077527440,1065234224); +sum1=W(0,1031059492,1014606833,1041495444,1031584061)+W(1,-1143158030,-1140389945,1035424519,1013235228)+W(2,-1088676934,-1098001853,-1087241405,-1083911392)+W(3,-1095088526,-1096536807,-1104484775,-1100223239)+W(4,1055802445,1051162632,1059501583,1061276187)+W(5,1050088278,1049527800,1042937212,1037087943)+W(6,-1159469258,1001612013,-1109463457,-1105280809)+W(7,1038556792,986827883,1030875577,1047418837);sum2=W(0,1026928347,1006719462,-1103317527,1043604137)+W(1,-1106627965,1034526167,-1117999031,-1134258967)+W(2,1019217071,-1098369589,1041304779,-1134457784)+W(3,1048134757,-1118427047,1029994729,-1113504087)+W(4,1027288437,-1099640354,1050941648,-1112266437)+W(5,1027462477,1040843010,-1104465031,1054764710)+W(6,-1112677997,-1146387796,-1072403340,-1071428003)+W(7,-1082446250,1059493547,1072461191,1077848621);WS(1034219259,-1130863201); +sum1=W(0,-1122470601,-1125729883,-1119868741,-1092963050)+W(1,-1102984950,1017182198,-1107264969,-1116589116)+W(2,1036468120,1031973022,1045421587,1062931954)+W(3,1062738826,1050208654,990945063,1023027040)+W(4,1033355302,-1125640547,-1122038588,1044707408)+W(5,-1104269382,-1106320445,-1110744610,-1098846428)+W(6,-1104067775,-1112351746,-1106594245,-1094830635)+W(7,-1127079049,-1109997276,-1112571199,-1117279521);sum2=W(0,-1120041672,999703935,-1109032994,1041627711)+W(1,-1111815622,1029813110,-1110751572,-1114401610)+W(2,1041156572,1029144962,1037796455,1046556501)+W(3,1060385029,1040466231,-1103822492,-1076222058)+W(4,-1103868400,1036670980,1043292537,1059414852)+W(5,1048639871,-1105513272,-1100107078,1043280503)+W(6,1036471018,-1107170022,-1115113192,1029249656)+W(7,-1126242312,1043143286,-1101226736,1034327293);WS(-1097041087,-1081891922); +sum1=W(0,1045201037,1042240134,1049780286,1039927583)+W(1,-1122695635,-1110484942,-1117417409,1039840796)+W(2,-1097075376,-1091271089,-1094847921,1059654550)+W(3,1056430510,1057233913,1041827328,1050554535)+W(4,-1126257330,1049467348,1057610047,-1141428591)+W(5,-1089703504,-1087958744,-1096746586,-1096159486)+W(6,-1115394372,-1097795722,-1097045891,-1103383438)+W(7,1036098616,1033721138,1035539581,-1131932502);sum2=W(0,1012982255,-1101224821,-1109376974,-1116588919)+W(1,-1096183361,-1092858264,-1090462581,-1119652925)+W(2,1052214657,1042508745,1042044290,1071547407)+W(3,-1089469015,-1090264503,1039700797,-1083767147)+W(4,-1136022111,-1093748656,1045672838,1065241977)+W(5,1049249478,1047260540,1046964814,-1107087862)+W(6,1032353073,1020863779,-1113516472,1040242686)+W(7,-1120964187,-1103746594,-1100885683,1028764718);WS(-1088621983,1079497913); +sum1=W(0,1027161409,-1102075462,-1120075900,-1109063205)+W(1,-1104005172,-1136555883,-1112015962,1033292370)+W(2,1052712773,1051824794,1057942154,1060662493)+W(3,1062931830,1057800198,1047971474,1059753504)+W(4,-1102058289,-1098602113,-1096292664,-1082645434)+W(5,-1090788424,-1090185155,-1098101583,-1088742454)+W(6,-1100368317,1021667349,-1106147487,1039175801)+W(7,-1129475640,1036809656,1009161622,-1143403778);sum2=W(0,-1150684740,-1114056841,-1164208415,1034698244)+W(1,-1134574697,1043895716,-1101980686,1050191679)+W(2,-1095235693,-1115238312,-1080604054,-1071093346)+W(3,-1083926997,1068501149,1079699126,1056576712)+W(4,1044985054,-1127339724,-1106549807,-1080554397)+W(5,-1104923511,1052487431,1054997905,1029700329)+W(6,1035589955,-1108218072,1022130402,-1106288272)+W(7,1024268734,1036117000,-1130803558,1031345667);WS(-1087955103,1023517655); +sum1=W(0,-1106663590,1037773274,-1116651838,1022742037)+W(1,1040438284,-1117813952,1032561623,-1102318801)+W(2,-1090071677,-1103425461,-1089596734,-1082614473)+W(3,-1088542372,-1092404165,-1100716355,-1098396937)+W(4,1062902614,1055773525,1059014377,1060267482)+W(5,1057943128,1054561254,1051603940,1049819671)+W(6,1013889298,-1100022495,-1101161913,1030094516)+W(7,-1120043085,-1116951793,1035114019,1026546470);sum2=W(0,-1107653444,1032757863,-1150202006,1037010009)+W(1,1026258576,1041748319,-1131622502,-1112646994)+W(2,-1094858135,1061839668,1049735190,-1123088190)+W(3,-1089824138,-1098358767,1049699018,-1103776938)+W(4,1084595456,1074196920,1067688119,1070729644)+W(5,1050587980,1057889952,-1127981435,1048602984)+W(6,-1065438414,-1069856939,-1073375528,-1082206819)+W(7,-1086758222,-1097734258,-1106404220,-1098587943);WS(-1089607615,1063931357); +sum1=W(0,-1156148665,1033042784,1027235975,-1117005684)+W(1,1045226606,-1112863441,1040283212,-1102751384)+W(2,-1089422721,-1099513696,-1086976804,-1083936660)+W(3,-1089259880,-1092850238,-1096473171,-1096124078)+W(4,1059281720,1053472432,1060428066,1061258678)+W(5,1055780369,1057981025,1051704489,1054893029)+W(6,1041177357,-1107985659,-1122980350,-1103260375)+W(7,-1111710595,-1109580750,-1125267169,1035448166);sum2=W(0,1024298597,1037699935,1030404477,-1094400051)+W(1,1052543759,1024136176,-1159281410,-1102232478)+W(2,1074606150,1048614297,-1085515118,-1071672142)+W(3,-1091215560,-1095087497,1050441058,1071366890)+W(4,1080820206,1047271097,-1079656120,-1066721483)+W(5,-1078287609,-1096732136,1057126689,1074685383)+W(6,1030125639,-1121834510,-1166463196,-1101580999)+W(7,1028051862,1009399200,-1117118368,-1113696211);WS(-1083901183,1060981851); +sum1=W(0,-1106299749,1039492049,-1113140273,1055856482)+W(1,-1103186821,-1108369378,-1115937041,-1127954738)+W(2,1048978486,-1107896957,-1119192025,-1090009641)+W(3,-1088174932,1034759564,1008970428,1027686380)+W(4,1016862419,-1115539879,-1098481927,1058119768)+W(5,1052019064,1048477348,1034559233,1044214632)+W(6,-1121286832,1049662006,-1106196840,-1149152444)+W(7,-1101797848,-1146708651,1024756171,-1111878699);sum2=W(0,1030335348,-1110488253,-1096373435,1042224202)+W(1,1038378538,-1117770266,1036930446,-1168276161)+W(2,-1130369060,1056034410,-1097486091,-1094958491)+W(3,1057631708,-1114209587,-1105273765,-1115537765)+W(4,-1106797797,1040331307,1063611375,-1106971469)+W(5,-1093142933,1037075531,-1115233817,1025218793)+W(6,1006653296,-1094310491,-1113782011,1042512890)+W(7,-1140559356,-1114686161,-1115373149,1026640233);WS(1063762143,-1098158381); +sum1=W(0,1027555010,-1113176415,1044835884,-1094480963)+W(1,1042205032,1038186408,-1112247611,1041241393)+W(2,-1106988831,1049655577,-1089572014,1041189880)+W(3,1035602487,-1095655321,995617211,-1102946366)+W(4,1031921883,1032851437,-1106152127,1057311541)+W(5,-1100163979,1046700975,1050763922,-1119959180)+W(6,1033567284,-1099137927,1052671923,-1101762329)+W(7,-1106014811,1044902280,-1094051821,1044480349);sum2=W(0,1010916279,-1108274646,-1108043460,1049469526)+W(1,1061284555,-1097521196,1047936551,-1106103943)+W(2,1040615985,1037755544,-1107213139,-1085933104)+W(3,-1098201753,1027381238,1007266289,1039340208)+W(4,-1103581164,1053142923,-1091384808,-1093682556)+W(5,-1095835641,1044225612,-1101597200,1011948943)+W(6,-1126424725,-1119616718,1062997316,1050086980)+W(7,1044548392,-1099920539,1043928239,-1120667237);WS(1060336095,-1119657045); +sum1=W(0,1023788715,-1117126579,-1108875843,1022815367)+W(1,-1100562722,1043213137,-1111482971,-1142747249)+W(2,1048279897,1044311660,1062204714,1060724749)+W(3,1063043033,1050929706,1037241746,1051192212)+W(4,-1106238784,-1096869700,1019770348,-1081389759)+W(5,-1084472996,-1097593661,-1106654286,-1102133781)+W(6,-1110161279,-1136931731,-1115905233,1034904806)+W(7,-1124661292,1017832853,-1109716592,-1109353889);sum2=W(0,1036664563,-1103288529,-1102134383,1057556566)+W(1,-1099512639,1031668335,-1103860103,1028018661)+W(2,1009247708,-1126560341,-1067246446,1067728497)+W(3,1078180911,-1085231458,1047956293,-1114058193)+W(4,1013790140,-1102369678,1047852878,-1093152080)+W(5,-1110504691,1042704555,-1132621098,1030531898)+W(6,1035577258,1008412166,1016094574,1045655865)+W(7,-1123477495,1023608957,-1112760821,-1120624893);WS(1035518203,1045613832); +sum1=W(0,1044215468,-1096085823,-1102751483,1007706274)+W(1,-1098118842,1051305356,-1096250919,-1106455273)+W(2,1057279232,1043513429,1057361220,1061539183)+W(3,1057962612,1058710773,1037420261,1053125757)+W(4,-1097478568,-1096451901,-1091716958,-1085528932)+W(5,-1093017477,-1091718961,-1100741095,-1097230063)+W(6,1042423606,-1098498663,1012832112,1054368634)+W(7,-1103819295,1057808613,-1100568821,-1111733504);sum2=W(0,-1105709018,1050542737,-1106108137,1027983028)+W(1,1053295819,-1091042532,1049054259,-1108416827)+W(2,1058997495,-1084246791,-1103685622,-1106510960)+W(3,-1089515541,1066680974,-1088412186,1037143386)+W(4,-1086433444,1065459234,1055198365,-1102412567)+W(5,1057925132,-1080963495,1056230430,1049505110)+W(6,1022365788,-1101303092,1040995532,1044759128)+W(7,-1104466949,1043286350,-1096360229,-1106131860);WS(-1103921662,1072713673); +sum1=W(0,1042712209,-1130675027,1041149044,-1108819823)+W(1,-1099465033,-1102885798,-1108891552,-1122152216)+W(2,-1111681022,-1104528338,-1103688784,1055222237)+W(3,1063848575,1053207587,1051374172,1044600823)+W(4,1029885560,1032835743,1053127408,-1089836355)+W(5,-1089832742,-1090841456,-1098121506,-1101098252)+W(6,-1123292759,-1124533373,-1101763282,-1143773237)+W(7,1044926036,1032528402,1040294582,1018003689);sum2=W(0,-1116466906,1032691193,-1110682367,-1134651946)+W(1,1019799157,1020309206,1028255175,-1118897648)+W(2,1017580326,1031996320,1040673767,-1121084452)+W(3,1012141662,-1123645954,-1125118807,1005021204)+W(4,-1100144980,1045143645,1055366708,-1112456349)+W(5,1037079065,1036705771,-1112096331,1021253254)+W(6,1018640494,1067424527,1071822180,1057195246)+W(7,-1078565795,-1073530916,-1087156462,1033125682);WS(1054959295,1011151216); +sum1=W(0,-1124554365,1028540695,-1107828893,-1135601758)+W(1,-1135515507,1032466990,-1110097877,950109203)+W(2,1043778462,-1104732576,1063706911,1052343180)+W(3,1050410381,-1128754020,1034222620,1043960229)+W(4,-1140499785,-1111020475,-1098481604,-1081762405)+W(5,1053053447,-1112972157,1023071124,-1120112616)+W(6,-1103855992,-1113072532,-1121738665,1048654720)+W(7,-1096321673,1012954617,-1110289546,-1114439871);sum2=W(0,-1104841432,1047690020,-1084375561,-1086552004)+W(1,1046416693,1025710892,-1130856953,-1113936449)+W(2,1047456971,-1094867354,1068880529,1065412328)+W(3,-1080289298,-1110380578,-1105039836,1016290713)+W(4,1024424907,1033457856,1046341732,-1087761187)+W(5,1062384539,-1103331799,1024509174,-1126452938)+W(6,991739097,-1129013032,-1103560341,1059009805)+W(7,-1098849357,1045332030,-1104241974,1019994493);WS(1061669311,1066543312); +sum1=W(0,-1120030840,-1111872182,1046388965,-1109640224)+W(1,1051640445,-1104742312,1040612129,1018742870)+W(2,-1097490380,1051889621,-1085299564,1043197314)+W(3,-1099578605,-1114905437,1033952272,-1095793020)+W(4,1038501126,-1110528784,1050043436,1054292822)+W(5,-1095700775,1056051928,-1108619674,1044337364)+W(6,1026361650,-1112085217,1019064063,-1116217609)+W(7,1045441021,-1097066005,-1146667493,1039394788);sum2=W(0,1041249103,1040922446,1047169006,-1133026152)+W(1,1045305983,-1121038685,1032067159,986169209)+W(2,-1098300344,-1147221163,-1097103704,1055827658)+W(3,-1082349433,-1105225178,1036618956,-1102095468)+W(4,1041141085,1014590689,-1094689158,1056443342)+W(5,1051958562,1035590360,-1098250629,-1145857885)+W(6,-1123648820,-1115292810,1021735499,1023898168)+W(7,-1153021086,1038130213,1035045284,1030074795);WS(1066007616,1040865170); +sum1=W(0,1016703369,-1106398093,-1114560988,-1096325697)+W(1,-1094335779,1023023221,-1113231876,1022983872)+W(2,-1154003525,1038441464,-1112021256,1050813825)+W(3,1059033474,-1108543232,1040892233,1034570898)+W(4,-1104662792,1031083397,1052887594,1061249791)+W(5,-1126656183,-1106571274,-1121820472,-1115038347)+W(6,-1111826720,-1146451379,-1102003526,-1102172436)+W(7,-1104413998,-1109007926,-1112600993,-1123919488);sum2=W(0,-1117895883,1036640719,-1092695525,-1109277526)+W(1,1054484712,-1102073467,1047716642,-1115714917)+W(2,-1109314178,-1103775527,-1079308608,-1088245301)+W(3,1032194306,1058556412,-1097777200,1049638324)+W(4,1043196819,1047073701,1032498235,1071134194)+W(5,-1098274857,-1102222667,1028797614,-1109885254)+W(6,1029963629,-1117061975,1053147047,-1113344034)+W(7,1027577620,-1104158962,1019489703,-1106961770);WS(-1112959995,-1090797387); +sum1=W(0,998546749,-1102515009,1018649191,1024148768)+W(1,1036601843,991750171,-1134314668,1024106779)+W(2,-1107113888,-1157171375,-1095395659,-1088418302)+W(3,-1108499994,-1092700079,-1100812608,-1106951576)+W(4,1042251615,1043372984,1057847906,1049085946)+W(5,1054314562,1052242560,1010001228,1043704436)+W(6,1034524319,-1109045169,1025715818,-1107024218)+W(7,1036766314,-1102346050,1041369791,-1136260253);sum2=W(0,-1097076796,1000463738,-1083533587,1064100942)+W(1,1074997490,1043707697,1028507309,-1152835380)+W(2,1045091130,1024736081,1064625577,-1096201033)+W(3,-1071550159,-1106033160,-1118548401,-1111712908)+W(4,1028367411,1040206702,-1112850496,-1086258418)+W(5,1052069491,-1098690685,1050202273,-1113053149)+W(6,1016501386,-1122385083,-1104146558,1050125885)+W(7,-1105686824,1041978517,-1109567340,1032203802);WS(1065286463,-1155116140); +sum1=W(0,-1127743664,1036265535,-1118137852,-1121018025)+W(1,1024160014,1028265374,1031461691,-1116217572)+W(2,-1099417962,-1091060822,-1088882712,-1089265061)+W(3,-1088513194,-1090887512,-1097685517,-1096201501)+W(4,1047837241,1038987540,1061626690,1069311516)+W(5,1053957977,1051214117,1050330231,1045642342)+W(6,1035108393,-1121911642,-1119901843,-1100290432)+W(7,-1101311755,980641778,1030945477,1036102670);sum2=W(0,1023964675,1054178647,-1104607531,-1088748842)+W(1,1034720649,1027793575,1026748348,1048440611)+W(2,-1104287950,-1098771138,1030951671,1062304002)+W(3,1056993385,-1095484784,-1103591056,-1115722179)+W(4,-1095527688,-1106164282,1049293814,1069791349)+W(5,-1106129898,-1093744890,1040804508,-1102843948)+W(6,-1107378538,-1107123343,-1102317974,-1093097006)+W(7,-1107155572,-1104614583,-1111048704,1036145149);WS(-1107864827,-1106183398); +sum1=W(0,-1106667222,1032383543,-1104095901,-1105126732)+W(1,-1119082647,-1099092218,-1106477481,-1100466619)+W(2,1028246417,-1105288567,1024277645,1031807228)+W(3,1024663749,1059042594,1038514313,1061247795)+W(4,1062610107,1048732230,1033194034,-1097352540)+W(5,1042072353,-1097841594,-1132497297,-1116357250)+W(6,-1094330385,-1113355593,-1100412503,-1110531197)+W(7,-1106817153,-1119219065,-1116226478,-1112377140);sum2=W(0,-1124057659,-1107748661,-1106641450,-1106278570)+W(1,-1115427744,1045306633,-1107251222,1044220643)+W(2,1049202878,1029365940,-1100669682,-1090514146)+W(3,1050790854,-1101749265,1044664667,1051259000)+W(4,1055877653,1040631102,-1121942624,-1097531540)+W(5,-1095195500,1044511371,-1123742683,1035140356)+W(6,1043135164,-1120955446,1048773070,-1096084011)+W(7,1040842880,-1101432694,-1108344435,-1156279482);WS(-1107710971,-1103335008); +sum1=W(0,1020774038,-1097452822,-1103681302,-1142400543)+W(1,-1130541650,1035627390,1026485526,1026933710)+W(2,1057965326,1052789750,1061528673,1059882105)+W(3,1058381533,1052101646,1047827121,1048909172)+W(4,-1096736580,-1097416740,-1090723228,-1082070814)+W(5,-1096313647,-1092903493,-1095953623,-1094072619)+W(6,-1108312647,1007270548,1008435167,1032878150)+W(7,1024150455,1029066731,1024752368,-1129872006);sum2=W(0,-1091198687,-1096592719,-1088722291,1017819408)+W(1,-1104841225,1047280108,-1133964792,1046210234)+W(2,1051358993,1056674994,1050253089,1057806550)+W(3,-1098514434,-1095745001,-1121773836,-1101840089)+W(4,1026242284,-1102658445,1039492851,1048044980)+W(5,1047848116,-1114927114,1009730080,-1115459009)+W(6,1036983987,-1112372364,-1109827680,1033031265)+W(7,-1106004699,-1128936304,1044703642,-1121859563);WS(1046617982,-1079283690); +sum1=W(0,-1112235521,-1112371935,1046025067,-1114138877)+W(1,-1100106092,-1106636112,1006684852,-1134743124)+W(2,-1103103206,1005568807,-1082068590,1053438832)+W(3,1050481934,-1113851306,-1101804759,-1101795702)+W(4,1050398983,1053710959,1059470764,1056782757)+W(5,-1084354719,1044662919,1028720557,1040488963)+W(6,1031782004,-1112406582,-1109731202,-1120370051)+W(7,1047048563,-1114617505,-1122334215,1035089325);sum2=W(0,-1123583696,1041752924,-1096033091,1045050816)+W(1,-1111810372,1044170848,1035342189,-1107148363)+W(2,-1114190125,-1107057915,1054169171,1066165326)+W(3,-1090934807,-1094482563,1030376713,-1140242036)+W(4,-1123424510,-1108427412,-1101097272,1060681517)+W(5,-1093738003,-1094742214,-1122528198,1046835784)+W(6,1035265901,1011193218,-1097576107,1037309084)+W(7,-1094306097,1047478278,999245333,-1118953940);WS(1057107647,-1115492411); +sum1=W(0,1043432615,1017716083,-1115224236,1034158091)+W(1,1031606075,1040917102,-1119339928,1006053250)+W(2,1037909322,1044219192,1059480955,1055275264)+W(3,1062186253,1051479740,1036604907,1049031914)+W(4,-1092726398,-1094557923,-1089724826,-1079486955)+W(5,-1094016652,-1090199321,-1111430132,-1124163213)+W(6,1042270260,1036944691,1049175094,1036017407)+W(7,-1112299996,1012181234,1026270626,-1106538704);sum2=W(0,1018646782,-1107779390,1048577488,-1094766117)+W(1,1029078775,-1115207772,1041354677,-1134027235)+W(2,1037675363,1041358579,-1103110037,1063077105)+W(3,-1094239344,-1097294293,-1106609062,1005749079)+W(4,1056993548,-1114299594,-1108103869,1069120744)+W(5,1019393926,-1090842684,-1103795001,-1111892981)+W(6,-1095820604,-1106961783,-1113810892,-1094104293)+W(7,-1100654825,1030620215,1015746998,1031888221);WS(1038408187,-1104646224); +sum1=W(0,-1100666444,1032659338,-1096791479,1050254507)+W(1,-1125163769,1034716030,-1104041563,1024265746)+W(2,1031841147,-1095811512,1046629869,-1086582314)+W(3,-1092033141,-1095590162,1012740704,-1097384267)+W(4,1045835257,1046356758,1055310447,1049546009)+W(5,1059064223,1032941357,1016606100,1043234370)+W(6,-1121385297,-1115316924,-1109718991,1043876936)+W(7,-1115882186,1051195252,-1110386378,-1121465454);sum2=W(0,1033146053,1034495435,1033891153,1015618236)+W(1,-1102272365,1026402836,-1126192412,-1130670616)+W(2,1033178697,1013274853,1044565157,-1083473003)+W(3,1047899954,1033829854,1026659107,-1129244632)+W(4,-1110558215,-1103797816,-1074394842,-1075035519)+W(5,1070896015,-1107786181,1039466503,1033633210)+W(6,-1107600367,1046600596,-1096372667,1071496075)+W(7,1070598351,-1103057086,-1099451771,-1106841766);WS(1060540543,-1145107984); +sum1=W(0,1016949312,1033700674,1008485935,1050394829)+W(1,1025975118,1027755062,-1166944971,1036625882)+W(2,-1111708420,-1115158282,-1112773425,-1105627788)+W(3,-1166436080,1049090616,-1131929874,1027903943)+W(4,999025948,1037057540,-1111113150,-1105528438)+W(5,-1092533512,-1097657169,-1125616567,-1104970374)+W(6,-1110878953,1034636061,1006219749,1047777444)+W(7,1034379342,1023310559,1042471825,1029991232);sum2=W(0,-1112727972,1041061913,1030171918,1049192765)+W(1,-1097932217,-1108991614,-1128255593,-1128975721)+W(2,1028528033,1047913039,1058299937,-1088725965)+W(3,1006741474,1028842331,-1119404040,1019613109)+W(4,1050127712,-1120606988,-1075312291,1051042420)+W(5,1061621025,-1120436768,1041035795,1038145345)+W(6,1039139414,-1090975722,-1096898908,1056682084)+W(7,1043329296,-1136718330,1019658885,1017746289);WS(1058512095,1047466767); +sum1=W(0,1025672397,1032743763,1046625694,1040236986)+W(1,1041791363,1042422310,1024317081,1034505416)+W(2,-1102753041,1015664161,-1102686879,-1099087483)+W(3,-1097904327,-1097334084,-1123206279,-1096407969)+W(4,1037445664,1032570339,-1091026739,-1089271035)+W(5,-1100626131,1051389809,1041773046,1050962859)+W(6,1037433000,1033220516,1035056566,1024398415)+W(7,1043847942,1042353123,1037697617,1047698739);sum2=W(0,-1111694157,-1113457231,1007020677,-1110494513)+W(1,1036239980,1042151096,1014804229,1038268008)+W(2,-1097429792,1040318944,-1109123041,-1087577139)+W(3,-1115766281,1033854974,1056323633,1058473731)+W(4,1052756319,-1131566802,1066240251,1071158756)+W(5,1055974927,-1085216854,-1076147337,-1078122726)+W(6,-1115035673,-1108486657,1057627634,1052796029)+W(7,1037312144,1031946717,-1107413695,-1088208012);WS(-1087119871,1051442968); +sum1=W(0,-1106951233,1026199466,-1111827529,1034911407)+W(1,-1110066258,1036906330,-1121489041,-1123695161)+W(2,-1101188351,-1102133666,-1096477343,-1081083296)+W(3,-1093686286,-1089794286,-1102503648,-1096524016)+W(4,1055191809,1046522759,1061746551,1062137809)+W(5,1056808794,1061657374,1025414769,1043754020)+W(6,-1118371512,1024298399,-1102462991,-1118895495)+W(7,-1105243164,1028468933,1001909715,1039027467);sum2=W(0,1036012528,-1136414534,1028357901,1018170307)+W(1,996800246,-1115554829,1018408279,-1128152611)+W(2,-1111568121,1023613585,1046290638,-1086518431)+W(3,1032866656,1040198779,-1115393969,1031067220)+W(4,-1125130883,1037328619,-1077265349,-1068062671)+W(5,1083861052,1057186482,-1101393956,1024816461)+W(6,1019317279,-1141870971,-1105362146,1041918725)+W(7,1040576139,-1110577355,1032099345,-1109411807);WS(1041081598,-1101063046); +sum1=W(0,1038662072,-1105628103,1046838359,-1112508084)+W(1,-1112561351,1047812813,-1106996345,1045311157)+W(2,-1123374599,1048894326,1044003395,1062900743)+W(3,1058339600,1041428913,1044355834,1013224727)+W(4,1035193857,-1098151405,-1109376817,-1082115704)+W(5,-1087104856,-1097118497,-1098603955,-1110120844)+W(6,-1104056554,1009505700,-1107771451,1039692648)+W(7,1049374543,-1126547869,1037690530,-1121969199);sum2=W(0,1034938637,-1110454828,1044300205,-1094841314)+W(1,1049263704,-1123904781,1032882093,1018550156)+W(2,-1102665080,1066739686,1063593500,-1072571644)+W(3,1050585763,1033188794,1040935597,992411043)+W(4,-1083931487,1057500561,1069787057,-1073076170)+W(5,1057940110,1049962317,-1103057884,1032437745)+W(6,-1096043986,1050111041,1057117236,-1094917255)+W(7,992791419,-1119131193,-1129197337,-1139242755);WS(1047493374,1019974383); +sum1=W(0,1039818779,1022499782,-1111466513,-1128872350)+W(1,-1102282821,1027318580,-1112367361,-1121442618)+W(2,1024992878,1056719767,1056992349,1066523241)+W(3,1057279594,1050310409,1043633508,1050332018)+W(4,-1099980259,-1093967742,-1089692488,-1081677329)+W(5,-1104336096,-1095763174,-1147598863,-1103201160)+W(6,-1119405261,1017537921,-1134657044,1032226588)+W(7,-1110606353,1029746358,-1105211995,-1109613299);sum2=W(0,-1109381660,1024006001,1048332575,1030946168)+W(1,-1111460550,-1115660792,1027780517,-1125113546)+W(2,-1099927212,1048105027,1083214625,-1068785948)+W(3,-1080184440,-1125303858,-1129923962,972536438)+W(4,1032613200,1031703418,1051352300,-1082836395)+W(5,1047472657,1027323348,1006215943,-1123338357)+W(6,1013674604,-1113331152,1010546556,-1137462284)+W(7,1033485356,1034637753,-1112671380,1033990282);WS(1049191295,1026054180); +sum1=W(0,1015431080,-1114491642,-1106844240,1052544606)+W(1,-1101337172,1006821496,1048579163,-1107367092)+W(2,-1104530451,1045418990,-1091806904,-1092275830)+W(3,1032037152,-1091613549,-1136631349,-1104046587)+W(4,-1120791464,-1105318659,1059085476,-1096734436)+W(5,1055073816,1054997266,-1117752159,1054027444)+W(6,1041795830,-1107859847,1035107546,1050727987)+W(7,-1098252244,1024892180,-1114835508,-1107321874);sum2=W(0,1026733028,-1099170713,-1116840904,-1119731112)+W(1,-1105853851,1023766170,-1109160117,-1110446049)+W(2,1045033945,1052123052,1011374557,1034116255)+W(3,1042679995,-1103542762,1002727514,-1116987471)+W(4,1006278578,-1100795787,-1137517037,-1093051584)+W(5,1032967726,1030006514,1010971477,1032206215)+W(6,1045459634,1045732660,1036547859,1049735621)+W(7,-1115758581,1012804929,-1107202197,-1108882618);WS(1061349183,1052960956); +sum1=W(0,-1129777715,-1138324169,1040354025,-1113069161)+W(1,1026875928,-1148679486,1026350741,-1099366619)+W(2,-1091852750,-1098630008,-1086948121,-1087783598)+W(3,-1090578505,-1098392878,-1105317245,-1113156712)+W(4,1051531432,1050117038,1058780391,1063142264)+W(5,1054898923,1055753851,1035239971,1049214940)+W(6,1028688348,1001458973,1026112190,-1101543047)+W(7,1001807913,-1107707133,1009551482,1035358529);sum2=W(0,1030464194,-1114101658,1031167290,1076423743)+W(1,1075592137,-1122765276,-1073082101,-1067763317)+W(2,1016786912,-1111442214,1040962599,1052649879)+W(3,1059016603,-1109148248,1031660172,-1093716078)+W(4,-1124271380,1036708968,-1145350210,-1106763968)+W(5,1036666460,-1102467968,1040647493,-1123536642)+W(6,-1112870762,1035127660,-1119263136,1030450749)+W(7,-1114823676,1030453841,-1120712732,1004437586);WS(1049240575,1032641532); +sum1=W(0,1013730783,-1105480706,-1114036922,-1113879072)+W(1,-1104229785,-1108053747,-1114764169,-1146082265)+W(2,1058635434,1033988870,1060052265,1060507082)+W(3,1060417175,1056801557,1045744608,1050162924)+W(4,-1096215015,-1101342144,-1095577996,-1090178495)+W(5,-1088104859,-1096180920,-1096622362,1035143657)+W(6,-1112522509,-1114702617,1026538642,-1118644393)+W(7,1026113715,-1115402364,-1165415829,-1096614130);sum2=W(0,-1122276311,1035291415,-1120194245,1040446858)+W(1,-1120530587,-1138075205,1025217366,-1118638617)+W(2,-1070701037,-1088124412,1066415245,1074084237)+W(3,1049852139,-1122804719,1023048268,-1139513797)+W(4,-1102500792,-1135890037,1041496354,-1104713726)+W(5,-1121031703,-1103825640,-1123990667,1028358694)+W(6,-1123484857,-1122878839,1004310705,1043449641)+W(7,1033156545,1027648711,1022832518,-1136916673);WS(1058199967,1050173679); +sum1=W(0,1035142580,1027370573,-1130262537,1035504777)+W(1,-1114438555,-1117883815,1019391016,1002653538)+W(2,1049466778,1058691576,1039593430,1068404719)+W(3,1055172389,1049428736,1057860609,1038434456)+W(4,-1090097411,-1101732588,-1086371009,-1088745136)+W(5,-1085029652,-1087836907,-1099893249,-1090680108)+W(6,-1180331449,1040649373,-1120260556,1040680775)+W(7,1044382793,-1124005336,1042216563,-1112700144);sum2=W(0,-1116884059,1053572077,-1098664530,1052736946)+W(1,-1109898534,-1100793752,1049155169,-1110972354)+W(2,-1098591960,1057696884,-1094622297,1068603564)+W(3,-1110319390,-1092295148,1060435963,-1093610507)+W(4,1049382153,1027480579,-1090176467,1060239128)+W(5,1035982822,-1110105636,1048950002,1038370396)+W(6,-1103314039,-1088718218,-1083506692,-1093271444)+W(7,-1100206230,1032439700,1034453968,1006875670);WS(-1089372991,1071972514); +sum1=W(0,-1138920887,-1111770809,-1102811010,-1115715559)+W(1,1039086134,-1097310634,1031148825,1025838913)+W(2,1036533027,-1104793556,1055175791,-1099167419)+W(3,-1087507272,1049070430,-1119324807,1003453989)+W(4,-1102318256,1048489074,-1087761408,1059252133)+W(5,1053162297,-1114433380,-1118494745,1042268638)+W(6,994211079,-1105180974,1048668925,1002658941)+W(7,-1118760057,1015366427,1042346841,1035401151);sum2=W(0,1030112837,-1120976510,990074782,-1093456890)+W(1,1037465699,1026987255,-1141406991,-1139369648)+W(2,1042265630,1036120703,1034066763,1054439327)+W(3,-1093016348,1018637880,-1135344000,1039303764)+W(4,1026971571,-1114486026,1060265655,1048349987)+W(5,-1099844302,1021593632,-1122669452,-1105461723)+W(6,-1110663804,1036038820,-1093575269,-1097582212)+W(7,1034062294,1015927322,-1131991172,-1112258092);WS(1064707295,-1106068023); +sum1=W(0,-1099232505,1035233224,1008917721,-1113461090)+W(1,1030936392,1004172005,1027313190,-1115756158)+W(2,-1122722466,-1096714286,-1092366070,-1085444145)+W(3,-1087864449,-1089654074,-1109977746,-1096643772)+W(4,1050522762,1050648196,1057836626,1065526616)+W(5,1058128499,1053303385,1046037453,1045431365)+W(6,-1163785122,1029641572,-1106158547,-1112344246)+W(7,-1120989814,1023496586,-1132212895,1026679026);sum2=W(0,-1064765544,-1081497441,1073825520,1076205171)+W(1,-1119211273,1027623494,1025169073,1044157267)+W(2,-1093639717,1052279998,1049786220,1062543003)+W(3,-1112239696,-1095053933,1041086677,-1111173396)+W(4,1043466147,-1106897145,-1111313590,1028519541)+W(5,-1110796836,1038884306,-1138045203,-1103601885)+W(6,-1118670633,1026058867,-1120615525,1005098917)+W(7,1002459349,1024155429,-1139354443,1031190784);WS(-1111449083,-1157616163); +sum1=W(0,-1140902742,-1108906886,-1107746707,-1091492130)+W(1,-1106259270,-1123578095,-1112828291,-1129218172)+W(2,1050785866,1041550344,1063519767,1070223306)+W(3,1056548545,1033679887,1033485706,1037279241)+W(4,-1096435822,-1095149714,-1097214657,1059314470)+W(5,-1091358630,-1102873285,-1098893397,-1105253969)+W(6,-1106580347,-1111739842,-1112949561,-1090511327)+W(7,-1115482851,-1102694659,-1119291392,-1105806553);sum2=W(0,1036877913,-1107073590,-1107699229,1043855187)+W(1,-1112562117,1015957137,-1137092650,-1113777301)+W(2,-1106537131,1029358898,1059152956,1059494373)+W(3,-1100478450,1042289801,-1117856531,1034651775)+W(4,1030920508,-1148982309,-1101290720,1057939604)+W(5,1054005616,-1078154452,1052159854,-1095096566)+W(6,-1107276407,-1158332371,-1104066278,1057817844)+W(7,-1089434898,1041374005,-1109759735,-1112996199);WS(-1078462192,-1081042006); +sum1=W(0,1031777492,1032754472,1041664052,-1097597536)+W(1,-1104816664,-1113883983,1034668408,-1123431127)+W(2,-1099264287,1043123090,-1089905073,1061087074)+W(3,1058804947,1049386855,1033759807,1048603595)+W(4,1046006998,-1098614104,-1129274543,-1106235787)+W(5,-1084543524,1054195792,-1107840264,1024992909)+W(6,987183826,1036343655,1009990171,-1097811109)+W(7,1031138063,-1097275448,1026038601,-1120606380);sum2=W(0,1045113399,-1114091637,-1107885511,-1138476145)+W(1,-1105540689,1035866831,-1106333432,1027850472)+W(2,1042319052,-1104675582,-1091877193,1051152873)+W(3,-1091823953,1034466874,1039480371,1012452041)+W(4,-1096815184,-1111655631,-1112520325,1061790396)+W(5,1058061302,-1097657024,1040922298,-1158709515)+W(6,-1116743882,-1101972302,1050965596,1049921296)+W(7,-1092103725,1042351236,-1102843808,-1125733657);WS(1056694143,-1116016311); +sum1=W(0,-1113789237,-1100431022,1050877939,1018856325)+W(1,1050520537,-1097203011,-1103919120,-1146363818)+W(2,1051083644,-1126988186,1064972735,1040063173)+W(3,1063261729,1049408537,1026641091,1053332672)+W(4,-1097139864,-1094809972,-1089357240,-1094444318)+W(5,-1089641983,-1094346349,-1100978845,-1097363714)+W(6,-1123205479,1034447326,1036660918,-1108178982)+W(7,1047968461,-1113292277,1038849023,-1114302469);sum2=W(0,-1117908102,1013765983,1045942570,1086231745)+W(1,1048993826,-1110131683,1005670802,-1126497913)+W(2,1019359999,-1145413682,-1095749402,-1062836828)+W(3,-1094656357,1037693606,-1125761673,1018172516)+W(4,-1120905960,1028148573,1032861566,-1087097136)+W(5,-1145044098,1040390747,-1112982831,1016402027)+W(6,1017197102,1027705717,-1127537989,1031521084)+W(7,1027867224,-1114691836,1031905995,-1122299754);WS(1058898623,-1129627348); +sum1=W(0,-1115961291,-1114910804,-1099814536,1014875535)+W(1,1042946610,1008636276,-1106406626,-1120594878)+W(2,1024824451,1028416398,1053775806,1049045373)+W(3,-1081844071,1031972351,1007262993,1044145240)+W(4,1015893437,-1107386562,-1081677098,1054905786)+W(5,1057687981,1045923489,1043411542,1016529769)+W(6,-1111982511,1040362701,1049488325,1016424474)+W(7,-1105282974,-1118478155,1018226304,1008933435);sum2=W(0,-1133545882,1048887568,-1092588040,1040041167)+W(1,-1098849827,1009986974,1044263399,-1120224962)+W(2,1024635319,-1104650552,-1106613727,1061771033)+W(3,1059347143,1020453405,-1100016935,1003801667)+W(4,-1123675276,1009836758,-1090053582,1063348295)+W(5,-1095509129,-1091467004,1034750124,1013849670)+W(6,1049399700,-1109494815,-1105276085,-1099749985)+W(7,-1094328117,1040581639,1041257354,-1116729410);WS(1051954047,1053754534); +sum1=W(0,-1115617616,1024010640,-1105864485,-1104806436)+W(1,-1109064955,-1116880702,-1125878182,1017392662)+W(2,1038078984,1036755054,1063482792,1054877383)+W(3,1061183100,1032370277,1043596932,1041423460)+W(4,1012663597,-1111840872,-1094956956,-1088048944)+W(5,-1092794954,-1106496725,-1106933961,1027390113)+W(6,-1106689047,1027644834,1000291764,-1099610254)+W(7,1030290339,-1110075188,-1134690355,-1125796047);sum2=W(0,1032585330,-1120362784,1053495069,-1103911013)+W(1,-1152525762,-1128147020,1012657824,-1104983105)+W(2,1041153226,1038083675,-1085822417,1062089523)+W(3,-1088542584,1044421032,-1113855086,1041652917)+W(4,-1098242715,-1097998955,-1097864806,1056336567)+W(5,1061326318,1046053205,1042938789,-1160964996)+W(6,1045110917,1041971655,-1094674500,-1090235355)+W(7,-1100885631,-1141849761,-1114518568,1032164357);WS(1061027871,-1104546242); +sum1=W(0,-1105616597,1044372474,1021564129,1044930783)+W(1,1046184033,1039863327,1037242932,1036593932)+W(2,999947493,-1093243621,-1093936864,-1082760108)+W(3,-1089254915,-1087020314,-1095491356,-1089177610)+W(4,1020340785,1054887248,1050165368,1059757863)+W(5,1059995997,1055330116,1049586618,1053764638)+W(6,1044086916,-1111771647,1042456335,-1109427891)+W(7,-1109416824,-1114227250,-1119355674,1025046581);sum2=W(0,-1071093827,1026041138,1068370917,1068180608)+W(1,-1099034443,-1126398467,-1114641099,1032038973)+W(2,1060306884,-1087262504,-1080863241,-1104665609)+W(3,1065726420,1036496204,1052019191,-1112342652)+W(4,1049935328,-1137957530,1024099582,-1097098353)+W(5,-1115701817,1043337171,-1155572887,1039831002)+W(6,-1107356858,1030953599,1026067688,-1149593287)+W(7,1031805059,-1111590832,-1110320626,-1165279566);WS(-1085156031,1045210454); +sum1=W(0,1032928297,-1111119484,1023710638,1012189550)+W(1,-1119437633,1039427612,-1114651991,1039591187)+W(2,1062377574,1050029461,1062121112,1061895670)+W(3,1058328143,1050106073,1051812528,1050020631)+W(4,-1090582815,-1097825399,-1087364538,-1084850381)+W(5,-1086721078,-1087870448,-1095972450,-1089842983)+W(6,-1097791665,1025846477,1032229097,1038427330)+W(7,1040335420,1036234257,1026163704,-1146480404);sum2=W(0,-1123647935,1039341132,1035983028,-1100132407)+W(1,-1107056231,1035406254,-1116224056,1039408558)+W(2,1061817512,1048143772,-1106274437,-1080635557)+W(3,-1101127944,-1113472410,1025367216,-1101636583)+W(4,1083879676,1075567701,-1081957201,-1069811820)+W(5,-1080342730,-1083251742,-1113852980,-1087422720)+W(6,1056516802,1037735150,1028242764,-1096421593)+W(7,1035329144,1030744652,-1094803270,1049804166);WS(-1079692512,1054562755); +sum1=W(0,-1109749038,-1107273417,-1102577952,1030213964)+W(1,1036563817,1046944740,1031914983,1050658577)+W(2,1042438683,1049923207,1044388569,-1113189609)+W(3,-1089184118,-1087748930,-1096053014,-1091524869)+W(4,-1092016161,-1091034933,-1089719139,1050309800)+W(5,1048990040,1053009554,1048709856,1049517424)+W(6,1050333996,1042543591,1055304278,1034159515)+W(7,1040366472,-1122229091,1006842402,1034826102);sum2=W(0,1041125733,-1097603156,-1103003109,-1107000988)+W(1,1032085636,1048646468,-1094740103,1056003520)+W(2,-1094982607,1045744428,-1102781952,1063877853)+W(3,-1096755169,1041101455,1038162032,-1106723297)+W(4,1055140379,1049918932,-1106862916,1066829095)+W(5,-1090474230,-1081598978,1049572267,-1085369603)+W(6,1061130686,990353951,1058588396,-1096233798)+W(7,-1095838692,-1089860215,-1096717844,1044183141);WS(-1080283264,1053171958); +sum1=W(0,1045885175,-1113658461,1034538909,974135701)+W(1,-1122513036,-1118011958,998696774,-1108239136)+W(2,1054395509,1050045174,1055879386,1060600957)+W(3,1061640838,1060753746,1054788217,1061053402)+W(4,-1083475508,-1095192933,-1085810962,-1084797135)+W(5,-1086057732,-1087204563,-1092652351,-1108529436)+W(6,1028512496,1035446876,1026195253,1044250612)+W(7,1037521197,-1117222317,1038575473,-1101819472);sum2=W(0,1049760823,-1132622893,1033001558,-1136534149)+W(1,1043696998,-1092886300,-1098156850,1058228696)+W(2,1082611215,1077078383,1066257283,986681348)+W(3,-1084657320,-1069070549,-1072372844,-1074505611)+W(4,-1114287788,1055018182,-1101461080,-1078537691)+W(5,1054805894,1065047159,1049854091,-1082348593)+W(6,-1130959534,1035090608,-1112584386,-1090394759)+W(7,1058031741,1038822180,1041633511,-1115499033);WS(-1073398920,1057727890); +sum1=W(0,1041979362,-1106188342,-1108985859,1040300287)+W(1,1044683952,1046284093,1044621499,990388050)+W(2,1052994159,1056847849,1060197326,1059196498)+W(3,-1094535618,-1094105983,-1102914751,1043962286)+W(4,-1092671491,-1087976920,-1085676269,-1108460501)+W(5,1051731585,1046385743,1031818215,-1104493131)+W(6,-1110295050,1033778006,1040328063,-1114468666)+W(7,-1102804911,-1098429184,-1104640754,1033981777);sum2=W(0,1021160276,-1093219342,-1089562294,-1106388958)+W(1,-1099093932,-1180890998,-1090965228,1057228486)+W(2,-1089430647,-1135654176,-1079796815,1074674993)+W(3,-1098010580,1052929457,1040584224,1047748991)+W(4,-1102895535,1044152573,-1095163331,1074136497)+W(5,-1095203310,-1099885509,1041387674,-1131585606)+W(6,1031984432,-1096279754,1011763192,-1101895278)+W(7,-1117345690,-1095468231,-1107912603,1045144673);WS(-1087643711,1073414034); +sum1=W(0,1043421796,-1116796288,1042590607,-1098636497)+W(1,1008405302,1005024220,-1106384411,1029633907)+W(2,1043019738,1056957030,1048028053,1065994910)+W(3,1061262410,1059267719,1045820026,1054563645)+W(4,-1091862260,-1093379129,-1089120888,-1081315117)+W(5,-1088787029,-1093593189,-1108751805,-1106230054)+W(6,1028452722,-1112484637,1043084437,-1120978641)+W(7,1046109207,-1105879924,1024805700,-1095994501);sum2=W(0,1015257573,-1117575950,1040590395,1040031817)+W(1,-1104875608,-1111928738,-1124331304,-1104400845)+W(2,-1101361376,1051853927,1007636882,-1085239439)+W(3,1029484438,1055085469,-1104410806,1055334030)+W(4,-1151605286,-1126719224,-1099060090,-1069257368)+W(5,1078894141,1065488662,-1097362053,-1099504604)+W(6,-1114431290,-1122150057,-1123376079,-1122292554)+W(7,1045790053,-1105709439,1046590167,-1096100911);WS(-1089052703,1050218486); +sum1=W(0,1024924308,-1124263665,-1114112032,-1101857739)+W(1,1004177297,-1132101549,1037546120,-1127618735)+W(2,1032977094,1048865735,1032370348,1057017435)+W(3,-1096925880,-1106597310,-1101706323,-1138126252)+W(4,-1127622480,-1103037451,-1093324152,-1130658874)+W(5,1049797356,-1147023991,-1148374781,1041185327)+W(6,1016061078,1027347950,1047024376,-1114101947)+W(7,-1136753151,-1136950735,1016234194,-1135392976);sum2=W(0,-1103127935,1034551493,-1131095837,1056852609)+W(1,1041291951,1031312786,-1119687326,-1125922018)+W(2,1033687244,-1111330163,-1111327049,-1097897810)+W(3,-1092598078,1027703970,-1119650108,1037109557)+W(4,1044282132,-1132159854,1043675418,1038437355)+W(5,-1085166716,-1122838335,1030316614,-1115941571)+W(6,-1115309191,-1101537844,989659429,-1126658673)+W(7,-1101159602,1065573620,1035948285,1021015548);WS(1065854560,-1114586365); +sum1=W(0,1025132845,-1132208108,1043375962,1036127555)+W(1,1042813603,1042302785,1041475414,1044294516)+W(2,-1093129789,-1097600366,-1094779500,-1085251325)+W(3,-1085614646,-1083792532,-1088034874,-1081301837)+W(4,1039292161,1047014713,1054220253,1059484531)+W(5,1058902029,1058554289,1049492791,1057966909)+W(6,1052478106,-1114318540,1045472794,1040640636)+W(7,1026772633,1030110605,-1123458066,1048041627);sum2=W(0,-1082315074,1044643809,-1098370418,1032322202)+W(1,-1088636595,1057109638,-1093539506,1061431798)+W(2,-1085719643,1026206592,1060376399,1066420950)+W(3,1042910065,1025783712,-1117795056,-1120476284)+W(4,1072912386,-1098026838,1068488422,1072201946)+W(5,1055106268,-1087763572,-1084317601,-1077472196)+W(6,-1097858732,-1097387905,-1097681385,-1095903963)+W(7,-1092707091,-1104219349,-1087895305,-1105350768);WS(-1071370880,1080498273); +sum1=W(0,-1117491793,1039364315,1035846886,1023528601)+W(1,-1131889533,-1106314247,1028375004,1013100112)+W(2,-1117320376,-1100646881,-1094786920,1045848824)+W(3,1057069771,1055228236,1020389492,-1127017775)+W(4,1025681812,1049740511,1058631773,-1094741601)+W(5,-1088346742,-1102894479,-1138962992,995411618)+W(6,-1112958490,-1103504723,-1105396320,1032469201)+W(7,1034336534,-1144513794,-1116565942,1002008579);sum2=W(0,-1097850747,-1107398437,-1085613590,1042292809)+W(1,1054106205,-1106648125,1035361236,-1122554235)+W(2,-1108946242,-1114277717,1063125687,-1084555354)+W(3,1059764079,1041901467,-1103098774,-1148617751)+W(4,-1129761151,-1118690429,1040789135,-1101999238)+W(5,1051725304,-1128317719,1022272136,1025957669)+W(6,1024320851,1012636527,1029278628,1026191463)+W(7,-1119736004,-1127460399,-1115360404,997652141);WS(1058528159,1053906024); +sum1=W(0,-1112917396,1035675727,-1104938189,1040468760)+W(1,-1105254898,1020887917,-1113141838,-1149793215)+W(2,-1104256080,-1092229473,-1097223269,-1082484606)+W(3,-1103704557,-1100912091,-1118771074,-1099449368)+W(4,1023681564,1058833811,1051100098,1061928249)+W(5,1057519273,1047691241,1047329733,1044776397)+W(6,1039659283,1021887717,1033492802,-1119337706)+W(7,-1099217437,-1127325712,-1114402703,1024214504);sum2=W(0,-1129442596,1023778714,-1113953277,1026809294)+W(1,1035644478,1034718426,1016827280,1038084720)+W(2,1040644144,1033307012,1056896617,-1080168883)+W(3,1030172798,1046899220,-1114672577,-1138817753)+W(4,-1106302200,1056981996,1082625405,-1064674592)+W(5,-1098216535,-1107268878,-1138831353,-1118740750)+W(6,-1105488042,1014815489,1048992482,1043950232)+W(7,-1120732434,-1121557578,1026207834,-1122753582);WS(1050028863,1057904824); +sum1=W(0,1016998719,1031484924,-1113918453,1035763396)+W(1,-1100192683,1046082071,1023767163,-1109585801)+W(2,-1115527732,-1114471481,-1092713340,-1086973069)+W(3,1048884339,-1093669960,-1109475380,-1102684193)+W(4,1049960370,-1097014217,1059124695,1055821255)+W(5,1045748179,1046233018,972758359,1047341446)+W(6,1033316845,1045307870,-1113659631,-1113580281)+W(7,-1104759887,1024760783,1028768132,-1118597711);sum2=W(0,1042577042,1035985609,-1132583692,-1108557005)+W(1,1045882832,1049978360,-1123148614,1037998467)+W(2,1058174637,1022451597,-1083350192,-1102051996)+W(3,-1096734805,1040525485,-1111555351,1012738322)+W(4,-1093234196,1028288917,-1089654696,1066585170)+W(5,-1112976831,-1101233023,1016281700,1035922998)+W(6,1036828005,1036599280,1043707159,-1099096459)+W(7,-1117191962,1038823523,1010883764,-1106116243);WS(1064158815,1035299335); +sum1=W(0,-1112803360,987363362,1040202935,-1148543050)+W(1,-1119103150,1016866897,-1120253212,-1136961231)+W(2,1016610641,-1111853690,-1090418272,-1086418793)+W(3,-1096774480,-1106302329,-1125874772,-1111706212)+W(4,1043480489,-1116662313,1043761841,1062267936)+W(5,1026731899,1046949595,1044534239,1038415821)+W(6,1023721675,-1114846141,1040437218,1044974085)+W(7,-1112576238,1035797256,-1118929285,1017229376);sum2=W(0,982347958,1032509555,-1111294086,1034453505)+W(1,-1107492941,1047671755,-1114281099,1041657921)+W(2,-1130481715,-1105443060,1041532435,-1090026061)+W(3,-1115327745,-1099067440,1007189687,-1106888056)+W(4,1039697927,-1102232537,1059036310,1065332554)+W(5,1049776291,1035057967,-1116755236,1039394631)+W(6,1029826582,-1106323503,-1087181565,-1095157490)+W(7,1032022369,-1113855935,-1137758215,-1116441678);WS(1064590463,1056702913); +sum1=W(0,1029043770,1053372231,-1096751755,1042753121)+W(1,-1132040847,-1098166823,1054745035,-1101919647)+W(2,-1118119137,1049750478,-1090400466,-1089893441)+W(3,1035942347,-1098407696,1057009004,-1105867448)+W(4,1044521535,1040212560,1048069253,-1098259842)+W(5,1046519145,-1126503113,1029470901,-1137574860)+W(6,-1108622774,1055292354,-1086796959,1028130891)+W(7,1043794349,-1097599727,1057963224,-1099480944);sum2=W(0,-1112469736,-1109993908,-1113626244,-1101975228)+W(1,-1113395603,-1115391866,-1111764318,-1114050909)+W(2,1047380321,1048112351,1039961237,1053720344)+W(3,1033059361,-1117206471,1050486894,1029031616)+W(4,-1107309008,-1096267194,-1149218892,1041967405)+W(5,-1105421186,1041082150,-1097114178,-1116211284)+W(6,-1130012001,1044766357,1024449363,-1105185961)+W(7,1034928166,-1103730760,1041700935,-1133808950);WS(1049282175,-1081654589); +sum1=W(0,1026879882,-1106636470,1025593670,-1120434947)+W(1,-1109057316,-1103814142,-1108405355,1025046173)+W(2,1056840376,1051340514,1059046350,1060994015)+W(3,1062254571,1054415372,1044610849,1057281100)+W(4,-1089715922,-1103588481,-1087728227,-1081081863)+W(5,-1089160278,-1110084674,-1097611347,-1102762237)+W(6,1023576205,1019713064,1018583793,-1116831948)+W(7,1040563949,-1148705741,-1130543166,-1108038889);sum2=W(0,1021240677,-1117500355,-1104166105,-1110155670)+W(1,-1101525323,-1099065181,-1135933351,-1100288377)+W(2,-1112389783,-1154883848,-1102583420,1061056453)+W(3,-1123615532,1038434309,1041908272,-1120914319)+W(4,1025718250,-1096682611,1048911763,1065471868)+W(5,-1149445264,-1090281103,1042017461,-1131934595)+W(6,-1104779102,1051908652,-1093040032,1051220588)+W(7,-1113750073,-1098156535,1046751376,-1100861861);WS(1044733566,-1111466942); +sum1=W(0,1033634167,-1105078967,-1104340430,-1106426842)+W(1,-1101553619,-1110993602,-1113465444,1020428386)+W(2,1060020808,1041929508,1062221635,1060048443)+W(3,1059584252,1054717575,1044713794,1047352089)+W(4,-1092913556,-1103349137,-1092289734,-1090785767)+W(5,-1094348262,-1097827057,-1098824243,1041060918)+W(6,-1112663104,-1134753630,-1126194825,-1110397240)+W(7,-1114529117,-1113238887,-1140846474,-1094820883);sum2=W(0,1040248415,-1113076108,1043824330,-1105221470)+W(1,1036602392,-1134849104,-1163695359,1011808464)+W(2,1084299283,1066146464,-1073408210,-1067326117)+W(3,-1097425816,1016852200,-1119512248,-1118870508)+W(4,1054267917,1032173778,-1102778436,-1084477148)+W(5,-1149511007,1040914456,1026379762,1011171408)+W(6,1002599056,1029289900,1027082476,-1116688572)+W(7,1024010398,-1121212984,1007530464,1020903456);WS(1041204862,1020998748); +sum1=W(0,1041320410,-1111643799,1033147201,1033305824)+W(1,-1110534482,1048653459,-1106102028,-1129433652)+W(2,1040787048,1044400490,-1112000574,1057857240)+W(3,1058317173,1013490791,1040475768,1032979455)+W(4,-1129649268,-1096018340,1041936758,-1090212595)+W(5,-1083609992,-1108280561,-1098465902,-1104103124)+W(6,-1136864165,-1123167632,1014392453,1043382402)+W(7,1046901861,1040774794,-1121200123,-1123801518);sum2=W(0,1033367466,1036408153,1049195658,-1116950481)+W(1,-1081345874,1035726191,-1109751565,1034565507)+W(2,-1105739926,1041467605,-1097896497,1069287141)+W(3,1045676499,-1097322898,1034595972,1022861151)+W(4,1035166617,-1116824529,-1127250349,-1103787577)+W(5,-1104285546,-1110450029,1041775082,-1111377560)+W(6,-1121294834,1020242785,1024987646,-1113169844)+W(7,-1109755223,-1162599282,-1128984227,1015705141);WS(1061587071,-1140717261); +sum1=W(0,-1112565188,1035683412,1034588141,-1105710858)+W(1,1024277837,-1104681461,1033519565,-1097426768)+W(2,-1082585266,-1091946062,-1086181493,-1084260507)+W(3,-1087521200,-1094344584,-1109665588,-1092361421)+W(4,1063001355,1057075562,1061257307,1062016535)+W(5,1059484653,1051726365,1053582679,1050023351)+W(6,1029148274,-1133150565,-1121255338,1031972073)+W(7,-1140527211,1015752222,-1140031633,1054184694);sum2=W(0,1052095029,1040595366,-1098987175,-1084153168)+W(1,-1091290481,-1096720628,-1101102486,1044734380)+W(2,-1068831962,-1076957703,-1081538085,1037971476)+W(3,1070110671,1069986978,1074264190,1070997731)+W(4,-1076286348,-1081349117,-1088771362,1057908839)+W(5,-1114213425,1063483875,1068552571,1075267150)+W(6,1061242602,1046002483,1040290526,-1093902656)+W(7,-1094367529,-1094489561,-1099236623,-1081182731);WS(-1071242520,-1095264341); +sum1=W(0,-1097248122,1017326143,-1105336241,-1091856432)+W(1,1051920949,-1097210280,-1122345698,999615444)+W(2,1057257956,1050464317,1059871125,1058219580)+W(3,1056167546,1051126389,1047883744,1055359408)+W(4,-1095464807,-1098731544,-1096805078,-1088025845)+W(5,1032394345,-1089070234,-1102431837,-1098523426)+W(6,-1098637431,1039614697,1034135507,-1098503641)+W(7,1057766069,-1095933097,1030493340,-1112287963);sum2=W(0,-1132961311,1034954689,-1131131128,-1105685093)+W(1,1044104138,-1118659572,-1117347443,-1140373421)+W(2,1038597560,-1114842936,1039456110,-1104727669)+W(3,-1085849936,1053272959,-1117746499,1049759548)+W(4,-1089057302,-1113751042,-1095192990,-1097910004)+W(5,1064526735,1045257331,1054461586,1062278408)+W(6,1055074030,1048893008,1046429121,1057064004)+W(7,-1091871118,-1096323208,-1090448877,-1081803378);WS(1055746431,1040288248); +sum1=W(0,-1154016945,-1117613130,-1108247483,-1114072538)+W(1,-1103530014,-1134724696,-1102903742,1046496384)+W(2,1057716289,1055590360,1059644857,1067207252)+W(3,1062212336,-1104299500,1049302591,1054319858)+W(4,-1093759650,-1094487986,-1089867895,-1085229664)+W(5,-1089860607,-1088563377,-1097577389,-1094962569)+W(6,-1122750430,-1117149477,1031955359,1016534394)+W(7,1044969554,-1137442922,1035178328,-1108831509);sum2=W(0,1041968914,1026703145,1033601916,1035338047)+W(1,-1106207855,-1094112140,-1100978937,-1106593629)+W(2,1051752153,-1115260470,1038625472,1052354182)+W(3,-1118891350,-1081023345,-1084581041,1066756564)+W(4,-1123800846,1035127537,1035458769,1035609386)+W(5,1057116581,-1104080857,1055976243,-1101750238)+W(6,-1117011966,1031245794,-1109678904,1050054059)+W(7,-1098815779,1038926653,-1108176195,-1107244818);WS(-1089881759,1037957184); +sum1=W(0,1000251530,-1117869170,1029072469,1031851625)+W(1,1024508279,-1105582638,-1121710869,-1105403363)+W(2,-1098029886,-1095515176,-1089055515,-1079829205)+W(3,-1094362449,-1105281331,-1112643769,-1102959900)+W(4,-1105974859,1060224425,1060210489,1061092856)+W(5,1060581840,1056017638,1040568609,1050032516)+W(6,1041712355,1040628361,1042449912,-1119516507)+W(7,-1102207965,-1107063314,-1112932479,-1124065669);sum2=W(0,1051114274,-1105565679,1055378846,-1098769061)+W(1,-1106275827,-1101598109,-1109849433,-1104426610)+W(2,-1102532150,-1114476854,-1082969540,1064670328)+W(3,-1102001010,1044770567,-1114021751,1049459491)+W(4,-1093533301,1038543175,-1075201485,1077554590)+W(5,1048871628,1040464379,-1111404687,1049461049)+W(6,1042271071,-1112348507,-1087360189,-1100903801)+W(7,-1115312306,1031777408,-1125205988,-1104546886);WS(-1089609215,-1090633405); +sum1=W(0,-1095985139,-1131730646,-1106836118,-1120898567)+W(1,-1122196780,-1108220230,-1113602180,-1111282801)+W(2,1060468726,-1114989785,-1111340153,-1083229835)+W(3,-1097505195,-1091862496,-1118278055,-1094974325)+W(4,1029992257,1035463235,1053834481,1057093887)+W(5,1060127651,1056095953,1053644551,1060964715)+W(6,-1106189340,-1121474072,-1109753904,-1170836447)+W(7,-1099640750,-1106303115,-1102165833,-1114233933);sum2=W(0,-1102755055,-1123071369,-1101642458,-1121616776)+W(1,-1123659230,1034971308,-1114444448,992820811)+W(2,1028184991,1018963304,1042446539,1048904011)+W(3,1022095962,-1102092583,-1115812270,-1115600403)+W(4,1014375557,1034540123,-1110958917,1055634924)+W(5,-1122273513,1047229966,1006913192,1032293939)+W(6,1018724927,-1154538439,1030328833,-1104340897)+W(7,-1123674010,-1103087688,-1118183380,-1116477720);WS(-1089497119,-1083970920); +sum1=W(0,1049400081,-1112985379,1032734776,1046931016)+W(1,1032966898,1026703569,1023567673,1020804657)+W(2,1017038202,1054102421,1052273107,1050677101)+W(3,1056472798,1054012759,1046736000,1054561791)+W(4,-1096866095,-1092440080,-1090492445,-1077775563)+W(5,-1095500286,-1141821439,-1103091876,-1096856494)+W(6,-1129668560,1023489999,1039999326,1047866250)+W(7,1031139121,-1128248842,1037611037,-1102316761);sum2=W(0,-1119432539,-1114702364,-1131454616,1045807900)+W(1,-1107556037,-1138592655,-1120197723,-1116354551)+W(2,-1113150368,-1107904829,1051795717,1065572002)+W(3,-1104213250,-1096394963,991774812,991245404)+W(4,1049552369,-1109676099,1049548364,1052256292)+W(5,1058452060,-1077576443,-1102019177,1049782966)+W(6,-1123950204,1034167140,1018171432,1024318084)+W(7,-1104886632,-1103410805,-1103678409,-1123412946);WS(-1092399743,1070790531); +sum1=W(0,1031557241,1024013147,1045977841,1049827334)+W(1,1044712430,1042539942,1022243624,1042631871)+W(2,-1110110152,-1123928476,-1100428029,-1093314535)+W(3,-1098211617,-1120318828,-1110797385,-1103475236)+W(4,-1086332927,-1104003948,-1091187884,-1110202001)+W(5,1031718940,1031171411,-1118825252,1047659449)+W(6,1040307665,1029330819,1054647477,1048337215)+W(7,1045074033,1042256462,1034920639,1041342974);sum2=W(0,1035080118,-1111978522,1043189101,-1107203795)+W(1,1020874649,1040978901,-1103963851,1014904337)+W(2,1049091174,1049791001,1038894820,-1088677682)+W(3,-1074681252,1032440616,-1139760881,-1132242473)+W(4,1068767241,1068692590,1041587068,-1079138335)+W(5,-1088844169,1033618204,1036797334,1040720920)+W(6,1056655092,-1120502660,1054889999,-1094007639)+W(7,-1106617291,1037089622,-1115116202,1029103732);WS(-1076899872,-1090262268); +sum1=W(0,-1111775583,-1105515965,1031134981,-1152866339)+W(1,1022185487,1031461535,991487050,1013082739)+W(2,-1105212520,-1109220950,-1105276619,-1081197371)+W(3,-1085735312,-1090100176,-1106571081,-1094472404)+W(4,1053805936,1044900104,1061229259,1056451270)+W(5,1061180827,1061600458,1040836429,-1114201801)+W(6,-1130865048,-1124779047,-1108606366,1012899053)+W(7,-1111684786,1038272628,-1123743158,1043636133);sum2=W(0,-1092758077,-1099940688,-1096959860,-1093749782)+W(1,1047974360,-1120633714,1036248767,-1113388587)+W(2,1054372816,1036990346,-1102824961,1072234824)+W(3,-1091574668,-1098403340,-1097220109,1024848209)+W(4,1025999909,1044094629,-1093700170,1074465248)+W(5,-1086059593,-1083936129,1045585843,-1093741871)+W(6,1025560437,1015649794,-1134776466,-1118772240)+W(7,-1097328702,1035273338,-1098634116,1051989609);WS(-1097318719,-1106686758); +sum1=W(0,-1138034233,1022220430,-1115259277,1037878284)+W(1,-1109043646,-1118564628,-1132126739,-1123355602)+W(2,1031803579,-1105675680,1060345356,1040095311)+W(3,1057210483,1018511203,1038086620,1040876381)+W(4,-1107190316,-1110575515,-1091489993,-1082557626)+W(5,1054616755,-1113047197,1037558661,1040895458)+W(6,-1118470609,1013564641,1028754310,1043380040)+W(7,-1126688788,-1103180903,-1105313401,-1110366427);sum2=W(0,-1116780480,1034654933,1033980194,-1106740681)+W(1,1037910476,-1110588743,1033369701,1006481529)+W(2,1011610145,-1109786563,1034290987,1058839838)+W(3,-1112504437,1048688059,-1100404580,1024874106)+W(4,-1126532250,1049246354,-1098441369,1055488745)+W(5,-1081564854,-1109313096,1046210019,-1122526519)+W(6,1031867194,-1117436106,1050453777,-1098876833)+W(7,-1101879397,-1105182695,1033744368,1042001428);WS(1061957727,1058150789); +sum1=W(0,1009728708,1031914819,1043097483,-1106863550)+W(1,-1097372952,-1108191069,1032793786,-1129266281)+W(2,-1099288198,-1097230757,-1087266183,1043273168)+W(3,1055416522,1050026271,-1110590381,-1108247452)+W(4,1046412713,1055587995,1056802398,1049133325)+W(5,-1086687979,-1105368103,-1107437206,1042988739)+W(6,1036440691,-1109853493,-1106212891,1023154886)+W(7,1047286155,1036106272,1024106902,-1120124353);sum2=W(0,1021676194,-1104415808,1041444786,-1104915444)+W(1,1042839409,1025561656,-1111488206,-1119893126)+W(2,1026925373,1041631623,1049347642,-1075706495)+W(3,1068941883,1049874161,-1096918949,1030080935)+W(4,-1130821928,1047340087,1055108729,-1078646873)+W(5,1058328878,1054741696,-1108156193,-1107876167)+W(6,1011207236,-1118374396,1032289888,-1097824639)+W(7,1041964936,-1122940124,1033049167,-1131526532);WS(1058678303,1013994144); +sum1=W(0,-1118673511,-1145988558,-1107600786,-1097799452)+W(1,1050901309,1025019066,1034380585,-1117490811)+W(2,1050426208,1032382213,1059103555,1061451838)+W(3,-1098106458,1032049821,1038038624,1043957152)+W(4,-1111022430,1019043839,-1086017695,-1090188381)+W(5,1050664020,-1093177128,-1133222475,-1113568728)+W(6,-1110204509,-1116037137,1043824660,-1111434373)+W(7,-1123560275,1043538778,-1104489131,-1110765932);sum2=W(0,-1105859137,1047608842,-1101390223,1011548907)+W(1,-1098146078,1047719826,-1099968186,1028887915)+W(2,1052524883,-1096529292,-1103682938,1018027622)+W(3,1039330573,-1101134187,1054816538,-1105962981)+W(4,-1116369180,1033298597,-1095014501,1063707518)+W(5,1056731707,-1086128756,1037701277,-1150004284)+W(6,1025172812,1035180205,-1138831970,-1096368530)+W(7,-1094263126,1061932077,-1095466983,1016476277);WS(1063038079,1033861047); +sum1=W(0,-1111914898,1040884807,-1102681756,1061986003)+W(1,-1095429920,-1109559865,1034752240,-1104233906)+W(2,1016779545,1014390112,-1109833994,-1095449911)+W(3,-1097838100,1019923216,-1148961393,1009274926)+W(4,-1107257338,1045397811,-1096677860,1065846455)+W(5,1029008656,1039008680,1033037520,1029851870)+W(6,-1114919788,-1162045399,-1101855164,1049909751)+W(7,-1097193708,-1113534130,1007645095,-1103320918);sum2=W(0,-1112457849,-1106002020,-1103752624,-1114732591)+W(1,-1102536580,1029961226,-1114728817,1038070251)+W(2,-1117177515,1017665294,-1098231154,1062239338)+W(3,-1097906884,-1101585142,1037597321,-1112453861)+W(4,1031942991,1033022206,-1133545004,1061426536)+W(5,-1109528685,1032626487,-1114069131,1032988844)+W(6,-1106095669,1041685053,-1095196752,1046863079)+W(7,-1105989872,-1120505375,1028074076,-1124888510);WS(1060691839,-1121680521); +sum1=W(0,-1112633460,1034282296,1016470792,-1124091490)+W(1,1036530779,-1110508885,1036991882,-1133939630)+W(2,-1105323108,-1097943963,-1091137362,-1083253895)+W(3,-1090987401,-1090137469,-1098291034,-1093525810)+W(4,1045243383,-1117038833,1060606770,1065759511)+W(5,1062311590,1056765570,1054157412,1057599172)+W(6,-1113361469,-1109479713,-1110311799,-1102522287)+W(7,-1114082482,-1104777690,1016563642,-1167556095);sum2=W(0,-1097189010,1041454563,-1110771302,1043926258)+W(1,-1109373654,-1109768355,-1114304258,1043669875)+W(2,1057901747,1039698409,-1122301550,-1125642190)+W(3,-1108285138,1020817735,1040279727,-1101494695)+W(4,-1086723052,-1087530727,-1094374456,1064818137)+W(5,1036021291,-1109979249,1055924705,1040712355)+W(6,-1086497310,-1090377488,-1110538585,1061014784)+W(7,1034378960,1044647130,1013465199,1050381101);WS(-1087684831,-1094525449); +sum1=W(0,1038107891,-1121734275,1035814365,-1107604308)+W(1,1038052214,-1101928869,-1104767443,-1127021124)+W(2,-1093934649,-1096975274,-1093954738,-1090018791)+W(3,-1088075930,-1090123804,-1106254226,-1100235009)+W(4,1052573184,1049163549,1040479417,1066601083)+W(5,1058232216,1057618495,1040796439,1051666987)+W(6,1038198313,-1113930844,1035537105,-1102439448)+W(7,-1113118893,-1148589172,-1146582942,1033628463);sum2=W(0,-1102391770,1032495868,-1140349122,1051494072)+W(1,-1080481573,-1072283498,-1085993190,-1091499210)+W(2,1038892506,1032348345,1055934176,1066287204)+W(3,1070533091,1056179234,-1098172645,1038613315)+W(4,-1109920182,1035913564,1043439866,1049172795)+W(5,1048700512,-1122911277,1042548330,-1103404378)+W(6,1034045130,-1111661823,-1148365864,1035742233)+W(7,1024670194,1043482108,-1117726050,1024343165);WS(-1095407551,-1073547033); +sum1=W(0,-1103915126,-1101976843,1024335748,-1108044768)+W(1,1050893513,-1095324014,-1107189281,-1114975198)+W(2,1043640456,1041775803,1061599658,1057524528)+W(3,1060862745,1028413803,1044362232,1051352312)+W(4,-1106314263,-1098551608,-1096990689,-1095708126)+W(5,-1102020840,-1092797676,-1110398586,-1097969466)+W(6,-1099126911,1023142916,-1110220795,-1106562202)+W(7,1056016670,-1099653918,1031215069,-1138223071);sum2=W(0,-1112168075,-1111493200,-1123529566,1022286331)+W(1,-1103466952,1035493883,-1113566520,-1106265315)+W(2,1034632723,-1122920764,1009053647,1049936313)+W(3,1051909492,-1099948229,1029419308,-1107051081)+W(4,1034960798,1040740621,-1105159128,1057592446)+W(5,-1126339526,1041517424,1016655048,1024151142)+W(6,-1112860057,-1108202591,-1115675116,-1112708946)+W(7,-1146770753,-1116950762,-1115594520,-1103163741);WS(1063407871,1051042354); +sum1=W(0,1005154604,-1120529264,-1106161584,-1130858780)+W(1,-1114354154,-1127255711,1023693521,-1115504868)+W(2,1049807310,1052429035,1057743574,1063894449)+W(3,1058090310,1052514789,1044231916,1049931918)+W(4,-1113122997,-1100831547,-1088929544,-1086654500)+W(5,-1089886688,-1092092086,-1106897472,-1097639884)+W(6,-1107282310,1042685852,-1113923042,-1129272494)+W(7,-1164896285,-1131567786,-1131959253,-1115987013);sum2=W(0,-1113031572,1030565628,-1127702936,992883874)+W(1,1014952720,990495554,1018238740,1023316920)+W(2,1043434467,-1108784254,-1111949688,1036810375)+W(3,-1111107284,1042918247,-1120169364,-1112993936)+W(4,-1088941888,1056568736,1036016830,1060861120)+W(5,1023742716,-1098281783,1022041004,-1112517088)+W(6,-1067187434,-1079041185,1074040966,1075709893)+W(7,-1099161149,992814626,1039733673,1028892682);WS(1053166591,-1107822593); +sum1=W(0,1033874440,1022746982,1035703758,1019810386)+W(1,1044260196,1042374543,1040749291,1041374685)+W(2,-1120335240,1031831786,1052124034,1048792350)+W(3,-1095582904,-1088629918,-1097950065,-1085974448)+W(4,-1105709561,-1108379508,-1093762507,1046826502)+W(5,1053612659,1045805451,1037463342,1042845918)+W(6,1042509273,1008295657,1044631286,-1124953572)+W(7,-1112928126,-1113071488,-1120529605,-1132054272);sum2=W(0,1010990056,1039106059,-1102786881,-1114641521)+W(1,-1133768253,-1101476912,-1103607882,-1113060394)+W(2,-1096561981,-1097601992,1031463124,1058004743)+W(3,1042505523,1041182740,-1105959219,-1099775079)+W(4,1040308359,1052717590,1058176412,1045709336)+W(5,1034355291,-1096768246,1033275384,-1105804625)+W(6,-1119485380,-1115258493,-1101721469,-1138490792)+W(7,-1101570252,1029590734,1037679123,1036565969);WS(1028916214,1067075549); +sum1=W(0,1039584518,-1119264713,1016298993,-1105861885)+W(1,-1113980813,1020015061,-1134777055,1032661512)+W(2,-1148995491,-1109885152,1055889168,1067421167)+W(3,1059632007,1055091716,1045130509,1052375930)+W(4,-1098323934,-1096386895,-1096985498,-1085982162)+W(5,-1087532161,-1088331431,-1095878225,-1104015130)+W(6,1026160863,1022848653,-1150434165,1034469007)+W(7,1044152506,1024761132,1032543553,-1104676378);sum2=W(0,-1120016029,-1096222017,-1119382227,-1092715875)+W(1,-1110818689,1049876716,-1103484103,1032841990)+W(2,-1101422768,-1103630239,1040689805,1064582511)+W(3,1043406218,-1089499537,1029271710,-1117522613)+W(4,-1104653664,-1105545071,-1120927281,1058022283)+W(5,1060808344,-1107109410,-1107008053,-1105419897)+W(6,-1122344899,1042131820,-1120071349,-1101606830)+W(7,-1096987934,1051590178,-1099435532,1050342947);WS(1047020030,1040511430); +sum1=W(0,-1108637223,1033110649,1044090139,1043424750)+W(1,1036624046,-1120308481,1033721201,-1106849700)+W(2,-1092384755,-1090443530,-1085982557,-1080046633)+W(3,-1083957593,-1096279270,-1149642107,-1100324533)+W(4,1057603229,1053549631,1061618217,1047924234)+W(5,1053999549,1057048888,1057845673,1052833857)+W(6,1031927268,-1122999800,1026366340,1032840448)+W(7,1015929108,1020572028,994286645,1039624063);sum2=W(0,1035208568,1043030610,-1107699159,1044796248)+W(1,1034655700,-1103668262,1045164876,-1095424772)+W(2,-1124082321,1008382386,-1107061123,1049576136)+W(3,1051573865,1048541752,-1093669891,-1134934914)+W(4,-1093736918,1050323039,-1114950423,1074526989)+W(5,1073198167,-1080621030,-1074078238,-1079139349)+W(6,1048736861,-1118377912,-1106119918,-1111443567)+W(7,-1132389881,1034733436,1034120076,1029501600);WS(-1080108544,1072234904); +sum1=W(0,-1115070415,-1130610603,-1098588213,1057466749)+W(1,-1104374087,1029557602,1018553236,1001112594)+W(2,1027588151,1029085890,1032775046,-1089931562)+W(3,-1123371019,-1094030554,1034779836,999211181)+W(4,1031137458,-1104252646,1056995037,-1083673968)+W(5,1052314097,1050628415,1033643941,1036988180)+W(6,1018404227,1044293186,1028038521,1050777268)+W(7,-1093125043,1046325824,-1108340394,1020739741);sum2=W(0,-1115557063,-1118678156,1045099863,-1102856438)+W(1,1035209289,1035167397,-1117208818,-1120387027)+W(2,1043108929,1033401680,1036186051,-1124450766)+W(3,-1112637977,-1114646959,1012643139,-1132473655)+W(4,-1138826120,-1093193803,-1079584214,1068262877)+W(5,-1121148137,1041792105,-1138286224,1032348301)+W(6,-1108049897,-1109597407,1013268663,1049634970)+W(7,1046161245,-1111895568,-1127251156,-1116707942);WS(1061770399,1033097145); +sum1=W(0,-1127803310,-1108446526,1046619869,-1102069216)+W(1,-1115166002,-1107462472,-1113123881,-1109525661)+W(2,-1100493560,-1122290538,-1090144134,-1124504076)+W(3,-1096124978,-1113245389,-1115437168,-1114380655)+W(4,1049484359,1040952192,1049567736,1060283011)+W(5,1036170309,1049188012,1004781969,1043620172)+W(6,-1117956049,-1101349332,1015706547,1051006353)+W(7,1027971186,-1105896346,1011773295,-1118021614);sum2=W(0,-1115090363,-1146121477,1029869322,1039239074)+W(1,-1123366919,-1123569769,-1115297931,1022224092)+W(2,1035607607,1032878473,1020296178,-1094567498)+W(3,-1133024223,-1111505684,1036037468,1025152664)+W(4,1036976780,1008730983,1050702114,1060438996)+W(5,-1092544833,-1088372125,-1119747923,1015952550)+W(6,-1102631851,-1105868946,-1106613659,1056742871)+W(7,1056526109,-1103439045,-1114092237,-1109382916);WS(1063262431,1041246684); +sum1=W(0,-1095604910,1035931377,-1116408259,-1113418944)+W(1,1035543059,-1109446615,1041501409,-1111045021)+W(2,-1094141452,-1103734011,-1088213584,-1084116356)+W(3,-1088057339,-1084926720,-1095142868,-1085134126)+W(4,1054301899,1050116188,1059695011,1063045487)+W(5,1060587189,1062081288,1055163174,1061043357)+W(6,1050361575,1015464930,-1130477940,1005018697)+W(7,-1114430457,-1112900435,968128030,1012274924);sum2=W(0,-1088652568,-1101936220,-1091191468,-1102444501)+W(1,-1123800532,-1111069004,-1088813372,1050243792)+W(2,1079171932,1073764649,1074855165,-1113430470)+W(3,-1095064501,-1078839186,-1078450334,-1071519758)+W(4,1068650823,1062997529,1053027607,1039600983)+W(5,-1105207914,-1082346847,-1088354544,-1081653443)+W(6,-1089634291,-1106083041,-1102140198,-1123235056)+W(7,1028735871,1056073450,-1114344542,1060600412);WS(-1071343712,-1080188504); +sum1=W(0,1048814204,-1112944093,1038698214,-1110388460)+W(1,-1102353903,-1113346827,-1115354285,-1172877482)+W(2,1024112567,992179242,1035991718,1065540811)+W(3,1062800155,1057270438,1047814390,1055244391)+W(4,-1101821021,-1105846854,-1110088095,-1086620536)+W(5,-1085891530,-1092189183,-1094362793,-1096652125)+W(6,-1155239198,-1115614373,-1117961066,1022833410)+W(7,1037955557,-1130491710,1026576596,1021561214);sum2=W(0,1077488778,1067869852,-1080283979,-1070445594)+W(1,-1085461181,-1113067149,-1135625536,-1105631704)+W(2,1057844910,1017329883,-1112258962,1038200220)+W(3,1045877800,1016515143,1029029881,1026840239)+W(4,-1110901413,-1123912240,1048616910,-1103189448)+W(5,1033584054,-1113680120,1006246833,1028070058)+W(6,-1157420388,1016773013,-1127671945,1027002057)+W(7,-1139116556,-1108492850,1033508697,-1122607860);WS(-1114300667,-1123436789); +sum1=W(0,1048745214,-1106612992,1040619730,-1101020989)+W(1,-1120049178,-1129452308,-1112058252,1040777596)+W(2,1024457460,1049280824,1061265254,1066754197)+W(3,1060475010,1056957204,1052291799,1051532558)+W(4,-1084727981,-1099711469,-1091611130,-1090437274)+W(5,-1087975654,-1087165059,-1095257281,-1091858685)+W(6,-1124831645,-1120312678,991636461,-1115033343)+W(7,1037659252,1036876438,1024723233,-1128167880);sum2=W(0,-1102675226,1045758589,-1106608364,1037856863)+W(1,-1121700495,1038509645,1041300787,1013024414)+W(2,-1096018291,1033992894,1053924217,1023354017)+W(3,1045521037,-1112080608,1019757091,-1111416466)+W(4,-1064870457,-1078407710,1074354229,1077566439)+W(5,1055978728,-1100523264,1032114149,-1096094745)+W(6,1050758265,-1091427154,1044800412,-1122690967)+W(7,1037435194,-1101170582,1048475585,1031501486);WS(-1081349952,-1073531246); +sum1=W(0,-1130396178,-1123247001,1049234666,-1123595694)+W(1,1044575749,-1118849787,1027091408,1015989072)+W(2,-1092471918,-1094799967,-1087091570,-1083589055)+W(3,-1090515766,-1088301188,-1100895532,-1095518837)+W(4,1052933181,1040552427,1062313536,1056428784)+W(5,1060166366,1052569014,956727337,1057005798)+W(6,-1120779255,1032899791,1048808240,1047688662)+W(7,1025076592,-1104574961,-1114767697,1028829344);sum2=W(0,1036727690,1038605852,1000461252,-1108807283)+W(1,-1118764382,1040753555,1025474323,1026410269)+W(2,-1101780564,1036224480,1043313873,1058417373)+W(3,-1110550387,1041024731,1032765623,-1114514162)+W(4,1047063866,1003722492,1071364196,1075919102)+W(5,1031984760,1052825370,-1104266299,1049040777)+W(6,-1095151348,-1101329253,-1071443435,-1072909475)+W(7,-1137970650,-1094681513,-1130737363,-1100563228);WS(-1087415039,1075227720); +sum1=W(0,1014202565,-1121306305,-1115466670,1055732347)+W(1,-1088701572,1045428619,-1106855619,-1113272762)+W(2,1030200505,-1093044977,1052765481,-1086016434)+W(3,-1108244135,1044242725,-1102530383,1042147022)+W(4,1042588557,1045750086,-1099185023,-1102841730)+W(5,1060432915,1001272287,1047811955,1043051755)+W(6,1032642210,1039690838,-1099716881,1054066516)+W(7,-1089156724,1045967960,994787170,-1114980876);sum2=W(0,1034817173,-1106843150,1035283571,-1117324330)+W(1,-1106783723,1033652183,-1105003316,-1109219720)+W(2,1033088277,-1115275500,-1108330169,1059951304)+W(3,-1114610359,-1130129964,-1100855920,1017452836)+W(4,-1105460751,1042281307,-1117933953,1055263105)+W(5,1036736577,1034893511,1040893249,1026860110)+W(6,-1119967238,-1122100142,-1118763227,1033190213)+W(7,-1099584511,-1097591398,1043864443,-1097701018);WS(1061885343,-1093433134); +sum1=W(0,-1119074171,1040591342,1024365415,-1112185530)+W(1,-1102861510,1047951017,1033079635,1030794670)+W(2,-1116612499,-1106037336,-1090085717,-1110885309)+W(3,1058148680,-1098920364,-1104145445,-1102965524)+W(4,1043937396,1035985530,1054530437,-1105284753)+W(5,-1085809524,1042740717,-1143903027,1048819605)+W(6,1026065358,1035233146,1023445318,1041032751)+W(7,1043298226,1028431483,1030877520,-1110782149);sum2=W(0,-1120425303,1041777983,1008642595,1038578170)+W(1,-1103931105,-1144970974,-1139607395,-1105571910)+W(2,-1115506247,-1109249837,1051302633,1062460419)+W(3,1046700430,-1110379832,-1121481149,-1125592805)+W(4,-1089905659,-1082926483,976609774,1062992305)+W(5,1016533657,1046952726,-1128426413,1044012895)+W(6,-1106986872,-1093100415,-1100742938,-1121360027)+W(7,1026171953,-1123505732,1047068010,-1108759193);WS(1057387711,1071476886); +sum1=W(0,1029774760,1046876472,1049447728,-1104814472)+W(1,1047761369,-1107998911,1035672969,1025453339)+W(2,-1088145158,-1090879061,-1087750555,-1081209882)+W(3,-1102041597,-1088704948,-1101378696,-1090772220)+W(4,1058722665,1046940920,1062289140,1060559271)+W(5,1057163193,1046238393,1049034574,1051154538)+W(6,1026644842,-1124024690,1034805113,-1101227374)+W(7,1041428045,-1112057972,-1123650077,1045125730);sum2=W(0,-1079574021,-1076424748,-1084651933,-1079383446)+W(1,-1094010079,-1105513599,-1094989946,-1083946107)+W(2,1066168402,1072246945,1055648588,1069722149)+W(3,-1105729737,1052366950,1046266897,1064021500)+W(4,-1106633910,1039775524,-1122282375,1050613020)+W(5,-1112550614,1046757765,1041413657,-1117589808)+W(6,1033041398,1025560740,1042767844,-1122422479)+W(7,1029478726,1029747528,-1132333344,-1110924549);WS(-1088291167,-1076464582); +sum1=W(0,1038365083,1013092187,1049005176,-1096083994)+W(1,1046666973,1029385568,-1130846211,1035921309)+W(2,1048475643,1039614653,-1105893787,-1090164821)+W(3,1048630844,1052597003,1030762351,1049653618)+W(4,-1115380053,-1115741870,-1115211424,-1106465144)+W(5,-1092124773,-1097273638,-1104199584,-1098780292)+W(6,-1113517956,-1118168192,1038779144,-1103584918)+W(7,1051487172,1036949051,1029432699,1041505439);sum2=W(0,-1102442432,1042447103,1009200726,-1140140535)+W(1,1018235219,1038566242,-1105836948,-1119461411)+W(2,-1119046775,-1103497340,-1108371687,1063726871)+W(3,1023996549,-1100556235,-1134905751,-1115426548)+W(4,1038119755,-1117033259,-1111757198,1053430514)+W(5,-1097582390,-1130738637,1027482933,1038939472)+W(6,-1116688635,-1109692823,-1136365839,-1103585210)+W(7,1035998106,-1122627505,-1113769016,-1131103707);WS(1063535295,-1106643391); +sum1=W(0,998897947,-1114069468,1030590255,-1120649212)+W(1,-1112623985,-1135800742,-1126057998,-1118923687)+W(2,1049160779,1050551697,1037435628,1059662980)+W(3,1051258674,1051146291,1042046535,1051522915)+W(4,-1095715331,-1114097198,-1091439068,-1098500149)+W(5,-1093374928,-1112852607,-1104302276,-1098602138)+W(6,1022592892,1035333911,-1105875754,1036951763)+W(7,-1097348874,1021555078,1032877804,-1118947123);sum2=W(0,1020791040,-1119848331,1028098574,1024075228)+W(1,1036335573,-1114214294,1028067710,-1123998545)+W(2,1023004440,1035188360,1036866165,-1081188844)+W(3,1036267331,1020492762,1026996488,1028180222)+W(4,-1131522740,1010552055,-1087402238,-1063807577)+W(5,-1074297638,1044255896,-1109527927,-1125487816)+W(6,-1130592194,-1114014595,1057774258,1085749988)+W(7,1072260443,-1101071935,1041502854,-1121770211);WS(1065370528,-1140007425); +sum1=W(0,-1119191691,-1123119348,1043193134,-1144777506)+W(1,1048874737,-1114692372,1047204584,1028382351)+W(2,-1089109360,-1093467562,-1104035088,-1082641845)+W(3,-1090665335,-1085597050,-1097312497,-1084438004)+W(4,1051697742,1051845168,1049231373,1058881533)+W(5,1060727795,1053776045,1050811579,1054559607)+W(6,1048704645,-1120571445,1047054964,-1128753754)+W(7,-1122636375,-1135014444,962936920,1047044271);sum2=W(0,1072219394,1068804680,1068134846,1066171639)+W(1,-1095987744,-1080918851,-1077110574,-1071545857)+W(2,-1078126224,-1079031251,-1078951161,-1087436811)+W(3,1039512383,1067164113,1069504242,1075315134)+W(4,-1093298188,-1110022070,-1084926454,-1107767815)+W(5,1055586357,1031793821,1041030661,1055897321)+W(6,1011861728,1040923692,-1105857084,-1121892273)+W(7,1026590003,1040751494,-1123439499,-1109554506);WS(-1089696543,-1143233957); +sum1=W(0,-1115482013,1045323653,-1096516931,1035013745)+W(1,-1162367211,1054106403,-1107204469,1036179510)+W(2,-1129127938,-1098483714,1045383939,-1091150045)+W(3,1043411549,-1086835476,1048447553,-1103773800)+W(4,1041381507,-1110243009,1059582003,-1106321908)+W(5,1034020454,1026676964,1034191370,-1159158363)+W(6,-1122467892,1049605572,-1090424421,1043667267)+W(7,-1109629626,1048548650,-1105600748,1035568493);sum2=W(0,-1134008573,-1125596513,1011008945,1051842604)+W(1,-1125276577,-1118729604,-1111959837,-1117720498)+W(2,1032064725,-1121806942,1045441656,1065460002)+W(3,-1114964420,-1130705389,-1121883022,1034360078)+W(4,-1117795542,1035355315,1024667789,-1089961367)+W(5,-1081892598,1026896379,1020053498,1023648883)+W(6,-1113496357,998755498,-1119910472,1041632626)+W(7,1035390555,1032979221,-1129745921,-1115672512);WS(1065278079,-1120402802); +sum1=W(0,1031924074,-1115548942,-1106896516,-1112658654)+W(1,-1103991244,-1121670257,-1115583119,1031270934)+W(2,1052390115,1049303261,1045251552,1060948388)+W(3,1062622505,1054395391,1045812503,1048618059)+W(4,-1097070063,-1099757447,1040981136,-1081623390)+W(5,-1085365853,-1096062708,-1101077740,-1099232531)+W(6,-1116671142,-1118597165,1041336272,1043338841)+W(7,-1145407604,1032773481,-1123616408,-1127437558);sum2=W(0,-1114021356,1032565152,1056835748,-1085160508)+W(1,1058685385,-1086618535,1047242231,1032715041)+W(2,-1110767736,-1122384971,-1085457975,1068814369)+W(3,-1085213012,1063574785,-1144776155,-1097434793)+W(4,-1100377718,1041858293,-1085697040,1060746614)+W(5,1057245366,-1094120608,-1093482365,1056356490)+W(6,1034493514,1019779384,1016590225,-1097525969)+W(7,1043875459,-1097974912,1054776673,-1096653037);WS(1055688959,-1109584743); +return clamp(mstd0 + 5.0 * vsum / wsum * mstd1, 0.0, 1.0); +} // nnedi3 +vec4 hook() { +vec4 ret = vec4(0.0); +vec4 samples[8]; +samples[0][0] = HOOKED_texOff(vec2(-1.0, -3.0)).x; +samples[0][1] = HOOKED_texOff(vec2(-1.0, -2.0)).x; +samples[0][2] = HOOKED_texOff(vec2(-1.0, -1.0)).x; +samples[0][3] = HOOKED_texOff(vec2(-1.0, 0.0)).x; +samples[1][0] = HOOKED_texOff(vec2(-1.0, 1.0)).x; +samples[1][1] = HOOKED_texOff(vec2(-1.0, 2.0)).x; +samples[1][2] = HOOKED_texOff(vec2(-1.0, 3.0)).x; +samples[1][3] = HOOKED_texOff(vec2(-1.0, 4.0)).x; +samples[2][0] = HOOKED_texOff(vec2(0.0, -3.0)).x; +samples[2][1] = HOOKED_texOff(vec2(0.0, -2.0)).x; +samples[2][2] = HOOKED_texOff(vec2(0.0, -1.0)).x; +samples[2][3] = HOOKED_texOff(vec2(0.0, 0.0)).x; +samples[3][0] = HOOKED_texOff(vec2(0.0, 1.0)).x; +samples[3][1] = HOOKED_texOff(vec2(0.0, 2.0)).x; +samples[3][2] = HOOKED_texOff(vec2(0.0, 3.0)).x; +samples[3][3] = HOOKED_texOff(vec2(0.0, 4.0)).x; +samples[4][0] = HOOKED_texOff(vec2(1.0, -3.0)).x; +samples[4][1] = HOOKED_texOff(vec2(1.0, -2.0)).x; +samples[4][2] = HOOKED_texOff(vec2(1.0, -1.0)).x; +samples[4][3] = HOOKED_texOff(vec2(1.0, 0.0)).x; +samples[5][0] = HOOKED_texOff(vec2(1.0, 1.0)).x; +samples[5][1] = HOOKED_texOff(vec2(1.0, 2.0)).x; +samples[5][2] = HOOKED_texOff(vec2(1.0, 3.0)).x; +samples[5][3] = HOOKED_texOff(vec2(1.0, 4.0)).x; +samples[6][0] = HOOKED_texOff(vec2(2.0, -3.0)).x; +samples[6][1] = HOOKED_texOff(vec2(2.0, -2.0)).x; +samples[6][2] = HOOKED_texOff(vec2(2.0, -1.0)).x; +samples[6][3] = HOOKED_texOff(vec2(2.0, 0.0)).x; +samples[7][0] = HOOKED_texOff(vec2(2.0, 1.0)).x; +samples[7][1] = HOOKED_texOff(vec2(2.0, 2.0)).x; +samples[7][2] = HOOKED_texOff(vec2(2.0, 3.0)).x; +samples[7][3] = HOOKED_texOff(vec2(2.0, 4.0)).x; +ret[0] = nnedi3(samples); +return ret; +} // hook +//!DESC NNEDI3 (combine_x, nns256, win8x4) +//!HOOK LUMA +//!BIND HOOKED +//!BIND nnedi3_int +//!WIDTH 2 HOOKED.w * +//!OFFSET -0.500000 0.000000 +//!WHEN HOOKED.w OUTPUT.w / 0.707106 < +vec4 hook() { + vec2 dir = fract(HOOKED_pos * HOOKED_size) - 0.5; + if (dir.x < 0.0) { + return HOOKED_texOff(-dir); + } else { + return nnedi3_int_texOff(-dir); + } +} diff --git a/docs/tutorials/mpv.md b/docs/tutorials/mpv.md index e5a2d1f6d..c04183fd5 100644 --- a/docs/tutorials/mpv.md +++ b/docs/tutorials/mpv.md @@ -25,27 +25,35 @@ This folder cannot be changed after installation. If you wish to change it in th [!embed text="Installing mpv on Windows"](/static/playback/mpv/installation-windows.mp4) -==- 📦 Installing mpv via scoop +==- 🍨 Installing mpv via scoop [Scoop](https://scoop.sh) is a command line package manager for Windows. We can use it to install and manage mpv. Scoop downloads and manages packages in a portable way, keeping them neatly isolated in `%userprofile%/scoop` and automatically adds them to your PATH. +++ Installing scoop - Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - irm get.scoop.sh | iex +```powershell +Set-ExecutionPolicy RemoteSigned -Scope CurrentUser +irm get.scoop.sh | iex +``` +++ Installing mpv - scoop bucket add extras - scoop install extras/mpv-git +```powershell +scoop bucket add extras +scoop install extras/mpv-git +``` +++ Updating mpv - scoop update mpv-git +```powershell +scoop update mpv-git +``` +++ Uninstalling mpv - scoop uninstall mpv-git +```powershell +scoop uninstall mpv-git +``` +++ @@ -56,7 +64,14 @@ This folder cannot be changed after installation. If you wish to change it in th - [ImPlay](https://github.com/tsl0922/ImPlay) - [mpv.net](https://github.com/mpvnet-player/mpv.net) [!badge icon="apps" variant="info" text="Microsoft Store"](https://apps.microsoft.com/store/detail/9N64SQZTB3LM) -==- +==- 📦 Installing a pre-configured build + +If you don't want to setup mpv yourself, portable builds of mpv are available below. They are pre-configured to have the settings described in the [Basic Config](#basic-config) and [Advanced Config](#advanced-config). + +[!file text="mpv" icon="play"](https://github.com/Snaacky/thewiki/tag/mpv) +[!file text="portable_config" icon="package"](https://github.com/Snaacky/thewiki/releases/download/mpv/portable_config.7z) + +=== ==- 📁 Adding mpv to PATH @@ -176,39 +191,7 @@ We recommend taking your time to create your own config. If you want to get up a ==- :icon-file-code: Generic `mpv.conf` -```properties -## Video -profile=high-quality -vo=gpu-next -gpu-api=vulkan -scale-antiring=0.5 -deband=no - -# Dither -# This must be set to match your monitor's bit depth -dither-depth = 8 - -## Behavior (personal preference) -keep-open=yes -save-position-on-quit - -## Screenshots -screenshot-format=png -screenshot-dir="~/Pictures/mpv" -screenshot-template="%F-%p-%n" - -## Language Priority -# Sub -# Add enm before eng for honorifics -slang=eng,en -alang=jpn,ja - -# Dub -# Uncomment this section to prefer English dub with subtitles for English dub -#slang=zxx,eng,en -#alang=eng,en -#subs-with-matching-audio=no -``` +:::code source="/static/tutorials/mpv/portable_config/mpv.conf" range="1-32" language="properties"::: ==- :icon-info: Understanding the config @@ -258,13 +241,7 @@ To enable debanding in mpv, apply the following changes to your config: +++ `mpv.conf` -```properties -## Deband -# Set deband to "no" as we only need to enable it for specific cases -deband=no -deband-iterations=4 -deband-grain=48 -``` +:::code source="/static/tutorials/mpv/portable_config/mpv.conf" range="33-38" language="properties"::: !!!warning Your deband settings should be placed after your [`profile`](https://mpv.io/manual/master/#profiles) in order to prevent conflict. @@ -272,9 +249,7 @@ Your deband settings should be placed after your [`profile`](https://mpv.io/manu +++ `input.conf` -```properties -D cycle deband -``` +:::code source="/static/tutorials/mpv/portable_config/input.conf" range="2-3" language="properties"::: +++ @@ -314,18 +289,7 @@ If you use mid-range hardware, we suggest sticking to mpv's built-in `high-quali To use the profile, add the following to the top of your `mpv.conf`: -```properties -## Video -profile=high-quality -vo=gpu-next -gpu-api=vulkan -scale-antiring=0.5 -deband=no - -# Dither -# This must be set to match your monitor's bit depth -dither-depth = 8 -``` +:::code source="/static/tutorials/mpv/portable_config/mpv.conf" range="1-11" language="properties"::: !!!warning `dither-depth` should be set to match your monitor's bit depth to prevent [banding](#debanding). @@ -360,21 +324,7 @@ Below are a couple of commonly used styles: Run the `.otf` font file to install it system-wide or put it in your `fonts` folder. Add the following to your `mpv.conf`: -```properties -## Restyle Subtitles -# Set sub-ass-override to "no" as we only need to enable it for specific cases -sub-ass-override=no -sub-ass-style-overrides=playresx=1920,playresy=1080 -sub-font="Gandhi Sans" -sub-font-size=50 -sub-color="#FFFFFF" -sub-border-size=2.4 -sub-border-color="#FF000000" -sub-shadow-color="#A0000000" -sub-shadow-offset=0.75 -sub-bold=yes -sub-ass-style-overrides=Kerning=yes -``` +:::code source="/static/tutorials/mpv/portable_config/mpv.conf" range="39-52" language="properties"::: +++ Cabin @@ -388,7 +338,6 @@ Run the `.ttf` font file to install it system-wide or put it in your `fonts` fol ```properties ## Restyle Subtitles - # Set sub-ass-override to "no" as we only need to enable it for specific cases sub-ass-override=no sub-ass-style-overrides=playresx=1920,playresy=1080 @@ -406,9 +355,7 @@ sub-ass-style-overrides=Kerning=yes To activate it with a key, add the following to your `input.conf`, replacing `k` with the bind of your choice, if necessary (case-sensitive): -```properties -k cycle_values sub-ass-override "force" "no" -``` +:::code source="/static/tutorials/mpv/portable_config/input.conf" range="5" language="properties"::: ### Auto Profiles @@ -418,16 +365,7 @@ For instance, some seasonal releases may exhibit banding issues and use subjecti Add the following to the end of your `mpv.conf`: -```properties -## Auto profiles - -[simulcast] -profile-cond=string.match(p.filename, "SubsPlease") or string.match(p.filename, "Erai%-raws") or string.match(p.filename, "Tsundere%-Raws") or string.match(p.filename, "%-VARYG") or string.match(p.filename, "HorribleSubs") -profile-restore=copy -sub-fix-timing=yes -sub-ass-override=force -deband=yes -``` +:::code source="/static/tutorials/mpv/portable_config/mpv.conf" range="53-59" language="properties"::: !!!warning Your auto profile(s) should be placed at the end of your `mpv.conf` in order to prevent conflict.