cubing 0.35.1 → 0.35.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +4 -0
  2. package/dist/esm/bluetooth/index.js +3 -3
  3. package/dist/esm/{chunk-VDU7G35J.js → chunk-4F4IORIH.js} +2 -2
  4. package/dist/esm/{chunk-VDU7G35J.js.map → chunk-4F4IORIH.js.map} +2 -2
  5. package/dist/esm/{chunk-YNKPRDB4.js → chunk-AO6JA426.js} +8 -8
  6. package/dist/esm/{chunk-YNKPRDB4.js.map → chunk-AO6JA426.js.map} +0 -0
  7. package/dist/esm/{chunk-LS3POB3Y.js → chunk-CJY2SFU4.js} +4 -4
  8. package/dist/esm/{chunk-LS3POB3Y.js.map → chunk-CJY2SFU4.js.map} +0 -0
  9. package/dist/esm/{chunk-M4VSKPYT.js → chunk-II4IKKKD.js} +3 -3
  10. package/dist/esm/{chunk-M4VSKPYT.js.map → chunk-II4IKKKD.js.map} +0 -0
  11. package/dist/esm/{chunk-ZMT2VR3H.js → chunk-JWHX66YR.js} +3 -3
  12. package/dist/esm/{chunk-ZMT2VR3H.js.map → chunk-JWHX66YR.js.map} +0 -0
  13. package/dist/esm/{chunk-ALNR2DLK.js → chunk-VJBQAZ63.js} +2 -2
  14. package/dist/esm/{chunk-ALNR2DLK.js.map → chunk-VJBQAZ63.js.map} +0 -0
  15. package/dist/esm/{chunk-NHLJDRPU.js → chunk-WI5ILYXH.js} +2 -2
  16. package/dist/esm/{chunk-NHLJDRPU.js.map → chunk-WI5ILYXH.js.map} +0 -0
  17. package/dist/esm/protocol/index.js +2 -2
  18. package/dist/esm/puzzles/index.js +2 -2
  19. package/dist/esm/scramble/index.js +5 -5
  20. package/dist/esm/search/index.js +5 -5
  21. package/dist/esm/{search-dynamic-sgs-side-events-RABA64EP.js → search-dynamic-sgs-side-events-KNGHGZA4.js} +3 -3
  22. package/dist/esm/{search-dynamic-sgs-side-events-RABA64EP.js.map → search-dynamic-sgs-side-events-KNGHGZA4.js.map} +0 -0
  23. package/dist/esm/{search-dynamic-sgs-unofficial-MQH2M2GS.js → search-dynamic-sgs-unofficial-5UKPPXG6.js} +3 -3
  24. package/dist/esm/{search-dynamic-sgs-unofficial-MQH2M2GS.js.map → search-dynamic-sgs-unofficial-5UKPPXG6.js.map} +0 -0
  25. package/dist/esm/{search-dynamic-solve-4x4x4-LWU4NFY4.js → search-dynamic-solve-4x4x4-TWEBDU25.js} +4 -4
  26. package/dist/esm/{search-dynamic-solve-4x4x4-LWU4NFY4.js.map → search-dynamic-solve-4x4x4-TWEBDU25.js.map} +0 -0
  27. package/dist/esm/{search-worker-inside-generated-string-PTO7TGLZ.js → search-worker-inside-generated-string-B4ROHW5F.js} +2 -2
  28. package/dist/esm/{search-worker-inside-generated-string-PTO7TGLZ.js.map → search-worker-inside-generated-string-B4ROHW5F.js.map} +1 -1
  29. package/dist/esm/{search-worker-js-entry-GOZHBDMZ.js → search-worker-js-entry-Y3TCZPYI.js} +5 -5
  30. package/dist/esm/{search-worker-js-entry-GOZHBDMZ.js.map → search-worker-js-entry-Y3TCZPYI.js.map} +0 -0
  31. package/dist/esm/{search-worker-ts-entry-GRGPJCWU.js → search-worker-ts-entry-4IKMP4NN.js} +2 -2
  32. package/dist/esm/{search-worker-ts-entry-GRGPJCWU.js.map → search-worker-ts-entry-4IKMP4NN.js.map} +0 -0
  33. package/dist/esm/twisty/index.js +3 -3
  34. package/dist/esm/{twisty-dynamic-3d-G5CFOW3T.js → twisty-dynamic-3d-2PEWM2LR.js} +4 -4
  35. package/dist/esm/{twisty-dynamic-3d-G5CFOW3T.js.map → twisty-dynamic-3d-2PEWM2LR.js.map} +0 -0
  36. package/package.json +1 -1
