lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
169 lines • 70.7 kB
TypeScript
/**
* @module Utils
*/
import { ScrollDirection, ScrollTarget, TargetCoordinates, CoordinateOffset, ScrollPosition } from "../globals/types.cjs";
/**
* @category Scrolling
*/
export type ScrollAction = {
cancel: () => boolean;
/**
* Will reject if the scroll is cancelled.
*/
waitFor: () => Promise<ScrollPosition>;
};
/**
* @category Scrolling
* @interface
*/
export type ScrollToOptions = {
/**
* The element that should be scrolled.
*
* @defaultValue If `document.body` is scrollable, will use that; otherwise `document.scrollingElement`
*/
scrollable?: Element;
/**
* Offset the target coordinates by the given amount(s).
*
* E.g. if the final target coordinates are computed to be
* `{top: 100, left: 0}` and you specify offset as `{top: 10, left: 20}`, it
* will scroll to `{top: 110, left: 20}`.
*
* @defaultValue undefined
*/
offset?: CoordinateOffset;
/**
* The duration of the scroll animation in milliseconds. If not given, it is
* instant.
*
* @defaultValue 0
*/
duration?: number;
/**
* Whether another request to us to scroll the same target can interrupt this
* scroll before it finishes.
*
* @defaultValue false
*/
weCanInterrupt?: boolean;
/**
* Whether a user attempt to scroll the target can interrupt this before it
* finishes.
*
* @defaultValue false
*/
userCanInterrupt?: boolean;
/**
* If the scrolling element is already at the given coordinates (or strictly
* speaking we allow for 5 pixels difference), then if `altTarget` is given,
* this will become the target to scroll to.
*
* @defaultValue undefined
*/
altTarget?: TargetCoordinates | Element | string;
/**
* Offset the target coordinates by the given amount(s) when `altTarget` is used.
*
* See {@link ScrollToOptions.offset}.
*
* @defaultValue undefined
*/
altOffset?: CoordinateOffset;
};
/**
* Returns true if the given element is scrollable in the given direction, or
* in either direction (if `axis` is not given).
*
* It first checks whether the current scroll offset on the target along the
* given axis is non-0, and if so returns true immediately. Otherwise it will
* attempt to determine if it's scrollable using one of these methods
* (controlled by `options.active`):
* - passive check (default): Will examine `clientWidth/Height`,
* `scrollWidth/Height` as well as the computed `overflow` CSS property to try
* to determine if the target is scrollable. This is not 100% reliable but is
* safer than the active check
* - active check: Will attempt to scroll the target by 1px and examine if the
* scroll offset had changed, then revert it back to 0. This is a more
* reliable check, however it can cause issues in certain contexts. In
* particular, if a scroll on the target had just been initiated (but it's
* scroll offset was still 0), the scroll may be cancelled. Never use that
* inside scroll-based handlers.
*
* **NOTE:** If the layout has been invalidated and not yet recalculated, this
* will cause a forced layout, so always {@link waitForMeasureTime} before
* calling this function when possible.
*
* @param [options.axis] One of "x" or "y" for horizontal or vertical scroll
* respectively. If not given, it checks both.
* @param [options.active] If true, then if the target's current scroll offset
* is 0, it will attempt to scroll it rather than
* looking at its overflow.
* @param [options.noCache] By default the result of a check is cached for 1s
* and if there's already a cached result for this
* element, it is returned. Set this to true to disable
* checking the cache and also saving the result into
* the cache.
*
* @category Scrolling
*/
export declare const isScrollable: (element: Element, options?: {
axis?: "x" | "y";
active?: boolean;
noCache?: boolean;
}) => boolean;
/**
* Returns the closest scrollable ancestor of the given element, _not including
* it_.
*
* @param options See {@link isScrollable}
*
* @returns `null` if no scrollable ancestors are found.
*
* @category Scrolling
*/
export declare const getClosestScrollable: (element: Element, options?: {
axis?: "x" | "y";
active?: boolean;
noCache?: boolean;
}) => Element | null;
/**
* Returns the current {@link ScrollAction} if any.
*
* @category Scrolling
*/
export declare const getCurrentScrollAction: (scrollable?: Element) => ScrollAction | null;
/**
* Scrolls the given scrollable element to the given `to` target.
*
* Returns `null` if there's an ongoing scroll that is not cancellable.
*
* Note that if `to` is an element or a query selector string, then it _must_ be
* a descendant of the scrollable element.
*
* @throws {@link Errors.LisnUsageError | LisnUsageError}
* If the target coordinates are invalid.
*
* @param to If this is an element, then its top-left position is used as
* the target coordinates. If it is a string, then it is treated
* as a selector for an element using `querySelector`.
*
* @returns `null` if there's an ongoing scroll that is not cancellable,
* otherwise a {@link ScrollAction}.
*
* @category Scrolling
*/
export declare const scrollTo: (to: TargetCoordinates | Element | string, userOptions?: ScrollToOptions) => ScrollAction | null;
/**
* Returns true if the given string is a valid scroll direction.
*
* @category Validation
*/
export declare const isValidScrollDirection: (direction: string) => direction is ScrollDirection;
/**
* Returns true if the given string or array is a list of valid scroll
* directions.
*
* @category Validation
*/
export declare const isValidScrollDirectionList: (directions: string | string[]) => directions is "none" | "left" | "right" | "up" | "down" | "ambiguous" | "up,down" | "down,up" | "right,up" | "right,down" | "right,up,down" | "right,down,up" | "down,right" | "up,right" | "up,right,down" | "up,down,right" | "down,right,up" | "down,up,right" | "left,right" | "left,up" | "left,down" | "left,up,down" | "left,down,up" | "left,right,up" | "left,right,down" | "left,right,up,down" | "left,right,down,up" | "left,down,right" | "left,up,right" | "left,up,right,down" | "left,up,down,right" | "left,down,right,up" | "left,down,up,right" | "down,left" | "up,left" | "up,left,down" | "up,down,left" | "down,left,up" | "down,up,left" | "right,left" | "right,left,up" | "right,left,down" | "right,left,up,down" | "right,left,down,up" | "right,down,left" | "right,up,left" | "right,up,left,down" | "right,up,down,left" | "right,down,left,up" | "right,down,up,left" | "down,left,right" | "down,right,left" | "up,left,right" | "up,left,right,down" | "up,left,down,right" | "up,right,left" | "up,right,left,down" | "up,right,down,left" | "up,down,left,right" | "up,down,right,left" | "down,left,right,up" | "down,left,up,right" | "down,right,left,up" | "down,right,up,left" | "down,up,left,right" | "down,up,right,left" | "ambiguous,left" | "ambiguous,right" | "ambiguous,up" | "ambiguous,down" | "ambiguous,up,down" | "ambiguous,down,up" | "ambiguous,right,up" | "ambiguous,right,down" | "ambiguous,right,up,down" | "ambiguous,right,down,up" | "ambiguous,down,right" | "ambiguous,up,right" | "ambiguous,up,right,down" | "ambiguous,up,down,right" | "ambiguous,down,right,up" | "ambiguous,down,up,right" | "ambiguous,left,right" | "ambiguous,left,up" | "ambiguous,left,down" | "ambiguous,left,up,down" | "ambiguous,left,down,up" | "ambiguous,left,right,up" | "ambiguous,left,right,down" | "ambiguous,left,right,up,down" | "ambiguous,left,right,down,up" | "ambiguous,left,down,right" | "ambiguous,left,up,right" | "ambiguous,left,up,right,down" | "ambiguous,left,up,down,right" | "ambiguous,left,down,right,up" | "ambiguous,left,down,up,right" | "ambiguous,down,left" | "ambiguous,up,left" | "ambiguous,up,left,down" | "ambiguous,up,down,left" | "ambiguous,down,left,up" | "ambiguous,down,up,left" | "ambiguous,right,left" | "ambiguous,right,left,up" | "ambiguous,right,left,down" | "ambiguous,right,left,up,down" | "ambiguous,right,left,down,up" | "ambiguous,right,down,left" | "ambiguous,right,up,left" | "ambiguous,right,up,left,down" | "ambiguous,right,up,down,left" | "ambiguous,right,down,left,up" | "ambiguous,right,down,up,left" | "ambiguous,down,left,right" | "ambiguous,down,right,left" | "ambiguous,up,left,right" | "ambiguous,up,left,right,down" | "ambiguous,up,left,down,right" | "ambiguous,up,right,left" | "ambiguous,up,right,left,down" | "ambiguous,up,right,down,left" | "ambiguous,up,down,left,right" | "ambiguous,up,down,right,left" | "ambiguous,down,left,right,up" | "ambiguous,down,left,up,right" | "ambiguous,down,right,left,up" | "ambiguous,down,right,up,left" | "ambiguous,down,up,left,right" | "ambiguous,down,up,right,left" | "down,ambiguous" | "up,ambiguous" | "up,ambiguous,down" | "up,down,ambiguous" | "down,ambiguous,up" | "down,up,ambiguous" | "right,ambiguous" | "right,ambiguous,up" | "right,ambiguous,down" | "right,ambiguous,up,down" | "right,ambiguous,down,up" | "right,down,ambiguous" | "right,up,ambiguous" | "right,up,ambiguous,down" | "right,up,down,ambiguous" | "right,down,ambiguous,up" | "right,down,up,ambiguous" | "down,ambiguous,right" | "down,right,ambiguous" | "up,ambiguous,right" | "up,ambiguous,right,down" | "up,ambiguous,down,right" | "up,right,ambiguous" | "up,right,ambiguous,down" | "up,right,down,ambiguous" | "up,down,ambiguous,right" | "up,down,right,ambiguous" | "down,ambiguous,right,up" | "down,ambiguous,up,right" | "down,right,ambiguous,up" | "down,right,up,ambiguous" | "down,up,ambiguous,right" | "down,up,right,ambiguous" | "left,ambiguous" | "left,ambiguous,right" | "left,ambiguous,up" | "left,ambiguous,down" | "left,ambiguous,up,down" | "left,ambiguous,down,up" | "left,ambiguous,right,up" | "left,ambiguous,right,down" | "left,ambiguous,right,up,down" | "left,ambiguous,right,down,up" | "left,ambiguous,down,right" | "left,ambiguous,up,right" | "left,ambiguous,up,right,down" | "left,ambiguous,up,down,right" | "left,ambiguous,down,right,up" | "left,ambiguous,down,up,right" | "left,down,ambiguous" | "left,up,ambiguous" | "left,up,ambiguous,down" | "left,up,down,ambiguous" | "left,down,ambiguous,up" | "left,down,up,ambiguous" | "left,right,ambiguous" | "left,right,ambiguous,up" | "left,right,ambiguous,down" | "left,right,ambiguous,up,down" | "left,right,ambiguous,down,up" | "left,right,down,ambiguous" | "left,right,up,ambiguous" | "left,right,up,ambiguous,down" | "left,right,up,down,ambiguous" | "left,right,down,ambiguous,up" | "left,right,down,up,ambiguous" | "left,down,ambiguous,right" | "left,down,right,ambiguous" | "left,up,ambiguous,right" | "left,up,ambiguous,right,down" | "left,up,ambiguous,down,right" | "left,up,right,ambiguous" | "left,up,right,ambiguous,down" | "left,up,right,down,ambiguous" | "left,up,down,ambiguous,right" | "left,up,down,right,ambiguous" | "left,down,ambiguous,right,up" | "left,down,ambiguous,up,right" | "left,down,right,ambiguous,up" | "left,down,right,up,ambiguous" | "left,down,up,ambiguous,right" | "left,down,up,right,ambiguous" | "down,ambiguous,left" | "down,left,ambiguous" | "up,ambiguous,left" | "up,ambiguous,left,down" | "up,ambiguous,down,left" | "up,left,ambiguous" | "up,left,ambiguous,down" | "up,left,down,ambiguous" | "up,down,ambiguous,left" | "up,down,left,ambiguous" | "down,ambiguous,left,up" | "down,ambiguous,up,left" | "down,left,ambiguous,up" | "down,left,up,ambiguous" | "down,up,ambiguous,left" | "down,up,left,ambiguous" | "right,ambiguous,left" | "right,ambiguous,left,up" | "right,ambiguous,left,down" | "right,ambiguous,left,up,down" | "right,ambiguous,left,down,up" | "right,ambiguous,down,left" | "right,ambiguous,up,left" | "right,ambiguous,up,left,down" | "right,ambiguous,up,down,left" | "right,ambiguous,down,left,up" | "right,ambiguous,down,up,left" | "right,left,ambiguous" | "right,left,ambiguous,up" | "right,left,ambiguous,down" | "right,left,ambiguous,up,down" | "right,left,ambiguous,down,up" | "right,left,down,ambiguous" | "right,left,up,ambiguous" | "right,left,up,ambiguous,down" | "right,left,up,down,ambiguous" | "right,left,down,ambiguous,up" | "right,left,down,up,ambiguous" | "right,down,ambiguous,left" | "right,down,left,ambiguous" | "right,up,ambiguous,left" | "right,up,ambiguous,left,down" | "right,up,ambiguous,down,left" | "right,up,left,ambiguous" | "right,up,left,ambiguous,down" | "right,up,left,down,ambiguous" | "right,up,down,ambiguous,left" | "right,up,down,left,ambiguous" | "right,down,ambiguous,left,up" | "right,down,ambiguous,up,left" | "right,down,left,ambiguous,up" | "right,down,left,up,ambiguous" | "right,down,up,ambiguous,left" | "right,down,up,left,ambiguous" | "down,ambiguous,left,right" | "down,ambiguous,right,left" | "down,left,ambiguous,right" | "down,left,right,ambiguous" | "down,right,ambiguous,left" | "down,right,left,ambiguous" | "up,ambiguous,left,right" | "up,ambiguous,left,right,down" | "up,ambiguous,left,down,right" | "up,ambiguous,right,left" | "up,ambiguous,right,left,down" | "up,ambiguous,right,down,left" | "up,ambiguous,down,left,right" | "up,ambiguous,down,right,left" | "up,left,ambiguous,right" | "up,left,ambiguous,right,down" | "up,left,ambiguous,down,right" | "up,left,right,ambiguous" | "up,left,right,ambiguous,down" | "up,left,right,down,ambiguous" | "up,left,down,ambiguous,right" | "up,left,down,right,ambiguous" | "up,right,ambiguous,left" | "up,right,ambiguous,left,down" | "up,right,ambiguous,down,left" | "up,right,left,ambiguous" | "up,right,left,ambiguous,down" | "up,right,left,down,ambiguous" | "up,right,down,ambiguous,left" | "up,right,down,left,ambiguous" | "up,down,ambiguous,left,right" | "up,down,ambiguous,right,left" | "up,down,left,ambiguous,right" | "up,down,left,right,ambiguous" | "up,down,right,ambiguous,left" | "up,down,right,left,ambiguous" | "down,ambiguous,left,right,up" | "down,ambiguous,left,up,right" | "down,ambiguous,right,left,up" | "down,ambiguous,right,up,left" | "down,ambiguous,up,left,right" | "down,ambiguous,up,right,left" | "down,left,ambiguous,right,up" | "down,left,ambiguous,up,right" | "down,left,right,ambiguous,up" | "down,left,right,up,ambiguous" | "down,left,up,ambiguous,right" | "down,left,up,right,ambiguous" | "down,right,ambiguous,left,up" | "down,right,ambiguous,up,left" | "down,right,left,ambiguous,up" | "down,right,left,up,ambiguous" | "down,right,up,ambiguous,left" | "down,right,up,left,ambiguous" | "down,up,ambiguous,left,right" | "down,up,ambiguous,right,left" | "down,up,left,ambiguous,right" | "down,up,left,right,ambiguous" | "down,up,right,ambiguous,left" | "down,up,right,left,ambiguous" | "none,left" | "none,right" | "none,up" | "none,down" | "none,ambiguous" | "none,up,down" | "none,down,up" | "none,right,up" | "none,right,down" | "none,right,up,down" | "none,right,down,up" | "none,down,right" | "none,up,right" | "none,up,right,down" | "none,up,down,right" | "none,down,right,up" | "none,down,up,right" | "none,left,right" | "none,left,up" | "none,left,down" | "none,left,up,down" | "none,left,down,up" | "none,left,right,up" | "none,left,right,down" | "none,left,right,up,down" | "none,left,right,down,up" | "none,left,down,right" | "none,left,up,right" | "none,left,up,right,down" | "none,left,up,down,right" | "none,left,down,right,up" | "none,left,down,up,right" | "none,down,left" | "none,up,left" | "none,up,left,down" | "none,up,down,left" | "none,down,left,up" | "none,down,up,left" | "none,right,left" | "none,right,left,up" | "none,right,left,down" | "none,right,left,up,down" | "none,right,left,down,up" | "none,right,down,left" | "none,right,up,left" | "none,right,up,left,down" | "none,right,up,down,left" | "none,right,down,left,up" | "none,right,down,up,left" | "none,down,left,right" | "none,down,right,left" | "none,up,left,right" | "none,up,left,right,down" | "none,up,left,down,right" | "none,up,right,left" | "none,up,right,left,down" | "none,up,right,down,left" | "none,up,down,left,right" | "none,up,down,right,left" | "none,down,left,right,up" | "none,down,left,up,right" | "none,down,right,left,up" | "none,down,right,up,left" | "none,down,up,left,right" | "none,down,up,right,left" | "none,ambiguous,left" | "none,ambiguous,right" | "none,ambiguous,up" | "none,ambiguous,down" | "none,ambiguous,up,down" | "none,ambiguous,down,up" | "none,ambiguous,right,up" | "none,ambiguous,right,down" | "none,ambiguous,right,up,down" | "none,ambiguous,right,down,up" | "none,ambiguous,down,right" | "none,ambiguous,up,right" | "none,ambiguous,up,right,down" | "none,ambiguous,up,down,right" | "none,ambiguous,down,right,up" | "none,ambiguous,down,up,right" | "none,ambiguous,left,right" | "none,ambiguous,left,up" | "none,ambiguous,left,down" | "none,ambiguous,left,up,down" | "none,ambiguous,left,down,up" | "none,ambiguous,left,right,up" | "none,ambiguous,left,right,down" | "none,ambiguous,left,right,up,down" | "none,ambiguous,left,right,down,up" | "none,ambiguous,left,down,right" | "none,ambiguous,left,up,right" | "none,ambiguous,left,up,right,down" | "none,ambiguous,left,up,down,right" | "none,ambiguous,left,down,right,up" | "none,ambiguous,left,down,up,right" | "none,ambiguous,down,left" | "none,ambiguous,up,left" | "none,ambiguous,up,left,down" | "none,ambiguous,up,down,left" | "none,ambiguous,down,left,up" | "none,ambiguous,down,up,left" | "none,ambiguous,right,left" | "none,ambiguous,right,left,up" | "none,ambiguous,right,left,down" | "none,ambiguous,right,left,up,down" | "none,ambiguous,right,left,down,up" | "none,ambiguous,right,down,left" | "none,ambiguous,right,up,left" | "none,ambiguous,right,up,left,down" | "none,ambiguous,right,up,down,left" | "none,ambiguous,right,down,left,up" | "none,ambiguous,right,down,up,left" | "none,ambiguous,down,left,right" | "none,ambiguous,down,right,left" | "none,ambiguous,up,left,right" | "none,ambiguous,up,left,right,down" | "none,ambiguous,up,left,down,right" | "none,ambiguous,up,right,left" | "none,ambiguous,up,right,left,down" | "none,ambiguous,up,right,down,left" | "none,ambiguous,up,down,left,right" | "none,ambiguous,up,down,right,left" | "none,ambiguous,down,left,right,up" | "none,ambiguous,down,left,up,right" | "none,ambiguous,down,right,left,up" | "none,ambiguous,down,right,up,left" | "none,ambiguous,down,up,left,right" | "none,ambiguous,down,up,right,left" | "none,down,ambiguous" | "none,up,ambiguous" | "none,up,ambiguous,down" | "none,up,down,ambiguous" | "none,down,ambiguous,up" | "none,down,up,ambiguous" | "none,right,ambiguous" | "none,right,ambiguous,up" | "none,right,ambiguous,down" | "none,right,ambiguous,up,down" | "none,right,ambiguous,down,up" | "none,right,down,ambiguous" | "none,right,up,ambiguous" | "none,right,up,ambiguous,down" | "none,right,up,down,ambiguous" | "none,right,down,ambiguous,up" | "none,right,down,up,ambiguous" | "none,down,ambiguous,right" | "none,down,right,ambiguous" | "none,up,ambiguous,right" | "none,up,ambiguous,right,down" | "none,up,ambiguous,down,right" | "none,up,right,ambiguous" | "none,up,right,ambiguous,down" | "none,up,right,down,ambiguous" | "none,up,down,ambiguous,right" | "none,up,down,right,ambiguous" | "none,down,ambiguous,right,up" | "none,down,ambiguous,up,right" | "none,down,right,ambiguous,up" | "none,down,right,up,ambiguous" | "none,down,up,ambiguous,right" | "none,down,up,right,ambiguous" | "none,left,ambiguous" | "none,left,ambiguous,right" | "none,left,ambiguous,up" | "none,left,ambiguous,down" | "none,left,ambiguous,up,down" | "none,left,ambiguous,down,up" | "none,left,ambiguous,right,up" | "none,left,ambiguous,right,down" | "none,left,ambiguous,right,up,down" | "none,left,ambiguous,right,down,up" | "none,left,ambiguous,down,right" | "none,left,ambiguous,up,right" | "none,left,ambiguous,up,right,down" | "none,left,ambiguous,up,down,right" | "none,left,ambiguous,down,right,up" | "none,left,ambiguous,down,up,right" | "none,left,down,ambiguous" | "none,left,up,ambiguous" | "none,left,up,ambiguous,down" | "none,left,up,down,ambiguous" | "none,left,down,ambiguous,up" | "none,left,down,up,ambiguous" | "none,left,right,ambiguous" | "none,left,right,ambiguous,up" | "none,left,right,ambiguous,down" | "none,left,right,ambiguous,up,down" | "none,left,right,ambiguous,down,up" | "none,left,right,down,ambiguous" | "none,left,right,up,ambiguous" | "none,left,right,up,ambiguous,down" | "none,left,right,up,down,ambiguous" | "none,left,right,down,ambiguous,up" | "none,left,right,down,up,ambiguous" | "none,left,down,ambiguous,right" | "none,left,down,right,ambiguous" | "none,left,up,ambiguous,right" | "none,left,up,ambiguous,right,down" | "none,left,up,ambiguous,down,right" | "none,left,up,right,ambiguous" | "none,left,up,right,ambiguous,down" | "none,left,up,right,down,ambiguous" | "none,left,up,down,ambiguous,right" | "none,left,up,down,right,ambiguous" | "none,left,down,ambiguous,right,up" | "none,left,down,ambiguous,up,right" | "none,left,down,right,ambiguous,up" | "none,left,down,right,up,ambiguous" | "none,left,down,up,ambiguous,right" | "none,left,down,up,right,ambiguous" | "none,down,ambiguous,left" | "none,down,left,ambiguous" | "none,up,ambiguous,left" | "none,up,ambiguous,left,down" | "none,up,ambiguous,down,left" | "none,up,left,ambiguous" | "none,up,left,ambiguous,down" | "none,up,left,down,ambiguous" | "none,up,down,ambiguous,left" | "none,up,down,left,ambiguous" | "none,down,ambiguous,left,up" | "none,down,ambiguous,up,left" | "none,down,left,ambiguous,up" | "none,down,left,up,ambiguous" | "none,down,up,ambiguous,left" | "none,down,up,left,ambiguous" | "none,right,ambiguous,left" | "none,right,ambiguous,left,up" | "none,right,ambiguous,left,down" | "none,right,ambiguous,left,up,down" | "none,right,ambiguous,left,down,up" | "none,right,ambiguous,down,left" | "none,right,ambiguous,up,left" | "none,right,ambiguous,up,left,down" | "none,right,ambiguous,up,down,left" | "none,right,ambiguous,down,left,up" | "none,right,ambiguous,down,up,left" | "none,right,left,ambiguous" | "none,right,left,ambiguous,up" | "none,right,left,ambiguous,down" | "none,right,left,ambiguous,up,down" | "none,right,left,ambiguous,down,up" | "none,right,left,down,ambiguous" | "none,right,left,up,ambiguous" | "none,right,left,up,ambiguous,down" | "none,right,left,up,down,ambiguous" | "none,right,left,down,ambiguous,up" | "none,right,left,down,up,ambiguous" | "none,right,down,ambiguous,left" | "none,right,down,left,ambiguous" | "none,right,up,ambiguous,left" | "none,right,up,ambiguous,left,down" | "none,right,up,ambiguous,down,left" | "none,right,up,left,ambiguous" | "none,right,up,left,ambiguous,down" | "none,right,up,left,down,ambiguous" | "none,right,up,down,ambiguous,left" | "none,right,up,down,left,ambiguous" | "none,right,down,ambiguous,left,up" | "none,right,down,ambiguous,up,left" | "none,right,down,left,ambiguous,up" | "none,right,down,left,up,ambiguous" | "none,right,down,up,ambiguous,left" | "none,right,down,up,left,ambiguous" | "none,down,ambiguous,left,right" | "none,down,ambiguous,right,left" | "none,down,left,ambiguous,right" | "none,down,left,right,ambiguous" | "none,down,right,ambiguous,left" | "none,down,right,left,ambiguous" | "none,up,ambiguous,left,right" | "none,up,ambiguous,left,right,down" | "none,up,ambiguous,left,down,right" | "none,up,ambiguous,right,left" | "none,up,ambiguous,right,left,down" | "none,up,ambiguous,right,down,left" | "none,up,ambiguous,down,left,right" | "none,up,ambiguous,down,right,left" | "none,up,left,ambiguous,right" | "none,up,left,ambiguous,right,down" | "none,up,left,ambiguous,down,right" | "none,up,left,right,ambiguous" | "none,up,left,right,ambiguous,down" | "none,up,left,right,down,ambiguous" | "none,up,left,down,ambiguous,right" | "none,up,left,down,right,ambiguous" | "none,up,right,ambiguous,left" | "none,up,right,ambiguous,left,down" | "none,up,right,ambiguous,down,left" | "none,up,right,left,ambiguous" | "none,up,right,left,ambiguous,down" | "none,up,right,left,down,ambiguous" | "none,up,right,down,ambiguous,left" | "none,up,right,down,left,ambiguous" | "none,up,down,ambiguous,left,right" | "none,up,down,ambiguous,right,left" | "none,up,down,left,ambiguous,right" | "none,up,down,left,right,ambiguous" | "none,up,down,right,ambiguous,left" | "none,up,down,right,left,ambiguous" | "none,down,ambiguous,left,right,up" | "none,down,ambiguous,left,up,right" | "none,down,ambiguous,right,left,up" | "none,down,ambiguous,right,up,left" | "none,down,ambiguous,up,left,right" | "none,down,ambiguous,up,right,left" | "none,down,left,ambiguous,right,up" | "none,down,left,ambiguous,up,right" | "none,down,left,right,ambiguous,up" | "none,down,left,right,up,ambiguous" | "none,down,left,up,ambiguous,right" | "none,down,left,up,right,ambiguous" | "none,down,right,ambiguous,left,up" | "none,down,right,ambiguous,up,left" | "none,down,right,left,ambiguous,up" | "none,down,right,left,up,ambiguous" | "none,down,right,up,ambiguous,left" | "none,down,right,up,left,ambiguous" | "none,down,up,ambiguous,left,right" | "none,down,up,ambiguous,right,left" | "none,down,up,left,ambiguous,right" | "none,down,up,left,right,ambiguous" | "none,down,up,right,ambiguous,left" | "none,down,up,right,left,ambiguous" | "ambiguous,none" | "down,none" | "down,none,ambiguous" | "down,ambiguous,none" | "ambiguous,none,down" | "ambiguous,down,none" | "up,none" | "up,none,down" | "up,none,ambiguous" | "up,none,ambiguous,down" | "up,none,down,ambiguous" | "up,ambiguous,none" | "up,down,none" | "up,down,none,ambiguous" | "up,down,ambiguous,none" | "up,ambiguous,none,down" | "up,ambiguous,down,none" | "ambiguous,none,up" | "ambiguous,up,none" | "down,none,up" | "down,none,ambiguous,up" | "down,none,up,ambiguous" | "down,up,none" | "down,up,none,ambiguous" | "down,up,ambiguous,none" | "down,ambiguous,none,up" | "down,ambiguous,up,none" | "ambiguous,none,up,down" | "ambiguous,none,down,up" | "ambiguous,up,none,down" | "ambiguous,up,down,none" | "ambiguous,down,none,up" | "ambiguous,down,up,none" | "right,none" | "right,none,up" | "right,none,down" | "right,none,ambiguous" | "right,none,up,down" | "right,none,down,up" | "right,none,ambiguous,up" | "right,none,ambiguous,down" | "right,none,ambiguous,up,down" | "right,none,ambiguous,down,up" | "right,none,down,ambiguous" | "right,none,up,ambiguous" | "right,none,up,ambiguous,down" | "right,none,up,down,ambiguous" | "right,none,down,ambiguous,up" | "right,none,down,up,ambiguous" | "right,ambiguous,none" | "right,down,none" | "right,down,none,ambiguous" | "right,down,ambiguous,none" | "right,ambiguous,none,down" | "right,ambiguous,down,none" | "right,up,none" | "right,up,none,down" | "right,up,none,ambiguous" | "right,up,none,ambiguous,down" | "right,up,none,down,ambiguous" | "right,up,ambiguous,none" | "right,up,down,none" | "right,up,down,none,ambiguous" | "right,up,down,ambiguous,none" | "right,up,ambiguous,none,down" | "right,up,ambiguous,down,none" | "right,ambiguous,none,up" | "right,ambiguous,up,none" | "right,down,none,up" | "right,down,none,ambiguous,up" | "right,down,none,up,ambiguous" | "right,down,up,none" | "right,down,up,none,ambiguous" | "right,down,up,ambiguous,none" | "right,down,ambiguous,none,up" | "right,down,ambiguous,up,none" | "right,ambiguous,none,up,down" | "right,ambiguous,none,down,up" | "right,ambiguous,up,none,down" | "right,ambiguous,up,down,none" | "right,ambiguous,down,none,up" | "right,ambiguous,down,up,none" | "ambiguous,none,right" | "ambiguous,right,none" | "down,none,right" | "down,none,ambiguous,right" | "down,none,right,ambiguous" | "down,right,none" | "down,right,none,ambiguous" | "down,right,ambiguous,none" | "down,ambiguous,none,right" | "down,ambiguous,right,none" | "ambiguous,none,right,down" | "ambiguous,none,down,right" | "ambiguous,right,none,down" | "ambiguous,right,down,none" | "ambiguous,down,none,right" | "ambiguous,down,right,none" | "up,none,right" | "up,none,right,down" | "up,none,down,right" | "up,none,ambiguous,right" | "up,none,ambiguous,right,down" | "up,none,ambiguous,down,right" | "up,none,right,ambiguous" | "up,none,right,ambiguous,down" | "up,none,right,down,ambiguous" | "up,none,down,ambiguous,right" | "up,none,down,right,ambiguous" | "up,right,none" | "up,right,none,down" | "up,right,none,ambiguous" | "up,right,none,ambiguous,down" | "up,right,none,down,ambiguous" | "up,right,ambiguous,none" | "up,right,down,none" | "up,right,down,none,ambiguous" | "up,right,down,ambiguous,none" | "up,right,ambiguous,none,down" | "up,right,ambiguous,down,none" | "up,ambiguous,none,right" | "up,ambiguous,right,none" | "up,down,none,right" | "up,down,none,ambiguous,right" | "up,down,none,right,ambiguous" | "up,down,right,none" | "up,down,right,none,ambiguous" | "up,down,right,ambiguous,none" | "up,down,ambiguous,none,right" | "up,down,ambiguous,right,none" | "up,ambiguous,none,right,down" | "up,ambiguous,none,down,right" | "up,ambiguous,right,none,down" | "up,ambiguous,right,down,none" | "up,ambiguous,down,none,right" | "up,ambiguous,down,right,none" | "ambiguous,none,right,up" | "ambiguous,none,up,right" | "ambiguous,right,none,up" | "ambiguous,right,up,none" | "ambiguous,up,none,right" | "ambiguous,up,right,none" | "down,none,right,up" | "down,none,up,right" | "down,none,ambiguous,right,up" | "down,none,ambiguous,up,right" | "down,none,right,ambiguous,up" | "down,none,right,up,ambiguous" | "down,none,up,ambiguous,right" | "down,none,up,right,ambiguous" | "down,right,none,up" | "down,right,none,ambiguous,up" | "down,right,none,up,ambiguous" | "down,right,up,none" | "down,right,up,none,ambiguous" | "down,right,up,ambiguous,none" | "down,right,ambiguous,none,up" | "down,right,ambiguous,up,none" | "down,up,none,right" | "down,up,none,ambiguous,right" | "down,up,none,right,ambiguous" | "down,up,right,none" | "down,up,right,none,ambiguous" | "down,up,right,ambiguous,none" | "down,up,ambiguous,none,right" | "down,up,ambiguous,right,none" | "down,ambiguous,none,right,up" | "down,ambiguous,none,up,right" | "down,ambiguous,right,none,up" | "down,ambiguous,right,up,none" | "down,ambiguous,up,none,right" | "down,ambiguous,up,right,none" | "ambiguous,none,right,up,down" | "ambiguous,none,right,down,up" | "ambiguous,none,up,right,down" | "ambiguous,none,up,down,right" | "ambiguous,none,down,right,up" | "ambiguous,none,down,up,right" | "ambiguous,right,none,up,down" | "ambiguous,right,none,down,up" | "ambiguous,right,up,none,down" | "ambiguous,right,up,down,none" | "ambiguous,right,down,none,up" | "ambiguous,right,down,up,none" | "ambiguous,up,none,right,down" | "ambiguous,up,none,down,right" | "ambiguous,up,right,none,down" | "ambiguous,up,right,down,none" | "ambiguous,up,down,none,right" | "ambiguous,up,down,right,none" | "ambiguous,down,none,right,up" | "ambiguous,down,none,up,right" | "ambiguous,down,right,none,up" | "ambiguous,down,right,up,none" | "ambiguous,down,up,none,right" | "ambiguous,down,up,right,none" | "left,none" | "left,none,right" | "left,none,up" | "left,none,down" | "left,none,ambiguous" | "left,none,up,down" | "left,none,down,up" | "left,none,right,up" | "left,none,right,down" | "left,none,right,up,down" | "left,none,right,down,up" | "left,none,down,right" | "left,none,up,right" | "left,none,up,right,down" | "left,none,up,down,right" | "left,none,down,right,up" | "left,none,down,up,right" | "left,none,ambiguous,right" | "left,none,ambiguous,up" | "left,none,ambiguous,down" | "left,none,ambiguous,up,down" | "left,none,ambiguous,down,up" | "left,none,ambiguous,right,up" | "left,none,ambiguous,right,down" | "left,none,ambiguous,right,up,down" | "left,none,ambiguous,right,down,up" | "left,none,ambiguous,down,right" | "left,none,ambiguous,up,right" | "left,none,ambiguous,up,right,down" | "left,none,ambiguous,up,down,right" | "left,none,ambiguous,down,right,up" | "left,none,ambiguous,down,up,right" | "left,none,down,ambiguous" | "left,none,up,ambiguous" | "left,none,up,ambiguous,down" | "left,none,up,down,ambiguous" | "left,none,down,ambiguous,up" | "left,none,down,up,ambiguous" | "left,none,right,ambiguous" | "left,none,right,ambiguous,up" | "left,none,right,ambiguous,down" | "left,none,right,ambiguous,up,down" | "left,none,right,ambiguous,down,up" | "left,none,right,down,ambiguous" | "left,none,right,up,ambiguous" | "left,none,right,up,ambiguous,down" | "left,none,right,up,down,ambiguous" | "left,none,right,down,ambiguous,up" | "left,none,right,down,up,ambiguous" | "left,none,down,ambiguous,right" | "left,none,down,right,ambiguous" | "left,none,up,ambiguous,right" | "left,none,up,ambiguous,right,down" | "left,none,up,ambiguous,down,right" | "left,none,up,right,ambiguous" | "left,none,up,right,ambiguous,down" | "left,none,up,right,down,ambiguous" | "left,none,up,down,ambiguous,right" | "left,none,up,down,right,ambiguous" | "left,none,down,ambiguous,right,up" | "left,none,down,ambiguous,up,right" | "left,none,down,right,ambiguous,up" | "left,none,down,right,up,ambiguous" | "left,none,down,up,ambiguous,right" | "left,none,down,up,right,ambiguous" | "left,ambiguous,none" | "left,down,none" | "left,down,none,ambiguous" | "left,down,ambiguous,none" | "left,ambiguous,none,down" | "left,ambiguous,down,none" | "left,up,none" | "left,up,none,down" | "left,up,none,ambiguous" | "left,up,none,ambiguous,down" | "left,up,none,down,ambiguous" | "left,up,ambiguous,none" | "left,up,down,none" | "left,up,down,none,ambiguous" | "left,up,down,ambiguous,none" | "left,up,ambiguous,none,down" | "left,up,ambiguous,down,none" | "left,ambiguous,none,up" | "left,ambiguous,up,none" | "left,down,none,up" | "left,down,none,ambiguous,up" | "left,down,none,up,ambiguous" | "left,down,up,none" | "left,down,up,none,ambiguous" | "left,down,up,ambiguous,none" | "left,down,ambiguous,none,up" | "left,down,ambiguous,up,none" | "left,ambiguous,none,up,down" | "left,ambiguous,none,down,up" | "left,ambiguous,up,none,down" | "left,ambiguous,up,down,none" | "left,ambiguous,down,none,up" | "left,ambiguous,down,up,none" | "left,right,none" | "left,right,none,up" | "left,right,none,down" | "left,right,none,ambiguous" | "left,right,none,up,down" | "left,right,none,down,up" | "left,right,none,ambiguous,up" | "left,right,none,ambiguous,down" | "left,right,none,ambiguous,up,down" | "left,right,none,ambiguous,down,up" | "left,right,none,down,ambiguous" | "left,right,none,up,ambiguous" | "left,right,none,up,ambiguous,down" | "left,right,none,up,down,ambiguous" | "left,right,none,down,ambiguous,up" | "left,right,none,down,up,ambiguous" | "left,right,ambiguous,none" | "left,right,down,none" | "left,right,down,none,ambiguous" | "left,right,down,ambiguous,none" | "left,right,ambiguous,none,down" | "left,right,ambiguous,down,none" | "left,right,up,none" | "left,right,up,none,down" | "left,right,up,none,ambiguous" | "left,right,up,none,ambiguous,down" | "left,right,up,none,down,ambiguous" | "left,right,up,ambiguous,none" | "left,right,up,down,none" | "left,right,up,down,none,ambiguous" | "left,right,up,down,ambiguous,none" | "left,right,up,ambiguous,none,down" | "left,right,up,ambiguous,down,none" | "left,right,ambiguous,none,up" | "left,right,ambiguous,up,none" | "left,right,down,none,up" | "left,right,down,none,ambiguous,up" | "left,right,down,none,up,ambiguous" | "left,right,down,up,none" | "left,right,down,up,none,ambiguous" | "left,right,down,up,ambiguous,none" | "left,right,down,ambiguous,none,up" | "left,right,down,ambiguous,up,none" | "left,right,ambiguous,none,up,down" | "left,right,ambiguous,none,down,up" | "left,right,ambiguous,up,none,down" | "left,right,ambiguous,up,down,none" | "left,right,ambiguous,down,none,up" | "left,right,ambiguous,down,up,none" | "left,ambiguous,none,right" | "left,ambiguous,right,none" | "left,down,none,right" | "left,down,none,ambiguous,right" | "left,down,none,right,ambiguous" | "left,down,right,none" | "left,down,right,none,ambiguous" | "left,down,right,ambiguous,none" | "left,down,ambiguous,none,right" | "left,down,ambiguous,right,none" | "left,ambiguous,none,right,down" | "left,ambiguous,none,down,right" | "left,ambiguous,right,none,down" | "left,ambiguous,right,down,none" | "left,ambiguous,down,none,right" | "left,ambiguous,down,right,none" | "left,up,none,right" | "left,up,none,right,down" | "left,up,none,down,right" | "left,up,none,ambiguous,right" | "left,up,none,ambiguous,right,down" | "left,up,none,ambiguous,down,right" | "left,up,none,right,ambiguous" | "left,up,none,right,ambiguous,down" | "left,up,none,right,down,ambiguous" | "left,up,none,down,ambiguous,right" | "left,up,none,down,right,ambiguous" | "left,up,right,none" | "left,up,right,none,down" | "left,up,right,none,ambiguous" | "left,up,right,none,ambiguous,down" | "left,up,right,none,down,ambiguous" | "left,up,right,ambiguous,none" | "left,up,right,down,none" | "left,up,right,down,none,ambiguous" | "left,up,right,down,ambiguous,none" | "left,up,right,ambiguous,none,down" | "left,up,right,ambiguous,down,none" | "left,up,ambiguous,none,right" | "left,up,ambiguous,right,none" | "left,up,down,none,right" | "left,up,down,none,ambiguous,right" | "left,up,down,none,right,ambiguous" | "left,up,down,right,none" | "left,up,down,right,none,ambiguous" | "left,up,down,right,ambiguous,none" | "left,up,down,ambiguous,none,right" | "left,up,down,ambiguous,right,none" | "left,up,ambiguous,none,right,down" | "left,up,ambiguous,none,down,right" | "left,up,ambiguous,right,none,down" | "left,up,ambiguous,right,down,none" | "left,up,ambiguous,down,none,right" | "left,up,ambiguous,down,right,none" | "left,ambiguous,none,right,up" | "left,ambiguous,none,up,right" | "left,ambiguous,right,none,up" | "left,ambiguous,right,up,none" | "left,ambiguous,up,none,right" | "left,ambiguous,up,right,none" | "left,down,none,right,up" | "left,down,none,up,right" | "left,down,none,ambiguous,right,up" | "left,down,none,ambiguous,up,right" | "left,down,none,right,ambiguous,up" | "left,down,none,right,up,ambiguous" | "left,down,none,up,ambiguous,right" | "left,down,none,up,right,ambiguous" | "left,down,right,none,up" | "left,down,right,none,ambiguous,up" | "left,down,right,none,up,ambiguous" | "left,down,right,up,none" | "left,down,right,up,none,ambiguous" | "left,down,right,up,ambiguous,none" | "left,down,right,ambiguous,none,up" | "left,down,right,ambiguous,up,none" | "left,down,up,none,right" | "left,down,up,none,ambiguous,right" | "left,down,up,none,right,ambiguous" | "left,down,up,right,none" | "left,down,up,right,none,ambiguous" | "left,down,up,right,ambiguous,none" | "left,down,up,ambiguous,none,right" | "left,down,up,ambiguous,right,none" | "left,down,ambiguous,none,right,up" | "left,down,ambiguous,none,up,right" | "left,down,ambiguous,right,none,up" | "left,down,ambiguous,right,up,none" | "left,down,ambiguous,up,none,right" | "left,down,ambiguous,up,right,none" | "left,ambiguous,none,right,up,down" | "left,ambiguous,none,right,down,up" | "left,ambiguous,none,up,right,down" | "left,ambiguous,none,up,down,right" | "left,ambiguous,none,down,right,up" | "left,ambiguous,none,down,up,right" | "left,ambiguous,right,none,up,down" | "left,ambiguous,right,none,down,up" | "left,ambiguous,right,up,none,down" | "left,ambiguous,right,up,down,none" | "left,ambiguous,right,down,none,up" | "left,ambiguous,right,down,up,none" | "left,ambiguous,up,none,right,down" | "left,ambiguous,up,none,down,right" | "left,ambiguous,up,right,none,down" | "left,ambiguous,up,right,down,none" | "left,ambiguous,up,down,none,right" | "left,ambiguous,up,down,right,none" | "left,ambiguous,down,none,right,up" | "left,ambiguous,down,none,up,right" | "left,ambiguous,down,right,none,up" | "left,ambiguous,down,right,up,none" | "left,ambiguous,down,up,none,right" | "left,ambiguous,down,up,right,none" | "ambiguous,none,left" | "ambiguous,left,none" | "down,none,left" | "down,none,ambiguous,left" | "down,none,left,ambiguous" | "down,left,none" | "down,left,none,ambiguous" | "down,left,ambiguous,none" | "down,ambiguous,none,left" | "down,ambiguous,left,none" | "ambiguous,none,left,down" | "ambiguous,none,down,left" | "ambiguous,left,none,down" | "ambiguous,left,down,none" | "ambiguous,down,none,left" | "ambiguous,down,left,none" | "up,none,left" | "up,none,left,down" | "up,none,down,left" | "up,none,ambiguous,left" | "up,none,ambiguous,left,down" | "up,none,ambiguous,down,left" | "up,none,left,ambiguous" | "up,none,left,ambiguous,down" | "up,none,left,down,ambiguous" | "up,none,down,ambiguous,left" | "up,none,down,left,ambiguous" | "up,left,none" | "up,left,none,down" | "up,left,none,ambiguous" | "up,left,none,ambiguous,down" | "up,left,none,down,ambiguous" | "up,left,ambiguous,none" | "up,left,down,none" | "up,left,down,none,ambiguous" | "up,left,down,ambiguous,none" | "up,left,ambiguous,none,down" | "up,left,ambiguous,down,none" | "up,ambiguous,none,left" | "up,ambiguous,left,none" | "up,down,none,left" | "up,down,none,ambiguous,left" | "up,down,none,left,ambiguous" | "up,down,left,none" | "up,down,left,none,ambiguous" | "up,down,left,ambiguous,none" | "up,down,ambiguous,none,left" | "up,down,ambiguous,left,none" | "up,ambiguous,none,left,down" | "up,ambiguous,none,down,left" | "up,ambiguous,left,none,down" | "up,ambiguous,left,down,none" | "up,ambiguous,down,none,left" | "up,ambiguous,down,left,none" | "ambiguous,none,left,up" | "ambiguous,none,up,left" | "ambiguous,left,none,up" | "ambiguous,left,up,none" | "ambiguous,up,none,left" | "ambiguous,up,left,none" | "down,none,left,up" | "down,none,up,left" | "down,none,ambiguous,left,up" | "down,none,ambiguous,up,left" | "down,none,left,ambiguous,up" | "down,none,left,up,ambiguous" | "down,none,up,ambiguous,left" | "down,none,up,left,ambiguous" | "down,left,none,up" | "down,left,none,ambiguous,up" | "down,left,none,up,ambiguous" | "down,left,up,none" | "down,left,up,none,ambiguous" | "down,left,up,ambiguous,none" | "down,left,ambiguous,none,up" | "down,left,ambiguous,up,none" | "down,up,none,left" | "down,up,none,ambiguous,left" | "down,up,none,left,ambiguous" | "down,up,left,none" | "down,up,left,none,ambiguous" | "down,up,left,ambiguous,none" | "down,up,ambiguous,none,left" | "down,up,ambiguous,left,none" | "down,ambiguous,none,left,up" | "down,ambiguous,none,up,left" | "down,ambiguous,left,none,up" | "down,ambiguous,left,up,none" | "down,ambiguous,up,none,left" | "down,ambiguous,up,left,none" | "ambiguous,none,left,up,down" | "ambiguous,none,left,down,up" | "ambiguous,none,up,left,down" | "ambiguous,none,up,down,left" | "ambiguous,none,down,left,up" | "ambiguous,none,down,up,left" | "ambiguous,left,none,up,down" | "ambiguous,left,none,down,up" | "ambiguous,left,up,none,down" | "ambiguous,left,up,down,none" | "ambiguous,left,down,none,up" | "ambiguous,left,down,up,none" | "ambiguous,up,none,left,down" | "ambiguous,up,none,down,left" | "ambiguous,up,left,none,down" | "ambiguous,up,left,down,none" | "ambiguous,up,down,none,left" | "ambiguous,up,down,left,none" | "ambiguous,down,none,left,up" | "ambiguous,down,none,up,left" | "ambiguous,down,left,none,up" | "ambiguous,down,left,up,none" | "ambiguous,down,up,none,left" | "ambiguous,down,up,left,none" | "right,none,left" | "right,none,left,up" | "right,none,left,down" | "right,none,left,up,down" | "right,none,left,down,up" | "right,none,down,left" | "right,none,up,left" | "right,none,up,left,down" | "right,none,up,down,left" | "right,none,down,left,up" | "right,none,down,up,left" | "right,none,ambiguous,left" | "right,none,ambiguous,left,up" | "right,none,ambiguous,left,down" | "right,none,ambiguous,left,up,down" | "right,none,ambiguous,left,down,up" | "right,none,ambiguous,down,left" | "right,none,ambiguous,up,left" | "right,none,ambiguous,up,left,down" | "right,none,ambiguous,up,down,left" | "right,none,ambiguous,down,left,up" | "right,none,ambiguous,down,up,left" | "right,none,left,ambiguous" | "right,none,left,ambiguous,up" | "right,none,left,ambiguous,down" | "right,none,left,ambiguous,up,down" | "right,none,left,ambiguous,down,up" | "right,none,left,down,ambiguous" | "right,none,left,up,ambiguous" | "right,none,left,up,ambiguous,down" | "right,none,left,up,down,ambiguous" | "right,none,left,down,ambiguous,up" | "right,none,left,down,up,ambiguous" | "right,none,down,ambiguous,left" | "right,none,down,left,ambiguous" | "right,none,up,ambiguous,left" | "right,none,up,ambiguous,left,down" | "right,none,up,ambiguous,down,left" | "right,none,up,left,ambiguous" | "right,none,up,left,ambiguous,down" | "right,none,up,left,down,ambiguous" | "right,none,up,down,ambiguous,left" | "right,none,up,down,left,ambiguous" | "right,none,down,ambiguous,left,up" | "right,none,down,ambiguous,up,left" | "right,none,down,left,ambiguous,up" | "right,none,down,left,up,ambiguous" | "right,none,down,up,ambiguous,left" | "right,none,down,up,left,ambiguous" | "right,left,none" | "right,left,none,up" | "right,left,none,down" | "right,left,none,ambiguous" | "right,left,none,up,down" | "right,left,none,down,up" | "right,left,none,ambiguous,up" | "right,left,none,ambiguous,down" | "right,left,none,ambiguous,up,down" | "right,left,none,ambiguous,down,up" | "right,left,none,down,ambiguous" | "right,left,none,up,ambiguous" | "right,left,none,up,ambiguous,down" | "right,left,none,up,down,ambiguous" | "right,left,none,down,ambiguous,up" | "right,left,none,down,up,ambiguous" | "right,left,ambiguous,none" | "right,left,down,none" | "right,left,down,none,ambiguous" | "right,left,down,ambiguous,none" | "right,left,ambiguous,none,down" | "right,left,ambiguous,down,none" | "right,left,up,none" | "right,left,up,none,down" | "right,left,up,none,ambiguous" | "right,left,up,none,ambiguous,down" | "right,left,up,none,down,ambiguous" | "right,left,up,ambiguous,none" | "right,left,up,down,none" | "right,left,up,down,none,ambiguous" | "right,left,up,down,ambiguous,none" | "right,left,up,ambiguous,none,down" | "right,left,up,ambiguous,down,none" | "right,left,ambiguous,none,up" | "right,left,ambiguous,up,none" | "right,left,down,none,up" | "right,left,down,none,ambiguous,up" | "right,left,down,none,up,ambiguous" | "right,left,down,up,none" | "right,left,down,up,none,ambiguous" | "right,left,down,up,ambiguous,none" | "right,left,down,ambiguous,none,up" | "right,left,down,ambiguous,up,none" | "right,left,ambiguous,none,up,down" | "right,left,ambiguous,none,down,up" | "right,left,ambiguous,up,none,down" | "right,left,ambiguous,up,down,none" | "right,left,ambiguous,down,none,up" | "right,left,ambiguous,down,up,none" | "right,ambiguous,none,left" | "right,ambiguous,left,none" | "right,down,none,left" | "right,down,none,ambiguous,left" | "right,down,none,left,ambiguous" | "right,down,left,none" | "right,down,left,none,ambiguous" | "right,down,left,ambiguous,none" | "right,down,ambiguous,none,left" | "right,down,ambiguous,left,none" | "right,ambiguous,none,left,down" | "right,ambiguous,none,down,left" | "right,ambiguous,left,none,down" | "right,ambiguous,left,down,none" | "right,ambiguous,down,none,left" | "right,ambiguous,down,left,none" | "right,up,none,left" | "right,up,none,left,down" | "right,up,none,down,left" | "right,up,none,ambiguous,left" | "right,up,none,ambiguous,left,down" | "right,up,none,ambiguous,down,left" | "right,up,none,left,ambiguous" | "right,up,none,left,ambiguous,down" | "right,up,none,left,down,ambiguous" | "right,up,none,down,ambiguous,left" | "right,up,none,down,left,ambiguous" | "right,up,left,none" | "right,up,left,none,down" | "right,up,left,none,ambiguous" | "right,up,left,none,ambiguous,down" | "right,up,left,none,down,ambiguous" | "right,up,left,ambiguous,none" | "right,up,left,down,none" | "right,up,left,down,none,ambiguous" | "right,up,left,down,ambiguous,none" | "right,up,left,ambiguous,none,down" | "right,up,left,ambiguous,down,none" | "right,up,ambiguous,none,left" | "right,up,ambiguous,left,none" | "right,up,down,none,left" | "right,up,down,none,ambiguous,left" | "right,up,down,none,left,ambiguous" | "right,up,down,left,none" | "right,up,down,left,none,ambiguous" | "right,up,down,left,ambiguous,none" | "right,up,down,ambiguous,none,left" | "right,up,down,ambiguous,left,none" | "right,up,ambiguous,none,left,down" | "right,up,ambiguous,none,down,left" | "right,up,ambiguous,left,none,down" | "right,up,ambiguous,left,down,none" | "right,up,ambiguous,down,none,left" | "right,up,ambiguous,down,left,none" | "right,ambiguous,none,left,up" | "right,ambiguous,none,up,left" | "right,ambiguous,left,none,up" | "right,ambiguous,left,up,none" | "right,ambiguous,up,none,left" | "right,ambiguous,up,left,none" | "right,down,none,left,up" | "right,down,none,up,left" | "right,down,none,ambiguous,left,up" | "right,down,none,ambiguous,up,left" | "right,down,none,left,ambiguous,up" | "right,down,none,left,up,ambiguous" | "right,down,none,up,ambiguous,left" | "right,down,none,up,left,ambiguous" | "right,down,left,none,up" | "right,down,left,none,ambiguous,up" | "right,down,left,none,up,ambiguous" | "right,down,left,up,none" | "right,down,left,up,none,ambiguous" | "right,down,left,up,ambiguous,none" | "right,down,left,ambiguous,none,up" | "right,down,left,ambiguous,up,none" | "right,down,up,none,left" | "right,down,up,none,ambiguous,left" | "right,down,up,none,left,ambiguous" | "right,down,up,left,none" | "right,down,up,left,none,ambiguous" | "right,down,up,left,ambiguous,none" | "right,down,up,ambiguous,none,left" | "right,down,up,ambiguous,left,none" | "right,down,ambiguous,none,left,up" | "right,down,ambiguous,none,up,left" | "right,down,ambiguous,left,none,up" | "right,down,ambiguous,left,up,none" | "right,down,ambiguous,up,none,left" | "right,down,ambiguous,up,left,none" | "right,ambiguous,none,left,up,down" | "right,ambiguous,none,left,down,up" | "right,ambiguous,none,up,left,down" | "right,ambiguous,none,up,down,left" | "right,ambiguous,none,down,left,up" | "right,ambiguous,none,down,up,left" | "right,ambiguous,left,none,up,down" | "right,ambiguous,left,none,down,up" | "right,a