cubing 0.20.1 → 0.21.0-pre11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -9
- package/dist/.DS_Store +0 -0
- package/dist/bin/puzzle-geometry-bin.js +1124 -1128
- package/dist/bin/puzzle-geometry-bin.js.map +3 -3
- package/dist/bundle-global/cubing.bundle-global.js +3978 -3587
- package/dist/esm/.DS_Store +0 -0
- package/dist/esm/{2x2x2.kpuzzle.json_-ZLJSYD5K.js → 2x2x2.kpuzzle.json-JOGUSQ4N.js} +3 -3
- package/dist/esm/{2x2x2.kpuzzle.json_-ZLJSYD5K.js.map → 2x2x2.kpuzzle.json-JOGUSQ4N.js.map} +1 -1
- package/dist/esm/{2x2x2.kpuzzle.svg-BNXPAM3A.js → 2x2x2.kpuzzle.svg-CQF2FTV7.js} +2 -2
- package/dist/esm/{2x2x2.kpuzzle.svg-BNXPAM3A.js.map → 2x2x2.kpuzzle.svg-CQF2FTV7.js.map} +0 -0
- package/dist/esm/3d-BRT2MZMN.js +39 -0
- package/dist/esm/3d-BRT2MZMN.js.map +7 -0
- package/dist/esm/{3x3x3-ll.kpuzzle.svg-EC42JHOH.js → 3x3x3-ll.kpuzzle.svg-53CBPG5O.js} +2 -2
- package/dist/esm/{3x3x3-ll.kpuzzle.svg-EC42JHOH.js.map → 3x3x3-ll.kpuzzle.svg-53CBPG5O.js.map} +0 -0
- package/dist/esm/{3x3x3.kpuzzle.svg-DUKG2WHC.js → 3x3x3.kpuzzle.svg-ERSSH66P.js} +2 -2
- package/dist/esm/{3x3x3.kpuzzle.svg-DUKG2WHC.js.map → 3x3x3.kpuzzle.svg-ERSSH66P.js.map} +0 -0
- package/dist/esm/alg/index.js +2 -2
- package/dist/esm/bluetooth/index.js +13 -11
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/chunk-BGFVB2OS.js +740 -0
- package/dist/esm/chunk-BGFVB2OS.js.map +7 -0
- package/dist/esm/{chunk-YNB7QLBF.js → chunk-BU5PUJK3.js} +9 -10
- package/dist/esm/chunk-BU5PUJK3.js.map +7 -0
- package/dist/esm/chunk-EM5F24AO.js +2511 -0
- package/dist/esm/chunk-EM5F24AO.js.map +7 -0
- package/dist/esm/{chunk-KKSDHNLH.js → chunk-H7EP5SIJ.js} +49 -71
- package/dist/esm/chunk-H7EP5SIJ.js.map +7 -0
- package/dist/esm/{chunk-2GRKPQQL.js → chunk-RE7MIN5R.js} +2 -2
- package/dist/esm/{chunk-2GRKPQQL.js.map → chunk-RE7MIN5R.js.map} +0 -0
- package/dist/esm/{chunk-WJ7AVUI7.js → chunk-WO2AXYFE.js} +12 -1
- package/dist/esm/{chunk-WJ7AVUI7.js.map → chunk-WO2AXYFE.js.map} +0 -0
- package/dist/esm/{chunk-CWVB5RRW.js → chunk-YV3RT5PX.js} +625 -1282
- package/dist/esm/chunk-YV3RT5PX.js.map +7 -0
- package/dist/esm/{clock.kpuzzle.json_-PXORG6YF.js → clock.kpuzzle.json-EKWRMHJM.js} +3 -3
- package/dist/esm/{clock.kpuzzle.json_-PXORG6YF.js.map → clock.kpuzzle.json-EKWRMHJM.js.map} +1 -1
- package/dist/esm/{clock.kpuzzle.svg-E52B5OQV.js → clock.kpuzzle.svg-B7TMN3SY.js} +2 -2
- package/dist/esm/{clock.kpuzzle.svg-E52B5OQV.js.map → clock.kpuzzle.svg-B7TMN3SY.js.map} +0 -0
- package/dist/esm/esm-test-worker.js +2 -2
- package/dist/esm/esm-test-worker.js.map +1 -1
- package/dist/esm/kpuzzle/index.js +5 -3
- package/dist/esm/{node-SIGYKAZG.js → node-BSAQKO3G.js} +2 -2
- package/dist/esm/{node-SIGYKAZG.js.map → node-BSAQKO3G.js.map} +0 -0
- package/dist/esm/{node-BHGOVUN3.js → node-WEHVBEKP.js} +2 -2
- package/dist/esm/{node-BHGOVUN3.js.map → node-WEHVBEKP.js.map} +0 -0
- package/dist/esm/notation/index.js +3 -3
- package/dist/esm/protocol/index.js +3 -3
- package/dist/esm/puzzle-geometry/index.js +1085 -1179
- package/dist/esm/puzzle-geometry/index.js.map +3 -3
- package/dist/esm/puzzles/index.js +10 -4
- package/dist/esm/{pyraminx.kpuzzle.svg-QKUJX37T.js → pyraminx.kpuzzle.svg-QBBMZVDY.js} +2 -2
- package/dist/esm/{pyraminx.kpuzzle.svg-QKUJX37T.js.map → pyraminx.kpuzzle.svg-QBBMZVDY.js.map} +0 -0
- package/dist/esm/scramble/index.js +5 -4
- package/dist/esm/search/index.js +7 -4
- package/dist/esm/{sq1-hyperorbit.kpuzzle.json_-7KW5LSXC.js → sq1-hyperorbit.kpuzzle.json-N3FGCPML.js} +3 -3
- package/dist/esm/{sq1-hyperorbit.kpuzzle.json_-7KW5LSXC.js.map → sq1-hyperorbit.kpuzzle.json-N3FGCPML.js.map} +1 -1
- package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-7Y7N37NN.js → sq1-hyperorbit.kpuzzle.svg-ID57EER7.js} +2 -2
- package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-7Y7N37NN.js.map → sq1-hyperorbit.kpuzzle.svg-ID57EER7.js.map} +0 -0
- package/dist/esm/stream/index.js +3 -3
- package/dist/esm/stream/index.js.map +2 -2
- package/dist/esm/twisty/index.js +4445 -3213
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/worker-inside-generated-string-LA5JHD4B.js +2831 -0
- package/dist/esm/worker-inside-generated-string-LA5JHD4B.js.map +7 -0
- package/dist/types/alg/Alg.d.ts +88 -0
- package/dist/types/alg/Alg.d.ts.map +1 -1
- package/dist/types/alg/Alg.spec.d.ts +2 -0
- package/dist/types/alg/Alg.spec.d.ts.map +1 -0
- package/dist/types/alg/common.d.ts.map +1 -1
- package/dist/types/alg/operation.spec.d.ts +2 -0
- package/dist/types/alg/operation.spec.d.ts.map +1 -0
- package/dist/types/alg/parse.spec.d.ts +2 -0
- package/dist/types/alg/parse.spec.d.ts.map +1 -0
- package/dist/types/alg/test/alg-comparison.d.ts.map +1 -1
- package/dist/types/alg/test/alg.spec.d.ts +2 -0
- package/dist/types/alg/test/alg.spec.d.ts.map +1 -0
- package/dist/types/alg/units/leaves/LineComment.spec.d.ts +2 -0
- package/dist/types/alg/units/leaves/LineComment.spec.d.ts.map +1 -0
- package/dist/types/alg/units/leaves/Move.spec.d.ts +2 -0
- package/dist/types/alg/units/leaves/Move.spec.d.ts.map +1 -0
- package/dist/types/alg/url.spec.d.ts +2 -0
- package/dist/types/alg/url.spec.d.ts.map +1 -0
- package/dist/types/bluetooth/smart-puzzle/bluetooth-puzzle.d.ts +1 -1
- package/dist/types/bluetooth/smart-puzzle/bluetooth-puzzle.d.ts.map +1 -1
- package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts +5 -0
- package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts.map +1 -0
- package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts +3 -0
- package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts.map +1 -0
- package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts +2 -0
- package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts.map +1 -0
- package/dist/types/kpuzzle/canon.spec.d.ts +2 -0
- package/dist/types/kpuzzle/canon.spec.d.ts.map +1 -0
- package/dist/types/kpuzzle/index.d.ts +1 -0
- package/dist/types/kpuzzle/index.d.ts.map +1 -1
- package/dist/types/kpuzzle/kpuzzle.spec.d.ts +2 -0
- package/dist/types/kpuzzle/kpuzzle.spec.d.ts.map +1 -0
- package/dist/types/kpuzzle/prunetable.spec.d.ts +2 -0
- package/dist/types/kpuzzle/prunetable.spec.d.ts.map +1 -0
- package/dist/types/kpuzzle/svg.d.ts.map +1 -1
- package/dist/types/kpuzzle/transformations.spec.d.ts +2 -0
- package/dist/types/kpuzzle/transformations.spec.d.ts.map +1 -0
- package/dist/types/protocol/binary/binary3x3x3.spec.d.ts +2 -0
- package/dist/types/protocol/binary/binary3x3x3.spec.d.ts.map +1 -0
- package/dist/types/protocol/binary/hex.spec.d.ts +2 -0
- package/dist/types/protocol/binary/hex.spec.d.ts.map +1 -0
- package/dist/types/protocol/binary/orbit-indexing.spec.d.ts +2 -0
- package/dist/types/protocol/binary/orbit-indexing.spec.d.ts.map +1 -0
- package/dist/types/puzzle-geometry/Options.d.ts +45 -1
- package/dist/types/puzzle-geometry/Options.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts +2 -0
- package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts.map +1 -0
- package/dist/types/puzzle-geometry/PermOriSet.d.ts +39 -39
- package/dist/types/puzzle-geometry/PermOriSet.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +118 -110
- package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/Quat.d.ts +0 -11
- package/dist/types/puzzle-geometry/Quat.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/Quat.spec.d.ts +2 -0
- package/dist/types/puzzle-geometry/Quat.spec.d.ts.map +1 -0
- package/dist/types/puzzle-geometry/SchreierSims.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/index.d.ts +2 -4
- package/dist/types/puzzle-geometry/index.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/interfaces.d.ts +1 -21
- package/dist/types/puzzle-geometry/interfaces.d.ts.map +1 -1
- package/dist/types/puzzle-geometry/orientcenters.spec.d.ts +2 -0
- package/dist/types/puzzle-geometry/orientcenters.spec.d.ts.map +1 -0
- package/dist/types/puzzles/async/async-pg3d.d.ts.map +1 -1
- package/dist/types/puzzles/customPGPuzzleLoader.d.ts +12 -0
- package/dist/types/puzzles/customPGPuzzleLoader.d.ts.map +1 -0
- package/dist/types/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.d.ts → 2x2x2.kpuzzle.json.d.ts} +1 -1
- package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json.d.ts.map +1 -0
- package/dist/types/puzzles/implementations/3x3x3/index.d.ts.map +1 -1
- package/dist/types/puzzles/implementations/clock/{clock.kpuzzle.json_.d.ts → clock.kpuzzle.json.d.ts} +1 -1
- package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json.d.ts.map +1 -0
- package/dist/types/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.d.ts → pyraminx.kpuzzle.json.d.ts} +1 -1
- package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json.d.ts.map +1 -0
- package/dist/types/puzzles/implementations/square1/index.d.ts.map +1 -1
- package/dist/types/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.d.ts → sq1-hyperorbit.kpuzzle.json.d.ts} +1 -1
- package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json.d.ts.map +1 -0
- package/dist/types/puzzles/index.d.ts +4 -2
- package/dist/types/puzzles/index.d.ts.map +1 -1
- package/dist/types/puzzles/stickerings/appearance.d.ts +9 -9
- package/dist/types/puzzles/stickerings/appearance.d.ts.map +1 -1
- package/dist/types/puzzles/stickerings/cube-stickerings.d.ts.map +1 -1
- package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts +3 -0
- package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts.map +1 -0
- package/dist/types/search/index.d.ts +1 -1
- package/dist/types/search/index.d.ts.map +1 -1
- package/dist/types/search/inside/api.d.ts +2 -1
- package/dist/types/search/inside/api.d.ts.map +1 -1
- package/dist/types/search/inside/api.spec.d.ts +2 -0
- package/dist/types/search/inside/api.spec.d.ts.map +1 -0
- package/dist/types/search/inside/solve/parseSGS.d.ts.map +1 -1
- package/dist/types/search/inside/solve/puzzles/3x3x3/filter.d.ts.map +1 -1
- package/dist/types/search/inside/solve/puzzles/3x3x3/index.d.ts.map +1 -1
- package/dist/types/search/inside/solve/puzzles/megaminx.sgs.json.d.ts.map +1 -1
- package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts +2 -0
- package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts.map +1 -0
- package/dist/types/search/inside/solve/puzzles/skewb.sgs.json.d.ts.map +1 -1
- package/dist/types/search/inside/solve/tremble.d.ts.map +1 -1
- package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts +4 -31
- package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts.map +1 -1
- package/dist/types/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.d.ts.map +1 -1
- package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts +3 -0
- package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts.map +1 -0
- package/dist/types/search/inside/solve/vendor/random-uint-below/get-random-values.d.ts.map +1 -1
- package/dist/types/search/inside/solve/vendor/random-uint-below/random-int.d.ts.map +1 -1
- package/dist/types/search/inside/solve/vendor/sq12phase/scramble_sq1.d.ts.map +1 -1
- package/dist/types/search/instantiator.d.ts.map +1 -1
- package/dist/types/search/outside.d.ts +4 -2
- package/dist/types/search/outside.d.ts.map +1 -1
- package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
- package/dist/types/search/worker-inside-generated-string.d.ts.map +1 -1
- package/dist/types/stream/twizzle/TwizzleStream.d.ts +9 -8
- package/dist/types/stream/twizzle/TwizzleStream.d.ts.map +1 -1
- package/dist/types/stream/websocket-proxy.d.ts +1 -1
- package/dist/types/stream/websocket-proxy.d.ts.map +1 -1
- package/dist/types/twisty/controllers/TwistyAnimationController.d.ts +34 -0
- package/dist/types/twisty/controllers/TwistyAnimationController.d.ts.map +1 -0
- package/dist/types/twisty/controllers/TwistyPlayerController.d.ts +16 -0
- package/dist/types/twisty/controllers/TwistyPlayerController.d.ts.map +1 -0
- package/dist/types/twisty/heavy-code-imports/3d.d.ts +3 -0
- package/dist/types/twisty/heavy-code-imports/3d.d.ts.map +1 -0
- package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts +12 -0
- package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts.map +1 -0
- package/dist/types/twisty/index.d.ts +20 -15
- package/dist/types/twisty/index.d.ts.map +1 -1
- package/dist/types/twisty/model/PromiseFreshener.d.ts +14 -0
- package/dist/types/twisty/model/PromiseFreshener.d.ts.map +1 -0
- package/dist/types/twisty/model/TwistyPlayerModel.d.ts +84 -0
- package/dist/types/twisty/model/TwistyPlayerModel.d.ts.map +1 -0
- package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts +11 -0
- package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts.map +1 -0
- package/dist/types/twisty/model/helpers.d.ts +5 -0
- package/dist/types/twisty/model/helpers.d.ts.map +1 -0
- package/dist/types/twisty/model/props/TwistyProp.d.ts +60 -0
- package/dist/types/twisty/model/props/TwistyProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/TwistyProp.spec.d.ts +5 -0
- package/dist/types/twisty/model/props/TwistyProp.spec.d.ts.map +1 -0
- package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts +28 -0
- package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts.map +1 -0
- package/dist/types/twisty/model/props/general/URLProp.d.ts +6 -0
- package/dist/types/twisty/model/props/general/URLProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts +7 -0
- package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts +10 -0
- package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts +6 -0
- package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts +27 -0
- package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts +14 -0
- package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts +15 -0
- package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts +12 -0
- package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts +17 -0
- package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts +15 -0
- package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts +17 -0
- package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts +12 -0
- package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts +15 -0
- package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts +12 -0
- package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts +13 -0
- package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts +6 -0
- package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts +11 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts +6 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts +11 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +6 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts +13 -0
- package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts +25 -0
- package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts +23 -0
- package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts +15 -0
- package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts +6 -0
- package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts +16 -0
- package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts +7 -0
- package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts +7 -0
- package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts +22 -0
- package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts +7 -0
- package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts +6 -0
- package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts +16 -0
- package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts +15 -0
- package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts +11 -0
- package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts +7 -0
- package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts +7 -0
- package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts.map +1 -0
- package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts +13 -0
- package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/RenderScheduler.d.ts +3 -0
- package/dist/types/twisty/old/animation/RenderScheduler.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/Timeline.d.ts +0 -0
- package/dist/types/twisty/old/animation/Timeline.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/cursor/AlgCursor.d.ts +4 -4
- package/dist/types/twisty/old/animation/cursor/AlgCursor.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/cursor/CursorTypes.d.ts +4 -4
- package/dist/types/twisty/old/animation/cursor/CursorTypes.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/easing.d.ts +0 -0
- package/dist/types/twisty/old/animation/easing.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/indexer/AlgDuration.d.ts +1 -1
- package/dist/types/twisty/old/animation/indexer/AlgDuration.d.ts.map +1 -0
- package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts +36 -0
- package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.d.ts +3 -3
- package/dist/types/twisty/old/animation/indexer/SimpleAlgIndexer.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts +6 -5
- package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +1 -0
- package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts +22 -0
- package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts.map +1 -0
- package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts +26 -0
- package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/indexer/tree/AlgWalker.d.ts +2 -2
- package/dist/types/twisty/old/animation/indexer/tree/AlgWalker.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.d.ts +3 -3
- package/dist/types/twisty/old/animation/indexer/tree/TreeAlgIndexer.d.ts.map +1 -0
- package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts +3 -0
- package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts.map +1 -0
- package/dist/types/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.d.ts +1 -1
- package/dist/types/twisty/old/animation/stream/timeline-move-calculation-draft.d.ts.map +1 -0
- package/dist/types/twisty/{dom/TwistyAlgViewer.css_.d.ts → old/dom/TwistyAlgViewerV1.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/TwistyAlgViewerV1.css.d.ts.map +1 -0
- package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts +52 -0
- package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts.map +1 -0
- package/dist/types/twisty/{dom/TwistyPlayer.css_.d.ts → old/dom/TwistyPlayer.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/TwistyPlayer.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/TwistyPlayer.d.ts +8 -8
- package/dist/types/twisty/old/dom/TwistyPlayer.d.ts.map +1 -0
- package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts +5 -0
- package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/TwistyPlayerConfig.d.ts +9 -5
- package/dist/types/twisty/old/dom/TwistyPlayerConfig.d.ts.map +1 -0
- package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts +2 -0
- package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts.map +1 -0
- package/dist/types/twisty/{dom/controls/TwistyScrubber.css_.d.ts → old/dom/controls/TwistyScrubber.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/controls/TwistyScrubber.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/controls/TwistyScrubber.d.ts +1 -1
- package/dist/types/twisty/old/dom/controls/TwistyScrubber.d.ts.map +1 -0
- package/dist/types/twisty/{dom/controls/buttons.css_.d.ts → old/dom/controls/buttons.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/controls/buttons.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/controls/buttons.d.ts +1 -1
- package/dist/types/twisty/old/dom/controls/buttons.d.ts.map +1 -0
- package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts +5 -0
- package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/element/ClassListManager.d.ts +0 -0
- package/dist/types/twisty/old/dom/element/ClassListManager.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/element/ElementConfig.d.ts +1 -1
- package/dist/types/twisty/old/dom/element/ElementConfig.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/element/ManagedCustomElement.d.ts +0 -0
- package/dist/types/twisty/old/dom/element/ManagedCustomElement.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/element/node-custom-element-shims.d.ts +0 -0
- package/dist/types/twisty/old/dom/element/node-custom-element-shims.d.ts.map +1 -0
- package/dist/types/twisty/{dom/stream/TwistyStreamSource.css_.d.ts → old/dom/stream/TwistyStreamSource.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/stream/TwistyStreamSource.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/stream/TwistyStreamSource.d.ts +0 -0
- package/dist/types/twisty/old/dom/stream/TwistyStreamSource.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/viewers/Twisty2DSVG.d.ts +2 -2
- package/dist/types/twisty/old/dom/viewers/Twisty2DSVG.d.ts.map +1 -0
- package/dist/types/twisty/{dom/viewers/Twisty2DSVGView.css_.d.ts → old/dom/viewers/Twisty2DSVGView.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/viewers/Twisty2DSVGView.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom/viewers/Twisty3DCanvas.css_.d.ts → old/dom/viewers/Twisty3DCanvas.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.d.ts +1 -2
- package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.d.ts +0 -0
- package/dist/types/twisty/old/dom/viewers/TwistyOrbitControls.d.ts.map +1 -0
- package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts +4 -0
- package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts.map +1 -0
- package/dist/types/twisty/{dom/viewers/TwistyViewerWrapper.css_.d.ts → old/dom/viewers/TwistyViewerWrapper.css.d.ts} +1 -1
- package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.d.ts +0 -0
- package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.d.ts.map +1 -0
- package/dist/types/twisty/old/dom/viewers/canvas.d.ts +3 -0
- package/dist/types/twisty/old/dom/viewers/canvas.d.ts.map +1 -0
- package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts +29 -0
- package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts.map +1 -0
- package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts +16 -0
- package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts.map +1 -0
- package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts +20 -0
- package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/RendererPool.d.ts +4 -0
- package/dist/types/twisty/views/3D/RendererPool.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/TAU.d.ts +0 -0
- package/dist/types/twisty/views/3D/TAU.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts +17 -0
- package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/Twisty3DRenderTarget.d.ts +0 -0
- package/dist/types/twisty/views/3D/Twisty3DRenderTarget.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/Twisty3DScene.d.ts +0 -0
- package/dist/types/twisty/views/3D/Twisty3DScene.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts +28 -0
- package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +32 -0
- package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts +41 -0
- package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts +5 -0
- package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/puzzles/Cube3D.d.ts +11 -7
- package/dist/types/twisty/views/3D/puzzles/Cube3D.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.d.ts +2 -2
- package/dist/types/twisty/views/3D/puzzles/KPuzzleWrapper.d.ts.map +1 -0
- package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts +57 -0
- package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/puzzles/Twisty3DPuzzle.d.ts +1 -1
- package/dist/types/twisty/views/3D/puzzles/Twisty3DPuzzle.d.ts.map +1 -0
- package/dist/types/twisty/{3D → views/3D}/puzzles/TwistyTestBox.d.ts +2 -2
- package/dist/types/twisty/views/3D/puzzles/TwistyTestBox.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts +18 -0
- package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts +3 -0
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts +40 -0
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts +5 -0
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts +61 -0
- package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts +3 -0
- package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts.map +1 -0
- package/dist/types/twisty/{dom → views}/TwistyAlgViewer.d.ts +6 -6
- package/dist/types/twisty/views/TwistyAlgViewer.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyPlayer.d.ts +97 -0
- package/dist/types/twisty/views/TwistyPlayer.d.ts.map +1 -0
- package/dist/types/twisty/views/TwistyPlayerSettable.d.ts +71 -0
- package/dist/types/twisty/views/TwistyPlayerSettable.d.ts.map +1 -0
- package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts +33 -0
- package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts.map +1 -0
- package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts +14 -0
- package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts.map +1 -0
- package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts +15 -0
- package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts.map +1 -0
- package/dist/types/twisty/views/document.d.ts +2 -0
- package/dist/types/twisty/views/document.d.ts.map +1 -0
- package/dist/types/twisty/views/screenshot.d.ts +12 -0
- package/dist/types/twisty/views/screenshot.d.ts.map +1 -0
- package/dist/types/vendor/p-lazy/p-lazy.d.ts +10 -0
- package/dist/types/vendor/p-lazy/p-lazy.d.ts.map +1 -0
- package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts +33 -0
- package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts.map +1 -0
- package/docs/.DS_Store +0 -0
- package/docs/cubing/.DS_Store +0 -0
- package/docs/cubing/alg/index.html +37 -23
- package/docs/cubing/index.html +56 -252
- package/docs/cubing/scramble/index.html +122 -0
- package/docs/cubing/twisty/index.html +329 -0
- package/docs/main.css +15 -3
- package/package.json +83 -57
- package/src/cubing/.DS_Store +0 -0
- package/src/cubing/alg/.DS_Store +0 -0
- package/src/cubing/alg/Alg.ts +89 -0
- package/src/cubing/alg/common.ts +4 -2
- package/src/cubing/alg/iteration.ts +1 -1
- package/src/cubing/alg/parse.ts +2 -0
- package/src/cubing/alg/test/alg-comparison.ts +1 -0
- package/src/cubing/alg/units/.DS_Store +0 -0
- package/src/cubing/alg/units/Unit.ts +0 -3
- package/src/cubing/alg/units/containers/Commutator.ts +1 -1
- package/src/cubing/alg/units/leaves/Move.ts +4 -4
- package/src/cubing/bluetooth/.DS_Store +0 -0
- package/src/cubing/bluetooth/connect/index.ts +1 -1
- package/src/cubing/bluetooth/smart-puzzle/Heykube.ts +1 -1
- package/src/cubing/bluetooth/smart-puzzle/bluetooth-puzzle.ts +1 -1
- package/src/cubing/bluetooth/smart-puzzle/gan.ts +5 -5
- package/src/cubing/bluetooth/smart-puzzle/giiker.ts +2 -2
- package/src/cubing/bluetooth/smart-puzzle/gocube.ts +5 -5
- package/src/cubing/bluetooth/smart-robot/GanRobot.ts +5 -5
- package/src/cubing/bluetooth/smart-timer/GanTimer.ts +2 -2
- package/src/cubing/{solve → kpuzzle}/.DS_Store +0 -0
- package/src/cubing/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.ts +40 -0
- package/src/cubing/{puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.ts → kpuzzle/3x3x3/3x3x3.kpuzzle.json.ts} +11 -6
- package/src/cubing/kpuzzle/canon.spec.ts +6 -11
- package/src/cubing/kpuzzle/canonicalize.ts +1 -1
- package/src/cubing/kpuzzle/definition_types.ts +0 -3
- package/src/cubing/kpuzzle/index.ts +1 -0
- package/src/cubing/kpuzzle/prunetable.spec.ts +2 -4
- package/src/cubing/kpuzzle/puzzle-orientation.ts +1 -1
- package/src/cubing/kpuzzle/svg.ts +4 -9
- package/src/cubing/kpuzzle/transformations.ts +1 -1
- package/src/cubing/protocol/binary/binary3x3x3.spec.ts +5 -2
- package/src/cubing/protocol/binary/hex.ts +4 -4
- package/src/cubing/protocol/binary/orbit-indexing.ts +2 -2
- package/src/cubing/protocol/binary/puzzle-orientation.ts +2 -2
- package/src/cubing/puzzle-geometry/Options.ts +151 -22
- package/src/cubing/puzzle-geometry/PGPuzzles.spec.ts +24 -28
- package/src/cubing/puzzle-geometry/PermOriSet.ts +99 -98
- package/src/cubing/puzzle-geometry/PlatonicGenerator.ts +1 -1
- package/src/cubing/puzzle-geometry/PuzzleGeometry.ts +836 -867
- package/src/cubing/puzzle-geometry/Quat.ts +1 -68
- package/src/cubing/puzzle-geometry/SchreierSims.ts +2 -13
- package/src/cubing/puzzle-geometry/index.ts +2 -11
- package/src/cubing/puzzle-geometry/interfaces.ts +1 -27
- package/src/cubing/puzzle-geometry/orientcenters.spec.ts +24 -30
- package/src/cubing/puzzles/.DS_Store +0 -0
- package/src/cubing/puzzles/async/async-pg3d.ts +5 -8
- package/src/cubing/puzzles/customPGPuzzleLoader.ts +60 -0
- package/src/cubing/puzzles/implementations/.DS_Store +0 -0
- package/src/cubing/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.ts → 2x2x2.kpuzzle.json.ts} +0 -0
- package/src/cubing/puzzles/implementations/2x2x2/index.ts +1 -1
- package/src/cubing/puzzles/implementations/3x3x3/index.ts +2 -3
- package/src/cubing/puzzles/implementations/clock/{clock.kpuzzle.json_.ts → clock.kpuzzle.json.ts} +0 -0
- package/src/cubing/puzzles/implementations/clock/index.ts +1 -1
- package/src/cubing/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.ts → pyraminx.kpuzzle.json.ts} +0 -0
- package/src/cubing/puzzles/implementations/square1/index.ts +1 -2
- package/src/cubing/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.ts → sq1-hyperorbit.kpuzzle.json.ts} +0 -0
- package/src/cubing/puzzles/index.ts +5 -2
- package/src/cubing/puzzles/stickerings/appearance.ts +10 -9
- package/src/cubing/puzzles/stickerings/cube-stickerings.ts +8 -0
- package/src/cubing/puzzles/stickerings/global-custom-stickering-hack.ts +61 -0
- package/src/cubing/search/.DS_Store +0 -0
- package/src/cubing/search/.gitignore +1 -2
- package/src/cubing/search/esm-test-worker.js +1 -1
- package/src/cubing/search/index.ts +1 -0
- package/src/cubing/search/inside/api.ts +5 -1
- package/src/cubing/search/inside/solve/parseSGS.ts +7 -11
- package/src/cubing/search/inside/solve/puzzles/2x2x2.ts +3 -3
- package/src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts +0 -6
- package/src/cubing/search/inside/solve/puzzles/3x3x3/index.ts +0 -2
- package/src/cubing/search/inside/solve/puzzles/FTO.sgs +264 -0
- package/src/cubing/search/inside/solve/puzzles/megaminx.sgs.json.ts +4 -6
- package/src/cubing/search/inside/solve/puzzles/skewb.sgs.json.ts +4 -6
- package/src/cubing/search/inside/solve/tremble.ts +6 -9
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.ts +20 -822
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.ts +177 -252
- package/src/cubing/search/inside/solve/vendor/min2phase/gwt.js +62 -222
- package/src/cubing/search/inside/solve/vendor/random-uint-below/get-random-values.ts +4 -5
- package/src/cubing/search/inside/solve/vendor/random-uint-below/random-int.ts +9 -11
- package/src/cubing/search/inside/solve/vendor/sq12phase/scramble_sq1.js +13 -582
- package/src/cubing/search/instantiator.ts +11 -7
- package/src/cubing/search/outside.ts +8 -2
- package/src/cubing/search/worker-inside-generated-string.js +1 -1
- package/src/cubing/stream/.DS_Store +0 -0
- package/src/cubing/stream/process/ReorientedStream.ts +1 -1
- package/src/cubing/stream/twizzle/TwizzleStream.ts +11 -8
- package/src/cubing/stream/websocket-proxy.ts +1 -3
- package/src/cubing/twisty/.DS_Store +0 -0
- package/src/cubing/twisty/controllers/TwistyAnimationController.ts +248 -0
- package/src/cubing/twisty/controllers/TwistyPlayerController.ts +38 -0
- package/src/cubing/twisty/heavy-code-imports/3d.ts +18 -0
- package/src/cubing/twisty/heavy-code-imports/dynamic-entries/3d.ts +41 -0
- package/src/cubing/twisty/index.ts +24 -17
- package/src/cubing/{protocol → twisty/model}/.DS_Store +0 -0
- package/src/cubing/twisty/model/PromiseFreshener.ts +49 -0
- package/src/cubing/twisty/model/TwistyPlayerModel.ts +222 -0
- package/src/cubing/twisty/model/UserVisibleErrorTracker.ts +22 -0
- package/src/cubing/twisty/model/helpers.ts +47 -0
- package/src/cubing/{search/vendor → twisty/model/props}/.DS_Store +0 -0
- package/src/cubing/twisty/model/props/TwistyProp.spec.ts +38 -0
- package/src/cubing/twisty/model/props/TwistyProp.ts +366 -0
- package/src/cubing/twisty/model/props/TwistyPropDebugger.ts +370 -0
- package/src/cubing/twisty/model/props/general/URLProp.ts +14 -0
- package/src/cubing/twisty/{3D → model/props/puzzle}/.DS_Store +0 -0
- package/src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts +10 -0
- package/src/cubing/twisty/model/props/puzzle/display/SpriteProp.ts +43 -0
- package/src/cubing/twisty/model/props/puzzle/display/StickeringProp.ts +8 -0
- package/src/cubing/twisty/model/props/puzzle/state/AlgProp.ts +91 -0
- package/src/cubing/twisty/model/props/puzzle/state/AlgTransformationProp.ts +28 -0
- package/src/cubing/twisty/model/props/puzzle/state/AnchoredStartProp.ts +44 -0
- package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesProp.ts +91 -0
- package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesSimplified.ts +48 -0
- package/src/cubing/twisty/model/props/puzzle/state/CurrentTransformationProp.ts +46 -0
- package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorProp.ts +46 -0
- package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.ts +15 -0
- package/src/cubing/twisty/model/props/puzzle/state/IndexerProp.ts +24 -0
- package/src/cubing/twisty/model/props/puzzle/state/LegacyPositionProp.ts +22 -0
- package/src/cubing/twisty/model/props/puzzle/state/PuzzleAlgProp.ts +28 -0
- package/src/cubing/twisty/model/props/puzzle/state/SetupAnchorProp.ts +8 -0
- package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDefProp.ts +14 -0
- package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.ts +14 -0
- package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDProp.ts +12 -0
- package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.ts +17 -0
- package/src/cubing/twisty/model/props/puzzle/structure/PuzzleLoaderProp.ts +38 -0
- package/src/cubing/twisty/model/props/timeline/CoarseTimelineInfoProp.ts +45 -0
- package/src/cubing/twisty/model/props/timeline/DetailedTimelineInfoProp.ts +76 -0
- package/src/cubing/twisty/model/props/timeline/PlayingInfoProp.ts +51 -0
- package/src/cubing/twisty/model/props/timeline/TempoScaleProp.ts +13 -0
- package/src/cubing/twisty/model/props/timeline/TimestampRequestProp.ts +38 -0
- package/src/cubing/twisty/model/props/viewer/BackViewProp.ts +10 -0
- package/src/cubing/twisty/model/props/viewer/BackgroundProp.ts +10 -0
- package/src/cubing/twisty/model/props/viewer/ButtonAppearanceProp.ts +86 -0
- package/src/cubing/twisty/model/props/viewer/ControlPanelProp.ts +10 -0
- package/src/cubing/twisty/model/props/viewer/LatitudeLimit.ts +11 -0
- package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesProp.ts +56 -0
- package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesRequestProp.ts +69 -0
- package/src/cubing/twisty/model/props/viewer/TimeRangeProp.ts +15 -0
- package/src/cubing/twisty/model/props/viewer/ViewerLinkProp.ts +10 -0
- package/src/cubing/twisty/model/props/viewer/VisualizationProp.ts +10 -0
- package/src/cubing/twisty/model/props/viewer/VisualizationStrategyProp.ts +45 -0
- package/src/cubing/twisty/{animation → old}/.DS_Store +0 -0
- package/src/cubing/{search/inside → twisty/old/animation}/.DS_Store +0 -0
- package/src/cubing/twisty/{animation → old/animation}/RenderScheduler.ts +5 -0
- package/src/cubing/twisty/{animation → old/animation}/Timeline.ts +0 -0
- package/src/cubing/twisty/{animation → old/animation}/cursor/AlgCursor.ts +15 -8
- package/src/cubing/twisty/{animation → old/animation}/cursor/CursorTypes.ts +4 -4
- package/src/cubing/twisty/{animation → old/animation}/easing.ts +0 -0
- package/src/cubing/twisty/old/animation/indexer/.DS_Store +0 -0
- package/src/cubing/twisty/{animation → old/animation}/indexer/AlgDuration.ts +1 -1
- package/src/cubing/twisty/old/animation/indexer/AlgIndexer.ts +86 -0
- package/src/cubing/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.ts +9 -6
- package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +181 -0
- package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.ts +243 -0
- package/src/cubing/twisty/{animation → old/animation}/indexer/simultaneous-moves/simul-moves.ts +46 -34
- package/src/cubing/twisty/{animation → old/animation}/indexer/tree/AlgWalker.ts +6 -3
- package/src/cubing/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.ts +8 -5
- package/src/cubing/twisty/{animation → old/animation}/indexer/tree/chunkAlgs.ts +2 -2
- package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.spec.ts.TODO +0 -0
- package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.ts +2 -2
- package/src/cubing/{search/vendor/comlink-everywhere → twisty/old/dom}/.DS_Store +0 -0
- package/src/cubing/twisty/{dom/TwistyAlgViewer.css_.ts → old/dom/TwistyAlgViewerV1.css.ts} +0 -0
- package/src/cubing/twisty/{dom/TwistyAlgViewer.ts → old/dom/TwistyAlgViewerV1.ts} +43 -36
- package/src/cubing/twisty/{dom/TwistyPlayer.css_.ts → old/dom/TwistyPlayer.css.ts} +28 -1
- package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.spec.ts +5 -6
- package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.ts +36 -43
- package/src/cubing/twisty/{dom → old/dom}/TwistyPlayerConfig.ts +26 -10
- package/src/cubing/twisty/{dom/controls/TwistyControlElement.ts.ts → old/dom/controls/TwistyControlElement.ts} +0 -0
- package/src/cubing/twisty/{dom/controls/TwistyScrubber.css_.ts → old/dom/controls/TwistyScrubber.css.ts} +0 -0
- package/src/cubing/twisty/{dom → old/dom}/controls/TwistyScrubber.ts +3 -3
- package/src/cubing/twisty/{dom/controls/buttons.css_.ts → old/dom/controls/buttons.css.ts} +14 -1
- package/src/cubing/twisty/{dom → old/dom}/controls/buttons.spec.ts +1 -1
- package/src/cubing/twisty/{dom → old/dom}/controls/buttons.ts +15 -15
- package/src/cubing/twisty/{dom → old/dom}/element/ClassListManager.ts +0 -0
- package/src/cubing/twisty/{dom → old/dom}/element/ElementConfig.ts +1 -1
- package/src/cubing/twisty/{dom → old/dom}/element/ManagedCustomElement.ts +0 -0
- package/src/cubing/twisty/{dom → old/dom}/element/node-custom-element-shims.ts +0 -0
- package/src/cubing/twisty/{dom/stream/TwistyStreamSource.css_.ts → old/dom/stream/TwistyStreamSource.css.ts} +0 -0
- package/src/cubing/twisty/{dom → old/dom}/stream/TwistyStreamSource.ts +8 -8
- package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty2DSVG.ts +7 -9
- package/src/cubing/twisty/{dom/viewers/Twisty2DSVGView.css_.ts → old/dom/viewers/Twisty2DSVGView.css.ts} +0 -0
- package/src/cubing/twisty/{dom/viewers/Twisty3DCanvas.css_.ts → old/dom/viewers/Twisty3DCanvas.css.ts} +0 -0
- package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.ts +5 -12
- package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.ts +57 -20
- package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerElement.ts +1 -1
- package/src/cubing/twisty/{dom/viewers/TwistyViewerWrapper.css_.ts → old/dom/viewers/TwistyViewerWrapper.css.ts} +0 -0
- package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.ts +1 -1
- package/src/cubing/twisty/old/dom/viewers/canvas.ts +9 -0
- package/src/cubing/twisty/{dom/twisty-player-model → views}/.DS_Store +0 -0
- package/src/cubing/twisty/views/2D/Twisty2DPuzzle.ts +150 -0
- package/src/cubing/twisty/views/2D/Twisty2DPuzzleWrapper.ts +52 -0
- package/src/cubing/twisty/views/2D/Twisty2DSceneWrapper.ts +77 -0
- package/src/cubing/twisty/views/3D/RendererPool.ts +53 -0
- package/src/cubing/twisty/{3D → views/3D}/TAU.ts +0 -0
- package/src/cubing/twisty/views/3D/Twisty3DPuzzleWrapper.ts +168 -0
- package/src/cubing/twisty/{3D → views/3D}/Twisty3DRenderTarget.ts +0 -0
- package/src/cubing/twisty/{3D → views/3D}/Twisty3DScene.ts +0 -0
- package/src/cubing/twisty/views/3D/Twisty3DSceneWrapper.ts +144 -0
- package/src/cubing/twisty/views/3D/Twisty3DVantage.ts +244 -0
- package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.spec.ts +209 -0
- package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.ts +270 -0
- package/src/cubing/twisty/{3D → views/3D}/puzzles/Cube3D.ts +36 -15
- package/src/cubing/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.ts +4 -5
- package/src/cubing/twisty/views/3D/puzzles/PG3D.ts +988 -0
- package/src/cubing/twisty/views/3D/puzzles/Twisty3DPuzzle.ts +6 -0
- package/src/cubing/twisty/{3D → views/3D}/puzzles/TwistyTestBox.ts +2 -2
- package/src/cubing/twisty/views/TwistyAlgEditor/LeafTokens.ts +116 -0
- package/src/cubing/twisty/{dom/TwistyAlgEditor.css_.ts → views/TwistyAlgEditor/TwistyAlgEditor.css.ts} +3 -1
- package/src/cubing/twisty/{dom → views/TwistyAlgEditor}/TwistyAlgEditor.spec.ts +7 -6
- package/src/cubing/twisty/views/TwistyAlgEditor/TwistyAlgEditor.ts +360 -0
- package/src/cubing/twisty/views/TwistyAlgEditor/model.ts +179 -0
- package/src/cubing/twisty/views/TwistyAlgViewer.css.ts +25 -0
- package/src/cubing/twisty/views/TwistyAlgViewer.ts +502 -0
- package/src/cubing/twisty/views/TwistyPlayer.ts +327 -0
- package/src/cubing/twisty/views/TwistyPlayerSettable.ts +111 -0
- package/src/cubing/twisty/views/control-panel/TwistyButtonsV2.ts +159 -0
- package/src/cubing/twisty/views/control-panel/TwistyScrubberV2.ts +145 -0
- package/src/cubing/twisty/views/control-panel/webkit-fullscreen.ts +44 -0
- package/src/cubing/twisty/views/document.ts +4 -0
- package/src/cubing/twisty/views/screenshot.ts +90 -0
- package/src/cubing/{twisty/animation/indexer → vendor}/.DS_Store +0 -0
- package/src/cubing/vendor/p-lazy/license +9 -0
- package/src/cubing/vendor/p-lazy/p-lazy.ts +52 -0
- package/src/cubing/vendor/p-lazy/readme.md +54 -0
- package/src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts +179 -0
- package/dist/esm/chunk-CWVB5RRW.js.map +0 -7
- package/dist/esm/chunk-KKSDHNLH.js.map +0 -7
- package/dist/esm/chunk-YNB7QLBF.js.map +0 -7
- package/dist/esm/worker-inside-generated-string-LT4NV55Q.js +0 -2826
- package/dist/esm/worker-inside-generated-string-LT4NV55Q.js.map +0 -7
- package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json_.d.ts.map +0 -1
- package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts +0 -3
- package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts.map +0 -1
- package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json_.d.ts.map +0 -1
- package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json_.d.ts.map +0 -1
- package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json_.d.ts.map +0 -1
- package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts +0 -3
- package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts.map +0 -1
- package/dist/types/twisty/3D/TAU.d.ts.map +0 -1
- package/dist/types/twisty/3D/Twisty3DRenderTarget.d.ts.map +0 -1
- package/dist/types/twisty/3D/Twisty3DScene.d.ts.map +0 -1
- package/dist/types/twisty/3D/puzzles/Cube3D.d.ts.map +0 -1
- package/dist/types/twisty/3D/puzzles/KPuzzleWrapper.d.ts.map +0 -1
- package/dist/types/twisty/3D/puzzles/PG3D.d.ts +0 -51
- package/dist/types/twisty/3D/puzzles/PG3D.d.ts.map +0 -1
- package/dist/types/twisty/3D/puzzles/Twisty3DPuzzle.d.ts.map +0 -1
- package/dist/types/twisty/3D/puzzles/TwistyTestBox.d.ts.map +0 -1
- package/dist/types/twisty/animation/RenderScheduler.d.ts.map +0 -1
- package/dist/types/twisty/animation/Timeline.d.ts.map +0 -1
- package/dist/types/twisty/animation/cursor/AlgCursor.d.ts.map +0 -1
- package/dist/types/twisty/animation/cursor/CursorTypes.d.ts.map +0 -1
- package/dist/types/twisty/animation/easing.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/AlgDuration.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts +0 -15
- package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/SimpleAlgIndexer.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts +0 -25
- package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/tree/AlgWalker.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/tree/TreeAlgIndexer.d.ts.map +0 -1
- package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts +0 -3
- package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts.map +0 -1
- package/dist/types/twisty/animation/stream/timeline-move-calculation-draft.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts +0 -3
- package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyAlgEditor.d.ts +0 -27
- package/dist/types/twisty/dom/TwistyAlgEditor.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts +0 -26
- package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyAlgViewer.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyAlgViewer.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyPlayer.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyPlayer.d.ts.map +0 -1
- package/dist/types/twisty/dom/TwistyPlayerConfig.d.ts.map +0 -1
- package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts +0 -2
- package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts.map +0 -1
- package/dist/types/twisty/dom/controls/TwistyScrubber.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/controls/TwistyScrubber.d.ts.map +0 -1
- package/dist/types/twisty/dom/controls/buttons.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/controls/buttons.d.ts.map +0 -1
- package/dist/types/twisty/dom/element/ClassListManager.d.ts.map +0 -1
- package/dist/types/twisty/dom/element/ElementConfig.d.ts.map +0 -1
- package/dist/types/twisty/dom/element/ManagedCustomElement.d.ts.map +0 -1
- package/dist/types/twisty/dom/element/node-custom-element-shims.d.ts.map +0 -1
- package/dist/types/twisty/dom/stream/TwistyStreamSource.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/stream/TwistyStreamSource.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/Twisty2DSVG.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/Twisty2DSVGView.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/Twisty3DCanvas.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/Twisty3DCanvas.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/TwistyOrbitControls.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts +0 -4
- package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.css_.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.d.ts.map +0 -1
- package/dist/types/twisty/dom/viewers/canvas.d.ts +0 -2
- package/dist/types/twisty/dom/viewers/canvas.d.ts.map +0 -1
- package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts +0 -2
- package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts.map +0 -1
- package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -21
- package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts.map +0 -1
- package/src/cubing/puzzle-geometry/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/puzzles/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/puzzles/3x3x3/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/cstimer/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/cstimer/src/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.ts +0 -13
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/sgs/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/sgs/src/.DS_Store +0 -0
- package/src/cubing/search/inside/solve/vendor/sgs/src/test/.DS_Store +0 -0
- package/src/cubing/twisty/3D/puzzles/PG3D.ts +0 -600
- package/src/cubing/twisty/3D/puzzles/Twisty3DPuzzle.ts +0 -9
- package/src/cubing/twisty/3D/puzzles/mkbhd.svg +0 -5
- package/src/cubing/twisty/animation/indexer/AlgIndexer.ts +0 -25
- package/src/cubing/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +0 -168
- package/src/cubing/twisty/dom/.DS_Store +0 -0
- package/src/cubing/twisty/dom/TwistyAlgEditor.ts +0 -373
- package/src/cubing/twisty/dom/TwistyAlgEditorStartCharSearch.ts +0 -138
- package/src/cubing/twisty/dom/viewers/canvas.ts +0 -4
- package/src/cubing/vendor/three/examples/jsm/libs/stats.module.ts +0 -2
- package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -24
- package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.js +0 -178
|
@@ -1 +1 @@
|
|
|
1
|
-
export const workerSource = "var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __markAsModule = (target) => __defProp(target, \"__esModule\", { value: true });\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[Object.keys(fn)[0]])(fn = 0)), res;\n};\nvar __export = (target, all) => {\n __markAsModule(target);\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __reExport = (target, module2, desc) => {\n if (module2 && typeof module2 === \"object\" || typeof module2 === \"function\") {\n for (let key of __getOwnPropNames(module2))\n if (!__hasOwnProp.call(target, key) && key !== \"default\")\n __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });\n }\n return target;\n};\nvar __toModule = (module2) => {\n return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, \"default\", module2 && module2.__esModule && \"default\" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);\n};\nvar __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// node_modules/comlink/dist/esm/node-adapter.mjs\nvar node_adapter_exports = {};\n__export(node_adapter_exports, {\n default: () => node_adapter_default\n});\nfunction nodeEndpoint(nep) {\n const listeners = new WeakMap();\n return {\n postMessage: nep.postMessage.bind(nep),\n addEventListener: (_5, eh) => {\n const l = (data) => {\n if (\"handleEvent\" in eh) {\n eh.handleEvent({ data });\n } else {\n eh({ data });\n }\n };\n nep.on(\"message\", l);\n listeners.set(eh, l);\n },\n removeEventListener: (_5, eh) => {\n const l = listeners.get(eh);\n if (!l) {\n return;\n }\n nep.off(\"message\", l);\n listeners.delete(eh);\n },\n start: nep.start && nep.start.bind(nep)\n };\n}\nvar node_adapter_default;\nvar init_node_adapter = __esm({\n \"node_modules/comlink/dist/esm/node-adapter.mjs\"() {\n node_adapter_default = nodeEndpoint;\n }\n});\n\n// src/cubing/search/vendor/comlink-everywhere/inside/node.js\nvar node_exports = {};\n__export(node_exports, {\n port: () => port\n});\nfunction port() {\n return __async(this, null, function* () {\n const { parentPort } = yield import(\"worker_threads\").catch();\n const nodeEndpoint2 = (yield Promise.resolve().then(() => (init_node_adapter(), node_adapter_exports))).default;\n return nodeEndpoint2(parentPort);\n });\n}\nvar init_node = __esm({\n \"src/cubing/search/vendor/comlink-everywhere/inside/node.js\"() {\n }\n});\n\n// src/cubing/alg/common.ts\nvar writeAlgDebugField, Comparable, AlgCommon;\nvar init_common = __esm({\n \"src/cubing/alg/common.ts\"() {\n writeAlgDebugField = false;\n Comparable = class {\n is(c) {\n return this instanceof c;\n }\n as(c) {\n return this instanceof c ? this : null;\n }\n };\n AlgCommon = class extends Comparable {\n constructor() {\n super();\n if (writeAlgDebugField) {\n Object.defineProperty(this, \"_debugStr\", {\n get: function() {\n return this.toString();\n }\n });\n }\n }\n get log() {\n return console.log.bind(console, this, this.toString());\n }\n };\n }\n});\n\n// src/cubing/alg/iteration.ts\nfunction toggleDirection(iterationDirection, flip = true) {\n if (!flip) {\n return iterationDirection;\n }\n switch (iterationDirection) {\n case 1:\n return -1;\n case -1:\n return 1;\n }\n}\nfunction direct(g, iterDir) {\n return iterDir === -1 ? Array.from(g).reverse() : g;\n}\nfunction reverse(g) {\n return Array.from(g).reverse();\n}\nvar IterationDirection;\nvar init_iteration = __esm({\n \"src/cubing/alg/iteration.ts\"() {\n (function(IterationDirection3) {\n IterationDirection3[IterationDirection3[\"Forwards\"] = 1] = \"Forwards\";\n IterationDirection3[IterationDirection3[\"Backwards\"] = -1] = \"Backwards\";\n })(IterationDirection || (IterationDirection = {}));\n }\n});\n\n// src/cubing/alg/limits.ts\nvar MAX_INT, MAX_INT_DESCRIPTION, MIN_INT;\nvar init_limits = __esm({\n \"src/cubing/alg/limits.ts\"() {\n MAX_INT = 2147483647;\n MAX_INT_DESCRIPTION = \"2^31 - 1\";\n MIN_INT = -2147483648;\n }\n});\n\n// src/cubing/alg/AlgBuilder.ts\nvar _units, AlgBuilder;\nvar init_AlgBuilder = __esm({\n \"src/cubing/alg/AlgBuilder.ts\"() {\n init_Alg();\n AlgBuilder = class {\n constructor() {\n __privateAdd(this, _units, []);\n }\n push(u) {\n __privateGet(this, _units).push(u);\n }\n experimentalPushAlg(alg) {\n for (const u of alg.units()) {\n this.push(u);\n }\n }\n experimentalNumUnits() {\n return __privateGet(this, _units).length;\n }\n toAlg() {\n return new Alg(__privateGet(this, _units));\n }\n reset() {\n __privateSet(this, _units, []);\n }\n };\n _units = new WeakMap();\n }\n});\n\n// src/cubing/alg/units/containers/Commutator.ts\nvar _A, _B, _Commutator, Commutator;\nvar init_Commutator = __esm({\n \"src/cubing/alg/units/containers/Commutator.ts\"() {\n init_Alg();\n init_common();\n init_iteration();\n _Commutator = class extends AlgCommon {\n constructor(aSource, bSource) {\n super();\n __privateAdd(this, _A, void 0);\n __privateAdd(this, _B, void 0);\n __privateSet(this, _A, experimentalEnsureAlg(aSource));\n __privateSet(this, _B, experimentalEnsureAlg(bSource));\n }\n get A() {\n return __privateGet(this, _A);\n }\n get B() {\n return __privateGet(this, _B);\n }\n isIdentical(other) {\n const otherAsCommutator = other.as(_Commutator);\n return !!((otherAsCommutator == null ? void 0 : otherAsCommutator.A.isIdentical(this.A)) && (otherAsCommutator == null ? void 0 : otherAsCommutator.B.isIdentical(this.B)));\n }\n invert() {\n return new _Commutator(__privateGet(this, _B), __privateGet(this, _A));\n }\n *experimentalExpand(iterDir = IterationDirection.Forwards, depth) {\n depth != null ? depth : depth = Infinity;\n if (depth === 0) {\n yield iterDir === IterationDirection.Forwards ? this : this.invert();\n } else {\n if (iterDir === IterationDirection.Forwards) {\n yield* this.A.experimentalExpand(IterationDirection.Forwards, depth - 1);\n yield* this.B.experimentalExpand(IterationDirection.Forwards, depth - 1);\n yield* this.A.experimentalExpand(IterationDirection.Backwards, depth - 1);\n yield* this.B.experimentalExpand(IterationDirection.Backwards, depth - 1);\n } else {\n yield* this.B.experimentalExpand(IterationDirection.Forwards, depth - 1);\n yield* this.A.experimentalExpand(IterationDirection.Forwards, depth - 1);\n yield* this.B.experimentalExpand(IterationDirection.Backwards, depth - 1);\n yield* this.A.experimentalExpand(IterationDirection.Backwards, depth - 1);\n }\n }\n }\n toString() {\n return `[${__privateGet(this, _A)}, ${__privateGet(this, _B)}]`;\n }\n };\n Commutator = _Commutator;\n _A = new WeakMap();\n _B = new WeakMap();\n }\n});\n\n// src/cubing/alg/units/containers/Conjugate.ts\nvar _A2, _B2, _Conjugate, Conjugate;\nvar init_Conjugate = __esm({\n \"src/cubing/alg/units/containers/Conjugate.ts\"() {\n init_Alg();\n init_common();\n init_iteration();\n _Conjugate = class extends AlgCommon {\n constructor(aSource, bSource) {\n super();\n __privateAdd(this, _A2, void 0);\n __privateAdd(this, _B2, void 0);\n __privateSet(this, _A2, experimentalEnsureAlg(aSource));\n __privateSet(this, _B2, experimentalEnsureAlg(bSource));\n }\n get A() {\n return __privateGet(this, _A2);\n }\n get B() {\n return __privateGet(this, _B2);\n }\n isIdentical(other) {\n const otherAsConjugate = other.as(_Conjugate);\n return !!((otherAsConjugate == null ? void 0 : otherAsConjugate.A.isIdentical(this.A)) && (otherAsConjugate == null ? void 0 : otherAsConjugate.B.isIdentical(this.B)));\n }\n invert() {\n return new _Conjugate(__privateGet(this, _A2), __privateGet(this, _B2).invert());\n }\n *experimentalExpand(iterDir, depth) {\n depth != null ? depth : depth = Infinity;\n if (depth === 0) {\n yield iterDir === IterationDirection.Forwards ? this : this.invert();\n } else {\n yield* this.A.experimentalExpand(IterationDirection.Forwards, depth - 1);\n yield* this.B.experimentalExpand(iterDir, depth - 1);\n yield* this.A.experimentalExpand(IterationDirection.Backwards, depth - 1);\n }\n }\n toString() {\n return `[${this.A}: ${this.B}]`;\n }\n };\n Conjugate = _Conjugate;\n _A2 = new WeakMap();\n _B2 = new WeakMap();\n }\n});\n\n// src/cubing/alg/units/leaves/LineComment.ts\nvar _text, _LineComment, LineComment;\nvar init_LineComment = __esm({\n \"src/cubing/alg/units/leaves/LineComment.ts\"() {\n init_common();\n init_iteration();\n _LineComment = class extends AlgCommon {\n constructor(commentText) {\n super();\n __privateAdd(this, _text, void 0);\n if (commentText.includes(\"\\n\") || commentText.includes(\"\\r\")) {\n throw new Error(\"LineComment cannot contain newline\");\n }\n __privateSet(this, _text, commentText);\n }\n get text() {\n return __privateGet(this, _text);\n }\n isIdentical(other) {\n const otherAsLineComment = other;\n return other.is(_LineComment) && __privateGet(this, _text) === __privateGet(otherAsLineComment, _text);\n }\n invert() {\n return this;\n }\n *experimentalExpand(_iterDir = IterationDirection.Forwards, _depth = Infinity) {\n yield this;\n }\n toString() {\n return `//${__privateGet(this, _text)}`;\n }\n };\n LineComment = _LineComment;\n _text = new WeakMap();\n }\n});\n\n// src/cubing/alg/units/leaves/Newline.ts\nvar Newline;\nvar init_Newline = __esm({\n \"src/cubing/alg/units/leaves/Newline.ts\"() {\n init_common();\n init_iteration();\n Newline = class extends AlgCommon {\n toString() {\n return `\n`;\n }\n isIdentical(other) {\n return other.is(Newline);\n }\n invert() {\n return this;\n }\n *experimentalExpand(_iterDir = IterationDirection.Forwards, _depth = Infinity) {\n yield this;\n }\n };\n }\n});\n\n// src/cubing/alg/units/leaves/Pause.ts\nvar Pause;\nvar init_Pause = __esm({\n \"src/cubing/alg/units/leaves/Pause.ts\"() {\n init_common();\n init_iteration();\n Pause = class extends AlgCommon {\n toString() {\n return `.`;\n }\n isIdentical(other) {\n return other.is(Pause);\n }\n invert() {\n return this;\n }\n *experimentalExpand(_iterDir = IterationDirection.Forwards, _depth = Infinity) {\n yield this;\n }\n };\n }\n});\n\n// src/cubing/alg/parse.ts\nfunction parseIntWithEmptyFallback(n, emptyFallback) {\n return n ? parseInt(n) : emptyFallback;\n}\nfunction parseAlg(s) {\n return new AlgParser().parseAlg(s);\n}\nfunction parseMove(s) {\n return new AlgParser().parseMove(s);\n}\nfunction parseQuantumMove(s) {\n return new AlgParser().parseQuantumMove(s);\n}\nfunction addCharIndices(t, startCharIndex, endCharIndex) {\n const parsedT = t;\n parsedT.startCharIndex = startCharIndex;\n parsedT.endCharIndex = endCharIndex;\n return parsedT;\n}\nfunction transferCharIndex(from, to) {\n if (\"startCharIndex\" in from) {\n to.startCharIndex = from.startCharIndex;\n }\n if (\"endCharIndex\" in from) {\n to.endCharIndex = from.endCharIndex;\n }\n return to;\n}\nvar amountRegex, moveStartRegex, quantumMoveRegex, commentTextRegex, square1PairStart, square1PairEnd, _input, _idx, AlgParser;\nvar init_parse = __esm({\n \"src/cubing/alg/parse.ts\"() {\n init_Alg();\n init_AlgBuilder();\n init_Commutator();\n init_Conjugate();\n init_Grouping();\n init_LineComment();\n init_Move();\n init_Newline();\n init_Pause();\n amountRegex = /^(\\d+)?('?)/;\n moveStartRegex = /^[_\\dA-Za-z]/;\n quantumMoveRegex = /^((([1-9]\\d*)-)?([1-9]\\d*))?([_A-Za-z]+)?/;\n commentTextRegex = /^[^\\n]*/;\n square1PairStart = /^(-?\\d+), ?/;\n square1PairEnd = /^(-?\\d+)\\)/;\n AlgParser = class {\n constructor() {\n __privateAdd(this, _input, \"\");\n __privateAdd(this, _idx, 0);\n }\n parseAlg(input) {\n __privateSet(this, _input, input);\n __privateSet(this, _idx, 0);\n const alg = this.parseAlgWithStopping([]);\n this.mustBeAtEndOfInput();\n return alg;\n }\n parseMove(input) {\n __privateSet(this, _input, input);\n __privateSet(this, _idx, 0);\n const move = this.parseMoveImpl();\n this.mustBeAtEndOfInput();\n return move;\n }\n parseQuantumMove(input) {\n __privateSet(this, _input, input);\n __privateSet(this, _idx, 0);\n const quantumMove = this.parseQuantumMoveImpl();\n this.mustBeAtEndOfInput();\n return quantumMove;\n }\n mustBeAtEndOfInput() {\n if (__privateGet(this, _idx) !== __privateGet(this, _input).length) {\n throw new Error(\"parsing unexpectedly ended early\");\n }\n }\n parseAlgWithStopping(stopBefore) {\n let algStartIdx = __privateGet(this, _idx);\n let algEndIdx = __privateGet(this, _idx);\n const algBuilder = new AlgBuilder();\n let crowded = false;\n const mustNotBeCrowded = (idx) => {\n if (crowded) {\n throw new Error(`Unexpected character at index ${idx}. Are you missing a space?`);\n }\n };\n mainLoop:\n while (__privateGet(this, _idx) < __privateGet(this, _input).length) {\n const savedCharIndex = __privateGet(this, _idx);\n if (stopBefore.includes(__privateGet(this, _input)[__privateGet(this, _idx)])) {\n return addCharIndices(algBuilder.toAlg(), algStartIdx, algEndIdx);\n }\n if (this.tryConsumeNext(\" \")) {\n crowded = false;\n if (algBuilder.experimentalNumUnits() === 0) {\n algStartIdx = __privateGet(this, _idx);\n }\n continue mainLoop;\n } else if (moveStartRegex.test(__privateGet(this, _input)[__privateGet(this, _idx)])) {\n mustNotBeCrowded(savedCharIndex);\n const move = this.parseMoveImpl();\n algBuilder.push(move);\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n } else if (this.tryConsumeNext(\"(\")) {\n mustNotBeCrowded(savedCharIndex);\n const sq1PairStartMatch = this.tryRegex(square1PairStart);\n if (sq1PairStartMatch) {\n const topAmountString = sq1PairStartMatch[1];\n const savedCharIndexD = __privateGet(this, _idx);\n const sq1PairEndMatch = this.parseRegex(square1PairEnd);\n const uMove = addCharIndices(new Move(new QuantumMove(\"U_SQ_\"), parseInt(topAmountString)), savedCharIndex + 1, savedCharIndex + 1 + topAmountString.length);\n const dMove = addCharIndices(new Move(new QuantumMove(\"D_SQ_\"), parseInt(sq1PairEndMatch[1])), savedCharIndexD, __privateGet(this, _idx) - 1);\n const alg = addCharIndices(new Alg([uMove, dMove]), savedCharIndex + 1, __privateGet(this, _idx) - 1);\n algBuilder.push(addCharIndices(new Grouping(alg), savedCharIndex, __privateGet(this, _idx)));\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n } else {\n const alg = this.parseAlgWithStopping([\")\"]);\n this.mustConsumeNext(\")\");\n const amount = this.parseAmount();\n algBuilder.push(addCharIndices(new Grouping(alg, amount), savedCharIndex, __privateGet(this, _idx)));\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n }\n } else if (this.tryConsumeNext(\"[\")) {\n mustNotBeCrowded(savedCharIndex);\n const A = this.parseAlgWithStopping([\",\", \":\"]);\n const separator = this.popNext();\n const B = this.parseAlgWithStopping([\"]\"]);\n this.mustConsumeNext(\"]\");\n switch (separator) {\n case \":\":\n algBuilder.push(addCharIndices(new Conjugate(A, B), savedCharIndex, __privateGet(this, _idx)));\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n case \",\":\n algBuilder.push(addCharIndices(new Commutator(A, B), savedCharIndex, __privateGet(this, _idx)));\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n default:\n throw \"unexpected parsing error\";\n }\n } else if (this.tryConsumeNext(\"\\n\")) {\n algBuilder.push(addCharIndices(new Newline(), savedCharIndex, __privateGet(this, _idx)));\n crowded = false;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n } else if (this.tryConsumeNext(\"/\")) {\n if (this.tryConsumeNext(\"/\")) {\n mustNotBeCrowded(savedCharIndex);\n const [text] = this.parseRegex(commentTextRegex);\n algBuilder.push(addCharIndices(new LineComment(text), savedCharIndex, __privateGet(this, _idx)));\n crowded = false;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n } else {\n algBuilder.push(addCharIndices(new Move(\"_SLASH_\"), savedCharIndex, __privateGet(this, _idx)));\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n }\n } else if (this.tryConsumeNext(\".\")) {\n mustNotBeCrowded(savedCharIndex);\n algBuilder.push(addCharIndices(new Pause(), savedCharIndex, __privateGet(this, _idx)));\n crowded = true;\n algEndIdx = __privateGet(this, _idx);\n continue mainLoop;\n } else {\n throw new Error(`Unexpected character: ${this.popNext()}`);\n }\n }\n if (__privateGet(this, _idx) !== __privateGet(this, _input).length) {\n throw new Error(\"did not finish parsing?\");\n }\n if (stopBefore.length > 0) {\n throw new Error(\"expected stopping\");\n }\n return addCharIndices(algBuilder.toAlg(), algStartIdx, algEndIdx);\n }\n parseQuantumMoveImpl() {\n const [, , , outerLayerStr, innerLayerStr, family] = this.parseRegex(quantumMoveRegex);\n return new QuantumMove(family, parseIntWithEmptyFallback(innerLayerStr, void 0), parseIntWithEmptyFallback(outerLayerStr, void 0));\n }\n parseMoveImpl() {\n const savedCharIndex = __privateGet(this, _idx);\n if (this.tryConsumeNext(\"/\")) {\n return addCharIndices(new Move(\"_SLASH_\"), savedCharIndex, __privateGet(this, _idx));\n }\n let quantumMove = this.parseQuantumMoveImpl();\n let [amount, hadEmptyAbsAmount] = this.parseAmountAndTrackEmptyAbsAmount();\n const suffix = this.parseMoveSuffix();\n if (suffix) {\n if (amount < 0) {\n throw new Error(\"uh-oh\");\n }\n if ((suffix === \"++\" || suffix === \"--\") && amount !== 1) {\n throw new Error(\"Pochmann ++ or -- moves cannot have an amount other than 1.\");\n }\n if ((suffix === \"++\" || suffix === \"--\") && !hadEmptyAbsAmount) {\n throw new Error(\"Pochmann ++ or -- moves cannot have an amount written as a number.\");\n }\n if ((suffix === \"+\" || suffix === \"-\") && hadEmptyAbsAmount) {\n throw new Error(\"Clock dial moves must have an amount written as a natural number followed by + or -.\");\n }\n if (suffix.startsWith(\"+\")) {\n quantumMove = quantumMove.modified({\n family: `${quantumMove.family}_${suffix === \"+\" ? \"PLUS\" : \"PLUSPLUS\"}_`\n });\n }\n if (suffix.startsWith(\"-\")) {\n quantumMove = quantumMove.modified({\n family: `${quantumMove.family}_${suffix === \"-\" ? \"PLUS\" : \"PLUSPLUS\"}_`\n });\n amount *= -1;\n }\n }\n const move = addCharIndices(new Move(quantumMove, amount), savedCharIndex, __privateGet(this, _idx));\n return move;\n }\n parseMoveSuffix() {\n if (this.tryConsumeNext(\"+\")) {\n if (this.tryConsumeNext(\"+\")) {\n return \"++\";\n }\n return \"+\";\n }\n if (this.tryConsumeNext(\"-\")) {\n if (this.tryConsumeNext(\"-\")) {\n return \"--\";\n }\n return \"-\";\n }\n return null;\n }\n parseAmountAndTrackEmptyAbsAmount() {\n const savedIdx = __privateGet(this, _idx);\n const [, absAmountStr, primeStr] = this.parseRegex(amountRegex);\n if ((absAmountStr == null ? void 0 : absAmountStr.startsWith(\"0\")) && absAmountStr !== \"0\") {\n throw new Error(`Error at char index ${savedIdx}: An amount can only start with 0 if it's exactly the digit 0.`);\n }\n return [\n parseIntWithEmptyFallback(absAmountStr, 1) * (primeStr === \"'\" ? -1 : 1),\n !absAmountStr\n ];\n }\n parseAmount() {\n const savedIdx = __privateGet(this, _idx);\n const [, absAmountStr, primeStr] = this.parseRegex(amountRegex);\n if ((absAmountStr == null ? void 0 : absAmountStr.startsWith(\"0\")) && absAmountStr !== \"0\") {\n throw new Error(`Error at char index ${savedIdx}: An amount number can only start with 0 if it's exactly the digit 0.`);\n }\n return parseIntWithEmptyFallback(absAmountStr, 1) * (primeStr === \"'\" ? -1 : 1);\n }\n parseRegex(regex) {\n const arr = regex.exec(this.remaining());\n if (arr === null) {\n throw new Error(\"internal parsing error\");\n }\n __privateSet(this, _idx, __privateGet(this, _idx) + arr[0].length);\n return arr;\n }\n tryRegex(regex) {\n const arr = regex.exec(this.remaining());\n if (arr === null) {\n return null;\n }\n __privateSet(this, _idx, __privateGet(this, _idx) + arr[0].length);\n return arr;\n }\n remaining() {\n return __privateGet(this, _input).slice(__privateGet(this, _idx));\n }\n popNext() {\n var _a;\n const next = __privateGet(this, _input)[__privateGet(this, _idx)];\n __privateSet(this, _idx, (_a = +__privateGet(this, _idx)) + 1), _a;\n return next;\n }\n tryConsumeNext(expected) {\n var _a;\n if (__privateGet(this, _input)[__privateGet(this, _idx)] === expected) {\n __privateSet(this, _idx, (_a = +__privateGet(this, _idx)) + 1), _a;\n return true;\n }\n return false;\n }\n mustConsumeNext(expected) {\n const next = this.popNext();\n if (next !== expected) {\n throw new Error(`expected \\`${expected}\\` while parsing, encountered ${next}`);\n }\n return next;\n }\n };\n _input = new WeakMap();\n _idx = new WeakMap();\n }\n});\n\n// src/cubing/alg/warnOnce.ts\nfunction warnOnce(s) {\n if (!warned.has(s)) {\n console.warn(s);\n warned.add(s);\n }\n}\nvar warned;\nvar init_warnOnce = __esm({\n \"src/cubing/alg/warnOnce.ts\"() {\n warned = new Set();\n }\n});\n\n// src/cubing/alg/units/QuantumWithAmount.ts\nvar QuantumWithAmount;\nvar init_QuantumWithAmount = __esm({\n \"src/cubing/alg/units/QuantumWithAmount.ts\"() {\n init_iteration();\n init_limits();\n QuantumWithAmount = class {\n constructor(quantum, amount = 1) {\n this.quantum = quantum;\n this.amount = amount;\n if (!Number.isInteger(this.amount) || this.amount < MIN_INT || this.amount > MAX_INT) {\n throw new Error(`Unit amount absolute value must be a non-negative integer from ${MAX_INT_DESCRIPTION} to ${MAX_INT_DESCRIPTION}.`);\n }\n }\n suffix() {\n let s = \"\";\n const absAmount = Math.abs(this.amount);\n if (absAmount !== 1) {\n s += absAmount;\n }\n if (this.amount < 0) {\n s += \"'\";\n }\n return s;\n }\n isIdentical(other) {\n return this.quantum.isIdentical(other.quantum) && this.amount === other.amount;\n }\n *experimentalExpand(iterDir, depth) {\n const absAmount = Math.abs(this.amount);\n const newIterDir = toggleDirection(iterDir, this.amount < 0);\n for (let i2 = 0; i2 < absAmount; i2++) {\n yield* this.quantum.experimentalExpand(newIterDir, depth);\n }\n }\n };\n }\n});\n\n// src/cubing/alg/units/leaves/Move.ts\nvar _family, _innerLayer, _outerLayer, _QuantumMove, QuantumMove, _quantumWithAmount, _Move, Move;\nvar init_Move = __esm({\n \"src/cubing/alg/units/leaves/Move.ts\"() {\n init_common();\n init_iteration();\n init_limits();\n init_parse();\n init_warnOnce();\n init_QuantumWithAmount();\n _QuantumMove = class extends Comparable {\n constructor(family, innerLayer, outerLayer) {\n super();\n __privateAdd(this, _family, void 0);\n __privateAdd(this, _innerLayer, void 0);\n __privateAdd(this, _outerLayer, void 0);\n __privateSet(this, _family, family);\n __privateSet(this, _innerLayer, innerLayer != null ? innerLayer : null);\n __privateSet(this, _outerLayer, outerLayer != null ? outerLayer : null);\n Object.freeze(this);\n if (__privateGet(this, _innerLayer) !== null && (!Number.isInteger(__privateGet(this, _innerLayer)) || __privateGet(this, _innerLayer) < 1 || __privateGet(this, _innerLayer) > MAX_INT)) {\n throw new Error(`QuantumMove inner layer must be a positive integer below ${MAX_INT_DESCRIPTION}.`);\n }\n if (__privateGet(this, _outerLayer) !== null && (!Number.isInteger(__privateGet(this, _outerLayer)) || __privateGet(this, _outerLayer) < 1 || __privateGet(this, _outerLayer) > MAX_INT)) {\n throw new Error(`QuantumMove outer layer must be a positive integer below ${MAX_INT_DESCRIPTION}.`);\n }\n if (__privateGet(this, _outerLayer) !== null && __privateGet(this, _innerLayer) !== null && __privateGet(this, _innerLayer) <= __privateGet(this, _outerLayer)) {\n throw new Error(\"QuantumMove outer layer must be smaller than inner layer.\");\n }\n if (__privateGet(this, _outerLayer) !== null && __privateGet(this, _innerLayer) === null) {\n throw new Error(\"QuantumMove with an outer layer must have an inner layer\");\n }\n }\n static fromString(s) {\n return parseQuantumMove(s);\n }\n modified(modifications) {\n var _a, _b, _c;\n return new _QuantumMove((_a = modifications.family) != null ? _a : __privateGet(this, _family), (_b = modifications.innerLayer) != null ? _b : __privateGet(this, _innerLayer), (_c = modifications.outerLayer) != null ? _c : __privateGet(this, _outerLayer));\n }\n isIdentical(other) {\n const otherAsQuantumMove = other;\n return other.is(_QuantumMove) && __privateGet(this, _family) === __privateGet(otherAsQuantumMove, _family) && __privateGet(this, _innerLayer) === __privateGet(otherAsQuantumMove, _innerLayer) && __privateGet(this, _outerLayer) === __privateGet(otherAsQuantumMove, _outerLayer);\n }\n get family() {\n return __privateGet(this, _family);\n }\n get outerLayer() {\n return __privateGet(this, _outerLayer);\n }\n get innerLayer() {\n return __privateGet(this, _innerLayer);\n }\n experimentalExpand() {\n throw new Error(\"experimentalExpand() cannot be called on a `QuantumMove` directly.\");\n }\n toString() {\n let s = __privateGet(this, _family);\n if (__privateGet(this, _innerLayer) !== null) {\n s = String(__privateGet(this, _innerLayer)) + s;\n if (__privateGet(this, _outerLayer) !== null) {\n s = String(__privateGet(this, _outerLayer)) + \"-\" + s;\n }\n }\n return s;\n }\n };\n QuantumMove = _QuantumMove;\n _family = new WeakMap();\n _innerLayer = new WeakMap();\n _outerLayer = new WeakMap();\n _Move = class extends AlgCommon {\n constructor(...args) {\n super();\n __privateAdd(this, _quantumWithAmount, void 0);\n var _a;\n if (typeof args[0] === \"string\") {\n if ((_a = args[1]) != null ? _a : null) {\n __privateSet(this, _quantumWithAmount, new QuantumWithAmount(QuantumMove.fromString(args[0]), args[1]));\n return;\n } else {\n return _Move.fromString(args[0]);\n }\n }\n __privateSet(this, _quantumWithAmount, new QuantumWithAmount(args[0], args[1]));\n }\n isIdentical(other) {\n const otherAsMove = other.as(_Move);\n return !!otherAsMove && __privateGet(this, _quantumWithAmount).isIdentical(__privateGet(otherAsMove, _quantumWithAmount));\n }\n invert() {\n return transferCharIndex(this, new _Move(__privateGet(this, _quantumWithAmount).quantum, -this.amount));\n }\n *experimentalExpand(iterDir = IterationDirection.Forwards) {\n if (iterDir === IterationDirection.Forwards) {\n yield this;\n } else {\n yield this.modified({\n amount: -this.amount\n });\n }\n }\n get quantum() {\n return __privateGet(this, _quantumWithAmount).quantum;\n }\n modified(modifications) {\n var _a;\n return new _Move(__privateGet(this, _quantumWithAmount).quantum.modified(modifications), (_a = modifications.amount) != null ? _a : this.amount);\n }\n static fromString(s) {\n return parseMove(s);\n }\n get amount() {\n return __privateGet(this, _quantumWithAmount).amount;\n }\n get type() {\n warnOnce(\"deprecated: type\");\n return \"blockMove\";\n }\n get family() {\n var _a;\n return (_a = __privateGet(this, _quantumWithAmount).quantum.family) != null ? _a : void 0;\n }\n get outerLayer() {\n var _a;\n return (_a = __privateGet(this, _quantumWithAmount).quantum.outerLayer) != null ? _a : void 0;\n }\n get innerLayer() {\n var _a;\n return (_a = __privateGet(this, _quantumWithAmount).quantum.innerLayer) != null ? _a : void 0;\n }\n toString() {\n if (this.family === \"_SLASH_\") {\n return \"/\";\n }\n if (this.family.endsWith(\"_PLUS_\")) {\n return __privateGet(this, _quantumWithAmount).quantum.toString().slice(0, -6) + Math.abs(this.amount) + (this.amount < 0 ? \"-\" : \"+\");\n }\n if (this.family.endsWith(\"_PLUSPLUS_\")) {\n const absAmount = Math.abs(this.amount);\n return __privateGet(this, _quantumWithAmount).quantum.toString().slice(0, -10) + (absAmount === 1 ? \"\" : absAmount) + (this.amount < 0 ? \"--\" : \"++\");\n }\n return __privateGet(this, _quantumWithAmount).quantum.toString() + __privateGet(this, _quantumWithAmount).suffix();\n }\n };\n Move = _Move;\n _quantumWithAmount = new WeakMap();\n }\n});\n\n// src/cubing/alg/units/containers/Grouping.ts\nvar Square1TupleFormatter, square1TupleFormatterInstance, _quantumWithAmount2, _Grouping, Grouping;\nvar init_Grouping = __esm({\n \"src/cubing/alg/units/containers/Grouping.ts\"() {\n init_Alg();\n init_common();\n init_iteration();\n init_Move();\n init_QuantumWithAmount();\n Square1TupleFormatter = class {\n constructor() {\n this.quantumU_SQ_ = null;\n this.quantumD_SQ_ = null;\n }\n format(grouping) {\n const amounts = this.tuple(grouping);\n if (!amounts) {\n return null;\n }\n return `(${amounts.map((move) => move.amount).join(\", \")})`;\n }\n tuple(grouping) {\n var _a, _b;\n this.quantumU_SQ_ || (this.quantumU_SQ_ = new QuantumMove(\"U_SQ_\"));\n this.quantumD_SQ_ || (this.quantumD_SQ_ = new QuantumMove(\"D_SQ_\"));\n const quantumAlg = grouping.alg;\n if (quantumAlg.experimentalNumUnits() === 2) {\n const [U, D] = quantumAlg.units();\n if (((_a = U.as(Move)) == null ? void 0 : _a.quantum.isIdentical(this.quantumU_SQ_)) && ((_b = D.as(Move)) == null ? void 0 : _b.quantum.isIdentical(this.quantumD_SQ_))) {\n if (grouping.amount !== 1) {\n throw new Error(\"Square-1 tuples cannot have an amount other than 1.\");\n }\n return [U, D];\n }\n }\n return null;\n }\n };\n square1TupleFormatterInstance = new Square1TupleFormatter();\n _Grouping = class extends AlgCommon {\n constructor(algSource, amount) {\n super();\n __privateAdd(this, _quantumWithAmount2, void 0);\n const alg = experimentalEnsureAlg(algSource);\n __privateSet(this, _quantumWithAmount2, new QuantumWithAmount(alg, amount));\n }\n isIdentical(other) {\n const otherAsGrouping = other;\n return other.is(_Grouping) && __privateGet(this, _quantumWithAmount2).isIdentical(__privateGet(otherAsGrouping, _quantumWithAmount2));\n }\n get alg() {\n return __privateGet(this, _quantumWithAmount2).quantum;\n }\n get amount() {\n return __privateGet(this, _quantumWithAmount2).amount;\n }\n get experimentalRepetitionSuffix() {\n return __privateGet(this, _quantumWithAmount2).suffix();\n }\n invert() {\n return new _Grouping(__privateGet(this, _quantumWithAmount2).quantum, -__privateGet(this, _quantumWithAmount2).amount);\n }\n *experimentalExpand(iterDir = IterationDirection.Forwards, depth) {\n depth != null ? depth : depth = Infinity;\n if (depth === 0) {\n yield iterDir === IterationDirection.Forwards ? this : this.invert();\n } else {\n yield* __privateGet(this, _quantumWithAmount2).experimentalExpand(iterDir, depth - 1);\n }\n }\n static fromString() {\n throw new Error(\"unimplemented\");\n }\n toString() {\n var _a;\n return (_a = square1TupleFormatterInstance.format(this)) != null ? _a : `(${__privateGet(this, _quantumWithAmount2).quantum.toString()})${__privateGet(this, _quantumWithAmount2).suffix()}`;\n }\n experimentalAsSquare1Tuple() {\n return square1TupleFormatterInstance.tuple(this);\n }\n };\n Grouping = _Grouping;\n _quantumWithAmount2 = new WeakMap();\n }\n});\n\n// src/cubing/alg/units/index.ts\nvar init_units = __esm({\n \"src/cubing/alg/units/index.ts\"() {\n init_Grouping();\n init_LineComment();\n init_Commutator();\n init_Conjugate();\n init_Move();\n init_Newline();\n init_Pause();\n }\n});\n\n// src/cubing/alg/is.ts\nfunction experimentalIs(v, c) {\n return v instanceof c;\n}\nfunction experimentalIsUnit(v) {\n return experimentalIs(v, Grouping) || experimentalIs(v, LineComment) || experimentalIs(v, Commutator) || experimentalIs(v, Conjugate) || experimentalIs(v, Move) || experimentalIs(v, Newline) || experimentalIs(v, Pause);\n}\nvar init_is = __esm({\n \"src/cubing/alg/is.ts\"() {\n init_units();\n }\n});\n\n// src/cubing/alg/traversal.ts\nfunction dispatch(t, unit, dataDown) {\n if (unit.is(Grouping)) {\n return t.traverseGrouping(unit, dataDown);\n }\n if (unit.is(Move)) {\n return t.traverseMove(unit, dataDown);\n }\n if (unit.is(Commutator)) {\n return t.traverseCommutator(unit, dataDown);\n }\n if (unit.is(Conjugate)) {\n return t.traverseConjugate(unit, dataDown);\n }\n if (unit.is(Pause)) {\n return t.traversePause(unit, dataDown);\n }\n if (unit.is(Newline)) {\n return t.traverseNewline(unit, dataDown);\n }\n if (unit.is(LineComment)) {\n return t.traverseLineComment(unit, dataDown);\n }\n throw new Error(`unknown unit`);\n}\nfunction assertIsUnit(t) {\n if (t.is(Grouping) || t.is(Move) || t.is(Commutator) || t.is(Conjugate) || t.is(Pause) || t.is(Newline) || t.is(LineComment)) {\n return t;\n }\n throw \"internal error: expected unit\";\n}\nvar TraversalDownUp, TraversalUp, _newAmount, newAmount_fn, _Simplify, Simplify, simplifyInstance, simplify;\nvar init_traversal = __esm({\n \"src/cubing/alg/traversal.ts\"() {\n init_Grouping();\n init_Commutator();\n init_Move();\n init_Newline();\n init_Pause();\n init_Conjugate();\n init_LineComment();\n TraversalDownUp = class {\n traverseUnit(unit, dataDown) {\n return dispatch(this, unit, dataDown);\n }\n traverseIntoUnit(unit, dataDown) {\n return assertIsUnit(this.traverseUnit(unit, dataDown));\n }\n };\n TraversalUp = class extends TraversalDownUp {\n traverseUnit(unit) {\n return dispatch(this, unit, void 0);\n }\n traverseIntoUnit(unit) {\n return assertIsUnit(this.traverseUnit(unit));\n }\n };\n _Simplify = class extends TraversalDownUp {\n *traverseAlg(alg, options) {\n var _a;\n if (options.depth === 0) {\n yield* alg.units();\n return;\n }\n const newUnits = [];\n let lastUnit = null;\n const collapseMoves = (_a = options == null ? void 0 : options.collapseMoves) != null ? _a : true;\n function appendMoveWithNewAmount(move, deltaAmount) {\n var _a2;\n const newAmount = __privateMethod(_a2 = _Simplify, _newAmount, newAmount_fn).call(_a2, move, deltaAmount, options);\n if (newAmount === 0) {\n return false;\n }\n const newMove = new Move(move.quantum, newAmount);\n newUnits.push(newMove);\n lastUnit = newMove;\n return true;\n }\n function appendCollapsed(newUnit) {\n if (collapseMoves && (lastUnit == null ? void 0 : lastUnit.is(Move)) && newUnit.is(Move) && lastUnit.quantum.isIdentical(newUnit.quantum)) {\n newUnits.pop();\n if (!appendMoveWithNewAmount(lastUnit, newUnit.amount)) {\n lastUnit = newUnits.slice(-1)[0];\n }\n } else {\n if (newUnit.is(Move)) {\n appendMoveWithNewAmount(newUnit, 0);\n } else {\n newUnits.push(newUnit);\n lastUnit = newUnit;\n }\n }\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null\n };\n for (const unit of alg.units()) {\n for (const ancestorUnit of this.traverseUnit(unit, newOptions)) {\n appendCollapsed(ancestorUnit);\n }\n }\n for (const unit of newUnits) {\n yield unit;\n }\n }\n *traverseGrouping(grouping, options) {\n if (options.depth === 0) {\n yield grouping;\n return;\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null\n };\n yield new Grouping(this.traverseAlg(grouping.alg, newOptions));\n }\n *traverseMove(move, _options) {\n yield move;\n }\n *traverseCommutator(commutator, options) {\n if (options.depth === 0) {\n yield commutator;\n return;\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null\n };\n yield new Commutator(this.traverseAlg(commutator.A, newOptions), this.traverseAlg(commutator.B, newOptions));\n }\n *traverseConjugate(conjugate, options) {\n if (options.depth === 0) {\n yield conjugate;\n return;\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null\n };\n yield new Conjugate(this.traverseAlg(conjugate.A, newOptions), this.traverseAlg(conjugate.B, newOptions));\n }\n *traversePause(pause, _options) {\n yield pause;\n }\n *traverseNewline(newline, _options) {\n yield newline;\n }\n *traverseLineComment(comment, _options) {\n yield comment;\n }\n };\n Simplify = _Simplify;\n _newAmount = new WeakSet();\n newAmount_fn = function(move, deltaAmount, options) {\n let newAmount = move.amount + deltaAmount;\n if (options == null ? void 0 : options.quantumMoveOrder) {\n const order = options.quantumMoveOrder(move.quantum);\n const min = Math.floor(order / 2) + 1 - order;\n newAmount = (newAmount % order + order - min) % order + min;\n }\n return newAmount;\n };\n __privateAdd(Simplify, _newAmount);\n simplifyInstance = new Simplify();\n simplify = simplifyInstance.traverseAlg.bind(simplifyInstance);\n }\n});\n\n// src/cubing/alg/Alg.ts\nfunction toIterable(input) {\n if (!input) {\n return [];\n }\n if (experimentalIs(input, Alg)) {\n return input.units();\n }\n if (typeof input === \"string\") {\n return parseAlg(input).units();\n }\n const iter = input;\n if (typeof iter[Symbol.iterator] === \"function\") {\n return iter;\n }\n throw \"Invalid unit\";\n}\nfunction experimentalEnsureAlg(alg) {\n if (experimentalIs(alg, Alg)) {\n return alg;\n }\n return new Alg(alg);\n}\nfunction spaceBetween(u1, u2) {\n if (u1.is(Newline) || u2.is(Newline)) {\n return \"\";\n }\n if (u1.is(LineComment) && !u2.is(Newline)) {\n return \"\\n\";\n }\n return \" \";\n}\nvar _units2, _Alg, Alg;\nvar init_Alg = __esm({\n \"src/cubing/alg/Alg.ts\"() {\n init_common();\n init_is();\n init_iteration();\n init_parse();\n init_traversal();\n init_LineComment();\n init_Move();\n init_Newline();\n init_warnOnce();\n _Alg = class extends AlgCommon {\n constructor(alg) {\n super();\n __privateAdd(this, _units2, void 0);\n __privateSet(this, _units2, Array.from(toIterable(alg)));\n for (const unit of __privateGet(this, _units2)) {\n if (!experimentalIsUnit(unit)) {\n throw new Error(\"An alg can only contain units.\");\n }\n }\n }\n isIdentical(other) {\n const otherAsAlg = other;\n if (!other.is(_Alg)) {\n return false;\n }\n const l1 = Array.from(__privateGet(this, _units2));\n const l2 = Array.from(__privateGet(otherAsAlg, _units2));\n if (l1.length !== l2.length) {\n return false;\n }\n for (let i2 = 0; i2 < l1.length; i2++) {\n if (!l1[i2].isIdentical(l2[i2])) {\n return false;\n }\n }\n return true;\n }\n invert() {\n return new _Alg(reverse(Array.from(__privateGet(this, _units2)).map((u) => u.invert())));\n }\n *experimentalExpand(iterDir = IterationDirection.Forwards, depth) {\n depth != null ? depth : depth = Infinity;\n for (const unit of direct(__privateGet(this, _units2), iterDir)) {\n yield* unit.experimentalExpand(iterDir, depth);\n }\n }\n expand(options) {\n var _a;\n return new _Alg(this.experimentalExpand(IterationDirection.Forwards, (_a = options == null ? void 0 : options.depth) != null ? _a : Infinity));\n }\n *experimentalLeafMoves() {\n for (const leaf of this.experimentalExpand()) {\n if (leaf.is(Move)) {\n yield leaf;\n }\n }\n }\n concat(input) {\n return new _Alg(Array.from(__privateGet(this, _units2)).concat(Array.from(toIterable(input))));\n }\n experimentalIsEmpty() {\n for (const _5 of __privateGet(this, _units2)) {\n return false;\n }\n return true;\n }\n static fromString(s) {\n return parseAlg(s);\n }\n *units() {\n for (const unit of __privateGet(this, _units2)) {\n yield unit;\n }\n }\n experimentalNumUnits() {\n return Array.from(__privateGet(this, _units2)).length;\n }\n get type() {\n warnOnce(\"deprecated: type\");\n return \"sequence\";\n }\n toString() {\n let output = \"\";\n let previousUnit = null;\n for (const unit of __privateGet(this, _units2)) {\n if (previousUnit) {\n output += spaceBetween(previousUnit, unit);\n }\n output += unit.toString();\n previousUnit = unit;\n }\n return output;\n }\n simplify(options) {\n return new _Alg(simplify(this, options != null ? options : {}));\n }\n };\n Alg = _Alg;\n _units2 = new WeakMap();\n }\n});\n\n// src/cubing/alg/example.ts\nvar Example;\nvar init_example = __esm({\n \"src/cubing/alg/example.ts\"() {\n init_Alg();\n init_units();\n init_Commutator();\n init_Conjugate();\n init_Move();\n init_Pause();\n Example = {\n Sune: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"U\", 1),\n new Move(\"R\", 1),\n new Move(\"U\", -2),\n new Move(\"R\", -1)\n ]),\n AntiSune: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", 2),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"R\", 1),\n new Move(\"U\", -1),\n new Move(\"R\", -1)\n ]),\n SuneCommutator: new Alg([\n new Commutator(new Alg([new Move(\"R\", 1), new Move(\"U\", 1), new Move(\"R\", -2)]), new Alg([\n new Conjugate(new Alg([new Move(\"R\", 1)]), new Alg([new Move(\"U\", 1)]))\n ]))\n ]),\n Niklas: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", -1),\n new Move(\"L\", -1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"L\", 1),\n new Move(\"U\", 1)\n ]),\n EPerm: new Alg([\n new Move(\"x\", -1),\n new Commutator(new Alg([\n new Conjugate(new Alg([new Move(\"R\", 1)]), new Alg([new Move(\"U\", -1)]))\n ]), new Alg([new Move(\"D\", 1)])),\n new Commutator(new Alg([\n new Conjugate(new Alg([new Move(\"R\", 1)]), new Alg([new Move(\"U\", 1)]))\n ]), new Alg([new Move(\"D\", 1)])),\n new Move(\"x\", 1)\n ]),\n FURURFCompact: new Alg([\n new Conjugate(new Alg([new Move(\"F\", 1)]), new Alg([\n new Commutator(new Alg([new Move(\"U\", 1)]), new Alg([new Move(\"R\", 1)]))\n ]))\n ]),\n APermCompact: new Alg([\n new Conjugate(new Alg([new Move(\"R\", 2)]), new Alg([\n new Commutator(new Alg([new Move(\"F\", 2)]), new Alg([new Move(\"R\", -1), new Move(\"B\", -1), new Move(\"R\", 1)]))\n ]))\n ]),\n FURURFMoves: new Alg([\n new Move(\"F\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", 1),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n new Move(\"F\", -1)\n ]),\n TPerm: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n new Move(\"F\", 1),\n new Move(\"R\", 2),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"R\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"F\", -1)\n ]),\n HeadlightSwaps: new Alg([\n new Conjugate(new Alg([new Move(\"F\", 1)]), new Alg([\n new Grouping(new Alg([\n new Commutator(new Alg([new Move(\"R\", 1)]), new Alg([new Move(\"U\", 1)]))\n ]), 3)\n ]))\n ]),\n TriplePause: new Alg([new Pause(), new Pause(), new Pause()])\n };\n }\n});\n\n// src/cubing/alg/keyboard.ts\nvar cubeKeyMapping;\nvar init_keyboard = __esm({\n \"src/cubing/alg/keyboard.ts\"() {\n init_Move();\n cubeKeyMapping = {\n 73: new Move(\"R\"),\n 75: new Move(\"R'\"),\n 87: new Move(\"B\"),\n 79: new Move(\"B'\"),\n 83: new Move(\"D\"),\n 76: new Move(\"D'\"),\n 68: new Move(\"L\"),\n 69: new Move(\"L'\"),\n 74: new Move(\"U\"),\n 70: new Move(\"U'\"),\n 72: new Move(\"F\"),\n 71: new Move(\"F'\"),\n 78: new Move(\"x'\"),\n 67: new Move(\"l\"),\n 82: new Move(\"l'\"),\n 85: new Move(\"r\"),\n 77: new Move(\"r'\"),\n 88: new Move(\"d\"),\n 188: new Move(\"d'\"),\n 84: new Move(\"x\"),\n 89: new Move(\"x\"),\n 66: new Move(\"x'\"),\n 186: new Move(\"y\"),\n 59: new Move(\"y\"),\n 65: new Move(\"y'\"),\n 80: new Move(\"z\"),\n 81: new Move(\"z'\"),\n 90: new Move(\"M'\"),\n 190: new Move(\"M'\")\n };\n }\n});\n\n// src/cubing/alg/url.ts\nvar init_url = __esm({\n \"src/cubing/alg/url.ts\"() {\n }\n});\n\n// src/cubing/alg/operation.ts\nvar init_operation = __esm({\n \"src/cubing/alg/operation.ts\"() {\n init_Alg();\n }\n});\n\n// src/cubing/alg/index.ts\nvar init_alg = __esm({\n \"src/cubing/alg/index.ts\"() {\n init_Alg();\n init_AlgBuilder();\n init_traversal();\n init_example();\n init_keyboard();\n init_units();\n init_url();\n init_operation();\n init_is();\n init_iteration();\n }\n});\n\n// src/cubing/kpuzzle/transformations.ts\nfunction isIdentity(omod, o2) {\n if (o2 === lasto) {\n return true;\n }\n const perm = o2.permutation;\n const n = perm.length;\n for (let idx = 0; idx < n; idx++) {\n if (perm[idx] !== idx) {\n return false;\n }\n }\n if (omod > 1) {\n const ori = o2.orientation;\n for (let idx = 0; idx < n; idx++) {\n if (ori[idx] !== 0) {\n return false;\n }\n }\n }\n lasto = o2;\n return true;\n}\nfunction combineTransformations(def, t1, t2) {\n const newTrans = {};\n for (const orbitName in def.orbits) {\n const oDef = def.orbits[orbitName];\n const o1 = t1[orbitName];\n const o2 = t2[orbitName];\n if (isIdentity(oDef.orientations, o2)) {\n newTrans[orbitName] = o1;\n } else if (isIdentity(oDef.orientations, o1)) {\n newTrans[orbitName] = o2;\n } else {\n const newPerm = new Array(oDef.numPieces);\n if (oDef.orientations === 1) {\n for (let idx = 0; idx < oDef.numPieces; idx++) {\n newPerm[idx] = o1.permutation[o2.permutation[idx]];\n }\n newTrans[orbitName] = {\n permutation: newPerm,\n orientation: o1.orientation\n };\n } else {\n const newOri = new Array(oDef.numPieces);\n for (let idx = 0; idx < oDef.numPieces; idx++) {\n newOri[idx] = (o1.orientation[o2.permutation[idx]] + o2.orientation[idx]) % oDef.orientations;\n newPerm[idx] = o1.permutation[o2.permutation[idx]];\n }\n newTrans[orbitName] = { permutation: newPerm, orientation: newOri };\n }\n }\n }\n return newTrans;\n}\nfunction multiplyTransformations(def, t, amount) {\n if (amount < 0) {\n return multiplyTransformations(def, invertTransformation(def, t), -amount);\n }\n if (amount === 0) {\n return identityTransformation(def);\n }\n if (amount === 1) {\n return t;\n }\n let halfish = t;\n if (amount !== 2) {\n halfish = multiplyTransformations(def, t, Math.floor(amount / 2));\n }\n const twiceHalfish = combineTransformations(def, halfish, halfish);\n if (amount % 2 === 0) {\n return twiceHalfish;\n } else {\n return combineTransformations(def, t, twiceHalfish);\n }\n}\nfunction identityTransformation(definition) {\n const transformation = {};\n for (const orbitName in definition.orbits) {\n const orbitDefinition = definition.orbits[orbitName];\n if (!lasto || lasto.permutation.length !== orbitDefinition.numPieces) {\n const newPermutation = new Array(orbitDefinition.numPieces);\n const newOrientation = new Array(orbitDefinition.numPieces);\n for (let i2 = 0; i2 < orbitDefinition.numPieces; i2++) {\n newPermutation[i2] = i2;\n newOrientation[i2] = 0;\n }\n const orbitTransformation = {\n permutation: newPermutation,\n orientation: newOrientation\n };\n lasto = orbitTransformation;\n }\n transformation[orbitName] = lasto;\n }\n return transformation;\n}\nfunction invertTransformation(def, t) {\n const newTrans = {};\n for (const orbitName in def.orbits) {\n const oDef = def.orbits[orbitName];\n const o2 = t[orbitName];\n if (isIdentity(oDef.orientations, o2)) {\n newTrans[orbitName] = o2;\n } else if (oDef.orientations === 1) {\n const newPerm = new Array(oDef.numPieces);\n for (let idx = 0; idx < oDef.numPieces; idx++) {\n newPerm[o2.permutation[idx]] = idx;\n }\n newTrans[orbitName] = {\n permutation: newPerm,\n orientation: o2.orientation\n };\n } else {\n const newPerm = new Array(oDef.numPieces);\n const newOri = new Array(oDef.numPieces);\n for (let idx = 0; idx < oDef.numPieces; idx++) {\n const fromIdx = o2.permutation[idx];\n newPerm[fromIdx] = idx;\n newOri[fromIdx] = (oDef.orientations - o2.orientation[idx] + oDef.orientations) % oDef.orientations;\n }\n newTrans[orbitName] = { permutation: newPerm, orientation: newOri };\n }\n }\n return newTrans;\n}\nfunction areOrbitTransformationsEquivalent(def, orbitName, t1, t2, options = {}) {\n const oDef = def.orbits[orbitName];\n const o1 = t1[orbitName];\n const o2 = t2[orbitName];\n for (let idx = 0; idx < oDef.numPieces; idx++) {\n if (!(options == null ? void 0 : options.ignoreOrientation) && o1.orientation[idx] !== o2.orientation[idx]) {\n return false;\n }\n if (!(options == null ? void 0 : options.ignorePermutation) && o1.permutation[idx] !== o2.permutation[idx]) {\n return false;\n }\n }\n return true;\n}\nfunction areTransformationsEquivalent(def, t1, t2) {\n for (const orbitName in def.orbits) {\n if (!areOrbitTransformationsEquivalent(def, orbitName, t1, t2)) {\n return false;\n }\n }\n return true;\n}\nfunction areStatesEquivalent(def, t1, t2) {\n return areTransformationsEquivalent(def, combineTransformations(def, def.startPieces, t1), combineTransformations(def, def.startPieces, t2));\n}\nvar lasto;\nvar init_transformations = __esm({\n \"src/cubing/kpuzzle/transformations.ts\"() {\n }\n});\n\n// src/cubing/kpuzzle/kpuzzle.ts\nfunction transformationForMove(def, move) {\n const transformation = getNotationLayer(def).lookupMove(move);\n if (!transformation) {\n throw new Error(\"Unknown move: \" + move.toString());\n }\n return transformation;\n}\nfunction getNotationLayer(def) {\n if (!def.moveNotation) {\n def.moveNotation = new KPuzzleMoveNotation(def);\n }\n return def.moveNotation;\n}\nvar KPuzzleMoveNotation, KPuzzle;\nvar init_kpuzzle = __esm({\n \"src/cubing/kpuzzle/kpuzzle.ts\"() {\n init_alg();\n init_transformations();\n KPuzzleMoveNotation = class {\n constructor(def) {\n this.def = def;\n this.cache = {};\n }\n lookupMove(move) {\n const key = move.toString();\n let r2 = this.cache[key];\n if (r2) {\n return r2;\n }\n const quantumKey = move.quantum.toString();\n r2 = this.def.moves[quantumKey];\n if (r2) {\n r2 = multiplyTransformations(this.def, r2, move.amount);\n this.cache[key] = r2;\n } else {\n r2 = this.def.moves[move.toString()];\n if (r2) {\n this.cache[key] = r2;\n } else {\n r2 = this.def.moves[move.invert().toString()];\n if (r2) {\n r2 = multiplyTransformations(this.def, r2, -1);\n this.cache[key] = r2;\n }\n }\n }\n return r2;\n }\n };\n KPuzzle = class {\n constructor(definition) {\n this.definition = definition;\n this.state = identityTransformation(definition);\n }\n reset() {\n this.state = identityTransformation(this.definition);\n }\n serialize() {\n let output = \"\";\n for (const orbitName in this.definition.orbits) {\n output += orbitName + \"\\n\";\n output += this.state[orbitName].permutation.join(\" \") + \"\\n\";\n output += this.state[orbitName].orientation.join(\" \") + \"\\n\";\n }\n output = output.slice(0, output.length - 1);\n return output;\n }\n applyMove(move) {\n this.state = combineTransformations(this.definition, this.state, transformationForMove(this.definition, move));\n }\n applyAlg(alg) {\n for (const move of alg.experimentalLeafMoves()) {\n this.applyMove(move);\n }\n }\n };\n }\n});\n\n// src/cubing/kpuzzle/canonicalize.ts\nvar init_canonicalize = __esm({\n \"src/cubing/kpuzzle/canonicalize.ts\"() {\n init_transformations();\n }\n});\n\n// src/cubing/kpuzzle/parser/parser-peggy.js\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\nvar init_parser_peggy = __esm({\n \"src/cubing/kpuzzle/parser/parser-peggy.js\"() {\n peg$subclass(peg$SyntaxError, Error);\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i2, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i2 = 1, j = 1; i2 < descriptions.length; i2++) {\n if (descriptions[i2 - 1] !== descriptions[i2]) {\n descriptions[j] = descriptions[i2];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n }\n});\n\n// src/cubing/kpuzzle/parser/parser-shim.ts\nvar init_parser_shim = __esm({\n \"src/cubing/kpuzzle/parser/parser-shim.ts\"() {\n init_parser_peggy();\n }\n});\n\n// src/cubing/kpuzzle/parser/index.ts\nvar init_parser = __esm({\n \"src/cubing/kpuzzle/parser/index.ts\"() {\n init_parser_shim();\n }\n});\n\n// src/cubing/kpuzzle/svg.ts\nvar init_svg = __esm({\n \"src/cubing/kpuzzle/svg.ts\"() {\n }\n});\n\n// src/cubing/protocol/binary/orbit-indexing.ts\nvar init_orbit_indexing = __esm({\n \"src/cubing/protocol/binary/orbit-indexing.ts\"() {\n }\n});\n\n// src/cubing/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.ts\nvar cube3x3x3KPuzzle;\nvar init_x3x3_kpuzzle_json = __esm({\n \"src/cubing/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.ts\"() {\n cube3x3x3KPuzzle = {\n name: \"3x3x3\",\n orbits: {\n EDGES: { numPieces: 12, orientations: 2 },\n CORNERS: { numPieces: 8, orientations: 3 },\n CENTERS: { numPieces: 6, orientations: 4 }\n },\n startPieces: {\n EDGES: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 0, 0, 0]\n }\n },\n moves: {\n U: {\n EDGES: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [1, 0, 0, 0, 0, 0]\n }\n },\n y: {\n EDGES: {\n permutation: [1, 2, 3, 0, 5, 6, 7, 4, 10, 8, 11, 9],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 7, 4, 5, 6],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 2, 3, 4, 1, 5],\n orientation: [1, 0, 0, 0, 0, 3]\n }\n },\n x: {\n EDGES: {\n permutation: [4, 8, 0, 9, 6, 10, 2, 11, 5, 7, 1, 3],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [4, 0, 3, 5, 7, 6, 2, 1],\n orientation: [2, 1, 2, 1, 1, 2, 1, 2]\n },\n CENTERS: {\n permutation: [2, 1, 5, 3, 0, 4],\n orientation: [0, 3, 0, 1, 2, 2]\n }\n },\n L: {\n EDGES: {\n permutation: [0, 1, 2, 11, 4, 5, 6, 9, 8, 3, 10, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [0, 1, 6, 2, 4, 3, 5, 7],\n orientation: [0, 0, 2, 1, 0, 2, 1, 0]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 1, 0, 0, 0, 0]\n }\n },\n F: {\n EDGES: {\n permutation: [9, 1, 2, 3, 8, 5, 6, 7, 0, 4, 10, 11],\n orientation: [1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0]\n },\n CORNERS: {\n permutation: [3, 1, 2, 5, 0, 4, 6, 7],\n orientation: [1, 0, 0, 2, 2, 1, 0, 0]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 1, 0, 0, 0]\n }\n },\n R: {\n EDGES: {\n permutation: [0, 8, 2, 3, 4, 10, 6, 7, 5, 9, 1, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [4, 0, 2, 3, 7, 5, 6, 1],\n orientation: [2, 1, 0, 0, 1, 0, 0, 2]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 1, 0, 0]\n }\n },\n B: {\n EDGES: {\n permutation: [0, 1, 10, 3, 4, 5, 11, 7, 8, 9, 6, 2],\n orientation: [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1]\n },\n CORNERS: {\n permutation: [0, 7, 1, 3, 4, 5, 2, 6],\n orientation: [0, 2, 1, 0, 0, 0, 2, 1]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 0, 1, 0]\n }\n },\n D: {\n EDGES: {\n permutation: [0, 1, 2, 3, 7, 4, 5, 6, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 1, 2, 3, 4, 5],\n orientation: [0, 0, 0, 0, 0, 1]\n }\n },\n z: {\n EDGES: {\n permutation: [9, 3, 11, 7, 8, 1, 10, 5, 0, 4, 2, 6],\n orientation: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [3, 2, 6, 5, 0, 4, 7, 1],\n orientation: [1, 2, 1, 2, 2, 1, 2, 1]\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientation: [1, 1, 1, 1, 3, 1]\n }\n },\n M: {\n EDGES: {\n permutation: [2, 1, 6, 3, 0, 5, 4, 7, 8, 9, 10, 11],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientation: [2, 0, 0, 0, 2, 0]\n }\n },\n E: {\n EDGES: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 8, 10],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientation: [0, 0, 0, 0, 0, 0]\n }\n },\n S: {\n EDGES: {\n permutation: [0, 3, 2, 7, 4, 1, 6, 5, 8, 9, 10, 11],\n orientation: [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientation: [1, 1, 0, 1, 0, 1]\n }\n },\n u: {\n EDGES: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7, 10, 8, 11, 9],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 2, 3, 4, 1, 5],\n orientation: [1, 0, 0, 0, 0, 0]\n }\n },\n l: {\n EDGES: {\n permutation: [2, 1, 6, 11, 0, 5, 4, 9, 8, 3, 10, 7],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [0, 1, 6, 2, 4, 3, 5, 7],\n orientation: [0, 0, 2, 1, 0, 2, 1, 0]\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientation: [2, 1, 0, 0, 2, 0]\n }\n },\n f: {\n EDGES: {\n permutation: [9, 3, 2, 7, 8, 1, 6, 5, 0, 4, 10, 11],\n orientation: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n },\n CORNERS: {\n permutation: [3, 1, 2, 5, 0, 4, 6, 7],\n orientation: [1, 0, 0, 2, 2, 1, 0, 0]\n },\n CENTERS: {\n permutation: [1, 5, 2, 0, 4, 3],\n orientation: [1, 1, 1, 1, 0, 1]\n }\n },\n r: {\n EDGES: {\n permutation: [4, 8, 0, 3, 6, 10, 2, 7, 5, 9, 1, 11],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [4, 0, 2, 3, 7, 5, 6, 1],\n orientation: [2, 1, 0, 0, 1, 0, 0, 2]\n },\n CENTERS: {\n permutation: [2, 1, 5, 3, 0, 4],\n orientation: [0, 0, 0, 1, 2, 2]\n }\n },\n b: {\n EDGES: {\n permutation: [8, 5, 2, 1, 9, 7, 6, 3, 4, 0, 10, 11],\n orientation: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n },\n CORNERS: {\n permutation: [4, 1, 2, 0, 5, 3, 6, 7],\n orientation: [1, 0, 0, 2, 2, 1, 0, 0]\n },\n CENTERS: {\n permutation: [3, 0, 2, 5, 4, 1],\n orientation: [3, 3, 3, 3, 0, 3]\n }\n },\n d: {\n EDGES: {\n permutation: [0, 1, 2, 3, 7, 4, 5, 6, 9, 11, 8, 10],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientation: [0, 0, 0, 0, 0, 1]\n }\n }\n }\n };\n cube3x3x3KPuzzle.moves[\"Uw\"] = cube3x3x3KPuzzle.moves[\"u\"];\n cube3x3x3KPuzzle.moves[\"Lw\"] = cube3x3x3KPuzzle.moves[\"l\"];\n cube3x3x3KPuzzle.moves[\"Fw\"] = cube3x3x3KPuzzle.moves[\"f\"];\n cube3x3x3KPuzzle.moves[\"Rw\"] = cube3x3x3KPuzzle.moves[\"r\"];\n cube3x3x3KPuzzle.moves[\"Bw\"] = cube3x3x3KPuzzle.moves[\"b\"];\n cube3x3x3KPuzzle.moves[\"Dw\"] = cube3x3x3KPuzzle.moves[\"d\"];\n cube3x3x3KPuzzle.moves[\"Rv\"] = cube3x3x3KPuzzle.moves[\"x\"];\n cube3x3x3KPuzzle.moves[\"Uv\"] = cube3x3x3KPuzzle.moves[\"y\"];\n cube3x3x3KPuzzle.moves[\"Fv\"] = cube3x3x3KPuzzle.moves[\"z\"];\n cube3x3x3KPuzzle.moves[\"Lv\"] = {\n EDGES: {\n permutation: [2, 10, 6, 11, 0, 8, 4, 9, 1, 3, 5, 7],\n orientation: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]\n },\n CORNERS: {\n permutation: [1, 7, 6, 2, 0, 3, 5, 4],\n orientation: [2, 1, 2, 1, 1, 2, 1, 2]\n },\n CENTERS: {\n permutation: [4, 1, 0, 3, 5, 2],\n orientation: [2, 1, 0, 3, 2, 0]\n }\n };\n cube3x3x3KPuzzle.moves[\"Dv\"] = {\n EDGES: {\n permutation: [3, 0, 1, 2, 7, 4, 5, 6, 9, 11, 8, 10],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [3, 0, 1, 2, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n },\n CENTERS: {\n permutation: [0, 4, 1, 2, 3, 5],\n orientation: [3, 0, 0, 0, 0, 1]\n }\n };\n cube3x3x3KPuzzle.moves[\"Bv\"] = {\n EDGES: {\n permutation: [8, 5, 10, 1, 9, 7, 11, 3, 4, 0, 6, 2],\n orientation: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n },\n CORNERS: {\n permutation: [4, 7, 1, 0, 5, 3, 2, 6],\n orientation: [1, 2, 1, 2, 2, 1, 2, 1]\n },\n CENTERS: {\n permutation: [3, 0, 2, 5, 4, 1],\n orientation: [3, 3, 3, 3, 1, 3]\n }\n };\n }\n});\n\n// src/cubing/puzzles/stickerings/appearance.ts\nfunction getPieceAppearance(pieceStickering) {\n switch (pieceStickering) {\n case 0:\n return r;\n case 1:\n return d;\n case 2:\n return i;\n case 3:\n return o;\n case 4:\n return invisiblePiece;\n case 6:\n return riiii;\n case 7:\n return drrrr;\n case 5:\n return diiii;\n case 8:\n return oiiii;\n }\n}\nvar PieceStickering, PieceAnnotation, regular, ignored, oriented, invisible, dim, r, i, o, invisiblePiece, riiii, drrrr, d, diiii, oiiii, PuzzleStickering, StickeringManager;\nvar init_appearance = __esm({\n \"src/cubing/puzzles/stickerings/appearance.ts\"() {\n init_alg();\n init_alg();\n init_kpuzzle2();\n (function(PieceStickering2) {\n PieceStickering2[PieceStickering2[\"Regular\"] = 0] = \"Regular\";\n PieceStickering2[PieceStickering2[\"Dim\"] = 1] = \"Dim\";\n PieceStickering2[PieceStickering2[\"Ignored\"] = 2] = \"Ignored\";\n PieceStickering2[PieceStickering2[\"OrientationStickers\"] = 3] = \"OrientationStickers\";\n PieceStickering2[PieceStickering2[\"Invisible\"] = 4] = \"Invisible\";\n PieceStickering2[PieceStickering2[\"Ignoriented\"] = 5] = \"Ignoriented\";\n PieceStickering2[PieceStickering2[\"IgnoreNonPrimary\"] = 6] = \"IgnoreNonPrimary\";\n PieceStickering2[PieceStickering2[\"PermuteNonPrimary\"] = 7] = \"PermuteNonPrimary\";\n PieceStickering2[PieceStickering2[\"OrientationWithoutPermutation\"] = 8] = \"OrientationWithoutPermutation\";\n })(PieceStickering || (PieceStickering = {}));\n PieceAnnotation = class {\n constructor(def, defaultValue) {\n this.stickerings = new Map();\n for (const [orbitName, orbitDef] of Object.entries(def.orbits)) {\n this.stickerings.set(orbitName, new Array(orbitDef.numPieces).fill(defaultValue));\n }\n }\n };\n regular = \"regular\";\n ignored = \"ignored\";\n oriented = \"oriented\";\n invisible = \"invisible\";\n dim = \"dim\";\n r = {\n facelets: [regular, regular, regular, regular, regular]\n };\n i = {\n facelets: [ignored, ignored, ignored, ignored, ignored]\n };\n o = {\n facelets: [oriented, oriented, oriented, oriented, oriented]\n };\n invisiblePiece = {\n facelets: [invisible, invisible, invisible, invisible]\n };\n riiii = {\n facelets: [regular, ignored, ignored, ignored, ignored]\n };\n drrrr = {\n facelets: [dim, regular, regular, regular, regular]\n };\n d = {\n facelets: [dim, dim, dim, dim, dim]\n };\n diiii = {\n facelets: [dim, ignored, ignored, ignored, ignored]\n };\n oiiii = {\n facelets: [oriented, ignored, ignored, ignored, ignored]\n };\n PuzzleStickering = class extends PieceAnnotation {\n constructor(def) {\n super(def, 0);\n }\n set(pieceSet, pieceStickering) {\n for (const [orbitName, pieces] of this.stickerings.entries()) {\n for (let i2 = 0; i2 < pieces.length; i2++) {\n if (pieceSet.stickerings.get(orbitName)[i2]) {\n pieces[i2] = pieceStickering;\n }\n }\n }\n return this;\n }\n toAppearance() {\n const appearance = { orbits: {} };\n for (const [orbitName, pieceStickerings] of this.stickerings.entries()) {\n const pieces = [];\n const orbitAppearance = {\n pieces\n };\n appearance.orbits[orbitName] = orbitAppearance;\n for (const pieceStickering of pieceStickerings) {\n pieces.push(getPieceAppearance(pieceStickering));\n }\n }\n return appearance;\n }\n };\n StickeringManager = class {\n constructor(def) {\n this.def = def;\n }\n and(pieceSets) {\n const newPieceSet = new PieceAnnotation(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n pieceLoop:\n for (let i2 = 0; i2 < orbitDef.numPieces; i2++) {\n newPieceSet.stickerings.get(orbitName)[i2] = true;\n for (const pieceSet of pieceSets) {\n if (!pieceSet.stickerings.get(orbitName)[i2]) {\n newPieceSet.stickerings.get(orbitName)[i2] = false;\n continue pieceLoop;\n }\n }\n }\n }\n return newPieceSet;\n }\n or(pieceSets) {\n const newPieceSet = new PieceAnnotation(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n pieceLoop:\n for (let i2 = 0; i2 < orbitDef.numPieces; i2++) {\n newPieceSet.stickerings.get(orbitName)[i2] = false;\n for (const pieceSet of pieceSets) {\n if (pieceSet.stickerings.get(orbitName)[i2]) {\n newPieceSet.stickerings.get(orbitName)[i2] = true;\n continue pieceLoop;\n }\n }\n }\n }\n return newPieceSet;\n }\n not(pieceSet) {\n const newPieceSet = new PieceAnnotation(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n for (let i2 = 0; i2 < orbitDef.numPieces; i2++) {\n newPieceSet.stickerings.get(orbitName)[i2] = !pieceSet.stickerings.get(orbitName)[i2];\n }\n }\n return newPieceSet;\n }\n all() {\n return this.and(this.moves([]));\n }\n move(moveSource) {\n const transformation = transformationForMove(this.def, experimentalIs(moveSource, Move) ? moveSource : Move.fromString(moveSource));\n const newPieceSet = new PieceAnnotation(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n for (let i2 = 0; i2 < orbitDef.numPieces; i2++) {\n if (transformation[orbitName].permutation[i2] !== i2 || transformation[orbitName].orientation[i2] !== 0) {\n newPieceSet.stickerings.get(orbitName)[i2] = true;\n }\n }\n }\n return newPieceSet;\n }\n moves(moveSources) {\n return moveSources.map((moveSource) => this.move(moveSource));\n }\n };\n }\n});\n\n// src/cubing/puzzles/stickerings/cube-stickerings.ts\nfunction cubeAppearance(puzzleLoader, stickering) {\n return __async(this, null, function* () {\n const def = yield puzzleLoader.def();\n const puzzleStickering = new PuzzleStickering(def);\n const m = new StickeringManager(def);\n const LL = () => m.move(\"U\");\n const orUD = () => m.or(m.moves([\"U\", \"D\"]));\n const E = () => m.not(orUD());\n const orLR = () => m.or(m.moves([\"L\", \"R\"]));\n const M = () => m.not(orLR());\n const orFB = () => m.or(m.moves([\"F\", \"B\"]));\n const S = () => m.not(orFB());\n const F2L = () => m.not(LL());\n const centerU = () => m.and([LL(), M(), S()]);\n const edgeFR = () => m.and([m.and(m.moves([\"F\", \"R\"])), m.not(orUD())]);\n const cornerDFR = () => m.and(m.moves([\"D\", \"R\", \"F\"]));\n const slotFR = () => m.or([cornerDFR(), edgeFR()]);\n const CENTERS = () => m.or([m.and([M(), E()]), m.and([M(), S()]), m.and([E(), S()])]);\n const EDGES = () => m.or([\n m.and([M(), orUD(), orFB()]),\n m.and([E(), orLR(), orFB()]),\n m.and([S(), orUD(), orLR()])\n ]);\n const CORNERS = () => m.not(m.or([CENTERS(), EDGES()]));\n const L6E = () => m.or([M(), m.and([LL(), EDGES()])]);\n function dimF2L() {\n puzzleStickering.set(F2L(), PieceStickering.Dim);\n }\n function setPLL() {\n puzzleStickering.set(LL(), PieceStickering.PermuteNonPrimary);\n puzzleStickering.set(centerU(), PieceStickering.Dim);\n }\n function setOLL() {\n puzzleStickering.set(LL(), PieceStickering.IgnoreNonPrimary);\n puzzleStickering.set(centerU(), PieceStickering.Regular);\n }\n function dimOLL() {\n puzzleStickering.set(LL(), PieceStickering.Ignoriented);\n puzzleStickering.set(centerU(), PieceStickering.Dim);\n }\n switch (stickering) {\n case \"full\":\n break;\n case \"PLL\":\n dimF2L();\n setPLL();\n break;\n case \"CLS\":\n dimF2L();\n puzzleStickering.set(m.and(m.moves([\"D\", \"R\", \"F\"])), PieceStickering.Regular);\n puzzleStickering.set(LL(), PieceStickering.Ignoriented);\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.IgnoreNonPrimary);\n break;\n case \"OLL\":\n dimF2L();\n setOLL();\n break;\n case \"COLL\":\n dimF2L();\n setPLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n case \"OCLL\":\n dimF2L();\n dimOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.IgnoreNonPrimary);\n break;\n case \"CLL\":\n dimF2L();\n puzzleStickering.set(m.not(m.and([CORNERS(), LL()])), PieceStickering.Dim);\n break;\n case \"ELL\":\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.Dim);\n puzzleStickering.set(m.and([LL(), EDGES()]), PieceStickering.Regular);\n break;\n case \"ELS\":\n dimF2L();\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n puzzleStickering.set(edgeFR(), PieceStickering.Regular);\n puzzleStickering.set(cornerDFR(), PieceStickering.Ignored);\n break;\n case \"LL\":\n dimF2L();\n break;\n case \"F2L\":\n puzzleStickering.set(LL(), PieceStickering.Ignored);\n break;\n case \"ZBLL\":\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.PermuteNonPrimary);\n puzzleStickering.set(centerU(), PieceStickering.Dim);\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n case \"ZBLS\":\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n break;\n case \"WVLS\":\n case \"VLS\":\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n setOLL();\n break;\n case \"LS\":\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n puzzleStickering.set(LL(), PieceStickering.Ignored);\n puzzleStickering.set(centerU(), PieceStickering.Dim);\n break;\n case \"EO\":\n puzzleStickering.set(CORNERS(), PieceStickering.Ignored);\n puzzleStickering.set(EDGES(), PieceStickering.OrientationWithoutPermutation);\n break;\n case \"CMLL\":\n puzzleStickering.set(F2L(), PieceStickering.Dim);\n puzzleStickering.set(L6E(), PieceStickering.Ignored);\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n case \"L6E\":\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n break;\n case \"L6EO\":\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n puzzleStickering.set(L6E(), PieceStickering.OrientationWithoutPermutation);\n puzzleStickering.set(m.and([CENTERS(), orUD()]), PieceStickering.OrientationStickers);\n break;\n case \"Daisy\":\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(CENTERS(), PieceStickering.Dim);\n puzzleStickering.set(m.and([m.move(\"D\"), CENTERS()]), PieceStickering.Regular);\n puzzleStickering.set(m.and([m.move(\"U\"), EDGES()]), PieceStickering.IgnoreNonPrimary);\n break;\n case \"Cross\":\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(CENTERS(), PieceStickering.Dim);\n puzzleStickering.set(m.and([m.move(\"D\"), CENTERS()]), PieceStickering.Regular);\n puzzleStickering.set(m.and([m.move(\"D\"), EDGES()]), PieceStickering.Regular);\n break;\n case \"2x2x2\":\n puzzleStickering.set(m.or(m.moves([\"U\", \"F\", \"R\"])), PieceStickering.Ignored);\n puzzleStickering.set(m.and([m.or(m.moves([\"U\", \"F\", \"R\"])), CENTERS()]), PieceStickering.Dim);\n break;\n case \"2x2x3\":\n puzzleStickering.set(m.all(), PieceStickering.Dim);\n puzzleStickering.set(m.or(m.moves([\"U\", \"F\", \"R\"])), PieceStickering.Ignored);\n puzzleStickering.set(m.and([m.or(m.moves([\"U\", \"F\", \"R\"])), CENTERS()]), PieceStickering.Dim);\n puzzleStickering.set(m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"R\"])))]), PieceStickering.Regular);\n break;\n case \"Void Cube\":\n puzzleStickering.set(CENTERS(), PieceStickering.Invisible);\n break;\n case \"picture\":\n case \"invisible\":\n puzzleStickering.set(m.all(), PieceStickering.Invisible);\n break;\n case \"centers-only\":\n puzzleStickering.set(m.not(CENTERS()), PieceStickering.Ignored);\n break;\n default:\n console.warn(`Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`);\n puzzleStickering.set(m.and(m.moves([])), PieceStickering.Dim);\n }\n return puzzleStickering.toAppearance();\n });\n}\nfunction cubeStickerings() {\n return __async(this, null, function* () {\n return [\n \"full\",\n \"PLL\",\n \"CLS\",\n \"OLL\",\n \"COLL\",\n \"OCLL\",\n \"ELL\",\n \"ELS\",\n \"LL\",\n \"F2L\",\n \"ZBLL\",\n \"ZBLS\",\n \"WVLS\",\n \"VLS\",\n \"LS\",\n \"EO\",\n \"CMLL\",\n \"L6E\",\n \"L6EO\",\n \"Daisy\",\n \"Cross\",\n \"2x2x2\",\n \"2x2x3\",\n \"Void Cube\",\n \"picture\",\n \"invisible\",\n \"centers-only\"\n ];\n });\n}\nvar init_cube_stickerings = __esm({\n \"src/cubing/puzzles/stickerings/cube-stickerings.ts\"() {\n init_appearance();\n }\n});\n\n// src/cubing/puzzle-geometry/Perm.ts\nfunction zeros(n) {\n if (!zeroCache[n]) {\n const c = Array(n);\n for (let i2 = 0; i2 < n; i2++) {\n c[i2] = 0;\n }\n zeroCache[n] = c;\n }\n return zeroCache[n];\n}\nfunction iota(n) {\n if (!iotaCache[n]) {\n const c = Array(n);\n for (let i2 = 0; i2 < n; i2++) {\n c[i2] = i2;\n }\n iotaCache[n] = c;\n }\n return iotaCache[n];\n}\nfunction identity(n) {\n return new Perm(iota(n));\n}\nfunction factorial(a) {\n let r2 = 1;\n while (a > 1) {\n r2 *= a;\n a--;\n }\n return r2;\n}\nfunction gcd(a, b) {\n if (a > b) {\n const t = a;\n a = b;\n b = t;\n }\n while (a > 0) {\n const m = b % a;\n b = a;\n a = m;\n }\n return b;\n}\nfunction lcm(a, b) {\n return a / gcd(a, b) * b;\n}\nvar zeroCache, iotaCache, Perm;\nvar init_Perm = __esm({\n \"src/cubing/puzzle-geometry/Perm.ts\"() {\n zeroCache = [];\n iotaCache = [];\n Perm = class {\n constructor(a) {\n this.n = a.length;\n this.p = a;\n }\n toString() {\n return \"Perm[\" + this.p.join(\" \") + \"]\";\n }\n mul(p2) {\n const c = Array(this.n);\n for (let i2 = 0; i2 < this.n; i2++) {\n c[i2] = p2.p[this.p[i2]];\n }\n return new Perm(c);\n }\n rmul(p2) {\n const c = Array(this.n);\n for (let i2 = 0; i2 < this.n; i2++) {\n c[i2] = this.p[p2.p[i2]];\n }\n return new Perm(c);\n }\n inv() {\n const c = Array(this.n);\n for (let i2 = 0; i2 < this.n; i2++) {\n c[this.p[i2]] = i2;\n }\n return new Perm(c);\n }\n compareTo(p2) {\n for (let i2 = 0; i2 < this.n; i2++) {\n if (this.p[i2] !== p2.p[i2]) {\n return this.p[i2] - p2.p[i2];\n }\n }\n return 0;\n }\n toGap() {\n const cyc = new Array();\n const seen = new Array(this.n);\n for (let i2 = 0; i2 < this.p.length; i2++) {\n if (seen[i2] || this.p[i2] === i2) {\n continue;\n }\n const incyc = new Array();\n for (let j = i2; !seen[j]; j = this.p[j]) {\n incyc.push(1 + j);\n seen[j] = true;\n }\n cyc.push(\"(\" + incyc.join(\",\") + \")\");\n }\n return cyc.join(\"\");\n }\n order() {\n let r2 = 1;\n const seen = new Array(this.n);\n for (let i2 = 0; i2 < this.p.length; i2++) {\n if (seen[i2] || this.p[i2] === i2) {\n continue;\n }\n let cs = 0;\n for (let j = i2; !seen[j]; j = this.p[j]) {\n cs++;\n seen[j] = true;\n }\n r2 = lcm(r2, cs);\n }\n return r2;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/NullMapper.ts\nvar NullMapper;\nvar init_NullMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/NullMapper.ts\"() {\n NullMapper = class {\n notationToInternal(move) {\n return move;\n }\n notationToExternal(move) {\n return move;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/FTONotationMapper.ts\nvar FTONotationMapper;\nvar init_FTONotationMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/FTONotationMapper.ts\"() {\n init_alg();\n FTONotationMapper = class {\n constructor(child, sw) {\n this.child = child;\n this.sw = sw;\n }\n notationToInternal(move) {\n if (move.family === \"T\" && move.innerLayer === void 0 && move.outerLayer === void 0) {\n return new Move(new QuantumMove(\"FLRv\", move.innerLayer, move.outerLayer), move.amount);\n } else {\n const r2 = this.child.notationToInternal(move);\n return r2;\n }\n }\n notationToExternal(move) {\n let fam = move.family;\n if (fam.length > 0 && fam[fam.length - 1] === \"v\") {\n fam = fam.substring(0, fam.length - 1);\n }\n if (this.sw.spinmatch(fam, \"FLUR\")) {\n return new Move(new QuantumMove(\"T\", move.innerLayer, move.outerLayer), move.amount);\n }\n return this.child.notationToExternal(move);\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/FaceRenamingMapper.ts\nvar FaceRenamingMapper;\nvar init_FaceRenamingMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/FaceRenamingMapper.ts\"() {\n init_alg();\n FaceRenamingMapper = class {\n constructor(internalNames, externalNames) {\n this.internalNames = internalNames;\n this.externalNames = externalNames;\n }\n convertString(grip, a, b) {\n let suffix = \"\";\n if ((grip.endsWith(\"v\") || grip.endsWith(\"v\")) && grip <= \"_\") {\n suffix = grip.slice(grip.length - 1);\n grip = grip.slice(0, grip.length - 1);\n }\n const upper = grip.toUpperCase();\n let isLowerCase = false;\n if (grip !== upper) {\n isLowerCase = true;\n grip = upper;\n }\n grip = b.joinByFaceIndices(a.splitByFaceNames(grip));\n if (isLowerCase) {\n grip = grip.toLowerCase();\n }\n return grip + suffix;\n }\n convert(move, a, b) {\n const grip = move.family;\n const ngrip = this.convertString(grip, a, b);\n if (grip === ngrip) {\n return move;\n } else {\n return new Move(new QuantumMove(ngrip, move.innerLayer, move.outerLayer), move.amount);\n }\n }\n notationToInternal(move) {\n const r2 = this.convert(move, this.externalNames, this.internalNames);\n return r2;\n }\n notationToExternal(move) {\n return this.convert(move, this.internalNames, this.externalNames);\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/MegaminxScramblingNotationMapper.ts\nvar MegaminxScramblingNotationMapper;\nvar init_MegaminxScramblingNotationMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/MegaminxScramblingNotationMapper.ts\"() {\n init_alg();\n MegaminxScramblingNotationMapper = class {\n constructor(child) {\n this.child = child;\n }\n notationToInternal(move) {\n if (move.innerLayer === void 0 && move.outerLayer === void 0) {\n if (Math.abs(move.amount) === 1) {\n if (move.family === \"R++\") {\n return new Move(new QuantumMove(\"L\", 3, 2), -2 * move.amount);\n } else if (move.family === \"R--\") {\n return new Move(new QuantumMove(\"L\", 3, 2), 2 * move.amount);\n } else if (move.family === \"D++\") {\n return new Move(new QuantumMove(\"U\", 3, 2), -2 * move.amount);\n } else if (move.family === \"D--\") {\n return new Move(new QuantumMove(\"U\", 3, 2), 2 * move.amount);\n }\n if (move.family === \"R_PLUSPLUS_\") {\n return new Move(new QuantumMove(\"L\", 3, 2), -2 * move.amount);\n } else if (move.family === \"D_PLUSPLUS_\") {\n return new Move(new QuantumMove(\"U\", 3, 2), -2 * move.amount);\n }\n }\n if (move.family === \"y\") {\n return new Move(\"Uv\", move.amount);\n }\n }\n return this.child.notationToInternal(move);\n }\n notationToExternal(move) {\n if (move.family === \"Uv\") {\n return new Move(new QuantumMove(\"y\", move.innerLayer, move.outerLayer), move.amount);\n }\n if (move.family === \"Dv\") {\n return new Move(\"y\", -move.amount);\n }\n return this.child.notationToExternal(move);\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/NxNxNCubeMapper.ts\nvar NxNxNCubeMapper;\nvar init_NxNxNCubeMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/NxNxNCubeMapper.ts\"() {\n init_alg();\n NxNxNCubeMapper = class {\n constructor(slices) {\n this.slices = slices;\n }\n notationToInternal(move) {\n const grip = move.family;\n if (!move.innerLayer && !move.outerLayer) {\n if (grip === \"x\") {\n move = new Move(\"Rv\", move.amount);\n } else if (grip === \"y\") {\n move = new Move(\"Uv\", move.amount);\n } else if (grip === \"z\") {\n move = new Move(\"Fv\", move.amount);\n }\n if ((this.slices & 1) === 1) {\n if (grip === \"E\") {\n move = new Move(new QuantumMove(\"D\", (this.slices + 1) / 2), move.amount);\n } else if (grip === \"M\") {\n move = new Move(new QuantumMove(\"L\", (this.slices + 1) / 2), move.amount);\n } else if (grip === \"S\") {\n move = new Move(new QuantumMove(\"F\", (this.slices + 1) / 2), move.amount);\n }\n }\n if (this.slices > 2) {\n if (grip === \"e\") {\n move = new Move(new QuantumMove(\"D\", this.slices - 1, 2), move.amount);\n } else if (grip === \"m\") {\n move = new Move(new QuantumMove(\"L\", this.slices - 1, 2), move.amount);\n } else if (grip === \"s\") {\n move = new Move(new QuantumMove(\"F\", this.slices - 1, 2), move.amount);\n }\n }\n }\n return move;\n }\n notationToExternal(move) {\n const grip = move.family;\n if (!move.innerLayer && !move.outerLayer) {\n if (grip === \"Rv\") {\n return new Move(\"x\", move.amount);\n } else if (grip === \"Uv\") {\n return new Move(\"y\", move.amount);\n } else if (grip === \"Fv\") {\n return new Move(\"z\", move.amount);\n } else if (grip === \"Lv\") {\n return new Move(\"x\", -move.amount);\n } else if (grip === \"Dv\") {\n return new Move(\"y\", -move.amount);\n } else if (grip === \"Bv\") {\n return new Move(\"z\", -move.amount);\n }\n }\n return move;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/PyraminxNotationMapper.ts\nvar pyraminxFamilyMap, tetraminxFamilyMap, pyraminxFamilyMapWCA, pyraminxExternalQuantumY, pyraminxInternalQuantumY, PyraminxNotationMapper, TetraminxNotationMapper;\nvar init_PyraminxNotationMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/PyraminxNotationMapper.ts\"() {\n init_alg();\n pyraminxFamilyMap = {\n U: \"frl\",\n L: \"fld\",\n R: \"fdr\",\n B: \"dlr\",\n u: \"FRL\",\n l: \"FLD\",\n r: \"FDR\",\n b: \"DLR\",\n Uv: \"FRLv\",\n Lv: \"FLDv\",\n Rv: \"FDRv\",\n Bv: \"DLRv\",\n D: \"D\",\n F: \"F\",\n BL: \"L\",\n BR: \"R\"\n };\n tetraminxFamilyMap = {\n U: \"FRL\",\n L: \"FLD\",\n R: \"FDR\",\n B: \"DLR\",\n u: \"frl\",\n l: \"fld\",\n r: \"fdr\",\n b: \"dlr\",\n Uv: \"FRLv\",\n Lv: \"FLDv\",\n Rv: \"FDRv\",\n Bv: \"DLRv\",\n D: \"D\",\n F: \"F\",\n BL: \"L\",\n BR: \"R\",\n d: \"d\",\n f: \"f\",\n bl: \"l\",\n br: \"r\"\n };\n pyraminxFamilyMapWCA = {\n U: \"FRL\",\n L: \"FLD\",\n R: \"FDR\",\n B: \"DLR\"\n };\n pyraminxExternalQuantumY = new QuantumMove(\"y\");\n pyraminxInternalQuantumY = new QuantumMove(\"Dv\");\n PyraminxNotationMapper = class {\n constructor(child) {\n this.child = child;\n this.wcaHack = false;\n this.map = pyraminxFamilyMap;\n }\n notationToInternal(move) {\n if (this.wcaHack && move.innerLayer === 2 && move.outerLayer === null) {\n const newFamilyWCA = pyraminxFamilyMapWCA[move.family];\n if (newFamilyWCA) {\n return new Move(new QuantumMove(newFamilyWCA, move.innerLayer, move.outerLayer), move.amount);\n }\n }\n const newFamily = this.map[move.family];\n if (newFamily) {\n return new Move(new QuantumMove(newFamily, move.innerLayer, move.outerLayer), move.amount);\n } else if (pyraminxExternalQuantumY.isIdentical(move.quantum)) {\n return new Move(pyraminxInternalQuantumY, -move.amount);\n } else {\n return null;\n }\n }\n notationToExternal(move) {\n if (this.wcaHack && move.innerLayer === 2 && move.outerLayer === null) {\n for (const [external, internal] of Object.entries(pyraminxFamilyMapWCA)) {\n if (this.child.spinmatch(move.family, internal)) {\n return new Move(new QuantumMove(external, move.innerLayer, move.outerLayer), move.amount);\n }\n }\n }\n for (const [external, internal] of Object.entries(this.map)) {\n if (this.child.spinmatch(move.family, internal)) {\n return new Move(new QuantumMove(external, move.innerLayer, move.outerLayer), move.amount);\n }\n }\n if (pyraminxInternalQuantumY.isIdentical(move.quantum)) {\n return new Move(pyraminxExternalQuantumY, -move.amount);\n } else {\n return null;\n }\n }\n };\n TetraminxNotationMapper = class extends PyraminxNotationMapper {\n constructor(child) {\n super(child);\n this.map = tetraminxFamilyMap;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/SkewbNotationMapper.ts\nvar skewbFamilyMap, skewbExternalQuantumX, skewbInternalQuantumX, skewbExternalQuantumY, skewbInternalQuantumY, skewbExternalQuantumZ, skewbInternalQuantumZ, SkewbNotationMapper;\nvar init_SkewbNotationMapper = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/SkewbNotationMapper.ts\"() {\n init_alg();\n skewbFamilyMap = {\n U: \"UBL\",\n UL: \"ULF\",\n F: \"UFR\",\n UR: \"URB\",\n B: \"DBL\",\n D: \"DFR\",\n L: \"DLF\",\n R: \"DRB\",\n Uv: \"UBLv\",\n ULv: \"ULFv\",\n Fv: \"UFRv\",\n URv: \"URBv\",\n Bv: \"DBLv\",\n Dv: \"DFRv\",\n Lv: \"DLFv\",\n Rv: \"DRBv\"\n };\n skewbExternalQuantumX = new QuantumMove(\"x\");\n skewbInternalQuantumX = new QuantumMove(\"Rv\");\n skewbExternalQuantumY = new QuantumMove(\"y\");\n skewbInternalQuantumY = new QuantumMove(\"Uv\");\n skewbExternalQuantumZ = new QuantumMove(\"z\");\n skewbInternalQuantumZ = new QuantumMove(\"Fv\");\n SkewbNotationMapper = class {\n constructor(child) {\n this.child = child;\n }\n notationToInternal(move) {\n if (move.innerLayer || move.outerLayer) {\n return null;\n }\n const newFamily = skewbFamilyMap[move.family];\n if (newFamily) {\n return new Move(new QuantumMove(newFamily, move.outerLayer, move.innerLayer), move.amount);\n }\n if (skewbExternalQuantumX.isIdentical(move.quantum)) {\n return new Move(skewbInternalQuantumX, move.amount);\n }\n if (skewbExternalQuantumY.isIdentical(move.quantum)) {\n return new Move(skewbInternalQuantumY, move.amount);\n }\n if (skewbExternalQuantumZ.isIdentical(move.quantum)) {\n return new Move(skewbInternalQuantumZ, move.amount);\n }\n return null;\n }\n notationToExternal(move) {\n for (const [external, internal] of Object.entries(skewbFamilyMap)) {\n if (this.child.spinmatch(move.family, internal)) {\n return new Move(new QuantumMove(external, move.innerLayer, move.outerLayer), move.amount);\n }\n }\n if (skewbInternalQuantumX.isIdentical(move.quantum)) {\n return new Move(skewbExternalQuantumX, move.amount);\n }\n if (skewbInternalQuantumY.isIdentical(move.quantum)) {\n return new Move(skewbExternalQuantumY, move.amount);\n }\n if (skewbInternalQuantumZ.isIdentical(move.quantum)) {\n return new Move(skewbExternalQuantumZ, move.amount);\n }\n return null;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/notation-mapping/index.ts\nvar init_notation_mapping = __esm({\n \"src/cubing/puzzle-geometry/notation-mapping/index.ts\"() {\n init_NullMapper();\n init_FTONotationMapper();\n init_FaceRenamingMapper();\n init_MegaminxScramblingNotationMapper();\n init_NxNxNCubeMapper();\n init_PyraminxNotationMapper();\n init_SkewbNotationMapper();\n }\n});\n\n// src/cubing/puzzle-geometry/PermOriSet.ts\nfunction externalName(mapper, moveString) {\n const mv = Move.fromString(moveString);\n const mv2 = mapper.notationToExternal(mv);\n if (mv2 === null || mv === mv2) {\n return moveString;\n }\n return mv2.toString();\n}\nfunction showcanon(g, disp) {\n const n = g.moveops.length;\n if (n > 30) {\n throw new Error(\"Canon info too big for bitmask\");\n }\n const orders = [];\n const commutes = [];\n for (let i2 = 0; i2 < n; i2++) {\n const permA = g.moveops[i2];\n orders.push(permA.order());\n let bits = 0;\n for (let j = 0; j < n; j++) {\n if (j === i2) {\n continue;\n }\n const permB = g.moveops[j];\n if (permA.mul(permB).equal(permB.mul(permA))) {\n bits |= 1 << j;\n }\n }\n commutes.push(bits);\n }\n let curlev = {};\n curlev[0] = 1;\n for (let d2 = 0; d2 < 100; d2++) {\n let sum = 0;\n const nextlev = {};\n let uniq = 0;\n for (const sti in curlev) {\n const st = +sti;\n const cnt = curlev[st];\n sum += cnt;\n uniq++;\n for (let mv = 0; mv < orders.length; mv++) {\n if ((st >> mv & 1) === 0 && (st & commutes[mv] & (1 << mv) - 1) === 0) {\n const nst = st & commutes[mv] | 1 << mv;\n if (nextlev[nst] === void 0) {\n nextlev[nst] = 0;\n }\n nextlev[nst] += (orders[mv] - 1) * cnt;\n }\n }\n }\n disp(\"\" + d2 + \": canonseq \" + sum + \" states \" + uniq);\n curlev = nextlev;\n }\n}\nvar OrbitDef, OrbitsDef, _Orbit, Orbit, TransformationBase, Transformation, VisibleState, DisjointUnion;\nvar init_PermOriSet = __esm({\n \"src/cubing/puzzle-geometry/PermOriSet.ts\"() {\n init_notation_mapping();\n init_Perm();\n init_alg();\n OrbitDef = class {\n constructor(size, mod) {\n this.size = size;\n this.mod = mod;\n }\n reassemblySize() {\n return factorial(this.size) * Math.pow(this.mod, this.size);\n }\n };\n OrbitsDef = class {\n constructor(orbitnames, orbitdefs, solved, movenames, moveops) {\n this.orbitnames = orbitnames;\n this.orbitdefs = orbitdefs;\n this.solved = solved;\n this.movenames = movenames;\n this.moveops = moveops;\n }\n transformToKPuzzle(t) {\n const mp = {};\n for (let j = 0; j < this.orbitnames.length; j++) {\n mp[this.orbitnames[j]] = t.orbits[j].toKpuzzle();\n }\n return mp;\n }\n static transformToKPuzzle(orbitnames, t) {\n const mp = {};\n for (let j = 0; j < orbitnames.length; j++) {\n mp[orbitnames[j]] = t.orbits[j].toKpuzzle();\n }\n return mp;\n }\n toKsolve(name, mapper = new NullMapper()) {\n const result = [];\n result.push(\"Name \" + name);\n result.push(\"\");\n for (let i2 = 0; i2 < this.orbitnames.length; i2++) {\n result.push(\"Set \" + this.orbitnames[i2] + \" \" + this.orbitdefs[i2].size + \" \" + this.orbitdefs[i2].mod);\n }\n result.push(\"\");\n result.push(\"Solved\");\n for (let i2 = 0; i2 < this.orbitnames.length; i2++) {\n this.solved.orbits[i2].appendConciseDefinition(result, this.orbitnames[i2], false);\n }\n result.push(\"End\");\n for (let i2 = 0; i2 < this.movenames.length; i2++) {\n result.push(\"\");\n let name2 = externalName(mapper, this.movenames[i2]);\n let doinv = false;\n if (name2[name2.length - 1] === \"'\") {\n doinv = true;\n name2 = name2.substring(0, name2.length - 1);\n }\n result.push(\"Move \" + name2);\n for (let j = 0; j < this.orbitnames.length; j++) {\n if (doinv) {\n this.moveops[i2].orbits[j].inv().appendConciseDefinition(result, this.orbitnames[j], true);\n } else {\n this.moveops[i2].orbits[j].appendConciseDefinition(result, this.orbitnames[j], true);\n }\n }\n result.push(\"End\");\n }\n return result;\n }\n toKpuzzle() {\n const orbits = {};\n const start = {};\n for (let i2 = 0; i2 < this.orbitnames.length; i2++) {\n orbits[this.orbitnames[i2]] = {\n numPieces: this.orbitdefs[i2].size,\n orientations: this.orbitdefs[i2].mod\n };\n start[this.orbitnames[i2]] = this.solved.orbits[i2].toKpuzzle();\n }\n const moves = {};\n for (let i2 = 0; i2 < this.movenames.length; i2++) {\n moves[this.movenames[i2]] = this.transformToKPuzzle(this.moveops[i2]);\n }\n return { name: \"PG3D\", orbits, startPieces: start, moves };\n }\n optimize() {\n const neworbitnames = [];\n const neworbitdefs = [];\n const newsolved = [];\n const newmoveops = [];\n for (let j = 0; j < this.moveops.length; j++) {\n newmoveops.push([]);\n }\n for (let i2 = 0; i2 < this.orbitdefs.length; i2++) {\n const om = this.orbitdefs[i2].mod;\n const n = this.orbitdefs[i2].size;\n const du = new DisjointUnion(n);\n const changed = new Array(this.orbitdefs[i2].size);\n for (let k = 0; k < n; k++) {\n changed[k] = false;\n }\n for (let j = 0; j < this.moveops.length; j++) {\n for (let k = 0; k < n; k++) {\n if (this.moveops[j].orbits[i2].perm[k] !== k || this.moveops[j].orbits[i2].ori[k] !== 0) {\n changed[k] = true;\n du.union(k, this.moveops[j].orbits[i2].perm[k]);\n }\n }\n }\n let keepori = true;\n if (om > 1) {\n keepori = false;\n const duo = new DisjointUnion(this.orbitdefs[i2].size * om);\n for (let j = 0; j < this.moveops.length; j++) {\n for (let k = 0; k < n; k++) {\n if (this.moveops[j].orbits[i2].perm[k] !== k || this.moveops[j].orbits[i2].ori[k] !== 0) {\n for (let o2 = 0; o2 < om; o2++) {\n duo.union(k * om + o2, this.moveops[j].orbits[i2].perm[k] * om + (o2 + this.moveops[j].orbits[i2].ori[k]) % om);\n }\n }\n }\n }\n for (let j = 0; !keepori && j < n; j++) {\n for (let o2 = 1; o2 < om; o2++) {\n if (duo.find(j * om) === duo.find(j * om + o2)) {\n keepori = true;\n }\n }\n }\n for (let j = 0; !keepori && j < n; j++) {\n for (let k = 0; k < j; k++) {\n if (this.solved.orbits[i2].perm[j] === this.solved.orbits[i2].perm[k]) {\n keepori = true;\n }\n }\n }\n }\n let nontriv = -1;\n let multiple = false;\n for (let j = 0; j < this.orbitdefs[i2].size; j++) {\n if (changed[j]) {\n const h = du.find(j);\n if (nontriv < 0) {\n nontriv = h;\n } else if (nontriv !== h) {\n multiple = true;\n }\n }\n }\n for (let j = 0; j < this.orbitdefs[i2].size; j++) {\n if (!changed[j]) {\n continue;\n }\n const h = du.find(j);\n if (h !== j) {\n continue;\n }\n const no = [];\n const on = [];\n let nv = 0;\n for (let k = 0; k < this.orbitdefs[i2].size; k++) {\n if (du.find(k) === j) {\n no[nv] = k;\n on[k] = nv;\n nv++;\n }\n }\n if (multiple) {\n neworbitnames.push(this.orbitnames[i2] + \"_p\" + j);\n } else {\n neworbitnames.push(this.orbitnames[i2]);\n }\n if (keepori) {\n neworbitdefs.push(new OrbitDef(nv, this.orbitdefs[i2].mod));\n newsolved.push(this.solved.orbits[i2].remapVS(no, nv));\n for (let k = 0; k < this.moveops.length; k++) {\n newmoveops[k].push(this.moveops[k].orbits[i2].remap(no, on, nv));\n }\n } else {\n neworbitdefs.push(new OrbitDef(nv, 1));\n newsolved.push(this.solved.orbits[i2].remapVS(no, nv).killOri());\n for (let k = 0; k < this.moveops.length; k++) {\n newmoveops[k].push(this.moveops[k].orbits[i2].remap(no, on, nv).killOri());\n }\n }\n }\n }\n return new OrbitsDef(neworbitnames, neworbitdefs, new VisibleState(newsolved), this.movenames, newmoveops.map((_5) => new Transformation(_5)));\n }\n scramble(n) {\n const pool = [];\n for (let i2 = 0; i2 < this.moveops.length; i2++) {\n pool[i2] = this.moveops[i2];\n }\n for (let i2 = 0; i2 < pool.length; i2++) {\n const j = Math.floor(Math.random() * pool.length);\n const t = pool[i2];\n pool[i2] = pool[j];\n pool[j] = t;\n }\n if (n < pool.length) {\n n = pool.length;\n }\n for (let i2 = 0; i2 < n; i2++) {\n const ri = Math.floor(Math.random() * pool.length);\n const rj = Math.floor(Math.random() * pool.length);\n const rm = Math.floor(Math.random() * this.moveops.length);\n pool[ri] = pool[ri].mul(pool[rj]).mul(this.moveops[rm]);\n if (Math.random() < 0.1) {\n pool[ri] = pool[ri].mul(this.moveops[rm]);\n }\n }\n let s = pool[0];\n for (let i2 = 1; i2 < pool.length; i2++) {\n s = s.mul(pool[i2]);\n }\n this.solved = this.solved.mul(s);\n }\n reassemblySize() {\n let n = 1;\n for (let i2 = 0; i2 < this.orbitdefs.length; i2++) {\n n *= this.orbitdefs[i2].reassemblySize();\n }\n return n;\n }\n };\n _Orbit = class {\n constructor(perm, ori, orimod) {\n this.perm = perm;\n this.ori = ori;\n this.orimod = orimod;\n }\n static e(n, mod) {\n return new _Orbit(iota(n), zeros(n), mod);\n }\n mul(b) {\n const n = this.perm.length;\n const newPerm = new Array(n);\n if (this.orimod === 1) {\n for (let i2 = 0; i2 < n; i2++) {\n newPerm[i2] = this.perm[b.perm[i2]];\n }\n return new _Orbit(newPerm, this.ori, this.orimod);\n } else {\n const newOri = new Array(n);\n for (let i2 = 0; i2 < n; i2++) {\n newPerm[i2] = this.perm[b.perm[i2]];\n newOri[i2] = (this.ori[b.perm[i2]] + b.ori[i2]) % this.orimod;\n }\n return new _Orbit(newPerm, newOri, this.orimod);\n }\n }\n inv() {\n const n = this.perm.length;\n const newPerm = new Array(n);\n const newOri = new Array(n);\n for (let i2 = 0; i2 < n; i2++) {\n newPerm[this.perm[i2]] = i2;\n newOri[this.perm[i2]] = (this.orimod - this.ori[i2]) % this.orimod;\n }\n return new _Orbit(newPerm, newOri, this.orimod);\n }\n equal(b) {\n const n = this.perm.length;\n for (let i2 = 0; i2 < n; i2++) {\n if (this.perm[i2] !== b.perm[i2] || this.ori[i2] !== b.ori[i2]) {\n return false;\n }\n }\n return true;\n }\n killOri() {\n const n = this.perm.length;\n for (let i2 = 0; i2 < n; i2++) {\n this.ori[i2] = 0;\n }\n this.orimod = 1;\n return this;\n }\n toPerm() {\n const o2 = this.orimod;\n if (o2 === 1) {\n return new Perm(this.perm);\n }\n const n = this.perm.length;\n const newPerm = new Array(n * o2);\n for (let i2 = 0; i2 < n; i2++) {\n for (let j = 0; j < o2; j++) {\n newPerm[i2 * o2 + j] = o2 * this.perm[i2] + (this.ori[i2] + j) % o2;\n }\n }\n return new Perm(newPerm);\n }\n identicalPieces() {\n const done = [];\n const n = this.perm.length;\n const r2 = [];\n for (let i2 = 0; i2 < n; i2++) {\n const v = this.perm[i2];\n if (done[v] === void 0) {\n const s = [i2];\n done[v] = true;\n for (let j = i2 + 1; j < n; j++) {\n if (this.perm[j] === v) {\n s.push(j);\n }\n }\n r2.push(s);\n }\n }\n return r2;\n }\n order() {\n return this.toPerm().order();\n }\n isIdentity() {\n const n = this.perm.length;\n if (this.perm === iota(n) && this.ori === zeros(n)) {\n return true;\n }\n for (let i2 = 0; i2 < n; i2++) {\n if (this.perm[i2] !== i2 || this.ori[i2] !== 0) {\n return false;\n }\n }\n return true;\n }\n zeroOris() {\n const n = this.perm.length;\n if (this.ori === zeros(n)) {\n return true;\n }\n for (let i2 = 0; i2 < n; i2++) {\n if (this.ori[i2] !== 0) {\n return false;\n }\n }\n return true;\n }\n remap(no, on, nv) {\n const newPerm = new Array(nv);\n const newOri = new Array(nv);\n for (let i2 = 0; i2 < nv; i2++) {\n newPerm[i2] = on[this.perm[no[i2]]];\n newOri[i2] = this.ori[no[i2]];\n }\n return new _Orbit(newPerm, newOri, this.orimod);\n }\n remapVS(no, nv) {\n const newPerm = new Array(nv);\n const newOri = new Array(nv);\n let nextNew = 0;\n const reassign = [];\n for (let i2 = 0; i2 < nv; i2++) {\n const ov = this.perm[no[i2]];\n if (reassign[ov] === void 0) {\n reassign[ov] = nextNew++;\n }\n newPerm[i2] = reassign[ov];\n newOri[i2] = this.ori[no[i2]];\n }\n return new _Orbit(newPerm, newOri, this.orimod);\n }\n appendConciseDefinition(result, name, useVS) {\n if (this.isIdentity()) {\n return;\n }\n result.push(name);\n result.push(this.perm.map((_5) => _5 + 1).join(\" \"));\n if (!this.zeroOris()) {\n if (useVS) {\n const newori = new Array(this.ori.length);\n for (let i2 = 0; i2 < newori.length; i2++) {\n newori[this.perm[i2]] = this.ori[i2];\n }\n result.push(newori.join(\" \"));\n } else {\n result.push(this.ori.join(\" \"));\n }\n }\n }\n toKpuzzle() {\n const n = this.perm.length;\n if (this.isIdentity()) {\n if (!_Orbit.kcache[n]) {\n _Orbit.kcache[n] = { permutation: iota(n), orientation: zeros(n) };\n }\n return _Orbit.kcache[n];\n } else {\n return { permutation: this.perm, orientation: this.ori };\n }\n }\n };\n Orbit = _Orbit;\n Orbit.kcache = [];\n TransformationBase = class {\n constructor(orbits) {\n this.orbits = orbits;\n }\n internalMul(b) {\n const newOrbits = [];\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n newOrbits.push(this.orbits[i2].mul(b.orbits[i2]));\n }\n return newOrbits;\n }\n internalInv() {\n const newOrbits = [];\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n newOrbits.push(this.orbits[i2].inv());\n }\n return newOrbits;\n }\n equal(b) {\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n if (!this.orbits[i2].equal(b.orbits[i2])) {\n return false;\n }\n }\n return true;\n }\n killOri() {\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n this.orbits[i2].killOri();\n }\n return this;\n }\n toPerm() {\n const perms = new Array();\n let n = 0;\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n const p = this.orbits[i2].toPerm();\n perms.push(p);\n n += p.n;\n }\n const newPerm = new Array(n);\n n = 0;\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n const p = perms[i2];\n for (let j = 0; j < p.n; j++) {\n newPerm[n + j] = n + p.p[j];\n }\n n += p.n;\n }\n return new Perm(newPerm);\n }\n identicalPieces() {\n const r2 = [];\n let n = 0;\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n const o2 = this.orbits[i2].orimod;\n const s = this.orbits[i2].identicalPieces();\n for (let j = 0; j < s.length; j++) {\n r2.push(s[j].map((_5) => _5 * o2 + n));\n }\n n += o2 * this.orbits[i2].perm.length;\n }\n return r2;\n }\n order() {\n let r2 = 1;\n for (let i2 = 0; i2 < this.orbits.length; i2++) {\n r2 = lcm(r2, this.orbits[i2].order());\n }\n return r2;\n }\n };\n Transformation = class extends TransformationBase {\n constructor(orbits) {\n super(orbits);\n }\n mul(b) {\n return new Transformation(this.internalMul(b));\n }\n mulScalar(n) {\n if (n === 0) {\n return this.e();\n }\n let t = this;\n if (n < 0) {\n t = t.inv();\n n = -n;\n }\n while ((n & 1) === 0) {\n t = t.mul(t);\n n >>= 1;\n }\n if (n === 1) {\n return t;\n }\n let s = t;\n let r2 = this.e();\n while (n > 0) {\n if (n & 1) {\n r2 = r2.mul(s);\n }\n if (n > 1) {\n s = s.mul(s);\n }\n n >>= 1;\n }\n return r2;\n }\n inv() {\n return new Transformation(this.internalInv());\n }\n e() {\n return new Transformation(this.orbits.map((_5) => Orbit.e(_5.perm.length, _5.orimod)));\n }\n };\n VisibleState = class extends TransformationBase {\n constructor(orbits) {\n super(orbits);\n }\n mul(b) {\n return new VisibleState(this.internalMul(b));\n }\n };\n DisjointUnion = class {\n constructor(n) {\n this.n = n;\n this.heads = new Array(n);\n for (let i2 = 0; i2 < n; i2++) {\n this.heads[i2] = i2;\n }\n }\n find(v) {\n let h = this.heads[v];\n if (this.heads[h] === h) {\n return h;\n }\n h = this.find(this.heads[h]);\n this.heads[v] = h;\n return h;\n }\n union(a, b) {\n const ah = this.find(a);\n const bh = this.find(b);\n if (ah < bh) {\n this.heads[bh] = ah;\n } else if (ah > bh) {\n this.heads[ah] = bh;\n }\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/FaceNameSwizzler.ts\nvar FaceNameSwizzler;\nvar init_FaceNameSwizzler = __esm({\n \"src/cubing/puzzle-geometry/FaceNameSwizzler.ts\"() {\n FaceNameSwizzler = class {\n constructor(facenames, gripnames_arg) {\n this.facenames = facenames;\n this.prefixFree = true;\n this.gripnames = [];\n if (gripnames_arg) {\n this.gripnames = gripnames_arg;\n }\n for (let i2 = 0; this.prefixFree && i2 < facenames.length; i2++) {\n for (let j = 0; this.prefixFree && j < facenames.length; j++) {\n if (i2 !== j && facenames[i2].startsWith(facenames[j])) {\n this.prefixFree = false;\n }\n }\n }\n }\n setGripNames(names) {\n this.gripnames = names;\n }\n splitByFaceNames(s) {\n const r2 = [];\n let at = 0;\n while (at < s.length) {\n if (at > 0 && at < s.length && s[at] === \"_\") {\n at++;\n }\n let currentMatch = -1;\n for (let i2 = 0; i2 < this.facenames.length; i2++) {\n if (s.substr(at).startsWith(this.facenames[i2]) && (currentMatch < 0 || this.facenames[i2].length > this.facenames[currentMatch].length)) {\n currentMatch = i2;\n }\n }\n if (currentMatch >= 0) {\n r2.push(currentMatch);\n at += this.facenames[currentMatch].length;\n } else {\n throw new Error(\"Could not split \" + s + \" into face names.\");\n }\n }\n return r2;\n }\n joinByFaceIndices(list) {\n let sep = \"\";\n const r2 = [];\n for (let i2 = 0; i2 < list.length; i2++) {\n r2.push(sep);\n r2.push(this.facenames[list[i2]]);\n if (!this.prefixFree) {\n sep = \"_\";\n }\n }\n return r2.join(\"\");\n }\n spinmatch(userinput, longname) {\n if (userinput === longname) {\n return true;\n }\n try {\n const e1 = this.splitByFaceNames(userinput);\n const e2 = this.splitByFaceNames(longname);\n if (e1.length !== e2.length && e1.length < 3) {\n return false;\n }\n for (let i2 = 0; i2 < e1.length; i2++) {\n for (let j = 0; j < i2; j++) {\n if (e1[i2] === e1[j]) {\n return false;\n }\n }\n let found = false;\n for (let j = 0; j < e2.length; j++) {\n if (e1[i2] === e2[j]) {\n found = true;\n break;\n }\n }\n if (!found) {\n return false;\n }\n }\n return true;\n } catch (e) {\n return false;\n }\n }\n unswizzle(s) {\n if ((s.endsWith(\"v\") || s.endsWith(\"w\")) && s[0] <= \"Z\") {\n s = s.slice(0, s.length - 1);\n }\n const upperCaseGrip = s.toUpperCase();\n for (let i2 = 0; i2 < this.gripnames.length; i2++) {\n const g = this.gripnames[i2];\n if (this.spinmatch(upperCaseGrip, g)) {\n return g;\n }\n }\n return s;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/PGPuzzles.ts\nvar PGPuzzles;\nvar init_PGPuzzles = __esm({\n \"src/cubing/puzzle-geometry/PGPuzzles.ts\"() {\n PGPuzzles = {\n \"2x2x2\": \"c f 0\",\n \"3x3x3\": \"c f 0.333333333333333\",\n \"4x4x4\": \"c f 0.5 f 0\",\n \"5x5x5\": \"c f 0.6 f 0.2\",\n \"6x6x6\": \"c f 0.666666666666667 f 0.333333333333333 f 0\",\n \"7x7x7\": \"c f 0.714285714285714 f 0.428571428571429 f 0.142857142857143\",\n \"8x8x8\": \"c f 0.75 f 0.5 f 0.25 f 0\",\n \"9x9x9\": \"c f 0.777777777777778 f 0.555555555555556 f 0.333333333333333 f 0.111111111111111\",\n \"10x10x10\": \"c f 0.8 f 0.6 f 0.4 f 0.2 f 0\",\n \"11x11x11\": \"c f 0.818181818181818 f 0.636363636363636 f 0.454545454545455 f 0.272727272727273 f 0.0909090909090909\",\n \"12x12x12\": \"c f 0.833333333333333 f 0.666666666666667 f 0.5 f 0.333333333333333 f 0.166666666666667 f 0\",\n \"13x13x13\": \"c f 0.846153846153846 f 0.692307692307692 f 0.538461538461538 f 0.384615384615385 f 0.230769230769231 f 0.0769230769230769\",\n \"20x20x20\": \"c f 0 f .1 f .2 f .3 f .4 f .5 f .6 f .7 f .8 f .9\",\n \"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\",\n \"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\",\n \"skewb\": \"c v 0\",\n \"master skewb\": \"c v 0.275\",\n \"professor skewb\": \"c v 0 v 0.38\",\n \"compy cube\": \"c v 0.915641442663986\",\n \"helicopter\": \"c e 0.707106781186547\",\n \"curvy copter\": \"c e 0.83\",\n \"dino\": \"c v 0.577350269189626\",\n \"little chop\": \"c e 0\",\n \"pyramorphix\": \"t e 0\",\n \"mastermorphix\": \"t e 0.346184634065199\",\n \"pyraminx\": \"t v 0.333333333333333 v 1.66666666666667\",\n \"tetraminx\": \"t v 0.333333333333333\",\n \"master pyraminx\": \"t v 0 v 1 v 2\",\n \"master tetraminx\": \"t v 0 v 1\",\n \"professor pyraminx\": \"t v -0.2 v 0.6 v 1.4 v 2.2\",\n \"professor tetraminx\": \"t v -0.2 v 0.6 v 1.4\",\n \"Jing pyraminx\": \"t f 0\",\n \"master pyramorphix\": \"t e 0.866025403784437\",\n \"megaminx\": \"d f 0.7\",\n \"gigaminx\": \"d f 0.64 f 0.82\",\n \"teraminx\": \"d f 0.64 f 0.76 f 0.88\",\n \"petaminx\": \"d f 0.64 f 0.73 f 0.82 f 0.91\",\n \"examinx\": \"d f 0.64 f 0.712 f 0.784 f 0.856 f 0.928\",\n \"zetaminx\": \"d f 0.64 f 0.7 f 0.76 f 0.82 f 0.88 f 0.94\",\n \"yottaminx\": \"d f 0.64 f 0.6914 f 0.7429 f 0.7943 f 0.8457 f 0.8971 f 0.9486\",\n \"pentultimate\": \"d f 0\",\n \"master pentultimate\": \"d f 0.1\",\n \"elite pentultimate\": \"d f 0 f 0.145905\",\n \"starminx\": \"d v 0.937962370425399\",\n \"starminx 2\": \"d f 0.23606797749979\",\n \"pyraminx crystal\": \"d f 0.447213595499989\",\n \"chopasaurus\": \"d v 0\",\n \"big chop\": \"d e 0\",\n \"skewb diamond\": \"o f 0\",\n \"FTO\": \"o f 0.333333333333333\",\n \"master FTO\": \"o f 0.5 f 0\",\n \"Christopher's jewel\": \"o v 0.577350269189626\",\n \"octastar\": \"o e 0\",\n \"Trajber's octahedron\": \"o v 0.433012701892219\",\n \"radio chop\": \"i f 0\",\n \"icosamate\": \"i v 0\",\n \"icosahedron 2\": \"i v 0.18759247376021\",\n \"icosahedron 3\": \"i v 0.18759247376021 e 0\",\n \"icosahedron static faces\": \"i v 0.84\",\n \"icosahedron moving faces\": \"i v 0.73\",\n \"Eitan's star\": \"i f 0.61803398874989\",\n \"2x2x2 + dino\": \"c f 0 v 0.577350269189626\",\n \"2x2x2 + little chop\": \"c f 0 e 0\",\n \"dino + little chop\": \"c v 0.577350269189626 e 0\",\n \"2x2x2 + dino + little chop\": \"c f 0 v 0.577350269189626 e 0\",\n \"megaminx + chopasaurus\": \"d f 0.61803398875 v 0\",\n \"starminx combo\": \"d f 0.23606797749979 v 0.937962370425399\"\n };\n }\n});\n\n// src/cubing/puzzle-geometry/Quat.ts\nfunction expandfaces(rots, faces) {\n const nfaces = [];\n for (let i2 = 0; i2 < rots.length; i2++) {\n for (let k = 0; k < faces.length; k++) {\n const face = faces[k];\n const nface = [];\n for (let j = 0; j < face.length; j++) {\n nface.push(face[j].rotateplane(rots[i2]));\n }\n nfaces.push(nface);\n }\n }\n return nfaces;\n}\nfunction centermassface(face) {\n let s = new Quat(0, 0, 0, 0);\n for (let i2 = 0; i2 < face.length; i2++) {\n s = s.sum(face[i2]);\n }\n return s.smul(1 / face.length);\n}\nfunction solvethreeplanes(p1, p2, p3, planes) {\n const p = planes[p1].intersect3(planes[p2], planes[p3]);\n if (!p) {\n return p;\n }\n for (let i2 = 0; i2 < planes.length; i2++) {\n if (i2 !== p1 && i2 !== p2 && i2 !== p3) {\n const dt = planes[i2].b * p.b + planes[i2].c * p.c + planes[i2].d * p.d;\n if (planes[i2].a > 0 && dt > planes[i2].a || planes[i2].a < 0 && dt < planes[i2].a) {\n return false;\n }\n }\n }\n return p;\n}\nvar eps, FaceTree, Quat;\nvar init_Quat = __esm({\n \"src/cubing/puzzle-geometry/Quat.ts\"() {\n eps = 1e-9;\n FaceTree = class {\n constructor(face, left, right) {\n this.face = face;\n this.left = left;\n this.right = right;\n }\n split(q) {\n var _a, _b;\n const t = q.cutface(this.face);\n if (t !== null) {\n if (this.left === void 0) {\n this.left = new FaceTree(t[0]);\n this.right = new FaceTree(t[1]);\n } else {\n this.left = (_a = this.left) == null ? void 0 : _a.split(q);\n this.right = (_b = this.right) == null ? void 0 : _b.split(q);\n }\n }\n return this;\n }\n collect(arr, leftfirst) {\n var _a, _b, _c, _d;\n if (this.left === void 0) {\n arr.push(this.face);\n } else if (leftfirst) {\n (_a = this.left) == null ? void 0 : _a.collect(arr, false);\n (_b = this.right) == null ? void 0 : _b.collect(arr, true);\n } else {\n (_c = this.right) == null ? void 0 : _c.collect(arr, false);\n (_d = this.left) == null ? void 0 : _d.collect(arr, true);\n }\n return arr;\n }\n };\n Quat = class {\n constructor(a, b, c, d2) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d2;\n }\n mul(q) {\n return new Quat(this.a * q.a - this.b * q.b - this.c * q.c - this.d * q.d, this.a * q.b + this.b * q.a + this.c * q.d - this.d * q.c, this.a * q.c - this.b * q.d + this.c * q.a + this.d * q.b, this.a * q.d + this.b * q.c - this.c * q.b + this.d * q.a);\n }\n toString() {\n return \"Q[\" + this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d + \"]\";\n }\n dist(q) {\n return Math.hypot(this.a - q.a, this.b - q.b, this.c - q.c, this.d - q.d);\n }\n len() {\n return Math.hypot(this.a, this.b, this.c, this.d);\n }\n cross(q) {\n return new Quat(0, this.c * q.d - this.d * q.c, this.d * q.b - this.b * q.d, this.b * q.c - this.c * q.b);\n }\n dot(q) {\n return this.b * q.b + this.c * q.c + this.d * q.d;\n }\n normalize() {\n const d2 = Math.sqrt(this.dot(this));\n return new Quat(this.a / d2, this.b / d2, this.c / d2, this.d / d2);\n }\n makenormal() {\n return new Quat(0, this.b, this.c, this.d).normalize();\n }\n normalizeplane() {\n const d2 = Math.hypot(this.b, this.c, this.d);\n return new Quat(this.a / d2, this.b / d2, this.c / d2, this.d / d2);\n }\n smul(m) {\n return new Quat(this.a * m, this.b * m, this.c * m, this.d * m);\n }\n sum(q) {\n return new Quat(this.a + q.a, this.b + q.b, this.c + q.c, this.d + q.d);\n }\n sub(q) {\n return new Quat(this.a - q.a, this.b - q.b, this.c - q.c, this.d - q.d);\n }\n angle() {\n return 2 * Math.acos(this.a);\n }\n invrot() {\n return new Quat(this.a, -this.b, -this.c, -this.d);\n }\n det3x3(a00, a01, a02, a10, a11, a12, a20, a21, a22) {\n return a00 * (a11 * a22 - a12 * a21) + a01 * (a12 * a20 - a10 * a22) + a02 * (a10 * a21 - a11 * a20);\n }\n rotateplane(q) {\n const t = q.mul(new Quat(0, this.b, this.c, this.d)).mul(q.invrot());\n t.a = this.a;\n return t;\n }\n orthogonal() {\n const ab = Math.abs(this.b);\n const ac = Math.abs(this.c);\n const ad = Math.abs(this.d);\n if (ab < ac && ab < ad) {\n return this.cross(new Quat(0, 1, 0, 0)).normalize();\n } else if (ac < ab && ac < ad) {\n return this.cross(new Quat(0, 0, 1, 0)).normalize();\n } else {\n return this.cross(new Quat(0, 0, 0, 1)).normalize();\n }\n }\n pointrotation(b) {\n const a = this.normalize();\n b = b.normalize();\n if (a.sub(b).len() < eps) {\n return new Quat(1, 0, 0, 0);\n }\n let h = a.sum(b);\n if (h.len() < eps) {\n h = h.orthogonal();\n } else {\n h = h.normalize();\n }\n const r2 = a.cross(h);\n r2.a = a.dot(h);\n return r2;\n }\n unproject(b) {\n return this.sum(b.smul(-this.dot(b) / (this.len() * b.len())));\n }\n rotatepoint(q) {\n return q.mul(this).mul(q.invrot());\n }\n rotateface(face) {\n return face.map((_5) => _5.rotatepoint(this));\n }\n rotatecubie(cubie) {\n return cubie.map((_5) => this.rotateface(_5));\n }\n intersect3(p2, p3) {\n const det = this.det3x3(this.b, this.c, this.d, p2.b, p2.c, p2.d, p3.b, p3.c, p3.d);\n if (Math.abs(det) < eps) {\n return false;\n }\n return new Quat(0, this.det3x3(this.a, this.c, this.d, p2.a, p2.c, p2.d, p3.a, p3.c, p3.d) / det, this.det3x3(this.b, this.a, this.d, p2.b, p2.a, p2.d, p3.b, p3.a, p3.d) / det, this.det3x3(this.b, this.c, this.a, p2.b, p2.c, p2.a, p3.b, p3.c, p3.a) / det);\n }\n side(x) {\n if (x > eps) {\n return 1;\n }\n if (x < -eps) {\n return -1;\n }\n return 0;\n }\n cutface(face) {\n const d2 = this.a;\n let seen = 0;\n let r2 = null;\n for (let i2 = 0; i2 < face.length; i2++) {\n seen |= 1 << this.side(face[i2].dot(this) - d2) + 1;\n }\n if ((seen & 5) === 5) {\n r2 = [];\n const inout = face.map((_5) => this.side(_5.dot(this) - d2));\n for (let s = -1; s <= 1; s += 2) {\n const nface = [];\n for (let k = 0; k < face.length; k++) {\n if (inout[k] === s || inout[k] === 0) {\n nface.push(face[k]);\n }\n const kk = (k + 1) % face.length;\n if (inout[k] + inout[kk] === 0 && inout[k] !== 0) {\n const vk = face[k].dot(this) - d2;\n const vkk = face[kk].dot(this) - d2;\n const r3 = vk / (vk - vkk);\n const pt = face[k].smul(1 - r3).sum(face[kk].smul(r3));\n nface.push(pt);\n }\n }\n r2.push(nface);\n }\n }\n return r2;\n }\n cutfaces(faces) {\n const nfaces = [];\n for (let j = 0; j < faces.length; j++) {\n const face = faces[j];\n const t = this.cutface(face);\n if (t) {\n nfaces.push(t[0]);\n nfaces.push(t[1]);\n } else {\n nfaces.push(face);\n }\n }\n return nfaces;\n }\n faceside(face) {\n const d2 = this.a;\n for (let i2 = 0; i2 < face.length; i2++) {\n const s = this.side(face[i2].dot(this) - d2);\n if (s !== 0) {\n return s;\n }\n }\n throw new Error(\"Could not determine side of plane in faceside\");\n }\n sameplane(p) {\n const a = this.normalize();\n const b = p.normalize();\n return a.dist(b) < eps || a.dist(b.smul(-1)) < eps;\n }\n makecut(r2) {\n return new Quat(r2, this.b, this.c, this.d);\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/PlatonicGenerator.ts\nfunction cube() {\n const s5 = Math.sqrt(0.5);\n return [new Quat(s5, s5, 0, 0), new Quat(s5, 0, s5, 0)];\n}\nfunction tetrahedron() {\n return [new Quat(0.5, 0.5, 0.5, 0.5), new Quat(0.5, 0.5, 0.5, -0.5)];\n}\nfunction dodecahedron() {\n const d36 = 2 * Math.PI / 10;\n let dx = 0.5 + 0.3 * Math.sqrt(5);\n let dy = 0.5 + 0.1 * Math.sqrt(5);\n const dd = Math.sqrt(dx * dx + dy * dy);\n dx /= dd;\n dy /= dd;\n return [\n new Quat(Math.cos(d36), dx * Math.sin(d36), dy * Math.sin(d36), 0),\n new Quat(0.5, 0.5, 0.5, 0.5)\n ];\n}\nfunction icosahedron() {\n let dx = 1 / 6 + Math.sqrt(5) / 6;\n let dy = 2 / 3 + Math.sqrt(5) / 3;\n const dd = Math.sqrt(dx * dx + dy * dy);\n dx /= dd;\n dy /= dd;\n const ang = 2 * Math.PI / 6;\n return [\n new Quat(Math.cos(ang), dx * Math.sin(ang), dy * Math.sin(ang), 0),\n new Quat(Math.cos(ang), -dx * Math.sin(ang), dy * Math.sin(ang), 0)\n ];\n}\nfunction octahedron() {\n const s5 = Math.sqrt(0.5);\n return [new Quat(0.5, 0.5, 0.5, 0.5), new Quat(s5, 0, 0, s5)];\n}\nfunction closure(g) {\n const q = [new Quat(1, 0, 0, 0)];\n for (let i2 = 0; i2 < q.length; i2++) {\n for (let j = 0; j < g.length; j++) {\n const ns = g[j].mul(q[i2]);\n const negns = ns.smul(-1);\n let wasseen = false;\n for (let k = 0; k < q.length; k++) {\n if (ns.dist(q[k]) < eps2 || negns.dist(q[k]) < eps2) {\n wasseen = true;\n break;\n }\n }\n if (!wasseen) {\n q.push(ns);\n }\n }\n }\n return q;\n}\nfunction uniqueplanes(p, g) {\n const planes = [];\n const planerot = [];\n for (let i2 = 0; i2 < g.length; i2++) {\n const p2 = p.rotateplane(g[i2]);\n let wasseen = false;\n for (let j = 0; j < planes.length; j++) {\n if (p2.dist(planes[j]) < eps2) {\n wasseen = true;\n break;\n }\n }\n if (!wasseen) {\n planes.push(p2);\n planerot.push(g[i2]);\n }\n }\n return planerot;\n}\nfunction getface(planes) {\n const face = [];\n for (let i2 = 1; i2 < planes.length; i2++) {\n for (let j = i2 + 1; j < planes.length; j++) {\n const p = solvethreeplanes(0, i2, j, planes);\n if (p) {\n let wasseen = false;\n for (let k = 0; k < face.length; k++) {\n if (p.dist(face[k]) < eps2) {\n wasseen = true;\n break;\n }\n }\n if (!wasseen) {\n face.push(p);\n }\n }\n }\n }\n for (; ; ) {\n let changed = false;\n for (let i2 = 0; i2 < face.length; i2++) {\n const j = (i2 + 1) % face.length;\n if (planes[0].dot(face[i2].cross(face[j])) < 0) {\n const t = face[i2];\n face[i2] = face[j];\n face[j] = t;\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\n }\n return face;\n}\nvar eps2;\nvar init_PlatonicGenerator = __esm({\n \"src/cubing/puzzle-geometry/PlatonicGenerator.ts\"() {\n init_Quat();\n eps2 = 1e-9;\n }\n});\n\n// src/cubing/puzzle-geometry/PuzzleGeometry.ts\nfunction useNewFaceNames(use) {\n NEW_FACE_NAMES = use;\n}\nfunction defaultnets() {\n return {\n 4: [[\"F\", \"D\", \"L\", \"R\"]],\n 6: [\n [\"F\", \"D\", \"L\", \"U\", \"R\"],\n [\"R\", \"F\", \"\", \"B\", \"\"]\n ],\n 8: [\n [\"F\", \"D\", \"L\", \"R\"],\n [\"D\", \"F\", \"BR\", \"\"],\n [\"BR\", \"D\", \"\", \"BB\"],\n [\"BB\", \"BR\", \"U\", \"BL\"]\n ],\n 12: [\n [\"U\", \"F\", \"\", \"\", \"\", \"\"],\n [\"F\", \"U\", \"R\", \"C\", \"A\", \"L\"],\n [\"R\", \"F\", \"\", \"\", \"E\", \"\"],\n [\"E\", \"R\", \"\", \"BF\", \"\", \"\"],\n [\"BF\", \"E\", \"BR\", \"BL\", \"I\", \"D\"]\n ],\n 20: [\n [\"R\", \"C\", \"F\", \"E\"],\n [\"F\", \"R\", \"L\", \"U\"],\n [\"L\", \"F\", \"A\", \"\"],\n [\"E\", \"R\", \"G\", \"I\"],\n [\"I\", \"E\", \"S\", \"H\"],\n [\"S\", \"I\", \"J\", \"B\"],\n [\"B\", \"S\", \"K\", \"D\"],\n [\"K\", \"B\", \"M\", \"O\"],\n [\"O\", \"K\", \"P\", \"N\"],\n [\"P\", \"O\", \"Q\", \"\"]\n ]\n };\n}\nfunction defaultcolors() {\n return {\n 4: { F: \"#00ff00\", D: \"#ffff00\", L: \"#ff0000\", R: \"#0000ff\" },\n 6: {\n U: \"#ffffff\",\n F: \"#00ff00\",\n R: \"#ff0000\",\n D: \"#ffff00\",\n B: \"#0000ff\",\n L: \"#ff8000\"\n },\n 8: {\n U: \"#ffffff\",\n F: \"#ff0000\",\n R: \"#00bb00\",\n D: \"#ffff00\",\n BB: \"#1122ff\",\n L: \"#9524c5\",\n BL: \"#ff8800\",\n BR: \"#aaaaaa\"\n },\n 12: {\n U: \"#ffffff\",\n F: \"#006633\",\n R: \"#ff0000\",\n C: \"#ffffd0\",\n A: \"#3399ff\",\n L: \"#660099\",\n E: \"#ff66cc\",\n BF: \"#99ff00\",\n BR: \"#0000ff\",\n BL: \"#ffff00\",\n I: \"#ff6633\",\n D: \"#999999\"\n },\n 20: {\n R: \"#db69f0\",\n C: \"#178fde\",\n F: \"#23238b\",\n E: \"#9cc726\",\n L: \"#2c212d\",\n U: \"#177fa7\",\n A: \"#e0de7f\",\n G: \"#2b57c0\",\n I: \"#41126b\",\n S: \"#4b8c28\",\n H: \"#7c098d\",\n J: \"#7fe7b4\",\n B: \"#85fb74\",\n K: \"#3f4bc3\",\n D: \"#0ff555\",\n M: \"#f1c2c8\",\n O: \"#58d340\",\n P: \"#c514f2\",\n N: \"#14494e\",\n Q: \"#8b1be1\"\n }\n };\n}\nfunction defaultfaceorders() {\n return {\n 4: [\"F\", \"D\", \"L\", \"R\"],\n 6: [\"U\", \"D\", \"F\", \"B\", \"L\", \"R\"],\n 8: [\"F\", \"BB\", \"D\", \"U\", \"BR\", \"L\", \"R\", \"BL\"],\n 12: [\"L\", \"E\", \"F\", \"BF\", \"R\", \"I\", \"U\", \"D\", \"BR\", \"A\", \"BL\", \"C\"],\n 20: [\n \"L\",\n \"S\",\n \"E\",\n \"O\",\n \"F\",\n \"B\",\n \"I\",\n \"P\",\n \"R\",\n \"K\",\n \"U\",\n \"D\",\n \"J\",\n \"A\",\n \"Q\",\n \"H\",\n \"G\",\n \"N\",\n \"M\",\n \"C\"\n ]\n };\n}\nfunction defaultOrientations() {\n return {\n 4: [\"FLR\", [0, 1, 0], \"F\", [0, 0, 1]],\n 6: [\"U\", [0, 1, 0], \"F\", [0, 0, 1]],\n 8: [\"U\", [0, 1, 0], \"F\", [0, 0, 1]],\n 12: [\"U\", [0, 1, 0], \"F\", [0, 0, 1]],\n 20: [\"GUQMJ\", [0, 1, 0], \"F\", [0, 0, 1]]\n };\n}\nfunction findelement(a, p) {\n for (let i2 = 0; i2 < a.length; i2++) {\n if (a[i2][0].dist(p) < eps3) {\n return i2;\n }\n }\n throw new Error(\"Element not found\");\n}\nfunction getpuzzles() {\n return PGPuzzles;\n}\nfunction getpuzzle(puzzleName) {\n return PGPuzzles[puzzleName];\n}\nfunction parsedesc(s) {\n const a = s.split(/ /).filter(Boolean);\n if (a.length % 2 === 0) {\n return false;\n }\n if (a[0] !== \"o\" && a[0] !== \"c\" && a[0] !== \"i\" && a[0] !== \"d\" && a[0] !== \"t\") {\n return false;\n }\n const r2 = [];\n for (let i2 = 1; i2 < a.length; i2 += 2) {\n if (a[i2] !== \"f\" && a[i2] !== \"v\" && a[i2] !== \"e\") {\n return false;\n }\n r2.push([a[i2], a[i2 + 1]]);\n }\n return [a[0], r2];\n}\nfunction getPuzzleGeometryByDesc(desc, options = []) {\n const [shape, cuts] = parsedesc(desc);\n const pg = new PuzzleGeometry(shape, cuts, [\"allmoves\", \"true\"].concat(options));\n pg.allstickers();\n pg.genperms();\n return pg;\n}\nfunction getPuzzleGeometryByName(puzzleName, options = []) {\n return getPuzzleGeometryByDesc(PGPuzzles[puzzleName], options);\n}\nfunction getmovename(geo, bits, slices) {\n let inverted = false;\n if (slices - bits[1] < bits[0]) {\n geo = [geo[2], geo[3], geo[0], geo[1]];\n bits = [slices - bits[1], slices - bits[0]];\n inverted = true;\n }\n let movenameFamily = geo[0];\n let movenamePrefix = \"\";\n if (bits[0] === 0 && bits[1] === slices) {\n movenameFamily = movenameFamily + \"v\";\n } else if (bits[0] === bits[1]) {\n if (bits[1] > 0) {\n movenamePrefix = String(bits[1] + 1);\n }\n } else if (bits[0] === 0) {\n movenameFamily = movenameFamily.toLowerCase();\n if (bits[1] > 1) {\n movenamePrefix = String(bits[1] + 1);\n }\n } else {\n throw \"We only support slice and outer block moves right now. \" + bits;\n }\n return [movenamePrefix + movenameFamily, inverted];\n}\nfunction splitByFaceNames(s, facenames) {\n const r2 = [];\n let at = 0;\n while (at < s.length) {\n if (at > 0 && at < s.length && s[at] === \"_\") {\n at++;\n }\n let currentMatch = \"\";\n for (let i2 = 0; i2 < facenames.length; i2++) {\n if (s.substr(at).startsWith(facenames[i2][1]) && facenames[i2][1].length > currentMatch.length) {\n currentMatch = facenames[i2][1];\n }\n }\n if (currentMatch !== \"\") {\n r2.push(currentMatch);\n at += currentMatch.length;\n } else {\n throw new Error(\"Could not split \" + s + \" into face names.\");\n }\n }\n return r2;\n}\nfunction toCoords(q, maxdist) {\n return [q.b / maxdist, -q.c / maxdist, q.d / maxdist];\n}\nfunction toFaceCoords(q, maxdist) {\n const r2 = [];\n const n = q.length;\n for (let i2 = 0; i2 < n; i2++) {\n r2[n - i2 - 1] = toCoords(q[i2], maxdist);\n }\n return r2;\n}\nfunction trimEdges(face, tr) {\n const r2 = [];\n for (let iter = 1; iter < 10; iter++) {\n for (let i2 = 0; i2 < face.length; i2++) {\n const pi = (i2 + face.length - 1) % face.length;\n const ni = (i2 + 1) % face.length;\n const A = face[pi].sub(face[i2]).normalize();\n const B = face[ni].sub(face[i2]).normalize();\n const d2 = A.dot(B);\n const m = tr / Math.sqrt(1 - d2 * d2);\n r2[i2] = face[i2].sum(A.sum(B).smul(m));\n }\n let good = true;\n for (let i2 = 0; good && i2 < r2.length; i2++) {\n const pi = (i2 + face.length - 1) % face.length;\n const ni = (i2 + 1) % face.length;\n if (r2[pi].sub(r2[i2]).cross(r2[ni].sub(r2[i2])).dot(r2[i2]) >= 0) {\n good = false;\n }\n }\n if (good) {\n return r2;\n }\n tr /= 2;\n }\n return face;\n}\nvar DEFAULT_COLOR_FRACTION, NEW_FACE_NAMES, eps3, copyright, permissivieMoveParsing, PuzzleGeometry, PGNotation;\nvar init_PuzzleGeometry = __esm({\n \"src/cubing/puzzle-geometry/PuzzleGeometry.ts\"() {\n init_alg();\n init_FaceNameSwizzler();\n init_notation_mapping();\n init_Perm();\n init_PermOriSet();\n init_PGPuzzles();\n init_PlatonicGenerator();\n init_Quat();\n DEFAULT_COLOR_FRACTION = 0.77;\n NEW_FACE_NAMES = true;\n eps3 = 1e-9;\n copyright = \"PuzzleGeometry 0.1 Copyright 2018 Tomas Rokicki.\";\n permissivieMoveParsing = false;\n PuzzleGeometry = class {\n constructor(shape, cuts, optionlist) {\n this.args = \"\";\n this.cmovesbyslice = [];\n this.verbose = 0;\n this.allmoves = false;\n this.cornersets = true;\n this.centersets = true;\n this.edgesets = true;\n this.omitsets = [];\n this.graycorners = false;\n this.graycenters = false;\n this.grayedges = false;\n this.killorientation = false;\n this.optimize = false;\n this.scramble = 0;\n this.fixPiece = \"\";\n this.orientCenters = false;\n this.duplicatedFaces = [];\n this.duplicatedCubies = [];\n this.fixedCubie = -1;\n this.net = [];\n this.colors = [];\n this.faceorder = [];\n this.faceprecedence = [];\n this.notationMapper = new NullMapper();\n this.addNotationMapper = \"\";\n this.setReidOrder = false;\n function asstructured(v) {\n if (typeof v === \"string\") {\n return JSON.parse(v);\n }\n return v;\n }\n function asboolean(v) {\n if (typeof v === \"string\") {\n if (v === \"false\") {\n return false;\n }\n return true;\n } else {\n return v ? true : false;\n }\n }\n if (optionlist !== void 0) {\n if (optionlist.length % 2 !== 0) {\n throw new Error(\"Odd length in option list?\");\n }\n for (let i2 = 0; i2 < optionlist.length; i2 += 2) {\n if (optionlist[i2] === \"verbose\") {\n this.verbose++;\n } else if (optionlist[i2] === \"quiet\") {\n this.verbose = 0;\n } else if (optionlist[i2] === \"allmoves\") {\n this.allmoves = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"outerblockmoves\") {\n this.outerblockmoves = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"vertexmoves\") {\n this.vertexmoves = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"rotations\") {\n this.addrotations = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"cornersets\") {\n this.cornersets = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"centersets\") {\n this.centersets = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"edgesets\") {\n this.edgesets = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"omit\") {\n this.omitsets = optionlist[i2 + 1];\n } else if (optionlist[i2] === \"graycorners\") {\n this.graycorners = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"graycenters\") {\n this.graycenters = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"grayedges\") {\n this.grayedges = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"movelist\") {\n this.movelist = asstructured(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"killorientation\") {\n this.killorientation = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"optimize\") {\n this.optimize = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"scramble\") {\n this.scramble = optionlist[i2 + 1];\n } else if (optionlist[i2] === \"fix\") {\n this.fixPiece = optionlist[i2 + 1];\n } else if (optionlist[i2] === \"orientcenters\") {\n this.orientCenters = asboolean(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"puzzleorientation\") {\n this.puzzleOrientation = asstructured(optionlist[i2 + 1]);\n } else if (optionlist[i2] === \"puzzleorientations\") {\n this.puzzleOrientations = asstructured(optionlist[i2 + 1]);\n } else {\n throw new Error(\"Bad option while processing option list \" + optionlist[i2]);\n }\n }\n }\n this.args = shape + \" \" + cuts.map((_5) => _5.join(\" \")).join(\" \");\n if (optionlist) {\n this.args += \" \" + optionlist.join(\" \");\n }\n if (this.verbose > 0) {\n console.log(this.header(\"# \"));\n }\n this.create(shape, cuts);\n }\n create(shape, cuts) {\n this.moveplanes = [];\n this.moveplanes2 = [];\n this.faces = [];\n this.cubies = [];\n let g = null;\n switch (shape) {\n case \"c\":\n g = cube();\n break;\n case \"o\":\n g = octahedron();\n break;\n case \"i\":\n g = icosahedron();\n break;\n case \"t\":\n g = tetrahedron();\n break;\n case \"d\":\n g = dodecahedron();\n break;\n default:\n throw new Error(\"Bad shape argument: \" + shape);\n }\n this.rotations = closure(g);\n if (this.verbose) {\n console.log(\"# Rotations: \" + this.rotations.length);\n }\n const baseplane = g[0];\n this.baseplanerot = uniqueplanes(baseplane, this.rotations);\n const baseplanes = this.baseplanerot.map((_5) => baseplane.rotateplane(_5));\n this.baseplanes = baseplanes;\n this.basefacecount = baseplanes.length;\n const net = defaultnets()[baseplanes.length];\n this.net = net;\n this.colors = defaultcolors()[baseplanes.length];\n this.faceorder = defaultfaceorders()[baseplanes.length];\n if (this.verbose) {\n console.log(\"# Base planes: \" + baseplanes.length);\n }\n const baseface = getface(baseplanes);\n const zero = new Quat(0, 0, 0, 0);\n if (this.verbose) {\n console.log(\"# Face vertices: \" + baseface.length);\n }\n const facenormal = baseplanes[0].makenormal();\n const edgenormal = baseface[0].sum(baseface[1]).makenormal();\n const vertexnormal = baseface[0].makenormal();\n const boundary = new Quat(1, facenormal.b, facenormal.c, facenormal.d);\n if (this.verbose) {\n console.log(\"# Boundary is \" + boundary);\n }\n const planerot = uniqueplanes(boundary, this.rotations);\n const planes = planerot.map((_5) => boundary.rotateplane(_5));\n let faces = [getface(planes)];\n this.edgedistance = faces[0][0].sum(faces[0][1]).smul(0.5).dist(zero);\n this.vertexdistance = faces[0][0].dist(zero);\n const cutplanes = [];\n const intersects = [];\n let sawface = false;\n let sawedge = false;\n let sawvertex = false;\n for (let i2 = 0; i2 < cuts.length; i2++) {\n let normal = null;\n let distance = 0;\n switch (cuts[i2][0]) {\n case \"f\":\n normal = facenormal;\n distance = 1;\n sawface = true;\n break;\n case \"v\":\n normal = vertexnormal;\n distance = this.vertexdistance;\n sawvertex = true;\n break;\n case \"e\":\n normal = edgenormal;\n distance = this.edgedistance;\n sawedge = true;\n break;\n default:\n throw new Error(\"Bad cut argument: \" + cuts[i2][0]);\n }\n cutplanes.push(normal.makecut(Number(cuts[i2][1])));\n intersects.push(cuts[i2][1] < distance);\n }\n if (this.addrotations) {\n if (!sawface) {\n cutplanes.push(facenormal.makecut(10));\n }\n if (!sawvertex) {\n cutplanes.push(vertexnormal.makecut(10));\n }\n if (!sawedge) {\n cutplanes.push(edgenormal.makecut(10));\n }\n }\n this.basefaces = [];\n for (let i2 = 0; i2 < this.baseplanerot.length; i2++) {\n const face = this.baseplanerot[i2].rotateface(faces[0]);\n this.basefaces.push(face);\n }\n const facenames = [];\n const faceplanes = [];\n const vertexnames = [];\n const edgenames = [];\n const edgesperface = faces[0].length;\n function searchaddelement(a, p, name) {\n for (let i2 = 0; i2 < a.length; i2++) {\n if (a[i2][0].dist(p) < eps3) {\n a[i2].push(name);\n return;\n }\n }\n a.push([p, name]);\n }\n for (let i2 = 0; i2 < this.baseplanerot.length; i2++) {\n const face = this.baseplanerot[i2].rotateface(faces[0]);\n for (let j = 0; j < face.length; j++) {\n const jj = (j + 1) % face.length;\n const midpoint = face[j].sum(face[jj]).smul(0.5);\n searchaddelement(edgenames, midpoint, i2);\n }\n }\n const otherfaces = [];\n for (let i2 = 0; i2 < this.baseplanerot.length; i2++) {\n const face = this.baseplanerot[i2].rotateface(faces[0]);\n const facelist = [];\n for (let j = 0; j < face.length; j++) {\n const jj = (j + 1) % face.length;\n const midpoint = face[j].sum(face[jj]).smul(0.5);\n const el = edgenames[findelement(edgenames, midpoint)];\n if (i2 === el[1]) {\n facelist.push(el[2]);\n } else if (i2 === el[2]) {\n facelist.push(el[1]);\n } else {\n throw new Error(\"Could not find edge\");\n }\n }\n otherfaces.push(facelist);\n }\n const facenametoindex = {};\n const faceindextoname = [];\n faceindextoname.push(net[0][0]);\n facenametoindex[net[0][0]] = 0;\n faceindextoname[otherfaces[0][0]] = net[0][1];\n facenametoindex[net[0][1]] = otherfaces[0][0];\n for (let i2 = 0; i2 < net.length; i2++) {\n const f0 = net[i2][0];\n const fi = facenametoindex[f0];\n if (fi === void 0) {\n throw new Error(\"Bad edge description; first edge not connected\");\n }\n let ii = -1;\n for (let j = 0; j < otherfaces[fi].length; j++) {\n const fn2 = faceindextoname[otherfaces[fi][j]];\n if (fn2 !== void 0 && fn2 === net[i2][1]) {\n ii = j;\n break;\n }\n }\n if (ii < 0) {\n throw new Error(\"First element of a net not known\");\n }\n for (let j = 2; j < net[i2].length; j++) {\n if (net[i2][j] === \"\") {\n continue;\n }\n const of = otherfaces[fi][(j + ii - 1) % edgesperface];\n const fn2 = faceindextoname[of];\n if (fn2 !== void 0 && fn2 !== net[i2][j]) {\n throw new Error(\"Face mismatch in net\");\n }\n faceindextoname[of] = net[i2][j];\n facenametoindex[net[i2][j]] = of;\n }\n }\n for (let i2 = 0; i2 < faceindextoname.length; i2++) {\n let found = false;\n for (let j = 0; j < this.faceorder.length; j++) {\n if (faceindextoname[i2] === this.faceorder[j]) {\n this.faceprecedence[i2] = j;\n found = true;\n break;\n }\n }\n if (!found) {\n throw new Error(\"Could not find face \" + faceindextoname[i2] + \" in face order list \" + this.faceorder);\n }\n }\n for (let i2 = 0; i2 < this.baseplanerot.length; i2++) {\n const face = this.baseplanerot[i2].rotateface(faces[0]);\n const faceplane = boundary.rotateplane(this.baseplanerot[i2]);\n const facename = faceindextoname[i2];\n facenames.push([face, facename]);\n faceplanes.push([faceplane, facename]);\n }\n for (let i2 = 0; i2 < this.baseplanerot.length; i2++) {\n const face = this.baseplanerot[i2].rotateface(faces[0]);\n const facename = faceindextoname[i2];\n for (let j = 0; j < face.length; j++) {\n const jj = (j + 1) % face.length;\n const midpoint = face[j].sum(face[jj]).smul(0.5);\n const jjj = (j + 2) % face.length;\n const midpoint2 = face[jj].sum(face[jjj]).smul(0.5);\n const e1 = findelement(edgenames, midpoint);\n const e2 = findelement(edgenames, midpoint2);\n searchaddelement(vertexnames, face[jj], [facename, e2, e1]);\n }\n }\n this.swizzler = new FaceNameSwizzler(facenames.map((_5) => _5[1]));\n const sep = this.swizzler.prefixFree ? \"\" : \"_\";\n for (let i2 = 0; i2 < edgenames.length; i2++) {\n if (edgenames[i2].length !== 3) {\n throw new Error(\"Bad length in edge names \" + edgenames[i2]);\n }\n let c1 = faceindextoname[edgenames[i2][1]];\n const c2 = faceindextoname[edgenames[i2][2]];\n if (this.faceprecedence[edgenames[i2][1]] < this.faceprecedence[edgenames[i2][2]]) {\n c1 = c1 + sep + c2;\n } else {\n c1 = c2 + sep + c1;\n }\n edgenames[i2] = [edgenames[i2][0], c1];\n }\n this.cornerfaces = vertexnames[0].length - 1;\n for (let i2 = 0; i2 < vertexnames.length; i2++) {\n if (vertexnames[i2].length < 4) {\n throw new Error(\"Bad length in vertex names\");\n }\n let st = 1;\n for (let j = 2; j < vertexnames[i2].length; j++) {\n if (this.faceprecedence[facenametoindex[vertexnames[i2][j][0]]] < this.faceprecedence[facenametoindex[vertexnames[i2][st][0]]]) {\n st = j;\n }\n }\n let r2 = \"\";\n for (let j = 1; j < vertexnames[i2].length; j++) {\n if (j === 1) {\n r2 = vertexnames[i2][st][0];\n } else {\n r2 = r2 + sep + vertexnames[i2][st][0];\n }\n for (let k = 1; k < vertexnames[i2].length; k++) {\n if (vertexnames[i2][st][1] === vertexnames[i2][k][2]) {\n st = k;\n break;\n }\n }\n }\n vertexnames[i2] = [vertexnames[i2][0], r2];\n }\n if (this.verbose > 1) {\n console.log(\"# Face precedence list: \" + this.faceorder.join(\" \"));\n console.log(\"# Face names: \" + facenames.map((_5) => _5[1]).join(\" \"));\n console.log(\"# Edge names: \" + edgenames.map((_5) => _5[1]).join(\" \"));\n console.log(\"# Vertex names: \" + vertexnames.map((_5) => _5[1]).join(\" \"));\n }\n const geonormals = [];\n for (let i2 = 0; i2 < faceplanes.length; i2++) {\n geonormals.push([faceplanes[i2][0].makenormal(), faceplanes[i2][1], \"f\"]);\n }\n for (let i2 = 0; i2 < edgenames.length; i2++) {\n geonormals.push([edgenames[i2][0].makenormal(), edgenames[i2][1], \"e\"]);\n }\n for (let i2 = 0; i2 < vertexnames.length; i2++) {\n geonormals.push([vertexnames[i2][0].makenormal(), vertexnames[i2][1], \"v\"]);\n }\n this.facenames = facenames;\n this.faceplanes = faceplanes;\n this.edgenames = edgenames;\n this.vertexnames = vertexnames;\n this.geonormals = geonormals;\n const geonormalnames = geonormals.map((_5) => _5[1]);\n this.swizzler.setGripNames(geonormalnames);\n if (this.verbose) {\n console.log(\"# Distances: face \" + 1 + \" edge \" + this.edgedistance + \" vertex \" + this.vertexdistance);\n }\n for (let c = 0; c < cutplanes.length; c++) {\n for (let i2 = 0; i2 < this.rotations.length; i2++) {\n const q = cutplanes[c].rotateplane(this.rotations[i2]);\n let wasseen = false;\n for (let j = 0; j < this.moveplanes.length; j++) {\n if (q.sameplane(this.moveplanes[j])) {\n wasseen = true;\n break;\n }\n }\n if (!wasseen) {\n this.moveplanes.push(q);\n if (intersects[c]) {\n this.moveplanes2.push(q);\n }\n }\n }\n }\n let ft = new FaceTree(faces[0]);\n const tar = this.moveplanes2.slice();\n let rval = 31;\n for (let i2 = 0; i2 < tar.length; i2++) {\n const j = i2 + Math.floor((tar.length - i2) * (rval / 65536));\n ft = ft.split(tar[j]);\n tar[j] = tar[i2];\n rval = (rval * 1657 + 101) % 65536;\n }\n faces = ft.collect([], true);\n this.faces = faces;\n if (this.verbose) {\n console.log(\"# Faces is now \" + faces.length);\n }\n this.stickersperface = faces.length;\n let shortedge = 1e99;\n for (let i2 = 0; i2 < faces.length; i2++) {\n for (let j = 0; j < faces[i2].length; j++) {\n const k = (j + 1) % faces[i2].length;\n const t = faces[i2][j].dist(faces[i2][k]);\n if (t < shortedge) {\n shortedge = t;\n }\n }\n }\n this.shortedge = shortedge;\n if (this.verbose) {\n console.log(\"# Short edge is \" + shortedge);\n }\n if (shape === \"c\" && sawface && !sawedge && !sawvertex) {\n this.addNotationMapper = \"NxNxNCubeMapper\";\n this.setReidOrder = true;\n }\n if (shape === \"c\" && sawvertex && !sawface && !sawedge) {\n this.addNotationMapper = \"SkewbMapper\";\n }\n if (shape === \"t\" && (sawvertex || sawface) && !sawedge) {\n this.addNotationMapper = \"PyraminxOrTetraminxMapper\";\n }\n if (shape === \"o\" && sawface && NEW_FACE_NAMES) {\n this.notationMapper = new FaceRenamingMapper(this.swizzler, new FaceNameSwizzler([\"F\", \"D\", \"L\", \"BL\", \"R\", \"U\", \"BR\", \"B\"]));\n if (!sawedge && !sawvertex) {\n this.addNotationMapper = \"FTOMapper\";\n }\n }\n if (shape === \"d\" && sawface && NEW_FACE_NAMES) {\n this.addNotationMapper = \"MegaminxMapper\";\n this.notationMapper = new FaceRenamingMapper(this.swizzler, new FaceNameSwizzler([\n \"U\",\n \"F\",\n \"L\",\n \"BL\",\n \"BR\",\n \"R\",\n \"FR\",\n \"FL\",\n \"DL\",\n \"B\",\n \"DR\",\n \"D\"\n ]));\n }\n }\n keyface(face) {\n return this.keyface2(centermassface(face));\n }\n keyface2(cm) {\n let s = \"\";\n for (let i2 = 0; i2 < this.moveplanesets.length; i2++) {\n if (this.moveplanesets[i2].length > 0) {\n const dv = cm.dot(this.moveplanesets[i2][0]);\n let t = 0;\n let b = 1;\n while (b * 2 <= this.moveplanesets[i2].length) {\n b *= 2;\n }\n for (; b > 0; b >>= 1) {\n if (t + b <= this.moveplanesets[i2].length && dv > this.moveplanesets[i2][t + b - 1].a) {\n t += b;\n }\n }\n if (t <= 90) {\n s = s + String.fromCharCode(34 + t);\n } else {\n s = s + \"!\" + String.fromCharCode(34 + Math.floor(t / 90)) + String.fromCharCode(34 + t % 90);\n }\n }\n }\n return s;\n }\n findface(face) {\n const cm = centermassface(face);\n const key = this.keyface2(cm);\n const arr = this.facelisthash[key];\n if (arr.length === 1) {\n return arr[0];\n }\n for (let i2 = 0; i2 + 1 < arr.length; i2++) {\n const face2 = this.facelisthash[key][i2];\n if (Math.abs(cm.dist(this.facecentermass[face2])) < eps3) {\n return face2;\n }\n }\n return arr[arr.length - 1];\n }\n findface2(cm) {\n const key = this.keyface2(cm);\n const arr = this.facelisthash[key];\n if (arr.length === 1) {\n return arr[0];\n }\n for (let i2 = 0; i2 + 1 < arr.length; i2++) {\n const face2 = this.facelisthash[key][i2];\n if (Math.abs(cm.dist(this.facecentermass[face2])) < eps3) {\n return face2;\n }\n }\n return arr[arr.length - 1];\n }\n project2d(facen, edgen, targvec) {\n const face = this.facenames[facen][0];\n const edgen2 = (edgen + 1) % face.length;\n const plane = this.baseplanes[facen];\n let x0 = face[edgen2].sub(face[edgen]);\n const olen = x0.len();\n x0 = x0.normalize();\n const y0 = x0.cross(plane).normalize();\n let delta = targvec[1].sub(targvec[0]);\n const len = delta.len() / olen;\n delta = delta.normalize();\n const cosr = delta.b;\n const sinr = delta.c;\n const x1 = x0.smul(cosr).sub(y0.smul(sinr)).smul(len);\n const y1 = y0.smul(cosr).sum(x0.smul(sinr)).smul(len);\n const off = new Quat(0, targvec[0].b - x1.dot(face[edgen]), targvec[0].c - y1.dot(face[edgen]), 0);\n return [x1, y1, off];\n }\n allstickers() {\n this.faces = expandfaces(this.baseplanerot, this.faces);\n if (this.verbose) {\n console.log(\"# Total stickers is now \" + this.faces.length);\n }\n this.facecentermass = new Array(this.faces.length);\n for (let i2 = 0; i2 < this.faces.length; i2++) {\n this.facecentermass[i2] = centermassface(this.faces[i2]);\n }\n const moveplanesets = [];\n const moveplanenormals = [];\n for (let i2 = 0; i2 < this.moveplanes.length; i2++) {\n const q = this.moveplanes[i2];\n const qnormal = q.makenormal();\n let wasseen = false;\n for (let j = 0; j < moveplanenormals.length; j++) {\n if (qnormal.sameplane(moveplanenormals[j].makenormal())) {\n wasseen = true;\n }\n }\n if (!wasseen) {\n moveplanenormals.push(qnormal);\n moveplanesets.push([]);\n }\n }\n for (let i2 = 0; i2 < this.moveplanes2.length; i2++) {\n const q = this.moveplanes2[i2];\n const qnormal = q.makenormal();\n for (let j = 0; j < moveplanenormals.length; j++) {\n if (qnormal.sameplane(moveplanenormals[j])) {\n moveplanesets[j].push(q);\n break;\n }\n }\n }\n for (let i2 = 0; i2 < moveplanesets.length; i2++) {\n const q = moveplanesets[i2].map((_5) => _5.normalizeplane());\n const goodnormal = moveplanenormals[i2];\n for (let j = 0; j < q.length; j++) {\n if (q[j].makenormal().dist(goodnormal) > eps3) {\n q[j] = q[j].smul(-1);\n }\n }\n q.sort((a, b) => a.a - b.a);\n moveplanesets[i2] = q;\n }\n this.moveplanesets = moveplanesets;\n this.moveplanenormals = moveplanenormals;\n const sizes = moveplanesets.map((_5) => _5.length);\n if (this.verbose) {\n console.log(\"# Move plane sets: \" + sizes);\n }\n const moverotations = [];\n for (let i2 = 0; i2 < moveplanesets.length; i2++) {\n moverotations.push([]);\n }\n for (let i2 = 0; i2 < this.rotations.length; i2++) {\n const q = this.rotations[i2];\n if (Math.abs(Math.abs(q.a) - 1) < eps3) {\n continue;\n }\n const qnormal = q.makenormal();\n for (let j = 0; j < moveplanesets.length; j++) {\n if (qnormal.sameplane(moveplanenormals[j])) {\n moverotations[j].push(q);\n break;\n }\n }\n }\n this.moverotations = moverotations;\n for (let i2 = 0; i2 < moverotations.length; i2++) {\n const r2 = moverotations[i2];\n const goodnormal = r2[0].makenormal();\n for (let j = 0; j < r2.length; j++) {\n if (goodnormal.dist(r2[j].makenormal()) > eps3) {\n r2[j] = r2[j].smul(-1);\n }\n }\n r2.sort((a, b) => a.angle() - b.angle());\n if (moverotations[i2][0].dot(moveplanenormals[i2]) < 0) {\n r2.reverse();\n }\n }\n const sizes2 = moverotations.map((_5) => 1 + _5.length);\n this.movesetorders = sizes2;\n const movesetgeos = [];\n let gtype = \"?\";\n for (let i2 = 0; i2 < moveplanesets.length; i2++) {\n const p0 = moveplanenormals[i2];\n let neg = null;\n let pos = null;\n for (let j = 0; j < this.geonormals.length; j++) {\n const d2 = p0.dot(this.geonormals[j][0]);\n if (Math.abs(d2 - 1) < eps3) {\n pos = [this.geonormals[j][1], this.geonormals[j][2]];\n gtype = this.geonormals[j][2];\n } else if (Math.abs(d2 + 1) < eps3) {\n neg = [this.geonormals[j][1], this.geonormals[j][2]];\n gtype = this.geonormals[j][2];\n }\n }\n if (pos === null || neg === null) {\n throw new Error(\"Saw positive or negative sides as null\");\n }\n movesetgeos.push([\n pos[0],\n pos[1],\n neg[0],\n neg[1],\n 1 + moveplanesets[i2].length\n ]);\n if (this.addNotationMapper === \"NxNxNCubeMapper\" && gtype === \"f\") {\n this.notationMapper = new NxNxNCubeMapper(1 + moveplanesets[i2].length);\n this.addNotationMapper = \"\";\n }\n if (this.addNotationMapper === \"SkewbMapper\" && moveplanesets[0].length === 1) {\n this.notationMapper = new SkewbNotationMapper(this.swizzler);\n this.addNotationMapper = \"\";\n }\n if (this.addNotationMapper === \"PyraminxOrTetraminxMapper\") {\n if (moveplanesets[0].length === 2 && moveplanesets[0][0].a === 0.333333333333333 && moveplanesets[0][1].a === 1.66666666666667) {\n this.notationMapper = new PyraminxNotationMapper(this.swizzler);\n this.addNotationMapper = \"\";\n } else {\n this.notationMapper = new TetraminxNotationMapper(this.swizzler);\n this.addNotationMapper = \"\";\n }\n }\n if (this.addNotationMapper === \"MegaminxMapper\" && gtype === \"f\") {\n if (1 + moveplanesets[i2].length === 3) {\n this.notationMapper = new MegaminxScramblingNotationMapper(this.notationMapper);\n }\n this.addNotationMapper = \"\";\n }\n if (this.addNotationMapper === \"FTOMapper\" && gtype === \"f\") {\n if (1 + moveplanesets[i2].length === 3) {\n this.notationMapper = new FTONotationMapper(this.notationMapper, this.swizzler);\n }\n this.addNotationMapper = \"\";\n }\n }\n this.movesetgeos = movesetgeos;\n const cubiehash = {};\n const facelisthash = {};\n const cubiekey = {};\n const cubiekeys = [];\n const cubies = [];\n const faces = this.faces;\n for (let i2 = 0; i2 < faces.length; i2++) {\n const face = faces[i2];\n const s = this.keyface(face);\n if (!cubiehash[s]) {\n cubiekey[s] = cubies.length;\n cubiekeys.push(s);\n cubiehash[s] = [];\n facelisthash[s] = [];\n cubies.push(cubiehash[s]);\n }\n facelisthash[s].push(i2);\n cubiehash[s].push(face);\n if (facelisthash[s].length === this.basefacecount) {\n if (this.verbose) {\n console.log(\"# Splitting core.\");\n }\n for (let suff = 0; suff < this.basefacecount; suff++) {\n const s2 = s + \" \" + suff;\n facelisthash[s2] = [facelisthash[s][suff]];\n cubiehash[s2] = [cubiehash[s][suff]];\n cubiekeys.push(s2);\n cubiekey[s2] = cubies.length;\n cubies.push(cubiehash[s2]);\n }\n cubiehash[s] = [];\n cubies[cubiekey[s]] = [];\n }\n }\n this.cubiekey = cubiekey;\n this.facelisthash = facelisthash;\n this.cubiekeys = cubiekeys;\n if (this.verbose) {\n console.log(\"# Cubies: \" + Object.keys(cubiehash).length);\n }\n this.cubies = cubies;\n for (let k = 0; k < cubies.length; k++) {\n const cubie = cubies[k];\n if (cubie.length < 2) {\n continue;\n }\n if (cubie.length === this.basefacecount) {\n continue;\n }\n if (cubie.length > 5) {\n throw new Error(\"Bad math; too many faces on this cubie \" + cubie.length);\n }\n const cm = cubie.map((_5) => centermassface(_5));\n const s = this.keyface2(cm[0]);\n const facelist = facelisthash[s];\n const cmall = centermassface(cm);\n for (let looplimit = 0; cubie.length > 2; looplimit++) {\n let changed = false;\n for (let i2 = 0; i2 < cubie.length; i2++) {\n const j = (i2 + 1) % cubie.length;\n if (cmall.dot(cm[i2].cross(cm[j])) < 0) {\n const t = cubie[i2];\n cubie[i2] = cubie[j];\n cubie[j] = t;\n const u = cm[i2];\n cm[i2] = cm[j];\n cm[j] = u;\n const v = facelist[i2];\n facelist[i2] = facelist[j];\n facelist[j] = v;\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\n if (looplimit > 1e3) {\n throw new Error(\"Bad epsilon math; too close to border\");\n }\n }\n let mini = 0;\n let minf = this.findface(cubie[mini]);\n for (let i2 = 1; i2 < cubie.length; i2++) {\n const temp = this.findface(cubie[i2]);\n if (this.faceprecedence[this.getfaceindex(temp)] < this.faceprecedence[this.getfaceindex(minf)]) {\n mini = i2;\n minf = temp;\n }\n }\n if (mini !== 0) {\n const ocubie = cubie.slice();\n const ofacelist = facelist.slice();\n for (let i2 = 0; i2 < cubie.length; i2++) {\n cubie[i2] = ocubie[(mini + i2) % cubie.length];\n facelist[i2] = ofacelist[(mini + i2) % cubie.length];\n }\n }\n }\n const facetocubies = [];\n for (let i2 = 0; i2 < cubies.length; i2++) {\n const facelist = facelisthash[cubiekeys[i2]];\n for (let j = 0; j < facelist.length; j++) {\n facetocubies[facelist[j]] = [i2, j];\n }\n }\n this.facetocubies = facetocubies;\n const typenames = [\"?\", \"CENTERS\", \"EDGES\", \"CORNERS\", \"C4RNER\", \"C5RNER\"];\n const cubiesetnames = [];\n const cubietypecounts = [0, 0, 0, 0, 0, 0];\n const orbitoris = [];\n const seen = [];\n let cubiesetnum = 0;\n const cubiesetnums = [];\n const cubieordnums = [];\n const cubieords = [];\n const cubievaluemap = [];\n const getcolorkey = (cubienum) => {\n return cubies[cubienum].map((_5) => this.getfaceindex(this.findface(_5))).join(\" \");\n };\n const cubiesetcubies = [];\n for (let i2 = 0; i2 < cubies.length; i2++) {\n if (seen[i2]) {\n continue;\n }\n const cubie = cubies[i2];\n if (cubie.length === 0) {\n continue;\n }\n const cubiekeymap = {};\n let cubievalueid = 0;\n cubieords.push(0);\n cubiesetcubies.push([]);\n const facecnt = cubie.length;\n const typectr = cubietypecounts[facecnt]++;\n let typename = typenames[facecnt];\n if (typename === void 0 || facecnt === this.basefacecount) {\n typename = \"CORE\";\n }\n typename = typename + (typectr === 0 ? \"\" : typectr + 1);\n cubiesetnames[cubiesetnum] = typename;\n orbitoris[cubiesetnum] = facecnt;\n const queue = [i2];\n let qg = 0;\n seen[i2] = true;\n while (qg < queue.length) {\n const cind = queue[qg++];\n const cubiecolorkey = getcolorkey(cind);\n if (cubie.length > 1 || cubiekeymap[cubiecolorkey] === void 0) {\n cubiekeymap[cubiecolorkey] = cubievalueid++;\n }\n cubievaluemap[cind] = cubiekeymap[cubiecolorkey];\n cubiesetnums[cind] = cubiesetnum;\n cubiesetcubies[cubiesetnum].push(cind);\n cubieordnums[cind] = cubieords[cubiesetnum]++;\n if (queue.length < this.rotations.length) {\n const cm = centermassface(cubies[cind][0]);\n for (let j = 0; j < moverotations.length; j++) {\n const tq = this.facetocubies[this.findface2(cm.rotatepoint(moverotations[j][0]))][0];\n if (!seen[tq]) {\n queue.push(tq);\n seen[tq] = true;\n }\n }\n }\n }\n const that = this;\n queue.sort(function(a, b) {\n if (that.cubiekeys[a] < that.cubiekeys[b]) {\n return 1;\n } else if (that.cubiekeys[a] > that.cubiekeys[b]) {\n return -1;\n } else {\n return 0;\n }\n });\n for (let i3 = 0; i3 < queue.length; i3++) {\n if (i3 > 1e6) {\n cubieordnums[queue[i3]] = i3;\n }\n }\n cubiesetnum++;\n }\n if (this.setReidOrder && 4 <= this.stickersperface && this.stickersperface <= 9) {\n const reidorder = [\n [\n \"UF\",\n \"UR\",\n \"UB\",\n \"UL\",\n \"DF\",\n \"DR\",\n \"DB\",\n \"DL\",\n \"FR\",\n \"FL\",\n \"BR\",\n \"BL\"\n ],\n [\"UFR\", \"URB\", \"UBL\", \"ULF\", \"DRF\", \"DFL\", \"DLB\", \"DBR\"],\n [\"U\", \"L\", \"F\", \"R\", \"B\", \"D\"]\n ];\n const reidmap = {};\n for (let i2 = 0; i2 < reidorder.length; i2++) {\n for (let j = 0; j < reidorder[i2].length; j++) {\n let mask = 0;\n for (let k = 0; k < reidorder[i2][j].length; k++) {\n mask |= 1 << reidorder[i2][j].charCodeAt(k) - 65;\n }\n reidmap[mask] = j;\n }\n }\n for (let i2 = 0; i2 < cubiesetnum; i2++) {\n for (let j = 0; j < cubiesetcubies[i2].length; j++) {\n const cubienum = cubiesetcubies[i2][j];\n let mask = 0;\n for (let k = 0; k < cubies[cubienum].length; k++) {\n mask |= 1 << this.facenames[this.getfaceindex(this.findface(cubies[cubienum][k]))][1].charCodeAt(0) - 65;\n }\n cubieordnums[cubienum] = reidmap[mask];\n }\n }\n }\n this.orbits = cubieords.length;\n this.cubiesetnums = cubiesetnums;\n this.cubieordnums = cubieordnums;\n this.cubiesetnames = cubiesetnames;\n this.cubieords = cubieords;\n this.orbitoris = orbitoris;\n this.cubievaluemap = cubievaluemap;\n this.cubiesetcubies = cubiesetcubies;\n if (this.fixPiece !== \"\") {\n for (let i2 = 0; i2 < cubies.length; i2++) {\n if (this.fixPiece === \"v\" && cubies[i2].length > 2 || this.fixPiece === \"e\" && cubies[i2].length === 2 || this.fixPiece === \"f\" && cubies[i2].length === 1) {\n this.fixedCubie = i2;\n break;\n }\n }\n if (this.fixedCubie < 0) {\n throw new Error(\"Could not find a cubie of type \" + this.fixPiece + \" to fix.\");\n }\n }\n if (this.verbose) {\n console.log(\"# Cubie orbit sizes \" + cubieords);\n }\n }\n unswizzle(mv) {\n const newmv = this.notationMapper.notationToInternal(mv);\n if (newmv === null) {\n return \"\";\n }\n return this.swizzler.unswizzle(newmv.family);\n }\n stringToBlockMove(mv) {\n const re = RegExp(\"^(([0-9]+)-)?([0-9]+)?([^0-9]+)([0-9]+'?)?$\");\n const p = mv.match(re);\n if (p === null) {\n throw new Error(\"Bad move passed \" + mv);\n }\n const grip = p[4];\n let loslice = void 0;\n let hislice = void 0;\n if (p[2] !== void 0) {\n if (p[3] === void 0) {\n throw new Error(\"Missing second number in range\");\n }\n loslice = parseInt(p[2], 10);\n }\n if (p[3] !== void 0) {\n hislice = parseInt(p[3], 10);\n }\n let amountstr = \"1\";\n let amount = 1;\n if (p[5] !== void 0) {\n amountstr = p[5];\n if (amountstr[0] === \"'\") {\n amountstr = \"-\" + amountstr.substring(1);\n }\n amount = parseInt(amountstr, 10);\n }\n return new Move(new QuantumMove(grip, hislice, loslice), amount);\n }\n parseMove(move) {\n const bm = this.notationMapper.notationToInternal(move);\n if (bm === null) {\n throw new Error(\"Bad move \" + move.family);\n }\n move = bm;\n let grip = move.family;\n let fullrotation = false;\n if (grip.endsWith(\"v\") && grip[0] <= \"Z\") {\n if (move.innerLayer !== void 0 || move.outerLayer !== void 0) {\n throw new Error(\"Cannot use a prefix with full cube rotations\");\n }\n grip = grip.slice(0, -1);\n fullrotation = true;\n }\n if (grip.endsWith(\"w\") && grip[0] <= \"Z\") {\n grip = grip.slice(0, -1).toLowerCase();\n }\n let geo;\n let msi = -1;\n const geoname = this.swizzler.unswizzle(grip);\n let firstgrip = false;\n for (let i2 = 0; i2 < this.movesetgeos.length; i2++) {\n const g = this.movesetgeos[i2];\n if (geoname === g[0]) {\n firstgrip = true;\n geo = g;\n msi = i2;\n }\n if (geoname === g[2]) {\n firstgrip = false;\n geo = g;\n msi = i2;\n }\n }\n let loslice = 1;\n let hislice = 1;\n if (grip.toUpperCase() !== grip) {\n hislice = 2;\n }\n if (geo === void 0) {\n throw new Error(\"Bad grip in move \" + move.family);\n }\n if (move.outerLayer !== void 0) {\n loslice = move.outerLayer;\n }\n if (move.innerLayer !== void 0) {\n if (move.outerLayer === void 0) {\n hislice = move.innerLayer;\n if (grip <= \"Z\") {\n loslice = hislice;\n } else {\n loslice = 1;\n }\n } else {\n hislice = move.innerLayer;\n }\n }\n loslice--;\n hislice--;\n if (fullrotation) {\n loslice = 0;\n hislice = this.moveplanesets[msi].length;\n }\n if (loslice < 0 || loslice > this.moveplanesets[msi].length || hislice < 0 || hislice > this.moveplanesets[msi].length) {\n throw new Error(\"Bad slice spec \" + loslice + \" \" + hislice + \" vs \" + this.moveplanesets[msi].length);\n }\n if (!permissivieMoveParsing && loslice === 0 && hislice === this.moveplanesets[msi].length && !fullrotation) {\n throw new Error(\"! full puzzle rotations must be specified with v suffix.\");\n }\n const r2 = [void 0, msi, loslice, hislice, firstgrip, move.amount];\n return r2;\n }\n parsemove(mv) {\n const r2 = this.parseMove(this.stringToBlockMove(mv));\n r2[0] = mv;\n return r2;\n }\n genperms() {\n if (this.cmovesbyslice.length > 0) {\n return;\n }\n const cmovesbyslice = [];\n if (this.orientCenters) {\n for (let k = 0; k < this.cubies.length; k++) {\n if (this.cubies[k].length === 1) {\n const kk = this.findface(this.cubies[k][0]);\n const i2 = this.getfaceindex(kk);\n if (centermassface(this.basefaces[i2]).dist(this.facecentermass[kk]) < eps3) {\n const o2 = this.basefaces[i2].length;\n for (let m = 0; m < o2; m++) {\n this.cubies[k].push(this.cubies[k][0]);\n }\n this.duplicatedFaces[kk] = o2;\n this.duplicatedCubies[k] = o2;\n this.orbitoris[this.cubiesetnums[k]] = o2;\n }\n }\n }\n }\n for (let k = 0; k < this.moveplanesets.length; k++) {\n const moveplaneset = this.moveplanesets[k];\n const slicenum = [];\n const slicecnts = [moveplaneset.length + 1, 0];\n let bhi = 1;\n while (bhi * 2 <= moveplaneset.length) {\n bhi *= 2;\n }\n for (let i2 = 0; i2 < this.faces.length; i2++) {\n let t = 0;\n if (moveplaneset.length > 0) {\n const dv = this.facecentermass[i2].dot(moveplaneset[0]);\n for (let b = bhi; b > 0; b >>= 1) {\n if (t + b <= moveplaneset.length && dv > moveplaneset[t + b - 1].a) {\n t += b;\n }\n }\n t = moveplaneset.length - t;\n }\n slicenum.push(t);\n while (slicecnts.length <= t) {\n slicecnts.push(0);\n }\n slicecnts[t]++;\n }\n const axiscmoves = new Array(slicecnts.length);\n for (let sc = 0; sc < slicecnts.length; sc++) {\n axiscmoves[sc] = [];\n }\n const cubiedone = [];\n for (let i2 = 0; i2 < this.faces.length; i2++) {\n if (slicenum[i2] < 0) {\n continue;\n }\n const b = this.facetocubies[i2].slice();\n let cm = this.facecentermass[i2];\n const ocm = cm;\n let fi2 = i2;\n const sc = slicenum[fi2];\n for (; ; ) {\n slicenum[fi2] = -1;\n const cm2 = cm.rotatepoint(this.moverotations[k][0]);\n if (cm2.dist(ocm) < eps3) {\n break;\n }\n fi2 = this.findface2(cm2);\n const c = this.facetocubies[fi2];\n b.push(c[0], c[1]);\n cm = cm2;\n }\n if (b.length > 2 && this.orientCenters && (this.cubies[b[0]].length === 1 || this.cubies[b[0]][0] === this.cubies[b[0]][1])) {\n if (this.facecentermass[i2].dist(centermassface(this.basefaces[this.getfaceindex(i2)])) < eps3) {\n let face1 = this.cubies[b[0]][0];\n for (let ii = 0; ii < b.length; ii += 2) {\n const face0 = this.cubies[b[ii]][0];\n let o2 = -1;\n for (let jj = 0; jj < face1.length; jj++) {\n if (face0[jj].dist(face1[0]) < eps3) {\n o2 = jj;\n break;\n }\n }\n if (o2 < 0) {\n throw new Error(\"Couldn't find rotation of center faces; ignoring for now.\");\n } else {\n b[ii + 1] = o2;\n face1 = this.moverotations[k][0].rotateface(face1);\n }\n }\n }\n }\n if (b.length === 2 && this.orientCenters) {\n for (let ii = 1; ii < this.movesetorders[k]; ii++) {\n if (sc === 0) {\n b.push(b[0], ii);\n } else {\n b.push(b[0], (this.movesetorders[k] - ii) % this.movesetorders[k]);\n }\n }\n }\n if (b.length > 2 && !cubiedone[b[0]]) {\n if (b.length !== 2 * this.movesetorders[k]) {\n throw new Error(\"Bad length in perm gen\");\n }\n for (let j = 0; j < b.length; j++) {\n axiscmoves[sc].push(b[j]);\n }\n }\n for (let j = 0; j < b.length; j += 2) {\n cubiedone[b[j]] = true;\n }\n }\n cmovesbyslice.push(axiscmoves);\n }\n this.cmovesbyslice = cmovesbyslice;\n if (this.movelist !== void 0) {\n const parsedmovelist = [];\n for (let i2 = 0; i2 < this.movelist.length; i2++) {\n parsedmovelist.push(this.parsemove(this.movelist[i2]));\n }\n this.parsedmovelist = parsedmovelist;\n }\n this.facelisthash = null;\n this.facecentermass = [];\n this.cubiekey = [];\n }\n getfaces() {\n return this.faces.map((_5) => {\n return _5.map((__) => [__.b, __.c, __.d]);\n });\n }\n getboundarygeometry() {\n return {\n baseplanes: this.baseplanes,\n facenames: this.facenames,\n faceplanes: this.faceplanes,\n vertexnames: this.vertexnames,\n edgenames: this.edgenames,\n geonormals: this.geonormals\n };\n }\n getmovesets(k) {\n const slices = this.moveplanesets[k].length;\n let r2 = [];\n if (this.parsedmovelist !== void 0) {\n for (let i2 = 0; i2 < this.parsedmovelist.length; i2++) {\n const parsedmove = this.parsedmovelist[i2];\n if (parsedmove[1] !== k) {\n continue;\n }\n if (parsedmove[4]) {\n r2.push([parsedmove[2], parsedmove[3]]);\n } else {\n r2.push([slices - parsedmove[3], slices - parsedmove[2]]);\n }\n r2.push(parsedmove[5]);\n }\n } else if (this.vertexmoves && !this.allmoves) {\n const msg = this.movesetgeos[k];\n if (msg[1] !== msg[3]) {\n for (let i2 = 0; i2 < slices; i2++) {\n if (msg[1] !== \"v\") {\n if (this.outerblockmoves) {\n r2.push([i2 + 1, slices]);\n } else {\n r2.push([i2 + 1]);\n }\n r2.push(1);\n } else {\n if (this.outerblockmoves) {\n r2.push([0, i2]);\n } else {\n r2.push([i2, i2]);\n }\n r2.push(1);\n }\n }\n }\n } else {\n for (let i2 = 0; i2 <= slices; i2++) {\n if (!this.allmoves && i2 + i2 === slices) {\n continue;\n }\n if (this.outerblockmoves) {\n if (i2 + i2 > slices) {\n r2.push([i2, slices]);\n } else {\n r2.push([0, i2]);\n }\n } else {\n r2.push([i2, i2]);\n }\n r2.push(1);\n }\n }\n if (this.fixedCubie >= 0) {\n const dep = +this.cubiekeys[this.fixedCubie].trim().split(\" \")[k];\n const newr = [];\n for (let i2 = 0; i2 < r2.length; i2 += 2) {\n let o2 = r2[i2];\n if (dep >= o2[0] && dep <= o2[1]) {\n if (o2[0] === 0) {\n o2 = [o2[1] + 1, slices];\n } else if (slices === o2[1]) {\n o2 = [0, o2[0] - 1];\n } else {\n throw Error(\"fixed cubie option would disconnect move\");\n }\n }\n let found = false;\n for (let j = 0; j < newr.length; j += 2) {\n if (newr[j][0] === o2[0] && newr[j][1] === o2[1] && newr[j + 1] === r2[i2 + 1]) {\n found = true;\n break;\n }\n }\n if (!found) {\n newr.push(o2);\n newr.push(r2[i2 + 1]);\n }\n }\n r2 = newr;\n }\n return r2;\n }\n graybyori(cubie) {\n let ori = this.cubies[cubie].length;\n if (this.duplicatedCubies[cubie]) {\n ori = 1;\n }\n return ori === 1 && (this.graycenters || !this.centersets) || ori === 2 && (this.grayedges || !this.edgesets) || ori > 2 && (this.graycorners || !this.cornersets);\n }\n skipbyori(cubie) {\n let ori = this.cubies[cubie].length;\n if (this.duplicatedCubies[cubie]) {\n ori = 1;\n }\n return ori === 1 && !this.centersets || ori === 2 && !this.edgesets || ori > 2 && !this.cornersets;\n }\n skipcubie(fi) {\n return this.skipbyori(fi);\n }\n skipset(set) {\n if (set.length === 0) {\n return true;\n }\n const fi = set[0];\n return this.skipbyori(this.facetocubies[fi][0]);\n }\n header(comment) {\n return comment + copyright + \"\\n\" + comment + this.args + \"\\n\";\n }\n writegap() {\n const os = this.getOrbitsDef(false);\n const r2 = [];\n const mvs = [];\n for (let i2 = 0; i2 < os.moveops.length; i2++) {\n let movename = \"M_\" + externalName(this.notationMapper, os.movenames[i2]);\n let doinv = false;\n if (movename[movename.length - 1] === \"'\") {\n movename = movename.substring(0, movename.length - 1);\n doinv = true;\n }\n mvs.push(movename);\n if (doinv) {\n r2.push(movename + \":=\" + os.moveops[i2].toPerm().inv().toGap() + \";\");\n } else {\n r2.push(movename + \":=\" + os.moveops[i2].toPerm().toGap() + \";\");\n }\n }\n r2.push(\"Gen:=[\");\n r2.push(mvs.join(\",\"));\n r2.push(\"];\");\n const ip = os.solved.identicalPieces();\n r2.push(\"ip:=[\" + ip.map((_5) => \"[\" + _5.map((__) => __ + 1).join(\",\") + \"]\").join(\",\") + \"];\");\n r2.push(\"\");\n return this.header(\"# \") + r2.join(\"\\n\");\n }\n writeksolve(name = \"PuzzleGeometryPuzzle\") {\n const od = this.getOrbitsDef(false);\n return this.header(\"# \") + od.toKsolve(name, this.notationMapper).join(\"\\n\");\n }\n writekpuzzle(fortwisty = true) {\n const od = this.getOrbitsDef(fortwisty);\n const r2 = od.toKpuzzle();\n r2.moveNotation = new PGNotation(this, od);\n return r2;\n }\n getMoveFromBits(moverange, amount, inverted, axiscmoves, setmoves, movesetorder) {\n const moveorbits = [];\n const perms = [];\n const oris = [];\n for (let ii = 0; ii < this.cubiesetnames.length; ii++) {\n perms.push(iota(this.cubieords[ii]));\n oris.push(zeros(this.cubieords[ii]));\n }\n for (let m = moverange[0]; m <= moverange[1]; m++) {\n const slicecmoves = axiscmoves[m];\n for (let j = 0; j < slicecmoves.length; j += 2 * movesetorder) {\n const mperm = slicecmoves.slice(j, j + 2 * movesetorder);\n const setnum = this.cubiesetnums[mperm[0]];\n for (let ii = 0; ii < mperm.length; ii += 2) {\n mperm[ii] = this.cubieordnums[mperm[ii]];\n }\n let inc = 2;\n let oinc = 3;\n if (inverted) {\n inc = mperm.length - 2;\n oinc = mperm.length - 1;\n }\n if (perms[setnum] === iota(this.cubieords[setnum])) {\n perms[setnum] = perms[setnum].slice();\n if (this.orbitoris[setnum] > 1 && !this.killorientation) {\n oris[setnum] = oris[setnum].slice();\n }\n }\n for (let ii = 0; ii < mperm.length; ii += 2) {\n perms[setnum][mperm[(ii + inc) % mperm.length]] = mperm[ii];\n if (this.orbitoris[setnum] > 1 && !this.killorientation) {\n oris[setnum][mperm[ii]] = (mperm[(ii + oinc) % mperm.length] - mperm[(ii + 1) % mperm.length] + 2 * this.orbitoris[setnum]) % this.orbitoris[setnum];\n }\n }\n }\n }\n let lastId = new Orbit(iota(24), zeros(24), 1);\n for (let ii = 0; ii < this.cubiesetnames.length; ii++) {\n if (setmoves && !setmoves[ii]) {\n continue;\n }\n if (this.orbitoris[ii] === 1 || this.killorientation) {\n if (perms[ii] === iota(lastId.perm.length)) {\n if (perms[ii] !== lastId.perm) {\n lastId = new Orbit(perms[ii], oris[ii], 1);\n }\n moveorbits.push(lastId);\n } else {\n moveorbits.push(new Orbit(perms[ii], oris[ii], 1));\n }\n } else {\n const no = new Array(oris[ii].length);\n for (let jj = 0; jj < perms[ii].length; jj++) {\n no[jj] = oris[ii][perms[ii][jj]];\n }\n moveorbits.push(new Orbit(perms[ii], no, this.orbitoris[ii]));\n }\n }\n let mv = new Transformation(moveorbits);\n if (amount !== 1) {\n mv = mv.mulScalar(amount);\n }\n return mv;\n }\n omitSet(name) {\n for (let k = 0; k < this.omitsets.length; k++) {\n if (this.omitsets[k] === name) {\n return true;\n }\n }\n return false;\n }\n diffmvsets(a, b, slices, neg) {\n for (let i2 = 0; i2 < a.length; i2 += 2) {\n let found = false;\n for (let j = 0; !found && j < b.length; j += 2) {\n if (neg) {\n if (a[i2][0] + b[j][1] === slices && a[i2][1] + b[j][0] === slices && a[i2 + 1] === b[j + 1]) {\n found = true;\n }\n } else {\n if (a[i2][0] === b[j][0] && a[i2][1] === b[j][1] && a[i2 + 1] === b[j + 1]) {\n found = true;\n }\n }\n }\n if (!found) {\n return true;\n }\n }\n return false;\n }\n getOrbitsDef(fortwisty) {\n const setmoves = [];\n if (fortwisty) {\n for (let i2 = 0; i2 < this.cubiesetnames.length; i2++) {\n setmoves.push(1);\n }\n }\n const setnames = [];\n const setdefs = [];\n const mps = [];\n const addrot = [];\n for (let k = 0; k < this.moveplanesets.length; k++) {\n const moveset = this.getmovesets(k);\n mps.push(moveset);\n if (this.addrotations) {\n addrot.push(1);\n } else {\n addrot.push(0);\n }\n }\n if (this.movelist && this.addrotations) {\n for (let i2 = 0; i2 < this.moverotations.length; i2++) {\n addrot[i2] = 0;\n }\n for (let k = 0; k < this.moveplanesets.length; k++) {\n for (let i2 = 0; i2 < this.moverotations.length; i2++) {\n let nn = this.moveplanenormals[k];\n for (let ii = 1; ii * 2 <= this.movesetorders[i2]; ii++) {\n nn = nn.rotatepoint(this.moverotations[i2][0]);\n if (addrot[i2] & ii) {\n continue;\n }\n let found = -1;\n let neg = false;\n for (let j = 0; found < 0 && j < this.moveplanenormals.length; j++) {\n if (nn.dist(this.moveplanenormals[j]) < eps3) {\n found = j;\n } else if (nn.dist(this.moveplanenormals[j].smul(-1)) < eps3) {\n found = j;\n neg = true;\n }\n }\n if (found < 0) {\n throw new Error(\"Could not find rotation\");\n }\n let cmp = mps[found];\n if (cmp.length !== mps[k].length || this.moveplanesets[k].length !== this.moveplanesets[found].length || this.diffmvsets(cmp, mps[k], this.moveplanesets[found].length, neg)) {\n addrot[i2] |= ii;\n }\n }\n }\n }\n for (let i2 = 0; i2 < this.moverotations.length; i2++) {\n if (addrot[i2] === 0) {\n addrot[i2] = 1;\n } else if (addrot[i2] === 1) {\n if (this.movesetorders[i2] > 3) {\n addrot[i2] = 2;\n } else {\n addrot[i2] = 0;\n }\n } else if (addrot[i2] === 3) {\n addrot[i2] = 0;\n } else {\n throw new Error(\"Impossible addrot val\");\n }\n }\n }\n for (let k = 0; k < this.moveplanesets.length; k++) {\n if (addrot[k] !== 0) {\n mps[k].push([0, this.moveplanesets[k].length]);\n mps[k].push(addrot[k]);\n }\n }\n for (let k = 0; k < this.moveplanesets.length; k++) {\n const moveset = mps[k];\n const movesetorder = this.movesetorders[k];\n for (let i2 = 0; i2 < moveset.length; i2 += 2) {\n for (let j = 0; j < i2; j += 2) {\n if (moveset[i2] === moveset[j] && moveset[i2 + 1] === moveset[j + 1]) {\n throw new Error(\"Redundant moves in moveset.\");\n }\n }\n }\n const allbits = [];\n for (let i2 = 0; i2 < moveset.length; i2 += 2) {\n for (let j = moveset[i2][0]; j <= moveset[i2][1]; j++) {\n allbits[j] = 1;\n }\n }\n const axiscmoves = this.cmovesbyslice[k];\n for (let i2 = 0; i2 < axiscmoves.length; i2++) {\n if (allbits[i2] !== 1) {\n continue;\n }\n const slicecmoves = axiscmoves[i2];\n for (let j = 0; j < slicecmoves.length; j += 2 * movesetorder) {\n if (this.skipcubie(slicecmoves[j])) {\n continue;\n }\n const ind = this.cubiesetnums[slicecmoves[j]];\n setmoves[ind] = 1;\n }\n }\n }\n for (let i2 = 0; i2 < this.cubiesetnames.length; i2++) {\n if (!setmoves[i2]) {\n continue;\n }\n if (this.omitSet(this.cubiesetnames[i2])) {\n setmoves[i2] = 0;\n continue;\n }\n setnames.push(this.cubiesetnames[i2]);\n setdefs.push(new OrbitDef(this.cubieords[i2], this.killorientation ? 1 : this.orbitoris[i2]));\n }\n const solved = [];\n for (let i2 = 0; i2 < this.cubiesetnames.length; i2++) {\n if (!setmoves[i2]) {\n continue;\n }\n if (this.omitSet(this.cubiesetnames[i2])) {\n continue;\n }\n const p = [];\n const o2 = [];\n for (let j = 0; j < this.cubieords[i2]; j++) {\n if (fortwisty) {\n p.push(j);\n } else {\n const cubie = this.cubiesetcubies[i2][j];\n p.push(this.cubievaluemap[cubie]);\n }\n o2.push(0);\n }\n solved.push(new Orbit(p, o2, this.killorientation ? 1 : this.orbitoris[i2]));\n }\n const movenames = [];\n const moves = [];\n for (let k = 0; k < this.moveplanesets.length; k++) {\n const moveplaneset = this.moveplanesets[k];\n const slices = moveplaneset.length;\n const moveset = mps[k];\n const movesetgeo = this.movesetgeos[k];\n for (let i2 = 0; i2 < moveset.length; i2 += 2) {\n const movebits = moveset[i2];\n const mna = getmovename(movesetgeo, movebits, slices);\n const movename = mna[0];\n const inverted = mna[1];\n if (moveset[i2 + 1] === 1) {\n movenames.push(movename);\n } else {\n movenames.push(movename + moveset[i2 + 1]);\n }\n const mv = this.getMoveFromBits(movebits, moveset[i2 + 1], inverted, this.cmovesbyslice[k], setmoves, this.movesetorders[k]);\n moves.push(mv);\n }\n }\n this.ksolvemovenames = movenames;\n let r2 = new OrbitsDef(setnames, setdefs, new VisibleState(solved), movenames, moves);\n if (this.optimize) {\n r2 = r2.optimize();\n }\n if (this.scramble !== 0) {\n r2.scramble(this.scramble);\n }\n return r2;\n }\n getMovesAsPerms() {\n return this.getOrbitsDef(false).moveops.map((_5) => _5.toPerm());\n }\n showcanon(disp) {\n showcanon(this.getOrbitsDef(false), disp);\n }\n getsolved() {\n const r2 = [];\n for (let i2 = 0; i2 < this.basefacecount; i2++) {\n for (let j = 0; j < this.stickersperface; j++) {\n r2.push(i2);\n }\n }\n return new Perm(r2);\n }\n getOrientationRotation(desiredRotation) {\n const feature1name = desiredRotation[0];\n const direction1 = new Quat(0, desiredRotation[1][0], -desiredRotation[1][1], desiredRotation[1][2]);\n const feature2name = desiredRotation[2];\n const direction2 = new Quat(0, desiredRotation[3][0], -desiredRotation[3][1], desiredRotation[3][2]);\n let feature1 = null;\n let feature2 = null;\n const feature1geoname = this.swizzler.unswizzle(feature1name);\n const feature2geoname = this.swizzler.unswizzle(feature2name);\n for (const gn of this.geonormals) {\n if (feature1geoname === gn[1]) {\n feature1 = gn[0];\n }\n if (feature2geoname === gn[1]) {\n feature2 = gn[0];\n }\n }\n if (!feature1) {\n throw new Error(\"Could not find feature \" + feature1name);\n }\n if (!feature2) {\n throw new Error(\"Could not find feature \" + feature2name);\n }\n const r1 = feature1.pointrotation(direction1);\n const feature2rot = feature2.rotatepoint(r1);\n const r2 = feature2rot.unproject(direction1).pointrotation(direction2.unproject(direction1));\n return r2.mul(r1);\n }\n getInitial3DRotation() {\n const basefacecount = this.basefacecount;\n let rotDesc = null;\n if (this.puzzleOrientation) {\n rotDesc = this.puzzleOrientation;\n } else if (this.puzzleOrientations) {\n rotDesc = this.puzzleOrientations[basefacecount];\n }\n if (!rotDesc) {\n rotDesc = defaultOrientations()[basefacecount];\n }\n if (!rotDesc) {\n throw new Error(\"No default orientation?\");\n }\n return this.getOrientationRotation(rotDesc);\n }\n generatesvg(w = 800, h = 500, trim = 10, threed = false) {\n w -= 2 * trim;\n h -= 2 * trim;\n function extendedges(a, n) {\n let dx = a[1][0] - a[0][0];\n let dy = a[1][1] - a[0][1];\n const ang = 2 * Math.PI / n;\n const cosa = Math.cos(ang);\n const sina = Math.sin(ang);\n for (let i2 = 2; i2 < n; i2++) {\n const ndx = dx * cosa + dy * sina;\n dy = dy * cosa - dx * sina;\n dx = ndx;\n a.push([a[i2 - 1][0] + dx, a[i2 - 1][1] + dy]);\n }\n }\n function noise(c) {\n return c + 0 * (Math.random() - 0.5);\n }\n function drawedges(id, pts, color) {\n return '<polygon id=\"' + id + '\" class=\"sticker\" style=\"fill: ' + color + '\" points=\"' + pts.map((p) => noise(p[0]) + \" \" + noise(p[1])).join(\" \") + '\"/>\\n';\n }\n let needvertexgrips = this.addrotations;\n let neededgegrips = this.addrotations;\n let needfacegrips = this.addrotations;\n for (let i2 = 0; i2 < this.movesetgeos.length; i2++) {\n const msg = this.movesetgeos[i2];\n for (let j = 1; j <= 3; j += 2) {\n if (msg[j] === \"v\") {\n needvertexgrips = true;\n }\n if (msg[j] === \"f\") {\n needfacegrips = true;\n }\n if (msg[j] === \"e\") {\n neededgegrips = true;\n }\n }\n }\n this.genperms();\n const boundarygeo = this.getboundarygeometry();\n const face0 = boundarygeo.facenames[0][0];\n const polyn = face0.length;\n const net = this.net;\n if (net === null) {\n throw new Error(\"No net?\");\n }\n const edges = {};\n let minx = 0;\n let miny = 0;\n let maxx = 1;\n let maxy = 0;\n edges[net[0][0]] = [\n [1, 0],\n [0, 0]\n ];\n extendedges(edges[net[0][0]], polyn);\n for (let i2 = 0; i2 < net.length; i2++) {\n const f0 = net[i2][0];\n if (!edges[f0]) {\n throw new Error(\"Bad edge description; first edge not connected.\");\n }\n for (let j = 1; j < net[i2].length; j++) {\n const f1 = net[i2][j];\n if (f1 === \"\" || edges[f1]) {\n continue;\n }\n edges[f1] = [edges[f0][j % polyn], edges[f0][(j + polyn - 1) % polyn]];\n extendedges(edges[f1], polyn);\n }\n }\n for (const f in edges) {\n const es = edges[f];\n for (let i2 = 0; i2 < es.length; i2++) {\n minx = Math.min(minx, es[i2][0]);\n maxx = Math.max(maxx, es[i2][0]);\n miny = Math.min(miny, es[i2][1]);\n maxy = Math.max(maxy, es[i2][1]);\n }\n }\n const sc = Math.min(w / (maxx - minx), h / (maxy - miny));\n const xoff = 0.5 * (w - sc * (maxx + minx));\n const yoff = 0.5 * (h - sc * (maxy + miny));\n const geos = {};\n const bg = this.getboundarygeometry();\n const edges2 = {};\n const initv = [\n [sc + xoff, yoff],\n [xoff, yoff]\n ];\n edges2[net[0][0]] = initv;\n extendedges(edges2[net[0][0]], polyn);\n geos[this.facenames[0][1]] = this.project2d(0, 0, [\n new Quat(0, initv[0][0], initv[0][1], 0),\n new Quat(0, initv[1][0], initv[1][1], 0)\n ]);\n const connectat = [];\n connectat[0] = 0;\n for (let i2 = 0; i2 < net.length; i2++) {\n const f0 = net[i2][0];\n if (!edges2[f0]) {\n throw new Error(\"Bad edge description; first edge not connected.\");\n }\n let gfi = -1;\n for (let j = 0; j < bg.facenames.length; j++) {\n if (f0 === bg.facenames[j][1]) {\n gfi = j;\n break;\n }\n }\n if (gfi < 0) {\n throw new Error(\"Could not find first face name \" + f0);\n }\n const thisface = bg.facenames[gfi][0];\n for (let j = 1; j < net[i2].length; j++) {\n const f1 = net[i2][j];\n if (f1 === \"\" || edges2[f1]) {\n continue;\n }\n edges2[f1] = [\n edges2[f0][j % polyn],\n edges2[f0][(j + polyn - 1) % polyn]\n ];\n extendedges(edges2[f1], polyn);\n const caf0 = connectat[gfi];\n const mp = thisface[(caf0 + j) % polyn].sum(thisface[(caf0 + j + polyn - 1) % polyn]).smul(0.5);\n const epi = findelement(bg.edgenames, mp);\n const edgename = bg.edgenames[epi][1];\n const el = splitByFaceNames(edgename, this.facenames);\n const gf1 = el[f0 === el[0] ? 1 : 0];\n let gf1i = -1;\n for (let k = 0; k < bg.facenames.length; k++) {\n if (gf1 === bg.facenames[k][1]) {\n gf1i = k;\n break;\n }\n }\n if (gf1i < 0) {\n throw new Error(\"Could not find second face name\");\n }\n const otherface = bg.facenames[gf1i][0];\n for (let k = 0; k < otherface.length; k++) {\n const mp2 = otherface[k].sum(otherface[(k + 1) % polyn]).smul(0.5);\n if (mp2.dist(mp) <= eps3) {\n const p1 = edges2[f0][(j + polyn - 1) % polyn];\n const p2 = edges2[f0][j % polyn];\n connectat[gf1i] = k;\n geos[gf1] = this.project2d(gf1i, k, [\n new Quat(0, p2[0], p2[1], 0),\n new Quat(0, p1[0], p1[1], 0)\n ]);\n break;\n }\n }\n }\n }\n const pos = this.getsolved();\n const colormap = [];\n const facegeo = [];\n for (let i2 = 0; i2 < this.basefacecount; i2++) {\n colormap[i2] = this.colors[this.facenames[i2][1]];\n }\n let hix = 0;\n let hiy = 0;\n const rot = this.getInitial3DRotation();\n for (let i2 = 0; i2 < this.faces.length; i2++) {\n let face = this.faces[i2];\n face = rot.rotateface(face);\n for (let j = 0; j < face.length; j++) {\n hix = Math.max(hix, Math.abs(face[j].b));\n hiy = Math.max(hiy, Math.abs(face[j].c));\n }\n }\n const sc2 = Math.min(h / hiy / 2, (w - trim) / hix / 4);\n const mappt2d = (fn, q) => {\n if (threed) {\n const xoff2 = 0.5 * trim + 0.25 * w;\n const xmul = this.baseplanes[fn].rotateplane(rot).d < 0 ? 1 : -1;\n return [\n trim + w * 0.5 + xmul * (xoff2 - q.b * sc2),\n trim + h * 0.5 + q.c * sc2\n ];\n } else {\n const g = geos[this.facenames[fn][1]];\n return [trim + q.dot(g[0]) + g[2].b, trim + h - q.dot(g[1]) - g[2].c];\n }\n };\n for (let i2 = 0; i2 < this.faces.length; i2++) {\n let face = this.faces[i2];\n const facenum = Math.floor(i2 / this.stickersperface);\n if (threed) {\n face = rot.rotateface(face);\n }\n facegeo.push(face.map((_5) => mappt2d(facenum, _5)));\n }\n const svg = [];\n for (let j = 0; j < this.basefacecount; j++) {\n svg.push(\"<g>\");\n svg.push(\"<title>\" + this.facenames[j][1] + \"</title>\\n\");\n for (let ii = 0; ii < this.stickersperface; ii++) {\n const i2 = j * this.stickersperface + ii;\n const cubie = this.facetocubies[i2][0];\n const cubieori = this.facetocubies[i2][1];\n const cubiesetnum = this.cubiesetnums[cubie];\n const cubieord = this.cubieordnums[cubie];\n const color = this.graybyori(cubie) ? \"#808080\" : colormap[pos.p[i2]];\n let id = this.cubiesetnames[cubiesetnum] + \"-l\" + cubieord + \"-o\" + cubieori;\n svg.push(drawedges(id, facegeo[i2], color));\n if (this.duplicatedFaces[i2]) {\n for (let jj = 1; jj < this.duplicatedFaces[i2]; jj++) {\n id = this.cubiesetnames[cubiesetnum] + \"-l\" + cubieord + \"-o\" + jj;\n svg.push(drawedges(id, facegeo[i2], color));\n }\n }\n }\n svg.push(\"</g>\");\n }\n const svggrips = [];\n function addgrip(onface, name, pt, order) {\n const pt2 = mappt2d(onface, pt);\n for (let i2 = 0; i2 < svggrips.length; i2++) {\n if (Math.hypot(pt2[0] - svggrips[i2][0], pt2[1] - svggrips[i2][1]) < eps3) {\n return;\n }\n }\n svggrips.push([pt2[0], pt2[1], name, order]);\n }\n for (let i2 = 0; i2 < this.faceplanes.length; i2++) {\n const baseface = this.facenames[i2][0];\n let facecoords = baseface;\n if (threed) {\n facecoords = rot.rotateface(facecoords);\n }\n if (needfacegrips) {\n let pt = this.faceplanes[i2][0];\n if (threed) {\n pt = pt.rotatepoint(rot);\n }\n addgrip(i2, this.faceplanes[i2][1], pt, polyn);\n }\n for (let j = 0; j < baseface.length; j++) {\n if (neededgegrips) {\n const mp = baseface[j].sum(baseface[(j + 1) % baseface.length]).smul(0.5);\n const ep = findelement(this.edgenames, mp);\n const mpc = facecoords[j].sum(facecoords[(j + 1) % baseface.length]).smul(0.5);\n addgrip(i2, this.edgenames[ep][1], mpc, 2);\n }\n if (needvertexgrips) {\n const vp = findelement(this.vertexnames, baseface[j]);\n addgrip(i2, this.vertexnames[vp][1], facecoords[j], this.cornerfaces);\n }\n }\n }\n const html = '<svg id=\"svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 800 500\">\\n<style type=\"text/css\"><![CDATA[.sticker { stroke: #000000; stroke-width: 1px; }]]></style>\\n' + svg.join(\"\") + \"</svg>\";\n this.svggrips = svggrips;\n return html;\n }\n dist(a, b) {\n return Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);\n }\n triarea(a, b, c) {\n const ab = this.dist(a, b);\n const bc = this.dist(b, c);\n const ac = this.dist(a, c);\n const p = (ab + bc + ac) / 2;\n return Math.sqrt(p * (p - ab) * (p - bc) * (p - ac));\n }\n polyarea(coords) {\n let sum = 0;\n for (let i2 = 2; i2 < coords.length; i2++) {\n sum += this.triarea(coords[0], coords[1], coords[i2]);\n }\n return sum;\n }\n get3d(colorfrac = DEFAULT_COLOR_FRACTION, options) {\n const stickers = [];\n const foundations = [];\n const rot = this.getInitial3DRotation();\n const faces = [];\n const maxdist = 0.52 * this.basefaces[0][0].len();\n let avgstickerarea = 0;\n for (let i2 = 0; i2 < this.basefaces.length; i2++) {\n const coords = rot.rotateface(this.basefaces[i2]);\n const name = this.facenames[i2][1];\n faces.push({ coords: toFaceCoords(coords, maxdist), name });\n avgstickerarea += this.polyarea(faces[i2].coords);\n }\n avgstickerarea /= this.faces.length;\n const trim = Math.sqrt(avgstickerarea) * (1 - Math.sqrt(colorfrac)) / 2;\n for (let i2 = 0; i2 < this.faces.length; i2++) {\n const facenum = Math.floor(i2 / this.stickersperface);\n const cubie = this.facetocubies[i2][0];\n const cubieori = this.facetocubies[i2][1];\n const cubiesetnum = this.cubiesetnums[cubie];\n const cubieord = this.cubieordnums[cubie];\n let color = this.graybyori(cubie) ? \"#808080\" : this.colors[this.facenames[facenum][1]];\n if (options == null ? void 0 : options.stickerColors) {\n color = options.stickerColors[i2];\n }\n let coords = rot.rotateface(this.faces[i2]);\n foundations.push({\n coords: toFaceCoords(coords, maxdist),\n color,\n orbit: this.cubiesetnames[cubiesetnum],\n ord: cubieord,\n ori: cubieori\n });\n const fcoords = coords;\n if (trim && trim > 0) {\n coords = trimEdges(coords, trim);\n }\n stickers.push({\n coords: toFaceCoords(coords, maxdist),\n color,\n orbit: this.cubiesetnames[cubiesetnum],\n ord: cubieord,\n ori: cubieori\n });\n if (this.duplicatedFaces[i2]) {\n for (let jj = 1; jj < this.duplicatedFaces[i2]; jj++) {\n stickers.push({\n coords: toFaceCoords(coords, maxdist),\n color,\n orbit: this.cubiesetnames[cubiesetnum],\n ord: cubieord,\n ori: jj\n });\n foundations.push({\n coords: toFaceCoords(fcoords, maxdist),\n color,\n orbit: this.cubiesetnames[cubiesetnum],\n ord: cubieord,\n ori: jj\n });\n }\n }\n }\n const grips = [];\n for (let i2 = 0; i2 < this.movesetgeos.length; i2++) {\n const msg = this.movesetgeos[i2];\n const order = this.movesetorders[i2];\n for (let j = 0; j < this.geonormals.length; j++) {\n const gn = this.geonormals[j];\n if (msg[0] === gn[1] && msg[1] === gn[2]) {\n grips.push([toCoords(gn[0].rotatepoint(rot), 1), msg[0], order]);\n grips.push([\n toCoords(gn[0].rotatepoint(rot).smul(-1), 1),\n msg[2],\n order\n ]);\n }\n }\n }\n const f = function() {\n return function(mv) {\n return this.unswizzle(mv);\n };\n }().bind(this);\n return {\n stickers,\n foundations,\n faces,\n axis: grips,\n unswizzle: f,\n notationMapper: this.notationMapper\n };\n }\n getGeoNormal(geoname) {\n const rot = this.getInitial3DRotation();\n const grip = this.swizzler.unswizzle(geoname);\n for (let j = 0; j < this.geonormals.length; j++) {\n const gn = this.geonormals[j];\n if (grip === gn[1]) {\n const r2 = toCoords(gn[0].rotatepoint(rot), 1);\n if (Math.abs(r2[0]) < eps3 && Math.abs(r2[2]) < eps3) {\n r2[0] = 0;\n r2[2] = 1e-6;\n }\n return r2;\n }\n }\n return void 0;\n }\n getfaceindex(facenum) {\n const divid = this.stickersperface;\n return Math.floor(facenum / divid);\n }\n };\n PGNotation = class {\n constructor(pg, od) {\n this.pg = pg;\n this.cache = {};\n this.orbitNames = od.orbitnames;\n }\n lookupMove(move) {\n const key = this.moveToKeyString(move);\n if (key in this.cache) {\n return this.cache[key];\n }\n const mv = this.pg.parseMove(move);\n if (this.pg.parsedmovelist) {\n let found = false;\n for (let i2 = 0; i2 < this.pg.parsedmovelist.length; i2++) {\n if (this.pg.parsedmovelist[i2][1] === mv[1] && this.pg.parsedmovelist[i2][2] === mv[2] && this.pg.parsedmovelist[i2][3] === mv[3] && this.pg.parsedmovelist[i2][4] === mv[4]) {\n found = true;\n }\n }\n if (!found) {\n return void 0;\n }\n }\n let bits = [mv[2], mv[3]];\n if (!mv[4]) {\n const slices = this.pg.moveplanesets[mv[1]].length;\n bits = [slices - mv[3], slices - mv[2]];\n }\n const pgmv = this.pg.getMoveFromBits(bits, mv[5], !mv[4], this.pg.cmovesbyslice[mv[1]], void 0, this.pg.movesetorders[mv[1]]);\n const r2 = OrbitsDef.transformToKPuzzle(this.orbitNames, pgmv);\n this.cache[key] = r2;\n return r2;\n }\n moveToKeyString(move) {\n let r2 = \"\";\n if (move.outerLayer) {\n r2 = r2 + move.outerLayer + \",\";\n }\n if (move.innerLayer) {\n r2 = r2 + move.innerLayer + \",\";\n }\n r2 = r2 + move.family + \",\" + move.amount;\n return r2;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/Options.ts\nfunction parseoptions(argv, optionlist) {\n let argp = 0;\n while (argp < argv.length && argv[argp][0] === \"-\") {\n const option = argv[argp++];\n if (option === \"--rotations\") {\n optionlist.push(\"rotations\", true);\n } else if (option === \"--allmoves\") {\n optionlist.push(\"allmoves\", true);\n } else if (option === \"--outerblockmoves\") {\n optionlist.push(\"outerblockmoves\", true);\n } else if (option === \"--vertexmoves\") {\n optionlist.push(\"vertexmoves\", true);\n } else if (option === \"--nocorners\") {\n optionlist.push(\"cornersets\", false);\n } else if (option === \"--noedges\") {\n optionlist.push(\"edgesets\", false);\n } else if (option === \"--noorientation\") {\n optionlist.push(\"killorientation\", true);\n } else if (option === \"--nocenters\") {\n optionlist.push(\"centersets\", false);\n } else if (option === \"--omit\") {\n optionlist.push(\"omit\", argv[argp].split(\",\"));\n argp++;\n } else if (option === \"--moves\") {\n optionlist.push(\"movelist\", argv[argp].split(\",\"));\n argp++;\n } else if (option === \"--optimize\") {\n optionlist.push(\"optimize\", true);\n } else if (option === \"--scramble\") {\n optionlist.push(\"scramble\", 100);\n } else if (option === \"--fixcorner\") {\n optionlist.push(\"fix\", \"v\");\n } else if (option === \"--fixedge\") {\n optionlist.push(\"fix\", \"e\");\n } else if (option === \"--fixcenter\") {\n optionlist.push(\"fix\", \"f\");\n } else if (option === \"--orientcenters\") {\n optionlist.push(\"orientcenters\", true);\n } else if (option === \"--puzzleorientation\") {\n optionlist.push(\"puzzleorientation\", argv[argp]);\n argp++;\n } else {\n throw new Error(\"Bad option: \" + option);\n }\n }\n return argp;\n}\nvar init_Options = __esm({\n \"src/cubing/puzzle-geometry/Options.ts\"() {\n }\n});\n\n// src/cubing/puzzle-geometry/SchreierSims.ts\nfunction schreierSims(g, disp) {\n const n = g[0].p.length;\n const e = identity(n);\n let sgs = [];\n let sgsi = [];\n let sgslen = [];\n let Tk = [];\n let Tklen = [];\n function resolve(p) {\n for (let i2 = p.p.length - 1; i2 >= 0; i2--) {\n const j = p.p[i2];\n if (j !== i2) {\n if (!sgs[i2][j]) {\n return false;\n }\n p = p.mul(sgsi[i2][j]);\n }\n }\n return true;\n }\n function knutha(k, p, len) {\n Tk[k].push(p);\n Tklen[k].push(len);\n for (let i2 = 0; i2 < sgs[k].length; i2++) {\n if (sgs[k][i2]) {\n knuthb(k, sgs[k][i2].mul(p), len + sgslen[k][i2]);\n }\n }\n }\n function knuthb(k, p, len) {\n const j = p.p[k];\n if (!sgs[k][j]) {\n sgs[k][j] = p;\n sgsi[k][j] = p.inv();\n sgslen[k][j] = len;\n for (let i2 = 0; i2 < Tk[k].length; i2++) {\n knuthb(k, p.mul(Tk[k][i2]), len + Tklen[k][i2]);\n }\n return;\n }\n const p2 = p.mul(sgsi[k][j]);\n if (!resolve(p2)) {\n knutha(k - 1, p2, len + sgslen[k][j]);\n }\n }\n function getsgs() {\n sgs = [];\n sgsi = [];\n Tk = [];\n sgslen = [];\n Tklen = [];\n for (let i2 = 0; i2 < n; i2++) {\n sgs.push([]);\n sgsi.push([]);\n sgslen.push([]);\n Tk.push([]);\n Tklen.push([]);\n sgs[i2][i2] = e;\n sgsi[i2][i2] = e;\n sgslen[i2][i2] = 0;\n }\n let none = 0;\n let sz = 1;\n for (let i2 = 0; i2 < g.length; i2++) {\n knutha(n - 1, g[i2], 1);\n sz = 1;\n let tks = 0;\n let sollen = 0;\n const avgs = [];\n const mults = new FactoredNumber();\n for (let j = 0; j < n; j++) {\n let cnt = 0;\n let lensum = 0;\n for (let k = 0; k < n; k++) {\n if (sgs[j][k]) {\n cnt++;\n lensum += sgslen[j][k];\n if (j !== k) {\n none++;\n }\n }\n }\n tks += Tk[j].length;\n sz *= cnt;\n if (cnt > 1) {\n mults.multiply(cnt);\n }\n const avg = lensum / cnt;\n avgs.push(avg);\n sollen += avg;\n }\n disp(\"\" + i2 + \": sz \" + sz + \" T \" + tks + \" sol \" + sollen + \" none \" + none + \" mults \" + mults);\n }\n return sz;\n }\n return getsgs();\n}\nvar FactoredNumber;\nvar init_SchreierSims = __esm({\n \"src/cubing/puzzle-geometry/SchreierSims.ts\"() {\n init_Perm();\n FactoredNumber = class {\n constructor() {\n this.mult = [];\n }\n multiply(n) {\n for (let f = 2; f * f <= n; f++) {\n while (n % f === 0) {\n if (this.mult[f] !== void 0) {\n this.mult[f]++;\n } else {\n this.mult[f] = 1;\n }\n n /= f;\n }\n }\n if (n > 1) {\n if (this.mult[n] !== void 0) {\n this.mult[n]++;\n } else {\n this.mult[n] = 1;\n }\n }\n }\n toString() {\n let r2 = \"\";\n for (let i2 = 0; i2 < this.mult.length; i2++) {\n if (this.mult[i2] !== void 0) {\n if (r2 !== \"\") {\n r2 += \"*\";\n }\n r2 += i2;\n if (this.mult[i2] > 1) {\n r2 += \"^\" + this.mult[i2];\n }\n }\n }\n return r2;\n }\n };\n }\n});\n\n// src/cubing/puzzle-geometry/index.ts\nvar puzzle_geometry_exports = {};\n__export(puzzle_geometry_exports, {\n Orbit: () => Orbit,\n OrbitDef: () => OrbitDef,\n OrbitsDef: () => OrbitsDef,\n Perm: () => Perm,\n PuzzleGeometry: () => PuzzleGeometry,\n Quat: () => Quat,\n Transformation: () => Transformation,\n VisibleState: () => VisibleState,\n getPuzzleGeometryByDesc: () => getPuzzleGeometryByDesc,\n getPuzzleGeometryByName: () => getPuzzleGeometryByName,\n getpuzzle: () => getpuzzle,\n getpuzzles: () => getpuzzles,\n parsedesc: () => parsedesc,\n parseoptions: () => parseoptions,\n schreierSims: () => schreierSims,\n useNewFaceNames: () => useNewFaceNames\n});\nvar init_puzzle_geometry = __esm({\n \"src/cubing/puzzle-geometry/index.ts\"() {\n init_Perm();\n init_PermOriSet();\n init_PuzzleGeometry();\n init_Options();\n init_Quat();\n init_SchreierSims();\n }\n});\n\n// src/cubing/puzzles/async/async-pg3d.ts\nfunction asyncGetPuzzleGeometry(puzzleName) {\n return __async(this, null, function* () {\n const puzzleGeometry = yield Promise.resolve().then(() => (init_puzzle_geometry(), puzzle_geometry_exports));\n return puzzleGeometry.getPuzzleGeometryByName(puzzleName, [\n \"allmoves\",\n \"true\",\n \"orientcenters\",\n \"true\",\n \"rotations\",\n \"true\"\n ]);\n });\n}\nfunction asyncGetDef(puzzleName) {\n return __async(this, null, function* () {\n return (yield asyncGetPuzzleGeometry(puzzleName)).writekpuzzle(true);\n });\n}\nfunction genericPGPuzzleLoader(id, fullName, info) {\n const puzzleLoader = {\n id,\n fullName,\n def: () => __async(this, null, function* () {\n return asyncGetDef(id);\n }),\n svg: () => __async(this, null, function* () {\n const pg = yield asyncGetPuzzleGeometry(id);\n return pg.generatesvg();\n }),\n pg: () => __async(this, null, function* () {\n return asyncGetPuzzleGeometry(id);\n })\n };\n if (info == null ? void 0 : info.inventedBy) {\n puzzleLoader.inventedBy = info.inventedBy;\n }\n if (info == null ? void 0 : info.inventionYear) {\n puzzleLoader.inventionYear = info.inventionYear;\n }\n return puzzleLoader;\n}\nfunction cubePGPuzzleLoader(id, fullName, info) {\n const puzzleLoader = genericPGPuzzleLoader(id, fullName, info);\n puzzleLoader.appearance = cubeAppearance.bind(cubeAppearance, puzzleLoader);\n puzzleLoader.stickerings = cubeStickerings;\n return puzzleLoader;\n}\nvar init_async_pg3d = __esm({\n \"src/cubing/puzzles/async/async-pg3d.ts\"() {\n init_cube_stickerings();\n }\n});\n\n// src/cubing/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json_.ts\nvar x2x2_kpuzzle_json_exports = {};\n__export(x2x2_kpuzzle_json_exports, {\n cube2x2x2KPuzzle: () => cube2x2x2KPuzzle\n});\nvar cube2x2x2KPuzzle;\nvar init_x2x2_kpuzzle_json = __esm({\n \"src/cubing/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json_.ts\"() {\n cube2x2x2KPuzzle = {\n name: \"2x2x2\",\n orbits: {\n CORNERS: { numPieces: 8, orientations: 3 }\n },\n startPieces: {\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n }\n },\n moves: {\n U: {\n CORNERS: {\n permutation: [1, 2, 3, 0, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n }\n },\n y: {\n CORNERS: {\n permutation: [1, 2, 3, 0, 7, 4, 5, 6],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n }\n },\n x: {\n CORNERS: {\n permutation: [4, 0, 3, 5, 7, 6, 2, 1],\n orientation: [2, 1, 2, 1, 1, 2, 1, 2]\n }\n },\n L: {\n CORNERS: {\n permutation: [0, 1, 6, 2, 4, 3, 5, 7],\n orientation: [0, 0, 2, 1, 0, 2, 1, 0]\n }\n },\n F: {\n CORNERS: {\n permutation: [3, 1, 2, 5, 0, 4, 6, 7],\n orientation: [1, 0, 0, 2, 2, 1, 0, 0]\n }\n },\n R: {\n CORNERS: {\n permutation: [4, 0, 2, 3, 7, 5, 6, 1],\n orientation: [2, 1, 0, 0, 1, 0, 0, 2]\n }\n },\n B: {\n CORNERS: {\n permutation: [0, 7, 1, 3, 4, 5, 2, 6],\n orientation: [0, 2, 1, 0, 0, 0, 2, 1]\n }\n },\n D: {\n CORNERS: {\n permutation: [0, 1, 2, 3, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n }\n },\n z: {\n CORNERS: {\n permutation: [3, 2, 6, 5, 0, 4, 7, 1],\n orientation: [1, 2, 1, 2, 2, 1, 2, 1]\n }\n }\n }\n };\n cube2x2x2KPuzzle.moves[\"Rv\"] = cube2x2x2KPuzzle.moves[\"x\"];\n cube2x2x2KPuzzle.moves[\"Uv\"] = cube2x2x2KPuzzle.moves[\"y\"];\n cube2x2x2KPuzzle.moves[\"Fv\"] = cube2x2x2KPuzzle.moves[\"z\"];\n cube2x2x2KPuzzle.moves[\"Lv\"] = {\n CORNERS: {\n permutation: [1, 7, 6, 2, 0, 3, 5, 4],\n orientation: [2, 1, 2, 1, 1, 2, 1, 2]\n }\n };\n cube2x2x2KPuzzle.moves[\"Dv\"] = {\n CORNERS: {\n permutation: [3, 0, 1, 2, 5, 6, 7, 4],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0]\n }\n };\n cube2x2x2KPuzzle.moves[\"Bv\"] = {\n CORNERS: {\n permutation: [4, 7, 1, 0, 5, 3, 2, 6],\n orientation: [1, 2, 1, 2, 2, 1, 2, 1]\n }\n };\n }\n});\n\n// src/cubing/puzzles/implementations/2x2x2/2x2x2.kpuzzle.svg.ts\nvar x2x2_kpuzzle_svg_exports = {};\n__export(x2x2_kpuzzle_svg_exports, {\n default: () => x2x2_kpuzzle_svg_default\n});\nvar x2x2_kpuzzle_svg_default;\nvar init_x2x2_kpuzzle_svg = __esm({\n \"src/cubing/puzzles/implementations/2x2x2/2x2x2.kpuzzle.svg.ts\"() {\n x2x2_kpuzzle_svg_default = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 520 394\" preserveAspectRatio=\"xMidYMid meet\">\n <title>2x2x2</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g id=\"puzzle\" transform=\"translate(5, 5) scale(60)\">\n <use id=\"CORNERS-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(4.4, 2.2)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" xlink:href=\"#sticker\" transform=\"translate(3.2, 2.2)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 0)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(6.6, 2.2)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l1-o2\" xlink:href=\"#sticker\" transform=\"translate(5.4, 2.2)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 0)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(0, 2.2)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l2-o2\" xlink:href=\"#sticker\" transform=\"translate(7.6, 2.2)\" style=\"fill: #26f\"/>\n\n <use id=\"CORNERS-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(2.2, 2.2)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o2\" xlink:href=\"#sticker\" transform=\"translate(1, 2.2)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 4.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(3.2, 3.2)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" xlink:href=\"#sticker\" transform=\"translate(4.4, 3.2)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 4.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(1, 3.2)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" xlink:href=\"#sticker\" transform=\"translate(2.2, 3.2)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 5.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" xlink:href=\"#sticker\" transform=\"translate(7.6, 3.2)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" xlink:href=\"#sticker\" transform=\"translate(0, 3.2)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 5.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" xlink:href=\"#sticker\" transform=\"translate(5.4, 3.2)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" xlink:href=\"#sticker\" transform=\"translate(6.6, 3.2)\" style=\"fill: #26f\"/>\n </g>\n\n</svg>`;\n }\n});\n\n// src/cubing/puzzles/implementations/2x2x2/index.ts\nvar cube2x2x2;\nvar init_x2x2 = __esm({\n \"src/cubing/puzzles/implementations/2x2x2/index.ts\"() {\n init_async_pg3d();\n init_cube_stickerings();\n cube2x2x2 = {\n id: \"2x2x2\",\n fullName: \"2\\xD72\\xD72 Cube\",\n def: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_x2x2_kpuzzle_json(), x2x2_kpuzzle_json_exports))).cube2x2x2KPuzzle;\n }),\n svg: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_x2x2_kpuzzle_svg(), x2x2_kpuzzle_svg_exports))).default;\n }),\n pg: () => __async(void 0, null, function* () {\n return asyncGetPuzzleGeometry(\"2x2x2\");\n }),\n appearance: (stickering) => cubeAppearance(cube2x2x2, stickering),\n stickerings: cubeStickerings\n };\n }\n});\n\n// src/cubing/puzzles/implementations/3x3x3/3x3x3.kpuzzle.svg.ts\nvar x3x3_kpuzzle_svg_exports = {};\n__export(x3x3_kpuzzle_svg_exports, {\n default: () => x3x3_kpuzzle_svg_default\n});\nvar x3x3_kpuzzle_svg_default;\nvar init_x3x3_kpuzzle_svg = __esm({\n \"src/cubing/puzzles/implementations/3x3x3/3x3x3.kpuzzle.svg.ts\"() {\n x3x3_kpuzzle_svg_default = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 518 392\" preserveAspectRatio=\"xMidYMid meet\">\n <title>3x3x3</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n\n<!-- 0 1 2 3 4 5 6 7 8 9 10 11 -->\n<!-- | | | | | | | | | | | |<- -->\n<!-- 0 - . . . -->\n<!-- 1 - . . . -->\n<!-- 2 - . . . -->\n<!-- 3 - . . . . . . . . . . . . -->\n<!-- 4 - . . . . . . . . . . . . -->\n<!-- 5 - . . . . . . . . . . . . -->\n<!-- 6 - . . . -->\n<!-- 7 - . . . -->\n<!-- 8 - . . . -->\n\n <g id=\"puzzle\" transform=\"translate(5,5) scale(40)\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,2.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(6.5,3.3)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" xlink:href=\"#sticker\" transform=\"translate(5.3,3.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,0.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(9.7,3.3)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l1-o2\" xlink:href=\"#sticker\" transform=\"translate(8.5,3.3)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,0.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(0.1,3.3)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l2-o2\" xlink:href=\"#sticker\" transform=\"translate(11.7,3.3)\" style=\"fill: #26f\"/>\n\n <use id=\"CORNERS-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,2.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(3.3,3.3)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o2\" xlink:href=\"#sticker\" transform=\"translate(2.1,3.3)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(5.3,5.3)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" xlink:href=\"#sticker\" transform=\"translate(6.5,5.3)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(2.1,5.3)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" xlink:href=\"#sticker\" transform=\"translate(3.3,5.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" xlink:href=\"#sticker\" transform=\"translate(11.7,5.3)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" xlink:href=\"#sticker\" transform=\"translate(0.1,5.3)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" xlink:href=\"#sticker\" transform=\"translate(8.5,5.3)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" xlink:href=\"#sticker\" transform=\"translate(9.7,5.3)\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,2.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,3.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,1.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(7.5,3.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,0.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(10.7,3.3)\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,1.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(1.1,3.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,5.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(7.5,5.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" xlink:href=\"#sticker\" transform=\"translate(10.7,5.3)\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" xlink:href=\"#sticker\" transform=\"translate(1.1,5.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" xlink:href=\"#sticker\" transform=\"translate(6.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" xlink:href=\"#sticker\" transform=\"translate(2.1,4.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" xlink:href=\"#sticker\" transform=\"translate(9.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" xlink:href=\"#sticker\" transform=\"translate(8.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" xlink:href=\"#sticker\" transform=\"translate(11.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" xlink:href=\"#sticker\" transform=\"translate(0.1,4.3)\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o2\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o3\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n\n <use id=\"CENTERS-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n </g>\n\n</svg>`;\n }\n});\n\n// src/cubing/puzzles/implementations/3x3x3/3x3x3-ll.kpuzzle.svg.ts\nvar x3x3_ll_kpuzzle_svg_exports = {};\n__export(x3x3_ll_kpuzzle_svg_exports, {\n default: () => x3x3_ll_kpuzzle_svg_default\n});\nvar x3x3_ll_kpuzzle_svg_default;\nvar init_x3x3_ll_kpuzzle_svg = __esm({\n \"src/cubing/puzzles/implementations/3x3x3/3x3x3-ll.kpuzzle.svg.ts\"() {\n x3x3_ll_kpuzzle_svg_default = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"288px\" height=\"288px\" viewBox=\"-16 -16 288 288\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>3x3x3 LL</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"-10\" y=\"-10\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g id=\"3x3x3-LL\" stroke=\"none\" stroke-width=\"4\" style=\"none\" stroke-linejoin=\"round\">\n <rect id=\"CENTERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o1\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o2\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o3\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n\n <rect id=\"CORNERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l0-o1\" stroke=\"#000000\" style=\"fill: red\" points=\"224 160 252 160 252 252 224 224\"></polygon>\n <polygon id=\"CORNERS-l0-o2\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(206, 238) scale(1, -1) rotate(-90) translate(-206, -238) \" points=\"192 192 220 192 220 284 192 256\"></polygon>\n <rect id=\"CORNERS-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l1-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(206, 18) rotate(-90) translate(-206, -18) \" points=\"192 -28 220 -28 220 64 192 36\"></polygon>\n <polygon id=\"CORNERS-l1-o2\" stroke=\"#000000\" style=\"fill: red\" transform=\"translate(238, 50) scale(1, -1) translate(-238, -50) \" points=\"224 4 252 4 252 96 224 68\"></polygon>\n <rect id=\"CORNERS-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l2-o1\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 50) scale(-1, -1) translate(-18, -50) \" points=\"4 4 32 4 32 96 4 68\"></polygon>\n <polygon id=\"CORNERS-l2-o2\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(50, 18) scale(1, -1) rotate(90) translate(-50, -18) \" points=\"36 -28 64 -28 64 64 36 36\"></polygon>\n <rect id=\"CORNERS-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l3-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(50, 238) rotate(90) translate(-50, -238) \" points=\"36 192 64 192 64 284 36 256\"></polygon>\n <polygon id=\"CORNERS-l3-o2\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 206) scale(-1, 1) translate(-18, -206) \" points=\"4 160 32 160 32 252 4 224\"></polygon>\n\n <rect id=\"EDGES-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l0-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(128, 238) scale(1, -1) rotate(90) translate(-128, -238) \" x=\"114\" y=\"206\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o1\" stroke=\"#000000\" style=\"fill: red\" x=\"224\" y=\"96\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(128, 18) scale(1, -1) rotate(90) translate(-128, -18) \" x=\"114\" y=\"-14\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o1\" stroke=\"#000000\" style=\"fill: orange\" x=\"4\" y=\"96\" width=\"28\" height=\"64\"></rect>\n\n </g>\n <g style=\"opacity: 0\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l4-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l4-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l1-o0\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n </g>\n</svg>`;\n }\n});\n\n// src/cubing/puzzles/implementations/3x3x3/index.ts\nvar cube3x3x3;\nvar init_x3x3 = __esm({\n \"src/cubing/puzzles/implementations/3x3x3/index.ts\"() {\n init_async_pg3d();\n init_cube_stickerings();\n init_x3x3_kpuzzle_json();\n cube3x3x3 = {\n id: \"3x3x3\",\n fullName: \"3\\xD73\\xD73 Cube\",\n inventedBy: [\"Ern\\u0151 Rubik\"],\n inventionYear: 1974,\n def: () => __async(void 0, null, function* () {\n return cube3x3x3KPuzzle;\n }),\n svg: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_x3x3_kpuzzle_svg(), x3x3_kpuzzle_svg_exports))).default;\n }),\n llSVG: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_x3x3_ll_kpuzzle_svg(), x3x3_ll_kpuzzle_svg_exports))).default;\n }),\n pg: () => __async(void 0, null, function* () {\n return asyncGetPuzzleGeometry(\"3x3x3\");\n }),\n appearance: (stickering) => cubeAppearance(cube3x3x3, stickering),\n stickerings: cubeStickerings\n };\n }\n});\n\n// src/cubing/puzzles/implementations/clock/clock.kpuzzle.json_.ts\nvar clock_kpuzzle_json_exports = {};\n__export(clock_kpuzzle_json_exports, {\n clockKPuzzle: () => clockKPuzzle\n});\nvar clockKPuzzle;\nvar init_clock_kpuzzle_json = __esm({\n \"src/cubing/puzzles/implementations/clock/clock.kpuzzle.json_.ts\"() {\n clockKPuzzle = {\n name: \"Clock\",\n orbits: {\n DIALS: { numPieces: 18, orientations: 12 },\n FACES: { numPieces: 18, orientations: 1 },\n FRAME: { numPieces: 1, orientations: 2 }\n },\n startPieces: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n moves: {\n UR_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 1, 1, 0, 1, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n DR_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n DL_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n UL_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n U_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [1, 1, 1, 1, 1, 1, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n R_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 1, 1, 0, 1, 1, 0, 1, 1, -1, 0, 0, 0, 0, 0, -1, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n D_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, -1]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n L_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n ALL_PLUS_: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 0, -1, 0, 0, 0, -1, 0, -1]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n y2: {\n DIALS: {\n permutation: [\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [1] }\n },\n UL: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n UR: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n DL: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n },\n DR: {\n DIALS: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FACES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17\n ],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n FRAME: { permutation: [0], orientation: [0] }\n }\n }\n };\n }\n});\n\n// src/cubing/puzzles/implementations/clock/clock.kpuzzle.svg.ts\nvar clock_kpuzzle_svg_exports = {};\n__export(clock_kpuzzle_svg_exports, {\n default: () => clock_kpuzzle_svg_default\n});\nvar clock_kpuzzle_svg_default;\nvar init_clock_kpuzzle_svg = __esm({\n \"src/cubing/puzzles/implementations/clock/clock.kpuzzle.svg.ts\"() {\n clock_kpuzzle_svg_default = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 480 240\" preserveAspectRatio=\"xMidYMid meet\">\n <title>clock</title>\n <defs>\n <g id=\"hand\" transform=\"translate(-20, -20)\">\n <path d=\"M19.9995197,2.22079449 L23.8791657,19.0203611 C23.9580836,19.3338406 24,19.6620253 24,20 C24,22.209139 22.209139,24 20,24 C17.790861,24 16,22.209139 16,20 C16,19.6620253 16.0419164,19.3338406 16.1208343,19.0203611 L19.9995197,2.22079449 Z\"></path>\n </g>\n <g id=\"cardinal_hours\" style=\"fill: #FFFFFF\">\n <circle cx=\"0\" cy=\"24\" r=\"2\"></circle>\n <circle cx=\"-24\" cy=\"0\" r=\"2\"></circle>\n <circle cx=\"24\" cy=\"0\" r=\"2\"></circle>\n <circle cx=\"0\" cy=\"-24\" r=\"2\"></circle>\n </g>\n <g id=\"face_hours\">\n <g>\n <use xlink:href=\"#cardinal_hours\"/>\n </g>\n <g transform=\"rotate(30)\">\n <use xlink:href=\"#cardinal_hours\"/>\n </g>\n <g transform=\"rotate(60)\">\n <use xlink:href=\"#cardinal_hours\"/>\n </g>\n </g>\n <g id=\"pegs\" stroke=\"#000000\" style=\"fill: #FFD000\">\n <circle id=\"PEG4\" cx=\"90\" cy=\"90\" r=\"10\"></circle>\n <circle id=\"PEG3\" cx=\"30\" cy=\"90\" r=\"10\"></circle>\n <circle id=\"PEG2\" cx=\"90\" cy=\"30\" r=\"10\"></circle>\n <circle id=\"PEG1\" cx=\"30\" cy=\"30\" r=\"10\"></circle>\n </g>\n <g id=\"frame\" transform=\"translate(-24, -24)\">\n <path stroke=\"#000000\" d=\"M120,20 C137.495665,20 153.941932,24.4930026 168.247913,32.3881183 C171.855881,30.8514056 175.828512,30 180,30 C196.568542,30 210,43.4314575 210,60 C210,64.1714878 209.148594,68.1441192 207.610077,71.7536009 C215.506997,86.0580678 220,102.504335 220,120 C220,137.495665 215.506997,153.941932 207.611882,168.247913 C209.148594,171.855881 210,175.828512 210,180 C210,196.568542 196.568542,210 180,210 C175.828512,210 171.855881,209.148594 168.246399,207.610077 C153.941932,215.506997 137.495665,220 120,220 C102.504335,220 86.0580678,215.506997 71.7520869,207.611882 C68.1441192,209.148594 64.1714878,210 60,210 C43.4314575,210 30,196.568542 30,180 C30,175.828512 30.8514056,171.855881 32.3899234,168.246399 C24.4930026,153.941932 20,137.495665 20,120 C20,102.504335 24.4930026,86.0580678 32.3881183,71.7520869 C30.8514056,68.1441192 30,64.1714878 30,60 C30,43.4314575 43.4314575,30 60,30 C64.1714878,30 68.1441192,30.8514056 71.7536009,32.3899234 C86.0580678,24.4930026 102.504335,20 120,20 Z\"></path>\n </g>\n </defs>\n <g>\n <g transform=\"translate(24, 24)\">\n <use xlink:href=\"#frame\" id=\"FRAME-l0-o0\" style=\"fill: #0C5093\"/>\n <use xlink:href=\"#pegs\" transform=\"translate(36, 36)\"/>\n <g transform=\"translate(36, 36)\">\n <circle id=\"FACES-l0-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l0-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l0-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 36)\">\n <circle id=\"FACES-l1-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l1-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l1-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 36)\">\n <circle id=\"FACES-l2-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l2-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l2-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 96)\">\n <circle id=\"FACES-l3-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l3-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l3-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 96)\">\n <circle id=\"FACES-l4-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l4-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l4-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 96)\">\n <circle id=\"FACES-l5-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l5-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l5-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 156)\">\n <circle id=\"FACES-l6-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l6-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l6-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 156)\">\n <circle id=\"FACES-l7-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l7-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l7-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 156)\">\n <circle id=\"FACES-l8-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l8-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l8-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n </g>\n <g transform=\"translate(264, 24)\">\n <use xlink:href=\"#frame\" id=\"FRAME-l0-o1\" style=\"fill: #90B8DF\"/>\n <use xlink:href=\"#pegs\" transform=\"translate(36, 36)\"/>\n <g transform=\"translate(36, 36)\">\n <circle id=\"FACES-l9-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l9-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l9-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 36)\">\n <circle id=\"FACES-l10-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l10-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l10-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 36)\">\n <circle id=\"FACES-l11-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l11-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l11-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 96)\">\n <circle id=\"FACES-l12-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l12-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l12-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 96)\">\n <circle id=\"FACES-l13-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l13-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l13-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 96)\">\n <circle id=\"FACES-l14-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l14-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l14-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 156)\">\n <circle id=\"FACES-l15-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l15-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l15-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 156)\">\n <circle id=\"FACES-l16-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l16-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l16-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 156)\">\n <circle id=\"FACES-l17-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l17-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l17-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n </g>\n </g>\n</svg>`;\n }\n});\n\n// src/cubing/puzzles/implementations/clock/index.ts\nvar clock;\nvar init_clock = __esm({\n \"src/cubing/puzzles/implementations/clock/index.ts\"() {\n clock = {\n id: \"clock\",\n fullName: \"Clock\",\n inventedBy: [\"Christopher C. Wiggs\", \"Christopher J. Taylor\"],\n inventionYear: 1988,\n def: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_clock_kpuzzle_json(), clock_kpuzzle_json_exports))).clockKPuzzle;\n }),\n svg: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_clock_kpuzzle_svg(), clock_kpuzzle_svg_exports))).default;\n })\n };\n }\n});\n\n// src/cubing/puzzles/stickerings/fto-stickerings.ts\nfunction ftoStickering(puzzleLoader, stickering) {\n return __async(this, null, function* () {\n const def = yield puzzleLoader.def();\n const puzzleStickering = new PuzzleStickering(def);\n const m = new StickeringManager(def);\n const experimentalFTO_FC = () => m.and([m.move(\"U\"), m.not(m.or(m.moves([\"F\", \"BL\", \"BR\"])))]);\n const experimentalFTO_F2T = () => m.and([m.move(\"U\"), m.not(m.move(\"F\"))]);\n const experimentalFTO_SC = () => m.or([\n experimentalFTO_F2T(),\n m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"BL\", \"BR\"])))])\n ]);\n const experimentalFTO_L2C = () => m.not(m.or([\n m.and([m.move(\"U\"), m.move(\"F\")]),\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n m.and([m.move(\"BL\"), m.move(\"BR\")])\n ]));\n const experimentalFTO_LBT = () => m.not(m.or([\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")])\n ]));\n switch (stickering) {\n case \"full\":\n break;\n case \"experimental-fto-fc\":\n puzzleStickering.set(m.not(experimentalFTO_FC()), PieceStickering.Ignored);\n break;\n case \"experimental-fto-f2t\":\n puzzleStickering.set(m.not(experimentalFTO_F2T()), PieceStickering.Ignored);\n break;\n case \"experimental-fto-sc\":\n puzzleStickering.set(m.not(experimentalFTO_SC()), PieceStickering.Ignored);\n break;\n case \"experimental-fto-l2c\":\n puzzleStickering.set(m.not(experimentalFTO_L2C()), PieceStickering.Ignored);\n break;\n case \"experimental-fto-lbt\":\n puzzleStickering.set(m.not(experimentalFTO_LBT()), PieceStickering.Ignored);\n break;\n default:\n console.warn(`Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`);\n puzzleStickering.set(m.and(m.moves([])), PieceStickering.Dim);\n }\n return puzzleStickering.toAppearance();\n });\n}\nfunction ftoStickerings() {\n return __async(this, null, function* () {\n return [\n \"full\",\n \"experimental-fto-fc\",\n \"experimental-fto-f2t\",\n \"experimental-fto-sc\",\n \"experimental-fto-l2c\",\n \"experimental-fto-lbt\"\n ];\n });\n}\nvar init_fto_stickerings = __esm({\n \"src/cubing/puzzles/stickerings/fto-stickerings.ts\"() {\n init_appearance();\n }\n});\n\n// src/cubing/puzzles/implementations/fto/index.ts\nvar fto;\nvar init_fto = __esm({\n \"src/cubing/puzzles/implementations/fto/index.ts\"() {\n init_async_pg3d();\n init_fto_stickerings();\n fto = genericPGPuzzleLoader(\"FTO\", \"Face-Turning Octahedron\", {\n inventedBy: [\"Karl Rohrbach\", \"David Pitcher\"],\n inventionYear: 1983\n });\n fto.appearance = (stickering) => ftoStickering(fto, stickering);\n fto.stickerings = ftoStickerings;\n }\n});\n\n// src/cubing/puzzles/stickerings/megaminx-stickerings.ts\nfunction megaminxAppearance(puzzleLoader, stickering) {\n return __async(this, null, function* () {\n switch (stickering) {\n case \"full\":\n case \"F2L\":\n case \"LL\":\n return cubeAppearance(puzzleLoader, stickering);\n default:\n console.warn(`Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`);\n }\n return cubeAppearance(puzzleLoader, \"full\");\n });\n}\nfunction megaminxStickerings() {\n return __async(this, null, function* () {\n return [\"full\", \"F2L\", \"LL\"];\n });\n}\nvar init_megaminx_stickerings = __esm({\n \"src/cubing/puzzles/stickerings/megaminx-stickerings.ts\"() {\n init_cube_stickerings();\n }\n});\n\n// src/cubing/puzzles/implementations/megaminx/index.ts\nvar megaminx;\nvar init_megaminx = __esm({\n \"src/cubing/puzzles/implementations/megaminx/index.ts\"() {\n init_async_pg3d();\n init_megaminx_stickerings();\n megaminx = genericPGPuzzleLoader(\"megaminx\", \"Megaminx\", {\n inventionYear: 1981\n });\n megaminx.appearance = (stickering) => megaminxAppearance(megaminx, stickering);\n megaminx.stickerings = megaminxStickerings;\n }\n});\n\n// src/cubing/puzzles/implementations/pyraminx/pyraminx.kpuzzle.svg.ts\nvar pyraminx_kpuzzle_svg_exports = {};\n__export(pyraminx_kpuzzle_svg_exports, {\n default: () => pyraminx_kpuzzle_svg_default\n});\nvar pyraminx_kpuzzle_svg_default;\nvar init_pyraminx_kpuzzle_svg = __esm({\n \"src/cubing/puzzles/implementations/pyraminx/pyraminx.kpuzzle.svg.ts\"() {\n pyraminx_kpuzzle_svg_default = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"-20 -20 546 480\" preserveAspectRatio=\"xMidYMid meet\">\n <defs>\n </defs>\n <title>pyraminx</title>\n <defs>\n <g id=\"stickerA\" transform=\"scale(1, 0.577350269)\">\n <path\n d=\"m 0,1.732050808 1,-1.732050808 1,1.732050808 z\"\n stroke=\"black\" stroke-width=\"0.04px\" stroke-linecap=\"butt\" stroke-linejoin=\"round\"\n />\n </g>\n <g id=\"stickerV\" transform=\"scale(1, 0.577350269)\">\n <path\n d=\"m 0,0 1,1.732050808 1,-1.732050808 z\"\n stroke=\"black\" stroke-width=\"0.04px\" stroke-linecap=\"butt\" stroke-linejoin=\"round\"\n />\n </g>\n </defs>\n\n<!-- 0 1 2 3 4 5 6 7 8 9 10 -->\n<!-- | | | | | | | | | | | -->\n<!-- 0 - L L L L L F R R R R R -->\n<!-- 1 - L L L F F F R R R -->\n<!-- 2 - L F F F F F R -->\n<!-- 3 - D D D D D -->\n<!-- 4 - D D D -->\n<!-- 5 - D -->\n\n <g id=\"puzzle\" transform=\"translate(5, 5) scale(40, 69.28203232)\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l0-o0\" xlink:href=\"#stickerV\" transform=\"translate(5.2, 1.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l0-o1\" xlink:href=\"#stickerA\" transform=\"translate(3, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" xlink:href=\"#stickerA\" transform=\"translate(7.4, 0)\" style=\"fill: blue\"/>\n\n <use id=\"CORNERS-l3-o0\" xlink:href=\"#stickerV\" transform=\"translate(4.2, 2.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o1\" xlink:href=\"#stickerA\" transform=\"translate(4.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l3-o2\" xlink:href=\"#stickerA\" transform=\"translate(2, 1)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" xlink:href=\"#stickerV\" transform=\"translate(6.2, 2.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l2-o1\" xlink:href=\"#stickerA\" transform=\"translate(8.4, 1)\" style=\"fill: blue\"/>\n <use id=\"CORNERS-l2-o2\" xlink:href=\"#stickerA\" transform=\"translate(6.2, 3.2)\" style=\"fill: yellow\"/>\n\n <use id=\"CORNERS-l1-o1\" xlink:href=\"#stickerA\" transform=\"translate(9.4, 0)\" style=\"fill: blue\"/>\n <use id=\"CORNERS-l1-o2\" xlink:href=\"#stickerA\" transform=\"translate(1, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l1-o0\" xlink:href=\"#stickerA\" transform=\"translate(5.2, 4.2)\" style=\"fill: yellow\"/>\n\n <!-- \"TIPS\" -->\n <!-- CORNERS2 -->\n <use id=\"CORNERS2-l0-o0\" xlink:href=\"#stickerA\" transform=\"translate(5.2, 0.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS2-l0-o1\" xlink:href=\"#stickerV\" transform=\"translate(4, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS2-l0-o2\" xlink:href=\"#stickerV\" transform=\"translate(6.4, 0)\" style=\"fill: blue\"/>\n\n <use id=\"CORNERS2-l3-o0\" xlink:href=\"#stickerA\" transform=\"translate(3.2, 2.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS2-l3-o1\" xlink:href=\"#stickerV\" transform=\"translate(3.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS2-l3-o2\" xlink:href=\"#stickerV\" transform=\"translate(2, 2)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS2-l2-o1\" xlink:href=\"#stickerV\" transform=\"translate(8.4, 2)\" style=\"fill: blue\"/>\n <use id=\"CORNERS2-l2-o2\" xlink:href=\"#stickerV\" transform=\"translate(7.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS2-l2-o0\" xlink:href=\"#stickerA\" transform=\"translate(7.2, 2.066666667)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS2-l1-o1\" xlink:href=\"#stickerV\" transform=\"translate(10.4,0)\" style=\"fill: blue\"/>\n <use id=\"CORNERS2-l1-o2\" xlink:href=\"#stickerV\" transform=\"translate(0, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS2-l1-o0\" xlink:href=\"#stickerV\" transform=\"translate(5.2, 5.2)\" style=\"fill: yellow\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l0-o0\" xlink:href=\"#stickerA\" transform=\"translate(4.2, 1.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l0-o1\" xlink:href=\"#stickerV\" transform=\"translate(3, 1)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l5-o0\" xlink:href=\"#stickerA\" transform=\"translate(6.2, 1.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l5-o1\" xlink:href=\"#stickerV\" transform=\"translate(7.4, 1)\" style=\"fill: blue\"/>\n\n <use id=\"EDGES-l1-o1\" xlink:href=\"#stickerV\" transform=\"translate(8.4, 0)\" style=\"fill: blue\"/>\n <use id=\"EDGES-l1-o0\" xlink:href=\"#stickerV\" transform=\"translate(2, 0)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l2-o1\" xlink:href=\"#stickerV\" transform=\"translate(5.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l2-o0\" xlink:href=\"#stickerA\" transform=\"translate(5.2, 2.066666667)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l3-o0\" xlink:href=\"#stickerV\" transform=\"translate(6.2, 4.2)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l3-o1\" xlink:href=\"#stickerV\" transform=\"translate(9.4, 1)\" style=\"fill: blue\"/>\n\n <use id=\"EDGES-l4-o0\" xlink:href=\"#stickerV\" transform=\"translate(4.2, 4.2)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" xlink:href=\"#stickerV\" transform=\"translate(1, 1)\" style=\"fill: red\"/>\n </g>\n\n</svg>`;\n }\n});\n\n// src/cubing/puzzles/implementations/pyraminx/index.ts\nvar pyraminx;\nvar init_pyraminx = __esm({\n \"src/cubing/puzzles/implementations/pyraminx/index.ts\"() {\n init_async_pg3d();\n pyraminx = {\n id: \"pyraminx\",\n fullName: \"Pyraminx\",\n inventedBy: [\"Uwe Meffert\"],\n inventionYear: 1970,\n def: () => __async(void 0, null, function* () {\n return asyncGetDef(\"pyraminx\");\n }),\n svg: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_pyraminx_kpuzzle_svg(), pyraminx_kpuzzle_svg_exports))).default;\n }),\n pg: () => __async(void 0, null, function* () {\n return asyncGetPuzzleGeometry(\"pyraminx\");\n })\n };\n }\n});\n\n// src/cubing/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json_.ts\nvar sq1_hyperorbit_kpuzzle_json_exports = {};\n__export(sq1_hyperorbit_kpuzzle_json_exports, {\n sq1HyperOrbitKPuzzle: () => sq1HyperOrbitKPuzzle\n});\nvar sq1HyperOrbitKPuzzle;\nvar init_sq1_hyperorbit_kpuzzle_json = __esm({\n \"src/cubing/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json_.ts\"() {\n sq1HyperOrbitKPuzzle = {\n name: \"Square-1\",\n orbits: {\n WEDGES: { numPieces: 24, orientations: 9 },\n EQUATOR: { numPieces: 2, orientations: 6 }\n },\n startPieces: {\n WEDGES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23\n ],\n orientation: [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n },\n EQUATOR: { permutation: [0, 1], orientation: [0, 0] }\n },\n moves: {\n U_SQ_: {\n WEDGES: {\n permutation: [\n 11,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23\n ],\n orientation: [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n },\n EQUATOR: { permutation: [0, 1], orientation: [0, 0] }\n },\n D_SQ_: {\n WEDGES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 23,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22\n ],\n orientation: [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n },\n EQUATOR: { permutation: [0, 1], orientation: [0, 0] }\n },\n _SLASH_: {\n WEDGES: {\n permutation: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23\n ],\n orientation: [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n },\n EQUATOR: { permutation: [0, 1], orientation: [0, 3] }\n }\n }\n };\n }\n});\n\n// src/cubing/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.svg.ts\nvar sq1_hyperorbit_kpuzzle_svg_exports = {};\n__export(sq1_hyperorbit_kpuzzle_svg_exports, {\n default: () => sq1_hyperorbit_kpuzzle_svg_default\n});\nvar sq1_hyperorbit_kpuzzle_svg_default;\nvar init_sq1_hyperorbit_kpuzzle_svg = __esm({\n \"src/cubing/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.svg.ts\"() {\n sq1_hyperorbit_kpuzzle_svg_default = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"360px\" height=\"552px\" viewBox=\"0 0 360 552\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 59.1 (86144) - https://sketch.com -->\n <title>sq1-fancy</title>\n <desc>Created with Sketch.</desc>\n <!-- stroke=\"none\" -->\n <g id=\"sq1-fancy\" stroke=\"#888\" stroke-width=\"0.25\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"EQUATOR\" transform=\"translate(24.000000, 264.000000)\">\n <rect id=\"EQUATOR-l1-o3\" style=\"fill: red\" x=\"168\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o4\" style=\"fill: red\" x=\"192\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o5\" style=\"fill: limegreen\" x=\"216\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o2\" style=\"fill: limegreen\" x=\"240\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o1\" style=\"fill: limegreen\" x=\"264\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o0\" style=\"fill: orange\" x=\"288\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o3\" style=\"fill: orange\" x=\"0\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o4\" style=\"fill: orange\" x=\"24\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o5\" style=\"fill: limegreen\" x=\"48\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o2\" style=\"fill: limegreen\" x=\"72\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o1\" style=\"fill: limegreen\" x=\"96\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o0\" style=\"fill: red\" x=\"120\" y=\"0\" width=\"24\" height=\"24\"></rect>\n </g>\n <g id=\"BOTTOM\" transform=\"translate(41.000000, 257.000000)\" stroke-linejoin=\"round\">\n <g id=\"WEDGES-23\" transform=\"translate(130.000000, 88.588457) rotate(120.000000) translate(-130.000000, -88.588457) translate(82.000000, 22.588457)\">\n <polygon id=\"WEDGES-l23-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l23-o7\" style=\"fill: red\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l23-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l23-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l23-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l23-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l23-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l23-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l23-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-22\" transform=\"translate(97.157677, 115.157677) rotate(90.000000) translate(-97.157677, -115.157677) translate(49.157677, 49.157677)\">\n <polygon id=\"WEDGES-l22-o8\" style=\"fill: blue\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l22-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l22-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l22-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l22-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l22-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l22-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l22-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l22-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-21\" transform=\"translate(82.000000, 154.588457) rotate(60.000000) translate(-82.000000, -154.588457) translate(34.000000, 88.588457)\">\n <polygon id=\"WEDGES-l21-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l21-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l21-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l21-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l21-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l21-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l21-o2\" style=\"fill: blue\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l21-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l21-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-20\" transform=\"translate(88.588457, 196.315353) rotate(30.000000) translate(-88.588457, -196.315353) translate(40.588457, 130.315353)\">\n <polygon id=\"WEDGES-l20-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l20-o7\" style=\"fill: blue\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l20-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l20-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l20-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l20-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l20-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l20-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l20-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-19\" transform=\"translate(67.157677, 163.157677)\">\n <polygon id=\"WEDGES-l19-o8\" style=\"fill: orange\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l19-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l19-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l19-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l19-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l19-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l19-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l19-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l19-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-18\" transform=\"translate(154.588457, 244.315353) scale(-1, -1) rotate(150.000000) translate(-154.588457, -244.315353) translate(106.588457, 178.315353)\">\n <polygon id=\"WEDGES-l18-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l18-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l18-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l18-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l18-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l18-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l18-o2\" style=\"fill: orange\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l18-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l18-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-17\" transform=\"translate(196.315353, 237.726896) scale(-1, -1) rotate(120.000000) translate(-196.315353, -237.726896) translate(148.315353, 171.726896)\">\n <polygon id=\"WEDGES-l17-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l17-o7\" style=\"fill: orange\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l17-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l17-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l17-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l17-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l17-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l17-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l17-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-16\" transform=\"translate(229.157677, 211.157677) scale(-1, -1) rotate(90.000000) translate(-229.157677, -211.157677) translate(181.157677, 145.157677)\">\n <polygon id=\"WEDGES-l16-o8\" style=\"fill: limegreen\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l16-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l16-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l16-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l16-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l16-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l16-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l16-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l16-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-15\" transform=\"translate(244.315353, 171.726896) scale(-1, -1) rotate(60.000000) translate(-244.315353, -171.726896) translate(196.315353, 105.726896)\">\n <polygon id=\"WEDGES-l15-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l15-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l15-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l15-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l15-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l15-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l15-o2\" style=\"fill: limegreen\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l15-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l15-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-14\" transform=\"translate(237.726896, 130.000000) scale(-1, -1) rotate(30.000000) translate(-237.726896, -130.000000) translate(189.726896, 64.000000)\">\n <polygon id=\"WEDGES-l14-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l14-o7\" style=\"fill: limegreen\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l14-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l14-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l14-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l14-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l14-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l14-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l14-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-13\" transform=\"translate(211.157677, 97.157677) scale(-1, -1) translate(-211.157677, -97.157677) translate(163.157677, 31.157677)\">\n <polygon id=\"WEDGES-l13-o8\" style=\"fill: red\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l13-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l13-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l13-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l13-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l13-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l13-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l13-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l13-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-12\" transform=\"translate(171.726896, 82.000000) rotate(150.000000) translate(-171.726896, -82.000000) translate(123.726896, 16.000000)\">\n <polygon id=\"WEDGES-l12-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l12-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l12-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l12-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l12-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l12-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l12-o2\" style=\"fill: red\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l12-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l12-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n </g>\n <g id=\"TOP\" transform=\"translate(41.000000, -31.000000)\" stroke-linejoin=\"round\">\n <g id=\"WEDGES-11\" transform=\"translate(154.588457, 244.315353) scale(-1, -1) rotate(150.000000) translate(-154.588457, -244.315353) translate(106.588457, 178.315353)\">\n <polygon id=\"WEDGES-l11-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l11-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l11-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l11-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l11-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l11-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l11-o2\" style=\"fill: red\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l11-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l11-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-10\" transform=\"translate(196.315353, 237.726896) scale(-1, -1) rotate(120.000000) translate(-196.315353, -237.726896) translate(148.315353, 171.726896)\">\n <polygon id=\"WEDGES-l10-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l10-o7\" style=\"fill: red\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l10-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l10-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l10-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l10-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l10-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l10-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l10-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-9\" transform=\"translate(229.157677, 211.157677) scale(-1, -1) rotate(90.000000) translate(-229.157677, -211.157677) translate(181.157677, 145.157677)\">\n <polygon id=\"WEDGES-l9-o8\" style=\"fill: limegreen\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l9-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l9-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l9-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l9-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l9-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l9-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l9-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l9-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-8\" transform=\"translate(244.315353, 171.726896) scale(-1, -1) rotate(60.000000) translate(-244.315353, -171.726896) translate(196.315353, 105.726896)\">\n <polygon id=\"WEDGES-l8-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l8-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l8-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l8-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l8-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l8-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l8-o2\" style=\"fill: limegreen\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l8-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l8-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-7\" transform=\"translate(237.726896, 130.000000) scale(-1, -1) rotate(30.000000) translate(-237.726896, -130.000000) translate(189.726896, 64.000000)\">\n <polygon id=\"WEDGES-l7-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l7-o7\" style=\"fill: limegreen\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l7-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l7-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l7-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l7-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l7-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l7-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l7-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-6\" transform=\"translate(211.157677, 97.157677) scale(-1, -1) translate(-211.157677, -97.157677) translate(163.157677, 31.157677)\">\n <polygon id=\"WEDGES-l6-o8\" style=\"fill: orange\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l6-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l6-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l6-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l6-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l6-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l6-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l6-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l6-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-5\" transform=\"translate(171.726896, 82.000000) rotate(150.000000) translate(-171.726896, -82.000000) translate(123.726896, 16.000000)\">\n <polygon id=\"WEDGES-l5-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l5-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l5-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l5-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l5-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l5-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l5-o2\" style=\"fill: orange\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l5-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l5-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-4\" transform=\"translate(130.000000, 88.588457) rotate(120.000000) translate(-130.000000, -88.588457) translate(82.000000, 22.588457)\">\n <polygon id=\"WEDGES-l4-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l4-o7\" style=\"fill: orange\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l4-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l4-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l4-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l4-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l4-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l4-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l4-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-3\" transform=\"translate(97.157677, 115.157677) rotate(90.000000) translate(-97.157677, -115.157677) translate(49.157677, 49.157677)\">\n <polygon id=\"WEDGES-l3-o8\" style=\"fill: blue\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l3-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l3-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l3-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l3-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l3-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l3-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l3-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l3-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-2\" transform=\"translate(82.000000, 154.588457) rotate(60.000000) translate(-82.000000, -154.588457) translate(34.000000, 88.588457)\">\n <polygon id=\"WEDGES-l2-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l2-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l2-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l2-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l2-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l2-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l2-o2\" style=\"fill: blue\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l2-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l2-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-1\" transform=\"translate(88.588457, 196.315353) rotate(30.000000) translate(-88.588457, -196.315353) translate(40.588457, 130.315353)\">\n <polygon id=\"WEDGES-l1-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l1-o7\" style=\"fill: blue\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l1-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l1-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l1-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l1-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l1-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l1-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l1-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-0\" transform=\"translate(67.157677, 163.157677)\">\n <polygon id=\"WEDGES-l0-o8\" style=\"fill: red\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l0-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l0-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l0-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l0-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l0-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l0-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l0-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l0-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n </g>\n <g id=\"DIAGONALS\" transform=\"translate(168.861561, 1.019238)\" stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\n <line x1=\"0\" y1=\"287.842323\" x2=\"70.2768775\" y2=\"550.119201\" id=\"BOTTOM\"></line>\n <line x1=\"0.15767665\" y1=\"262.276878\" x2=\"70.4345542\" y2=\"2.27488928e-16\" id=\"TOP\"></line>\n </g>\n </g>\n</svg>`;\n }\n});\n\n// src/cubing/puzzles/implementations/square1/index.ts\nvar square1;\nvar init_square1 = __esm({\n \"src/cubing/puzzles/implementations/square1/index.ts\"() {\n square1 = {\n id: \"square1\",\n fullName: \"Square-1\",\n inventedBy: [\"Karel Hr\\u0161el\", \"Vojtech Kopsk\\xFD\"],\n inventionYear: 1990,\n def: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_sq1_hyperorbit_kpuzzle_json(), sq1_hyperorbit_kpuzzle_json_exports))).sq1HyperOrbitKPuzzle;\n }),\n svg: () => __async(void 0, null, function* () {\n return (yield Promise.resolve().then(() => (init_sq1_hyperorbit_kpuzzle_svg(), sq1_hyperorbit_kpuzzle_svg_exports))).default;\n })\n };\n }\n});\n\n// src/cubing/puzzles/index.ts\nvar puzzles;\nvar init_puzzles = __esm({\n \"src/cubing/puzzles/index.ts\"() {\n init_x3x3_kpuzzle_json();\n init_async_pg3d();\n init_x2x2();\n init_x3x3();\n init_clock();\n init_fto();\n init_megaminx();\n init_pyraminx();\n init_square1();\n init_appearance();\n puzzles = {\n \"3x3x3\": cube3x3x3,\n \"2x2x2\": cube2x2x2,\n \"4x4x4\": cubePGPuzzleLoader(\"4x4x4\", \"4\\xD74\\xD74 Cube\"),\n \"5x5x5\": cubePGPuzzleLoader(\"5x5x5\", \"5\\xD75\\xD75 Cube\"),\n \"6x6x6\": cubePGPuzzleLoader(\"6x6x6\", \"6\\xD76\\xD76 Cube\"),\n \"7x7x7\": cubePGPuzzleLoader(\"7x7x7\", \"7\\xD77\\xD77 Cube\"),\n \"40x40x40\": cubePGPuzzleLoader(\"40x40x40\", \"40\\xD740\\xD740 Cube\"),\n clock,\n \"megaminx\": megaminx,\n pyraminx,\n \"skewb\": genericPGPuzzleLoader(\"skewb\", \"Skewb\", {\n inventedBy: [\"Tony Durham\"]\n }),\n square1,\n \"fto\": fto,\n \"gigaminx\": genericPGPuzzleLoader(\"gigaminx\", \"Gigaminx\", {\n inventedBy: [\"Tyler Fox\"],\n inventionYear: 2006\n }),\n \"master_tetraminx\": genericPGPuzzleLoader(\"master tetraminx\", \"Master Tetraminx\", {\n inventedBy: [\"Katsuhiko Okamoto\"],\n inventionYear: 2002\n })\n };\n }\n});\n\n// src/cubing/protocol/binary/puzzle-orientation.ts\nfunction puzzleOrientationIdx(state) {\n const idxU = state[\"CENTERS\"].permutation[0];\n const idxD = state[\"CENTERS\"].permutation[5];\n const unadjustedIdxL = state[\"CENTERS\"].permutation[1];\n let idxL = unadjustedIdxL;\n if (idxU < unadjustedIdxL) {\n idxL--;\n }\n if (idxD < unadjustedIdxL) {\n idxL--;\n }\n return [idxU, idxL];\n}\nvar puzzleOrientationCache;\nvar init_puzzle_orientation = __esm({\n \"src/cubing/protocol/binary/puzzle-orientation.ts\"() {\n init_alg();\n init_kpuzzle2();\n init_puzzles();\n puzzleOrientationCache = new Array(6).fill(0).map(() => {\n return new Array(6);\n });\n {\n const orientationKpuzzle = new KPuzzle(cube3x3x3KPuzzle);\n const uAlgs = [\"\", \"z\", \"x\", \"z'\", \"x'\", \"x2\"].map((s) => Alg.fromString(s));\n const yAlg = new Alg(\"y\");\n for (const uAlg of uAlgs) {\n orientationKpuzzle.reset();\n orientationKpuzzle.applyAlg(uAlg);\n for (let i2 = 0; i2 < 4; i2++) {\n orientationKpuzzle.applyAlg(yAlg);\n const [idxU, idxL] = puzzleOrientationIdx(orientationKpuzzle.state);\n puzzleOrientationCache[idxU][idxL] = invertTransformation(cube3x3x3KPuzzle, orientationKpuzzle.state);\n }\n }\n }\n }\n});\n\n// src/cubing/protocol/binary/binary3x3x3.ts\nvar init_binary3x3x3 = __esm({\n \"src/cubing/protocol/binary/binary3x3x3.ts\"() {\n init_orbit_indexing();\n init_puzzle_orientation();\n }\n});\n\n// src/cubing/protocol/binary/hex.ts\nvar init_hex = __esm({\n \"src/cubing/protocol/binary/hex.ts\"() {\n }\n});\n\n// src/cubing/protocol/index.ts\nvar init_protocol = __esm({\n \"src/cubing/protocol/index.ts\"() {\n init_binary3x3x3();\n init_hex();\n init_puzzle_orientation();\n init_binary3x3x3();\n }\n});\n\n// src/cubing/kpuzzle/puzzle-orientation.ts\nvar init_puzzle_orientation2 = __esm({\n \"src/cubing/kpuzzle/puzzle-orientation.ts\"() {\n init_protocol();\n init_puzzles();\n init_transformations();\n }\n});\n\n// src/cubing/kpuzzle/index.ts\nvar init_kpuzzle2 = __esm({\n \"src/cubing/kpuzzle/index.ts\"() {\n init_kpuzzle();\n init_canonicalize();\n init_transformations();\n init_parser();\n init_svg();\n init_puzzle_orientation2();\n init_kpuzzle();\n }\n});\n\n// src/cubing/search/inside/solve/parseSGS.ts\nfunction parseSGS(def, sgs) {\n const subgroupSizes = [];\n const sgsActions = [];\n for (const line of sgs.split(\"\\n\")) {\n const lineTokens = line.split(\" \");\n if (line.startsWith(\"SetOrder \")) {\n } else if (line.startsWith(\"Alg \")) {\n const alg = Alg.fromString(line.substring(4));\n const kpuzzle = new KPuzzle(def);\n kpuzzle.reset();\n kpuzzle.applyAlg(alg);\n sgsActions.push({ alg, transformation: kpuzzle.state });\n } else if (line.startsWith(\"SubgroupSizes \")) {\n for (var j = 1; j < lineTokens.length; j++) {\n subgroupSizes.push(parseInt(lineTokens[j]));\n }\n }\n }\n const sgsCachedData = {\n ordering: new Array(subgroupSizes.length)\n };\n const subgroupAlgOffsets = [];\n let sum = 0;\n subgroupAlgOffsets.push(0);\n const emptyAlg = Alg.fromString(\"\");\n const identity2 = identityTransformation(def);\n for (let i2 = 0; i2 < subgroupSizes.length; i2++) {\n sum += subgroupSizes[i2];\n subgroupAlgOffsets.push(sum);\n sgsActions.splice(sum - 1, 0, { alg: emptyAlg, transformation: identity2 });\n }\n if (sgsActions.length !== sum) {\n throw Error(\"Bad sgs; expected \" + (sum - subgroupSizes.length) + \" algs but saw \" + (sgsActions.length - subgroupSizes.length));\n }\n const processedPieces = {};\n for (const orbitName in def.orbits) {\n const orbitDefinition = def.orbits[orbitName];\n processedPieces[orbitName] = new Array(orbitDefinition.numPieces).fill(false);\n }\n for (let i2 = subgroupSizes.length - 1; i2 >= 0; i2--) {\n const pieceOrdering = [];\n for (let j2 = subgroupAlgOffsets[i2]; j2 < subgroupAlgOffsets[i2 + 1]; j2++) {\n const transformation = sgsActions[j2].transformation;\n for (const orbitName in def.orbits) {\n const orbitDefinition = def.orbits[orbitName];\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n if (transformation[orbitName].permutation[idx] !== idx || transformation[orbitName].orientation[idx] !== 0) {\n if (!processedPieces[orbitName][idx]) {\n pieceOrdering.push({ orbitName, permutationIdx: idx });\n processedPieces[orbitName][idx] = true;\n }\n }\n }\n }\n }\n const lookup = {};\n for (let j2 = subgroupAlgOffsets[i2]; j2 < subgroupAlgOffsets[i2 + 1]; j2++) {\n const transformation = invertTransformation(def, sgsActions[j2].transformation);\n let key = \"\";\n for (let k = 0; k < pieceOrdering.length; k++) {\n const loc = pieceOrdering[k];\n key = key + \" \" + transformation[loc.orbitName].permutation[loc.permutationIdx] + \" \" + transformation[loc.orbitName].orientation[loc.permutationIdx];\n }\n lookup[key] = sgsActions[j2];\n sgsActions[j2].alg = sgsActions[j2].alg.invert();\n sgsActions[j2].transformation = invertTransformation(def, sgsActions[j2].transformation);\n }\n sgsCachedData.ordering[i2] = {\n pieceOrdering,\n lookup\n };\n }\n return sgsCachedData;\n}\nvar init_parseSGS = __esm({\n \"src/cubing/search/inside/solve/parseSGS.ts\"() {\n init_alg();\n init_kpuzzle2();\n }\n});\n\n// src/cubing/search/inside/solve/puzzles/2x2x2.sgs.json.ts\nvar x2x2_sgs_json_exports = {};\n__export(x2x2_sgs_json_exports, {\n cachedData222: () => cachedData222,\n data222: () => data222\n});\nfunction cachedData222() {\n return __async(this, null, function* () {\n return cachedData != null ? cachedData : cachedData = data222();\n });\n}\nfunction data222() {\n return __async(this, null, function* () {\n return parseSGS(yield cube2x2x2.def(), `SubgroupSizes 24 21 18 15 12 9 6\n\nAlg F\nAlg F2\nAlg F'\nAlg D\nAlg D2\nAlg D'\nAlg L\nAlg L2\nAlg L'\nAlg F U\nAlg F U2\nAlg F U'\nAlg F L\nAlg F L2\nAlg F L'\nAlg F2 U\nAlg F2 U'\nAlg F2 R\nAlg F2 R'\nAlg F' D\nAlg F' D'\nAlg F' R\nAlg F' R'\nAlg B\nAlg B2\nAlg B'\nAlg B R\nAlg B R2\nAlg B R'\nAlg B2 U\nAlg B2 U2\nAlg B2 U'\nAlg B2 R\nAlg B2 R2\nAlg B2 R'\nAlg B' U\nAlg B' U'\nAlg F D' F'\nAlg F2 L F2\nAlg B R' B2\nAlg B R' U2\nAlg B2 U R'\nAlg B2 R B'\nAlg R\nAlg R2\nAlg R'\nAlg R2 U\nAlg R2 U2\nAlg R2 U'\nAlg R' U\nAlg R' U2\nAlg R' U'\nAlg F R F'\nAlg F R2 F'\nAlg L2 D' L2\nAlg L' B L\nAlg R2 U' R\nAlg R' U R2\nAlg R' U R'\nAlg F R F' U2\nAlg F' U F\nAlg F' U2 F\nAlg F' U' F\nAlg L F L'\nAlg L F2 L'\nAlg L F' L'\nAlg F' D R D'\nAlg F' U2 F U'\nAlg F D2 B D2 F'\nAlg F2 D' L2 D F2\nAlg F2 L F L' F\nAlg L' F2 L' F2 L\nAlg F L' U' L2 F L'\nAlg F2 L F L' U2 F\nAlg U\nAlg U2\nAlg U'\nAlg F2 D2 B D2 F2\nAlg F2 D2 B' D2 F2\nAlg L2 D2 R D2 L2\nAlg L2 D2 R' D2 L2\nAlg F2 D2 B D2 F2 U\nAlg F2 D2 B D2 F2 U'\nAlg U F2 D2 B D2 F2\nAlg U F2 D2 B' D2 F2\nAlg F D B D' R' F' U\nAlg F' D L F U B' L'\nAlg F' L' F U L U L'\nAlg D' L F D R' U' F'\nAlg L F L' U' F' U' F\nAlg L D' F' L' U' R F\nAlg F D F U F' L' F' R'\nAlg F2 D' F L F2 D F' R'\nAlg F D' F L' D F R2 U2 F' U'\nAlg F D' L D' L F D2 L2 B' R'\nAlg F L' D F R2 D2 L D F' U2\nAlg F L' D F2 D' L F L2 F2 U\nAlg F D F' D L2 F R' F' D' B2 U'`);\n });\n}\nvar cachedData;\nvar init_x2x2_sgs_json = __esm({\n \"src/cubing/search/inside/solve/puzzles/2x2x2.sgs.json.ts\"() {\n init_puzzles();\n init_parseSGS();\n cachedData = null;\n }\n});\n\n// src/cubing/search/inside/solve/puzzles/megaminx.sgs.json.ts\nvar megaminx_sgs_json_exports = {};\n__export(megaminx_sgs_json_exports, {\n cachedMegaminxDefWithoutMO: () => cachedMegaminxDefWithoutMO,\n cachedSGSDataMegaminx: () => cachedSGSDataMegaminx,\n sgsDataMegaminx: () => sgsDataMegaminx\n});\nfunction megaminxDefWithoutMO() {\n return __async(this, null, function* () {\n return getPuzzleGeometryByName(\"megaminx\", [\n \"allmoves\",\n \"true\",\n \"rotations\",\n \"true\"\n ]).writekpuzzle(true);\n });\n}\nfunction cachedMegaminxDefWithoutMO() {\n return __async(this, null, function* () {\n return defCache != null ? defCache : defCache = megaminxDefWithoutMO();\n });\n}\nfunction cachedSGSDataMegaminx() {\n return __async(this, null, function* () {\n return cachedData2 != null ? cachedData2 : cachedData2 = sgsDataMegaminx();\n });\n}\nfunction sgsDataMegaminx() {\n return __async(this, null, function* () {\n return parseSGS(yield cachedMegaminxDefWithoutMO(), `SubgroupSizes 12 5 60 58 60 56 54 57 52 50 54 48 46 51 44 42 48 40 45 38 36 42 34 32 39 30 36 28 26 33 24 30 22 20 27 18 24 16 14 21 12 18 10 15 8 6 2 12 9 3\n\nAlg Rv\nAlg Rv2\nAlg Rv2'\nAlg Rv'\nAlg Lv'\nAlg Lv2\nAlg Lv2'\nAlg Fv\nAlg Fv'\nAlg BRv2\nAlg Lv2 Rv'\n\nAlg Uv\nAlg Uv2\nAlg Uv2'\nAlg Uv'\n\nAlg D\nAlg D2\nAlg D2'\nAlg D'\nAlg B\nAlg B2\nAlg B2'\nAlg B'\nAlg D DL\nAlg D DL2\nAlg D DL2'\nAlg D DL'\nAlg D2 FL\nAlg D2 FL2\nAlg D2 FL2'\nAlg D2 FL'\nAlg D2' FR\nAlg D2' FR2\nAlg D2' FR2'\nAlg D2' FR'\nAlg D' DR\nAlg D' DR2\nAlg D' DR2'\nAlg D' DR'\nAlg B DR\nAlg B DR2'\nAlg B DR'\nAlg B2 BR2\nAlg B2 BR2'\nAlg B2 BR'\nAlg B2' BL\nAlg B2' BL2\nAlg B2' BL2'\nAlg B' DL\nAlg B' DL2\nAlg B' DL'\nAlg D DL B\nAlg D DL B2'\nAlg D DL B'\nAlg D DL2' L\nAlg D DL2' L2\nAlg D DL2' L2'\nAlg D DL' FL\nAlg D DL' FL2\nAlg D DL' FL'\nAlg D2 FL2' F\nAlg D2 FL2' F2\nAlg D2 FL2' F2'\nAlg D2 FL' FR\nAlg D2 FL' FR2\nAlg D2 FL' FR'\nAlg D2' FR2' R\nAlg D2' FR2' R2\nAlg D2' FR2' R2'\nAlg B DR2' R2'\nAlg B DR' BR2\nAlg B2 BR' BL\nAlg B2' BL2' L\nAlg D DL2' L2' F\nAlg DL\nAlg DL2\nAlg DL2'\nAlg DL'\nAlg DL BL\nAlg DL BL2\nAlg DL BL2'\nAlg DL BL'\nAlg DL2 L\nAlg DL2 L2\nAlg DL2 L2'\nAlg DL2 L'\nAlg DL2' FL\nAlg DL2' FL2\nAlg DL2' FL2'\nAlg DL2' FL'\nAlg D B D'\nAlg D B2 D'\nAlg D B2' D'\nAlg D B' D'\nAlg D2 B D2'\nAlg D2 DL' D2'\nAlg D2' DL' D2\nAlg D' B D\nAlg D' DL' D\nAlg B2 DR2 B2'\nAlg B2 DR2' B2'\nAlg B2 DR' B2'\nAlg B2' BR B2\nAlg B2' BR2 B2\nAlg B2' BR2' B2\nAlg B' BL B\nAlg B' BL2 B\nAlg B' BL' B\nAlg DL BL2' U\nAlg DL BL2' U2\nAlg DL BL2' U2'\nAlg DL BL' L\nAlg DL BL' L2\nAlg DL BL' L'\nAlg DL2 L2' F\nAlg DL2 L2' F2\nAlg DL2 L2' F2'\nAlg DL2 L' FL\nAlg DL2 L' FL2\nAlg DL2 L' FL'\nAlg DL2' FL2' FR\nAlg DL2' FL2' FR2\nAlg DL2' FL2' FR2'\nAlg D B D' DR2\nAlg D B D' DR'\nAlg D2 B D2' FR2'\nAlg D' B D DL\nAlg B2 DR' B2' BR\nAlg B2 DR' B2' BR'\nAlg B2' BR2' B2 U\nAlg DL BL2' U2' F\nAlg D FL D'\nAlg D FL2 D'\nAlg D FL2' D'\nAlg D FL' D'\nAlg D2 FR D2'\nAlg D2 FR2 D2'\nAlg D2 FR2' D2'\nAlg D2' DR D2\nAlg D2' DR2 D2\nAlg D2' DR2' D2\nAlg DL2 BL DL2'\nAlg DL2 BL2 DL2'\nAlg DL2 BL2' DL2'\nAlg DL2 BL' DL2'\nAlg DL2' L2 DL2\nAlg DL2' L2' DL2\nAlg DL' FL2 DL\nAlg DL' FL' DL\nAlg D FL D' FL2'\nAlg D FL L D'\nAlg D FL L2 D'\nAlg D FL L2' D'\nAlg D FL2 F D'\nAlg D FL2 F2 D'\nAlg D FL2 F2' D'\nAlg D FL2 L D'\nAlg D FL2 L2 D'\nAlg D FL2' D' FR\nAlg D FL2' D' FR2\nAlg D FL2' D' FR2'\nAlg D FL2' F D'\nAlg D FL2' F2' D'\nAlg D FL2' FR2' D'\nAlg D FL2' FR' D'\nAlg D FL' D' FL\nAlg D FL' FR D'\nAlg D2 FR D2' FR2'\nAlg D2 FR2 R D2'\nAlg D2 FR2 R2 D2'\nAlg D2 FR2 R2' D2'\nAlg D2 FR2' D2' DR\nAlg D2 FR2' D2' DR2\nAlg D2 FR2' D2' DR2'\nAlg D2 FR2' D2' DR'\nAlg D2 FR2' R2' D2'\nAlg D2 FR' DR2' D2'\nAlg D2' DR D2 DR2'\nAlg D2' DR2 BR D2\nAlg D2' DR2 BR2' D2\nAlg D2' DR2' BR2' D2\nAlg D2' DR2' BR' D2\nAlg DL2 BL2 DL2' BL'\nAlg DL2 BL2 DL2' BR'\nAlg DL2 BL' DL2' L'\nAlg DL2' L2 DL2 BL2\nAlg D FL L2 BL2 D'\nAlg D FL L' FL2' D'\nAlg D FL2 L FL' D'\nAlg D FL2' D' FR2 DR2'\nAlg B DL B'\nAlg B DL2 B'\nAlg B DL2' B'\nAlg B DL' B'\nAlg B2 D B2'\nAlg B2 D2 B2'\nAlg B2 D2' B2'\nAlg B2 D' B2'\nAlg B2 DL B2'\nAlg B2' D' B2\nAlg B2' DL B2\nAlg B' D' B\nAlg B DL B' BL\nAlg B DL B' BL2\nAlg B DL B' BL2'\nAlg B DL B' BL'\nAlg B DL2 B' BL2\nAlg B DL2 B' BL2'\nAlg B DL2 B' BL'\nAlg B DL2' L2 B'\nAlg B DL2' L2' B'\nAlg B DL2' L' B'\nAlg B DL' FL B'\nAlg B DL' FL2 B'\nAlg B DL' FL2' B'\nAlg B DL' FL' B'\nAlg B2 D FL B2'\nAlg B2 D FL2' B2'\nAlg B2 D FL' B2'\nAlg B2 D2 FR2 B2'\nAlg B2 D2 FR2' B2'\nAlg B2 D2 FR' B2'\nAlg B2 D2' B2' DR\nAlg B2 D2' B2' DR2\nAlg B2 D2' B2' DR2'\nAlg B2 DL B2' BR\nAlg B2 DL B2' BR2\nAlg B2 DL B2' BR2'\nAlg B2' D' B2 BR2\nAlg B2' D' B2 BR2'\nAlg B' D' B DR\nAlg B' D' B DR2'\nAlg D FL' D FR D2'\nAlg D DL FL DL' D'\nAlg D2' FR DR FR' D2\nAlg B DL B D B2'\nAlg B DL B D2' B2'\nAlg B DL B' BL2 U2\nAlg B DL B' BL2 U2'\nAlg B DL B' BL2 U'\nAlg B DL2 B' BL2' U2\nAlg B DL2 B' BL2' U2'\nAlg B DL2 B' BL' L2\nAlg B DL2' L2' B' F2\nAlg B2 D FL2' B2' F2'\nAlg DR\nAlg DR2\nAlg DR2'\nAlg DR'\nAlg DR2 FR\nAlg DR2 FR2\nAlg DR2 FR2'\nAlg DR2 FR'\nAlg DR2' R\nAlg DR2' R2\nAlg DR2' R2'\nAlg DR2' R'\nAlg DR' BR\nAlg DR' BR2\nAlg DR' BR2'\nAlg DR' BR'\nAlg D DR D'\nAlg D2 DR D2'\nAlg B BR B'\nAlg B BR2' B'\nAlg B BR' B'\nAlg B2 BL2 B2'\nAlg B2 BL2' B2'\nAlg B2 BL' B2'\nAlg DR2 FR2 FL2\nAlg DR2 FR2 FL2'\nAlg DR2 FR2 FL'\nAlg DR2 FR2' F\nAlg DR2 FR2' F2\nAlg DR2 FR2' F2'\nAlg DR2 FR' R\nAlg DR2 FR' R2\nAlg DR2 FR' R'\nAlg DR2' R FR\nAlg DR2' R FR2'\nAlg DR2' R FR'\nAlg DR2' R2' U\nAlg DR2' R2' U2\nAlg DR2' R2' U2'\nAlg DR2' R' BR2'\nAlg DR' BR2' BL'\nAlg D DR2 FR D'\nAlg B BR B' DR\nAlg B BR B' DR2\nAlg B BR2' B' U2'\nAlg B BR' B' BL2\nAlg B BR' B' BL2'\nAlg B BR' B' BL'\nAlg B2 BL2' L' B2'\nAlg DR2 FR2 FL' F\nAlg DR2 FR2' F FL2'\nAlg DR2 FR2' F FL'\nAlg B BR2' U2' L2' B'\nAlg D2' FL D2\nAlg D2' FL2 D2\nAlg D2' FL2' D2\nAlg D2' FL' D2\nAlg D' FR2 D\nAlg D' FR2' D\nAlg D' FR' D\nAlg DR FR DR'\nAlg DR FR2' DR'\nAlg DR FR' DR'\nAlg DR2 R2 DR2'\nAlg DR2 R2' DR2'\nAlg DR2' BR DR2\nAlg DR2' BR2 DR2\nAlg DR2' BR2' DR2\nAlg D DR2 D' DR2'\nAlg D DR2' D' DR2\nAlg D2' FL D2 FR'\nAlg D2' FL2 D2 FL2'\nAlg D2' FL2 D2 FL'\nAlg D2' FL2 L D2\nAlg D2' FL2 L2 D2\nAlg D2' FL2 L2' D2\nAlg D2' FL2 L' D2\nAlg D2' FL2' F D2\nAlg D2' FL2' F2 D2\nAlg D2' FL2' F2' D2\nAlg D2' FL2' L D2\nAlg D2' FL2' L2 D2\nAlg D2' FL2' L2' D2\nAlg D2' FL2' L' D2\nAlg D2' FL' F D2\nAlg D2' FL' F2' D2\nAlg D' FR FL' D\nAlg D' FR2 D FR'\nAlg D' FR2 D FL2\nAlg D' FR2 D FL2'\nAlg D' FR2 FL D\nAlg D' FR2' R2' D\nAlg D' FR' R2' D\nAlg DR2 R2 DR2' U2'\nAlg DR2 R2' DR2' BR\nAlg DR2 R2' DR2' BR2\nAlg DR2 R2' DR2' BR2'\nAlg DR2 R2' DR2' BR'\nAlg DR2 R' BR2' DR2'\nAlg DR2' BR DR2 BR2'\nAlg DR2' BR2 BL DR2\nAlg DR2' BR2 BL2' DR2\nAlg DR2' BR2' BL' DR2\nAlg D B2' BL2' B2 D'\nAlg D2 B2 DL2 B2' D2'\nAlg D2' FL2 L' FL2 D2\nAlg D2' FL2' L D2 FL'\nAlg D2' FL2' L FL2' D2\nAlg D2' FL2' L2' BL2 D2\nAlg B2' DR B2\nAlg B2' DR2 B2\nAlg B2' DR2' B2\nAlg B2' DR' B2\nAlg B' DR' B\nAlg B2' DR FR B2\nAlg B2' DR FR2 B2\nAlg B2' DR FR2' B2\nAlg B2' DR FR' B2\nAlg B2' DR2 R B2\nAlg B2' DR2 R2 B2\nAlg B2' DR2 R2' B2\nAlg B2' DR2 R' B2\nAlg B2' DR2' B2 BR\nAlg B2' DR2' B2 BR2\nAlg B2' DR2' B2 BR2'\nAlg B2' DR2' B2 BR'\nAlg B2' DR' B2 BL2\nAlg B2' DR' B2 BL2'\nAlg B2' DR' B2 BL'\nAlg B' DR2' BR' B\nAlg B' DR' B BR\nAlg B' DR' B BR2'\nAlg B' DR' B BR'\nAlg D2' FR2' FL FR2 D2\nAlg D2' FR2' FL2 FR2 D2\nAlg D2' FR2' FL2' FR2 D2\nAlg D' DR2' FR DR2 D\nAlg D' DR2' FR2 DR2 D\nAlg D' DR' FR' DR D\nAlg D' FR D' FL' D2\nAlg B2 D2 DL2 D2' B2'\nAlg B2 D2 DL2' D2' B2'\nAlg B2 D2 DL' D2' B2'\nAlg B2 D' FR' D B2'\nAlg B2 DL D2' DL' B2'\nAlg B2 DL D' DL' B2'\nAlg B2' DR FR2' B2 F2\nAlg B2' DR FR2' B2 F2'\nAlg B2' DR FR' R B2\nAlg B2' DR FR' R2 B2\nAlg B2' DR2 R2' B2 U\nAlg B2' DR2 R2' B2 U2\nAlg B2' DR2 R2' B2 U2'\nAlg B2' DR' B2 BL2 U'\nAlg B' DR2' BR' B BL2'\nAlg DR D FR D' DR'\nAlg DL2' B D B' DL2\nAlg D2' FR2' FL2' FR2 F D2\nAlg D' DR2' FR DR2 D FL2'\nAlg B2 D B D' DR B2\nAlg FR\nAlg FR2\nAlg FR2'\nAlg FR'\nAlg FR2 FL\nAlg FR2 FL2\nAlg FR2 FL2'\nAlg FR2 FL'\nAlg FR2' F\nAlg FR2' F2\nAlg FR2' F2'\nAlg FR2' F'\nAlg FR' R\nAlg FR' R2\nAlg FR' R2'\nAlg FR' R'\nAlg D FR D'\nAlg DR R DR'\nAlg DR R2' DR'\nAlg DR R' DR'\nAlg DR2 BR2 DR2'\nAlg DR2 BR2' DR2'\nAlg DR2 BR' DR2'\nAlg FR2 FL2' L\nAlg FR2 FL2' L2\nAlg FR2 FL2' L2'\nAlg FR2 FL' F\nAlg FR2 FL' F2\nAlg FR2 FL' F'\nAlg FR2' F FL\nAlg FR2' F FL2'\nAlg FR2' F FL'\nAlg FR2' F2' U\nAlg FR2' F2' U2\nAlg FR2' F2' U2'\nAlg FR2' F' R2'\nAlg FR' R2' BR'\nAlg DR R DR' FR\nAlg DR R DR' FR2\nAlg DR R2' DR' U2'\nAlg DR R' DR' BR2\nAlg DR R' DR' BR2'\nAlg DR R' DR' BR'\nAlg DR2 BR2' BL2' DR2'\nAlg DR2 BR2' BL' DR2'\nAlg FR2 FL' F L2\nAlg FR2 FL' F L2'\nAlg B' DR2 BR' DR2' B\nAlg DR R2' U2' BL2 DR'\nAlg D' FL D\nAlg D' FL2 D\nAlg D' FL2' D\nAlg D' FL' D\nAlg FR FL FR'\nAlg FR FL2 FR'\nAlg FR FL2' FR'\nAlg FR FL' FR'\nAlg FR2 F2 FR2'\nAlg FR2 F2' FR2'\nAlg FR2' R FR2\nAlg FR2' R2 FR2\nAlg FR2' R2' FR2\nAlg D FR2 D' FR2'\nAlg D FR2' D' FR2\nAlg D' FL D FL'\nAlg D' FL2 D FL'\nAlg D' FL2 L D\nAlg D' FL2 L2 D\nAlg D' FL2 L2' D\nAlg D' FL2 L' D\nAlg D' FL2' F2' D\nAlg D' FL2' L2 D\nAlg D' FL2' L2' D\nAlg D' FL2' L' D\nAlg D' FL' F2' D\nAlg FR FL2' F' FR'\nAlg FR FL2' FR' L\nAlg FR FL2' FR' L2\nAlg FR FL2' FR' L2'\nAlg FR2 F2 FR2' U2\nAlg FR2 F2 FR2' U2'\nAlg FR2 F2' FR2' U2'\nAlg FR2 F2' FR2' R\nAlg FR2 F2' FR2' R2\nAlg FR2 F2' FR2' R2'\nAlg FR2 F2' FR2' R'\nAlg FR2 F' R2' FR2'\nAlg FR2' R FR2 R2'\nAlg FR2' R2 BR FR2\nAlg FR2' R2 BR2 FR2\nAlg FR2' R2 BR2' FR2\nAlg FR2' R2' BR2' FR2\nAlg FR2' R2' BR' FR2\nAlg D DR2' BR2' DR2 D'\nAlg D FR2' D' FR2 FL2\nAlg D2' B DL B' D2\nAlg D2' B2' D' B2 D2'\nAlg D' FL2 L BL D\nAlg D' FL2 L' FL2 D\nAlg D' FL2' F2' R' D\nAlg D' FL2' L FL2' D\nAlg D' FL2' L2' BL2 D\nAlg DR2' FR DR2\nAlg DR2' FR2 DR2\nAlg DR2' FR2' DR2\nAlg DR2' FR' DR2\nAlg DR' FR' DR\nAlg DR2' FR FL DR2\nAlg DR2' FR FL2 DR2\nAlg DR2' FR FL2' DR2\nAlg DR2' FR FL' DR2\nAlg DR2' FR2 DR2 F\nAlg DR2' FR2 DR2 F2\nAlg DR2' FR2 DR2 F2'\nAlg DR2' FR2 DR2 F'\nAlg DR2' FR2' DR2 R\nAlg DR2' FR2' DR2 R2\nAlg DR2' FR2' DR2 R2'\nAlg DR2' FR2' DR2 R'\nAlg DR2' FR' DR2 BR2\nAlg DR2' FR' DR2 BR2'\nAlg DR2' FR' DR2 BR'\nAlg DR' FR2' R' DR\nAlg DR' FR' DR R\nAlg DR' FR' DR R2'\nAlg DR' FR' DR R'\nAlg D' FR2' FL FR2 D\nAlg D' FR2' FL2 FR2 D\nAlg D' FR' FL' FR D\nAlg B2' DR2 FR' DR2' B2\nAlg B' DR2 FR' DR2' B\nAlg DR2 D' FL' D DR2'\nAlg DR2' FR FL2' DR2 L\nAlg DR2' FR FL2' DR2 L2\nAlg DR2' FR FL2' DR2 L2'\nAlg DR2' FR FL' DR2 F\nAlg DR2' FR FL' DR2 F2\nAlg DR2' FR2 F FL2 DR2\nAlg DR2' FR2 DR2 F2' U\nAlg DR2' FR2 DR2 F2' U2\nAlg DR2' FR2 DR2 F2' U2'\nAlg DR2' FR' DR2 BR2 U'\nAlg DR2' FR' DR2 BR2' BL2'\nAlg DR' FR2' R' DR BR2'\nAlg D' FR2' FL2 FR2 L D\nAlg D' FR2' FL2 FR2 L2 D\nAlg B2' DR2' FR2' R' DR2 B2\nAlg DR2 D DR D' FR DR2\nAlg DR2' FR' DR2 BR2 U' BL2\nAlg FL\nAlg FL2\nAlg FL2'\nAlg FL'\nAlg FL L\nAlg FL L2\nAlg FL L2'\nAlg FL L'\nAlg FL2 F\nAlg FL2 F2\nAlg FL2 F2'\nAlg FL2 F'\nAlg FR2' FL2' FR2\nAlg FR' FL2' FR\nAlg FL L2 BL\nAlg FL L2 BL2\nAlg FL L2 BL2'\nAlg FL L2 BL'\nAlg FL L2' U\nAlg FL L2' U2\nAlg FL L2' U2'\nAlg FL L' F\nAlg FL L' F2\nAlg FL L' F'\nAlg FL2 F L\nAlg FL2 F L2\nAlg FL2 F L2'\nAlg FL2 F L'\nAlg FL2 F2' R\nAlg FL2 F2' R2\nAlg FL2 F2' R2'\nAlg FR' FL2 F' FR\nAlg FL L2 BL2' BR\nAlg FL L2 BL2' BR2\nAlg FL L2 BL' U\nAlg FL L2' U BL2\nAlg FL L2' U BL2'\nAlg FL L2' U BL'\nAlg FL L2' U2' R\nAlg FL L2' U2' R2\nAlg FL L' F' FL\nAlg FL L' F' FL2\nAlg FL L' F' FL2'\nAlg B DL2' BL DL2 B'\nAlg FL L2 BL' U BR2'\nAlg FL2 L FL2'\nAlg FL2 L2 FL2'\nAlg FL2 L2' FL2'\nAlg FL2 L' FL2'\nAlg FL2' F2 FL2\nAlg FL2' F2' FL2\nAlg FL2' F' FL2\nAlg FR2' FL' FR2 FL\nAlg FL2 L2 FL2' L2'\nAlg FL2 L2 FL2' L'\nAlg FL2 L2 FL2' BL\nAlg FL2 L2 FL2' BL2\nAlg FL2 L2 FL2' BL2'\nAlg FL2 L2 FL2' BL'\nAlg FL2 L2' FL2' U\nAlg FL2 L2' FL2' U2\nAlg FL2 L2' FL2' U2'\nAlg FL2 L2' FL2' BL\nAlg FL2 L2' FL2' BL2\nAlg FL2 L2' FL2' BL2'\nAlg FL2 L2' FL2' BL'\nAlg FL2 L' FL2' U\nAlg FL2 L' FL2' U2'\nAlg FL2 L' FL2' F\nAlg FL2 L' FL2' F2\nAlg FL2 L' FL2' F2'\nAlg FL2 L' FL2' F'\nAlg FL2' F L FL2\nAlg FL2' F L' FL2\nAlg FL2' F2 L FL2\nAlg FL2' F2 L2 FL2\nAlg FL2' F2 L2' FL2\nAlg FL2' F2 FL2 F'\nAlg FL2' F2 FL2 L2\nAlg FL2' F2' R FL2\nAlg FL2' F2' R2 FL2\nAlg FL2' F2' R2' FL2\nAlg FL2' F' R2' FL2\nAlg FL2' F' R' FL2\nAlg FL' FR2' FL FR2\nAlg D DR2' FR2' DR2 D'\nAlg D FR2' R' FR2 D'\nAlg D' DL2 BL2 DL2' D\nAlg B2 D2' B D2 B2\nAlg DR2 D2 DR D2' DR2\nAlg FR2 D FR D' FR2\nAlg FL2 L2 BL' L2 FL2'\nAlg FL2 L2 FL2' BL2 BR\nAlg FL2 L2' BL L2' FL2'\nAlg FL2 L2' FL2' BL L'\nAlg DL FL DL'\nAlg DL FL2 DL'\nAlg DL FL2' DL'\nAlg DL FL' DL'\nAlg DL2 FL DL2'\nAlg DL FL DL' L\nAlg DL FL DL' L2\nAlg DL FL DL' L2'\nAlg DL FL DL' L'\nAlg DL FL2 L DL'\nAlg DL FL2 L2 DL'\nAlg DL FL2 L2' DL'\nAlg DL FL2 L' DL'\nAlg DL FL2 DL' L\nAlg DL FL2' DL' F2\nAlg DL FL2' DL' F2'\nAlg DL FL2' DL' F'\nAlg DL2 FL DL2' BL\nAlg DL2 FL DL2' BL2\nAlg DL2 FL DL2' BL2'\nAlg B DL2' FL DL2 B'\nAlg B2 DL2' FL DL2 B2'\nAlg FL2 F2 L' F2' FL2'\nAlg FL2 F2' L' F2 FL2'\nAlg FL2 F' L' F FL2'\nAlg FL2' FR2' FL FR2 FL2\nAlg FL2' FR' F' FR FL2\nAlg DL FL DL' L BL2'\nAlg DL FL DL' L BL'\nAlg DL FL DL' L2 U2\nAlg DL FL DL' L2 U2'\nAlg DL FL2 L2' DL' U2\nAlg DL FL2 L2' DL' U2'\nAlg DL FL2 L' DL' F'\nAlg DL FL2' DL' F2' R2\nAlg DL FL2' DL' F2' R2'\nAlg DL2 FL DL2' BL2 BR2\nAlg B DL2 FL DL2' BL B'\nAlg FL2 F2' L' F2 R2 FL2'\nAlg FL2 F2' L' F2 R2' FL2'\nAlg FL2' FR' F FR L FL2\nAlg DL FL DL' L BL2' BR2\nAlg DL FL2 L DL FL' DL2'\nAlg FR F FR'\nAlg FR F2 FR'\nAlg FR F2' FR'\nAlg FR F' FR'\nAlg FR2 R FR2'\nAlg FR2 R2 FR2'\nAlg FR2 R2' FR2'\nAlg FR2 R' FR2'\nAlg FL2' L FL2\nAlg FL2' L2 FL2\nAlg FL2' L2' FL2\nAlg FL' F FL\nAlg FL' F2 FL\nAlg FL' F' FL\nAlg FR F FR' F'\nAlg FR F2 FR' L\nAlg FR F2' FR' U\nAlg FR F2' FR' U2\nAlg FR F2' FR' U2'\nAlg FR F' FR' R\nAlg FR F' FR' R2\nAlg FR F' FR' R2'\nAlg FR F' FR' R'\nAlg FR2 R FR2' F2\nAlg FR2 R FR2' R'\nAlg FR2 R2' BR FR2'\nAlg FR2 R2' BR2 FR2'\nAlg FR2 R2' BR2' FR2'\nAlg FR2 R2' BR' FR2'\nAlg FL2' L2 FL2 BL\nAlg FL2' L2 FL2 BL2\nAlg FL2' L2' FL2 U\nAlg FL' F L2 FL\nAlg FL' F L2' FL\nAlg FL' F FL L\nAlg DR' FR2 R' FR2' DR\nAlg FR F2' U2' BR FR'\nAlg FR F2' U2' BR2 FR'\nAlg FR F' FR R' FR2'\nAlg FL2' L2' FL2 U BL2\nAlg FL2' L2' FL2 U BL2'\nAlg FR F L F' FR'\nAlg FR F L2 F' FR'\nAlg FR F L2' F' FR'\nAlg FR F L' F' FR'\nAlg FR F2 U F2' FR'\nAlg FR F2 U2 F2' FR'\nAlg FR F2 U2' F2' FR'\nAlg FR F2' R F2 FR'\nAlg FR F2' R2 F2 FR'\nAlg FR F2' R2' F2 FR'\nAlg FR FL' L FL FR'\nAlg FR FL' L2 FL FR'\nAlg FR FL' L' FL FR'\nAlg FR2 F2' L F2 FR2'\nAlg FR2 F2' L2 F2 FR2'\nAlg FR2 F' U2 F FR2'\nAlg FR2 F' U2' F FR2'\nAlg FR2 R U R' FR2'\nAlg FR2 R U' R' FR2'\nAlg FR2 R2 BR2 R2' FR2'\nAlg FR2 R2 BR2' R2' FR2'\nAlg FR2' DR BR DR' FR2\nAlg FR2' R2' U R2 FR2\nAlg FR2' R2' U2 R2 FR2\nAlg FR2' R' BR2 R FR2\nAlg FR2' R' BR2' R FR2\nAlg FR2' R' BR' R FR2\nAlg FL2 L BL L' FL2'\nAlg FL2 L2 U2' L2' FL2'\nAlg FL2 DL' BL2 DL FL2'\nAlg FL2' F2 R2' F2' FL2\nAlg FL2' L2' BL2 L2 FL2\nAlg FL' F2 L F2' FL\nAlg FL' F2 L2 F2' FL\nAlg FL' F' R' F FL\nAlg FL' FR R' FR' FL\nAlg FR F L2' F' FR' BL\nAlg FR F L2' F' FR' BL2\nAlg FR F L' F' FR' F'\nAlg FR F2 U2 BR2 F2' FR'\nAlg FR F2 U2 BR2' F2' FR'\nAlg FR F2' R F2 R2' FR'\nAlg FR F2' R2' F2 FR' R'\nAlg FR FL' L FL FR' F'\nAlg FR2 F' U2 F FR2' L2'\nAlg FR F L2 BL' L2 F' FR'\nAlg FR F L2' F U' F2' FR'\nAlg R\nAlg R2\nAlg R2'\nAlg R'\nAlg R2 F\nAlg R2 F2\nAlg R2 F2'\nAlg R2 F'\nAlg R2' U\nAlg R2' U2\nAlg R2' U2'\nAlg R2' U'\nAlg R' BR\nAlg R' BR2\nAlg R' BR2'\nAlg R' BR'\nAlg DR BR DR'\nAlg DR BR2' DR'\nAlg DR BR' DR'\nAlg FR R FR'\nAlg R2 F2' L\nAlg R2 F2' L2\nAlg R2 F2' L2'\nAlg R2 F' U\nAlg R2 F' U2\nAlg R2 F' U'\nAlg R2' U F\nAlg R2' U F2'\nAlg R2' U F'\nAlg R2' U2' BL\nAlg R2' U2' BL2\nAlg R2' U2' BL2'\nAlg R2' U' BR2'\nAlg DR BR DR' R\nAlg DR BR DR' R2\nAlg DR BR2' BL2' DR'\nAlg DR BR2' BL' DR'\nAlg R2 F' U L2\nAlg R2 F' U L2'\nAlg FR' F FR\nAlg FR' F2 FR\nAlg FR' F2' FR\nAlg FR' F' FR\nAlg R F R'\nAlg R F2 R'\nAlg R F2' R'\nAlg R F' R'\nAlg R2 U2 R2'\nAlg R2 U2' R2'\nAlg R2' BR R2\nAlg R2' BR2 R2\nAlg R2' BR2' R2\nAlg FR R2 FR' R2'\nAlg FR R2' FR' R2\nAlg FR' F FR F'\nAlg FR' F2 FR F'\nAlg FR' F2 FR L\nAlg FR' F2 FR L2\nAlg FR' F2 FR L2'\nAlg FR' F2 FR L'\nAlg FR' F2' FR U2'\nAlg FR' F2' FR L2\nAlg FR' F2' FR L2'\nAlg FR' F2' FR L'\nAlg FR' F' FR U2'\nAlg R F2' U' R'\nAlg R F2' R' L\nAlg R F2' R' L2\nAlg R F2' R' L2'\nAlg R2 U2 R2' BL2\nAlg R2 U2 R2' BL2'\nAlg R2 U2' BR R2'\nAlg R2 U2' BR2 R2'\nAlg R2 U2' R2' BL2'\nAlg R2 U2' R2' BR2'\nAlg R2 U2' R2' BR'\nAlg R2 U' BR2' R2'\nAlg R2' BR R2 BR2'\nAlg DR BR2 BL2' BR2' DR'\nAlg FR R2' FR' R2 F2\nAlg FR' F2 L' F2 FR\nAlg FR' F2' U2' BR' FR\nAlg FR' F2' L F2' FR\nAlg DR' R DR\nAlg DR' R2 DR\nAlg DR' R2' DR\nAlg DR' R' DR\nAlg DR' R DR F\nAlg DR' R DR F2\nAlg DR' R DR F2'\nAlg DR' R DR F'\nAlg DR' R2 DR U\nAlg DR' R2 DR U2\nAlg DR' R2 DR U2'\nAlg DR' R2 DR U'\nAlg DR' R2' DR BR\nAlg DR' R2' DR BR2\nAlg DR' R2' DR BR2'\nAlg DR' R2' DR BR'\nAlg DR' R' DR BR\nAlg DR' R' DR BR2'\nAlg DR' R' DR BR'\nAlg B2' DR2' R' DR2 B2\nAlg DR2' FR' F FR DR2\nAlg DR2' FR' F2 FR DR2\nAlg DR2' FR' F' FR DR2\nAlg DR' R DR F2' L\nAlg DR' R DR F2' L2\nAlg DR' R DR F2' L2'\nAlg DR' R DR F' U\nAlg DR' R DR F' U2\nAlg DR' R DR F' U'\nAlg DR' R2 U2' BL DR\nAlg DR' R2 U2' BL2 DR\nAlg DR' R2 U2' BL2' DR\nAlg DR' R2 DR U F2\nAlg DR' R' DR BR2' BL2'\nAlg DR2' FR' F2 FR DR2 L\nAlg DR2' FR' F2 FR DR2 L2\nAlg DR' FR' F' FR R' DR\nAlg BR\nAlg BR2\nAlg BR2'\nAlg BR'\nAlg BR2' U\nAlg BR2' U2\nAlg BR2' U2'\nAlg BR2' U'\nAlg BR' BL\nAlg BR' BL2\nAlg BR' BL2'\nAlg BR' BL'\nAlg B BL B'\nAlg B BL2' B'\nAlg B BL' B'\nAlg BR2' U2 F\nAlg BR2' U2 F2\nAlg BR2' U2 F2'\nAlg BR2' U2 F'\nAlg BR2' U2' L\nAlg BR2' U2' L2\nAlg BR2' U2' L2'\nAlg BR2' U' BL2'\nAlg BR' BL U\nAlg BR' BL U2\nAlg BR' BL U2'\nAlg BR' BL U'\nAlg B BL B' BR\nAlg B BL B' BR2\nAlg B BL B' BR2'\nAlg B BL2' L2' B'\nAlg B BL2' L' B'\nAlg BR2' U2' L F2\nAlg BR2' U2' L F2'\nAlg BR2' U2' L F'\nAlg BR2 U BR2'\nAlg BR2 U2 BR2'\nAlg BR2 U2' BR2'\nAlg BR2 U' BR2'\nAlg BR2' BL BR2\nAlg BR2' BL2 BR2\nAlg BR2' BL2' BR2\nAlg BR R BR' R'\nAlg BR2 U BR2' U2'\nAlg BR2 U BR2' U'\nAlg BR2 U BR2' F\nAlg BR2 U BR2' F2\nAlg BR2 U BR2' F2'\nAlg BR2 U BR2' F'\nAlg BR2 U2 BR2' F\nAlg BR2 U2 BR2' F2\nAlg BR2 U2 BR2' F2'\nAlg BR2 U2 BR2' F'\nAlg BR2 U2 BR2' L\nAlg BR2 U2 BR2' L2\nAlg BR2 U2 BR2' L2'\nAlg BR2 U2' BL BR2'\nAlg BR2 U2' BL2 BR2'\nAlg BR2 U2' BL' BR2'\nAlg BR2 U2' BR2' L\nAlg BR2 U2' BR2' L2'\nAlg BR2 U2' BR2' BL2'\nAlg BR2 U2' BR2' BL'\nAlg BR2 U' BL BR2'\nAlg BR2 U' BL2' BR2'\nAlg BR2 U' BL' BR2'\nAlg BR2' BL BR2 U2\nAlg BR2' BL BR2 U2'\nAlg BR2' BL BR2 BL2'\nAlg BR2' BL BR2 BL'\nAlg B BL2 L2' BL2' B'\nAlg DR' R2 F R2' DR\nAlg BR2 U F' U2' BR2'\nAlg BR2 U BR2' U2' BL'\nAlg BR2 U2 F U' BR2'\nAlg BR2 U2 BR2' L F2'\nAlg B' BR B\nAlg B' BR2 B\nAlg B' BR2' B\nAlg B' BR' B\nAlg B' BR2 B U\nAlg B' BR2 B U2\nAlg B' BR2 B U2'\nAlg B' BR2 B U'\nAlg B' BR2' B BL\nAlg B' BR2' B BL2\nAlg B' BR2' B BL2'\nAlg B' BR2' B BL'\nAlg B' BR' B BL\nAlg B' BR' B BL2'\nAlg B' BR' B BL'\nAlg B' BR2 U2' L B\nAlg B' BR2 U2' L2 B\nAlg B' BR2 U2' L2' B\nAlg B' BR2 B U2 F\nAlg B' BR2 B U2 F2\nAlg B' BR2 B U2 F2'\nAlg B' BR2 B U2 F'\nAlg B' BR2' B BL U\nAlg B' BR2' B BL U2\nAlg B' BR2' B BL U2'\nAlg B' BR2' B BL U'\nAlg B' BR' B BL2' L2'\nAlg B' BR' B BL2' L'\nAlg BR2 R U R' BR2'\nAlg B' BR2 U2' L B F2'\nAlg B' BR2 U2' L B F'\nAlg B' BR' B BR2 BL BR2'\nAlg B' BR2 U R BR' R' B\nAlg BR U BR'\nAlg BR U2 BR'\nAlg BR U2' BR'\nAlg BR U' BR'\nAlg BR2 BL BR2'\nAlg BR2 BL2 BR2'\nAlg BR2 BL2' BR2'\nAlg BR2 BL' BR2'\nAlg R2' F R2\nAlg R2' F2 R2\nAlg R2' F2' R2\nAlg R' U R\nAlg R' U2 R\nAlg R' U' R\nAlg BR U BR' U'\nAlg BR U2 BR' F\nAlg BR U2' BR' L\nAlg BR U2' BR' L2\nAlg BR U2' BR' L2'\nAlg BR U' BL BR'\nAlg BR U' BL2 BR'\nAlg BR U' BL2' BR'\nAlg BR U' BR' BL'\nAlg BR2 BL BR2' U2\nAlg BR2 BL BR2' BL'\nAlg R2' F2' R2 L\nAlg R2' F2' R2 L2\nAlg R' U F2 R\nAlg R' U F2' R\nAlg R' U R F\nAlg BR U' BR BL' BR2'\nAlg BR U F U' BR'\nAlg BR U F2 U' BR'\nAlg BR U F2' U' BR'\nAlg BR U F' U' BR'\nAlg BR U2 L U2' BR'\nAlg BR U2 L2 U2' BR'\nAlg BR U2 L2' U2' BR'\nAlg BR U2' BL U2 BR'\nAlg BR U2' BL2 U2 BR'\nAlg BR U2' BL2' U2 BR'\nAlg BR R' F R BR'\nAlg BR R' F2 R BR'\nAlg BR R' F' R BR'\nAlg BR2 U2' F U2 BR2'\nAlg BR2 U2' F2 U2 BR2'\nAlg BR2 U' L2 U BR2'\nAlg BR2 U' L2' U BR2'\nAlg BR2 BL L BL' BR2'\nAlg BR2 BL L' BL' BR2'\nAlg BR2' BL2' L BL2 BR2\nAlg BR2' BL2' L2 BL2 BR2\nAlg R2 F2 L F2' R2'\nAlg R2 F2 L2 F2' R2'\nAlg R2 F2 L2' F2' R2'\nAlg R2' U2 BL2' U2' R2\nAlg R' U2 F U2' R\nAlg R' U2 F2 U2' R\nAlg R' U' BL' U R\nAlg R' BR BL' BR' R\nAlg BR U F' U' BR' U'\nAlg BR U2 L' BL2 U2' BR'\nAlg BR U2' BL U2 BL2' BR'\nAlg BR U2' BL2' U2 BR' BL'\nAlg BR R' F R BR' U'\nAlg BR2 U' L2 U BR2' F2'\nAlg BR2 U' L2 U BR2' F'\nAlg BR U F2' U L' U2' BR'\nAlg BR U F2' L' F U' BR'\nAlg F\nAlg F2\nAlg F2'\nAlg F'\nAlg F L\nAlg F L2\nAlg F L2'\nAlg F L'\nAlg F2 U\nAlg F2 U2\nAlg F2 U2'\nAlg F2 U'\nAlg F L2' BL\nAlg F L2' BL2\nAlg F L2' BL2'\nAlg F L' U\nAlg F L' U2\nAlg F L' U2'\nAlg F L' U'\nAlg F2 U L\nAlg F2 U L2\nAlg F2 U L2'\nAlg F2 U L'\nAlg F L' U BL2\nAlg F L' U BL2'\nAlg F L' U BL'\nAlg F L' U' F\nAlg F L' U' F2\nAlg F L' U' F2'\nAlg F2 L F2'\nAlg F2 L2 F2'\nAlg F2 L2' F2'\nAlg F2 L' F2'\nAlg F2' U2 F2\nAlg F2' U2' F2\nAlg F2' U' F2\nAlg F2 L2 F2' L2'\nAlg F2 L2 F2' L'\nAlg F2 L2' BL F2'\nAlg F2 L2' BL2 F2'\nAlg F2 L2' BL2' F2'\nAlg F2 L' F2' U\nAlg F2 L' F2' U2\nAlg F2 L' F2' U2'\nAlg F2 L' F2' U'\nAlg F2 L' BL F2'\nAlg F2 L' BL2 F2'\nAlg F2 L' BL2' F2'\nAlg F2' U L F2\nAlg F2' U L2 F2\nAlg F2' U L' F2\nAlg F2' U2 F2 U2'\nAlg F2' U2 F2 U'\nAlg F2' U2 F2 L2\nAlg F2' U2 F2 L2'\nAlg F2' U2 F2 L'\nAlg F2' U2 L F2\nAlg F' R' F R\nAlg F L2 BL L2' F'\nAlg F L2 BL2 L2' F'\nAlg F2 L2 F2' L2' U2'\nAlg F2 L2' BL' L F2'\nAlg F2 L' F U2' F2\nAlg F2 L' F' U' F'\nAlg FL F FL'\nAlg FL F2 FL'\nAlg FL F2' FL'\nAlg FL F' FL'\nAlg FL F FL' L\nAlg FL F FL' L2\nAlg FL F FL' L2'\nAlg FL F FL' L'\nAlg FL F2 FL' L\nAlg FL F2 FL' L2\nAlg FL F2 FL' L2'\nAlg FL F2 FL' L'\nAlg FL F2' FL' U2\nAlg FL F2' FL' U2'\nAlg FL F2' FL' U'\nAlg F2 U2 L' U2' F2'\nAlg F2 U2' L' U2 F2'\nAlg F2 U' L' U F2'\nAlg FL F FL' L2 BL\nAlg FL F FL' L2 BL2\nAlg FL F FL' L2 BL2'\nAlg FL F2 FL' L2' BL\nAlg FL F2 FL' L2' BL2\nAlg FL F2 FL' L2' BL2'\nAlg FL F2 FL' L' U'\nAlg FL F FL' F2' L' F2\nAlg F2 U F U L U2' F2'\nAlg F2' L F2\nAlg F2' L2 F2\nAlg F2' L2' F2\nAlg F2' L' F2\nAlg F' U F\nAlg F' U2 F\nAlg F' U2' F\nAlg F' U' F\nAlg R U R'\nAlg R U2' R'\nAlg R U' R'\nAlg F R' F' R\nAlg F2' L F2 L'\nAlg F2' L2' BL F2\nAlg F2' L2' BL2 F2\nAlg F2' L2' BL2' F2\nAlg F' U F U'\nAlg F' U F L\nAlg F' U F L2\nAlg F' U F L2'\nAlg F' U F L'\nAlg R U2' R' BL2\nAlg R U2' R' BL2'\nAlg R U2' R' BL'\nAlg F2' L' F U' F\nAlg F2 L2 BL L2' F2'\nAlg F2 L2 BL2 L2' F2'\nAlg F2 L2 BL2' L2' F2'\nAlg F2 L2 BL' L2' F2'\nAlg F2' U BL U' F2\nAlg F2' U BL' U' F2\nAlg F2' L' BL L F2\nAlg F2' L' BL2 L F2\nAlg F2' L' BL2' L F2\nAlg F2' L' BL' L F2\nAlg F' U2 L U2' F\nAlg F' U2 L2 U2' F\nAlg F' U2 L2' U2' F\nAlg F' U2' BL2 U2 F\nAlg R U L U' R'\nAlg R U L' U' R'\nAlg R F' L F R'\nAlg R2 U2' L2 U2 R2'\nAlg R2 U' BL2 U R2'\nAlg R2 U' BL2' U R2'\nAlg R2 U' BL' U R2'\nAlg R2 BR BL' BR' R2'\nAlg F2 L2 BL2' L2' F2' U2\nAlg F2' U BL U' F2 L\nAlg F2' U BL' U' F2 L2\nAlg F2' U BL' U' F2 L2'\nAlg F2' L' BL L F2 U2\nAlg F2' L' BL L F2 U2'\nAlg F2' L' BL' L F2 U\nAlg F2' L' BL' L F2 U2\nAlg F' U2 L' U BL2' U2 F\nAlg F' U2' BL L' BL2' U2 F\nAlg U\nAlg U2\nAlg U2'\nAlg U'\nAlg U L\nAlg U L2\nAlg U L2'\nAlg U L'\nAlg U2 BL\nAlg U2 BL2\nAlg U2 BL2'\nAlg U2 BL'\nAlg U L' BL\nAlg U L' BL2\nAlg U L' BL2'\nAlg U L' BL'\nAlg U2 BL L\nAlg U2 BL L2\nAlg U2 BL L2'\nAlg U2 BL L'\nAlg U F' L F\nAlg U L' BL' U\nAlg U L' BL' U2\nAlg U2 L U2'\nAlg U2 L2 U2'\nAlg U2 L2' U2'\nAlg U2 L' U2'\nAlg U2' BL2 U2\nAlg U2' BL2' U2\nAlg U2' BL' U2\nAlg U2 L2 U2' L2'\nAlg U2 L2 U2' L'\nAlg U2 L' U2' BL\nAlg U2 L' U2' BL2\nAlg U2 L' U2' BL2'\nAlg U2 L' U2' BL'\nAlg U2' BL L U2\nAlg U2' BL L2 U2\nAlg U2' BL L2' U2\nAlg U2' BL L' U2\nAlg U2' BL2 U2 L2\nAlg U2' BL2 U2 L2'\nAlg U2' BL2 U2 L'\nAlg U2' BL2 U2 BL2'\nAlg U2' BL2 U2 BL'\nAlg U2' BL2 L U2\nAlg U' BR' U BR\nAlg U2 L' U BL2' U2\nAlg U2 L2' U2' L2 BL2\nAlg U2 L2' U2' L2 BL2'\nAlg U2 L' U' BL' U'\nAlg U2' BL2 U' L U2'\nAlg F U F'\nAlg F U2 F'\nAlg F U2' F'\nAlg F U' F'\nAlg F U F' L\nAlg F U F' L2\nAlg F U F' L2'\nAlg F U F' L'\nAlg F U2 F' L\nAlg F U2 F' L2\nAlg F U2 F' L2'\nAlg F U2 F' L'\nAlg F U2' BL2 F'\nAlg F U2' BL2' F'\nAlg F U2' BL' F'\nAlg U2 BL2 L' BL2' U2'\nAlg U2 BL' L' BL U2'\nAlg U2 BL2' L' BL2 U2'\nAlg F U2 F' L' BL'\nAlg F U F' U2' L' U2\nAlg U2 L U2 L2' U' BL' U2\nAlg U2' L U2\nAlg U2' L2 U2\nAlg U2' L2' U2\nAlg U2' L' U2\nAlg U' BL U\nAlg U' BL2 U\nAlg U' BL2' U\nAlg U' BL' U\nAlg BR BL BR'\nAlg BR BL2' BR'\nAlg BR BL' BR'\nAlg U BR' U' BR\nAlg U2' L U2 L'\nAlg U' BL U L\nAlg U' BL U L2\nAlg U' BL U L2'\nAlg U' BL U L'\nAlg U' BL U BL'\nAlg U2' L' U BL' U\nAlg U' BL2 L BL2' U\nAlg U' BL2 L2 BL2' U\nAlg U' BL2 L2' BL2' U\nAlg U' BL2 L' BL2' U\nAlg BR U' L U BR'\nAlg BR U' L2 U BR'\nAlg BR U' L2' U BR'\nAlg BR U' L' U BR'\nAlg BR BL L BL' BR'\nAlg BR BL L' BL' BR'\nAlg BR2 BL2' L BL2 BR2'\nAlg BR2 BL2' L2 BL2 BR2'\nAlg U2' L BL2' L' BL2 U2\nAlg U2' L2 F' L2' F U2\nAlg U2' L' DL L DL' U2\nAlg U2' BL2' L BL2 L' U2\nAlg U2' BL2' L2 BL2 L2' U2\nAlg U' BL2 L BL2' U BL\nAlg U' BL2 L2 BL2' U L\nAlg U' BL2 L2 BL2' U BL2'\nAlg U' BL2 L2 BL2' U BL'\nAlg U' BL2 L2 BL2' L2' U\nAlg BR BL L' BL' BR' BL2'\nAlg BR BL L' BL' BR' BL'\nAlg U' BL U BL U' L2' BL2' U\nAlg U' BL2 U' L2 U L' BL2' U\nAlg L\nAlg L2\nAlg L2'\nAlg L'\nAlg L' BL\nAlg L' BL2\nAlg L' BL2'\nAlg L' BL'\nAlg U BL U'\nAlg U BL2 U'\nAlg U BL2' U'\nAlg U BL' U'\nAlg U BL U' L\nAlg U BL U' L2\nAlg U BL U' L2'\nAlg U BL U' L'\nAlg U BL U' BL'\nAlg L2' BL L2\nAlg L2' BL2 L2\nAlg L2' BL2' L2\nAlg L2' BL' L2\nAlg L2 DL L2' DL'\nAlg L2' BL L2 BL2'\nAlg L2' BL L2 BL'\nAlg F' L2 BL L2' F\nAlg F' L2 BL2 L2' F\nAlg F' L2 BL2' L2' F\nAlg F' L2 BL' L2' F\nAlg L2 DL L' DL' L'\nAlg L2' U BL2' U' L2\nAlg L2' BL L2' BL2' L'\nAlg L2' BL L' BL2' L2'\nAlg L2' DL L' DL' L2\nAlg L' U' L' U L2\nAlg U L' DL L DL' U'\nAlg F' L2 BL L2' BL2' F\nAlg L2 DL' BL DL2 L2' DL'\nAlg L2' U BL2' U' BL L2\nAlg L2' BL' U BL' U' L2\nAlg L2' BL' L2 U' L' U\nAlg U' L U\nAlg U' L2 U\nAlg U' L2' U\nAlg U' L' U\nAlg U' L2' U BL\nAlg U' L2' U BL2\nAlg U' L2' U BL2'\nAlg U' L2' U BL'\nAlg U' L' U BL\nAlg U' L' U BL2\nAlg U' L' U BL2'\nAlg U' L' U BL'\nAlg U' L' U L BL L'\nAlg U' L' U L2 BL L2'\nAlg U' L' U BL U' L2 U\nAlg L2 BL L2'\nAlg L2 BL2 L2'\nAlg L2 BL2' L2'\nAlg L2 BL' L2'\nAlg L2 BL L2' BL'\nAlg L DL L' DL'\nAlg DL L DL' L'\nAlg L U' L2 U L2\nAlg L DL' BL DL L'\nAlg L DL' BL2 DL L'\nAlg L DL' BL' DL L'\nAlg DL L DL' L' BL'\nAlg L2 BL L' DL L' DL'\nAlg FL' L BL L' FL\nAlg FL' L BL2 L' FL\nAlg FL' L BL2' L' FL\nAlg FL' L BL' L' FL\nAlg FL' DL' BL DL FL\nAlg FL' DL' BL2 DL FL\nAlg FL' DL' BL2' DL FL\nAlg FL' DL' BL' DL FL\nAlg L2 BL2' U BL2 U' L2'\nAlg FL' L BL L' FL BL2'\nAlg FL' L BL' L' FL BL\nAlg U' F U BL U' F' U\nAlg U' F U BL2 U' F' U\nAlg U' F U BL2' U' F' U\nAlg F' FL2' DL' BL' DL FL2 F\nAlg L2' BL2 L2' BL' L2 BL' L2\nAlg DL L DL2' BL' DL2 L' DL'\nAlg DL2 FL2' DL2 BL' DL2' FL2 DL2'\nAlg FL' L U BL2' U' BL L' FL\nAlg FL' L2 U' L' U BL2 L' FL\nAlg L BL L'\nAlg L BL2 L'\nAlg L BL2' L'\nAlg L BL' L'\nAlg DL' BL DL\nAlg DL' BL2 DL\nAlg DL' BL2' DL\nAlg DL' BL' DL\nAlg L BL L' BL'\nAlg L' DL L DL'\nAlg L BL2 L' DL' BL' DL\nAlg L U BL2' U' BL2 L'\nAlg L BL2' U BL2 U' L'\nAlg DL' B' BL2 B BL2' DL\nAlg DL' BL2 B' BL2' B DL\nAlg U BL2' DL2' BL2 U' BL2' DL2\nAlg B' BL2 L2 BL2' B BL2 L2'\nAlg L U BL2' U' BL2 L' BL2'\nAlg L U BL2' U' BL2 L' BL'\nAlg L BL B BL' L' BL B'\nAlg L BL2' U BL2 U' L' BL2\nAlg L BL' U BL2 U' BL L'\nAlg L BL' U BL2' U' BL L'\nAlg L BL' U BL' U' BL L'\nAlg L2 BL2 L2' BL' L2 BL' L2'\nAlg DL' BL B' BL2' B BL' DL\nAlg L BL2' L U2 BR' U' BR U' L2'\nAlg L BL2' L BL L' BL L BL2' L2'\nAlg BL\nAlg BL2\nAlg BL2'\nAlg BL'\nAlg U BR BL2 BR' BL2' U'\nAlg B BL DL BL' DL' B'\nAlg L' BL2' DL' BL2 DL L\nAlg BR B BL B' BL' BR'\nAlg U BR BL2 BR' BL2' U' BL2\nAlg U BL BR BL' BR' U'\nAlg U BR BL BR' BL' U'\nAlg U' L' BL2' L BL2 U\nAlg B' BR' BL2' BR BL2 B\nAlg L BL2 U BL2' U' L'\nAlg BR B BL2 B' BL2' BR'\nAlg U BL2 U' BL' U BL' U'\nAlg B BL DL BL DL' BL2' B'\nAlg B BL2 DL BL' DL' BL' B'\nAlg B' BL' B BL2' B' BL2' B\nAlg U BL U' BL2 U BL2 U' BL2\nAlg U BR2 B' BR2' U' BR B BR'\nAlg BL2 BR B DL' B DL B2' BR'\nAlg B BL2' B2' BR B BR' B BL2 B'\nAlg U' BL' L' BL L U BL\nAlg B' BL2 B BL B' BL2 B\nAlg B' BL2' B BL' B' BL2' B\nAlg B' BL' BR' BL' BR BL2 B\nAlg B' BL2' BR' BL BR BL B\nAlg U' BL' L' BL' L BL2 U BL'\nAlg L' BL' L' DL L DL' BL L BL\nAlg L U BL U' BL' L'\nAlg L BL U BL' U' L'\nAlg BR' U' BL' U BL BR\nAlg L U2 BR' U' BR U' L'\nAlg U BL U2' L U L2' BL L BL2'\nAlg U' L2 F' L' F2 U' F' U2 L'\nAlg U BR' U' L U BR U' L'\nAlg U BR B BR' U' BR B' BR'\nAlg U' L U BR' U' L' U BR\nAlg B DL' B' BR B DL B' BR'\nAlg L' DL' B DL L DL' B' DL\nAlg BR B BR' U BR B' BR' U'\nAlg BR B DL' B' BR' B DL B'\nAlg U BR2' U2 L2 U2' BR2 U2 L2' U2\nAlg U2' L2 U2' BR2' U2 L2' U2' BR2 U'\nAlg U BL' B' BL U' L U2 BL' B BL U2' L'\nAlg U BR' U' L F' L2' U BR U' L2 F L'\nAlg U BR U' L U BR' U' L'\nAlg U' BL2 B BL2' U BL2 B' BL2'\nAlg L U BR U' L' U BR' U'\nAlg L BL2' B' BL2 L' BL2' B BL2\nAlg U BR' U2 L2 U2' BR U2 L2' U2\nAlg L' BL2 L2' F' L2 BL2' L2' F L2'\nAlg U BL2' U R U' BL2 U' L U2 R' U2' L'\nAlg U BR U' L2 F L' U BR' U' L F' L2'\nAlg U L' BL2 L' FL' L BL2' L U' L2' FL L2\nAlg U BR2' U R' U2' L U2 R U' BR2 U' L'`);\n });\n}\nvar defCache, cachedData2;\nvar init_megaminx_sgs_json = __esm({\n \"src/cubing/search/inside/solve/puzzles/megaminx.sgs.json.ts\"() {\n init_puzzle_geometry();\n init_parseSGS();\n defCache = null;\n cachedData2 = null;\n }\n});\n\n// src/cubing/search/inside/solve/puzzles/pyraminx.sgs.json.ts\nvar pyraminx_sgs_json_exports = {};\n__export(pyraminx_sgs_json_exports, {\n sgsDataPyraminx: () => sgsDataPyraminx,\n sgsDataPyraminxFixedOrientation: () => sgsDataPyraminxFixedOrientation\n});\nfunction sgsDataPyraminx() {\n return __async(this, null, function* () {\n return cachedData3 != null ? cachedData3 : cachedData3 = uncachedSGSDataPyraminx();\n });\n}\nfunction sgsDataPyraminxFixedOrientation() {\n return __async(this, null, function* () {\n return {\n ordering: (yield sgsDataPyraminx()).ordering.slice(2)\n };\n });\n}\nfunction uncachedSGSDataPyraminx() {\n return __async(this, null, function* () {\n return parseSGS(yield puzzles.pyraminx.def(), `SubgroupSizes 12 9 12 3 10 3 8 6 2 3 3 3 3\n\nAlg B\nAlg B'\nAlg y\nAlg B y\nAlg B' y\nAlg y'\nAlg B y'\nAlg B' y'\nAlg BR'\nAlg B BR'\nAlg B' BR'\n\nAlg L\nAlg L'\nAlg L F\nAlg L' F\nAlg F\nAlg L F'\nAlg L' F'\nAlg F'\n\nAlg L B' U L' B\nAlg L U L'\nAlg L U' L'\nAlg L U L' U'\nAlg B' U B\nAlg B' U' B\nAlg B' U' B U\nAlg L U' L' R\nAlg L U' L' R'\nAlg L' R' L\nAlg L' R' L R\n\nAlg R\nAlg R'\n\nAlg R' U R\nAlg R' U' R\nAlg R' U R U'\nAlg B U B'\nAlg B U' B'\nAlg R B' R' B\nAlg L R L' R U' R\nAlg R L R' L'\nAlg L' R' U R L\n\nAlg U\nAlg U'\n\nAlg R U R' U'\nAlg U R U' R'\nAlg L' U' L U\nAlg U' L' U L\nAlg U L R' L' R U'\nAlg U' R' L R L' U\nAlg L' U' L U' R U' R'\n\nAlg R U' R' U\nAlg L' U L U'\nAlg U' R U R'\nAlg U L' U' L\nAlg L R' L' R L' U L U'\n\nAlg L' U L U' L R' L' R\n\nAlg b\nAlg b'\n\nAlg l\nAlg l'\n\nAlg r\nAlg r'\n\nAlg u\nAlg u'`);\n });\n}\nvar cachedData3;\nvar init_pyraminx_sgs_json = __esm({\n \"src/cubing/search/inside/solve/puzzles/pyraminx.sgs.json.ts\"() {\n init_puzzles();\n init_parseSGS();\n cachedData3 = null;\n }\n});\n\n// src/cubing/search/inside/solve/puzzles/skewb.sgs.json.ts\nvar skewb_sgs_json_exports = {};\n__export(skewb_sgs_json_exports, {\n sgsDataSkewb: () => sgsDataSkewb,\n sgsDataSkewbFixedCorner: () => sgsDataSkewbFixedCorner,\n skewbDefWithoutMOCached: () => skewbDefWithoutMOCached\n});\nfunction skewbDefWithoutMO() {\n return __async(this, null, function* () {\n return getPuzzleGeometryByName(\"skewb\", [\n \"allmoves\",\n \"true\",\n \"rotations\",\n \"true\"\n ]).writekpuzzle(true);\n });\n}\nfunction skewbDefWithoutMOCached() {\n return __async(this, null, function* () {\n return defCache2 != null ? defCache2 : defCache2 = skewbDefWithoutMO();\n });\n}\nfunction sgsDataSkewb() {\n return __async(this, null, function* () {\n return cachedData4 != null ? cachedData4 : cachedData4 = uncachedSGSDataSkewb();\n });\n}\nfunction sgsDataSkewbFixedCorner() {\n return __async(this, null, function* () {\n return {\n ordering: (yield sgsDataSkewb()).ordering.slice(1)\n };\n });\n}\nfunction uncachedSGSDataSkewb() {\n return __async(this, null, function* () {\n return parseSGS(yield skewbDefWithoutMOCached(), `SubgroupSizes 24 6 5 12 9 3 4 9 3 3\n\nAlg y\nAlg y2\nAlg y'\nAlg F\nAlg F'\nAlg y U\nAlg y U'\nAlg y L\nAlg y L'\nAlg y F\nAlg y F'\nAlg y2 U\nAlg y2 U'\nAlg y2 B\nAlg y2 B'\nAlg y' U\nAlg y' F'\nAlg y U L'\nAlg y U B\nAlg y2 U B\nAlg y2 U B'\nAlg y2 U' B\nAlg y2 U' B'\n\nAlg U\nAlg U'\nAlg U L\nAlg U L'\nAlg U' R'\n\nAlg R\nAlg R'\nAlg R B\nAlg R' L'\n\nAlg U B' U\nAlg U' L U\nAlg U' L' U\nAlg U' B U'\nAlg R L R'\nAlg R B' R\nAlg U B L U'\nAlg U B' U B'\nAlg U B' L' U\nAlg U' L B U'\nAlg R' B L' R'\n\nAlg L\nAlg L'\nAlg L B\nAlg L B'\nAlg L B L\nAlg L B L'\nAlg L B' L\nAlg L B' L'\n\nAlg B\nAlg B'\n\nAlg L' B L\nAlg L' B' L\nAlg R' L' B L R\n\nAlg B L' B L B'\nAlg B L' B' L B'\nAlg U L U B U' L' U'\nAlg R L R' B' R L' R'\nAlg U B' R L R' B' U B\nAlg U' B U L U' B' U L'\nAlg L U' B U L' U' B' U\nAlg R B' U R B L U' B\n\nAlg U L U' B' U L' U' B\nAlg U' B L U L B' U' L'\n\nAlg U R' U' L B R' B' R\nAlg R' U' R U B' U' B L`);\n });\n}\nvar defCache2, cachedData4;\nvar init_skewb_sgs_json = __esm({\n \"src/cubing/search/inside/solve/puzzles/skewb.sgs.json.ts\"() {\n init_puzzle_geometry();\n init_parseSGS();\n defCache2 = null;\n cachedData4 = null;\n }\n});\n\n// node_modules/comlink/dist/esm/comlink.mjs\nvar proxyMarker = Symbol(\"Comlink.proxy\");\nvar createEndpoint = Symbol(\"Comlink.endpoint\");\nvar releaseProxy = Symbol(\"Comlink.releaseProxy\");\nvar throwMarker = Symbol(\"Comlink.thrown\");\nvar isObject = (val) => typeof val === \"object\" && val !== null || typeof val === \"function\";\nvar proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port2) {\n port2.start();\n return wrap(port2);\n }\n};\nvar throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack\n }\n };\n } else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n }\n};\nvar transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler]\n]);\nfunction expose(obj, ep = self) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj2, prop) => obj2[prop], obj);\n const rawValue = path.reduce((obj2, prop) => obj2[prop], obj);\n switch (type) {\n case \"GET\":\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\":\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\":\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\":\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\":\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\":\n {\n returnValue = void 0;\n }\n break;\n default:\n return;\n }\n } catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue).catch((value) => {\n return { value, [throwMarker]: 0 };\n }).then((returnValue2) => {\n const [wireValue, transferables] = toWireValue(returnValue2);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\") {\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n }\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n return createProxy(ep, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction createProxy(ep, path = [], target = function() {\n}) {\n let isProxyReleased = false;\n const proxy2 = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n return requestResponseMessage(ep, {\n type: \"RELEASE\",\n path: path.map((p) => p.toString())\n }).then(() => {\n closeEndPoint(ep);\n isProxyReleased = true;\n });\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy2 };\n }\n const r2 = requestResponseMessage(ep, {\n type: \"GET\",\n path: path.map((p) => p.toString())\n }).then(fromWireValue);\n return r2.then.bind(r2);\n }\n return createProxy(ep, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, {\n type: \"SET\",\n path: [...path, prop].map((p) => p.toString()),\n value\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, {\n type: \"ENDPOINT\"\n }).then(fromWireValue);\n }\n if (last === \"bind\") {\n return createProxy(ep, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"APPLY\",\n path: path.map((p) => p.toString()),\n argumentList\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"CONSTRUCT\",\n path: path.map((p) => p.toString()),\n argumentList\n }, transferables).then(fromWireValue);\n }\n });\n return proxy2;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nvar transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\",\n name,\n value: serializedValue\n },\n transferables\n ];\n }\n }\n return [\n {\n type: \"RAW\",\n value\n },\n transferCache.get(value) || []\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\":\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\":\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n ep.addEventListener(\"message\", function l(ev) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener(\"message\", l);\n resolve(ev.data);\n });\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join(\"-\");\n}\n\n// src/cubing/search/vendor/comlink-everywhere/inside/index.js\nvar useNodeWorkarounds = typeof globalThis.Worker === \"undefined\" && typeof globalThis.WorkerNavigator === \"undefined\";\nfunction expose2(api) {\n if (useNodeWorkarounds) {\n (() => __async(this, null, function* () {\n const { port: port2 } = yield Promise.resolve().then(() => (init_node(), node_exports));\n expose(api, yield port2());\n }))();\n } else {\n expose(api);\n }\n}\n\n// src/cubing/search/inside/solve/puzzles/2x2x2.ts\ninit_kpuzzle2();\ninit_puzzles();\n\n// src/cubing/search/inside/inside-worker.ts\nvar isInsideWorker = false;\nfunction setIsInsideWorker(inside) {\n isInsideWorker = inside;\n}\nfunction mustBeInsideWorker() {\n if (!isInsideWorker) {\n throw new Error(\"Must be called from inside a worker, to avoid impct on page performance. Try importing from the top level of `cubing/solve`?\");\n }\n}\n\n// src/cubing/search/inside/solve/vendor/random-uint-below/get-random-values.ts\nvar cryptoPromise = null;\nfunction getRandomValuesFactory() {\n return __async(this, null, function* () {\n const hasWebCrypto = typeof crypto !== \"undefined\" && typeof crypto.getRandomValues !== \"undefined\";\n if (hasWebCrypto) {\n return crypto.getRandomValues.bind(crypto);\n } else {\n const nodeCrypto = yield cryptoPromise != null ? cryptoPromise : cryptoPromise = import(\"crypto\");\n return (arr) => {\n if (!(arr instanceof Uint32Array)) {\n throw new Error(\"The getRandomValues() shim only takes unsigned 32-bit int arrays\");\n }\n var bytes = nodeCrypto.randomBytes(arr.length * 4);\n var uint32_list = [];\n for (var i2 = 0; i2 < arr.length; i2++) {\n uint32_list.push((bytes[i2 * 4 + 0] << 24) + (bytes[i2 * 4 + 1] << 16) + (bytes[i2 * 4 + 2] << 8) + (bytes[i2 * 4 + 3] << 0));\n }\n arr.set(uint32_list);\n };\n }\n });\n}\n\n// src/cubing/search/inside/solve/vendor/random-uint-below/random-int.ts\nvar MAX_JS_PRECISE_INT = 9007199254740992;\nvar UPPER_HALF_MULTIPLIER = 2097152;\nvar LOWER_HALF_DIVIDER = 2048;\nfunction random53BitValue(getRandomValues) {\n var arr = new Uint32Array(2);\n getRandomValues(arr);\n var upper = arr[0];\n var lower = arr[1];\n return Math.floor(upper * UPPER_HALF_MULTIPLIER) + Math.floor(lower / LOWER_HALF_DIVIDER);\n}\nfunction validateMax(max) {\n if (typeof max !== \"number\" || max < 0 || Math.floor(max) !== max) {\n throw new Error(\"randomInt.below() not called with a positive integer value.\");\n }\n if (max > MAX_JS_PRECISE_INT) {\n throw new Error(\"Called randomInt.below() with max == \" + max + \", which is larger than Javascript can handle with integer precision.\");\n }\n}\nfunction randomUIntBelowFactory() {\n return __async(this, null, function* () {\n const getRandomValues = yield getRandomValuesFactory();\n const randomUIntBelow2 = (max) => {\n validateMax(max);\n var val = random53BitValue(getRandomValues);\n var maxUniformSamplingRange = Math.floor(MAX_JS_PRECISE_INT / max) * max;\n if (val < maxUniformSamplingRange) {\n return val % max;\n } else {\n return randomUIntBelow2(max);\n }\n };\n return randomUIntBelow2;\n });\n}\n\n// src/cubing/search/inside/solve/vendor/random-uint-below/random-choice.ts\nfunction randomChoiceFactory() {\n return __async(this, null, function* () {\n const randomUIntBelow2 = yield randomUIntBelowFactory();\n return (arr) => arr[randomUIntBelow2(arr.length)];\n });\n}\n\n// src/cubing/search/inside/solve/vendor/random-uint-below/index.ts\nvar randomUIntBelowPromise = randomUIntBelowFactory();\nfunction randomPermute(list) {\n return __async(this, null, function* () {\n for (let i2 = 1; i2 < list.length; i2++) {\n const j = (yield randomUIntBelowPromise)(i2);\n [list[i2], list[j]] = [list[j], list[i2]];\n }\n });\n}\n\n// src/cubing/search/inside/solve/tremble.ts\ninit_alg();\ninit_kpuzzle2();\n\n// src/cubing/notation/CountMoves.ts\ninit_alg();\nvar CountMoves = class extends TraversalUp {\n constructor(metric) {\n super();\n this.metric = metric;\n }\n traverseAlg(alg) {\n let r2 = 0;\n for (const unit of alg.units()) {\n r2 += this.traverseUnit(unit);\n }\n return r2;\n }\n traverseGrouping(grouping) {\n const alg = grouping.alg;\n return this.traverseAlg(alg) * Math.abs(grouping.amount);\n }\n traverseMove(move) {\n return this.metric(move);\n }\n traverseCommutator(commutator) {\n return 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B));\n }\n traverseConjugate(conjugate) {\n return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);\n }\n traversePause(_pause) {\n return 0;\n }\n traverseNewline(_newLine) {\n return 0;\n }\n traverseLineComment(_comment) {\n return 0;\n }\n};\nfunction isCharUppercase(c) {\n return \"A\" <= c && c <= \"Z\";\n}\nfunction baseMetric(move) {\n const fam = move.family;\n if (isCharUppercase(fam[0]) && fam[fam.length - 1] === \"v\" || fam === \"x\" || fam === \"y\" || fam === \"z\" || fam === \"T\") {\n return 0;\n } else {\n return 1;\n }\n}\nvar countMovesInstance = new CountMoves(baseMetric);\nvar countMoves = countMovesInstance.traverseAlg.bind(countMovesInstance);\n\n// src/cubing/notation/CountAnimatedLeaves.ts\ninit_alg();\nvar CountAnimatedLeaves = class extends TraversalUp {\n traverseAlg(alg) {\n let total = 0;\n for (const part of alg.units()) {\n total += this.traverseUnit(part);\n }\n return total;\n }\n traverseGrouping(grouping) {\n return this.traverseAlg(grouping.alg) * Math.abs(grouping.amount);\n }\n traverseMove(_move) {\n return 1;\n }\n traverseCommutator(commutator) {\n return 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B));\n }\n traverseConjugate(conjugate) {\n return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);\n }\n traversePause(_pause) {\n return 1;\n }\n traverseNewline(_newline) {\n return 0;\n }\n traverseLineComment(_comment) {\n return 0;\n }\n};\nvar countAnimatedLeavesInstance = new CountAnimatedLeaves();\nvar countAnimatedLeaves = countAnimatedLeavesInstance.traverseAlg.bind(countAnimatedLeavesInstance);\n\n// src/cubing/search/inside/solve/tremble.ts\nvar DEFAULT_STAGE1_DEPTH_LIMIT = 2;\nvar DOUBLECHECK_PLACED_PIECES = true;\nvar DEBUG = false;\nfunction calculateMoves(def, moveNames) {\n const searchMoves = [];\n const kpuzzle = new KPuzzle(def);\n moveNames.forEach(function(moveName) {\n const rootMove = new Move(moveName);\n if (rootMove.amount !== 1) {\n throw new Error(\"SGS cannot handle def moves with an amount other than 1 yet.\");\n }\n kpuzzle.reset();\n for (let i2 = 1; true; i2++) {\n kpuzzle.applyMove(rootMove);\n if (areStatesEquivalent(def, kpuzzle.state, identityTransformation(def))) {\n break;\n }\n searchMoves.push({\n move: rootMove.modified({ amount: i2 }),\n transformation: kpuzzle.state\n });\n }\n });\n return searchMoves;\n}\nvar TrembleSolver = class {\n constructor(def, sgs, trembleMoveNames) {\n this.def = def;\n this.sgs = sgs;\n this.searchMoves = calculateMoves(this.def, trembleMoveNames != null ? trembleMoveNames : Object.keys(this.def.moves));\n }\n solve(_0) {\n return __async(this, arguments, function* (state, stage1DepthLimit = DEFAULT_STAGE1_DEPTH_LIMIT, quantumMoveOrder) {\n let bestAlg = null;\n var bestLen = 1e6;\n const recur = (recursiveState, togo, sofar) => {\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveState, bestLen);\n if (!sgsAlg) {\n return;\n }\n const newAlg = sofar.concat(sgsAlg).simplify({ collapseMoves: true, quantumMoveOrder });\n const len = countMoves(newAlg);\n if (bestAlg === null || len < bestLen) {\n if (DEBUG) {\n console.log(`New best (${len} moves): ${newAlg}`);\n console.log(`Tremble moves are: ${sofar}`);\n }\n bestAlg = newAlg;\n bestLen = len;\n }\n return;\n }\n for (const searchMove of this.searchMoves) {\n recur(combineTransformations(this.def, recursiveState, searchMove.transformation), togo - 1, sofar.concat([searchMove.move]));\n }\n };\n for (var d2 = 0; d2 <= stage1DepthLimit; d2++) {\n recur(state, d2, new Alg());\n }\n if (bestAlg === null) {\n throw new Error(\"SGS search failed.\");\n }\n return bestAlg;\n });\n }\n sgsPhaseSolve(initialState, bestLenSofar) {\n const algBuilder = new AlgBuilder();\n let state = initialState;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseState = invertTransformation(this.def, state);\n for (let i2 = 0; i2 < cubieSeq.length; i2++) {\n const loc = cubieSeq[i2];\n const orbitName = loc.orbitName;\n const idx = loc.permutationIdx;\n key += \" \" + inverseState[orbitName].permutation[idx] + \" \" + inverseState[orbitName].orientation[idx];\n }\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumUnits() >= bestLenSofar) {\n return null;\n }\n state = combineTransformations(this.def, state, info.transformation);\n if (DOUBLECHECK_PLACED_PIECES) {\n for (let i2 = 0; i2 < cubieSeq.length; i2++) {\n const location = cubieSeq[i2];\n const orbitName = location.orbitName;\n const idx = location.permutationIdx;\n if (state[orbitName].permutation[idx] !== idx || state[orbitName].orientation[idx] !== 0) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n};\nfunction randomStateFromSGS(def, sgs) {\n return __async(this, null, function* () {\n const randomChoice = yield randomChoiceFactory();\n let state = identityTransformation(def);\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n state = combineTransformations(def, state, sgsAction.transformation);\n }\n return state;\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/2x2x2.ts\nvar TREMBLE_DEPTH = 3;\nvar cachedTrembleSolver = null;\nfunction getCachedTrembleSolver() {\n return __async(this, null, function* () {\n return cachedTrembleSolver || (cachedTrembleSolver = (() => __async(this, null, function* () {\n const json = yield (yield Promise.resolve().then(() => (init_x2x2_sgs_json(), x2x2_sgs_json_exports))).cachedData222();\n return new TrembleSolver(yield puzzles[\"2x2x2\"].def(), json, \"URFLBD\".split(\"\"));\n }))());\n });\n}\nfunction preInitialize222() {\n return __async(this, null, function* () {\n yield getCachedTrembleSolver();\n });\n}\nfunction solve222(state) {\n return __async(this, null, function* () {\n mustBeInsideWorker();\n const trembleSolver = yield getCachedTrembleSolver();\n const alg = yield trembleSolver.solve(state, TREMBLE_DEPTH, () => 4);\n return alg;\n });\n}\nfunction randomizeOrbit(def, orbitName, state, options) {\n return __async(this, null, function* () {\n const randomUIntBelow2 = yield randomUIntBelowFactory();\n yield randomPermute(state[orbitName].permutation);\n const orbitDef = def.orbits[orbitName];\n const ori = state[orbitName].orientation;\n let sum = 0;\n for (let i2 = 0; i2 < orbitDef.numPieces; i2++) {\n const o2 = yield randomUIntBelow2(orbitDef.orientations);\n ori[i2] = o2;\n sum += o2;\n }\n if (options && \"orientationSum\" in options) {\n ori[0] = ((ori[0] + options.orientationSum - sum) % orbitDef.orientations + orbitDef.orientations) % orbitDef.orientations;\n }\n });\n}\nfunction random222State() {\n return __async(this, null, function* () {\n const nonExtensibleDef = yield puzzles[\"2x2x2\"].def();\n const def = Object.assign({}, nonExtensibleDef);\n const kpuzzle = new KPuzzle(def);\n const stateCopy = JSON.parse(JSON.stringify(kpuzzle.state));\n yield randomizeOrbit(def, \"CORNERS\", stateCopy, { orientationSum: 0 });\n return stateCopy;\n });\n}\nfunction random222Scramble() {\n return __async(this, null, function* () {\n return yield solve222(yield random222State());\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/3x3x3/index.ts\ninit_alg();\ninit_kpuzzle2();\ninit_puzzles();\n\n// src/cubing/search/inside/solve/addOrientationSuffix.ts\ninit_alg();\nfunction addOrientationSuffix(alg, suffixSpec) {\n return __async(this, null, function* () {\n const algBuilder = new AlgBuilder();\n algBuilder.experimentalPushAlg(alg);\n for (const suffix of suffixSpec) {\n const choice = (yield randomChoiceFactory())(suffix);\n if (choice !== null) {\n algBuilder.push(Move.fromString(choice));\n }\n }\n return algBuilder.toAlg();\n });\n}\n\n// src/cubing/search/inside/solve/vendor/min2phase/gwt.js\nvar $intern_3 = { 3: 1 };\nvar $intern_9 = 4194303;\nvar $intern_10 = 1048575;\nvar $intern_11 = 524288;\nvar $intern_12 = 65536;\nvar $intern_20 = 65535;\nvar $intern_26 = { 11: 1, 3: 1 };\nvar $intern_27 = { 17: 1, 3: 1 };\nvar $intern_28 = 14540032;\nvar $intern_29 = 286331153;\nvar $intern_30 = { 10: 1, 3: 1 };\nvar _;\nvar prototypesByTypeId_0 = {};\nfunction typeMarkerFn() {\n}\nfunction portableObjCreate(obj) {\n function F() {\n }\n F.prototype = obj || {};\n return new F();\n}\nfunction maybeGetClassLiteralFromPlaceHolder_0(entry) {\n return entry instanceof Array ? entry[0] : null;\n}\nfunction emptyMethod() {\n}\nfunction defineClass(typeId, superTypeId, castableTypeMap) {\n var prototypesByTypeId = prototypesByTypeId_0;\n var createSubclassPrototype = createSubclassPrototype_0;\n var maybeGetClassLiteralFromPlaceHolder = maybeGetClassLiteralFromPlaceHolder_0;\n var prototype_0 = prototypesByTypeId[typeId];\n var clazz = maybeGetClassLiteralFromPlaceHolder(prototype_0);\n if (prototype_0 && !clazz) {\n _ = prototype_0;\n } else {\n _ = prototypesByTypeId[typeId] = !superTypeId ? {} : createSubclassPrototype(superTypeId);\n _.castableTypeMap$ = castableTypeMap;\n _.constructor = _;\n !superTypeId && (_.typeMarker$ = typeMarkerFn);\n }\n for (var i2 = 3; i2 < arguments.length; ++i2) {\n arguments[i2].prototype = _;\n }\n clazz && (_.___clazz$ = clazz);\n}\nfunction createSubclassPrototype_0(superTypeId) {\n var prototypesByTypeId = prototypesByTypeId_0;\n return portableObjCreate(prototypesByTypeId[superTypeId]);\n}\nfunction Object_0() {\n}\ndefineClass(1, null, {}, Object_0);\nfunction canCast(src_0, dstId) {\n return isJavaString(src_0) && !!stringCastMap[dstId] || src_0.castableTypeMap$ && !!src_0.castableTypeMap$[dstId];\n}\nfunction instanceOf(src_0, dstId) {\n return src_0 != null && canCast(src_0, dstId);\n}\nfunction isJavaString(src_0) {\n return typeof src_0 === \"string\";\n}\nfunction narrow_byte(x_0) {\n return x_0 << 24 >> 24;\n}\nfunction Class() {\n ++nextSequentialId;\n this.typeName = null;\n this.simpleName = null;\n this.packageName = null;\n this.compoundName = null;\n this.canonicalName = null;\n this.typeId = null;\n this.arrayLiterals = null;\n}\nfunction createClassObject(packageName, compoundClassName) {\n var clazz;\n clazz = new Class();\n clazz.packageName = packageName;\n clazz.compoundName = compoundClassName;\n return clazz;\n}\nfunction createForClass(packageName, compoundClassName, typeId) {\n var clazz;\n clazz = createClassObject(packageName, compoundClassName);\n maybeSetClassLiteral(typeId, clazz);\n return clazz;\n}\nfunction createForInterface(packageName, compoundClassName) {\n var clazz;\n clazz = createClassObject(packageName, compoundClassName);\n clazz.modifiers = 2;\n return clazz;\n}\nfunction createForPrimitive(className, primitiveTypeId) {\n var clazz;\n clazz = createClassObject(\"\", className);\n clazz.typeId = primitiveTypeId;\n clazz.modifiers = 1;\n return clazz;\n}\nfunction getClassLiteralForArray_0(leafClass, dimensions) {\n var arrayLiterals = leafClass.arrayLiterals = leafClass.arrayLiterals || [];\n return arrayLiterals[dimensions] || (arrayLiterals[dimensions] = leafClass.createClassLiteralForArray(dimensions));\n}\nfunction getPrototypeForClass(clazz) {\n if (clazz.isPrimitive()) {\n return null;\n }\n var typeId = clazz.typeId;\n var prototype_0 = prototypesByTypeId_0[typeId];\n return prototype_0;\n}\nfunction maybeSetClassLiteral(typeId, clazz) {\n var proto;\n if (!typeId) {\n return;\n }\n clazz.typeId = typeId;\n var prototype_0 = getPrototypeForClass(clazz);\n if (!prototype_0) {\n prototypesByTypeId_0[typeId] = [clazz];\n return;\n }\n prototype_0.___clazz$ = clazz;\n}\ndefineClass(79, 1, {}, Class);\n_.createClassLiteralForArray = function createClassLiteralForArray(dimensions) {\n var clazz;\n clazz = new Class();\n clazz.modifiers = 4;\n dimensions > 1 ? clazz.componentType = getClassLiteralForArray_0(this, dimensions - 1) : clazz.componentType = this;\n return clazz;\n};\n_.isPrimitive = function isPrimitive() {\n return (this.modifiers & 1) != 0;\n};\nvar nextSequentialId = 1;\nfunction $clinit_JavaScriptException() {\n $clinit_JavaScriptException = emptyMethod;\n NOT_SET = new Object_0();\n}\nfunction JavaScriptException(e) {\n $clinit_JavaScriptException();\n this.cause = null;\n this.detailMessage = null;\n this.description = \"\";\n this.e = e;\n this.description = \"\";\n}\nfunction getClassLiteralForArray(clazz, dimensions) {\n return getClassLiteralForArray_0(clazz, dimensions);\n}\nfunction initDim(leafClassLiteral, castableTypeMap, elementTypeId, length_0, elementTypeCategory, dimensions) {\n var result;\n result = initializeArrayElementsWithDefaults(elementTypeCategory, length_0);\n initValues(getClassLiteralForArray(leafClassLiteral, dimensions), castableTypeMap, elementTypeId, elementTypeCategory, result);\n return result;\n}\nfunction initDims(leafClassLiteral, castableTypeMapExprs, elementTypeIds, leafElementTypeCategory, dimExprs, count) {\n return initDims_0(leafClassLiteral, castableTypeMapExprs, elementTypeIds, leafElementTypeCategory, dimExprs, 0, count);\n}\nfunction initDims_0(leafClassLiteral, castableTypeMapExprs, elementTypeIds, leafElementTypeCategory, dimExprs, index_0, count) {\n var elementTypeCategory, i2, isLastDim, length_0, result;\n length_0 = dimExprs[index_0];\n isLastDim = index_0 == count - 1;\n elementTypeCategory = isLastDim ? leafElementTypeCategory : 0;\n result = initializeArrayElementsWithDefaults(elementTypeCategory, length_0);\n initValues(getClassLiteralForArray(leafClassLiteral, count - index_0), castableTypeMapExprs[index_0], elementTypeIds[index_0], elementTypeCategory, result);\n if (!isLastDim) {\n ++index_0;\n for (i2 = 0; i2 < length_0; ++i2) {\n result[i2] = initDims_0(leafClassLiteral, castableTypeMapExprs, elementTypeIds, leafElementTypeCategory, dimExprs, index_0, count);\n }\n }\n return result;\n}\nfunction initValues(arrayClass, castableTypeMap, elementTypeId, elementTypeCategory, array) {\n array.___clazz$ = arrayClass;\n array.castableTypeMap$ = castableTypeMap;\n array.typeMarker$ = typeMarkerFn;\n array.__elementTypeId$ = elementTypeId;\n array.__elementTypeCategory$ = elementTypeCategory;\n return array;\n}\nfunction initializeArrayElementsWithDefaults(elementTypeCategory, length_0) {\n var array = new Array(length_0);\n var initValue;\n switch (elementTypeCategory) {\n case 6:\n initValue = { l: 0, m: 0, h: 0 };\n break;\n case 7:\n initValue = 0;\n break;\n case 8:\n initValue = false;\n break;\n default:\n return array;\n }\n for (var i2 = 0; i2 < length_0; ++i2) {\n array[i2] = initValue;\n }\n return array;\n}\nfunction unwrap(e) {\n var jse;\n if (instanceOf(e, 26)) {\n jse = dynamicCast(e, 26);\n if (maskUndefined(jse.e) !== maskUndefined(($clinit_JavaScriptException(), NOT_SET))) {\n return maskUndefined(jse.e) === maskUndefined(NOT_SET) ? null : jse.e;\n }\n }\n return e;\n}\nfunction wrap2(e) {\n var jse;\n if (instanceOf(e, 6)) {\n return e;\n }\n jse = e && e.__gwt$exception;\n if (!jse) {\n jse = new JavaScriptException(e);\n }\n return jse;\n}\nfunction create(value_0) {\n var a0, a1, a2;\n a0 = value_0 & $intern_9;\n a1 = value_0 >> 22 & $intern_9;\n a2 = value_0 < 0 ? $intern_10 : 0;\n return create0(a0, a1, a2);\n}\nfunction create0(l, m, h) {\n return { l, m, h };\n}\nfunction add_1(a, b) {\n var sum0, sum1, sum2;\n sum0 = a.l + b.l;\n sum1 = a.m + b.m + (sum0 >> 22);\n sum2 = a.h + b.h + (sum1 >> 22);\n return { l: sum0 & $intern_9, m: sum1 & $intern_9, h: sum2 & $intern_10 };\n}\nfunction and(a, b) {\n return { l: a.l & b.l, m: a.m & b.m, h: a.h & b.h };\n}\nfunction fromInt(value_0) {\n var rebase, result;\n if (value_0 > -129 && value_0 < 128) {\n rebase = value_0 + 128;\n boxedValues == null && (boxedValues = initDim(Lcom_google_gwt_lang_LongLibBase$LongEmul_2_classLit, $intern_3, 293, 256, 0, 1));\n result = boxedValues[rebase];\n !result && (result = boxedValues[rebase] = create(value_0));\n return result;\n }\n return create(value_0);\n}\nfunction gte(a, b) {\n var signa, signb;\n signa = a.h >> 19;\n signb = b.h >> 19;\n return signa == 0 ? signb != 0 || a.h > b.h || a.h == b.h && a.m > b.m || a.h == b.h && a.m == b.m && a.l >= b.l : !(signb == 0 || a.h < b.h || a.h == b.h && a.m < b.m || a.h == b.h && a.m == b.m && a.l < b.l);\n}\nfunction neq(a, b) {\n return a.l != b.l || a.m != b.m || a.h != b.h;\n}\nfunction or(a, b) {\n return { l: a.l | b.l, m: a.m | b.m, h: a.h | b.h };\n}\nfunction shl(a, n) {\n var res0, res1, res2;\n n &= 63;\n if (n < 22) {\n res0 = a.l << n;\n res1 = a.m << n | a.l >> 22 - n;\n res2 = a.h << n | a.m >> 22 - n;\n } else if (n < 44) {\n res0 = 0;\n res1 = a.l << n - 22;\n res2 = a.m << n - 22 | a.l >> 44 - n;\n } else {\n res0 = 0;\n res1 = 0;\n res2 = a.l << n - 44;\n }\n return { l: res0 & $intern_9, m: res1 & $intern_9, h: res2 & $intern_10 };\n}\nfunction shr(a, n) {\n var a2, negative, res0, res1, res2;\n n &= 63;\n a2 = a.h;\n negative = (a2 & $intern_11) != 0;\n negative && (a2 |= -1048576);\n if (n < 22) {\n res2 = a2 >> n;\n res1 = a.m >> n | a2 << 22 - n;\n res0 = a.l >> n | a.m << 22 - n;\n } else if (n < 44) {\n res2 = negative ? $intern_10 : 0;\n res1 = a2 >> n - 22;\n res0 = a.m >> n - 22 | a2 << 44 - n;\n } else {\n res2 = negative ? $intern_10 : 0;\n res1 = negative ? $intern_9 : 0;\n res0 = a2 >> n - 44;\n }\n return { l: res0 & $intern_9, m: res1 & $intern_9, h: res2 & $intern_10 };\n}\nfunction sub_0(a, b) {\n var sum0, sum1, sum2;\n sum0 = a.l - b.l;\n sum1 = a.m - b.m + (sum0 >> 22);\n sum2 = a.h - b.h + (sum1 >> 22);\n return { l: sum0 & $intern_9, m: sum1 & $intern_9, h: sum2 & $intern_10 };\n}\nfunction toInt(a) {\n return a.l | a.m << 22;\n}\nvar boxedValues;\nfunction AbstractStringBuilder(string) {\n this.string = string;\n}\nfunction max_0(x_0, y_0) {\n return x_0 > y_0 ? x_0 : y_0;\n}\nfunction min_0(x_0, y_0) {\n return x_0 < y_0 ? x_0 : y_0;\n}\nfunction $indexOf_0(this$static, str) {\n return this$static.indexOf(str);\n}\nfunction _String(value_0) {\n return __valueOf(value_0, 0, value_0.length);\n}\nfunction __valueOf(x_0, start_0, end) {\n var s = \"\";\n for (var batchStart = start_0; batchStart < end; ) {\n var batchEnd = Math.min(batchStart + 1e4, end);\n s += String.fromCharCode.apply(null, x_0.slice(batchStart, batchEnd));\n batchStart = batchEnd;\n }\n return s;\n}\nfunction fromCodePoint(codePoint) {\n var hiSurrogate, loSurrogate;\n if (codePoint >= $intern_12) {\n hiSurrogate = 55296 + (codePoint - $intern_12 >> 10 & 1023) & $intern_20;\n loSurrogate = 56320 + (codePoint - $intern_12 & 1023) & $intern_20;\n return valueOf_0(hiSurrogate) + valueOf_0(loSurrogate);\n } else {\n return String.fromCharCode(codePoint & $intern_20);\n }\n}\nvar Ljava_lang_String_2_classLit = createForClass(\"java.lang\", \"String\", 2);\nfunction $append(this$static) {\n this$static.string += \" \";\n return this$static;\n}\nfunction $append_1(this$static, x_0) {\n this$static.string += x_0;\n return this$static;\n}\nfunction StringBuffer() {\n AbstractStringBuilder.call(this, \"\");\n}\nfunction equals_7(array1, array2) {\n var i2;\n if (array1 === array2) {\n return true;\n }\n if (array1.length != array2.length) {\n return false;\n }\n for (i2 = 0; i2 < array1.length; ++i2) {\n if (array1[i2] != array2[i2]) {\n return false;\n }\n }\n return true;\n}\nfunction $clinit_CoordCube() {\n $clinit_CoordCube = emptyMethod;\n UDSliceMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [495, 18], 2);\n TwistMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [324, 18], 2);\n FlipMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [336, 18], 2);\n UDSliceConj = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [495, 8], 2);\n UDSliceTwistPrun = initDim(I_classLit, $intern_27, 0, 20048, 7, 1);\n UDSliceFlipPrun = initDim(I_classLit, $intern_27, 0, 20791, 7, 1);\n TwistFlipPrun = initDim(I_classLit, $intern_27, 0, 82945, 7, 1);\n CPermMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [2768, 10], 2);\n EPermMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [2768, 10], 2);\n MPermMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [24, 10], 2);\n MPermConj = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [24, 16], 2);\n CCombPConj = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [140, 16], 2);\n MCPermPrun = initDim(I_classLit, $intern_27, 0, 8305, 7, 1);\n EPermCCombPPrun = initDim(I_classLit, $intern_27, 0, 48441, 7, 1);\n}\nfunction $doMovePrun(this$static, cc, m) {\n this$static.slice_0 = UDSliceMove[cc.slice_0][m];\n this$static.flip = FlipMove[cc.flip][($clinit_CubieCube(), Sym8Move)[m << 3 | cc.fsym]];\n this$static.fsym = this$static.flip & 7 ^ cc.fsym;\n this$static.flip >>= 3;\n this$static.twist = TwistMove[cc.twist][Sym8Move[m << 3 | cc.tsym]];\n this$static.tsym = this$static.twist & 7 ^ cc.tsym;\n this$static.twist >>= 3;\n this$static.prun = max_0(max_0(getPruning(UDSliceTwistPrun, this$static.twist * 495 + UDSliceConj[this$static.slice_0][this$static.tsym]), getPruning(UDSliceFlipPrun, this$static.flip * 495 + UDSliceConj[this$static.slice_0][this$static.fsym])), getPruning(TwistFlipPrun, this$static.twist << 11 | FlipS2RF[this$static.flip << 3 | this$static.fsym ^ this$static.tsym]));\n return this$static.prun;\n}\nfunction $doMovePrunConj(this$static, cc, m) {\n m = ($clinit_CubieCube(), SymMove_0)[3][m];\n this$static.flipc = FlipMove[cc.flipc >> 3][Sym8Move[m << 3 | cc.flipc & 7]] ^ cc.flipc & 7;\n this$static.twistc = TwistMove[cc.twistc >> 3][Sym8Move[m << 3 | cc.twistc & 7]] ^ cc.twistc & 7;\n return getPruning(TwistFlipPrun, this$static.twistc >> 3 << 11 | FlipS2RF[this$static.flipc ^ this$static.twistc & 7]);\n}\nfunction $setWithPrun(this$static, cc, depth) {\n var pc;\n this$static.twist = ($clinit_CubieCube(), TwistR2S)[$getTwist(cc)];\n this$static.flip = FlipR2S[$getFlip(cc)];\n this$static.tsym = this$static.twist & 7;\n this$static.twist = this$static.twist >> 3;\n this$static.prun = getPruning(TwistFlipPrun, this$static.twist << 11 | FlipS2RF[this$static.flip ^ this$static.tsym]);\n if (this$static.prun > depth) {\n return false;\n }\n this$static.fsym = this$static.flip & 7;\n this$static.flip = this$static.flip >> 3;\n this$static.slice_0 = 494 - getComb(cc.ea, 8, true);\n this$static.prun = max_0(this$static.prun, max_0(getPruning(UDSliceTwistPrun, this$static.twist * 495 + UDSliceConj[this$static.slice_0][this$static.tsym]), getPruning(UDSliceFlipPrun, this$static.flip * 495 + UDSliceConj[this$static.slice_0][this$static.fsym])));\n if (this$static.prun > depth) {\n return false;\n }\n pc = new CubieCube();\n CornConjugate(cc, 1, pc);\n EdgeConjugate(cc, 1, pc);\n this$static.twistc = TwistR2S[$getTwist(pc)];\n this$static.flipc = FlipR2S[$getFlip(pc)];\n this$static.prun = max_0(this$static.prun, getPruning(TwistFlipPrun, this$static.twistc >> 3 << 11 | FlipS2RF[this$static.flipc ^ this$static.twistc & 7]));\n return this$static.prun <= depth;\n}\nfunction CoordCube() {\n $clinit_CoordCube();\n}\nfunction getPruning(table, index_0) {\n $clinit_CoordCube();\n return table[index_0 >> 3] >> (index_0 << 2) & 15;\n}\nfunction init_0(fullInit) {\n $clinit_CoordCube();\n if (initLevel == 2 || initLevel == 1 && !fullInit) {\n return;\n }\n if (initLevel == 0) {\n initPermSym2Raw();\n initCPermMove();\n initEPermMove();\n initMPermMoveConj();\n initCombPMoveConj();\n $clinit_CubieCube();\n initSym2Raw(2048, FlipS2R, FlipR2S, SymStateFlip = initDim(C_classLit, $intern_26, 0, 336, 7, 1), 0);\n initSym2Raw(2187, TwistS2R, TwistR2S, SymStateTwist = initDim(C_classLit, $intern_26, 0, 324, 7, 1), 1);\n initFlipMove();\n initTwistMove();\n initUDSliceMoveConj();\n }\n initRawSymPrun(MCPermPrun, MPermMove, MPermConj, CPermMove, ($clinit_CubieCube(), SymStatePerm), 584244, fullInit);\n initRawSymPrun(EPermCCombPPrun, CCombPMove, CCombPConj, EPermMove, SymStatePerm, 514084, fullInit);\n initRawSymPrun(UDSliceTwistPrun, UDSliceMove, UDSliceConj, TwistMove, SymStateTwist, 431619, fullInit);\n initRawSymPrun(UDSliceFlipPrun, UDSliceMove, UDSliceConj, FlipMove, SymStateFlip, 431619, fullInit);\n initRawSymPrun(TwistFlipPrun, null, null, TwistMove, SymStateTwist, 103939, fullInit);\n initLevel = fullInit ? 2 : 1;\n}\nfunction initCPermMove() {\n var c, d2, i2, j;\n c = new CubieCube();\n d2 = new CubieCube();\n for (i2 = 0; i2 < 2768; i2++) {\n $setCPerm(c, ($clinit_CubieCube(), EPermS2R)[i2]);\n for (j = 0; j < 10; j++) {\n CornMult(c, moveCube[($clinit_Util(), ud2std)[j]], d2);\n CPermMove[i2][j] = ESym2CSym(EPermR2S[getNPerm(d2.ca, 8, false)]) & $intern_20;\n }\n }\n}\nfunction initCombPMoveConj() {\n var c, d2, i2, j, j0;\n c = new CubieCube();\n d2 = new CubieCube();\n CCombPMove = initDims(C_classLit, [$intern_3, $intern_26], [11, 0], 7, [140, 10], 2);\n for (i2 = 0; i2 < 140; i2++) {\n setComb(c.ca, i2 % 70, 0, false);\n for (j0 = 0; j0 < 10; j0++) {\n CornMult(c, ($clinit_CubieCube(), moveCube)[($clinit_Util(), ud2std)[j0]], d2);\n CCombPMove[i2][j0] = getComb(d2.ca, 0, false) + 70 * (165 >> j0 & 1 ^ ~~(i2 / 70)) & $intern_20;\n }\n for (j = 0; j < 16; j++) {\n CornConjugate(c, ($clinit_CubieCube(), SymMultInv)[0][j], d2);\n CCombPConj[i2][j] = getComb(d2.ca, 0, false) + 70 * ~~(i2 / 70) & $intern_20;\n }\n }\n}\nfunction initEPermMove() {\n var c, d2, i2, j;\n c = new CubieCube();\n d2 = new CubieCube();\n for (i2 = 0; i2 < 2768; i2++) {\n $setEPerm(c, ($clinit_CubieCube(), EPermS2R)[i2]);\n for (j = 0; j < 10; j++) {\n EdgeMult(c, moveCube[($clinit_Util(), ud2std)[j]], d2);\n EPermMove[i2][j] = EPermR2S[getNPerm(d2.ea, 8, true)];\n }\n }\n}\nfunction initFlipMove() {\n var c, d2, i2, j;\n c = new CubieCube();\n d2 = new CubieCube();\n for (i2 = 0; i2 < 336; i2++) {\n $setFlip(c, ($clinit_CubieCube(), FlipS2R)[i2]);\n for (j = 0; j < 18; j++) {\n EdgeMult(c, moveCube[j], d2);\n FlipMove[i2][j] = FlipR2S[$getFlip(d2)];\n }\n }\n}\nfunction initMPermMoveConj() {\n var c, d2, i2, j, j0;\n c = new CubieCube();\n d2 = new CubieCube();\n for (i2 = 0; i2 < 24; i2++) {\n setNPerm(c.ea, i2, 12, true);\n for (j0 = 0; j0 < 10; j0++) {\n EdgeMult(c, ($clinit_CubieCube(), moveCube)[($clinit_Util(), ud2std)[j0]], d2);\n MPermMove[i2][j0] = getNPerm(d2.ea, 12, true) % 24 & $intern_20;\n }\n for (j = 0; j < 16; j++) {\n EdgeConjugate(c, ($clinit_CubieCube(), SymMultInv)[0][j], d2);\n MPermConj[i2][j] = getNPerm(d2.ea, 12, true) % 24 & $intern_20;\n }\n }\n}\nfunction initRawSymPrun(PrunTable, RawMove, RawConj, SymMove, SymState, PrunFlag, fullInit) {\n var INV_DEPTH, ISTFP, IS_PHASE2, MAX_DEPTH, MIN_DEPTH, NEXT_AXIS_MAGIC, N_MOVES, N_RAW, N_SIZE, SEARCH_DEPTH, SYM_E2C_MAGIC, SYM_MASK, SYM_SHIFT, check, depth, done, flip, fsym, i2, i0, idx, idxx, inv, j, m, mask, prun, raw, rawx, selArrMask, select, sym, symState, symx, val, val0, xorVal;\n SYM_SHIFT = PrunFlag & 15;\n SYM_E2C_MAGIC = (PrunFlag >> 4 & 1) == 1 ? $intern_28 : 0;\n IS_PHASE2 = (PrunFlag >> 5 & 1) == 1;\n INV_DEPTH = PrunFlag >> 8 & 15;\n MAX_DEPTH = PrunFlag >> 12 & 15;\n MIN_DEPTH = PrunFlag >> 16 & 15;\n SEARCH_DEPTH = fullInit ? MAX_DEPTH : MIN_DEPTH;\n SYM_MASK = (1 << SYM_SHIFT) - 1;\n ISTFP = RawMove == null;\n N_RAW = ISTFP ? 2048 : RawMove.length;\n N_SIZE = N_RAW * SymMove.length;\n N_MOVES = IS_PHASE2 ? 10 : 18;\n NEXT_AXIS_MAGIC = N_MOVES == 10 ? 66 : 599186;\n depth = (PrunTable[N_SIZE >> 3] >> (N_SIZE << 2) & 15) - 1;\n done = 0;\n if (depth == -1) {\n for (i2 = 0; i2 < ~~(N_SIZE / 8) + 1; i2++) {\n PrunTable[i2] = $intern_29;\n }\n PrunTable[0] ^= 1;\n depth = 0;\n done = 1;\n }\n while (depth < SEARCH_DEPTH) {\n mask = (depth + 1) * $intern_29 ^ -1;\n for (i0 = 0; i0 < PrunTable.length; i0++) {\n val0 = PrunTable[i0] ^ mask;\n val0 &= val0 >> 1;\n PrunTable[i0] += val0 & val0 >> 2 & $intern_29;\n }\n inv = depth > INV_DEPTH;\n select = inv ? depth + 2 : depth;\n selArrMask = select * $intern_29;\n check = inv ? depth : depth + 2;\n ++depth;\n xorVal = depth ^ depth + 1;\n val = 0;\n for (i2 = 0; i2 < N_SIZE; ++i2, val >>= 4) {\n if ((i2 & 7) == 0) {\n val = PrunTable[i2 >> 3];\n if (((val ^ selArrMask) - $intern_29 & ~(val ^ selArrMask) & -2004318072) == 0) {\n i2 += 7;\n continue;\n }\n }\n if ((val & 15) != select) {\n continue;\n }\n raw = i2 % N_RAW;\n sym = ~~(i2 / N_RAW);\n flip = 0;\n fsym = 0;\n if (ISTFP) {\n flip = ($clinit_CubieCube(), FlipR2S)[raw];\n fsym = flip & 7;\n flip >>= 3;\n }\n for (m = 0; m < N_MOVES; m++) {\n symx = SymMove[sym][m];\n ISTFP ? rawx = ($clinit_CubieCube(), FlipS2RF)[FlipMove[flip][Sym8Move[m << 3 | fsym]] ^ fsym ^ symx & SYM_MASK] : rawx = RawConj[RawMove[raw][m]][symx & SYM_MASK];\n symx >>= SYM_SHIFT;\n idx = symx * N_RAW + rawx;\n prun = PrunTable[idx >> 3] >> (idx << 2) & 15;\n if (prun != check) {\n prun < depth - 1 && (m += NEXT_AXIS_MAGIC >> m & 3);\n continue;\n }\n ++done;\n if (inv) {\n PrunTable[i2 >> 3] ^= xorVal << (i2 << 2);\n break;\n }\n PrunTable[idx >> 3] ^= xorVal << (idx << 2);\n for (j = 1, symState = SymState[symx]; (symState >>= 1) != 0; j++) {\n if ((symState & 1) != 1) {\n continue;\n }\n idxx = symx * N_RAW;\n ISTFP ? idxx += ($clinit_CubieCube(), FlipS2RF)[FlipR2S[rawx] ^ j] : idxx += RawConj[rawx][j ^ SYM_E2C_MAGIC >> (j << 1) & 3];\n if ((PrunTable[idxx >> 3] >> (idxx << 2) & 15) == check) {\n PrunTable[idxx >> 3] ^= xorVal << (idxx << 2);\n ++done;\n }\n }\n }\n }\n }\n}\nfunction initTwistMove() {\n var c, d2, i2, j;\n c = new CubieCube();\n d2 = new CubieCube();\n for (i2 = 0; i2 < 324; i2++) {\n $setTwist(c, ($clinit_CubieCube(), TwistS2R)[i2]);\n for (j = 0; j < 18; j++) {\n CornMult(c, moveCube[j], d2);\n TwistMove[i2][j] = TwistR2S[$getTwist(d2)];\n }\n }\n}\nfunction initUDSliceMoveConj() {\n var c, d2, i2, i0, j, j0, k, udslice;\n c = new CubieCube();\n d2 = new CubieCube();\n for (i0 = 0; i0 < 495; i0++) {\n setComb(c.ea, 494 - i0, 8, true);\n for (j0 = 0; j0 < 18; j0 += 3) {\n EdgeMult(c, ($clinit_CubieCube(), moveCube)[j0], d2);\n UDSliceMove[i0][j0] = 494 - getComb(d2.ea, 8, true) & $intern_20;\n }\n for (j = 0; j < 16; j += 2) {\n EdgeConjugate(c, ($clinit_CubieCube(), SymMultInv)[0][j], d2);\n UDSliceConj[i0][j >> 1] = 494 - getComb(d2.ea, 8, true) & $intern_20;\n }\n }\n for (i2 = 0; i2 < 495; i2++) {\n for (j = 0; j < 18; j += 3) {\n udslice = UDSliceMove[i2][j];\n for (k = 1; k < 3; k++) {\n udslice = UDSliceMove[udslice][j];\n UDSliceMove[i2][j + k] = udslice & $intern_20;\n }\n }\n }\n}\ndefineClass(31, 1, { 31: 1 }, CoordCube);\n_.flip = 0;\n_.flipc = 0;\n_.fsym = 0;\n_.prun = 0;\n_.slice_0 = 0;\n_.tsym = 0;\n_.twist = 0;\n_.twistc = 0;\nvar CCombPConj;\nvar CCombPMove;\nvar CPermMove;\nvar EPermCCombPPrun;\nvar EPermMove;\nvar FlipMove;\nvar MCPermPrun;\nvar MPermConj;\nvar MPermMove;\nvar TwistFlipPrun;\nvar TwistMove;\nvar UDSliceConj;\nvar UDSliceFlipPrun;\nvar UDSliceMove;\nvar UDSliceTwistPrun;\nvar initLevel = 0;\nvar Lorg_cubing_min2phase_client_CoordCube_2_classLit = createForClass(\"org.cubing.min2phase.client\", \"CoordCube\", 31);\nfunction $clinit_CubieCube() {\n $clinit_CubieCube = emptyMethod;\n CubeSym = initDim(Lorg_cubing_min2phase_client_CubieCube_2_classLit, $intern_3, 7, 16, 0, 1);\n moveCube = initDim(Lorg_cubing_min2phase_client_CubieCube_2_classLit, $intern_3, 7, 18, 0, 1);\n moveCubeSym = initDim(J_classLit, $intern_3, 0, 18, 6, 1);\n firstMoveSym = initDim(I_classLit, $intern_27, 0, 48, 7, 1);\n SymMult = initDims(I_classLit, [$intern_3, $intern_27], [17, 0], 7, [16, 16], 2);\n SymMultInv = initDims(I_classLit, [$intern_3, $intern_27], [17, 0], 7, [16, 16], 2);\n SymMove_0 = initDims(I_classLit, [$intern_3, $intern_27], [17, 0], 7, [16, 18], 2);\n Sym8Move = initDim(I_classLit, $intern_27, 0, 144, 7, 1);\n SymMoveUD = initDims(I_classLit, [$intern_3, $intern_27], [17, 0], 7, [16, 18], 2);\n FlipS2R = initDim(C_classLit, $intern_26, 0, 336, 7, 1);\n TwistS2R = initDim(C_classLit, $intern_26, 0, 324, 7, 1);\n EPermS2R = initDim(C_classLit, $intern_26, 0, 2768, 7, 1);\n Perm2CombP = initDim(B_classLit, $intern_30, 0, 2768, 7, 1);\n PermInvEdgeSym = initDim(C_classLit, $intern_26, 0, 2768, 7, 1);\n MPermInv = initDim(B_classLit, $intern_30, 0, 24, 7, 1);\n FlipR2S = initDim(C_classLit, $intern_26, 0, 2048, 7, 1);\n TwistR2S = initDim(C_classLit, $intern_26, 0, 2187, 7, 1);\n EPermR2S = initDim(C_classLit, $intern_26, 0, 40320, 7, 1);\n FlipS2RF = initDim(C_classLit, $intern_26, 0, 2688, 7, 1);\n urf1 = new CubieCube_0(2531, 1373, 67026819, 1367);\n urf2 = new CubieCube_0(2089, 1906, 322752913, 2040);\n urfMove = initValues(getClassLiteralForArray(B_classLit, 2), $intern_3, 10, 0, [\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [6, 7, 8, 0, 1, 2, 3, 4, 5, 15, 16, 17, 9, 10, 11, 12, 13, 14]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [3, 4, 5, 6, 7, 8, 0, 1, 2, 12, 13, 14, 15, 16, 17, 9, 10, 11]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [2, 1, 0, 5, 4, 3, 8, 7, 6, 11, 10, 9, 14, 13, 12, 17, 16, 15]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [8, 7, 6, 2, 1, 0, 5, 4, 3, 17, 16, 15, 11, 10, 9, 14, 13, 12]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [5, 4, 3, 8, 7, 6, 2, 1, 0, 14, 13, 12, 17, 16, 15, 11, 10, 9])\n ]);\n initMove();\n initSym();\n}\nfunction $$init(this$static) {\n this$static.ca = initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [0, 1, 2, 3, 4, 5, 6, 7]);\n this$static.ea = initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]);\n}\nfunction $URFConjugate(this$static) {\n !this$static.temps && (this$static.temps = new CubieCube());\n CornMult(urf2, this$static, this$static.temps);\n CornMult(this$static.temps, urf1, this$static);\n EdgeMult(urf2, this$static, this$static.temps);\n EdgeMult(this$static.temps, urf1, this$static);\n}\nfunction $copy(this$static, c) {\n var i2, i0;\n for (i0 = 0; i0 < 8; i0++) {\n this$static.ca[i0] = c.ca[i0];\n }\n for (i2 = 0; i2 < 12; i2++) {\n this$static.ea[i2] = c.ea[i2];\n }\n}\nfunction $getCPermSym(this$static) {\n return ESym2CSym(EPermR2S[getNPerm(this$static.ca, 8, false)]);\n}\nfunction $getEPermSym(this$static) {\n return EPermR2S[getNPerm(this$static.ea, 8, true)];\n}\nfunction $getFlip(this$static) {\n var i2, idx;\n idx = 0;\n for (i2 = 0; i2 < 11; i2++) {\n idx = idx << 1 | this$static.ea[i2] & 1;\n }\n return idx;\n}\nfunction $getTwist(this$static) {\n var i2, idx;\n idx = 0;\n for (i2 = 0; i2 < 7; i2++) {\n idx += (idx << 1) + (this$static.ca[i2] >> 3);\n }\n return idx;\n}\nfunction $invCubieCube(this$static) {\n var corn, edge;\n !this$static.temps && (this$static.temps = new CubieCube());\n for (edge = 0; edge < 12; edge++) {\n this$static.temps.ea[this$static.ea[edge] >> 1] = (edge << 1 | this$static.ea[edge] & 1) << 24 >> 24;\n }\n for (corn = 0; corn < 8; corn++) {\n this$static.temps.ca[this$static.ca[corn] & 7] = (corn | 32 >> (this$static.ca[corn] >> 3) & 24) << 24 >> 24;\n }\n $copy(this$static, this$static.temps);\n}\nfunction $selfSymmetry(this$static) {\n var c, cperm, cpermx, d2, i2, sym, urfInv;\n c = new CubieCube_1(this$static);\n d2 = new CubieCube();\n cperm = ESym2CSym(EPermR2S[getNPerm(c.ca, 8, false)]) >> 4;\n sym = { l: 0, m: 0, h: 0 };\n for (urfInv = 0; urfInv < 6; urfInv++) {\n cpermx = ESym2CSym(EPermR2S[getNPerm(c.ca, 8, false)]) >> 4;\n if (cperm == cpermx) {\n for (i2 = 0; i2 < 16; i2++) {\n CornConjugate(c, SymMultInv[0][i2], d2);\n if (equals_7(d2.ca, this$static.ca)) {\n EdgeConjugate(c, SymMultInv[0][i2], d2);\n equals_7(d2.ea, this$static.ea) && (sym = or(sym, shl({ l: 1, m: 0, h: 0 }, (urfInv << 4 | i2) < 48 ? urfInv << 4 | i2 : 48)));\n }\n }\n }\n $URFConjugate(c);\n urfInv % 3 == 2 && $invCubieCube(c);\n }\n return sym;\n}\nfunction $setCPerm(this$static, idx) {\n setNPerm(this$static.ca, idx, 8, false);\n}\nfunction $setEPerm(this$static, idx) {\n setNPerm(this$static.ea, idx, 8, true);\n}\nfunction $setFlip(this$static, idx) {\n var i2, parity, val;\n parity = 0;\n for (i2 = 10; i2 >= 0; --i2, idx >>= 1) {\n parity ^= val = idx & 1;\n this$static.ea[i2] = (this$static.ea[i2] & -2 | val) << 24 >> 24;\n }\n this$static.ea[11] = (this$static.ea[11] & -2 | parity) << 24 >> 24;\n}\nfunction $setTwist(this$static, idx) {\n var i2, twst, val;\n twst = 15;\n for (i2 = 6; i2 >= 0; --i2, idx = ~~(idx / 3)) {\n twst -= val = idx % 3;\n this$static.ca[i2] = (this$static.ca[i2] & 7 | val << 3) << 24 >> 24;\n }\n this$static.ca[7] = (this$static.ca[7] & 7 | twst % 3 << 3) << 24 >> 24;\n}\nfunction $verify(this$static) {\n var c, cornMask, e, edgeMask, sum;\n sum = 0;\n edgeMask = 0;\n for (e = 0; e < 12; e++) {\n edgeMask |= 1 << (this$static.ea[e] >> 1);\n sum ^= this$static.ea[e] & 1;\n }\n if (edgeMask != 4095) {\n return -2;\n }\n if (sum != 0) {\n return -3;\n }\n cornMask = 0;\n sum = 0;\n for (c = 0; c < 8; c++) {\n cornMask |= 1 << (this$static.ca[c] & 7);\n sum += this$static.ca[c] >> 3;\n }\n if (cornMask != 255) {\n return -4;\n }\n if (sum % 3 != 0) {\n return -5;\n }\n if ((getNParity(getNPerm(this$static.ea, 12, true), 12) ^ getNParity(getNPerm(this$static.ca, 8, false), 8)) != 0) {\n return -6;\n }\n return 0;\n}\nfunction CornConjugate(a, idx, b) {\n $clinit_CubieCube();\n var corn, ori, oriA, oriB, s, sinv;\n sinv = CubeSym[SymMultInv[0][idx]];\n s = CubeSym[idx];\n for (corn = 0; corn < 8; corn++) {\n oriA = sinv.ca[a.ca[s.ca[corn] & 7] & 7] >> 3;\n oriB = a.ca[s.ca[corn] & 7] >> 3;\n ori = oriA < 3 ? oriB : (3 - oriB) % 3;\n b.ca[corn] = (sinv.ca[a.ca[s.ca[corn] & 7] & 7] & 7 | ori << 3) << 24 >> 24;\n }\n}\nfunction CornMult(a, b, prod) {\n $clinit_CubieCube();\n var corn, oriA, oriB;\n for (corn = 0; corn < 8; corn++) {\n oriA = a.ca[b.ca[corn] & 7] >> 3;\n oriB = b.ca[corn] >> 3;\n prod.ca[corn] = (a.ca[b.ca[corn] & 7] & 7 | (oriA + oriB) % 3 << 3) << 24 >> 24;\n }\n}\nfunction CornMultFull(a, b, prod) {\n var corn, ori, oriA, oriB;\n for (corn = 0; corn < 8; corn++) {\n oriA = a.ca[b.ca[corn] & 7] >> 3;\n oriB = b.ca[corn] >> 3;\n ori = oriA + (oriA < 3 ? oriB : 6 - oriB);\n ori = ori % 3 + (oriA < 3 == oriB < 3 ? 0 : 3);\n prod.ca[corn] = (a.ca[b.ca[corn] & 7] & 7 | ori << 3) << 24 >> 24;\n }\n}\nfunction CubieCube() {\n $clinit_CubieCube();\n $$init(this);\n}\nfunction CubieCube_0(cperm, twist, eperm, flip) {\n $$init(this);\n setNPerm(this.ca, cperm, 8, false);\n $setTwist(this, twist);\n setNPerm(this.ea, eperm, 12, true);\n $setFlip(this, flip);\n}\nfunction CubieCube_1(c) {\n $$init(this);\n $copy(this, c);\n}\nfunction ESym2CSym(idx) {\n $clinit_CubieCube();\n return idx ^ $intern_28 >> ((idx & 15) << 1) & 3;\n}\nfunction EdgeConjugate(a, idx, b) {\n $clinit_CubieCube();\n var ed, s, sinv;\n sinv = CubeSym[SymMultInv[0][idx]];\n s = CubeSym[idx];\n for (ed = 0; ed < 12; ed++) {\n b.ea[ed] = (sinv.ea[a.ea[s.ea[ed] >> 1] >> 1] ^ a.ea[s.ea[ed] >> 1] & 1 ^ s.ea[ed] & 1) << 24 >> 24;\n }\n}\nfunction EdgeMult(a, b, prod) {\n $clinit_CubieCube();\n var ed;\n for (ed = 0; ed < 12; ed++) {\n prod.ea[ed] = (a.ea[b.ea[ed] >> 1] ^ b.ea[ed] & 1) << 24 >> 24;\n }\n}\nfunction getPermSymInv(idx, sym, isCorner) {\n $clinit_CubieCube();\n var idxi;\n idxi = PermInvEdgeSym[idx];\n isCorner && (idxi = idxi ^ $intern_28 >> ((idxi & 15) << 1) & 3);\n return idxi & 65520 | SymMult[idxi & 15][sym];\n}\nfunction getSkipMoves(ssym) {\n $clinit_CubieCube();\n var i2, ret;\n ret = 0;\n for (i2 = 1; neq(ssym = shr(ssym, 1), { l: 0, m: 0, h: 0 }); i2++) {\n eq(and(ssym, { l: 1, m: 0, h: 0 }), { l: 1, m: 0, h: 0 }) && (ret |= firstMoveSym[i2]);\n }\n return ret;\n}\nfunction initMove() {\n var a, p;\n moveCube[0] = new CubieCube_0(15120, 0, 119750400, 0);\n moveCube[3] = new CubieCube_0(21021, 1494, 323403417, 0);\n moveCube[6] = new CubieCube_0(8064, 1236, 29441808, 550);\n moveCube[9] = new CubieCube_0(9, 0, 5880, 0);\n moveCube[12] = new CubieCube_0(1230, 412, 2949660, 0);\n moveCube[15] = new CubieCube_0(224, 137, 328552, 137);\n for (a = 0; a < 18; a += 3) {\n for (p = 0; p < 2; p++) {\n moveCube[a + p + 1] = new CubieCube();\n EdgeMult(moveCube[a + p], moveCube[a], moveCube[a + p + 1]);\n CornMult(moveCube[a + p], moveCube[a], moveCube[a + p + 1]);\n }\n }\n}\nfunction initPermSym2Raw() {\n $clinit_CubieCube();\n var cc, i2, i0;\n initSym2Raw(40320, EPermS2R, EPermR2S, SymStatePerm = initDim(C_classLit, $intern_26, 0, 2768, 7, 1), 2);\n cc = new CubieCube();\n for (i0 = 0; i0 < 2768; i0++) {\n $setEPerm(cc, EPermS2R[i0]);\n Perm2CombP[i0] = getComb(cc.ea, 0, true) + getNParity(EPermS2R[i0], 8) * 70 << 24 >> 24;\n $invCubieCube(cc);\n PermInvEdgeSym[i0] = EPermR2S[getNPerm(cc.ea, 8, true)];\n }\n for (i2 = 0; i2 < 24; i2++) {\n setNPerm(cc.ea, i2, 12, true);\n $invCubieCube(cc);\n MPermInv[i2] = getNPerm(cc.ea, 12, true) % 24 << 24 >> 24;\n }\n}\nfunction initSym() {\n var c, d2, f2, i2, i0, i1, i22, j, j0, j1, k, lr2, m, s, t, u4;\n c = new CubieCube();\n d2 = new CubieCube();\n f2 = new CubieCube_0(28783, 0, 259268407, 0);\n u4 = new CubieCube_0(15138, 0, 119765538, 7);\n lr2 = new CubieCube_0(5167, 0, 83473207, 0);\n for (i0 = 0; i0 < 8; i0++) {\n lr2.ca[i0] = narrow_byte(lr2.ca[i0] | 24);\n }\n for (i1 = 0; i1 < 16; i1++) {\n CubeSym[i1] = new CubieCube_1(c);\n CornMultFull(c, u4, d2);\n EdgeMult(c, u4, d2);\n t = d2;\n d2 = c;\n c = t;\n if (i1 % 4 == 3) {\n CornMultFull(t, lr2, d2);\n EdgeMult(t, lr2, d2);\n t = d2;\n d2 = c;\n c = t;\n }\n if (i1 % 8 == 7) {\n CornMultFull(t, f2, d2);\n EdgeMult(t, f2, d2);\n t = d2;\n d2 = c;\n c = t;\n }\n }\n for (i22 = 0; i22 < 16; i22++) {\n for (j0 = 0; j0 < 16; j0++) {\n CornMultFull(CubeSym[i22], CubeSym[j0], c);\n for (k = 0; k < 16; k++) {\n if (equals_7(CubeSym[k].ca, c.ca)) {\n SymMult[i22][j0] = k;\n SymMultInv[k][j0] = i22;\n break;\n }\n }\n }\n }\n for (j1 = 0; j1 < 18; j1++) {\n for (s = 0; s < 16; s++) {\n CornConjugate(moveCube[j1], SymMultInv[0][s], c);\n for (m = 0; m < 18; m++) {\n if (equals_7(moveCube[m].ca, c.ca)) {\n SymMove_0[s][j1] = m;\n SymMoveUD[s][($clinit_Util(), std2ud)[j1]] = std2ud[m];\n break;\n }\n }\n s % 2 == 0 && (Sym8Move[j1 << 3 | s >> 1] = SymMove_0[s][j1]);\n }\n }\n for (i2 = 0; i2 < 18; i2++) {\n moveCubeSym[i2] = $selfSymmetry(moveCube[i2]);\n j = i2;\n for (s = 0; s < 48; s++) {\n SymMove_0[s % 16][j] < i2 && (firstMoveSym[s] |= 1 << i2);\n s % 16 == 15 && (j = urfMove[2][j]);\n }\n }\n}\nfunction initSym2Raw(N_RAW, Sym2Raw, Raw2Sym, SymState, coord2) {\n $clinit_CubieCube();\n var c, count, d2, i2, idx, isEdge, s, symIdx, sym_inc;\n c = new CubieCube();\n d2 = new CubieCube();\n count = 0;\n idx = 0;\n sym_inc = coord2 >= 2 ? 1 : 2;\n isEdge = coord2 != 1;\n for (i2 = 0; i2 < N_RAW; i2++) {\n if (Raw2Sym[i2] != 0) {\n continue;\n }\n switch (coord2) {\n case 0:\n $setFlip(c, i2);\n break;\n case 1:\n $setTwist(c, i2);\n break;\n case 2:\n setNPerm(c.ea, i2, 8, true);\n }\n for (s = 0; s < 16; s += sym_inc) {\n isEdge ? EdgeConjugate(c, s, d2) : CornConjugate(c, s, d2);\n switch (coord2) {\n case 0:\n idx = $getFlip(d2);\n break;\n case 1:\n idx = $getTwist(d2);\n break;\n case 2:\n idx = getNPerm(d2.ea, 8, true);\n }\n coord2 == 0 && (FlipS2RF[count << 3 | s >> 1] = idx & $intern_20);\n idx == i2 && (SymState[count] = (SymState[count] | 1 << ~~(s / sym_inc)) & $intern_20);\n symIdx = ~~((count << 4 | s) / sym_inc);\n Raw2Sym[idx] = symIdx & $intern_20;\n }\n Sym2Raw[count++] = i2 & $intern_20;\n }\n return count;\n}\nvar CubeSym;\nvar EPermR2S;\nvar EPermS2R;\nvar FlipR2S;\nvar FlipS2R;\nvar FlipS2RF;\nvar MPermInv;\nvar Perm2CombP;\nvar PermInvEdgeSym;\nvar Sym8Move;\nvar SymMove_0;\nvar SymMoveUD;\nvar SymMult;\nvar SymMultInv;\nvar SymStateFlip;\nvar SymStatePerm;\nvar SymStateTwist;\nvar TwistR2S;\nvar TwistS2R;\nvar firstMoveSym;\nvar moveCube;\nvar moveCubeSym;\nvar urf1;\nvar urf2;\nvar urfMove;\nvar Lorg_cubing_min2phase_client_CubieCube_2_classLit = createForClass(\"org.cubing.min2phase.client\", \"CubieCube\", 7);\nfunction $initPhase2(this$static, p2corn, p2csym, p2edge, p2esym, p2mid, edgei, corni) {\n var depth2, i2, i0, prun, ret;\n prun = max_0(getPruning(($clinit_CoordCube(), EPermCCombPPrun), (edgei >> 4) * 140 + CCombPConj[($clinit_CubieCube(), Perm2CombP)[corni >> 4] & 255][SymMultInv[edgei & 15][corni & 15]]), max_0(getPruning(EPermCCombPPrun, p2edge * 140 + CCombPConj[Perm2CombP[p2corn] & 255][SymMultInv[p2esym][p2csym]]), getPruning(MCPermPrun, p2corn * 24 + MPermConj[p2mid][p2csym])));\n if (prun > this$static.maxDep2) {\n return prun - this$static.maxDep2;\n }\n for (depth2 = this$static.maxDep2; depth2 >= prun; depth2--) {\n ret = $phase2(this$static, p2edge, p2esym, p2corn, p2csym, p2mid, depth2, this$static.depth1, 10);\n if (ret < 0) {\n break;\n }\n depth2 -= ret;\n this$static.solLen = 0;\n this$static.solution = new Util$Solution();\n $setArgs(this$static.solution, this$static.verbose, this$static.urfIdx, this$static.depth1);\n for (i0 = 0; i0 < this$static.depth1 + depth2; i0++) {\n $appendSolMove(this$static.solution, this$static.move[i0]);\n }\n for (i2 = this$static.preMoveLen - 1; i2 >= 0; i2--) {\n $appendSolMove(this$static.solution, this$static.preMoves[i2]);\n }\n this$static.solLen = this$static.solution.length_0;\n }\n if (depth2 != this$static.maxDep2) {\n this$static.maxDep2 = min_0(MAX_DEPTH2, this$static.solLen - this$static.length1 - 1);\n return gte(this$static.probe, this$static.probeMin) ? 0 : 1;\n }\n return 1;\n}\nfunction $initPhase2Pre(this$static) {\n var corni, edgei, i2, lastMove, lastPre, m, p2corn, p2csym, p2edge, p2esym, p2mid, p2switch, p2switchMask, p2switchMax, ret;\n this$static.isRec = false;\n if (gte(this$static.probe, !this$static.solution ? this$static.probeMax : this$static.probeMin)) {\n return 0;\n }\n this$static.probe = add_1(this$static.probe, { l: 1, m: 0, h: 0 });\n for (i2 = this$static.valid1; i2 < this$static.depth1; i2++) {\n CornMult(this$static.phase1Cubie[i2], ($clinit_CubieCube(), moveCube)[this$static.move[i2]], this$static.phase1Cubie[i2 + 1]);\n EdgeMult(this$static.phase1Cubie[i2], moveCube[this$static.move[i2]], this$static.phase1Cubie[i2 + 1]);\n }\n this$static.valid1 = this$static.depth1;\n p2corn = $getCPermSym(this$static.phase1Cubie[this$static.depth1]);\n p2csym = p2corn & 15;\n p2corn >>= 4;\n p2edge = $getEPermSym(this$static.phase1Cubie[this$static.depth1]);\n p2esym = p2edge & 15;\n p2edge >>= 4;\n p2mid = getNPerm(this$static.phase1Cubie[this$static.depth1].ea, 12, true) % 24;\n edgei = getPermSymInv(p2edge, p2esym, false);\n corni = getPermSymInv(p2corn, p2csym, true);\n lastMove = this$static.depth1 == 0 ? -1 : this$static.move[this$static.depth1 - 1];\n lastPre = this$static.preMoveLen == 0 ? -1 : this$static.preMoves[this$static.preMoveLen - 1];\n ret = 0;\n p2switchMax = (this$static.preMoveLen == 0 ? 1 : 2) * (this$static.depth1 == 0 ? 1 : 2);\n for (p2switch = 0, p2switchMask = (1 << p2switchMax) - 1; p2switch < p2switchMax; p2switch++) {\n if ((p2switchMask >> p2switch & 1) != 0) {\n p2switchMask &= ~(1 << p2switch);\n ret = $initPhase2(this$static, p2corn, p2csym, p2edge, p2esym, p2mid, edgei, corni);\n if (ret == 0 || ret > 2) {\n break;\n } else\n ret == 2 && (p2switchMask &= 4 << p2switch);\n }\n if (p2switchMask == 0) {\n break;\n }\n if ((p2switch & 1) == 0 && this$static.depth1 > 0) {\n m = ($clinit_Util(), std2ud)[~~(lastMove / 3) * 3 + 1];\n this$static.move[this$static.depth1 - 1] = ud2std[m] * 2 - this$static.move[this$static.depth1 - 1];\n p2mid = ($clinit_CoordCube(), MPermMove)[p2mid][m];\n p2corn = CPermMove[p2corn][($clinit_CubieCube(), SymMoveUD)[p2csym][m]];\n p2csym = SymMult[p2corn & 15][p2csym];\n p2corn >>= 4;\n p2edge = EPermMove[p2edge][SymMoveUD[p2esym][m]];\n p2esym = SymMult[p2edge & 15][p2esym];\n p2edge >>= 4;\n corni = getPermSymInv(p2corn, p2csym, true);\n edgei = getPermSymInv(p2edge, p2esym, false);\n } else if (this$static.preMoveLen > 0) {\n m = ($clinit_Util(), std2ud)[~~(lastPre / 3) * 3 + 1];\n this$static.preMoves[this$static.preMoveLen - 1] = ud2std[m] * 2 - this$static.preMoves[this$static.preMoveLen - 1];\n p2mid = ($clinit_CubieCube(), MPermInv)[($clinit_CoordCube(), MPermMove)[MPermInv[p2mid]][m]];\n p2corn = CPermMove[corni >> 4][SymMoveUD[corni & 15][m]];\n corni = p2corn & -16 | SymMult[p2corn & 15][corni & 15];\n p2corn = getPermSymInv(corni >> 4, corni & 15, true);\n p2csym = p2corn & 15;\n p2corn >>= 4;\n p2edge = EPermMove[edgei >> 4][SymMoveUD[edgei & 15][m]];\n edgei = p2edge & -16 | SymMult[p2edge & 15][edgei & 15];\n p2edge = getPermSymInv(edgei >> 4, edgei & 15, false);\n p2esym = p2edge & 15;\n p2edge >>= 4;\n }\n }\n this$static.depth1 > 0 && (this$static.move[this$static.depth1 - 1] = lastMove);\n this$static.preMoveLen > 0 && (this$static.preMoves[this$static.preMoveLen - 1] = lastPre);\n return ret == 0 ? 0 : 2;\n}\nfunction $initSearch(this$static) {\n var i2;\n this$static.conjMask = 0;\n this$static.selfSym = $selfSymmetry(this$static.cc);\n this$static.conjMask |= neq(and(shr(this$static.selfSym, 16), { l: $intern_20, m: 0, h: 0 }), { l: 0, m: 0, h: 0 }) ? 18 : 0;\n this$static.conjMask |= neq(and(shr(this$static.selfSym, 32), { l: $intern_20, m: 0, h: 0 }), { l: 0, m: 0, h: 0 }) ? 36 : 0;\n this$static.conjMask |= neq(and(shr(this$static.selfSym, 48), { l: $intern_20, m: 0, h: 0 }), { l: 0, m: 0, h: 0 }) ? 56 : 0;\n this$static.selfSym = and(this$static.selfSym, {\n l: $intern_9,\n m: $intern_9,\n h: 15\n });\n this$static.maxPreMoves = this$static.conjMask > 7 ? 0 : 20;\n for (i2 = 0; i2 < 6; i2++) {\n $copy(this$static.urfCubieCube[i2], this$static.cc);\n $setWithPrun(this$static.urfCoordCube[i2], this$static.urfCubieCube[i2], 20);\n $URFConjugate(this$static.cc);\n i2 % 3 == 2 && $invCubieCube(this$static.cc);\n }\n}\nfunction $phase1(this$static, node, ssym, maxl, lm) {\n var axis_0, m, power, prun, ret, skipMoves;\n if (node.prun == 0 && maxl < 5) {\n if (this$static.allowShorter || maxl == 0) {\n this$static.depth1 -= maxl;\n ret = $initPhase2Pre(this$static);\n this$static.depth1 += maxl;\n return ret;\n } else {\n return 1;\n }\n }\n skipMoves = getSkipMoves(fromInt(ssym));\n for (axis_0 = 0; axis_0 < 18; axis_0 += 3) {\n if (axis_0 == lm || axis_0 == lm - 9) {\n continue;\n }\n for (power = 0; power < 3; power++) {\n m = axis_0 + power;\n if (this$static.isRec && m != this$static.move[this$static.depth1 - maxl] || skipMoves != 0 && (skipMoves & 1 << m) != 0) {\n continue;\n }\n prun = $doMovePrun(this$static.nodeUD[maxl], node, m);\n if (prun > maxl) {\n break;\n } else if (prun == maxl) {\n continue;\n }\n prun = $doMovePrunConj(this$static.nodeUD[maxl], node, m);\n if (prun > maxl) {\n break;\n } else if (prun == maxl) {\n continue;\n }\n this$static.move[this$static.depth1 - maxl] = m;\n this$static.valid1 = min_0(this$static.valid1, this$static.depth1 - maxl);\n ret = $phase1(this$static, this$static.nodeUD[maxl], ssym & toInt(($clinit_CubieCube(), moveCubeSym)[m]), maxl - 1, axis_0);\n if (ret == 0) {\n return 0;\n } else if (ret >= 2) {\n break;\n }\n }\n }\n return 1;\n}\nfunction $phase1PreMoves(this$static, maxl, lm, cc, ssym) {\n var m, ret, skipMoves;\n this$static.preMoveLen = this$static.maxPreMoves - maxl;\n if (this$static.isRec ? this$static.depth1 == this$static.length1 - this$static.preMoveLen : this$static.preMoveLen == 0 || (225207 >> lm & 1) == 0) {\n this$static.depth1 = this$static.length1 - this$static.preMoveLen;\n this$static.phase1Cubie[0] = cc;\n this$static.allowShorter = this$static.depth1 == MIN_P1LENGTH_PRE && this$static.preMoveLen != 0;\n if ($setWithPrun(this$static.nodeUD[this$static.depth1 + 1], cc, this$static.depth1) && $phase1(this$static, this$static.nodeUD[this$static.depth1 + 1], ssym, this$static.depth1, -1) == 0) {\n return 0;\n }\n }\n if (maxl == 0 || this$static.preMoveLen + MIN_P1LENGTH_PRE >= this$static.length1) {\n return 1;\n }\n skipMoves = getSkipMoves(fromInt(ssym));\n (maxl == 1 || this$static.preMoveLen + 1 + MIN_P1LENGTH_PRE >= this$static.length1) && (skipMoves |= 225207);\n lm = ~~(lm / 3) * 3;\n for (m = 0; m < 18; m++) {\n if (m == lm || m == lm - 9 || m == lm + 9) {\n m += 2;\n continue;\n }\n if (this$static.isRec && m != this$static.preMoves[this$static.maxPreMoves - maxl] || (skipMoves & 1 << m) != 0) {\n continue;\n }\n CornMult(($clinit_CubieCube(), moveCube)[m], cc, this$static.preMoveCubes[maxl]);\n EdgeMult(moveCube[m], cc, this$static.preMoveCubes[maxl]);\n this$static.preMoves[this$static.maxPreMoves - maxl] = m;\n ret = $phase1PreMoves(this$static, maxl - 1, m, this$static.preMoveCubes[maxl], ssym & toInt(moveCubeSym[m]));\n if (ret == 0) {\n return 0;\n }\n }\n return 1;\n}\nfunction $phase2(this$static, edge, esym, corn, csym, mid, maxl, depth, lm) {\n var corni, cornx, csymx, edgei, edgex, esymx, m, midx, moveMask, prun, ret;\n if (edge == 0 && corn == 0 && mid == 0) {\n return maxl;\n }\n moveMask = ($clinit_Util(), ckmv2bit)[lm];\n for (m = 0; m < 10; m++) {\n if ((moveMask >> m & 1) != 0) {\n m += 66 >> m & 3;\n continue;\n }\n midx = ($clinit_CoordCube(), MPermMove)[mid][m];\n cornx = CPermMove[corn][($clinit_CubieCube(), SymMoveUD)[csym][m]];\n csymx = SymMult[cornx & 15][csym];\n cornx >>= 4;\n edgex = EPermMove[edge][SymMoveUD[esym][m]];\n esymx = SymMult[edgex & 15][esym];\n edgex >>= 4;\n edgei = getPermSymInv(edgex, esymx, false);\n corni = getPermSymInv(cornx, csymx, true);\n prun = getPruning(EPermCCombPPrun, (edgei >> 4) * 140 + CCombPConj[Perm2CombP[corni >> 4] & 255][SymMultInv[edgei & 15][corni & 15]]);\n if (prun > maxl + 1) {\n return maxl - prun + 1;\n } else if (prun >= maxl) {\n m += 66 >> m & 3 & maxl - prun;\n continue;\n }\n prun = max_0(getPruning(MCPermPrun, cornx * 24 + MPermConj[midx][csymx]), getPruning(EPermCCombPPrun, edgex * 140 + CCombPConj[Perm2CombP[cornx] & 255][SymMultInv[esymx][csymx]]));\n if (prun >= maxl) {\n m += 66 >> m & 3 & maxl - prun;\n continue;\n }\n ret = $phase2(this$static, edgex, esymx, cornx, csymx, midx, maxl - 1, depth + 1, m);\n if (ret >= 0) {\n this$static.move[depth] = ud2std[m];\n return ret;\n }\n if (ret < -2) {\n break;\n }\n ret < -1 && (m += 66 >> m & 3);\n }\n return -1;\n}\nfunction $search(this$static) {\n for (this$static.length1 = this$static.isRec ? this$static.length1 : 0; this$static.length1 < this$static.solLen; this$static.length1++) {\n this$static.maxDep2 = min_0(MAX_DEPTH2, this$static.solLen - this$static.length1 - 1);\n for (this$static.urfIdx = this$static.isRec ? this$static.urfIdx : 0; this$static.urfIdx < 6; this$static.urfIdx++) {\n if ((this$static.conjMask & 1 << this$static.urfIdx) != 0) {\n continue;\n }\n if ($phase1PreMoves(this$static, this$static.maxPreMoves, -30, this$static.urfCubieCube[this$static.urfIdx], toInt(and(this$static.selfSym, { l: $intern_20, m: 0, h: 0 }))) == 0) {\n return !this$static.solution ? \"Error 8\" : $toString_2(this$static.solution);\n }\n }\n }\n return !this$static.solution ? \"Error 7\" : $toString_2(this$static.solution);\n}\nfunction $solution(this$static, facelets) {\n var check;\n check = $verify_0(this$static, facelets);\n if (check != 0) {\n return \"Error \" + (check < 0 ? -check : check);\n }\n this$static.solLen = 22;\n this$static.probe = { l: 0, m: 0, h: 0 };\n this$static.probeMax = { l: 3531008, m: 23, h: 0 };\n this$static.probeMin = { l: 0, m: 0, h: 0 };\n this$static.verbose = 0;\n this$static.solution = null;\n this$static.isRec = false;\n init_0(false);\n $initSearch(this$static);\n return $search(this$static);\n}\nfunction $verify_0(this$static, facelets) {\n var center, count, f, i2;\n count = 0;\n f = initDim(B_classLit, $intern_30, 0, 54, 7, 1);\n try {\n center = _String(initValues(getClassLiteralForArray(C_classLit, 1), $intern_26, 0, 7, [\n facelets.charCodeAt(4),\n facelets.charCodeAt(13),\n facelets.charCodeAt(22),\n facelets.charCodeAt(31),\n facelets.charCodeAt(40),\n facelets.charCodeAt(49)\n ]));\n for (i2 = 0; i2 < 54; i2++) {\n f[i2] = $indexOf_0(center, fromCodePoint(facelets.charCodeAt(i2))) << 24 >> 24;\n if (f[i2] == -1) {\n return -1;\n }\n count += 1 << (f[i2] << 2);\n }\n } catch ($e0) {\n $e0 = wrap2($e0);\n if (instanceOf($e0, 9)) {\n return -1;\n } else\n throw unwrap($e0);\n }\n if (count != 10066329) {\n return -1;\n }\n toCubieCube(f, this$static.cc);\n return $verify(this$static.cc);\n}\nfunction Search() {\n var i2, i0, i1;\n this.move = initDim(I_classLit, $intern_27, 0, 31, 7, 1);\n this.nodeUD = initDim(Lorg_cubing_min2phase_client_CoordCube_2_classLit, $intern_3, 31, 21, 0, 1);\n this.nodeRL = initDim(Lorg_cubing_min2phase_client_CoordCube_2_classLit, $intern_3, 31, 21, 0, 1);\n this.nodeFB = initDim(Lorg_cubing_min2phase_client_CoordCube_2_classLit, $intern_3, 31, 21, 0, 1);\n this.cc = new CubieCube();\n this.urfCubieCube = initDim(Lorg_cubing_min2phase_client_CubieCube_2_classLit, $intern_3, 7, 6, 0, 1);\n this.urfCoordCube = initDim(Lorg_cubing_min2phase_client_CoordCube_2_classLit, $intern_3, 31, 6, 0, 1);\n this.phase1Cubie = initDim(Lorg_cubing_min2phase_client_CubieCube_2_classLit, $intern_3, 7, 21, 0, 1);\n this.preMoveCubes = initDim(Lorg_cubing_min2phase_client_CubieCube_2_classLit, $intern_3, 7, 21, 0, 1);\n this.preMoves = initDim(I_classLit, $intern_27, 0, 20, 7, 1);\n for (i0 = 0; i0 < 21; i0++) {\n this.nodeUD[i0] = new CoordCube();\n this.nodeRL[i0] = new CoordCube();\n this.nodeFB[i0] = new CoordCube();\n this.phase1Cubie[i0] = new CubieCube();\n }\n for (i1 = 0; i1 < 6; i1++) {\n this.urfCubieCube[i1] = new CubieCube();\n this.urfCoordCube[i1] = new CoordCube();\n }\n for (i2 = 0; i2 < 20; i2++) {\n this.preMoveCubes[i2 + 1] = new CubieCube();\n }\n}\ndefineClass(72, 1, {}, Search);\n_.allowShorter = false;\n_.conjMask = 0;\n_.depth1 = 0;\n_.isRec = false;\n_.length1 = 0;\n_.maxDep2 = 0;\n_.maxPreMoves = 0;\n_.preMoveLen = 0;\n_.probe = { l: 0, m: 0, h: 0 };\n_.probeMax = { l: 0, m: 0, h: 0 };\n_.probeMin = { l: 0, m: 0, h: 0 };\n_.selfSym = { l: 0, m: 0, h: 0 };\n_.solLen = 0;\n_.urfIdx = 0;\n_.valid1 = 0;\n_.verbose = 0;\nvar MAX_DEPTH2 = 12;\nvar MIN_P1LENGTH_PRE = 7;\nvar Lorg_cubing_min2phase_client_Search_2_classLit = createForClass(\"org.cubing.min2phase.client\", \"Search\", 72);\nfunction $clinit_Util() {\n $clinit_Util = emptyMethod;\n var i2, i0, i1, ix, j, jx;\n cornerFacelet = initValues(getClassLiteralForArray(B_classLit, 2), $intern_3, 10, 0, [\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [8, 9, 20]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [6, 18, 38]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [0, 36, 47]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [2, 45, 11]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [29, 26, 15]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [27, 44, 24]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [33, 53, 42]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [35, 17, 51])\n ]);\n edgeFacelet = initValues(getClassLiteralForArray(B_classLit, 2), $intern_3, 10, 0, [\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [5, 10]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [7, 19]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [3, 37]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [1, 46]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [32, 16]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [28, 25]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [30, 43]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [34, 52]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [23, 12]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [21, 41]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [50, 39]),\n initValues(getClassLiteralForArray(B_classLit, 1), $intern_30, 0, 7, [48, 14])\n ]);\n Cnk = initDims(I_classLit, [$intern_3, $intern_27], [17, 0], 7, [13, 13], 2);\n move2str = initValues(getClassLiteralForArray(Ljava_lang_String_2_classLit, 1), $intern_3, 2, 4, [\n \"U \",\n \"U2\",\n \"U'\",\n \"R \",\n \"R2\",\n \"R'\",\n \"F \",\n \"F2\",\n \"F'\",\n \"D \",\n \"D2\",\n \"D'\",\n \"L \",\n \"L2\",\n \"L'\",\n \"B \",\n \"B2\",\n \"B'\"\n ]);\n ud2std = initValues(getClassLiteralForArray(I_classLit, 1), $intern_27, 0, 7, [0, 1, 2, 4, 7, 9, 10, 11, 13, 16, 3, 5, 6, 8, 12, 14, 15, 17]);\n std2ud = initDim(I_classLit, $intern_27, 0, 18, 7, 1);\n ckmv2bit = initDim(I_classLit, $intern_27, 0, 11, 7, 1);\n for (i0 = 0; i0 < 18; i0++) {\n std2ud[ud2std[i0]] = i0;\n }\n for (i1 = 0; i1 < 10; i1++) {\n ix = ~~(ud2std[i1] / 3);\n ckmv2bit[i1] = 0;\n for (j = 0; j < 10; j++) {\n jx = ~~(ud2std[j] / 3);\n ckmv2bit[i1] |= (ix == jx || ix % 3 == jx % 3 && ix >= jx ? 1 : 0) << j;\n }\n }\n ckmv2bit[10] = 0;\n for (i2 = 0; i2 < 13; i2++) {\n Cnk[i2][0] = Cnk[i2][i2] = 1;\n for (j = 1; j < i2; j++) {\n Cnk[i2][j] = Cnk[i2 - 1][j - 1] + Cnk[i2 - 1][j];\n }\n }\n}\nfunction getComb(arr, mask, isEdge) {\n $clinit_Util();\n var end, i2, idxC, perm, r2;\n end = arr.length - 1;\n idxC = 0;\n r2 = 4;\n for (i2 = end; i2 >= 0; i2--) {\n perm = getVal(arr[i2], isEdge);\n (perm & 12) == mask && (idxC += Cnk[i2][r2--]);\n }\n return idxC;\n}\nfunction getNParity(idx, n) {\n $clinit_Util();\n var i2, p;\n p = 0;\n for (i2 = n - 2; i2 >= 0; i2--) {\n p ^= idx % (n - i2);\n idx = ~~(idx / (n - i2));\n }\n return p & 1;\n}\nfunction getNPerm(arr, n, isEdge) {\n $clinit_Util();\n var i2, idx, v, val;\n idx = 0;\n val = { l: 1323536, m: 2777561, h: 1043915 };\n for (i2 = 0; i2 < n - 1; i2++) {\n v = getVal(arr[i2], isEdge) << 2;\n idx = (n - i2) * idx + toInt(and(shr(val, v), { l: 15, m: 0, h: 0 }));\n val = sub_0(val, shl({ l: 1118480, m: 279620, h: 69905 }, v));\n }\n return idx;\n}\nfunction getVal(val0, isEdge) {\n return isEdge ? val0 >> 1 : val0 & 7;\n}\nfunction setComb(arr, idxC, mask, isEdge) {\n $clinit_Util();\n var end, fill, i2, r2;\n end = arr.length - 1;\n r2 = 4;\n fill = end;\n for (i2 = end; i2 >= 0; i2--) {\n if (idxC >= Cnk[i2][r2]) {\n idxC -= Cnk[i2][r2--];\n arr[i2] = setVal(arr[i2], r2 | mask, isEdge);\n } else {\n (fill & 12) == mask && (fill -= 4);\n arr[i2] = setVal(arr[i2], fill--, isEdge);\n }\n }\n}\nfunction setNPerm(arr, idx, n, isEdge) {\n $clinit_Util();\n var extract, i2, m, p, v, val;\n val = { l: 1323536, m: 2777561, h: 1043915 };\n extract = { l: 0, m: 0, h: 0 };\n for (p = 2; p <= n; p++) {\n extract = or(shl(extract, 4), fromInt(idx % p));\n idx = ~~(idx / p);\n }\n for (i2 = 0; i2 < n - 1; i2++) {\n v = (toInt(extract) & 15) << 2;\n extract = shr(extract, 4);\n arr[i2] = setVal(arr[i2], toInt(and(shr(val, v), { l: 15, m: 0, h: 0 })), isEdge);\n m = sub_0(shl({ l: 1, m: 0, h: 0 }, v), { l: 1, m: 0, h: 0 });\n val = or(and(val, m), and(shr(val, 4), {\n l: ~m.l & $intern_9,\n m: ~m.m & $intern_9,\n h: ~m.h & $intern_10\n }));\n }\n arr[n - 1] = setVal(arr[n - 1], toInt(and(val, { l: 15, m: 0, h: 0 })), isEdge);\n}\nfunction setVal(val0, val, isEdge) {\n return (isEdge ? val << 1 | val0 & 1 : val | val0 & -8) << 24 >> 24;\n}\nfunction toCubieCube(f, ccRet) {\n $clinit_Util();\n var col1, col2, i2, i0, i1, i22, j, ori;\n for (i0 = 0; i0 < 8; i0++) {\n ccRet.ca[i0] = 0;\n }\n for (i1 = 0; i1 < 12; i1++) {\n ccRet.ea[i1] = 0;\n }\n for (i22 = 0; i22 < 8; i22++) {\n for (ori = 0; ori < 3; ori++) {\n if (f[cornerFacelet[i22][ori]] == 0 || f[cornerFacelet[i22][ori]] == 3)\n break;\n }\n col1 = f[cornerFacelet[i22][(ori + 1) % 3]];\n col2 = f[cornerFacelet[i22][(ori + 2) % 3]];\n for (j = 0; j < 8; j++) {\n if (col1 == ~~(cornerFacelet[j][1] / 9) && col2 == ~~(cornerFacelet[j][2] / 9)) {\n ccRet.ca[i22] = narrow_byte(ori % 3 << 3 | j);\n break;\n }\n }\n }\n for (i2 = 0; i2 < 12; i2++) {\n for (j = 0; j < 12; j++) {\n if (f[edgeFacelet[i2][0]] == ~~(edgeFacelet[j][0] / 9) && f[edgeFacelet[i2][1]] == ~~(edgeFacelet[j][1] / 9)) {\n ccRet.ea[i2] = narrow_byte(j << 1);\n break;\n }\n if (f[edgeFacelet[i2][0]] == ~~(edgeFacelet[j][1] / 9) && f[edgeFacelet[i2][1]] == ~~(edgeFacelet[j][0] / 9)) {\n ccRet.ea[i2] = narrow_byte(j << 1 | 1);\n break;\n }\n }\n }\n}\nvar Cnk;\nvar ckmv2bit;\nvar cornerFacelet;\nvar edgeFacelet;\nvar move2str;\nvar std2ud;\nvar ud2std;\nfunction $appendSolMove(this$static, curMove) {\n var axisCur, axisLast, pow_0;\n if (this$static.length_0 == 0) {\n this$static.moves[this$static.length_0++] = curMove;\n return;\n }\n axisCur = ~~(curMove / 3);\n axisLast = ~~(this$static.moves[this$static.length_0 - 1] / 3);\n if (axisCur == axisLast) {\n pow_0 = (curMove % 3 + this$static.moves[this$static.length_0 - 1] % 3 + 1) % 4;\n pow_0 == 3 ? --this$static.length_0 : this$static.moves[this$static.length_0 - 1] = axisCur * 3 + pow_0;\n return;\n }\n if (this$static.length_0 > 1 && axisCur % 3 == axisLast % 3 && axisCur == ~~(this$static.moves[this$static.length_0 - 2] / 3)) {\n pow_0 = (curMove % 3 + this$static.moves[this$static.length_0 - 2] % 3 + 1) % 4;\n if (pow_0 == 3) {\n this$static.moves[this$static.length_0 - 2] = this$static.moves[this$static.length_0 - 1];\n --this$static.length_0;\n } else {\n this$static.moves[this$static.length_0 - 2] = axisCur * 3 + pow_0;\n }\n return;\n }\n this$static.moves[this$static.length_0++] = curMove;\n}\nfunction $setArgs(this$static, verbose, urfIdx, depth1) {\n this$static.verbose = verbose;\n this$static.urfIdx = urfIdx;\n this$static.depth1 = depth1;\n}\nfunction $toString_2(this$static) {\n var s, sb, urf;\n sb = new StringBuffer();\n urf = (this$static.verbose & 2) != 0 ? (this$static.urfIdx + 3) % 6 : this$static.urfIdx;\n if (urf < 3) {\n for (s = 0; s < this$static.length_0; s++) {\n (this$static.verbose & 1) != 0 && s == this$static.depth1 && (sb.string += \". \", sb);\n $append($append_1(sb, ($clinit_Util(), move2str)[($clinit_CubieCube(), urfMove)[urf][this$static.moves[s]]]));\n }\n } else {\n for (s = this$static.length_0 - 1; s >= 0; s--) {\n $append($append_1(sb, ($clinit_Util(), move2str)[($clinit_CubieCube(), urfMove)[urf][this$static.moves[s]]]));\n (this$static.verbose & 1) != 0 && s == this$static.depth1 && (sb.string += \". \", sb);\n }\n }\n (this$static.verbose & 4) != 0 && $append_1($append_0((sb.string += \"(\", sb), this$static.length_0), \"f)\");\n return sb.string;\n}\nfunction Util$Solution() {\n this.moves = initDim(I_classLit, $intern_27, 0, 31, 7, 1);\n}\ndefineClass(150, 1, {}, Util$Solution);\n_.toString$ = function toString_17() {\n return $toString_2(this);\n};\n_.depth1 = 0;\n_.length_0 = 0;\n_.urfIdx = 0;\n_.verbose = 0;\nvar Lorg_cubing_min2phase_client_Util$Solution_2_classLit = createForClass(\"org.cubing.min2phase.client\", \"Util/Solution\", 150);\nvar I_classLit = createForPrimitive(\"int\", \"I\");\nvar Lcom_google_gwt_lang_CollapsedPropertyHolder_2_classLit = createForClass(\"com.google.gwt.lang\", \"CollapsedPropertyHolder\", 252);\nvar Lcom_google_gwt_lang_JavaClassHierarchySetupUtil_2_classLit = createForClass(\"com.google.gwt.lang\", \"JavaClassHierarchySetupUtil\", 254);\nvar Lcom_google_gwt_lang_LongLibBase$LongEmul_2_classLit = createForClass(\"com.google.gwt.lang\", \"LongLibBase/LongEmul\", null);\nvar Lcom_google_gwt_lang_ModuleUtils_2_classLit = createForClass(\"com.google.gwt.lang\", \"ModuleUtils\", 257);\nvar B_classLit = createForPrimitive(\"byte\", \"B\");\nvar J_classLit = createForPrimitive(\"long\", \"J\");\nvar C_classLit = createForPrimitive(\"char\", \"C\");\nvar Lcom_google_gwt_user_client_rpc_XsrfToken_2_classLit = createForClass(\"com.google.gwt.user.client.rpc\", \"XsrfToken\", null);\nvar Ljava_util_Map$Entry_2_classLit = createForInterface(\"java.util\", \"Map/Entry\");\nvar initialize = function() {\n init_0(false);\n};\nvar solveState = function(s) {\n return $solution(new Search(), s);\n};\n\n// src/cubing/search/inside/solve/puzzles/3x3x3/convert.ts\nvar reidEdgeOrder = \"UF UR UB UL DF DR DB DL FR FL BR BL\".split(\" \");\nvar reidCornerOrder = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\nvar centerOrder = \"U L F R B D\".split(\" \");\nvar map = [\n [1, 2, 0],\n [0, 2, 0],\n [1, 1, 0],\n [0, 3, 0],\n [2, 0, 0],\n [0, 1, 0],\n [1, 3, 0],\n [0, 0, 0],\n [1, 0, 0],\n [1, 0, 2],\n [0, 1, 1],\n [1, 1, 1],\n [0, 8, 1],\n [2, 3, 0],\n [0, 10, 1],\n [1, 4, 1],\n [0, 5, 1],\n [1, 7, 2],\n [1, 3, 2],\n [0, 0, 1],\n [1, 0, 1],\n [0, 9, 0],\n [2, 2, 0],\n [0, 8, 0],\n [1, 5, 1],\n [0, 4, 1],\n [1, 4, 2],\n [1, 5, 0],\n [0, 4, 0],\n [1, 4, 0],\n [0, 7, 0],\n [2, 5, 0],\n [0, 5, 0],\n [1, 6, 0],\n [0, 6, 0],\n [1, 7, 0],\n [1, 2, 2],\n [0, 3, 1],\n [1, 3, 1],\n [0, 11, 1],\n [2, 1, 0],\n [0, 9, 1],\n [1, 6, 1],\n [0, 7, 1],\n [1, 5, 2],\n [1, 1, 2],\n [0, 2, 1],\n [1, 2, 1],\n [0, 10, 0],\n [2, 4, 0],\n [0, 11, 0],\n [1, 7, 1],\n [0, 6, 1],\n [1, 6, 2]\n];\nfunction rotateLeft(s, i2) {\n return s.slice(i2) + s.slice(0, i2);\n}\nfunction toReid333Struct(state) {\n const output = [[], []];\n for (let i2 = 0; i2 < 6; i2++) {\n if (state[\"CENTERS\"].permutation[i2] !== i2) {\n throw new Error(\"non-oriented puzzles are not supported\");\n }\n }\n for (let i2 = 0; i2 < 12; i2++) {\n output[0].push(rotateLeft(reidEdgeOrder[state[\"EDGES\"].permutation[i2]], state[\"EDGES\"].orientation[i2]));\n }\n for (let i2 = 0; i2 < 8; i2++) {\n output[1].push(rotateLeft(reidCornerOrder[state[\"CORNERS\"].permutation[i2]], state[\"CORNERS\"].orientation[i2]));\n }\n output.push(centerOrder);\n return output;\n}\nfunction toMin2PhaseState(state) {\n const reid = toReid333Struct(state);\n return map.map(([orbit, perm, ori]) => reid[orbit][perm][ori]).join(\"\");\n}\n\n// src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts\ninit_alg();\ninit_kpuzzle2();\nfunction isEquivalentTranformationIgnoringCENTERS(def, t1, t2) {\n for (const orbitName in def.orbits) {\n if (!areOrbitTransformationsEquivalent(def, orbitName, t1, t2, {\n ignoreOrientation: orbitName === \"CENTERS\"\n })) {\n return false;\n }\n }\n return true;\n}\nfunction passesFilter(def, state) {\n const kpuzzle = new KPuzzle(def);\n if (isEquivalentTranformationIgnoringCENTERS(def, kpuzzle.state, state)) {\n return false;\n }\n for (const face of \"ULFRBD\") {\n for (let amount = 1; amount < 4; amount++) {\n kpuzzle.reset();\n kpuzzle.applyMove(new Move(face, amount));\n if (isEquivalentTranformationIgnoringCENTERS(def, kpuzzle.state, state)) {\n return false;\n }\n }\n }\n return true;\n}\n\n// src/cubing/search/inside/solve/puzzles/3x3x3/legacy-sgs.ts\nvar sgs3x3x3 = [\n [\n \"R U'\",\n \"R2 B\",\n \"D2 B2\",\n \"D' L B'\",\n \"R' U'\",\n \"B\",\n \"D B2\",\n \"R' B\",\n \"L' U\",\n \"L2 B'\",\n \"B2\",\n \"D L B'\",\n \"L U\",\n \"B'\",\n \"U'\",\n \"R B\",\n \"D' B2\",\n \"L B'\",\n \"U2\",\n \"U L' B'\",\n \"\",\n \"U' L' B'\",\n \"U\",\n \"L' B'\"\n ],\n [\n \"F2 L2\",\n \"F' L'\",\n \"R' F L2\",\n \"D' L2\",\n \"F L2\",\n \"F2 L'\",\n \"R' F' L'\",\n \"R2 F L2\",\n \"R2 F2 L'\",\n \"L2\",\n \"F L'\",\n \"D' L\",\n \"D2 L2\",\n \"R2 F' L'\",\n \"D L\",\n \"\",\n \"L2 F L'\",\n \"L F' L2\",\n \"L F L'\",\n \"F' L2\",\n \"L'\",\n \"D L2\",\n \"D F L'\",\n \"L\"\n ],\n [\n \"R B U2 B'\",\n \"R2 B U' B'\",\n \"F2 B U B'\",\n \"F B2 L' B2\",\n \"B2 L B2\",\n \"B U' B'\",\n \"R2 B U2 B'\",\n \"R' B U' B'\",\n \"B2 L' B2\",\n \"F B U B'\",\n \"B2 U' B2\",\n \"B' L B\",\n \"L F' B D' B'\",\n \"B' U' B2 D B'\",\n \"B U2 B'\",\n \"R B U' B'\",\n \"B2 L2 B2\",\n \"D' B' L B\",\n \"B U B'\",\n \"F' B2 L' B2\",\n \"\",\n \"B2 L' B' U' B'\"\n ],\n [\n \"U F2 L2 U'\",\n \"F' U L' U'\",\n \"F2 U L' U'\",\n \"U F L2 U'\",\n \"U2 B2 U2\",\n \"R' U' B U\",\n \"D2 U L U'\",\n \"D U2 B' U2\",\n \"U L2 U'\",\n \"F U L' U'\",\n \"D U L U'\",\n \"U2 B' U2\",\n \"\",\n \"U2 B' U' L' U'\",\n \"U2 L' U2\",\n \"U' B U\",\n \"U L U'\",\n \"D' U2 B' U2\",\n \"U L' U'\",\n \"U2 B U2\"\n ],\n [\n \"R' D' F2\",\n \"F'\",\n \"F2\",\n \"D R F'\",\n \"R D' F2\",\n \"R2 F'\",\n \"D' F2\",\n \"R F'\",\n \"F2 R' D' F2\",\n \"F\",\n \"D2 F2\",\n \"D' R F'\",\n \"R2 D' F2\",\n \"R' F'\",\n \"D F2\",\n \"D2 R F'\",\n \"\",\n \"F R' D' F2\"\n ],\n [\n \"R' D2 F' D F\",\n \"R F2 R2 F2\",\n \"R2 F' D2 F\",\n \"F' R2 D2 F\",\n \"L D' L'\",\n \"D F' D2 F\",\n \"F2 R2 F2\",\n \"R F' D2 F\",\n \"F' R2 D' F\",\n \"F' R' D2 F\",\n \"F2 R' F2\",\n \"L D L'\",\n \"F' R D' F\",\n \"F2 R F2\",\n \"F' D2 F\",\n \"\",\n \"L D2 R D' L'\",\n \"F' D2 F' R F2\",\n \"D2 R2 F2 R2 F2\",\n \"D F' D' F\",\n \"F' D F\"\n ],\n [\n \"U F2 U'\",\n \"R U F' U'\",\n \"D R U F2 U'\",\n \"U F U'\",\n \"R2 U F2 U'\",\n \"R' U F' U'\",\n \"R U F2 U'\",\n \"R2 U F' U'\",\n \"\",\n \"U L D L' F U'\",\n \"F2 D' R D F2\",\n \"D2 U F U'\",\n \"R' U F2 U'\",\n \"U F' U'\",\n \"F2 D2 R D2 F2\",\n \"D U F U'\"\n ],\n [\n \"R2\",\n \"R' B' D B\",\n \"D R'\",\n \"F' R2 F\",\n \"\",\n \"R B' D B\",\n \"R'\",\n \"B' D B\",\n \"D' R'\",\n \"D2 F' R2 F\",\n \"R\",\n \"R2 B' D B\",\n \"D2 R'\",\n \"B' D' B\"\n ],\n [\n \"R2 D' R2\",\n \"F' R' F R\",\n \"R D' R2 D R'\",\n \"D2 R2 D2 R2\",\n \"R' D' F' R F\",\n \"U F D F' U'\",\n \"\",\n \"R2 D2 B R' B' R'\",\n \"R' F D' F2 R F\",\n \"R2 D R2\",\n \"F2 U F U' F\",\n \"R' D F' R F\",\n \"D R2 D2 R2\",\n \"U F D' F' U'\",\n \"D R' D2 F' R F\",\n \"R2 D2 R2\",\n \"U F D2 F' U'\",\n \"R' D2 F' R F\"\n ],\n [\n \"B R B'\",\n \"F D F' B R2 B'\",\n \"D B R2 B'\",\n \"D2 B R' B'\",\n \"B R2 B'\",\n \"D B R' B'\",\n \"D' B R2 B'\",\n \"B R' B'\",\n \"\",\n \"B R2 B' D B R' B'\",\n \"D2 B R2 B'\",\n \"D' B R' B'\"\n ],\n [\n \"\",\n \"R' D R F D2 F'\",\n \"R' D R\",\n \"D F D' F'\",\n \"R F' R' F\",\n \"F D' F'\",\n \"R' D' R\",\n \"F D2 F'\",\n \"R' D2 R\",\n \"F D F'\"\n ],\n [\n \"\",\n \"F2 D2 R F' R' D2 F' D2 F'\",\n \"F2 D2 F' D' F D' F' D2 F'\",\n \"F2 D F2 D F2 D2 F2\",\n \"D2 F L D2 L' D2 F'\",\n \"D F D2 L D2 L' F'\",\n \"R' D B' D2 B D' R\",\n \"R' D2 B' D2 B R\",\n \"F D2 F' D F D F'\",\n \"F D' L D2 L' D F'\",\n \"B D' F D B' D' F'\",\n \"F D2 L D2 L' F'\",\n \"F D' L D L' D F'\",\n \"F L D2 L' D2 F'\",\n \"R' B' D2 B D2 R\"\n ],\n [\n \"D'\",\n \"F L D L' D' F'\",\n \"D2\",\n \"L B D B' D' L'\",\n \"D\",\n \"B' L' D' L D B\",\n \"\",\n \"D F L D L' D' F'\"\n ],\n [\n \"F' D2 F D F' D F\",\n \"F' D' R' D R F\",\n \"F' R' D' R D F\",\n \"B D R D' R' B'\",\n \"\",\n \"D B' D' L' D L B\"\n ],\n [\n \"D F D F' D F D2 F'\",\n \"F' U2 B' R' B U2 F' L F' L' F'\",\n \"\",\n \"D2 L D L2 F L F2 D F\"\n ],\n [\n \"L B' L' F L B L' F'\",\n \"F2 U F' D2 F U' F' D2 F'\",\n \"D' F' D B D' F D B'\",\n \"F L2 F R2 F' L2 F R2 F2\",\n \"D B D' F' D B' D' F\",\n \"R F L F' R' F L' F'\",\n \"\",\n \"D2 B L' U2 L B' D2 B L' U2 L B'\",\n \"D2 F R' U2 R F' D2 F R' U2 R F'\",\n \"R F L' F' R' F L F'\",\n \"D F D' B' D F' D' B\",\n \"L2 F2 L' B2 L F2 L' B2 L'\"\n ],\n [\n \"L B R' B' L' B R B'\",\n \"R' B R F' R' B' R F\",\n \"L D2 L U L' D2 L U' L2\",\n \"\",\n \"D2 B' D2 F D' L2 F L2 F' D2 B D' F'\",\n \"D2 F' R' F R2 B' D2 B D2 R' F D2 F'\",\n \"L B L' F L B' L' F'\",\n \"F' D2 F' U' F D2 F' U F2\",\n \"D' B' D F D' B D F'\"\n ],\n [\"\", \"D2 F' L U2 L' F D2 F' L U2 L' F\", \"D2 B' R U2 R' B D2 B' R U2 R' B\"]\n];\n\n// src/cubing/search/inside/solve/puzzles/3x3x3/index.ts\nfunction random333State() {\n return __async(this, null, function* () {\n const def = yield puzzles[\"3x3x3\"].def();\n const kpuzzle = new KPuzzle(def);\n for (const piece of sgs3x3x3) {\n kpuzzle.applyAlg(Alg.fromString((yield randomChoiceFactory())(piece)));\n }\n if (!passesFilter(def, kpuzzle.state)) {\n return random333State();\n }\n return kpuzzle.state;\n });\n}\nfunction solve333(s) {\n return __async(this, null, function* () {\n mustBeInsideWorker();\n return Alg.fromString(solveState(toMin2PhaseState(s)));\n });\n}\nfunction random333Scramble() {\n return __async(this, null, function* () {\n return solve333(yield random333State());\n });\n}\nfunction initialize333() {\n return __async(this, null, function* () {\n initialize();\n });\n}\nvar randomSuffixes = [\n [null, \"Rw\", \"Rw2\", \"Rw'\", \"Fw\", \"Fw'\"],\n [null, \"Dw\", \"Dw2\", \"Dw'\"]\n];\nfunction random333OrientedScramble() {\n return __async(this, null, function* () {\n return addOrientationSuffix(yield random333Scramble(), randomSuffixes);\n });\n}\nvar extraBit = new Alg(\"R' U' F\");\nfunction random333FewestMovesScramble() {\n return __async(this, null, function* () {\n const algBuilder = new AlgBuilder();\n const unorientedScramble = yield random333Scramble();\n algBuilder.experimentalPushAlg(extraBit);\n algBuilder.experimentalPushAlg(unorientedScramble);\n algBuilder.experimentalPushAlg(extraBit);\n return algBuilder.toAlg();\n });\n}\n\n// src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.ts\ninit_alg();\n\n// src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.ts\nvar DEBUG2 = false;\nfunction isArray(a) {\n return Array.isArray(a);\n}\n\n// src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.ts\n\"use strict\";\nvar Cnk2 = [];\nvar fact = [1];\nfor (var i2 = 0; i2 < 32; ++i2) {\n Cnk2[i2] = [];\n for (j = 0; j < 32; ++j) {\n Cnk2[i2][j] = 0;\n }\n}\nvar j;\nfor (var i2 = 0; i2 < 32; ++i2) {\n Cnk2[i2][0] = Cnk2[i2][i2] = 1;\n fact[i2 + 1] = fact[i2] * (i2 + 1);\n for (j = 1; j < i2; ++j) {\n Cnk2[i2][j] = Cnk2[i2 - 1][j - 1] + Cnk2[i2 - 1][j];\n }\n}\nvar j;\nfunction circle(arr, ...moreArgs) {\n var length = arguments.length - 1, temp = arr[arguments[length]];\n for (var i2 = length; i2 > 1; i2--) {\n arr[arguments[i2]] = arr[arguments[i2 - 1]];\n }\n arr[arguments[1]] = temp;\n return circle;\n}\nfunction getPruning2(table, index) {\n return table[index >> 3] >> ((index & 7) << 2) & 15;\n}\nfunction get8Perm(arr, n, even) {\n n = n || 8;\n var idx = 0;\n var val = 1985229328;\n for (var i2 = 0; i2 < n - 1; ++i2) {\n var v = arr[i2] << 2;\n idx = (n - i2) * idx + (val >> v & 7);\n val -= 286331152 << v;\n }\n return even < 0 ? idx >> 1 : idx;\n}\nfunction set8Perm(arr, idx, n, even) {\n n = (n || 8) - 1;\n var val = 1985229328;\n var prt = 0;\n if (even < 0) {\n idx <<= 1;\n }\n for (var i2 = 0; i2 < n; ++i2) {\n var p = fact[n - i2];\n var v = ~~(idx / p);\n prt ^= v;\n idx %= p;\n v <<= 2;\n arr[i2] = val >> v & 7;\n var m = (1 << v) - 1;\n val = (val & m) + (val >> 4 & ~m);\n }\n if (even < 0 && (prt & 1) !== 0) {\n arr[n] = arr[n - 1];\n arr[n - 1] = val & 7;\n } else {\n arr[n] = val & 7;\n }\n return arr;\n}\nfunction getNOri(arr, n, evenbase) {\n var base = Math.abs(evenbase);\n var idx = evenbase < 0 ? 0 : arr[0] % base;\n for (var i2 = n - 1; i2 > 0; i2--) {\n idx = idx * base + arr[i2] % base;\n }\n return idx;\n}\nfunction setNOri(arr, idx, n, evenbase) {\n var base = Math.abs(evenbase);\n var parity = base * n;\n for (var i2 = 1; i2 < n; i2++) {\n arr[i2] = idx % base;\n parity -= arr[i2];\n idx = ~~(idx / base);\n }\n arr[0] = (evenbase < 0 ? parity : idx) % base;\n return arr;\n}\nfunction coord(type, length, evenbase) {\n this.length = length;\n this.evenbase = evenbase;\n this.get = type === \"p\" ? function(arr) {\n return get8Perm(arr, this.length, this.evenbase);\n } : function(arr) {\n return getNOri(arr, this.length, this.evenbase);\n };\n this.set = type === \"p\" ? function(arr, idx) {\n return set8Perm(arr, idx, this.length, this.evenbase);\n } : function(arr, idx) {\n return setNOri(arr, idx, this.length, this.evenbase);\n };\n}\nfunction createMove(moveTable, size, doMove, N_MOVES) {\n N_MOVES = N_MOVES || 6;\n if (isArray(doMove)) {\n var cord = new coord(doMove[1], doMove[2], doMove[3]);\n doMove = doMove[0];\n for (var j = 0; j < N_MOVES; j++) {\n moveTable[j] = [];\n for (var i2 = 0; i2 < size; i2++) {\n var arr = cord.set([], i2);\n doMove(arr, j);\n moveTable[j][i2] = cord.get(arr);\n }\n }\n } else {\n for (var j = 0; j < N_MOVES; j++) {\n moveTable[j] = [];\n for (var i2 = 0; i2 < size; i2++) {\n moveTable[j][i2] = doMove(i2, j);\n }\n }\n }\n}\nfunction CubieCube2() {\n this.ca = [0, 1, 2, 3, 4, 5, 6, 7];\n this.ea = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22];\n}\nCubieCube2.EdgeMult = function(a, b, prod) {\n for (var ed = 0; ed < 12; ed++) {\n prod.ea[ed] = a.ea[b.ea[ed] >> 1] ^ b.ea[ed] & 1;\n }\n};\nCubieCube2.CornMult = function(a, b, prod) {\n for (var corn = 0; corn < 8; corn++) {\n var ori = ((a.ca[b.ca[corn] & 7] >> 3) + (b.ca[corn] >> 3)) % 3;\n prod.ca[corn] = a.ca[b.ca[corn] & 7] & 7 | ori << 3;\n }\n};\nCubieCube2.CubeMult = function(a, b, prod) {\n CubieCube2.CornMult(a, b, prod);\n CubieCube2.EdgeMult(a, b, prod);\n};\nCubieCube2.prototype.init = function(ca, ea) {\n this.ca = ca.slice();\n this.ea = ea.slice();\n return this;\n};\nCubieCube2.prototype.isEqual = function(c) {\n for (var i2 = 0; i2 < 8; i2++) {\n if (this.ca[i2] !== c.ca[i2]) {\n return false;\n }\n }\n for (var i2 = 0; i2 < 12; i2++) {\n if (this.ea[i2] !== c.ea[i2]) {\n return false;\n }\n }\n return true;\n};\nvar cornerFacelet2 = [\n [8, 9, 20],\n [6, 18, 38],\n [0, 36, 47],\n [2, 45, 11],\n [29, 26, 15],\n [27, 44, 24],\n [33, 53, 42],\n [35, 17, 51]\n];\nvar edgeFacelet2 = [\n [5, 10],\n [7, 19],\n [3, 37],\n [1, 46],\n [32, 16],\n [28, 25],\n [30, 43],\n [34, 52],\n [23, 12],\n [21, 41],\n [50, 39],\n [48, 14]\n];\nCubieCube2.prototype.toFaceCube = function(cFacelet, eFacelet) {\n cFacelet = cFacelet || cornerFacelet2;\n eFacelet = eFacelet || edgeFacelet2;\n var ts = \"URFDLB\";\n var f = [];\n for (var i2 = 0; i2 < 54; i2++) {\n f[i2] = ts[~~(i2 / 9)];\n }\n for (var c = 0; c < 8; c++) {\n var j = this.ca[c] & 7;\n var ori = this.ca[c] >> 3;\n for (var n = 0; n < 3; n++)\n f[cFacelet[c][(n + ori) % 3]] = ts[~~(cFacelet[j][n] / 9)];\n }\n for (var e = 0; e < 12; e++) {\n var j = this.ea[e] >> 1;\n var ori = this.ea[e] & 1;\n for (var n = 0; n < 2; n++)\n f[eFacelet[e][(n + ori) % 2]] = ts[~~(eFacelet[j][n] / 9)];\n }\n return f.join(\"\");\n};\nCubieCube2.prototype.invFrom = function(cc) {\n for (var edge = 0; edge < 12; edge++) {\n this.ea[cc.ea[edge] >> 1] = edge << 1 | cc.ea[edge] & 1;\n }\n for (var corn = 0; corn < 8; corn++) {\n this.ca[cc.ca[corn] & 7] = corn | 32 >> (cc.ca[corn] >> 3) & 24;\n }\n return this;\n};\nCubieCube2.prototype.fromFacelet = function(facelet, cFacelet, eFacelet) {\n cFacelet = cFacelet || cornerFacelet2;\n eFacelet = eFacelet || edgeFacelet2;\n var count = 0;\n var f = [];\n var centers = facelet[4] + facelet[13] + facelet[22] + facelet[31] + facelet[40] + facelet[49];\n for (let i3 = 0; i3 < 54; ++i3) {\n f[i3] = centers.indexOf(facelet[i3]);\n if (f[i3] === -1) {\n return -1;\n }\n count += 1 << (f[i3] << 2);\n }\n if (count !== 10066329) {\n return -1;\n }\n var col1, col2, i2, j, ori;\n for (i2 = 0; i2 < 8; ++i2) {\n for (ori = 0; ori < 3; ++ori)\n if (f[cFacelet[i2][ori]] === 0 || f[cFacelet[i2][ori]] === 3)\n break;\n col1 = f[cFacelet[i2][(ori + 1) % 3]];\n col2 = f[cFacelet[i2][(ori + 2) % 3]];\n for (j = 0; j < 8; ++j) {\n if (col1 === ~~(cFacelet[j][1] / 9) && col2 === ~~(cFacelet[j][2] / 9)) {\n this.ca[i2] = j | ori % 3 << 3;\n break;\n }\n }\n }\n for (i2 = 0; i2 < 12; ++i2) {\n for (j = 0; j < 12; ++j) {\n if (f[eFacelet[i2][0]] === ~~(eFacelet[j][0] / 9) && f[eFacelet[i2][1]] === ~~(eFacelet[j][1] / 9)) {\n this.ea[i2] = j << 1;\n break;\n }\n if (f[eFacelet[i2][0]] === ~~(eFacelet[j][1] / 9) && f[eFacelet[i2][1]] === ~~(eFacelet[j][0] / 9)) {\n this.ea[i2] = j << 1 | 1;\n break;\n }\n }\n }\n return this;\n};\nvar moveCube2 = [];\nfor (var i2 = 0; i2 < 18; i2++) {\n moveCube2[i2] = new CubieCube2();\n}\nmoveCube2[0].init([3, 0, 1, 2, 4, 5, 6, 7], [6, 0, 2, 4, 8, 10, 12, 14, 16, 18, 20, 22]);\nmoveCube2[3].init([20, 1, 2, 8, 15, 5, 6, 19], [16, 2, 4, 6, 22, 10, 12, 14, 8, 18, 20, 0]);\nmoveCube2[6].init([9, 21, 2, 3, 16, 12, 6, 7], [0, 19, 4, 6, 8, 17, 12, 14, 3, 11, 20, 22]);\nmoveCube2[9].init([0, 1, 2, 3, 5, 6, 7, 4], [0, 2, 4, 6, 10, 12, 14, 8, 16, 18, 20, 22]);\nmoveCube2[12].init([0, 10, 22, 3, 4, 17, 13, 7], [0, 2, 20, 6, 8, 10, 18, 14, 16, 4, 12, 22]);\nmoveCube2[15].init([0, 1, 11, 23, 4, 5, 18, 14], [0, 2, 4, 23, 8, 10, 12, 21, 16, 18, 7, 15]);\nfor (var a = 0; a < 18; a += 3) {\n for (p = 0; p < 2; p++) {\n CubieCube2.EdgeMult(moveCube2[a + p], moveCube2[a], moveCube2[a + p + 1]);\n CubieCube2.CornMult(moveCube2[a + p], moveCube2[a], moveCube2[a + p + 1]);\n }\n}\nvar p;\nCubieCube2.moveCube = moveCube2;\nCubieCube2.prototype.edgeCycles = function() {\n var visited = [];\n var small_cycles = [0, 0, 0];\n var cycles = 0;\n var parity = false;\n for (var x = 0; x < 12; ++x) {\n if (visited[x]) {\n continue;\n }\n var length = -1;\n var flip = false;\n var y = x;\n do {\n visited[y] = true;\n ++length;\n flip ^= this.ea[y] & 1;\n y = this.ea[y] >> 1;\n } while (y !== x);\n cycles += length >> 1;\n if (length & 1) {\n parity = !parity;\n ++cycles;\n }\n if (flip) {\n if (length === 0) {\n ++small_cycles[0];\n } else if (length & 1) {\n small_cycles[2] ^= 1;\n } else {\n ++small_cycles[1];\n }\n }\n }\n small_cycles[1] += small_cycles[2];\n if (small_cycles[0] < small_cycles[1]) {\n cycles += small_cycles[0] + small_cycles[1] >> 1;\n } else {\n var flip_cycles = [0, 2, 3, 5, 6, 8, 9];\n cycles += small_cycles[1] + flip_cycles[small_cycles[0] - small_cycles[1] >> 1];\n }\n return cycles - parity;\n};\nfunction createPrun(prun, init2, size, maxd, doMove, N_MOVES, N_POWER, N_INV) {\n var isMoveTable = isArray(doMove);\n N_MOVES = N_MOVES || 6;\n N_POWER = N_POWER || 3;\n N_INV = N_INV || 256;\n maxd = maxd || 256;\n for (var i2 = 0, len = size + 7 >>> 3; i2 < len; i2++) {\n prun[i2] = -1;\n }\n prun[init2 >> 3] ^= 15 << ((init2 & 7) << 2);\n var val = 0;\n for (var l = 0; l <= maxd; l++) {\n var done = 0;\n var inv = l >= N_INV;\n var fill = l + 1 ^ 15;\n var find = inv ? 15 : l;\n var check = inv ? l : 15;\n out:\n for (var p = 0; p < size; p++, val >>= 4) {\n if ((p & 7) === 0) {\n val = prun[p >> 3];\n if (!inv && val === -1) {\n p += 7;\n continue;\n }\n }\n if ((val & 15) !== find) {\n continue;\n }\n for (var m = 0; m < N_MOVES; m++) {\n var q = p;\n for (var c = 0; c < N_POWER; c++) {\n q = isMoveTable ? doMove[m][q] : doMove(q, m);\n if (getPruning2(prun, q) !== check) {\n continue;\n }\n ++done;\n if (inv) {\n prun[p >> 3] ^= fill << ((p & 7) << 2);\n continue out;\n }\n prun[q >> 3] ^= fill << ((q & 7) << 2);\n }\n }\n }\n if (done === 0) {\n break;\n }\n DEBUG2 && console.log(\"[prun]\", done);\n }\n}\nfunction Solver(N_MOVES, N_POWER, state_params) {\n this.N_STATES = state_params.length;\n this.N_MOVES = N_MOVES;\n this.N_POWER = N_POWER;\n this.state_params = state_params;\n this.inited = false;\n}\nvar _2 = Solver.prototype;\n_2.search = function(state, minl, MAXL) {\n MAXL = (MAXL || 99) + 1;\n if (!this.inited) {\n this.move = [];\n this.prun = [];\n for (var i2 = 0; i2 < this.N_STATES; i2++) {\n var state_param = this.state_params[i2];\n var init2 = state_param[0];\n var doMove = state_param[1];\n var size = state_param[2];\n var maxd = state_param[3];\n var N_INV = state_param[4];\n this.move[i2] = [];\n this.prun[i2] = [];\n createMove(this.move[i2], size, doMove, this.N_MOVES);\n createPrun(this.prun[i2], init2, size, maxd, this.move[i2], this.N_MOVES, this.N_POWER, N_INV);\n }\n this.inited = true;\n }\n this.sol = [];\n for (var maxl = minl; maxl < MAXL; maxl++) {\n if (this.idaSearch(state, maxl, -1)) {\n break;\n }\n }\n return maxl === MAXL ? null : this.sol.reverse();\n};\n_2.toStr = function(sol, move_map, power_map) {\n var ret = [];\n for (var i2 = 0; i2 < sol.length; i2++) {\n ret.push(move_map[sol[i2][0]] + power_map[sol[i2][1]]);\n }\n return ret.join(\" \").replace(/ +/g, \" \");\n};\n_2.idaSearch = function(state, maxl, lm) {\n var N_STATES = this.N_STATES;\n for (var i2 = 0; i2 < N_STATES; i2++) {\n if (getPruning2(this.prun[i2], state[i2]) > maxl) {\n return false;\n }\n }\n if (maxl === 0) {\n return true;\n }\n var offset = state[0] + maxl + lm + 1;\n for (var move0 = 0; move0 < this.N_MOVES; move0++) {\n var move = (move0 + offset) % this.N_MOVES;\n if (move === lm) {\n continue;\n }\n var cur_state = state.slice();\n for (var power = 0; power < this.N_POWER; power++) {\n for (var i2 = 0; i2 < N_STATES; i2++) {\n cur_state[i2] = this.move[i2][move][cur_state[i2]];\n }\n if (this.idaSearch(cur_state, maxl - 1, move)) {\n this.sol.push([move, power]);\n return true;\n }\n }\n }\n return false;\n};\nfunction gSolver(solvedStates, doMove, moves) {\n this.solvedStates = solvedStates;\n this.doMove = doMove;\n this.moves = moves;\n this.prunTable = {};\n this.prunTableSize = 0;\n this.prunDepth = -1;\n}\n_2 = gSolver.prototype;\n_2.updatePrun = function(targetDepth) {\n targetDepth = targetDepth === void 0 ? this.prunDepth + 1 : targetDepth;\n for (var depth = this.prunDepth + 1; depth <= targetDepth; depth++) {\n var t = +new Date();\n var prevSize = this.prunTableSize;\n if (depth < 8) {\n for (var i2 = 0; i2 < this.solvedStates.length; i2++) {\n this.updatePrunDFS(this.solvedStates[i2], depth, 0, null);\n }\n } else {\n this.updatePrunBFS(depth - 1);\n }\n this.prunDepth = depth;\n DEBUG2 && console.log(depth, this.prunTableSize - prevSize, +new Date() - t);\n }\n};\n_2.updatePrunBFS = function(fromDepth) {\n for (var state in this.prunTable) {\n if (this.prunTable[state][0] !== fromDepth) {\n continue;\n }\n for (var move in this.moves) {\n var newState = this.doMove(state, move);\n if (!newState || newState in this.prunTable) {\n continue;\n }\n this.prunTable[newState] = [fromDepth + 1, move];\n this.prunTableSize++;\n }\n }\n};\n_2.updatePrunDFS = function(state, maxl, depth, lm) {\n if (!(state in this.prunTable)) {\n this.prunTable[state] = [depth, lm];\n this.prunTableSize++;\n }\n if (maxl <= 0 || this.prunTable[state][1] !== lm) {\n return;\n }\n var lastAxisFace = lm === null ? -1 : this.moves[lm];\n for (var move in this.moves) {\n var axisface = this.moves[move] ^ lastAxisFace;\n if (axisface === 0 || (axisface & 15) === 0 && move < lm) {\n continue;\n }\n var newState = this.doMove(state, move);\n if (!newState || newState === state) {\n continue;\n }\n this.updatePrunDFS(newState, maxl - 1, depth + 1, move);\n }\n};\n_2.search = function(state, minl, MAXL, nsol) {\n MAXL = MAXL + 1 || 99;\n this.sol = [];\n this.sols = [];\n this.nsol = nsol || 1;\n this.minl = minl || 0;\n for (var maxl = minl; maxl < MAXL; maxl++) {\n this.updatePrun(Math.ceil(maxl / 2));\n this.visited = {};\n if (this.idaSearch(state, maxl, null)) {\n break;\n }\n }\n return this.sols.slice();\n};\n_2.getPruning = function(state) {\n var prun = this.prunTable[state];\n return prun === void 0 ? this.prunDepth + 1 : prun[0];\n};\n_2.idaSearch = function(state, maxl, lm) {\n if (this.getPruning(state) > maxl || state in this.visited) {\n return false;\n }\n this.visited[state] = 0;\n if (maxl === 0) {\n this.sols.push(this.sol.slice());\n return this.sols.length >= this.nsol;\n }\n var lastAxisFace = lm === null ? -1 : this.moves[lm];\n for (var move in this.moves) {\n var axisface = this.moves[move] ^ lastAxisFace;\n if (axisface === 0 || (axisface & 15) === 0 && move < lm) {\n continue;\n }\n var newState = this.doMove(state, move);\n if (!newState || newState === state) {\n continue;\n }\n this.sol.push(move);\n if (this.idaSearch(newState, maxl - 1, move)) {\n return true;\n }\n this.sol.pop();\n }\n return false;\n};\n\n// src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.ts\nfunction createArray(length1, length2) {\n var result, i2;\n result = new Array(length1);\n if (length2 !== void 0) {\n for (i2 = 0; i2 < length1; i2++) {\n result[i2] = new Array(length2);\n }\n }\n return result;\n}\nvar _3;\nvar seedTable = {};\nvar CM$ = {};\nvar Q$Object = 0;\nvar Q$Serializable = 30;\nvar Q$Center1 = 21;\nvar Q$CornerCube = 22;\nvar Q$Edge3 = 23;\nvar Q$FullCube_0 = 24;\nvar Q$FullCube_$1 = 25;\nvar Q$Comparable = 34;\nvar Q$Search_0 = 26;\nvar Q$Object_$1 = 40;\nfunction newSeed(id) {\n return new seedTable[id]();\n}\nfunction defineSeed(id, superSeed, castableTypeMap, ...moreArgs) {\n var seed = seedTable[id];\n if (seed && !seed.___clazz$) {\n _3 = seed.prototype;\n } else {\n !seed && (seed = seedTable[id] = function() {\n });\n _3 = seed.prototype = superSeed < 0 ? {} : newSeed(superSeed);\n _3.castableTypeMap$ = castableTypeMap;\n }\n for (var i_0 = 3; i_0 < arguments.length; ++i_0) {\n arguments[i_0].prototype = _3;\n }\n if (seed.___clazz$) {\n _3.___clazz$ = seed.___clazz$;\n seed.___clazz$ = null;\n }\n}\nfunction makeCastMap(a) {\n var result = {};\n for (var i_0 = 0, c = a.length; i_0 < c; ++i_0) {\n result[a[i_0]] = 1;\n }\n return result;\n}\ndefineSeed(1, -1, CM$);\n_3.value = null;\nfunction Array_0() {\n}\nfunction createFrom(array, length_0) {\n var a, result;\n a = array;\n result = createFromSeed(0, length_0);\n initValues2(a.___clazz$, a.castableTypeMap$, a.queryId$, result);\n return result;\n}\nfunction createFromSeed(seedType, length_0) {\n var array = new Array(length_0);\n if (seedType === 3) {\n for (var i_0 = 0; i_0 < length_0; ++i_0) {\n let value = {\n m: 0,\n l: 0,\n h: 0\n };\n value.l = value.m = value.h = 0;\n array[i_0] = value;\n }\n } else if (seedType > 0) {\n let value = [null, 0, false][seedType];\n for (var i_0 = 0; i_0 < length_0; ++i_0) {\n array[i_0] = value;\n }\n }\n return array;\n}\nfunction initDim2(arrayClass, castableTypeMap, queryId, length_0, seedType) {\n var result;\n result = createFromSeed(seedType, length_0);\n initValues2(arrayClass, castableTypeMap, queryId, result);\n return result;\n}\nfunction initValues2(arrayClass, castableTypeMap, queryId, array) {\n $clinit_Array$ExpandoWrapper();\n wrapArray(array, expandoNames_0, expandoValues_0);\n array.___clazz$ = arrayClass;\n array.castableTypeMap$ = castableTypeMap;\n array.queryId$ = queryId;\n return array;\n}\nfunction setCheck(array, index, value) {\n return array[index] = value;\n}\ndefineSeed(73, 1, {}, Array_0);\n_3.queryId$ = 0;\nvar ran$clinit_Array$ExpandoWrapper = false;\nfunction $clinit_Array$ExpandoWrapper() {\n if (ran$clinit_Array$ExpandoWrapper) {\n return;\n }\n ran$clinit_Array$ExpandoWrapper = true;\n expandoNames_0 = [];\n expandoValues_0 = [];\n initExpandos(new Array_0(), expandoNames_0, expandoValues_0);\n}\nfunction initExpandos(protoType, expandoNames, expandoValues) {\n var i_0 = 0, value;\n for (var name_0 in protoType) {\n if (value = protoType[name_0]) {\n expandoNames[i_0] = name_0;\n expandoValues[i_0] = value;\n ++i_0;\n }\n }\n}\nfunction wrapArray(array, expandoNames, expandoValues) {\n $clinit_Array$ExpandoWrapper();\n for (var i_0 = 0, c = expandoNames.length; i_0 < c; ++i_0) {\n array[expandoNames[i_0]] = expandoValues[i_0];\n }\n}\nvar expandoNames_0;\nvar expandoValues_0;\nfunction canCast2(src, dstId) {\n return src.castableTypeMap$ && !!src.castableTypeMap$[dstId];\n}\nfunction instanceOf2(src, dstId) {\n return src !== null && canCast2(src, dstId);\n}\nvar ran$clinit_Center1 = false;\nfunction $clinit_Center1() {\n if (ran$clinit_Center1) {\n return false;\n }\n ran$clinit_Center1 = true;\n ctsmv = createArray(15582, 36);\n sym2raw = createArray(15582);\n csprun = createArray(15582);\n symmult = createArray(48, 48);\n symmove = createArray(48, 36);\n syminv = createArray(48);\n finish_0 = createArray(48);\n}\nfunction $$init_1(this$static) {\n this$static.ct = createArray(24);\n}\nfunction $equals(this$static, obj) {\n var c, i_0;\n if (instanceOf2(obj, Q$Center1)) {\n c = obj;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n if (this$static.ct[i_0] !== c.ct[i_0]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\nfunction $get_1(this$static) {\n var i_0, idx, r2;\n idx = 0;\n r2 = 8;\n for (i_0 = 23; i_0 >= 0; --i_0) {\n this$static.ct[i_0] === 1 && (idx += Cnk2[i_0][r2--]);\n }\n return idx;\n}\nfunction $getsym(this$static) {\n var cord, j;\n if (raw2sym !== null) {\n return raw2sym[$get_1(this$static)];\n }\n for (j = 0; j < 48; ++j) {\n cord = raw2sym_0($get_1(this$static));\n if (cord !== -1)\n return cord * 64 + j;\n $rot(this$static, 0);\n j % 2 === 1 && $rot(this$static, 1);\n j % 8 === 7 && $rot(this$static, 2);\n j % 16 === 15 && $rot(this$static, 3);\n }\n}\nfunction $move(this$static, m_0) {\n var key;\n key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0:\n swap(this$static.ct, 0, 1, 2, 3, key);\n break;\n case 1:\n swap(this$static.ct, 16, 17, 18, 19, key);\n break;\n case 2:\n swap(this$static.ct, 8, 9, 10, 11, key);\n break;\n case 3:\n swap(this$static.ct, 4, 5, 6, 7, key);\n break;\n case 4:\n swap(this$static.ct, 20, 21, 22, 23, key);\n break;\n case 5:\n swap(this$static.ct, 12, 13, 14, 15, key);\n break;\n case 6:\n swap(this$static.ct, 0, 1, 2, 3, key);\n swap(this$static.ct, 8, 20, 12, 16, key);\n swap(this$static.ct, 9, 21, 13, 17, key);\n break;\n case 7:\n swap(this$static.ct, 16, 17, 18, 19, key);\n swap(this$static.ct, 1, 15, 5, 9, key);\n swap(this$static.ct, 2, 12, 6, 10, key);\n break;\n case 8:\n swap(this$static.ct, 8, 9, 10, 11, key);\n swap(this$static.ct, 2, 19, 4, 21, key);\n swap(this$static.ct, 3, 16, 5, 22, key);\n break;\n case 9:\n swap(this$static.ct, 4, 5, 6, 7, key);\n swap(this$static.ct, 10, 18, 14, 22, key);\n swap(this$static.ct, 11, 19, 15, 23, key);\n break;\n case 10:\n swap(this$static.ct, 20, 21, 22, 23, key);\n swap(this$static.ct, 0, 8, 4, 14, key);\n swap(this$static.ct, 3, 11, 7, 13, key);\n break;\n case 11:\n swap(this$static.ct, 12, 13, 14, 15, key);\n swap(this$static.ct, 1, 20, 7, 18, key);\n swap(this$static.ct, 0, 23, 6, 17, key);\n }\n}\nfunction $rot(this$static, r2) {\n switch (r2) {\n case 0:\n $move(this$static, 19);\n $move(this$static, 28);\n break;\n case 1:\n $move(this$static, 21);\n $move(this$static, 32);\n break;\n case 2:\n swap(this$static.ct, 0, 3, 1, 2, 1);\n swap(this$static.ct, 8, 11, 9, 10, 1);\n swap(this$static.ct, 4, 7, 5, 6, 1);\n swap(this$static.ct, 12, 15, 13, 14, 1);\n swap(this$static.ct, 16, 19, 21, 22, 1);\n swap(this$static.ct, 17, 18, 20, 23, 1);\n break;\n case 3:\n $move(this$static, 18);\n $move(this$static, 29);\n $move(this$static, 24);\n $move(this$static, 35);\n }\n}\nfunction $rotate(this$static, r2) {\n var j;\n for (j = 0; j < r2; ++j) {\n $rot(this$static, 0);\n j % 2 === 1 && $rot(this$static, 1);\n j % 8 === 7 && $rot(this$static, 2);\n j % 16 === 15 && $rot(this$static, 3);\n }\n}\nfunction $set_0(this$static, idx) {\n var i_0, r2;\n r2 = 8;\n for (i_0 = 23; i_0 >= 0; --i_0) {\n this$static.ct[i_0] = 0;\n if (idx >= Cnk2[i_0][r2]) {\n idx -= Cnk2[i_0][r2--];\n this$static.ct[i_0] = 1;\n }\n }\n}\nfunction $set_1(this$static, c) {\n var i_0;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this$static.ct[i_0] = c.ct[i_0];\n }\n}\nfunction Center1_0() {\n var i_0;\n $$init_1(this);\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this.ct[i_0] = 1;\n }\n for (i_0 = 8; i_0 < 24; ++i_0) {\n this.ct[i_0] = 0;\n }\n}\nfunction Center1_1(c, urf) {\n var i_0;\n $$init_1(this);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ct[i_0] = ~~(c.ct[i_0] / 2) === urf ? 1 : 0;\n }\n}\nfunction Center1_2(ct) {\n var i_0;\n $$init_1(this);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ct[i_0] = ct[i_0];\n }\n}\nfunction createMoveTable() {\n var c, d2, i_0, m_0;\n c = new Center1_0();\n d2 = new Center1_0();\n for (i_0 = 0; i_0 < 15582; ++i_0) {\n $set_0(d2, sym2raw[i_0]);\n for (m_0 = 0; m_0 < 36; ++m_0) {\n $set_1(c, d2);\n $move(c, m_0);\n ctsmv[i_0][m_0] = $getsym(c);\n }\n }\n}\nfunction createPrun2() {\n var check, depth, done, i_0, idx, inv, m_0, select;\n fill_0(csprun);\n csprun[0] = 0;\n depth = 0;\n done = 1;\n while (done !== 15582) {\n inv = depth > 4;\n select = inv ? -1 : depth;\n check = inv ? depth : -1;\n ++depth;\n for (i_0 = 0; i_0 < 15582; ++i_0) {\n if (csprun[i_0] !== select) {\n continue;\n }\n for (m_0 = 0; m_0 < 27; ++m_0) {\n idx = ~~ctsmv[i_0][m_0] >>> 6;\n if (csprun[idx] !== check) {\n continue;\n }\n ++done;\n if (inv) {\n csprun[i_0] = depth;\n break;\n } else {\n csprun[idx] = depth;\n }\n }\n }\n }\n}\nfunction getSolvedSym(cube2) {\n var c, check, i_0, j;\n c = new Center1_2(cube2.ct);\n for (j = 0; j < 48; ++j) {\n check = true;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n if (c.ct[i_0] !== ~~(i_0 / 4)) {\n check = false;\n break;\n }\n }\n if (check) {\n return j;\n }\n $rot(c, 0);\n j % 2 === 1 && $rot(c, 1);\n j % 8 === 7 && $rot(c, 2);\n j % 16 === 15 && $rot(c, 3);\n }\n return -1;\n}\nfunction initSym_0() {\n var c, d2, e, f, i_0, j, k_0;\n c = new Center1_0();\n for (i_0 = 0; i_0 < 24; ++i_0) {\n c.ct[i_0] = i_0;\n }\n d2 = new Center1_2(c.ct);\n e = new Center1_2(c.ct);\n f = new Center1_2(c.ct);\n for (i_0 = 0; i_0 < 48; ++i_0) {\n for (j = 0; j < 48; ++j) {\n for (k_0 = 0; k_0 < 48; ++k_0) {\n if ($equals(c, d2)) {\n symmult[i_0][j] = k_0;\n k_0 === 0 && (syminv[i_0] = j);\n }\n $rot(d2, 0);\n k_0 % 2 === 1 && $rot(d2, 1);\n k_0 % 8 === 7 && $rot(d2, 2);\n k_0 % 16 === 15 && $rot(d2, 3);\n }\n $rot(c, 0);\n j % 2 === 1 && $rot(c, 1);\n j % 8 === 7 && $rot(c, 2);\n j % 16 === 15 && $rot(c, 3);\n }\n $rot(c, 0);\n i_0 % 2 === 1 && $rot(c, 1);\n i_0 % 8 === 7 && $rot(c, 2);\n i_0 % 16 === 15 && $rot(c, 3);\n }\n for (i_0 = 0; i_0 < 48; ++i_0) {\n $set_1(c, e);\n $rotate(c, syminv[i_0]);\n for (j = 0; j < 36; ++j) {\n $set_1(d2, c);\n $move(d2, j);\n $rotate(d2, i_0);\n for (k_0 = 0; k_0 < 36; ++k_0) {\n $set_1(f, e);\n $move(f, k_0);\n if ($equals(f, d2)) {\n symmove[i_0][j] = k_0;\n break;\n }\n }\n }\n }\n $set_0(c, 0);\n for (i_0 = 0; i_0 < 48; ++i_0) {\n finish_0[syminv[i_0]] = $get_1(c);\n $rot(c, 0);\n i_0 % 2 === 1 && $rot(c, 1);\n i_0 % 8 === 7 && $rot(c, 2);\n i_0 % 16 === 15 && $rot(c, 3);\n }\n}\nfunction initSym2Raw2() {\n var c, count, i_0, idx, j, occ;\n c = new Center1_0();\n occ = createArray(22984);\n for (i_0 = 0; i_0 < 22984; i_0++) {\n occ[i_0] = 0;\n }\n count = 0;\n for (i_0 = 0; i_0 < 735471; ++i_0) {\n if ((occ[~~i_0 >>> 5] & 1 << (i_0 & 31)) === 0) {\n $set_0(c, i_0);\n for (j = 0; j < 48; ++j) {\n idx = $get_1(c);\n occ[~~idx >>> 5] |= 1 << (idx & 31);\n raw2sym !== null && (raw2sym[idx] = count << 6 | syminv[j]);\n $rot(c, 0);\n j % 2 === 1 && $rot(c, 1);\n j % 8 === 7 && $rot(c, 2);\n j % 16 === 15 && $rot(c, 3);\n }\n sym2raw[count++] = i_0;\n }\n }\n}\nfunction raw2sym_0(n) {\n var m_0;\n m_0 = binarySearch_0(sym2raw, n);\n return m_0 >= 0 ? m_0 : -1;\n}\ndefineSeed(153, 1, makeCastMap([Q$Center1]), Center1_0, Center1_1, Center1_2);\nvar csprun;\nvar ctsmv;\nvar finish_0;\nvar raw2sym = null;\nvar sym2raw;\nvar syminv;\nvar symmove;\nvar symmult;\nvar ran$clinit_Center2 = false;\nfunction $clinit_Center2() {\n if (ran$clinit_Center2) {\n return;\n }\n ran$clinit_Center2 = true;\n rlmv = createArray(70, 28);\n ctmv = createArray(6435, 28);\n rlrot = createArray(70, 16);\n ctrot = createArray(6435, 16);\n ctprun = createArray(450450);\n pmv = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 1,\n 0,\n 0,\n 0\n ];\n}\nfunction $getct(this$static) {\n var i_0, idx, r2;\n idx = 0;\n r2 = 8;\n for (i_0 = 14; i_0 >= 0; --i_0) {\n this$static.ct[i_0] !== this$static.ct[15] && (idx += Cnk2[i_0][r2--]);\n }\n return idx;\n}\nfunction $getrl(this$static) {\n var i_0, idx, r2;\n idx = 0;\n r2 = 4;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n this$static.rl[i_0] !== this$static.rl[7] && (idx += Cnk2[i_0][r2--]);\n }\n return idx * 2 + this$static.parity;\n}\nfunction $move_0(this$static, m_0) {\n var key;\n this$static.parity ^= pmv[m_0];\n key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0:\n swap(this$static.ct, 0, 1, 2, 3, key);\n break;\n case 1:\n swap(this$static.rl, 0, 1, 2, 3, key);\n break;\n case 2:\n swap(this$static.ct, 8, 9, 10, 11, key);\n break;\n case 3:\n swap(this$static.ct, 4, 5, 6, 7, key);\n break;\n case 4:\n swap(this$static.rl, 4, 5, 6, 7, key);\n break;\n case 5:\n swap(this$static.ct, 12, 13, 14, 15, key);\n break;\n case 6:\n swap(this$static.ct, 0, 1, 2, 3, key);\n swap(this$static.rl, 0, 5, 4, 1, key);\n swap(this$static.ct, 8, 9, 12, 13, key);\n break;\n case 7:\n swap(this$static.rl, 0, 1, 2, 3, key);\n swap(this$static.ct, 1, 15, 5, 9, key);\n swap(this$static.ct, 2, 12, 6, 10, key);\n break;\n case 8:\n swap(this$static.ct, 8, 9, 10, 11, key);\n swap(this$static.rl, 0, 3, 6, 5, key);\n swap(this$static.ct, 3, 2, 5, 4, key);\n break;\n case 9:\n swap(this$static.ct, 4, 5, 6, 7, key);\n swap(this$static.rl, 3, 2, 7, 6, key);\n swap(this$static.ct, 11, 10, 15, 14, key);\n break;\n case 10:\n swap(this$static.rl, 4, 5, 6, 7, key);\n swap(this$static.ct, 0, 8, 4, 14, key);\n swap(this$static.ct, 3, 11, 7, 13, key);\n break;\n case 11:\n swap(this$static.ct, 12, 13, 14, 15, key);\n swap(this$static.rl, 1, 4, 7, 2, key);\n swap(this$static.ct, 1, 0, 7, 6, key);\n }\n}\nfunction $rot_0(this$static, r2) {\n switch (r2) {\n case 0:\n $move_0(this$static, 19);\n $move_0(this$static, 28);\n break;\n case 1:\n $move_0(this$static, 21);\n $move_0(this$static, 32);\n break;\n case 2:\n swap(this$static.ct, 0, 3, 1, 2, 1);\n swap(this$static.ct, 8, 11, 9, 10, 1);\n swap(this$static.ct, 4, 7, 5, 6, 1);\n swap(this$static.ct, 12, 15, 13, 14, 1);\n swap(this$static.rl, 0, 3, 5, 6, 1);\n swap(this$static.rl, 1, 2, 4, 7, 1);\n }\n}\nfunction $set_2(this$static, c, edgeParity) {\n var i_0;\n for (i_0 = 0; i_0 < 16; ++i_0) {\n this$static.ct[i_0] = ~~(c.ct[i_0] / 2);\n }\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this$static.rl[i_0] = c.ct[i_0 + 16];\n }\n this$static.parity = edgeParity;\n}\nfunction $setct(this$static, idx) {\n var i_0, r2;\n r2 = 8;\n this$static.ct[15] = 0;\n for (i_0 = 14; i_0 >= 0; --i_0) {\n if (idx >= Cnk2[i_0][r2]) {\n idx -= Cnk2[i_0][r2--];\n this$static.ct[i_0] = 1;\n } else {\n this$static.ct[i_0] = 0;\n }\n }\n}\nfunction $setrl(this$static, idx) {\n var i_0, r2;\n this$static.parity = idx & 1;\n idx >>>= 1;\n r2 = 4;\n this$static.rl[7] = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n if (idx >= Cnk2[i_0][r2]) {\n idx -= Cnk2[i_0][r2--];\n this$static.rl[i_0] = 1;\n } else {\n this$static.rl[i_0] = 0;\n }\n }\n}\nfunction Center2_0() {\n this.rl = createArray(8);\n this.ct = createArray(16);\n}\nfunction init_3() {\n var c, ct, ctx, depth, done, i_0, idx, j, m_0, rl, rlx;\n c = new Center2_0();\n for (i_0 = 0; i_0 < 70; ++i_0) {\n for (m_0 = 0; m_0 < 28; ++m_0) {\n $setrl(c, i_0);\n $move_0(c, move2std[m_0]);\n rlmv[i_0][m_0] = $getrl(c);\n }\n }\n for (i_0 = 0; i_0 < 70; ++i_0) {\n $setrl(c, i_0);\n for (j = 0; j < 16; ++j) {\n rlrot[i_0][j] = $getrl(c);\n $rot_0(c, 0);\n j % 2 === 1 && $rot_0(c, 1);\n j % 8 === 7 && $rot_0(c, 2);\n }\n }\n for (i_0 = 0; i_0 < 6435; ++i_0) {\n $setct(c, i_0);\n for (j = 0; j < 16; ++j) {\n ctrot[i_0][j] = $getct(c) & 65535;\n $rot_0(c, 0);\n j % 2 === 1 && $rot_0(c, 1);\n j % 8 === 7 && $rot_0(c, 2);\n }\n }\n for (i_0 = 0; i_0 < 6435; ++i_0) {\n for (m_0 = 0; m_0 < 28; ++m_0) {\n $setct(c, i_0);\n $move_0(c, move2std[m_0]);\n ctmv[i_0][m_0] = $getct(c) & 65535;\n }\n }\n fill_0(ctprun);\n ctprun[0] = ctprun[18] = ctprun[28] = ctprun[46] = ctprun[54] = ctprun[56] = 0;\n depth = 0;\n done = 6;\n while (done !== 450450) {\n var inv = depth > 6;\n var select = inv ? -1 : depth;\n var check = inv ? depth : -1;\n ++depth;\n for (i_0 = 0; i_0 < 450450; ++i_0) {\n if (ctprun[i_0] !== select) {\n continue;\n }\n ct = ~~(i_0 / 70);\n rl = i_0 % 70;\n for (m_0 = 0; m_0 < 23; ++m_0) {\n ctx = ctmv[ct][m_0];\n rlx = rlmv[rl][m_0];\n idx = ctx * 70 + rlx;\n if (ctprun[idx] !== check) {\n continue;\n }\n ++done;\n if (inv) {\n ctprun[i_0] = depth;\n break;\n } else {\n ctprun[idx] = depth;\n }\n }\n }\n }\n}\ndefineSeed(154, 1, {}, Center2_0);\n_3.parity = 0;\nvar ctmv;\nvar ctprun;\nvar ctrot;\nvar pmv;\nvar rlmv;\nvar rlrot;\nvar ran$clinit_Center3 = false;\nfunction $clinit_Center3() {\n if (ran$clinit_Center3) {\n return;\n }\n ran$clinit_Center3 = true;\n ctmove = createArray(29400, 20);\n pmove = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1];\n prun_0 = createArray(29400);\n rl2std = [0, 9, 14, 23, 27, 28, 41, 42, 46, 55, 60, 69];\n std2rl = createArray(70);\n}\nfunction $getct_0(this$static) {\n var check, i_0, idx, idxrl, r2;\n idx = 0;\n r2 = 4;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n this$static.ud[i_0] !== this$static.ud[7] && (idx += Cnk2[i_0][r2--]);\n }\n idx *= 35;\n r2 = 4;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n this$static.fb[i_0] !== this$static.fb[7] && (idx += Cnk2[i_0][r2--]);\n }\n idx *= 12;\n check = this$static.fb[7] ^ this$static.ud[7];\n idxrl = 0;\n r2 = 4;\n for (i_0 = 7; i_0 >= 0; --i_0) {\n this$static.rl[i_0] !== check && (idxrl += Cnk2[i_0][r2--]);\n }\n return this$static.parity + 2 * (idx + std2rl[idxrl]);\n}\nfunction $move_1(this$static, i_0) {\n this$static.parity ^= pmove[i_0];\n switch (i_0) {\n case 0:\n case 1:\n case 2:\n swap(this$static.ud, 0, 1, 2, 3, i_0 % 3);\n break;\n case 3:\n swap(this$static.rl, 0, 1, 2, 3, 1);\n break;\n case 4:\n case 5:\n case 6:\n swap(this$static.fb, 0, 1, 2, 3, (i_0 - 1) % 3);\n break;\n case 7:\n case 8:\n case 9:\n swap(this$static.ud, 4, 5, 6, 7, (i_0 - 1) % 3);\n break;\n case 10:\n swap(this$static.rl, 4, 5, 6, 7, 1);\n break;\n case 11:\n case 12:\n case 13:\n swap(this$static.fb, 4, 5, 6, 7, (i_0 + 1) % 3);\n break;\n case 14:\n swap(this$static.ud, 0, 1, 2, 3, 1);\n swap(this$static.rl, 0, 5, 4, 1, 1);\n swap(this$static.fb, 0, 5, 4, 1, 1);\n break;\n case 15:\n swap(this$static.rl, 0, 1, 2, 3, 1);\n swap(this$static.fb, 1, 4, 7, 2, 1);\n swap(this$static.ud, 1, 6, 5, 2, 1);\n break;\n case 16:\n swap(this$static.fb, 0, 1, 2, 3, 1);\n swap(this$static.ud, 3, 2, 5, 4, 1);\n swap(this$static.rl, 0, 3, 6, 5, 1);\n break;\n case 17:\n swap(this$static.ud, 4, 5, 6, 7, 1);\n swap(this$static.rl, 3, 2, 7, 6, 1);\n swap(this$static.fb, 3, 2, 7, 6, 1);\n break;\n case 18:\n swap(this$static.rl, 4, 5, 6, 7, 1);\n swap(this$static.fb, 0, 3, 6, 5, 1);\n swap(this$static.ud, 0, 3, 4, 7, 1);\n break;\n case 19:\n swap(this$static.fb, 4, 5, 6, 7, 1);\n swap(this$static.ud, 0, 7, 6, 1, 1);\n swap(this$static.rl, 1, 4, 7, 2, 1);\n }\n}\nfunction $set_3(this$static, c, eXc_parity) {\n var i_0, parity;\n parity = (c.ct[0] > c.ct[8] ? 1 : 0) ^ (c.ct[8] > c.ct[16] ? 1 : 0) ^ (c.ct[0] > c.ct[16] ? 1 : 0) ? 1 : 0;\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this$static.ud[i_0] = c.ct[i_0] & 1 ^ 1;\n this$static.fb[i_0] = c.ct[i_0 + 8] & 1 ^ 1;\n this$static.rl[i_0] = c.ct[i_0 + 16] & 1 ^ 1 ^ parity;\n }\n this$static.parity = parity ^ eXc_parity;\n}\nfunction $setct_0(this$static, idx) {\n var i_0, idxfb, idxrl, r2;\n this$static.parity = idx & 1;\n idx >>>= 1;\n idxrl = rl2std[idx % 12];\n idx = ~~(idx / 12);\n r2 = 4;\n for (i_0 = 7; i_0 >= 0; --i_0) {\n this$static.rl[i_0] = 0;\n if (idxrl >= Cnk2[i_0][r2]) {\n idxrl -= Cnk2[i_0][r2--];\n this$static.rl[i_0] = 1;\n }\n }\n idxfb = idx % 35;\n idx = ~~(idx / 35);\n r2 = 4;\n this$static.fb[7] = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n if (idxfb >= Cnk2[i_0][r2]) {\n idxfb -= Cnk2[i_0][r2--];\n this$static.fb[i_0] = 1;\n } else {\n this$static.fb[i_0] = 0;\n }\n }\n r2 = 4;\n this$static.ud[7] = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n if (idx >= Cnk2[i_0][r2]) {\n idx -= Cnk2[i_0][r2--];\n this$static.ud[i_0] = 1;\n } else {\n this$static.ud[i_0] = 0;\n }\n }\n}\nfunction Center3_0() {\n this.ud = createArray(8);\n this.rl = createArray(8);\n this.fb = createArray(8);\n}\nfunction init_4() {\n var c, depth, done, i_0, m_0;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n std2rl[rl2std[i_0]] = i_0;\n }\n c = new Center3_0();\n for (i_0 = 0; i_0 < 29400; ++i_0) {\n for (m_0 = 0; m_0 < 20; ++m_0) {\n $setct_0(c, i_0);\n $move_1(c, m_0);\n ctmove[i_0][m_0] = $getct_0(c) & 65535;\n }\n }\n fill_0(prun_0);\n prun_0[0] = 0;\n depth = 0;\n done = 1;\n while (done !== 29400) {\n for (i_0 = 0; i_0 < 29400; ++i_0) {\n if (prun_0[i_0] !== depth) {\n continue;\n }\n for (m_0 = 0; m_0 < 17; ++m_0) {\n if (prun_0[ctmove[i_0][m_0]] === -1) {\n prun_0[ctmove[i_0][m_0]] = depth + 1;\n ++done;\n }\n }\n }\n ++depth;\n }\n}\ndefineSeed(155, 1, {}, Center3_0);\n_3.parity = 0;\nvar ctmove;\nvar pmove;\nvar prun_0;\nvar rl2std;\nvar std2rl;\nvar ran$clinit_CenterCube = false;\nfunction $clinit_CenterCube() {\n if (ran$clinit_CenterCube) {\n return;\n }\n ran$clinit_CenterCube = true;\n center333Map = [0, 4, 2, 1, 5, 3];\n}\nfunction $copy_1(this$static, c) {\n var i_0;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this$static.ct[i_0] = c.ct[i_0];\n }\n}\nfunction $move_2(this$static, m_0) {\n var key;\n key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0:\n swap(this$static.ct, 0, 1, 2, 3, key);\n break;\n case 1:\n swap(this$static.ct, 16, 17, 18, 19, key);\n break;\n case 2:\n swap(this$static.ct, 8, 9, 10, 11, key);\n break;\n case 3:\n swap(this$static.ct, 4, 5, 6, 7, key);\n break;\n case 4:\n swap(this$static.ct, 20, 21, 22, 23, key);\n break;\n case 5:\n swap(this$static.ct, 12, 13, 14, 15, key);\n break;\n case 6:\n swap(this$static.ct, 0, 1, 2, 3, key);\n swap(this$static.ct, 8, 20, 12, 16, key);\n swap(this$static.ct, 9, 21, 13, 17, key);\n break;\n case 7:\n swap(this$static.ct, 16, 17, 18, 19, key);\n swap(this$static.ct, 1, 15, 5, 9, key);\n swap(this$static.ct, 2, 12, 6, 10, key);\n break;\n case 8:\n swap(this$static.ct, 8, 9, 10, 11, key);\n swap(this$static.ct, 2, 19, 4, 21, key);\n swap(this$static.ct, 3, 16, 5, 22, key);\n break;\n case 9:\n swap(this$static.ct, 4, 5, 6, 7, key);\n swap(this$static.ct, 10, 18, 14, 22, key);\n swap(this$static.ct, 11, 19, 15, 23, key);\n break;\n case 10:\n swap(this$static.ct, 20, 21, 22, 23, key);\n swap(this$static.ct, 0, 8, 4, 14, key);\n swap(this$static.ct, 3, 11, 7, 13, key);\n break;\n case 11:\n swap(this$static.ct, 12, 13, 14, 15, key);\n swap(this$static.ct, 1, 20, 7, 18, key);\n swap(this$static.ct, 0, 23, 6, 17, key);\n }\n}\nfunction CenterCube_0() {\n var i_0;\n this.ct = createArray(24);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ct[i_0] = ~~(i_0 / 4);\n }\n}\nfunction CenterCube_1(randomUIntBelow2) {\n var i_0, m_0, t;\n CenterCube_0.call(this);\n for (i_0 = 0; i_0 < 23; ++i_0) {\n t = i_0 + randomUIntBelow2(24 - i_0);\n if (this.ct[t] !== this.ct[i_0]) {\n m_0 = this.ct[i_0];\n this.ct[i_0] = this.ct[t];\n this.ct[t] = m_0;\n }\n }\n}\ndefineSeed(156, 1, {}, CenterCube_0, CenterCube_1);\nvar center333Map;\nvar ran$clinit_CornerCube = false;\nfunction $clinit_CornerCube() {\n if (ran$clinit_CornerCube) {\n return;\n }\n ran$clinit_CornerCube = true;\n moveCube_0 = createArray(18);\n cornerFacelet_0 = [\n [8, 9, 20],\n [6, 18, 38],\n [0, 36, 47],\n [2, 45, 11],\n [29, 26, 15],\n [27, 44, 24],\n [33, 53, 42],\n [35, 17, 51]\n ];\n initMove_0();\n}\nfunction $$init_2(this$static) {\n this$static.cp = [0, 1, 2, 3, 4, 5, 6, 7];\n this$static.co = [0, 0, 0, 0, 0, 0, 0, 0];\n}\nfunction $copy_2(this$static, c) {\n var i_0;\n for (i_0 = 0; i_0 < 8; ++i_0) {\n this$static.cp[i_0] = c.cp[i_0];\n this$static.co[i_0] = c.co[i_0];\n }\n}\nfunction $move_3(this$static, idx) {\n !this$static.temps && (this$static.temps = new CornerCube_0());\n CornMult_0(this$static, moveCube_0[idx], this$static.temps);\n $copy_2(this$static, this$static.temps);\n}\nfunction $setTwist_0(this$static, idx) {\n var i_0, twst;\n twst = 0;\n for (i_0 = 6; i_0 >= 0; --i_0) {\n twst += this$static.co[i_0] = idx % 3;\n idx = ~~(idx / 3);\n }\n this$static.co[7] = (15 - twst) % 3;\n}\nfunction CornMult_0(a, b, prod) {\n var corn, ori, oriA, oriB;\n for (corn = 0; corn < 8; ++corn) {\n prod.cp[corn] = a.cp[b.cp[corn]];\n oriA = a.co[b.cp[corn]];\n oriB = b.co[corn];\n ori = oriA;\n ori = ori + (oriA < 3 ? oriB : 6 - oriB);\n ori = ori % 3;\n (oriA >= 3 ? 1 : 0) ^ (oriB >= 3 ? 1 : 0) && (ori = ori + 3);\n prod.co[corn] = ori;\n }\n}\nfunction CornerCube_0() {\n $$init_2(this);\n}\nfunction CornerCube_1(cperm, twist) {\n $$init_2(this);\n set8Perm(this.cp, cperm);\n $setTwist_0(this, twist);\n}\nfunction CornerCube_2(randomUIntBelow2) {\n CornerCube_1.call(this, randomUIntBelow2(40320), randomUIntBelow2(2187));\n}\nfunction initMove_0() {\n var a, p_0;\n moveCube_0[0] = new CornerCube_1(15120, 0);\n moveCube_0[3] = new CornerCube_1(21021, 1494);\n moveCube_0[6] = new CornerCube_1(8064, 1236);\n moveCube_0[9] = new CornerCube_1(9, 0);\n moveCube_0[12] = new CornerCube_1(1230, 412);\n moveCube_0[15] = new CornerCube_1(224, 137);\n for (a = 0; a < 18; a += 3) {\n for (p_0 = 0; p_0 < 2; ++p_0) {\n moveCube_0[a + p_0 + 1] = new CornerCube_0();\n CornMult_0(moveCube_0[a + p_0], moveCube_0[a], moveCube_0[a + p_0 + 1]);\n }\n }\n}\ndefineSeed(157, 1, makeCastMap([Q$CornerCube]), CornerCube_0, CornerCube_1, CornerCube_2);\n_3.temps = null;\nvar cornerFacelet_0;\nvar moveCube_0;\nvar ran$clinit_Edge3 = false;\nfunction $clinit_Edge3() {\n if (ran$clinit_Edge3) {\n return;\n }\n ran$clinit_Edge3 = true;\n prunValues = [\n 1,\n 4,\n 16,\n 55,\n 324,\n 1922,\n 12275,\n 77640,\n 485359,\n 2778197,\n 11742425,\n 27492416,\n 31002941,\n 31006080\n ];\n eprun = createArray(1937880);\n sym2raw_0 = createArray(1538);\n symstate = createArray(1538);\n raw2sym_1 = createArray(11880);\n syminv_0 = [0, 1, 6, 3, 4, 5, 2, 7];\n mvrot = createArray(160, 12);\n mvroto = createArray(160, 12);\n factX = [\n 1,\n 1,\n 1,\n 3,\n 12,\n 60,\n 360,\n 2520,\n 20160,\n 181440,\n 1814400,\n 19958400,\n 239500800\n ];\n FullEdgeMap = [0, 2, 4, 6, 1, 3, 7, 5, 8, 9, 10, 11];\n}\nfunction $circlex(this$static, a, b, c, d2) {\n var temp;\n temp = this$static.edgeo[d2];\n this$static.edgeo[d2] = this$static.edge[c];\n this$static.edge[c] = this$static.edgeo[b];\n this$static.edgeo[b] = this$static.edge[a];\n this$static.edge[a] = temp;\n}\nfunction $get_2(this$static, end) {\n var i_0, idx, v, valh, vall;\n this$static.isStd || $std(this$static);\n idx = 0;\n vall = 1985229328;\n valh = 47768;\n for (i_0 = 0; i_0 < end; ++i_0) {\n v = this$static.edge[i_0] << 2;\n idx *= 12 - i_0;\n if (v >= 32) {\n idx += valh >> v - 32 & 15;\n valh -= 4368 << v - 32;\n } else {\n idx += vall >> v & 15;\n valh -= 4369;\n vall -= 286331152 << v;\n }\n }\n return idx;\n}\nfunction $getsym_0(this$static) {\n var cord1x, cord2x, symcord1x, symx;\n cord1x = $get_2(this$static, 4);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n $rotate_0(this$static, symx);\n cord2x = $get_2(this$static, 10) % 20160;\n return symcord1x * 20160 + cord2x;\n}\nfunction $move_4(this$static, i_0) {\n this$static.isStd = false;\n switch (i_0) {\n case 0:\n circle(this$static.edge, 0, 4, 1, 5);\n circle(this$static.edgeo, 0, 4, 1, 5);\n break;\n case 1:\n $swap_0(this$static.edge, 0, 4, 1, 5);\n $swap_0(this$static.edgeo, 0, 4, 1, 5);\n break;\n case 2:\n circle(this$static.edge, 0, 5, 1, 4);\n circle(this$static.edgeo, 0, 5, 1, 4);\n break;\n case 3:\n $swap_0(this$static.edge, 5, 10, 6, 11);\n $swap_0(this$static.edgeo, 5, 10, 6, 11);\n break;\n case 4:\n circle(this$static.edge, 0, 11, 3, 8);\n circle(this$static.edgeo, 0, 11, 3, 8);\n break;\n case 5:\n $swap_0(this$static.edge, 0, 11, 3, 8);\n $swap_0(this$static.edgeo, 0, 11, 3, 8);\n break;\n case 6:\n circle(this$static.edge, 0, 8, 3, 11);\n circle(this$static.edgeo, 0, 8, 3, 11);\n break;\n case 7:\n circle(this$static.edge, 2, 7, 3, 6);\n circle(this$static.edgeo, 2, 7, 3, 6);\n break;\n case 8:\n $swap_0(this$static.edge, 2, 7, 3, 6);\n $swap_0(this$static.edgeo, 2, 7, 3, 6);\n break;\n case 9:\n circle(this$static.edge, 2, 6, 3, 7);\n circle(this$static.edgeo, 2, 6, 3, 7);\n break;\n case 10:\n $swap_0(this$static.edge, 4, 8, 7, 9);\n $swap_0(this$static.edgeo, 4, 8, 7, 9);\n break;\n case 11:\n circle(this$static.edge, 1, 9, 2, 10);\n circle(this$static.edgeo, 1, 9, 2, 10);\n break;\n case 12:\n $swap_0(this$static.edge, 1, 9, 2, 10);\n $swap_0(this$static.edgeo, 1, 9, 2, 10);\n break;\n case 13:\n circle(this$static.edge, 1, 10, 2, 9);\n circle(this$static.edgeo, 1, 10, 2, 9);\n break;\n case 14:\n $swap_0(this$static.edge, 0, 4, 1, 5);\n $swap_0(this$static.edgeo, 0, 4, 1, 5);\n circle(this$static.edge, 9, 11);\n circle(this$static.edgeo, 8, 10);\n break;\n case 15:\n $swap_0(this$static.edge, 5, 10, 6, 11);\n $swap_0(this$static.edgeo, 5, 10, 6, 11);\n circle(this$static.edge, 1, 3);\n circle(this$static.edgeo, 0, 2);\n break;\n case 16:\n $swap_0(this$static.edge, 0, 11, 3, 8);\n $swap_0(this$static.edgeo, 0, 11, 3, 8);\n circle(this$static.edge, 5, 7);\n circle(this$static.edgeo, 4, 6);\n break;\n case 17:\n $swap_0(this$static.edge, 2, 7, 3, 6);\n $swap_0(this$static.edgeo, 2, 7, 3, 6);\n circle(this$static.edge, 8, 10);\n circle(this$static.edgeo, 9, 11);\n break;\n case 18:\n $swap_0(this$static.edge, 4, 8, 7, 9);\n $swap_0(this$static.edgeo, 4, 8, 7, 9);\n circle(this$static.edge, 0, 2);\n circle(this$static.edgeo, 1, 3);\n break;\n case 19:\n $swap_0(this$static.edge, 1, 9, 2, 10);\n $swap_0(this$static.edgeo, 1, 9, 2, 10);\n circle(this$static.edge, 4, 6);\n circle(this$static.edgeo, 5, 7);\n }\n}\nfunction $rot_1(this$static, r2) {\n this$static.isStd = false;\n switch (r2) {\n case 0:\n $move_4(this$static, 14);\n $move_4(this$static, 17);\n break;\n case 1:\n $circlex(this$static, 11, 5, 10, 6);\n $circlex(this$static, 5, 10, 6, 11);\n $circlex(this$static, 1, 2, 3, 0);\n $circlex(this$static, 4, 9, 7, 8);\n $circlex(this$static, 8, 4, 9, 7);\n $circlex(this$static, 0, 1, 2, 3);\n break;\n case 2:\n $swapx(this$static, 4, 5);\n $swapx(this$static, 5, 4);\n $swapx(this$static, 11, 8);\n $swapx(this$static, 8, 11);\n $swapx(this$static, 7, 6);\n $swapx(this$static, 6, 7);\n $swapx(this$static, 9, 10);\n $swapx(this$static, 10, 9);\n $swapx(this$static, 1, 1);\n $swapx(this$static, 0, 0);\n $swapx(this$static, 3, 3);\n $swapx(this$static, 2, 2);\n }\n}\nfunction $rotate_0(this$static, r2) {\n while (r2 >= 2) {\n r2 -= 2;\n $rot_1(this$static, 1);\n $rot_1(this$static, 2);\n }\n r2 !== 0 && $rot_1(this$static, 0);\n}\nfunction $set_4(this$static, idx) {\n var i_0, p_0, parity, v, vall, valh;\n vall = 1985229328;\n valh = 47768;\n parity = 0;\n for (i_0 = 0; i_0 < 11; ++i_0) {\n p_0 = factX[11 - i_0];\n v = ~~(idx / p_0);\n idx = idx % p_0;\n parity ^= v;\n v <<= 2;\n if (v >= 32) {\n v = v - 32;\n this$static.edge[i_0] = valh >> v & 15;\n var m = (1 << v) - 1;\n valh = (valh & m) + (valh >> 4 & ~m);\n } else {\n this$static.edge[i_0] = vall >> v & 15;\n var m = (1 << v) - 1;\n vall = (vall & m) + (vall >>> 4 & ~m) + (valh << 28);\n valh = valh >> 4;\n }\n }\n if ((parity & 1) === 0) {\n this$static.edge[11] = vall;\n } else {\n this$static.edge[11] = this$static.edge[10];\n this$static.edge[10] = vall;\n }\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edgeo[i_0] = i_0;\n }\n this$static.isStd = true;\n}\nfunction $set_5(this$static, e) {\n var i_0;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edge[i_0] = e.edge[i_0];\n this$static.edgeo[i_0] = e.edgeo[i_0];\n }\n this$static.isStd = e.isStd;\n}\nfunction $set_6(this$static, c) {\n var i_0, parity, s, t;\n this$static.temp === null && (this$static.temp = createArray(12));\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.temp[i_0] = i_0;\n this$static.edge[i_0] = c.ep[FullEdgeMap[i_0] + 12] % 12;\n }\n parity = 1;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n while (this$static.edge[i_0] !== i_0) {\n t = this$static.edge[i_0];\n this$static.edge[i_0] = this$static.edge[t];\n this$static.edge[t] = t;\n s = this$static.temp[i_0];\n this$static.temp[i_0] = this$static.temp[t];\n this$static.temp[t] = s;\n parity ^= 1;\n }\n }\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edge[i_0] = this$static.temp[c.ep[FullEdgeMap[i_0]] % 12];\n }\n return parity;\n}\nfunction $std(this$static) {\n var i_0;\n this$static.temp === null && (this$static.temp = createArray(12));\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.temp[this$static.edgeo[i_0]] = i_0;\n }\n for (i_0 = 0; i_0 < 12; ++i_0) {\n this$static.edge[i_0] = this$static.temp[this$static.edge[i_0]];\n this$static.edgeo[i_0] = i_0;\n }\n this$static.isStd = true;\n}\nfunction $swap_0(arr, a, b, c, d2) {\n var temp;\n temp = arr[a];\n arr[a] = arr[c];\n arr[c] = temp;\n temp = arr[b];\n arr[b] = arr[d2];\n arr[d2] = temp;\n}\nfunction $swapx(this$static, x, y) {\n var temp;\n temp = this$static.edge[x];\n this$static.edge[x] = this$static.edgeo[y];\n this$static.edgeo[y] = temp;\n}\nfunction Edge3_0() {\n this.edge = createArray(12);\n this.edgeo = createArray(12);\n}\nfunction createPrun_0() {\n var chk, cord1, cord1x, cord2, cord2x, dep1m3, depm3, depth, e, end, f, find_0, g, i_0, i_, idx, idxx, inv, j, m_0, symState, symcord1, symcord1x, symx, val;\n e = new Edge3_0();\n f = new Edge3_0();\n g = new Edge3_0();\n fill_0(eprun);\n depth = 0;\n done_0 = 1;\n setPruning_0(eprun, 0, 0);\n while (done_0 !== 31006080) {\n inv = depth > 9;\n depm3 = depth % 3;\n dep1m3 = (depth + 1) % 3;\n find_0 = inv ? 3 : depm3;\n chk = inv ? depm3 : 3;\n if (depth >= 9) {\n break;\n }\n for (i_ = 0; i_ < 31006080; i_ += 16) {\n val = eprun[~~i_ >> 4];\n if (!inv && val === -1) {\n continue;\n }\n for (i_0 = i_, end = i_ + 16; i_0 < end; ++i_0, val >>= 2) {\n if ((val & 3) !== find_0) {\n continue;\n }\n symcord1 = ~~(i_0 / 20160);\n cord1 = sym2raw_0[symcord1];\n cord2 = i_0 % 20160;\n $set_4(e, cord1 * 20160 + cord2);\n for (m_0 = 0; m_0 < 17; ++m_0) {\n cord1x = getmvrot(e.edge, m_0 << 3, 4);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n cord2x = getmvrot(e.edge, m_0 << 3 | symx, 10) % 20160;\n idx = symcord1x * 20160 + cord2x;\n if (getPruning_0(eprun, idx) !== chk) {\n continue;\n }\n setPruning_0(eprun, inv ? i_0 : idx, dep1m3);\n ++done_0;\n if (inv) {\n break;\n }\n symState = symstate[symcord1x];\n if (symState === 1) {\n continue;\n }\n $set_5(f, e);\n $move_4(f, m_0);\n $rotate_0(f, symx);\n for (j = 1; (symState = ~~symState >> 1 & 65535) !== 0; ++j) {\n if ((symState & 1) !== 1) {\n continue;\n }\n $set_5(g, f);\n $rotate_0(g, j);\n idxx = symcord1x * 20160 + $get_2(g, 10) % 20160;\n if (getPruning_0(eprun, idxx) === chk) {\n setPruning_0(eprun, idxx, dep1m3);\n ++done_0;\n }\n }\n }\n }\n }\n ++depth;\n }\n}\nfunction getPruning_0(table, index) {\n return table[index >> 4] >> ((index & 15) << 1) & 3;\n}\nfunction getmvrot(ep, mrIdx, end) {\n var i_0, idx, mov, movo, v, valh, vall;\n movo = mvroto[mrIdx];\n mov = mvrot[mrIdx];\n idx = 0;\n vall = 1985229328;\n valh = 47768;\n for (i_0 = 0; i_0 < end; ++i_0) {\n v = movo[ep[mov[i_0]]] << 2;\n idx *= 12 - i_0;\n if (v >= 32) {\n idx += valh >> v - 32 & 15;\n valh -= 4368 << v - 32;\n } else {\n idx += vall >> v & 15;\n valh -= 4369;\n vall -= 286331152 << v;\n }\n }\n return idx;\n}\nfunction getprun(edge) {\n var cord1, cord1x, cord2, cord2x, depm3, depth, e, idx, m_0, symcord1, symcord1x, symx;\n e = new Edge3_0();\n depth = 0;\n depm3 = getPruning_0(eprun, edge);\n if (depm3 === 3) {\n return 10;\n }\n while (edge !== 0) {\n depm3 === 0 ? depm3 = 2 : --depm3;\n symcord1 = ~~(edge / 20160);\n cord1 = sym2raw_0[symcord1];\n cord2 = edge % 20160;\n $set_4(e, cord1 * 20160 + cord2);\n for (m_0 = 0; m_0 < 17; ++m_0) {\n cord1x = getmvrot(e.edge, m_0 << 3, 4);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n cord2x = getmvrot(e.edge, m_0 << 3 | symx, 10) % 20160;\n idx = symcord1x * 20160 + cord2x;\n if (getPruning_0(eprun, idx) === depm3) {\n ++depth;\n edge = idx;\n break;\n }\n }\n }\n return depth;\n}\nfunction getprun_0(edge, prun) {\n var depm3;\n depm3 = getPruning_0(eprun, edge);\n if (depm3 === 3) {\n return 10;\n }\n return (1227133513 << depm3 >> prun & 3) + prun - 1;\n}\nfunction initMvrot() {\n var e, i_0, m_0, r2;\n e = new Edge3_0();\n for (m_0 = 0; m_0 < 20; ++m_0) {\n for (r2 = 0; r2 < 8; ++r2) {\n $set_4(e, 0);\n $move_4(e, m_0);\n $rotate_0(e, r2);\n for (i_0 = 0; i_0 < 12; ++i_0) {\n mvrot[m_0 << 3 | r2][i_0] = e.edge[i_0];\n }\n $std(e);\n for (i_0 = 0; i_0 < 12; ++i_0) {\n mvroto[m_0 << 3 | r2][i_0] = e.temp[i_0];\n }\n }\n }\n}\nfunction initRaw2Sym() {\n var count, e, i_0, idx, j, occ;\n e = new Edge3_0();\n occ = createArray(1485);\n for (i_0 = 0; i_0 < 1485; i_0++) {\n occ[i_0] = 0;\n }\n count = 0;\n for (i_0 = 0; i_0 < 11880; ++i_0) {\n if ((occ[~~i_0 >>> 3] & 1 << (i_0 & 7)) === 0) {\n $set_4(e, i_0 * factX[8]);\n for (j = 0; j < 8; ++j) {\n idx = $get_2(e, 4);\n idx === i_0 && (symstate[count] = (symstate[count] | 1 << j) & 65535);\n occ[~~idx >> 3] = occ[~~idx >> 3] | 1 << (idx & 7);\n raw2sym_1[idx] = count << 3 | syminv_0[j];\n $rot_1(e, 0);\n if (j % 2 === 1) {\n $rot_1(e, 1);\n $rot_1(e, 2);\n }\n }\n sym2raw_0[count++] = i_0;\n }\n }\n}\nfunction setPruning_0(table, index, value) {\n table[index >> 4] ^= (3 ^ value) << ((index & 15) << 1);\n}\ndefineSeed(158, 1, makeCastMap([Q$Edge3]), Edge3_0);\n_3.isStd = true;\n_3.temp = null;\nvar FullEdgeMap;\nvar done_0 = 0;\nvar eprun;\nvar factX;\nvar mvrot;\nvar mvroto;\nvar prunValues;\nvar raw2sym_1;\nvar sym2raw_0;\nvar syminv_0;\nvar symstate;\nvar ran$clinit_EdgeCube = false;\nfunction $clinit_EdgeCube() {\n if (ran$clinit_EdgeCube) {\n return;\n }\n ran$clinit_EdgeCube = true;\n EdgeColor = [\n [2, 0],\n [5, 0],\n [3, 0],\n [4, 0],\n [3, 1],\n [5, 1],\n [2, 1],\n [4, 1],\n [2, 5],\n [3, 5],\n [3, 4],\n [2, 4]\n ];\n EdgeMap = [\n 19,\n 37,\n 46,\n 10,\n 52,\n 43,\n 25,\n 16,\n 21,\n 50,\n 48,\n 23,\n 7,\n 3,\n 1,\n 5,\n 34,\n 30,\n 28,\n 32,\n 41,\n 39,\n 14,\n 12\n ];\n}\nfunction $checkEdge(this$static) {\n var ck, i_0, parity;\n ck = 0;\n parity = false;\n for (i_0 = 0; i_0 < 12; ++i_0) {\n ck |= 1 << this$static.ep[i_0];\n parity = parity !== this$static.ep[i_0] >= 12;\n }\n ck &= ~~ck >> 12;\n return ck === 0 && !parity;\n}\nfunction $copy_3(this$static, c) {\n var i_0;\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this$static.ep[i_0] = c.ep[i_0];\n }\n}\nfunction $move_5(this$static, m_0) {\n var key;\n key = m_0 % 3;\n m_0 = ~~(m_0 / 3);\n switch (m_0) {\n case 0:\n swap(this$static.ep, 0, 1, 2, 3, key);\n swap(this$static.ep, 12, 13, 14, 15, key);\n break;\n case 1:\n swap(this$static.ep, 11, 15, 10, 19, key);\n swap(this$static.ep, 23, 3, 22, 7, key);\n break;\n case 2:\n swap(this$static.ep, 0, 11, 6, 8, key);\n swap(this$static.ep, 12, 23, 18, 20, key);\n break;\n case 3:\n swap(this$static.ep, 4, 5, 6, 7, key);\n swap(this$static.ep, 16, 17, 18, 19, key);\n break;\n case 4:\n swap(this$static.ep, 1, 20, 5, 21, key);\n swap(this$static.ep, 13, 8, 17, 9, key);\n break;\n case 5:\n swap(this$static.ep, 2, 9, 4, 10, key);\n swap(this$static.ep, 14, 21, 16, 22, key);\n break;\n case 6:\n swap(this$static.ep, 0, 1, 2, 3, key);\n swap(this$static.ep, 12, 13, 14, 15, key);\n swap(this$static.ep, 9, 22, 11, 20, key);\n break;\n case 7:\n swap(this$static.ep, 11, 15, 10, 19, key);\n swap(this$static.ep, 23, 3, 22, 7, key);\n swap(this$static.ep, 2, 16, 6, 12, key);\n break;\n case 8:\n swap(this$static.ep, 0, 11, 6, 8, key);\n swap(this$static.ep, 12, 23, 18, 20, key);\n swap(this$static.ep, 3, 19, 5, 13, key);\n break;\n case 9:\n swap(this$static.ep, 4, 5, 6, 7, key);\n swap(this$static.ep, 16, 17, 18, 19, key);\n swap(this$static.ep, 8, 23, 10, 21, key);\n break;\n case 10:\n swap(this$static.ep, 1, 20, 5, 21, key);\n swap(this$static.ep, 13, 8, 17, 9, key);\n swap(this$static.ep, 14, 0, 18, 4, key);\n break;\n case 11:\n swap(this$static.ep, 2, 9, 4, 10, key);\n swap(this$static.ep, 14, 21, 16, 22, key);\n swap(this$static.ep, 7, 15, 1, 17, key);\n }\n}\nfunction EdgeCube_0() {\n var i_0;\n this.ep = createArray(24);\n for (i_0 = 0; i_0 < 24; ++i_0) {\n this.ep[i_0] = i_0;\n }\n}\nfunction EdgeCube_1(randomUIntBelow2) {\n var i_0, m_0, t;\n EdgeCube_0.call(this);\n for (i_0 = 0; i_0 < 23; ++i_0) {\n t = i_0 + randomUIntBelow2(24 - i_0);\n if (t !== i_0) {\n m_0 = this.ep[i_0];\n this.ep[i_0] = this.ep[t];\n this.ep[t] = m_0;\n }\n }\n}\ndefineSeed(159, 1, {}, EdgeCube_0, EdgeCube_1);\nvar EdgeColor;\nvar EdgeMap;\nvar ran$clinit_FullCube_0 = false;\nfunction $clinit_FullCube_0() {\n if (ran$clinit_FullCube_0) {\n return;\n }\n ran$clinit_FullCube_0 = true;\n move2rot = [35, 1, 34, 2, 4, 6, 22, 5, 19];\n}\nfunction $$init_3(this$static) {\n this$static.moveBuffer = createArray(60);\n}\nfunction $compareTo_1(this$static, c) {\n return this$static.value - c.value;\n}\nfunction $copy_4(this$static, c) {\n var i_0;\n $copy_3(this$static.edge, c.edge);\n $copy_1(this$static.center, c.center);\n $copy_2(this$static.corner, c.corner);\n this$static.value = c.value;\n this$static.add1 = c.add1;\n this$static.length1 = c.length1;\n this$static.length2 = c.length2;\n this$static.length3 = c.length3;\n this$static.sym = c.sym;\n for (i_0 = 0; i_0 < 60; ++i_0) {\n this$static.moveBuffer[i_0] = c.moveBuffer[i_0];\n }\n this$static.moveLength = c.moveLength;\n this$static.edgeAvail = c.edgeAvail;\n this$static.centerAvail = c.centerAvail;\n this$static.cornerAvail = c.cornerAvail;\n}\nfunction $getCenter(this$static) {\n while (this$static.centerAvail < this$static.moveLength) {\n $move_2(this$static.center, this$static.moveBuffer[this$static.centerAvail++]);\n }\n return this$static.center;\n}\nfunction $getCorner(this$static) {\n while (this$static.cornerAvail < this$static.moveLength) {\n $move_3(this$static.corner, this$static.moveBuffer[this$static.cornerAvail++] % 18);\n }\n return this$static.corner;\n}\nfunction $getEdge(this$static) {\n while (this$static.edgeAvail < this$static.moveLength) {\n $move_5(this$static.edge, this$static.moveBuffer[this$static.edgeAvail++]);\n }\n return this$static.edge;\n}\nfunction $getMoveString(this$static) {\n var finishSym, fixedMoves, i_0, idx, move, rot, sb, sym;\n fixedMoves = new Array(this$static.moveLength - (this$static.add1 ? 2 : 0));\n idx = 0;\n for (i_0 = 0; i_0 < this$static.length1; ++i_0) {\n fixedMoves[idx++] = this$static.moveBuffer[i_0];\n }\n sym = this$static.sym;\n for (i_0 = this$static.length1 + (this$static.add1 ? 2 : 0); i_0 < this$static.moveLength; ++i_0) {\n if (symmove[sym][this$static.moveBuffer[i_0]] >= 27) {\n fixedMoves[idx++] = symmove[sym][this$static.moveBuffer[i_0]] - 9;\n rot = move2rot[symmove[sym][this$static.moveBuffer[i_0]] - 27];\n sym = symmult[sym][rot];\n } else {\n fixedMoves[idx++] = symmove[sym][this$static.moveBuffer[i_0]];\n }\n }\n finishSym = symmult[syminv[sym]][getSolvedSym($getCenter(this$static))];\n sb = \"\";\n sym = finishSym;\n for (i_0 = idx - 1; i_0 >= 0; --i_0) {\n move = fixedMoves[i_0];\n move = ~~(move / 3) * 3 + (2 - move % 3);\n if (symmove[sym][move] >= 27) {\n sb = sb + move2str_1[symmove[sym][move] - 9] + \" \";\n rot = move2rot[symmove[sym][move] - 27];\n sym = symmult[sym][rot];\n } else {\n sb = sb + move2str_1[symmove[sym][move]] + \" \";\n }\n }\n return sb;\n}\nfunction $move_6(this$static, m_0) {\n this$static.moveBuffer[this$static.moveLength++] = m_0;\n return;\n}\nfunction FullCube_3() {\n $$init_3(this);\n this.edge = new EdgeCube_0();\n this.center = new CenterCube_0();\n this.corner = new CornerCube_0();\n}\nfunction FullCube_4(c) {\n FullCube_3.call(this);\n $copy_4(this, c);\n}\nfunction FullCube_5(randomUIntBelow2) {\n $$init_3(this);\n this.edge = new EdgeCube_1(randomUIntBelow2);\n this.center = new CenterCube_1(randomUIntBelow2);\n this.corner = new CornerCube_2(randomUIntBelow2);\n}\ndefineSeed(160, 1, makeCastMap([Q$FullCube_0, Q$Comparable]), FullCube_3, FullCube_4, FullCube_5);\n_3.compareTo$ = function compareTo_1(c) {\n return $compareTo_1(this, c);\n};\n_3.add1 = false;\n_3.center = null;\n_3.centerAvail = 0;\n_3.corner = null;\n_3.cornerAvail = 0;\n_3.edge = null;\n_3.edgeAvail = 0;\n_3.length1 = 0;\n_3.length2 = 0;\n_3.length3 = 0;\n_3.moveLength = 0;\n_3.sym = 0;\n_3.value = 0;\nvar move2rot;\nfunction $compare(c1, c2) {\n return c2.value - c1.value;\n}\nfunction $compare_0(c1, c2) {\n return $compare(c1, c2);\n}\nfunction FullCube$ValueComparator_0() {\n}\ndefineSeed(161, 1, {}, FullCube$ValueComparator_0);\n_3.compare = function compare(c1, c2) {\n return $compare_0(c1, c2);\n};\nvar ran$clinit_Moves = false;\nfunction $clinit_Moves() {\n if (ran$clinit_Moves) {\n return;\n }\n ran$clinit_Moves = true;\n var i_0, j;\n move2str_1 = [\n \"U \",\n \"U2 \",\n \"U' \",\n \"R \",\n \"R2 \",\n \"R' \",\n \"F \",\n \"F2 \",\n \"F' \",\n \"D \",\n \"D2 \",\n \"D' \",\n \"L \",\n \"L2 \",\n \"L' \",\n \"B \",\n \"B2 \",\n \"B' \",\n \"Uw \",\n \"Uw2\",\n \"Uw'\",\n \"Rw \",\n \"Rw2\",\n \"Rw'\",\n \"Fw \",\n \"Fw2\",\n \"Fw'\",\n \"Dw \",\n \"Dw2\",\n \"Dw'\",\n \"Lw \",\n \"Lw2\",\n \"Lw'\",\n \"Bw \",\n \"Bw2\",\n \"Bw'\"\n ];\n move2std = [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 19,\n 21,\n 22,\n 23,\n 25,\n 28,\n 30,\n 31,\n 32,\n 34,\n 36\n ];\n move3std = [\n 0,\n 1,\n 2,\n 4,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 13,\n 15,\n 16,\n 17,\n 19,\n 22,\n 25,\n 28,\n 31,\n 34,\n 36\n ];\n std2move = createArray(37);\n std3move = createArray(37);\n ckmv = createArray(37, 36);\n ckmv2_0 = createArray(29, 28);\n ckmv3 = createArray(21, 20);\n skipAxis = createArray(36);\n skipAxis2 = createArray(28);\n skipAxis3 = createArray(20);\n for (i_0 = 0; i_0 < 29; ++i_0) {\n std2move[move2std[i_0]] = i_0;\n }\n for (i_0 = 0; i_0 < 21; ++i_0) {\n std3move[move3std[i_0]] = i_0;\n }\n for (i_0 = 0; i_0 < 36; ++i_0) {\n for (j = 0; j < 36; ++j) {\n ckmv[i_0][j] = ~~(i_0 / 3) === ~~(j / 3) || ~~(i_0 / 3) % 3 === ~~(j / 3) % 3 && i_0 > j;\n }\n ckmv[36][i_0] = false;\n }\n for (i_0 = 0; i_0 < 29; ++i_0) {\n for (j = 0; j < 28; ++j) {\n ckmv2_0[i_0][j] = ckmv[move2std[i_0]][move2std[j]];\n }\n }\n for (i_0 = 0; i_0 < 21; ++i_0) {\n for (j = 0; j < 20; ++j) {\n ckmv3[i_0][j] = ckmv[move3std[i_0]][move3std[j]];\n }\n }\n for (i_0 = 0; i_0 < 36; ++i_0) {\n skipAxis[i_0] = 36;\n for (j = i_0; j < 36; ++j) {\n if (!ckmv[i_0][j]) {\n skipAxis[i_0] = j - 1;\n break;\n }\n }\n }\n for (i_0 = 0; i_0 < 28; ++i_0) {\n skipAxis2[i_0] = 28;\n for (j = i_0; j < 28; ++j) {\n if (!ckmv2_0[i_0][j]) {\n skipAxis2[i_0] = j - 1;\n break;\n }\n }\n }\n for (i_0 = 0; i_0 < 20; ++i_0) {\n skipAxis3[i_0] = 20;\n for (j = i_0; j < 20; ++j) {\n if (!ckmv3[i_0][j]) {\n skipAxis3[i_0] = j - 1;\n break;\n }\n }\n }\n}\nvar ckmv;\nvar ckmv2_0;\nvar ckmv3;\nvar move2std;\nvar move2str_1;\nvar move3std;\nvar skipAxis;\nvar skipAxis2;\nvar skipAxis3;\nvar std2move;\nvar std3move;\nfunction $doSearch(this$static) {\n var MAX_LENGTH2, MAX_LENGTH3, ct, edge, eparity, fb, fbprun, i_0, index, length_0, length12, length123, p1SolsArr, prun, rl, rlprun, s2ct, s2rl, solcube, ud, udprun;\n this$static.solution = \"\";\n ud = $getsym(new Center1_1($getCenter(this$static.c), 0));\n fb = $getsym(new Center1_1($getCenter(this$static.c), 1));\n rl = $getsym(new Center1_1($getCenter(this$static.c), 2));\n udprun = csprun[~~ud >> 6];\n fbprun = csprun[~~fb >> 6];\n rlprun = csprun[~~rl >> 6];\n this$static.p1SolsCnt = 0;\n this$static.arr2idx = 0;\n $clear(this$static.p1sols.heap);\n for (this$static.length1 = (udprun < fbprun ? udprun : fbprun) < rlprun ? udprun < fbprun ? udprun : fbprun : rlprun; this$static.length1 < 100; ++this$static.length1) {\n if (rlprun <= this$static.length1 && $search1(this$static, ~~rl >>> 6, rl & 63, this$static.length1, -1, 0) || udprun <= this$static.length1 && $search1(this$static, ~~ud >>> 6, ud & 63, this$static.length1, -1, 0) || fbprun <= this$static.length1 && $search1(this$static, ~~fb >>> 6, fb & 63, this$static.length1, -1, 0)) {\n break;\n }\n }\n p1SolsArr = $toArray_1(this$static.p1sols, initDim2(_3Lcs_threephase_FullCube_2_classLit, makeCastMap([Q$FullCube_$1, Q$Serializable, Q$Object_$1]), Q$FullCube_0, 0, 0));\n p1SolsArr.sort(function(a, b) {\n return a.value - b.value;\n });\n MAX_LENGTH2 = 9;\n do {\n OUT:\n for (length12 = p1SolsArr[0].value; length12 < 100; ++length12) {\n for (i_0 = 0; i_0 < p1SolsArr.length; ++i_0) {\n if (p1SolsArr[i_0].value > length12) {\n break;\n }\n if (length12 - p1SolsArr[i_0].length1 > MAX_LENGTH2) {\n continue;\n }\n $copy_4(this$static.c1, p1SolsArr[i_0]);\n $set_2(this$static.ct2, $getCenter(this$static.c1), parity_0($getEdge(this$static.c1).ep));\n s2ct = $getct(this$static.ct2);\n s2rl = $getrl(this$static.ct2);\n this$static.length1 = p1SolsArr[i_0].length1;\n this$static.length2 = length12 - p1SolsArr[i_0].length1;\n if ($search2(this$static, s2ct, s2rl, this$static.length2, 28, 0)) {\n break OUT;\n }\n }\n }\n ++MAX_LENGTH2;\n } while (length12 === 100);\n this$static.arr2.sort(function(a, b) {\n return a.value - b.value;\n });\n index = 0;\n MAX_LENGTH3 = 13;\n do {\n OUT2:\n for (length123 = this$static.arr2[0].value; length123 < 100; ++length123) {\n for (i_0 = 0; i_0 < Math.min(this$static.arr2idx, 100); ++i_0) {\n if (this$static.arr2[i_0].value > length123) {\n break;\n }\n if (length123 - this$static.arr2[i_0].length1 - this$static.arr2[i_0].length2 > MAX_LENGTH3) {\n continue;\n }\n eparity = $set_6(this$static.e12, $getEdge(this$static.arr2[i_0]));\n $set_3(this$static.ct3, $getCenter(this$static.arr2[i_0]), eparity ^ parity_0($getCorner(this$static.arr2[i_0]).cp));\n ct = $getct_0(this$static.ct3);\n edge = $get_2(this$static.e12, 10);\n prun = getprun($getsym_0(this$static.e12));\n if (prun <= length123 - this$static.arr2[i_0].length1 - this$static.arr2[i_0].length2 && $search3(this$static, edge, ct, prun, length123 - this$static.arr2[i_0].length1 - this$static.arr2[i_0].length2, 20, 0)) {\n index = i_0;\n break OUT2;\n }\n }\n }\n ++MAX_LENGTH3;\n } while (length123 === 100);\n solcube = new FullCube_4(this$static.arr2[index]);\n this$static.length1 = solcube.length1;\n this$static.length2 = solcube.length2;\n length_0 = length123 - this$static.length1 - this$static.length2;\n for (i_0 = 0; i_0 < length_0; ++i_0) {\n $move_6(solcube, move3std[this$static.move3[i_0]]);\n }\n this$static.solution = $getMoveString(solcube);\n}\nfunction $init2_0(this$static, sym) {\n var ctp, i_0, next, s2ct, s2rl;\n $copy_4(this$static.c1, this$static.c);\n for (i_0 = 0; i_0 < this$static.length1; ++i_0) {\n $move_6(this$static.c1, this$static.move1[i_0]);\n }\n switch (finish_0[sym]) {\n case 0:\n $move_6(this$static.c1, 24);\n $move_6(this$static.c1, 35);\n this$static.move1[this$static.length1] = 24;\n this$static.move1[this$static.length1 + 1] = 35;\n this$static.add1 = true;\n sym = 19;\n break;\n case 12869:\n $move_6(this$static.c1, 18);\n $move_6(this$static.c1, 29);\n this$static.move1[this$static.length1] = 18;\n this$static.move1[this$static.length1 + 1] = 29;\n this$static.add1 = true;\n sym = 34;\n break;\n case 735470:\n this$static.add1 = false;\n sym = 0;\n }\n $set_2(this$static.ct2, $getCenter(this$static.c1), parity_0($getEdge(this$static.c1).ep));\n s2ct = $getct(this$static.ct2);\n s2rl = $getrl(this$static.ct2);\n ctp = ctprun[s2ct * 70 + s2rl];\n this$static.c1.value = ctp + this$static.length1;\n this$static.c1.length1 = this$static.length1;\n this$static.c1.add1 = this$static.add1;\n this$static.c1.sym = sym;\n ++this$static.p1SolsCnt;\n if (this$static.p1sols.heap.size < 500) {\n next = new FullCube_4(this$static.c1);\n } else {\n next = $poll(this$static.p1sols);\n next.value > this$static.c1.value && $copy_4(next, this$static.c1);\n }\n $add(this$static.p1sols, next);\n return this$static.p1SolsCnt === 1e4;\n}\nfunction $init3(this$static) {\n var ct, eparity, i_0, prun;\n $copy_4(this$static.c2, this$static.c1);\n for (i_0 = 0; i_0 < this$static.length2; ++i_0) {\n $move_6(this$static.c2, this$static.move2[i_0]);\n }\n if (!$checkEdge($getEdge(this$static.c2))) {\n return false;\n }\n eparity = $set_6(this$static.e12, $getEdge(this$static.c2));\n $set_3(this$static.ct3, $getCenter(this$static.c2), eparity ^ parity_0($getCorner(this$static.c2).cp));\n ct = $getct_0(this$static.ct3);\n $get_2(this$static.e12, 10);\n prun = getprun($getsym_0(this$static.e12));\n !this$static.arr2[this$static.arr2idx] ? this$static.arr2[this$static.arr2idx] = new FullCube_4(this$static.c2) : $copy_4(this$static.arr2[this$static.arr2idx], this$static.c2);\n this$static.arr2[this$static.arr2idx].value = this$static.length1 + this$static.length2 + Math.max(prun, prun_0[ct]);\n this$static.arr2[this$static.arr2idx].length2 = this$static.length2;\n ++this$static.arr2idx;\n return this$static.arr2idx === this$static.arr2.length;\n}\nfunction $randomState(this$static, randomUIntBelow2) {\n init_5();\n this$static.c = new FullCube_5(randomUIntBelow2);\n $doSearch(this$static);\n return this$static.solution;\n}\nfunction $search1(this$static, ct, sym, maxl, lm, depth) {\n var axis, ctx, m_0, power, prun, symx;\n if (ct === 0) {\n return maxl === 0 && $init2_0(this$static, sym);\n }\n for (axis = 0; axis < 27; axis += 3) {\n if (axis === lm || axis === lm - 9 || axis === lm - 18) {\n continue;\n }\n for (power = 0; power < 3; ++power) {\n m_0 = axis + power;\n ctx = ctsmv[ct][symmove[sym][m_0]];\n prun = csprun[~~ctx >>> 6];\n if (prun >= maxl) {\n if (prun > maxl) {\n break;\n }\n continue;\n }\n symx = symmult[sym][ctx & 63];\n ctx >>>= 6;\n this$static.move1[depth] = m_0;\n if ($search1(this$static, ctx, symx, maxl - 1, axis, depth + 1)) {\n return true;\n }\n }\n }\n return false;\n}\nfunction $search2(this$static, ct, rl, maxl, lm, depth) {\n var ctx, m_0, prun, rlx;\n if (ct === 0 && ctprun[rl] === 0) {\n return maxl === 0 && $init3(this$static);\n }\n for (m_0 = 0; m_0 < 23; ++m_0) {\n if (ckmv2_0[lm][m_0]) {\n m_0 = skipAxis2[m_0];\n continue;\n }\n ctx = ctmv[ct][m_0];\n rlx = rlmv[rl][m_0];\n prun = ctprun[ctx * 70 + rlx];\n if (prun >= maxl) {\n prun > maxl && (m_0 = skipAxis2[m_0]);\n continue;\n }\n this$static.move2[depth] = move2std[m_0];\n if ($search2(this$static, ctx, rlx, maxl - 1, m_0, depth + 1)) {\n return true;\n }\n }\n return false;\n}\nfunction $search3(this$static, edge, ct, prun, maxl, lm, depth) {\n var cord1x, cord2x, ctx, edgex, m_0, prun1, prunx, symcord1x, symx;\n if (maxl === 0) {\n return edge === 0 && ct === 0;\n }\n $set_4(this$static.tempe[depth], edge);\n for (m_0 = 0; m_0 < 17; ++m_0) {\n if (ckmv3[lm][m_0]) {\n m_0 = skipAxis3[m_0];\n continue;\n }\n ctx = ctmove[ct][m_0];\n prun1 = prun_0[ctx];\n if (prun1 >= maxl) {\n prun1 > maxl && m_0 < 14 && (m_0 = skipAxis3[m_0]);\n continue;\n }\n edgex = getmvrot(this$static.tempe[depth].edge, m_0 << 3, 10);\n cord1x = ~~(edgex / 20160);\n symcord1x = raw2sym_1[cord1x];\n symx = symcord1x & 7;\n symcord1x >>= 3;\n cord2x = getmvrot(this$static.tempe[depth].edge, m_0 << 3 | symx, 10) % 20160;\n prunx = getprun_0(symcord1x * 20160 + cord2x, prun);\n if (prunx >= maxl) {\n prunx > maxl && m_0 < 14 && (m_0 = skipAxis3[m_0]);\n continue;\n }\n if ($search3(this$static, edgex, ctx, prunx, maxl - 1, m_0, depth + 1)) {\n this$static.move3[depth] = m_0;\n return true;\n }\n }\n return false;\n}\nfunction Search_4() {\n var i_0;\n this.p1sols = new PriorityQueue_0(new FullCube$ValueComparator_0());\n this.move1 = createArray(15);\n this.move2 = createArray(20);\n this.move3 = createArray(20);\n this.c1 = new FullCube_3();\n this.c2 = new FullCube_3();\n this.ct2 = new Center2_0();\n this.ct3 = new Center3_0();\n this.e12 = new Edge3_0();\n this.tempe = createArray(20);\n this.arr2 = createArray(100);\n for (i_0 = 0; i_0 < 20; ++i_0) {\n this.tempe[i_0] = new Edge3_0();\n }\n}\nfunction init_5() {\n if (inited_2) {\n return;\n }\n initSym_0();\n raw2sym = createArray(735471);\n initSym2Raw2();\n createMoveTable();\n raw2sym = null;\n createPrun2();\n init_3();\n init_4();\n initMvrot();\n initRaw2Sym();\n createPrun_0();\n inited_2 = true;\n}\ndefineSeed(163, 1, makeCastMap([Q$Search_0]), Search_4);\n_3.add1 = false;\n_3.arr2idx = 0;\n_3.c = null;\n_3.length1 = 0;\n_3.length2 = 0;\n_3.p1SolsCnt = 0;\n_3.solution = \"\";\nvar inited_2 = false;\nvar ran$clinit_Util_0 = false;\nfunction $clinit_Util_0() {\n if (ran$clinit_Util_0) {\n return;\n }\n ran$clinit_Util_0 = true;\n colorMap4to3 = [85, 68, 70, 66, 82, 76];\n}\nfunction parity_0(arr) {\n var i_0, j, len, parity;\n parity = 0;\n for (i_0 = 0, len = arr.length; i_0 < len; ++i_0) {\n for (j = i_0; j < len; ++j) {\n arr[i_0] > arr[j] && (parity ^= 1);\n }\n }\n return parity;\n}\nfunction swap(arr, a, b, c, d2, key) {\n var temp;\n switch (key) {\n case 0:\n temp = arr[d2];\n arr[d2] = arr[c];\n arr[c] = arr[b];\n arr[b] = arr[a];\n arr[a] = temp;\n return;\n case 1:\n temp = arr[a];\n arr[a] = arr[c];\n arr[c] = temp;\n temp = arr[b];\n arr[b] = arr[d2];\n arr[d2] = temp;\n return;\n case 2:\n temp = arr[a];\n arr[a] = arr[b];\n arr[b] = arr[c];\n arr[c] = arr[d2];\n arr[d2] = temp;\n return;\n }\n}\nvar colorMap4to3;\nfunction Class_0() {\n}\nfunction createForArray(packageName, className, seedId, componentType) {\n var clazz;\n clazz = new Class_0();\n clazz.typeName = packageName + className;\n isInstantiable(seedId !== 0 ? -seedId : 0) && setClassLiteral(seedId !== 0 ? -seedId : 0, clazz);\n clazz.modifiers = 4;\n clazz.superclass = Ljava_lang_Object_2_classLit;\n clazz.componentType = componentType;\n return clazz;\n}\nfunction createForClass2(packageName, className, seedId, superclass) {\n var clazz;\n clazz = new Class_0();\n clazz.typeName = packageName + className;\n isInstantiable(seedId) && setClassLiteral(seedId, clazz);\n clazz.superclass = superclass;\n return clazz;\n}\nfunction getSeedFunction(clazz) {\n var func = seedTable[clazz.seedId];\n clazz = null;\n return func;\n}\nfunction isInstantiable(seedId) {\n return typeof seedId === \"number\" && seedId > 0;\n}\nfunction setClassLiteral(seedId, clazz) {\n var proto;\n clazz.seedId = seedId;\n if (seedId === 2) {\n proto = String.prototype;\n } else {\n if (seedId > 0) {\n var seed = getSeedFunction(clazz);\n if (seed) {\n proto = seed.prototype;\n } else {\n seed = seedTable[seedId] = function() {\n };\n seed.___clazz$ = clazz;\n return;\n }\n } else {\n return;\n }\n }\n proto.___clazz$ = clazz;\n}\n_3.val$outerIter = null;\nfunction $add(this$static, o2) {\n if ($offer(this$static, o2)) {\n return true;\n }\n}\nfunction $$init_6(this$static) {\n this$static.array = initDim2(_3Ljava_lang_Object_2_classLit, makeCastMap([Q$Serializable, Q$Object_$1]), Q$Object, 0, 0);\n}\nfunction $add_0(this$static, o2) {\n setCheck(this$static.array, this$static.size++, o2);\n return true;\n}\nfunction $clear(this$static) {\n this$static.array = initDim2(_3Ljava_lang_Object_2_classLit, makeCastMap([Q$Serializable, Q$Object_$1]), Q$Object, 0, 0);\n this$static.size = 0;\n}\nfunction $get_4(this$static, index) {\n return this$static.array[index];\n}\nfunction $remove_0(this$static, index) {\n var previous;\n previous = this$static.array[index];\n splice_0(this$static.array, index, 1);\n --this$static.size;\n return previous;\n}\nfunction $set_7(this$static, index, o2) {\n var previous;\n previous = this$static.array[index];\n setCheck(this$static.array, index, o2);\n return previous;\n}\nfunction $toArray_0(this$static, out) {\n var i_0;\n out.length < this$static.size && (out = createFrom(out, this$static.size));\n for (i_0 = 0; i_0 < this$static.size; ++i_0) {\n setCheck(out, i_0, this$static.array[i_0]);\n }\n out.length > this$static.size && setCheck(out, this$static.size, null);\n return out;\n}\nfunction ArrayList_1() {\n $$init_6(this);\n this.array.length = 500;\n}\nfunction splice_0(array, index, deleteCount) {\n array.splice(index, deleteCount);\n}\n_3.size = 0;\nfunction binarySearch_0(sortedArray, key) {\n var high, low, mid, midVal;\n low = 0;\n high = sortedArray.length - 1;\n while (low <= high) {\n mid = low + (~~(high - low) >> 1);\n midVal = sortedArray[mid];\n if (midVal < key) {\n low = mid + 1;\n } else if (midVal > key) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n return -low - 1;\n}\nfunction fill_0(a) {\n fill_1(a, a.length);\n}\nfunction fill_1(a, toIndex) {\n var i_0;\n for (i_0 = 0; i_0 < toIndex; ++i_0) {\n a[i_0] = -1;\n }\n}\nfunction $mergeHeaps(this$static, node) {\n var heapSize, smallestChild, value, leftChild, rightChild, smallestChild_0;\n heapSize = this$static.heap.size;\n value = $get_4(this$static.heap, node);\n while (node * 2 + 1 < heapSize) {\n smallestChild = (leftChild = 2 * node + 1, rightChild = leftChild + 1, smallestChild_0 = leftChild, rightChild < heapSize && $compare_0($get_4(this$static.heap, rightChild), $get_4(this$static.heap, leftChild)) < 0 && (smallestChild_0 = rightChild), smallestChild_0);\n if ($compare_0(value, $get_4(this$static.heap, smallestChild)) < 0) {\n break;\n }\n $set_7(this$static.heap, node, $get_4(this$static.heap, smallestChild));\n node = smallestChild;\n }\n $set_7(this$static.heap, node, value);\n}\nfunction $offer(this$static, e) {\n var childNode, node;\n node = this$static.heap.size;\n $add_0(this$static.heap, e);\n while (node > 0) {\n childNode = node;\n node = ~~((node - 1) / 2);\n if ($compare_0($get_4(this$static.heap, node), e) <= 0) {\n $set_7(this$static.heap, childNode, e);\n return true;\n }\n $set_7(this$static.heap, childNode, $get_4(this$static.heap, node));\n }\n $set_7(this$static.heap, node, e);\n return true;\n}\nfunction $poll(this$static) {\n var value;\n if (this$static.heap.size === 0) {\n return null;\n }\n value = $get_4(this$static.heap, 0);\n $removeAtIndex(this$static);\n return value;\n}\nfunction $removeAtIndex(this$static) {\n var lastValue;\n lastValue = $remove_0(this$static.heap, this$static.heap.size - 1);\n if (0 < this$static.heap.size) {\n $set_7(this$static.heap, 0, lastValue);\n $mergeHeaps(this$static, 0);\n }\n}\nfunction $toArray_1(this$static, a) {\n return $toArray_0(this$static.heap, a);\n}\nfunction PriorityQueue_0(cmp) {\n this.heap = new ArrayList_1();\n this.cmp = cmp;\n}\ndefineSeed(239, 1, {}, PriorityQueue_0);\n_3.cmp = null;\n_3.heap = null;\nvar Ljava_lang_Object_2_classLit = createForClass2(\"java.lang.\", \"Object\", 1, null);\nvar _3Ljava_lang_Object_2_classLit = createForArray(\"[Ljava.lang.\", \"Object;\", 356, Ljava_lang_Object_2_classLit);\nvar Lcs_threephase_FullCube_2_classLit = createForClass2(\"cs.threephase.\", \"FullCube\", 160, Ljava_lang_Object_2_classLit);\nvar _3Lcs_threephase_FullCube_2_classLit = createForArray(\"[Lcs.threephase.\", \"FullCube;\", 381, Lcs_threephase_FullCube_2_classLit);\nvar searcher;\nvar raninit = false;\nfunction init() {\n if (raninit) {\n return;\n }\n raninit = true;\n $clinit_Moves();\n $clinit_Util_0();\n $clinit_Center1();\n $clinit_Center2();\n $clinit_Center3();\n $clinit_Edge3();\n $clinit_CenterCube();\n $clinit_CornerCube();\n $clinit_EdgeCube();\n $clinit_FullCube_0();\n searcher = new Search_4();\n}\nfunction initialize2() {\n init();\n init_5();\n}\nfunction random444Scramble() {\n return __async(this, null, function* () {\n mustBeInsideWorker();\n init();\n const suffix = Alg.fromString($randomState(searcher, yield randomUIntBelowFactory()));\n return (yield random333Scramble()).concat(suffix);\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/4x4x4.ts\nvar randomSuffixes2 = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"]\n];\nfunction random444OrientedScramble() {\n return __async(this, null, function* () {\n return addOrientationSuffix(yield random444Scramble(), randomSuffixes2);\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/megaminx.ts\ninit_megaminx_sgs_json();\nvar TREMBLE_DEPTH2 = 2;\nvar cachedTrembleSolver2 = null;\nfunction getCachedTrembleSolver2() {\n return __async(this, null, function* () {\n return cachedTrembleSolver2 || (cachedTrembleSolver2 = (() => __async(this, null, function* () {\n const sgs = yield Promise.resolve().then(() => (init_megaminx_sgs_json(), megaminx_sgs_json_exports));\n const json = yield sgs.cachedSGSDataMegaminx();\n return new TrembleSolver(yield cachedMegaminxDefWithoutMO(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"BR\",\n \"BL\",\n \"FR\",\n \"FL\",\n \"DR\",\n \"DL\",\n \"B\",\n \"D\"\n ]);\n }))());\n });\n}\nfunction solveMegaminx(state) {\n return __async(this, null, function* () {\n mustBeInsideWorker();\n const trembleSolver = yield getCachedTrembleSolver2();\n const stateWithoutMO = JSON.parse(JSON.stringify(state));\n stateWithoutMO.CENTERS.orientation = new Array(12).fill(0);\n const alg = yield trembleSolver.solve(stateWithoutMO, TREMBLE_DEPTH2, () => 5);\n return alg;\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/pyraminx.ts\ninit_puzzles();\ninit_pyraminx_sgs_json();\nvar TREMBLE_DEPTH3 = 3;\nvar cachedTrembleSolver3 = null;\nfunction getCachedTrembleSolver3() {\n return __async(this, null, function* () {\n return cachedTrembleSolver3 || (cachedTrembleSolver3 = (() => __async(this, null, function* () {\n const sgs = yield Promise.resolve().then(() => (init_pyraminx_sgs_json(), pyraminx_sgs_json_exports));\n const json = yield sgs.sgsDataPyraminx();\n return new TrembleSolver(yield puzzles.pyraminx.def(), json, \"RLUB\".split(\"\"));\n }))());\n });\n}\nfunction solvePyraminx(state) {\n return __async(this, null, function* () {\n mustBeInsideWorker();\n const trembleSolver = yield getCachedTrembleSolver3();\n const alg = yield trembleSolver.solve(state, TREMBLE_DEPTH3, () => 3);\n return alg;\n });\n}\nfunction randomPyraminxStateFixedOrientation() {\n return __async(this, null, function* () {\n return randomStateFromSGS(yield puzzles.pyraminx.def(), yield sgsDataPyraminxFixedOrientation());\n });\n}\nfunction randomPyraminxScrambleFixedOrientation() {\n return __async(this, null, function* () {\n return solvePyraminx(yield randomPyraminxStateFixedOrientation());\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/skewb.ts\ninit_skewb_sgs_json();\nvar TREMBLE_DEPTH4 = 3;\nvar cachedTrembleSolver4 = null;\nfunction getCachedTrembleSolver4() {\n return __async(this, null, function* () {\n return cachedTrembleSolver4 || (cachedTrembleSolver4 = (() => __async(this, null, function* () {\n const sgs = yield Promise.resolve().then(() => (init_skewb_sgs_json(), skewb_sgs_json_exports));\n const json = yield sgs.sgsDataSkewb();\n return new TrembleSolver(yield sgs.skewbDefWithoutMOCached(), json, \"RLUB\".split(\"\"));\n }))());\n });\n}\nfunction resetCenterOrientation(state) {\n return {\n CORNERS: state.CORNERS,\n CENTERS: {\n permutation: state.CENTERS.permutation,\n orientation: new Array(6).fill(0)\n }\n };\n}\nfunction solveSkewb(state) {\n return __async(this, null, function* () {\n mustBeInsideWorker();\n const trembleSolver = yield getCachedTrembleSolver4();\n const alg = yield trembleSolver.solve(resetCenterOrientation(state), TREMBLE_DEPTH4, (quantumMove) => quantumMove.family === \"y\" ? 4 : 3);\n return alg;\n });\n}\nfunction randomSkewbFixedCornerState() {\n return __async(this, null, function* () {\n return randomStateFromSGS(yield skewbDefWithoutMOCached(), yield sgsDataSkewbFixedCorner());\n });\n}\nfunction randomSkewbFixedCornerScramble() {\n return __async(this, null, function* () {\n return solveSkewb(yield randomSkewbFixedCornerState());\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/big-cubes.ts\ninit_alg();\nfunction numMoves(n) {\n switch (n) {\n case 5:\n return 60;\n case 6:\n return 80;\n default:\n return 100;\n }\n}\nvar axesFaces = [\n [\"U\", \"D\"],\n [\"L\", \"R\"],\n [\"F\", \"B\"]\n];\nvar axesMovesCache = new Map();\nfunction cachedAxesMoves(n) {\n const existing = axesMovesCache.get(n);\n if (existing) {\n return existing;\n }\n const axesMoves = [];\n for (const faces of axesFaces) {\n const axisMoveFamilies = [];\n axesMoves.push(axisMoveFamilies);\n for (const face of faces) {\n axisMoveFamilies.push(new QuantumMove(face));\n if (n > 3) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`));\n }\n for (let i2 = 3; i2 <= n / 2; i2++) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`, i2));\n }\n }\n }\n axesMovesCache.set(n, axesMoves);\n return axesMoves;\n}\nfunction bigCubeRandomMoves(n) {\n return __async(this, null, function* () {\n const randomUintBelow = yield randomUIntBelowFactory();\n const randomChoice = yield randomChoiceFactory();\n const randomNumChoice = randomChoice;\n const axesMoves = cachedAxesMoves(n);\n const cachedNumMoves = numMoves(n);\n const algBuilder = new AlgBuilder();\n let currentAxisIdx = 0;\n const currentAxisQuantumMoves = new Set();\n while (algBuilder.experimentalNumUnits() < cachedNumMoves) {\n const newAxisIdx = randomUintBelow(3);\n if (newAxisIdx !== currentAxisIdx) {\n currentAxisQuantumMoves.clear();\n }\n currentAxisIdx = newAxisIdx;\n const quantumMove = randomChoice(axesMoves[currentAxisIdx]);\n const quantumMoveStr = quantumMove.toString();\n if (currentAxisQuantumMoves.has(quantumMoveStr)) {\n continue;\n }\n currentAxisQuantumMoves.add(quantumMoveStr);\n algBuilder.push(new Move(quantumMove, randomNumChoice([1, 2, -1])));\n }\n return algBuilder.toAlg();\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/5x5x5.ts\nvar randomSuffixes3 = [\n [null, \"3Rw\", \"3Rw2\", \"3Rw'\", \"3Fw\", \"3Fw'\"],\n [null, \"3Dw\", \"3Dw2\", \"3Dw'\"]\n];\nfunction oriented555RandomMoves() {\n return __async(this, null, function* () {\n return addOrientationSuffix(yield bigCubeRandomMoves(5), randomSuffixes3);\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/sq1.ts\ninit_alg();\n\n// src/cubing/search/inside/solve/vendor/sq12phase/scramble_sq1.js\nfunction nullMethod() {\n}\nfunction FullCube_copy(obj, c) {\n obj.ul = c.ul;\n obj.ur = c.ur;\n obj.dl = c.dl;\n obj.dr = c.dr;\n obj.ml = c.ml;\n}\nfunction FullCube_doMove(obj, move) {\n var temp;\n move <<= 2;\n if (move > 24) {\n move = 48 - move;\n temp = obj.ul;\n obj.ul = (~~obj.ul >> move | obj.ur << 24 - move) & 16777215;\n obj.ur = (~~obj.ur >> move | temp << 24 - move) & 16777215;\n } else if (move > 0) {\n temp = obj.ul;\n obj.ul = (obj.ul << move | ~~obj.ur >> 24 - move) & 16777215;\n obj.ur = (obj.ur << move | ~~temp >> 24 - move) & 16777215;\n } else if (move == 0) {\n temp = obj.ur;\n obj.ur = obj.dl;\n obj.dl = temp;\n obj.ml = 1 - obj.ml;\n } else if (move >= -24) {\n move = -move;\n temp = obj.dl;\n obj.dl = (obj.dl << move | ~~obj.dr >> 24 - move) & 16777215;\n obj.dr = (obj.dr << move | ~~temp >> 24 - move) & 16777215;\n } else if (move < -24) {\n move = 48 + move;\n temp = obj.dl;\n obj.dl = (~~obj.dl >> move | obj.dr << 24 - move) & 16777215;\n obj.dr = (~~obj.dr >> move | temp << 24 - move) & 16777215;\n }\n}\nfunction FullCube_getParity(obj) {\n var a, b, cnt, i2, p;\n cnt = 0;\n obj.arr[0] = FullCube_pieceAt(obj, 0);\n for (i2 = 1; i2 < 24; ++i2) {\n FullCube_pieceAt(obj, i2) != obj.arr[cnt] && (obj.arr[++cnt] = FullCube_pieceAt(obj, i2));\n }\n p = 0;\n for (a = 0; a < 16; ++a) {\n for (b = a + 1; b < 16; ++b) {\n obj.arr[a] > obj.arr[b] && (p ^= 1);\n }\n }\n return p;\n}\nfunction FullCube_getShapeIdx(obj) {\n var dlx, drx, ulx, urx;\n urx = obj.ur & 1118481;\n urx |= ~~urx >> 3;\n urx |= ~~urx >> 6;\n urx = urx & 15 | ~~urx >> 12 & 48;\n ulx = obj.ul & 1118481;\n ulx |= ~~ulx >> 3;\n ulx |= ~~ulx >> 6;\n ulx = ulx & 15 | ~~ulx >> 12 & 48;\n drx = obj.dr & 1118481;\n drx |= ~~drx >> 3;\n drx |= ~~drx >> 6;\n drx = drx & 15 | ~~drx >> 12 & 48;\n dlx = obj.dl & 1118481;\n dlx |= ~~dlx >> 3;\n dlx |= ~~dlx >> 6;\n dlx = dlx & 15 | ~~dlx >> 12 & 48;\n return Shape_getShape2Idx(FullCube_getParity(obj) << 24 | ulx << 18 | urx << 12 | dlx << 6 | drx);\n}\nfunction FullCube_getSquare(obj, sq) {\n var a, b;\n for (a = 0; a < 8; ++a) {\n obj.prm[a] = ~~(~~FullCube_pieceAt(obj, a * 3 + 1) >> 1 << 24) >> 24;\n }\n sq.cornperm = get8Perm2(obj.prm);\n sq.topEdgeFirst = FullCube_pieceAt(obj, 0) == FullCube_pieceAt(obj, 1);\n a = sq.topEdgeFirst ? 2 : 0;\n for (b = 0; b < 4; a += 3, ++b)\n obj.prm[b] = ~~(~~FullCube_pieceAt(obj, a) >> 1 << 24) >> 24;\n sq.botEdgeFirst = FullCube_pieceAt(obj, 12) == FullCube_pieceAt(obj, 13);\n a = sq.botEdgeFirst ? 14 : 12;\n for (; b < 8; a += 3, ++b)\n obj.prm[b] = ~~(~~FullCube_pieceAt(obj, a) >> 1 << 24) >> 24;\n sq.edgeperm = get8Perm2(obj.prm);\n sq.ml = obj.ml;\n}\nfunction FullCube_pieceAt(obj, idx) {\n var ret;\n idx < 6 ? ret = ~~obj.ul >> (5 - idx << 2) : idx < 12 ? ret = ~~obj.ur >> (11 - idx << 2) : idx < 18 ? ret = ~~obj.dl >> (17 - idx << 2) : ret = ~~obj.dr >> (23 - idx << 2);\n return ~~((ret & 15) << 24) >> 24;\n}\nfunction FullCube_setPiece(obj, idx, value) {\n if (idx < 6) {\n obj.ul &= ~(15 << (5 - idx << 2));\n obj.ul |= value << (5 - idx << 2);\n } else if (idx < 12) {\n obj.ur &= ~(15 << (11 - idx << 2));\n obj.ur |= value << (11 - idx << 2);\n } else if (idx < 18) {\n obj.dl &= ~(15 << (17 - idx << 2));\n obj.dl |= value << (17 - idx << 2);\n } else {\n obj.dr &= ~(15 << (23 - idx << 2));\n obj.dr |= value << (23 - idx << 2);\n }\n}\nfunction FullCube_FullCube__Ljava_lang_String_2V() {\n this.arr = [];\n this.prm = [];\n}\nfunction FullCube_randomCube() {\n return __async(this, null, function* () {\n const randomUintBelow = yield randomUIntBelowFactory();\n var f, i2, shape, edge, corner, n_edge, n_corner, rnd, m;\n f = new FullCube_FullCube__Ljava_lang_String_2V();\n shape = Shape_ShapeIdx[randomUintBelow(3678)];\n corner = 19088743 << 1 | 286331153;\n edge = 19088743 << 1;\n n_corner = n_edge = 8;\n for (i2 = 0; i2 < 24; i2++) {\n if ((shape >> i2 & 1) == 0) {\n rnd = randomUintBelow(n_edge) << 2;\n FullCube_setPiece(f, 23 - i2, edge >> rnd & 15);\n m = (1 << rnd) - 1;\n edge = (edge & m) + (edge >> 4 & ~m);\n --n_edge;\n } else {\n rnd = randomUintBelow(n_corner) << 2;\n FullCube_setPiece(f, 23 - i2, corner >> rnd & 15);\n FullCube_setPiece(f, 22 - i2, corner >> rnd & 15);\n m = (1 << rnd) - 1;\n corner = (corner & m) + (corner >> 4 & ~m);\n --n_corner;\n ++i2;\n }\n }\n f.ml = randomUintBelow(2);\n return f;\n });\n}\nfunction FullCube() {\n}\nvar _4 = FullCube_FullCube__Ljava_lang_String_2V.prototype = FullCube.prototype;\n_4.dl = 10062778;\n_4.dr = 14536702;\n_4.ml = 0;\n_4.ul = 70195;\n_4.ur = 4544119;\nfunction Search_init2(obj) {\n var corner, edge, i2, j, ml, prun;\n FullCube_copy(obj.Search_d, obj.Search_c);\n for (i2 = 0; i2 < obj.Search_length1; ++i2) {\n FullCube_doMove(obj.Search_d, obj.Search_move[i2]);\n }\n FullCube_getSquare(obj.Search_d, obj.Search_sq);\n edge = obj.Search_sq.edgeperm;\n corner = obj.Search_sq.cornperm;\n ml = obj.Search_sq.ml;\n prun = Math.max(SquarePrun[obj.Search_sq.edgeperm << 1 | ml], SquarePrun[obj.Search_sq.cornperm << 1 | ml]);\n for (i2 = prun; i2 < obj.Search_maxlen2; ++i2) {\n if (Search_phase2(obj, edge, corner, obj.Search_sq.topEdgeFirst, obj.Search_sq.botEdgeFirst, ml, i2, obj.Search_length1, 0)) {\n for (j = 0; j < i2; ++j) {\n FullCube_doMove(obj.Search_d, obj.Search_move[obj.Search_length1 + j]);\n }\n obj.Search_sol_string = Search_move2string(obj, i2 + obj.Search_length1);\n return true;\n }\n }\n return false;\n}\nfunction Search_move2string(obj, len) {\n var s = \"\";\n var top = 0, bottom = 0;\n for (var i2 = len - 1; i2 >= 0; i2--) {\n var val = obj.Search_move[i2];\n if (val > 0) {\n val = 12 - val;\n top = val > 6 ? val - 12 : val;\n } else if (val < 0) {\n val = 12 + val;\n bottom = val > 6 ? val - 12 : val;\n } else {\n if (top == 0 && bottom == 0) {\n s += \" / \";\n } else {\n s += \"(\" + top + \", \" + bottom + \") / \";\n }\n top = bottom = 0;\n }\n }\n if (top == 0 && bottom == 0) {\n } else {\n s += \"(\" + top + \", \" + bottom + \")\";\n }\n return s;\n}\nfunction Search_phase1(obj, shape, prunvalue, maxl, depth, lm) {\n var m, prunx, shapex;\n if (prunvalue == 0 && maxl < 4) {\n return maxl == 0 && Search_init2(obj);\n }\n if (lm != 0) {\n shapex = Shape_TwistMove[shape];\n prunx = ShapePrun[shapex];\n if (prunx < maxl) {\n obj.Search_move[depth] = 0;\n if (Search_phase1(obj, shapex, prunx, maxl - 1, depth + 1, 0)) {\n return true;\n }\n }\n }\n shapex = shape;\n if (lm <= 0) {\n m = 0;\n while (true) {\n m += Shape_TopMove[shapex];\n shapex = ~~m >> 4;\n m &= 15;\n if (m >= 12) {\n break;\n }\n prunx = ShapePrun[shapex];\n if (prunx > maxl) {\n break;\n } else if (prunx < maxl) {\n obj.Search_move[depth] = m;\n if (Search_phase1(obj, shapex, prunx, maxl - 1, depth + 1, 1)) {\n return true;\n }\n }\n }\n }\n shapex = shape;\n if (lm <= 1) {\n m = 0;\n while (true) {\n m += Shape_BottomMove[shapex];\n shapex = ~~m >> 4;\n m &= 15;\n if (m >= 6) {\n break;\n }\n prunx = ShapePrun[shapex];\n if (prunx > maxl) {\n break;\n } else if (prunx < maxl) {\n obj.Search_move[depth] = -m;\n if (Search_phase1(obj, shapex, prunx, maxl - 1, depth + 1, 2)) {\n return true;\n }\n }\n }\n }\n return false;\n}\nfunction Search_phase2(obj, edge, corner, topEdgeFirst, botEdgeFirst, ml, maxl, depth, lm) {\n var botEdgeFirstx, cornerx, edgex, m, prun1, prun2, topEdgeFirstx;\n if (maxl == 0 && !topEdgeFirst && botEdgeFirst) {\n return true;\n }\n if (lm != 0 && topEdgeFirst == botEdgeFirst) {\n edgex = Square_TwistMove[edge];\n cornerx = Square_TwistMove[corner];\n if (SquarePrun[edgex << 1 | 1 - ml] < maxl && SquarePrun[cornerx << 1 | 1 - ml] < maxl) {\n obj.Search_move[depth] = 0;\n if (Search_phase2(obj, edgex, cornerx, topEdgeFirst, botEdgeFirst, 1 - ml, maxl - 1, depth + 1, 0)) {\n return true;\n }\n }\n }\n if (lm <= 0) {\n topEdgeFirstx = !topEdgeFirst;\n edgex = topEdgeFirstx ? Square_TopMove[edge] : edge;\n cornerx = topEdgeFirstx ? corner : Square_TopMove[corner];\n m = topEdgeFirstx ? 1 : 2;\n prun1 = SquarePrun[edgex << 1 | ml];\n prun2 = SquarePrun[cornerx << 1 | ml];\n while (m < 12 && prun1 <= maxl && prun1 <= maxl) {\n if (prun1 < maxl && prun2 < maxl) {\n obj.Search_move[depth] = m;\n if (Search_phase2(obj, edgex, cornerx, topEdgeFirstx, botEdgeFirst, ml, maxl - 1, depth + 1, 1)) {\n return true;\n }\n }\n topEdgeFirstx = !topEdgeFirstx;\n if (topEdgeFirstx) {\n edgex = Square_TopMove[edgex];\n prun1 = SquarePrun[edgex << 1 | ml];\n m += 1;\n } else {\n cornerx = Square_TopMove[cornerx];\n prun2 = SquarePrun[cornerx << 1 | ml];\n m += 2;\n }\n }\n }\n if (lm <= 1) {\n botEdgeFirstx = !botEdgeFirst;\n edgex = botEdgeFirstx ? Square_BottomMove[edge] : edge;\n cornerx = botEdgeFirstx ? corner : Square_BottomMove[corner];\n m = botEdgeFirstx ? 1 : 2;\n prun1 = SquarePrun[edgex << 1 | ml];\n prun2 = SquarePrun[cornerx << 1 | ml];\n while (m < (maxl > 3 ? 6 : 12) && prun1 <= maxl && prun1 <= maxl) {\n if (prun1 < maxl && prun2 < maxl) {\n obj.Search_move[depth] = -m;\n if (Search_phase2(obj, edgex, cornerx, topEdgeFirst, botEdgeFirstx, ml, maxl - 1, depth + 1, 2)) {\n return true;\n }\n }\n botEdgeFirstx = !botEdgeFirstx;\n if (botEdgeFirstx) {\n edgex = Square_BottomMove[edgex];\n prun1 = SquarePrun[edgex << 1 | ml];\n m += 1;\n } else {\n cornerx = Square_BottomMove[cornerx];\n prun2 = SquarePrun[cornerx << 1 | ml];\n m += 2;\n }\n }\n }\n return false;\n}\nfunction Search_solution(obj, c) {\n var shape;\n obj.Search_c = c;\n shape = FullCube_getShapeIdx(c);\n for (obj.Search_length1 = ShapePrun[shape]; obj.Search_length1 < 100; ++obj.Search_length1) {\n obj.Search_maxlen2 = Math.min(31 - obj.Search_length1, 17);\n if (Search_phase1(obj, shape, ShapePrun[shape], obj.Search_length1, 0, -1)) {\n break;\n }\n }\n return obj.Search_sol_string;\n}\nfunction Search_Search() {\n this.Search_move = [];\n this.Search_d = new FullCube_FullCube__Ljava_lang_String_2V();\n this.Search_sq = new Square_Square();\n}\nfunction Search2() {\n}\n_4 = Search_Search.prototype = Search2.prototype;\n_4.Search_c = null;\n_4.Search_length1 = 0;\n_4.Search_maxlen2 = 0;\n_4.Search_sol_string = null;\nfunction Shape_$clinit() {\n Shape_$clinit = nullMethod;\n Shape_halflayer = [0, 3, 6, 12, 15, 24, 27, 30, 48, 51, 54, 60, 63];\n Shape_ShapeIdx = [];\n ShapePrun = [];\n Shape_TopMove = [];\n Shape_BottomMove = [];\n Shape_TwistMove = [];\n Shape_init();\n}\nfunction Shape_bottomMove(obj) {\n var move, moveParity;\n move = 0;\n moveParity = 0;\n do {\n if ((obj.bottom & 2048) == 0) {\n move += 1;\n obj.bottom = obj.bottom << 1;\n } else {\n move += 2;\n obj.bottom = obj.bottom << 2 ^ 12291;\n }\n moveParity = 1 - moveParity;\n } while ((bitCount(obj.bottom & 63) & 1) != 0);\n (bitCount(obj.bottom) & 2) == 0 && (obj.Shape_parity ^= moveParity);\n return move;\n}\nfunction Shape_getIdx(obj) {\n var ret;\n ret = binarySearch(Shape_ShapeIdx, obj.top << 12 | obj.bottom) << 1 | obj.Shape_parity;\n return ret;\n}\nfunction Shape_setIdx(obj, idx) {\n obj.Shape_parity = idx & 1;\n obj.top = Shape_ShapeIdx[~~idx >> 1];\n obj.bottom = obj.top & 4095;\n obj.top >>= 12;\n}\nfunction Shape_topMove(obj) {\n var move, moveParity;\n move = 0;\n moveParity = 0;\n do {\n if ((obj.top & 2048) == 0) {\n move += 1;\n obj.top = obj.top << 1;\n } else {\n move += 2;\n obj.top = obj.top << 2 ^ 12291;\n }\n moveParity = 1 - moveParity;\n } while ((bitCount(obj.top & 63) & 1) != 0);\n (bitCount(obj.top) & 2) == 0 && (obj.Shape_parity ^= moveParity);\n return move;\n}\nfunction Shape_Shape() {\n}\nfunction Shape_getShape2Idx(shp) {\n var ret;\n ret = binarySearch(Shape_ShapeIdx, shp & 16777215) << 1 | ~~shp >> 24;\n return ret;\n}\nfunction Shape_init() {\n var count, depth, dl, done, done0, dr, i2, idx, m, s, ul, ur, value, p1, p3, temp;\n count = 0;\n for (i2 = 0; i2 < 28561; ++i2) {\n dr = Shape_halflayer[i2 % 13];\n dl = Shape_halflayer[~~(i2 / 13) % 13];\n ur = Shape_halflayer[~~(~~(i2 / 13) / 13) % 13];\n ul = Shape_halflayer[~~(~~(~~(i2 / 13) / 13) / 13)];\n value = ul << 18 | ur << 12 | dl << 6 | dr;\n bitCount(value) == 16 && (Shape_ShapeIdx[count++] = value);\n }\n s = new Shape_Shape();\n for (i2 = 0; i2 < 7356; ++i2) {\n Shape_setIdx(s, i2);\n Shape_TopMove[i2] = Shape_topMove(s);\n Shape_TopMove[i2] |= Shape_getIdx(s) << 4;\n Shape_setIdx(s, i2);\n Shape_BottomMove[i2] = Shape_bottomMove(s);\n Shape_BottomMove[i2] |= Shape_getIdx(s) << 4;\n Shape_setIdx(s, i2);\n temp = s.top & 63;\n p1 = bitCount(temp);\n p3 = bitCount(s.bottom & 4032);\n s.Shape_parity ^= 1 & ~~(p1 & p3) >> 1;\n s.top = s.top & 4032 | ~~s.bottom >> 6 & 63;\n s.bottom = s.bottom & 63 | temp << 6;\n Shape_TwistMove[i2] = Shape_getIdx(s);\n }\n for (i2 = 0; i2 < 7536; ++i2) {\n ShapePrun[i2] = -1;\n }\n ShapePrun[Shape_getShape2Idx(14378715)] = 0;\n ShapePrun[Shape_getShape2Idx(31157686)] = 0;\n ShapePrun[Shape_getShape2Idx(23967451)] = 0;\n ShapePrun[Shape_getShape2Idx(7191990)] = 0;\n done = 4;\n done0 = 0;\n depth = -1;\n while (done != done0) {\n done0 = done;\n ++depth;\n for (i2 = 0; i2 < 7536; ++i2) {\n if (ShapePrun[i2] == depth) {\n m = 0;\n idx = i2;\n do {\n idx = Shape_TopMove[idx];\n m += idx & 15;\n idx >>= 4;\n if (ShapePrun[idx] == -1) {\n ++done;\n ShapePrun[idx] = depth + 1;\n }\n } while (m != 12);\n m = 0;\n idx = i2;\n do {\n idx = Shape_BottomMove[idx];\n m += idx & 15;\n idx >>= 4;\n if (ShapePrun[idx] == -1) {\n ++done;\n ShapePrun[idx] = depth + 1;\n }\n } while (m != 12);\n idx = Shape_TwistMove[i2];\n if (ShapePrun[idx] == -1) {\n ++done;\n ShapePrun[idx] = depth + 1;\n }\n }\n }\n }\n}\nfunction Shape() {\n}\n_4 = Shape_Shape.prototype = Shape.prototype;\n_4.bottom = 0;\n_4.Shape_parity = 0;\n_4.top = 0;\nvar Shape_BottomMove;\nvar Shape_ShapeIdx;\nvar ShapePrun;\nvar Shape_TopMove;\nvar Shape_TwistMove;\nvar Shape_halflayer;\nfunction Square_$clinit() {\n Square_$clinit = nullMethod;\n SquarePrun = [];\n Square_TwistMove = [];\n Square_TopMove = [];\n Square_BottomMove = [];\n fact2 = [1, 1, 2, 6, 24, 120, 720, 5040];\n Cnk3 = [];\n for (var i2 = 0; i2 < 12; ++i2)\n Cnk3[i2] = [];\n Square_init();\n}\nfunction Square_Square() {\n}\nfunction get8Perm2(arr) {\n var i2, idx, v, val;\n idx = 0;\n val = 1985229328;\n for (i2 = 0; i2 < 7; ++i2) {\n v = arr[i2] << 2;\n idx = (8 - i2) * idx + (~~val >> v & 7);\n val -= 286331152 << v;\n }\n return idx & 65535;\n}\nfunction Square_init() {\n var check, depth, done, find, i2, idx, idxx, inv, j, m, ml, pos, temp;\n for (i2 = 0; i2 < 12; ++i2) {\n Cnk3[i2][0] = 1;\n Cnk3[i2][i2] = 1;\n for (j = 1; j < i2; ++j) {\n Cnk3[i2][j] = Cnk3[i2 - 1][j - 1] + Cnk3[i2 - 1][j];\n }\n }\n pos = [];\n for (i2 = 0; i2 < 40320; ++i2) {\n set8Perm2(pos, i2);\n temp = pos[2];\n pos[2] = pos[4];\n pos[4] = temp;\n temp = pos[3];\n pos[3] = pos[5];\n pos[5] = temp;\n Square_TwistMove[i2] = get8Perm2(pos);\n set8Perm2(pos, i2);\n temp = pos[0];\n pos[0] = pos[1];\n pos[1] = pos[2];\n pos[2] = pos[3];\n pos[3] = temp;\n Square_TopMove[i2] = get8Perm2(pos);\n set8Perm2(pos, i2);\n temp = pos[4];\n pos[4] = pos[5];\n pos[5] = pos[6];\n pos[6] = pos[7];\n pos[7] = temp;\n Square_BottomMove[i2] = get8Perm2(pos);\n }\n for (i2 = 0; i2 < 80640; ++i2) {\n SquarePrun[i2] = -1;\n }\n SquarePrun[0] = 0;\n depth = 0;\n done = 1;\n while (done < 80640) {\n inv = depth >= 11;\n find = inv ? -1 : depth;\n check = inv ? depth : -1;\n ++depth;\n OUT:\n for (i2 = 0; i2 < 80640; ++i2) {\n if (SquarePrun[i2] == find) {\n idx = ~~i2 >> 1;\n ml = i2 & 1;\n idxx = Square_TwistMove[idx] << 1 | 1 - ml;\n if (SquarePrun[idxx] == check) {\n ++done;\n SquarePrun[inv ? i2 : idxx] = ~~(depth << 24) >> 24;\n if (inv)\n continue OUT;\n }\n idxx = idx;\n for (m = 0; m < 4; ++m) {\n idxx = Square_TopMove[idxx];\n if (SquarePrun[idxx << 1 | ml] == check) {\n ++done;\n SquarePrun[inv ? i2 : idxx << 1 | ml] = ~~(depth << 24) >> 24;\n if (inv)\n continue OUT;\n }\n }\n for (m = 0; m < 4; ++m) {\n idxx = Square_BottomMove[idxx];\n if (SquarePrun[idxx << 1 | ml] == check) {\n ++done;\n SquarePrun[inv ? i2 : idxx << 1 | ml] = ~~(depth << 24) >> 24;\n if (inv)\n continue OUT;\n }\n }\n }\n }\n }\n}\nfunction set8Perm2(arr, idx) {\n var i2, m, p, v, val;\n val = 1985229328;\n for (i2 = 0; i2 < 7; ++i2) {\n p = fact2[7 - i2];\n v = ~~(idx / p);\n idx -= v * p;\n v <<= 2;\n arr[i2] = ~~((~~val >> v & 7) << 24) >> 24;\n m = (1 << v) - 1;\n val = (val & m) + (~~val >> 4 & ~m);\n }\n arr[7] = ~~(val << 24) >> 24;\n}\nfunction Square() {\n}\n_4 = Square_Square.prototype = Square.prototype;\n_4.botEdgeFirst = false;\n_4.cornperm = 0;\n_4.edgeperm = 0;\n_4.ml = 0;\n_4.topEdgeFirst = false;\nvar Square_BottomMove;\nvar Cnk3;\nvar SquarePrun;\nvar Square_TopMove;\nvar Square_TwistMove;\nvar fact2;\nfunction bitCount(x) {\n x -= ~~x >> 1 & 1431655765;\n x = (~~x >> 2 & 858993459) + (x & 858993459);\n x = (~~x >> 4) + x & 252645135;\n x += ~~x >> 8;\n x += ~~x >> 16;\n return x & 63;\n}\nfunction binarySearch(sortedArray, key) {\n var high, low, mid, midVal;\n low = 0;\n high = sortedArray.length - 1;\n while (low <= high) {\n mid = low + (~~(high - low) >> 1);\n midVal = sortedArray[mid];\n if (midVal < key) {\n low = mid + 1;\n } else if (midVal > key) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n return -low - 1;\n}\nvar square1Solver_initialized = false;\nvar square1SolverInitialize = function(doneCallback, _5, statusCallback) {\n if (!square1Solver_initialized) {\n Shape_$clinit();\n Square_$clinit();\n }\n if (statusCallback) {\n statusCallback(\"Done initializing Square-1.\");\n }\n square1Solver_initialized = true;\n if (doneCallback != null) {\n doneCallback();\n }\n};\nvar square1SolverGetRandomPosition = function() {\n return __async(this, null, function* () {\n if (!square1Solver_initialized) {\n square1SolverInitialize();\n }\n return FullCube_randomCube();\n });\n};\nvar square1SolverGenerate = function(state) {\n var search_search = new Search_Search();\n return Search_solution(search_search, state);\n};\nvar square1SolverGetRandomScramble = function() {\n return __async(this, null, function* () {\n var randomState = yield square1SolverGetRandomPosition();\n var scrambleString = square1SolverGenerate(randomState);\n return {\n state: randomState,\n scramble_string: scrambleString\n };\n });\n};\nfunction getRandomSquare1ScrambleString() {\n return __async(this, null, function* () {\n return (yield square1SolverGetRandomScramble()).scramble_string;\n });\n}\n\n// src/cubing/search/inside/solve/puzzles/sq1.ts\nfunction getRandomSquare1Scramble() {\n return __async(this, null, function* () {\n return Alg.fromString(yield getRandomSquare1ScrambleString());\n });\n}\n\n// src/cubing/search/inside/api.ts\nsetIsInsideWorker(true);\nvar DEBUG_MEASURE_PERF = true;\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\nfunction measurePerf(name, f) {\n return __async(this, null, function* () {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n const start = now();\n const result = f();\n if (result == null ? void 0 : result.then) {\n yield result;\n }\n const end = now();\n console.warn(`${name}: ${Math.round(end - start)}ms`);\n return result;\n });\n}\nvar insideAPI = {\n initialize: (eventID) => __async(void 0, null, function* () {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize2);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n }),\n randomScrambleForEvent: (eventID) => __async(void 0, null, function* () {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"random222Scramble\", random222Scramble);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble);\n case \"333fm\":\n return measurePerf(\"random333FewestMovesScramble\", random333FewestMovesScramble);\n case \"333bf\":\n return measurePerf(\"random333OrientedScramble\", random333OrientedScramble);\n case \"444\":\n return measurePerf(\"random444Scramble\", random444Scramble);\n case \"444bf\":\n return measurePerf(\"random444OrientedScramble\", random444OrientedScramble);\n case \"555\":\n return measurePerf(\"bigCubeScramble(5)\", bigCubeRandomMoves.bind(bigCubeRandomMoves, 5));\n case \"555bf\":\n return measurePerf(\"oriented555RandomMoves\", oriented555RandomMoves);\n case \"666\":\n return measurePerf(\"bigCubeScramble(6)\", bigCubeRandomMoves.bind(bigCubeRandomMoves, 6));\n case \"777\":\n return measurePerf(\"bigCubeScramble(7)\", bigCubeRandomMoves.bind(bigCubeRandomMoves, 7));\n case \"skewb\":\n return measurePerf(\"randomSkewbFixedCornerScramble\", randomSkewbFixedCornerScramble);\n case \"pyram\":\n return measurePerf(\"randomPyraminxScrambleFixedOrientation\", randomPyraminxScrambleFixedOrientation);\n case \"sq1\":\n return measurePerf(\"getRandomSquare1Scramble\", getRandomSquare1Scramble);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n }),\n randomScrambleStringForEvent: (eventID) => __async(void 0, null, function* () {\n return (yield insideAPI.randomScrambleForEvent(eventID)).toString();\n }),\n solve333ToString: (s) => __async(void 0, null, function* () {\n return (yield solve333(s)).toString();\n }),\n solve222ToString: (s) => __async(void 0, null, function* () {\n return (yield solve222(s)).toString();\n }),\n solveSkewbToString: (s) => __async(void 0, null, function* () {\n return (yield solveSkewb(s)).toString();\n }),\n solvePyraminxToString: (s) => __async(void 0, null, function* () {\n return (yield solvePyraminx(s)).toString();\n }),\n solveMegaminxToString: (s) => __async(void 0, null, function* () {\n return (yield solveMegaminx(s)).toString();\n })\n};\n\n// src/cubing/search/inside/entry.js\nexpose2(insideAPI);\n";
|
|
1
|
+
export const workerSource = "var m1=Object.create;var wo=Object.defineProperty;var p1=Object.getOwnPropertyDescriptor;var d1=Object.getOwnPropertyNames;var L1=Object.getPrototypeOf,h1=Object.prototype.hasOwnProperty;var ca=e=>wo(e,\"__esModule\",{value:!0});var S=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ne=(e,t)=>{ca(e);for(var r in t)wo(e,r,{get:t[r],enumerable:!0})},R1=(e,t,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of d1(t))!h1.call(e,n)&&n!==\"default\"&&wo(e,n,{get:()=>t[n],enumerable:!(r=p1(t,n))||r.enumerable});return e},ga=e=>R1(ca(wo(e!=null?m1(L1(e)):{},\"default\",e&&e.__esModule&&\"default\"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var ni=(e,t,r)=>{if(!t.has(e))throw TypeError(\"Cannot \"+r)};var R=(e,t,r)=>(ni(e,t,\"read from private field\"),r?r.call(e):t.get(e)),de=(e,t,r)=>{if(t.has(e))throw TypeError(\"Cannot add the same private member more than once\");t instanceof WeakSet?t.add(e):t.set(e,r)},ie=(e,t,r,n)=>(ni(e,t,\"write to private field\"),n?n.call(e,r):t.set(e,r),r),oi=(e,t,r,n)=>({set _(o){ie(e,t,o,r)},get _(){return R(e,t,n)}}),ma=(e,t,r)=>(ni(e,t,\"access private method\"),r);var D=(e,t,r)=>new Promise((n,o)=>{var l=u=>{try{s(r.next(u))}catch(a){o(a)}},i=u=>{try{s(r.throw(u))}catch(a){o(a)}},s=u=>u.done?n(u.value):Promise.resolve(u.value).then(l,i);s((r=r.apply(e,t)).next())});var ya={};Ne(ya,{default:()=>U1});function E1(e){let t=new WeakMap;return{postMessage:e.postMessage.bind(e),addEventListener:(r,n)=>{let o=l=>{\"handleEvent\"in n?n.handleEvent({data:l}):n({data:l})};e.on(\"message\",o),t.set(n,o)},removeEventListener:(r,n)=>{let o=t.get(n);!o||(e.off(\"message\",o),t.delete(n))},start:e.start&&e.start.bind(e)}}var U1,Da=S(()=>{U1=E1});var Fa={};Ne(Fa,{port:()=>k1});function k1(){return D(this,null,function*(){let{parentPort:e}=yield import(\"worker_threads\").catch();return(yield Promise.resolve().then(()=>(Da(),ya))).default(e)})}var Ba=S(()=>{});var C1,Uo,ke,Ct=S(()=>{C1=!1,Uo=class{is(t){return this instanceof t}as(t){return this instanceof t?this:null}},ke=class extends Uo{constructor(){super();C1&&Object.defineProperty(this,\"_debugStr\",{get:()=>this.toString()})}get log(){return console.log.bind(console,this,this.toString())}}});function xa(e,t=!0){if(!t)return e;switch(e){case 1:return-1;case-1:return 1}}function ai(e,t){return t===-1?Array.from(e).reverse():e}function Sa(e){return Array.from(e).reverse()}var j,pt=S(()=>{(function(r){r[r.Forwards=1]=\"Forwards\",r[r.Backwards=-1]=\"Backwards\"})(j||(j={}))});var Cn,Tr,va,ui=S(()=>{Cn=2147483647,Tr=\"2^31 - 1\",va=-2147483648});var Lr,at,fi=S(()=>{Mt();at=class{constructor(){de(this,Lr,[])}push(t){R(this,Lr).push(t)}experimentalPushAlg(t){for(let r of t.units())this.push(r)}experimentalNumUnits(){return R(this,Lr).length}toAlg(){return new z(R(this,Lr))}reset(){ie(this,Lr,[])}};Lr=new WeakMap});var hr,Rr,ko,ze,Mn=S(()=>{Mt();Ct();pt();ko=class extends ke{constructor(t,r){super();de(this,hr,void 0);de(this,Rr,void 0);ie(this,hr,Yt(t)),ie(this,Rr,Yt(r))}get A(){return R(this,hr)}get B(){return R(this,Rr)}isIdentical(t){let r=t.as(ko);return!!((r==null?void 0:r.A.isIdentical(this.A))&&(r==null?void 0:r.B.isIdentical(this.B)))}invert(){return new ko(R(this,Rr),R(this,hr))}*experimentalExpand(t=j.Forwards,r){r!=null||(r=1/0),r===0?yield t===j.Forwards?this:this.invert():t===j.Forwards?(yield*this.A.experimentalExpand(j.Forwards,r-1),yield*this.B.experimentalExpand(j.Forwards,r-1),yield*this.A.experimentalExpand(j.Backwards,r-1),yield*this.B.experimentalExpand(j.Backwards,r-1)):(yield*this.B.experimentalExpand(j.Forwards,r-1),yield*this.A.experimentalExpand(j.Forwards,r-1),yield*this.B.experimentalExpand(j.Backwards,r-1),yield*this.A.experimentalExpand(j.Backwards,r-1))}toString(){return`[${R(this,hr).toString()}, ${R(this,Rr).toString()}]`}},ze=ko;hr=new WeakMap,Rr=new WeakMap});var Nr,_r,zo,Ce,Pn=S(()=>{Mt();Ct();pt();zo=class extends ke{constructor(t,r){super();de(this,Nr,void 0);de(this,_r,void 0);ie(this,Nr,Yt(t)),ie(this,_r,Yt(r))}get A(){return R(this,Nr)}get B(){return R(this,_r)}isIdentical(t){let r=t.as(zo);return!!((r==null?void 0:r.A.isIdentical(this.A))&&(r==null?void 0:r.B.isIdentical(this.B)))}invert(){return new zo(R(this,Nr),R(this,_r).invert())}*experimentalExpand(t,r){r!=null||(r=1/0),r===0?yield t===j.Forwards?this:this.invert():(yield*this.A.experimentalExpand(j.Forwards,r-1),yield*this.B.experimentalExpand(t,r-1),yield*this.A.experimentalExpand(j.Backwards,r-1))}toString(){return`[${this.A}: ${this.B}]`}},Ce=zo;Nr=new WeakMap,_r=new WeakMap});var Zt,ci,dt,Gn=S(()=>{Ct();pt();ci=class extends ke{constructor(t){super();de(this,Zt,void 0);if(t.includes(`\n`)||t.includes(\"\\r\"))throw new Error(\"LineComment cannot contain newline\");ie(this,Zt,t)}get text(){return R(this,Zt)}isIdentical(t){let r=t;return t.is(ci)&&R(this,Zt)===R(r,Zt)}invert(){return this}*experimentalExpand(t=j.Forwards,r=1/0){yield this}toString(){return`//${R(this,Zt)}`}},dt=ci;Zt=new WeakMap});var We,In=S(()=>{Ct();pt();We=class extends ke{toString(){return`\n`}isIdentical(t){return t.is(We)}invert(){return this}*experimentalExpand(t=j.Forwards,r=1/0){yield this}}});var Qe,Tn=S(()=>{Ct();pt();Qe=class extends ke{toString(){return\".\"}isIdentical(t){return t.is(Qe)}invert(){return this}*experimentalExpand(t=j.Forwards,r=1/0){yield this}}});function Co(e,t){return e?parseInt(e):t}function gi(e){return new Mo().parseAlg(e)}function Ea(e){return new Mo().parseMove(e)}function Ua(e){return new Mo().parseQuantumMove(e)}function qe(e,t,r){let n=e;return n.startCharIndex=t,n.endCharIndex=r,n}function ka(e,t){return\"startCharIndex\"in e&&(t.startCharIndex=e.startCharIndex),\"endCharIndex\"in e&&(t.endCharIndex=e.endCharIndex),t}var wa,M1,P1,G1,I1,T1,Ye,O,Mo,mi=S(()=>{Mt();fi();Mn();Pn();Po();Gn();Xt();In();Tn();wa=/^(\\d+)?('?)/,M1=/^[_\\dA-Za-z]/,P1=/^((([1-9]\\d*)-)?([1-9]\\d*))?([_A-Za-z]+)?/,G1=/^[^\\n]*/,I1=/^(-?\\d+), ?/,T1=/^(-?\\d+)\\)/;Mo=class{constructor(){de(this,Ye,\"\");de(this,O,0)}parseAlg(t){ie(this,Ye,t),ie(this,O,0);let r=this.parseAlgWithStopping([]);return this.mustBeAtEndOfInput(),r}parseMove(t){ie(this,Ye,t),ie(this,O,0);let r=this.parseMoveImpl();return this.mustBeAtEndOfInput(),r}parseQuantumMove(t){ie(this,Ye,t),ie(this,O,0);let r=this.parseQuantumMoveImpl();return this.mustBeAtEndOfInput(),r}mustBeAtEndOfInput(){if(R(this,O)!==R(this,Ye).length)throw new Error(\"parsing unexpectedly ended early\")}parseAlgWithStopping(t){let r=R(this,O),n=R(this,O),o=new at,l=!1,i=s=>{if(l)throw new Error(`Unexpected character at index ${s}. Are you missing a space?`)};e:for(;R(this,O)<R(this,Ye).length;){let s=R(this,O);if(t.includes(R(this,Ye)[R(this,O)]))return qe(o.toAlg(),r,n);if(this.tryConsumeNext(\" \")){l=!1,o.experimentalNumUnits()===0&&(r=R(this,O));continue e}else if(M1.test(R(this,Ye)[R(this,O)])){i(s);let u=this.parseMoveImpl();o.push(u),l=!0,n=R(this,O);continue e}else if(this.tryConsumeNext(\"(\")){i(s);let u=this.tryRegex(I1);if(u){let a=u[1],f=R(this,O),c=this.parseRegex(T1),g=qe(new d(new I(\"U_SQ_\"),parseInt(a)),s+1,s+1+a.length),m=qe(new d(new I(\"D_SQ_\"),parseInt(c[1])),f,R(this,O)-1),L=qe(new z([g,m]),s+1,R(this,O)-1);o.push(qe(new nt(L),s,R(this,O))),l=!0,n=R(this,O);continue e}else{let a=this.parseAlgWithStopping([\")\"]);this.mustConsumeNext(\")\");let f=this.parseAmount();o.push(qe(new nt(a,f),s,R(this,O))),l=!0,n=R(this,O);continue e}}else if(this.tryConsumeNext(\"[\")){i(s);let u=this.parseAlgWithStopping([\",\",\":\"]),a=this.popNext(),f=this.parseAlgWithStopping([\"]\"]);switch(this.mustConsumeNext(\"]\"),a){case\":\":o.push(qe(new Ce(u,f),s,R(this,O))),l=!0,n=R(this,O);continue e;case\",\":o.push(qe(new ze(u,f),s,R(this,O))),l=!0,n=R(this,O);continue e;default:throw\"unexpected parsing error\"}}else if(this.tryConsumeNext(`\n`)){o.push(qe(new We,s,R(this,O))),l=!1,n=R(this,O);continue e}else if(this.tryConsumeNext(\"/\"))if(this.tryConsumeNext(\"/\")){i(s);let[u]=this.parseRegex(G1);o.push(qe(new dt(u),s,R(this,O))),l=!1,n=R(this,O);continue e}else{o.push(qe(new d(\"_SLASH_\"),s,R(this,O))),l=!0,n=R(this,O);continue e}else if(this.tryConsumeNext(\".\")){i(s),o.push(qe(new Qe,s,R(this,O))),l=!0,n=R(this,O);continue e}else throw new Error(`Unexpected character: ${this.popNext()}`)}if(R(this,O)!==R(this,Ye).length)throw new Error(\"did not finish parsing?\");if(t.length>0)throw new Error(\"expected stopping\");return qe(o.toAlg(),r,n)}parseQuantumMoveImpl(){let[,,,t,r,n]=this.parseRegex(P1);return new I(n,Co(r,void 0),Co(t,void 0))}parseMoveImpl(){let t=R(this,O);if(this.tryConsumeNext(\"/\"))return qe(new d(\"_SLASH_\"),t,R(this,O));let r=this.parseQuantumMoveImpl(),[n,o]=this.parseAmountAndTrackEmptyAbsAmount(),l=this.parseMoveSuffix();if(l){if(n<0)throw new Error(\"uh-oh\");if((l===\"++\"||l===\"--\")&&n!==1)throw new Error(\"Pochmann ++ or -- moves cannot have an amount other than 1.\");if((l===\"++\"||l===\"--\")&&!o)throw new Error(\"Pochmann ++ or -- moves cannot have an amount written as a number.\");if((l===\"+\"||l===\"-\")&&o)throw new Error(\"Clock dial moves must have an amount written as a natural number followed by + or -.\");l.startsWith(\"+\")&&(r=r.modified({family:`${r.family}_${l===\"+\"?\"PLUS\":\"PLUSPLUS\"}_`})),l.startsWith(\"-\")&&(r=r.modified({family:`${r.family}_${l===\"-\"?\"PLUS\":\"PLUSPLUS\"}_`}),n*=-1)}return qe(new d(r,n),t,R(this,O))}parseMoveSuffix(){return this.tryConsumeNext(\"+\")?this.tryConsumeNext(\"+\")?\"++\":\"+\":this.tryConsumeNext(\"-\")?this.tryConsumeNext(\"-\")?\"--\":\"-\":null}parseAmountAndTrackEmptyAbsAmount(){let t=R(this,O),[,r,n]=this.parseRegex(wa);if((r==null?void 0:r.startsWith(\"0\"))&&r!==\"0\")throw new Error(`Error at char index ${t}: An amount can only start with 0 if it's exactly the digit 0.`);return[Co(r,1)*(n===\"'\"?-1:1),!r]}parseAmount(){let t=R(this,O),[,r,n]=this.parseRegex(wa);if((r==null?void 0:r.startsWith(\"0\"))&&r!==\"0\")throw new Error(`Error at char index ${t}: An amount number can only start with 0 if it's exactly the digit 0.`);return Co(r,1)*(n===\"'\"?-1:1)}parseRegex(t){let r=t.exec(this.remaining());if(r===null)throw new Error(\"internal parsing error\");return ie(this,O,R(this,O)+r[0].length),r}tryRegex(t){let r=t.exec(this.remaining());return r===null?null:(ie(this,O,R(this,O)+r[0].length),r)}remaining(){return R(this,Ye).slice(R(this,O))}popNext(){let t=R(this,Ye)[R(this,O)];return oi(this,O)._++,t}tryConsumeNext(t){return R(this,Ye)[R(this,O)]===t?(oi(this,O)._++,!0):!1}mustConsumeNext(t){let r=this.popNext();if(r!==t)throw new Error(`expected \\`${t}\\` while parsing, encountered ${r}`);return r}};Ye=new WeakMap,O=new WeakMap});function Go(e){za.has(e)||(console.warn(e),za.add(e))}var za,pi=S(()=>{za=new Set});var Or,di=S(()=>{pt();ui();Or=class{constructor(t,r=1){if(this.quantum=t,this.amount=r,!Number.isInteger(this.amount)||this.amount<va||this.amount>Cn)throw new Error(`Unit amount absolute value must be a non-negative integer from ${Tr} to ${Tr}.`)}suffix(){let t=\"\",r=Math.abs(this.amount);return r!==1&&(t+=r),this.amount<0&&(t+=\"'\"),t}isIdentical(t){return this.quantum.isIdentical(t.quantum)&&this.amount===t.amount}*experimentalExpand(t,r){let n=Math.abs(this.amount),o=xa(t,this.amount<0);for(let l=0;l<n;l++)yield*this.quantum.experimentalExpand(o,r)}}});var Pt,Me,Pe,Io,I,Se,Wr,d,Xt=S(()=>{Ct();pt();ui();mi();pi();di();Io=class extends Uo{constructor(t,r,n){super();de(this,Pt,void 0);de(this,Me,void 0);de(this,Pe,void 0);if(ie(this,Pt,t),ie(this,Me,r!=null?r:null),ie(this,Pe,n!=null?n:null),Object.freeze(this),R(this,Me)!==null&&(!Number.isInteger(R(this,Me))||R(this,Me)<1||R(this,Me)>Cn))throw new Error(`QuantumMove inner layer must be a positive integer below ${Tr}.`);if(R(this,Pe)!==null&&(!Number.isInteger(R(this,Pe))||R(this,Pe)<1||R(this,Pe)>Cn))throw new Error(`QuantumMove outer layer must be a positive integer below ${Tr}.`);if(R(this,Pe)!==null&&R(this,Me)!==null&&R(this,Me)<=R(this,Pe))throw new Error(\"QuantumMove outer layer must be smaller than inner layer.\");if(R(this,Pe)!==null&&R(this,Me)===null)throw new Error(\"QuantumMove with an outer layer must have an inner layer\")}static fromString(t){return Ua(t)}modified(t){var r,n,o;return new Io((r=t.family)!=null?r:R(this,Pt),(n=t.innerLayer)!=null?n:R(this,Me),(o=t.outerLayer)!=null?o:R(this,Pe))}isIdentical(t){let r=t;return t.is(Io)&&R(this,Pt)===R(r,Pt)&&R(this,Me)===R(r,Me)&&R(this,Pe)===R(r,Pe)}get family(){return R(this,Pt)}get outerLayer(){return R(this,Pe)}get innerLayer(){return R(this,Me)}experimentalExpand(){throw new Error(\"experimentalExpand() cannot be called on a `QuantumMove` directly.\")}toString(){let t=R(this,Pt);return R(this,Me)!==null&&(t=String(R(this,Me))+t,R(this,Pe)!==null&&(t=String(R(this,Pe))+\"-\"+t)),t}},I=Io;Pt=new WeakMap,Me=new WeakMap,Pe=new WeakMap;Wr=class extends ke{constructor(...t){super();de(this,Se,void 0);var r;if(typeof t[0]==\"string\")if((r=t[1])!=null?r:null){ie(this,Se,new Or(I.fromString(t[0]),t[1]));return}else return Wr.fromString(t[0]);ie(this,Se,new Or(t[0],t[1]))}isIdentical(t){let r=t.as(Wr);return!!r&&R(this,Se).isIdentical(R(r,Se))}invert(){return ka(this,new Wr(R(this,Se).quantum,-this.amount))}*experimentalExpand(t=j.Forwards){t===j.Forwards?yield this:yield this.modified({amount:-this.amount})}get quantum(){return R(this,Se).quantum}modified(t){var r;return new Wr(R(this,Se).quantum.modified(t),(r=t.amount)!=null?r:this.amount)}static fromString(t){return Ea(t)}get amount(){return R(this,Se).amount}get type(){return Go(\"deprecated: type\"),\"blockMove\"}get family(){var t;return(t=R(this,Se).quantum.family)!=null?t:void 0}get outerLayer(){var t;return(t=R(this,Se).quantum.outerLayer)!=null?t:void 0}get innerLayer(){var t;return(t=R(this,Se).quantum.innerLayer)!=null?t:void 0}toString(){if(this.family===\"_SLASH_\")return\"/\";if(this.family.endsWith(\"_PLUS_\"))return R(this,Se).quantum.toString().slice(0,-6)+Math.abs(this.amount)+(this.amount<0?\"-\":\"+\");if(this.family.endsWith(\"_PLUSPLUS_\")){let t=Math.abs(this.amount);return R(this,Se).quantum.toString().slice(0,-10)+(t===1?\"\":t)+(this.amount<0?\"--\":\"++\")}return R(this,Se).quantum.toString()+R(this,Se).suffix()}},d=Wr;Se=new WeakMap});var Ca,Ma,Ze,To,nt,Po=S(()=>{Mt();Ct();pt();Xt();di();Ca=class{constructor(){this.quantumU_SQ_=null;this.quantumD_SQ_=null}format(t){let r=this.tuple(t);return r?`(${r.map(n=>n.amount).join(\", \")})`:null}tuple(t){var n,o;this.quantumU_SQ_||(this.quantumU_SQ_=new I(\"U_SQ_\")),this.quantumD_SQ_||(this.quantumD_SQ_=new I(\"D_SQ_\"));let r=t.alg;if(r.experimentalNumUnits()===2){let[l,i]=r.units();if(((n=l.as(d))==null?void 0:n.quantum.isIdentical(this.quantumU_SQ_))&&((o=i.as(d))==null?void 0:o.quantum.isIdentical(this.quantumD_SQ_))){if(t.amount!==1)throw new Error(\"Square-1 tuples cannot have an amount other than 1.\");return[l,i]}}return null}},Ma=new Ca,To=class extends ke{constructor(t,r){super();de(this,Ze,void 0);let n=Yt(t);ie(this,Ze,new Or(n,r))}isIdentical(t){let r=t;return t.is(To)&&R(this,Ze).isIdentical(R(r,Ze))}get alg(){return R(this,Ze).quantum}get amount(){return R(this,Ze).amount}get experimentalRepetitionSuffix(){return R(this,Ze).suffix()}invert(){return new To(R(this,Ze).quantum,-R(this,Ze).amount)}*experimentalExpand(t=j.Forwards,r){r!=null||(r=1/0),r===0?yield t===j.Forwards?this:this.invert():yield*R(this,Ze).experimentalExpand(t,r-1)}static fromString(){throw new Error(\"unimplemented\")}toString(){var t;return(t=Ma.format(this))!=null?t:`(${R(this,Ze).quantum.toString()})${R(this,Ze).suffix()}`}experimentalAsSquare1Tuple(){return Ma.tuple(this)}},nt=To;Ze=new WeakMap});var No=S(()=>{Po();Gn();Mn();Pn();Xt();In();Tn()});function ot(e,t){return e instanceof t}function Pa(e){return ot(e,nt)||ot(e,dt)||ot(e,ze)||ot(e,Ce)||ot(e,d)||ot(e,We)||ot(e,Qe)}var Li=S(()=>{No()});function Ga(e,t,r){if(t.is(nt))return e.traverseGrouping(t,r);if(t.is(d))return e.traverseMove(t,r);if(t.is(ze))return e.traverseCommutator(t,r);if(t.is(Ce))return e.traverseConjugate(t,r);if(t.is(Qe))return e.traversePause(t,r);if(t.is(We))return e.traverseNewline(t,r);if(t.is(dt))return e.traverseLineComment(t,r);throw new Error(\"unknown unit\")}function Ia(e){if(e.is(nt)||e.is(d)||e.is(ze)||e.is(Ce)||e.is(Qe)||e.is(We)||e.is(dt))return e;throw\"internal error: expected unit\"}var _o,Qr,Oo,N1,Ri,hi,Ta,Na,Ai=S(()=>{Po();Mn();Xt();In();Tn();Pn();Gn();_o=class{traverseUnit(t,r){return Ga(this,t,r)}traverseIntoUnit(t,r){return Ia(this.traverseUnit(t,r))}},Qr=class extends _o{traverseUnit(t){return Ga(this,t,void 0)}traverseIntoUnit(t){return Ia(this.traverseUnit(t))}},Ri=class extends _o{*traverseAlg(t,r){var a;if(r.depth===0){yield*t.units();return}let n=[],o=null,l=(a=r==null?void 0:r.collapseMoves)!=null?a:!0;function i(f,c){var L;let g=ma(L=Ri,Oo,N1).call(L,f,c,r);if(g===0)return!1;let m=new d(f.quantum,g);return n.push(m),o=m,!0}function s(f){l&&(o==null?void 0:o.is(d))&&f.is(d)&&o.quantum.isIdentical(f.quantum)?(n.pop(),i(o,f.amount)||(o=n.slice(-1)[0])):f.is(d)?i(f,0):(n.push(f),o=f)}let u={depth:r.depth?r.depth-1:null};for(let f of t.units())for(let c of this.traverseUnit(f,u))s(c);for(let f of n)yield f}*traverseGrouping(t,r){if(r.depth===0){yield t;return}let n={depth:r.depth?r.depth-1:null};yield new nt(this.traverseAlg(t.alg,n))}*traverseMove(t,r){yield t}*traverseCommutator(t,r){if(r.depth===0){yield t;return}let n={depth:r.depth?r.depth-1:null};yield new ze(this.traverseAlg(t.A,n),this.traverseAlg(t.B,n))}*traverseConjugate(t,r){if(r.depth===0){yield t;return}let n={depth:r.depth?r.depth-1:null};yield new Ce(this.traverseAlg(t.A,n),this.traverseAlg(t.B,n))}*traversePause(t,r){yield t}*traverseNewline(t,r){yield t}*traverseLineComment(t,r){yield t}},hi=Ri;Oo=new WeakSet,N1=function(t,r,n){let o=t.amount+r;if(n==null?void 0:n.quantumMoveOrder){let l=n.quantumMoveOrder(t.quantum),i=Math.floor(l/2)+1-l;o=(o%l+l-i)%l+i}return o},de(hi,Oo);Ta=new hi,Na=Ta.traverseAlg.bind(Ta)});function _a(e){if(!e)return[];if(ot(e,z))return e.units();if(typeof e==\"string\")return gi(e).units();let t=e;if(typeof t[Symbol.iterator]==\"function\")return t;throw\"Invalid unit\"}function Yt(e){return ot(e,z)?e:new z(e)}function _1(e,t){return e.is(We)||t.is(We)?\"\":e.is(dt)&&!t.is(We)?`\n`:\" \"}var Xe,Ar,z,Mt=S(()=>{Ct();Li();pt();mi();Ai();Gn();Xt();In();pi();Ar=class extends ke{constructor(t){super();de(this,Xe,void 0);ie(this,Xe,Array.from(_a(t)));for(let r of R(this,Xe))if(!Pa(r))throw new Error(\"An alg can only contain units.\")}isIdentical(t){let r=t;if(!t.is(Ar))return!1;let n=Array.from(R(this,Xe)),o=Array.from(R(r,Xe));if(n.length!==o.length)return!1;for(let l=0;l<n.length;l++)if(!n[l].isIdentical(o[l]))return!1;return!0}invert(){return new Ar(Sa(Array.from(R(this,Xe)).map(t=>t.invert())))}*experimentalExpand(t=j.Forwards,r){r!=null||(r=1/0);for(let n of ai(R(this,Xe),t))yield*n.experimentalExpand(t,r)}expand(t){var r;return new Ar(this.experimentalExpand(j.Forwards,(r=t==null?void 0:t.depth)!=null?r:1/0))}*experimentalLeafMoves(){for(let t of this.experimentalExpand())t.is(d)&&(yield t)}concat(t){return new Ar(Array.from(R(this,Xe)).concat(Array.from(_a(t))))}experimentalIsEmpty(){for(let t of R(this,Xe))return!1;return!0}static fromString(t){return gi(t)}*units(){for(let t of R(this,Xe))yield t}experimentalNumUnits(){return Array.from(R(this,Xe)).length}get type(){return Go(\"deprecated: type\"),\"sequence\"}toString(){let t=\"\",r=null;for(let n of R(this,Xe))r&&(t+=_1(r,n)),t+=n.toString(),r=n;return t}simplify(t){return new Ar(Na(this,t!=null?t:{}))}},z=Ar;Xe=new WeakMap});var O1,Oa=S(()=>{Mt();No();Mn();Pn();Xt();Tn();O1={Sune:new z([new d(\"R\",1),new d(\"U\",1),new d(\"R\",-1),new d(\"U\",1),new d(\"R\",1),new d(\"U\",-2),new d(\"R\",-1)]),AntiSune:new z([new d(\"R\",1),new d(\"U\",2),new d(\"R\",-1),new d(\"U\",-1),new d(\"R\",1),new d(\"U\",-1),new d(\"R\",-1)]),SuneCommutator:new z([new ze(new z([new d(\"R\",1),new d(\"U\",1),new d(\"R\",-2)]),new z([new Ce(new z([new d(\"R\",1)]),new z([new d(\"U\",1)]))]))]),Niklas:new z([new d(\"R\",1),new d(\"U\",-1),new d(\"L\",-1),new d(\"U\",1),new d(\"R\",-1),new d(\"U\",-1),new d(\"L\",1),new d(\"U\",1)]),EPerm:new z([new d(\"x\",-1),new ze(new z([new Ce(new z([new d(\"R\",1)]),new z([new d(\"U\",-1)]))]),new z([new d(\"D\",1)])),new ze(new z([new Ce(new z([new d(\"R\",1)]),new z([new d(\"U\",1)]))]),new z([new d(\"D\",1)])),new d(\"x\",1)]),FURURFCompact:new z([new Ce(new z([new d(\"F\",1)]),new z([new ze(new z([new d(\"U\",1)]),new z([new d(\"R\",1)]))]))]),APermCompact:new z([new Ce(new z([new d(\"R\",2)]),new z([new ze(new z([new d(\"F\",2)]),new z([new d(\"R\",-1),new d(\"B\",-1),new d(\"R\",1)]))]))]),FURURFMoves:new z([new d(\"F\",1),new d(\"U\",1),new d(\"R\",1),new d(\"U\",-1),new d(\"R\",-1),new d(\"F\",-1)]),TPerm:new z([new d(\"R\",1),new d(\"U\",1),new d(\"R\",-1),new d(\"U\",-1),new d(\"R\",-1),new d(\"F\",1),new d(\"R\",2),new d(\"U\",-1),new d(\"R\",-1),new d(\"U\",-1),new d(\"R\",1),new d(\"U\",1),new d(\"R\",-1),new d(\"F\",-1)]),HeadlightSwaps:new z([new Ce(new z([new d(\"F\",1)]),new z([new nt(new z([new ze(new z([new d(\"R\",1)]),new z([new d(\"U\",1)]))]),3)]))]),TriplePause:new z([new Qe,new Qe,new Qe])}});var CL,Wa=S(()=>{Xt();CL={73:new d(\"R\"),75:new d(\"R'\"),87:new d(\"B\"),79:new d(\"B'\"),83:new d(\"D\"),76:new d(\"D'\"),68:new d(\"L\"),69:new d(\"L'\"),74:new d(\"U\"),70:new d(\"U'\"),72:new d(\"F\"),71:new d(\"F'\"),78:new d(\"x'\"),67:new d(\"l\"),82:new d(\"l'\"),85:new d(\"r\"),77:new d(\"r'\"),88:new d(\"d\"),188:new d(\"d'\"),84:new d(\"x\"),89:new d(\"x\"),66:new d(\"x'\"),186:new d(\"y\"),59:new d(\"y\"),65:new d(\"y'\"),80:new d(\"z\"),81:new d(\"z'\"),90:new d(\"M'\"),190:new d(\"M'\")}});var Qa=S(()=>{});var qa=S(()=>{Mt()});var he=S(()=>{Mt();fi();Ai();Oa();Wa();No();Qa();qa();Li();pt()});function yi(e,t){if(t===qr)return!0;let r=t.permutation,n=r.length;for(let o=0;o<n;o++)if(r[o]!==o)return!1;if(e>1){let o=t.orientation;for(let l=0;l<n;l++)if(o[l]!==0)return!1}return qr=t,!0}function lt(e,t,r){let n={};for(let o in e.orbits){let l=e.orbits[o],i=t[o],s=r[o];if(yi(l.orientations,s))n[o]=i;else if(yi(l.orientations,i))n[o]=s;else{let u=new Array(l.numPieces);if(l.orientations===1){for(let a=0;a<l.numPieces;a++)u[a]=i.permutation[s.permutation[a]];n[o]={permutation:u,orientation:i.orientation}}else{let a=new Array(l.numPieces);for(let f=0;f<l.numPieces;f++)a[f]=(i.orientation[s.permutation[f]]+s.orientation[f])%l.orientations,u[f]=i.permutation[s.permutation[f]];n[o]={permutation:u,orientation:a}}}}return n}function jr(e,t,r){if(r<0)return jr(e,Gt(e,t),-r);if(r===0)return Lt(e);if(r===1)return t;let n=t;r!==2&&(n=jr(e,t,Math.floor(r/2)));let o=lt(e,n,n);return r%2==0?o:lt(e,t,o)}function Lt(e){let t={};for(let r in e.orbits){let n=e.orbits[r];if(!qr||qr.permutation.length!==n.numPieces){let o=new Array(n.numPieces),l=new Array(n.numPieces);for(let s=0;s<n.numPieces;s++)o[s]=s,l[s]=0;qr={permutation:o,orientation:l}}t[r]=qr}return t}function Gt(e,t){let r={};for(let n in e.orbits){let o=e.orbits[n],l=t[n];if(yi(o.orientations,l))r[n]=l;else if(o.orientations===1){let i=new Array(o.numPieces);for(let s=0;s<o.numPieces;s++)i[l.permutation[s]]=s;r[n]={permutation:i,orientation:l.orientation}}else{let i=new Array(o.numPieces),s=new Array(o.numPieces);for(let u=0;u<o.numPieces;u++){let a=l.permutation[u];i[a]=u,s[a]=(o.orientations-l.orientation[u]+o.orientations)%o.orientations}r[n]={permutation:i,orientation:s}}}return r}function Nn(e,t,r,n,o={}){let l=e.orbits[t],i=r[t],s=n[t];for(let u=0;u<l.numPieces;u++)if(!(o==null?void 0:o.ignoreOrientation)&&i.orientation[u]!==s.orientation[u]||!(o==null?void 0:o.ignorePermutation)&&i.permutation[u]!==s.permutation[u])return!1;return!0}function Wo(e,t,r){for(let n in e.orbits)if(!Nn(e,n,t,r))return!1;return!0}function Di(e,t,r){return Wo(e,lt(e,e.startPieces,t),lt(e,e.startPieces,r))}var qr,_n=S(()=>{});function Qo(e,t){let r=W1(e).lookupMove(t);if(!r)throw new Error(\"Unknown move: \"+t.toString());return r}function W1(e){return e.moveNotation||(e.moveNotation=new ja(e)),e.moveNotation}var ja,Je,Fi=S(()=>{he();_n();ja=class{constructor(t){this.def=t;this.cache={}}lookupMove(t){let r=t.toString(),n=this.cache[r];if(n)return n;let o=t.quantum.toString();return n=this.def.moves[o],n?(n=jr(this.def,n,t.amount),this.cache[r]=n):(n=this.def.moves[t.toString()],n?this.cache[r]=n:(n=this.def.moves[t.invert().toString()],n&&(n=jr(this.def,n,-1),this.cache[r]=n))),n}},Je=class{constructor(t){this.definition=t;this.state=Lt(t)}reset(){this.state=Lt(this.definition)}serialize(){let t=\"\";for(let r in this.definition.orbits)t+=r+`\n`,t+=this.state[r].permutation.join(\" \")+`\n`,t+=this.state[r].orientation.join(\" \")+`\n`;return t=t.slice(0,t.length-1),t}applyMove(t){this.state=lt(this.definition,this.state,Qo(this.definition,t))}applyAlg(t){for(let r of t.experimentalLeafMoves())this.applyMove(r)}}});var Ka=S(()=>{_n()});function Q1(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}function Bi(e,t,r,n){this.message=e,this.expected=t,this.found=r,this.location=n,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Bi)}var Va=S(()=>{Q1(Bi,Error);Bi.buildMessage=function(e,t){var r={literal:function(a){return'\"'+o(a.text)+'\"'},class:function(a){var f=a.parts.map(function(c){return Array.isArray(c)?l(c[0])+\"-\"+l(c[1]):l(c)});return\"[\"+(a.inverted?\"^\":\"\")+f+\"]\"},any:function(){return\"any character\"},end:function(){return\"end of input\"},other:function(a){return a.description}};function n(a){return a.charCodeAt(0).toString(16).toUpperCase()}function o(a){return a.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(f){return\"\\\\x0\"+n(f)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(f){return\"\\\\x\"+n(f)})}function l(a){return a.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(f){return\"\\\\x0\"+n(f)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(f){return\"\\\\x\"+n(f)})}function i(a){return r[a.type](a)}function s(a){var f=a.map(i),c,g;if(f.sort(),f.length>0){for(c=1,g=1;c<f.length;c++)f[c-1]!==f[c]&&(f[g]=f[c],g++);f.length=g}switch(f.length){case 1:return f[0];case 2:return f[0]+\" or \"+f[1];default:return f.slice(0,-1).join(\", \")+\", or \"+f[f.length-1]}}function u(a){return a?'\"'+o(a)+'\"':\"end of input\"}return\"Expected \"+s(e)+\" but \"+u(t)+\" found.\"}});var Ha=S(()=>{Va()});var Ya=S(()=>{Ha()});var Za=S(()=>{});var ue,bi=S(()=>{ue={name:\"3x3x3\",orbits:{EDGES:{numPieces:12,orientations:2},CORNERS:{numPieces:8,orientations:3},CENTERS:{numPieces:6,orientations:4}},startPieces:{EDGES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11],orientation:[0,0,0,0,0,0,0,0,0,0,0,0]},CORNERS:{permutation:[0,1,2,3,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[0,0,0,0,0,0]}},moves:{U:{EDGES:{permutation:[1,2,3,0,4,5,6,7,8,9,10,11],orientation:[0,0,0,0,0,0,0,0,0,0,0,0]},CORNERS:{permutation:[1,2,3,0,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[1,0,0,0,0,0]}},y:{EDGES:{permutation:[1,2,3,0,5,6,7,4,10,8,11,9],orientation:[0,0,0,0,0,0,0,0,1,1,1,1]},CORNERS:{permutation:[1,2,3,0,7,4,5,6],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,2,3,4,1,5],orientation:[1,0,0,0,0,3]}},x:{EDGES:{permutation:[4,8,0,9,6,10,2,11,5,7,1,3],orientation:[1,0,1,0,1,0,1,0,0,0,0,0]},CORNERS:{permutation:[4,0,3,5,7,6,2,1],orientation:[2,1,2,1,1,2,1,2]},CENTERS:{permutation:[2,1,5,3,0,4],orientation:[0,3,0,1,2,2]}},L:{EDGES:{permutation:[0,1,2,11,4,5,6,9,8,3,10,7],orientation:[0,0,0,0,0,0,0,0,0,0,0,0]},CORNERS:{permutation:[0,1,6,2,4,3,5,7],orientation:[0,0,2,1,0,2,1,0]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[0,1,0,0,0,0]}},F:{EDGES:{permutation:[9,1,2,3,8,5,6,7,0,4,10,11],orientation:[1,0,0,0,1,0,0,0,1,1,0,0]},CORNERS:{permutation:[3,1,2,5,0,4,6,7],orientation:[1,0,0,2,2,1,0,0]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[0,0,1,0,0,0]}},R:{EDGES:{permutation:[0,8,2,3,4,10,6,7,5,9,1,11],orientation:[0,0,0,0,0,0,0,0,0,0,0,0]},CORNERS:{permutation:[4,0,2,3,7,5,6,1],orientation:[2,1,0,0,1,0,0,2]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[0,0,0,1,0,0]}},B:{EDGES:{permutation:[0,1,10,3,4,5,11,7,8,9,6,2],orientation:[0,0,1,0,0,0,1,0,0,0,1,1]},CORNERS:{permutation:[0,7,1,3,4,5,2,6],orientation:[0,2,1,0,0,0,2,1]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[0,0,0,0,1,0]}},D:{EDGES:{permutation:[0,1,2,3,7,4,5,6,8,9,10,11],orientation:[0,0,0,0,0,0,0,0,0,0,0,0]},CORNERS:{permutation:[0,1,2,3,5,6,7,4],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,1,2,3,4,5],orientation:[0,0,0,0,0,1]}},z:{EDGES:{permutation:[9,3,11,7,8,1,10,5,0,4,2,6],orientation:[1,1,1,1,1,1,1,1,1,1,1,1]},CORNERS:{permutation:[3,2,6,5,0,4,7,1],orientation:[1,2,1,2,2,1,2,1]},CENTERS:{permutation:[1,5,2,0,4,3],orientation:[1,1,1,1,3,1]}},M:{EDGES:{permutation:[2,1,6,3,0,5,4,7,8,9,10,11],orientation:[1,0,1,0,1,0,1,0,0,0,0,0]},CORNERS:{permutation:[0,1,2,3,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[4,1,0,3,5,2],orientation:[2,0,0,0,2,0]}},E:{EDGES:{permutation:[0,1,2,3,4,5,6,7,9,11,8,10],orientation:[0,0,0,0,0,0,0,0,1,1,1,1]},CORNERS:{permutation:[0,1,2,3,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,4,1,2,3,5],orientation:[0,0,0,0,0,0]}},S:{EDGES:{permutation:[0,3,2,7,4,1,6,5,8,9,10,11],orientation:[0,1,0,1,0,1,0,1,0,0,0,0]},CORNERS:{permutation:[0,1,2,3,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[1,5,2,0,4,3],orientation:[1,1,0,1,0,1]}},u:{EDGES:{permutation:[1,2,3,0,4,5,6,7,10,8,11,9],orientation:[0,0,0,0,0,0,0,0,1,1,1,1]},CORNERS:{permutation:[1,2,3,0,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,2,3,4,1,5],orientation:[1,0,0,0,0,0]}},l:{EDGES:{permutation:[2,1,6,11,0,5,4,9,8,3,10,7],orientation:[1,0,1,0,1,0,1,0,0,0,0,0]},CORNERS:{permutation:[0,1,6,2,4,3,5,7],orientation:[0,0,2,1,0,2,1,0]},CENTERS:{permutation:[4,1,0,3,5,2],orientation:[2,1,0,0,2,0]}},f:{EDGES:{permutation:[9,3,2,7,8,1,6,5,0,4,10,11],orientation:[1,1,0,1,1,1,0,1,1,1,0,0]},CORNERS:{permutation:[3,1,2,5,0,4,6,7],orientation:[1,0,0,2,2,1,0,0]},CENTERS:{permutation:[1,5,2,0,4,3],orientation:[1,1,1,1,0,1]}},r:{EDGES:{permutation:[4,8,0,3,6,10,2,7,5,9,1,11],orientation:[1,0,1,0,1,0,1,0,0,0,0,0]},CORNERS:{permutation:[4,0,2,3,7,5,6,1],orientation:[2,1,0,0,1,0,0,2]},CENTERS:{permutation:[2,1,5,3,0,4],orientation:[0,0,0,1,2,2]}},b:{EDGES:{permutation:[0,5,10,1,4,7,11,3,8,9,6,2],orientation:[0,1,1,1,0,1,1,1,0,0,1,1]},CORNERS:{permutation:[0,7,1,3,4,5,2,6],orientation:[0,2,1,0,0,0,2,1]},CENTERS:{permutation:[3,0,2,5,4,1],orientation:[3,3,0,3,1,3]}},d:{EDGES:{permutation:[0,1,2,3,7,4,5,6,9,11,8,10],orientation:[0,0,0,0,0,0,0,0,1,1,1,1]},CORNERS:{permutation:[0,1,2,3,5,6,7,4],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,4,1,2,3,5],orientation:[0,0,0,0,0,1]}}}};ue.moves.Uw=ue.moves.u;ue.moves.Lw=ue.moves.l;ue.moves.Fw=ue.moves.f;ue.moves.Rw=ue.moves.r;ue.moves.Bw=ue.moves.b;ue.moves.Dw=ue.moves.d;ue.moves.Rv=ue.moves.x;ue.moves.Uv=ue.moves.y;ue.moves.Fv=ue.moves.z;ue.moves.Lv={EDGES:{permutation:[2,10,6,11,0,8,4,9,1,3,5,7],orientation:[1,0,1,0,1,0,1,0,0,0,0,0]},CORNERS:{permutation:[1,7,6,2,0,3,5,4],orientation:[2,1,2,1,1,2,1,2]},CENTERS:{permutation:[4,1,0,3,5,2],orientation:[2,1,0,3,2,0]}};ue.moves.Dv={EDGES:{permutation:[3,0,1,2,7,4,5,6,9,11,8,10],orientation:[0,0,0,0,0,0,0,0,1,1,1,1]},CORNERS:{permutation:[3,0,1,2,5,6,7,4],orientation:[0,0,0,0,0,0,0,0]},CENTERS:{permutation:[0,4,1,2,3,5],orientation:[3,0,0,0,0,1]}};ue.moves.Bv={EDGES:{permutation:[8,5,10,1,9,7,11,3,4,0,6,2],orientation:[1,1,1,1,1,1,1,1,1,1,1,1]},CORNERS:{permutation:[4,7,1,0,5,3,2,6],orientation:[1,2,1,2,2,1,2,1]},CENTERS:{permutation:[3,0,2,5,4,1],orientation:[3,3,3,3,1,3]}}});var Xa=S(()=>{});function Ja(e){let t=e.CENTERS.permutation[0],r=e.CENTERS.permutation[5],n=e.CENTERS.permutation[1],o=n;return t<n&&o--,r<n&&o--,[t,o]}var j1,xi=S(()=>{he();ht();ht();j1=new Array(6).fill(0).map(()=>new Array(6));{let e=new Je(ue),t=[\"\",\"z\",\"x\",\"z'\",\"x'\",\"x2\"].map(n=>z.fromString(n)),r=new z(\"y\");for(let n of t){e.reset(),e.applyAlg(n);for(let o=0;o<4;o++){e.applyAlg(r);let[l,i]=Ja(e.state);j1[l][i]=Gt(ue,e.state)}}}});var Si=S(()=>{Xa();xi()});var e0=S(()=>{});var t0=S(()=>{Si();e0();xi();Si()});var r0=S(()=>{t0();bi();_n()});var ht=S(()=>{Fi();Ka();_n();Ya();Za();bi();r0();Fi()});var n0=S(()=>{});function tc(e){switch(e){case U.Regular:return K1;case U.Dim:return J1;case U.Ignored:return V1;case U.OrientationStickers:return H1;case U.Invisible:return Y1;case U.IgnoreNonPrimary:return Z1;case U.PermuteNonPrimary:return X1;case U.Ignoriented:return $1;case U.OrientationWithoutPermutation:return ec}}var U,Kr,vt,Ge,Vr,qo,yr,K1,V1,H1,Y1,Z1,X1,J1,$1,ec,On,Wn,Qn=S(()=>{he();he();ht();(function(a){a.Regular=\"Regular\",a.Dim=\"Dim\",a.Ignored=\"Ignored\",a.OrientationStickers=\"OrientationStickers\",a.Invisible=\"Invisible\",a.Ignoriented=\"Ignoriented\",a.IgnoreNonPrimary=\"IgnoreNonPrimary\",a.PermuteNonPrimary=\"PermuteNonPrimary\",a.OrientationWithoutPermutation=\"OrientationWithoutPermutation\"})(U||(U={}));Kr=class{constructor(t,r){this.stickerings=new Map;for(let[n,o]of Object.entries(t.orbits))this.stickerings.set(n,new Array(o.numPieces).fill(r))}},vt=\"regular\",Ge=\"ignored\",Vr=\"oriented\",qo=\"invisible\",yr=\"dim\",K1={facelets:[vt,vt,vt,vt,vt]},V1={facelets:[Ge,Ge,Ge,Ge,Ge]},H1={facelets:[Vr,Vr,Vr,Vr,Vr]},Y1={facelets:[qo,qo,qo,qo]},Z1={facelets:[vt,Ge,Ge,Ge,Ge]},X1={facelets:[yr,vt,vt,vt,vt]},J1={facelets:[yr,yr,yr,yr,yr]},$1={facelets:[yr,Ge,Ge,Ge,Ge]},ec={facelets:[Vr,Ge,Ge,Ge,Ge]};On=class extends Kr{constructor(t){super(t,U.Regular)}set(t,r){for(let[n,o]of this.stickerings.entries())for(let l=0;l<o.length;l++)t.stickerings.get(n)[l]&&(o[l]=r);return this}toAppearance(){let t={orbits:{}};for(let[r,n]of this.stickerings.entries()){let o=[],l={pieces:o};t.orbits[r]=l;for(let i of n)o.push(tc(i))}return t}},Wn=class{constructor(t){this.def=t}and(t){let r=new Kr(this.def,!1);for(let[n,o]of Object.entries(this.def.orbits)){e:for(let l=0;l<o.numPieces;l++){r.stickerings.get(n)[l]=!0;for(let i of t)if(!i.stickerings.get(n)[l]){r.stickerings.get(n)[l]=!1;continue e}}}return r}or(t){let r=new Kr(this.def,!1);for(let[n,o]of Object.entries(this.def.orbits)){e:for(let l=0;l<o.numPieces;l++){r.stickerings.get(n)[l]=!1;for(let i of t)if(i.stickerings.get(n)[l]){r.stickerings.get(n)[l]=!0;continue e}}}return r}not(t){let r=new Kr(this.def,!1);for(let[n,o]of Object.entries(this.def.orbits))for(let l=0;l<o.numPieces;l++)r.stickerings.get(n)[l]=!t.stickerings.get(n)[l];return r}all(){return this.and(this.moves([]))}move(t){let r=Qo(this.def,ot(t,d)?t:d.fromString(t)),n=new Kr(this.def,!1);for(let[o,l]of Object.entries(this.def.orbits))for(let i=0;i<l.numPieces;i++)(r[o].permutation[i]!==i||r[o].orientation[i]!==0)&&(n.stickerings.get(o)[i]=!0);return n}moves(t){return t.map(r=>this.move(r))}}});function rc(e){(()=>D(this,null,function*(){o0=e;let t=Array.from(document.body.querySelectorAll(\"twisty-player\"));console.log(`Setting the custom stickering for ${t.length} players!`);let r=[];for(let n of t)r.push((()=>D(this,null,function*(){let o=yield n.experimentalModel.stickeringProp.get();n.experimentalStickering=o===\"experimental-global-custom-1\"?\"experimental-global-custom-2\":\"experimental-global-custom-1\"}))());yield Promise.all(r),console.log(\"Success!\")}))()}function l0(e,t){o0(e,t)}var o0,i0=S(()=>{Qn();o0=()=>{};typeof location!=\"undefined\"&&new URL(location.href).searchParams.get(\"global-custom-stickerer\")===\"true\"&&(window.setGlobalCustomStickerer=rc,window.PieceStickering=U,console.log(\"Global custom stickerer enabled! (using: global-custom-stickerer=true)\"),console.log(\"Look here for inspiration:\",\"https://github.com/cubing/cubing.js/blob/81b5cab3e27d8defb39dd1e0a10bc9e8ba894d26/src/cubing/puzzles/stickerings/cube-stickerings.ts#L67\"))});function Rt(e,t){return D(this,null,function*(){let r=yield e.def(),n=new On(r),o=new Wn(r),l=()=>o.move(\"U\"),i=()=>o.or(o.moves([\"U\",\"D\"])),s=()=>o.not(i()),u=()=>o.or(o.moves([\"L\",\"R\"])),a=()=>o.not(u()),f=()=>o.or(o.moves([\"F\",\"B\"])),c=()=>o.not(f()),g=()=>o.not(l()),m=()=>o.and([l(),a(),c()]),L=()=>o.and([o.and(o.moves([\"F\",\"R\"])),o.not(i())]),p=()=>o.and(o.moves([\"D\",\"R\",\"F\"])),y=()=>o.or([p(),L()]),F=()=>o.or([o.and([a(),s()]),o.and([a(),c()]),o.and([s(),c()])]),x=()=>o.or([o.and([a(),i(),f()]),o.and([s(),u(),f()]),o.and([c(),i(),u()])]),B=()=>o.not(o.or([F(),x()])),M=()=>o.or([a(),o.and([l(),x()])]);function k(){n.set(g(),U.Dim)}function K(){n.set(l(),U.PermuteNonPrimary),n.set(m(),U.Dim)}function te(){n.set(l(),U.IgnoreNonPrimary),n.set(m(),U.Regular)}function N(){n.set(l(),U.Ignoriented),n.set(m(),U.Dim)}switch(t){case\"full\":break;case\"PLL\":k(),K();break;case\"CLS\":k(),n.set(o.and(o.moves([\"D\",\"R\",\"F\"])),U.Regular),n.set(l(),U.Ignoriented),n.set(o.and([l(),B()]),U.IgnoreNonPrimary);break;case\"OLL\":k(),te();break;case\"COLL\":k(),K(),n.set(o.and([l(),B()]),U.Regular);break;case\"OCLL\":k(),N(),n.set(o.and([l(),B()]),U.IgnoreNonPrimary);break;case\"CLL\":k(),n.set(o.not(o.and([B(),l()])),U.Dim);break;case\"ELL\":k(),n.set(l(),U.Dim),n.set(o.and([l(),x()]),U.Regular);break;case\"ELS\":k(),te(),n.set(o.and([l(),B()]),U.Ignored),n.set(L(),U.Regular),n.set(p(),U.Ignored);break;case\"LL\":k();break;case\"F2L\":n.set(l(),U.Ignored);break;case\"ZBLL\":k(),n.set(l(),U.PermuteNonPrimary),n.set(m(),U.Dim),n.set(o.and([l(),B()]),U.Regular);break;case\"ZBLS\":k(),n.set(y(),U.Regular),te(),n.set(o.and([l(),B()]),U.Ignored);break;case\"WVLS\":case\"VLS\":k(),n.set(y(),U.Regular),te();break;case\"LS\":k(),n.set(y(),U.Regular),n.set(l(),U.Ignored),n.set(m(),U.Dim);break;case\"EO\":n.set(B(),U.Ignored),n.set(x(),U.OrientationWithoutPermutation);break;case\"CMLL\":n.set(g(),U.Dim),n.set(M(),U.Ignored),n.set(o.and([l(),B()]),U.Regular);break;case\"L6E\":n.set(o.not(M()),U.Dim);break;case\"L6EO\":n.set(o.not(M()),U.Dim),n.set(M(),U.OrientationWithoutPermutation),n.set(o.and([F(),i()]),U.OrientationStickers);break;case\"Daisy\":n.set(o.all(),U.Ignored),n.set(F(),U.Dim),n.set(o.and([o.move(\"D\"),F()]),U.Regular),n.set(o.and([o.move(\"U\"),x()]),U.IgnoreNonPrimary);break;case\"Cross\":n.set(o.all(),U.Ignored),n.set(F(),U.Dim),n.set(o.and([o.move(\"D\"),F()]),U.Regular),n.set(o.and([o.move(\"D\"),x()]),U.Regular);break;case\"2x2x2\":n.set(o.or(o.moves([\"U\",\"F\",\"R\"])),U.Ignored),n.set(o.and([o.or(o.moves([\"U\",\"F\",\"R\"])),F()]),U.Dim);break;case\"2x2x3\":n.set(o.all(),U.Dim),n.set(o.or(o.moves([\"U\",\"F\",\"R\"])),U.Ignored),n.set(o.and([o.or(o.moves([\"U\",\"F\",\"R\"])),F()]),U.Dim),n.set(o.and([o.move(\"F\"),o.not(o.or(o.moves([\"U\",\"R\"])))]),U.Regular);break;case\"Void Cube\":n.set(F(),U.Invisible);break;case\"picture\":case\"invisible\":n.set(o.all(),U.Invisible);break;case\"centers-only\":n.set(o.not(F()),U.Ignored);break;case\"experimental-global-custom-1\":case\"experimental-global-custom-2\":l0(n,o);break;default:console.warn(`Unsupported stickering for ${e.id}: ${t}. Setting all pieces to dim.`),n.set(o.and(o.moves([])),U.Dim)}return n.toAppearance()})}function Hr(){return D(this,null,function*(){return[\"full\",\"PLL\",\"CLS\",\"OLL\",\"COLL\",\"OCLL\",\"ELL\",\"ELS\",\"LL\",\"F2L\",\"ZBLL\",\"ZBLS\",\"WVLS\",\"VLS\",\"LS\",\"EO\",\"CMLL\",\"L6E\",\"L6EO\",\"Daisy\",\"Cross\",\"2x2x2\",\"2x2x3\",\"Void Cube\",\"picture\",\"invisible\",\"centers-only\",\"experimental-global-custom-1\",\"experimental-global-custom-2\"]})}var Yr=S(()=>{Qn();i0()});var qn,s0=S(()=>{qn=class{constructor(t,r){this.facenames=t;this.prefixFree=!0;this.gripnames=[];r&&(this.gripnames=r);for(let n=0;this.prefixFree&&n<t.length;n++)for(let o=0;this.prefixFree&&o<t.length;o++)n!==o&&t[n].startsWith(t[o])&&(this.prefixFree=!1)}setGripNames(t){this.gripnames=t}splitByFaceNames(t){let r=[],n=0;for(;n<t.length;){n>0&&n<t.length&&t[n]===\"_\"&&n++;let o=-1;for(let l=0;l<this.facenames.length;l++)t.substr(n).startsWith(this.facenames[l])&&(o<0||this.facenames[l].length>this.facenames[o].length)&&(o=l);if(o>=0)r.push(o),n+=this.facenames[o].length;else throw new Error(\"Could not split \"+t+\" into face names.\")}return r}joinByFaceIndices(t){let r=\"\",n=[];for(let o=0;o<t.length;o++)n.push(r),n.push(this.facenames[t[o]]),this.prefixFree||(r=\"_\");return n.join(\"\")}spinmatch(t,r){if(t===r)return!0;try{let n=this.splitByFaceNames(t),o=this.splitByFaceNames(r);if(n.length!==o.length&&n.length<3)return!1;for(let l=0;l<n.length;l++){for(let s=0;s<l;s++)if(n[l]===n[s])return!1;let i=!1;for(let s=0;s<o.length;s++)if(n[l]===o[s]){i=!0;break}if(!i)return!1}return!0}catch(n){return!1}}unswizzle(t){(t.endsWith(\"v\")||t.endsWith(\"w\"))&&t[0]<=\"Z\"&&(t=t.slice(0,t.length-1));let r=t.toUpperCase();for(let n=0;n<this.gripnames.length;n++){let o=this.gripnames[n];if(this.spinmatch(r,o))return o}return t}}});var Zr,a0=S(()=>{Zr=class{notationToInternal(t){return t}notationToExternal(t){return t}}});var jo,u0=S(()=>{he();jo=class{constructor(t,r){this.child=t;this.sw=r}notationToInternal(t){return t.family===\"T\"&&t.innerLayer===void 0&&t.outerLayer===void 0?new d(new I(\"FLRv\",t.innerLayer,t.outerLayer),t.amount):this.child.notationToInternal(t)}notationToExternal(t){let r=t.family;return r.length>0&&r[r.length-1]===\"v\"&&(r=r.substring(0,r.length-1)),this.sw.spinmatch(r,\"FLUR\")?new d(new I(\"T\",t.innerLayer,t.outerLayer),t.amount):this.child.notationToExternal(t)}}});var jn,f0=S(()=>{he();jn=class{constructor(t,r){this.internalNames=t;this.externalNames=r}convertString(t,r,n){let o=\"\";(t.endsWith(\"v\")||t.endsWith(\"v\"))&&t<=\"_\"&&(o=t.slice(t.length-1),t=t.slice(0,t.length-1));let l=t.toUpperCase(),i=!1;return t!==l&&(i=!0,t=l),t=n.joinByFaceIndices(r.splitByFaceNames(t)),i&&(t=t.toLowerCase()),t+o}convert(t,r,n){let o=t.family,l=this.convertString(o,r,n);return o===l?t:new d(new I(l,t.innerLayer,t.outerLayer),t.amount)}notationToInternal(t){return this.convert(t,this.externalNames,this.internalNames)}notationToExternal(t){return this.convert(t,this.internalNames,this.externalNames)}}});var Ko,c0=S(()=>{he();Ko=class{constructor(t){this.child=t}notationToInternal(t){if(t.innerLayer===void 0&&t.outerLayer===void 0){if(Math.abs(t.amount)===1){if(t.family===\"R++\")return new d(new I(\"L\",3,2),-2*t.amount);if(t.family===\"R--\")return new d(new I(\"L\",3,2),2*t.amount);if(t.family===\"D++\")return new d(new I(\"U\",3,2),-2*t.amount);if(t.family===\"D--\")return new d(new I(\"U\",3,2),2*t.amount);if(t.family===\"R_PLUSPLUS_\")return new d(new I(\"L\",3,2),-2*t.amount);if(t.family===\"D_PLUSPLUS_\")return new d(new I(\"U\",3,2),-2*t.amount)}if(t.family===\"y\")return new d(\"Uv\",t.amount)}return this.child.notationToInternal(t)}notationToExternal(t){return t.family===\"Uv\"?new d(new I(\"y\",t.innerLayer,t.outerLayer),t.amount):t.family===\"Dv\"?new d(\"y\",-t.amount):this.child.notationToExternal(t)}}});var Vo,g0=S(()=>{he();Vo=class{constructor(t){this.slices=t}notationToInternal(t){let r=t.family;return!t.innerLayer&&!t.outerLayer&&(r===\"x\"?t=new d(\"Rv\",t.amount):r===\"y\"?t=new d(\"Uv\",t.amount):r===\"z\"&&(t=new d(\"Fv\",t.amount)),(this.slices&1)==1&&(r===\"E\"?t=new d(new I(\"D\",(this.slices+1)/2),t.amount):r===\"M\"?t=new d(new I(\"L\",(this.slices+1)/2),t.amount):r===\"S\"&&(t=new d(new I(\"F\",(this.slices+1)/2),t.amount))),this.slices>2&&(r===\"e\"?t=new d(new I(\"D\",this.slices-1,2),t.amount):r===\"m\"?t=new d(new I(\"L\",this.slices-1,2),t.amount):r===\"s\"&&(t=new d(new I(\"F\",this.slices-1,2),t.amount)))),t}notationToExternal(t){let r=t.family;if(!t.innerLayer&&!t.outerLayer){if(r===\"Rv\")return new d(\"x\",t.amount);if(r===\"Uv\")return new d(\"y\",t.amount);if(r===\"Fv\")return new d(\"z\",t.amount);if(r===\"Lv\")return new d(\"x\",-t.amount);if(r===\"Dv\")return new d(\"y\",-t.amount);if(r===\"Bv\")return new d(\"z\",-t.amount)}return t}}});var nc,oc,m0,p0,d0,Kn,Ho,L0=S(()=>{he();nc={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\"},oc={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\"},m0={U:\"FRL\",L:\"FLD\",R:\"FDR\",B:\"DLR\"},p0=new I(\"y\"),d0=new I(\"Dv\"),Kn=class{constructor(t){this.child=t;this.wcaHack=!1;this.map=nc}notationToInternal(t){if(this.wcaHack&&t.innerLayer===2&&t.outerLayer===null){let n=m0[t.family];if(n)return new d(new I(n,t.innerLayer,t.outerLayer),t.amount)}let r=this.map[t.family];return r?new d(new I(r,t.innerLayer,t.outerLayer),t.amount):p0.isIdentical(t.quantum)?new d(d0,-t.amount):null}notationToExternal(t){if(this.wcaHack&&t.innerLayer===2&&t.outerLayer===null){for(let[r,n]of Object.entries(m0))if(this.child.spinmatch(t.family,n))return new d(new I(r,t.innerLayer,t.outerLayer),t.amount)}for(let[r,n]of Object.entries(this.map))if(this.child.spinmatch(t.family,n))return new d(new I(r,t.innerLayer,t.outerLayer),t.amount);return d0.isIdentical(t.quantum)?new d(p0,-t.amount):null}},Ho=class extends Kn{constructor(t){super(t);this.map=oc}}});var h0,R0,A0,y0,D0,F0,B0,Yo,b0=S(()=>{he();h0={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\"},R0=new I(\"x\"),A0=new I(\"Rv\"),y0=new I(\"y\"),D0=new I(\"Uv\"),F0=new I(\"z\"),B0=new I(\"Fv\"),Yo=class{constructor(t){this.child=t}notationToInternal(t){if(t.innerLayer||t.outerLayer)return null;let r=h0[t.family];return r?new d(new I(r,t.outerLayer,t.innerLayer),t.amount):R0.isIdentical(t.quantum)?new d(A0,t.amount):y0.isIdentical(t.quantum)?new d(D0,t.amount):F0.isIdentical(t.quantum)?new d(B0,t.amount):null}notationToExternal(t){for(let[r,n]of Object.entries(h0))if(this.child.spinmatch(t.family,n))return new d(new I(r,t.innerLayer,t.outerLayer),t.amount);return A0.isIdentical(t.quantum)?new d(R0,t.amount):D0.isIdentical(t.quantum)?new d(y0,t.amount):B0.isIdentical(t.quantum)?new d(F0,t.amount):null}}});var vi=S(()=>{a0();u0();f0();c0();g0();L0();b0()});function x0(e){let t=0,r={};for(;t<e.length&&e[t][0]===\"-\";){let o=e[t++];if(o===\"--rotations\")r.addRotations=!0;else if(o===\"--allmoves\")r.allMoves=!0;else if(o===\"--outerblockmoves\")r.outerBlockMoves=!0;else if(o===\"--vertexmoves\")r.vertexMoves=!0;else if(o===\"--nocorners\")r.includeCornerOrbits=!1;else if(o===\"--noedges\")r.includeEdgeOrbits=!1;else if(o===\"--noorientation\")r.fixedOrientation=!0;else if(o===\"--nocenters\")r.includeCenterOrbits=!1;else if(o===\"--omit\")r.excludeOrbits=e[t].split(\",\"),t++;else if(o===\"--moves\")r.moveList=e[t].split(\",\"),t++;else if(o===\"--optimize\")r.optimizeOrbits=!0;else if(o===\"--scramble\")r.scrambleAmount=100;else if(o===\"--fixcorner\")r.fixedPieceType=\"v\";else if(o===\"--fixedge\")r.fixedPieceType=\"e\";else if(o===\"--fixcenter\")r.fixedPieceType=\"f\";else if(o===\"--orientcenters\")r.orientCenters=!0;else if(o===\"--puzzleorientation\")r.puzzleOrientation=JSON.parse(e[t]),t++;else throw new Error(\"Bad option: \"+o)}return{puzzleDescription:Vn(e.slice(t).join(\" \")),options:r}}var wi,Ei=S(()=>{Ui();wi=class{constructor(t={}){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,t)}}});function Jt(e){if(!ki[e]){let t=Array(e);for(let r=0;r<e;r++)t[r]=0;ki[e]=t}return ki[e]}function wt(e){if(!zi[e]){let t=Array(e);for(let r=0;r<e;r++)t[r]=r;zi[e]=t}return zi[e]}function S0(e){return new ut(wt(e))}function v0(e){let t=1;for(;e>1;)t*=e,e--;return t}function lc(e,t){if(e>t){let r=e;e=t,t=r}for(;e>0;){let r=t%e;t=e,e=r}return t}function Ci(e,t){return e/lc(e,t)*t}var ki,zi,ut,Zo=S(()=>{ki=[],zi=[];ut=class{constructor(t){this.n=t.length,this.p=t}toString(){return\"Perm[\"+this.p.join(\" \")+\"]\"}mul(t){let r=Array(this.n);for(let n=0;n<this.n;n++)r[n]=t.p[this.p[n]];return new ut(r)}rmul(t){let r=Array(this.n);for(let n=0;n<this.n;n++)r[n]=this.p[t.p[n]];return new ut(r)}inv(){let t=Array(this.n);for(let r=0;r<this.n;r++)t[this.p[r]]=r;return new ut(t)}compareTo(t){for(let r=0;r<this.n;r++)if(this.p[r]!==t.p[r])return this.p[r]-t.p[r];return 0}toGap(){let t=new Array,r=new Array(this.n);for(let n=0;n<this.p.length;n++){if(r[n]||this.p[n]===n)continue;let o=new Array;for(let l=n;!r[l];l=this.p[l])o.push(1+l),r[l]=!0;t.push(\"(\"+o.join(\",\")+\")\")}return t.join(\"\")}order(){let t=1,r=new Array(this.n);for(let n=0;n<this.p.length;n++){if(r[n]||this.p[n]===n)continue;let o=0;for(let l=n;!r[l];l=this.p[l])o++,r[l]=!0;t=Ci(t,o)}return t}}});function Mi(e,t){let r=d.fromString(t),n=e.notationToExternal(r);return n===null||r===n?t:n.toString()}function w0(e,t){let r=e.moveops.length;if(r>30)throw new Error(\"Canon info too big for bitmask\");let n=[],o=[];for(let i=0;i<r;i++){let s=e.moveops[i];n.push(s.order());let u=0;for(let a=0;a<r;a++){if(a===i)continue;let f=e.moveops[a];s.mul(f).equal(f.mul(s))&&(u|=1<<a)}o.push(u)}let l={};l[0]=1;for(let i=0;i<100;i++){let s=0,u={},a=0;for(let f in l){let c=+f,g=l[c];s+=g,a++;for(let m=0;m<n.length;m++)if((c>>m&1)==0&&(c&o[m]&(1<<m)-1)==0){let L=c&o[m]|1<<m;u[L]===void 0&&(u[L]=0),u[L]+=(n[m]-1)*g}}t(`${i}: canonseq ${s} states ${a}`),l=u}}var Hn,Xr,At,It,Pi,$t,Jr,Gi,E0=S(()=>{he();vi();Zo();Hn=class{constructor(t,r){this.size=t;this.mod=r}reassemblySize(){return v0(this.size)*Math.pow(this.mod,this.size)}};Xr=class{constructor(t,r,n,o,l){this.orbitnames=t;this.orbitdefs=r;this.solved=n;this.movenames=o;this.moveops=l}transformToKPuzzle(t){let r={};for(let n=0;n<this.orbitnames.length;n++)r[this.orbitnames[n]]=t.orbits[n].toKPuzzle();return r}static transformToKPuzzle(t,r){let n={};for(let o=0;o<t.length;o++)n[t[o]]=r.orbits[o].toKPuzzle();return n}toKsolve(t,r=new Zr){let n=[];n.push(\"Name \"+t),n.push(\"\");for(let o=0;o<this.orbitnames.length;o++)n.push(`Set ${this.orbitnames[o]} ${this.orbitdefs[o].size} ${this.orbitdefs[o].mod}`);n.push(\"\"),n.push(\"Solved\");for(let o=0;o<this.orbitnames.length;o++)this.solved.orbits[o].appendDefinition(n,this.orbitnames[o],!1,!1);n.push(\"End\");for(let o=0;o<this.movenames.length;o++){n.push(\"\");let l=Mi(r,this.movenames[o]),i=!1;l[l.length-1]===\"'\"&&(i=!0,l=l.substring(0,l.length-1)),n.push(\"Move \"+l);for(let s=0;s<this.orbitnames.length;s++)i?this.moveops[o].orbits[s].inv().appendDefinition(n,this.orbitnames[s],!0):this.moveops[o].orbits[s].appendDefinition(n,this.orbitnames[s],!0);n.push(\"End\")}return n}toKPuzzle(t){let r={},n={};for(let l=0;l<this.orbitnames.length;l++)r[this.orbitnames[l]]={numPieces:this.orbitdefs[l].size,orientations:this.orbitdefs[l].mod},n[this.orbitnames[l]]=this.solved.orbits[l].toKPuzzle();let o={};if(t)for(let l=0;l<this.movenames.length;l++)o[this.movenames[l]]=this.transformToKPuzzle(this.moveops[l]);return{name:\"PG3D\",orbits:r,startPieces:n,moves:o}}optimize(){let t=[],r=[],n=[],o=[];for(let l=0;l<this.moveops.length;l++)o.push([]);for(let l=0;l<this.orbitdefs.length;l++){let i=this.orbitdefs[l].mod,s=this.orbitdefs[l].size,u=new Gi(s),a=new Array(this.orbitdefs[l].size);for(let m=0;m<s;m++)a[m]=!1;for(let m=0;m<this.moveops.length;m++)for(let L=0;L<s;L++)(this.moveops[m].orbits[l].perm[L]!==L||this.moveops[m].orbits[l].ori[L]!==0)&&(a[L]=!0,u.union(L,this.moveops[m].orbits[l].perm[L]));let f=!0;if(i>1){f=!1;let m=new Gi(this.orbitdefs[l].size*i);for(let L=0;L<this.moveops.length;L++)for(let p=0;p<s;p++)if(this.moveops[L].orbits[l].perm[p]!==p||this.moveops[L].orbits[l].ori[p]!==0)for(let y=0;y<i;y++)m.union(p*i+y,this.moveops[L].orbits[l].perm[p]*i+(y+this.moveops[L].orbits[l].ori[p])%i);for(let L=0;!f&&L<s;L++)for(let p=1;p<i;p++)m.find(L*i)===m.find(L*i+p)&&(f=!0);for(let L=0;!f&&L<s;L++)for(let p=0;p<L;p++)this.solved.orbits[l].perm[L]===this.solved.orbits[l].perm[p]&&(f=!0)}let c=-1,g=!1;for(let m=0;m<this.orbitdefs[l].size;m++)if(a[m]){let L=u.find(m);c<0?c=L:c!==L&&(g=!0)}for(let m=0;m<this.orbitdefs[l].size;m++){if(!a[m]||u.find(m)!==m)continue;let p=[],y=[],F=0;for(let x=0;x<this.orbitdefs[l].size;x++)u.find(x)===m&&(p[F]=x,y[x]=F,F++);if(g?t.push(`${this.orbitnames[l]}_p${m}`):t.push(this.orbitnames[l]),f){r.push(new Hn(F,this.orbitdefs[l].mod)),n.push(this.solved.orbits[l].remapVS(p,F));for(let x=0;x<this.moveops.length;x++)o[x].push(this.moveops[x].orbits[l].remap(p,y,F))}else{r.push(new Hn(F,1)),n.push(this.solved.orbits[l].remapVS(p,F).killOri());for(let x=0;x<this.moveops.length;x++)o[x].push(this.moveops[x].orbits[l].remap(p,y,F).killOri())}}}return new Xr(t,r,new Jr(n),this.movenames,o.map(l=>new $t(l)))}scramble(t){let r=[];for(let o=0;o<this.moveops.length;o++)r[o]=this.moveops[o];for(let o=0;o<r.length;o++){let l=Math.floor(Math.random()*r.length),i=r[o];r[o]=r[l],r[l]=i}t<r.length&&(t=r.length);for(let o=0;o<t;o++){let l=Math.floor(Math.random()*r.length),i=Math.floor(Math.random()*r.length),s=Math.floor(Math.random()*this.moveops.length);r[l]=r[l].mul(r[i]).mul(this.moveops[s]),Math.random()<.1&&(r[l]=r[l].mul(this.moveops[s]))}let n=r[0];for(let o=1;o<r.length;o++)n=n.mul(r[o]);this.solved=this.solved.mul(n)}reassemblySize(){let t=1;for(let r=0;r<this.orbitdefs.length;r++)t*=this.orbitdefs[r].reassemblySize();return t}},At=class{constructor(t,r,n){this.perm=t;this.ori=r;this.orimod=n}static e(t,r){return new At(wt(t),Jt(t),r)}mul(t){let r=this.perm.length,n=new Array(r);if(this.orimod===1){for(let o=0;o<r;o++)n[o]=this.perm[t.perm[o]];return new At(n,this.ori,this.orimod)}else{let o=new Array(r);for(let l=0;l<r;l++)n[l]=this.perm[t.perm[l]],o[l]=(this.ori[t.perm[l]]+t.ori[l])%this.orimod;return new At(n,o,this.orimod)}}inv(){let t=this.perm.length,r=new Array(t),n=new Array(t);for(let o=0;o<t;o++)r[this.perm[o]]=o,n[this.perm[o]]=(this.orimod-this.ori[o])%this.orimod;return new At(r,n,this.orimod)}equal(t){let r=this.perm.length;for(let n=0;n<r;n++)if(this.perm[n]!==t.perm[n]||this.ori[n]!==t.ori[n])return!1;return!0}killOri(){let t=this.perm.length;for(let r=0;r<t;r++)this.ori[r]=0;return this.orimod=1,this}toPerm(){let t=this.orimod;if(t===1)return new ut(this.perm);let r=this.perm.length,n=new Array(r*t);for(let o=0;o<r;o++)for(let l=0;l<t;l++)n[o*t+l]=t*this.perm[o]+(this.ori[o]+l)%t;return new ut(n)}identicalPieces(){let t=[],r=this.perm.length,n=[];for(let o=0;o<r;o++){let l=this.perm[o];if(t[l]===void 0){let i=[o];t[l]=!0;for(let s=o+1;s<r;s++)this.perm[s]===l&&i.push(s);n.push(i)}}return n}order(){return this.toPerm().order()}isIdentity(){let t=this.perm.length;if(this.perm===wt(t)&&this.ori===Jt(t))return!0;for(let r=0;r<t;r++)if(this.perm[r]!==r||this.ori[r]!==0)return!1;return!0}zeroOris(){let t=this.perm.length;if(this.ori===Jt(t))return!0;for(let r=0;r<t;r++)if(this.ori[r]!==0)return!1;return!0}remap(t,r,n){let o=new Array(n),l=new Array(n);for(let i=0;i<n;i++)o[i]=r[this.perm[t[i]]],l[i]=this.ori[t[i]];return new At(o,l,this.orimod)}remapVS(t,r){let n=new Array(r),o=new Array(r),l=0,i=[];for(let s=0;s<r;s++){let u=this.perm[t[s]];i[u]===void 0&&(i[u]=l++),n[s]=i[u],o[s]=this.ori[t[s]]}return new At(n,o,this.orimod)}appendDefinition(t,r,n,o=!0){if(!(o&&this.isIdentity())&&(t.push(r),t.push(this.perm.map(l=>l+1).join(\" \")),!this.zeroOris()))if(n){let l=new Array(this.ori.length);for(let i=0;i<l.length;i++)l[this.perm[i]]=this.ori[i];t.push(l.join(\" \"))}else t.push(this.ori.join(\" \"))}toKPuzzle(){let t=this.perm.length;return this.isIdentity()?(At.kcache[t]||(At.kcache[t]={permutation:wt(t),orientation:Jt(t)}),At.kcache[t]):{permutation:this.perm,orientation:this.ori}}},It=At;It.kcache=[];Pi=class{constructor(t){this.orbits=t}internalMul(t){let r=[];for(let n=0;n<this.orbits.length;n++)r.push(this.orbits[n].mul(t.orbits[n]));return r}internalInv(){let t=[];for(let r of this.orbits)t.push(r.inv());return t}equal(t){for(let r=0;r<this.orbits.length;r++)if(!this.orbits[r].equal(t.orbits[r]))return!1;return!0}killOri(){for(let t of this.orbits)t.killOri();return this}toPerm(){let t=new Array,r=0;for(let o of this.orbits){let l=o.toPerm();t.push(l),r+=l.n}let n=new Array(r);r=0;for(let o of t){for(let l=0;l<o.n;l++)n[r+l]=r+o.p[l];r+=o.n}return new ut(n)}identicalPieces(){let t=[],r=0;for(let n of this.orbits){let o=n.orimod,l=n.identicalPieces();for(let i=0;i<l.length;i++)t.push(l[i].map(s=>s*o+r));r+=o*n.perm.length}return t}order(){let t=1;for(let r of this.orbits)t=Ci(t,r.order());return t}},$t=class extends Pi{constructor(t){super(t)}mul(t){return new $t(this.internalMul(t))}mulScalar(t){if(t===0)return this.e();let r=this;for(t<0&&(r=r.inv(),t=-t);(t&1)==0;)r=r.mul(r),t>>=1;if(t===1)return r;let n=r,o=this.e();for(;t>0;)t&1&&(o=o.mul(n)),t>1&&(n=n.mul(n)),t>>=1;return o}inv(){return new $t(this.internalInv())}e(){return new $t(this.orbits.map(t=>It.e(t.perm.length,t.orimod)))}},Jr=class extends Pi{constructor(t){super(t)}mul(t){return new Jr(this.internalMul(t))}},Gi=class{constructor(t){this.n=t;this.heads=new Array(t);for(let r=0;r<t;r++)this.heads[r]=r}find(t){let r=this.heads[t];return this.heads[r]===r||(r=this.find(this.heads[r]),this.heads[t]=r),r}union(t,r){let n=this.find(t),o=this.find(r);n<o?this.heads[o]=n:n>o&&(this.heads[n]=o)}}});var Xo,U0=S(()=>{Xo={\"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 Jo(e){let t=new W(0,0,0,0);for(let r=0;r<e.length;r++)t=t.sum(e[r]);return t.smul(1/e.length)}function k0(e,t,r,n){let o=n[e].intersect3(n[t],n[r]);if(!o)return o;for(let l=0;l<n.length;l++)if(l!==e&&l!==t&&l!==r){let i=n[l].b*o.b+n[l].c*o.c+n[l].d*o.d;if(n[l].a>0&&i>n[l].a||n[l].a<0&&i<n[l].a)return!1}return o}var Dr,W,$o=S(()=>{Dr=1e-9;W=class{constructor(t,r,n,o){this.a=t;this.b=r;this.c=n;this.d=o}mul(t){return new W(this.a*t.a-this.b*t.b-this.c*t.c-this.d*t.d,this.a*t.b+this.b*t.a+this.c*t.d-this.d*t.c,this.a*t.c-this.b*t.d+this.c*t.a+this.d*t.b,this.a*t.d+this.b*t.c-this.c*t.b+this.d*t.a)}toString(){return`Q[${this.a},${this.b},${this.c},${this.d}]`}dist(t){return Math.hypot(this.a-t.a,this.b-t.b,this.c-t.c,this.d-t.d)}len(){return Math.hypot(this.a,this.b,this.c,this.d)}cross(t){return new W(0,this.c*t.d-this.d*t.c,this.d*t.b-this.b*t.d,this.b*t.c-this.c*t.b)}dot(t){return this.b*t.b+this.c*t.c+this.d*t.d}normalize(){let t=Math.sqrt(this.dot(this));return new W(this.a/t,this.b/t,this.c/t,this.d/t)}makenormal(){return new W(0,this.b,this.c,this.d).normalize()}normalizeplane(){let t=Math.hypot(this.b,this.c,this.d);return new W(this.a/t,this.b/t,this.c/t,this.d/t)}smul(t){return new W(this.a*t,this.b*t,this.c*t,this.d*t)}sum(t){return new W(this.a+t.a,this.b+t.b,this.c+t.c,this.d+t.d)}sub(t){return new W(this.a-t.a,this.b-t.b,this.c-t.c,this.d-t.d)}angle(){return 2*Math.acos(this.a)}invrot(){return new W(this.a,-this.b,-this.c,-this.d)}det3x3(t,r,n,o,l,i,s,u,a){return t*(l*a-i*u)+r*(i*s-o*a)+n*(o*u-l*s)}rotateplane(t){let r=t.mul(new W(0,this.b,this.c,this.d)).mul(t.invrot());return r.a=this.a,r}orthogonal(){let t=Math.abs(this.b),r=Math.abs(this.c),n=Math.abs(this.d);return t<r&&t<n?this.cross(new W(0,1,0,0)).normalize():r<t&&r<n?this.cross(new W(0,0,1,0)).normalize():this.cross(new W(0,0,0,1)).normalize()}pointrotation(t){let r=this.normalize();if(t=t.normalize(),r.sub(t).len()<Dr)return new W(1,0,0,0);let n=r.sum(t);n.len()<Dr?n=n.orthogonal():n=n.normalize();let o=r.cross(n);return o.a=r.dot(n),o}unproject(t){return this.sum(t.smul(-this.dot(t)/(this.len()*t.len())))}rotatepoint(t){return t.mul(this).mul(t.invrot())}rotateface(t){return t.map(r=>r.rotatepoint(this))}intersect3(t,r){let n=this.det3x3(this.b,this.c,this.d,t.b,t.c,t.d,r.b,r.c,r.d);return Math.abs(n)<Dr?!1:new W(0,this.det3x3(this.a,this.c,this.d,t.a,t.c,t.d,r.a,r.c,r.d)/n,this.det3x3(this.b,this.a,this.d,t.b,t.a,t.d,r.b,r.a,r.d)/n,this.det3x3(this.b,this.c,this.a,t.b,t.c,t.a,r.b,r.c,r.a)/n)}side(t){return t>Dr?1:t<-Dr?-1:0}cutface(t){let r=this.a,n=0,o=null;for(let l=0;l<t.length;l++)n|=1<<this.side(t[l].dot(this)-r)+1;if((n&5)==5){o=[];let l=t.map(i=>this.side(i.dot(this)-r));for(let i=-1;i<=1;i+=2){let s=[];for(let u=0;u<t.length;u++){(l[u]===i||l[u]===0)&&s.push(t[u]);let a=(u+1)%t.length;if(l[u]+l[a]===0&&l[u]!==0){let f=t[u].dot(this)-r,c=t[a].dot(this)-r,g=f/(f-c),m=t[u].smul(1-g).sum(t[a].smul(g));s.push(m)}}o.push(s)}}return o}cutfaces(t){let r=[];for(let n=0;n<t.length;n++){let o=t[n],l=this.cutface(o);l?(r.push(l[0]),r.push(l[1])):r.push(o)}return r}faceside(t){let r=this.a;for(let n=0;n<t.length;n++){let o=this.side(t[n].dot(this)-r);if(o!==0)return o}throw new Error(\"Could not determine side of plane in faceside\")}sameplane(t){let r=this.normalize(),n=t.normalize();return r.dist(n)<Dr||r.dist(n.smul(-1))<Dr}makecut(t){return new W(t,this.b,this.c,this.d)}}});function z0(){let e=Math.sqrt(.5);return[new W(e,e,0,0),new W(e,0,e,0)]}function C0(){return[new W(.5,.5,.5,.5),new W(.5,.5,.5,-.5)]}function M0(){let e=2*Math.PI/10,t=.5+.3*Math.sqrt(5),r=.5+.1*Math.sqrt(5),n=Math.sqrt(t*t+r*r);return t/=n,r/=n,[new W(Math.cos(e),t*Math.sin(e),r*Math.sin(e),0),new W(.5,.5,.5,.5)]}function P0(){let e=1/6+Math.sqrt(5)/6,t=2/3+Math.sqrt(5)/3,r=Math.sqrt(e*e+t*t);e/=r,t/=r;let n=2*Math.PI/6;return[new W(Math.cos(n),e*Math.sin(n),t*Math.sin(n),0),new W(Math.cos(n),-e*Math.sin(n),t*Math.sin(n),0)]}function G0(){let e=Math.sqrt(.5);return[new W(.5,.5,.5,.5),new W(e,0,0,e)]}function I0(e){let t=[new W(1,0,0,0)];for(let r=0;r<t.length;r++)for(let n=0;n<e.length;n++){let o=e[n].mul(t[r]),l=o.smul(-1),i=!1;for(let s=0;s<t.length;s++)if(o.dist(t[s])<el||l.dist(t[s])<el){i=!0;break}i||t.push(o)}return t}function Ii(e,t){let r=[],n=[];for(let o=0;o<t.length;o++){let l=e.rotateplane(t[o]),i=!1;for(let s=0;s<r.length;s++)if(l.dist(r[s])<el){i=!0;break}i||(r.push(l),n.push(t[o]))}return n}function Ti(e){let t=[];for(let r=1;r<e.length;r++)for(let n=r+1;n<e.length;n++){let o=k0(0,r,n,e);if(o){let l=!1;for(let i=0;i<t.length;i++)if(o.dist(t[i])<el){l=!0;break}l||t.push(o)}}for(;;){let r=!1;for(let n=0;n<t.length;n++){let o=(n+1)%t.length;if(e[0].dot(t[n].cross(t[o]))<0){let l=t[n];t[n]=t[o],t[o]=l,r=!0}}if(!r)break}return t}var el,T0=S(()=>{$o();el=1e-9});function tl(e,t){let r=e[0].p.length,n=S0(r),o=[],l=[],i=[],s=[],u=[];function a(m){for(let L=m.p.length-1;L>=0;L--){let p=m.p[L];if(p!==L){if(!o[L][p])return!1;m=m.mul(l[L][p])}}return!0}function f(m,L,p){s[m].push(L),u[m].push(p);for(let y=0;y<o[m].length;y++)o[m][y]&&c(m,o[m][y].mul(L),p+i[m][y])}function c(m,L,p){let y=L.p[m];if(!o[m][y]){o[m][y]=L,l[m][y]=L.inv(),i[m][y]=p;for(let x=0;x<s[m].length;x++)c(m,L.mul(s[m][x]),p+u[m][x]);return}let F=L.mul(l[m][y]);a(F)||f(m-1,F,p+i[m][y])}function g(){o=[],l=[],s=[],i=[],u=[];for(let p=0;p<r;p++)o.push([]),l.push([]),i.push([]),s.push([]),u.push([]),o[p][p]=n,l[p][p]=n,i[p][p]=0;let m=0,L=1;for(let p=0;p<e.length;p++){f(r-1,e[p],1),L=1;let y=0,F=0,x=[],B=new N0;for(let M=0;M<r;M++){let k=0,K=0;for(let N=0;N<r;N++)o[M][N]&&(k++,K+=i[M][N],M!==N&&m++);y+=s[M].length,L*=k,k>1&&B.multiply(k);let te=K/k;x.push(te),F+=te}t(`${p}: sz ${L} T ${y} sol ${F} none ${m} mults ${B.toString()}`)}return L}return g()}var N0,Ni=S(()=>{Zo();N0=class{constructor(){this.mult=[]}multiply(t){for(let r=2;r*r<=t;r++)for(;t%r==0;)this.mult[r]!==void 0?this.mult[r]++:this.mult[r]=1,t/=r;t>1&&(this.mult[t]!==void 0?this.mult[t]++:this.mult[t]=1)}toString(){let t=\"\";for(let r=0;r<this.mult.length;r++)this.mult[r]!==void 0&&(t!==\"\"&&(t+=\"*\"),t+=r,this.mult[r]>1&&(t+=`^${this.mult[r]}`));return t}}});function _i(e){return e}function Oi(e){}function ic(e,t){let r=[];for(let n of e)for(let o of t)r.push(o.rotate(n));return r}function uc(){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 fc(){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 cc(){return{4:[\"F\",\"D\",\"L\",\"R\"],6:[\"U\",\"D\",\"F\",\"B\",\"L\",\"R\"],8:[\"F\",\"BB\",\"D\",\"U\",\"BR\",\"L\",\"R\",\"BL\"],12:[\"L\",\"E\",\"F\",\"BF\",\"R\",\"I\",\"U\",\"D\",\"BR\",\"A\",\"BL\",\"C\"],20:[\"L\",\"S\",\"E\",\"O\",\"F\",\"B\",\"I\",\"P\",\"R\",\"K\",\"U\",\"D\",\"J\",\"A\",\"Q\",\"H\",\"G\",\"N\",\"M\",\"C\"]}}function gc(){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 rl(e,t){for(let r=0;r<e.length;r++)if(e[r][0].dist(t)<Be)return r;throw new Error(\"Element not found\")}function _0(){return Xo}function O0(e){return Xo[e]}function Vn(e){let t=e.split(/ /).filter(Boolean);if(t.length%2==0)return null;let r=t[0];if(r!==\"o\"&&r!==\"c\"&&r!==\"i\"&&r!==\"d\"&&r!==\"t\")return null;let n=[];for(let o=1;o<t.length;o+=2){if(t[o]!==\"f\"&&t[o]!==\"v\"&&t[o]!==\"e\")return null;n.push({cutType:t[o],distance:parseFloat(t[o+1])})}return{shape:r,cuts:n}}function Wi(e,t={}){let r=Vn(e);if(r===null)throw new Error(\"Could not parse the puzzle description\");let n=new ol(r,Object.assign({},{allMoves:!0},t));return n.allstickers(),n.genperms(),n}function en(e,t){return Wi(Xo[e],t)}function mc(e,t,r){let n=!1;r-t[1]<t[0]&&(e=[e[2],e[3],e[0],e[1]],t=[r-t[1],r-t[0]],n=!0);let o=e[0],l=\"\";if(t[0]===0&&t[1]===r)o=o+\"v\";else if(t[0]===t[1])t[1]>0&&(l=String(t[1]+1));else if(t[0]===0)o=o.toLowerCase(),t[1]>1&&(l=String(t[1]+1));else throw`We only support slice and outer block moves right now. ${t}`;return[l+o,n]}function pc(e,t){let r=[],n=0;for(;n<e.length;){n>0&&n<e.length&&e[n]===\"_\"&&n++;let o=\"\";for(let l of t)e.substr(n).startsWith(l[1])&&l[1].length>o.length&&(o=l[1]);if(o!==\"\")r.push(o),n+=o.length;else throw new Error(\"Could not split \"+e+\" into face names.\")}return r}function nl(e,t){return[e.b/t,-e.c/t,e.d/t]}function Qi(e,t){let r=[],n=e.length;for(let o=0;o<n;o++){let l=nl(e.get(n-o-1),t);r[3*o]=l[0],r[3*o+1]=l[1],r[3*o+2]=l[2]}return r}var $r,Yn,Be,sc,ac,ol,W0,Ui=S(()=>{he();s0();vi();Ei();Zo();E0();U0();T0();$o();Ni();$r=class{constructor(t){this.coords=new Array(t.length*3);for(let r=0;r<t.length;r++)this.coords[3*r]=t[r].b,this.coords[3*r+1]=t[r].c,this.coords[3*r+2]=t[r].d;this.length=t.length}get(t){return new W(0,this.coords[3*t],this.coords[3*t+1],this.coords[3*t+2])}centermass(){let t=0,r=0,n=0;for(let o=0;o<this.length;o++)t+=this.coords[3*o],r+=this.coords[3*o+1],n+=this.coords[3*o+2];return new W(0,t/this.length,r/this.length,n/this.length)}rotate(t){let r=[];for(let n=0;n<this.length;n++)r.push(this.get(n).rotatepoint(t));return new $r(r)}rotateforward(){let t=[];for(let r=1;r<this.length;r++)t.push(this.get(r));return t.push(this.get(0)),new $r(t)}},Yn=class{constructor(t,r,n){this.face=t;this.left=r;this.right=n}split(t){var n,o;let r=t.cutface(this.face);return r!==null&&(this.left===void 0?(this.left=new Yn(r[0]),this.right=new Yn(r[1])):(this.left=(n=this.left)==null?void 0:n.split(t),this.right=(o=this.right)==null?void 0:o.split(t))),this}collect(t,r){var n,o,l,i;return this.left===void 0?t.push(new $r(this.face)):r?((n=this.left)==null||n.collect(t,!1),(o=this.right)==null||o.collect(t,!0)):((l=this.right)==null||l.collect(t,!1),(i=this.left)==null||i.collect(t,!0)),t}};Be=1e-9,sc=\"PuzzleGeometry 0.1 Copyright 2018 Tomas Rokicki.\",ac=!1;ol=class{constructor(t,r){this.cmovesbyslice=[];this.duplicatedFaces=[];this.duplicatedCubies=[];this.fixedCubie=-1;this.net=[];this.colors=[];this.faceorder=[];this.faceprecedence=[];this.notationMapper=new Zr;this.addNotationMapper=\"\";this.setReidOrder=!1;let n=_i(\"genperms\");this.options=new wi(r),this.options.verbosity>0&&console.log(this.header(\"# \")),this.create(t),Oi(n)}create(t){let{shape:r,cuts:n}=t;this.moveplanes=[],this.moveplanes2=[],this.faces=[],this.cubies=[];let o=null;switch(r){case\"c\":o=z0();break;case\"o\":o=G0();break;case\"i\":o=P0();break;case\"t\":o=C0();break;case\"d\":o=M0();break;default:throw new Error(\"Bad shape argument: \"+r)}this.rotations=I0(o),this.options.verbosity&&console.log(\"# Rotations: \"+this.rotations.length);let l=o[0];this.baseplanerot=Ii(l,this.rotations);let i=this.baseplanerot.map(A=>l.rotateplane(A));this.baseplanes=i,this.baseFaceCount=i.length;let s=uc()[i.length];this.net=s,this.colors=fc()[i.length],this.faceorder=cc()[i.length],this.options.verbosity>0&&console.log(\"# Base planes: \"+i.length);let u=Ti(i),a=new W(0,0,0,0);this.options.verbosity>0&&console.log(\"# Face vertices: \"+u.length);let f=i[0].makenormal(),c=u[0].sum(u[1]).makenormal(),g=u[0].makenormal(),m=new W(1,f.b,f.c,f.d);this.options.verbosity>0&&console.log(\"# Boundary is \"+m);let p=Ii(m,this.rotations).map(A=>m.rotateplane(A)),y=Ti(p);this.edgedistance=y[0].sum(y[1]).smul(.5).dist(a),this.vertexdistance=y[0].dist(a);let F=[],x=[],B=!1,M=!1,k=!1;for(let A of n){let E=null,_=0;switch(A.cutType){case\"f\":E=f,_=1,B=!0;break;case\"v\":E=g,_=this.vertexdistance,k=!0;break;case\"e\":E=c,_=this.edgedistance,M=!0;break;default:throw new Error(\"Bad cut argument: \"+A.cutType)}F.push(E.makecut(A.distance)),x.push(A.distance<_)}this.options.addRotations&&(B||F.push(f.makecut(10)),k||F.push(g.makecut(10)),M||F.push(c.makecut(10))),this.basefaces=[];for(let A of this.baseplanerot){let E=A.rotateface(y);this.basefaces.push(new $r(E))}let K=[],te=[],N=[],re=[],b=y.length;function C(A,E,_){for(let Q of A)if(Q[0].dist(E)<Be){Q.push(_);return}A.push([E,_])}for(let A=0;A<this.baseplanerot.length;A++){let E=this.baseplanerot[A].rotateface(y);for(let _=0;_<E.length;_++){let Q=(_+1)%E.length,ne=E[_].sum(E[Q]).smul(.5);C(re,ne,A)}}let G=[];for(let A=0;A<this.baseplanerot.length;A++){let E=this.baseplanerot[A].rotateface(y),_=[];for(let Q=0;Q<E.length;Q++){let ne=(Q+1)%E.length,Te=E[Q].sum(E[ne]).smul(.5),rt=re[rl(re,Te)];if(A===rt[1])_.push(rt[2]);else if(A===rt[2])_.push(rt[1]);else throw new Error(\"Could not find edge\")}G.push(_)}let v={},w=[];w.push(s[0][0]),v[s[0][0]]=0,w[G[0][0]]=s[0][1],v[s[0][1]]=G[0][0];for(let A of s){let E=A[0],_=v[E];if(_===void 0)throw new Error(\"Bad edge description; first edge not connected\");let Q=-1;for(let ne=0;ne<G[_].length;ne++){let Te=w[G[_][ne]];if(Te!==void 0&&Te===A[1]){Q=ne;break}}if(Q<0)throw new Error(\"First element of a net not known\");for(let ne=2;ne<A.length;ne++){if(A[ne]===\"\")continue;let Te=G[_][(ne+Q-1)%b],rt=w[Te];if(rt!==void 0&&rt!==A[ne])throw new Error(\"Face mismatch in net\");w[Te]=A[ne],v[A[ne]]=Te}}for(let A=0;A<w.length;A++){let E=!1;for(let _=0;_<this.faceorder.length;_++)if(w[A]===this.faceorder[_]){this.faceprecedence[A]=_,E=!0;break}if(!E)throw new Error(\"Could not find face \"+w[A]+\" in face order list \"+this.faceorder)}for(let A=0;A<this.baseplanerot.length;A++){let E=this.baseplanerot[A].rotateface(y),_=m.rotateplane(this.baseplanerot[A]),Q=w[A];K.push([E,Q]),te.push([_,Q])}for(let A=0;A<this.baseplanerot.length;A++){let E=this.baseplanerot[A].rotateface(y),_=w[A];for(let Q=0;Q<E.length;Q++){let ne=(Q+1)%E.length,Te=E[Q].sum(E[ne]).smul(.5),rt=(Q+2)%E.length,f1=E[ne].sum(E[rt]).smul(.5),c1=rl(re,Te),g1=rl(re,f1);C(N,E[ne],[_,g1,c1])}}this.swizzler=new qn(K.map(A=>A[1]));let P=this.swizzler.prefixFree?\"\":\"_\";for(let A=0;A<re.length;A++){if(re[A].length!==3)throw new Error(\"Bad length in edge names \"+re[A]);let E=w[re[A][1]],_=w[re[A][2]];this.faceprecedence[re[A][1]]<this.faceprecedence[re[A][2]]?E=E+P+_:E=_+P+E,re[A]=[re[A][0],E]}for(let A=0;A<N.length;A++){if(N[A].length<4)throw new Error(\"Bad length in vertex names\");let E=1;for(let Q=2;Q<N[A].length;Q++)this.faceprecedence[v[N[A][Q][0]]]<this.faceprecedence[v[N[A][E][0]]]&&(E=Q);let _=\"\";for(let Q=1;Q<N[A].length;Q++){Q===1?_=N[A][E][0]:_=_+P+N[A][E][0];for(let ne=1;ne<N[A].length;ne++)if(N[A][E][1]===N[A][ne][2]){E=ne;break}}N[A]=[N[A][0],_]}this.options.verbosity>1&&(console.log(\"# Face precedence list: \"+this.faceorder.join(\" \")),console.log(\"# Face names: \"+K.map(A=>A[1]).join(\" \")),console.log(\"# Edge names: \"+re.map(A=>A[1]).join(\" \")),console.log(\"# Vertex names: \"+N.map(A=>A[1]).join(\" \")));let q=[];for(let A of te)q.push([A[0].makenormal(),A[1],\"f\"]);for(let A of re)q.push([A[0].makenormal(),A[1],\"e\"]);for(let A of N)q.push([A[0].makenormal(),A[1],\"v\"]);this.facenames=K,this.faceplanes=te,this.edgenames=re,this.vertexnames=N,this.geonormals=q;let Y=q.map(A=>A[1]);this.swizzler.setGripNames(Y),this.options.verbosity>0&&console.log(\"# Distances: face \"+1+\" edge \"+this.edgedistance+\" vertex \"+this.vertexdistance);for(let A=0;A<F.length;A++)for(let E of this.rotations){let _=F[A].rotateplane(E),Q=!1;for(let ne of this.moveplanes)if(_.sameplane(ne)){Q=!0;break}Q||(this.moveplanes.push(_),x[A]&&this.moveplanes2.push(_))}let ge=new Yn(y),pe=this.moveplanes2.slice(),De=31;for(let A=0;A<pe.length;A++){let E=A+Math.floor((pe.length-A)*(De/65536));ge=ge.split(pe[E]),pe[E]=pe[A],De=(De*1657+101)%65536}let Fe=ge.collect([],!0);this.faces=Fe,this.options.verbosity>0&&console.log(\"# Faces is now \"+Fe.length),this.stickersperface=Fe.length;let St=[],Ue=Jo(y);for(let A of this.rotations){let E=A.rotateface(y);Ue.dist(Jo(E))<Be&&St.push(A)}let He=new Array(Fe.length),xe=[];for(let A=0;A<Fe.length;A++){let E=Fe[A].centermass();xe.push([Ue.dist(E),E,A])}xe.sort((A,E)=>A[0]-E[0]);for(let A=0;A<Fe.length;A++){let E=xe[A][2];if(!He[E]){He[E]=!0;for(let _ of St){let Q=Fe[E].rotate(_),ne=Q.centermass();for(let Te=A+1;Te<Fe.length&&!(xe[Te][0]-xe[A][0]>Be);Te++){let rt=xe[Te][2];if(!He[rt]&&ne.dist(xe[Te][1])<Be){He[rt]=!0,Fe[rt]=Q;break}}}}}this.shortedge=1e99;for(let A of Fe)for(let E=0;E<A.length;E++){let _=(E+1)%A.length,Q=A.get(E).dist(A.get(_));Q<this.shortedge&&(this.shortedge=Q)}this.options.verbosity>0&&console.log(\"# Short edge is \"+this.shortedge),r===\"c\"&&B&&!M&&!k&&(this.addNotationMapper=\"NxNxNCubeMapper\",this.setReidOrder=!0),r===\"c\"&&k&&!B&&!M&&(this.addNotationMapper=\"SkewbMapper\"),r===\"t\"&&(k||B)&&!M&&(this.addNotationMapper=\"PyraminxOrTetraminxMapper\"),r===\"o\"&&B&&(this.notationMapper=new jn(this.swizzler,new qn([\"F\",\"D\",\"L\",\"BL\",\"R\",\"U\",\"BR\",\"B\"])),!M&&!k&&(this.addNotationMapper=\"FTOMapper\")),r===\"d\"&&B&&(this.addNotationMapper=\"MegaminxMapper\",this.notationMapper=new jn(this.swizzler,new qn([\"U\",\"F\",\"L\",\"BL\",\"BR\",\"R\",\"FR\",\"FL\",\"DL\",\"B\",\"DR\",\"D\"])))}keyface(t){return this.keyface2(t.centermass())}keyface2(t){let r=\"\",n=String.fromCharCode;for(let o of this.moveplanesets)if(o.length>0){let l=t.dot(o[0]),i=0,s=1;for(;s*2<=o.length;)s*=2;for(;s>0;s>>=1)i+s<=o.length&&l>o[i+s-1].a&&(i+=s);if(i<47)r=r+n(33+i);else if(i<47+47*47)r=r+n(33+47+Math.floor(i/47)-1)+n(33+i%47);else if(i<47+47*47+47*47*47)r=r+n(33+47+Math.floor((i-47)/(47*47)-1))+n(33+47+Math.floor((i-47)/47)%47)+n(33+i%47);else throw Error(\"Too many slices for cubie encoding\")}return r}keyface3(t){let r=t.centermass(),n=[];for(let o of this.moveplanesets)if(o.length>0){let l=r.dot(o[0]),i=0,s=1;for(;s*2<=o.length;)s*=2;for(;s>0;s>>=1)i+s<=o.length&&l>o[i+s-1].a&&(i+=s);n.push(i)}return n}findface(t){let r=this.keyface2(t),n=this.facelisthash.get(r);if(n.length===1)return n[0];for(let o=0;o+1<n.length;o++){let l=this.facelisthash.get(r)[o];if(Math.abs(t.dist(this.facecentermass[l]))<Be)return l}return n[n.length-1]}project2d(t,r,n){let o=this.facenames[t][0],l=(r+1)%o.length,i=this.baseplanes[t],s=o[l].sub(o[r]),u=s.len();s=s.normalize();let a=s.cross(i).normalize(),f=n[1].sub(n[0]),c=f.len()/u;f=f.normalize();let g=f.b,m=f.c,L=s.smul(g).sub(a.smul(m)).smul(c),p=a.smul(g).sum(s.smul(m)).smul(c),y=new W(0,n[0].b-L.dot(o[r]),n[0].c-p.dot(o[r]),0);return[L,p,y]}allstickers(){let t=_i(\"allstickers\");this.faces=ic(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 b=0;b<this.faces.length;b++)this.facecentermass[b]=this.faces[b].centermass();let r=[],n=[];for(let b of this.moveplanes){let C=b.makenormal(),G=!1;for(let v of n)C.sameplane(v.makenormal())&&(G=!0);G||(n.push(C),r.push([]))}for(let b of this.moveplanes2){let C=b.makenormal();for(let G=0;G<n.length;G++)if(C.sameplane(n[G])){r[G].push(b);break}}for(let b=0;b<r.length;b++){let C=r[b].map(v=>v.normalizeplane()),G=n[b];for(let v=0;v<C.length;v++)C[v].makenormal().dist(G)>Be&&(C[v]=C[v].smul(-1));C.sort((v,w)=>v.a-w.a),r[b]=C}this.moveplanesets=r,this.moveplanenormals=n;let o=r.map(b=>b.length);this.options.verbosity>0&&console.log(\"# Move plane sets: \"+o);let l=[];for(let b=0;b<r.length;b++)l.push([]);for(let b of this.rotations){if(Math.abs(Math.abs(b.a)-1)<Be)continue;let C=b.makenormal();for(let G=0;G<r.length;G++)if(C.sameplane(n[G])){l[G].push(b);break}}this.moverotations=l;for(let b=0;b<l.length;b++){let C=l[b],G=C[0].makenormal();for(let v=0;v<C.length;v++)G.dist(C[v].makenormal())>Be&&(C[v]=C[v].smul(-1));C.sort((v,w)=>v.angle()-w.angle()),l[b][0].dot(n[b])<0&&C.reverse()}let i=l.map(b=>1+b.length);this.movesetorders=i;let s=[],u=\"?\";for(let b=0;b<r.length;b++){let C=n[b],G=null,v=null;for(let w of this.geonormals){let P=C.dot(w[0]);Math.abs(P-1)<Be?(v=[w[1],w[2]],u=w[2]):Math.abs(P+1)<Be&&(G=[w[1],w[2]],u=w[2])}if(v===null||G===null)throw new Error(\"Saw positive or negative sides as null\");s.push([v[0],v[1],G[0],G[1],1+r[b].length]),this.addNotationMapper===\"NxNxNCubeMapper\"&&u===\"f\"&&(this.notationMapper=new Vo(1+r[b].length),this.addNotationMapper=\"\"),this.addNotationMapper===\"SkewbMapper\"&&r[0].length===1&&(this.notationMapper=new Yo(this.swizzler),this.addNotationMapper=\"\"),this.addNotationMapper===\"PyraminxOrTetraminxMapper\"&&(r[0].length===2&&r[0][0].a===.333333333333333&&r[0][1].a===1.66666666666667?(this.notationMapper=new Kn(this.swizzler),this.addNotationMapper=\"\"):(this.notationMapper=new Ho(this.swizzler),this.addNotationMapper=\"\")),this.addNotationMapper===\"MegaminxMapper\"&&u===\"f\"&&(1+r[b].length===3&&(this.notationMapper=new Ko(this.notationMapper)),this.addNotationMapper=\"\"),this.addNotationMapper===\"FTOMapper\"&&u===\"f\"&&(1+r[b].length===3&&(this.notationMapper=new jo(this.notationMapper,this.swizzler)),this.addNotationMapper=\"\")}this.movesetgeos=s;let a=new Map,f=this.faces;for(let b=0;b<f.length;b++){let C=f[b],G=this.keyface(C);if(!a.get(G))a.set(G,[b]);else{let v=a.get(G);if(v.push(b),v.length===this.baseFaceCount){this.options.verbosity>0&&console.log(\"# Splitting core.\");for(let w=0;w<v.length;w++){let P=G+\" \"+w;a.set(P,[v[w]])}}}}this.facelisthash=a,this.options.verbosity>0&&console.log(\"# Cubies: \"+a.size);let c=[],g=[],m=[];for(let b of a.values())if(b.length!==this.baseFaceCount){if(b.length>1){let C=b.map(P=>f[P].centermass()),G=Jo(C);for(let P=0;b.length>2;P++){let q=!1;for(let Y=0;Y<b.length;Y++){let ge=(Y+1)%b.length;if(G.dot(C[Y].cross(C[ge]))<0){let pe=C[Y];C[Y]=C[ge],C[ge]=pe;let De=b[Y];b[Y]=b[ge],b[ge]=De,q=!0}}if(!q)break;if(P>1e3)throw new Error(\"Bad epsilon math; too close to border\")}let v=0,w=b[v];for(let P=1;P<b.length;P++){let q=b[P];this.faceprecedence[this.getfaceindex(q)]<this.faceprecedence[this.getfaceindex(w)]&&(v=P,w=q)}if(v!==0){let P=b.slice();for(let q=0;q<b.length;q++)b[q]=P[(v+q)%b.length]}}for(let C=0;C<b.length;C++){let G=b[C];g[G]=c.length,m[G]=C}c.push(b)}this.cubies=c,this.facetocubie=g,this.facetoord=m;let L=[\"?\",\"CENTERS\",\"EDGES\",\"CORNERS\",\"C4RNER\",\"C5RNER\"],p=[],y=[0,0,0,0,0,0],F=[],x=[],B=0,M=[],k=[],K=[],te=[],N=b=>c[b].map(C=>this.getfaceindex(C)).join(\" \"),re=[];for(let b=0;b<c.length;b++){if(x[b])continue;let C=c[b];if(C.length===0)continue;let G={},v=0;K.push(0),re.push([]);let w=C.length,P=y[w]++,q=L[w];(q===void 0||w===this.baseFaceCount)&&(q=\"CORE\"),q=q+(P===0?\"\":P+1),p[B]=q,F[B]=w;let Y=[b],ge=0;for(x[b]=!0;ge<Y.length;){let pe=Y[ge++],De=N(pe);if((C.length>1||G[De]===void 0)&&(G[De]=v++),te[pe]=G[De],M[pe]=B,re[B].push(pe),k[pe]=K[B]++,Y.length<this.rotations.length){let Fe=this.facecentermass[c[pe][0]];for(let St of l){let Ue=this.facetocubie[this.findface(Fe.rotatepoint(St[0]))];x[Ue]||(Y.push(Ue),x[Ue]=!0)}}}B++}if(this.setReidOrder&&4<=this.stickersperface&&this.stickersperface<=9){let b=[[\"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\"]],C={};for(let G of b)for(let v=0;v<G.length;v++){let w=0;for(let P=0;P<G[v].length;P++)w|=1<<G[v].charCodeAt(P)-65;C[w]=v}for(let G of re)for(let v of G){let w=0;for(let P of c[v])w|=1<<this.facenames[this.getfaceindex(P)][1].charCodeAt(0)-65;k[v]=C[w]}}if(this.cubiesetnums=M,this.cubieordnums=k,this.cubiesetnames=p,this.cubieords=K,this.orbitoris=F,this.cubievaluemap=te,this.cubiesetcubies=re,this.options.fixedPieceType!==null){for(let b=0;b<c.length;b++)if(this.options.fixedPieceType===\"v\"&&c[b].length>2||this.options.fixedPieceType===\"e\"&&c[b].length===2||this.options.fixedPieceType===\"f\"&&c[b].length===1){this.fixedCubie=b;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 \"+K),Oi(t)}unswizzle(t){let r=this.notationMapper.notationToInternal(t);return r===null?\"\":this.swizzler.unswizzle(r.family)}stringToBlockMove(t){let r=RegExp(\"^(([0-9]+)-)?([0-9]+)?([^0-9]+)([0-9]+'?)?$\"),n=t.match(r);if(n===null)throw new Error(\"Bad move passed \"+t);let o=n[4],l,i;if(n[2]!==void 0){if(n[3]===void 0)throw new Error(\"Missing second number in range\");l=parseInt(n[2],10)}n[3]!==void 0&&(i=parseInt(n[3],10));let s=\"1\",u=1;return n[5]!==void 0&&(s=n[5],s[0]===\"'\"&&(s=\"-\"+s.substring(1)),u=parseInt(s,10)),new d(new I(o,i,l),u)}parseMove(t){let r=this.notationMapper.notationToInternal(t);if(r===null)throw new Error(\"Bad move \"+t.family);t=r;let n=t.family,o=!1;if(n.endsWith(\"v\")&&n[0]<=\"Z\"){if(t.innerLayer!==void 0||t.outerLayer!==void 0)throw new Error(\"Cannot use a prefix with full cube rotations\");n=n.slice(0,-1),o=!0}n.endsWith(\"w\")&&n[0]<=\"Z\"&&(n=n.slice(0,-1).toLowerCase());let l,i=-1,s=this.swizzler.unswizzle(n),u=!1;for(let c=0;c<this.movesetgeos.length;c++){let g=this.movesetgeos[c];s===g[0]&&(u=!0,l=g,i=c),s===g[2]&&(u=!1,l=g,i=c)}let a=1,f=1;if(n.toUpperCase()!==n&&(f=2),l===void 0)throw new Error(\"Bad grip in move \"+t.family);if(t.outerLayer!==void 0&&(a=t.outerLayer),t.innerLayer!==void 0&&(t.outerLayer===void 0?(f=t.innerLayer,n<=\"Z\"?a=f:a=1):f=t.innerLayer),a--,f--,o&&(a=0,f=this.moveplanesets[i].length),a<0||a>this.moveplanesets[i].length||f<0||f>this.moveplanesets[i].length)throw new Error(\"Bad slice spec \"+a+\" \"+f+\" vs \"+this.moveplanesets[i].length);if(!ac&&a===0&&f===this.moveplanesets[i].length&&!o)throw new Error(\"! full puzzle rotations must be specified with v suffix.\");return[void 0,i,a,f,u,t.amount]}parsemove(t){let r=this.parseMove(this.stringToBlockMove(t));return r[0]=t,r}genperms(){let t=_i(\"genperms\");if(this.cmovesbyslice.length>0)return;let r=[];if(this.options.orientCenters){for(let n=0;n<this.cubies.length;n++)if(this.cubies[n].length===1){let o=this.cubies[n][0],l=this.getfaceindex(o);if(this.basefaces[l].centermass().dist(this.facecentermass[o])<Be){let i=this.basefaces[l].length;for(let s=1;s<i;s++)this.cubies[n].push(this.cubies[n][s-1]);this.duplicatedFaces[o]=i,this.duplicatedCubies[n]=i,this.orbitoris[this.cubiesetnums[n]]=i}}}for(let n=0;n<this.moveplanesets.length;n++){let o=this.moveplanesets[n],l=[],i=[o.length+1,0],s=1;for(;s*2<=o.length;)s*=2;for(let f=0;f<this.faces.length;f++){let c=0;if(o.length>0){let g=this.facecentermass[f].dot(o[0]);for(let m=s;m>0;m>>=1)c+m<=o.length&&g>o[c+m-1].a&&(c+=m);c=o.length-c}for(l.push(c);i.length<=c;)i.push(0);i[c]++}let u=new Array(i.length);for(let f=0;f<i.length;f++)u[f]=[];let a=[];for(let f=0;f<this.faces.length;f++){if(l[f]<0)continue;let c=[this.facetocubie[f],this.facetoord[f]],g=this.facecentermass[f],m=g,L=f,p=l[L];for(;;){l[L]=-1;let y=g.rotatepoint(this.moverotations[n][0]);if(y.dist(m)<Be)break;L=this.findface(y),c.push(this.facetocubie[L],this.facetoord[L]),g=y}if(c.length>2&&this.options.orientCenters&&(this.cubies[c[0]].length===1||this.duplicatedCubies[c[0]]>1)&&this.facecentermass[f].dist(this.basefaces[this.getfaceindex(f)].centermass())<Be){let y=this.faces[this.cubies[c[0]][0]];for(let F=0;F<c.length;F+=2){let x=this.faces[this.cubies[c[F]][0]],B=-1;for(let M=0;M<y.length;M++)if(x.get(M).dist(y.get(0))<Be){B=M;break}if(B<0)throw new Error(\"Couldn't find rotation of center faces; ignoring for now.\");c[F+1]=B,y=y.rotate(this.moverotations[n][0])}}if(c.length===2&&this.options.orientCenters)for(let y=1;y<this.movesetorders[n];y++)p===0?c.push(c[0],y):c.push(c[0],(this.movesetorders[n]-y)%this.movesetorders[n]);if(c.length>2&&!a[c[0]]){if(c.length!==2*this.movesetorders[n])throw new Error(\"Bad length in perm gen\");for(let y of c)u[p].push(y)}for(let y=0;y<c.length;y+=2)a[c[y]]=!0}for(let f=0;f<u.length;f++)u[f]=u[f].slice();r.push(u)}if(this.cmovesbyslice=r,this.options.moveList){let n=[];for(let o of this.options.moveList)n.push(this.parsemove(o));this.parsedmovelist=n}this.facelisthash.clear(),this.facecentermass=[],Oi(t)}getboundarygeometry(){return{baseplanes:this.baseplanes,facenames:this.facenames,faceplanes:this.faceplanes,vertexnames:this.vertexnames,edgenames:this.edgenames,geonormals:this.geonormals}}getmovesets(t){let r=this.moveplanesets[t].length,n=[];if(this.parsedmovelist!==void 0)for(let o of this.parsedmovelist)o[1]===t&&(o[4]?n.push([o[2],o[3]]):n.push([r-o[3],r-o[2]]),n.push(o[5]));else if(this.options.vertexMoves&&!this.options.allMoves){let o=this.movesetgeos[t];if(o[1]!==o[3])for(let l=0;l<r;l++)o[1]!==\"v\"?(this.options.outerBlockMoves?n.push([l+1,r]):n.push([l+1]),n.push(1)):(this.options.outerBlockMoves?n.push([0,l]):n.push([l,l]),n.push(1))}else for(let o=0;o<=r;o++)!this.options.allMoves&&o+o===r||(this.options.outerBlockMoves?o+o>r?n.push([o,r]):n.push([0,o]):n.push([o,o]),n.push(1));if(this.fixedCubie>=0){let o=this.keyface3(this.faces[this.cubies[this.fixedCubie][0]])[t],l=[];for(let i=0;i<n.length;i+=2){let s=n[i];if(o>=s[0]&&o<=s[1])if(s[0]===0)s=[s[1]+1,r];else if(r===s[1])s=[0,s[0]-1];else throw Error(\"fixed cubie option would disconnect move\");let u=!1;for(let a=0;a<l.length;a+=2)if(l[a][0]===s[0]&&l[a][1]===s[1]&&l[a+1]===n[i+1]){u=!0;break}u||(l.push(s),l.push(n[i+1]))}n=l}return n}graybyori(t){let r=this.cubies[t].length;return this.duplicatedCubies[t]&&(r=1),r===1&&(this.options.grayCenters||!this.options.includeCenterOrbits)||r===2&&(this.options.grayEdges||!this.options.includeEdgeOrbits)||r>2&&(this.options.grayCorners||!this.options.includeCornerOrbits)}skipbyori(t){let r=this.cubies[t].length;return this.duplicatedCubies[t]&&(r=1),r===1&&!this.options.includeCenterOrbits||r===2&&!this.options.includeEdgeOrbits||r>2&&!this.options.includeCornerOrbits}skipcubie(t){return this.skipbyori(t)}header(t){return t+sc+`\n`+t+`\n`}writegap(){let t=this.getOrbitsDef(!1),r=[],n=[];for(let l=0;l<t.moveops.length;l++){let i=\"M_\"+Mi(this.notationMapper,t.movenames[l]),s=!1;i[i.length-1]===\"'\"&&(i=i.substring(0,i.length-1),s=!0),n.push(i),s?r.push(i+\":=\"+t.moveops[l].toPerm().inv().toGap()+\";\"):r.push(i+\":=\"+t.moveops[l].toPerm().toGap()+\";\")}r.push(\"Gen:=[\"),r.push(n.join(\",\")),r.push(\"];\");let o=t.solved.identicalPieces();return r.push(\"ip:=[\"+o.map(l=>\"[\"+l.map(i=>i+1).join(\",\")+\"]\").join(\",\")+\"];\"),r.push(\"# Size(Group(Gen));\"),r.push(\"# Size(Stabilizer(Group(Gen), ip, OnTuplesSets));\"),r.push(\"\"),this.header(\"# \")+r.join(`\n`)}writeksolve(t=\"PuzzleGeometryPuzzle\"){let r=this.getOrbitsDef(!1);return this.header(\"# \")+r.toKsolve(t,this.notationMapper).join(`\n`)}writekpuzzle(t=!0,r=!0){let n=this.getOrbitsDef(t,r),o=n.toKPuzzle(r);if(!o)throw new Error(\"Missing definition!\");return o.moveNotation=new W0(this,n),o}getMoveFromBits(t,r,n,o,l,i){let s=[],u=[],a=[];for(let g of this.cubieords)u.push(wt(g)),a.push(Jt(g));for(let g=t[0];g<=t[1];g++){let m=o[g];for(let L=0;L<m.length;L+=2*i){let p=m.slice(L,L+2*i),y=this.cubiesetnums[p[0]];for(let B=0;B<p.length;B+=2)p[B]=this.cubieordnums[p[B]];let F=2,x=3;n&&(F=p.length-2,x=p.length-1),u[y]===wt(this.cubieords[y])&&(u[y]=u[y].slice(),this.orbitoris[y]>1&&!this.options.fixedOrientation&&(a[y]=a[y].slice()));for(let B=0;B<p.length;B+=2)u[y][p[(B+F)%p.length]]=p[B],this.orbitoris[y]>1&&!this.options.fixedOrientation&&(a[y][p[B]]=(p[(B+x)%p.length]-p[(B+1)%p.length]+2*this.orbitoris[y])%this.orbitoris[y])}}let f=new It(wt(24),Jt(24),1);for(let g=0;g<this.cubiesetnames.length;g++)if(!(l&&!l[g]))if(this.orbitoris[g]===1||this.options.fixedOrientation)u[g]===wt(f.perm.length)?(u[g]!==f.perm&&(f=new It(u[g],a[g],1)),s.push(f)):s.push(new It(u[g],a[g],1));else{let m=new Array(a[g].length);for(let L=0;L<u[g].length;L++)m[L]=a[g][u[g][L]];s.push(new It(u[g],m,this.orbitoris[g]))}let c=new $t(s);return r!==1&&(c=c.mulScalar(r)),c}omitSet(t){for(let r of this.options.excludeOrbits)if(r===t)return!0;return!1}diffmvsets(t,r,n,o){for(let l=0;l<t.length;l+=2){let i=!1;for(let s=0;!i&&s<r.length;s+=2)o?t[l][0]+r[s][1]===n&&t[l][1]+r[s][0]===n&&t[l+1]===r[s+1]&&(i=!0):t[l][0]===r[s][0]&&t[l][1]===r[s][1]&&t[l+1]===r[s+1]&&(i=!0);if(!i)return!0}return!1}getOrbitsDef(t,r=!0){let n=[];if(t)for(let g=0;g<this.cubiesetnames.length;g++)n.push(1);let o=[],l=[],i=[],s=[];for(let g=0;g<this.moveplanesets.length;g++){let m=this.getmovesets(g);i.push(m),this.options.addRotations?s.push(1):s.push(0)}if(this.options.moveList&&this.options.addRotations){for(let g=0;g<this.moverotations.length;g++)s[g]=0;for(let g=0;g<this.moveplanesets.length;g++)for(let m=0;m<this.moverotations.length;m++){let L=this.moveplanenormals[g];for(let p=1;p*2<=this.movesetorders[m];p++){if(L=L.rotatepoint(this.moverotations[m][0]),s[m]&p)continue;let y=-1,F=!1;for(let B=0;B<this.moveplanenormals.length;B++)if(L.dist(this.moveplanenormals[B])<Be){y=B;break}else if(L.dist(this.moveplanenormals[B].smul(-1))<Be){y=B,F=!0;break}if(y<0)throw new Error(\"Could not find rotation\");let x=i[y];(x.length!==i[g].length||this.moveplanesets[g].length!==this.moveplanesets[y].length||this.diffmvsets(x,i[g],this.moveplanesets[y].length,F))&&(s[m]|=p)}}for(let g=0;g<this.moverotations.length;g++)if(s[g]===0)s[g]=1;else if(s[g]===1)this.movesetorders[g]>3?s[g]=2:s[g]=0;else if(s[g]===3)s[g]=0;else throw new Error(\"Impossible addrot val\")}for(let g=0;g<this.moveplanesets.length;g++)s[g]!==0&&(i[g].push([0,this.moveplanesets[g].length]),i[g].push(s[g]));for(let g=0;g<this.moveplanesets.length;g++){let m=i[g],L=this.movesetorders[g];for(let F=0;F<m.length;F+=2)for(let x=0;x<F;x+=2)if(m[F]===m[x]&&m[F+1]===m[x+1])throw new Error(\"Redundant moves in moveset.\");let p=[];for(let F=0;F<m.length;F+=2)for(let x=m[F][0];x<=m[F][1];x++)p[x]=1;let y=this.cmovesbyslice[g];for(let F=0;F<y.length;F++){if(p[F]!==1)continue;let x=y[F];for(let B=0;B<x.length;B+=2*L){if(this.skipcubie(x[B]))continue;let M=this.cubiesetnums[x[B]];n[M]=1}}}for(let g=0;g<this.cubiesetnames.length;g++)if(!!n[g]){if(this.omitSet(this.cubiesetnames[g])){n[g]=0;continue}o.push(this.cubiesetnames[g]),l.push(new Hn(this.cubieords[g],this.options.fixedOrientation?1:this.orbitoris[g]))}let u=[];for(let g=0;g<this.cubiesetnames.length;g++){if(!n[g]||this.omitSet(this.cubiesetnames[g]))continue;let m=[],L=[];for(let p=0;p<this.cubieords[g];p++){if(t)m.push(p);else{let y=this.cubiesetcubies[g][p];m.push(this.cubievaluemap[y])}L.push(0)}u.push(new It(m,L,this.options.fixedOrientation?1:this.orbitoris[g]))}let a=[],f=[];if(r)for(let g=0;g<this.moveplanesets.length;g++){let L=this.moveplanesets[g].length,p=i[g],y=this.movesetgeos[g];for(let F=0;F<p.length;F+=2){let x=p[F],B=mc(y,x,L),M=B[0],k=B[1];p[F+1]===1?a.push(M):a.push(M+p[F+1]);let K=this.getMoveFromBits(x,p[F+1],k,this.cmovesbyslice[g],n,this.movesetorders[g]);f.push(K)}}let c=new Xr(o,l,new Jr(u),a,f);return this.options.optimizeOrbits&&(c=c.optimize()),this.options.scrambleAmount!==0&&c.scramble(this.options.scrambleAmount),c}getMovesAsPerms(){return this.getOrbitsDef(!1).moveops.map(t=>t.toPerm())}showcanon(t){w0(this.getOrbitsDef(!1),t)}getsolved(){let t=[];for(let r=0;r<this.baseFaceCount;r++)for(let n=0;n<this.stickersperface;n++)t.push(r);return new ut(t)}getOrientationRotation(t){let[r,[n,o,l]]=t[0],i=new W(0,n,-o,l),[s,[u,a,f]]=t[1],c=new W(0,u,-a,f),g=null,m=null,L=this.swizzler.unswizzle(r),p=this.swizzler.unswizzle(s);for(let B of this.geonormals)L===B[1]&&(g=B[0]),p===B[1]&&(m=B[0]);if(!g)throw new Error(\"Could not find feature \"+r);if(!m)throw new Error(\"Could not find feature \"+s);let y=g.pointrotation(i);return m.rotatepoint(y).unproject(i).pointrotation(c.unproject(i)).mul(y)}getInitial3DRotation(){let t=this.baseFaceCount,r=null;if(this.options.puzzleOrientation?r=this.options.puzzleOrientation:this.options.puzzleOrientations&&(r=this.options.puzzleOrientations[t]),r||(r=gc()[t]),!r)throw new Error(\"No default orientation?\");return this.getOrientationRotation(r)}generate2dmapping(t=800,r=500,n=10,o=!1,l=.92){t-=2*n,r-=2*n;function i(v,w){let P=v[1][0]-v[0][0],q=v[1][1]-v[0][1],Y=2*Math.PI/w,ge=Math.cos(Y),pe=Math.sin(Y);for(let De=2;De<w;De++){let Fe=P*ge+q*pe;q=q*ge-P*pe,P=Fe,v.push([v[De-1][0]+P,v[De-1][1]+q])}}this.genperms();let a=this.getboundarygeometry().facenames[0][0].length,f=this.net;if(f===null)throw new Error(\"No net?\");let c={},g=0,m=0,L=1,p=0;c[f[0][0]]=[[1,0],[0,0]],i(c[f[0][0]],a);for(let v of f){let w=v[0];if(!c[w])throw new Error(\"Bad edge description; first edge not connected.\");for(let P=1;P<v.length;P++){let q=v[P];q===\"\"||c[q]||(c[q]=[c[w][P%a],c[w][(P+a-1)%a]],i(c[q],a))}}for(let v in c){let w=c[v];for(let P of w)g=Math.min(g,P[0]),L=Math.max(L,P[0]),m=Math.min(m,P[1]),p=Math.max(p,P[1])}let y=Math.min(t/(L-g),r/(p-m)),F=.5*(t-y*(L+g)),x=.5*(r-y*(p+m)),B={},M=this.getboundarygeometry(),k={},K=[[y+F,x],[F,x]];k[f[0][0]]=K,i(k[f[0][0]],a),B[this.facenames[0][1]]=this.project2d(0,0,[new W(0,K[0][0],K[0][1],0),new W(0,K[1][0],K[1][1],0)]);let te=[];te[0]=0;for(let v of f){let w=v[0];if(!k[w])throw new Error(\"Bad edge description; first edge not connected.\");let P=-1;for(let Y=0;Y<M.facenames.length;Y++)if(w===M.facenames[Y][1]){P=Y;break}if(P<0)throw new Error(\"Could not find first face name \"+w);let q=M.facenames[P][0];for(let Y=1;Y<v.length;Y++){let ge=v[Y];if(ge===\"\"||k[ge])continue;k[ge]=[k[w][Y%a],k[w][(Y+a-1)%a]],i(k[ge],a);let pe=te[P],De=q[(pe+Y)%a].sum(q[(pe+Y+a-1)%a]).smul(.5),Fe=rl(M.edgenames,De),St=M.edgenames[Fe][1],Ue=pc(St,this.facenames),He=Ue[w===Ue[0]?1:0],xe=-1;for(let E=0;E<M.facenames.length;E++)if(He===M.facenames[E][1]){xe=E;break}if(xe<0)throw new Error(\"Could not find second face name\");let A=M.facenames[xe][0];for(let E=0;E<A.length;E++)if(A[E].sum(A[(E+1)%a]).smul(.5).dist(De)<=Be){let Q=k[w][(Y+a-1)%a],ne=k[w][Y%a];te[xe]=E,B[He]=this.project2d(xe,E,[new W(0,ne[0],ne[1],0),new W(0,Q[0],Q[1],0)]);break}}}let N=0,re=0,b=this.getInitial3DRotation();for(let v of this.faces){o&&(v=v.rotate(b));for(let w=0;w<v.length;w++)N=Math.max(N,Math.abs(v.get(w).b)),re=Math.max(re,Math.abs(v.get(w).c))}let C=Math.min(r/re/2,(t-n)/N/4);return(v,w)=>{if(o){w=w.rotatepoint(b);let P=.5*n+.25*t,q=this.baseplanes[v].rotateplane(b).d<0?1:-1;return[n+t*.5+q*(P-w.b*C),n+r*.5+w.c*C]}else{let P=B[this.facenames[v][1]];return[n+l*w.dot(P[0])+P[2].b,n+r-l*w.dot(P[1])-P[2].c]}}}generatesvg(t=800,r=500,n=10,o=!1){let l=this.generate2dmapping(t,r,n,o);function i(g,m,L){return'<polygon id=\"'+g+'\" class=\"sticker\" style=\"fill: '+L+'\" points=\"'+m.map(p=>p[0]+\" \"+p[1]).join(\" \")+`\"/>\n`}let s=this.getsolved(),u=[],a=[];for(let g=0;g<this.baseFaceCount;g++)u[g]=this.colors[this.facenames[g][1]];for(let g=0;g<this.faces.length;g++){let m=this.faces[g],L=Math.floor(g/this.stickersperface),p=[];for(let y=0;y<m.length;y++)p.push(l(L,m.get(y)));a.push(p)}let f=[];for(let g=0;g<this.baseFaceCount;g++){f.push(\"<g>\"),f.push(\"<title>\"+this.facenames[g][1]+`</title>\n`);for(let m=0;m<this.stickersperface;m++){let L=g*this.stickersperface+m,p=this.facetocubie[L],y=this.facetoord[L],F=this.cubiesetnums[p],x=this.cubieordnums[p],B=this.graybyori(p)?\"#808080\":u[s.p[L]],M=this.cubiesetnames[F]+\"-l\"+x+\"-o\"+y;if(f.push(i(M,a[L],B)),this.duplicatedFaces[L])for(let k=1;k<this.duplicatedFaces[L];k++)M=this.cubiesetnames[F]+\"-l\"+x+\"-o\"+k,f.push(i(M,a[L],B))}f.push(\"</g>\")}return`<svg id=\"svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 800 500\">\n<style type=\"text/css\"><![CDATA[.sticker { stroke: #000000; stroke-width: 1px; }]]></style>\n`+f.join(\"\")+\"</svg>\"}get3d(t){let r=[],n=this.getInitial3DRotation(),o=[],l=.52*this.basefaces[0].get(0).len();for(let a=0;a<this.basefaces.length;a++){let f=this.basefaces[a].rotate(n),c=this.facenames[a][1];o.push({coords:Qi(f,l),name:c})}for(let a=0;a<this.faces.length;a++){let f=Math.floor(a/this.stickersperface),c=this.facetocubie[a],g=this.facetoord[a],m=this.cubiesetnums[c],L=this.cubieordnums[c],p=this.graybyori(c)?\"#808080\":this.colors[this.facenames[f][1]];(t==null?void 0:t.stickerColors)&&(p=t.stickerColors[a]);let y=this.faces[a].rotate(n);r.push({coords:Qi(y,l),color:p,orbit:this.cubiesetnames[m],ord:L,ori:g,face:f});let F=y;if(this.duplicatedFaces[a]){let x=F.length/this.duplicatedFaces[a];for(let B=1;B<this.duplicatedFaces[a];B++){for(let M=0;M<x;M++)F=F.rotateforward();r.push({coords:Qi(F,l),color:p,orbit:this.cubiesetnames[m],ord:L,ori:B,face:f,isDup:!0})}}}let i=[];for(let a=0;a<this.movesetgeos.length;a++){let f=this.movesetgeos[a],c=this.movesetorders[a];for(let g of this.geonormals)f[0]===g[1]&&f[1]===g[2]&&(i.push([nl(g[0].rotatepoint(n),1),f[0],c]),i.push([nl(g[0].rotatepoint(n).smul(-1),1),f[2],c]))}let s=this.generate2dmapping(2880,2160,0,!1,1),u=function(){let a=n.invrot();return function(f,c){let g=new W(0,c[0]*l,-c[1]*l,c[2]*l);g=g.rotatepoint(a);let m=s(f,g);return m[0]/=2880,m[1]=1-m[1]/2160,m}}().bind(this);return{stickers:r,faces:o,axis:i,unswizzle:this.unswizzle.bind(this),notationMapper:this.notationMapper,textureMapper:{getuv:u}}}getGeoNormal(t){let r=this.getInitial3DRotation(),n=this.swizzler.unswizzle(t);for(let o of this.geonormals)if(n===o[1]){let l=nl(o[0].rotatepoint(r),1);return Math.abs(l[0])<Be&&Math.abs(l[2])<Be&&(l[0]=0,l[2]=1e-6),l}}getfaceindex(t){let r=this.stickersperface;return Math.floor(t/r)}textForTwizzleExplorer(){return`Faces ${this.baseplanerot.length}\nStickers per face ${this.stickersperface}\nShort edge ${this.shortedge}\nCubies ${this.cubies.length}\nEdge distance ${this.edgedistance}\nVertex distance ${this.vertexdistance}`}writeSchreierSims(t){let n=this.getOrbitsDef(!1).reassemblySize();t(`Reassembly size is ${n}`);let o=tl(this.getMovesAsPerms(),t),l=n/o;t(`Ratio is ${l}`)}},W0=class{constructor(t,r){this.pg=t;this.cache={};this.orbitNames=r.orbitnames}lookupMove(t){let r=this.moveToKeyString(t);if(r in this.cache)return this.cache[r];let n=this.pg.parseMove(t);if(this.pg.parsedmovelist){let s=!1;for(let u of this.pg.parsedmovelist)u[1]===n[1]&&u[2]===n[2]&&u[3]===n[3]&&u[4]===n[4]&&(s=!0);if(!s)return}let o=[n[2],n[3]];if(!n[4]){let s=this.pg.moveplanesets[n[1]].length;o=[s-n[3],s-n[2]]}let l=this.pg.getMoveFromBits(o,n[5],!n[4],this.pg.cmovesbyslice[n[1]],void 0,this.pg.movesetorders[n[1]]),i=Xr.transformToKPuzzle(this.orbitNames,l);return this.cache[r]=i,i}moveToKeyString(t){let r=\"\";return t.outerLayer&&(r=r+t.outerLayer+\",\"),t.innerLayer&&(r=r+t.innerLayer+\",\"),r=r+t.family+\",\"+t.amount,r}}});var Q0={};Ne(Q0,{PuzzleGeometry:()=>ol,Quat:()=>W,getPuzzleGeometryByDesc:()=>Wi,getPuzzleGeometryByName:()=>en,getpuzzle:()=>O0,getpuzzles:()=>_0,parseOptions:()=>x0,parsePuzzleDescription:()=>Vn,schreierSims:()=>tl});var ll=S(()=>{Ui();Ei();$o();Ni()});function Tt(e){return D(this,null,function*(){return(yield Promise.resolve().then(()=>(ll(),Q0))).getPuzzleGeometryByName(e,{allMoves:!0,orientCenters:!0,addRotations:!0})})}function qi(e){return D(this,null,function*(){return(yield Tt(e)).writekpuzzle(!0)})}function Nt(e,t,r){let n={id:e,fullName:t,def:()=>D(this,null,function*(){return qi(e)}),svg:()=>D(this,null,function*(){return(yield Tt(e)).generatesvg()}),pg:()=>D(this,null,function*(){return Tt(e)})};return(r==null?void 0:r.inventedBy)&&(n.inventedBy=r.inventedBy),(r==null?void 0:r.inventionYear)&&(n.inventionYear=r.inventionYear),n}function tn(e,t,r){let n=Nt(e,t,r);return n.appearance=Rt.bind(Rt,n),n.stickerings=Hr,n}var Fr=S(()=>{Yr()});var q0={};Ne(q0,{cube2x2x2KPuzzle:()=>Et});var Et,j0=S(()=>{Et={name:\"2x2x2\",orbits:{CORNERS:{numPieces:8,orientations:3}},startPieces:{CORNERS:{permutation:[0,1,2,3,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]}},moves:{U:{CORNERS:{permutation:[1,2,3,0,4,5,6,7],orientation:[0,0,0,0,0,0,0,0]}},y:{CORNERS:{permutation:[1,2,3,0,7,4,5,6],orientation:[0,0,0,0,0,0,0,0]}},x:{CORNERS:{permutation:[4,0,3,5,7,6,2,1],orientation:[2,1,2,1,1,2,1,2]}},L:{CORNERS:{permutation:[0,1,6,2,4,3,5,7],orientation:[0,0,2,1,0,2,1,0]}},F:{CORNERS:{permutation:[3,1,2,5,0,4,6,7],orientation:[1,0,0,2,2,1,0,0]}},R:{CORNERS:{permutation:[4,0,2,3,7,5,6,1],orientation:[2,1,0,0,1,0,0,2]}},B:{CORNERS:{permutation:[0,7,1,3,4,5,2,6],orientation:[0,2,1,0,0,0,2,1]}},D:{CORNERS:{permutation:[0,1,2,3,5,6,7,4],orientation:[0,0,0,0,0,0,0,0]}},z:{CORNERS:{permutation:[3,2,6,5,0,4,7,1],orientation:[1,2,1,2,2,1,2,1]}}}};Et.moves.Rv=Et.moves.x;Et.moves.Uv=Et.moves.y;Et.moves.Fv=Et.moves.z;Et.moves.Lv={CORNERS:{permutation:[1,7,6,2,0,3,5,4],orientation:[2,1,2,1,1,2,1,2]}};Et.moves.Dv={CORNERS:{permutation:[3,0,1,2,5,6,7,4],orientation:[0,0,0,0,0,0,0,0]}};Et.moves.Bv={CORNERS:{permutation:[4,7,1,0,5,3,2,6],orientation:[1,2,1,2,2,1,2,1]}}});var K0={};Ne(K0,{default:()=>dc});var dc,V0=S(()=>{dc=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 520 394\" preserveAspectRatio=\"xMidYMid meet\">\n <title>2x2x2</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g id=\"puzzle\" transform=\"translate(5, 5) scale(60)\">\n <use id=\"CORNERS-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(4.4, 2.2)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" xlink:href=\"#sticker\" transform=\"translate(3.2, 2.2)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 0)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(6.6, 2.2)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l1-o2\" xlink:href=\"#sticker\" transform=\"translate(5.4, 2.2)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 0)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(0, 2.2)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l2-o2\" xlink:href=\"#sticker\" transform=\"translate(7.6, 2.2)\" style=\"fill: #26f\"/>\n\n <use id=\"CORNERS-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(2.2, 2.2)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o2\" xlink:href=\"#sticker\" transform=\"translate(1, 2.2)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 4.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(3.2, 3.2)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" xlink:href=\"#sticker\" transform=\"translate(4.4, 3.2)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 4.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(1, 3.2)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" xlink:href=\"#sticker\" transform=\"translate(2.2, 3.2)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" xlink:href=\"#sticker\" transform=\"translate(2.2, 5.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" xlink:href=\"#sticker\" transform=\"translate(7.6, 3.2)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" xlink:href=\"#sticker\" transform=\"translate(0, 3.2)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" xlink:href=\"#sticker\" transform=\"translate(3.2, 5.4)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" xlink:href=\"#sticker\" transform=\"translate(5.4, 3.2)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" xlink:href=\"#sticker\" transform=\"translate(6.6, 3.2)\" style=\"fill: #26f\"/>\n </g>\n\n</svg>`});var Zn,H0=S(()=>{Fr();Yr();Zn={id:\"2x2x2\",fullName:\"2\\xD72\\xD72 Cube\",def:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(j0(),q0))).cube2x2x2KPuzzle}),svg:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(V0(),K0))).default}),pg:()=>D(void 0,null,function*(){return Tt(\"2x2x2\")}),appearance:e=>Rt(Zn,e),stickerings:Hr}});var Y0={};Ne(Y0,{default:()=>Lc});var Lc,Z0=S(()=>{Lc=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 518 392\" preserveAspectRatio=\"xMidYMid meet\">\n <title>3x3x3</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n\n<!-- 0 1 2 3 4 5 6 7 8 9 10 11 -->\n<!-- | | | | | | | | | | | |<- -->\n<!-- 0 - . . . -->\n<!-- 1 - . . . -->\n<!-- 2 - . . . -->\n<!-- 3 - . . . . . . . . . . . . -->\n<!-- 4 - . . . . . . . . . . . . -->\n<!-- 5 - . . . . . . . . . . . . -->\n<!-- 6 - . . . -->\n<!-- 7 - . . . -->\n<!-- 8 - . . . -->\n\n <g id=\"puzzle\" transform=\"translate(5,5) scale(40)\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,2.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(6.5,3.3)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" xlink:href=\"#sticker\" transform=\"translate(5.3,3.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,0.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(9.7,3.3)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l1-o2\" xlink:href=\"#sticker\" transform=\"translate(8.5,3.3)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,0.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(0.1,3.3)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l2-o2\" xlink:href=\"#sticker\" transform=\"translate(11.7,3.3)\" style=\"fill: #26f\"/>\n\n <use id=\"CORNERS-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,2.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(3.3,3.3)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o2\" xlink:href=\"#sticker\" transform=\"translate(2.1,3.3)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(5.3,5.3)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" xlink:href=\"#sticker\" transform=\"translate(6.5,5.3)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(2.1,5.3)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" xlink:href=\"#sticker\" transform=\"translate(3.3,5.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" xlink:href=\"#sticker\" transform=\"translate(11.7,5.3)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" xlink:href=\"#sticker\" transform=\"translate(0.1,5.3)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" xlink:href=\"#sticker\" transform=\"translate(8.5,5.3)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" xlink:href=\"#sticker\" transform=\"translate(9.7,5.3)\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,2.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,3.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,1.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(7.5,3.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,0.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(10.7,3.3)\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,1.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(1.1,3.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,5.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(7.5,5.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" xlink:href=\"#sticker\" transform=\"translate(10.7,5.3)\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" xlink:href=\"#sticker\" transform=\"translate(1.1,5.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" xlink:href=\"#sticker\" transform=\"translate(5.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" xlink:href=\"#sticker\" transform=\"translate(6.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" xlink:href=\"#sticker\" transform=\"translate(3.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" xlink:href=\"#sticker\" transform=\"translate(2.1,4.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" xlink:href=\"#sticker\" transform=\"translate(9.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" xlink:href=\"#sticker\" transform=\"translate(8.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" xlink:href=\"#sticker\" transform=\"translate(11.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" xlink:href=\"#sticker\" transform=\"translate(0.1,4.3)\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l0-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o2\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o3\" xlink:href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n\n <use id=\"CENTERS-l1-o0\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" xlink:href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" xlink:href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" xlink:href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" xlink:href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" xlink:href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n </g>\n\n</svg>`});var X0={};Ne(X0,{default:()=>hc});var hc,J0=S(()=>{hc=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"288px\" height=\"288px\" viewBox=\"-16 -16 288 288\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>3x3x3 LL</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"-10\" y=\"-10\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g id=\"3x3x3-LL\" stroke=\"none\" stroke-width=\"4\" style=\"none\" stroke-linejoin=\"round\">\n <rect id=\"CENTERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o1\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o2\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o3\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n\n <rect id=\"CORNERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l0-o1\" stroke=\"#000000\" style=\"fill: red\" points=\"224 160 252 160 252 252 224 224\"></polygon>\n <polygon id=\"CORNERS-l0-o2\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(206, 238) scale(1, -1) rotate(-90) translate(-206, -238) \" points=\"192 192 220 192 220 284 192 256\"></polygon>\n <rect id=\"CORNERS-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l1-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(206, 18) rotate(-90) translate(-206, -18) \" points=\"192 -28 220 -28 220 64 192 36\"></polygon>\n <polygon id=\"CORNERS-l1-o2\" stroke=\"#000000\" style=\"fill: red\" transform=\"translate(238, 50) scale(1, -1) translate(-238, -50) \" points=\"224 4 252 4 252 96 224 68\"></polygon>\n <rect id=\"CORNERS-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l2-o1\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 50) scale(-1, -1) translate(-18, -50) \" points=\"4 4 32 4 32 96 4 68\"></polygon>\n <polygon id=\"CORNERS-l2-o2\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(50, 18) scale(1, -1) rotate(90) translate(-50, -18) \" points=\"36 -28 64 -28 64 64 36 36\"></polygon>\n <rect id=\"CORNERS-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l3-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(50, 238) rotate(90) translate(-50, -238) \" points=\"36 192 64 192 64 284 36 256\"></polygon>\n <polygon id=\"CORNERS-l3-o2\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 206) scale(-1, 1) translate(-18, -206) \" points=\"4 160 32 160 32 252 4 224\"></polygon>\n\n <rect id=\"EDGES-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l0-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(128, 238) scale(1, -1) rotate(90) translate(-128, -238) \" x=\"114\" y=\"206\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o1\" stroke=\"#000000\" style=\"fill: red\" x=\"224\" y=\"96\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(128, 18) scale(1, -1) rotate(90) translate(-128, -18) \" x=\"114\" y=\"-14\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o1\" stroke=\"#000000\" style=\"fill: orange\" x=\"4\" y=\"96\" width=\"28\" height=\"64\"></rect>\n\n </g>\n <g style=\"opacity: 0\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l4-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l4-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l1-o0\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" xlink:href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" xlink:href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" xlink:href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" xlink:href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" xlink:href=\"#sticker\" style=\"fill: yellow\"/>\n </g>\n</svg>`});var ji,$0=S(()=>{ht();Fr();Yr();ji={id:\"3x3x3\",fullName:\"3\\xD73\\xD73 Cube\",inventedBy:[\"Ern\\u0151 Rubik\"],inventionYear:1974,def:()=>D(void 0,null,function*(){return ue}),svg:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(Z0(),Y0))).default}),llSVG:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(J0(),X0))).default}),pg:()=>D(void 0,null,function*(){return Tt(\"3x3x3\")}),appearance:e=>Rt(ji,e),stickerings:Hr}});var e2={};Ne(e2,{clockKPuzzle:()=>Rc});var Rc,t2=S(()=>{Rc={name:\"Clock\",orbits:{DIALS:{numPieces:18,orientations:12},FACES:{numPieces:18,orientations:1},FRAME:{numPieces:1,orientations:2}},startPieces:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},moves:{UR_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,1,1,0,1,1,0,0,0,-1,0,0,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},DR_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,-1,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},DL_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,-1]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},UL_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[1,1,0,1,1,0,0,0,0,0,0,-1,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},U_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[1,1,1,1,1,1,0,0,0,-1,0,-1,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},R_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,1,1,0,1,1,0,1,1,-1,0,0,0,0,0,-1,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},D_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,-1,0,-1]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},L_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[1,1,0,1,1,0,1,1,0,0,0,-1,0,0,0,0,0,-1]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},ALL_PLUS_:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[1,1,1,1,1,1,1,1,1,-1,0,-1,0,0,0,-1,0,-1]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},y2:{DIALS:{permutation:[9,10,11,12,13,14,15,16,17,0,1,2,3,4,5,6,7,8],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FACES:{permutation:[9,10,11,12,13,14,15,16,17,0,1,2,3,4,5,6,7,8],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[1]}},UL:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},UR:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},DL:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}},DR:{DIALS:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FACES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},FRAME:{permutation:[0],orientation:[0]}}}}});var r2={};Ne(r2,{default:()=>Ac});var Ac,n2=S(()=>{Ac=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 480 240\" preserveAspectRatio=\"xMidYMid meet\">\n <title>clock</title>\n <defs>\n <g id=\"hand\" transform=\"translate(-20, -20)\">\n <path d=\"M19.9995197,2.22079449 L23.8791657,19.0203611 C23.9580836,19.3338406 24,19.6620253 24,20 C24,22.209139 22.209139,24 20,24 C17.790861,24 16,22.209139 16,20 C16,19.6620253 16.0419164,19.3338406 16.1208343,19.0203611 L19.9995197,2.22079449 Z\"></path>\n </g>\n <g id=\"cardinal_hours\" style=\"fill: #FFFFFF\">\n <circle cx=\"0\" cy=\"24\" r=\"2\"></circle>\n <circle cx=\"-24\" cy=\"0\" r=\"2\"></circle>\n <circle cx=\"24\" cy=\"0\" r=\"2\"></circle>\n <circle cx=\"0\" cy=\"-24\" r=\"2\"></circle>\n </g>\n <g id=\"face_hours\">\n <g>\n <use xlink:href=\"#cardinal_hours\"/>\n </g>\n <g transform=\"rotate(30)\">\n <use xlink:href=\"#cardinal_hours\"/>\n </g>\n <g transform=\"rotate(60)\">\n <use xlink:href=\"#cardinal_hours\"/>\n </g>\n </g>\n <g id=\"pegs\" stroke=\"#000000\" style=\"fill: #FFD000\">\n <circle id=\"PEG4\" cx=\"90\" cy=\"90\" r=\"10\"></circle>\n <circle id=\"PEG3\" cx=\"30\" cy=\"90\" r=\"10\"></circle>\n <circle id=\"PEG2\" cx=\"90\" cy=\"30\" r=\"10\"></circle>\n <circle id=\"PEG1\" cx=\"30\" cy=\"30\" r=\"10\"></circle>\n </g>\n <g id=\"frame\" transform=\"translate(-24, -24)\">\n <path stroke=\"#000000\" d=\"M120,20 C137.495665,20 153.941932,24.4930026 168.247913,32.3881183 C171.855881,30.8514056 175.828512,30 180,30 C196.568542,30 210,43.4314575 210,60 C210,64.1714878 209.148594,68.1441192 207.610077,71.7536009 C215.506997,86.0580678 220,102.504335 220,120 C220,137.495665 215.506997,153.941932 207.611882,168.247913 C209.148594,171.855881 210,175.828512 210,180 C210,196.568542 196.568542,210 180,210 C175.828512,210 171.855881,209.148594 168.246399,207.610077 C153.941932,215.506997 137.495665,220 120,220 C102.504335,220 86.0580678,215.506997 71.7520869,207.611882 C68.1441192,209.148594 64.1714878,210 60,210 C43.4314575,210 30,196.568542 30,180 C30,175.828512 30.8514056,171.855881 32.3899234,168.246399 C24.4930026,153.941932 20,137.495665 20,120 C20,102.504335 24.4930026,86.0580678 32.3881183,71.7520869 C30.8514056,68.1441192 30,64.1714878 30,60 C30,43.4314575 43.4314575,30 60,30 C64.1714878,30 68.1441192,30.8514056 71.7536009,32.3899234 C86.0580678,24.4930026 102.504335,20 120,20 Z\"></path>\n </g>\n </defs>\n <g>\n <g transform=\"translate(24, 24)\">\n <use xlink:href=\"#frame\" id=\"FRAME-l0-o0\" style=\"fill: #0C5093\"/>\n <use xlink:href=\"#pegs\" transform=\"translate(36, 36)\"/>\n <g transform=\"translate(36, 36)\">\n <circle id=\"FACES-l0-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l0-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l0-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l0-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 36)\">\n <circle id=\"FACES-l1-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l1-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l1-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l1-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 36)\">\n <circle id=\"FACES-l2-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l2-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l2-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l2-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 96)\">\n <circle id=\"FACES-l3-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l3-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l3-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l3-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 96)\">\n <circle id=\"FACES-l4-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l4-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l4-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l4-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 96)\">\n <circle id=\"FACES-l5-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l5-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l5-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l5-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 156)\">\n <circle id=\"FACES-l6-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l6-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l6-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l6-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 156)\">\n <circle id=\"FACES-l7-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l7-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l7-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l7-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 156)\">\n <circle id=\"FACES-l8-o0\" stroke=\"#000000\" style=\"fill: #90B8DF\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l8-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l8-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l8-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n </g>\n <g transform=\"translate(264, 24)\">\n <use xlink:href=\"#frame\" id=\"FRAME-l0-o1\" style=\"fill: #90B8DF\"/>\n <use xlink:href=\"#pegs\" transform=\"translate(36, 36)\"/>\n <g transform=\"translate(36, 36)\">\n <circle id=\"FACES-l9-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l9-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l9-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l9-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 36)\">\n <circle id=\"FACES-l10-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l10-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l10-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l10-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 36)\">\n <circle id=\"FACES-l11-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l11-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l11-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l11-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 96)\">\n <circle id=\"FACES-l12-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l12-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l12-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l12-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 96)\">\n <circle id=\"FACES-l13-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l13-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l13-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l13-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 96)\">\n <circle id=\"FACES-l14-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l14-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l14-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l14-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(36, 156)\">\n <circle id=\"FACES-l15-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l15-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l15-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l15-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(96, 156)\">\n <circle id=\"FACES-l16-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l16-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l16-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l16-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n <g transform=\"translate(156, 156)\">\n <circle id=\"FACES-l17-o0\" stroke=\"#000000\" style=\"fill: #0C5093\" r=\"20\"></circle>\n <use xlink:href=\"#face_hours\"/>\n <g>\n <use id=\"DIALS-l17-o0\" xlink:href=\"#hand\" transform=\"rotate(0)\" style=\"fill: #FFD000\"/>\n <use id=\"DIALS-l17-o1\" xlink:href=\"#hand\" transform=\"rotate(30)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o2\" xlink:href=\"#hand\" transform=\"rotate(60)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o3\" xlink:href=\"#hand\" transform=\"rotate(90)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o4\" xlink:href=\"#hand\" transform=\"rotate(120)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o5\" xlink:href=\"#hand\" transform=\"rotate(150)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o6\" xlink:href=\"#hand\" transform=\"rotate(180)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o7\" xlink:href=\"#hand\" transform=\"rotate(210)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o8\" xlink:href=\"#hand\" transform=\"rotate(240)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o9\" xlink:href=\"#hand\" transform=\"rotate(270)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o10\" xlink:href=\"#hand\" transform=\"rotate(300)\" style=\"fill: #0000\"/>\n <use id=\"DIALS-l17-o11\" xlink:href=\"#hand\" transform=\"rotate(330)\" style=\"fill: #0000\"/>\n </g>\n </g>\n </g>\n </g>\n</svg>`});var o2,l2=S(()=>{o2={id:\"clock\",fullName:\"Clock\",inventedBy:[\"Christopher C. Wiggs\",\"Christopher J. Taylor\"],inventionYear:1988,def:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(t2(),e2))).clockKPuzzle}),svg:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(n2(),r2))).default})}});function i2(e,t){return D(this,null,function*(){let r=yield e.def(),n=new On(r),o=new Wn(r),l=()=>o.and([o.move(\"U\"),o.not(o.or(o.moves([\"F\",\"BL\",\"BR\"])))]),i=()=>o.and([o.move(\"U\"),o.not(o.move(\"F\"))]),s=()=>o.or([i(),o.and([o.move(\"F\"),o.not(o.or(o.moves([\"U\",\"BL\",\"BR\"])))])]),u=()=>o.not(o.or([o.and([o.move(\"U\"),o.move(\"F\")]),o.and([o.move(\"F\"),o.move(\"BL\")]),o.and([o.move(\"F\"),o.move(\"BR\")]),o.and([o.move(\"BL\"),o.move(\"BR\")])])),a=()=>o.not(o.or([o.and([o.move(\"F\"),o.move(\"BL\")]),o.and([o.move(\"F\"),o.move(\"BR\")])]));switch(t){case\"full\":break;case\"experimental-fto-fc\":n.set(o.not(l()),U.Ignored);break;case\"experimental-fto-f2t\":n.set(o.not(i()),U.Ignored);break;case\"experimental-fto-sc\":n.set(o.not(s()),U.Ignored);break;case\"experimental-fto-l2c\":n.set(o.not(u()),U.Ignored);break;case\"experimental-fto-lbt\":n.set(o.not(a()),U.Ignored);break;default:console.warn(`Unsupported stickering for ${e.id}: ${t}. Setting all pieces to dim.`),n.set(o.and(o.moves([])),U.Dim)}return n.toAppearance()})}function s2(){return D(this,null,function*(){return[\"full\",\"experimental-fto-fc\",\"experimental-fto-f2t\",\"experimental-fto-sc\",\"experimental-fto-l2c\",\"experimental-fto-lbt\"]})}var a2=S(()=>{Qn()});var Xn,u2=S(()=>{Fr();a2();Xn=Nt(\"FTO\",\"Face-Turning Octahedron\",{inventedBy:[\"Karl Rohrbach\",\"David Pitcher\"],inventionYear:1983});Xn.appearance=e=>i2(Xn,e);Xn.stickerings=s2});function f2(e,t){return D(this,null,function*(){switch(t){case\"full\":case\"F2L\":case\"LL\":return Rt(e,t);default:console.warn(`Unsupported stickering for ${e.id}: ${t}. Setting all pieces to dim.`)}return Rt(e,\"full\")})}function c2(){return D(this,null,function*(){return[\"full\",\"F2L\",\"LL\"]})}var g2=S(()=>{Yr()});var Jn,m2=S(()=>{Fr();g2();Jn=Nt(\"megaminx\",\"Megaminx\",{inventionYear:1981});Jn.appearance=e=>f2(Jn,e);Jn.stickerings=c2});var p2={};Ne(p2,{default:()=>yc});var yc,d2=S(()=>{yc=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"-20 -20 546 480\" preserveAspectRatio=\"xMidYMid meet\">\n <defs>\n </defs>\n <title>pyraminx</title>\n <defs>\n <g id=\"stickerA\" transform=\"scale(1, 0.577350269)\">\n <path\n d=\"m 0,1.732050808 1,-1.732050808 1,1.732050808 z\"\n stroke=\"black\" stroke-width=\"0.04px\" stroke-linecap=\"butt\" stroke-linejoin=\"round\"\n />\n </g>\n <g id=\"stickerV\" transform=\"scale(1, 0.577350269)\">\n <path\n d=\"m 0,0 1,1.732050808 1,-1.732050808 z\"\n stroke=\"black\" stroke-width=\"0.04px\" stroke-linecap=\"butt\" stroke-linejoin=\"round\"\n />\n </g>\n </defs>\n\n<!-- 0 1 2 3 4 5 6 7 8 9 10 -->\n<!-- | | | | | | | | | | | -->\n<!-- 0 - L L L L L F R R R R R -->\n<!-- 1 - L L L F F F R R R -->\n<!-- 2 - L F F F F F R -->\n<!-- 3 - D D D D D -->\n<!-- 4 - D D D -->\n<!-- 5 - D -->\n\n <g id=\"puzzle\" transform=\"translate(5, 5) scale(40, 69.28203232)\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l0-o0\" xlink:href=\"#stickerV\" transform=\"translate(5.2, 1.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l0-o1\" xlink:href=\"#stickerA\" transform=\"translate(3, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" xlink:href=\"#stickerA\" transform=\"translate(7.4, 0)\" style=\"fill: blue\"/>\n\n <use id=\"CORNERS-l3-o0\" xlink:href=\"#stickerV\" transform=\"translate(4.2, 2.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o1\" xlink:href=\"#stickerA\" transform=\"translate(4.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l3-o2\" xlink:href=\"#stickerA\" transform=\"translate(2, 1)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" xlink:href=\"#stickerV\" transform=\"translate(6.2, 2.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l2-o1\" xlink:href=\"#stickerA\" transform=\"translate(8.4, 1)\" style=\"fill: blue\"/>\n <use id=\"CORNERS-l2-o2\" xlink:href=\"#stickerA\" transform=\"translate(6.2, 3.2)\" style=\"fill: yellow\"/>\n\n <use id=\"CORNERS-l1-o1\" xlink:href=\"#stickerA\" transform=\"translate(9.4, 0)\" style=\"fill: blue\"/>\n <use id=\"CORNERS-l1-o2\" xlink:href=\"#stickerA\" transform=\"translate(1, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l1-o0\" xlink:href=\"#stickerA\" transform=\"translate(5.2, 4.2)\" style=\"fill: yellow\"/>\n\n <!-- \"TIPS\" -->\n <!-- CORNERS2 -->\n <use id=\"CORNERS2-l0-o0\" xlink:href=\"#stickerA\" transform=\"translate(5.2, 0.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS2-l0-o1\" xlink:href=\"#stickerV\" transform=\"translate(4, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS2-l0-o2\" xlink:href=\"#stickerV\" transform=\"translate(6.4, 0)\" style=\"fill: blue\"/>\n\n <use id=\"CORNERS2-l3-o0\" xlink:href=\"#stickerA\" transform=\"translate(3.2, 2.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS2-l3-o1\" xlink:href=\"#stickerV\" transform=\"translate(3.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS2-l3-o2\" xlink:href=\"#stickerV\" transform=\"translate(2, 2)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS2-l2-o1\" xlink:href=\"#stickerV\" transform=\"translate(8.4, 2)\" style=\"fill: blue\"/>\n <use id=\"CORNERS2-l2-o2\" xlink:href=\"#stickerV\" transform=\"translate(7.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS2-l2-o0\" xlink:href=\"#stickerA\" transform=\"translate(7.2, 2.066666667)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS2-l1-o1\" xlink:href=\"#stickerV\" transform=\"translate(10.4,0)\" style=\"fill: blue\"/>\n <use id=\"CORNERS2-l1-o2\" xlink:href=\"#stickerV\" transform=\"translate(0, 0)\" style=\"fill: red\"/>\n <use id=\"CORNERS2-l1-o0\" xlink:href=\"#stickerV\" transform=\"translate(5.2, 5.2)\" style=\"fill: yellow\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l0-o0\" xlink:href=\"#stickerA\" transform=\"translate(4.2, 1.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l0-o1\" xlink:href=\"#stickerV\" transform=\"translate(3, 1)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l5-o0\" xlink:href=\"#stickerA\" transform=\"translate(6.2, 1.066666667)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l5-o1\" xlink:href=\"#stickerV\" transform=\"translate(7.4, 1)\" style=\"fill: blue\"/>\n\n <use id=\"EDGES-l1-o1\" xlink:href=\"#stickerV\" transform=\"translate(8.4, 0)\" style=\"fill: blue\"/>\n <use id=\"EDGES-l1-o0\" xlink:href=\"#stickerV\" transform=\"translate(2, 0)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l2-o1\" xlink:href=\"#stickerV\" transform=\"translate(5.2, 3.2)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l2-o0\" xlink:href=\"#stickerA\" transform=\"translate(5.2, 2.066666667)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l3-o0\" xlink:href=\"#stickerV\" transform=\"translate(6.2, 4.2)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l3-o1\" xlink:href=\"#stickerV\" transform=\"translate(9.4, 1)\" style=\"fill: blue\"/>\n\n <use id=\"EDGES-l4-o0\" xlink:href=\"#stickerV\" transform=\"translate(4.2, 4.2)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" xlink:href=\"#stickerV\" transform=\"translate(1, 1)\" style=\"fill: red\"/>\n </g>\n\n</svg>`});var L2,h2=S(()=>{Fr();L2={id:\"pyraminx\",fullName:\"Pyraminx\",inventedBy:[\"Uwe Meffert\"],inventionYear:1970,def:()=>D(void 0,null,function*(){return qi(\"pyraminx\")}),svg:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(d2(),p2))).default}),pg:()=>D(void 0,null,function*(){return Tt(\"pyraminx\")})}});var R2={};Ne(R2,{sq1HyperOrbitKPuzzle:()=>Dc});var Dc,A2=S(()=>{Dc={name:\"Square-1\",orbits:{WEDGES:{numPieces:24,orientations:9},EQUATOR:{numPieces:2,orientations:6}},startPieces:{WEDGES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},EQUATOR:{permutation:[0,1],orientation:[0,0]}},moves:{U_SQ_:{WEDGES:{permutation:[11,0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},EQUATOR:{permutation:[0,1],orientation:[0,0]}},D_SQ_:{WEDGES:{permutation:[0,1,2,3,4,5,6,7,8,9,10,11,23,12,13,14,15,16,17,18,19,20,21,22],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},EQUATOR:{permutation:[0,1],orientation:[0,0]}},_SLASH_:{WEDGES:{permutation:[0,1,2,3,4,5,12,13,14,15,16,17,6,7,8,9,10,11,18,19,20,21,22,23],orientation:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},EQUATOR:{permutation:[0,1],orientation:[0,3]}}}}});var y2={};Ne(y2,{default:()=>Fc});var Fc,D2=S(()=>{Fc=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"360px\" height=\"552px\" viewBox=\"0 0 360 552\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 59.1 (86144) - https://sketch.com -->\n <title>sq1-fancy</title>\n <desc>Created with Sketch.</desc>\n <!-- stroke=\"none\" -->\n <g id=\"sq1-fancy\" stroke=\"#888\" stroke-width=\"0.25\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"EQUATOR\" transform=\"translate(24.000000, 264.000000)\">\n <rect id=\"EQUATOR-l1-o3\" style=\"fill: red\" x=\"168\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o4\" style=\"fill: red\" x=\"192\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o5\" style=\"fill: limegreen\" x=\"216\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o2\" style=\"fill: limegreen\" x=\"240\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o1\" style=\"fill: limegreen\" x=\"264\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l1-o0\" style=\"fill: orange\" x=\"288\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o3\" style=\"fill: orange\" x=\"0\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o4\" style=\"fill: orange\" x=\"24\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o5\" style=\"fill: limegreen\" x=\"48\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o2\" style=\"fill: limegreen\" x=\"72\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o1\" style=\"fill: limegreen\" x=\"96\" y=\"0\" width=\"24\" height=\"24\"></rect>\n <rect id=\"EQUATOR-l0-o0\" style=\"fill: red\" x=\"120\" y=\"0\" width=\"24\" height=\"24\"></rect>\n </g>\n <g id=\"BOTTOM\" transform=\"translate(41.000000, 257.000000)\" stroke-linejoin=\"round\">\n <g id=\"WEDGES-23\" transform=\"translate(130.000000, 88.588457) rotate(120.000000) translate(-130.000000, -88.588457) translate(82.000000, 22.588457)\">\n <polygon id=\"WEDGES-l23-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l23-o7\" style=\"fill: red\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l23-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l23-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l23-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l23-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l23-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l23-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l23-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-22\" transform=\"translate(97.157677, 115.157677) rotate(90.000000) translate(-97.157677, -115.157677) translate(49.157677, 49.157677)\">\n <polygon id=\"WEDGES-l22-o8\" style=\"fill: blue\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l22-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l22-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l22-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l22-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l22-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l22-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l22-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l22-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-21\" transform=\"translate(82.000000, 154.588457) rotate(60.000000) translate(-82.000000, -154.588457) translate(34.000000, 88.588457)\">\n <polygon id=\"WEDGES-l21-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l21-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l21-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l21-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l21-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l21-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l21-o2\" style=\"fill: blue\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l21-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l21-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-20\" transform=\"translate(88.588457, 196.315353) rotate(30.000000) translate(-88.588457, -196.315353) translate(40.588457, 130.315353)\">\n <polygon id=\"WEDGES-l20-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l20-o7\" style=\"fill: blue\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l20-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l20-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l20-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l20-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l20-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l20-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l20-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-19\" transform=\"translate(67.157677, 163.157677)\">\n <polygon id=\"WEDGES-l19-o8\" style=\"fill: orange\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l19-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l19-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l19-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l19-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l19-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l19-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l19-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l19-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-18\" transform=\"translate(154.588457, 244.315353) scale(-1, -1) rotate(150.000000) translate(-154.588457, -244.315353) translate(106.588457, 178.315353)\">\n <polygon id=\"WEDGES-l18-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l18-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l18-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l18-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l18-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l18-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l18-o2\" style=\"fill: orange\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l18-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l18-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-17\" transform=\"translate(196.315353, 237.726896) scale(-1, -1) rotate(120.000000) translate(-196.315353, -237.726896) translate(148.315353, 171.726896)\">\n <polygon id=\"WEDGES-l17-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l17-o7\" style=\"fill: orange\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l17-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l17-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l17-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l17-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l17-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l17-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l17-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-16\" transform=\"translate(229.157677, 211.157677) scale(-1, -1) rotate(90.000000) translate(-229.157677, -211.157677) translate(181.157677, 145.157677)\">\n <polygon id=\"WEDGES-l16-o8\" style=\"fill: limegreen\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l16-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l16-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l16-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l16-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l16-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l16-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l16-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l16-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-15\" transform=\"translate(244.315353, 171.726896) scale(-1, -1) rotate(60.000000) translate(-244.315353, -171.726896) translate(196.315353, 105.726896)\">\n <polygon id=\"WEDGES-l15-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l15-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l15-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l15-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l15-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l15-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l15-o2\" style=\"fill: limegreen\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l15-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l15-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-14\" transform=\"translate(237.726896, 130.000000) scale(-1, -1) rotate(30.000000) translate(-237.726896, -130.000000) translate(189.726896, 64.000000)\">\n <polygon id=\"WEDGES-l14-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l14-o7\" style=\"fill: limegreen\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l14-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l14-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l14-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l14-o3\" style=\"fill: white\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l14-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l14-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l14-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-13\" transform=\"translate(211.157677, 97.157677) scale(-1, -1) translate(-211.157677, -97.157677) translate(163.157677, 31.157677)\">\n <polygon id=\"WEDGES-l13-o8\" style=\"fill: red\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l13-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l13-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l13-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l13-o4\" style=\"fill: white\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l13-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l13-o2\" style=\"fill: white\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l13-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l13-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-12\" transform=\"translate(171.726896, 82.000000) rotate(150.000000) translate(-171.726896, -82.000000) translate(123.726896, 16.000000)\">\n <polygon id=\"WEDGES-l12-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l12-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l12-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l12-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l12-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l12-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l12-o2\" style=\"fill: red\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l12-o1\" style=\"fill: white\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l12-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n </g>\n <g id=\"TOP\" transform=\"translate(41.000000, -31.000000)\" stroke-linejoin=\"round\">\n <g id=\"WEDGES-11\" transform=\"translate(154.588457, 244.315353) scale(-1, -1) rotate(150.000000) translate(-154.588457, -244.315353) translate(106.588457, 178.315353)\">\n <polygon id=\"WEDGES-l11-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l11-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l11-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l11-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l11-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l11-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l11-o2\" style=\"fill: red\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l11-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l11-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-10\" transform=\"translate(196.315353, 237.726896) scale(-1, -1) rotate(120.000000) translate(-196.315353, -237.726896) translate(148.315353, 171.726896)\">\n <polygon id=\"WEDGES-l10-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l10-o7\" style=\"fill: red\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l10-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l10-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l10-o4\" style=\"fill: red\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l10-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l10-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l10-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l10-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-9\" transform=\"translate(229.157677, 211.157677) scale(-1, -1) rotate(90.000000) translate(-229.157677, -211.157677) translate(181.157677, 145.157677)\">\n <polygon id=\"WEDGES-l9-o8\" style=\"fill: limegreen\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l9-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l9-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l9-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l9-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l9-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l9-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l9-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l9-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-8\" transform=\"translate(244.315353, 171.726896) scale(-1, -1) rotate(60.000000) translate(-244.315353, -171.726896) translate(196.315353, 105.726896)\">\n <polygon id=\"WEDGES-l8-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l8-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l8-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l8-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l8-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l8-o3\" style=\"fill: limegreen\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l8-o2\" style=\"fill: limegreen\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l8-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l8-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-7\" transform=\"translate(237.726896, 130.000000) scale(-1, -1) rotate(30.000000) translate(-237.726896, -130.000000) translate(189.726896, 64.000000)\">\n <polygon id=\"WEDGES-l7-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l7-o7\" style=\"fill: limegreen\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l7-o6\" style=\"fill: limegreen\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l7-o5\" style=\"fill: limegreen\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l7-o4\" style=\"fill: limegreen\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l7-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l7-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l7-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l7-o0\" style=\"fill: limegreen\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-6\" transform=\"translate(211.157677, 97.157677) scale(-1, -1) translate(-211.157677, -97.157677) translate(163.157677, 31.157677)\">\n <polygon id=\"WEDGES-l6-o8\" style=\"fill: orange\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l6-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l6-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l6-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l6-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l6-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l6-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l6-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l6-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-5\" transform=\"translate(171.726896, 82.000000) rotate(150.000000) translate(-171.726896, -82.000000) translate(123.726896, 16.000000)\">\n <polygon id=\"WEDGES-l5-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l5-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l5-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l5-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l5-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l5-o3\" style=\"fill: orange\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l5-o2\" style=\"fill: orange\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l5-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l5-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-4\" transform=\"translate(130.000000, 88.588457) rotate(120.000000) translate(-130.000000, -88.588457) translate(82.000000, 22.588457)\">\n <polygon id=\"WEDGES-l4-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l4-o7\" style=\"fill: orange\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l4-o6\" style=\"fill: orange\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l4-o5\" style=\"fill: orange\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l4-o4\" style=\"fill: orange\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l4-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l4-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l4-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l4-o0\" style=\"fill: orange\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-3\" transform=\"translate(97.157677, 115.157677) rotate(90.000000) translate(-97.157677, -115.157677) translate(49.157677, 49.157677)\">\n <polygon id=\"WEDGES-l3-o8\" style=\"fill: blue\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l3-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l3-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l3-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l3-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l3-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l3-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l3-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l3-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-2\" transform=\"translate(82.000000, 154.588457) rotate(60.000000) translate(-82.000000, -154.588457) translate(34.000000, 88.588457)\">\n <polygon id=\"WEDGES-l2-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l2-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l2-o6\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l2-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l2-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l2-o3\" style=\"fill: blue\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l2-o2\" style=\"fill: blue\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l2-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l2-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-1\" transform=\"translate(88.588457, 196.315353) rotate(30.000000) translate(-88.588457, -196.315353) translate(40.588457, 130.315353)\">\n <polygon id=\"WEDGES-l1-o8\" style=\"fill: #D8D8D8\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l1-o7\" style=\"fill: blue\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l1-o6\" style=\"fill: blue\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l1-o5\" style=\"fill: blue\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l1-o4\" style=\"fill: blue\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l1-o3\" style=\"fill: yellow\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l1-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l1-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l1-o0\" style=\"fill: blue\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n <g id=\"WEDGES-0\" transform=\"translate(67.157677, 163.157677)\">\n <polygon id=\"WEDGES-l0-o8\" style=\"fill: red\" points=\"25.723 70.277 40.574 95.999 -2.27373675e-13 96\"></polygon>\n <polygon id=\"WEDGES-l0-o7\" style=\"fill: #D8D8D8\" points=\"70.2768775 96 60.8615612 131.138439 40.5741225 95.9988775\"></polygon>\n <polygon id=\"WEDGES-l0-o6\" style=\"fill: red\" points=\"70.2768775 96 40.574 95.999 25.7231225 70.2768775\"></polygon>\n <polygon id=\"WEDGES-l0-o5\" style=\"fill: red\" points=\"48.0001225 47.9995 68.287 47.9995 78.4307806 65.5692194\"></polygon>\n <polygon id=\"WEDGES-l0-o4\" style=\"fill: yellow\" points=\"60.8615 35.1385 68.287 47.9995 48 48\"></polygon>\n <polygon id=\"WEDGES-l0-o3\" style=\"fill: red\" points=\"83.1384388 48 78.4307806 65.5692194 68.2870612 47.9994388\"></polygon>\n <polygon id=\"WEDGES-l0-o2\" style=\"fill: yellow\" points=\"83.1384388 48 68.287 47.9995 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l0-o1\" style=\"fill: yellow\" points=\"96 0 83.1384388 48 60.8615612 35.1384388\"></polygon>\n <polygon id=\"WEDGES-l0-o0\" style=\"fill: red\" points=\"70.2768775 96 25.7231225 70.2768775 48.0001225 47.9995 78.4307806 65.5692194\"></polygon>\n </g>\n </g>\n <g id=\"DIAGONALS\" transform=\"translate(168.861561, 1.019238)\" stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\n <line x1=\"0\" y1=\"287.842323\" x2=\"70.2768775\" y2=\"550.119201\" id=\"BOTTOM\"></line>\n <line x1=\"0.15767665\" y1=\"262.276878\" x2=\"70.4345542\" y2=\"2.27488928e-16\" id=\"TOP\"></line>\n </g>\n </g>\n</svg>`});var F2,B2=S(()=>{F2={id:\"square1\",fullName:\"Square-1\",inventedBy:[\"Karel Hr\\u0161el\",\"Vojtech Kopsk\\xFD\"],inventionYear:1990,def:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(A2(),R2))).sq1HyperOrbitKPuzzle}),svg:()=>D(void 0,null,function*(){return(yield Promise.resolve().then(()=>(D2(),y2))).default})}});var Ut,rn=S(()=>{n0();ht();Yr();Fr();H0();$0();l2();u2();m2();h2();B2();Qn();Ut={\"3x3x3\":ji,\"2x2x2\":Zn,\"4x4x4\":tn(\"4x4x4\",\"4\\xD74\\xD74 Cube\"),\"5x5x5\":tn(\"5x5x5\",\"5\\xD75\\xD75 Cube\"),\"6x6x6\":tn(\"6x6x6\",\"6\\xD76\\xD76 Cube\"),\"7x7x7\":tn(\"7x7x7\",\"7\\xD77\\xD77 Cube\"),\"40x40x40\":tn(\"40x40x40\",\"40\\xD740\\xD740 Cube\"),clock:o2,megaminx:Jn,pyraminx:L2,skewb:Nt(\"skewb\",\"Skewb\",{inventedBy:[\"Tony Durham\"]}),square1:F2,fto:Xn,gigaminx:Nt(\"gigaminx\",\"Gigaminx\",{inventedBy:[\"Tyler Fox\"],inventionYear:2006}),master_tetraminx:Nt(\"master tetraminx\",\"Master Tetraminx\",{inventedBy:[\"Katsuhiko Okamoto\"],inventionYear:2002})}});function er(e,t){let r=[],n=[];for(let f of t.split(`\n`)){let c=f.split(\" \");if(!f.startsWith(\"SetOrder \")){if(f.startsWith(\"Alg \")){let g=z.fromString(f.substring(4)),m=new Je(e);m.reset(),m.applyAlg(g),n.push({alg:g,transformation:m.state})}else if(f.startsWith(\"SubgroupSizes \"))for(let g=1;g<c.length;g++)r.push(parseInt(c[g]))}}let o={ordering:new Array(r.length)},l=[],i=0;l.push(0);let s=z.fromString(\"\"),u=Lt(e);for(let f=0;f<r.length;f++)i+=r[f],l.push(i),n.splice(i-1,0,{alg:s,transformation:u});if(n.length!==i)throw Error(`Bad sgs; expected ${i-r.length} algs but saw ${n.length-r.length}`);let a={};for(let f in e.orbits){let c=e.orbits[f];a[f]=new Array(c.numPieces).fill(!1)}for(let f=r.length-1;f>=0;f--){let c=[];for(let m=l[f];m<l[f+1];m++){let L=n[m].transformation;for(let p in e.orbits){let y=e.orbits[p];for(let F=0;F<y.numPieces;F++)(L[p].permutation[F]!==F||L[p].orientation[F]!==0)&&(a[p][F]||(c.push({orbitName:p,permutationIdx:F}),a[p][F]=!0))}}let g={};for(let m=l[f];m<l[f+1];m++){let L=Gt(e,n[m].transformation),p=\"\";for(let y=0;y<c.length;y++){let F=c[y];p=`${p} ${L[F.orbitName].permutation[F.permutationIdx]} ${L[F.orbitName].orientation[F.permutationIdx]}`}g[p]=n[m],n[m].alg=n[m].alg.invert(),n[m].transformation=Gt(e,n[m].transformation)}o.ordering[f]={pieceOrdering:c,lookup:g}}return o}var $n=S(()=>{he();ht()});var M2={};Ne(M2,{cachedData222:()=>Pc,data222:()=>C2});function Pc(){return D(this,null,function*(){return Hi!=null?Hi:Hi=C2()})}function C2(){return D(this,null,function*(){return er(yield Zn.def(),`SubgroupSizes 24 21 18 15 12 9 6\n\nAlg F\nAlg F2\nAlg F'\nAlg D\nAlg D2\nAlg D'\nAlg L\nAlg L2\nAlg L'\nAlg F U\nAlg F U2\nAlg F U'\nAlg F L\nAlg F L2\nAlg F L'\nAlg F2 U\nAlg F2 U'\nAlg F2 R\nAlg F2 R'\nAlg F' D\nAlg F' D'\nAlg F' R\nAlg F' R'\nAlg B\nAlg B2\nAlg B'\nAlg B R\nAlg B R2\nAlg B R'\nAlg B2 U\nAlg B2 U2\nAlg B2 U'\nAlg B2 R\nAlg B2 R2\nAlg B2 R'\nAlg B' U\nAlg B' U'\nAlg F D' F'\nAlg F2 L F2\nAlg B R' B2\nAlg B R' U2\nAlg B2 U R'\nAlg B2 R B'\nAlg R\nAlg R2\nAlg R'\nAlg R2 U\nAlg R2 U2\nAlg R2 U'\nAlg R' U\nAlg R' U2\nAlg R' U'\nAlg F R F'\nAlg F R2 F'\nAlg L2 D' L2\nAlg L' B L\nAlg R2 U' R\nAlg R' U R2\nAlg R' U R'\nAlg F R F' U2\nAlg F' U F\nAlg F' U2 F\nAlg F' U' F\nAlg L F L'\nAlg L F2 L'\nAlg L F' L'\nAlg F' D R D'\nAlg F' U2 F U'\nAlg F D2 B D2 F'\nAlg F2 D' L2 D F2\nAlg F2 L F L' F\nAlg L' F2 L' F2 L\nAlg F L' U' L2 F L'\nAlg F2 L F L' U2 F\nAlg U\nAlg U2\nAlg U'\nAlg F2 D2 B D2 F2\nAlg F2 D2 B' D2 F2\nAlg L2 D2 R D2 L2\nAlg L2 D2 R' D2 L2\nAlg F2 D2 B D2 F2 U\nAlg F2 D2 B D2 F2 U'\nAlg U F2 D2 B D2 F2\nAlg U F2 D2 B' D2 F2\nAlg F D B D' R' F' U\nAlg F' D L F U B' L'\nAlg F' L' F U L U L'\nAlg D' L F D R' U' F'\nAlg L F L' U' F' U' F\nAlg L D' F' L' U' R F\nAlg F D F U F' L' F' R'\nAlg F2 D' F L F2 D F' R'\nAlg F D' F L' D F R2 U2 F' U'\nAlg F D' L D' L F D2 L2 B' R'\nAlg F L' D F R2 D2 L D F' U2\nAlg F L' D F2 D' L F L2 F2 U\nAlg F D F' D L2 F R' F' D' B2 U'`)})}var Hi,P2=S(()=>{rn();$n();Hi=null});var Nf={};Ne(Nf,{cachedMegaminxDefWithoutMO:()=>Jl,cachedSGSDataMegaminx:()=>Zm,sgsDataMegaminx:()=>Tf});function Ym(){return D(this,null,function*(){return en(\"megaminx\",{allMoves:!0,addRotations:!0}).writekpuzzle(!0)})}function Jl(){return D(this,null,function*(){return Ks!=null?Ks:Ks=Ym()})}function Zm(){return D(this,null,function*(){return Vs!=null?Vs:Vs=Tf()})}function Tf(){return D(this,null,function*(){return er(yield Jl(),`SubgroupSizes 12 5 60 58 60 56 54 57 52 50 54 48 46 51 44 42 48 40 45 38 36 42 34 32 39 30 36 28 26 33 24 30 22 20 27 18 24 16 14 21 12 18 10 15 8 6 2 12 9 3\n\nAlg Rv\nAlg Rv2\nAlg Rv2'\nAlg Rv'\nAlg Lv'\nAlg Lv2\nAlg Lv2'\nAlg Fv\nAlg Fv'\nAlg BRv2\nAlg Lv2 Rv'\n\nAlg Uv\nAlg Uv2\nAlg Uv2'\nAlg Uv'\n\nAlg D\nAlg D2\nAlg D2'\nAlg D'\nAlg B\nAlg B2\nAlg B2'\nAlg B'\nAlg D DL\nAlg D DL2\nAlg D DL2'\nAlg D DL'\nAlg D2 FL\nAlg D2 FL2\nAlg D2 FL2'\nAlg D2 FL'\nAlg D2' FR\nAlg D2' FR2\nAlg D2' FR2'\nAlg D2' FR'\nAlg D' DR\nAlg D' DR2\nAlg D' DR2'\nAlg D' DR'\nAlg B DR\nAlg B DR2'\nAlg B DR'\nAlg B2 BR2\nAlg B2 BR2'\nAlg B2 BR'\nAlg B2' BL\nAlg B2' BL2\nAlg B2' BL2'\nAlg B' DL\nAlg B' DL2\nAlg B' DL'\nAlg D DL B\nAlg D DL B2'\nAlg D DL B'\nAlg D DL2' L\nAlg D DL2' L2\nAlg D DL2' L2'\nAlg D DL' FL\nAlg D DL' FL2\nAlg D DL' FL'\nAlg D2 FL2' F\nAlg D2 FL2' F2\nAlg D2 FL2' F2'\nAlg D2 FL' FR\nAlg D2 FL' FR2\nAlg D2 FL' FR'\nAlg D2' FR2' R\nAlg D2' FR2' R2\nAlg D2' FR2' R2'\nAlg B DR2' R2'\nAlg B DR' BR2\nAlg B2 BR' BL\nAlg B2' BL2' L\nAlg D DL2' L2' F\nAlg DL\nAlg DL2\nAlg DL2'\nAlg DL'\nAlg DL BL\nAlg DL BL2\nAlg DL BL2'\nAlg DL BL'\nAlg DL2 L\nAlg DL2 L2\nAlg DL2 L2'\nAlg DL2 L'\nAlg DL2' FL\nAlg DL2' FL2\nAlg DL2' FL2'\nAlg DL2' FL'\nAlg D B D'\nAlg D B2 D'\nAlg D B2' D'\nAlg D B' D'\nAlg D2 B D2'\nAlg D2 DL' D2'\nAlg D2' DL' D2\nAlg D' B D\nAlg D' DL' D\nAlg B2 DR2 B2'\nAlg B2 DR2' B2'\nAlg B2 DR' B2'\nAlg B2' BR B2\nAlg B2' BR2 B2\nAlg B2' BR2' B2\nAlg B' BL B\nAlg B' BL2 B\nAlg B' BL' B\nAlg DL BL2' U\nAlg DL BL2' U2\nAlg DL BL2' U2'\nAlg DL BL' L\nAlg DL BL' L2\nAlg DL BL' L'\nAlg DL2 L2' F\nAlg DL2 L2' F2\nAlg DL2 L2' F2'\nAlg DL2 L' FL\nAlg DL2 L' FL2\nAlg DL2 L' FL'\nAlg DL2' FL2' FR\nAlg DL2' FL2' FR2\nAlg DL2' FL2' FR2'\nAlg D B D' DR2\nAlg D B D' DR'\nAlg D2 B D2' FR2'\nAlg D' B D DL\nAlg B2 DR' B2' BR\nAlg B2 DR' B2' BR'\nAlg B2' BR2' B2 U\nAlg DL BL2' U2' F\nAlg D FL D'\nAlg D FL2 D'\nAlg D FL2' D'\nAlg D FL' D'\nAlg D2 FR D2'\nAlg D2 FR2 D2'\nAlg D2 FR2' D2'\nAlg D2' DR D2\nAlg D2' DR2 D2\nAlg D2' DR2' D2\nAlg DL2 BL DL2'\nAlg DL2 BL2 DL2'\nAlg DL2 BL2' DL2'\nAlg DL2 BL' DL2'\nAlg DL2' L2 DL2\nAlg DL2' L2' DL2\nAlg DL' FL2 DL\nAlg DL' FL' DL\nAlg D FL D' FL2'\nAlg D FL L D'\nAlg D FL L2 D'\nAlg D FL L2' D'\nAlg D FL2 F D'\nAlg D FL2 F2 D'\nAlg D FL2 F2' D'\nAlg D FL2 L D'\nAlg D FL2 L2 D'\nAlg D FL2' D' FR\nAlg D FL2' D' FR2\nAlg D FL2' D' FR2'\nAlg D FL2' F D'\nAlg D FL2' F2' D'\nAlg D FL2' FR2' D'\nAlg D FL2' FR' D'\nAlg D FL' D' FL\nAlg D FL' FR D'\nAlg D2 FR D2' FR2'\nAlg D2 FR2 R D2'\nAlg D2 FR2 R2 D2'\nAlg D2 FR2 R2' D2'\nAlg D2 FR2' D2' DR\nAlg D2 FR2' D2' DR2\nAlg D2 FR2' D2' DR2'\nAlg D2 FR2' D2' DR'\nAlg D2 FR2' R2' D2'\nAlg D2 FR' DR2' D2'\nAlg D2' DR D2 DR2'\nAlg D2' DR2 BR D2\nAlg D2' DR2 BR2' D2\nAlg D2' DR2' BR2' D2\nAlg D2' DR2' BR' D2\nAlg DL2 BL2 DL2' BL'\nAlg DL2 BL2 DL2' BR'\nAlg DL2 BL' DL2' L'\nAlg DL2' L2 DL2 BL2\nAlg D FL L2 BL2 D'\nAlg D FL L' FL2' D'\nAlg D FL2 L FL' D'\nAlg D FL2' D' FR2 DR2'\nAlg B DL B'\nAlg B DL2 B'\nAlg B DL2' B'\nAlg B DL' B'\nAlg B2 D B2'\nAlg B2 D2 B2'\nAlg B2 D2' B2'\nAlg B2 D' B2'\nAlg B2 DL B2'\nAlg B2' D' B2\nAlg B2' DL B2\nAlg B' D' B\nAlg B DL B' BL\nAlg B DL B' BL2\nAlg B DL B' BL2'\nAlg B DL B' BL'\nAlg B DL2 B' BL2\nAlg B DL2 B' BL2'\nAlg B DL2 B' BL'\nAlg B DL2' L2 B'\nAlg B DL2' L2' B'\nAlg B DL2' L' B'\nAlg B DL' FL B'\nAlg B DL' FL2 B'\nAlg B DL' FL2' B'\nAlg B DL' FL' B'\nAlg B2 D FL B2'\nAlg B2 D FL2' B2'\nAlg B2 D FL' B2'\nAlg B2 D2 FR2 B2'\nAlg B2 D2 FR2' B2'\nAlg B2 D2 FR' B2'\nAlg B2 D2' B2' DR\nAlg B2 D2' B2' DR2\nAlg B2 D2' B2' DR2'\nAlg B2 DL B2' BR\nAlg B2 DL B2' BR2\nAlg B2 DL B2' BR2'\nAlg B2' D' B2 BR2\nAlg B2' D' B2 BR2'\nAlg B' D' B DR\nAlg B' D' B DR2'\nAlg D FL' D FR D2'\nAlg D DL FL DL' D'\nAlg D2' FR DR FR' D2\nAlg B DL B D B2'\nAlg B DL B D2' B2'\nAlg B DL B' BL2 U2\nAlg B DL B' BL2 U2'\nAlg B DL B' BL2 U'\nAlg B DL2 B' BL2' U2\nAlg B DL2 B' BL2' U2'\nAlg B DL2 B' BL' L2\nAlg B DL2' L2' B' F2\nAlg B2 D FL2' B2' F2'\nAlg DR\nAlg DR2\nAlg DR2'\nAlg DR'\nAlg DR2 FR\nAlg DR2 FR2\nAlg DR2 FR2'\nAlg DR2 FR'\nAlg DR2' R\nAlg DR2' R2\nAlg DR2' R2'\nAlg DR2' R'\nAlg DR' BR\nAlg DR' BR2\nAlg DR' BR2'\nAlg DR' BR'\nAlg D DR D'\nAlg D2 DR D2'\nAlg B BR B'\nAlg B BR2' B'\nAlg B BR' B'\nAlg B2 BL2 B2'\nAlg B2 BL2' B2'\nAlg B2 BL' B2'\nAlg DR2 FR2 FL2\nAlg DR2 FR2 FL2'\nAlg DR2 FR2 FL'\nAlg DR2 FR2' F\nAlg DR2 FR2' F2\nAlg DR2 FR2' F2'\nAlg DR2 FR' R\nAlg DR2 FR' R2\nAlg DR2 FR' R'\nAlg DR2' R FR\nAlg DR2' R FR2'\nAlg DR2' R FR'\nAlg DR2' R2' U\nAlg DR2' R2' U2\nAlg DR2' R2' U2'\nAlg DR2' R' BR2'\nAlg DR' BR2' BL'\nAlg D DR2 FR D'\nAlg B BR B' DR\nAlg B BR B' DR2\nAlg B BR2' B' U2'\nAlg B BR' B' BL2\nAlg B BR' B' BL2'\nAlg B BR' B' BL'\nAlg B2 BL2' L' B2'\nAlg DR2 FR2 FL' F\nAlg DR2 FR2' F FL2'\nAlg DR2 FR2' F FL'\nAlg B BR2' U2' L2' B'\nAlg D2' FL D2\nAlg D2' FL2 D2\nAlg D2' FL2' D2\nAlg D2' FL' D2\nAlg D' FR2 D\nAlg D' FR2' D\nAlg D' FR' D\nAlg DR FR DR'\nAlg DR FR2' DR'\nAlg DR FR' DR'\nAlg DR2 R2 DR2'\nAlg DR2 R2' DR2'\nAlg DR2' BR DR2\nAlg DR2' BR2 DR2\nAlg DR2' BR2' DR2\nAlg D DR2 D' DR2'\nAlg D DR2' D' DR2\nAlg D2' FL D2 FR'\nAlg D2' FL2 D2 FL2'\nAlg D2' FL2 D2 FL'\nAlg D2' FL2 L D2\nAlg D2' FL2 L2 D2\nAlg D2' FL2 L2' D2\nAlg D2' FL2 L' D2\nAlg D2' FL2' F D2\nAlg D2' FL2' F2 D2\nAlg D2' FL2' F2' D2\nAlg D2' FL2' L D2\nAlg D2' FL2' L2 D2\nAlg D2' FL2' L2' D2\nAlg D2' FL2' L' D2\nAlg D2' FL' F D2\nAlg D2' FL' F2' D2\nAlg D' FR FL' D\nAlg D' FR2 D FR'\nAlg D' FR2 D FL2\nAlg D' FR2 D FL2'\nAlg D' FR2 FL D\nAlg D' FR2' R2' D\nAlg D' FR' R2' D\nAlg DR2 R2 DR2' U2'\nAlg DR2 R2' DR2' BR\nAlg DR2 R2' DR2' BR2\nAlg DR2 R2' DR2' BR2'\nAlg DR2 R2' DR2' BR'\nAlg DR2 R' BR2' DR2'\nAlg DR2' BR DR2 BR2'\nAlg DR2' BR2 BL DR2\nAlg DR2' BR2 BL2' DR2\nAlg DR2' BR2' BL' DR2\nAlg D B2' BL2' B2 D'\nAlg D2 B2 DL2 B2' D2'\nAlg D2' FL2 L' FL2 D2\nAlg D2' FL2' L D2 FL'\nAlg D2' FL2' L FL2' D2\nAlg D2' FL2' L2' BL2 D2\nAlg B2' DR B2\nAlg B2' DR2 B2\nAlg B2' DR2' B2\nAlg B2' DR' B2\nAlg B' DR' B\nAlg B2' DR FR B2\nAlg B2' DR FR2 B2\nAlg B2' DR FR2' B2\nAlg B2' DR FR' B2\nAlg B2' DR2 R B2\nAlg B2' DR2 R2 B2\nAlg B2' DR2 R2' B2\nAlg B2' DR2 R' B2\nAlg B2' DR2' B2 BR\nAlg B2' DR2' B2 BR2\nAlg B2' DR2' B2 BR2'\nAlg B2' DR2' B2 BR'\nAlg B2' DR' B2 BL2\nAlg B2' DR' B2 BL2'\nAlg B2' DR' B2 BL'\nAlg B' DR2' BR' B\nAlg B' DR' B BR\nAlg B' DR' B BR2'\nAlg B' DR' B BR'\nAlg D2' FR2' FL FR2 D2\nAlg D2' FR2' FL2 FR2 D2\nAlg D2' FR2' FL2' FR2 D2\nAlg D' DR2' FR DR2 D\nAlg D' DR2' FR2 DR2 D\nAlg D' DR' FR' DR D\nAlg D' FR D' FL' D2\nAlg B2 D2 DL2 D2' B2'\nAlg B2 D2 DL2' D2' B2'\nAlg B2 D2 DL' D2' B2'\nAlg B2 D' FR' D B2'\nAlg B2 DL D2' DL' B2'\nAlg B2 DL D' DL' B2'\nAlg B2' DR FR2' B2 F2\nAlg B2' DR FR2' B2 F2'\nAlg B2' DR FR' R B2\nAlg B2' DR FR' R2 B2\nAlg B2' DR2 R2' B2 U\nAlg B2' DR2 R2' B2 U2\nAlg B2' DR2 R2' B2 U2'\nAlg B2' DR' B2 BL2 U'\nAlg B' DR2' BR' B BL2'\nAlg DR D FR D' DR'\nAlg DL2' B D B' DL2\nAlg D2' FR2' FL2' FR2 F D2\nAlg D' DR2' FR DR2 D FL2'\nAlg B2 D B D' DR B2\nAlg FR\nAlg FR2\nAlg FR2'\nAlg FR'\nAlg FR2 FL\nAlg FR2 FL2\nAlg FR2 FL2'\nAlg FR2 FL'\nAlg FR2' F\nAlg FR2' F2\nAlg FR2' F2'\nAlg FR2' F'\nAlg FR' R\nAlg FR' R2\nAlg FR' R2'\nAlg FR' R'\nAlg D FR D'\nAlg DR R DR'\nAlg DR R2' DR'\nAlg DR R' DR'\nAlg DR2 BR2 DR2'\nAlg DR2 BR2' DR2'\nAlg DR2 BR' DR2'\nAlg FR2 FL2' L\nAlg FR2 FL2' L2\nAlg FR2 FL2' L2'\nAlg FR2 FL' F\nAlg FR2 FL' F2\nAlg FR2 FL' F'\nAlg FR2' F FL\nAlg FR2' F FL2'\nAlg FR2' F FL'\nAlg FR2' F2' U\nAlg FR2' F2' U2\nAlg FR2' F2' U2'\nAlg FR2' F' R2'\nAlg FR' R2' BR'\nAlg DR R DR' FR\nAlg DR R DR' FR2\nAlg DR R2' DR' U2'\nAlg DR R' DR' BR2\nAlg DR R' DR' BR2'\nAlg DR R' DR' BR'\nAlg DR2 BR2' BL2' DR2'\nAlg DR2 BR2' BL' DR2'\nAlg FR2 FL' F L2\nAlg FR2 FL' F L2'\nAlg B' DR2 BR' DR2' B\nAlg DR R2' U2' BL2 DR'\nAlg D' FL D\nAlg D' FL2 D\nAlg D' FL2' D\nAlg D' FL' D\nAlg FR FL FR'\nAlg FR FL2 FR'\nAlg FR FL2' FR'\nAlg FR FL' FR'\nAlg FR2 F2 FR2'\nAlg FR2 F2' FR2'\nAlg FR2' R FR2\nAlg FR2' R2 FR2\nAlg FR2' R2' FR2\nAlg D FR2 D' FR2'\nAlg D FR2' D' FR2\nAlg D' FL D FL'\nAlg D' FL2 D FL'\nAlg D' FL2 L D\nAlg D' FL2 L2 D\nAlg D' FL2 L2' D\nAlg D' FL2 L' D\nAlg D' FL2' F2' D\nAlg D' FL2' L2 D\nAlg D' FL2' L2' D\nAlg D' FL2' L' D\nAlg D' FL' F2' D\nAlg FR FL2' F' FR'\nAlg FR FL2' FR' L\nAlg FR FL2' FR' L2\nAlg FR FL2' FR' L2'\nAlg FR2 F2 FR2' U2\nAlg FR2 F2 FR2' U2'\nAlg FR2 F2' FR2' U2'\nAlg FR2 F2' FR2' R\nAlg FR2 F2' FR2' R2\nAlg FR2 F2' FR2' R2'\nAlg FR2 F2' FR2' R'\nAlg FR2 F' R2' FR2'\nAlg FR2' R FR2 R2'\nAlg FR2' R2 BR FR2\nAlg FR2' R2 BR2 FR2\nAlg FR2' R2 BR2' FR2\nAlg FR2' R2' BR2' FR2\nAlg FR2' R2' BR' FR2\nAlg D DR2' BR2' DR2 D'\nAlg D FR2' D' FR2 FL2\nAlg D2' B DL B' D2\nAlg D2' B2' D' B2 D2'\nAlg D' FL2 L BL D\nAlg D' FL2 L' FL2 D\nAlg D' FL2' F2' R' D\nAlg D' FL2' L FL2' D\nAlg D' FL2' L2' BL2 D\nAlg DR2' FR DR2\nAlg DR2' FR2 DR2\nAlg DR2' FR2' DR2\nAlg DR2' FR' DR2\nAlg DR' FR' DR\nAlg DR2' FR FL DR2\nAlg DR2' FR FL2 DR2\nAlg DR2' FR FL2' DR2\nAlg DR2' FR FL' DR2\nAlg DR2' FR2 DR2 F\nAlg DR2' FR2 DR2 F2\nAlg DR2' FR2 DR2 F2'\nAlg DR2' FR2 DR2 F'\nAlg DR2' FR2' DR2 R\nAlg DR2' FR2' DR2 R2\nAlg DR2' FR2' DR2 R2'\nAlg DR2' FR2' DR2 R'\nAlg DR2' FR' DR2 BR2\nAlg DR2' FR' DR2 BR2'\nAlg DR2' FR' DR2 BR'\nAlg DR' FR2' R' DR\nAlg DR' FR' DR R\nAlg DR' FR' DR R2'\nAlg DR' FR' DR R'\nAlg D' FR2' FL FR2 D\nAlg D' FR2' FL2 FR2 D\nAlg D' FR' FL' FR D\nAlg B2' DR2 FR' DR2' B2\nAlg B' DR2 FR' DR2' B\nAlg DR2 D' FL' D DR2'\nAlg DR2' FR FL2' DR2 L\nAlg DR2' FR FL2' DR2 L2\nAlg DR2' FR FL2' DR2 L2'\nAlg DR2' FR FL' DR2 F\nAlg DR2' FR FL' DR2 F2\nAlg DR2' FR2 F FL2 DR2\nAlg DR2' FR2 DR2 F2' U\nAlg DR2' FR2 DR2 F2' U2\nAlg DR2' FR2 DR2 F2' U2'\nAlg DR2' FR' DR2 BR2 U'\nAlg DR2' FR' DR2 BR2' BL2'\nAlg DR' FR2' R' DR BR2'\nAlg D' FR2' FL2 FR2 L D\nAlg D' FR2' FL2 FR2 L2 D\nAlg B2' DR2' FR2' R' DR2 B2\nAlg DR2 D DR D' FR DR2\nAlg DR2' FR' DR2 BR2 U' BL2\nAlg FL\nAlg FL2\nAlg FL2'\nAlg FL'\nAlg FL L\nAlg FL L2\nAlg FL L2'\nAlg FL L'\nAlg FL2 F\nAlg FL2 F2\nAlg FL2 F2'\nAlg FL2 F'\nAlg FR2' FL2' FR2\nAlg FR' FL2' FR\nAlg FL L2 BL\nAlg FL L2 BL2\nAlg FL L2 BL2'\nAlg FL L2 BL'\nAlg FL L2' U\nAlg FL L2' U2\nAlg FL L2' U2'\nAlg FL L' F\nAlg FL L' F2\nAlg FL L' F'\nAlg FL2 F L\nAlg FL2 F L2\nAlg FL2 F L2'\nAlg FL2 F L'\nAlg FL2 F2' R\nAlg FL2 F2' R2\nAlg FL2 F2' R2'\nAlg FR' FL2 F' FR\nAlg FL L2 BL2' BR\nAlg FL L2 BL2' BR2\nAlg FL L2 BL' U\nAlg FL L2' U BL2\nAlg FL L2' U BL2'\nAlg FL L2' U BL'\nAlg FL L2' U2' R\nAlg FL L2' U2' R2\nAlg FL L' F' FL\nAlg FL L' F' FL2\nAlg FL L' F' FL2'\nAlg B DL2' BL DL2 B'\nAlg FL L2 BL' U BR2'\nAlg FL2 L FL2'\nAlg FL2 L2 FL2'\nAlg FL2 L2' FL2'\nAlg FL2 L' FL2'\nAlg FL2' F2 FL2\nAlg FL2' F2' FL2\nAlg FL2' F' FL2\nAlg FR2' FL' FR2 FL\nAlg FL2 L2 FL2' L2'\nAlg FL2 L2 FL2' L'\nAlg FL2 L2 FL2' BL\nAlg FL2 L2 FL2' BL2\nAlg FL2 L2 FL2' BL2'\nAlg FL2 L2 FL2' BL'\nAlg FL2 L2' FL2' U\nAlg FL2 L2' FL2' U2\nAlg FL2 L2' FL2' U2'\nAlg FL2 L2' FL2' BL\nAlg FL2 L2' FL2' BL2\nAlg FL2 L2' FL2' BL2'\nAlg FL2 L2' FL2' BL'\nAlg FL2 L' FL2' U\nAlg FL2 L' FL2' U2'\nAlg FL2 L' FL2' F\nAlg FL2 L' FL2' F2\nAlg FL2 L' FL2' F2'\nAlg FL2 L' FL2' F'\nAlg FL2' F L FL2\nAlg FL2' F L' FL2\nAlg FL2' F2 L FL2\nAlg FL2' F2 L2 FL2\nAlg FL2' F2 L2' FL2\nAlg FL2' F2 FL2 F'\nAlg FL2' F2 FL2 L2\nAlg FL2' F2' R FL2\nAlg FL2' F2' R2 FL2\nAlg FL2' F2' R2' FL2\nAlg FL2' F' R2' FL2\nAlg FL2' F' R' FL2\nAlg FL' FR2' FL FR2\nAlg D DR2' FR2' DR2 D'\nAlg D FR2' R' FR2 D'\nAlg D' DL2 BL2 DL2' D\nAlg B2 D2' B D2 B2\nAlg DR2 D2 DR D2' DR2\nAlg FR2 D FR D' FR2\nAlg FL2 L2 BL' L2 FL2'\nAlg FL2 L2 FL2' BL2 BR\nAlg FL2 L2' BL L2' FL2'\nAlg FL2 L2' FL2' BL L'\nAlg DL FL DL'\nAlg DL FL2 DL'\nAlg DL FL2' DL'\nAlg DL FL' DL'\nAlg DL2 FL DL2'\nAlg DL FL DL' L\nAlg DL FL DL' L2\nAlg DL FL DL' L2'\nAlg DL FL DL' L'\nAlg DL FL2 L DL'\nAlg DL FL2 L2 DL'\nAlg DL FL2 L2' DL'\nAlg DL FL2 L' DL'\nAlg DL FL2 DL' L\nAlg DL FL2' DL' F2\nAlg DL FL2' DL' F2'\nAlg DL FL2' DL' F'\nAlg DL2 FL DL2' BL\nAlg DL2 FL DL2' BL2\nAlg DL2 FL DL2' BL2'\nAlg B DL2' FL DL2 B'\nAlg B2 DL2' FL DL2 B2'\nAlg FL2 F2 L' F2' FL2'\nAlg FL2 F2' L' F2 FL2'\nAlg FL2 F' L' F FL2'\nAlg FL2' FR2' FL FR2 FL2\nAlg FL2' FR' F' FR FL2\nAlg DL FL DL' L BL2'\nAlg DL FL DL' L BL'\nAlg DL FL DL' L2 U2\nAlg DL FL DL' L2 U2'\nAlg DL FL2 L2' DL' U2\nAlg DL FL2 L2' DL' U2'\nAlg DL FL2 L' DL' F'\nAlg DL FL2' DL' F2' R2\nAlg DL FL2' DL' F2' R2'\nAlg DL2 FL DL2' BL2 BR2\nAlg B DL2 FL DL2' BL B'\nAlg FL2 F2' L' F2 R2 FL2'\nAlg FL2 F2' L' F2 R2' FL2'\nAlg FL2' FR' F FR L FL2\nAlg DL FL DL' L BL2' BR2\nAlg DL FL2 L DL FL' DL2'\nAlg FR F FR'\nAlg FR F2 FR'\nAlg FR F2' FR'\nAlg FR F' FR'\nAlg FR2 R FR2'\nAlg FR2 R2 FR2'\nAlg FR2 R2' FR2'\nAlg FR2 R' FR2'\nAlg FL2' L FL2\nAlg FL2' L2 FL2\nAlg FL2' L2' FL2\nAlg FL' F FL\nAlg FL' F2 FL\nAlg FL' F' FL\nAlg FR F FR' F'\nAlg FR F2 FR' L\nAlg FR F2' FR' U\nAlg FR F2' FR' U2\nAlg FR F2' FR' U2'\nAlg FR F' FR' R\nAlg FR F' FR' R2\nAlg FR F' FR' R2'\nAlg FR F' FR' R'\nAlg FR2 R FR2' F2\nAlg FR2 R FR2' R'\nAlg FR2 R2' BR FR2'\nAlg FR2 R2' BR2 FR2'\nAlg FR2 R2' BR2' FR2'\nAlg FR2 R2' BR' FR2'\nAlg FL2' L2 FL2 BL\nAlg FL2' L2 FL2 BL2\nAlg FL2' L2' FL2 U\nAlg FL' F L2 FL\nAlg FL' F L2' FL\nAlg FL' F FL L\nAlg DR' FR2 R' FR2' DR\nAlg FR F2' U2' BR FR'\nAlg FR F2' U2' BR2 FR'\nAlg FR F' FR R' FR2'\nAlg FL2' L2' FL2 U BL2\nAlg FL2' L2' FL2 U BL2'\nAlg FR F L F' FR'\nAlg FR F L2 F' FR'\nAlg FR F L2' F' FR'\nAlg FR F L' F' FR'\nAlg FR F2 U F2' FR'\nAlg FR F2 U2 F2' FR'\nAlg FR F2 U2' F2' FR'\nAlg FR F2' R F2 FR'\nAlg FR F2' R2 F2 FR'\nAlg FR F2' R2' F2 FR'\nAlg FR FL' L FL FR'\nAlg FR FL' L2 FL FR'\nAlg FR FL' L' FL FR'\nAlg FR2 F2' L F2 FR2'\nAlg FR2 F2' L2 F2 FR2'\nAlg FR2 F' U2 F FR2'\nAlg FR2 F' U2' F FR2'\nAlg FR2 R U R' FR2'\nAlg FR2 R U' R' FR2'\nAlg FR2 R2 BR2 R2' FR2'\nAlg FR2 R2 BR2' R2' FR2'\nAlg FR2' DR BR DR' FR2\nAlg FR2' R2' U R2 FR2\nAlg FR2' R2' U2 R2 FR2\nAlg FR2' R' BR2 R FR2\nAlg FR2' R' BR2' R FR2\nAlg FR2' R' BR' R FR2\nAlg FL2 L BL L' FL2'\nAlg FL2 L2 U2' L2' FL2'\nAlg FL2 DL' BL2 DL FL2'\nAlg FL2' F2 R2' F2' FL2\nAlg FL2' L2' BL2 L2 FL2\nAlg FL' F2 L F2' FL\nAlg FL' F2 L2 F2' FL\nAlg FL' F' R' F FL\nAlg FL' FR R' FR' FL\nAlg FR F L2' F' FR' BL\nAlg FR F L2' F' FR' BL2\nAlg FR F L' F' FR' F'\nAlg FR F2 U2 BR2 F2' FR'\nAlg FR F2 U2 BR2' F2' FR'\nAlg FR F2' R F2 R2' FR'\nAlg FR F2' R2' F2 FR' R'\nAlg FR FL' L FL FR' F'\nAlg FR2 F' U2 F FR2' L2'\nAlg FR F L2 BL' L2 F' FR'\nAlg FR F L2' F U' F2' FR'\nAlg R\nAlg R2\nAlg R2'\nAlg R'\nAlg R2 F\nAlg R2 F2\nAlg R2 F2'\nAlg R2 F'\nAlg R2' U\nAlg R2' U2\nAlg R2' U2'\nAlg R2' U'\nAlg R' BR\nAlg R' BR2\nAlg R' BR2'\nAlg R' BR'\nAlg DR BR DR'\nAlg DR BR2' DR'\nAlg DR BR' DR'\nAlg FR R FR'\nAlg R2 F2' L\nAlg R2 F2' L2\nAlg R2 F2' L2'\nAlg R2 F' U\nAlg R2 F' U2\nAlg R2 F' U'\nAlg R2' U F\nAlg R2' U F2'\nAlg R2' U F'\nAlg R2' U2' BL\nAlg R2' U2' BL2\nAlg R2' U2' BL2'\nAlg R2' U' BR2'\nAlg DR BR DR' R\nAlg DR BR DR' R2\nAlg DR BR2' BL2' DR'\nAlg DR BR2' BL' DR'\nAlg R2 F' U L2\nAlg R2 F' U L2'\nAlg FR' F FR\nAlg FR' F2 FR\nAlg FR' F2' FR\nAlg FR' F' FR\nAlg R F R'\nAlg R F2 R'\nAlg R F2' R'\nAlg R F' R'\nAlg R2 U2 R2'\nAlg R2 U2' R2'\nAlg R2' BR R2\nAlg R2' BR2 R2\nAlg R2' BR2' R2\nAlg FR R2 FR' R2'\nAlg FR R2' FR' R2\nAlg FR' F FR F'\nAlg FR' F2 FR F'\nAlg FR' F2 FR L\nAlg FR' F2 FR L2\nAlg FR' F2 FR L2'\nAlg FR' F2 FR L'\nAlg FR' F2' FR U2'\nAlg FR' F2' FR L2\nAlg FR' F2' FR L2'\nAlg FR' F2' FR L'\nAlg FR' F' FR U2'\nAlg R F2' U' R'\nAlg R F2' R' L\nAlg R F2' R' L2\nAlg R F2' R' L2'\nAlg R2 U2 R2' BL2\nAlg R2 U2 R2' BL2'\nAlg R2 U2' BR R2'\nAlg R2 U2' BR2 R2'\nAlg R2 U2' R2' BL2'\nAlg R2 U2' R2' BR2'\nAlg R2 U2' R2' BR'\nAlg R2 U' BR2' R2'\nAlg R2' BR R2 BR2'\nAlg DR BR2 BL2' BR2' DR'\nAlg FR R2' FR' R2 F2\nAlg FR' F2 L' F2 FR\nAlg FR' F2' U2' BR' FR\nAlg FR' F2' L F2' FR\nAlg DR' R DR\nAlg DR' R2 DR\nAlg DR' R2' DR\nAlg DR' R' DR\nAlg DR' R DR F\nAlg DR' R DR F2\nAlg DR' R DR F2'\nAlg DR' R DR F'\nAlg DR' R2 DR U\nAlg DR' R2 DR U2\nAlg DR' R2 DR U2'\nAlg DR' R2 DR U'\nAlg DR' R2' DR BR\nAlg DR' R2' DR BR2\nAlg DR' R2' DR BR2'\nAlg DR' R2' DR BR'\nAlg DR' R' DR BR\nAlg DR' R' DR BR2'\nAlg DR' R' DR BR'\nAlg B2' DR2' R' DR2 B2\nAlg DR2' FR' F FR DR2\nAlg DR2' FR' F2 FR DR2\nAlg DR2' FR' F' FR DR2\nAlg DR' R DR F2' L\nAlg DR' R DR F2' L2\nAlg DR' R DR F2' L2'\nAlg DR' R DR F' U\nAlg DR' R DR F' U2\nAlg DR' R DR F' U'\nAlg DR' R2 U2' BL DR\nAlg DR' R2 U2' BL2 DR\nAlg DR' R2 U2' BL2' DR\nAlg DR' R2 DR U F2\nAlg DR' R' DR BR2' BL2'\nAlg DR2' FR' F2 FR DR2 L\nAlg DR2' FR' F2 FR DR2 L2\nAlg DR' FR' F' FR R' DR\nAlg BR\nAlg BR2\nAlg BR2'\nAlg BR'\nAlg BR2' U\nAlg BR2' U2\nAlg BR2' U2'\nAlg BR2' U'\nAlg BR' BL\nAlg BR' BL2\nAlg BR' BL2'\nAlg BR' BL'\nAlg B BL B'\nAlg B BL2' B'\nAlg B BL' B'\nAlg BR2' U2 F\nAlg BR2' U2 F2\nAlg BR2' U2 F2'\nAlg BR2' U2 F'\nAlg BR2' U2' L\nAlg BR2' U2' L2\nAlg BR2' U2' L2'\nAlg BR2' U' BL2'\nAlg BR' BL U\nAlg BR' BL U2\nAlg BR' BL U2'\nAlg BR' BL U'\nAlg B BL B' BR\nAlg B BL B' BR2\nAlg B BL B' BR2'\nAlg B BL2' L2' B'\nAlg B BL2' L' B'\nAlg BR2' U2' L F2\nAlg BR2' U2' L F2'\nAlg BR2' U2' L F'\nAlg BR2 U BR2'\nAlg BR2 U2 BR2'\nAlg BR2 U2' BR2'\nAlg BR2 U' BR2'\nAlg BR2' BL BR2\nAlg BR2' BL2 BR2\nAlg BR2' BL2' BR2\nAlg BR R BR' R'\nAlg BR2 U BR2' U2'\nAlg BR2 U BR2' U'\nAlg BR2 U BR2' F\nAlg BR2 U BR2' F2\nAlg BR2 U BR2' F2'\nAlg BR2 U BR2' F'\nAlg BR2 U2 BR2' F\nAlg BR2 U2 BR2' F2\nAlg BR2 U2 BR2' F2'\nAlg BR2 U2 BR2' F'\nAlg BR2 U2 BR2' L\nAlg BR2 U2 BR2' L2\nAlg BR2 U2 BR2' L2'\nAlg BR2 U2' BL BR2'\nAlg BR2 U2' BL2 BR2'\nAlg BR2 U2' BL' BR2'\nAlg BR2 U2' BR2' L\nAlg BR2 U2' BR2' L2'\nAlg BR2 U2' BR2' BL2'\nAlg BR2 U2' BR2' BL'\nAlg BR2 U' BL BR2'\nAlg BR2 U' BL2' BR2'\nAlg BR2 U' BL' BR2'\nAlg BR2' BL BR2 U2\nAlg BR2' BL BR2 U2'\nAlg BR2' BL BR2 BL2'\nAlg BR2' BL BR2 BL'\nAlg B BL2 L2' BL2' B'\nAlg DR' R2 F R2' DR\nAlg BR2 U F' U2' BR2'\nAlg BR2 U BR2' U2' BL'\nAlg BR2 U2 F U' BR2'\nAlg BR2 U2 BR2' L F2'\nAlg B' BR B\nAlg B' BR2 B\nAlg B' BR2' B\nAlg B' BR' B\nAlg B' BR2 B U\nAlg B' BR2 B U2\nAlg B' BR2 B U2'\nAlg B' BR2 B U'\nAlg B' BR2' B BL\nAlg B' BR2' B BL2\nAlg B' BR2' B BL2'\nAlg B' BR2' B BL'\nAlg B' BR' B BL\nAlg B' BR' B BL2'\nAlg B' BR' B BL'\nAlg B' BR2 U2' L B\nAlg B' BR2 U2' L2 B\nAlg B' BR2 U2' L2' B\nAlg B' BR2 B U2 F\nAlg B' BR2 B U2 F2\nAlg B' BR2 B U2 F2'\nAlg B' BR2 B U2 F'\nAlg B' BR2' B BL U\nAlg B' BR2' B BL U2\nAlg B' BR2' B BL U2'\nAlg B' BR2' B BL U'\nAlg B' BR' B BL2' L2'\nAlg B' BR' B BL2' L'\nAlg BR2 R U R' BR2'\nAlg B' BR2 U2' L B F2'\nAlg B' BR2 U2' L B F'\nAlg B' BR' B BR2 BL BR2'\nAlg B' BR2 U R BR' R' B\nAlg BR U BR'\nAlg BR U2 BR'\nAlg BR U2' BR'\nAlg BR U' BR'\nAlg BR2 BL BR2'\nAlg BR2 BL2 BR2'\nAlg BR2 BL2' BR2'\nAlg BR2 BL' BR2'\nAlg R2' F R2\nAlg R2' F2 R2\nAlg R2' F2' R2\nAlg R' U R\nAlg R' U2 R\nAlg R' U' R\nAlg BR U BR' U'\nAlg BR U2 BR' F\nAlg BR U2' BR' L\nAlg BR U2' BR' L2\nAlg BR U2' BR' L2'\nAlg BR U' BL BR'\nAlg BR U' BL2 BR'\nAlg BR U' BL2' BR'\nAlg BR U' BR' BL'\nAlg BR2 BL BR2' U2\nAlg BR2 BL BR2' BL'\nAlg R2' F2' R2 L\nAlg R2' F2' R2 L2\nAlg R' U F2 R\nAlg R' U F2' R\nAlg R' U R F\nAlg BR U' BR BL' BR2'\nAlg BR U F U' BR'\nAlg BR U F2 U' BR'\nAlg BR U F2' U' BR'\nAlg BR U F' U' BR'\nAlg BR U2 L U2' BR'\nAlg BR U2 L2 U2' BR'\nAlg BR U2 L2' U2' BR'\nAlg BR U2' BL U2 BR'\nAlg BR U2' BL2 U2 BR'\nAlg BR U2' BL2' U2 BR'\nAlg BR R' F R BR'\nAlg BR R' F2 R BR'\nAlg BR R' F' R BR'\nAlg BR2 U2' F U2 BR2'\nAlg BR2 U2' F2 U2 BR2'\nAlg BR2 U' L2 U BR2'\nAlg BR2 U' L2' U BR2'\nAlg BR2 BL L BL' BR2'\nAlg BR2 BL L' BL' BR2'\nAlg BR2' BL2' L BL2 BR2\nAlg BR2' BL2' L2 BL2 BR2\nAlg R2 F2 L F2' R2'\nAlg R2 F2 L2 F2' R2'\nAlg R2 F2 L2' F2' R2'\nAlg R2' U2 BL2' U2' R2\nAlg R' U2 F U2' R\nAlg R' U2 F2 U2' R\nAlg R' U' BL' U R\nAlg R' BR BL' BR' R\nAlg BR U F' U' BR' U'\nAlg BR U2 L' BL2 U2' BR'\nAlg BR U2' BL U2 BL2' BR'\nAlg BR U2' BL2' U2 BR' BL'\nAlg BR R' F R BR' U'\nAlg BR2 U' L2 U BR2' F2'\nAlg BR2 U' L2 U BR2' F'\nAlg BR U F2' U L' U2' BR'\nAlg BR U F2' L' F U' BR'\nAlg F\nAlg F2\nAlg F2'\nAlg F'\nAlg F L\nAlg F L2\nAlg F L2'\nAlg F L'\nAlg F2 U\nAlg F2 U2\nAlg F2 U2'\nAlg F2 U'\nAlg F L2' BL\nAlg F L2' BL2\nAlg F L2' BL2'\nAlg F L' U\nAlg F L' U2\nAlg F L' U2'\nAlg F L' U'\nAlg F2 U L\nAlg F2 U L2\nAlg F2 U L2'\nAlg F2 U L'\nAlg F L' U BL2\nAlg F L' U BL2'\nAlg F L' U BL'\nAlg F L' U' F\nAlg F L' U' F2\nAlg F L' U' F2'\nAlg F2 L F2'\nAlg F2 L2 F2'\nAlg F2 L2' F2'\nAlg F2 L' F2'\nAlg F2' U2 F2\nAlg F2' U2' F2\nAlg F2' U' F2\nAlg F2 L2 F2' L2'\nAlg F2 L2 F2' L'\nAlg F2 L2' BL F2'\nAlg F2 L2' BL2 F2'\nAlg F2 L2' BL2' F2'\nAlg F2 L' F2' U\nAlg F2 L' F2' U2\nAlg F2 L' F2' U2'\nAlg F2 L' F2' U'\nAlg F2 L' BL F2'\nAlg F2 L' BL2 F2'\nAlg F2 L' BL2' F2'\nAlg F2' U L F2\nAlg F2' U L2 F2\nAlg F2' U L' F2\nAlg F2' U2 F2 U2'\nAlg F2' U2 F2 U'\nAlg F2' U2 F2 L2\nAlg F2' U2 F2 L2'\nAlg F2' U2 F2 L'\nAlg F2' U2 L F2\nAlg F' R' F R\nAlg F L2 BL L2' F'\nAlg F L2 BL2 L2' F'\nAlg F2 L2 F2' L2' U2'\nAlg F2 L2' BL' L F2'\nAlg F2 L' F U2' F2\nAlg F2 L' F' U' F'\nAlg FL F FL'\nAlg FL F2 FL'\nAlg FL F2' FL'\nAlg FL F' FL'\nAlg FL F FL' L\nAlg FL F FL' L2\nAlg FL F FL' L2'\nAlg FL F FL' L'\nAlg FL F2 FL' L\nAlg FL F2 FL' L2\nAlg FL F2 FL' L2'\nAlg FL F2 FL' L'\nAlg FL F2' FL' U2\nAlg FL F2' FL' U2'\nAlg FL F2' FL' U'\nAlg F2 U2 L' U2' F2'\nAlg F2 U2' L' U2 F2'\nAlg F2 U' L' U F2'\nAlg FL F FL' L2 BL\nAlg FL F FL' L2 BL2\nAlg FL F FL' L2 BL2'\nAlg FL F2 FL' L2' BL\nAlg FL F2 FL' L2' BL2\nAlg FL F2 FL' L2' BL2'\nAlg FL F2 FL' L' U'\nAlg FL F FL' F2' L' F2\nAlg F2 U F U L U2' F2'\nAlg F2' L F2\nAlg F2' L2 F2\nAlg F2' L2' F2\nAlg F2' L' F2\nAlg F' U F\nAlg F' U2 F\nAlg F' U2' F\nAlg F' U' F\nAlg R U R'\nAlg R U2' R'\nAlg R U' R'\nAlg F R' F' R\nAlg F2' L F2 L'\nAlg F2' L2' BL F2\nAlg F2' L2' BL2 F2\nAlg F2' L2' BL2' F2\nAlg F' U F U'\nAlg F' U F L\nAlg F' U F L2\nAlg F' U F L2'\nAlg F' U F L'\nAlg R U2' R' BL2\nAlg R U2' R' BL2'\nAlg R U2' R' BL'\nAlg F2' L' F U' F\nAlg F2 L2 BL L2' F2'\nAlg F2 L2 BL2 L2' F2'\nAlg F2 L2 BL2' L2' F2'\nAlg F2 L2 BL' L2' F2'\nAlg F2' U BL U' F2\nAlg F2' U BL' U' F2\nAlg F2' L' BL L F2\nAlg F2' L' BL2 L F2\nAlg F2' L' BL2' L F2\nAlg F2' L' BL' L F2\nAlg F' U2 L U2' F\nAlg F' U2 L2 U2' F\nAlg F' U2 L2' U2' F\nAlg F' U2' BL2 U2 F\nAlg R U L U' R'\nAlg R U L' U' R'\nAlg R F' L F R'\nAlg R2 U2' L2 U2 R2'\nAlg R2 U' BL2 U R2'\nAlg R2 U' BL2' U R2'\nAlg R2 U' BL' U R2'\nAlg R2 BR BL' BR' R2'\nAlg F2 L2 BL2' L2' F2' U2\nAlg F2' U BL U' F2 L\nAlg F2' U BL' U' F2 L2\nAlg F2' U BL' U' F2 L2'\nAlg F2' L' BL L F2 U2\nAlg F2' L' BL L F2 U2'\nAlg F2' L' BL' L F2 U\nAlg F2' L' BL' L F2 U2\nAlg F' U2 L' U BL2' U2 F\nAlg F' U2' BL L' BL2' U2 F\nAlg U\nAlg U2\nAlg U2'\nAlg U'\nAlg U L\nAlg U L2\nAlg U L2'\nAlg U L'\nAlg U2 BL\nAlg U2 BL2\nAlg U2 BL2'\nAlg U2 BL'\nAlg U L' BL\nAlg U L' BL2\nAlg U L' BL2'\nAlg U L' BL'\nAlg U2 BL L\nAlg U2 BL L2\nAlg U2 BL L2'\nAlg U2 BL L'\nAlg U F' L F\nAlg U L' BL' U\nAlg U L' BL' U2\nAlg U2 L U2'\nAlg U2 L2 U2'\nAlg U2 L2' U2'\nAlg U2 L' U2'\nAlg U2' BL2 U2\nAlg U2' BL2' U2\nAlg U2' BL' U2\nAlg U2 L2 U2' L2'\nAlg U2 L2 U2' L'\nAlg U2 L' U2' BL\nAlg U2 L' U2' BL2\nAlg U2 L' U2' BL2'\nAlg U2 L' U2' BL'\nAlg U2' BL L U2\nAlg U2' BL L2 U2\nAlg U2' BL L2' U2\nAlg U2' BL L' U2\nAlg U2' BL2 U2 L2\nAlg U2' BL2 U2 L2'\nAlg U2' BL2 U2 L'\nAlg U2' BL2 U2 BL2'\nAlg U2' BL2 U2 BL'\nAlg U2' BL2 L U2\nAlg U' BR' U BR\nAlg U2 L' U BL2' U2\nAlg U2 L2' U2' L2 BL2\nAlg U2 L2' U2' L2 BL2'\nAlg U2 L' U' BL' U'\nAlg U2' BL2 U' L U2'\nAlg F U F'\nAlg F U2 F'\nAlg F U2' F'\nAlg F U' F'\nAlg F U F' L\nAlg F U F' L2\nAlg F U F' L2'\nAlg F U F' L'\nAlg F U2 F' L\nAlg F U2 F' L2\nAlg F U2 F' L2'\nAlg F U2 F' L'\nAlg F U2' BL2 F'\nAlg F U2' BL2' F'\nAlg F U2' BL' F'\nAlg U2 BL2 L' BL2' U2'\nAlg U2 BL' L' BL U2'\nAlg U2 BL2' L' BL2 U2'\nAlg F U2 F' L' BL'\nAlg F U F' U2' L' U2\nAlg U2 L U2 L2' U' BL' U2\nAlg U2' L U2\nAlg U2' L2 U2\nAlg U2' L2' U2\nAlg U2' L' U2\nAlg U' BL U\nAlg U' BL2 U\nAlg U' BL2' U\nAlg U' BL' U\nAlg BR BL BR'\nAlg BR BL2' BR'\nAlg BR BL' BR'\nAlg U BR' U' BR\nAlg U2' L U2 L'\nAlg U' BL U L\nAlg U' BL U L2\nAlg U' BL U L2'\nAlg U' BL U L'\nAlg U' BL U BL'\nAlg U2' L' U BL' U\nAlg U' BL2 L BL2' U\nAlg U' BL2 L2 BL2' U\nAlg U' BL2 L2' BL2' U\nAlg U' BL2 L' BL2' U\nAlg BR U' L U BR'\nAlg BR U' L2 U BR'\nAlg BR U' L2' U BR'\nAlg BR U' L' U BR'\nAlg BR BL L BL' BR'\nAlg BR BL L' BL' BR'\nAlg BR2 BL2' L BL2 BR2'\nAlg BR2 BL2' L2 BL2 BR2'\nAlg U2' L BL2' L' BL2 U2\nAlg U2' L2 F' L2' F U2\nAlg U2' L' DL L DL' U2\nAlg U2' BL2' L BL2 L' U2\nAlg U2' BL2' L2 BL2 L2' U2\nAlg U' BL2 L BL2' U BL\nAlg U' BL2 L2 BL2' U L\nAlg U' BL2 L2 BL2' U BL2'\nAlg U' BL2 L2 BL2' U BL'\nAlg U' BL2 L2 BL2' L2' U\nAlg BR BL L' BL' BR' BL2'\nAlg BR BL L' BL' BR' BL'\nAlg U' BL U BL U' L2' BL2' U\nAlg U' BL2 U' L2 U L' BL2' U\nAlg L\nAlg L2\nAlg L2'\nAlg L'\nAlg L' BL\nAlg L' BL2\nAlg L' BL2'\nAlg L' BL'\nAlg U BL U'\nAlg U BL2 U'\nAlg U BL2' U'\nAlg U BL' U'\nAlg U BL U' L\nAlg U BL U' L2\nAlg U BL U' L2'\nAlg U BL U' L'\nAlg U BL U' BL'\nAlg L2' BL L2\nAlg L2' BL2 L2\nAlg L2' BL2' L2\nAlg L2' BL' L2\nAlg L2 DL L2' DL'\nAlg L2' BL L2 BL2'\nAlg L2' BL L2 BL'\nAlg F' L2 BL L2' F\nAlg F' L2 BL2 L2' F\nAlg F' L2 BL2' L2' F\nAlg F' L2 BL' L2' F\nAlg L2 DL L' DL' L'\nAlg L2' U BL2' U' L2\nAlg L2' BL L2' BL2' L'\nAlg L2' BL L' BL2' L2'\nAlg L2' DL L' DL' L2\nAlg L' U' L' U L2\nAlg U L' DL L DL' U'\nAlg F' L2 BL L2' BL2' F\nAlg L2 DL' BL DL2 L2' DL'\nAlg L2' U BL2' U' BL L2\nAlg L2' BL' U BL' U' L2\nAlg L2' BL' L2 U' L' U\nAlg U' L U\nAlg U' L2 U\nAlg U' L2' U\nAlg U' L' U\nAlg U' L2' U BL\nAlg U' L2' U BL2\nAlg U' L2' U BL2'\nAlg U' L2' U BL'\nAlg U' L' U BL\nAlg U' L' U BL2\nAlg U' L' U BL2'\nAlg U' L' U BL'\nAlg U' L' U L BL L'\nAlg U' L' U L2 BL L2'\nAlg U' L' U BL U' L2 U\nAlg L2 BL L2'\nAlg L2 BL2 L2'\nAlg L2 BL2' L2'\nAlg L2 BL' L2'\nAlg L2 BL L2' BL'\nAlg L DL L' DL'\nAlg DL L DL' L'\nAlg L U' L2 U L2\nAlg L DL' BL DL L'\nAlg L DL' BL2 DL L'\nAlg L DL' BL' DL L'\nAlg DL L DL' L' BL'\nAlg L2 BL L' DL L' DL'\nAlg FL' L BL L' FL\nAlg FL' L BL2 L' FL\nAlg FL' L BL2' L' FL\nAlg FL' L BL' L' FL\nAlg FL' DL' BL DL FL\nAlg FL' DL' BL2 DL FL\nAlg FL' DL' BL2' DL FL\nAlg FL' DL' BL' DL FL\nAlg L2 BL2' U BL2 U' L2'\nAlg FL' L BL L' FL BL2'\nAlg FL' L BL' L' FL BL\nAlg U' F U BL U' F' U\nAlg U' F U BL2 U' F' U\nAlg U' F U BL2' U' F' U\nAlg F' FL2' DL' BL' DL FL2 F\nAlg L2' BL2 L2' BL' L2 BL' L2\nAlg DL L DL2' BL' DL2 L' DL'\nAlg DL2 FL2' DL2 BL' DL2' FL2 DL2'\nAlg FL' L U BL2' U' BL L' FL\nAlg FL' L2 U' L' U BL2 L' FL\nAlg L BL L'\nAlg L BL2 L'\nAlg L BL2' L'\nAlg L BL' L'\nAlg DL' BL DL\nAlg DL' BL2 DL\nAlg DL' BL2' DL\nAlg DL' BL' DL\nAlg L BL L' BL'\nAlg L' DL L DL'\nAlg L BL2 L' DL' BL' DL\nAlg L U BL2' U' BL2 L'\nAlg L BL2' U BL2 U' L'\nAlg DL' B' BL2 B BL2' DL\nAlg DL' BL2 B' BL2' B DL\nAlg U BL2' DL2' BL2 U' BL2' DL2\nAlg B' BL2 L2 BL2' B BL2 L2'\nAlg L U BL2' U' BL2 L' BL2'\nAlg L U BL2' U' BL2 L' BL'\nAlg L BL B BL' L' BL B'\nAlg L BL2' U BL2 U' L' BL2\nAlg L BL' U BL2 U' BL L'\nAlg L BL' U BL2' U' BL L'\nAlg L BL' U BL' U' BL L'\nAlg L2 BL2 L2' BL' L2 BL' L2'\nAlg DL' BL B' BL2' B BL' DL\nAlg L BL2' L U2 BR' U' BR U' L2'\nAlg L BL2' L BL L' BL L BL2' L2'\nAlg BL\nAlg BL2\nAlg BL2'\nAlg BL'\nAlg U BR BL2 BR' BL2' U'\nAlg B BL DL BL' DL' B'\nAlg L' BL2' DL' BL2 DL L\nAlg BR B BL B' BL' BR'\nAlg U BR BL2 BR' BL2' U' BL2\nAlg U BL BR BL' BR' U'\nAlg U BR BL BR' BL' U'\nAlg U' L' BL2' L BL2 U\nAlg B' BR' BL2' BR BL2 B\nAlg L BL2 U BL2' U' L'\nAlg BR B BL2 B' BL2' BR'\nAlg U BL2 U' BL' U BL' U'\nAlg B BL DL BL DL' BL2' B'\nAlg B BL2 DL BL' DL' BL' B'\nAlg B' BL' B BL2' B' BL2' B\nAlg U BL U' BL2 U BL2 U' BL2\nAlg U BR2 B' BR2' U' BR B BR'\nAlg BL2 BR B DL' B DL B2' BR'\nAlg B BL2' B2' BR B BR' B BL2 B'\nAlg U' BL' L' BL L U BL\nAlg B' BL2 B BL B' BL2 B\nAlg B' BL2' B BL' B' BL2' B\nAlg B' BL' BR' BL' BR BL2 B\nAlg B' BL2' BR' BL BR BL B\nAlg U' BL' L' BL' L BL2 U BL'\nAlg L' BL' L' DL L DL' BL L BL\nAlg L U BL U' BL' L'\nAlg L BL U BL' U' L'\nAlg BR' U' BL' U BL BR\nAlg L U2 BR' U' BR U' L'\nAlg U BL U2' L U L2' BL L BL2'\nAlg U' L2 F' L' F2 U' F' U2 L'\nAlg U BR' U' L U BR U' L'\nAlg U BR B BR' U' BR B' BR'\nAlg U' L U BR' U' L' U BR\nAlg B DL' B' BR B DL B' BR'\nAlg L' DL' B DL L DL' B' DL\nAlg BR B BR' U BR B' BR' U'\nAlg BR B DL' B' BR' B DL B'\nAlg U BR2' U2 L2 U2' BR2 U2 L2' U2\nAlg U2' L2 U2' BR2' U2 L2' U2' BR2 U'\nAlg U BL' B' BL U' L U2 BL' B BL U2' L'\nAlg U BR' U' L F' L2' U BR U' L2 F L'\nAlg U BR U' L U BR' U' L'\nAlg U' BL2 B BL2' U BL2 B' BL2'\nAlg L U BR U' L' U BR' U'\nAlg L BL2' B' BL2 L' BL2' B BL2\nAlg U BR' U2 L2 U2' BR U2 L2' U2\nAlg L' BL2 L2' F' L2 BL2' L2' F L2'\nAlg U BL2' U R U' BL2 U' L U2 R' U2' L'\nAlg U BR U' L2 F L' U BR' U' L F' L2'\nAlg U L' BL2 L' FL' L BL2' L U' L2' FL L2\nAlg U BR2' U R' U2' L U2 R U' BR2 U' L'`)})}var Ks,Vs,Hs=S(()=>{ll();$n();Ks=null;Vs=null});var Qf={};Ne(Qf,{sgsDataPyraminx:()=>Wf,sgsDataPyraminxFixedOrientation:()=>Zs});function Wf(){return D(this,null,function*(){return Ys!=null?Ys:Ys=$m()})}function Zs(){return D(this,null,function*(){return{ordering:(yield Wf()).ordering.slice(2)}})}function $m(){return D(this,null,function*(){return er(yield Ut.pyraminx.def(),`SubgroupSizes 12 9 12 3 10 3 8 6 2 3 3 3 3\n\nAlg B\nAlg B'\nAlg y\nAlg B y\nAlg B' y\nAlg y'\nAlg B y'\nAlg B' y'\nAlg BR'\nAlg B BR'\nAlg B' BR'\n\nAlg L\nAlg L'\nAlg L F\nAlg L' F\nAlg F\nAlg L F'\nAlg L' F'\nAlg F'\n\nAlg L B' U L' B\nAlg L U L'\nAlg L U' L'\nAlg L U L' U'\nAlg B' U B\nAlg B' U' B\nAlg B' U' B U\nAlg L U' L' R\nAlg L U' L' R'\nAlg L' R' L\nAlg L' R' L R\n\nAlg R\nAlg R'\n\nAlg R' U R\nAlg R' U' R\nAlg R' U R U'\nAlg B U B'\nAlg B U' B'\nAlg R B' R' B\nAlg L R L' R U' R\nAlg R L R' L'\nAlg L' R' U R L\n\nAlg U\nAlg U'\n\nAlg R U R' U'\nAlg U R U' R'\nAlg L' U' L U\nAlg U' L' U L\nAlg U L R' L' R U'\nAlg U' R' L R L' U\nAlg L' U' L U' R U' R'\n\nAlg R U' R' U\nAlg L' U L U'\nAlg U' R U R'\nAlg U L' U' L\nAlg L R' L' R L' U L U'\n\nAlg L' U L U' L R' L' R\n\nAlg b\nAlg b'\n\nAlg l\nAlg l'\n\nAlg r\nAlg r'\n\nAlg u\nAlg u'`)})}var Ys,Xs=S(()=>{rn();$n();Ys=null});var Vf={};Ne(Vf,{sgsDataSkewb:()=>Kf,sgsDataSkewbFixedCorner:()=>ta,skewbDefWithoutMOCached:()=>$l});function np(){return D(this,null,function*(){return en(\"skewb\",{allMoves:!0,addRotations:!0}).writekpuzzle(!0)})}function $l(){return D(this,null,function*(){return $s!=null?$s:$s=np()})}function Kf(){return D(this,null,function*(){return ea!=null?ea:ea=op()})}function ta(){return D(this,null,function*(){return{ordering:(yield Kf()).ordering.slice(1)}})}function op(){return D(this,null,function*(){return er(yield $l(),`SubgroupSizes 24 6 5 12 9 3 4 9 3 3\n\nAlg y\nAlg y2\nAlg y'\nAlg F\nAlg F'\nAlg y U\nAlg y U'\nAlg y L\nAlg y L'\nAlg y F\nAlg y F'\nAlg y2 U\nAlg y2 U'\nAlg y2 B\nAlg y2 B'\nAlg y' U\nAlg y' F'\nAlg y U L'\nAlg y U B\nAlg y2 U B\nAlg y2 U B'\nAlg y2 U' B\nAlg y2 U' B'\n\nAlg U\nAlg U'\nAlg U L\nAlg U L'\nAlg U' R'\n\nAlg R\nAlg R'\nAlg R B\nAlg R' L'\n\nAlg U B' U\nAlg U' L U\nAlg U' L' U\nAlg U' B U'\nAlg R L R'\nAlg R B' R\nAlg U B L U'\nAlg U B' U B'\nAlg U B' L' U\nAlg U' L B U'\nAlg R' B L' R'\n\nAlg L\nAlg L'\nAlg L B\nAlg L B'\nAlg L B L\nAlg L B L'\nAlg L B' L\nAlg L B' L'\n\nAlg B\nAlg B'\n\nAlg L' B L\nAlg L' B' L\nAlg R' L' B L R\n\nAlg B L' B L B'\nAlg B L' B' L B'\nAlg U L U B U' L' U'\nAlg R L R' B' R L' R'\nAlg U B' R L R' B' U B\nAlg U' B U L U' B' U L'\nAlg L U' B U L' U' B' U\nAlg R B' U R B L U' B\n\nAlg U L U' B' U L' U' B\nAlg U' B L U L B' U' L'\n\nAlg U R' U' L B R' B' R\nAlg R' U' R U B' U' B L`)})}var $s,ea,ra=S(()=>{ll();$n();$s=null;ea=null});var pa=Symbol(\"Comlink.proxy\"),A1=Symbol(\"Comlink.endpoint\"),y1=Symbol(\"Comlink.releaseProxy\"),li=Symbol(\"Comlink.thrown\"),da=e=>typeof e==\"object\"&&e!==null||typeof e==\"function\",D1={canHandle:e=>da(e)&&e[pa],serialize(e){let{port1:t,port2:r}=new MessageChannel;return zn(e,t),[r,[r]]},deserialize(e){return e.start(),b1(e)}},F1={canHandle:e=>da(e)&&li in e,serialize({value:e}){let t;return e instanceof Error?t={isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:t={isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}},La=new Map([[\"proxy\",D1],[\"throw\",F1]]);function zn(e,t=self){t.addEventListener(\"message\",function r(n){if(!n||!n.data)return;let{id:o,type:l,path:i}=Object.assign({path:[]},n.data),s=(n.data.argumentList||[]).map(dr),u;try{let a=i.slice(0,-1).reduce((c,g)=>c[g],e),f=i.reduce((c,g)=>c[g],e);switch(l){case\"GET\":u=f;break;case\"SET\":a[i.slice(-1)[0]]=dr(n.data.value),u=!0;break;case\"APPLY\":u=f.apply(a,s);break;case\"CONSTRUCT\":{let c=new f(...s);u=v1(c)}break;case\"ENDPOINT\":{let{port1:c,port2:g}=new MessageChannel;zn(e,g),u=S1(c,[c])}break;case\"RELEASE\":u=void 0;break;default:return}}catch(a){u={value:a,[li]:0}}Promise.resolve(u).catch(a=>({value:a,[li]:0})).then(a=>{let[f,c]=si(a);t.postMessage(Object.assign(Object.assign({},f),{id:o}),c),l===\"RELEASE\"&&(t.removeEventListener(\"message\",r),ha(t))})}),t.start&&t.start()}function B1(e){return e.constructor.name===\"MessagePort\"}function ha(e){B1(e)&&e.close()}function b1(e,t){return ii(e,[],t)}function Eo(e){if(e)throw new Error(\"Proxy has been released and is not useable\")}function ii(e,t=[],r=function(){}){let n=!1,o=new Proxy(r,{get(l,i){if(Eo(n),i===y1)return()=>Ir(e,{type:\"RELEASE\",path:t.map(s=>s.toString())}).then(()=>{ha(e),n=!0});if(i===\"then\"){if(t.length===0)return{then:()=>o};let s=Ir(e,{type:\"GET\",path:t.map(u=>u.toString())}).then(dr);return s.then.bind(s)}return ii(e,[...t,i])},set(l,i,s){Eo(n);let[u,a]=si(s);return Ir(e,{type:\"SET\",path:[...t,i].map(f=>f.toString()),value:u},a).then(dr)},apply(l,i,s){Eo(n);let u=t[t.length-1];if(u===A1)return Ir(e,{type:\"ENDPOINT\"}).then(dr);if(u===\"bind\")return ii(e,t.slice(0,-1));let[a,f]=Ra(s);return Ir(e,{type:\"APPLY\",path:t.map(c=>c.toString()),argumentList:a},f).then(dr)},construct(l,i){Eo(n);let[s,u]=Ra(i);return Ir(e,{type:\"CONSTRUCT\",path:t.map(a=>a.toString()),argumentList:s},u).then(dr)}});return o}function x1(e){return Array.prototype.concat.apply([],e)}function Ra(e){let t=e.map(si);return[t.map(r=>r[0]),x1(t.map(r=>r[1]))]}var Aa=new WeakMap;function S1(e,t){return Aa.set(e,t),e}function v1(e){return Object.assign(e,{[pa]:!0})}function si(e){for(let[t,r]of La)if(r.canHandle(e)){let[n,o]=r.serialize(e);return[{type:\"HANDLER\",name:t,value:n},o]}return[{type:\"RAW\",value:e},Aa.get(e)||[]]}function dr(e){switch(e.type){case\"HANDLER\":return La.get(e.name).deserialize(e.value);case\"RAW\":return e.value}}function Ir(e,t,r){return new Promise(n=>{let o=w1();e.addEventListener(\"message\",function l(i){!i.data||!i.data.id||i.data.id!==o||(e.removeEventListener(\"message\",l),n(i.data))}),e.start&&e.start(),e.postMessage(Object.assign({id:o},t),r)})}function w1(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join(\"-\")}var z1=typeof globalThis.Worker==\"undefined\"&&typeof globalThis.WorkerNavigator==\"undefined\";function ba(e){z1?(()=>D(this,null,function*(){let{port:t}=yield Promise.resolve().then(()=>(Ba(),Fa));zn(e,yield t())}))():zn(e)}ht();rn();var b2=!1;function x2(e){b2=e}function ft(){if(!b2)throw new Error(\"Must be called from inside a worker, to avoid impct on page performance. Try importing from the top level of `cubing/solve`?\")}var Ki=null;function S2(){return D(this,null,function*(){if(typeof crypto!=\"undefined\"&&typeof crypto.getRandomValues!=\"undefined\")return crypto.getRandomValues.bind(crypto);{let t=yield Ki!=null?Ki:Ki=import(\"crypto\");return r=>{if(!(r instanceof Uint32Array))throw new Error(\"The getRandomValues() shim only takes unsigned 32-bit int arrays\");let n=t.randomBytes(r.length*4),o=[];for(let l=0;l<r.length;l++)o.push((n[l*4+0]<<24)+(n[l*4+1]<<16)+(n[l*4+2]<<8)+(n[l*4+3]<<0));r.set(o)}}})}var v2=9007199254740992,Bc=2097152,bc=2048;function xc(e){let t=new Uint32Array(2);e(t);let r=t[0],n=t[1];return Math.floor(r*Bc)+Math.floor(n/bc)}function Sc(e){if(typeof e!=\"number\"||e<0||Math.floor(e)!==e)throw new Error(\"randomInt.below() not called with a positive integer value.\");if(e>v2)throw new Error(`Called randomInt.below() with max == ${e}, which is larger than Javascript can handle with integer precision.`)}function it(){return D(this,null,function*(){let e=yield S2(),t=r=>{Sc(r);let n=xc(e),o=Math.floor(v2/r)*r;return n<o?n%r:t(r)};return t})}function _t(){return D(this,null,function*(){let e=yield it();return t=>t[e(t.length)]})}var vc=it();function w2(e){return D(this,null,function*(){for(let t=1;t<e.length;t++){let r=(yield vc)(t);[e[t],e[r]]=[e[r],e[t]]}})}he();ht();he();var E2=class extends Qr{constructor(t){super();this.metric=t}traverseAlg(t){let r=0;for(let n of t.units())r+=this.traverseUnit(n);return r}traverseGrouping(t){let r=t.alg;return this.traverseAlg(r)*Math.abs(t.amount)}traverseMove(t){return this.metric(t)}traverseCommutator(t){return 2*(this.traverseAlg(t.A)+this.traverseAlg(t.B))}traverseConjugate(t){return 2*this.traverseAlg(t.A)+this.traverseAlg(t.B)}traversePause(t){return 0}traverseNewline(t){return 0}traverseLineComment(t){return 0}};function wc(e){return\"A\"<=e&&e<=\"Z\"}function Ec(e){let t=e.family;return wc(t[0])&&t[t.length-1]===\"v\"||t===\"x\"||t===\"y\"||t===\"z\"||t===\"T\"?0:1}var U2=new E2(Ec),Vi=U2.traverseAlg.bind(U2);he();var k2=class extends Qr{traverseAlg(t){let r=0;for(let n of t.units())r+=this.traverseUnit(n);return r}traverseGrouping(t){return this.traverseAlg(t.alg)*Math.abs(t.amount)}traverseMove(t){return 1}traverseCommutator(t){return 2*(this.traverseAlg(t.A)+this.traverseAlg(t.B))}traverseConjugate(t){return 2*this.traverseAlg(t.A)+this.traverseAlg(t.B)}traversePause(t){return 1}traverseNewline(t){return 0}traverseLineComment(t){return 0}},z2=new k2,Uc=z2.traverseAlg.bind(z2);var kc=2,zc=!0,Cc=!1;function Mc(e,t){let r=[],n=new Je(e);return t.forEach(function(o){let l=new d(o);if(l.amount!==1)throw new Error(\"SGS cannot handle def moves with an amount other than 1 yet.\");n.reset();for(let i=1;n.applyMove(l),!Di(e,n.state,Lt(e));i++)r.push({move:l.modified({amount:i}),transformation:n.state})}),r}var Ot=class{constructor(t,r,n){this.def=t;this.sgs=r;this.searchMoves=Mc(this.def,n!=null?n:Object.keys(this.def.moves))}solve(o){return D(this,arguments,function*(t,r=kc,n){let l=null,i=1e6,s=(u,a,f)=>{if(a===0){let c=this.sgsPhaseSolve(u,i);if(!c)return;let g=f.concat(c).simplify({collapseMoves:!0,quantumMoveOrder:n}),m=Vi(g);(l===null||m<i)&&(Cc&&(console.log(`New best (${m} moves): ${g.toString()}`),console.log(`Tremble moves are: ${f.toString()}`)),l=g,i=m);return}for(let c of this.searchMoves)s(lt(this.def,u,c.transformation),a-1,f.concat([c.move]))};for(let u=0;u<=r;u++)s(t,u,new z);if(l===null)throw new Error(\"SGS search failed.\");return l})}sgsPhaseSolve(t,r){let n=new at,o=t;for(let l of this.sgs.ordering){let i=l.pieceOrdering,s=\"\",u=Gt(this.def,o);for(let f=0;f<i.length;f++){let c=i[f],g=c.orbitName,m=c.permutationIdx;s+=` ${u[g].permutation[m]} ${u[g].orientation[m]}`}let a=l.lookup[s];if(!a)throw new Error(\"Missing algorithm in sgs or esgs?\");if(n.experimentalPushAlg(a.alg),n.experimentalNumUnits()>=r)return null;if(o=lt(this.def,o,a.transformation),zc)for(let f=0;f<i.length;f++){let c=i[f],g=c.orbitName,m=c.permutationIdx;if(o[g].permutation[m]!==m||o[g].orientation[m]!==0)throw new Error(\"bad SGS :-(\")}}return n.toAlg()}};function il(e,t){return D(this,null,function*(){let r=yield _t(),n=Lt(e);for(let o of t.ordering){let l=r(Object.values(o.lookup));n=lt(e,n,l.transformation)}return n})}var Gc=3,G2=null;function I2(){return D(this,null,function*(){return G2||(G2=(()=>D(this,null,function*(){let e=yield(yield Promise.resolve().then(()=>(P2(),M2))).cachedData222();return new Ot(yield Ut[\"2x2x2\"].def(),e,\"URFLBD\".split(\"\"))}))())})}function T2(){return D(this,null,function*(){yield I2()})}function Yi(e){return D(this,null,function*(){return ft(),yield(yield I2()).solve(e,Gc,()=>4)})}function Ic(e,t,r,n){return D(this,null,function*(){let o=yield it();yield w2(r[t].permutation);let l=e.orbits[t],i=r[t].orientation,s=0;for(let u=0;u<l.numPieces;u++){let a=o(l.orientations);i[u]=a,s+=a}n&&\"orientationSum\"in n&&(i[0]=((i[0]+n.orientationSum-s)%l.orientations+l.orientations)%l.orientations)})}function Tc(){return D(this,null,function*(){let e=yield Ut[\"2x2x2\"].def(),t=Object.assign({},e),r=new Je(t),n=JSON.parse(JSON.stringify(r.state));return yield Ic(t,\"CORNERS\",n,{orientationSum:0}),n})}function N2(){return D(this,null,function*(){return yield Yi(yield Tc())})}he();ht();rn();he();function nn(e,t){return D(this,null,function*(){let r=new at;r.experimentalPushAlg(e);for(let n of t){let o=(yield _t())(n);o!==null&&r.push(d.fromString(o))}return r.toAlg()})}var se={3:1},je=4194303,tr=1048575,Nc=524288,Ie=65535,Re={11:1,3:1},ve={17:1,3:1},Zi=14540032,eo=286331153,le={10:1,3:1},V,sl={};function _2(){}function _c(e){function t(){}return t.prototype=e||{},new t}function Oc(e){return e instanceof Array?e[0]:null}function to(e,t,r){var n=sl,o=Wc,l=Oc,i=n[e],s=l(i);i&&!s?V=i:(V=n[e]=t?o(t):{},V.castableTypeMap$=r,V.constructor=V,!t&&(V.typeMarker$=_2));for(var u=3;u<arguments.length;++u)arguments[u].prototype=V;s&&(V.___clazz$=s)}function Wc(e){var t=sl;return _c(t[e])}function Qc(){}to(1,null,{},Qc);function al(e){return e<<24>>24}function Xi(){this.typeName=null,this.simpleName=null,this.packageName=null,this.compoundName=null,this.canonicalName=null,this.typeId=null,this.arrayLiterals=null}function Ji(e,t){var r;return r=new Xi,r.packageName=e,r.compoundName=t,r}function rr(e,t,r){var n;return n=Ji(e,t),Kc(r,n),n}function qc(e,t){var r;return r=Ji(e,t),r.modifiers=2,r}function ul(e,t){var r;return r=Ji(\"\",e),r.typeId=t,r.modifiers=1,r}function O2(e,t){var r=e.arrayLiterals=e.arrayLiterals||[];return r[t]||(r[t]=e.createClassLiteralForArray(t))}function jc(e){if(e.isPrimitive())return null;var t=e.typeId,r=sl[t];return r}function Kc(e,t){if(!!e){t.typeId=e;var r=jc(t);if(!r){sl[e]=[t];return}r.___clazz$=t}}to(79,1,{},Xi);V.createClassLiteralForArray=function(t){var r;return r=new Xi,r.modifiers=4,t>1?r.componentType=O2(this,t-1):r.componentType=this,r};V.isPrimitive=function(){return(this.modifiers&1)!=0};function J(e,t){return O2(e,t)}function Z(e,t,r,n,o,l){var i;return i=Q2(o,n),$(J(e,l),t,r,o,i),i}function Ke(e,t,r,n,o,l){return W2(e,t,r,n,o,0,l)}function W2(e,t,r,n,o,l,i){var s,u,a,f,c;if(f=o[l],a=l==i-1,s=a?n:0,c=Q2(s,f),$(J(e,i-l),t[l],r[l],s,c),!a)for(++l,u=0;u<f;++u)c[u]=W2(e,t,r,n,o,l,i);return c}function $(e,t,r,n,o){return o.___clazz$=e,o.castableTypeMap$=t,o.typeMarker$=_2,o.__elementTypeId$=r,o.__elementTypeCategory$=n,o}function Q2(e,t){var r=new Array(t),n;switch(e){case 6:n={l:0,m:0,h:0};break;case 7:n=0;break;case 8:n=!1;break;default:return r}for(var o=0;o<t;++o)r[o]=n;return r}function q2(e){var t,r,n;return t=e&je,r=e>>22&je,n=e<0?tr:0,Vc(t,r,n)}function Vc(e,t,r){return{l:e,m:t,h:r}}function Hc(e,t){var r,n,o;return r=e.l+t.l,n=e.m+t.m+(r>>22),o=e.h+t.h+(n>>22),{l:r&je,m:n&je,h:o&tr}}function kt(e,t){return{l:e.l&t.l,m:e.m&t.m,h:e.h&t.h}}function $i(e){var t,r;return e>-129&&e<128?(t=e+128,cl==null&&(cl=Z(Sg,se,293,256,0,1)),r=cl[t],!r&&(r=cl[t]=q2(e)),r):q2(e)}function j2(e,t){var r,n;return r=e.h>>19,n=t.h>>19,r==0?n!=0||e.h>t.h||e.h==t.h&&e.m>t.m||e.h==t.h&&e.m==t.m&&e.l>=t.l:!(n==0||e.h<t.h||e.h==t.h&&e.m<t.m||e.h==t.h&&e.m==t.m&&e.l<t.l)}function es(e,t){return e.l!=t.l||e.m!=t.m||e.h!=t.h}function ts(e,t){return{l:e.l|t.l,m:e.m|t.m,h:e.h|t.h}}function fl(e,t){var r,n,o;return t&=63,t<22?(r=e.l<<t,n=e.m<<t|e.l>>22-t,o=e.h<<t|e.m>>22-t):t<44?(r=0,n=e.l<<t-22,o=e.m<<t-22|e.l>>44-t):(r=0,n=0,o=e.l<<t-44),{l:r&je,m:n&je,h:o&tr}}function Br(e,t){var r,n,o,l,i;return t&=63,r=e.h,n=(r&Nc)!=0,n&&(r|=-1048576),t<22?(i=r>>t,l=e.m>>t|r<<22-t,o=e.l>>t|e.m<<22-t):t<44?(i=n?tr:0,l=r>>t-22,o=e.m>>t-22|r<<44-t):(i=n?tr:0,l=n?je:0,o=r>>t-44),{l:o&je,m:l&je,h:i&tr}}function K2(e,t){var r,n,o;return r=e.l-t.l,n=e.m-t.m+(r>>22),o=e.h-t.h+(n>>22),{l:r&je,m:n&je,h:o&tr}}function br(e){return e.l|e.m<<22}var cl;function Yc(e){this.string=e}function nr(e,t){return e>t?e:t}function rs(e,t){return e<t?e:t}function Zc(e,t){return e.indexOf(t)}function Xc(e){return Jc(e,0,e.length)}function Jc(e,t,r){for(var n=\"\",o=t;o<r;){var l=Math.min(o+1e4,r);n+=String.fromCharCode.apply(null,e.slice(o,l)),o=l}return n}function $c(e){return String.fromCharCode(e&Ie)}var eg=rr(\"java.lang\",\"String\",2);function V2(e){return e.string+=\" \",e}function H2(e,t){return e.string+=t,e}function tg(){Yc.call(this,\"\")}function gl(e,t){var r;if(e===t)return!0;if(e.length!=t.length)return!1;for(r=0;r<e.length;++r)if(e[r]!=t[r])return!1;return!0}var Y2=!1;function xr(){Y2||(Y2=!0,lr=Ke(Ae,[se,Re],[11,0],7,[495,18],2),cn=Ke(Ae,[se,Re],[11,0],7,[324,18],2),an=Ke(Ae,[se,Re],[11,0],7,[336,18],2),or=Ke(Ae,[se,Re],[11,0],7,[495,8],2),dl=Z(we,ve,0,20048,7,1),pl=Z(we,ve,0,20791,7,1),fn=Z(we,ve,0,82945,7,1),on=Ke(Ae,[se,Re],[11,0],7,[2768,10],2),sn=Ke(Ae,[se,Re],[11,0],7,[2768,10],2),un=Ke(Ae,[se,Re],[11,0],7,[24,10],2),oo=Ke(Ae,[se,Re],[11,0],7,[24,16],2),Sr=Ke(Ae,[se,Re],[11,0],7,[140,16],2),ml=Z(we,ve,0,8305,7,1),ln=Z(we,ve,0,48441,7,1))}function rg(e,t,r){return e.slice_0=lr[t.slice_0][r],e.flip=an[t.flip][(X(),wr)[r<<3|t.fsym]],e.fsym=e.flip&7^t.fsym,e.flip>>=3,e.twist=cn[t.twist][wr[r<<3|t.tsym]],e.tsym=e.twist&7^t.tsym,e.twist>>=3,e.prun=nr(nr($e(dl,e.twist*495+or[e.slice_0][e.tsym]),$e(pl,e.flip*495+or[e.slice_0][e.fsym])),$e(fn,e.twist<<11|ar[e.flip<<3|e.fsym^e.tsym])),e.prun}function ng(e,t,r){return r=(X(),so)[3][r],e.flipc=an[t.flipc>>3][wr[r<<3|t.flipc&7]]^t.flipc&7,e.twistc=cn[t.twistc>>3][wr[r<<3|t.twistc&7]]^t.twistc&7,$e(fn,e.twistc>>3<<11|ar[e.flipc^e.twistc&7])}function Z2(e,t,r){var n;return e.twist=(X(),ao)[Al(t)],e.flip=vr[Rl(t)],e.tsym=e.twist&7,e.twist=e.twist>>3,e.prun=$e(fn,e.twist<<11|ar[e.flip^e.tsym]),e.prun>r||(e.fsym=e.flip&7,e.flip=e.flip>>3,e.slice_0=494-pn(t.ea,8,!0),e.prun=nr(e.prun,nr($e(dl,e.twist*495+or[e.slice_0][e.tsym]),$e(pl,e.flip*495+or[e.slice_0][e.fsym]))),e.prun>r)?!1:(n=new fe,lo(t,1,n),io(t,1,n),e.twistc=ao[Al(n)],e.flipc=vr[Rl(n)],e.prun=nr(e.prun,$e(fn,e.twistc>>3<<11|ar[e.flipc^e.twistc&7])),e.prun<=r)}function ro(){xr()}function $e(e,t){return xr(),e[t>>3]>>(t<<2)&15}function X2(e){xr(),!(Ll==2||Ll==1&&!e)&&(Ll==0&&(Lg(),og(),ig(),ag(),lg(),X(),as(2048,us,vr,ou=Z(Ae,Re,0,336,7,1),0),as(2187,ms,ao,gs=Z(Ae,Re,0,324,7,1),1),sg(),ug(),fg()),no(ml,un,oo,on,(X(),cs),584244,e),no(ln,ns,Sr,sn,cs,514084,e),no(dl,lr,or,cn,gs,431619,e),no(pl,lr,or,an,ou,431619,e),no(fn,null,null,cn,gs,103939,e),Ll=e?2:1)}function og(){var e,t,r,n;for(e=new fe,t=new fe,r=0;r<2768;r++)for(mg(e,(X(),gn)[r]),n=0;n<10;n++)ir(e,ce[(_e(),Dt)[n]],t),on[r][n]=Fl(Qt[tt(t.ca,8,!1)])&Ie}function lg(){var e,t,r,n,o;for(e=new fe,t=new fe,ns=Ke(Ae,[se,Re],[11,0],7,[140,10],2),r=0;r<140;r++){for(mu(e.ca,r%70,0,!1),o=0;o<10;o++)ir(e,(X(),ce)[(_e(),Dt)[o]],t),ns[r][o]=pn(t.ca,0,!1)+70*(165>>o&1^~~(r/70))&Ie;for(n=0;n<16;n++)lo(e,(X(),et)[0][n],t),Sr[r][n]=pn(t.ca,0,!1)+70*~~(r/70)&Ie}}function ig(){var e,t,r,n;for(e=new fe,t=new fe,r=0;r<2768;r++)for(tu(e,(X(),gn)[r]),n=0;n<10;n++)ct(e,ce[(_e(),Dt)[n]],t),sn[r][n]=Qt[tt(t.ea,8,!0)]}function sg(){var e,t,r,n;for(e=new fe,t=new fe,r=0;r<336;r++)for(is(e,(X(),us)[r]),n=0;n<18;n++)ct(e,ce[n],t),an[r][n]=vr[Rl(t)]}function ag(){var e,t,r,n,o;for(e=new fe,t=new fe,r=0;r<24;r++){for(Er(e.ea,r,12,!0),o=0;o<10;o++)ct(e,(X(),ce)[(_e(),Dt)[o]],t),un[r][o]=tt(t.ea,12,!0)%24&Ie;for(n=0;n<16;n++)io(e,(X(),et)[0][n],t),oo[r][n]=tt(t.ea,12,!0)%24&Ie}}function no(e,t,r,n,o,l,i){var s,u,a,f,c,g,m,L,p,y,F,x,B,M,k,K,te,N,re,b,C,G,v,w,P,q,Y,ge,pe,De,Fe,St,Ue,He,xe,A;if(B=l&15,F=(l>>4&1)==1?Zi:0,a=(l>>5&1)==1,s=l>>8&15,f=l>>12&15,c=l>>16&15,y=i?f:c,x=(1<<B)-1,u=t==null,L=u?2048:t.length,p=L*n.length,m=a?10:18,g=m==10?66:599186,k=(e[p>>3]>>(p<<2)&15)-1,k==-1){for(N=0;N<~~(p/8)+1;N++)e[N]=eo;e[0]^=1,k=0}for(;k<y;){for(P=(k+1)*eo^-1,re=0;re<e.length;re++)xe=e[re]^P,xe&=xe>>1,e[re]+=xe&xe>>2&eo;for(G=k>s,De=G?k+2:k,pe=De*eo,M=G?k:k+2,++k,A=k^k+1,He=0,N=0;N<p;++N,He>>=4){if((N&7)==0&&(He=e[N>>3],((He^pe)-eo&~(He^pe)&-2004318072)==0)){N+=7;continue}if((He&15)==De)for(Y=N%L,Fe=~~(N/L),K=0,te=0,u&&(K=(X(),vr)[Y],te=K&7,K>>=3),w=0;w<m;w++){if(Ue=n[Fe][w],u?ge=(X(),ar)[an[K][wr[w<<3|te]]^te^Ue&x]:ge=r[t[Y][w]][Ue&x],Ue>>=B,b=Ue*L+ge,q=e[b>>3]>>(b<<2)&15,q!=M){q<k-1&&(w+=g>>w&3);continue}if(G){e[N>>3]^=A<<(N<<2);break}for(e[b>>3]^=A<<(b<<2),v=1,St=o[Ue];(St>>=1)!=0;v++)(St&1)==1&&(C=Ue*L,u?C+=(X(),ar)[vr[ge]^v]:C+=r[ge][v^F>>(v<<1)&3],(e[C>>3]>>(C<<2)&15)==M&&(e[C>>3]^=A<<(C<<2)))}}}}function ug(){var e,t,r,n;for(e=new fe,t=new fe,r=0;r<324;r++)for(ss(e,(X(),ms)[r]),n=0;n<18;n++)ir(e,ce[n],t),cn[r][n]=ao[Al(t)]}function fg(){var e,t,r,n,o,l,i,s;for(e=new fe,t=new fe,n=0;n<495;n++){for(mu(e.ea,494-n,8,!0),l=0;l<18;l+=3)ct(e,(X(),ce)[l],t),lr[n][l]=494-pn(t.ea,8,!0)&Ie;for(o=0;o<16;o+=2)io(e,(X(),et)[0][o],t),or[n][o>>1]=494-pn(t.ea,8,!0)&Ie}for(r=0;r<495;r++)for(o=0;o<18;o+=3)for(s=lr[r][o],i=1;i<3;i++)s=lr[s][o],lr[r][o+i]=s&Ie}to(31,1,{31:1},ro);V.flip=0;V.flipc=0;V.fsym=0;V.prun=0;V.slice_0=0;V.tsym=0;V.twist=0;V.twistc=0;var Sr,ns,on,ln,sn,an,ml,oo,un,fn,cn,or,pl,lr,dl,Ll=0,hl=rr(\"org.cubing.min2phase.client\",\"CoordCube\",31),J2=!1;function X(){J2||(J2=!0,Wt=Z(uo,se,7,16,0,1),ce=Z(uo,se,7,18,0,1),bl=Z(vg,se,0,18,6,1),lu=Z(we,ve,0,48,7,1),qt=Ke(we,[se,ve],[17,0],7,[16,16],2),et=Ke(we,[se,ve],[17,0],7,[16,16],2),so=Ke(we,[se,ve],[17,0],7,[16,18],2),wr=Z(we,ve,0,144,7,1),ur=Ke(we,[se,ve],[17,0],7,[16,18],2),us=Z(Ae,Re,0,336,7,1),ms=Z(Ae,Re,0,324,7,1),gn=Z(Ae,Re,0,2768,7,1),mn=Z(ee,le,0,2768,7,1),fs=Z(Ae,Re,0,2768,7,1),Bl=Z(ee,le,0,24,7,1),vr=Z(Ae,Re,0,2048,7,1),ao=Z(Ae,Re,0,2187,7,1),Qt=Z(Ae,Re,0,40320,7,1),ar=Z(Ae,Re,0,2688,7,1),ps=new yt(2531,1373,67026819,1367),ds=new yt(2089,1906,322752913,2040),xl=$(J(ee,2),se,10,0,[$(J(ee,1),le,0,7,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]),$(J(ee,1),le,0,7,[6,7,8,0,1,2,3,4,5,15,16,17,9,10,11,12,13,14]),$(J(ee,1),le,0,7,[3,4,5,6,7,8,0,1,2,12,13,14,15,16,17,9,10,11]),$(J(ee,1),le,0,7,[2,1,0,5,4,3,8,7,6,11,10,9,14,13,12,17,16,15]),$(J(ee,1),le,0,7,[8,7,6,2,1,0,5,4,3,17,16,15,11,10,9,14,13,12]),$(J(ee,1),le,0,7,[5,4,3,8,7,6,2,1,0,14,13,12,17,16,15,11,10,9])]),dg(),hg())}function os(e){e.ca=$(J(ee,1),le,0,7,[0,1,2,3,4,5,6,7]),e.ea=$(J(ee,1),le,0,7,[0,2,4,6,8,10,12,14,16,18,20,22])}function $2(e){!e.temps&&(e.temps=new fe),ir(ds,e,e.temps),ir(e.temps,ps,e),ct(ds,e,e.temps),ct(e.temps,ps,e)}function ls(e,t){var r,n;for(n=0;n<8;n++)e.ca[n]=t.ca[n];for(r=0;r<12;r++)e.ea[r]=t.ea[r]}function cg(e){return Fl(Qt[tt(e.ca,8,!1)])}function gg(e){return Qt[tt(e.ea,8,!0)]}function Rl(e){var t,r;for(r=0,t=0;t<11;t++)r=r<<1|e.ea[t]&1;return r}function Al(e){var t,r;for(r=0,t=0;t<7;t++)r+=(r<<1)+(e.ca[t]>>3);return r}function yl(e){var t,r;for(!e.temps&&(e.temps=new fe),r=0;r<12;r++)e.temps.ea[e.ea[r]>>1]=(r<<1|e.ea[r]&1)<<24>>24;for(t=0;t<8;t++)e.temps.ca[e.ca[t]&7]=(t|32>>(e.ca[t]>>3)&24)<<24>>24;ls(e,e.temps)}function eu(e){var t,r,n,o,l,i,s;for(t=new ru(e),o=new fe,r=Fl(Qt[tt(t.ca,8,!1)])>>4,i={l:0,m:0,h:0},s=0;s<6;s++){if(n=Fl(Qt[tt(t.ca,8,!1)])>>4,r==n)for(l=0;l<16;l++)lo(t,et[0][l],o),gl(o.ca,e.ca)&&(io(t,et[0][l],o),gl(o.ea,e.ea)&&(i=ts(i,fl({l:1,m:0,h:0},(s<<4|l)<48?s<<4|l:48))));$2(t),s%3==2&&yl(t)}return i}function mg(e,t){Er(e.ca,t,8,!1)}function tu(e,t){Er(e.ea,t,8,!0)}function is(e,t){var r,n,o;for(n=0,r=10;r>=0;--r,t>>=1)n^=o=t&1,e.ea[r]=(e.ea[r]&-2|o)<<24>>24;e.ea[11]=(e.ea[11]&-2|n)<<24>>24}function ss(e,t){var r,n,o;for(n=15,r=6;r>=0;--r,t=~~(t/3))n-=o=t%3,e.ca[r]=(e.ca[r]&7|o<<3)<<24>>24;e.ca[7]=(e.ca[7]&7|n%3<<3)<<24>>24}function pg(e){var t,r,n,o,l;for(l=0,o=0,n=0;n<12;n++)o|=1<<(e.ea[n]>>1),l^=e.ea[n]&1;if(o!=4095)return-2;if(l!=0)return-3;for(r=0,l=0,t=0;t<8;t++)r|=1<<(e.ca[t]&7),l+=e.ca[t]>>3;return r!=255?-4:l%3!=0?-5:(hs(tt(e.ea,12,!0),12)^hs(tt(e.ca,8,!1),8))!=0?-6:0}function lo(e,t,r){X();var n,o,l,i,s,u;for(u=Wt[et[0][t]],s=Wt[t],n=0;n<8;n++)l=u.ca[e.ca[s.ca[n]&7]&7]>>3,i=e.ca[s.ca[n]&7]>>3,o=l<3?i:(3-i)%3,r.ca[n]=(u.ca[e.ca[s.ca[n]&7]&7]&7|o<<3)<<24>>24}function ir(e,t,r){X();var n,o,l;for(n=0;n<8;n++)o=e.ca[t.ca[n]&7]>>3,l=t.ca[n]>>3,r.ca[n]=(e.ca[t.ca[n]&7]&7|(o+l)%3<<3)<<24>>24}function Dl(e,t,r){var n,o,l,i;for(n=0;n<8;n++)l=e.ca[t.ca[n]&7]>>3,i=t.ca[n]>>3,o=l+(l<3?i:6-i),o=o%3+(l<3==i<3?0:3),r.ca[n]=(e.ca[t.ca[n]&7]&7|o<<3)<<24>>24}function fe(){X(),os(this)}function yt(e,t,r,n){os(this),Er(this.ca,e,8,!1),ss(this,t),Er(this.ea,r,12,!0),is(this,n)}function ru(e){os(this),ls(this,e)}function Fl(e){return X(),e^Zi>>((e&15)<<1)&3}function io(e,t,r){X();var n,o,l;for(l=Wt[et[0][t]],o=Wt[t],n=0;n<12;n++)r.ea[n]=(l.ea[e.ea[o.ea[n]>>1]>>1]^e.ea[o.ea[n]>>1]&1^o.ea[n]&1)<<24>>24}function ct(e,t,r){X();var n;for(n=0;n<12;n++)r.ea[n]=(e.ea[t.ea[n]>>1]^t.ea[n]&1)<<24>>24}function sr(e,t,r){X();var n;return n=fs[e],r&&(n=n^Zi>>((n&15)<<1)&3),n&65520|qt[n&15][t]}function nu(){return X(),0}function dg(){var e,t;for(ce[0]=new yt(15120,0,119750400,0),ce[3]=new yt(21021,1494,323403417,0),ce[6]=new yt(8064,1236,29441808,550),ce[9]=new yt(9,0,5880,0),ce[12]=new yt(1230,412,2949660,0),ce[15]=new yt(224,137,328552,137),e=0;e<18;e+=3)for(t=0;t<2;t++)ce[e+t+1]=new fe,ct(ce[e+t],ce[e],ce[e+t+1]),ir(ce[e+t],ce[e],ce[e+t+1])}function Lg(){X();var e,t,r;for(as(40320,gn,Qt,cs=Z(Ae,Re,0,2768,7,1),2),e=new fe,r=0;r<2768;r++)tu(e,gn[r]),mn[r]=pn(e.ea,0,!0)+hs(gn[r],8)*70<<24>>24,yl(e),fs[r]=Qt[tt(e.ea,8,!0)];for(t=0;t<24;t++)Er(e.ea,t,12,!0),yl(e),Bl[t]=tt(e.ea,12,!0)%24<<24>>24}function hg(){var e,t,r,n,o,l,i,s,u,a,f,c,g,m,L,p;for(e=new fe,t=new fe,r=new yt(28783,0,259268407,0),p=new yt(15138,0,119765538,7),c=new yt(5167,0,83473207,0),o=0;o<8;o++)c.ca[o]=al(c.ca[o]|24);for(l=0;l<16;l++)Wt[l]=new ru(e),Dl(e,p,t),ct(e,p,t),L=t,t=e,e=L,l%4==3&&(Dl(L,c,t),ct(L,c,t),L=t,t=e,e=L),l%8==7&&(Dl(L,r,t),ct(L,r,t),L=t,t=e,e=L);for(i=0;i<16;i++)for(u=0;u<16;u++)for(Dl(Wt[i],Wt[u],e),f=0;f<16;f++)if(gl(Wt[f].ca,e.ca)){qt[i][u]=f,et[f][u]=i;break}for(a=0;a<18;a++)for(m=0;m<16;m++){for(lo(ce[a],et[0][m],e),g=0;g<18;g++)if(gl(ce[g].ca,e.ca)){so[m][a]=g,ur[m][(_e(),dn)[a]]=dn[g];break}m%2==0&&(wr[a<<3|m>>1]=so[m][a])}for(n=0;n<18;n++)for(bl[n]=eu(ce[n]),s=n,m=0;m<48;m++)so[m%16][s]<n&&(lu[m]|=1<<n),m%16==15&&(s=xl[2][s])}function as(e,t,r,n,o){X();var l,i,s,u,a,f,c,g,m;for(l=new fe,s=new fe,i=0,a=0,m=o>=2?1:2,f=o!=1,u=0;u<e;u++)if(r[u]==0){switch(o){case 0:is(l,u);break;case 1:ss(l,u);break;case 2:Er(l.ea,u,8,!0)}for(c=0;c<16;c+=m){switch(f?io(l,c,s):lo(l,c,s),o){case 0:a=Rl(s);break;case 1:a=Al(s);break;case 2:a=tt(s.ea,8,!0)}o==0&&(ar[i<<3|c>>1]=a&Ie),a==u&&(n[i]=(n[i]|1<<~~(c/m))&Ie),g=~~((i<<4|c)/m),r[a]=g&Ie}t[i++]=u&Ie}return i}var Wt,Qt,gn,vr,us,ar,Bl,mn,fs,wr,so,ur,qt,et,ou,cs,gs,ao,ms,lu,ce,bl,ps,ds,xl,uo=rr(\"org.cubing.min2phase.client\",\"CubieCube\",7);function Rg(e,t,r,n,o,l,i,s){var u,a,f,c,g;if(c=nr($e((xr(),ln),(i>>4)*140+Sr[(X(),mn)[s>>4]&255][et[i&15][s&15]]),nr($e(ln,n*140+Sr[mn[t]&255][et[o][r]]),$e(ml,t*24+oo[l][r]))),c>e.maxDep2)return c-e.maxDep2;for(u=e.maxDep2;u>=c&&(g=au(e,n,o,t,r,l,u,e.depth1,10),!(g<0));u--){for(u-=g,e.solLen=0,e.solution=new Lu,xg(e.solution,e.verbose,e.urfIdx,e.depth1),f=0;f<e.depth1+u;f++)pu(e.solution,e.move[f]);for(a=e.preMoveLen-1;a>=0;a--)pu(e.solution,e.preMoves[a]);e.solLen=e.solution.length_0}return u!=e.maxDep2?(e.maxDep2=rs(fu,e.solLen-e.length1-1),j2(e.probe,e.probeMin)?0:1):1}function Ag(e){var t,r,n,o,l,i,s,u,a,f,c,g,m,L,p;if(e.isRec=!1,j2(e.probe,e.solution?e.probeMin:e.probeMax))return 0;for(e.probe=Hc(e.probe,{l:1,m:0,h:0}),n=e.valid1;n<e.depth1;n++)ir(e.phase1Cubie[n],(X(),ce)[e.move[n]],e.phase1Cubie[n+1]),ct(e.phase1Cubie[n],ce[e.move[n]],e.phase1Cubie[n+1]);for(e.valid1=e.depth1,s=cg(e.phase1Cubie[e.depth1]),u=s&15,s>>=4,a=gg(e.phase1Cubie[e.depth1]),f=a&15,a>>=4,c=tt(e.phase1Cubie[e.depth1].ea,12,!0)%24,r=sr(a,f,!1),t=sr(s,u,!0),o=e.depth1==0?-1:e.move[e.depth1-1],l=e.preMoveLen==0?-1:e.preMoves[e.preMoveLen-1],p=0,L=(e.preMoveLen==0?1:2)*(e.depth1==0?1:2),g=0,m=(1<<L)-1;g<L;g++){if((m>>g&1)!=0){if(m&=~(1<<g),p=Rg(e,s,u,a,f,c,r,t),p==0||p>2)break;p==2&&(m&=4<<g)}if(m==0)break;(g&1)==0&&e.depth1>0?(i=(_e(),dn)[~~(o/3)*3+1],e.move[e.depth1-1]=Dt[i]*2-e.move[e.depth1-1],c=(xr(),un)[c][i],s=on[s][(X(),ur)[u][i]],u=qt[s&15][u],s>>=4,a=sn[a][ur[f][i]],f=qt[a&15][f],a>>=4,t=sr(s,u,!0),r=sr(a,f,!1)):e.preMoveLen>0&&(i=(_e(),dn)[~~(l/3)*3+1],e.preMoves[e.preMoveLen-1]=Dt[i]*2-e.preMoves[e.preMoveLen-1],c=(X(),Bl)[(xr(),un)[Bl[c]][i]],s=on[t>>4][ur[t&15][i]],t=s&-16|qt[s&15][t&15],s=sr(t>>4,t&15,!0),u=s&15,s>>=4,a=sn[r>>4][ur[r&15][i]],r=a&-16|qt[a&15][r&15],a=sr(r>>4,r&15,!1),f=a&15,a>>=4)}return e.depth1>0&&(e.move[e.depth1-1]=o),e.preMoveLen>0&&(e.preMoves[e.preMoveLen-1]=l),p==0?0:2}function yg(e){var t;for(e.conjMask=0,e.selfSym=eu(e.cc),e.conjMask|=es(kt(Br(e.selfSym,16),{l:Ie,m:0,h:0}),{l:0,m:0,h:0})?18:0,e.conjMask|=es(kt(Br(e.selfSym,32),{l:Ie,m:0,h:0}),{l:0,m:0,h:0})?36:0,e.conjMask|=es(kt(Br(e.selfSym,48),{l:Ie,m:0,h:0}),{l:0,m:0,h:0})?56:0,e.selfSym=kt(e.selfSym,{l:je,m:je,h:15}),e.maxPreMoves=e.conjMask>7?0:20,t=0;t<6;t++)ls(e.urfCubieCube[t],e.cc),Z2(e.urfCoordCube[t],e.urfCubieCube[t],20),$2(e.cc),t%3==2&&yl(e.cc)}function iu(e,t,r,n,o){var l,i,s,u,a,f;if(t.prun==0&&n<5)return e.allowShorter||n==0?(e.depth1-=n,a=Ag(e),e.depth1+=n,a):1;for(f=nu($i(r)),l=0;l<18;l+=3)if(!(l==o||l==o-9)){for(s=0;s<3;s++)if(i=l+s,!(e.isRec&&i!=e.move[e.depth1-n]||f!=0&&(f&1<<i)!=0)){if(u=rg(e.nodeUD[n],t,i),u>n)break;if(u==n)continue;if(u=ng(e.nodeUD[n],t,i),u>n)break;if(u==n)continue;if(e.move[e.depth1-n]=i,e.valid1=rs(e.valid1,e.depth1-n),a=iu(e,e.nodeUD[n],r&br((X(),bl)[i]),n-1,l),a==0)return 0;if(a>=2)break}}return 1}function su(e,t,r,n,o){var l,i,s;if(e.preMoveLen=e.maxPreMoves-t,(e.isRec?e.depth1==e.length1-e.preMoveLen:e.preMoveLen==0||(225207>>r&1)==0)&&(e.depth1=e.length1-e.preMoveLen,e.phase1Cubie[0]=n,e.allowShorter=e.depth1==Ls&&e.preMoveLen!=0,Z2(e.nodeUD[e.depth1+1],n,e.depth1)&&iu(e,e.nodeUD[e.depth1+1],o,e.depth1,-1)==0))return 0;if(t==0||e.preMoveLen+Ls>=e.length1)return 1;for(s=nu($i(o)),(t==1||e.preMoveLen+1+Ls>=e.length1)&&(s|=225207),r=~~(r/3)*3,l=0;l<18;l++){if(l==r||l==r-9||l==r+9){l+=2;continue}if(!(e.isRec&&l!=e.preMoves[e.maxPreMoves-t]||(s&1<<l)!=0)&&(ir((X(),ce)[l],n,e.preMoveCubes[t]),ct(ce[l],n,e.preMoveCubes[t]),e.preMoves[e.maxPreMoves-t]=l,i=su(e,t-1,l,e.preMoveCubes[t],o&br(bl[l])),i==0))return 0}return 1}function au(e,t,r,n,o,l,i,s,u){var a,f,c,g,m,L,p,y,F,x,B;if(t==0&&n==0&&l==0)return i;for(F=(_e(),fo)[u],p=0;p<10;p++){if((F>>p&1)!=0){p+=66>>p&3;continue}if(y=(xr(),un)[l][p],f=on[n][(X(),ur)[o][p]],c=qt[f&15][o],f>>=4,m=sn[t][ur[r][p]],L=qt[m&15][r],m>>=4,g=sr(m,L,!1),a=sr(f,c,!0),x=$e(ln,(g>>4)*140+Sr[mn[a>>4]&255][et[g&15][a&15]]),x>i+1)return i-x+1;if(x>=i){p+=66>>p&3&i-x;continue}if(x=nr($e(ml,f*24+oo[y][c]),$e(ln,m*140+Sr[mn[f]&255][et[L][c]])),x>=i){p+=66>>p&3&i-x;continue}if(B=au(e,m,L,f,c,y,i-1,s+1,p),B>=0)return e.move[s]=Dt[p],B;if(B<-2)break;B<-1&&(p+=66>>p&3)}return-1}function Dg(e){for(e.length1=e.isRec?e.length1:0;e.length1<e.solLen;e.length1++)for(e.maxDep2=rs(fu,e.solLen-e.length1-1),e.urfIdx=e.isRec?e.urfIdx:0;e.urfIdx<6;e.urfIdx++)if((e.conjMask&1<<e.urfIdx)==0&&su(e,e.maxPreMoves,-30,e.urfCubieCube[e.urfIdx],br(kt(e.selfSym,{l:Ie,m:0,h:0})))==0)return e.solution?du(e.solution):\"Error 8\";return e.solution?du(e.solution):\"Error 7\"}function Fg(e,t){var r;return r=Bg(e,t),r!=0?\"Error \"+(r<0?-r:r):(e.solLen=22,e.probe={l:0,m:0,h:0},e.probeMax={l:3531008,m:23,h:0},e.probeMin={l:0,m:0,h:0},e.verbose=0,e.solution=null,e.isRec=!1,X2(!1),yg(e),Dg(e))}function Bg(e,t){var r,n,o,l;for(n=0,o=Z(ee,le,0,54,7,1),r=Xc($(J(Ae,1),Re,0,7,[t.charCodeAt(4),t.charCodeAt(13),t.charCodeAt(22),t.charCodeAt(31),t.charCodeAt(40),t.charCodeAt(49)])),l=0;l<54;l++){if(o[l]=Zc(r,$c(t.charCodeAt(l)))<<24>>24,o[l]==-1)return-1;n+=1<<(o[l]<<2)}return n!=10066329?-1:(bg(o,e.cc),pg(e.cc))}function uu(){var e,t,r;for(this.move=Z(we,ve,0,31,7,1),this.nodeUD=Z(hl,se,31,21,0,1),this.nodeRL=Z(hl,se,31,21,0,1),this.nodeFB=Z(hl,se,31,21,0,1),this.cc=new fe,this.urfCubieCube=Z(uo,se,7,6,0,1),this.urfCoordCube=Z(hl,se,31,6,0,1),this.phase1Cubie=Z(uo,se,7,21,0,1),this.preMoveCubes=Z(uo,se,7,21,0,1),this.preMoves=Z(we,ve,0,20,7,1),t=0;t<21;t++)this.nodeUD[t]=new ro,this.nodeRL[t]=new ro,this.nodeFB[t]=new ro,this.phase1Cubie[t]=new fe;for(r=0;r<6;r++)this.urfCubieCube[r]=new fe,this.urfCoordCube[r]=new ro;for(e=0;e<20;e++)this.preMoveCubes[e+1]=new fe}to(72,1,{},uu);V.allowShorter=!1;V.conjMask=0;V.depth1=0;V.isRec=!1;V.length1=0;V.maxDep2=0;V.maxPreMoves=0;V.preMoveLen=0;V.probe={l:0,m:0,h:0};V.probeMax={l:0,m:0,h:0};V.probeMin={l:0,m:0,h:0};V.selfSym={l:0,m:0,h:0};V.solLen=0;V.urfIdx=0;V.valid1=0;V.verbose=0;var fu=12,Ls=7,cu=!1;function _e(){if(!cu){cu=!0;var e,t,r,n,o,l;for(Ur=$(J(ee,2),se,10,0,[$(J(ee,1),le,0,7,[8,9,20]),$(J(ee,1),le,0,7,[6,18,38]),$(J(ee,1),le,0,7,[0,36,47]),$(J(ee,1),le,0,7,[2,45,11]),$(J(ee,1),le,0,7,[29,26,15]),$(J(ee,1),le,0,7,[27,44,24]),$(J(ee,1),le,0,7,[33,53,42]),$(J(ee,1),le,0,7,[35,17,51])]),Kt=$(J(ee,2),se,10,0,[$(J(ee,1),le,0,7,[5,10]),$(J(ee,1),le,0,7,[7,19]),$(J(ee,1),le,0,7,[3,37]),$(J(ee,1),le,0,7,[1,46]),$(J(ee,1),le,0,7,[32,16]),$(J(ee,1),le,0,7,[28,25]),$(J(ee,1),le,0,7,[30,43]),$(J(ee,1),le,0,7,[34,52]),$(J(ee,1),le,0,7,[23,12]),$(J(ee,1),le,0,7,[21,41]),$(J(ee,1),le,0,7,[50,39]),$(J(ee,1),le,0,7,[48,14])]),jt=Ke(we,[se,ve],[17,0],7,[13,13],2),Rs=$(J(eg,1),se,2,4,[\"U \",\"U2\",\"U'\",\"R \",\"R2\",\"R'\",\"F \",\"F2\",\"F'\",\"D \",\"D2\",\"D'\",\"L \",\"L2\",\"L'\",\"B \",\"B2\",\"B'\"]),Dt=$(J(we,1),ve,0,7,[0,1,2,4,7,9,10,11,13,16,3,5,6,8,12,14,15,17]),dn=Z(we,ve,0,18,7,1),fo=Z(we,ve,0,11,7,1),t=0;t<18;t++)dn[Dt[t]]=t;for(r=0;r<10;r++)for(n=~~(Dt[r]/3),fo[r]=0,o=0;o<10;o++)l=~~(Dt[o]/3),fo[r]|=(n==l||n%3==l%3&&n>=l?1:0)<<o;for(fo[10]=0,e=0;e<13;e++)for(jt[e][0]=jt[e][e]=1,o=1;o<e;o++)jt[e][o]=jt[e-1][o-1]+jt[e-1][o]}}function pn(e,t,r){_e();var n,o,l,i,s;for(n=e.length-1,l=0,s=4,o=n;o>=0;o--)i=gu(e[o],r),(i&12)==t&&(l+=jt[o][s--]);return l}function hs(e,t){_e();var r,n;for(n=0,r=t-2;r>=0;r--)n^=e%(t-r),e=~~(e/(t-r));return n&1}function tt(e,t,r){_e();var n,o,l,i;for(o=0,i={l:1323536,m:2777561,h:1043915},n=0;n<t-1;n++)l=gu(e[n],r)<<2,o=(t-n)*o+br(kt(Br(i,l),{l:15,m:0,h:0})),i=K2(i,fl({l:1118480,m:279620,h:69905},l));return o}function gu(e,t){return t?e>>1:e&7}function mu(e,t,r,n){_e();var o,l,i,s;for(o=e.length-1,s=4,l=o,i=o;i>=0;i--)t>=jt[i][s]?(t-=jt[i][s--],e[i]=Sl(e[i],s|r,n)):((l&12)==r&&(l-=4),e[i]=Sl(e[i],l--,n))}function Er(e,t,r,n){_e();var o,l,i,s,u,a;for(a={l:1323536,m:2777561,h:1043915},o={l:0,m:0,h:0},s=2;s<=r;s++)o=ts(fl(o,4),$i(t%s)),t=~~(t/s);for(l=0;l<r-1;l++)u=(br(o)&15)<<2,o=Br(o,4),e[l]=Sl(e[l],br(kt(Br(a,u),{l:15,m:0,h:0})),n),i=K2(fl({l:1,m:0,h:0},u),{l:1,m:0,h:0}),a=ts(kt(a,i),kt(Br(a,4),{l:~i.l&je,m:~i.m&je,h:~i.h&tr}));e[r-1]=Sl(e[r-1],br(kt(a,{l:15,m:0,h:0})),n)}function Sl(e,t,r){return(r?t<<1|e&1:t|e&-8)<<24>>24}function bg(e,t){_e();var r,n,o,l,i,s,u,a;for(l=0;l<8;l++)t.ca[l]=0;for(i=0;i<12;i++)t.ea[i]=0;for(s=0;s<8;s++){for(a=0;a<3&&!(e[Ur[s][a]]==0||e[Ur[s][a]]==3);a++);for(r=e[Ur[s][(a+1)%3]],n=e[Ur[s][(a+2)%3]],u=0;u<8;u++)if(r==~~(Ur[u][1]/9)&&n==~~(Ur[u][2]/9)){t.ca[s]=al(a%3<<3|u);break}}for(o=0;o<12;o++)for(u=0;u<12;u++){if(e[Kt[o][0]]==~~(Kt[u][0]/9)&&e[Kt[o][1]]==~~(Kt[u][1]/9)){t.ea[o]=al(u<<1);break}if(e[Kt[o][0]]==~~(Kt[u][1]/9)&&e[Kt[o][1]]==~~(Kt[u][0]/9)){t.ea[o]=al(u<<1|1);break}}}var jt,fo,Ur,Kt,Rs,dn,Dt;function pu(e,t){var r,n,o;if(e.length_0==0){e.moves[e.length_0++]=t;return}if(r=~~(t/3),n=~~(e.moves[e.length_0-1]/3),r==n){o=(t%3+e.moves[e.length_0-1]%3+1)%4,o==3?--e.length_0:e.moves[e.length_0-1]=r*3+o;return}if(e.length_0>1&&r%3==n%3&&r==~~(e.moves[e.length_0-2]/3)){o=(t%3+e.moves[e.length_0-2]%3+1)%4,o==3?(e.moves[e.length_0-2]=e.moves[e.length_0-1],--e.length_0):e.moves[e.length_0-2]=r*3+o;return}e.moves[e.length_0++]=t}function xg(e,t,r,n){e.verbose=t,e.urfIdx=r,e.depth1=n}function du(e){var t,r,n;if(r=new tg,n=(e.verbose&2)!=0?(e.urfIdx+3)%6:e.urfIdx,n<3)for(t=0;t<e.length_0;t++)(e.verbose&1)!=0&&t==e.depth1&&(r.string+=\". \"),V2(H2(r,(_e(),Rs)[(X(),xl)[n][e.moves[t]]]));else for(t=e.length_0-1;t>=0;t--)V2(H2(r,(_e(),Rs)[(X(),xl)[n][e.moves[t]]])),(e.verbose&1)!=0&&t==e.depth1&&(r.string+=\". \");return r.string}function Lu(){this.moves=Z(we,ve,0,31,7,1)}to(150,1,{},Lu);V.depth1=0;V.length_0=0;V.urfIdx=0;V.verbose=0;var we=ul(\"int\",\"I\");rr(\"com.google.gwt.lang\",\"CollapsedPropertyHolder\",252);rr(\"com.google.gwt.lang\",\"JavaClassHierarchySetupUtil\",254);var Sg=rr(\"com.google.gwt.lang\",\"LongLibBase/LongEmul\",null);rr(\"com.google.gwt.lang\",\"ModuleUtils\",257);var ee=ul(\"byte\",\"B\"),vg=ul(\"long\",\"J\"),Ae=ul(\"char\",\"C\");rr(\"com.google.gwt.user.client.rpc\",\"XsrfToken\",null),qc(\"java.util\",\"Map/Entry\");var hu=function(){X2(!1)},Ru=function(e){return Fg(new uu,e)};var wg=\"UF UR UB UL DF DR DB DL FR FL BR BL\".split(\" \"),Eg=\"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \"),Ug=\"U L F R B D\".split(\" \"),kg=[[1,2,0],[0,2,0],[1,1,0],[0,3,0],[2,0,0],[0,1,0],[1,3,0],[0,0,0],[1,0,0],[1,0,2],[0,1,1],[1,1,1],[0,8,1],[2,3,0],[0,10,1],[1,4,1],[0,5,1],[1,7,2],[1,3,2],[0,0,1],[1,0,1],[0,9,0],[2,2,0],[0,8,0],[1,5,1],[0,4,1],[1,4,2],[1,5,0],[0,4,0],[1,4,0],[0,7,0],[2,5,0],[0,5,0],[1,6,0],[0,6,0],[1,7,0],[1,2,2],[0,3,1],[1,3,1],[0,11,1],[2,1,0],[0,9,1],[1,6,1],[0,7,1],[1,5,2],[1,1,2],[0,2,1],[1,2,1],[0,10,0],[2,4,0],[0,11,0],[1,7,1],[0,6,1],[1,6,2]];function Au(e,t){return e.slice(t)+e.slice(0,t)}function zg(e){let t=[[],[]];for(let r=0;r<6;r++)if(e.CENTERS.permutation[r]!==r)throw new Error(\"non-oriented puzzles are not supported\");for(let r=0;r<12;r++)t[0].push(Au(wg[e.EDGES.permutation[r]],e.EDGES.orientation[r]));for(let r=0;r<8;r++)t[1].push(Au(Eg[e.CORNERS.permutation[r]],e.CORNERS.orientation[r]));return t.push(Ug),t}function yu(e){let t=zg(e);return kg.map(([r,n,o])=>t[r][n][o]).join(\"\")}he();ht();function Du(e,t,r){for(let n in e.orbits)if(!Nn(e,n,t,r,{ignoreOrientation:n===\"CENTERS\"}))return!1;return!0}function Fu(e,t){let r=new Je(e);if(Du(e,r.state,t))return!1;for(let n of\"ULFRBD\")for(let o=1;o<4;o++)if(r.reset(),r.applyMove(new d(n,o)),Du(e,r.state,t))return!1;return!0}var Bu=[[\"R U'\",\"R2 B\",\"D2 B2\",\"D' L B'\",\"R' U'\",\"B\",\"D B2\",\"R' B\",\"L' U\",\"L2 B'\",\"B2\",\"D L B'\",\"L U\",\"B'\",\"U'\",\"R B\",\"D' B2\",\"L B'\",\"U2\",\"U L' B'\",\"\",\"U' L' B'\",\"U\",\"L' B'\"],[\"F2 L2\",\"F' L'\",\"R' F L2\",\"D' L2\",\"F L2\",\"F2 L'\",\"R' F' L'\",\"R2 F L2\",\"R2 F2 L'\",\"L2\",\"F L'\",\"D' L\",\"D2 L2\",\"R2 F' L'\",\"D L\",\"\",\"L2 F L'\",\"L F' L2\",\"L F L'\",\"F' L2\",\"L'\",\"D L2\",\"D F L'\",\"L\"],[\"R B U2 B'\",\"R2 B U' B'\",\"F2 B U B'\",\"F B2 L' B2\",\"B2 L B2\",\"B U' B'\",\"R2 B U2 B'\",\"R' B U' B'\",\"B2 L' B2\",\"F B U B'\",\"B2 U' B2\",\"B' L B\",\"L F' B D' B'\",\"B' U' B2 D B'\",\"B U2 B'\",\"R B U' B'\",\"B2 L2 B2\",\"D' B' L B\",\"B U B'\",\"F' B2 L' B2\",\"\",\"B2 L' B' U' B'\"],[\"U F2 L2 U'\",\"F' U L' U'\",\"F2 U L' U'\",\"U F L2 U'\",\"U2 B2 U2\",\"R' U' B U\",\"D2 U L U'\",\"D U2 B' U2\",\"U L2 U'\",\"F U L' U'\",\"D U L U'\",\"U2 B' U2\",\"\",\"U2 B' U' L' U'\",\"U2 L' U2\",\"U' B U\",\"U L U'\",\"D' U2 B' U2\",\"U L' U'\",\"U2 B U2\"],[\"R' D' F2\",\"F'\",\"F2\",\"D R F'\",\"R D' F2\",\"R2 F'\",\"D' F2\",\"R F'\",\"F2 R' D' F2\",\"F\",\"D2 F2\",\"D' R F'\",\"R2 D' F2\",\"R' F'\",\"D F2\",\"D2 R F'\",\"\",\"F R' D' F2\"],[\"R' D2 F' D F\",\"R F2 R2 F2\",\"R2 F' D2 F\",\"F' R2 D2 F\",\"L D' L'\",\"D F' D2 F\",\"F2 R2 F2\",\"R F' D2 F\",\"F' R2 D' F\",\"F' R' D2 F\",\"F2 R' F2\",\"L D L'\",\"F' R D' F\",\"F2 R F2\",\"F' D2 F\",\"\",\"L D2 R D' L'\",\"F' D2 F' R F2\",\"D2 R2 F2 R2 F2\",\"D F' D' F\",\"F' D F\"],[\"U F2 U'\",\"R U F' U'\",\"D R U F2 U'\",\"U F U'\",\"R2 U F2 U'\",\"R' U F' U'\",\"R U F2 U'\",\"R2 U F' U'\",\"\",\"U L D L' F U'\",\"F2 D' R D F2\",\"D2 U F U'\",\"R' U F2 U'\",\"U F' U'\",\"F2 D2 R D2 F2\",\"D U F U'\"],[\"R2\",\"R' B' D B\",\"D R'\",\"F' R2 F\",\"\",\"R B' D B\",\"R'\",\"B' D B\",\"D' R'\",\"D2 F' R2 F\",\"R\",\"R2 B' D B\",\"D2 R'\",\"B' D' B\"],[\"R2 D' R2\",\"F' R' F R\",\"R D' R2 D R'\",\"D2 R2 D2 R2\",\"R' D' F' R F\",\"U F D F' U'\",\"\",\"R2 D2 B R' B' R'\",\"R' F D' F2 R F\",\"R2 D R2\",\"F2 U F U' F\",\"R' D F' R F\",\"D R2 D2 R2\",\"U F D' F' U'\",\"D R' D2 F' R F\",\"R2 D2 R2\",\"U F D2 F' U'\",\"R' D2 F' R F\"],[\"B R B'\",\"F D F' B R2 B'\",\"D B R2 B'\",\"D2 B R' B'\",\"B R2 B'\",\"D B R' B'\",\"D' B R2 B'\",\"B R' B'\",\"\",\"B R2 B' D B R' B'\",\"D2 B R2 B'\",\"D' B R' B'\"],[\"\",\"R' D R F D2 F'\",\"R' D R\",\"D F D' F'\",\"R F' R' F\",\"F D' F'\",\"R' D' R\",\"F D2 F'\",\"R' D2 R\",\"F D F'\"],[\"\",\"F2 D2 R F' R' D2 F' D2 F'\",\"F2 D2 F' D' F D' F' D2 F'\",\"F2 D F2 D F2 D2 F2\",\"D2 F L D2 L' D2 F'\",\"D F D2 L D2 L' F'\",\"R' D B' D2 B D' R\",\"R' D2 B' D2 B R\",\"F D2 F' D F D F'\",\"F D' L D2 L' D F'\",\"B D' F D B' D' F'\",\"F D2 L D2 L' F'\",\"F D' L D L' D F'\",\"F L D2 L' D2 F'\",\"R' B' D2 B D2 R\"],[\"D'\",\"F L D L' D' F'\",\"D2\",\"L B D B' D' L'\",\"D\",\"B' L' D' L D B\",\"\",\"D F L D L' D' F'\"],[\"F' D2 F D F' D F\",\"F' D' R' D R F\",\"F' R' D' R D F\",\"B D R D' R' B'\",\"\",\"D B' D' L' D L B\"],[\"D F D F' D F D2 F'\",\"F' U2 B' R' B U2 F' L F' L' F'\",\"\",\"D2 L D L2 F L F2 D F\"],[\"L B' L' F L B L' F'\",\"F2 U F' D2 F U' F' D2 F'\",\"D' F' D B D' F D B'\",\"F L2 F R2 F' L2 F R2 F2\",\"D B D' F' D B' D' F\",\"R F L F' R' F L' F'\",\"\",\"D2 B L' U2 L B' D2 B L' U2 L B'\",\"D2 F R' U2 R F' D2 F R' U2 R F'\",\"R F L' F' R' F L F'\",\"D F D' B' D F' D' B\",\"L2 F2 L' B2 L F2 L' B2 L'\"],[\"L B R' B' L' B R B'\",\"R' B R F' R' B' R F\",\"L D2 L U L' D2 L U' L2\",\"\",\"D2 B' D2 F D' L2 F L2 F' D2 B D' F'\",\"D2 F' R' F R2 B' D2 B D2 R' F D2 F'\",\"L B L' F L B' L' F'\",\"F' D2 F' U' F D2 F' U F2\",\"D' B' D F D' B D F'\"],[\"\",\"D2 F' L U2 L' F D2 F' L U2 L' F\",\"D2 B' R U2 R' B D2 B' R U2 R' B\"]];function bu(){return D(this,null,function*(){let e=yield Ut[\"3x3x3\"].def(),t=new Je(e);for(let r of Bu)t.applyAlg(z.fromString((yield _t())(r)));return Fu(e,t.state)?t.state:bu()})}function As(e){return D(this,null,function*(){return ft(),z.fromString(Ru(yu(e)))})}function Ln(){return D(this,null,function*(){return As(yield bu())})}function xu(){return D(this,null,function*(){hu()})}var Cg=[[null,\"Rw\",\"Rw2\",\"Rw'\",\"Fw\",\"Fw'\"],[null,\"Dw\",\"Dw2\",\"Dw'\"]];function Su(){return D(this,null,function*(){return nn(yield Ln(),Cg)})}var vu=new z(\"R' U' F\");function wu(){return D(this,null,function*(){let e=new at,t=yield Ln();return e.experimentalPushAlg(vu),e.experimentalPushAlg(t),e.experimentalPushAlg(vu),e.toAlg()})}he();var me=[],ys=[1];for(let e=0;e<32;++e){me[e]=[];for(let t=0;t<32;++t)me[e][t]=0}for(let e=0;e<32;++e){me[e][0]=me[e][e]=1,ys[e+1]=ys[e]*(e+1);for(let t=1;t<e;++t)me[e][t]=me[e-1][t-1]+me[e-1][t]}function ae(e,...t){let r=t.length,n=e[t[r-1]];for(let o=r;o>0;o--)e[t[o]]=e[t[o-1]];return e[t[0]]=n,ae}function Eu(e,t,r,n){r=(r||8)-1;let o=1985229328,l=0;n!=null||(n=0),n<0&&(t<<=1);for(let i=0;i<r;++i){let s=ys[r-i],u=~~(t/s);l^=u,t%=s,u<<=2,e[i]=o>>u&7;let a=(1<<u)-1;o=(o&a)+(o>>4&~a)}return n<0&&(l&1)!=0?(e[r]=e[r-1],e[r-1]=o&7):e[r]=o&7,e}function T(e,t){let r=new Array(e);if(t!==void 0)for(let n=0;n<e;n++)r[n]=new Array(t);return r}var H,co={},Mg={},Uu=0,Ds=30,ku=21,Pg=22,Gg=23,zu=24,Ig=25,Tg=34,Ng=26,Fs=40;function _g(e){return new co[e]}function st(e,t,r,...n){let o=co[e];o&&!o.___clazz$?H=o.prototype:(!o&&(o=co[e]=function(){}),H=o.prototype=t<0?{}:_g(t),H.castableTypeMap$=r);for(let l of n)l.prototype=H;o.___clazz$&&(H.___clazz$=o.___clazz$,o.___clazz$=null)}function fr(e){let t={};for(let r=0,n=e.length;r<n;++r)t[e[r]]=1;return t}st(1,-1,Mg);H.value=null;function Cu(){}function Og(e,t){let r=Mu(0,t);return Pu(e.___clazz$,e.castableTypeMap$,e.queryId$,r),r}function Mu(e,t){let r=new Array(t);if(e===3)for(let n=0;n<t;++n){let o={m:0,l:0,h:0};o.l=o.m=o.h=0,r[n]=o}else if(e>0){let n=[null,0,!1][e];for(let o=0;o<t;++o)r[o]=n}return r}function Bs(e,t,r,n,o){let l=Mu(o,n);return Pu(e,t,r,l),l}function Pu(e,t,r,n){return Iu(),Qg(n,bs,xs),n.___clazz$=e,n.castableTypeMap$=t,n.queryId$=r,n}function vl(e,t,r){return e[t]=r}st(73,1,{},Cu);H.queryId$=0;var Gu=!1;function Iu(){Gu||(Gu=!0,bs=[],xs=[],Wg(new Cu,bs,xs))}function Wg(e,t,r){let n=0,o;for(let l in e)(o=e[l])&&(t[n]=l,r[n]=o,++n)}function Qg(e,t,r){Iu();for(let n=0,o=t.length;n<o;++n)e[t[n]]=r[n]}var bs,xs;function qg(e,t){return e.castableTypeMap$&&!!e.castableTypeMap$[t]}function jg(e,t){return e!==null&&qg(e,t)}var Tu=!1;function Kg(){if(Tu)return!1;Tu=!0,zl=T(15582,36),Cl=T(15582),Bt=T(15582),An=T(48,48),bt=T(48,36),Rn=T(48),ws=T(48)}function Ss(e){e.ct=T(24)}function Nu(e,t){let r,n;if(jg(t,ku)){for(r=t,n=0;n<24;++n)if(e.ct[n]!==r.ct[n])return!1;return!0}return!1}function wl(e){let t,r,n;for(r=0,n=8,t=23;t>=0;--t)e.ct[t]===1&&(r+=me[t][n--]);return r}function El(e){let t,r;if(hn!==null)return hn[wl(e)];for(r=0;r<48;++r){if(t=Jg(wl(e)),t!==-1)return t*64+r;oe(e,0),r%2==1&&oe(e,1),r%8==7&&oe(e,2),r%16==15&&oe(e,3)}}function Ft(e,t){let r=t%3;switch(t=~~(t/3),t){case 0:h(e.ct,0,1,2,3,r);break;case 1:h(e.ct,16,17,18,19,r);break;case 2:h(e.ct,8,9,10,11,r);break;case 3:h(e.ct,4,5,6,7,r);break;case 4:h(e.ct,20,21,22,23,r);break;case 5:h(e.ct,12,13,14,15,r);break;case 6:h(e.ct,0,1,2,3,r),h(e.ct,8,20,12,16,r),h(e.ct,9,21,13,17,r);break;case 7:h(e.ct,16,17,18,19,r),h(e.ct,1,15,5,9,r),h(e.ct,2,12,6,10,r);break;case 8:h(e.ct,8,9,10,11,r),h(e.ct,2,19,4,21,r),h(e.ct,3,16,5,22,r);break;case 9:h(e.ct,4,5,6,7,r),h(e.ct,10,18,14,22,r),h(e.ct,11,19,15,23,r);break;case 10:h(e.ct,20,21,22,23,r),h(e.ct,0,8,4,14,r),h(e.ct,3,11,7,13,r);break;case 11:h(e.ct,12,13,14,15,r),h(e.ct,1,20,7,18,r),h(e.ct,0,23,6,17,r)}}function oe(e,t){switch(t){case 0:Ft(e,19),Ft(e,28);break;case 1:Ft(e,21),Ft(e,32);break;case 2:h(e.ct,0,3,1,2,1),h(e.ct,8,11,9,10,1),h(e.ct,4,7,5,6,1),h(e.ct,12,15,13,14,1),h(e.ct,16,19,21,22,1),h(e.ct,17,18,20,23,1);break;case 3:Ft(e,18),Ft(e,29),Ft(e,24),Ft(e,35)}}function _u(e,t){let r;for(r=0;r<t;++r)oe(e,0),r%2==1&&oe(e,1),r%8==7&&oe(e,2),r%16==15&&oe(e,3)}function vs(e,t){let r,n;for(n=8,r=23;r>=0;--r)e.ct[r]=0,t>=me[r][n]&&(t-=me[r][n--],e.ct[r]=1)}function Ul(e,t){let r;for(r=0;r<24;++r)e.ct[r]=t.ct[r]}function go(){let e;for(Ss(this),e=0;e<8;++e)this.ct[e]=1;for(e=8;e<24;++e)this.ct[e]=0}function kl(e,t){let r;for(Ss(this),r=0;r<24;++r)this.ct[r]=~~(e.ct[r]/2)===t?1:0}function mo(e){let t;for(Ss(this),t=0;t<24;++t)this.ct[t]=e[t]}function Vg(){let e,t,r=new go,n=new go;for(e=0;e<15582;++e)for(vs(n,Cl[e]),t=0;t<36;++t)Ul(r,n),Ft(r,t),zl[e][t]=El(r)}function Hg(){let e,t,r,n,o,l,i,s;for(Xl(Bt),Bt[0]=0,t=0,r=1;r!==15582;)for(l=t>4,s=l?-1:t,e=l?t:-1,++t,n=0;n<15582;++n)if(Bt[n]===s){for(i=0;i<27;++i)if(o=~~zl[n][i]>>>6,Bt[o]===e)if(++r,l){Bt[n]=t;break}else Bt[o]=t}}function Yg(e){let t,r,n,o=new mo(e.ct);for(n=0;n<48;++n){for(t=!0,r=0;r<24;++r)if(o.ct[r]!==~~(r/4)){t=!1;break}if(t)return n;oe(o,0),n%2==1&&oe(o,1),n%8==7&&oe(o,2),n%16==15&&oe(o,3)}return-1}function Zg(){let e,t,r,n=new go;for(e=0;e<24;++e)n.ct[e]=e;let o=new mo(n.ct),l=new mo(n.ct),i=new mo(n.ct);for(e=0;e<48;++e){for(t=0;t<48;++t){for(r=0;r<48;++r)Nu(n,o)&&(An[e][t]=r,r===0&&(Rn[e]=t)),oe(o,0),r%2==1&&oe(o,1),r%8==7&&oe(o,2),r%16==15&&oe(o,3);oe(n,0),t%2==1&&oe(n,1),t%8==7&&oe(n,2),t%16==15&&oe(n,3)}oe(n,0),e%2==1&&oe(n,1),e%8==7&&oe(n,2),e%16==15&&oe(n,3)}for(e=0;e<48;++e)for(Ul(n,l),_u(n,Rn[e]),t=0;t<36;++t)for(Ul(o,n),Ft(o,t),_u(o,e),r=0;r<36;++r)if(Ul(i,l),Ft(i,r),Nu(i,o)){bt[e][t]=r;break}for(vs(n,0),e=0;e<48;++e)ws[Rn[e]]=wl(n),oe(n,0),e%2==1&&oe(n,1),e%8==7&&oe(n,2),e%16==15&&oe(n,3)}function Xg(){let e,t,r,n,o=new go,l=T(22984);for(t=0;t<22984;t++)l[t]=0;for(e=0,t=0;t<735471;++t)if((l[~~t>>>5]&1<<(t&31))==0){for(vs(o,t),n=0;n<48;++n)r=wl(o),l[~~r>>>5]|=1<<(r&31),hn!==null&&(hn[r]=e<<6|Rn[n]),oe(o,0),n%2==1&&oe(o,1),n%8==7&&oe(o,2),n%16==15&&oe(o,3);Cl[e++]=t}}function Jg(e){let t=Nm(Cl,e);return t>=0?t:-1}st(153,1,fr([ku]),go,kl,mo);var Bt,zl,ws,hn=null,Cl,Rn,bt,An,Ou=!1;function $g(){Ou||(Ou=!0,Il=T(70,28),Gl=T(6435,28),Vu=T(70,16),ju=T(6435,16),Ve=T(450450),Ku=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0])}function Ml(e){let t,r,n;for(r=0,n=8,t=14;t>=0;--t)e.ct[t]!==e.ct[15]&&(r+=me[t][n--]);return r}function Pl(e){let t,r,n;for(r=0,n=4,t=6;t>=0;--t)e.rl[t]!==e.rl[7]&&(r+=me[t][n--]);return r*2+e.parity}function yn(e,t){e.parity^=Ku[t];let r=t%3;switch(t=~~(t/3),t){case 0:h(e.ct,0,1,2,3,r);break;case 1:h(e.rl,0,1,2,3,r);break;case 2:h(e.ct,8,9,10,11,r);break;case 3:h(e.ct,4,5,6,7,r);break;case 4:h(e.rl,4,5,6,7,r);break;case 5:h(e.ct,12,13,14,15,r);break;case 6:h(e.ct,0,1,2,3,r),h(e.rl,0,5,4,1,r),h(e.ct,8,9,12,13,r);break;case 7:h(e.rl,0,1,2,3,r),h(e.ct,1,15,5,9,r),h(e.ct,2,12,6,10,r);break;case 8:h(e.ct,8,9,10,11,r),h(e.rl,0,3,6,5,r),h(e.ct,3,2,5,4,r);break;case 9:h(e.ct,4,5,6,7,r),h(e.rl,3,2,7,6,r),h(e.ct,11,10,15,14,r);break;case 10:h(e.rl,4,5,6,7,r),h(e.ct,0,8,4,14,r),h(e.ct,3,11,7,13,r);break;case 11:h(e.ct,12,13,14,15,r),h(e.rl,1,4,7,2,r),h(e.ct,1,0,7,6,r)}}function Dn(e,t){switch(t){case 0:yn(e,19),yn(e,28);break;case 1:yn(e,21),yn(e,32);break;case 2:h(e.ct,0,3,1,2,1),h(e.ct,8,11,9,10,1),h(e.ct,4,7,5,6,1),h(e.ct,12,15,13,14,1),h(e.rl,0,3,5,6,1),h(e.rl,1,2,4,7,1)}}function Wu(e,t,r){let n;for(n=0;n<16;++n)e.ct[n]=~~(t.ct[n]/2);for(n=0;n<8;++n)e.rl[n]=t.ct[n+16];e.parity=r}function Qu(e,t){let r,n;for(n=8,e.ct[15]=0,r=14;r>=0;--r)t>=me[r][n]?(t-=me[r][n--],e.ct[r]=1):e.ct[r]=0}function qu(e,t){let r,n;for(e.parity=t&1,t>>>=1,n=4,e.rl[7]=0,r=6;r>=0;--r)t>=me[r][n]?(t-=me[r][n--],e.rl[r]=1):e.rl[r]=0}function Es(){this.rl=T(8),this.ct=T(16)}function em(){let e,t,r,n,o,l,i,s,u,a,f=new Es;for(o=0;o<70;++o)for(s=0;s<28;++s)qu(f,o),yn(f,zr[s]),Il[o][s]=Pl(f);for(o=0;o<70;++o)for(qu(f,o),i=0;i<16;++i)Vu[o][i]=Pl(f),Dn(f,0),i%2==1&&Dn(f,1),i%8==7&&Dn(f,2);for(o=0;o<6435;++o)for(Qu(f,o),i=0;i<16;++i)ju[o][i]=Ml(f)&65535,Dn(f,0),i%2==1&&Dn(f,1),i%8==7&&Dn(f,2);for(o=0;o<6435;++o)for(s=0;s<28;++s)Qu(f,o),yn(f,zr[s]),Gl[o][s]=Ml(f)&65535;for(Xl(Ve),Ve[0]=Ve[18]=Ve[28]=Ve[46]=Ve[54]=Ve[56]=0,r=0,n=6;n!==450450;){let c=r>6,g=c?-1:r,m=c?r:-1;for(++r,o=0;o<450450;++o)if(Ve[o]===g){for(e=~~(o/70),u=o%70,s=0;s<23;++s)if(t=Gl[e][s],a=Il[u][s],l=t*70+a,Ve[l]===m)if(++n,c){Ve[o]=r;break}else Ve[l]=r}}}st(154,1,{},Es);H.parity=0;var Gl,Ve,ju,Ku,Il,Vu,Hu=!1;function tm(){Hu||(Hu=!0,po=T(29400,20),Zu=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],cr=T(29400),zs=[0,9,14,23,27,28,41,42,46,55,60,69],Cs=T(70))}function Us(e){let t,r,n,o;for(r=0,o=4,t=6;t>=0;--t)e.ud[t]!==e.ud[7]&&(r+=me[t][o--]);for(r*=35,o=4,t=6;t>=0;--t)e.fb[t]!==e.fb[7]&&(r+=me[t][o--]);r*=12;let l=e.fb[7]^e.ud[7];for(n=0,o=4,t=7;t>=0;--t)e.rl[t]!==l&&(n+=me[t][o--]);return e.parity+2*(r+Cs[n])}function rm(e,t){switch(e.parity^=Zu[t],t){case 0:case 1:case 2:h(e.ud,0,1,2,3,t%3);break;case 3:h(e.rl,0,1,2,3,1);break;case 4:case 5:case 6:h(e.fb,0,1,2,3,(t-1)%3);break;case 7:case 8:case 9:h(e.ud,4,5,6,7,(t-1)%3);break;case 10:h(e.rl,4,5,6,7,1);break;case 11:case 12:case 13:h(e.fb,4,5,6,7,(t+1)%3);break;case 14:h(e.ud,0,1,2,3,1),h(e.rl,0,5,4,1,1),h(e.fb,0,5,4,1,1);break;case 15:h(e.rl,0,1,2,3,1),h(e.fb,1,4,7,2,1),h(e.ud,1,6,5,2,1);break;case 16:h(e.fb,0,1,2,3,1),h(e.ud,3,2,5,4,1),h(e.rl,0,3,6,5,1);break;case 17:h(e.ud,4,5,6,7,1),h(e.rl,3,2,7,6,1),h(e.fb,3,2,7,6,1);break;case 18:h(e.rl,4,5,6,7,1),h(e.fb,0,3,6,5,1),h(e.ud,0,3,4,7,1);break;case 19:h(e.fb,4,5,6,7,1),h(e.ud,0,7,6,1,1),h(e.rl,1,4,7,2,1)}}function Yu(e,t,r){let n,o=(t.ct[0]>t.ct[8]?1:0)^(t.ct[8]>t.ct[16]?1:0)^(t.ct[0]>t.ct[16]?1:0)?1:0;for(n=0;n<8;++n)e.ud[n]=t.ct[n]&1^1,e.fb[n]=t.ct[n+8]&1^1,e.rl[n]=t.ct[n+16]&1^1^o;e.parity=o^r}function nm(e,t){let r,n,o,l;for(e.parity=t&1,t>>>=1,o=zs[t%12],t=~~(t/12),l=4,r=7;r>=0;--r)e.rl[r]=0,o>=me[r][l]&&(o-=me[r][l--],e.rl[r]=1);for(n=t%35,t=~~(t/35),l=4,e.fb[7]=0,r=6;r>=0;--r)n>=me[r][l]?(n-=me[r][l--],e.fb[r]=1):e.fb[r]=0;for(l=4,e.ud[7]=0,r=6;r>=0;--r)t>=me[r][l]?(t-=me[r][l--],e.ud[r]=1):e.ud[r]=0}function ks(){this.ud=T(8),this.rl=T(8),this.fb=T(8)}function om(){let e,t,r,n;for(r=0;r<12;++r)Cs[zs[r]]=r;let o=new ks;for(r=0;r<29400;++r)for(n=0;n<20;++n)nm(o,r),rm(o,n),po[r][n]=Us(o)&65535;for(Xl(cr),cr[0]=0,e=0,t=1;t!==29400;){for(r=0;r<29400;++r)if(cr[r]===e)for(n=0;n<17;++n)cr[po[r][n]]===-1&&(cr[po[r][n]]=e+1,++t);++e}}st(155,1,{},ks);H.parity=0;var po,Zu,cr,zs,Cs;function lm(e,t){let r;for(r=0;r<24;++r)e.ct[r]=t.ct[r]}function im(e,t){let r=t%3;switch(t=~~(t/3),t){case 0:h(e.ct,0,1,2,3,r);break;case 1:h(e.ct,16,17,18,19,r);break;case 2:h(e.ct,8,9,10,11,r);break;case 3:h(e.ct,4,5,6,7,r);break;case 4:h(e.ct,20,21,22,23,r);break;case 5:h(e.ct,12,13,14,15,r);break;case 6:h(e.ct,0,1,2,3,r),h(e.ct,8,20,12,16,r),h(e.ct,9,21,13,17,r);break;case 7:h(e.ct,16,17,18,19,r),h(e.ct,1,15,5,9,r),h(e.ct,2,12,6,10,r);break;case 8:h(e.ct,8,9,10,11,r),h(e.ct,2,19,4,21,r),h(e.ct,3,16,5,22,r);break;case 9:h(e.ct,4,5,6,7,r),h(e.ct,10,18,14,22,r),h(e.ct,11,19,15,23,r);break;case 10:h(e.ct,20,21,22,23,r),h(e.ct,0,8,4,14,r),h(e.ct,3,11,7,13,r);break;case 11:h(e.ct,12,13,14,15,r),h(e.ct,1,20,7,18,r),h(e.ct,0,23,6,17,r)}}function Ms(){let e;for(this.ct=T(24),e=0;e<24;++e)this.ct[e]=~~(e/4)}function Xu(e){let t,r,n;for(Ms.call(this),t=0;t<23;++t)n=t+e(24-t),this.ct[n]!==this.ct[t]&&(r=this.ct[t],this.ct[t]=this.ct[n],this.ct[n]=r)}st(156,1,{},Ms,Xu);var Ju=!1;function sm(){Ju||(Ju=!0,gt=T(18),fm())}function $u(e){e.cp=[0,1,2,3,4,5,6,7],e.co=[0,0,0,0,0,0,0,0]}function ef(e,t){let r;for(r=0;r<8;++r)e.cp[r]=t.cp[r],e.co[r]=t.co[r]}function am(e,t){!e.temps&&(e.temps=new Tl),tf(e,gt[t],e.temps),ef(e,e.temps)}function um(e,t){let r,n;for(n=0,r=6;r>=0;--r)n+=e.co[r]=t%3,t=~~(t/3);e.co[7]=(15-n)%3}function tf(e,t,r){let n,o,l,i;for(n=0;n<8;++n)r.cp[n]=e.cp[t.cp[n]],l=e.co[t.cp[n]],i=t.co[n],o=l,o=o+(l<3?i:6-i),o=o%3,(l>=3?1:0)^(i>=3?1:0)&&(o=o+3),r.co[n]=o}function Tl(){$u(this)}function gr(e,t){$u(this),Eu(this.cp,e),um(this,t)}function rf(e){gr.call(this,e(40320),e(2187))}function fm(){let e,t;for(gt[0]=new gr(15120,0),gt[3]=new gr(21021,1494),gt[6]=new gr(8064,1236),gt[9]=new gr(9,0),gt[12]=new gr(1230,412),gt[15]=new gr(224,137),e=0;e<18;e+=3)for(t=0;t<2;++t)gt[e+t+1]=new Tl,tf(gt[e+t],gt[e],gt[e+t+1])}st(157,1,fr([Pg]),Tl,gr,rf);H.temps=null;var gt,nf=!1;function cm(){nf||(nf=!0,xt=T(1937880),Wl=T(1538),Ql=T(1538),Sn=T(11880),ff=[0,1,6,3,4,5,2,7],Ts=T(160,12),Ns=T(160,12),Is=[1,1,1,3,12,60,360,2520,20160,181440,1814400,19958400,239500800],Gs=[0,2,4,6,1,3,7,5,8,9,10,11])}function Fn(e,t,r,n,o){let l=e.edgeo[o];e.edgeo[o]=e.edge[n],e.edge[n]=e.edgeo[r],e.edgeo[r]=e.edge[t],e.edge[t]=l}function Bn(e,t){let r,n,o,l,i;for(e.isStd||af(e),n=0,i=1985229328,l=47768,r=0;r<t;++r)o=e.edge[r]<<2,n*=12-r,o>=32?(n+=l>>o-32&15,l-=4368<<o-32):(n+=i>>o&15,l-=4369,i-=286331152<<o);return n}function of(e){let t,r=Bn(e,4);t=Sn[r];let n=t&7;t>>=3,_l(e,n);let o=Bn(e,10)%20160;return t*20160+o}function Nl(e,t){switch(e.isStd=!1,t){case 0:ae(e.edge,0,4,1,5),ae(e.edgeo,0,4,1,5);break;case 1:Le(e.edge,0,4,1,5),Le(e.edgeo,0,4,1,5);break;case 2:ae(e.edge,0,5,1,4),ae(e.edgeo,0,5,1,4);break;case 3:Le(e.edge,5,10,6,11),Le(e.edgeo,5,10,6,11);break;case 4:ae(e.edge,0,11,3,8),ae(e.edgeo,0,11,3,8);break;case 5:Le(e.edge,0,11,3,8),Le(e.edgeo,0,11,3,8);break;case 6:ae(e.edge,0,8,3,11),ae(e.edgeo,0,8,3,11);break;case 7:ae(e.edge,2,7,3,6),ae(e.edgeo,2,7,3,6);break;case 8:Le(e.edge,2,7,3,6),Le(e.edgeo,2,7,3,6);break;case 9:ae(e.edge,2,6,3,7),ae(e.edgeo,2,6,3,7);break;case 10:Le(e.edge,4,8,7,9),Le(e.edgeo,4,8,7,9);break;case 11:ae(e.edge,1,9,2,10),ae(e.edgeo,1,9,2,10);break;case 12:Le(e.edge,1,9,2,10),Le(e.edgeo,1,9,2,10);break;case 13:ae(e.edge,1,10,2,9),ae(e.edgeo,1,10,2,9);break;case 14:Le(e.edge,0,4,1,5),Le(e.edgeo,0,4,1,5),ae(e.edge,9,11),ae(e.edgeo,8,10);break;case 15:Le(e.edge,5,10,6,11),Le(e.edgeo,5,10,6,11),ae(e.edge,1,3),ae(e.edgeo,0,2);break;case 16:Le(e.edge,0,11,3,8),Le(e.edgeo,0,11,3,8),ae(e.edge,5,7),ae(e.edgeo,4,6);break;case 17:Le(e.edge,2,7,3,6),Le(e.edgeo,2,7,3,6),ae(e.edge,8,10),ae(e.edgeo,9,11);break;case 18:Le(e.edge,4,8,7,9),Le(e.edgeo,4,8,7,9),ae(e.edge,0,2),ae(e.edgeo,1,3);break;case 19:Le(e.edge,1,9,2,10),Le(e.edgeo,1,9,2,10),ae(e.edge,4,6),ae(e.edgeo,5,7)}}function bn(e,t){switch(e.isStd=!1,t){case 0:Nl(e,14),Nl(e,17);break;case 1:Fn(e,11,5,10,6),Fn(e,5,10,6,11),Fn(e,1,2,3,0),Fn(e,4,9,7,8),Fn(e,8,4,9,7),Fn(e,0,1,2,3);break;case 2:mt(e,4,5),mt(e,5,4),mt(e,11,8),mt(e,8,11),mt(e,7,6),mt(e,6,7),mt(e,9,10),mt(e,10,9),mt(e,1,1),mt(e,0,0),mt(e,3,3),mt(e,2,2)}}function _l(e,t){for(;t>=2;)t-=2,bn(e,1),bn(e,2);t!==0&&bn(e,0)}function Lo(e,t){let r,n,o,l,i,s;for(i=1985229328,s=47768,o=0,r=0;r<11;++r)if(n=Is[11-r],l=~~(t/n),t=t%n,o^=l,l<<=2,l>=32){l=l-32,e.edge[r]=s>>l&15;let u=(1<<l)-1;s=(s&u)+(s>>4&~u)}else{e.edge[r]=i>>l&15;let u=(1<<l)-1;i=(i&u)+(i>>>4&~u)+(s<<28),s=s>>4}for((o&1)==0?e.edge[11]=i:(e.edge[11]=e.edge[10],e.edge[10]=i),r=0;r<12;++r)e.edgeo[r]=r;e.isStd=!0}function lf(e,t){let r;for(r=0;r<12;++r)e.edge[r]=t.edge[r],e.edgeo[r]=t.edgeo[r];e.isStd=t.isStd}function sf(e,t){let r,n,o,l;for(e.temp===null&&(e.temp=T(12)),r=0;r<12;++r)e.temp[r]=r,e.edge[r]=t.ep[Gs[r]+12]%12;for(n=1,r=0;r<12;++r)for(;e.edge[r]!==r;)l=e.edge[r],e.edge[r]=e.edge[l],e.edge[l]=l,o=e.temp[r],e.temp[r]=e.temp[l],e.temp[l]=o,n^=1;for(r=0;r<12;++r)e.edge[r]=e.temp[t.ep[Gs[r]]%12];return n}function af(e){let t;for(e.temp===null&&(e.temp=T(12)),t=0;t<12;++t)e.temp[e.edgeo[t]]=t;for(t=0;t<12;++t)e.edge[t]=e.temp[e.edge[t]],e.edgeo[t]=t;e.isStd=!0}function Le(e,t,r,n,o){let l;l=e[t],e[t]=e[n],e[n]=l,l=e[r],e[r]=e[o],e[o]=l}function mt(e,t,r){let n=e.edge[t];e.edge[t]=e.edgeo[r],e.edgeo[r]=n}function Vt(){this.edge=T(12),this.edgeo=T(12)}function gm(){let e,t,r,n,o,l,i,s,u,a,f,c,g,m,L,p,y,F,x,B,M,k,K=new Vt,te=new Vt,N=new Vt;for(Xl(xt),s=0,Ol=1,Ps(xt,0,0);Ol!==31006080&&(L=s>9,i=s%3,l=(s+1)%3,a=L?3:i,e=L?i:3,!(s>=9));){for(c=0;c<31006080;c+=16)if(k=xt[~~c>>4],!(!L&&k===-1)){for(f=c,u=c+16;f<u;++f,k>>=2)if((k&3)===a){for(x=~~(f/20160),t=Wl[x],n=f%20160,Lo(K,t*20160+n),y=0;y<17;++y)if(r=xn(K.edge,y<<3,4),B=Sn[r],M=B&7,B>>=3,o=xn(K.edge,y<<3|M,10)%20160,g=B*20160+o,ho(xt,g)===e){if(Ps(xt,L?f:g,l),++Ol,L)break;if(F=Ql[B],F!==1)for(lf(te,K),Nl(te,y),_l(te,M),p=1;(F=~~F>>1&65535)!=0;++p)(F&1)==1&&(lf(N,te),_l(N,p),m=B*20160+Bn(N,10)%20160,ho(xt,m)===e&&(Ps(xt,m,l),++Ol))}}}++s}}function ho(e,t){return e[t>>4]>>((t&15)<<1)&3}function xn(e,t,r){let n,o,l,i,s,u=Ns[t],a=Ts[t];for(o=0,s=1985229328,i=47768,n=0;n<r;++n)l=u[e[a[n]]]<<2,o*=12-n,l>=32?(o+=i>>l-32&15,i-=4368<<l-32):(o+=s>>l&15,i-=4369,s-=286331152<<l);return o}function uf(e){let t,r,n,o,l,i,s,u,a,f,c,g=new Vt;if(i=0,l=ho(xt,e),l===3)return 10;for(;e!==0;)for(l===0?l=2:--l,a=~~(e/20160),t=Wl[a],n=e%20160,Lo(g,t*20160+n),u=0;u<17;++u)if(r=xn(g.edge,u<<3,4),f=Sn[r],c=f&7,f>>=3,o=xn(g.edge,u<<3|c,10)%20160,s=f*20160+o,ho(xt,s)===l){++i,e=s;break}return i}function mm(e,t){let r=ho(xt,e);return r===3?10:(1227133513<<r>>t&3)+t-1}function pm(){let e,t,r,n=new Vt;for(t=0;t<20;++t)for(r=0;r<8;++r){for(Lo(n,0),Nl(n,t),_l(n,r),e=0;e<12;++e)Ts[t<<3|r][e]=n.edge[e];for(af(n),e=0;e<12;++e)Ns[t<<3|r][e]=n.temp[e]}}function dm(){let e,t,r,n,o=new Vt,l=T(1485);for(t=0;t<1485;t++)l[t]=0;for(e=0,t=0;t<11880;++t)if((l[~~t>>>3]&1<<(t&7))==0){for(Lo(o,t*Is[8]),n=0;n<8;++n)r=Bn(o,4),r===t&&(Ql[e]=(Ql[e]|1<<n)&65535),l[~~r>>3]=l[~~r>>3]|1<<(r&7),Sn[r]=e<<3|ff[n],bn(o,0),n%2==1&&(bn(o,1),bn(o,2));Wl[e++]=t}}function Ps(e,t,r){e[t>>4]^=(3^r)<<((t&15)<<1)}st(158,1,fr([Gg]),Vt);H.isStd=!0;H.temp=null;var Gs,Ol=0,xt,Is,Ts,Ns,Sn,Wl,ff,Ql,cf=!1;function Lm(){cf||(cf=!0)}function hm(e){let t,r,n;for(t=0,n=!1,r=0;r<12;++r)t|=1<<e.ep[r],n=n!==e.ep[r]>=12;return t&=~~t>>12,t===0&&!n}function Rm(e,t){let r;for(r=0;r<24;++r)e.ep[r]=t.ep[r]}function Am(e,t){let r=t%3;switch(t=~~(t/3),t){case 0:h(e.ep,0,1,2,3,r),h(e.ep,12,13,14,15,r);break;case 1:h(e.ep,11,15,10,19,r),h(e.ep,23,3,22,7,r);break;case 2:h(e.ep,0,11,6,8,r),h(e.ep,12,23,18,20,r);break;case 3:h(e.ep,4,5,6,7,r),h(e.ep,16,17,18,19,r);break;case 4:h(e.ep,1,20,5,21,r),h(e.ep,13,8,17,9,r);break;case 5:h(e.ep,2,9,4,10,r),h(e.ep,14,21,16,22,r);break;case 6:h(e.ep,0,1,2,3,r),h(e.ep,12,13,14,15,r),h(e.ep,9,22,11,20,r);break;case 7:h(e.ep,11,15,10,19,r),h(e.ep,23,3,22,7,r),h(e.ep,2,16,6,12,r);break;case 8:h(e.ep,0,11,6,8,r),h(e.ep,12,23,18,20,r),h(e.ep,3,19,5,13,r);break;case 9:h(e.ep,4,5,6,7,r),h(e.ep,16,17,18,19,r),h(e.ep,8,23,10,21,r);break;case 10:h(e.ep,1,20,5,21,r),h(e.ep,13,8,17,9,r),h(e.ep,14,0,18,4,r);break;case 11:h(e.ep,2,9,4,10,r),h(e.ep,14,21,16,22,r),h(e.ep,7,15,1,17,r)}}function _s(){let e;for(this.ep=T(24),e=0;e<24;++e)this.ep[e]=e}function gf(e){let t,r,n;for(_s.call(this),t=0;t<23;++t)n=t+e(24-t),n!==t&&(r=this.ep[t],this.ep[t]=this.ep[n],this.ep[n]=r)}st(159,1,{},_s,gf);var mf=!1;function ym(){mf||(mf=!0,Os=[35,1,34,2,4,6,22,5,19])}function pf(e){e.moveBuffer=T(60)}function Dm(e,t){return e.value-t.value}function vn(e,t){let r;for(Rm(e.edge,t.edge),lm(e.center,t.center),ef(e.corner,t.corner),e.value=t.value,e.add1=t.add1,e.length1=t.length1,e.length2=t.length2,e.length3=t.length3,e.sym=t.sym,r=0;r<60;++r)e.moveBuffer[r]=t.moveBuffer[r];e.moveLength=t.moveLength,e.edgeAvail=t.edgeAvail,e.centerAvail=t.centerAvail,e.cornerAvail=t.cornerAvail}function mr(e){for(;e.centerAvail<e.moveLength;)im(e.center,e.moveBuffer[e.centerAvail++]);return e.center}function df(e){for(;e.cornerAvail<e.moveLength;)am(e.corner,e.moveBuffer[e.cornerAvail++]%18);return e.corner}function Ro(e){for(;e.edgeAvail<e.moveLength;)Am(e.edge,e.moveBuffer[e.edgeAvail++]);return e.edge}function Fm(e){let t,r,n,o,l,i,s=new Array(e.moveLength-(e.add1?2:0));for(r=0,t=0;t<e.length1;++t)s[r++]=e.moveBuffer[t];for(i=e.sym,t=e.length1+(e.add1?2:0);t<e.moveLength;++t)bt[i][e.moveBuffer[t]]>=27?(s[r++]=bt[i][e.moveBuffer[t]]-9,o=Os[bt[i][e.moveBuffer[t]]-27],i=An[i][o]):s[r++]=bt[i][e.moveBuffer[t]];let u=An[Rn[i]][Yg(mr(e))];for(l=\"\",i=u,t=r-1;t>=0;--t)n=s[t],n=~~(n/3)*3+(2-n%3),bt[i][n]>=27?(l=l+Ws[bt[i][n]-9]+\" \",o=Os[bt[i][n]-27],i=An[i][o]):l=l+Ws[bt[i][n]]+\" \";return l}function kr(e,t){e.moveBuffer[e.moveLength++]=t}function ql(){pf(this),this.edge=new _s,this.center=new Ms,this.corner=new Tl}function jl(e){ql.call(this),vn(this,e)}function Lf(e){pf(this),this.edge=new gf(e),this.center=new Xu(e),this.corner=new rf(e)}st(160,1,fr([zu,Tg]),ql,jl,Lf);H.compareTo$=function(t){return Dm(this,t)};H.add1=!1;H.center=null;H.centerAvail=0;H.corner=null;H.cornerAvail=0;H.edge=null;H.edgeAvail=0;H.length1=0;H.length2=0;H.length3=0;H.moveLength=0;H.sym=0;H.value=0;var Os;function Bm(e,t){return t.value-e.value}function Kl(e,t){return Bm(e,t)}function hf(){}st(161,1,{},hf);H.compare=function(t,r){return Kl(t,r)};var Rf=!1;function bm(){if(Rf)return;Rf=!0;let e,t;for(Ws=[\"U \",\"U2 \",\"U' \",\"R \",\"R2 \",\"R' \",\"F \",\"F2 \",\"F' \",\"D \",\"D2 \",\"D' \",\"L \",\"L2 \",\"L' \",\"B \",\"B2 \",\"B' \",\"Uw \",\"Uw2\",\"Uw'\",\"Rw \",\"Rw2\",\"Rw'\",\"Fw \",\"Fw2\",\"Fw'\",\"Dw \",\"Dw2\",\"Dw'\",\"Lw \",\"Lw2\",\"Lw'\",\"Bw \",\"Bw2\",\"Bw'\"],zr=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,25,28,30,31,32,34,36],Ao=[0,1,2,4,6,7,8,9,10,11,13,15,16,17,19,22,25,28,31,34,36],Af=T(37),yf=T(37),wn=T(37,36),Vl=T(29,28),Hl=T(21,20),Qs=T(36),yo=T(28),En=T(20),e=0;e<29;++e)Af[zr[e]]=e;for(e=0;e<21;++e)yf[Ao[e]]=e;for(e=0;e<36;++e){for(t=0;t<36;++t)wn[e][t]=~~(e/3)==~~(t/3)||~~(e/3)%3==~~(t/3)%3&&e>t;wn[36][e]=!1}for(e=0;e<29;++e)for(t=0;t<28;++t)Vl[e][t]=wn[zr[e]][zr[t]];for(e=0;e<21;++e)for(t=0;t<20;++t)Hl[e][t]=wn[Ao[e]][Ao[t]];for(e=0;e<36;++e)for(Qs[e]=36,t=e;t<36;++t)if(!wn[e][t]){Qs[e]=t-1;break}for(e=0;e<28;++e)for(yo[e]=28,t=e;t<28;++t)if(!Vl[e][t]){yo[e]=t-1;break}for(e=0;e<20;++e)for(En[e]=20,t=e;t<20;++t)if(!Hl[e][t]){En[e]=t-1;break}}var wn,Vl,Hl,zr,Ws,Ao,Qs,yo,En,Af,yf;function xm(e){let t,r,n,o,l,i,s,u,a,f,c,g;e.solution=\"\";let m=El(new kl(mr(e.c),0)),L=El(new kl(mr(e.c),1)),p=El(new kl(mr(e.c),2)),y=Bt[~~m>>6],F=Bt[~~L>>6],x=Bt[~~p>>6];for(e.p1SolsCnt=0,e.arr2idx=0,Mm(e.p1sols.heap),e.length1=(y<F?y:F)<x?y<F?y:F:x;e.length1<100&&!(x<=e.length1&&Yl(e,~~p>>>6,p&63,e.length1,-1,0)||y<=e.length1&&Yl(e,~~m>>>6,m&63,e.length1,-1,0)||F<=e.length1&&Yl(e,~~L>>>6,L&63,e.length1,-1,0));++e.length1);let B=jm(e.p1sols,Bs(Vm,fr([Ig,Ds,Fs]),zu,0,0));B.sort(function(K,te){return K.value-te.value}),t=9;do{e:for(u=B[0].value;u<100;++u)for(i=0;i<B.length&&!(B[i].value>u);++i)if(!(u-B[i].length1>t)&&(vn(e.c1,B[i]),Wu(e.ct2,mr(e.c1),Zl(Ro(e.c1).ep)),c=Ml(e.ct2),g=Pl(e.ct2),e.length1=B[i].length1,e.length2=u-B[i].length1,Df(e,c,g,e.length2,28,0)))break e;++t}while(u===100);e.arr2.sort(function(K,te){return K.value-te.value}),s=0,r=13;do{e:for(a=e.arr2[0].value;a<100;++a)for(i=0;i<Math.min(e.arr2idx,100)&&!(e.arr2[i].value>a);++i)if(!(a-e.arr2[i].length1-e.arr2[i].length2>r)&&(l=sf(e.e12,Ro(e.arr2[i])),Yu(e.ct3,mr(e.arr2[i]),l^Zl(df(e.arr2[i]).cp)),n=Us(e.ct3),o=Bn(e.e12,10),f=uf(of(e.e12)),f<=a-e.arr2[i].length1-e.arr2[i].length2&&Ff(e,o,n,f,a-e.arr2[i].length1-e.arr2[i].length2,20,0))){s=i;break e}++r}while(a===100);let M=new jl(e.arr2[s]);e.length1=M.length1,e.length2=M.length2;let k=a-e.length1-e.length2;for(i=0;i<k;++i)kr(M,Ao[e.move3[i]]);e.solution=Fm(M)}function Sm(e,t){let r,n;for(vn(e.c1,e.c),r=0;r<e.length1;++r)kr(e.c1,e.move1[r]);switch(ws[t]){case 0:kr(e.c1,24),kr(e.c1,35),e.move1[e.length1]=24,e.move1[e.length1+1]=35,e.add1=!0,t=19;break;case 12869:kr(e.c1,18),kr(e.c1,29),e.move1[e.length1]=18,e.move1[e.length1+1]=29,e.add1=!0,t=34;break;case 735470:e.add1=!1,t=0}Wu(e.ct2,mr(e.c1),Zl(Ro(e.c1).ep));let o=Ml(e.ct2),l=Pl(e.ct2),i=Ve[o*70+l];return e.c1.value=i+e.length1,e.c1.length1=e.length1,e.c1.add1=e.add1,e.c1.sym=t,++e.p1SolsCnt,e.p1sols.heap.size<500?n=new jl(e.c1):(n=Qm(e.p1sols),n.value>e.c1.value&&vn(n,e.c1)),km(e.p1sols,n),e.p1SolsCnt===1e4}function vm(e){let t;for(vn(e.c2,e.c1),t=0;t<e.length2;++t)kr(e.c2,e.move2[t]);if(!hm(Ro(e.c2)))return!1;let r=sf(e.e12,Ro(e.c2));Yu(e.ct3,mr(e.c2),r^Zl(df(e.c2).cp));let n=Us(e.ct3);Bn(e.e12,10);let o=uf(of(e.e12));return e.arr2[e.arr2idx]?vn(e.arr2[e.arr2idx],e.c2):e.arr2[e.arr2idx]=new jl(e.c2),e.arr2[e.arr2idx].value=e.length1+e.length2+Math.max(o,cr[n]),e.arr2[e.arr2idx].length2=e.length2,++e.arr2idx,e.arr2idx===e.arr2.length}function wm(e,t){return bf(),e.c=new Lf(t),xm(e),e.solution}function Yl(e,t,r,n,o,l){let i,s,u,a,f,c;if(t===0)return n===0&&Sm(e,r);for(i=0;i<27;i+=3)if(!(i===o||i===o-9||i===o-18))for(a=0;a<3;++a){if(u=i+a,s=zl[t][bt[r][u]],f=Bt[~~s>>>6],f>=n){if(f>n)break;continue}if(c=An[r][s&63],s>>>=6,e.move1[l]=u,Yl(e,s,c,n-1,i,l+1))return!0}return!1}function Df(e,t,r,n,o,l){let i,s,u,a;if(t===0&&Ve[r]===0)return n===0&&vm(e);for(s=0;s<23;++s){if(Vl[o][s]){s=yo[s];continue}if(i=Gl[t][s],a=Il[r][s],u=Ve[i*70+a],u>=n){u>n&&(s=yo[s]);continue}if(e.move2[l]=zr[s],Df(e,i,a,n-1,s,l+1))return!0}return!1}function Ff(e,t,r,n,o,l,i){let s,u,a,f,c,g,m,L,p;if(o===0)return t===0&&r===0;for(Lo(e.tempe[i],t),c=0;c<17;++c){if(Hl[l][c]){c=En[c];continue}if(a=po[r][c],g=cr[a],g>=o){g>o&&c<14&&(c=En[c]);continue}if(f=xn(e.tempe[i].edge,c<<3,10),s=~~(f/20160),L=Sn[s],p=L&7,L>>=3,u=xn(e.tempe[i].edge,c<<3|p,10)%20160,m=mm(L*20160+u,n),m>=o){m>o&&c<14&&(c=En[c]);continue}if(Ff(e,f,a,m,o-1,c,i+1))return e.move3[i]=c,!0}return!1}function Bf(){let e;for(this.p1sols=new zf(new hf),this.move1=T(15),this.move2=T(20),this.move3=T(20),this.c1=new ql,this.c2=new ql,this.ct2=new Es,this.ct3=new ks,this.e12=new Vt,this.tempe=T(20),this.arr2=T(100),e=0;e<20;++e)this.tempe[e]=new Vt}function bf(){xf||(Zg(),hn=T(735471),Xg(),Vg(),hn=null,Hg(),em(),om(),pm(),dm(),gm(),xf=!0)}st(163,1,fr([Ng]),Bf);H.add1=!1;H.arr2idx=0;H.c=null;H.length1=0;H.length2=0;H.p1SolsCnt=0;H.solution=\"\";var xf=!1,Sf=!1;function Em(){Sf||(Sf=!0)}function Zl(e){let t,r,n,o;for(o=0,t=0,n=e.length;t<n;++t)for(r=t;r<n;++r)e[t]>e[r]&&(o^=1);return o}function h(e,t,r,n,o,l){let i;switch(l){case 0:i=e[o],e[o]=e[n],e[n]=e[r],e[r]=e[t],e[t]=i;return;case 1:i=e[t],e[t]=e[n],e[n]=i,i=e[r],e[r]=e[o],e[o]=i;return;case 2:i=e[t],e[t]=e[r],e[r]=e[n],e[n]=e[o],e[o]=i;return}}function vf(){}function wf(e,t,r,n){let o=new vf;return o.typeName=e+t,Uf(r!==0?-r:0)&&kf(r!==0?-r:0,o),o.modifiers=4,o.superclass=qs,o.componentType=n,o}function Ef(e,t,r,n){let o=new vf;return o.typeName=e+t,Uf(r)&&kf(r,o),o.superclass=n,o}function Um(e){let t=co[e.seedId];return e=null,t}function Uf(e){return typeof e==\"number\"&&e>0}function kf(e,t){let r;if(t.seedId=e,e===2)r=String.prototype;else if(e>0){let n=Um(t);if(n)r=n.prototype;else{n=co[e]=function(){},n.___clazz$=t;return}}else return;r.___clazz$=t}H.val$outerIter=null;function km(e,t){if(Wm(e,t))return!0}function zm(e){e.array=Bs(Cf,fr([Ds,Fs]),Uu,0,0)}function Cm(e,t){return vl(e.array,e.size++,t),!0}function Mm(e){e.array=Bs(Cf,fr([Ds,Fs]),Uu,0,0),e.size=0}function pr(e,t){return e.array[t]}function Pm(e,t){let r=e.array[t];return Tm(e.array,t,1),--e.size,r}function Un(e,t,r){let n=e.array[t];return vl(e.array,t,r),n}function Gm(e,t){let r;for(t.length<e.size&&(t=Og(t,e.size)),r=0;r<e.size;++r)vl(t,r,e.array[r]);return t.length>e.size&&vl(t,e.size,null),t}function Im(){zm(this),this.array.length=500}function Tm(e,t,r){e.splice(t,r)}H.size=0;function Nm(e,t){let r,n,o,l;for(n=0,r=e.length-1;n<=r;)if(o=n+(~~(r-n)>>1),l=e[o],l<t)n=o+1;else if(l>t)r=o-1;else return o;return-n-1}function Xl(e){_m(e,e.length)}function _m(e,t){let r;for(r=0;r<t;++r)e[r]=-1}function Om(e,t){let r,n,o,l,i=e.heap.size,s=pr(e.heap,t);for(;t*2+1<i&&(r=(n=2*t+1,o=n+1,l=n,o<i&&Kl(pr(e.heap,o),pr(e.heap,n))<0&&(l=o),l),!(Kl(s,pr(e.heap,r))<0));)Un(e.heap,t,pr(e.heap,r)),t=r;Un(e.heap,t,s)}function Wm(e,t){let r,n;for(n=e.heap.size,Cm(e.heap,t);n>0;){if(r=n,n=~~((n-1)/2),Kl(pr(e.heap,n),t)<=0)return Un(e.heap,r,t),!0;Un(e.heap,r,pr(e.heap,n))}return Un(e.heap,n,t),!0}function Qm(e){if(e.heap.size===0)return null;let t=pr(e.heap,0);return qm(e),t}function qm(e){let t=Pm(e.heap,e.heap.size-1);0<e.heap.size&&(Un(e.heap,0,t),Om(e,0))}function jm(e,t){return Gm(e.heap,t)}function zf(e){this.heap=new Im,this.cmp=e}st(239,1,{},zf);H.cmp=null;H.heap=null;var qs=Ef(\"java.lang.\",\"Object\",1,null),Cf=wf(\"[Ljava.lang.\",\"Object;\",356,qs),Km=Ef(\"cs.threephase.\",\"FullCube\",160,qs),Vm=wf(\"[Lcs.threephase.\",\"FullCube;\",381,Km),Mf,Pf=!1;function Gf(){Pf||(Pf=!0,bm(),Em(),Kg(),$g(),tm(),cm(),sm(),Lm(),ym(),Mf=new Bf)}function js(){Gf(),bf()}function Do(){return D(this,null,function*(){ft(),Gf();let e=z.fromString(wm(Mf,yield it()));return(yield Ln()).concat(e)})}var Hm=[[null,\"x\",\"x2\",\"x'\",\"z\",\"z'\"],[null,\"y\",\"y2\",\"y'\"]];function If(){return D(this,null,function*(){return nn(yield Do(),Hm)})}Hs();var Xm=2,_f=null;function Jm(){return D(this,null,function*(){return _f||(_f=(()=>D(this,null,function*(){let t=yield(yield Promise.resolve().then(()=>(Hs(),Nf))).cachedSGSDataMegaminx();return new Ot(yield Jl(),t,[\"U\",\"R\",\"F\",\"L\",\"BR\",\"BL\",\"FR\",\"FL\",\"DR\",\"DL\",\"B\",\"D\"])}))())})}function Of(e){return D(this,null,function*(){ft();let t=yield Jm(),r=JSON.parse(JSON.stringify(e));return r.CENTERS.orientation=new Array(12).fill(0),yield t.solve(r,Xm,()=>5)})}rn();Xs();var ep=3,qf=null;function tp(){return D(this,null,function*(){return qf||(qf=(()=>D(this,null,function*(){let t=yield(yield Promise.resolve().then(()=>(Xs(),Qf))).sgsDataPyraminx();return new Ot(yield Ut.pyraminx.def(),t,\"RLUB\".split(\"\"))}))())})}function Js(e){return D(this,null,function*(){return ft(),yield(yield tp()).solve(e,ep,()=>3)})}function rp(){return D(this,null,function*(){return il(yield Ut.pyraminx.def(),yield Zs())})}function jf(){return D(this,null,function*(){return Js(yield rp())})}ra();var lp=3,Hf=null;function ip(){return D(this,null,function*(){return Hf||(Hf=(()=>D(this,null,function*(){let e=yield Promise.resolve().then(()=>(ra(),Vf)),t=yield e.sgsDataSkewb();return new Ot(yield e.skewbDefWithoutMOCached(),t,\"RLUB\".split(\"\"))}))())})}function sp(e){return{CORNERS:e.CORNERS,CENTERS:{permutation:e.CENTERS.permutation,orientation:new Array(6).fill(0)}}}function na(e){return D(this,null,function*(){return ft(),yield(yield ip()).solve(sp(e),lp,n=>n.family===\"y\"?4:3)})}function ap(){return D(this,null,function*(){return il(yield $l(),yield ta())})}function Yf(){return D(this,null,function*(){return na(yield ap())})}he();function up(e){switch(e){case 5:return 60;case 6:return 80;default:return 100}}var fp=[[\"U\",\"D\"],[\"L\",\"R\"],[\"F\",\"B\"]],Zf=new Map;function cp(e){let t=Zf.get(e);if(t)return t;let r=[];for(let n of fp){let o=[];r.push(o);for(let l of n){o.push(new I(l)),e>3&&o.push(new I(`${l}w`));for(let i=3;i<=e/2;i++)o.push(new I(`${l}w`,i))}}return Zf.set(e,r),r}function Ht(e){return D(this,null,function*(){let t=yield it(),r=yield _t(),n=r,o=cp(e),l=up(e),i=new at,s=0,u=new Set;for(;i.experimentalNumUnits()<l;){let a=t(3);a!==s&&u.clear(),s=a;let f=r(o[s]),c=f.toString();u.has(c)||(u.add(c),i.push(new d(f,n([1,2,-1]))))}return i.toAlg()})}var gp=[[null,\"3Rw\",\"3Rw2\",\"3Rw'\",\"3Fw\",\"3Fw'\"],[null,\"3Dw\",\"3Dw2\",\"3Dw'\"]];function Xf(){return D(this,null,function*(){return nn(yield Ht(5),gp)})}he();function mp(e,t){e.ul=t.ul,e.ur=t.ur,e.dl=t.dl,e.dr=t.dr,e.ml=t.ml}function Jf(e,t){var r;t<<=2,t>24?(t=48-t,r=e.ul,e.ul=(~~e.ul>>t|e.ur<<24-t)&16777215,e.ur=(~~e.ur>>t|r<<24-t)&16777215):t>0?(r=e.ul,e.ul=(e.ul<<t|~~e.ur>>24-t)&16777215,e.ur=(e.ur<<t|~~r>>24-t)&16777215):t==0?(r=e.ur,e.ur=e.dl,e.dl=r,e.ml=1-e.ml):t>=-24?(t=-t,r=e.dl,e.dl=(e.dl<<t|~~e.dr>>24-t)&16777215,e.dr=(e.dr<<t|~~r>>24-t)&16777215):t<-24&&(t=48+t,r=e.dl,e.dl=(~~e.dl>>t|e.dr<<24-t)&16777215,e.dr=(~~e.dr>>t|r<<24-t)&16777215)}function pp(e){var t,r,n,o,l;for(n=0,e.arr[0]=zt(e,0),o=1;o<24;++o)zt(e,o)!=e.arr[n]&&(e.arr[++n]=zt(e,o));for(l=0,t=0;t<16;++t)for(r=t+1;r<16;++r)e.arr[t]>e.arr[r]&&(l^=1);return l}function dp(e){var t,r,n,o;return o=e.ur&1118481,o|=~~o>>3,o|=~~o>>6,o=o&15|~~o>>12&48,n=e.ul&1118481,n|=~~n>>3,n|=~~n>>6,n=n&15|~~n>>12&48,r=e.dr&1118481,r|=~~r>>3,r|=~~r>>6,r=r&15|~~r>>12&48,t=e.dl&1118481,t|=~~t>>3,t|=~~t>>6,t=t&15|~~t>>12&48,Fo(pp(e)<<24|n<<18|o<<12|t<<6|r)}function Lp(e,t){var r,n;for(r=0;r<8;++r)e.prm[r]=~~(~~zt(e,r*3+1)>>1<<24)>>24;for(t.cornperm=So(e.prm),t.topEdgeFirst=zt(e,0)==zt(e,1),r=t.topEdgeFirst?2:0,n=0;n<4;r+=3,++n)e.prm[n]=~~(~~zt(e,r)>>1<<24)>>24;for(t.botEdgeFirst=zt(e,12)==zt(e,13),r=t.botEdgeFirst?14:12;n<8;r+=3,++n)e.prm[n]=~~(~~zt(e,r)>>1<<24)>>24;t.edgeperm=So(e.prm),t.ml=e.ml}function zt(e,t){var r;return t<6?r=~~e.ul>>(5-t<<2):t<12?r=~~e.ur>>(11-t<<2):t<18?r=~~e.dl>>(17-t<<2):r=~~e.dr>>(23-t<<2),~~((r&15)<<24)>>24}function oa(e,t,r){t<6?(e.ul&=~(15<<(5-t<<2)),e.ul|=r<<(5-t<<2)):t<12?(e.ur&=~(15<<(11-t<<2)),e.ur|=r<<(11-t<<2)):t<18?(e.dl&=~(15<<(17-t<<2)),e.dl|=r<<(17-t<<2)):(e.dr&=~(15<<(23-t<<2)),e.dr|=r<<(23-t<<2))}function la(){this.arr=[],this.prm=[]}function hp(){return D(this,null,function*(){let e=yield it();var t,r,n,o,l,i,s,u,a;for(t=new la,n=kn[e(3678)],l=19088743<<1|286331153,o=19088743<<1,s=i=8,r=0;r<24;r++)(n>>r&1)==0?(u=e(i)<<2,oa(t,23-r,o>>u&15),a=(1<<u)-1,o=(o&a)+(o>>4&~a),--i):(u=e(s)<<2,oa(t,23-r,l>>u&15),oa(t,22-r,l>>u&15),a=(1<<u)-1,l=(l&a)+(l>>4&~a),--s,++r);return t.ml=e(2),t})}function Rp(){}var be=la.prototype=Rp.prototype;be.dl=10062778;be.dr=14536702;be.ml=0;be.ul=70195;be.ur=4544119;function Ap(e){var t,r,n,o,l,i;for(mp(e.Search_d,e.Search_c),n=0;n<e.Search_length1;++n)Jf(e.Search_d,e.Search_move[n]);for(Lp(e.Search_d,e.Search_sq),r=e.Search_sq.edgeperm,t=e.Search_sq.cornperm,l=e.Search_sq.ml,i=Math.max(ye[e.Search_sq.edgeperm<<1|l],ye[e.Search_sq.cornperm<<1|l]),n=i;n<e.Search_maxlen2;++n)if(ti(e,r,t,e.Search_sq.topEdgeFirst,e.Search_sq.botEdgeFirst,l,n,e.Search_length1,0)){for(o=0;o<n;++o)Jf(e.Search_d,e.Search_move[e.Search_length1+o]);return e.Search_sol_string=yp(e,n+e.Search_length1),!0}return!1}function yp(e,t){for(var r=\"\",n=0,o=0,l=t-1;l>=0;l--){var i=e.Search_move[l];i>0?(i=12-i,n=i>6?i-12:i):i<0?(i=12+i,o=i>6?i-12:i):(n==0&&o==0?r+=\" / \":r+=\"(\"+n+\", \"+o+\") / \",n=o=0)}return(n!==0||o!==0)&&(r+=\"(\"+n+\", \"+o+\")\"),r}function ei(e,t,r,n,o,l){var i,s,u;if(r==0&&n<4)return n==0&&Ap(e);if(l!=0&&(u=ri[t],s=Ee[u],s<n&&(e.Search_move[o]=0,ei(e,u,s,n-1,o+1,0))))return!0;if(u=t,l<=0){for(i=0;i+=bo[u],u=~~i>>4,i&=15,!(i>=12||(s=Ee[u],s>n));)if(s<n&&(e.Search_move[o]=i,ei(e,u,s,n-1,o+1,1)))return!0}if(u=t,l<=1){for(i=0;i+=Bo[u],u=~~i>>4,i&=15,!(i>=6||(s=Ee[u],s>n));)if(s<n&&(e.Search_move[o]=-i,ei(e,u,s,n-1,o+1,2)))return!0}return!1}function ti(e,t,r,n,o,l,i,s,u){var a,f,c,g,m,L,p;if(i==0&&!n&&o||u!=0&&n==o&&(c=vo[t],f=vo[r],ye[c<<1|1-l]<i&&ye[f<<1|1-l]<i&&(e.Search_move[s]=0,ti(e,c,f,n,o,1-l,i-1,s+1,0))))return!0;if(u<=0)for(p=!n,c=p?Pr[t]:t,f=p?r:Pr[r],g=p?1:2,m=ye[c<<1|l],L=ye[f<<1|l];g<12&&m<=i&&m<=i;){if(m<i&&L<i&&(e.Search_move[s]=g,ti(e,c,f,p,o,l,i-1,s+1,1)))return!0;p=!p,p?(c=Pr[c],m=ye[c<<1|l],g+=1):(f=Pr[f],L=ye[f<<1|l],g+=2)}if(u<=1)for(a=!o,c=a?Cr[t]:t,f=a?r:Cr[r],g=a?1:2,m=ye[c<<1|l],L=ye[f<<1|l];g<(i>3?6:12)&&m<=i&&m<=i;){if(m<i&&L<i&&(e.Search_move[s]=-g,ti(e,c,f,n,a,l,i-1,s+1,2)))return!0;a=!a,a?(c=Cr[c],m=ye[c<<1|l],g+=1):(f=Cr[f],L=ye[f<<1|l],g+=2)}return!1}function Dp(e,t){var r;for(e.Search_c=t,r=dp(t),e.Search_length1=Ee[r];e.Search_length1<100&&(e.Search_maxlen2=Math.min(31-e.Search_length1,17),!ei(e,r,Ee[r],e.Search_length1,0,-1));++e.Search_length1);return e.Search_sol_string}function $f(){this.Search_move=[],this.Search_d=new la,this.Search_sq=new n1}function Fp(){}be=$f.prototype=Fp.prototype;be.Search_c=null;be.Search_length1=0;be.Search_maxlen2=0;be.Search_sol_string=null;var e1=!1;function Bp(){e1||(e1=!0,xo=[0,3,6,12,15,24,27,30,48,51,54,60,63],kn=[],Ee=[],bo=[],Bo=[],ri=[],Sp())}function bp(e){var t,r;t=0,r=0;do(e.bottom&2048)==0?(t+=1,e.bottom=e.bottom<<1):(t+=2,e.bottom=e.bottom<<2^12291),r=1-r;while((Gr(e.bottom&63)&1)!=0);return(Gr(e.bottom)&2)==0&&(e.Shape_parity^=r),t}function ia(e){var t;return t=l1(kn,e.top<<12|e.bottom)<<1|e.Shape_parity,t}function sa(e,t){e.Shape_parity=t&1,e.top=kn[~~t>>1],e.bottom=e.top&4095,e.top>>=12}function xp(e){var t,r;t=0,r=0;do(e.top&2048)==0?(t+=1,e.top=e.top<<1):(t+=2,e.top=e.top<<2^12291),r=1-r;while((Gr(e.top&63)&1)!=0);return(Gr(e.top)&2)==0&&(e.Shape_parity^=r),t}function t1(){}function Fo(e){var t;return t=l1(kn,e&16777215)<<1|~~e>>24,t}function Sp(){var e,t,r,n,o,l,i,s,u,a,f,c,g,m,L,p;for(e=0,i=0;i<28561;++i)l=xo[i%13],r=xo[~~(i/13)%13],c=xo[~~(~~(i/13)/13)%13],f=xo[~~(~~(~~(i/13)/13)/13)],g=f<<18|c<<12|r<<6|l,Gr(g)==16&&(kn[e++]=g);for(a=new t1,i=0;i<7356;++i)sa(a,i),bo[i]=xp(a),bo[i]|=ia(a)<<4,sa(a,i),Bo[i]=bp(a),Bo[i]|=ia(a)<<4,sa(a,i),p=a.top&63,m=Gr(p),L=Gr(a.bottom&4032),a.Shape_parity^=1&~~(m&L)>>1,a.top=a.top&4032|~~a.bottom>>6&63,a.bottom=a.bottom&63|p<<6,ri[i]=ia(a);for(i=0;i<7536;++i)Ee[i]=-1;for(Ee[Fo(14378715)]=0,Ee[Fo(31157686)]=0,Ee[Fo(23967451)]=0,Ee[Fo(7191990)]=0,n=4,o=0,t=-1;n!=o;)for(o=n,++t,i=0;i<7536;++i)if(Ee[i]==t){u=0,s=i;do s=bo[s],u+=s&15,s>>=4,Ee[s]==-1&&(++n,Ee[s]=t+1);while(u!=12);u=0,s=i;do s=Bo[s],u+=s&15,s>>=4,Ee[s]==-1&&(++n,Ee[s]=t+1);while(u!=12);s=ri[i],Ee[s]==-1&&(++n,Ee[s]=t+1)}}function vp(){}be=t1.prototype=vp.prototype;be.bottom=0;be.Shape_parity=0;be.top=0;var Bo,kn,Ee,bo,ri,xo,r1=!1;function wp(){if(!r1){r1=!0,ye=[],vo=[],Pr=[],Cr=[],o1=[1,1,2,6,24,120,720,5040],Mr=[];for(var e=0;e<12;++e)Mr[e]=[];Ep()}}function n1(){}function So(e){var t,r,n,o;for(r=0,o=1985229328,t=0;t<7;++t)n=e[t]<<2,r=(8-t)*r+(~~o>>n&7),o-=286331152<<n;return r&65535}function Ep(){var e,t,r,n,o,l,i,s,u,a,f,c,g;for(o=0;o<12;++o)for(Mr[o][0]=1,Mr[o][o]=1,u=1;u<o;++u)Mr[o][u]=Mr[o-1][u-1]+Mr[o-1][u];for(c=[],o=0;o<40320;++o)aa(c,o),g=c[2],c[2]=c[4],c[4]=g,g=c[3],c[3]=c[5],c[5]=g,vo[o]=So(c),aa(c,o),g=c[0],c[0]=c[1],c[1]=c[2],c[2]=c[3],c[3]=g,Pr[o]=So(c),aa(c,o),g=c[4],c[4]=c[5],c[5]=c[6],c[6]=c[7],c[7]=g,Cr[o]=So(c);for(o=0;o<80640;++o)ye[o]=-1;for(ye[0]=0,t=0,r=1;r<80640;){s=t>=11,n=s?-1:t,e=s?t:-1,++t;e:for(o=0;o<80640;++o)if(ye[o]==n){if(l=~~o>>1,f=o&1,i=vo[l]<<1|1-f,ye[i]==e&&(++r,ye[s?o:i]=~~(t<<24)>>24,s))continue e;for(i=l,a=0;a<4;++a)if(i=Pr[i],ye[i<<1|f]==e&&(++r,ye[s?o:i<<1|f]=~~(t<<24)>>24,s))continue e;for(a=0;a<4;++a)if(i=Cr[i],ye[i<<1|f]==e&&(++r,ye[s?o:i<<1|f]=~~(t<<24)>>24,s))continue e}}}function aa(e,t){var r,n,o,l,i;for(i=1985229328,r=0;r<7;++r)o=o1[7-r],l=~~(t/o),t-=l*o,l<<=2,e[r]=~~((~~i>>l&7)<<24)>>24,n=(1<<l)-1,i=(i&n)+(~~i>>4&~n);e[7]=~~(i<<24)>>24}function Up(){}be=n1.prototype=Up.prototype;be.botEdgeFirst=!1;be.cornperm=0;be.edgeperm=0;be.ml=0;be.topEdgeFirst=!1;var Cr,Mr,ye,Pr,vo,o1;function Gr(e){return e-=~~e>>1&1431655765,e=(~~e>>2&858993459)+(e&858993459),e=(~~e>>4)+e&252645135,e+=~~e>>8,e+=~~e>>16,e&63}function l1(e,t){var r,n,o,l;for(n=0,r=e.length-1;n<=r;)if(o=n+(~~(r-n)>>1),l=e[o],l<t)n=o+1;else if(l>t)r=o-1;else return o;return-n-1}var ua=!1,kp=function(e,t,r){ua||(Bp(),wp()),r&&r(\"Done initializing Square-1.\"),ua=!0,e!=null&&e()},zp=function(){return D(this,null,function*(){return ua||kp(),hp()})},Cp=function(e){var t=new $f;return Dp(t,e)},Mp=function(){return D(this,null,function*(){var e=yield zp(),t=Cp(e);return{state:e,scramble_string:t}})};function i1(){return D(this,null,function*(){return(yield Mp()).scramble_string})}function s1(){return D(this,null,function*(){return z.fromString(yield i1())})}x2(!0);var a1=!0;function Pp(e){a1=e}function u1(){return(typeof performance==\"undefined\"?Date:performance).now()}function Oe(e,t){return D(this,null,function*(){if(!a1)return t();let r=u1(),n=t();(n==null?void 0:n.then)&&(yield n);let o=u1();return console.warn(`${e}: ${Math.round(o-r)}ms`),n})}var fa={initialize:e=>D(void 0,null,function*(){switch(e){case\"222\":return Oe(\"preInitialize222\",T2);case\"333\":case\"333oh\":case\"333ft\":return Oe(\"initialize333\",xu);case\"444\":return Oe(\"initialize444\",js);default:throw new Error(`unsupported event: ${e}`)}}),randomScrambleForEvent:e=>D(void 0,null,function*(){switch(e){case\"222\":return Oe(\"random222Scramble\",N2);case\"333\":case\"333oh\":case\"333ft\":return Oe(\"random333Scramble\",Ln);case\"333fm\":return Oe(\"random333FewestMovesScramble\",wu);case\"333bf\":return Oe(\"random333OrientedScramble\",Su);case\"444\":return Oe(\"random444Scramble\",Do);case\"444bf\":return Oe(\"random444OrientedScramble\",If);case\"555\":return Oe(\"bigCubeScramble(5)\",Ht.bind(Ht,5));case\"555bf\":return Oe(\"oriented555RandomMoves\",Xf);case\"666\":return Oe(\"bigCubeScramble(6)\",Ht.bind(Ht,6));case\"777\":return Oe(\"bigCubeScramble(7)\",Ht.bind(Ht,7));case\"skewb\":return Oe(\"randomSkewbFixedCornerScramble\",Yf);case\"pyram\":return Oe(\"randomPyraminxScrambleFixedOrientation\",jf);case\"sq1\":return Oe(\"getRandomSquare1Scramble\",s1);default:throw new Error(`unsupported event: ${e}`)}}),randomScrambleStringForEvent:e=>D(void 0,null,function*(){return(yield fa.randomScrambleForEvent(e)).toString()}),solve333ToString:e=>D(void 0,null,function*(){return(yield As(e)).toString()}),solve222ToString:e=>D(void 0,null,function*(){return(yield Yi(e)).toString()}),solveSkewbToString:e=>D(void 0,null,function*(){return(yield na(e)).toString()}),solvePyraminxToString:e=>D(void 0,null,function*(){return(yield Js(e)).toString()}),solveMegaminxToString:e=>D(void 0,null,function*(){return(yield Of(e)).toString()}),setDebugMeasurePerf:e=>D(void 0,null,function*(){Pp(e)})};ba(fa);\n";
|