@@ -3,7 +3,7 @@ var workerSource = `"use strict";var Rc=Object.defineProperty;var U=(A,g)=>()=>(
3
3
  \`)||e.includes("\\r"))throw new Error("LineComment cannot contain newline");lA(this,BB,e)}get text(){return w(this,BB)}isIdentical(e){let B=e;return e.is(Ar)&&w(this,BB)===w(B,BB)}invert(){return this}*experimentalExpand(e=1,B=1/0){yield this}toString(){return\`//\${w(this,BB)}\`}},$g=Ar;BB=new WeakMap});var Sg,kt=U(()=>{"use strict";Ke();ue();Sg=class extends Dg{toString(){return\`
4
4
  \`}isIdentical(g){return g.is(Sg)}invert(){return this}*experimentalExpand(g=1,e=1/0){yield this}}});var jA,hI=U(()=>{"use strict";Ke();ue();jA=class extends Dg{toString(){return"."}isIdentical(e){return e.is(jA)}invert(){return this}*experimentalExpand(e=1,B=1/0){yield this}}});function To(A,g){return A?parseInt(A):g}function gr(A){return new Ut().parseAlg(A)}function RQ(A){return new Ut().parseMove(A)}function LQ(A){return new Ut().parseQuantumMove(A)}function kg(A,g,e){let B=A;return B.startCharIndex=g,B.endCharIndex=e,B}function uQ(A,g){return"startCharIndex"in A&&(g.startCharIndex=A.startCharIndex),"endCharIndex"in A&&(g.endCharIndex=A.endCharIndex),g}var cQ,xc,Yc,Jc,vc,bc,qg,oA,pI,Ut,er=U(()=>{"use strict";ye();XC();$C();RI();yI();Nt();St();he();kt();hI();cQ=/^(\\d+)?('?)/,xc=/^[_\\dA-Za-z]/,Yc=/^((([1-9]\\d*)-)?([1-9]\\d*))?([_A-Za-z]+)?/,Jc=/^[^\\n]*/,vc=/^(-?\\d+), ?/,bc=/^(-?\\d+)\\)/;Ut=class{constructor(){cA(this,qg,"");cA(this,oA,0);cA(this,pI,[])}parseAlg(g){lA(this,qg,g),lA(this,oA,0);let e=this.parseAlgWithStopping([]);this.mustBeAtEndOfInput();let B=Array.from(e.childAlgNodes());if(w(this,pI).length>0)for(let i of w(this,pI).reverse())B.push(i);let I=new b(B),{startCharIndex:t,endCharIndex:o}=e;return kg(I,t,o),I}parseMove(g){lA(this,qg,g),lA(this,oA,0);let e=this.parseMoveImpl();return this.mustBeAtEndOfInput(),e}parseQuantumMove(g){lA(this,qg,g),lA(this,oA,0);let e=this.parseQuantumMoveImpl();return this.mustBeAtEndOfInput(),e}mustBeAtEndOfInput(){if(w(this,oA)!==w(this,qg).length)throw new Error("parsing unexpectedly ended early")}parseAlgWithStopping(g){let e=w(this,oA),B=w(this,oA),I=new Wg,t=!1,o=i=>{if(t)throw new Error(\`Unexpected character at index \${i}. Are you missing a space?\`)};A:for(;w(this,oA)<w(this,qg).length;){let i=w(this,oA);if(g.includes(w(this,qg)[w(this,oA)]))return kg(I.toAlg(),e,B);if(this.tryConsumeNext(" ")){t=!1,I.experimentalNumAlgNodes()===0&&(e=w(this,oA));continue A}else if(xc.test(w(this,qg)[w(this,oA)])){o(i);let r=this.parseMoveImpl();I.push(r),t=!0,B=w(this,oA);continue A}else if(this.tryConsumeNext("(")){o(i);let r=this.tryRegex(vc);if(r){let n=r[1],l=w(this,oA),Q=this.parseRegex(bc),f=kg(new y(new z("U_SQ_"),parseInt(n)),i+1,i+1+n.length),c=kg(new y(new z("D_SQ_"),parseInt(Q[1])),l,w(this,oA)-1),L=kg(new b([f,c]),i+1,w(this,oA)-1);I.push(kg(new Qg(L),i,w(this,oA))),t=!0,B=w(this,oA);continue A}else{let n=this.parseAlgWithStopping([")"]);this.mustConsumeNext(")");let l=this.parseAmount();I.push(kg(new Qg(n,l),i,w(this,oA))),t=!0,B=w(this,oA);continue A}}else if(this.tryConsumeNext("^")){if(!DQ.caretNISSNotationEnabled)throw new Error("Alg contained a caret but caret NISS notation is not enabled.");this.mustConsumeNext("(");let r=this.parseAlgWithStopping([")"]);this.popNext();let n=new Qg(r,-1),l=new jA;n.experimentalNISSPlaceholder=l,l.experimentalNISSGrouping=n,w(this,pI).push(n),I.push(l)}else if(this.tryConsumeNext("[")){o(i);let r=this.parseAlgWithStopping([",",":"]),n=this.popNext(),l=this.parseAlgWithStopping(["]"]);switch(this.mustConsumeNext("]"),n){case":":{I.push(kg(new Eg(r,l),i,w(this,oA))),t=!0,B=w(this,oA);continue A}case",":{I.push(kg(new ng(r,l),i,w(this,oA))),t=!0,B=w(this,oA);continue A}default:throw new Error("unexpected parsing error")}}else if(this.tryConsumeNext(\`
5
5
  \`)){I.push(kg(new Sg,i,w(this,oA))),t=!1,B=w(this,oA);continue A}else if(this.tryConsumeNext("/"))if(this.tryConsumeNext("/")){o(i);let[r]=this.parseRegex(Jc);I.push(kg(new $g(r),i,w(this,oA))),t=!1,B=w(this,oA);continue A}else{I.push(kg(new y("_SLASH_"),i,w(this,oA))),t=!0,B=w(this,oA);continue A}else if(this.tryConsumeNext(".")){o(i),I.push(kg(new jA,i,w(this,oA))),t=!0,B=w(this,oA);continue A}else throw new Error(\`Unexpected character: \${this.popNext()}\`)}if(w(this,oA)!==w(this,qg).length)throw new Error("did not finish parsing?");if(g.length>0)throw new Error("expected stopping");return kg(I.toAlg(),e,B)}parseQuantumMoveImpl(){let[,,,g,e,B]=this.parseRegex(Yc);return new z(B,To(e,void 0),To(g,void 0))}parseMoveImpl(){let g=w(this,oA);if(this.tryConsumeNext("/"))return kg(new y("_SLASH_"),g,w(this,oA));let e=this.parseQuantumMoveImpl(),[B,I]=this.parseAmountAndTrackEmptyAbsAmount(),t=this.parseMoveSuffix();if(t){if(B<0)throw new Error("uh-oh");if((t==="++"||t==="--")&&B!==1)throw new Error("Pochmann ++ or -- moves cannot have an amount other than 1.");if((t==="++"||t==="--")&&!I)throw new Error("Pochmann ++ or -- moves cannot have an amount written as a number.");if((t==="+"||t==="-")&&I)throw new Error("Clock dial moves must have an amount written as a natural number followed by + or -.");t.startsWith("+")&&(e=e.modified({family:\`\${e.family}_\${t==="+"?"PLUS":"PLUSPLUS"}_\`})),t.startsWith("-")&&(e=e.modified({family:\`\${e.family}_\${t==="-"?"PLUS":"PLUSPLUS"}_\`}),B*=-1)}return kg(new y(e,B),g,w(this,oA))}parseMoveSuffix(){return this.tryConsumeNext("+")?this.tryConsumeNext("+")?"++":"+":this.tryConsumeNext("-")?this.tryConsumeNext("-")?"--":"-":null}parseAmountAndTrackEmptyAbsAmount(){let g=w(this,oA),[,e,B]=this.parseRegex(cQ);if(e?.startsWith("0")&&e!=="0")throw new Error(\`Error at char index \${g}: An amount can only start with 0 if it's exactly the digit 0.\`);return[To(e,1)*(B==="'"?-1:1),!e]}parseAmount(){let g=w(this,oA),[,e,B]=this.parseRegex(cQ);if(e?.startsWith("0")&&e!=="0")throw new Error(\`Error at char index \${g}: An amount number can only start with 0 if it's exactly the digit 0.\`);return To(e,1)*(B==="'"?-1:1)}parseRegex(g){let e=g.exec(this.remaining());if(e===null)throw new Error("internal parsing error");return lA(this,oA,w(this,oA)+e[0].length),e}tryRegex(g){let e=g.exec(this.remaining());return e===null?null:(lA(this,oA,w(this,oA)+e[0].length),e)}remaining(){return w(this,qg).slice(w(this,oA))}popNext(){let g=w(this,qg)[w(this,oA)];return _C(this,oA)._++,g}tryConsumeNext(g){return w(this,qg)[w(this,oA)]===g?(_C(this,oA)._++,!0):!1}mustConsumeNext(g){let e=this.popNext();if(e!==g)throw new Error(\`expected \\\`\${g}\\\` while parsing, encountered \${e}\`);return e}};qg=new WeakMap,oA=new WeakMap,pI=new WeakMap});function _o(A){yQ.has(A)||(console.warn(A),yQ.add(A))}var yQ,Br=U(()=>{"use strict";yQ=new Set});var YB,Ir=U(()=>{"use strict";ue();VC();YB=class{constructor(g,e=1){if(this.quantum=g,this.amount=e,!Number.isInteger(this.amount)||this.amount<-2147483648||this.amount>2147483647)throw new Error(\`AlgNode amount absolute value must be a non-negative integer below \${dt}.\`)}suffix(){let g="",e=Math.abs(this.amount);return e!==1&&(g+=e),this.amount<0&&(g+="'"),g}isIdentical(g){return this.quantum.isIdentical(g.quantum)&&this.amount===g.amount}*experimentalExpand(g,e){let B=Math.abs(this.amount),I=sQ(g,this.amount<0);for(let t=0;t<B;t++)yield*this.quantum.experimentalExpand(I,e)}}});var xe,pg,Fg,jo,z,cg,FI,y,he=U(()=>{"use strict";Ke();ue();VC();er();Br();Ir();jo=class extends mt{constructor(e,B,I){super();cA(this,xe,void 0);cA(this,pg,void 0);cA(this,Fg,void 0);if(lA(this,xe,e),lA(this,pg,B??null),lA(this,Fg,I??null),Object.freeze(this),w(this,pg)!==null&&(!Number.isInteger(w(this,pg))||w(this,pg)<1||w(this,pg)>2147483647))throw new Error(\`QuantumMove inner layer must be a positive integer below \${dt}.\`);if(w(this,Fg)!==null&&(!Number.isInteger(w(this,Fg))||w(this,Fg)<1||w(this,Fg)>2147483647))throw new Error(\`QuantumMove outer layer must be a positive integer below \${dt}.\`);if(w(this,Fg)!==null&&w(this,pg)!==null&&w(this,pg)<=w(this,Fg))throw new Error("QuantumMove outer layer must be smaller than inner layer.");if(w(this,Fg)!==null&&w(this,pg)===null)throw new Error("QuantumMove with an outer layer must have an inner layer")}static fromString(e){return LQ(e)}modified(e){return new jo(e.family??w(this,xe),e.innerLayer??w(this,pg),e.outerLayer??w(this,Fg))}isIdentical(e){let B=e;return e.is(jo)&&w(this,xe)===w(B,xe)&&w(this,pg)===w(B,pg)&&w(this,Fg)===w(B,Fg)}get family(){return w(this,xe)}get outerLayer(){return w(this,Fg)}get innerLayer(){return w(this,pg)}experimentalExpand(){throw new Error("experimentalExpand() cannot be called on a \`QuantumMove\` directly.")}toString(){let e=w(this,xe);return w(this,pg)!==null&&(e=String(w(this,pg))+e,w(this,Fg)!==null&&(e=\`\${String(w(this,Fg))}-\${e}\`)),e}},z=jo;xe=new WeakMap,pg=new WeakMap,Fg=new WeakMap;FI=class extends Dg{constructor(...e){super();cA(this,cg,void 0);if(typeof e[0]=="string")if(e[1]??null){lA(this,cg,new YB(z.fromString(e[0]),e[1]));return}else return FI.fromString(e[0]);lA(this,cg,new YB(e[0],e[1]))}isIdentical(e){let B=e.as(FI);return!!B&&w(this,cg).isIdentical(w(B,cg))}invert(){return uQ(this,new FI(w(this,cg).quantum,-this.amount))}*experimentalExpand(e=1){e===1?yield this:yield this.modified({amount:-this.amount})}get quantum(){return w(this,cg).quantum}modified(e){return new FI(w(this,cg).quantum.modified(e),e.amount??this.amount)}static fromString(e){return RQ(e)}get amount(){return w(this,cg).amount}get type(){return _o("deprecated: type"),"blockMove"}get family(){return w(this,cg).quantum.family??void 0}get outerLayer(){return w(this,cg).quantum.outerLayer??void 0}get innerLayer(){return w(this,cg).quantum.innerLayer??void 0}toString(){if(this.family==="_SLASH_")return"/";if(this.family.endsWith("_PLUS_"))return w(this,cg).quantum.toString().slice(0,-6)+Math.abs(this.amount)+(this.amount<0?"-":"+");if(this.family.endsWith("_PLUSPLUS_")){let e=Math.abs(this.amount);return w(this,cg).quantum.toString().slice(0,-10)+(e===1?"":e)+(this.amount<0?"--":"++")}return w(this,cg).quantum.toString()+w(this,cg).suffix()}},y=FI;cg=new WeakMap});var tr,hQ,Pg,Zo,Qg,Nt=U(()=>{"use strict";ye();Ke();ue();he();Ir();tr=class{constructor(){this.quantumU_SQ_=null;this.quantumD_SQ_=null}format(g){let e=this.tuple(g);return e?\`(\${e.map(B=>B.amount).join(", ")})\`:null}tuple(g){this.quantumU_SQ_||(this.quantumU_SQ_=new z("U_SQ_")),this.quantumD_SQ_||(this.quantumD_SQ_=new z("D_SQ_"));let e=g.alg;if(e.experimentalNumChildAlgNodes()===2){let[B,I]=e.childAlgNodes();if(B.as(y)?.quantum.isIdentical(this.quantumU_SQ_)&&I.as(y)?.quantum.isIdentical(this.quantumD_SQ_)){if(g.amount!==1)throw new Error("Square-1 tuples cannot have an amount other than 1.");return[B,I]}}return null}},hQ=new tr,Zo=class extends Dg{constructor(e,B){super();cA(this,Pg,void 0);let I=eB(e);lA(this,Pg,new YB(I,B))}isIdentical(e){let B=e;return e.is(Zo)&&w(this,Pg).isIdentical(w(B,Pg))}get alg(){return w(this,Pg).quantum}get amount(){return w(this,Pg).amount}get experimentalRepetitionSuffix(){return w(this,Pg).suffix()}invert(){return new Zo(w(this,Pg).quantum,-w(this,Pg).amount)}*experimentalExpand(e=1,B){B??(B=1/0),B===0?yield e===1?this:this.invert():yield*w(this,Pg).experimentalExpand(e,B-1)}static fromString(){throw new Error("unimplemented")}toString(){return hQ.format(this)??\`(\${w(this,Pg).quantum.toString()})\${w(this,Pg).suffix()}\`}experimentalAsSquare1Tuple(){return hQ.tuple(this)}},Qg=Zo;Pg=new WeakMap});var wI=U(()=>{"use strict";Nt();St();RI();yI();he();kt();hI()});function Ce(A,g){return A instanceof g}function pQ(A){return Ce(A,Qg)||Ce(A,$g)||Ce(A,ng)||Ce(A,Eg)||Ce(A,y)||Ce(A,Sg)||Ce(A,jA)}var or=U(()=>{"use strict";wI()});function FQ(A,g,e){if(g.is(Qg))return A.traverseGrouping(g,e);if(g.is(y))return A.traverseMove(g,e);if(g.is(ng))return A.traverseCommutator(g,e);if(g.is(Eg))return A.traverseConjugate(g,e);if(g.is(jA))return A.traversePause(g,e);if(g.is(Sg))return A.traverseNewline(g,e);if(g.is($g))return A.traverseLineComment(g,e);throw new Error("unknown AlgNode")}function wQ(A){if(A.is(Qg)||A.is(y)||A.is(ng)||A.is(Eg)||A.is(jA)||A.is(Sg)||A.is($g))return A;throw new Error("internal error: expected AlgNode")}function re(A,g){let e=new A(...g??[]);return e.traverseAlg.bind(e)}var IB,JB,ir=U(()=>{"use strict";RI();yI();Nt();St();he();kt();hI();IB=class{traverseAlgNode(g,e){return FQ(this,g,e)}traverseIntoAlgNode(g,e){return wQ(this.traverseAlgNode(g,e))}},JB=class extends IB{traverseAlgNode(g){return FQ(this,g,void 0)}traverseIntoAlgNode(g){return wQ(this.traverseAlgNode(g))}}});var qc,mI,Cr=U(()=>{"use strict";qc="any-direction",mI=class{constructor(g={}){this.config=g}cancelQuantum(){let{cancel:g}=this.config;return g===!0?qc:g===!1?"none":g?.directional??"none"}cancelAny(){return this.config.cancel&&this.cancelQuantum()!=="none"}cancelPuzzleSpecificModWrap(){let{cancel:g}=this.config;return g===!0||g===!1?"canonical-centered":g?.puzzleSpecificModWrap?g?.puzzleSpecificModWrap:g?.directional==="same-direction"?"preserve-sign":"canonical-centered"}puzzleSpecificSimplifyOptions(){return this.config.puzzleLoader?.puzzleSpecificSimplifyOptions??this.config.puzzleSpecificSimplifyOptions}}});function Pc(A,g){return A*Math.sign(g.amount)>=0}function zc(A,g,e){return((A-e)%g+g)%g+e}function rr(A,g,e){let B=new mI(e),I=Array.from(A.childAlgNodes()),t=[g];function o(){return new b([...I,...t])}function i(r){if(B.cancelPuzzleSpecificModWrap()==="none")return r;let n=B.puzzleSpecificSimplifyOptions()?.quantumMoveOrder;if(!n)return r;let l=n(g.quantum),Q;switch(B.cancelPuzzleSpecificModWrap()){case"gravity":{Q=-Math.floor((l-(r.amount<0?0:1))/2);break}case"canonical-centered":{Q=-Math.floor((l-1)/2);break}case"canonical-positive":{Q=0;break}case"preserve-sign":{Q=r.amount<0?1-l:0;break}default:throw new Error("Unknown mod wrap")}let f=zc(r.amount,l,Q);return r.modified({amount:f})}if(B.cancelAny()){let r,n=B.puzzleSpecificSimplifyOptions()?.axis;if(n)r=L=>n.areQuantumMovesSameAxis(g.quantum,L.quantum);else{let L=g.quantum.toString();r=R=>R.quantum.toString()===L}let l=B.cancelQuantum()==="same-direction",Q=new Map;Q.set(g.quantum.toString(),Math.sign(g.amount));let f;for(f=I.length-1;f>=0;f--){let L=I[f].as(y);if(!L||!r(L))break;let R=L.quantum.toString();if(l){let p=Q.get(R);if(p&&!Pc(p,L))break;Q.set(R,Math.sign(L.amount))}}let c=[...I.splice(f+1),g];if(n)t=n.simplifySameAxisMoves(c,B.cancelPuzzleSpecificModWrap()!=="none");else{let L=c.reduce((R,p)=>R+p.amount,0);if(Q.size!==1)throw new Error("Internal error: multiple quantums when one was expected");t=[new y(g.quantum,L)]}}return t=t.map(r=>i(r)).filter(r=>r.amount!==0),o()}function nr(A,g,e){let B=g.as(y);return B?rr(A,B,e):new b([...A.childAlgNodes(),g])}var Er=U(()=>{"use strict";ye();he();Cr()});var Vo,Mt,lr,vB,Gt,Kt,sr,Qr,ar,mQ=U(()=>{"use strict";ye();RI();yI();Nt();he();hI();ir();Er();Cr();Qr=class extends IB{constructor(){super(...arguments);cA(this,Mt);cA(this,vB);cA(this,Kt);cA(this,Vo,void 0)}*traverseAlg(e,B){if(B.depth===0){yield*e.childAlgNodes();return}let I=[],t=Me(this,vB,Gt).call(this,B);for(let o of e.childAlgNodes())for(let i of this.traverseAlgNode(o,t))I=Array.from(nr(new b(I),i,t).childAlgNodes());for(let o of I)yield o}*traverseGrouping(e,B){if(B.depth===0){yield e;return}if(e.amount===0)return;let I=new Qg(this.traverseAlg(e.alg,Me(this,vB,Gt).call(this,B)),e.amount);if(I.alg.experimentalIsEmpty())return;let t=Me(this,Mt,lr).call(this).get(e);t&&(I.experimentalNISSPlaceholder=t,t.experimentalNISSGrouping=I),yield I}*traverseMove(e,B){yield e}*traverseCommutator(e,B){if(B.depth===0){yield e;return}let I=Me(this,vB,Gt).call(this,B),t=new ng(this.traverseAlg(e.A,I),this.traverseAlg(e.B,I));t.A.experimentalIsEmpty()||t.B.experimentalIsEmpty()||t.A.isIdentical(t.B)||t.A.isIdentical(t.B.invert())||Me(this,Kt,sr).call(this,t.A,t.B,B)||(yield t)}*traverseConjugate(e,B){if(B.depth===0){yield e;return}let I=Me(this,vB,Gt).call(this,B),t=new Eg(this.traverseAlg(e.A,I),this.traverseAlg(e.B,I));if(!t.B.experimentalIsEmpty()){if(t.A.experimentalIsEmpty()||t.A.isIdentical(t.B)||t.A.isIdentical(t.B.invert())||Me(this,Kt,sr).call(this,t.A,t.B,B)){yield*e.B.childAlgNodes();return}yield t}}*traversePause(e,B){if(e.experimentalNISSGrouping){let I=new jA;Me(this,Mt,lr).call(this).set(e.experimentalNISSGrouping,I),yield I}else yield e}*traverseNewline(e,B){yield e}*traverseLineComment(e,B){yield e}};Vo=new WeakMap,Mt=new WeakSet,lr=function(){return w(this,Vo)??lA(this,Vo,new Map)},vB=new WeakSet,Gt=function(e){return{...e,depth:e.depth?e.depth-1:null}},Kt=new WeakSet,sr=function(e,B,I){if(e.experimentalNumChildAlgNodes()===1&&B.experimentalNumChildAlgNodes()===1){let t=Array.from(e.childAlgNodes())[0]?.as(y),o=Array.from(B.childAlgNodes())[0]?.as(y);if(!(t&&o))return!1;if(o.quantum.isIdentical(t.quantum)||new mI(I).puzzleSpecificSimplifyOptions()?.axis?.areQuantumMovesSameAxis(t.quantum,o.quantum))return!0}return!1};ar=re(Qr)});var fr=U(()=>{"use strict";mQ();Er()});function dQ(A){if(!A)return[];if(Ce(A,b))return A.childAlgNodes();if(typeof A=="string")return gr(A).childAlgNodes();let g=A;if(typeof g[Symbol.iterator]=="function")return g;throw new Error("Invalid AlgNode")}function eB(A){return Ce(A,b)?A:new b(A)}function Oc(A,g){return A.is(Sg)||g.is(Sg)||g.as(Qg)?.experimentalNISSPlaceholder?"":A.is($g)&&!g.is(Sg)?\`
6
- \`:" "}var zg,bB,b,ye=U(()=>{"use strict";Ke();or();ue();er();fr();wI();St();he();kt();Br();bB=class extends Dg{constructor(e){super();cA(this,zg,void 0);lA(this,zg,Array.from(dQ(e)));for(let B of w(this,zg))if(!pQ(B))throw new Error("An alg can only contain alg nodes.")}isIdentical(e){let B=e;if(!e.is(bB))return!1;let I=Array.from(w(this,zg)),t=Array.from(w(B,zg));if(I.length!==t.length)return!1;for(let o=0;o<I.length;o++)if(!I[o].isIdentical(t[o]))return!1;return!0}invert(){return new bB(fQ(Array.from(w(this,zg)).map(e=>e.invert())))}*experimentalExpand(e=1,B){B??(B=1/0);for(let I of aQ(w(this,zg),e))yield*I.experimentalExpand(e,B)}expand(e){return new bB(this.experimentalExpand(1,e?.depth??1/0))}*experimentalLeafMoves(){for(let e of this.experimentalExpand())e.is(y)&&(yield e)}concat(e){return new bB(Array.from(w(this,zg)).concat(Array.from(dQ(e))))}experimentalIsEmpty(){for(let e of w(this,zg))return!1;return!0}static fromString(e){return gr(e)}units(){return this.childAlgNodes()}*childAlgNodes(){for(let e of w(this,zg))yield e}experimentalNumUnits(){return this.experimentalNumChildAlgNodes()}experimentalNumChildAlgNodes(){return Array.from(w(this,zg)).length}get type(){return _o("deprecated: type"),"sequence"}toString(){let e="",B=null;for(let I of w(this,zg)){B&&(e+=Oc(B,I));let t=I.as(jA)?.experimentalNISSGrouping;if(t){if(t.amount!==-1)throw new Error("Invalid NISS Grouping amount!");e+=\`^(\${t.alg.toString()})\`}else I.as(Qg)?.experimentalNISSPlaceholder||(e+=I.toString());B=I}return e}experimentalSimplify(e){return new bB(ar(this,e??{}))}simplify(e){return this.experimentalSimplify(e)}},b=bB;zg=new WeakMap});var Tc,SQ=U(()=>{"use strict";ye();wI();RI();yI();he();hI();Tc={Sune:new b([new y("R",1),new y("U",1),new y("R",-1),new y("U",1),new y("R",1),new y("U",-2),new y("R",-1)]),AntiSune:new b([new y("R",1),new y("U",2),new y("R",-1),new y("U",-1),new y("R",1),new y("U",-1),new y("R",-1)]),SuneCommutator:new b([new ng(new b([new y("R",1),new y("U",1),new y("R",-2)]),new b([new Eg(new b([new y("R",1)]),new b([new y("U",1)]))]))]),Niklas:new b([new y("R",1),new y("U",-1),new y("L",-1),new y("U",1),new y("R",-1),new y("U",-1),new y("L",1),new y("U",1)]),EPerm:new b([new y("x",-1),new ng(new b([new Eg(new b([new y("R",1)]),new b([new y("U",-1)]))]),new b([new y("D",1)])),new ng(new b([new Eg(new b([new y("R",1)]),new b([new y("U",1)]))]),new b([new y("D",1)])),new y("x",1)]),FURURFCompact:new b([new Eg(new b([new y("F",1)]),new b([new ng(new b([new y("U",1)]),new b([new y("R",1)]))]))]),APermCompact:new b([new Eg(new b([new y("R",2)]),new b([new ng(new b([new y("F",2)]),new b([new y("R",-1),new y("B",-1),new y("R",1)]))]))]),FURURFMoves:new b([new y("F",1),new y("U",1),new y("R",1),new y("U",-1),new y("R",-1),new y("F",-1)]),TPerm:new b([new y("R",1),new y("U",1),new y("R",-1),new y("U",-1),new y("R",-1),new y("F",1),new y("R",2),new y("U",-1),new y("R",-1),new y("U",-1),new y("R",1),new y("U",1),new y("R",-1),new y("F",-1)]),HeadlightSwaps:new b([new Eg(new b([new y("F",1)]),new b([new Qg(new b([new ng(new b([new y("R",1)]),new b([new y("U",1)]))]),3)]))]),TriplePause:new b([new jA,new jA,new jA])}});var am,kQ=U(()=>{"use strict";wI();he();am={73:new y("R"),75:new y("R'"),87:new y("B"),79:new y("B'"),83:new y("D"),76:new y("D'"),68:new y("L"),69:new y("L'"),74:new y("U"),70:new y("U'"),72:new y("F"),71:new y("F'"),78:new y("x'"),67:new y("l"),82:new y("l'"),85:new y("r"),77:new y("r'"),88:new y("d"),188:new y("d'"),84:new y("x"),89:new y("x"),66:new y("x'"),186:new y("y"),59:new y("y"),65:new y("y'"),80:new y("z"),81:new y("z'"),90:new y("M'"),190:new y("M'"),192:new jA}});var UQ=U(()=>{"use strict"});var wA=U(()=>{"use strict";ye();XC();ir();SQ();kQ();wI();UQ();fr();or();$C()});function Yt(A,g,e){let B={};for(let I in A.orbits){let t=A.orbits[I],o=g[I],i=e[I];if(xt(t.numOrientations,i))B[I]=o;else if(xt(t.numOrientations,o))B[I]=i;else{let r=new Array(t.numPieces);if(t.numOrientations===1){for(let n=0;n<t.numPieces;n++)r[n]=o.permutation[i.permutation[n]];B[I]={permutation:r,orientation:o.orientation}}else{let n=new Array(t.numPieces);for(let l=0;l<t.numPieces;l++)n[l]=(o.orientation[i.permutation[l]]+i.orientation[l])%t.numOrientations,r[l]=o.permutation[i.permutation[l]];B[I]={permutation:r,orientation:n}}}}return B}function Dr(A,g,e){let B={};for(let I in A.orbits){let t=A.orbits[I],o=g[I],i=e[I];if(xt(t.numOrientations,i))B[I]=o;else{let r=new Array(t.numPieces);if(t.numOrientations===1){for(let n=0;n<t.numPieces;n++)r[n]=o.pieces[i.permutation[n]];B[I]={pieces:r,orientation:o.orientation}}else{let n=new Array(t.numPieces);for(let l=0;l<t.numPieces;l++)n[l]=(o.orientation[i.permutation[l]]+i.orientation[l])%t.numOrientations,r[l]=o.pieces[i.permutation[l]];B[I]={pieces:r,orientation:n}}}}return B}var Xo=U(()=>{"use strict";Jt()});function _c(A){let g=NQ.get(A);if(g)return g;let e=new Array(A),B=new Array(A);for(let t=0;t<A;t++)e[t]=t,B[t]=0;let I={permutation:e,orientation:B};return GQ&&(Object.freeze(e),Object.freeze(B),Object.freeze(I)),NQ.set(A,I),I}function MQ(A){let g={};for(let[e,B]of Object.entries(A.orbits))g[e]=_c(B.numPieces);return GQ&&Object.freeze(g),g}function KQ(A,g){let e=g.quantum.toString(),B=A.definition.moves[e];if(!B){let o=A.definition.experimentalDerivedMoves?.[e];o&&(B=A.algToTransformation(o).transformationData)}if(B)return tB(A,B,g.amount);let I=A.definition.moves[g.toString()];if(I)return I;let t=A.definition.moves[g.invert().toString()];if(t)return tB(A,t,-1);throw new Error(\`Invalid move for KPuzzle (\${A.name()}): \${g}\`)}var GQ,NQ,cr=U(()=>{"use strict";Jt();GQ=!1,NQ=new Map});var YA,$o=U(()=>{"use strict";Xo();vt();YA=class{constructor(g,e){this.kpuzzle=g;this.stateData=e}toJSON(){return{experimentalPuzzleName:this.kpuzzle.name(),stateData:this.stateData}}static fromTransformation(g){let e=Dr(g.kpuzzle.definition,g.kpuzzle.definition.startStateData,g.transformationData);return new YA(g.kpuzzle,e)}apply(g){return this.applyTransformation(this.kpuzzle.toTransformation(g))}applyTransformation(g){if(g.isIdentityTransformation())return new YA(this.kpuzzle,this.stateData);let e=Dr(this.kpuzzle.definition,this.stateData,g.transformationData);return new YA(this.kpuzzle,e)}applyMove(g){return this.applyTransformation(this.kpuzzle.moveToTransformation(g))}applyAlg(g){return this.applyTransformation(this.kpuzzle.algToTransformation(g))}experimentalToTransformation(){if(!this.kpuzzle.canConvertStateToUniqueTransformation())return null;let g={};for(let[e,B]of Object.entries(this.stateData)){let I={permutation:B.pieces,orientation:B.orientation};g[e]=I}return new Ae(this.kpuzzle,g)}experimentalIsSolved(g){if(!this.kpuzzle.definition.experimentalIsStateSolved)throw new Error("\`KState.experimentalIsSolved()\` is not supported for this puzzle at the moment.");return this.kpuzzle.definition.experimentalIsStateSolved(this,g)}}});var HB,oB,Ae,vt=U(()=>{"use strict";Jt();Xo();cr();$o();oB=class{constructor(g,e){this.kpuzzle=g;this.transformationData=e;cA(this,HB,void 0)}toJSON(){return{experimentalPuzzleName:this.kpuzzle.name(),transformationData:this.transformationData}}invert(){return new oB(this.kpuzzle,Rr(this.kpuzzle,this.transformationData))}isIdentityTransformation(){return w(this,HB)??lA(this,HB,this.isIdentical(this.kpuzzle.identityTransformation()))}static experimentalConstructIdentity(g){let e=new oB(g,MQ(g.definition));return lA(e,HB,!0),e}isIdentical(g){return xQ(this.kpuzzle,this.transformationData,g.transformationData)}apply(g){return this.applyTransformation(this.kpuzzle.toTransformation(g))}applyTransformation(g){if(this.kpuzzle!==g.kpuzzle)throw new Error(\`Tried to apply a transformation for a KPuzzle (\${g.kpuzzle.name()}) to a different KPuzzle (\${this.kpuzzle.name()}).\`);return w(this,HB)?new oB(this.kpuzzle,g.transformationData):w(g,HB)?new oB(this.kpuzzle,this.transformationData):new oB(this.kpuzzle,Yt(this.kpuzzle.definition,this.transformationData,g.transformationData))}applyMove(g){return this.applyTransformation(this.kpuzzle.moveToTransformation(g))}applyAlg(g){return this.applyTransformation(this.kpuzzle.algToTransformation(g))}toKState(){return YA.fromTransformation(this)}repetitionOrder(){return YQ(this.kpuzzle.definition,this)}selfMultiply(g){return new oB(this.kpuzzle,tB(this.kpuzzle,this.transformationData,g))}},Ae=oB;HB=new WeakMap});function xt(A,g){let{permutation:e}=g,B=e.length;for(let I=0;I<B;I++)if(e[I]!==I)return!1;if(A>1){let{orientation:I}=g;for(let t=0;t<B;t++)if(I[t]!==0)return!1}return!0}function Wc(A,g,e,B={}){for(let I=0;I<A.numPieces;I++)if(!B?.ignoreOrientation&&g.orientation[I]!==e.orientation[I]||!B?.ignorePermutation&&g.permutation[I]!==e.permutation[I])return!1;return!0}function xQ(A,g,e){for(let[B,I]of Object.entries(A.definition.orbits))if(!Wc(I,g[B],e[B]))return!1;return!0}function Rr(A,g){let e={};for(let B in A.definition.orbits){let I=A.definition.orbits[B],t=g[B];if(xt(I.numOrientations,t))e[B]=t;else if(I.numOrientations===1){let o=new Array(I.numPieces);for(let i=0;i<I.numPieces;i++)o[t.permutation[i]]=i;e[B]={permutation:o,orientation:t.orientation}}else{let o=new Array(I.numPieces),i=new Array(I.numPieces);for(let r=0;r<I.numPieces;r++){let n=t.permutation[r];o[n]=r,i[n]=(I.numOrientations-t.orientation[r]+I.numOrientations)%I.numOrientations}e[B]={permutation:o,orientation:i}}}return e}function tB(A,g,e){if(e===1)return g;if(e<0)return tB(A,Rr(A,g),-e);if(e===0){let{transformationData:t}=A.identityTransformation();return t}let B=g;e!==2&&(B=tB(A,g,Math.floor(e/2)));let I=Yt(A.definition,B,B);return e%2===0?I:Yt(A.definition,g,I)}function ur(A,g){return g?ur(g,A%g):A}function YQ(A,g){let e=1;for(let B in A.orbits){let I=A.orbits[B],t=g.transformationData[B],o=new Array(I.numPieces);for(let i=0;i<I.numPieces;i++)if(!o[i]){let r=i,n=0,l=0;for(;o[r]=!0,n=n+t.orientation[r],l=l+1,r=t.permutation[r],r!==i;);n!==0&&(l=l*I.numOrientations/ur(I.numOrientations,Math.abs(n))),e=e*l/ur(e,l)}}return e}var Lr,JQ,Jt=U(()=>{"use strict";wA();wA();Xo();vt();Lr=class extends IB{traverseAlg(g,e){let B=null;for(let I of g.childAlgNodes())B?B=B.applyTransformation(this.traverseAlgNode(I,e)):B=this.traverseAlgNode(I,e);return B??e.identityTransformation()}traverseGrouping(g,e){let B=this.traverseAlg(g.alg,e);return new Ae(e,tB(e,B.transformationData,g.amount))}traverseMove(g,e){return e.moveToTransformation(g)}traverseCommutator(g,e){let B=this.traverseAlg(g.A,e),I=this.traverseAlg(g.B,e);return B.applyTransformation(I).applyTransformation(B.invert()).applyTransformation(I.invert())}traverseConjugate(g,e){let B=this.traverseAlg(g.A,e),I=this.traverseAlg(g.B,e);return B.applyTransformation(I).applyTransformation(B.invert())}traversePause(g,e){return e.identityTransformation()}traverseNewline(g,e){return e.identityTransformation()}traverseLineComment(g,e){return e.identityTransformation()}},JQ=re(Lr)});var dI,Ai,PA,vQ=U(()=>{"use strict";wA();Jt();cr();$o();vt();PA=class{constructor(g,e){this.definition=g;cA(this,dI,new Map);cA(this,Ai,void 0);this.experimentalPGNotation=e?.experimentalPGNotation}name(){return this.definition.name}identityTransformation(){return Ae.experimentalConstructIdentity(this)}moveToTransformation(g){typeof g=="string"&&(g=new y(g));let e=g.toString(),B=w(this,dI).get(e);if(B)return new Ae(this,B);if(this.experimentalPGNotation){let t=this.experimentalPGNotation.lookupMove(g);if(!t)throw new Error(\`could not map to internal move: \${g}\`);return w(this,dI).set(e,t),new Ae(this,t)}let I=KQ(this,g);return w(this,dI).set(e,I),new Ae(this,I)}algToTransformation(g){return typeof g=="string"&&(g=new b(g)),JQ(g,this)}toTransformation(g){return typeof g=="string"?this.algToTransformation(g):g?.is?.(b)?this.algToTransformation(g):g?.is?.(y)?this.moveToTransformation(g):g}startState(){return new YA(this,this.definition.startStateData)}canConvertStateToUniqueTransformation(){return w(this,Ai)??lA(this,Ai,(()=>{for(let[g,e]of Object.entries(this.definition.orbits)){let B=new Array(e.numPieces).fill(!1);for(let I of this.definition.startStateData[g].pieces)B[I]=!0;for(let I of B)if(!I)return!1}return!0})())}};dI=new WeakMap,Ai=new WeakMap});var lg=U(()=>{"use strict";vQ();$o();vt()});var bQ,jc,HQ=U(()=>{"use strict";bQ={333:{puzzleID:"3x3x3",eventName:"3x3x3 Cube"},222:{puzzleID:"2x2x2",eventName:"2x2x2 Cube"},444:{puzzleID:"4x4x4",eventName:"4x4x4 Cube"},555:{puzzleID:"5x5x5",eventName:"5x5x5 Cube"},666:{puzzleID:"6x6x6",eventName:"6x6x6 Cube"},777:{puzzleID:"7x7x7",eventName:"7x7x7 Cube"},"333bf":{puzzleID:"3x3x3",eventName:"3x3x3 Blindfolded"},"333fm":{puzzleID:"3x3x3",eventName:"3x3x3 Fewest Moves"},"333oh":{puzzleID:"3x3x3",eventName:"3x3x3 One-Handed"},clock:{puzzleID:"clock",eventName:"Clock"},minx:{puzzleID:"megaminx",eventName:"Megaminx"},pyram:{puzzleID:"pyraminx",eventName:"Pyraminx"},skewb:{puzzleID:"skewb",eventName:"Skewb"},sq1:{puzzleID:"square1",eventName:"Square-1"},"444bf":{puzzleID:"4x4x4",eventName:"4x4x4 Blindfolded"},"555bf":{puzzleID:"5x5x5",eventName:"5x5x5 Blindfolded"},"333mb":{puzzleID:"3x3x3",eventName:"3x3x3 Multi-Blind"}},jc={...bQ,fto:{puzzleID:"fto",eventName:"Face-Turning Octahedron"},master_tetraminx:{puzzleID:"master_tetraminx",eventName:"Master Tetraminx"},kilominx:{puzzleID:"kilominx",eventName:"Kilominx"},redi_cube:{puzzleID:"redi_cube",eventName:"Redi Cube"}}});function qQ(A){return Zc[A]}var Ye,pe,wg,SI,bt,qB,Zc,kI,UI,Ht=U(()=>{"use strict";Ye=class{constructor(g,e){this.stickerings=new Map;for(let[B,I]of Object.entries(g.definition.orbits))this.stickerings.set(B,new Array(I.numPieces).fill(e))}},pe="regular",wg="ignored",SI="oriented",bt="invisible",qB="dim",Zc={["Regular"]:{facelets:[pe,pe,pe,pe,pe]},["Ignored"]:{facelets:[wg,wg,wg,wg,wg]},["OrientationStickers"]:{facelets:[SI,SI,SI,SI,SI]},["IgnoreNonPrimary"]:{facelets:[pe,wg,wg,wg,wg]},["Invisible"]:{facelets:[bt,bt,bt,bt,bt]},["PermuteNonPrimary"]:{facelets:[qB,pe,pe,pe,pe]},["Dim"]:{facelets:[qB,qB,qB,qB,qB]},["Ignoriented"]:{facelets:[qB,wg,wg,wg,wg]},["OrientationWithoutPermutation"]:{facelets:[SI,wg,wg,wg,wg]}};kI=class extends Ye{constructor(g){super(g,"Regular")}set(g,e){for(let[B,I]of this.stickerings.entries())for(let t=0;t<I.length;t++)g.stickerings.get(B)[t]&&(I[t]=e);return this}toStickeringMask(){let g={orbits:{}};for(let[e,B]of this.stickerings.entries()){let I=[],t={pieces:I};g.orbits[e]=t;for(let o of B)I.push(qQ(o))}return g}},UI=class{constructor(g){this.kpuzzle=g}and(g){let e=new Ye(this.kpuzzle,!1);for(let[B,I]of Object.entries(this.kpuzzle.definition.orbits)){A:for(let t=0;t<I.numPieces;t++){e.stickerings.get(B)[t]=!0;for(let o of g)if(!o.stickerings.get(B)[t]){e.stickerings.get(B)[t]=!1;continue A}}}return e}or(g){let e=new Ye(this.kpuzzle,!1);for(let[B,I]of Object.entries(this.kpuzzle.definition.orbits)){A:for(let t=0;t<I.numPieces;t++){e.stickerings.get(B)[t]=!1;for(let o of g)if(o.stickerings.get(B)[t]){e.stickerings.get(B)[t]=!0;continue A}}}return e}not(g){let e=new Ye(this.kpuzzle,!1);for(let[B,I]of Object.entries(this.kpuzzle.definition.orbits))for(let t=0;t<I.numPieces;t++)e.stickerings.get(B)[t]=!g.stickerings.get(B)[t];return e}all(){return this.and(this.moves([]))}move(g){let e=this.kpuzzle.moveToTransformation(g),B=new Ye(this.kpuzzle,!1);for(let[I,t]of Object.entries(this.kpuzzle.definition.orbits))for(let o=0;o<t.numPieces;o++)(e.transformationData[I].permutation[o]!==o||e.transformationData[I].orientation[o]!==0)&&(B.stickerings.get(I)[o]=!0);return B}moves(g){return g.map(e=>this.move(e))}orbits(g){let e=new Ye(this.kpuzzle,!1);for(let B of g)e.stickerings.get(B).fill(!0);return e}orbitPrefix(g){let e=new Ye(this.kpuzzle,!1);for(let B in this.kpuzzle.definition.orbits)B.startsWith(g)&&e.stickerings.get(B).fill(!0);return e}}});var yr,hr=U(()=>{"use strict";yr={full:{groups:{"3x3x3":"Stickering"}},OLL:{groups:{"3x3x3":"Last Layer"}},PLL:{groups:{"3x3x3":"Last Layer"}},LL:{groups:{"3x3x3":"Last Layer"}},EOLL:{groups:{"3x3x3":"Last Layer"}},COLL:{groups:{"3x3x3":"Last Layer"}},OCLL:{groups:{"3x3x3":"Last Layer"}},CPLL:{groups:{"3x3x3":"Last Layer"}},CLL:{groups:{"3x3x3":"Last Layer"}},ELL:{groups:{"3x3x3":"Last Layer"}},ZBLL:{groups:{"3x3x3":"Last Layer"}},LS:{groups:{"3x3x3":"Last Slot"}},ELS:{groups:{"3x3x3":"Last Slot"}},CLS:{groups:{"3x3x3":"Last Slot"}},ZBLS:{groups:{"3x3x3":"Last Slot"}},VLS:{groups:{"3x3x3":"Last Slot"}},WVLS:{groups:{"3x3x3":"Last Slot"}},F2L:{groups:{"3x3x3":"CFOP (Fridrich)"}},Daisy:{groups:{"3x3x3":"CFOP (Fridrich)"}},Cross:{groups:{"3x3x3":"CFOP (Fridrich)"}},EO:{groups:{"3x3x3":"ZZ"}},EOline:{groups:{"3x3x3":"ZZ"}},EOcross:{groups:{"3x3x3":"ZZ"}},CMLL:{groups:{"3x3x3":"Roux"}},L10P:{groups:{"3x3x3":"Roux"}},L6E:{groups:{"3x3x3":"Roux"}},L6EO:{groups:{"3x3x3":"Roux"}},"2x2x2":{groups:{"3x3x3":"Petrus"}},"2x2x3":{groups:{"3x3x3":"Petrus"}},L2C:{groups:{"4x4x4":"Reduction","5x5x5":"Reduction","6x6x6":"Reduction"}},PBL:{groups:{"2x2x2":"Ortega"}},"Void Cube":{groups:{"3x3x3":"Miscellaneous"}},invisible:{groups:{"3x3x3":"Miscellaneous"}},picture:{groups:{"3x3x3":"Miscellaneous"}},"centers-only":{groups:{"3x3x3":"Miscellaneous"}},"experimental-centers-U":{},"experimental-centers-U-D":{},"experimental-centers-U-L-D":{},"experimental-centers-U-L-B-D":{},"experimental-centers":{},"experimental-fto-fc":{groups:{fto:"Bencisco"}},"experimental-fto-f2t":{groups:{fto:"Bencisco"}},"experimental-fto-sc":{groups:{fto:"Bencisco"}},"experimental-fto-l2c":{groups:{fto:"Bencisco"}},"experimental-fto-lbt":{groups:{fto:"Bencisco"}},"experimental-fto-l3t":{groups:{fto:"Bencisco"}}}});async function Je(A,g){let e=await A.kpuzzle(),B=new kI(e),I=new UI(e),t=()=>I.move("U"),o=()=>I.or(I.moves(["U","D"])),i=()=>I.or(I.moves(["L","R"])),r=()=>I.not(i()),n=()=>I.not(t()),l=()=>I.orbitPrefix("CENTER"),Q=()=>I.orbitPrefix("EDGE"),f=()=>I.or([I.orbitPrefix("CORNER"),I.orbitPrefix("C4RNER"),I.orbitPrefix("C5RNER")]),c=()=>I.or([r(),I.and([t(),Q()])]),L=()=>I.and([t(),l()]),R=()=>I.and([I.and(I.moves(["F","R"])),Q()]),p=()=>I.and([I.and(I.moves(["F","R"])),f(),I.not(t())]),k=()=>I.or([p(),R()]);function S(){B.set(n(),"Dim")}function G(){B.set(t(),"PermuteNonPrimary"),B.set(L(),"Dim")}function K(){B.set(t(),"IgnoreNonPrimary"),B.set(L(),"Regular")}function Y(){B.set(t(),"Ignoriented"),B.set(L(),"Dim")}switch(g){case"full":break;case"PLL":{S(),G();break}case"CLS":{S(),B.set(p(),"Regular"),B.set(t(),"Ignoriented"),B.set(I.and([t(),l()]),"Dim"),B.set(I.and([t(),f()]),"IgnoreNonPrimary");break}case"OLL":{S(),K();break}case"EOLL":{S(),K(),B.set(I.and([t(),f()]),"Ignored");break}case"COLL":{S(),B.set(I.and([t(),Q()]),"Ignoriented"),B.set(I.and([t(),l()]),"Dim"),B.set(I.and([t(),f()]),"Regular");break}case"OCLL":{S(),Y(),B.set(I.and([t(),f()]),"IgnoreNonPrimary");break}case"CPLL":{S(),B.set(I.not(I.and([f(),t()])),"Ignoriented");break}case"CLL":{S(),B.set(I.not(I.and([f(),t()])),"Dim");break}case"ELL":{S(),B.set(t(),"Dim"),B.set(I.and([t(),Q()]),"Regular");break}case"ELS":{S(),K(),B.set(I.and([t(),f()]),"Ignored"),B.set(R(),"Regular"),B.set(p(),"Ignored");break}case"LL":{S();break}case"F2L":{B.set(t(),"Ignored");break}case"ZBLL":{S(),B.set(t(),"PermuteNonPrimary"),B.set(L(),"Dim"),B.set(I.and([t(),f()]),"Regular");break}case"ZBLS":{S(),B.set(k(),"Regular"),K(),B.set(I.and([t(),f()]),"Ignored");break}case"VLS":{S(),B.set(k(),"Regular"),K();break}case"WVLS":{S(),B.set(k(),"Regular"),B.set(I.and([t(),Q()]),"Ignoriented"),B.set(I.and([t(),l()]),"Dim"),B.set(I.and([t(),f()]),"IgnoreNonPrimary");break}case"LS":{S(),B.set(k(),"Regular"),B.set(t(),"Ignored"),B.set(L(),"Dim");break}case"EO":{B.set(f(),"Ignored"),B.set(Q(),"OrientationWithoutPermutation");break}case"EOline":{B.set(f(),"Ignored"),B.set(Q(),"OrientationWithoutPermutation"),B.set(I.and(I.moves(["D","M"])),"Regular");break}case"EOcross":{B.set(Q(),"OrientationWithoutPermutation"),B.set(I.move("D"),"Regular"),B.set(f(),"Ignored");break}case"CMLL":{B.set(n(),"Dim"),B.set(c(),"Ignored"),B.set(I.and([t(),f()]),"Regular");break}case"L10P":{B.set(I.not(c()),"Dim"),B.set(I.and([f(),t()]),"Regular");break}case"L6E":{B.set(I.not(c()),"Dim");break}case"L6EO":{B.set(I.not(c()),"Dim"),B.set(c(),"OrientationWithoutPermutation"),B.set(I.and([l(),o()]),"OrientationStickers");break}case"Daisy":{B.set(I.all(),"Ignored"),B.set(l(),"Dim"),B.set(I.and([I.move("D"),l()]),"Regular"),B.set(I.and([I.move("U"),Q()]),"IgnoreNonPrimary");break}case"Cross":{B.set(I.all(),"Ignored"),B.set(l(),"Dim"),B.set(I.and([I.move("D"),l()]),"Regular"),B.set(I.and([I.move("D"),Q()]),"Regular");break}case"2x2x2":{B.set(I.or(I.moves(["U","F","R"])),"Ignored"),B.set(I.and([I.or(I.moves(["U","F","R"])),l()]),"Dim");break}case"2x2x3":{B.set(I.all(),"Dim"),B.set(I.or(I.moves(["U","F","R"])),"Ignored"),B.set(I.and([I.or(I.moves(["U","F","R"])),l()]),"Dim"),B.set(I.and([I.move("F"),I.not(I.or(I.moves(["U","R"])))]),"Regular");break}case"L2C":{B.set(I.or(I.moves(["L","R","B","D"])),"Dim"),B.set(I.not(l()),"Ignored");break}case"PBL":{B.set(I.all(),"Ignored"),B.set(I.or(I.moves(["U","D"])),"PermuteNonPrimary");break}case"Void Cube":{B.set(l(),"Invisible");break}case"picture":case"invisible":{B.set(I.all(),"Invisible");break}case"centers-only":{B.set(I.not(l()),"Ignored");break}default:console.warn(\`Unsupported stickering for \${A.id}: \${g}. Setting all pieces to dim.\`),B.set(I.and(I.moves([])),"Dim")}return B.toStickeringMask()}async function NI(A){let g=[],e=[];for(let[B,I]of Object.entries(yr))I.groups&&(A in I.groups?g.push(B):"3x3x3"in I.groups&&e.push(B));return g.concat(e)}var qt=U(()=>{"use strict";Ht();hr()});function kA(A){let g=null;return()=>g??(g=A())}var jg=U(()=>{"use strict"});function tg(A){return new ve(g=>{g(A())})}var ve,ge=U(()=>{"use strict";ve=class extends Promise{constructor(g){super(e=>{e()}),this._executor=g}static from(g){return new ve(e=>{e(g())})}static resolve(g){return new ve(e=>{e(g)})}static reject(g){return new ve((e,B)=>{B(g)})}then(g,e){return this._promise=this._promise||new Promise(this._executor),this._promise.then(g,e)}catch(g){return this._promise=this._promise||new Promise(this._executor),this._promise.catch(g)}}});var GI,zQ=U(()=>{"use strict";GI=class{constructor(g,e){this.facenames=g;this.prefixFree=!0;this.gripnames=[];e&&(this.gripnames=e);for(let B=0;this.prefixFree&&B<g.length;B++)for(let I=0;this.prefixFree&&I<g.length;I++)B!==I&&g[B].startsWith(g[I])&&(this.prefixFree=!1)}setGripNames(g){this.gripnames=g}splitByFaceNames(g){let e=[],B=0;for(;B<g.length;){B>0&&B<g.length&&g[B]==="_"&&B++;let I=-1;for(let t=0;t<this.facenames.length;t++)g.substr(B).startsWith(this.facenames[t])&&(I<0||this.facenames[t].length>this.facenames[I].length)&&(I=t);if(I>=0)e.push(I),B+=this.facenames[I].length;else throw new Error(\`Could not split \${g} into face names.\`)}return e}joinByFaceIndices(g){let e="",B=[];for(let I=0;I<g.length;I++)B.push(e),B.push(this.facenames[g[I]]),this.prefixFree||(e="_");return B.join("")}spinmatch(g,e){if(g===e)return!0;try{let B=this.splitByFaceNames(g),I=this.splitByFaceNames(e);if(B.length!==I.length&&B.length<3)return!1;for(let t=0;t<B.length;t++){for(let i=0;i<t;i++)if(B[t]===B[i])return!1;let o=!1;for(let i=0;i<I.length;i++)if(B[t]===I[i]){o=!0;break}if(!o)return!1}return!0}catch{return!1}}spinmatchv(g,e){return g.endsWith("v")&&e.endsWith("v")?this.spinmatch(g.slice(0,g.length-1),e.slice(0,e.length-1)):this.spinmatch(g,e)}unswizzle(g){(g.endsWith("v")||g.endsWith("w"))&&g[0]<="Z"&&(g=g.slice(0,g.length-1));let e=g.toUpperCase();for(let B=0;B<this.gripnames.length;B++){let I=this.gripnames[B];if(this.spinmatch(e,I))return I}return g}}});var PB,OQ=U(()=>{"use strict";PB=class{notationToInternal(g){return g}notationToExternal(g){return g}}});var Pt,TQ=U(()=>{"use strict";wA();Pt=class{constructor(g,e){this.child=g;this.sw=e}notationToInternal(g){return g.family==="T"&&g.innerLayer===void 0&&g.outerLayer===void 0?new y(new z("FLRv",g.innerLayer,g.outerLayer),g.amount):this.child.notationToInternal(g)}notationToExternal(g){let e=g.family;return e.length>0&&e[e.length-1]==="v"&&(e=e.substring(0,e.length-1)),this.sw.spinmatch(e,"FLUR")?new y(new z("T",g.innerLayer,g.outerLayer),g.amount):this.child.notationToExternal(g)}}});var MI,_Q=U(()=>{"use strict";wA();MI=class{constructor(g,e){this.internalNames=g;this.externalNames=e}convertString(g,e,B){let I="";(g.endsWith("v")||g.endsWith("v"))&&g<="_"&&(I=g.slice(g.length-1),g=g.slice(0,g.length-1));let t=g.toUpperCase(),o=!1;return g!==t&&(o=!0,g=t),g=B.joinByFaceIndices(e.splitByFaceNames(g)),o&&(g=g.toLowerCase()),g+I}convert(g,e,B){let I=g.family,t=this.convertString(I,e,B);return I===t?g:new y(new z(t,g.innerLayer,g.outerLayer),g.amount)}notationToInternal(g){return this.convert(g,this.externalNames,this.internalNames)}notationToExternal(g){return this.convert(g,this.internalNames,this.externalNames)}}});var zt,WQ=U(()=>{"use strict";wA();zt=class{constructor(g){this.child=g}notationToInternal(g){if(g.innerLayer===void 0&&g.outerLayer===void 0){if(Math.abs(g.amount)===1){if(g.family==="R++")return new y(new z("L",3,2),-2*g.amount);if(g.family==="R--")return new y(new z("L",3,2),2*g.amount);if(g.family==="D++")return new y(new z("U",3,2),-2*g.amount);if(g.family==="D--")return new y(new z("U",3,2),2*g.amount);if(g.family==="R_PLUSPLUS_")return new y(new z("L",3,2),-2*g.amount);if(g.family==="D_PLUSPLUS_")return new y(new z("U",3,2),-2*g.amount)}if(g.family==="y")return new y("Uv",g.amount);if(g.family==="x"&&Math.abs(g.amount)===2)return new y("ERv",g.amount/2)}return this.child.notationToInternal(g)}notationToExternal(g){return g.family==="ERv"&&Math.abs(g.amount)===1?new y(new z("x",g.innerLayer,g.outerLayer),g.amount*2):g.family==="ILv"&&Math.abs(g.amount)===1?new y(new z("x",g.innerLayer,g.outerLayer),-g.amount*2):g.family==="Uv"?new y(new z("y",g.innerLayer,g.outerLayer),g.amount):g.family==="Dv"?new y("y",-g.amount):this.child.notationToExternal(g)}}});var Ot,jQ=U(()=>{"use strict";wA();Ot=class{constructor(g){this.slices=g}notationToInternal(g){let e=g.family;return g.innerLayer||g.outerLayer||(e==="x"?g=new y("Rv",g.amount):e==="y"?g=new y("Uv",g.amount):e==="z"&&(g=new y("Fv",g.amount)),(this.slices&1)===1&&(e==="E"?g=new y(new z("D",(this.slices+1)/2),g.amount):e==="M"?g=new y(new z("L",(this.slices+1)/2),g.amount):e==="S"&&(g=new y(new z("F",(this.slices+1)/2),g.amount))),this.slices>2&&(e==="e"?g=new y(new z("D",this.slices-1,2),g.amount):e==="m"?g=new y(new z("L",this.slices-1,2),g.amount):e==="s"&&(g=new y(new z("F",this.slices-1,2),g.amount)))),g}notationToExternal(g){let e=g.family;if(!(g.innerLayer||g.outerLayer)){if(e==="Rv")return new y("x",g.amount);if(e==="Uv")return new y("y",g.amount);if(e==="Fv")return new y("z",g.amount);if(e==="Lv")return new y("x",-g.amount);if(e==="Dv")return new y("y",-g.amount);if(e==="Bv")return new y("z",-g.amount)}return g}}});var Vc,Xc,ZQ,VQ,XQ,KI,Tt,$Q=U(()=>{"use strict";wA();Vc={U:"frl",L:"fld",R:"fdr",B:"dlr",u:"FRL",l:"FLD",r:"FDR",b:"DLR",Uv:"FRLv",Lv:"FLDv",Rv:"FDRv",Bv:"DLRv",D:"D",F:"F",BL:"L",BR:"R"},Xc={U:"FRL",L:"FLD",R:"FDR",B:"DLR",u:"frl",l:"fld",r:"fdr",b:"dlr",Uv:"FRLv",Lv:"FLDv",Rv:"FDRv",Bv:"DLRv",D:"D",F:"F",BL:"L",BR:"R",d:"d",f:"f",bl:"l",br:"r"},ZQ={U:"FRL",L:"FLD",R:"FDR",B:"DLR"},VQ=new z("y"),XQ=new z("Dv"),KI=class{constructor(g){this.child=g;this.wcaHack=!1;this.map=Vc}notationToInternal(g){if(this.wcaHack&&g.innerLayer===2&&g.outerLayer===null){let B=ZQ[g.family];if(B)return new y(new z(B,g.innerLayer,g.outerLayer),g.amount)}let e=this.map[g.family];return e?new y(new z(e,g.innerLayer,g.outerLayer),g.amount):VQ.isIdentical(g.quantum)?new y(XQ,-g.amount):null}notationToExternal(g){if(this.wcaHack&&g.innerLayer===2&&g.outerLayer===null){for(let[e,B]of Object.entries(ZQ))if(this.child.spinmatch(g.family,B))return new y(new z(e,g.innerLayer,g.outerLayer),g.amount)}for(let[e,B]of Object.entries(this.map))if(this.child.spinmatch(g.family,B))return new y(new z(e,g.innerLayer,g.outerLayer),g.amount);return XQ.isIdentical(g.quantum)?new y(VQ,-g.amount):null}},Tt=class extends KI{constructor(e){super(e);this.wcaHack=!0;this.map=Xc}}});var Al,pr,gl,$c,Fr,el,AR,wr,Bl,gR,_t,Il=U(()=>{"use strict";wA();Al={U:"UBL",UL:"ULF",F:"UFR",UR:"URB",B:"DBL",D:"DFR",L:"DLF",R:"DRB",Uv:"UBLv",ULv:"ULFv",Fv:"UFRv",URv:"URBv",Bv:"DBLv",Dv:"DFRv",Lv:"DLFv",Rv:"DRBv"},pr=new z("x"),gl=new z("Rv"),$c=new z("Lv"),Fr=new z("y"),el=new z("Uv"),AR=new z("Dv"),wr=new z("z"),Bl=new z("Fv"),gR=new z("Bv"),_t=class{constructor(g){this.child=g}notationToInternal(g){if(g.innerLayer||g.outerLayer)return null;let e=Al[g.family];return e?new y(new z(e,g.outerLayer,g.innerLayer),g.amount):pr.isIdentical(g.quantum)?new y(gl,g.amount):Fr.isIdentical(g.quantum)?new y(el,g.amount):wr.isIdentical(g.quantum)?new y(Bl,g.amount):null}notationToExternal(g){for(let[e,B]of Object.entries(Al))if(this.child.spinmatchv(g.family,B))return new y(new z(e,g.innerLayer,g.outerLayer),g.amount);return gl.isIdentical(g.quantum)?new y(pr,g.amount):$c.isIdentical(g.quantum)?new y(pr,-g.amount):el.isIdentical(g.quantum)?new y(Fr,g.amount):AR.isIdentical(g.quantum)?new y(Fr,-g.amount):Bl.isIdentical(g.quantum)?new y(wr,g.amount):gR.isIdentical(g.quantum)?new y(wr,-g.amount):null}}});var mr=U(()=>{"use strict";OQ();TQ();_Q();WQ();jQ();$Q();Il()});function tl(A){let g=0,e={};for(;g<A.length&&A[g][0]==="-";){let I=A[g++];if(I==="--rotations")e.addRotations=!0;else if(I==="--allmoves")e.allMoves=!0;else if(I==="--outerblockmoves")e.outerBlockMoves=!0;else if(I==="--vertexmoves")e.vertexMoves=!0;else if(I==="--nocorners")e.includeCornerOrbits=!1;else if(I==="--noedges")e.includeEdgeOrbits=!1;else if(I==="--noorientation")e.fixedOrientation=!0;else if(I==="--nocenters")e.includeCenterOrbits=!1;else if(I==="--omit")e.excludeOrbits=A[g].split(","),g++;else if(I==="--moves")e.moveList=A[g].split(","),g++;else if(I==="--optimize")e.optimizeOrbits=!0;else if(I==="--scramble")e.scrambleAmount=100;else if(I==="--fixcorner")e.fixedPieceType="v";else if(I==="--fixedge")e.fixedPieceType="e";else if(I==="--fixcenter")e.fixedPieceType="f";else if(I==="--orientcenters")e.orientCenters=!0;else if(I==="--puzzleorientation")e.puzzleOrientation=JSON.parse(A[g]),g++;else throw new Error(\`Bad option: \${I}\`)}return{puzzleDescription:Wt(A.slice(g).join(" ")),options:e}}var gi,dr=U(()=>{"use strict";jt();gi=class{constructor(g={}){this.verbosity=0;this.allMoves=!1;this.vertexMoves=!1;this.addRotations=!1;this.moveList=null;this.fixedOrientation=!1;this.fixedPieceType=null;this.orientCenters=!1;this.includeCornerOrbits=!0;this.includeCenterOrbits=!0;this.includeEdgeOrbits=!0;this.excludeOrbits=[];this.optimizeOrbits=!1;this.grayCorners=!1;this.grayCenters=!1;this.grayEdges=!1;this.puzzleOrientation=null;this.puzzleOrientations=null;this.scrambleAmount=0;Object.assign(this,g)}}});function iB(A){if(!Sr[A]){let g=Array(A);for(let e=0;e<A;e++)g[e]=0;Sr[A]=g}return Sr[A]}function Fe(A){if(!kr[A]){let g=Array(A);for(let e=0;e<A;e++)g[e]=e;kr[A]=g}return kr[A]}function ol(A){return new Zg(Fe(A))}function il(A){let g=BigInt(1);for(;A>1;)g*=BigInt(A),A--;return g}function eR(A,g){if(A>g){let e=A;A=g,g=e}for(;A>0;){let e=g%A;g=A,A=e}return g}function Ur(A,g){return A/eR(A,g)*g}var Sr,kr,Zg,ei=U(()=>{"use strict";Sr=[],kr=[];Zg=class{constructor(g){this.n=g.length,this.p=g}toString(){return\`Perm[\${this.p.join(" ")}]\`}mul(g){let e=Array(this.n);for(let B=0;B<this.n;B++)e[B]=g.p[this.p[B]];return new Zg(e)}rmul(g){let e=Array(this.n);for(let B=0;B<this.n;B++)e[B]=this.p[g.p[B]];return new Zg(e)}inv(){let g=Array(this.n);for(let e=0;e<this.n;e++)g[this.p[e]]=e;return new Zg(g)}compareTo(g){for(let e=0;e<this.n;e++)if(this.p[e]!==g.p[e])return this.p[e]-g.p[e];return 0}toGap(){let g=new Array,e=new Array(this.n);for(let B=0;B<this.p.length;B++){if(e[B]||this.p[B]===B)continue;let I=new Array;for(let t=B;!e[t];t=this.p[t])I.push(1+t),e[t]=!0;g.push(\`(\${I.join(",")})\`)}return g.join("")}order(){let g=1,e=new Array(this.n);for(let B=0;B<this.p.length;B++){if(e[B]||this.p[B]===B)continue;let I=0;for(let t=B;!e[t];t=this.p[t])I++,e[t]=!0;g=Ur(g,I)}return g}}});function Bi(A,g){let e=y.fromString(g),B=A.notationToExternal(e);return B===null||e===B?g:B.toString()}function Cl(A,g){let e=A.moveops.length;if(e>30)throw new Error("Canon info too big for bitmask");let B=[],I=[];for(let o=0;o<e;o++){let i=A.moveops[o];B.push(i.order());let r=0;for(let n=0;n<e;n++){if(n===o)continue;let l=A.moveops[n];i.mul(l).equal(l.mul(i))&&(r|=1<<n)}I.push(r)}let t={};t[0]=1;for(let o=0;o<100;o++){let i=0,r={},n=0;for(let l in t){let Q=+l,f=t[Q];i+=f,n++;for(let c=0;c<B.length;c++)if((Q>>c&1)===0&&(Q&I[c]&(1<<c)-1)===0){let L=Q&I[c]|1<<c;r[L]===void 0&&(r[L]=0),r[L]+=(B[c]-1)*f}}g(\`\${o}: canonseq \${i} states \${n}\`),t=r}}var xI,BR,zB,ne,we,Ii,be,OB,ti,rl=U(()=>{"use strict";wA();mr();ei();xI=class{constructor(g,e){this.size=g;this.mod=e}reassemblySize(){return il(this.size)*BigInt(this.mod)**BigInt(this.size)}},BR=0;zB=class{constructor(g,e,B,I,t,o,i){this.orbitnames=g;this.orbitdefs=e;this.solved=B;this.movenames=I;this.moveops=t;this.isRotation=o;this.forcenames=i}transformToKTransformationData(g){let e={};for(let B=0;B<this.orbitnames.length;B++)e[this.orbitnames[B]]=g.orbits[B].toKPuzzle();return e}static transformToKTransformationData(g,e){let B={};for(let I=0;I<g.length;I++)B[g[I]]=e.orbits[I].toKPuzzle();return B}describeSet(g,e,B){let I=this.orbitdefs[g].size,t=new Array(I);for(let o=0;o<I;o++)t[o]=[];for(let o=0;o<this.movenames.length;o++){if(this.isRotation[o])continue;let i=this.movenames[o];this.forcenames[o]||(i=Bi(B,i),i[i.length-1]==="'"&&(i=i.substring(0,i.length-1)));let r=this.moveops[o].orbits[g];for(let n=0;n<I;n++)(r.perm[n]!==n||r.ori[n]!==0)&&t[n].push(i)}for(let o=0;o<I;o++)e.push(\`# \${o+1} \${t[o].join(" ")}\`)}toKsolve(g,e=new PB){let B=[];B.push(\`Name \${g}\`),B.push("");for(let I=0;I<this.orbitnames.length;I++)B.push(\`Set \${this.orbitnames[I]} \${this.orbitdefs[I].size} \${this.orbitdefs[I].mod}\`),this.describeSet(I,B,e);B.push(""),B.push("Solved");for(let I=0;I<this.orbitnames.length;I++)this.solved.orbits[I].appendDefinition(B,this.orbitnames[I],!1,!1);B.push("End");for(let I=0;I<this.movenames.length;I++){B.push("");let t=this.movenames[I];this.forcenames[I]||(t=Bi(e,this.movenames[I]));let o=!1;t[t.length-1]==="'"&&(o=!0,t=t.substring(0,t.length-1)),B.push(\`Move \${t}\`);for(let i=0;i<this.orbitnames.length;i++)o?this.moveops[I].orbits[i].inv().appendDefinition(B,this.orbitnames[i],!0):this.moveops[I].orbits[i].appendDefinition(B,this.orbitnames[i],!0);B.push("End")}return B}toKPuzzleDefinition(g){let e={},B={};for(let t=0;t<this.orbitnames.length;t++){e[this.orbitnames[t]]={numPieces:this.orbitdefs[t].size,numOrientations:this.orbitdefs[t].mod};let o=this.solved.orbits[t].toKPuzzle();B[this.orbitnames[t]]={pieces:o.permutation,orientation:o.orientation}}let I={};if(g)for(let t=0;t<this.movenames.length;t++)I[this.movenames[t]]=this.transformToKTransformationData(this.moveops[t]);return{name:\`PG3D #\${++BR}\`,orbits:e,startStateData:B,moves:I}}optimize(){let g=[],e=[],B=[],I=[];for(let t=0;t<this.moveops.length;t++)I.push([]);for(let t=0;t<this.orbitdefs.length;t++){let o=this.orbitdefs[t].mod,i=this.orbitdefs[t].size,r=new ti(i),n=new Array(this.orbitdefs[t].size);for(let c=0;c<i;c++)n[c]=!1;for(let c=0;c<this.moveops.length;c++)if(!this.isRotation[c])for(let L=0;L<i;L++)(this.moveops[c].orbits[t].perm[L]!==L||this.moveops[c].orbits[t].ori[L]!==0)&&(n[L]=!0,r.union(L,this.moveops[c].orbits[t].perm[L]));let l=!0;if(o>1){l=!1;let c=new ti(this.orbitdefs[t].size*o);for(let L=0;L<this.moveops.length;L++)for(let R=0;R<i;R++)if(this.moveops[L].orbits[t].perm[R]!==R||this.moveops[L].orbits[t].ori[R]!==0)for(let p=0;p<o;p++)c.union(R*o+p,this.moveops[L].orbits[t].perm[R]*o+(p+this.moveops[L].orbits[t].ori[R])%o);for(let L=0;!l&&L<i;L++)for(let R=1;R<o;R++)c.find(L*o)===c.find(L*o+R)&&(l=!0);for(let L=0;!l&&L<i;L++)for(let R=0;R<L;R++)this.solved.orbits[t].perm[L]===this.solved.orbits[t].perm[R]&&(l=!0)}let Q=-1,f=!1;for(let c=0;c<this.orbitdefs[t].size;c++)if(n[c]){let L=r.find(c);Q<0?Q=L:Q!==L&&(f=!0)}for(let c=0;c<this.orbitdefs[t].size;c++){if(!n[c]||r.find(c)!==c)continue;let R=[],p=[],k=0;for(let S=0;S<this.orbitdefs[t].size;S++)r.find(S)===c&&(R[k]=S,p[S]=k,k++);if(f?g.push(\`\${this.orbitnames[t]}_p\${c}\`):g.push(this.orbitnames[t]),l){e.push(new xI(k,this.orbitdefs[t].mod)),B.push(this.solved.orbits[t].remapVS(R,k));for(let S=0;S<this.moveops.length;S++)I[S].push(this.moveops[S].orbits[t].remap(R,p,k))}else{e.push(new xI(k,1)),B.push(this.solved.orbits[t].remapVS(R,k).killOri());for(let S=0;S<this.moveops.length;S++)I[S].push(this.moveops[S].orbits[t].remap(R,p,k).killOri())}}}return new zB(g,e,new OB(B),this.movenames,I.map(t=>new be(t)),this.isRotation,this.forcenames)}scramble(g){this.solved=this.solved.mul(this.getScrambleTransformation(g))}getScrambleTransformation(g){g<100&&(g=100);let e=[];for(let I=0;I<this.moveops.length;I++)e[I]=this.moveops[I];for(let I=0;I<e.length;I++){let t=Math.floor(Math.random()*e.length),o=e[I];e[I]=e[t],e[t]=o}g<e.length&&(g=e.length);for(let I=0;I<g;I++){let t=Math.floor(Math.random()*e.length),o=Math.floor(Math.random()*e.length),i=Math.floor(Math.random()*this.moveops.length);e[t]=e[t].mul(e[o]).mul(this.moveops[i]),Math.random()<.1&&(e[t]=e[t].mul(this.moveops[i]))}let B=e[0];for(let I=1;I<e.length;I++)B=B.mul(e[I]);return B}reassemblySize(){let g=BigInt(1);for(let e=0;e<this.orbitdefs.length;e++)g*=this.orbitdefs[e].reassemblySize();return g}},ne=class{constructor(g,e,B){this.perm=g;this.ori=e;this.orimod=B}static e(g,e){return new ne(Fe(g),iB(g),e)}mul(g){let e=this.perm.length,B=new Array(e);if(this.orimod===1){for(let I=0;I<e;I++)B[I]=this.perm[g.perm[I]];return new ne(B,this.ori,this.orimod)}else{let I=new Array(e);for(let t=0;t<e;t++)B[t]=this.perm[g.perm[t]],I[t]=(this.ori[g.perm[t]]+g.ori[t])%this.orimod;return new ne(B,I,this.orimod)}}inv(){let g=this.perm.length,e=new Array(g),B=new Array(g);for(let I=0;I<g;I++)e[this.perm[I]]=I,B[this.perm[I]]=(this.orimod-this.ori[I])%this.orimod;return new ne(e,B,this.orimod)}equal(g){let e=this.perm.length;for(let B=0;B<e;B++)if(this.perm[B]!==g.perm[B]||this.ori[B]!==g.ori[B])return!1;return!0}killOri(){let g=this.perm.length;for(let e=0;e<g;e++)this.ori[e]=0;return this.orimod=1,this}toPerm(){let g=this.orimod;if(g===1)return new Zg(this.perm);let e=this.perm.length,B=new Array(e*g);for(let I=0;I<e;I++)for(let t=0;t<g;t++)B[I*g+t]=g*this.perm[I]+(this.ori[I]+t)%g;return new Zg(B)}identicalPieces(){let g=[],e=this.perm.length,B=[];for(let I=0;I<e;I++){let t=this.perm[I];if(g[t]===void 0){let o=[I];g[t]=!0;for(let i=I+1;i<e;i++)this.perm[i]===t&&o.push(i);B.push(o)}}return B}order(){return this.toPerm().order()}isIdentity(){let g=this.perm.length;if(this.perm===Fe(g)&&this.ori===iB(g))return!0;for(let e=0;e<g;e++)if(this.perm[e]!==e||this.ori[e]!==0)return!1;return!0}zeroOris(){let g=this.perm.length;if(this.ori===iB(g))return!0;for(let e=0;e<g;e++)if(this.ori[e]!==0)return!1;return!0}remap(g,e,B){let I=new Array(B),t=new Array(B);for(let o=0;o<B;o++)I[o]=e[this.perm[g[o]]],t[o]=this.ori[g[o]];return new ne(I,t,this.orimod)}remapVS(g,e){let B=new Array(e),I=new Array(e),t=0,o=[];for(let i=0;i<e;i++){let r=this.perm[g[i]];o[r]===void 0&&(o[r]=t++),B[i]=o[r],I[i]=this.ori[g[i]]}return new ne(B,I,this.orimod)}appendDefinition(g,e,B,I=!0){if(!(I&&this.isIdentity())&&(g.push(e),g.push(this.perm.map(t=>t+1).join(" ")),!this.zeroOris()))if(B){let t=new Array(this.ori.length);for(let o=0;o<t.length;o++)t[this.perm[o]]=this.ori[o];g.push(t.join(" "))}else g.push(this.ori.join(" "))}toKPuzzle(){let g=this.perm.length;return this.isIdentity()?(ne.kcache[g]||(ne.kcache[g]={permutation:Fe(g),orientation:iB(g)}),ne.kcache[g]):{permutation:this.perm,orientation:this.ori}}},we=ne;we.kcache=[];Ii=class{constructor(g){this.orbits=g}internalMul(g){let e=[];for(let B=0;B<this.orbits.length;B++)e.push(this.orbits[B].mul(g.orbits[B]));return e}internalInv(){let g=[];for(let e of this.orbits)g.push(e.inv());return g}equal(g){for(let e=0;e<this.orbits.length;e++)if(!this.orbits[e].equal(g.orbits[e]))return!1;return!0}killOri(){for(let g of this.orbits)g.killOri();return this}toPerm(){let g=new Array,e=0;for(let I of this.orbits){let t=I.toPerm();g.push(t),e+=t.n}let B=new Array(e);e=0;for(let I of g){for(let t=0;t<I.n;t++)B[e+t]=e+I.p[t];e+=I.n}return new Zg(B)}identicalPieces(){let g=[],e=0;for(let B of this.orbits){let I=B.orimod,t=B.identicalPieces();for(let o=0;o<t.length;o++)g.push(t[o].map(i=>i*I+e));e+=I*B.perm.length}return g}order(){let g=1;for(let e of this.orbits)g=Ur(g,e.order());return g}},be=class extends Ii{constructor(g){super(g)}mul(g){return new be(this.internalMul(g))}mulScalar(g){if(g===0)return this.e();let e=this;for(g<0&&(e=e.inv(),g=-g);(g&1)===0;)e=e.mul(e),g>>=1;if(g===1)return e;let B=e,I=this.e();for(;g>0;)g&1&&(I=I.mul(B)),g>1&&(B=B.mul(B)),g>>=1;return I}inv(){return new be(this.internalInv())}e(){return new be(this.orbits.map(g=>we.e(g.perm.length,g.orimod)))}},OB=class extends Ii{constructor(g){super(g)}mul(g){return new OB(this.internalMul(g))}},ti=class{constructor(g){this.n=g;this.heads=new Array(g);for(let e=0;e<g;e++)this.heads[e]=e}find(g){let e=this.heads[g];return this.heads[e]===e||(e=this.find(this.heads[e]),this.heads[g]=e),e}union(g,e){let B=this.find(g),I=this.find(e);B<I?this.heads[I]=B:B>I&&(this.heads[B]=I)}}});var oi,nl=U(()=>{"use strict";oi={"2x2x2":"c f 0","3x3x3":"c f 0.333333333333333","4x4x4":"c f 0.5 f 0","5x5x5":"c f 0.6 f 0.2","6x6x6":"c f 0.666666666666667 f 0.333333333333333 f 0","7x7x7":"c f 0.714285714285714 f 0.428571428571429 f 0.142857142857143","8x8x8":"c f 0.75 f 0.5 f 0.25 f 0","9x9x9":"c f 0.777777777777778 f 0.555555555555556 f 0.333333333333333 f 0.111111111111111","10x10x10":"c f 0.8 f 0.6 f 0.4 f 0.2 f 0","11x11x11":"c f 0.818181818181818 f 0.636363636363636 f 0.454545454545455 f 0.272727272727273 f 0.0909090909090909","12x12x12":"c f 0.833333333333333 f 0.666666666666667 f 0.5 f 0.333333333333333 f 0.166666666666667 f 0","13x13x13":"c f 0.846153846153846 f 0.692307692307692 f 0.538461538461538 f 0.384615384615385 f 0.230769230769231 f 0.0769230769230769","20x20x20":"c f 0 f .1 f .2 f .3 f .4 f .5 f .6 f .7 f .8 f .9","30x30x30":"c f 0 f .066667 f .133333 f .2 f .266667 f .333333 f .4 f .466667 f .533333 f .6 f .666667 f .733333 f .8 f .866667 f .933333","40x40x40":"c f 0 f .05 f .1 f .15 f .2 f .25 f .3 f .35 f .4 f .45 f .5 f .55 f .6 f .65 f .7 f .75 f .8 f .85 f .9 f .95",skewb:"c v 0","master skewb":"c v 0.275","professor skewb":"c v 0 v 0.38","compy cube":"c v 0.915641442663986",helicopter:"c e 0.707106781186547","curvy copter":"c e 0.83",dino:"c v 0.577350269189626","little chop":"c e 0",pyramorphix:"t e 0",mastermorphix:"t e 0.346184634065199",pyraminx:"t v 0.333333333333333 v 1.66666666666667",tetraminx:"t v 0.333333333333333","master pyraminx":"t v 0 v 1 v 2","master tetraminx":"t v 0 v 1","professor pyraminx":"t v -0.2 v 0.6 v 1.4 v 2.2","professor tetraminx":"t v -0.2 v 0.6 v 1.4","Jing pyraminx":"t f 0","master pyramorphix":"t e 0.866025403784437",megaminx:"d f 0.7",gigaminx:"d f 0.64 f 0.82",teraminx:"d f 0.64 f 0.76 f 0.88",petaminx:"d f 0.64 f 0.73 f 0.82 f 0.91",examinx:"d f 0.64 f 0.712 f 0.784 f 0.856 f 0.928",zetaminx:"d f 0.64 f 0.7 f 0.76 f 0.82 f 0.88 f 0.94",yottaminx:"d f 0.64 f 0.6914 f 0.7429 f 0.7943 f 0.8457 f 0.8971 f 0.9486",pentultimate:"d f 0","master pentultimate":"d f 0.1","elite pentultimate":"d f 0 f 0.145905",starminx:"d v 0.937962370425399","starminx 2":"d f 0.23606797749979","pyraminx crystal":"d f 0.447213595499989",chopasaurus:"d v 0","big chop":"d e 0","skewb diamond":"o f 0",FTO:"o f 0.333333333333333","master FTO":"o f 0.5 f 0","Christopher's jewel":"o v 0.577350269189626",octastar:"o e 0","Trajber's octahedron":"o v 0.433012701892219","radio chop":"i f 0",icosamate:"i v 0","icosahedron 2":"i v 0.18759247376021","icosahedron 3":"i v 0.18759247376021 e 0","icosahedron static faces":"i v 0.84","icosahedron moving faces":"i v 0.73","Eitan's star":"i f 0.61803398874989","2x2x2 + dino":"c f 0 v 0.577350269189626","2x2x2 + little chop":"c f 0 e 0","dino + little chop":"c v 0.577350269189626 e 0","2x2x2 + dino + little chop":"c f 0 v 0.577350269189626 e 0","megaminx + chopasaurus":"d f 0.61803398875 v 0","starminx combo":"d f 0.23606797749979 v 0.937962370425399"}});function ii(A){let g=new iA(0,0,0,0);for(let e=0;e<A.length;e++)g=g.sum(A[e]);return g.smul(1/A.length)}function El(A,g,e,B){let I=B[A].intersect3(B[g],B[e]);if(!I)return I;for(let t=0;t<B.length;t++)if(t!==A&&t!==g&&t!==e){let o=B[t].b*I.b+B[t].c*I.c+B[t].d*I.d;if(B[t].a>0&&o>B[t].a||B[t].a<0&&o<B[t].a)return!1}return I}var iA,Ci=U(()=>{"use strict";iA=class{constructor(g,e,B,I){this.a=g;this.b=e;this.c=B;this.d=I}mul(g){return new iA(this.a*g.a-this.b*g.b-this.c*g.c-this.d*g.d,this.a*g.b+this.b*g.a+this.c*g.d-this.d*g.c,this.a*g.c-this.b*g.d+this.c*g.a+this.d*g.b,this.a*g.d+this.b*g.c-this.c*g.b+this.d*g.a)}toString(){return\`Q[\${this.a},\${this.b},\${this.c},\${this.d}]\`}dist(g){return Math.hypot(this.a-g.a,this.b-g.b,this.c-g.c,this.d-g.d)}len(){return Math.hypot(this.a,this.b,this.c,this.d)}cross(g){return new iA(0,this.c*g.d-this.d*g.c,this.d*g.b-this.b*g.d,this.b*g.c-this.c*g.b)}dot(g){return this.b*g.b+this.c*g.c+this.d*g.d}normalize(){let g=Math.sqrt(this.dot(this));return new iA(this.a/g,this.b/g,this.c/g,this.d/g)}makenormal(){return new iA(0,this.b,this.c,this.d).normalize()}normalizeplane(){let g=Math.hypot(this.b,this.c,this.d);return new iA(this.a/g,this.b/g,this.c/g,this.d/g)}smul(g){return new iA(this.a*g,this.b*g,this.c*g,this.d*g)}sum(g){return new iA(this.a+g.a,this.b+g.b,this.c+g.c,this.d+g.d)}sub(g){return new iA(this.a-g.a,this.b-g.b,this.c-g.c,this.d-g.d)}angle(){return 2*Math.acos(this.a)}invrot(){return new iA(this.a,-this.b,-this.c,-this.d)}det3x3(g,e,B,I,t,o,i,r,n){return g*(t*n-o*r)+e*(o*i-I*n)+B*(I*r-t*i)}rotateplane(g){let e=g.mul(new iA(0,this.b,this.c,this.d)).mul(g.invrot());return e.a=this.a,e}orthogonal(){let g=Math.abs(this.b),e=Math.abs(this.c),B=Math.abs(this.d);return g<e&&g<B?this.cross(new iA(0,1,0,0)).normalize():e<g&&e<B?this.cross(new iA(0,0,1,0)).normalize():this.cross(new iA(0,0,0,1)).normalize()}pointrotation(g){let e=this.normalize();if(g=g.normalize(),e.sub(g).len()<1e-9)return new iA(1,0,0,0);let B=e.sum(g);B.len()<1e-9?B=B.orthogonal():B=B.normalize();let I=e.cross(B);return I.a=e.dot(B),I}unproject(g){return this.sum(g.smul(-this.dot(g)/(this.len()*g.len())))}rotatepoint(g){return g.mul(this).mul(g.invrot())}rotateface(g){return g.map(e=>e.rotatepoint(this))}intersect3(g,e){let B=this.det3x3(this.b,this.c,this.d,g.b,g.c,g.d,e.b,e.c,e.d);return Math.abs(B)<1e-9?!1:new iA(0,this.det3x3(this.a,this.c,this.d,g.a,g.c,g.d,e.a,e.c,e.d)/B,this.det3x3(this.b,this.a,this.d,g.b,g.a,g.d,e.b,e.a,e.d)/B,this.det3x3(this.b,this.c,this.a,g.b,g.c,g.a,e.b,e.c,e.a)/B)}side(g){return g>1e-9?1:g<-1e-9?-1:0}cutface(g){let e=this.a,B=0,I=null;for(let t=0;t<g.length;t++)B|=1<<this.side(g[t].dot(this)-e)+1;if((B&5)===5){I=[];let t=g.map(o=>this.side(o.dot(this)-e));for(let o=-1;o<=1;o+=2){let i=[];for(let r=0;r<g.length;r++){(t[r]===o||t[r]===0)&&i.push(g[r]);let n=(r+1)%g.length;if(t[r]+t[n]===0&&t[r]!==0){let l=g[r].dot(this)-e,Q=g[n].dot(this)-e,f=l/(l-Q),c=g[r].smul(1-f).sum(g[n].smul(f));i.push(c)}}I.push(i)}}return I}cutfaces(g){let e=[];for(let B=0;B<g.length;B++){let I=g[B],t=this.cutface(I);t?(e.push(t[0]),e.push(t[1])):e.push(I)}return e}faceside(g){let e=this.a;for(let B=0;B<g.length;B++){let I=this.side(g[B].dot(this)-e);if(I!==0)return I}throw new Error("Could not determine side of plane in faceside")}sameplane(g){let e=this.normalize(),B=g.normalize();return e.dist(B)<1e-9||e.dist(B.smul(-1))<1e-9}makecut(g){return new iA(g,this.b,this.c,this.d)}}});function Ql(){let A=Math.sqrt(.5);return[new iA(A,A,0,0),new iA(A,0,A,0)]}function ll(){return[new iA(.5,.5,.5,.5),new iA(.5,.5,.5,-.5)]}function sl(){let A=2*Math.PI/10,g=.5+.3*Math.sqrt(5),e=.5+.1*Math.sqrt(5),B=Math.sqrt(g*g+e*e);return g/=B,e/=B,[new iA(Math.cos(A),g*Math.sin(A),e*Math.sin(A),0),new iA(.5,.5,.5,.5)]}function al(){let A=.16666666666666666+Math.sqrt(5)/6,g=2/3+Math.sqrt(5)/3,e=Math.sqrt(A*A+g*g);A/=e,g/=e;let B=2*Math.PI/6;return[new iA(Math.cos(B),A*Math.sin(B),g*Math.sin(B),0),new iA(Math.cos(B),-A*Math.sin(B),g*Math.sin(B),0)]}function fl(){let A=Math.sqrt(.5);return[new iA(.5,.5,.5,.5),new iA(A,0,0,A)]}function Dl(A){let g=[new iA(1,0,0,0)];for(let e=0;e<g.length;e++)for(let B=0;B<A.length;B++){let I=A[B].mul(g[e]),t=I.smul(-1),o=!1;for(let i=0;i<g.length;i++)if(I.dist(g[i])<ri||t.dist(g[i])<ri){o=!0;break}o||g.push(I)}return g}function Nr(A,g){let e=[],B=[];for(let I=0;I<g.length;I++){let t=A.rotateplane(g[I]),o=!1;for(let i=0;i<e.length;i++)if(t.dist(e[i])<ri){o=!0;break}o||(e.push(t),B.push(g[I]))}return B}function Gr(A){let g=[];for(let e=1;e<A.length;e++)for(let B=e+1;B<A.length;B++){let I=El(0,e,B,A);if(I){let t=!1;for(let o=0;o<g.length;o++)if(I.dist(g[o])<ri){t=!0;break}t||g.push(I)}}for(;;){let e=!1;for(let B=0;B<g.length;B++){let I=(B+1)%g.length;if(A[0].dot(g[B].cross(g[I]))<0){let t=g[B];g[B]=g[I],g[I]=t,e=!0}}if(!e)break}return g}var ri,cl=U(()=>{"use strict";Ci();ri=1e-9});function ni(A,g){let e=A[0].p.length,B=ol(e),I=[],t=[],o=[],i=[],r=[];function n(c){for(let L=c.p.length-1;L>=0;L--){let R=c.p[L];if(R!==L){if(!I[L][R])return!1;c=c.mul(t[L][R])}}return!0}function l(c,L,R){i[c].push(L),r[c].push(R);for(let p=0;p<I[c].length;p++)I[c][p]&&Q(c,I[c][p].mul(L),R+o[c][p])}function Q(c,L,R){let p=L.p[c];if(!I[c][p]){I[c][p]=L,t[c][p]=L.inv(),o[c][p]=R;for(let S=0;S<i[c].length;S++)Q(c,L.mul(i[c][S]),R+r[c][S]);return}let k=L.mul(t[c][p]);n(k)||l(c-1,k,R+o[c][p])}function f(){I=[],t=[],i=[],o=[],r=[];for(let R=0;R<e;R++)I.push([]),t.push([]),o.push([]),i.push([]),r.push([]),I[R][R]=B,t[R][R]=B,o[R][R]=0;let c=0,L=BigInt(1);for(let R=0;R<A.length;R++){l(e-1,A[R],1),L=BigInt(1);let p=0,k=0,S=[],G=new Mr;for(let K=0;K<e;K++){let Y=0,T=0;for(let _=0;_<e;_++)I[K][_]&&(Y++,T+=o[K][_],K!==_&&c++);p+=i[K].length,L*=BigInt(Y),Y>1&&G.multiply(Y);let QA=T/Y;S.push(QA),k+=QA}g(\`\${R}: sz \${L} T \${p} sol \${k} none \${c} mults \${G.toString()}\`)}return L}return f()}var Mr,Kr=U(()=>{"use strict";ei();Mr=class{constructor(){this.mult=[]}multiply(g){for(let e=2;e*e<=g;e++)for(;g%e===0;)this.mult[e]!==void 0?this.mult[e]++:this.mult[e]=1,g/=e;g>1&&(this.mult[g]!==void 0?this.mult[g]++:this.mult[g]=1)}toString(){let g="";for(let e=0;e<this.mult.length;e++)this.mult[e]!==void 0&&(g!==""&&(g+="*"),g+=e,this.mult[e]>1&&(g+=\`^\${this.mult[e]}\`));return g}}});function IR(A,g){let e=[];for(let B of A)for(let I of g)e.push(I.rotate(B));return e}function iR(){return{4:[["F","D","L","R"]],6:[["F","D","L","U","R"],["R","F","","B",""]],8:[["F","D","L","R"],["D","F","BR",""],["BR","D","","BB"],["BB","BR","U","BL"]],12:[["U","F","","","",""],["F","U","R","C","A","L"],["R","F","","","E",""],["E","R","","BF","",""],["BF","E","BR","BL","I","D"]],20:[["R","C","F","E"],["F","R","L","U"],["L","F","A",""],["E","R","G","I"],["I","E","S","H"],["S","I","J","B"],["B","S","K","D"],["K","B","M","O"],["O","K","P","N"],["P","O","Q",""]]}}function CR(){return{4:{F:"#00ff00",D:"#ffff00",L:"#ff0000",R:"#0000ff"},6:{U:"#ffffff",F:"#00ff00",R:"#ff0000",D:"#ffff00",B:"#0000ff",L:"#ff8000"},8:{U:"#ffffff",F:"#ff0000",R:"#00bb00",D:"#ffff00",BB:"#1122ff",L:"#9524c5",BL:"#ff8800",BR:"#aaaaaa"},12:{U:"#ffffff",F:"#006633",R:"#ff0000",C:"#ffffd0",A:"#3399ff",L:"#660099",E:"#ff66cc",BF:"#99ff00",BR:"#0000ff",BL:"#ffff00",I:"#ff6633",D:"#999999"},20:{R:"#db69f0",C:"#178fde",F:"#23238b",E:"#9cc726",L:"#2c212d",U:"#177fa7",A:"#e0de7f",G:"#2b57c0",I:"#41126b",S:"#4b8c28",H:"#7c098d",J:"#7fe7b4",B:"#85fb74",K:"#3f4bc3",D:"#0ff555",M:"#f1c2c8",O:"#58d340",P:"#c514f2",N:"#14494e",Q:"#8b1be1"}}}function nR(){return{4:[["FLR",[0,1,0]],["F",[0,0,1]]],6:[["U",[0,1,0]],["F",[0,0,1]]],8:[["U",[0,1,0]],["F",[0,0,1]]],12:[["U",[0,1,0]],["F",[0,0,1]]],20:[["GUQMJ",[0,1,0]],["F",[0,0,1]]]}}function Ei(A,g){for(let e=0;e<A.length;e++)if(A[e][0].dist(g)<gg)return e;throw new Error("Element not found")}function Rl(){return oi}function Ll(A){return oi[A]}function Wt(A){let g=A.split(/ /).filter(Boolean);if(g.length%2===0)return null;let e=g[0];if(e!=="o"&&e!=="c"&&e!=="i"&&e!=="d"&&e!=="t")return null;let B=[];for(let I=1;I<g.length;I+=2){if(g[I]!=="f"&&g[I]!=="v"&&g[I]!=="e")return null;B.push({cutType:g[I],distance:parseFloat(g[I+1])})}return{shape:e,cuts:B}}function Yr(A,g={}){let e=Wt(A);if(e===null)throw new Error("Could not parse the puzzle description");let B=new Zt(e,Object.assign({},{allMoves:!0},g));return B.allstickers(),B.genperms(),B}function hl(A,g){return Yr(oi[A],g)}function ER(A,g,e){let B=!1;e-g[1]<g[0]&&(A=[A[2],A[3],A[0],A[1]],g=[e-g[1],e-g[0]],B=!0);let I=A[0],t="";if(g[0]===0&&g[1]===e)I=\`\${I}v\`;else if(g[0]===g[1])g[1]>0&&(t=String(g[1]+1));else if(g[0]===0)I=I.toLowerCase(),g[1]>1&&(t=String(g[1]+1));else throw new Error(\`We only support slice and outer block moves right now. \${g}\`);return[t+I,B]}function QR(A,g){let e=[],B=0;for(;B<A.length;){B>0&&B<A.length&&A[B]==="_"&&B++;let I="";for(let t of g)A.substr(B).startsWith(t[1])&&t[1].length>I.length&&(I=t[1]);if(I!=="")e.push(I),B+=I.length;else throw new Error(\`Could not split \${A} into face names.\`)}return e}function Qi(A,g){return[A.b/g,-A.c/g,A.d/g]}function xr(A,g){let e=[],B=A.length;for(let I=0;I<B;I++){let t=Qi(A.get(B-I-1),g);e[3*I]=t[0],e[3*I+1]=t[1],e[3*I+2]=t[2]}return e}var CB,YI,gg,tR,oR,rR,ul,yl,Zt,li,jt=U(()=>{"use strict";wA();zQ();mr();dr();ei();rl();nl();cl();Ci();Kr();CB=class{constructor(g){this.coords=new Array(g.length*3);for(let e=0;e<g.length;e++)this.coords[3*e]=g[e].b,this.coords[3*e+1]=g[e].c,this.coords[3*e+2]=g[e].d;this.length=g.length}get(g){return new iA(0,this.coords[3*g],this.coords[3*g+1],this.coords[3*g+2])}centermass(){let g=0,e=0,B=0;for(let I=0;I<this.length;I++)g+=this.coords[3*I],e+=this.coords[3*I+1],B+=this.coords[3*I+2];return new iA(0,g/this.length,e/this.length,B/this.length)}rotate(g){let e=[];for(let B=0;B<this.length;B++)e.push(this.get(B).rotatepoint(g));return new CB(e)}rotateforward(){let g=[];for(let e=1;e<this.length;e++)g.push(this.get(e));return g.push(this.get(0)),new CB(g)}},YI=class{constructor(g,e,B){this.face=g;this.left=e;this.right=B}split(g){let e=g.cutface(this.face);return e!==null&&(this.left===void 0?(this.left=new YI(e[0]),this.right=new YI(e[1])):(this.left=this.left?.split(g),this.right=this.right?.split(g))),this}collect(g,e){return this.left===void 0?g.push(new CB(this.face)):e?(this.left?.collect(g,!1),this.right?.collect(g,!0)):(this.right?.collect(g,!1),this.left?.collect(g,!0)),g}};gg=1e-9,tR="PuzzleGeometry 0.1 Copyright 2018 Tomas Rokicki.",oR=!1;rR={4:{v:["DFR","DLF","DRL","FLR"],e:["FR","LF","DF","DL","RD","RL"],c:["DF","FD","RL","LR"]},6:{v:["URF","UBR","ULB","UFL","DFR","DRB","DBL","DLF"],e:["UF","UR","UB","UL","DF","DR","DB","DL","FR","FL","BR","BL"],c:["UB","LU","FU","RU","BU","DF"]},8:{v:["UBBBRR","URFL","ULBLBB","DBRBBBL","DBLLF","DFRBR"],e:["UL","UBB","UR","BRD","BLD","FD","BRR","FR","FL","BLL","BLBB","BRBB"],c:["BBU","LU","RU","BRD","FD","BLD","DF","UBB"]},12:{v:["URF","UFL","ULBL","UBLBR","UBRR","DEBF","DBFI","DIA","DAC","DCE","LAI","ALF","FCA","CFR","REC","ERBR","BRBFE","BFBRBL","BLIBF","IBLL"],e:["UF","UR","UBR","UBL","UL","ER","EBR","EBF","ED","EC","IBF","IBL","IL","IA","ID","AC","CF","FA","BFBR","BRBL","BLBF","CD","AD","AL","FL","FR","CR","BFD","BRR","BLL"],c:["UF","FU","DBF","BFD","AD","CD","BRU","BLU","LA","RA","EBR","IBL"]},20:{v:["FLPQU","FUGER","FRCAL","HCREI","ISBDH","JSIEG","BSJMK","MQPOK","ONDBK","NOPLA","UQMJG","DNACH"],e:["FU","FL","FR","EG","ER","EI","SJ","SI","SB","KM","KB","KO","PQ","PO","PL","UG","JG","MQ","UQ","HC","HD","ND","NA","JM","CA","AL","CR","HI","DB","NO"],c:["FU","UF","GE","EG","JS","SJ","MK","KM","QP","PQ","LA","AL","RC","CR","IH","HI","BD","DB","ON","NO"]}};ul=["c","t","o","d","i"],yl=["f","v","e"];Zt=class{constructor(g,e){this.puzzleDescription=g;this.cmovesbyslice=[];this.duplicatedFaces=[];this.duplicatedCubies=[];this.fixedCubie=-1;this.net=[];this.colors=[];this.notationMapper=new PB;this.addNotationMapper="";this.setReidOrder=!1;let B="genperms";this.options=new gi(e),this.options.verbosity>0&&console.log(this.header("# ")),this.create(g)}create(g){let{shape:e,cuts:B}=g;this.moveplanes=[],this.moveplanes2=[],this.faces=[],this.cubies=[];let I=null;switch(e){case"c":{I=Ql();break}case"o":{I=fl();break}case"i":{I=al();break}case"t":{I=ll();break}case"d":{I=sl();break}default:throw new Error(\`Bad shape argument: \${e}\`)}this.rotations=Dl(I),this.options.verbosity&&console.log(\`# Rotations: \${this.rotations.length}\`);let t=I[0];this.baseplanerot=Nr(t,this.rotations);let o=this.baseplanerot.map(N=>t.rotateplane(N));this.baseplanes=o,this.baseFaceCount=o.length;let i=iR()[o.length];this.net=i,this.colors=CR()[o.length],this.options.verbosity>0&&console.log(\`# Base planes: \${o.length}\`);let r=Gr(o),n=new iA(0,0,0,0);this.options.verbosity>0&&console.log(\`# Face vertices: \${r.length}\`);let l=o[0].makenormal(),Q=r[0].sum(r[1]).makenormal(),f=r[0].makenormal(),c=new iA(1,l.b,l.c,l.d);this.options.verbosity>0&&console.log(\`# Boundary is \${c}\`);let R=Nr(c,this.rotations).map(N=>c.rotateplane(N)),p=Gr(R);this.edgedistance=p[0].sum(p[1]).smul(.5).dist(n),this.vertexdistance=p[0].dist(n);let k=[],S=[],G=!1,K=!1,Y=!1;for(let N of B){let q=null,AA=0;switch(N.cutType){case"f":{q=l,AA=1,G=!0;break}case"v":{q=f,AA=this.vertexdistance,Y=!0;break}case"e":{q=Q,AA=this.edgedistance,K=!0;break}default:throw new Error(\`Bad cut argument: \${N.cutType}\`)}k.push(q.makecut(N.distance)),S.push(N.distance<AA)}this.options.addRotations&&(G||k.push(l.makecut(10)),Y||k.push(f.makecut(10)),K||k.push(Q.makecut(10))),this.basefaces=[];for(let N of this.baseplanerot){let q=N.rotateface(p);this.basefaces.push(new CB(q))}let T=[],QA=[],_=[],rA=[],M=p.length;function P(N,q,AA){for(let $ of N)if($[0].dist(q)<gg){$.push(AA);return}N.push([q,AA])}for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p);for(let AA=0;AA<q.length;AA++){let $=(AA+1)%q.length,sA=q[AA].sum(q[$]).smul(.5);P(rA,sA,N)}}let O=[];for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p),AA=[];for(let $=0;$<q.length;$++){let sA=($+1)%q.length,SA=q[$].sum(q[sA]).smul(.5),Bg=rA[Ei(rA,SA)];if(N===Bg[1])AA.push(Bg[2]);else if(N===Bg[2])AA.push(Bg[1]);else throw new Error("Could not find edge")}O.push(AA)}let v={},H=[];H.push(i[0][0]),v[i[0][0]]=0,H[O[0][0]]=i[0][1],v[i[0][1]]=O[0][0];for(let N of i){let q=N[0],AA=v[q];if(AA===void 0)throw new Error("Bad edge description; first edge not connected");let $=-1;for(let sA=0;sA<O[AA].length;sA++){let SA=H[O[AA][sA]];if(SA!==void 0&&SA===N[1]){$=sA;break}}if($<0)throw new Error("First element of a net not known");for(let sA=2;sA<N.length;sA++){if(N[sA]==="")continue;let SA=O[AA][(sA+$-1)%M],Bg=H[SA];if(Bg!==void 0&&Bg!==N[sA])throw new Error("Face mismatch in net");H[SA]=N[sA],v[N[sA]]=SA}}for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p),AA=c.rotateplane(this.baseplanerot[N]),$=H[N];T.push([q,$]),QA.push([AA,$])}for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p),AA=H[N];for(let $=0;$<q.length;$++){let sA=($+1)%q.length,SA=q[$].sum(q[sA]).smul(.5),Bg=($+2)%q.length,xC=q[sA].sum(q[Bg]).smul(.5),YC=Ei(rA,SA),JC=Ei(rA,xC);P(_,q[sA],[AA,JC,YC])}}this.swizzler=new GI(T.map(N=>N[1]));let V=this.swizzler.prefixFree?"":"_",CA=rR[this.baseFaceCount],gA=[];for(let N=0;N<this.baseFaceCount;N++)gA[1<<N]=N;{let N=CA.v;for(let q of N){let AA=this.swizzler.splitByFaceNames(q),$=0;for(let sA of AA)$|=1<<sA;gA[$]=AA[0]}}{let N=CA.e;for(let q of N){let AA=this.swizzler.splitByFaceNames(q),$=0;for(let sA of AA)$|=1<<sA;gA[$]=AA[0]}}{let N=CA.c;for(let q of N){let AA=this.swizzler.splitByFaceNames(q),$=1<<AA[0]|1<<this.baseFaceCount;gA[$]=AA[1]}}for(let N=0;N<rA.length;N++){if(rA[N].length!==3)throw new Error(\`Bad length in edge names \${rA[N]}\`);let q=rA[N][1],AA=rA[N][2],$=H[q],sA=H[AA],SA=1<<q|1<<AA;gA[SA]===q?$=$+V+sA:$=sA+V+$,rA[N]=[rA[N][0],$]}for(let N=0;N<_.length;N++){let q=0;if(_[N].length<4)throw new Error("Bad length in vertex names");for(let SA=1;SA<_[N].length;SA++)q|=1<<v[_[N][SA][0]];let AA=gA[q],$=-1;for(let SA=1;SA<_[N].length;SA++)AA===v[_[N][SA][0]]&&($=SA);if($<0)throw new Error("Internal error; couldn't find face name when fixing corners");let sA="";for(let SA=1;SA<_[N].length;SA++){SA===1?sA=_[N][$][0]:sA=sA+V+_[N][$][0];for(let Bg=1;Bg<_[N].length;Bg++)if(_[N][$][1]===_[N][Bg][2]){$=Bg;break}}_[N]=[_[N][0],sA]}this.markedface=gA,this.options.verbosity>1&&(console.log(\`# Face names: \${T.map(N=>N[1]).join(" ")}\`),console.log(\`# Edge names: \${rA.map(N=>N[1]).join(" ")}\`),console.log(\`# Vertex names: \${_.map(N=>N[1]).join(" ")}\`));let aA=[];for(let N of QA)aA.push([N[0].makenormal(),N[1],"f"]);for(let N of rA)aA.push([N[0].makenormal(),N[1],"e"]);for(let N of _)aA.push([N[0].makenormal(),N[1],"v"]);this.facenames=T,this.faceplanes=QA,this.edgenames=rA,this.vertexnames=_,this.geonormals=aA;let bA=aA.map(N=>N[1]);this.swizzler.setGripNames(bA),this.options.verbosity>0&&console.log(\`# Distances: face \${1} edge \${this.edgedistance} vertex \${this.vertexdistance}\`);for(let N=0;N<k.length;N++)for(let q of this.rotations){let AA=k[N].rotateplane(q),$=!1;for(let sA of this.moveplanes)if(AA.sameplane(sA)){$=!0;break}$||(this.moveplanes.push(AA),S[N]&&this.moveplanes2.push(AA))}let WA=new YI(p),eA=this.moveplanes2.slice(),qA=31;for(let N=0;N<eA.length;N++){let q=N+Math.floor((eA.length-N)*(qA/65536));WA=WA.split(eA[q]),eA[q]=eA[N],qA=(qA*1657+101)%65536}let xA=WA.collect([],!0);this.faces=xA,this.options.verbosity>0&&console.log(\`# Faces is now \${xA.length}\`),this.stickersperface=xA.length;let vg=[],hg=ii(p);for(let N of this.rotations){let q=N.rotateface(p);hg.dist(ii(q))<gg&&vg.push(N)}let bg=new Array(xA.length),Ag=[];for(let N=0;N<xA.length;N++){let q=xA[N].centermass();Ag.push([hg.dist(q),q,N])}Ag.sort((N,q)=>N[0]-q[0]);for(let N=0;N<xA.length;N++){let q=Ag[N][2];if(!bg[q]){bg[q]=!0;for(let AA of vg){let $=xA[q].rotate(AA),sA=$.centermass();for(let SA=N+1;SA<xA.length&&!(Ag[SA][0]-Ag[N][0]>gg);SA++){let Bg=Ag[SA][2];if(!bg[Bg]&&sA.dist(Ag[SA][1])<gg){bg[Bg]=!0,xA[Bg]=$;break}}}}}this.shortedge=1e99;for(let N of xA)for(let q=0;q<N.length;q++){let AA=(q+1)%N.length,$=N.get(q).dist(N.get(AA));$<this.shortedge&&(this.shortedge=$)}this.options.verbosity>0&&console.log(\`# Short edge is \${this.shortedge}\`),e==="c"&&G&&!K&&!Y&&(this.addNotationMapper="NxNxNCubeMapper",this.setReidOrder=!0),e==="c"&&Y&&!G&&!K&&(this.addNotationMapper="SkewbMapper"),e==="t"&&(Y||G)&&!K&&(this.addNotationMapper="PyraminxOrTetraminxMapper"),e==="o"&&G&&(this.notationMapper=new MI(this.swizzler,new GI(["F","D","L","BL","R","U","BR","B"])),K||Y||(this.addNotationMapper="FTOMapper")),e==="d"&&G&&(this.addNotationMapper="MegaminxMapper",this.notationMapper=new MI(this.swizzler,new GI(["U","F","L","BL","BR","R","FR","FL","DL","B","DR","D"])))}keyface(g){return this.keyface2(g.centermass())}keyface2(g){let e="",B=String.fromCharCode;for(let I of this.moveplanesets)if(I.length>0){let t=g.dot(I[0]),o=0,i=1;for(;i*2<=I.length;)i*=2;for(;i>0;i>>=1)o+i<=I.length&&t>I[o+i-1].a&&(o+=i);if(o<47)e=e+B(33+o);else if(o<47+47*47)e=e+B(33+47+Math.floor(o/47)-1)+B(33+o%47);else if(o<47+47*47+47*47*47)e=e+B(33+47+Math.floor((o-47)/(47*47)-1))+B(33+47+Math.floor((o-47)/47)%47)+B(33+o%47);else throw Error("Too many slices for cubie encoding")}return e}keyface3(g){let e=g.centermass(),B=[];for(let I of this.moveplanesets)if(I.length>0){let t=e.dot(I[0]),o=0,i=1;for(;i*2<=I.length;)i*=2;for(;i>0;i>>=1)o+i<=I.length&&t>I[o+i-1].a&&(o+=i);B.push(o)}return B}findface(g){let e=this.keyface2(g),B=this.facelisthash.get(e);if(B.length===1)return B[0];for(let I=0;I+1<B.length;I++){let t=this.facelisthash.get(e)[I];if(Math.abs(g.dist(this.facecentermass[t]))<gg)return t}return B[B.length-1]}project2d(g,e,B){let I=this.facenames[g][0],t=(e+1)%I.length,o=this.baseplanes[g],i=I[t].sub(I[e]),r=i.len();i=i.normalize();let n=i.cross(o).normalize(),l=B[1].sub(B[0]),Q=l.len()/r;l=l.normalize();let f=l.b,c=l.c,L=i.smul(f).sub(n.smul(c)).smul(Q),R=n.smul(f).sum(i.smul(c)).smul(Q),p=new iA(0,B[0].b-L.dot(I[e]),B[0].c-R.dot(I[e]),0);return[L,R,p]}allstickers(){let g="allstickers";this.faces=IR(this.baseplanerot,this.faces),this.options.verbosity>0&&console.log(\`# Total stickers is now \${this.faces.length}\`),this.facecentermass=new Array(this.faces.length);for(let M=0;M<this.faces.length;M++)this.facecentermass[M]=this.faces[M].centermass();let e=[],B=[];for(let M of this.moveplanes){let P=M.makenormal(),O=!1;for(let v of B)P.sameplane(v.makenormal())&&(O=!0);O||(B.push(P),e.push([]))}for(let M of this.moveplanes2){let P=M.makenormal();for(let O=0;O<B.length;O++)if(P.sameplane(B[O])){e[O].push(M);break}}for(let M=0;M<e.length;M++){let P=e[M].map(v=>v.normalizeplane()),O=B[M];for(let v=0;v<P.length;v++)P[v].makenormal().dist(O)>gg&&(P[v]=P[v].smul(-1));P.sort((v,H)=>v.a-H.a),e[M]=P}this.moveplanesets=e,this.moveplanenormals=B;let I=e.map(M=>M.length);this.options.verbosity>0&&console.log(\`# Move plane sets: \${I}\`);let t=[];for(let M=0;M<e.length;M++)t.push([]);for(let M of this.rotations){if(Math.abs(Math.abs(M.a)-1)<gg)continue;let P=M.makenormal();for(let O=0;O<e.length;O++)if(P.sameplane(B[O])){t[O].push(M);break}}this.moverotations=t;for(let M=0;M<t.length;M++){let P=t[M],O=P[0].makenormal();for(let v=0;v<P.length;v++)O.dist(P[v].makenormal())>gg&&(P[v]=P[v].smul(-1));P.sort((v,H)=>v.angle()-H.angle()),t[M][0].dot(B[M])<0&&P.reverse()}let o=t.map(M=>1+M.length);this.movesetorders=o;let i=[],r="?";for(let M=0;M<e.length;M++){let P=B[M],O=null,v=null;for(let H of this.geonormals){let V=P.dot(H[0]);Math.abs(V-1)<gg?(v=[H[1],H[2]],r=H[2]):Math.abs(V+1)<gg&&(O=[H[1],H[2]],r=H[2])}if(v===null||O===null)throw new Error("Saw positive or negative sides as null");i.push([v[0],v[1],O[0],O[1],1+e[M].length]),this.addNotationMapper==="NxNxNCubeMapper"&&r==="f"&&(this.notationMapper=new Ot(1+e[M].length),this.addNotationMapper=""),this.addNotationMapper==="SkewbMapper"&&e[0].length===1&&(this.notationMapper=new _t(this.swizzler),this.addNotationMapper=""),this.addNotationMapper==="PyraminxOrTetraminxMapper"&&(e[0].length===2&&e[0][0].a===.333333333333333&&e[0][1].a===1.66666666666667?(this.notationMapper=new KI(this.swizzler),this.addNotationMapper=""):(this.notationMapper=new Tt(this.swizzler),this.addNotationMapper="")),this.addNotationMapper==="MegaminxMapper"&&r==="f"&&(1+e[M].length===3&&(this.notationMapper=new zt(this.notationMapper)),this.addNotationMapper=""),this.addNotationMapper==="FTOMapper"&&r==="f"&&(1+e[M].length===3&&(this.notationMapper=new Pt(this.notationMapper,this.swizzler)),this.addNotationMapper="")}this.movesetgeos=i;let n=new Map,l=this.faces;for(let M=0;M<l.length;M++){let P=l[M],O=this.keyface(P);if(!n.get(O))n.set(O,[M]);else{let v=n.get(O);if(v.push(M),v.length===this.baseFaceCount){this.options.verbosity>0&&console.log("# Splitting core.");for(let H=0;H<v.length;H++){let V=\`\${O} \${H}\`;n.set(V,[v[H]])}}}}this.facelisthash=n,this.options.verbosity>0&&console.log(\`# Cubies: \${n.size}\`);let Q=[],f=[],c=[];for(let M of n.values())if(M.length!==this.baseFaceCount){if(M.length>1){let P=M.map(CA=>l[CA].centermass()),O=ii(P);for(let CA=0;M.length>2;CA++){let gA=!1;for(let aA=0;aA<M.length;aA++){let bA=(aA+1)%M.length;if(O.dot(P[aA].cross(P[bA]))<0){let WA=P[aA];P[aA]=P[bA],P[bA]=WA;let eA=M[aA];M[aA]=M[bA],M[bA]=eA,gA=!0}}if(!gA)break;if(CA>1e3)throw new Error("Bad epsilon math; too close to border")}let v=0;for(let CA of M)v|=1<<Math.floor(CA/this.stickersperface);let H=this.markedface[v],V=-1;for(let CA=0;CA<M.length;CA++)Math.floor(M[CA]/this.stickersperface)===H&&(V=CA);if(V<0)throw new Error("Could not find marked face in list");if(V!==0){let CA=M.slice();for(let gA=0;gA<M.length;gA++)M[gA]=CA[(V+gA)%M.length]}}for(let P=0;P<M.length;P++){let O=M[P];f[O]=Q.length,c[O]=P}Q.push(M)}this.cubies=Q,this.facetocubie=f,this.facetoord=c;let L=["?","CENTERS","EDGES","CORNERS","C4RNER","C5RNER"],R=[],p=[0,0,0,0,0,0],k=[],S=[],G=0,K=[],Y=[],T=[],QA=[],_=M=>Q[M].map(P=>this.getfaceindex(P)).join(" "),rA=[];for(let M=0;M<Q.length;M++){let P=Q[M];if(P.length===0||S[M])continue;let O={},v=0;T.push(0),rA.push([]);let H=P.length,V=p[H]++,CA=L[H];(CA===void 0||H===this.baseFaceCount)&&(CA="CORE"),CA=CA+(V===0?"":V+1),R[G]=CA,k[G]=H;let gA=[M],aA=0;for(S[M]=!0;aA<gA.length;){let bA=gA[aA++],WA=_(bA);if((P.length>1||O[WA]===void 0)&&(O[WA]=v++),QA[bA]=O[WA],K[bA]=G,rA[G].push(bA),Y[bA]=T[G]++,gA.length<this.rotations.length){let eA=this.facecentermass[Q[bA][0]];for(let qA of t){let xA=this.facetocubie[this.findface(eA.rotatepoint(qA[0]))];S[xA]||(gA.push(xA),S[xA]=!0)}}}G++}if(this.setReidOrder&&4<=this.stickersperface&&this.stickersperface<=9){let M=[["UF","UR","UB","UL","DF","DR","DB","DL","FR","FL","BR","BL"],["UFR","URB","UBL","ULF","DRF","DFL","DLB","DBR"],["U","L","F","R","B","D"]],P={};for(let O of M)for(let v=0;v<O.length;v++){let H=0;for(let V=0;V<O[v].length;V++)H|=1<<O[v].charCodeAt(V)-65;P[H]=v}for(let O of rA)for(let v of O){let H=0;for(let V of Q[v])H|=1<<this.facenames[this.getfaceindex(V)][1].charCodeAt(0)-65;Y[v]=P[H]}}if(this.cubiesetnums=K,this.cubieordnums=Y,this.cubiesetnames=R,this.cubieords=T,this.orbitoris=k,this.cubievaluemap=QA,this.cubiesetcubies=rA,this.options.fixedPieceType!==null){for(let M=0;M<Q.length;M++)if(this.options.fixedPieceType==="v"&&Q[M].length>2||this.options.fixedPieceType==="e"&&Q[M].length===2||this.options.fixedPieceType==="f"&&Q[M].length===1){this.fixedCubie=M;break}if(this.fixedCubie<0)throw new Error(\`Could not find a cubie of type \${this.options.fixedPieceType} to fix.\`)}this.options.verbosity>0&&console.log(\`# Cubie orbit sizes \${T}\`)}unswizzle(g){let e=this.notationMapper.notationToInternal(g);return e===null?null:e.modified({family:this.swizzler.unswizzle(e.family)})}stringToBlockMove(g){let e=RegExp("^(([0-9]+)-)?([0-9]+)?([^0-9]+)([0-9]+'?)?$"),B=g.match(e);if(B===null)throw new Error(\`Bad move passed \${g}\`);let I=B[4],t,o;if(B[2]!==void 0){if(B[3]===void 0)throw new Error("Missing second number in range");t=parseInt(B[2],10)}B[3]!==void 0&&(o=parseInt(B[3],10));let i="1",r=1;return B[5]!==void 0&&(i=B[5],i[0]==="'"&&(i=\`-\${i.substring(1)}\`),r=parseInt(i,10)),new y(new z(I,o,t),r)}parseMove(g){let e=this.notationMapper.notationToInternal(g);if(e===null)throw new Error(\`Bad move \${g.family}\`);g=e;let B=g.family,I=!1;if(B.endsWith("v")&&B[0]<="Z"){if(g.innerLayer!==void 0||g.outerLayer!==void 0)throw new Error("Cannot use a prefix with full cube rotations");B=B.slice(0,-1),I=!0}B.endsWith("w")&&B[0]<="Z"&&(B=B.slice(0,-1).toLowerCase());let t,o=-1,i=this.swizzler.unswizzle(B),r=!1;for(let Q=0;Q<this.movesetgeos.length;Q++){let f=this.movesetgeos[Q];i===f[0]&&(r=!0,t=f,o=Q),i===f[2]&&(r=!1,t=f,o=Q)}let n=1,l=1;if(B.toUpperCase()!==B&&(l=2),t===void 0)throw new Error(\`Bad grip in move \${g.family}\`);if(g.outerLayer!==void 0&&(n=g.outerLayer),g.innerLayer!==void 0&&(g.outerLayer===void 0?(l=g.innerLayer,B<="Z"?n=l:n=1):l=g.innerLayer),n--,l--,I&&(n=0,l=this.moveplanesets[o].length),n<0||n>this.moveplanesets[o].length||l<0||l>this.moveplanesets[o].length)throw new Error(\`Bad slice spec \${n} \${l} vs \${this.moveplanesets[o].length}\`);if(!oR&&n===0&&l===this.moveplanesets[o].length&&!I)throw new Error("! full puzzle rotations must be specified with v suffix.");return[void 0,o,n,l,r,g.amount]}parsemove(g){let e=this.parseMove(this.stringToBlockMove(g));return e[0]=g,e}genperms(){let g="genperms";if(this.cmovesbyslice.length>0)return;let e=[];if(this.options.orientCenters){for(let B=0;B<this.cubies.length;B++)if(this.cubies[B].length===1){let I=this.cubies[B][0],t=this.getfaceindex(I),o=this.basefaces[t].centermass();if(o.dist(this.facecentermass[I])<gg){let i=1<<t|1<<this.baseFaceCount,r=this.markedface[i],n=this.baseplanes[r].makenormal(),l=-1,Q=-1;for(let L=0;L<this.faces[I].length;L++){let R=this.faces[I].get(L),p=n.dot(R.sub(o));p>l&&(l=p,Q=L)}let f=(Q+1)%this.faces[I].length;if(Math.abs(n.dot(this.faces[I].get(f).sub(o))-l)<gg&&(Q=f),Q!==0){let L=[];for(let R=0;R<this.faces[I].length;R++)L.push(this.faces[I].get((R+Q)%this.faces[I].length));this.faces[I]=new CB(L)}let c=this.basefaces[t].length;for(let L=1;L<c;L++)this.cubies[B].push(this.cubies[B][L-1]);this.duplicatedFaces[I]=c,this.duplicatedCubies[B]=c,this.orbitoris[this.cubiesetnums[B]]=c}}}for(let B=0;B<this.moveplanesets.length;B++){let I=this.moveplanesets[B],t=[],o=[I.length+1,0],i=1;for(;i*2<=I.length;)i*=2;for(let l=0;l<this.faces.length;l++){let Q=0;if(I.length>0){let f=this.facecentermass[l].dot(I[0]);for(let c=i;c>0;c>>=1)Q+c<=I.length&&f>I[Q+c-1].a&&(Q+=c);Q=I.length-Q}for(t.push(Q);o.length<=Q;)o.push(0);o[Q]++}let r=new Array(o.length);for(let l=0;l<o.length;l++)r[l]=[];let n=[];for(let l=0;l<this.faces.length;l++){if(t[l]<0)continue;let Q=[this.facetocubie[l],this.facetoord[l]],f=this.facecentermass[l],c=f,L=l,R=t[L];for(;;){t[L]=-1;let p=f.rotatepoint(this.moverotations[B][0]);if(p.dist(c)<gg)break;L=this.findface(p),Q.push(this.facetocubie[L],this.facetoord[L]),f=p}if(Q.length>2&&this.options.orientCenters&&(this.cubies[Q[0]].length===1||this.duplicatedCubies[Q[0]]>1)&&this.facecentermass[l].dist(this.basefaces[this.getfaceindex(l)].centermass())<gg){let p=this.faces[this.cubies[Q[0]][0]];for(let k=0;k<Q.length;k+=2){let S=this.faces[this.cubies[Q[k]][0]],G=-1;for(let K=0;K<p.length;K++)if(S.get(K).dist(p.get(0))<gg){G=K;break}if(G<0)throw new Error("Couldn't find rotation of center faces; ignoring for now.");Q[k+1]=G,p=p.rotate(this.moverotations[B][0])}}if(Q.length===2&&this.options.orientCenters)for(let p=1;p<this.movesetorders[B];p++)R===0?Q.push(Q[0],p):Q.push(Q[0],(this.movesetorders[B]-p)%this.movesetorders[B]);if(Q.length>2&&!n[Q[0]]){if(Q.length!==2*this.movesetorders[B])throw new Error("Bad length in perm gen");for(let p of Q)r[R].push(p)}for(let p=0;p<Q.length;p+=2)n[Q[p]]=!0}for(let l=0;l<r.length;l++)r[l]=r[l].slice();e.push(r)}if(this.cmovesbyslice=e,this.options.moveList){let B=[];for(let I of this.options.moveList)B.push(this.parsemove(I));this.parsedmovelist=B}this.facelisthash.clear(),this.facecentermass=[]}getboundarygeometry(){return{baseplanes:this.baseplanes,facenames:this.facenames,faceplanes:this.faceplanes,vertexnames:this.vertexnames,edgenames:this.edgenames,geonormals:this.geonormals}}getmovesets(g){let e=this.moveplanesets[g].length,B=[];if(this.parsedmovelist!==void 0)for(let I of this.parsedmovelist)I[1]===g&&(I[4]?B.push([I[2],I[3]]):B.push([e-I[3],e-I[2]]),B.push(I[5]));else if(this.options.vertexMoves&&!this.options.allMoves){let I=this.movesetgeos[g];if(I[1]!==I[3])for(let t=0;t<e;t++)I[1]!=="v"?(this.options.outerBlockMoves?B.push([t+1,e]):B.push([t+1]),B.push(1)):(this.options.outerBlockMoves?B.push([0,t]):B.push([t,t]),B.push(1))}else for(let I=0;I<=e;I++)!this.options.allMoves&&I+I===e||(this.options.outerBlockMoves?I+I>e?B.push([I,e]):B.push([0,I]):B.push([I,I]),B.push(1));if(this.fixedCubie>=0){let I=this.keyface3(this.faces[this.cubies[this.fixedCubie][0]])[g],t=[];for(let o=0;o<B.length;o+=2){let i=B[o];if(I>=i[0]&&I<=i[1])if(i[0]===0)i=[i[1]+1,e];else if(e===i[1])i=[0,i[0]-1];else throw Error("fixed cubie option would disconnect move");let r=!1;for(let n=0;n<t.length;n+=2)if(t[n][0]===i[0]&&t[n][1]===i[1]&&t[n+1]===B[o+1]){r=!0;break}r||(t.push(i),t.push(B[o+1]))}B=t}return B}graybyori(g){let e=this.cubies[g].length;return this.duplicatedCubies[g]&&(e=1),e===1&&(this.options.grayCenters||!this.options.includeCenterOrbits)||e===2&&(this.options.grayEdges||!this.options.includeEdgeOrbits)||e>2&&(this.options.grayCorners||!this.options.includeCornerOrbits)}skipbyori(g){let e=this.cubies[g].length;return this.duplicatedCubies[g]&&(e=1),e===1&&!this.options.includeCenterOrbits||e===2&&!this.options.includeEdgeOrbits||e>2&&!this.options.includeCornerOrbits}skipcubie(g){return this.skipbyori(g)}header(g){return g+tR+\`
6
+ \`:" "}var zg,bB,b,ye=U(()=>{"use strict";Ke();or();ue();er();fr();wI();St();he();kt();Br();bB=class extends Dg{constructor(e){super();cA(this,zg,void 0);lA(this,zg,Array.from(dQ(e)));for(let B of w(this,zg))if(!pQ(B))throw new Error("An alg can only contain alg nodes.")}isIdentical(e){let B=e;if(!e.is(bB))return!1;let I=Array.from(w(this,zg)),t=Array.from(w(B,zg));if(I.length!==t.length)return!1;for(let o=0;o<I.length;o++)if(!I[o].isIdentical(t[o]))return!1;return!0}invert(){return new bB(fQ(Array.from(w(this,zg)).map(e=>e.invert())))}*experimentalExpand(e=1,B){B??(B=1/0);for(let I of aQ(w(this,zg),e))yield*I.experimentalExpand(e,B)}expand(e){return new bB(this.experimentalExpand(1,e?.depth??1/0))}*experimentalLeafMoves(){for(let e of this.experimentalExpand())e.is(y)&&(yield e)}concat(e){return new bB(Array.from(w(this,zg)).concat(Array.from(dQ(e))))}experimentalIsEmpty(){for(let e of w(this,zg))return!1;return!0}static fromString(e){return gr(e)}units(){return this.childAlgNodes()}*childAlgNodes(){for(let e of w(this,zg))yield e}experimentalNumUnits(){return this.experimentalNumChildAlgNodes()}experimentalNumChildAlgNodes(){return Array.from(w(this,zg)).length}get type(){return _o("deprecated: type"),"sequence"}toString(){let e="",B=null;for(let I of w(this,zg)){B&&(e+=Oc(B,I));let t=I.as(jA)?.experimentalNISSGrouping;if(t){if(t.amount!==-1)throw new Error("Invalid NISS Grouping amount!");e+=\`^(\${t.alg.toString()})\`}else I.as(Qg)?.experimentalNISSPlaceholder||(e+=I.toString());B=I}return e}experimentalSimplify(e){return new bB(ar(this,e??{}))}simplify(e){return this.experimentalSimplify(e)}},b=bB;zg=new WeakMap});var Tc,SQ=U(()=>{"use strict";ye();wI();RI();yI();he();hI();Tc={Sune:new b([new y("R",1),new y("U",1),new y("R",-1),new y("U",1),new y("R",1),new y("U",-2),new y("R",-1)]),AntiSune:new b([new y("R",1),new y("U",2),new y("R",-1),new y("U",-1),new y("R",1),new y("U",-1),new y("R",-1)]),SuneCommutator:new b([new ng(new b([new y("R",1),new y("U",1),new y("R",-2)]),new b([new Eg(new b([new y("R",1)]),new b([new y("U",1)]))]))]),Niklas:new b([new y("R",1),new y("U",-1),new y("L",-1),new y("U",1),new y("R",-1),new y("U",-1),new y("L",1),new y("U",1)]),EPerm:new b([new y("x",-1),new ng(new b([new Eg(new b([new y("R",1)]),new b([new y("U",-1)]))]),new b([new y("D",1)])),new ng(new b([new Eg(new b([new y("R",1)]),new b([new y("U",1)]))]),new b([new y("D",1)])),new y("x",1)]),FURURFCompact:new b([new Eg(new b([new y("F",1)]),new b([new ng(new b([new y("U",1)]),new b([new y("R",1)]))]))]),APermCompact:new b([new Eg(new b([new y("R",2)]),new b([new ng(new b([new y("F",2)]),new b([new y("R",-1),new y("B",-1),new y("R",1)]))]))]),FURURFMoves:new b([new y("F",1),new y("U",1),new y("R",1),new y("U",-1),new y("R",-1),new y("F",-1)]),TPerm:new b([new y("R",1),new y("U",1),new y("R",-1),new y("U",-1),new y("R",-1),new y("F",1),new y("R",2),new y("U",-1),new y("R",-1),new y("U",-1),new y("R",1),new y("U",1),new y("R",-1),new y("F",-1)]),HeadlightSwaps:new b([new Eg(new b([new y("F",1)]),new b([new Qg(new b([new ng(new b([new y("R",1)]),new b([new y("U",1)]))]),3)]))]),TriplePause:new b([new jA,new jA,new jA])}});var am,kQ=U(()=>{"use strict";wI();he();am={73:new y("R"),75:new y("R'"),87:new y("B"),79:new y("B'"),83:new y("D"),76:new y("D'"),68:new y("L"),69:new y("L'"),74:new y("U"),70:new y("U'"),72:new y("F"),71:new y("F'"),78:new y("x'"),67:new y("l"),82:new y("l'"),85:new y("r"),77:new y("r'"),88:new y("d"),188:new y("d'"),84:new y("x"),89:new y("x"),66:new y("x'"),186:new y("y"),59:new y("y"),65:new y("y'"),80:new y("z"),81:new y("z'"),90:new y("M'"),190:new y("M'"),192:new jA}});var UQ=U(()=>{"use strict"});var wA=U(()=>{"use strict";ye();XC();ir();SQ();kQ();wI();UQ();fr();or();$C()});function Yt(A,g,e){let B={};for(let I in A.orbits){let t=A.orbits[I],o=g[I],i=e[I];if(xt(t.numOrientations,i))B[I]=o;else if(xt(t.numOrientations,o))B[I]=i;else{let r=new Array(t.numPieces);if(t.numOrientations===1){for(let n=0;n<t.numPieces;n++)r[n]=o.permutation[i.permutation[n]];B[I]={permutation:r,orientation:o.orientation}}else{let n=new Array(t.numPieces);for(let l=0;l<t.numPieces;l++)n[l]=(o.orientation[i.permutation[l]]+i.orientation[l])%t.numOrientations,r[l]=o.permutation[i.permutation[l]];B[I]={permutation:r,orientation:n}}}}return B}function Dr(A,g,e){let B={};for(let I in A.orbits){let t=A.orbits[I],o=g[I],i=e[I];if(xt(t.numOrientations,i))B[I]=o;else{let r=new Array(t.numPieces);if(t.numOrientations===1){for(let n=0;n<t.numPieces;n++)r[n]=o.pieces[i.permutation[n]];B[I]={pieces:r,orientation:o.orientation}}else{let n=new Array(t.numPieces);for(let l=0;l<t.numPieces;l++)n[l]=(o.orientation[i.permutation[l]]+i.orientation[l])%t.numOrientations,r[l]=o.pieces[i.permutation[l]];B[I]={pieces:r,orientation:n}}}}return B}var Xo=U(()=>{"use strict";Jt()});function _c(A){let g=NQ.get(A);if(g)return g;let e=new Array(A),B=new Array(A);for(let t=0;t<A;t++)e[t]=t,B[t]=0;let I={permutation:e,orientation:B};return GQ&&(Object.freeze(e),Object.freeze(B),Object.freeze(I)),NQ.set(A,I),I}function MQ(A){let g={};for(let[e,B]of Object.entries(A.orbits))g[e]=_c(B.numPieces);return GQ&&Object.freeze(g),g}function KQ(A,g){let e=g.quantum.toString(),B=A.definition.moves[e];if(!B){let o=A.definition.experimentalDerivedMoves?.[e];o&&(B=A.algToTransformation(o).transformationData)}if(B)return tB(A,B,g.amount);let I=A.definition.moves[g.toString()];if(I)return I;let t=A.definition.moves[g.invert().toString()];if(t)return tB(A,t,-1);throw new Error(\`Invalid move for KPuzzle (\${A.name()}): \${g}\`)}var GQ,NQ,cr=U(()=>{"use strict";Jt();GQ=!1,NQ=new Map});var YA,$o=U(()=>{"use strict";Xo();vt();YA=class{constructor(g,e){this.kpuzzle=g;this.stateData=e}toJSON(){return{experimentalPuzzleName:this.kpuzzle.name(),stateData:this.stateData}}static fromTransformation(g){let e=Dr(g.kpuzzle.definition,g.kpuzzle.definition.startStateData,g.transformationData);return new YA(g.kpuzzle,e)}apply(g){return this.applyTransformation(this.kpuzzle.toTransformation(g))}applyTransformation(g){if(g.isIdentityTransformation())return new YA(this.kpuzzle,this.stateData);let e=Dr(this.kpuzzle.definition,this.stateData,g.transformationData);return new YA(this.kpuzzle,e)}applyMove(g){return this.applyTransformation(this.kpuzzle.moveToTransformation(g))}applyAlg(g){return this.applyTransformation(this.kpuzzle.algToTransformation(g))}experimentalToTransformation(){if(!this.kpuzzle.canConvertStateToUniqueTransformation())return null;let g={};for(let[e,B]of Object.entries(this.stateData)){let I={permutation:B.pieces,orientation:B.orientation};g[e]=I}return new Ae(this.kpuzzle,g)}experimentalIsSolved(g){if(!this.kpuzzle.definition.experimentalIsStateSolved)throw new Error("\`KState.experimentalIsSolved()\` is not supported for this puzzle at the moment.");return this.kpuzzle.definition.experimentalIsStateSolved(this,g)}}});var HB,oB,Ae,vt=U(()=>{"use strict";Jt();Xo();cr();$o();oB=class{constructor(g,e){this.kpuzzle=g;this.transformationData=e;cA(this,HB,void 0)}toJSON(){return{experimentalPuzzleName:this.kpuzzle.name(),transformationData:this.transformationData}}invert(){return new oB(this.kpuzzle,Rr(this.kpuzzle,this.transformationData))}isIdentityTransformation(){return w(this,HB)??lA(this,HB,this.isIdentical(this.kpuzzle.identityTransformation()))}static experimentalConstructIdentity(g){let e=new oB(g,MQ(g.definition));return lA(e,HB,!0),e}isIdentical(g){return xQ(this.kpuzzle,this.transformationData,g.transformationData)}apply(g){return this.applyTransformation(this.kpuzzle.toTransformation(g))}applyTransformation(g){if(this.kpuzzle!==g.kpuzzle)throw new Error(\`Tried to apply a transformation for a KPuzzle (\${g.kpuzzle.name()}) to a different KPuzzle (\${this.kpuzzle.name()}).\`);return w(this,HB)?new oB(this.kpuzzle,g.transformationData):w(g,HB)?new oB(this.kpuzzle,this.transformationData):new oB(this.kpuzzle,Yt(this.kpuzzle.definition,this.transformationData,g.transformationData))}applyMove(g){return this.applyTransformation(this.kpuzzle.moveToTransformation(g))}applyAlg(g){return this.applyTransformation(this.kpuzzle.algToTransformation(g))}toKState(){return YA.fromTransformation(this)}repetitionOrder(){return YQ(this.kpuzzle.definition,this)}selfMultiply(g){return new oB(this.kpuzzle,tB(this.kpuzzle,this.transformationData,g))}},Ae=oB;HB=new WeakMap});function xt(A,g){let{permutation:e}=g,B=e.length;for(let I=0;I<B;I++)if(e[I]!==I)return!1;if(A>1){let{orientation:I}=g;for(let t=0;t<B;t++)if(I[t]!==0)return!1}return!0}function Wc(A,g,e,B={}){for(let I=0;I<A.numPieces;I++)if(!B?.ignoreOrientation&&g.orientation[I]!==e.orientation[I]||!B?.ignorePermutation&&g.permutation[I]!==e.permutation[I])return!1;return!0}function xQ(A,g,e){for(let[B,I]of Object.entries(A.definition.orbits))if(!Wc(I,g[B],e[B]))return!1;return!0}function Rr(A,g){let e={};for(let B in A.definition.orbits){let I=A.definition.orbits[B],t=g[B];if(xt(I.numOrientations,t))e[B]=t;else if(I.numOrientations===1){let o=new Array(I.numPieces);for(let i=0;i<I.numPieces;i++)o[t.permutation[i]]=i;e[B]={permutation:o,orientation:t.orientation}}else{let o=new Array(I.numPieces),i=new Array(I.numPieces);for(let r=0;r<I.numPieces;r++){let n=t.permutation[r];o[n]=r,i[n]=(I.numOrientations-t.orientation[r]+I.numOrientations)%I.numOrientations}e[B]={permutation:o,orientation:i}}}return e}function tB(A,g,e){if(e===1)return g;if(e<0)return tB(A,Rr(A,g),-e);if(e===0){let{transformationData:t}=A.identityTransformation();return t}let B=g;e!==2&&(B=tB(A,g,Math.floor(e/2)));let I=Yt(A.definition,B,B);return e%2===0?I:Yt(A.definition,g,I)}function ur(A,g){return g?ur(g,A%g):A}function YQ(A,g){let e=1;for(let B in A.orbits){let I=A.orbits[B],t=g.transformationData[B],o=new Array(I.numPieces);for(let i=0;i<I.numPieces;i++)if(!o[i]){let r=i,n=0,l=0;for(;o[r]=!0,n=n+t.orientation[r],l=l+1,r=t.permutation[r],r!==i;);n!==0&&(l=l*I.numOrientations/ur(I.numOrientations,Math.abs(n))),e=e*l/ur(e,l)}}return e}var Lr,JQ,Jt=U(()=>{"use strict";wA();wA();Xo();vt();Lr=class extends IB{traverseAlg(g,e){let B=null;for(let I of g.childAlgNodes())B?B=B.applyTransformation(this.traverseAlgNode(I,e)):B=this.traverseAlgNode(I,e);return B??e.identityTransformation()}traverseGrouping(g,e){let B=this.traverseAlg(g.alg,e);return new Ae(e,tB(e,B.transformationData,g.amount))}traverseMove(g,e){return e.moveToTransformation(g)}traverseCommutator(g,e){let B=this.traverseAlg(g.A,e),I=this.traverseAlg(g.B,e);return B.applyTransformation(I).applyTransformation(B.invert()).applyTransformation(I.invert())}traverseConjugate(g,e){let B=this.traverseAlg(g.A,e),I=this.traverseAlg(g.B,e);return B.applyTransformation(I).applyTransformation(B.invert())}traversePause(g,e){return e.identityTransformation()}traverseNewline(g,e){return e.identityTransformation()}traverseLineComment(g,e){return e.identityTransformation()}},JQ=re(Lr)});var dI,Ai,PA,vQ=U(()=>{"use strict";wA();Jt();cr();$o();vt();PA=class{constructor(g,e){this.definition=g;cA(this,dI,new Map);cA(this,Ai,void 0);this.experimentalPGNotation=e?.experimentalPGNotation}name(){return this.definition.name}identityTransformation(){return Ae.experimentalConstructIdentity(this)}moveToTransformation(g){typeof g=="string"&&(g=new y(g));let e=g.toString(),B=w(this,dI).get(e);if(B)return new Ae(this,B);if(this.experimentalPGNotation){let t=this.experimentalPGNotation.lookupMove(g);if(!t)throw new Error(\`could not map to internal move: \${g}\`);return w(this,dI).set(e,t),new Ae(this,t)}let I=KQ(this,g);return w(this,dI).set(e,I),new Ae(this,I)}algToTransformation(g){return typeof g=="string"&&(g=new b(g)),JQ(g,this)}toTransformation(g){return typeof g=="string"?this.algToTransformation(g):g?.is?.(b)?this.algToTransformation(g):g?.is?.(y)?this.moveToTransformation(g):g}startState(){return new YA(this,this.definition.startStateData)}canConvertStateToUniqueTransformation(){return w(this,Ai)??lA(this,Ai,(()=>{for(let[g,e]of Object.entries(this.definition.orbits)){let B=new Array(e.numPieces).fill(!1);for(let I of this.definition.startStateData[g].pieces)B[I]=!0;for(let I of B)if(!I)return!1}return!0})())}};dI=new WeakMap,Ai=new WeakMap});var lg=U(()=>{"use strict";vQ();$o();vt()});var bQ,jc,HQ=U(()=>{"use strict";bQ={333:{puzzleID:"3x3x3",eventName:"3x3x3 Cube"},222:{puzzleID:"2x2x2",eventName:"2x2x2 Cube"},444:{puzzleID:"4x4x4",eventName:"4x4x4 Cube"},555:{puzzleID:"5x5x5",eventName:"5x5x5 Cube"},666:{puzzleID:"6x6x6",eventName:"6x6x6 Cube"},777:{puzzleID:"7x7x7",eventName:"7x7x7 Cube"},"333bf":{puzzleID:"3x3x3",eventName:"3x3x3 Blindfolded"},"333fm":{puzzleID:"3x3x3",eventName:"3x3x3 Fewest Moves"},"333oh":{puzzleID:"3x3x3",eventName:"3x3x3 One-Handed"},clock:{puzzleID:"clock",eventName:"Clock"},minx:{puzzleID:"megaminx",eventName:"Megaminx"},pyram:{puzzleID:"pyraminx",eventName:"Pyraminx"},skewb:{puzzleID:"skewb",eventName:"Skewb"},sq1:{puzzleID:"square1",eventName:"Square-1"},"444bf":{puzzleID:"4x4x4",eventName:"4x4x4 Blindfolded"},"555bf":{puzzleID:"5x5x5",eventName:"5x5x5 Blindfolded"},"333mb":{puzzleID:"3x3x3",eventName:"3x3x3 Multi-Blind"}},jc={...bQ,fto:{puzzleID:"fto",eventName:"Face-Turning Octahedron"},master_tetraminx:{puzzleID:"master_tetraminx",eventName:"Master Tetraminx"},kilominx:{puzzleID:"kilominx",eventName:"Kilominx"},redi_cube:{puzzleID:"redi_cube",eventName:"Redi Cube"}}});function qQ(A){return Zc[A]}var Ye,pe,wg,SI,bt,qB,Zc,kI,UI,Ht=U(()=>{"use strict";Ye=class{constructor(g,e){this.stickerings=new Map;for(let[B,I]of Object.entries(g.definition.orbits))this.stickerings.set(B,new Array(I.numPieces).fill(e))}},pe="regular",wg="ignored",SI="oriented",bt="invisible",qB="dim",Zc={["Regular"]:{facelets:[pe,pe,pe,pe,pe]},["Ignored"]:{facelets:[wg,wg,wg,wg,wg]},["OrientationStickers"]:{facelets:[SI,SI,SI,SI,SI]},["IgnoreNonPrimary"]:{facelets:[pe,wg,wg,wg,wg]},["Invisible"]:{facelets:[bt,bt,bt,bt,bt]},["PermuteNonPrimary"]:{facelets:[qB,pe,pe,pe,pe]},["Dim"]:{facelets:[qB,qB,qB,qB,qB]},["Ignoriented"]:{facelets:[qB,wg,wg,wg,wg]},["OrientationWithoutPermutation"]:{facelets:[SI,wg,wg,wg,wg]}};kI=class extends Ye{constructor(g){super(g,"Regular")}set(g,e){for(let[B,I]of this.stickerings.entries())for(let t=0;t<I.length;t++)g.stickerings.get(B)[t]&&(I[t]=e);return this}toStickeringMask(){let g={orbits:{}};for(let[e,B]of this.stickerings.entries()){let I=[],t={pieces:I};g.orbits[e]=t;for(let o of B)I.push(qQ(o))}return g}},UI=class{constructor(g){this.kpuzzle=g}and(g){let e=new Ye(this.kpuzzle,!1);for(let[B,I]of Object.entries(this.kpuzzle.definition.orbits)){A:for(let t=0;t<I.numPieces;t++){e.stickerings.get(B)[t]=!0;for(let o of g)if(!o.stickerings.get(B)[t]){e.stickerings.get(B)[t]=!1;continue A}}}return e}or(g){let e=new Ye(this.kpuzzle,!1);for(let[B,I]of Object.entries(this.kpuzzle.definition.orbits)){A:for(let t=0;t<I.numPieces;t++){e.stickerings.get(B)[t]=!1;for(let o of g)if(o.stickerings.get(B)[t]){e.stickerings.get(B)[t]=!0;continue A}}}return e}not(g){let e=new Ye(this.kpuzzle,!1);for(let[B,I]of Object.entries(this.kpuzzle.definition.orbits))for(let t=0;t<I.numPieces;t++)e.stickerings.get(B)[t]=!g.stickerings.get(B)[t];return e}all(){return this.and(this.moves([]))}move(g){let e=this.kpuzzle.moveToTransformation(g),B=new Ye(this.kpuzzle,!1);for(let[I,t]of Object.entries(this.kpuzzle.definition.orbits))for(let o=0;o<t.numPieces;o++)(e.transformationData[I].permutation[o]!==o||e.transformationData[I].orientation[o]!==0)&&(B.stickerings.get(I)[o]=!0);return B}moves(g){return g.map(e=>this.move(e))}orbits(g){let e=new Ye(this.kpuzzle,!1);for(let B of g)e.stickerings.get(B).fill(!0);return e}orbitPrefix(g){let e=new Ye(this.kpuzzle,!1);for(let B in this.kpuzzle.definition.orbits)B.startsWith(g)&&e.stickerings.get(B).fill(!0);return e}}});var yr,hr=U(()=>{"use strict";yr={full:{groups:{"3x3x3":"Stickering"}},OLL:{groups:{"3x3x3":"Last Layer"}},PLL:{groups:{"3x3x3":"Last Layer"}},LL:{groups:{"3x3x3":"Last Layer"}},EOLL:{groups:{"3x3x3":"Last Layer"}},COLL:{groups:{"3x3x3":"Last Layer"}},OCLL:{groups:{"3x3x3":"Last Layer"}},CPLL:{groups:{"3x3x3":"Last Layer"}},CLL:{groups:{"3x3x3":"Last Layer"}},ELL:{groups:{"3x3x3":"Last Layer"}},ZBLL:{groups:{"3x3x3":"Last Layer"}},LS:{groups:{"3x3x3":"Last Slot"}},ELS:{groups:{"3x3x3":"Last Slot"}},CLS:{groups:{"3x3x3":"Last Slot"}},ZBLS:{groups:{"3x3x3":"Last Slot"}},VLS:{groups:{"3x3x3":"Last Slot"}},WVLS:{groups:{"3x3x3":"Last Slot"}},F2L:{groups:{"3x3x3":"CFOP (Fridrich)"}},Daisy:{groups:{"3x3x3":"CFOP (Fridrich)"}},Cross:{groups:{"3x3x3":"CFOP (Fridrich)"}},EO:{groups:{"3x3x3":"ZZ"}},EOline:{groups:{"3x3x3":"ZZ"}},EOcross:{groups:{"3x3x3":"ZZ"}},CMLL:{groups:{"3x3x3":"Roux"}},L10P:{groups:{"3x3x3":"Roux"}},L6E:{groups:{"3x3x3":"Roux"}},L6EO:{groups:{"3x3x3":"Roux"}},"2x2x2":{groups:{"3x3x3":"Petrus"}},"2x2x3":{groups:{"3x3x3":"Petrus"}},L2C:{groups:{"4x4x4":"Reduction","5x5x5":"Reduction","6x6x6":"Reduction"}},PBL:{groups:{"2x2x2":"Ortega"}},"Void Cube":{groups:{"3x3x3":"Miscellaneous"}},invisible:{groups:{"3x3x3":"Miscellaneous"}},picture:{groups:{"3x3x3":"Miscellaneous"}},"centers-only":{groups:{"3x3x3":"Miscellaneous"}},"experimental-centers-U":{},"experimental-centers-U-D":{},"experimental-centers-U-L-D":{},"experimental-centers-U-L-B-D":{},"experimental-centers":{},"experimental-fto-fc":{groups:{fto:"Bencisco"}},"experimental-fto-f2t":{groups:{fto:"Bencisco"}},"experimental-fto-sc":{groups:{fto:"Bencisco"}},"experimental-fto-l2c":{groups:{fto:"Bencisco"}},"experimental-fto-lbt":{groups:{fto:"Bencisco"}},"experimental-fto-l3t":{groups:{fto:"Bencisco"}}}});async function Je(A,g){let e=await A.kpuzzle(),B=new kI(e),I=new UI(e),t=()=>I.move("U"),o=()=>I.or(I.moves(["U","D"])),i=()=>I.or(I.moves(["L","R"])),r=()=>I.not(i()),n=()=>I.not(t()),l=()=>I.orbitPrefix("CENTER"),Q=()=>I.orbitPrefix("EDGE"),f=()=>I.or([I.orbitPrefix("CORNER"),I.orbitPrefix("C4RNER"),I.orbitPrefix("C5RNER")]),c=()=>I.or([r(),I.and([t(),Q()])]),L=()=>I.and([t(),l()]),R=()=>I.and([I.and(I.moves(["F","R"])),Q()]),p=()=>I.and([I.and(I.moves(["F","R"])),f(),I.not(t())]),k=()=>I.or([p(),R()]);function S(){B.set(n(),"Dim")}function G(){B.set(t(),"PermuteNonPrimary"),B.set(L(),"Dim")}function K(){B.set(t(),"IgnoreNonPrimary"),B.set(L(),"Regular")}function Y(){B.set(t(),"Ignoriented"),B.set(L(),"Dim")}switch(g){case"full":break;case"PLL":{S(),G();break}case"CLS":{S(),B.set(p(),"Regular"),B.set(t(),"Ignoriented"),B.set(I.and([t(),l()]),"Dim"),B.set(I.and([t(),f()]),"IgnoreNonPrimary");break}case"OLL":{S(),K();break}case"EOLL":{S(),K(),B.set(I.and([t(),f()]),"Ignored");break}case"COLL":{S(),B.set(I.and([t(),Q()]),"Ignoriented"),B.set(I.and([t(),l()]),"Dim"),B.set(I.and([t(),f()]),"Regular");break}case"OCLL":{S(),Y(),B.set(I.and([t(),f()]),"IgnoreNonPrimary");break}case"CPLL":{S(),B.set(I.and([I.not(f()),t()]),"Ignoriented");break}case"CLL":{S(),B.set(I.not(I.and([f(),t()])),"Dim");break}case"ELL":{S(),B.set(t(),"Dim"),B.set(I.and([t(),Q()]),"Regular");break}case"ELS":{S(),K(),B.set(I.and([t(),f()]),"Ignored"),B.set(R(),"Regular"),B.set(p(),"Ignored");break}case"LL":{S();break}case"F2L":{B.set(t(),"Ignored");break}case"ZBLL":{S(),B.set(t(),"PermuteNonPrimary"),B.set(L(),"Dim"),B.set(I.and([t(),f()]),"Regular");break}case"ZBLS":{S(),B.set(k(),"Regular"),K(),B.set(I.and([t(),f()]),"Ignored");break}case"VLS":{S(),B.set(k(),"Regular"),K();break}case"WVLS":{S(),B.set(k(),"Regular"),B.set(I.and([t(),Q()]),"Ignoriented"),B.set(I.and([t(),l()]),"Dim"),B.set(I.and([t(),f()]),"IgnoreNonPrimary");break}case"LS":{S(),B.set(k(),"Regular"),B.set(t(),"Ignored"),B.set(L(),"Dim");break}case"EO":{B.set(f(),"Ignored"),B.set(Q(),"OrientationWithoutPermutation");break}case"EOline":{B.set(f(),"Ignored"),B.set(Q(),"OrientationWithoutPermutation"),B.set(I.and(I.moves(["D","M"])),"Regular");break}case"EOcross":{B.set(Q(),"OrientationWithoutPermutation"),B.set(I.move("D"),"Regular"),B.set(f(),"Ignored");break}case"CMLL":{B.set(n(),"Dim"),B.set(c(),"Ignored"),B.set(I.and([t(),f()]),"Regular");break}case"L10P":{B.set(I.not(c()),"Dim"),B.set(I.and([f(),t()]),"Regular");break}case"L6E":{B.set(I.not(c()),"Dim");break}case"L6EO":{B.set(I.not(c()),"Dim"),B.set(c(),"OrientationWithoutPermutation"),B.set(I.and([l(),o()]),"OrientationStickers");break}case"Daisy":{B.set(I.all(),"Ignored"),B.set(l(),"Dim"),B.set(I.and([I.move("D"),l()]),"Regular"),B.set(I.and([I.move("U"),Q()]),"IgnoreNonPrimary");break}case"Cross":{B.set(I.all(),"Ignored"),B.set(l(),"Dim"),B.set(I.and([I.move("D"),l()]),"Regular"),B.set(I.and([I.move("D"),Q()]),"Regular");break}case"2x2x2":{B.set(I.or(I.moves(["U","F","R"])),"Ignored"),B.set(I.and([I.or(I.moves(["U","F","R"])),l()]),"Dim");break}case"2x2x3":{B.set(I.all(),"Dim"),B.set(I.or(I.moves(["U","F","R"])),"Ignored"),B.set(I.and([I.or(I.moves(["U","F","R"])),l()]),"Dim"),B.set(I.and([I.move("F"),I.not(I.or(I.moves(["U","R"])))]),"Regular");break}case"L2C":{B.set(I.or(I.moves(["L","R","B","D"])),"Dim"),B.set(I.not(l()),"Ignored");break}case"PBL":{B.set(I.all(),"Ignored"),B.set(I.or(I.moves(["U","D"])),"PermuteNonPrimary");break}case"Void Cube":{B.set(l(),"Invisible");break}case"picture":case"invisible":{B.set(I.all(),"Invisible");break}case"centers-only":{B.set(I.not(l()),"Ignored");break}default:console.warn(\`Unsupported stickering for \${A.id}: \${g}. Setting all pieces to dim.\`),B.set(I.and(I.moves([])),"Dim")}return B.toStickeringMask()}async function NI(A){let g=[],e=[];for(let[B,I]of Object.entries(yr))I.groups&&(A in I.groups?g.push(B):"3x3x3"in I.groups&&e.push(B));return g.concat(e)}var qt=U(()=>{"use strict";Ht();hr()});function kA(A){let g=null;return()=>g??(g=A())}var jg=U(()=>{"use strict"});function tg(A){return new ve(g=>{g(A())})}var ve,ge=U(()=>{"use strict";ve=class extends Promise{constructor(g){super(e=>{e()}),this._executor=g}static from(g){return new ve(e=>{e(g())})}static resolve(g){return new ve(e=>{e(g)})}static reject(g){return new ve((e,B)=>{B(g)})}then(g,e){return this._promise=this._promise||new Promise(this._executor),this._promise.then(g,e)}catch(g){return this._promise=this._promise||new Promise(this._executor),this._promise.catch(g)}}});var GI,zQ=U(()=>{"use strict";GI=class{constructor(g,e){this.facenames=g;this.prefixFree=!0;this.gripnames=[];e&&(this.gripnames=e);for(let B=0;this.prefixFree&&B<g.length;B++)for(let I=0;this.prefixFree&&I<g.length;I++)B!==I&&g[B].startsWith(g[I])&&(this.prefixFree=!1)}setGripNames(g){this.gripnames=g}splitByFaceNames(g){let e=[],B=0;for(;B<g.length;){B>0&&B<g.length&&g[B]==="_"&&B++;let I=-1;for(let t=0;t<this.facenames.length;t++)g.substr(B).startsWith(this.facenames[t])&&(I<0||this.facenames[t].length>this.facenames[I].length)&&(I=t);if(I>=0)e.push(I),B+=this.facenames[I].length;else throw new Error(\`Could not split \${g} into face names.\`)}return e}joinByFaceIndices(g){let e="",B=[];for(let I=0;I<g.length;I++)B.push(e),B.push(this.facenames[g[I]]),this.prefixFree||(e="_");return B.join("")}spinmatch(g,e){if(g===e)return!0;try{let B=this.splitByFaceNames(g),I=this.splitByFaceNames(e);if(B.length!==I.length&&B.length<3)return!1;for(let t=0;t<B.length;t++){for(let i=0;i<t;i++)if(B[t]===B[i])return!1;let o=!1;for(let i=0;i<I.length;i++)if(B[t]===I[i]){o=!0;break}if(!o)return!1}return!0}catch{return!1}}spinmatchv(g,e){return g.endsWith("v")&&e.endsWith("v")?this.spinmatch(g.slice(0,g.length-1),e.slice(0,e.length-1)):this.spinmatch(g,e)}unswizzle(g){(g.endsWith("v")||g.endsWith("w"))&&g[0]<="Z"&&(g=g.slice(0,g.length-1));let e=g.toUpperCase();for(let B=0;B<this.gripnames.length;B++){let I=this.gripnames[B];if(this.spinmatch(e,I))return I}return g}}});var PB,OQ=U(()=>{"use strict";PB=class{notationToInternal(g){return g}notationToExternal(g){return g}}});var Pt,TQ=U(()=>{"use strict";wA();Pt=class{constructor(g,e){this.child=g;this.sw=e}notationToInternal(g){return g.family==="T"&&g.innerLayer===void 0&&g.outerLayer===void 0?new y(new z("FLRv",g.innerLayer,g.outerLayer),g.amount):this.child.notationToInternal(g)}notationToExternal(g){let e=g.family;return e.length>0&&e[e.length-1]==="v"&&(e=e.substring(0,e.length-1)),this.sw.spinmatch(e,"FLUR")?new y(new z("T",g.innerLayer,g.outerLayer),g.amount):this.child.notationToExternal(g)}}});var MI,_Q=U(()=>{"use strict";wA();MI=class{constructor(g,e){this.internalNames=g;this.externalNames=e}convertString(g,e,B){let I="";(g.endsWith("v")||g.endsWith("v"))&&g<="_"&&(I=g.slice(g.length-1),g=g.slice(0,g.length-1));let t=g.toUpperCase(),o=!1;return g!==t&&(o=!0,g=t),g=B.joinByFaceIndices(e.splitByFaceNames(g)),o&&(g=g.toLowerCase()),g+I}convert(g,e,B){let I=g.family,t=this.convertString(I,e,B);return I===t?g:new y(new z(t,g.innerLayer,g.outerLayer),g.amount)}notationToInternal(g){return this.convert(g,this.externalNames,this.internalNames)}notationToExternal(g){return this.convert(g,this.internalNames,this.externalNames)}}});var zt,WQ=U(()=>{"use strict";wA();zt=class{constructor(g){this.child=g}notationToInternal(g){if(g.innerLayer===void 0&&g.outerLayer===void 0){if(Math.abs(g.amount)===1){if(g.family==="R++")return new y(new z("L",3,2),-2*g.amount);if(g.family==="R--")return new y(new z("L",3,2),2*g.amount);if(g.family==="D++")return new y(new z("U",3,2),-2*g.amount);if(g.family==="D--")return new y(new z("U",3,2),2*g.amount);if(g.family==="R_PLUSPLUS_")return new y(new z("L",3,2),-2*g.amount);if(g.family==="D_PLUSPLUS_")return new y(new z("U",3,2),-2*g.amount)}if(g.family==="y")return new y("Uv",g.amount);if(g.family==="x"&&Math.abs(g.amount)===2)return new y("ERv",g.amount/2)}return this.child.notationToInternal(g)}notationToExternal(g){return g.family==="ERv"&&Math.abs(g.amount)===1?new y(new z("x",g.innerLayer,g.outerLayer),g.amount*2):g.family==="ILv"&&Math.abs(g.amount)===1?new y(new z("x",g.innerLayer,g.outerLayer),-g.amount*2):g.family==="Uv"?new y(new z("y",g.innerLayer,g.outerLayer),g.amount):g.family==="Dv"?new y("y",-g.amount):this.child.notationToExternal(g)}}});var Ot,jQ=U(()=>{"use strict";wA();Ot=class{constructor(g){this.slices=g}notationToInternal(g){let e=g.family;return g.innerLayer||g.outerLayer||(e==="x"?g=new y("Rv",g.amount):e==="y"?g=new y("Uv",g.amount):e==="z"&&(g=new y("Fv",g.amount)),(this.slices&1)===1&&(e==="E"?g=new y(new z("D",(this.slices+1)/2),g.amount):e==="M"?g=new y(new z("L",(this.slices+1)/2),g.amount):e==="S"&&(g=new y(new z("F",(this.slices+1)/2),g.amount))),this.slices>2&&(e==="e"?g=new y(new z("D",this.slices-1,2),g.amount):e==="m"?g=new y(new z("L",this.slices-1,2),g.amount):e==="s"&&(g=new y(new z("F",this.slices-1,2),g.amount)))),g}notationToExternal(g){let e=g.family;if(!(g.innerLayer||g.outerLayer)){if(e==="Rv")return new y("x",g.amount);if(e==="Uv")return new y("y",g.amount);if(e==="Fv")return new y("z",g.amount);if(e==="Lv")return new y("x",-g.amount);if(e==="Dv")return new y("y",-g.amount);if(e==="Bv")return new y("z",-g.amount)}return g}}});var Vc,Xc,ZQ,VQ,XQ,KI,Tt,$Q=U(()=>{"use strict";wA();Vc={U:"frl",L:"fld",R:"fdr",B:"dlr",u:"FRL",l:"FLD",r:"FDR",b:"DLR",Uv:"FRLv",Lv:"FLDv",Rv:"FDRv",Bv:"DLRv",D:"D",F:"F",BL:"L",BR:"R"},Xc={U:"FRL",L:"FLD",R:"FDR",B:"DLR",u:"frl",l:"fld",r:"fdr",b:"dlr",Uv:"FRLv",Lv:"FLDv",Rv:"FDRv",Bv:"DLRv",D:"D",F:"F",BL:"L",BR:"R",d:"d",f:"f",bl:"l",br:"r"},ZQ={U:"FRL",L:"FLD",R:"FDR",B:"DLR"},VQ=new z("y"),XQ=new z("Dv"),KI=class{constructor(g){this.child=g;this.wcaHack=!1;this.map=Vc}notationToInternal(g){if(this.wcaHack&&g.innerLayer===2&&g.outerLayer===null){let B=ZQ[g.family];if(B)return new y(new z(B,g.innerLayer,g.outerLayer),g.amount)}let e=this.map[g.family];return e?new y(new z(e,g.innerLayer,g.outerLayer),g.amount):VQ.isIdentical(g.quantum)?new y(XQ,-g.amount):null}notationToExternal(g){if(this.wcaHack&&g.innerLayer===2&&g.outerLayer===null){for(let[e,B]of Object.entries(ZQ))if(this.child.spinmatch(g.family,B))return new y(new z(e,g.innerLayer,g.outerLayer),g.amount)}for(let[e,B]of Object.entries(this.map))if(this.child.spinmatch(g.family,B))return new y(new z(e,g.innerLayer,g.outerLayer),g.amount);return XQ.isIdentical(g.quantum)?new y(VQ,-g.amount):null}},Tt=class extends KI{constructor(e){super(e);this.wcaHack=!0;this.map=Xc}}});var Al,pr,gl,$c,Fr,el,AR,wr,Bl,gR,_t,Il=U(()=>{"use strict";wA();Al={U:"UBL",UL:"ULF",F:"UFR",UR:"URB",B:"DBL",D:"DFR",L:"DLF",R:"DRB",Uv:"UBLv",ULv:"ULFv",Fv:"UFRv",URv:"URBv",Bv:"DBLv",Dv:"DFRv",Lv:"DLFv",Rv:"DRBv"},pr=new z("x"),gl=new z("Rv"),$c=new z("Lv"),Fr=new z("y"),el=new z("Uv"),AR=new z("Dv"),wr=new z("z"),Bl=new z("Fv"),gR=new z("Bv"),_t=class{constructor(g){this.child=g}notationToInternal(g){if(g.innerLayer||g.outerLayer)return null;let e=Al[g.family];return e?new y(new z(e,g.outerLayer,g.innerLayer),g.amount):pr.isIdentical(g.quantum)?new y(gl,g.amount):Fr.isIdentical(g.quantum)?new y(el,g.amount):wr.isIdentical(g.quantum)?new y(Bl,g.amount):null}notationToExternal(g){for(let[e,B]of Object.entries(Al))if(this.child.spinmatchv(g.family,B))return new y(new z(e,g.innerLayer,g.outerLayer),g.amount);return gl.isIdentical(g.quantum)?new y(pr,g.amount):$c.isIdentical(g.quantum)?new y(pr,-g.amount):el.isIdentical(g.quantum)?new y(Fr,g.amount):AR.isIdentical(g.quantum)?new y(Fr,-g.amount):Bl.isIdentical(g.quantum)?new y(wr,g.amount):gR.isIdentical(g.quantum)?new y(wr,-g.amount):null}}});var mr=U(()=>{"use strict";OQ();TQ();_Q();WQ();jQ();$Q();Il()});function tl(A){let g=0,e={};for(;g<A.length&&A[g][0]==="-";){let I=A[g++];if(I==="--rotations")e.addRotations=!0;else if(I==="--allmoves")e.allMoves=!0;else if(I==="--outerblockmoves")e.outerBlockMoves=!0;else if(I==="--vertexmoves")e.vertexMoves=!0;else if(I==="--nocorners")e.includeCornerOrbits=!1;else if(I==="--noedges")e.includeEdgeOrbits=!1;else if(I==="--noorientation")e.fixedOrientation=!0;else if(I==="--nocenters")e.includeCenterOrbits=!1;else if(I==="--omit")e.excludeOrbits=A[g].split(","),g++;else if(I==="--moves")e.moveList=A[g].split(","),g++;else if(I==="--optimize")e.optimizeOrbits=!0;else if(I==="--scramble")e.scrambleAmount=100;else if(I==="--fixcorner")e.fixedPieceType="v";else if(I==="--fixedge")e.fixedPieceType="e";else if(I==="--fixcenter")e.fixedPieceType="f";else if(I==="--orientcenters")e.orientCenters=!0;else if(I==="--puzzleorientation")e.puzzleOrientation=JSON.parse(A[g]),g++;else throw new Error(\`Bad option: \${I}\`)}return{puzzleDescription:Wt(A.slice(g).join(" ")),options:e}}var gi,dr=U(()=>{"use strict";jt();gi=class{constructor(g={}){this.verbosity=0;this.allMoves=!1;this.vertexMoves=!1;this.addRotations=!1;this.moveList=null;this.fixedOrientation=!1;this.fixedPieceType=null;this.orientCenters=!1;this.includeCornerOrbits=!0;this.includeCenterOrbits=!0;this.includeEdgeOrbits=!0;this.excludeOrbits=[];this.optimizeOrbits=!1;this.grayCorners=!1;this.grayCenters=!1;this.grayEdges=!1;this.puzzleOrientation=null;this.puzzleOrientations=null;this.scrambleAmount=0;Object.assign(this,g)}}});function iB(A){if(!Sr[A]){let g=Array(A);for(let e=0;e<A;e++)g[e]=0;Sr[A]=g}return Sr[A]}function Fe(A){if(!kr[A]){let g=Array(A);for(let e=0;e<A;e++)g[e]=e;kr[A]=g}return kr[A]}function ol(A){return new Zg(Fe(A))}function il(A){let g=BigInt(1);for(;A>1;)g*=BigInt(A),A--;return g}function eR(A,g){if(A>g){let e=A;A=g,g=e}for(;A>0;){let e=g%A;g=A,A=e}return g}function Ur(A,g){return A/eR(A,g)*g}var Sr,kr,Zg,ei=U(()=>{"use strict";Sr=[],kr=[];Zg=class{constructor(g){this.n=g.length,this.p=g}toString(){return\`Perm[\${this.p.join(" ")}]\`}mul(g){let e=Array(this.n);for(let B=0;B<this.n;B++)e[B]=g.p[this.p[B]];return new Zg(e)}rmul(g){let e=Array(this.n);for(let B=0;B<this.n;B++)e[B]=this.p[g.p[B]];return new Zg(e)}inv(){let g=Array(this.n);for(let e=0;e<this.n;e++)g[this.p[e]]=e;return new Zg(g)}compareTo(g){for(let e=0;e<this.n;e++)if(this.p[e]!==g.p[e])return this.p[e]-g.p[e];return 0}toGap(){let g=new Array,e=new Array(this.n);for(let B=0;B<this.p.length;B++){if(e[B]||this.p[B]===B)continue;let I=new Array;for(let t=B;!e[t];t=this.p[t])I.push(1+t),e[t]=!0;g.push(\`(\${I.join(",")})\`)}return g.join("")}order(){let g=1,e=new Array(this.n);for(let B=0;B<this.p.length;B++){if(e[B]||this.p[B]===B)continue;let I=0;for(let t=B;!e[t];t=this.p[t])I++,e[t]=!0;g=Ur(g,I)}return g}}});function Bi(A,g){let e=y.fromString(g),B=A.notationToExternal(e);return B===null||e===B?g:B.toString()}function Cl(A,g){let e=A.moveops.length;if(e>30)throw new Error("Canon info too big for bitmask");let B=[],I=[];for(let o=0;o<e;o++){let i=A.moveops[o];B.push(i.order());let r=0;for(let n=0;n<e;n++){if(n===o)continue;let l=A.moveops[n];i.mul(l).equal(l.mul(i))&&(r|=1<<n)}I.push(r)}let t={};t[0]=1;for(let o=0;o<100;o++){let i=0,r={},n=0;for(let l in t){let Q=+l,f=t[Q];i+=f,n++;for(let c=0;c<B.length;c++)if((Q>>c&1)===0&&(Q&I[c]&(1<<c)-1)===0){let L=Q&I[c]|1<<c;r[L]===void 0&&(r[L]=0),r[L]+=(B[c]-1)*f}}g(\`\${o}: canonseq \${i} states \${n}\`),t=r}}var xI,BR,zB,ne,we,Ii,be,OB,ti,rl=U(()=>{"use strict";wA();mr();ei();xI=class{constructor(g,e){this.size=g;this.mod=e}reassemblySize(){return il(this.size)*BigInt(this.mod)**BigInt(this.size)}},BR=0;zB=class{constructor(g,e,B,I,t,o,i){this.orbitnames=g;this.orbitdefs=e;this.solved=B;this.movenames=I;this.moveops=t;this.isRotation=o;this.forcenames=i}transformToKTransformationData(g){let e={};for(let B=0;B<this.orbitnames.length;B++)e[this.orbitnames[B]]=g.orbits[B].toKPuzzle();return e}static transformToKTransformationData(g,e){let B={};for(let I=0;I<g.length;I++)B[g[I]]=e.orbits[I].toKPuzzle();return B}describeSet(g,e,B){let I=this.orbitdefs[g].size,t=new Array(I);for(let o=0;o<I;o++)t[o]=[];for(let o=0;o<this.movenames.length;o++){if(this.isRotation[o])continue;let i=this.movenames[o];this.forcenames[o]||(i=Bi(B,i),i[i.length-1]==="'"&&(i=i.substring(0,i.length-1)));let r=this.moveops[o].orbits[g];for(let n=0;n<I;n++)(r.perm[n]!==n||r.ori[n]!==0)&&t[n].push(i)}for(let o=0;o<I;o++)e.push(\`# \${o+1} \${t[o].join(" ")}\`)}toKsolve(g,e=new PB){let B=[];B.push(\`Name \${g}\`),B.push("");for(let I=0;I<this.orbitnames.length;I++)B.push(\`Set \${this.orbitnames[I]} \${this.orbitdefs[I].size} \${this.orbitdefs[I].mod}\`),this.describeSet(I,B,e);B.push(""),B.push("Solved");for(let I=0;I<this.orbitnames.length;I++)this.solved.orbits[I].appendDefinition(B,this.orbitnames[I],!1,!1);B.push("End");for(let I=0;I<this.movenames.length;I++){B.push("");let t=this.movenames[I];this.forcenames[I]||(t=Bi(e,this.movenames[I]));let o=!1;t[t.length-1]==="'"&&(o=!0,t=t.substring(0,t.length-1)),B.push(\`Move \${t}\`);for(let i=0;i<this.orbitnames.length;i++)o?this.moveops[I].orbits[i].inv().appendDefinition(B,this.orbitnames[i],!0):this.moveops[I].orbits[i].appendDefinition(B,this.orbitnames[i],!0);B.push("End")}return B}toKPuzzleDefinition(g){let e={},B={};for(let t=0;t<this.orbitnames.length;t++){e[this.orbitnames[t]]={numPieces:this.orbitdefs[t].size,numOrientations:this.orbitdefs[t].mod};let o=this.solved.orbits[t].toKPuzzle();B[this.orbitnames[t]]={pieces:o.permutation,orientation:o.orientation}}let I={};if(g)for(let t=0;t<this.movenames.length;t++)I[this.movenames[t]]=this.transformToKTransformationData(this.moveops[t]);return{name:\`PG3D #\${++BR}\`,orbits:e,startStateData:B,moves:I}}optimize(){let g=[],e=[],B=[],I=[];for(let t=0;t<this.moveops.length;t++)I.push([]);for(let t=0;t<this.orbitdefs.length;t++){let o=this.orbitdefs[t].mod,i=this.orbitdefs[t].size,r=new ti(i),n=new Array(this.orbitdefs[t].size);for(let c=0;c<i;c++)n[c]=!1;for(let c=0;c<this.moveops.length;c++)if(!this.isRotation[c])for(let L=0;L<i;L++)(this.moveops[c].orbits[t].perm[L]!==L||this.moveops[c].orbits[t].ori[L]!==0)&&(n[L]=!0,r.union(L,this.moveops[c].orbits[t].perm[L]));let l=!0;if(o>1){l=!1;let c=new ti(this.orbitdefs[t].size*o);for(let L=0;L<this.moveops.length;L++)for(let R=0;R<i;R++)if(this.moveops[L].orbits[t].perm[R]!==R||this.moveops[L].orbits[t].ori[R]!==0)for(let p=0;p<o;p++)c.union(R*o+p,this.moveops[L].orbits[t].perm[R]*o+(p+this.moveops[L].orbits[t].ori[R])%o);for(let L=0;!l&&L<i;L++)for(let R=1;R<o;R++)c.find(L*o)===c.find(L*o+R)&&(l=!0);for(let L=0;!l&&L<i;L++)for(let R=0;R<L;R++)this.solved.orbits[t].perm[L]===this.solved.orbits[t].perm[R]&&(l=!0)}let Q=-1,f=!1;for(let c=0;c<this.orbitdefs[t].size;c++)if(n[c]){let L=r.find(c);Q<0?Q=L:Q!==L&&(f=!0)}for(let c=0;c<this.orbitdefs[t].size;c++){if(!n[c]||r.find(c)!==c)continue;let R=[],p=[],k=0;for(let S=0;S<this.orbitdefs[t].size;S++)r.find(S)===c&&(R[k]=S,p[S]=k,k++);if(f?g.push(\`\${this.orbitnames[t]}_p\${c}\`):g.push(this.orbitnames[t]),l){e.push(new xI(k,this.orbitdefs[t].mod)),B.push(this.solved.orbits[t].remapVS(R,k));for(let S=0;S<this.moveops.length;S++)I[S].push(this.moveops[S].orbits[t].remap(R,p,k))}else{e.push(new xI(k,1)),B.push(this.solved.orbits[t].remapVS(R,k).killOri());for(let S=0;S<this.moveops.length;S++)I[S].push(this.moveops[S].orbits[t].remap(R,p,k).killOri())}}}return new zB(g,e,new OB(B),this.movenames,I.map(t=>new be(t)),this.isRotation,this.forcenames)}scramble(g){this.solved=this.solved.mul(this.getScrambleTransformation(g))}getScrambleTransformation(g){g<100&&(g=100);let e=[];for(let I=0;I<this.moveops.length;I++)e[I]=this.moveops[I];for(let I=0;I<e.length;I++){let t=Math.floor(Math.random()*e.length),o=e[I];e[I]=e[t],e[t]=o}g<e.length&&(g=e.length);for(let I=0;I<g;I++){let t=Math.floor(Math.random()*e.length),o=Math.floor(Math.random()*e.length),i=Math.floor(Math.random()*this.moveops.length);e[t]=e[t].mul(e[o]).mul(this.moveops[i]),Math.random()<.1&&(e[t]=e[t].mul(this.moveops[i]))}let B=e[0];for(let I=1;I<e.length;I++)B=B.mul(e[I]);return B}reassemblySize(){let g=BigInt(1);for(let e=0;e<this.orbitdefs.length;e++)g*=this.orbitdefs[e].reassemblySize();return g}},ne=class{constructor(g,e,B){this.perm=g;this.ori=e;this.orimod=B}static e(g,e){return new ne(Fe(g),iB(g),e)}mul(g){let e=this.perm.length,B=new Array(e);if(this.orimod===1){for(let I=0;I<e;I++)B[I]=this.perm[g.perm[I]];return new ne(B,this.ori,this.orimod)}else{let I=new Array(e);for(let t=0;t<e;t++)B[t]=this.perm[g.perm[t]],I[t]=(this.ori[g.perm[t]]+g.ori[t])%this.orimod;return new ne(B,I,this.orimod)}}inv(){let g=this.perm.length,e=new Array(g),B=new Array(g);for(let I=0;I<g;I++)e[this.perm[I]]=I,B[this.perm[I]]=(this.orimod-this.ori[I])%this.orimod;return new ne(e,B,this.orimod)}equal(g){let e=this.perm.length;for(let B=0;B<e;B++)if(this.perm[B]!==g.perm[B]||this.ori[B]!==g.ori[B])return!1;return!0}killOri(){let g=this.perm.length;for(let e=0;e<g;e++)this.ori[e]=0;return this.orimod=1,this}toPerm(){let g=this.orimod;if(g===1)return new Zg(this.perm);let e=this.perm.length,B=new Array(e*g);for(let I=0;I<e;I++)for(let t=0;t<g;t++)B[I*g+t]=g*this.perm[I]+(this.ori[I]+t)%g;return new Zg(B)}identicalPieces(){let g=[],e=this.perm.length,B=[];for(let I=0;I<e;I++){let t=this.perm[I];if(g[t]===void 0){let o=[I];g[t]=!0;for(let i=I+1;i<e;i++)this.perm[i]===t&&o.push(i);B.push(o)}}return B}order(){return this.toPerm().order()}isIdentity(){let g=this.perm.length;if(this.perm===Fe(g)&&this.ori===iB(g))return!0;for(let e=0;e<g;e++)if(this.perm[e]!==e||this.ori[e]!==0)return!1;return!0}zeroOris(){let g=this.perm.length;if(this.ori===iB(g))return!0;for(let e=0;e<g;e++)if(this.ori[e]!==0)return!1;return!0}remap(g,e,B){let I=new Array(B),t=new Array(B);for(let o=0;o<B;o++)I[o]=e[this.perm[g[o]]],t[o]=this.ori[g[o]];return new ne(I,t,this.orimod)}remapVS(g,e){let B=new Array(e),I=new Array(e),t=0,o=[];for(let i=0;i<e;i++){let r=this.perm[g[i]];o[r]===void 0&&(o[r]=t++),B[i]=o[r],I[i]=this.ori[g[i]]}return new ne(B,I,this.orimod)}appendDefinition(g,e,B,I=!0){if(!(I&&this.isIdentity())&&(g.push(e),g.push(this.perm.map(t=>t+1).join(" ")),!this.zeroOris()))if(B){let t=new Array(this.ori.length);for(let o=0;o<t.length;o++)t[this.perm[o]]=this.ori[o];g.push(t.join(" "))}else g.push(this.ori.join(" "))}toKPuzzle(){let g=this.perm.length;return this.isIdentity()?(ne.kcache[g]||(ne.kcache[g]={permutation:Fe(g),orientation:iB(g)}),ne.kcache[g]):{permutation:this.perm,orientation:this.ori}}},we=ne;we.kcache=[];Ii=class{constructor(g){this.orbits=g}internalMul(g){let e=[];for(let B=0;B<this.orbits.length;B++)e.push(this.orbits[B].mul(g.orbits[B]));return e}internalInv(){let g=[];for(let e of this.orbits)g.push(e.inv());return g}equal(g){for(let e=0;e<this.orbits.length;e++)if(!this.orbits[e].equal(g.orbits[e]))return!1;return!0}killOri(){for(let g of this.orbits)g.killOri();return this}toPerm(){let g=new Array,e=0;for(let I of this.orbits){let t=I.toPerm();g.push(t),e+=t.n}let B=new Array(e);e=0;for(let I of g){for(let t=0;t<I.n;t++)B[e+t]=e+I.p[t];e+=I.n}return new Zg(B)}identicalPieces(){let g=[],e=0;for(let B of this.orbits){let I=B.orimod,t=B.identicalPieces();for(let o=0;o<t.length;o++)g.push(t[o].map(i=>i*I+e));e+=I*B.perm.length}return g}order(){let g=1;for(let e of this.orbits)g=Ur(g,e.order());return g}},be=class extends Ii{constructor(g){super(g)}mul(g){return new be(this.internalMul(g))}mulScalar(g){if(g===0)return this.e();let e=this;for(g<0&&(e=e.inv(),g=-g);(g&1)===0;)e=e.mul(e),g>>=1;if(g===1)return e;let B=e,I=this.e();for(;g>0;)g&1&&(I=I.mul(B)),g>1&&(B=B.mul(B)),g>>=1;return I}inv(){return new be(this.internalInv())}e(){return new be(this.orbits.map(g=>we.e(g.perm.length,g.orimod)))}},OB=class extends Ii{constructor(g){super(g)}mul(g){return new OB(this.internalMul(g))}},ti=class{constructor(g){this.n=g;this.heads=new Array(g);for(let e=0;e<g;e++)this.heads[e]=e}find(g){let e=this.heads[g];return this.heads[e]===e||(e=this.find(this.heads[e]),this.heads[g]=e),e}union(g,e){let B=this.find(g),I=this.find(e);B<I?this.heads[I]=B:B>I&&(this.heads[B]=I)}}});var oi,nl=U(()=>{"use strict";oi={"2x2x2":"c f 0","3x3x3":"c f 0.333333333333333","4x4x4":"c f 0.5 f 0","5x5x5":"c f 0.6 f 0.2","6x6x6":"c f 0.666666666666667 f 0.333333333333333 f 0","7x7x7":"c f 0.714285714285714 f 0.428571428571429 f 0.142857142857143","8x8x8":"c f 0.75 f 0.5 f 0.25 f 0","9x9x9":"c f 0.777777777777778 f 0.555555555555556 f 0.333333333333333 f 0.111111111111111","10x10x10":"c f 0.8 f 0.6 f 0.4 f 0.2 f 0","11x11x11":"c f 0.818181818181818 f 0.636363636363636 f 0.454545454545455 f 0.272727272727273 f 0.0909090909090909","12x12x12":"c f 0.833333333333333 f 0.666666666666667 f 0.5 f 0.333333333333333 f 0.166666666666667 f 0","13x13x13":"c f 0.846153846153846 f 0.692307692307692 f 0.538461538461538 f 0.384615384615385 f 0.230769230769231 f 0.0769230769230769","20x20x20":"c f 0 f .1 f .2 f .3 f .4 f .5 f .6 f .7 f .8 f .9","30x30x30":"c f 0 f .066667 f .133333 f .2 f .266667 f .333333 f .4 f .466667 f .533333 f .6 f .666667 f .733333 f .8 f .866667 f .933333","40x40x40":"c f 0 f .05 f .1 f .15 f .2 f .25 f .3 f .35 f .4 f .45 f .5 f .55 f .6 f .65 f .7 f .75 f .8 f .85 f .9 f .95",skewb:"c v 0","master skewb":"c v 0.275","professor skewb":"c v 0 v 0.38","compy cube":"c v 0.915641442663986",helicopter:"c e 0.707106781186547","curvy copter":"c e 0.83",dino:"c v 0.577350269189626","little chop":"c e 0",pyramorphix:"t e 0",mastermorphix:"t e 0.346184634065199",pyraminx:"t v 0.333333333333333 v 1.66666666666667",tetraminx:"t v 0.333333333333333","master pyraminx":"t v 0 v 1 v 2","master tetraminx":"t v 0 v 1","professor pyraminx":"t v -0.2 v 0.6 v 1.4 v 2.2","professor tetraminx":"t v -0.2 v 0.6 v 1.4","Jing pyraminx":"t f 0","master pyramorphix":"t e 0.866025403784437",megaminx:"d f 0.7",gigaminx:"d f 0.64 f 0.82",teraminx:"d f 0.64 f 0.76 f 0.88",petaminx:"d f 0.64 f 0.73 f 0.82 f 0.91",examinx:"d f 0.64 f 0.712 f 0.784 f 0.856 f 0.928",zetaminx:"d f 0.64 f 0.7 f 0.76 f 0.82 f 0.88 f 0.94",yottaminx:"d f 0.64 f 0.6914 f 0.7429 f 0.7943 f 0.8457 f 0.8971 f 0.9486",pentultimate:"d f 0","master pentultimate":"d f 0.1","elite pentultimate":"d f 0 f 0.145905",starminx:"d v 0.937962370425399","starminx 2":"d f 0.23606797749979","pyraminx crystal":"d f 0.447213595499989",chopasaurus:"d v 0","big chop":"d e 0","skewb diamond":"o f 0",FTO:"o f 0.333333333333333","master FTO":"o f 0.5 f 0","Christopher's jewel":"o v 0.577350269189626",octastar:"o e 0","Trajber's octahedron":"o v 0.433012701892219","radio chop":"i f 0",icosamate:"i v 0","icosahedron 2":"i v 0.18759247376021","icosahedron 3":"i v 0.18759247376021 e 0","icosahedron static faces":"i v 0.84","icosahedron moving faces":"i v 0.73","Eitan's star":"i f 0.61803398874989","2x2x2 + dino":"c f 0 v 0.577350269189626","2x2x2 + little chop":"c f 0 e 0","dino + little chop":"c v 0.577350269189626 e 0","2x2x2 + dino + little chop":"c f 0 v 0.577350269189626 e 0","megaminx + chopasaurus":"d f 0.61803398875 v 0","starminx combo":"d f 0.23606797749979 v 0.937962370425399"}});function ii(A){let g=new iA(0,0,0,0);for(let e=0;e<A.length;e++)g=g.sum(A[e]);return g.smul(1/A.length)}function El(A,g,e,B){let I=B[A].intersect3(B[g],B[e]);if(!I)return I;for(let t=0;t<B.length;t++)if(t!==A&&t!==g&&t!==e){let o=B[t].b*I.b+B[t].c*I.c+B[t].d*I.d;if(B[t].a>0&&o>B[t].a||B[t].a<0&&o<B[t].a)return!1}return I}var iA,Ci=U(()=>{"use strict";iA=class{constructor(g,e,B,I){this.a=g;this.b=e;this.c=B;this.d=I}mul(g){return new iA(this.a*g.a-this.b*g.b-this.c*g.c-this.d*g.d,this.a*g.b+this.b*g.a+this.c*g.d-this.d*g.c,this.a*g.c-this.b*g.d+this.c*g.a+this.d*g.b,this.a*g.d+this.b*g.c-this.c*g.b+this.d*g.a)}toString(){return\`Q[\${this.a},\${this.b},\${this.c},\${this.d}]\`}dist(g){return Math.hypot(this.a-g.a,this.b-g.b,this.c-g.c,this.d-g.d)}len(){return Math.hypot(this.a,this.b,this.c,this.d)}cross(g){return new iA(0,this.c*g.d-this.d*g.c,this.d*g.b-this.b*g.d,this.b*g.c-this.c*g.b)}dot(g){return this.b*g.b+this.c*g.c+this.d*g.d}normalize(){let g=Math.sqrt(this.dot(this));return new iA(this.a/g,this.b/g,this.c/g,this.d/g)}makenormal(){return new iA(0,this.b,this.c,this.d).normalize()}normalizeplane(){let g=Math.hypot(this.b,this.c,this.d);return new iA(this.a/g,this.b/g,this.c/g,this.d/g)}smul(g){return new iA(this.a*g,this.b*g,this.c*g,this.d*g)}sum(g){return new iA(this.a+g.a,this.b+g.b,this.c+g.c,this.d+g.d)}sub(g){return new iA(this.a-g.a,this.b-g.b,this.c-g.c,this.d-g.d)}angle(){return 2*Math.acos(this.a)}invrot(){return new iA(this.a,-this.b,-this.c,-this.d)}det3x3(g,e,B,I,t,o,i,r,n){return g*(t*n-o*r)+e*(o*i-I*n)+B*(I*r-t*i)}rotateplane(g){let e=g.mul(new iA(0,this.b,this.c,this.d)).mul(g.invrot());return e.a=this.a,e}orthogonal(){let g=Math.abs(this.b),e=Math.abs(this.c),B=Math.abs(this.d);return g<e&&g<B?this.cross(new iA(0,1,0,0)).normalize():e<g&&e<B?this.cross(new iA(0,0,1,0)).normalize():this.cross(new iA(0,0,0,1)).normalize()}pointrotation(g){let e=this.normalize();if(g=g.normalize(),e.sub(g).len()<1e-9)return new iA(1,0,0,0);let B=e.sum(g);B.len()<1e-9?B=B.orthogonal():B=B.normalize();let I=e.cross(B);return I.a=e.dot(B),I}unproject(g){return this.sum(g.smul(-this.dot(g)/(this.len()*g.len())))}rotatepoint(g){return g.mul(this).mul(g.invrot())}rotateface(g){return g.map(e=>e.rotatepoint(this))}intersect3(g,e){let B=this.det3x3(this.b,this.c,this.d,g.b,g.c,g.d,e.b,e.c,e.d);return Math.abs(B)<1e-9?!1:new iA(0,this.det3x3(this.a,this.c,this.d,g.a,g.c,g.d,e.a,e.c,e.d)/B,this.det3x3(this.b,this.a,this.d,g.b,g.a,g.d,e.b,e.a,e.d)/B,this.det3x3(this.b,this.c,this.a,g.b,g.c,g.a,e.b,e.c,e.a)/B)}side(g){return g>1e-9?1:g<-1e-9?-1:0}cutface(g){let e=this.a,B=0,I=null;for(let t=0;t<g.length;t++)B|=1<<this.side(g[t].dot(this)-e)+1;if((B&5)===5){I=[];let t=g.map(o=>this.side(o.dot(this)-e));for(let o=-1;o<=1;o+=2){let i=[];for(let r=0;r<g.length;r++){(t[r]===o||t[r]===0)&&i.push(g[r]);let n=(r+1)%g.length;if(t[r]+t[n]===0&&t[r]!==0){let l=g[r].dot(this)-e,Q=g[n].dot(this)-e,f=l/(l-Q),c=g[r].smul(1-f).sum(g[n].smul(f));i.push(c)}}I.push(i)}}return I}cutfaces(g){let e=[];for(let B=0;B<g.length;B++){let I=g[B],t=this.cutface(I);t?(e.push(t[0]),e.push(t[1])):e.push(I)}return e}faceside(g){let e=this.a;for(let B=0;B<g.length;B++){let I=this.side(g[B].dot(this)-e);if(I!==0)return I}throw new Error("Could not determine side of plane in faceside")}sameplane(g){let e=this.normalize(),B=g.normalize();return e.dist(B)<1e-9||e.dist(B.smul(-1))<1e-9}makecut(g){return new iA(g,this.b,this.c,this.d)}}});function Ql(){let A=Math.sqrt(.5);return[new iA(A,A,0,0),new iA(A,0,A,0)]}function ll(){return[new iA(.5,.5,.5,.5),new iA(.5,.5,.5,-.5)]}function sl(){let A=2*Math.PI/10,g=.5+.3*Math.sqrt(5),e=.5+.1*Math.sqrt(5),B=Math.sqrt(g*g+e*e);return g/=B,e/=B,[new iA(Math.cos(A),g*Math.sin(A),e*Math.sin(A),0),new iA(.5,.5,.5,.5)]}function al(){let A=.16666666666666666+Math.sqrt(5)/6,g=2/3+Math.sqrt(5)/3,e=Math.sqrt(A*A+g*g);A/=e,g/=e;let B=2*Math.PI/6;return[new iA(Math.cos(B),A*Math.sin(B),g*Math.sin(B),0),new iA(Math.cos(B),-A*Math.sin(B),g*Math.sin(B),0)]}function fl(){let A=Math.sqrt(.5);return[new iA(.5,.5,.5,.5),new iA(A,0,0,A)]}function Dl(A){let g=[new iA(1,0,0,0)];for(let e=0;e<g.length;e++)for(let B=0;B<A.length;B++){let I=A[B].mul(g[e]),t=I.smul(-1),o=!1;for(let i=0;i<g.length;i++)if(I.dist(g[i])<ri||t.dist(g[i])<ri){o=!0;break}o||g.push(I)}return g}function Nr(A,g){let e=[],B=[];for(let I=0;I<g.length;I++){let t=A.rotateplane(g[I]),o=!1;for(let i=0;i<e.length;i++)if(t.dist(e[i])<ri){o=!0;break}o||(e.push(t),B.push(g[I]))}return B}function Gr(A){let g=[];for(let e=1;e<A.length;e++)for(let B=e+1;B<A.length;B++){let I=El(0,e,B,A);if(I){let t=!1;for(let o=0;o<g.length;o++)if(I.dist(g[o])<ri){t=!0;break}t||g.push(I)}}for(;;){let e=!1;for(let B=0;B<g.length;B++){let I=(B+1)%g.length;if(A[0].dot(g[B].cross(g[I]))<0){let t=g[B];g[B]=g[I],g[I]=t,e=!0}}if(!e)break}return g}var ri,cl=U(()=>{"use strict";Ci();ri=1e-9});function ni(A,g){let e=A[0].p.length,B=ol(e),I=[],t=[],o=[],i=[],r=[];function n(c){for(let L=c.p.length-1;L>=0;L--){let R=c.p[L];if(R!==L){if(!I[L][R])return!1;c=c.mul(t[L][R])}}return!0}function l(c,L,R){i[c].push(L),r[c].push(R);for(let p=0;p<I[c].length;p++)I[c][p]&&Q(c,I[c][p].mul(L),R+o[c][p])}function Q(c,L,R){let p=L.p[c];if(!I[c][p]){I[c][p]=L,t[c][p]=L.inv(),o[c][p]=R;for(let S=0;S<i[c].length;S++)Q(c,L.mul(i[c][S]),R+r[c][S]);return}let k=L.mul(t[c][p]);n(k)||l(c-1,k,R+o[c][p])}function f(){I=[],t=[],i=[],o=[],r=[];for(let R=0;R<e;R++)I.push([]),t.push([]),o.push([]),i.push([]),r.push([]),I[R][R]=B,t[R][R]=B,o[R][R]=0;let c=0,L=BigInt(1);for(let R=0;R<A.length;R++){l(e-1,A[R],1),L=BigInt(1);let p=0,k=0,S=[],G=new Mr;for(let K=0;K<e;K++){let Y=0,T=0;for(let _=0;_<e;_++)I[K][_]&&(Y++,T+=o[K][_],K!==_&&c++);p+=i[K].length,L*=BigInt(Y),Y>1&&G.multiply(Y);let QA=T/Y;S.push(QA),k+=QA}g(\`\${R}: sz \${L} T \${p} sol \${k} none \${c} mults \${G.toString()}\`)}return L}return f()}var Mr,Kr=U(()=>{"use strict";ei();Mr=class{constructor(){this.mult=[]}multiply(g){for(let e=2;e*e<=g;e++)for(;g%e===0;)this.mult[e]!==void 0?this.mult[e]++:this.mult[e]=1,g/=e;g>1&&(this.mult[g]!==void 0?this.mult[g]++:this.mult[g]=1)}toString(){let g="";for(let e=0;e<this.mult.length;e++)this.mult[e]!==void 0&&(g!==""&&(g+="*"),g+=e,this.mult[e]>1&&(g+=\`^\${this.mult[e]}\`));return g}}});function IR(A,g){let e=[];for(let B of A)for(let I of g)e.push(I.rotate(B));return e}function iR(){return{4:[["F","D","L","R"]],6:[["F","D","L","U","R"],["R","F","","B",""]],8:[["F","D","L","R"],["D","F","BR",""],["BR","D","","BB"],["BB","BR","U","BL"]],12:[["U","F","","","",""],["F","U","R","C","A","L"],["R","F","","","E",""],["E","R","","BF","",""],["BF","E","BR","BL","I","D"]],20:[["R","C","F","E"],["F","R","L","U"],["L","F","A",""],["E","R","G","I"],["I","E","S","H"],["S","I","J","B"],["B","S","K","D"],["K","B","M","O"],["O","K","P","N"],["P","O","Q",""]]}}function CR(){return{4:{F:"#00ff00",D:"#ffff00",L:"#ff0000",R:"#0000ff"},6:{U:"#ffffff",F:"#00ff00",R:"#ff0000",D:"#ffff00",B:"#0000ff",L:"#ff8000"},8:{U:"#ffffff",F:"#ff0000",R:"#00bb00",D:"#ffff00",BB:"#1122ff",L:"#9524c5",BL:"#ff8800",BR:"#aaaaaa"},12:{U:"#ffffff",F:"#006633",R:"#ff0000",C:"#ffffd0",A:"#3399ff",L:"#660099",E:"#ff66cc",BF:"#99ff00",BR:"#0000ff",BL:"#ffff00",I:"#ff6633",D:"#999999"},20:{R:"#db69f0",C:"#178fde",F:"#23238b",E:"#9cc726",L:"#2c212d",U:"#177fa7",A:"#e0de7f",G:"#2b57c0",I:"#41126b",S:"#4b8c28",H:"#7c098d",J:"#7fe7b4",B:"#85fb74",K:"#3f4bc3",D:"#0ff555",M:"#f1c2c8",O:"#58d340",P:"#c514f2",N:"#14494e",Q:"#8b1be1"}}}function nR(){return{4:[["FLR",[0,1,0]],["F",[0,0,1]]],6:[["U",[0,1,0]],["F",[0,0,1]]],8:[["U",[0,1,0]],["F",[0,0,1]]],12:[["U",[0,1,0]],["F",[0,0,1]]],20:[["GUQMJ",[0,1,0]],["F",[0,0,1]]]}}function Ei(A,g){for(let e=0;e<A.length;e++)if(A[e][0].dist(g)<gg)return e;throw new Error("Element not found")}function Rl(){return oi}function Ll(A){return oi[A]}function Wt(A){let g=A.split(/ /).filter(Boolean);if(g.length%2===0)return null;let e=g[0];if(e!=="o"&&e!=="c"&&e!=="i"&&e!=="d"&&e!=="t")return null;let B=[];for(let I=1;I<g.length;I+=2){if(g[I]!=="f"&&g[I]!=="v"&&g[I]!=="e")return null;B.push({cutType:g[I],distance:parseFloat(g[I+1])})}return{shape:e,cuts:B}}function Yr(A,g={}){let e=Wt(A);if(e===null)throw new Error("Could not parse the puzzle description");let B=new Zt(e,Object.assign({},{allMoves:!0},g));return B.allstickers(),B.genperms(),B}function hl(A,g){return Yr(oi[A],g)}function ER(A,g,e){let B=!1;e-g[1]<g[0]&&(A=[A[2],A[3],A[0],A[1]],g=[e-g[1],e-g[0]],B=!0);let I=A[0],t="";if(g[0]===0&&g[1]===e)I=\`\${I}v\`;else if(g[0]===g[1])g[1]>0&&(t=String(g[1]+1));else if(g[0]===0)I=I.toLowerCase(),g[1]>1&&(t=String(g[1]+1));else throw new Error(\`We only support slice and outer block moves right now. \${g}\`);return[t+I,B]}function QR(A,g){let e=[],B=0;for(;B<A.length;){B>0&&B<A.length&&A[B]==="_"&&B++;let I="";for(let t of g)A.substr(B).startsWith(t[1])&&t[1].length>I.length&&(I=t[1]);if(I!=="")e.push(I),B+=I.length;else throw new Error(\`Could not split \${A} into face names.\`)}return e}function Qi(A,g){return[A.b/g,-A.c/g,A.d/g]}function xr(A,g){let e=[],B=A.length;for(let I=0;I<B;I++){let t=Qi(A.get(B-I-1),g);e[3*I]=t[0],e[3*I+1]=t[1],e[3*I+2]=t[2]}return e}var CB,YI,gg,tR,oR,rR,ul,yl,Zt,li,jt=U(()=>{"use strict";wA();zQ();mr();dr();ei();rl();nl();cl();Ci();Kr();CB=class{constructor(g){this.coords=new Array(g.length*3);for(let e=0;e<g.length;e++)this.coords[3*e]=g[e].b,this.coords[3*e+1]=g[e].c,this.coords[3*e+2]=g[e].d;this.length=g.length}get(g){return new iA(0,this.coords[3*g],this.coords[3*g+1],this.coords[3*g+2])}centermass(){let g=0,e=0,B=0;for(let I=0;I<this.length;I++)g+=this.coords[3*I],e+=this.coords[3*I+1],B+=this.coords[3*I+2];return new iA(0,g/this.length,e/this.length,B/this.length)}rotate(g){let e=[];for(let B=0;B<this.length;B++)e.push(this.get(B).rotatepoint(g));return new CB(e)}rotateforward(){let g=[];for(let e=1;e<this.length;e++)g.push(this.get(e));return g.push(this.get(0)),new CB(g)}},YI=class{constructor(g,e,B){this.face=g;this.left=e;this.right=B}split(g){let e=g.cutface(this.face);return e!==null&&(this.left===void 0?(this.left=new YI(e[0]),this.right=new YI(e[1])):(this.left=this.left?.split(g),this.right=this.right?.split(g))),this}collect(g,e){return this.left===void 0?g.push(new CB(this.face)):e?(this.left?.collect(g,!1),this.right?.collect(g,!0)):(this.right?.collect(g,!1),this.left?.collect(g,!0)),g}};gg=1e-9,tR="PuzzleGeometry 0.1 Copyright 2018 Tomas Rokicki.",oR=!1;rR={4:{v:["DFR","DLF","DRL","FLR"],e:["FR","LF","DF","DL","RD","RL"],c:["DF","FD","RL","LR"]},6:{v:["URF","UBR","ULB","UFL","DFR","DRB","DBL","DLF"],e:["UF","UR","UB","UL","DF","DR","DB","DL","FR","FL","BR","BL"],c:["UB","LU","FU","RU","BU","DF"]},8:{v:["UBBBRR","URFL","ULBLBB","DBRBBBL","DBLLF","DFRBR"],e:["UL","UBB","UR","BRD","BLD","FD","BRR","FR","FL","BLL","BLBB","BRBB"],c:["BBU","LU","RU","BRD","FD","BLD","DF","UBB"]},12:{v:["URF","UFL","ULBL","UBLBR","UBRR","DEBF","DBFI","DIA","DAC","DCE","LAI","ALF","FCA","CFR","REC","ERBR","BRBFE","BFBRBL","BLIBF","IBLL"],e:["UF","UR","UBR","UBL","UL","ER","EBR","EBF","ED","EC","IBF","IBL","IL","IA","ID","AC","CF","FA","BFBR","BRBL","BLBF","CD","AD","AL","FL","FR","CR","BFD","BRR","BLL"],c:["UF","FU","DBF","BFD","AD","CD","BRU","BLU","LA","RA","EBR","IBL"]},20:{v:["FLPQU","FUGER","FRCAL","HCREI","ISBDH","JSIEG","BSJMK","MQPOK","ONDBK","NOPLA","UQMJG","DNACH"],e:["FU","FL","FR","EG","ER","EI","SJ","SI","SB","KM","KB","KO","PQ","PO","PL","UG","JG","MQ","UQ","HC","HD","ND","NA","JM","CA","AL","CR","HI","DB","NO"],c:["FU","UF","GE","EG","JS","SJ","MK","KM","QP","PQ","LA","AL","RC","CR","IH","HI","BD","DB","ON","NO"]}};ul=["c","t","o","d","i"],yl=["f","v","e"];Zt=class{constructor(g,e){this.puzzleDescription=g;this.cmovesbyslice=[];this.duplicatedFaces=[];this.duplicatedCubies=[];this.fixedCubie=-1;this.net=[];this.colors=[];this.notationMapper=new PB;this.addNotationMapper="";this.setReidOrder=!1;let B="genperms";this.options=new gi(e),this.options.verbosity>0&&console.log(this.header("# ")),this.create(g)}create(g){let{shape:e,cuts:B}=g;this.moveplanes=[],this.moveplanes2=[],this.faces=[],this.cubies=[];let I=null;switch(e){case"c":{I=Ql();break}case"o":{I=fl();break}case"i":{I=al();break}case"t":{I=ll();break}case"d":{I=sl();break}default:throw new Error(\`Bad shape argument: \${e}\`)}this.rotations=Dl(I),this.options.verbosity&&console.log(\`# Rotations: \${this.rotations.length}\`);let t=I[0];this.baseplanerot=Nr(t,this.rotations);let o=this.baseplanerot.map(N=>t.rotateplane(N));this.baseplanes=o,this.baseFaceCount=o.length;let i=iR()[o.length];this.net=i,this.colors=CR()[o.length],this.options.verbosity>0&&console.log(\`# Base planes: \${o.length}\`);let r=Gr(o),n=new iA(0,0,0,0);this.options.verbosity>0&&console.log(\`# Face vertices: \${r.length}\`);let l=o[0].makenormal(),Q=r[0].sum(r[1]).makenormal(),f=r[0].makenormal(),c=new iA(1,l.b,l.c,l.d);this.options.verbosity>0&&console.log(\`# Boundary is \${c}\`);let R=Nr(c,this.rotations).map(N=>c.rotateplane(N)),p=Gr(R);this.edgedistance=p[0].sum(p[1]).smul(.5).dist(n),this.vertexdistance=p[0].dist(n);let k=[],S=[],G=!1,K=!1,Y=!1;for(let N of B){let q=null,AA=0;switch(N.cutType){case"f":{q=l,AA=1,G=!0;break}case"v":{q=f,AA=this.vertexdistance,Y=!0;break}case"e":{q=Q,AA=this.edgedistance,K=!0;break}default:throw new Error(\`Bad cut argument: \${N.cutType}\`)}k.push(q.makecut(N.distance)),S.push(N.distance<AA)}this.options.addRotations&&(G||k.push(l.makecut(10)),Y||k.push(f.makecut(10)),K||k.push(Q.makecut(10))),this.basefaces=[];for(let N of this.baseplanerot){let q=N.rotateface(p);this.basefaces.push(new CB(q))}let T=[],QA=[],_=[],rA=[],M=p.length;function P(N,q,AA){for(let $ of N)if($[0].dist(q)<gg){$.push(AA);return}N.push([q,AA])}for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p);for(let AA=0;AA<q.length;AA++){let $=(AA+1)%q.length,sA=q[AA].sum(q[$]).smul(.5);P(rA,sA,N)}}let O=[];for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p),AA=[];for(let $=0;$<q.length;$++){let sA=($+1)%q.length,SA=q[$].sum(q[sA]).smul(.5),Bg=rA[Ei(rA,SA)];if(N===Bg[1])AA.push(Bg[2]);else if(N===Bg[2])AA.push(Bg[1]);else throw new Error("Could not find edge")}O.push(AA)}let v={},H=[];H.push(i[0][0]),v[i[0][0]]=0,H[O[0][0]]=i[0][1],v[i[0][1]]=O[0][0];for(let N of i){let q=N[0],AA=v[q];if(AA===void 0)throw new Error("Bad edge description; first edge not connected");let $=-1;for(let sA=0;sA<O[AA].length;sA++){let SA=H[O[AA][sA]];if(SA!==void 0&&SA===N[1]){$=sA;break}}if($<0)throw new Error("First element of a net not known");for(let sA=2;sA<N.length;sA++){if(N[sA]==="")continue;let SA=O[AA][(sA+$-1)%M],Bg=H[SA];if(Bg!==void 0&&Bg!==N[sA])throw new Error("Face mismatch in net");H[SA]=N[sA],v[N[sA]]=SA}}for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p),AA=c.rotateplane(this.baseplanerot[N]),$=H[N];T.push([q,$]),QA.push([AA,$])}for(let N=0;N<this.baseplanerot.length;N++){let q=this.baseplanerot[N].rotateface(p),AA=H[N];for(let $=0;$<q.length;$++){let sA=($+1)%q.length,SA=q[$].sum(q[sA]).smul(.5),Bg=($+2)%q.length,xC=q[sA].sum(q[Bg]).smul(.5),YC=Ei(rA,SA),JC=Ei(rA,xC);P(_,q[sA],[AA,JC,YC])}}this.swizzler=new GI(T.map(N=>N[1]));let V=this.swizzler.prefixFree?"":"_",CA=rR[this.baseFaceCount],gA=[];for(let N=0;N<this.baseFaceCount;N++)gA[1<<N]=N;{let N=CA.v;for(let q of N){let AA=this.swizzler.splitByFaceNames(q),$=0;for(let sA of AA)$|=1<<sA;gA[$]=AA[0]}}{let N=CA.e;for(let q of N){let AA=this.swizzler.splitByFaceNames(q),$=0;for(let sA of AA)$|=1<<sA;gA[$]=AA[0]}}{let N=CA.c;for(let q of N){let AA=this.swizzler.splitByFaceNames(q),$=1<<AA[0]|1<<this.baseFaceCount;gA[$]=AA[1]}}for(let N=0;N<rA.length;N++){if(rA[N].length!==3)throw new Error(\`Bad length in edge names \${rA[N]}\`);let q=rA[N][1],AA=rA[N][2],$=H[q],sA=H[AA],SA=1<<q|1<<AA;gA[SA]===q?$=$+V+sA:$=sA+V+$,rA[N]=[rA[N][0],$]}for(let N=0;N<_.length;N++){let q=0;if(_[N].length<4)throw new Error("Bad length in vertex names");for(let SA=1;SA<_[N].length;SA++)q|=1<<v[_[N][SA][0]];let AA=gA[q],$=-1;for(let SA=1;SA<_[N].length;SA++)AA===v[_[N][SA][0]]&&($=SA);if($<0)throw new Error("Internal error; couldn't find face name when fixing corners");let sA="";for(let SA=1;SA<_[N].length;SA++){SA===1?sA=_[N][$][0]:sA=sA+V+_[N][$][0];for(let Bg=1;Bg<_[N].length;Bg++)if(_[N][$][1]===_[N][Bg][2]){$=Bg;break}}_[N]=[_[N][0],sA]}this.markedface=gA,this.options.verbosity>1&&(console.log(\`# Face names: \${T.map(N=>N[1]).join(" ")}\`),console.log(\`# Edge names: \${rA.map(N=>N[1]).join(" ")}\`),console.log(\`# Vertex names: \${_.map(N=>N[1]).join(" ")}\`));let aA=[];for(let N of QA)aA.push([N[0].makenormal(),N[1],"f"]);for(let N of rA)aA.push([N[0].makenormal(),N[1],"e"]);for(let N of _)aA.push([N[0].makenormal(),N[1],"v"]);this.facenames=T,this.faceplanes=QA,this.edgenames=rA,this.vertexnames=_,this.geonormals=aA;let bA=aA.map(N=>N[1]);this.swizzler.setGripNames(bA),this.options.verbosity>0&&console.log(\`# Distances: face \${1} edge \${this.edgedistance} vertex \${this.vertexdistance}\`);for(let N=0;N<k.length;N++)for(let q of this.rotations){let AA=k[N].rotateplane(q),$=!1;for(let sA of this.moveplanes)if(AA.sameplane(sA)){$=!0;break}$||(this.moveplanes.push(AA),S[N]&&this.moveplanes2.push(AA))}let WA=new YI(p),eA=this.moveplanes2.slice(),qA=31;for(let N=0;N<eA.length;N++){let q=N+Math.floor((eA.length-N)*(qA/65536));WA=WA.split(eA[q]),eA[q]=eA[N],qA=(qA*1657+101)%65536}let xA=WA.collect([],!0);this.faces=xA,this.options.verbosity>0&&console.log(\`# Faces is now \${xA.length}\`),this.stickersperface=xA.length;let vg=[],hg=ii(p);for(let N of this.rotations){let q=N.rotateface(p);hg.dist(ii(q))<gg&&vg.push(N)}let bg=new Array(xA.length),Ag=[];for(let N=0;N<xA.length;N++){let q=xA[N].centermass();Ag.push([hg.dist(q),q,N])}Ag.sort((N,q)=>N[0]-q[0]);for(let N=0;N<xA.length;N++){let q=Ag[N][2];if(!bg[q]){bg[q]=!0;for(let AA of vg){let $=xA[q].rotate(AA),sA=$.centermass();for(let SA=N+1;SA<xA.length&&!(Ag[SA][0]-Ag[N][0]>gg);SA++){let Bg=Ag[SA][2];if(!bg[Bg]&&sA.dist(Ag[SA][1])<gg){bg[Bg]=!0,xA[Bg]=$;break}}}}}this.shortedge=1e99;for(let N of xA)for(let q=0;q<N.length;q++){let AA=(q+1)%N.length,$=N.get(q).dist(N.get(AA));$<this.shortedge&&(this.shortedge=$)}this.options.verbosity>0&&console.log(\`# Short edge is \${this.shortedge}\`),e==="c"&&G&&!K&&!Y&&(this.addNotationMapper="NxNxNCubeMapper",this.setReidOrder=!0),e==="c"&&Y&&!G&&!K&&(this.addNotationMapper="SkewbMapper"),e==="t"&&(Y||G)&&!K&&(this.addNotationMapper="PyraminxOrTetraminxMapper"),e==="o"&&G&&(this.notationMapper=new MI(this.swizzler,new GI(["F","D","L","BL","R","U","BR","B"])),K||Y||(this.addNotationMapper="FTOMapper")),e==="d"&&G&&(this.addNotationMapper="MegaminxMapper",this.notationMapper=new MI(this.swizzler,new GI(["U","F","L","BL","BR","R","FR","FL","DL","B","DR","D"])))}keyface(g){return this.keyface2(g.centermass())}keyface2(g){let e="",B=String.fromCharCode;for(let I of this.moveplanesets)if(I.length>0){let t=g.dot(I[0]),o=0,i=1;for(;i*2<=I.length;)i*=2;for(;i>0;i>>=1)o+i<=I.length&&t>I[o+i-1].a&&(o+=i);if(o<47)e=e+B(33+o);else if(o<47+47*47)e=e+B(33+47+Math.floor(o/47)-1)+B(33+o%47);else if(o<47+47*47+47*47*47)e=e+B(33+47+Math.floor((o-47)/(47*47)-1))+B(33+47+Math.floor((o-47)/47)%47)+B(33+o%47);else throw Error("Too many slices for cubie encoding")}return e}keyface3(g){let e=g.centermass(),B=[];for(let I of this.moveplanesets)if(I.length>0){let t=e.dot(I[0]),o=0,i=1;for(;i*2<=I.length;)i*=2;for(;i>0;i>>=1)o+i<=I.length&&t>I[o+i-1].a&&(o+=i);B.push(o)}return B}findface(g){let e=this.keyface2(g),B=this.facelisthash.get(e);if(B.length===1)return B[0];for(let I=0;I+1<B.length;I++){let t=this.facelisthash.get(e)[I];if(Math.abs(g.dist(this.facecentermass[t]))<gg)return t}return B[B.length-1]}project2d(g,e,B){let I=this.facenames[g][0],t=(e+1)%I.length,o=this.baseplanes[g],i=I[t].sub(I[e]),r=i.len();i=i.normalize();let n=i.cross(o).normalize(),l=B[1].sub(B[0]),Q=l.len()/r;l=l.normalize();let f=l.b,c=l.c,L=i.smul(f).sub(n.smul(c)).smul(Q),R=n.smul(f).sum(i.smul(c)).smul(Q),p=new iA(0,B[0].b-L.dot(I[e]),B[0].c-R.dot(I[e]),0);return[L,R,p]}allstickers(){let g="allstickers";this.faces=IR(this.baseplanerot,this.faces),this.options.verbosity>0&&console.log(\`# Total stickers is now \${this.faces.length}\`),this.facecentermass=new Array(this.faces.length);for(let M=0;M<this.faces.length;M++)this.facecentermass[M]=this.faces[M].centermass();let e=[],B=[];for(let M of this.moveplanes){let P=M.makenormal(),O=!1;for(let v of B)P.sameplane(v.makenormal())&&(O=!0);O||(B.push(P),e.push([]))}for(let M of this.moveplanes2){let P=M.makenormal();for(let O=0;O<B.length;O++)if(P.sameplane(B[O])){e[O].push(M);break}}for(let M=0;M<e.length;M++){let P=e[M].map(v=>v.normalizeplane()),O=B[M];for(let v=0;v<P.length;v++)P[v].makenormal().dist(O)>gg&&(P[v]=P[v].smul(-1));P.sort((v,H)=>v.a-H.a),e[M]=P}this.moveplanesets=e,this.moveplanenormals=B;let I=e.map(M=>M.length);this.options.verbosity>0&&console.log(\`# Move plane sets: \${I}\`);let t=[];for(let M=0;M<e.length;M++)t.push([]);for(let M of this.rotations){if(Math.abs(Math.abs(M.a)-1)<gg)continue;let P=M.makenormal();for(let O=0;O<e.length;O++)if(P.sameplane(B[O])){t[O].push(M);break}}this.moverotations=t;for(let M=0;M<t.length;M++){let P=t[M],O=P[0].makenormal();for(let v=0;v<P.length;v++)O.dist(P[v].makenormal())>gg&&(P[v]=P[v].smul(-1));P.sort((v,H)=>v.angle()-H.angle()),t[M][0].dot(B[M])<0&&P.reverse()}let o=t.map(M=>1+M.length);this.movesetorders=o;let i=[],r="?";for(let M=0;M<e.length;M++){let P=B[M],O=null,v=null;for(let H of this.geonormals){let V=P.dot(H[0]);Math.abs(V-1)<gg?(v=[H[1],H[2]],r=H[2]):Math.abs(V+1)<gg&&(O=[H[1],H[2]],r=H[2])}if(v===null||O===null)throw new Error("Saw positive or negative sides as null");i.push([v[0],v[1],O[0],O[1],1+e[M].length]),this.addNotationMapper==="NxNxNCubeMapper"&&r==="f"&&(this.notationMapper=new Ot(1+e[M].length),this.addNotationMapper=""),this.addNotationMapper==="SkewbMapper"&&e[0].length===1&&(this.notationMapper=new _t(this.swizzler),this.addNotationMapper=""),this.addNotationMapper==="PyraminxOrTetraminxMapper"&&(e[0].length===2&&e[0][0].a===.333333333333333&&e[0][1].a===1.66666666666667?(this.notationMapper=new KI(this.swizzler),this.addNotationMapper=""):(this.notationMapper=new Tt(this.swizzler),this.addNotationMapper="")),this.addNotationMapper==="MegaminxMapper"&&r==="f"&&(1+e[M].length===3&&(this.notationMapper=new zt(this.notationMapper)),this.addNotationMapper=""),this.addNotationMapper==="FTOMapper"&&r==="f"&&(1+e[M].length===3&&(this.notationMapper=new Pt(this.notationMapper,this.swizzler)),this.addNotationMapper="")}this.movesetgeos=i;let n=new Map,l=this.faces;for(let M=0;M<l.length;M++){let P=l[M],O=this.keyface(P);if(!n.get(O))n.set(O,[M]);else{let v=n.get(O);if(v.push(M),v.length===this.baseFaceCount){this.options.verbosity>0&&console.log("# Splitting core.");for(let H=0;H<v.length;H++){let V=\`\${O} \${H}\`;n.set(V,[v[H]])}}}}this.facelisthash=n,this.options.verbosity>0&&console.log(\`# Cubies: \${n.size}\`);let Q=[],f=[],c=[];for(let M of n.values())if(M.length!==this.baseFaceCount){if(M.length>1){let P=M.map(CA=>l[CA].centermass()),O=ii(P);for(let CA=0;M.length>2;CA++){let gA=!1;for(let aA=0;aA<M.length;aA++){let bA=(aA+1)%M.length;if(O.dot(P[aA].cross(P[bA]))<0){let WA=P[aA];P[aA]=P[bA],P[bA]=WA;let eA=M[aA];M[aA]=M[bA],M[bA]=eA,gA=!0}}if(!gA)break;if(CA>1e3)throw new Error("Bad epsilon math; too close to border")}let v=0;for(let CA of M)v|=1<<Math.floor(CA/this.stickersperface);let H=this.markedface[v],V=-1;for(let CA=0;CA<M.length;CA++)Math.floor(M[CA]/this.stickersperface)===H&&(V=CA);if(V<0)throw new Error("Could not find marked face in list");if(V!==0){let CA=M.slice();for(let gA=0;gA<M.length;gA++)M[gA]=CA[(V+gA)%M.length]}}for(let P=0;P<M.length;P++){let O=M[P];f[O]=Q.length,c[O]=P}Q.push(M)}this.cubies=Q,this.facetocubie=f,this.facetoord=c;let L=["?","CENTERS","EDGES","CORNERS","C4RNER","C5RNER"],R=[],p=[0,0,0,0,0,0],k=[],S=[],G=0,K=[],Y=[],T=[],QA=[],_=M=>Q[M].map(P=>this.getfaceindex(P)).join(" "),rA=[];for(let M=0;M<Q.length;M++){let P=Q[M];if(P.length===0||S[M])continue;let O={},v=0;T.push(0),rA.push([]);let H=P.length,V=p[H]++,CA=L[H];(CA===void 0||H===this.baseFaceCount)&&(CA="CORE"),CA=CA+(V===0?"":V+1),R[G]=CA,k[G]=H;let gA=[M],aA=0;for(S[M]=!0;aA<gA.length;){let bA=gA[aA++],WA=_(bA);if((P.length>1||O[WA]===void 0)&&(O[WA]=v++),QA[bA]=O[WA],K[bA]=G,rA[G].push(bA),Y[bA]=T[G]++,gA.length<this.rotations.length){let eA=this.facecentermass[Q[bA][0]];for(let qA of t){let xA=this.facetocubie[this.findface(eA.rotatepoint(qA[0]))];S[xA]||(gA.push(xA),S[xA]=!0)}}}G++}if(this.setReidOrder&&4<=this.stickersperface&&this.stickersperface<=9){let M=[["UF","UR","UB","UL","DF","DR","DB","DL","FR","FL","BR","BL"],["UFR","URB","UBL","ULF","DRF","DFL","DLB","DBR"],["U","L","F","R","B","D"]],P={};for(let O of M)for(let v=0;v<O.length;v++){let H=0;for(let V=0;V<O[v].length;V++)H|=1<<O[v].charCodeAt(V)-65;P[H]=v}for(let O of rA)for(let v of O){let H=0;for(let V of Q[v])H|=1<<this.facenames[this.getfaceindex(V)][1].charCodeAt(0)-65;Y[v]=P[H]}}if(this.cubiesetnums=K,this.cubieordnums=Y,this.cubiesetnames=R,this.cubieords=T,this.orbitoris=k,this.cubievaluemap=QA,this.cubiesetcubies=rA,this.options.fixedPieceType!==null){for(let M=0;M<Q.length;M++)if(this.options.fixedPieceType==="v"&&Q[M].length>2||this.options.fixedPieceType==="e"&&Q[M].length===2||this.options.fixedPieceType==="f"&&Q[M].length===1){this.fixedCubie=M;break}if(this.fixedCubie<0)throw new Error(\`Could not find a cubie of type \${this.options.fixedPieceType} to fix.\`)}this.options.verbosity>0&&console.log(\`# Cubie orbit sizes \${T}\`)}unswizzle(g){let e=this.notationMapper.notationToInternal(g);return e===null?null:e.modified({family:this.swizzler.unswizzle(e.family)})}stringToBlockMove(g){let e=RegExp("^(([0-9]+)-)?([0-9]+)?([^0-9]+)([0-9]+'?)?$"),B=g.match(e);if(B===null)throw new Error(\`Bad move passed \${g}\`);let I=B[4],t,o;if(B[2]!==void 0){if(B[3]===void 0)throw new Error("Missing second number in range");t=parseInt(B[2],10)}B[3]!==void 0&&(o=parseInt(B[3],10));let i="1",r=1;return B[5]!==void 0&&(i=B[5],i[0]==="'"&&(i=\`-\${i.substring(1)}\`),r=parseInt(i,10)),new y(new z(I,o,t),r)}parseMove(g){let e=this.notationMapper.notationToInternal(g);if(e===null)throw new Error(\`Bad move \${g.family}\`);g=e;let B=g.family,I=!1;if(B.endsWith("v")&&B[0]<="Z"){if(g.innerLayer!==void 0||g.outerLayer!==void 0)throw new Error("Cannot use a prefix with full cube rotations");B=B.slice(0,-1),I=!0}B.endsWith("w")&&B[0]<="Z"&&(B=B.slice(0,-1).toLowerCase());let t,o=-1,i=this.swizzler.unswizzle(B),r=!1;for(let Q=0;Q<this.movesetgeos.length;Q++){let f=this.movesetgeos[Q];i===f[0]&&(r=!0,t=f,o=Q),i===f[2]&&(r=!1,t=f,o=Q)}let n=1,l=1;if(B.toUpperCase()!==B&&(l=2),t===void 0)throw new Error(\`Bad grip in move \${g.family}\`);if(g.outerLayer!==void 0&&(n=g.outerLayer),g.innerLayer!==void 0&&(g.outerLayer===void 0?(l=g.innerLayer,B<="Z"?n=l:n=1):l=g.innerLayer),n--,l--,I&&(n=0,l=this.moveplanesets[o].length),n<0||n>this.moveplanesets[o].length||l<0||l>this.moveplanesets[o].length)throw new Error(\`Bad slice spec \${n} \${l} vs \${this.moveplanesets[o].length}\`);if(!oR&&n===0&&l===this.moveplanesets[o].length&&!I)throw new Error("! full puzzle rotations must be specified with v suffix.");return[void 0,o,n,l,r,g.amount]}parsemove(g){let e=this.parseMove(this.stringToBlockMove(g));return e[0]=g,e}genperms(){let g="genperms";if(this.cmovesbyslice.length>0)return;let e=[];if(this.options.orientCenters){for(let B=0;B<this.cubies.length;B++)if(this.cubies[B].length===1){let I=this.cubies[B][0],t=this.getfaceindex(I),o=this.basefaces[t].centermass();if(o.dist(this.facecentermass[I])<gg){let i=1<<t|1<<this.baseFaceCount,r=this.markedface[i],n=this.baseplanes[r].makenormal(),l=-1,Q=-1;for(let L=0;L<this.faces[I].length;L++){let R=this.faces[I].get(L),p=n.dot(R.sub(o));p>l&&(l=p,Q=L)}let f=(Q+1)%this.faces[I].length;if(Math.abs(n.dot(this.faces[I].get(f).sub(o))-l)<gg&&(Q=f),Q!==0){let L=[];for(let R=0;R<this.faces[I].length;R++)L.push(this.faces[I].get((R+Q)%this.faces[I].length));this.faces[I]=new CB(L)}let c=this.basefaces[t].length;for(let L=1;L<c;L++)this.cubies[B].push(this.cubies[B][L-1]);this.duplicatedFaces[I]=c,this.duplicatedCubies[B]=c,this.orbitoris[this.cubiesetnums[B]]=c}}}for(let B=0;B<this.moveplanesets.length;B++){let I=this.moveplanesets[B],t=[],o=[I.length+1,0],i=1;for(;i*2<=I.length;)i*=2;for(let l=0;l<this.faces.length;l++){let Q=0;if(I.length>0){let f=this.facecentermass[l].dot(I[0]);for(let c=i;c>0;c>>=1)Q+c<=I.length&&f>I[Q+c-1].a&&(Q+=c);Q=I.length-Q}for(t.push(Q);o.length<=Q;)o.push(0);o[Q]++}let r=new Array(o.length);for(let l=0;l<o.length;l++)r[l]=[];let n=[];for(let l=0;l<this.faces.length;l++){if(t[l]<0)continue;let Q=[this.facetocubie[l],this.facetoord[l]],f=this.facecentermass[l],c=f,L=l,R=t[L];for(;;){t[L]=-1;let p=f.rotatepoint(this.moverotations[B][0]);if(p.dist(c)<gg)break;L=this.findface(p),Q.push(this.facetocubie[L],this.facetoord[L]),f=p}if(Q.length>2&&this.options.orientCenters&&(this.cubies[Q[0]].length===1||this.duplicatedCubies[Q[0]]>1)&&this.facecentermass[l].dist(this.basefaces[this.getfaceindex(l)].centermass())<gg){let p=this.faces[this.cubies[Q[0]][0]];for(let k=0;k<Q.length;k+=2){let S=this.faces[this.cubies[Q[k]][0]],G=-1;for(let K=0;K<p.length;K++)if(S.get(K).dist(p.get(0))<gg){G=K;break}if(G<0)throw new Error("Couldn't find rotation of center faces; ignoring for now.");Q[k+1]=G,p=p.rotate(this.moverotations[B][0])}}if(Q.length===2&&this.options.orientCenters)for(let p=1;p<this.movesetorders[B];p++)R===0?Q.push(Q[0],p):Q.push(Q[0],(this.movesetorders[B]-p)%this.movesetorders[B]);if(Q.length>2&&!n[Q[0]]){if(Q.length!==2*this.movesetorders[B])throw new Error("Bad length in perm gen");for(let p of Q)r[R].push(p)}for(let p=0;p<Q.length;p+=2)n[Q[p]]=!0}for(let l=0;l<r.length;l++)r[l]=r[l].slice();e.push(r)}if(this.cmovesbyslice=e,this.options.moveList){let B=[];for(let I of this.options.moveList)B.push(this.parsemove(I));this.parsedmovelist=B}this.facelisthash.clear(),this.facecentermass=[]}getboundarygeometry(){return{baseplanes:this.baseplanes,facenames:this.facenames,faceplanes:this.faceplanes,vertexnames:this.vertexnames,edgenames:this.edgenames,geonormals:this.geonormals}}getmovesets(g){let e=this.moveplanesets[g].length,B=[];if(this.parsedmovelist!==void 0)for(let I of this.parsedmovelist)I[1]===g&&(I[4]?B.push([I[2],I[3]]):B.push([e-I[3],e-I[2]]),B.push(I[5]));else if(this.options.vertexMoves&&!this.options.allMoves){let I=this.movesetgeos[g];if(I[1]!==I[3])for(let t=0;t<e;t++)I[1]!=="v"?(this.options.outerBlockMoves?B.push([t+1,e]):B.push([t+1]),B.push(1)):(this.options.outerBlockMoves?B.push([0,t]):B.push([t,t]),B.push(1))}else for(let I=0;I<=e;I++)!this.options.allMoves&&I+I===e||(this.options.outerBlockMoves?I+I>e?B.push([I,e]):B.push([0,I]):B.push([I,I]),B.push(1));if(this.fixedCubie>=0){let I=this.keyface3(this.faces[this.cubies[this.fixedCubie][0]])[g],t=[];for(let o=0;o<B.length;o+=2){let i=B[o];if(I>=i[0]&&I<=i[1])if(i[0]===0)i=[i[1]+1,e];else if(e===i[1])i=[0,i[0]-1];else throw Error("fixed cubie option would disconnect move");let r=!1;for(let n=0;n<t.length;n+=2)if(t[n][0]===i[0]&&t[n][1]===i[1]&&t[n+1]===B[o+1]){r=!0;break}r||(t.push(i),t.push(B[o+1]))}B=t}return B}graybyori(g){let e=this.cubies[g].length;return this.duplicatedCubies[g]&&(e=1),e===1&&(this.options.grayCenters||!this.options.includeCenterOrbits)||e===2&&(this.options.grayEdges||!this.options.includeEdgeOrbits)||e>2&&(this.options.grayCorners||!this.options.includeCornerOrbits)}skipbyori(g){let e=this.cubies[g].length;return this.duplicatedCubies[g]&&(e=1),e===1&&!this.options.includeCenterOrbits||e===2&&!this.options.includeEdgeOrbits||e>2&&!this.options.includeCornerOrbits}skipcubie(g){return this.skipbyori(g)}header(g){return g+tR+\`
7
7
  \`+g+\`
8
8
  \`}writegap(){let g=this.getOrbitsDef(!1),e=[],B=[];for(let t=0;t<g.moveops.length;t++){let o=\`M_\${Bi(this.notationMapper,g.movenames[t])}\`,i=!1;o[o.length-1]==="'"&&(o=o.substring(0,o.length-1),i=!0),B.push(o),i?e.push(\`\${o}:=\${g.moveops[t].toPerm().inv().toGap()};\`):e.push(\`\${o}:=\${g.moveops[t].toPerm().toGap()};\`)}e.push("Gen:=["),e.push(B.join(",")),e.push("];");let I=g.solved.identicalPieces();return e.push(\`ip:=[\${I.map(t=>\`[\${t.map(o=>o+1).join(",")}]\`).join(",")}];\`),e.push("# Size(Group(Gen));"),e.push("# Size(Stabilizer(Group(Gen), ip, OnTuplesSets));"),e.push(""),this.header("# ")+e.join(\`
9
9
  \`)}writeksolve(g="PuzzleGeometryPuzzle"){let e=this.getOrbitsDef(!1);return this.header("# ")+e.toKsolve(g,this.notationMapper).join(\`
@@ -4325,4 +4325,4 @@ Alg U BR' U' BR BL' BR BL BR'
4325
4325
  export {
4326
4326
  workerSource
4327
4327
  };
4328
- //# sourceMappingURL=search-worker-inside-generated-string-PTO7TGLZ.js.map
4328
+ //# sourceMappingURL=search-worker-inside-generated-string-B4ROHW5F.js.map