local function v0(...)
    return select("#", ...), {
        ...
    };
end;
local function v6(v1, ...)
    local v2, v3 = v0(...);
    local v4, v5 = v0(xpcall(function()
        return v1(unpack(v3, 1, v2));
    end, debug.traceback));
    return v4, v5;
end;
local function _(v7, v8, v9)
    return function(...)
        local v10, v11 = v6(v7, ...);
        if not v11[1] then
            v9(unpack(v11, 2, v10));
            return ;
        else
            v8(unpack(v11, 2, v10));
            return ;
        end;
    end;
end;
local function _(v13)
    return next(v13) == nil;
end;
local function _(v15)
    assert(type(v15) == "string", "createSymbol requires `name` to be a string.");
    local v16 = newproxy(true);
    getmetatable(v16).__tostring = function()
        return ("Symbol(%s)"):format(v15);
    end;
    return v16;
end;
assert(true, "createSymbol requires `name` to be a string.");
local v18 = newproxy(true);
local v19 = getmetatable(v18);
local v20 = "PromiseMarker";
local l_v20_0 = v20 --[[ copy: 9 -> 13 ]];
v19.__tostring = function()
    return ("Symbol(%s)"):format(l_v20_0);
end;
local l_v18_0 = v18;
v18 = {
    prototype = {}
};
v18.__index = v18.prototype;
v19 = {};
assert(true, "createSymbol requires `name` to be a string.");
v20 = newproxy(true);
local v23 = getmetatable(v20);
local v24 = "Started";
local l_v24_0 = v24 --[[ copy: 12 -> 14 ]];
v23.__tostring = function()
    return ("Symbol(%s)"):format(l_v24_0);
end;
v19.Started = v20;
assert(true, "createSymbol requires `name` to be a string.");
v20 = newproxy(true);
v23 = getmetatable(v20);
v24 = "Resolved";
local l_v24_1 = v24 --[[ copy: 12 -> 15 ]];
v23.__tostring = function()
    return ("Symbol(%s)"):format(l_v24_1);
end;
v19.Resolved = v20;
assert(true, "createSymbol requires `name` to be a string.");
v20 = newproxy(true);
v23 = getmetatable(v20);
v24 = "Rejected";
v23.__tostring = function()
    return ("Symbol(%s)"):format(v24);
end;
v19.Rejected = v20;
v18.Status = v19;
v18.new = function(v27)
    local v28 = {
        _source = debug.traceback(),
        [l_v18_0] = true,
        _status = v18.Status.Started,
        _values = nil,
        _valuesLength = -1,
        _unhandledRejection = false,
        _queuedResolve = {},
        _queuedReject = {}
    };
    setmetatable(v28, v18);
    local function v29(...)
        v28:_resolve(...);
    end;
    local function v30(...)
        v28:_reject(...);
    end;
    local _, v32 = v6(v27, v29, v30);
    local v33 = v32[1];
    local v34 = v32[2];
    if not v33 and v28._status == v18.Status.Started then
        v30(v34);
    end;
    return v28;
end;
v18.resolve = function(v35)
    return v18.new(function(v36)
        v36(v35);
    end);
end;
v18.reject = function(v37)
    return v18.new(function(_, v39)
        v39(v37);
    end);
end;
v18.all = function(v40)
    if type(v40) ~= "table" then
        error("Please pass a list of promises to Promise.all", 2);
    end;
    if #v40 == 0 then
        return v18.resolve({});
    else
        for v41 = 1, #v40 do
            if not v18.is(v40[v41]) then
                error(("Non-promise value passed into Promise.all at index #%d"):format(v41), 2);
            end;
        end;
        return v18.new(function(v42, v43)
            local v44 = {};
            local v45 = 0;
            local function v47(v46, ...)
                v44[v46] = ...;
                v45 = v45 + 1;
                if v45 == #v40 then
                    v42(v44);
                end;
            end;
            for v48 = 1, #v40 do
                v40[v48]:andThen(function(...)
                    v47(v48, ...);
                end, function(...)
                    v43(...);
                end);
            end;
        end);
    end;
end;
v18.is = function(v49)
    if type(v49) ~= "table" then
        return false;
    else
        return v49[l_v18_0] == true;
    end;
end;
v18.prototype.getStatus = function(v50)
    return v50._status;
end;
v18.prototype.andThen = function(v51, v52, v53)
    v51._unhandledRejection = false;
    return v18.new(function(v54, v55)
        local l_v54_0 = v54;
        if v52 then
            local l_v52_0 = v52;
            local l_l_v52_0_0 = l_v52_0 --[[ copy: 3 -> 5 ]];
            l_v54_0 = function(...)
                local v59, v60 = v6(l_l_v52_0_0, ...);
                if not v60[1] then
                    v55(unpack(v60, 2, v59));
                    return ;
                else
                    v54(unpack(v60, 2, v59));
                    return ;
                end;
            end;
        end;
        local l_v55_0 = v55;
        if v53 then
            local l_v53_0 = v53;
            l_v55_0 = function(...)
                local v63, v64 = v6(l_v53_0, ...);
                if not v64[1] then
                    v55(unpack(v64, 2, v63));
                    return ;
                else
                    v54(unpack(v64, 2, v63));
                    return ;
                end;
            end;
        end;
        if v51._status == v18.Status.Started then
            table.insert(v51._queuedResolve, l_v54_0);
            table.insert(v51._queuedReject, l_v55_0);
            return ;
        elseif v51._status == v18.Status.Resolved then
            l_v54_0(unpack(v51._values, 1, v51._valuesLength));
            return ;
        else
            if v51._status == v18.Status.Rejected then
                l_v55_0(unpack(v51._values, 1, v51._valuesLength));
            end;
            return ;
        end;
    end);
end;
v18.prototype.catch = function(v65, v66)
    return v65:andThen(nil, v66);
end;
v18.prototype.await = function(v67)
    v67._unhandledRejection = false;
    if v67._status == v18.Status.Started then
        local v68 = nil;
        local v69 = nil;
        local l_BindableEvent_0 = Instance.new("BindableEvent");
        v67:andThen(function(...)
            local v71, v72 = v0(...);
            v69 = v71;
            v68 = v72;
            l_BindableEvent_0:Fire(true);
        end, function(...)
            local v73, v74 = v0(...);
            v69 = v73;
            v68 = v74;
            l_BindableEvent_0:Fire(false);
        end);
        local v75 = l_BindableEvent_0.Event:Wait();
        l_BindableEvent_0:Destroy();
        return v75, unpack(v68, 1, v69);
    elseif v67._status == v18.Status.Resolved then
        return true, unpack(v67._values, 1, v67._valuesLength);
    elseif v67._status == v18.Status.Rejected then
        return false, unpack(v67._values, 1, v67._valuesLength);
    else
        return ;
    end;
end;
v18.prototype._unwrap = function(v76)
    if v76._status == v18.Status.Started then
        error("Promise has not resolved or rejected.", 2);
    end;
    return v76._status == v18.Status.Resolved, unpack(v76._values, 1, v76._valuesLength);
end;
v18.prototype._resolve = function(v77, ...)
    if v77._status ~= v18.Status.Started then
        return ;
    elseif not v18.is((...)) then
        v77._status = v18.Status.Resolved;
        local v78, v79 = v0(...);
        v77._valuesLength = v78;
        v77._values = v79;
        for _, v81 in ipairs(v77._queuedResolve) do
            v81(...);
        end;
        return ;
    else
        if select("#", ...) > 1 then
            warn((("When returning a Promise from andThen, extra arguments are " .. "discarded\n\n%s"):format(v77._source)));
        end;
        (...):andThen(function(...)
            v77:_resolve(...);
        end, function(...)
            v77:_reject(...);
        end);
        return ;
    end;
end;
v18.prototype._reject = function(v82, ...)
    if v82._status ~= v18.Status.Started then
        return ;
    else
        v82._status = v18.Status.Rejected;
        local v83, v84 = v0(...);
        v82._valuesLength = v83;
        v82._values = v84;
        if next(v82._queuedReject) == nil then
            v82._unhandledRejection = true;
            v83 = tostring((...));
            spawn(function()
                if v82._unhandledRejection then
                    warn((("Unhandled promise rejection:\n\n%s\n\n%s"):format(v83, v82._source)));
                    return ;
                else
                    return ;
                end;
            end);
            return ;
        else
            for _, v86 in ipairs(v82._queuedReject) do
                v86(...);
            end;
            return ;
        end;
    end;
end;
return v18;


local l_HttpService_0 = game:GetService("HttpService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v2 = require(l_script_FirstAncestor_0.Packages.Framework);
local l_Signal_0 = v2.Util.Signal;
local v4 = require(l_script_FirstAncestor_0.Src.Context.Signals);
local l_ServiceWrapper_0 = v2.TestHelpers.ServiceWrapper;
local l_ContextServices_0 = v2.ContextServices;
local v7 = require(l_script_FirstAncestor_0.Packages.Roact);
local v8 = require(l_script_FirstAncestor_0.Packages.Rodux);
local v9 = require(l_script_FirstAncestor_0.Src.Util.Constants);
local v10 = require(l_script_FirstAncestor_0.Src.Util.Theme);
local v11 = require(l_script_FirstAncestor_0.Src.Util.MakePluginActions);
local l_Localization_0 = l_ContextServices_0.Localization;
local v13 = require(l_script_FirstAncestor_0.Src.Reducers.MainReducer);
local v14 = require(l_script_FirstAncestor_0.Src.Util.CalloutController);
local v15 = require(l_script_FirstAncestor_0.Src.Components.AnimationClipEditor);
local v16 = require(l_script_FirstAncestor_0.Src.Context.MainProvider);
local v17 = require(l_script_FirstAncestor_0.Src.Actions.SetSnapMode);
local v18 = {};
v18.__index = v18;
local function _()
    local v19 = nil;
    pcall(function()
        local l_ViewSelectorScreenGui_0 = game:GetService("CoreGui").ViewSelectorScreenGui;
        if l_ViewSelectorScreenGui_0 then
            local l_Enabled_0 = l_ViewSelectorScreenGui_0.Enabled;
            local v22 = false;
            v19 = l_Enabled_0;
            l_ViewSelectorScreenGui_0.Enabled = v22;
        end;
    end);
    return v19;
end;
local function _(v24)
    if v24 == nil then
        return ;
    else
        pcall(function()
            game:GetService("CoreGui").ViewSelectorScreenGui.Enabled = v24;
        end);
        return ;
    end;
end;
v18.nextTestId = function(_)
    return l_HttpService_0:GenerateGUID();
end;
v18.createTestStore = function(_)
    local v28 = v8.Store.new(v13, nil, {
        v8.thunkMiddleware
    });
    v28:dispatch(v17(v9.SNAP_MODES.None));
    return v28;
end;
local _ = function()
    return {
        Connect = function(_)
            return {
                Disconnect = function(_)
                end
            };
        end
    };
end;
v18.createMockPlugin = function(v32, _)
    local function _()
        local v34 = Instance.new("ScreenGui", game.CoreGui);
        v34.Name = "PluginMockGui";
        v34.ZIndexBehavior = Enum.ZIndexBehavior.Sibling;
        return v34;
    end;
    return {
        Activate = function(_, ...)
        end,
        Name = "MockPlugin",
        Deactivate = function()
        end,
        GetMouse = function()
            return {
                Button1Down = {
                    Connect = function(_)
                        return {
                            Disconnect = function(_)
                            end
                        };
                    end
                }
            };
        end,
        CreateDockWidgetPluginGui = function(_, ...)
            local v40 = Instance.new("ScreenGui", game.CoreGui);
            v40.Name = "PluginMockGui";
            v40.ZIndexBehavior = Enum.ZIndexBehavior.Sibling;
            local l_v40_0 = v40;
            table.insert(v32.subWindows, l_v40_0);
            return l_v40_0;
        end,
        CreatePluginAction = function()
            return {
                Triggered = l_Signal_0.new()
            };
        end,
        CreateQWidgetPluginGui = function(_, ...)
            local v43 = Instance.new("ScreenGui", game.CoreGui);
            v43.Name = "PluginMockGui";
            v43.ZIndexBehavior = Enum.ZIndexBehavior.Sibling;
            local l_v43_0 = v43;
            table.insert(v32.subWindows, l_v43_0);
            return l_v43_0;
        end
    };
end;
v18.makeContainer = function(_)
    local l_MAIN_TEST_SIZE_0 = v9.MAIN_TEST_SIZE;
    local v47 = Instance.new("ScreenGui", game.CoreGui);
    v47.Name = "PluginMockGui";
    v47.ZIndexBehavior = Enum.ZIndexBehavior.Sibling;
    local v48 = Instance.new("Frame", v47);
    v48.Name = "RhodiumTests";
    v48.BackgroundTransparency = 1;
    v48.Size = UDim2.new(0, l_MAIN_TEST_SIZE_0.X, 0, l_MAIN_TEST_SIZE_0.Y);
    return v48;
end;
v18.getSubWindow = function(v49, v50)
    local v51 = tick();
    local v52 = v51 + 1;
    while not v49.subWindows[v50] do
        wait();
        if v51 + v52 < tick() then
            error("Test did not spawn a sub-window.");
        end;
    end;
    return v49.subWindows[v50];
end;
v18.getStore = function(v53)
    return v53.store;
end;
v18.getContainer = function(v54)
    return v54.container;
end;
v18.new = function(v55)
    local v56 = {
        localization = l_Localization_0.mock(),
        theme = v10(true),
        plugin = v55,
        subWindows = {}
    };
    setmetatable(v56, v18);
    v56.store = v56:createTestStore();
    v56.mockPlugin = v56:createMockPlugin(v55);
    v56.container = v56:makeContainer();
    v56.analytics = l_ContextServices_0.Analytics.mock();
    v56.pluginActions = l_ContextServices_0.PluginActions.new(v56.mockPlugin, v11(v56.mockPlugin, v56.localization));
    v56.signals = v4.new(v9.SIGNAL_KEYS);
    v56.calloutController = v14.new(l_ServiceWrapper_0.new("CalloutService", true):asService());
    return v56;
end;
v18.run = function(v57, v58)
    local v59 = v7.createElement(v16, {
        theme = v57.theme,
        localization = v57.localization,
        store = v57.store,
        plugin = v57.mockPlugin,
        focusGui = v57.container.Parent,
        pluginActions = v57.pluginActions,
        mouse = v57.mockPlugin:GetMouse(),
        analytics = v57.analytics,
        signals = v57.signals,
        calloutController = v57.calloutController
    }, {
        AnimationClipEditor = v7.createElement(v15)
    });
    local v60 = nil;
    local v61;
    do
        local l_v60_0 = v60;
        pcall(function()
            local l_ViewSelectorScreenGui_1 = game:GetService("CoreGui").ViewSelectorScreenGui;
            if l_ViewSelectorScreenGui_1 then
                local l_Enabled_1 = l_ViewSelectorScreenGui_1.Enabled;
                local v65 = false;
                l_v60_0 = l_Enabled_1;
                l_ViewSelectorScreenGui_1.Enabled = v65;
            end;
        end);
        v61 = l_v60_0;
    end;
    v60 = v7.mount(v59, v57.container);
    local l_status_0, l_result_0 = pcall(function()
        v58(v57);
    end);
    wait();
    v7.unmount(v60);
    if v61 == nil then
        return l_status_0, l_result_0;
    else
        pcall(function()
            game:GetService("CoreGui").ViewSelectorScreenGui.Enabled = v61;
        end);
        return l_status_0, l_result_0;
    end;
end;
v18.destroy = function(v68)
    v68.container.Parent:Destroy();
    v68.theme:destroy();
    v68.store:destruct();
    v68.localization:destroy();
    v68.calloutController:destroy();
    for _, v70 in ipairs(v68.subWindows) do
        v70:Destroy();
    end;
end;
return v18;


local l_Workspace_0 = game:GetService("Workspace");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local l_Analytics_0 = require(l_script_FirstAncestor_0.Packages.Framework).ContextServices.Analytics;
local l_Element_0 = require(l_script_FirstAncestor_0.Packages.Dev.Rhodium).Element;
local v4 = require(l_script_FirstAncestor_0.RhodiumTests.Test);
local v5 = require(l_script_FirstAncestor_0.Src.Util.RigInfo);
local v6 = require(l_script_FirstAncestor_0.Src.Thunks.LoadAnimationData);
local v7 = require(l_script_FirstAncestor_0.Src.Thunks.UpdateRootInstance);
local v8 = {
    plugin = nil
};
v8.init = function(v9)
    assert(l_Workspace_0:FindFirstChild("Dummy"), "Rhodium Testing requires a 'Dummy' rig in Workspace.");
    v8.plugin = v9;
    v8.delay();
end;
v8.loadAnimation = function(v10, v11)
    local v12 = l_Analytics_0.mock();
    v5.clearCache();
    v10:dispatch(v7(l_Workspace_0.Dummy, v12));
    v10:dispatch(v6(v11, v12));
end;
v8.delay = function(v13)
    wait(v13 or 0.1);
end;
v8.clickInstance = function(v14)
    l_Element_0.new(v14):click();
    v8.delay();
end;
v8.runTest = function(v15)
    local v16 = v4.new(v8.plugin);
    local v17, v18 = v16:run(v15);
    v16:destroy();
    if not v17 then
        error(v18);
    end;
end;
return v8;


local _ = script:FindFirstAncestor("AnimationClipEditor");
local v7 = {
    waitForDescendant = function(v1, v2)
        local l_v1_0 = v1;
        assert(l_v1_0, "waitForDescendant: instance cannot be nil.");
        for _, v5 in ipairs(v2) do
            local v6 = l_v1_0:WaitForChild(v5, 2);
            assert(v6, v5 .. " was not found under parent " .. l_v1_0:GetFullName() .. ".");
            l_v1_0 = v6;
        end;
        return l_v1_0;
    end
};
v7.getEditorController = function(v8)
    return v7.waitForDescendant(v8, {
        "AnimationClipEditor",
        "EditorController"
    });
end;
v7.getDopeSheetController = function(v9)
    return v7.waitForDescendant(v7.getEditorController(v9), {
        "TrackEditor",
        "DopeSheetController"
    });
end;
v7.getDopeSheet = function(v10)
    return v7.waitForDescendant(v7.getDopeSheetController(v10), {
        "DopeSheetContainer",
        "DopeSheet"
    });
end;
v7.getTrack = function(v11, v12)
    return v7.waitForDescendant(v7.getDopeSheet(v11), {
        v12,
        "KeyframeDisplayArea"
    });
end;
v7.getTrackList = function(v13)
    return v7.waitForDescendant(v7.getEditorController(v13), {
        "TrackListAndControlContainer",
        "EventsAndTracks",
        "TrackListAndScrollBar",
        "TrackList",
        "Canvas"
    });
end;
v7.getAnimationControlPanel = function(v14)
    return v7.waitForDescendant(v7.getEditorController(v14), {
        "TrackListAndControlContainer",
        "AnimationControlPanel"
    });
end;
v7.getMediaControls = function(v15)
    return v7.waitForDescendant(v7.getAnimationControlPanel(v15), {
        "MediaControls"
    });
end;
v7.getMediaControlButton = function(v16, v17)
    return v7.waitForDescendant(v7.getMediaControls(v16), {
        v17,
        "Button",
        "Contents",
        "TextButton"
    });
end;
v7.getTimeDisplay = function(v18)
    return v7.waitForDescendant(v7.getAnimationControlPanel(v18), {
        "TimeDisplay"
    });
end;
v7.getIKButton = function(v19)
    return v7.waitForDescendant(v7.getTrackList(v19), {
        "SummaryTrack",
        "LeftButtonsListContainer",
        "IKController",
        "IKButton"
    });
end;
v7.getIKWindow = function(v20)
    return v7.waitForDescendant(v20, {
        "Container"
    });
end;
v7.getIKEnableButton = function(v21)
    return v7.waitForDescendant(v7.getIKWindow(v21), {
        "BottomFrame",
        "EnableIKButton"
    });
end;
v7.getIKTreeView = function(v22)
    return v7.waitForDescendant(v7.getIKWindow(v22), {
        "TreeView",
        "TreeView"
    });
end;
v7.getTreeViewJoint = function(v23, v24)
    return v7.waitForDescendant(v7.getIKTreeView(v23), {
        "Contents",
        "List",
        v24
    });
end;
v7.getTreeViewJointPin = function(v25, v26)
    return v7.waitForDescendant(v7.getTreeViewJoint(v25, v26), {
        "Pin"
    });
end;
v7.getEventsTitleTrack = function(v27)
    return v7.waitForDescendant(v7.getEditorController(v27), {
        "TrackListAndControlContainer",
        "EventsAndTracks",
        "EventsTitle"
    });
end;
v7.getEventsTrack = function(v28)
    return v7.waitForDescendant(v7.getDopeSheetController(v28), {
        "Events",
        "Track",
        "Markers",
        "KeyframeDisplayArea"
    });
end;
v7.getEventsDialogContents = function(v29)
    return v7.waitForDescendant(v29, {
        "SolidBackground",
        "Contents",
        "Container"
    });
end;
v7.getEventEntry = function(v30, v31)
    return v7.waitForDescendant(v7.getEventsDialogContents(v30), {
        "Event_" .. v31
    });
end;
v7.getAddEventEntry = function(v32)
    return v7.waitForDescendant(v7.getEventsDialogContents(v32), {
        "AddNew",
        "AddEventEntry"
    });
end;
v7.getStyledDialogContents = function(v33)
    return v7.waitForDescendant(v33, {
        "SolidBackground",
        "Contents"
    });
end;
v7.getKFRKeyframesText = function(v34)
    return v7.waitForDescendant(v7.getStyledDialogContents(v34), {
        "KeyframePane",
        "KeyframesText"
    });
end;
v7.getKFRSlider = function(v35)
    return v7.waitForDescendant(v7.getStyledDialogContents(v35), {
        "Slider"
    });
end;
v7.getKFRCancel = function(v36)
    return v7.waitForDescendant(v36, {
        "SolidBackground",
        "ButtonContainer"
    })[1];
end;
v7.getKFROk = function(v37)
    return v7.waitForDescendant(v37, {
        "SolidBackground",
        "ButtonContainer"
    })[2];
end;
v7.getCurveEditorController = function(v38)
    return v7.waitForDescendant(v7.getEditorController(v38), {
        "TrackEditor",
        "CurveEditorController"
    });
end;
v7.getCurveCanvas = function(v39)
    return v7.waitForDescendant(v7.getCurveEditorController(v39), {
        "CanvasContainer",
        "CurveCanvas"
    });
end;
return v7;


return function()
    local l_Model_0 = Instance.new("Model");
    l_Model_0.Parent = game.Workspace;
    local l_Part_0 = Instance.new("Part");
    l_Part_0.Size = Vector3.new(3, 3, 3);
    l_Part_0.Parent = l_Model_0;
    l_Part_0.Transparency = 1;
    l_Part_0.Anchored = true;
    l_Part_0.Name = "Root";
    local l_Part_1 = Instance.new("Part");
    l_Part_1.Size = Vector3.new(3, 3, 3);
    l_Part_1.Parent = l_Model_0;
    l_Part_1.Name = "Body";
    local l_Motor6D_0 = Instance.new("Motor6D");
    l_Motor6D_0.Part0 = l_Part_0;
    l_Motor6D_0.Part1 = l_Part_1;
    l_Motor6D_0.Parent = l_Part_1;
    local _ = Instance.new("AnimationController", l_Model_0);
    for v5 = 1, 4 do
        local v6 = Instance.new("Part", l_Model_0);
        v6.Size = Vector3.new(4, 1, 1);
        v6.Name = "UpperLeg" .. v5;
        local v7 = Instance.new("Part", l_Model_0);
        v7.Size = Vector3.new(3, 1, 1);
        v7.Name = "LowerLeg" .. v5;
        local v8 = Instance.new("Part", l_Model_0);
        v8.Size = Vector3.new(1, 1, 1);
        v8.Name = "Tip" .. v5;
        local v9 = -0.7853975 + (v5 - 1) * 0.5235983333333333;
        local v10 = CFrame.fromEulerAnglesXYZ(0, v9, 0);
        v6.CFrame = v10 + v10 * Vector3.new(3.5, 0, 0);
        v7.CFrame = v10 + v10 * Vector3.new(7, 0, 0);
        v8.CFrame = v10 + v10 * Vector3.new(9, 0, 0);
        local v11 = Instance.new("Attachment", l_Part_1);
        local v12 = Instance.new("Attachment", v6);
        v11.Name = v6.Name .. "Attachment";
        v12.Name = v6.Name .. "Attachment";
        v11.WorldOrientation = Vector3.new(0, (v9 * 180) / 3.14159, 0);
        v11.WorldPosition = v10 * Vector3.new(1.5, 0.5, 0);
        v12.WorldPosition = v10 * Vector3.new(1.5, 0.5, 0);
        local v13 = Instance.new("Attachment", v6);
        local v14 = Instance.new("Attachment", v7);
        v13.Name = v7.Name .. "Attachment";
        v14.Name = v7.Name .. "Attachment";
        v13.WorldPosition = v10 * Vector3.new(5.5, 0.5, 0);
        v14.WorldPosition = v10 * Vector3.new(5.5, 0.5, 0);
        v13.Axis = Vector3.new(0, 0, 1);
        v14.Axis = Vector3.new(0, 0, 1);
        local v15 = Instance.new("Attachment", v7);
        local v16 = Instance.new("Attachment", v8);
        v15.Name = v8.Name .. "Attachment";
        v16.Name = v8.Name .. "Attachment";
        v15.WorldPosition = v10 * Vector3.new(8.5, 0.5, 0);
        v16.WorldPosition = v10 * Vector3.new(8.5, 0.5, 0);
        v15.Axis = Vector3.new(0, 0, 1);
        v16.Axis = Vector3.new(0, 0, 1);
        local v17 = Instance.new("BallSocketConstraint", l_Model_0);
        v17.Attachment0 = v11;
        v17.Attachment1 = v12;
        v17.LimitsEnabled = true;
        v17.UpperAngle = 135;
        v17.TwistLimitsEnabled = true;
        v17.TwistLowerAngle = -3;
        v17.TwistUpperAngle = 3;
        v17.Enabled = false;
        v17.Name = "UpperLeg" .. v5 .. "Constraint";
        local v18 = Instance.new("HingeConstraint", l_Model_0);
        v18.Attachment0 = v13;
        v18.Attachment1 = v14;
        v18.LimitsEnabled = true;
        v18.LowerAngle = -135;
        v18.UpperAngle = -10;
        v18.Enabled = false;
        v18.Name = "Tip" .. v5 .. "Constraint";
        local v19 = Instance.new("HingeConstraint", l_Model_0);
        v19.Attachment0 = v15;
        v19.Attachment1 = v16;
        v19.LimitsEnabled = true;
        v19.LowerAngle = -135;
        v19.UpperAngle = -10;
        v19.Enabled = false;
        v19.Name = "LowerLeg" .. v5 .. "Constraint";
        local l_Motor6D_1 = Instance.new("Motor6D");
        l_Motor6D_1.Part0 = l_Part_1;
        l_Motor6D_1.Part1 = v6;
        l_Motor6D_1.C0 = CFrame.fromMatrix(v11.Position, v12.WorldAxis, v12.WorldSecondaryAxis);
        l_Motor6D_1.C1 = (v6.CFrame:inverse() * l_Part_1.CFrame) * l_Motor6D_1.C0;
        l_Motor6D_1.Parent = v6;
        l_Motor6D_1.Name = "UpperLeg" .. v5 .. "Motor";
        local l_Motor6D_2 = Instance.new("Motor6D");
        l_Motor6D_2.Part0 = v6;
        l_Motor6D_2.Part1 = v7;
        l_Motor6D_2.C0 = CFrame.fromMatrix(v13.Position, v13.Axis, v13.SecondaryAxis);
        l_Motor6D_2.C1 = (v7.CFrame:inverse() * v6.CFrame) * l_Motor6D_2.C0;
        l_Motor6D_2.Parent = v7;
        l_Motor6D_2.Name = "LowerLeg" .. v5 .. "Motor";
        local l_Motor6D_3 = Instance.new("Motor6D");
        l_Motor6D_3.Part0 = v7;
        l_Motor6D_3.Part1 = v8;
        l_Motor6D_3.C0 = CFrame.fromMatrix(v15.Position, v15.Axis, v15.SecondaryAxis);
        l_Motor6D_3.C1 = (v8.CFrame:inverse() * v7.CFrame) * l_Motor6D_3.C0;
        l_Motor6D_3.Parent = v8;
        l_Motor6D_3.Name = "Tip" .. v5 .. "Motor";
    end;
    for v23 = 1, 4 do
        local v24 = Instance.new("Part", l_Model_0);
        v24.Size = Vector3.new(4, 1, 1);
        v24.Name = "UpperLeg" .. v23 + 4;
        local v25 = Instance.new("Part", l_Model_0);
        v25.Size = Vector3.new(3, 1, 1);
        v25.Name = "LowerLeg" .. v23 + 4;
        local v26 = Instance.new("Part", l_Model_0);
        v26.Size = Vector3.new(1, 1, 1);
        v26.Name = "Tip" .. v23 + 4;
        local v27 = -0.7853975 + (v23 - 1) * 0.5235983333333333;
        local v28 = CFrame.fromEulerAnglesXYZ(0, v27, 0);
        v24.CFrame = v28 + v28 * Vector3.new(-3.5, 0, 0);
        v25.CFrame = v28 + v28 * Vector3.new(-7, 0, 0);
        v26.CFrame = v28 + v28 * Vector3.new(-9, 0, 0);
        local v29 = Instance.new("Attachment", l_Part_1);
        local v30 = Instance.new("Attachment", v24);
        v29.Name = v24.Name .. "Attachment";
        v30.Name = v24.Name .. "Attachment";
        v29.WorldOrientation = Vector3.new(0, (v27 * 180) / 3.14159, 0);
        v29.WorldPosition = v28 * Vector3.new(-1.5, 0.5, 0);
        v30.WorldPosition = v28 * Vector3.new(-1.5, 0.5, 0);
        local v31 = Instance.new("Attachment", v24);
        local v32 = Instance.new("Attachment", v25);
        v31.Name = v25.Name .. "Attachment";
        v32.Name = v25.Name .. "Attachment";
        v31.WorldPosition = v28 * Vector3.new(-5.5, 0.5, 0);
        v32.WorldPosition = v28 * Vector3.new(-5.5, 0.5, 0);
        v31.Axis = Vector3.new(0, 0, 1);
        v32.Axis = Vector3.new(0, 0, 1);
        local v33 = Instance.new("Attachment", v25);
        local v34 = Instance.new("Attachment", v26);
        v33.Name = v26.Name .. "Attachment";
        v34.Name = v26.Name .. "Attachment";
        v33.WorldPosition = v28 * Vector3.new(-8.5, 0.5, 0);
        v34.WorldPosition = v28 * Vector3.new(-8.5, 0.5, 0);
        v33.Axis = Vector3.new(0, 0, 1);
        v34.Axis = Vector3.new(0, 0, 1);
        local v35 = Instance.new("BallSocketConstraint", l_Model_0);
        v35.Attachment0 = v29;
        v35.Attachment1 = v30;
        v35.LimitsEnabled = true;
        v35.UpperAngle = 135;
        v35.TwistLimitsEnabled = true;
        v35.TwistLowerAngle = -3;
        v35.TwistUpperAngle = 3;
        v35.Enabled = false;
        v35.Name = "UpperLeg" .. v23 + 4 .. "Constraint";
        local v36 = Instance.new("HingeConstraint", l_Model_0);
        v36.Attachment0 = v31;
        v36.Attachment1 = v32;
        v36.LimitsEnabled = true;
        v36.LowerAngle = 10;
        v36.UpperAngle = 135;
        v36.Enabled = false;
        v36.Name = "LowerLeg" .. v23 + 4 .. "Constraint";
        local v37 = Instance.new("HingeConstraint", l_Model_0);
        v37.Attachment0 = v33;
        v37.Attachment1 = v34;
        v37.LimitsEnabled = true;
        v37.LowerAngle = 10;
        v37.UpperAngle = 135;
        v37.Enabled = false;
        v37.Name = "Tip" .. v23 + 4 .. "Constraint";
        local l_Motor6D_4 = Instance.new("Motor6D");
        l_Motor6D_4.Part0 = l_Part_1;
        l_Motor6D_4.Part1 = v24;
        l_Motor6D_4.C0 = CFrame.fromMatrix(v29.Position, v30.WorldAxis, v30.WorldSecondaryAxis);
        l_Motor6D_4.C1 = (v24.CFrame:inverse() * l_Part_1.CFrame) * l_Motor6D_4.C0;
        l_Motor6D_4.Parent = v24;
        l_Motor6D_4.Name = "UpperLeg" .. v23 + 4 .. "Motor";
        local l_Motor6D_5 = Instance.new("Motor6D");
        l_Motor6D_5.Part0 = v24;
        l_Motor6D_5.Part1 = v25;
        l_Motor6D_5.C0 = CFrame.fromMatrix(v31.Position, v31.Axis, v31.SecondaryAxis);
        l_Motor6D_5.C1 = (v25.CFrame:inverse() * v24.CFrame) * l_Motor6D_5.C0;
        l_Motor6D_5.Parent = v25;
        l_Motor6D_5.Name = "LowerLeg" .. v23 + 4 .. "Motor";
        local l_Motor6D_6 = Instance.new("Motor6D");
        l_Motor6D_6.Part0 = v25;
        l_Motor6D_6.Part1 = v26;
        l_Motor6D_6.C0 = CFrame.fromMatrix(v33.Position, v33.Axis, v33.SecondaryAxis);
        l_Motor6D_6.C1 = (v26.CFrame:inverse() * v25.CFrame) * l_Motor6D_6.C0;
        l_Motor6D_6.Parent = v26;
        l_Motor6D_6.Name = "Tip" .. v23 + 4 .. "Motor";
    end;
    return l_Model_0;
end;


return function(v0, v1)
    assert(type(v0) == "string", "A name must be provided to create an Action");
    assert(type(v1) == "function", "A function must be provided to create an Action");
    return (setmetatable({
        name = v0
    }, {
        __call = function(_, ...)
            local v3 = v1(...);
            assert(type(v3) == "table", "An action must return a table");
            v3.type = v0;
            return v3;
        end
    }));
end;


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        active = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        animationData = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        animationFromVideoErroredOut = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        animationFromVideoUploadStartTime = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        animationImportProgress = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        animationImportStatus = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        autoFocusFaceEnabled = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        visualizeBones = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0, v1)
    return {
        clipboard = v0,
        clipboardType = v1
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        creatingAnimationFromVideo = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        defaultEulerAnglesOrder = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        defaultRotationType = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        editingLength = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        editorMode = v0,
        editorModeSwitchTime = os.time()
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        eventEditingTick = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        FaceControlsEditorEnabled = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        faceControlsEditorOpenedTimestamp = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        frameRate = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        future = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        gridSpeed = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        haveToSetBackToNotLooping = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0, v1)
    return {
        horizontalScroll = v0,
        horizontalZoom = v1
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        ikEnabled = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        ikMode = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        iKOpenedTimestamp = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        inReviewState = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        isDirty = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        isLegacyAnimSaves = v0
    };
end);


local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v1 = require(script.Parent.Action);
local _ = require(l_script_FirstAncestor_0.Src.Util.PathUtils);
return v1(script.Name, function(v3)
    return {
        lastSelectedPath = v3
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        legacyAnimationInstances = v0 or {}
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        maxSize = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        motorData = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0, v1)
    return {
        notification = v0,
        value = v1
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        past = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        pinnedParts = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        playState = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        playbackSpeed = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        playbackStartInfo = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        playhead = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        readOnly = v0
    };
end);


local v0 = require(script.Parent.Action);
local v1 = require(script.Parent.Parent.Util.Constants);
return v0(script.Name, function(v2)
    return {
        reduceKeyframesDialogMode = v2 or v1.REDUCE_KEYFRAMES_DIALOG_MODE.Hidden
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        rightClickContextInfo = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        rootInstance = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        selected = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        selectedTrackInstances = v0
    };
end);


local _ = script:FindFirstAncestor("AnimationClipEditor");
return require(script.Parent.Action)(script.Name, function(v1)
    return {
        selectedTracks = v1 or {}
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        showAsSeconds = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        showEvents = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        showFaceControlsEditorPanel = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        showTree = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        snapMode = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        startingPose = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        symmetryEnabled = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        timelineUnit = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        tool = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0)
    return {
        topTrackIndex = v0
    };
end);


return require(script.Parent.Action)(script.Name, function(v0, v1, v2)
    return {
        tracks = v0,
        unusedTracks = v1,
        unusedFacs = v2
    };
end);


return require(script.Parent.Action)(script.Name, function(v0, v1)
    return {
        verticalScroll = v0,
        verticalZoom = v1
    };
end);


return require(script.Parent.Action)(script.Name, function()
    return {};
end);


local l_FirstAncestor_0 = script.Parent:FindFirstAncestor("AnimationClipEditor");
local v1 = require(l_FirstAncestor_0.Packages.Roact);
local l_ContextServices_0 = require(l_FirstAncestor_0.Packages.Framework).ContextServices;
local l_withContext_0 = l_ContextServices_0.withContext;
local v4 = require(l_FirstAncestor_0.Src.Components.EditorController);
local v5 = v1.PureComponent:extend("AnimationClipEditor");
v5.render = function(v6)
    return v1.createElement("Frame", {
        Size = UDim2.new(1, 0, 1, 0),
        BackgroundColor3 = v6.props.Stylizer.backgroundColor
    }, {
        EditorController = v1.createElement(v4, {
            Size = UDim2.new(1, 0, 1, 0)
        })
    });
end;
return (l_withContext_0({
    Localization = l_ContextServices_0.Localization,
    Plugin = l_ContextServices_0.Plugin,
    Stylizer = l_ContextServices_0.Stylizer,
    Analytics = l_ContextServices_0.Analytics
})(v5));


local l_RunService_0 = game:GetService("RunService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v2 = require(l_script_FirstAncestor_0.Packages.Roact);
local v3 = require(l_script_FirstAncestor_0.Packages.Rodux);
local l_ContextServices_0 = require(l_script_FirstAncestor_0.Packages.Framework).ContextServices;
local l_Actions_0 = l_script_FirstAncestor_0.Src.Actions;
local v6 = require(l_Actions_0.SetDefaultEulerAnglesOrder);
local v7 = require(l_Actions_0.SetDefaultRotationType);
local v8 = require(l_Actions_0.SetShowAsSeconds);
local v9 = require(l_Actions_0.SetSnapMode);
local v10 = require(l_Actions_0.SetTimelineUnit);
local v11 = require(l_Actions_0.SetTool);
local l_Components_0 = l_script_FirstAncestor_0.Src.Components;
local v13 = require(l_Components_0.AnimationClipEditor);
local v14 = require(l_Components_0.PluginWidget.DockWidget);
local v15 = require(l_Components_0.Draggers.DraggerWrapper);
local _ = require(l_Components_0.BlockingDialog.ErrorDialogContents);
local v17 = require(l_Components_0.BlockingDialog.ErrorList);
local l_Context_0 = l_script_FirstAncestor_0.Src.Context;
local v19 = require(l_Context_0.MainProvider);
local v20 = require(l_Context_0.Signals);
local v21 = require(l_script_FirstAncestor_0.Src.Reducers.MainReducer);
local l_Localization_0 = l_ContextServices_0.Localization;
local l_SourceStrings_0 = l_script_FirstAncestor_0.Src.Resources.SourceStrings;
local l_LocalizedStrings_0 = l_script_FirstAncestor_0.Src.Resources.LocalizedStrings;
local v25 = require(l_script_FirstAncestor_0.Src.Thunks.ReleaseEditor);
local l_Util_0 = l_script_FirstAncestor_0.Src.Util;
local v27 = require(l_Util_0.CalloutController);
local v28 = require(l_Util_0.Constants);
local v29 = require(l_Util_0.DebugFlags);
local v30 = require(l_Util_0.MakePluginActions);
local v31 = require(l_Util_0.RigVisualization);
local v32 = require(l_Util_0.showBlockingDialog);
local v33 = require(l_Util_0.Theme);
local v34 = require(l_script_FirstAncestor_0.Src.Resources.AnalyticsHandlers);
local v35 = v2.PureComponent:extend("AnimationClipEditorPlugin");
local l_game_FastString_0 = game:GetFastString("FaceControlsEditorLink");
local v37 = game:DefineFastString("ACECurveEditorLink", "https://create.roblox.com/docs/building-and-visuals/animation/curve-editor");
local v38 = game:DefineFastString("ACEFaceRecorderLink", "https://create.roblox.com/docs/building-and-visuals/animation/face-recorder");
local v39 = game:DefineFastFlag("ACETemporaryToolHack", false);
local v40 = game:DefineFastFlag("ACEHideBonesOnExit", false);
local l_StudioFixPluginWidgetLocalizedIds_0 = game:GetFastFlag("StudioFixPluginWidgetLocalizedIds");
local v42 = require(l_script_FirstAncestor_0.LuaFlags.GetFFlagFacialAnimationRecordingInStudio);
local v43 = require(l_script_FirstAncestor_0.LuaFlags.GetFFlagTimelineUnitSeconds);
v35.handleButtonClick = function(v44, v45)
    if not l_RunService_0:IsRunning() then
        v44:setState(function(v46)
            return {
                enabled = not v46.enabled
            };
        end);
        return ;
    else
        v32(v45, v2.createElement(v17, {
            ErrorKey = v28.EDITOR_ERRORS_KEY,
            ErrorList = {
                {
                    ID = v28.EDITOR_ERRORS.OpenedWhileRunning
                }
            }
        }));
        return ;
    end;
end;
v35.createPluginButton = function(v47, _, _)
    v47.toolbar = v47.props.pluginLoaderContext.toolbar;
    v47.mainButton = v47.props.pluginLoaderContext.mainButton;
end;
v35.init = function(v50, v51)
    assert(v51.plugin ~= nil, "AnimationClipEditorPlugin requires a Plugin.");
    local v52 = {
        v3.thunkMiddleware
    };
    if v29.LogRoduxEvents() then
        table.insert(v52, v3.loggerMiddleware);
    end;
    v50.store = v3.Store.new(v21, nil, v52);
    v50.localization = l_Localization_0.new({
        pluginName = v28.PLUGIN_NAME,
        stringResourceTable = l_SourceStrings_0,
        translationResourceTable = l_LocalizedStrings_0
    });
    v50.calloutController = v27.new();
    v50.calloutController:defineCallout("FaceControlsEditorCallout", v50.localization:getText("FaceControlsEditorButtonCallout", "Title"), v50.localization:getText("FaceControlsEditorButtonCallout", "Description"), l_game_FastString_0);
    v50.calloutController:defineCallout("CurveEditorCallout", v50.localization:getText("CurveEditorCallout", "Title"), v50.localization:getText("CurveEditorCallout", "Description"), v37);
    if v42() then
        v50.calloutController:defineCallout("FaceRecorderCallout", v50.localization:getText("FaceCapture", "TeachingCalloutTitle"), v50.localization:getText("FaceCapture", "TeachingCalloutDescription"), v38);
    end;
    v50.actions = l_ContextServices_0.PluginActions.new(v51.plugin, v30(v51.plugin, v50.localization));
    v50.state = {
        enabled = false,
        pluginGui = nil
    };
    v50.signals = v20.new(v28.SIGNAL_KEYS);
    v50.analytics = l_ContextServices_0.Analytics.new(v34);
    v50.onDockWidgetLoaded = function(v53)
        v50.dockWidget = v53;
    end;
    v50:createPluginButton(v51.plugin, v50.localization);
    v50.mainButton:SetActive(v50.state.enabled);
    task.defer(function()
        v51.pluginLoaderContext.mainButtonClickedSignal:Connect(function()
            v50:handleButtonClick(v51.plugin);
        end);
    end);
    v50.onDockWidgetEnabledChanged = function(v54)
        if v50.state.enabled == v54 then
            return ;
        else
            v50:setState({
                enabled = v54
            });
            return ;
        end;
    end;
    v50.onToolSelected = function(v55)
        local l_plugin_0 = v51.plugin;
        if not (not ((v55 ~= Enum.RibbonTool.Select and v55 ~= Enum.RibbonTool.Rotate) and v55 ~= Enum.RibbonTool.Move) or v55 == Enum.RibbonTool.Scale) or not v50.state.enabled then
            return ;
        else
            local v57 = nil;
            v57 = l_RunService_0.Heartbeat:Connect(function()
                v57:Disconnect();
                v50.mainButton:SetActive(true);
                l_plugin_0:Activate(true);
            end);
            v55 = v55 == Enum.RibbonTool.Scale and Enum.RibbonTool.Select or v55;
            v50.store:dispatch(v11(v55));
            v50.analytics:report("onToolChanged", v55.Name);
            return true;
        end;
    end;
    v50.deactivationInProgress = false;
    local function v59()
        local l_SelectedRibbonTool_0 = v51.plugin:GetSelectedRibbonTool();
        if not (l_SelectedRibbonTool_0 ~= Enum.RibbonTool.None) or not v50.onToolSelected(l_SelectedRibbonTool_0) then
            if v50.state.enabled then
                v50.store:dispatch(v25(v50.analytics));
            end;
            return ;
        else
            return ;
        end;
    end;
    v50.deactivationListener = v50.props.plugin.Deactivation:Connect(function()
        local l_plugin_1 = v51.plugin;
        if v40 then
            v31.clearMicrobones();
        end;
        if not v39 then
            local l_l_plugin_1_SelectedRibbonTool_0 = l_plugin_1:GetSelectedRibbonTool();
            if not (l_l_plugin_1_SelectedRibbonTool_0 ~= Enum.RibbonTool.None) or not v50.onToolSelected(l_l_plugin_1_SelectedRibbonTool_0) then
                if v50.state.enabled then
                    v50.store:dispatch(v25(v50.analytics));
                end;
                return ;
            else
                return ;
            end;
        else
            v50.deactivationInProgress = true;
            task.wait();
            task.wait();
            v59();
            v50.deactivationInProgress = false;
            return ;
        end;
    end);
    v50.unloadingListener = if not v39 then nil else v50.props.plugin.Unloading:Connect(function()
        if v50.deactivationInProgress then
            v59();
            v50.deactivationInProgress = false;
        end;
    end);
    v50.mouse = v50.props.plugin:GetMouse();
    v50.theme = v33();
    v50.closeWidget = function()
        v50:setState({
            enabled = false
        });
    end;
end;
v35.getPluginSettings = function(v62)
    local l_plugin_2 = v62.props.plugin;
    local l_l_plugin_2_Setting_0 = l_plugin_2:GetSetting(v28.SETTINGS.SnapMode);
    local l_l_plugin_2_Setting_1 = l_plugin_2:GetSetting(v28.SETTINGS.ShowAsSeconds);
    local l_l_plugin_2_Setting_2 = l_plugin_2:GetSetting(v28.SETTINGS.TimelineUnit);
    if l_l_plugin_2_Setting_0 ~= nil then
        v62.store:dispatch(v9(l_l_plugin_2_Setting_0));
    else
        l_l_plugin_2_Setting_0 = l_plugin_2:GetSetting("SnapMode");
        if l_l_plugin_2_Setting_0 ~= nil then
            v62.store:dispatch(v9(l_l_plugin_2_Setting_0));
        else
            v62.store:dispatch(v9(v28.SNAP_MODES.Keyframes));
        end;
    end;
    if not v43() then
        if l_l_plugin_2_Setting_1 ~= nil then
            v62.store:dispatch(v8(l_l_plugin_2_Setting_1));
        else
            l_l_plugin_2_Setting_1 = l_plugin_2:GetSetting("ShowAsSeconds");
            if l_l_plugin_2_Setting_1 ~= nil then
                v62.store:dispatch(v8(l_l_plugin_2_Setting_1));
            end;
        end;
    elseif not l_l_plugin_2_Setting_2 then
        if l_l_plugin_2_Setting_1 ~= nil then
            v62.store:dispatch(v10(if not l_l_plugin_2_Setting_1 then v28.TIMELINE_UNITS.Frames else v28.TIMELINE_UNITS.Seconds));
        end;
    else
        v62.store:dispatch(v10(l_l_plugin_2_Setting_2));
    end;
    local l_l_plugin_2_Setting_3 = l_plugin_2:GetSetting(v28.SETTINGS.RotationType);
    if not l_l_plugin_2_Setting_3 then
        l_l_plugin_2_Setting_3 = l_plugin_2:GetSetting("RotationType");
        if not l_l_plugin_2_Setting_3 then
            v62.store:dispatch(v7(v28.TRACK_TYPES.EulerAngles));
        else
            v62.store:dispatch(v7(l_l_plugin_2_Setting_3));
        end;
    else
        v62.store:dispatch(v7(l_l_plugin_2_Setting_3));
    end;
    local l_l_plugin_2_Setting_4 = l_plugin_2:GetSetting(v28.SETTINGS.EulerAnglesOrder);
    v62.store:dispatch(v6(if not l_l_plugin_2_Setting_4 then Enum.RotationOrder.XYZ else Enum.RotationOrder[l_l_plugin_2_Setting_4]));
end;
v35.setPluginSettings = function(v69)
    local l_plugin_3 = v69.props.plugin;
    local l_Status_0 = v69.store:getState().Status;
    if not v43() then
        l_plugin_3:SetSetting(v28.SETTINGS.ShowAsSeconds, l_Status_0.ShowAsSeconds);
    else
        l_plugin_3:SetSetting(v28.SETTINGS.TimelineUnit, l_Status_0.TimelineUnit);
    end;
    l_plugin_3:SetSetting(v28.SETTINGS.SnapMode, l_Status_0.SnapMode);
    l_plugin_3:SetSetting(v28.SETTINGS.RotationType, l_Status_0.DefaultRotationType);
    l_plugin_3:SetSetting(v28.SETTINGS.EulerAnglesOrder, l_Status_0.DefaultEulerAnglesOrder);
end;
local function _(v72)
    if v72 then
        return v72:FindFirstChild(v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME);
    else
        return nil;
    end;
end;
local function _(v74)
    local v75 = if v74 then v74:FindFirstChild(v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME) else nil;
    if not v75 then
        v75 = Instance.new("BindableEvent");
        v75.Name = v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME;
        v75.Parent = v74;
    end;
    return v75;
end;
local function _(v77)
    local v78 = if v77 then v77:FindFirstChild(v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME) else nil;
    if v78 then
        v78:Destroy();
    end;
end;
v35.didMount = function(v80)
    v80:setState({
        pluginGui = v80.dockWidget,
        enabled = v80.dockWidget.Enabled
    });
    v80:getPluginSettings();
    local l_dockWidget_0 = v80.dockWidget;
    if not if l_dockWidget_0 then l_dockWidget_0:FindFirstChild(v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME) else nil then
        local l_BindableEvent_0 = Instance.new("BindableEvent");
        l_BindableEvent_0.Name = v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME;
        l_BindableEvent_0.Parent = l_dockWidget_0;
    end;
end;
v35.willUnmount = function(v83)
    if v83.deactivationListener then
        v83.deactivationListener:Disconnect();
    end;
    if not (not v39 or not v83.unloadingListener) then
        v83.unloadingListener:Disconnect();
    end;
    local l_dockWidget_1 = v83.dockWidget;
    local v85 = if l_dockWidget_1 then l_dockWidget_1:FindFirstChild(v28.ANIMATION_UPLOAD_SUCCESS_EVENT_NAME) else nil;
    if v85 then
        v85:Destroy();
    end;
    v83:setPluginSettings();
    v83.theme:destroy();
end;
v35.render = function(v86)
    local l_props_0 = v86.props;
    local l_store_0 = v86.store;
    local l_localization_0 = v86.localization;
    local l_plugin_4 = l_props_0.plugin;
    local l_actions_0 = v86.actions;
    local l_analytics_0 = v86.analytics;
    local l_mouse_0 = v86.mouse;
    local l_theme_0 = v86.theme;
    local l_pluginGui_0 = v86.state.pluginGui;
    local v96 = l_pluginGui_0 ~= nil;
    local l_enabled_0 = v86.state.enabled;
    v86.mainButton:SetActive(l_enabled_0);
    return v2.createElement(v14, {
        Id = if not l_StudioFixPluginWidgetLocalizedIds_0 then nil else "AnimationClipEditor",
        Title = l_localization_0:getText("Plugin", "Name"),
        Name = "AnimationClipEditor",
        ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
        Widget = l_props_0.pluginLoaderContext.mainDockWidget,
        Enabled = l_enabled_0,
        [v2.Ref] = v86.onDockWidgetLoaded,
        [v2.Change.Enabled] = v86.onDockWidgetEnabledChanged,
        OnClose = v86.closeWidget
    }, {
        MainProvider = (v96 and l_enabled_0) and v2.createElement(v19, {
            theme = l_theme_0,
            focusGui = l_pluginGui_0,
            store = l_store_0,
            plugin = l_plugin_4,
            localization = l_localization_0,
            pluginActions = l_actions_0,
            mouse = l_mouse_0,
            analytics = l_analytics_0,
            signals = v86.signals,
            calloutController = v86.calloutController
        }, {
            AnimationClipEditor = v2.createElement(v13),
            Dragger = v2.createElement(v15)
        })
    });
end;
return v35;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v1 = require(l_script_FirstAncestor_0.Packages.Roact);
local v2 = require(l_script_FirstAncestor_0.Packages.RoactRodux);
local v3 = require(l_script_FirstAncestor_0.Packages.Framework);
local v4 = require(l_script_FirstAncestor_0.Src.Util.RigInfo);
local v5 = require(l_script_FirstAncestor_0.Src.Util.RigUtils);
local v6 = require(l_script_FirstAncestor_0.Src.Util.Constants);
local l_ContextServices_0 = v3.ContextServices;
local l_withContext_0 = l_ContextServices_0.withContext;
local v9 = require(l_script_FirstAncestor_0.Src.Components.ContextMenu);
local _ = v6.MENU_SEPARATOR;
local v11 = require(l_script_FirstAncestor_0.Src.Thunks.Exporting.SaveAnimation);
local v12 = require(l_script_FirstAncestor_0.Src.Thunks.Exporting.ExportAnimation);
local v13 = require(l_script_FirstAncestor_0.Src.Thunks.History.AddWaypoint);
local v14 = require(l_script_FirstAncestor_0.Src.Thunks.UpdateMetadata);
local v15 = require(l_script_FirstAncestor_0.Src.Actions.SetEditorMode);
local v16 = game:DefineFastFlag("AnimationFromVideoCreatorServiceInAnimationEditor", false);
local v17 = game:DefineFastFlag("ACESanitizeAnimations", false);
local v18 = require(l_script_FirstAncestor_0.LuaFlags.GetFFlagForceR6HumanoidRootPart);
local v19 = v1.PureComponent:extend("AnimationClipMenu");
v19.init = function(v20)
    v20.hasInternalPermission = false;
end;
v19.didMount = function(v21)
    if v17 then
        local l_status_0, l_result_0 = pcall(function()
            return game:GetService("StudioService"):HasInternalPermission();
        end);
        v21.hasInternalPermission = l_status_0 and l_result_0;
    end;
end;
v19.makeLoadMenu = function(v24)
    local l_props_0 = v24.props;
    local l_Localization_0 = l_props_0.Localization;
    local l_OnLoadRequested_0 = l_props_0.OnLoadRequested;
    local v28 = v5.getAnimSaves(l_props_0.RootInstance);
    local v29 = {
        Text = l_Localization_0:getText("Menu", "Load"),
        Data = nil,
        OnItemClicked = nil
    };
    if #v28 > 0 then
        for _, v31 in ipairs(v28) do
            local l_Name_0 = v31.animation.Name;
            if v31.isLegacyAnimSaves then
                l_Name_0 = l_Name_0 .. " *";
            end;
            table.insert(v29, {
                Text = l_Name_0,
                Data = {
                    Animation = v31.animation,
                    IsLegacyAnimSaves = v31.isLegacyAnimSaves
                },
                OnItemClicked = function(v33)
                    l_OnLoadRequested_0(v33.Data.Animation.Name, v33.Data.IsLegacyAnimSaves);
                end
            });
        end;
        return v29;
    else
        v29.Enabled = false;
        return v29;
    end;
end;
v19.makeSaveAsMenu = function(v34)
    local l_props_1 = v34.props;
    local l_Localization_1 = l_props_1.Localization;
    local _ = l_props_1.CurrentAnimation or "";
    local v38 = v5.getAnimSaves(l_props_1.RootInstance);
    local function _(v39, v40)
        l_props_1.OnOverwriteRequested(v39, v40);
    end;
    local v42 = {
        Text = l_Localization_1:getText("Menu", "SaveAs");
        {
            Text = l_Localization_1:getText("Menu", "New"),
            OnItemClicked = l_props_1.OnSaveAsRequested
        }
    };
    if #v38 > 0 then
        table.insert(v42, v6.MENU_SEPARATOR);
    end;
    for _, v44 in ipairs(v38) do
        local l_Name_1 = v44.animation.Name;
        if v44.isLegacyAnimSaves then
            l_Name_1 = l_Name_1 .. " *";
        end;
        table.insert(v42, {
            Text = l_Name_1,
            Data = {
                Animation = v44.animation,
                IsLegacyAnimSaves = v44.isLegacyAnimSaves
            },
            OnItemClicked = function(v46)
                l_props_1.OnOverwriteRequested(v46.Data.Animation.Name, v46.Data.IsLegacyAnimSaves);
            end
        });
    end;
    return v42;
end;
local function _(v47)
    if (not v47 or not v47:IsA("Humanoid")) or v47.RigType ~= Enum.HumanoidRigType.R15 then
        return false;
    else
        local l_Parent_0 = v47.Parent;
        if l_Parent_0 and l_Parent_0:IsA("Model") then
            return true;
        else
            return false;
        end;
    end;
end;
v19.makeImportMenu = function(v50)
    local l_props_2 = v50.props;
    local l_Localization_2 = l_props_2.Localization;
    local v53 = {
        Text = l_Localization_2:getText("Menu", "Import");
        {
            Text = l_Localization_2:getText("Menu", "FromRoblox"),
            OnItemClicked = l_props_2.OnImportRequested
        },
        {
            Text = l_Localization_2:getText("Menu", "FromFBX"),
            OnItemClicked = l_props_2.OnImportFbxRequested
        }
    };
    if v16 then
        local v54 = {
            Text = l_Localization_2:getText("Menu", "CreateFromVideo"),
            OnItemClicked = l_props_2.OnCreateFromVideoRequested
        };
        local v55;
        if not v18() then
            local l_Humanoid_0 = l_props_2.RootInstance:FindFirstChildOfClass("Humanoid");
            if (not l_Humanoid_0 or not l_Humanoid_0:IsA("Humanoid")) or l_Humanoid_0.RigType ~= Enum.HumanoidRigType.R15 then
                v55 = false;
            else
                local l_Parent_1 = l_Humanoid_0.Parent;
                v55 = not not l_Parent_1 and (l_Parent_1:IsA("Model") and true or false);
            end;
        else
            v55 = v4.isR15Humanoid(l_props_2.RootInstance);
        end;
        v54.Enabled = v55;
        table.insert(v53, v54);
    end;
    return v53;
end;
v19.makePriorityMenu = function(v58)
    local l_props_3 = v58.props;
    local l_Localization_3 = l_props_3.Localization;
    local l_SetPriority_0 = l_props_3.SetPriority;
    local l_AnimationData_0 = l_props_3.AnimationData;
    local v63 = (l_AnimationData_0 and l_AnimationData_0.Metadata) and l_AnimationData_0.Metadata.Priority;
    local function v65(v64)
        l_SetPriority_0(v64.Data);
    end;
    local v66 = {
        Text = l_Localization_3:getText("Menu", "SetPriority")
    };
    for _, v68 in {
        Enum.AnimationPriority.Core,
        Enum.AnimationPriority.Idle,
        Enum.AnimationPriority.Movement,
        Enum.AnimationPriority.Action,
        Enum.AnimationPriority.Action2,
        Enum.AnimationPriority.Action3,
        Enum.AnimationPriority.Action4
    }, nil, nil do
        table.insert(v66, {
            Text = l_Localization_3:getText("Menu", v68.Name),
            Data = v68,
            Checked = v63 == v68,
            OnItemClicked = v65
        });
    end;
    return v66;
end;
v19.makeAction = function(v69, v70, v71, v72)
    return {
        Text = v69.props.Localization:getText("Menu", v70),
        Enabled = v72 ~= false,
        OnItemClicked = v71
    };
end;
v19.makeMenuActions = function(v73)
    local l_props_4 = v73.props;
    local l_OnCreateNewRequested_0 = l_props_4.OnCreateNewRequested;
    local l_OnReduceKeyframesRequested_0 = l_props_4.OnReduceKeyframesRequested;
    local l_OnSanitizeAnimation_0 = l_props_4.OnSanitizeAnimation;
    local v78 = l_props_4.CurrentAnimation or "";
    local l_AnimationData_1 = l_props_4.AnimationData;
    local l_Plugin_0 = l_props_4.Plugin;
    local v81 = l_props_4.PlayState == v6.PLAY_STATE.Record;
    local l_l_AnimationData_1_0 = l_AnimationData_1;
    if l_l_AnimationData_1_0 then
        l_l_AnimationData_1_0 = l_AnimationData_1.Metadata;
        if l_l_AnimationData_1_0 then
            l_l_AnimationData_1_0 = false;
            if l_AnimationData_1.Metadata.EndTick > 0 then
                l_l_AnimationData_1_0 = not v81;
            end;
        end;
    end;
    local v83 = {
        v73:makeLoadMenu(),
        v73:makeAction("Save", function()
            l_props_4.SaveAnimation(v78, l_props_4.Analytics);
        end),
        v73:makeSaveAsMenu(),
        v6.MENU_SEPARATOR,
        v73:makeImportMenu(),
        v73:makeAction("PublishToRoblox", function()
            l_props_4.ExportAnimation(l_Plugin_0, l_props_4.Analytics);
        end),
        v6.MENU_SEPARATOR,
        v73:makeAction("CreateNew", l_OnCreateNewRequested_0),
        v6.MENU_SEPARATOR,
        v73:makePriorityMenu(),
        v6.MENU_SEPARATOR,
        v73:makeAction("OptimizeKeyframes", l_OnReduceKeyframesRequested_0, l_l_AnimationData_1_0)
    };
    if not (not v17 or not v73.hasInternalPermission) then
        table.insert(v83, {
            Text = "[INTERNAL] Sanitize animation",
            OnItemClicked = l_OnSanitizeAnimation_0
        });
    end;
    return v83;
end;
v19.render = function(v84)
    local l_props_5 = v84.props;
    return not not l_props_5.ShowMenu and v1.createElement(v9, {
        Actions = v84:makeMenuActions(),
        OnMenuOpened = l_props_5.OnMenuOpened
    }) or nil;
end;
return v2.connect(function(v86, _)
    local l_Status_0 = v86.Status;
    return {
        AnimationData = v86.AnimationData,
        EditorMode = l_Status_0.EditorMode,
        PlayState = l_Status_0.PlayState,
        RootInstance = l_Status_0.RootInstance
    };
end, function(v89)
    return {
        ExportAnimation = function(v90, v91)
            v89(v12(v90, v91));
        end,
        SaveAnimation = function(v92, v93)
            v89(v11(v92, v93));
        end,
        SetEditorMode = function(v94)
            v89(v15(v94));
        end,
        SetPriority = function(v95)
            v89(v13());
            v89(v14({
                Priority = v95
            }));
        end
    };
end)((l_withContext_0({
    Localization = l_ContextServices_0.Localization,
    Plugin = l_ContextServices_0.Plugin,
    Analytics = l_ContextServices_0.Analytics
})(v19)));


local v0 = newproxy(true);
local v1 = newproxy(true);
local v2 = newproxy(true);
local v3 = newproxy(true);
local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v5 = require(l_script_FirstAncestor_0.Packages.Framework);
local v6 = require(l_script_FirstAncestor_0.Packages.Roact);
local v7 = require(l_script_FirstAncestor_0.Packages.RoactRodux);
local v8 = require(l_script_FirstAncestor_0.Src.Util.Constants);
local v9 = require(l_script_FirstAncestor_0.Src.Util.AnimationData);
local v10 = UDim.new(0, v8.INDENT_PADDING);
local l_ContextServices_0 = v5.ContextServices;
local l_withContext_0 = l_ContextServices_0.withContext;
local l_Actions_0 = l_script_FirstAncestor_0.Src.Actions;
local v14 = require(l_Actions_0.SetInReviewState);
local v15 = require(l_Actions_0.SetIsDirty);
local v16 = require(l_Actions_0.SetIsLegacyAnimSaves);
local v17 = require(l_Actions_0.SetPlayState);
local v18 = require(l_Actions_0.SetReduceKeyframesDialogMode);
local l_Components_0 = l_script_FirstAncestor_0.Src.Components;
local v20 = require(l_Components_0.Toast.ActionToast);
local v21 = require(l_Components_0.AnimationClipMenu);
local v22 = require(l_Components_0.ContextButton);
local v23 = require(l_Components_0.EditEventsDialog.FocusedPrompt);
local v24 = require(l_Components_0.TextEntryPrompt);
local l_Thunks_0 = l_script_FirstAncestor_0.Src.Thunks;
local v26 = require(l_Thunks_0.Exporting.CreateFromVideoAndImportFBXAnimationUserMayChooseModel);
local v27 = require(l_Thunks_0.Exporting.ImportFBXAnimationUserMayChooseModel);
local v28 = require(l_Thunks_0.Exporting.ImportKeyframeSequence);
local v29 = require(l_Thunks_0.Exporting.ImportLoadedFBXAnimation);
local v30 = require(l_Thunks_0.Exporting.LoadAnimation);
local v31 = require(l_Thunks_0.LoadAnimationData);
local v32 = require(l_Thunks_0.SanitizeAnimation);
local v33 = require(l_Thunks_0.Exporting.SaveAnimation);
local v34 = v6.PureComponent:extend("AnimationClipDropdown");
v34.init = function(v35)
    v35.state = {
        showMenu = false,
        showSaveAsPrompt = false,
        showCreateNewPrompt = false,
        showImportAnimModelChoicePrompt = false,
        showPromotePrompt = false,
        overwriteName = nil,
        loadingName = nil,
        isActionLegacyAnimSaves = nil,
        showCreateAnimationFromVideoTutorial = false
    };
    v35.showMenu = function()
        if not v35.props.ReadOnly then
            v35.props.SetPlayState(v8.PLAY_STATE.Pause);
            v35:setState({
                showMenu = true
            });
        end;
    end;
    v35.hideMenu = function()
        v35:setState({
            showMenu = false
        });
    end;
    v35.showOverwritePrompt = function(v36, v37)
        v35:setState({
            overwriteName = v36,
            isActionLegacyAnimSaves = v37
        });
    end;
    v35.hideOverwritePrompt = function()
        v35:setState({
            overwriteName = v6.None,
            isActionLegacyAnimSaves = v6.None
        });
    end;
    v35.showSaveAsPrompt = function()
        v35:setState({
            showSaveAsPrompt = true
        });
    end;
    v35.hideSaveAsPrompt = function()
        v35:setState({
            showSaveAsPrompt = false
        });
    end;
    v35.showImportAnimModelChoicePrompt = function()
        v35:setState({
            showImportAnimModelChoicePrompt = true
        });
    end;
    v35.hideImportAnimModelChoicePrompt = function()
        v35:setState({
            showImportAnimModelChoicePrompt = false
        });
    end;
    v35.showReduceKeyframesDialog = function()
        v35.props.SetReduceKeyframesDialogMode(v8.REDUCE_KEYFRAMES_DIALOG_MODE.FromMenu);
    end;
    v35.showCreateNewPrompt = function()
        v35:setState({
            showCreateNewPrompt = true
        });
    end;
    v35.hideCreateNewPrompt = function()
        v35:setState({
            showCreateNewPrompt = false
        });
    end;
    v35.showPromotePrompt = function()
        v35:setState({
            showPromotePrompt = true
        });
    end;
    v35.hidePromotePrompt = function()
        v35:setState({
            showPromotePrompt = false
        });
    end;
    v35.showLoadNewPrompt = function(v38, v39)
        v35:setState({
            loadingName = v38,
            isActionLegacyAnimSaves = v39
        });
    end;
    v35.hideLoadNewPrompt = function()
        v35:setState({
            loadingName = v6.None,
            isActionLegacyAnimSaves = v6.None
        });
    end;
    v35.setShowCreateAnimationFromVideoTutorial = function(v40)
        v35:setState({
            showCreateAnimationFromVideoTutorial = v40
        });
    end;
    v35.continueAfterCreateAnimationFromVideoTutorial = function()
        local l_props_0 = v35.props;
        l_props_0.SetInReviewState(false);
        l_props_0.CreateFromVideoAndImportFBXAnimationUserMayChooseModel(l_props_0.Plugin, v35, l_props_0.Analytics);
    end;
    v35.importRequested = function()
        if not v35.props.IsDirty then
            local l_Plugin_0 = v35.props.Plugin;
            v35.props.SetInReviewState(false);
            v35.props.ImportKeyframeSequence(l_Plugin_0, v35.props.Analytics);
            return ;
        else
            v35.showLoadNewPrompt(v1);
            return ;
        end;
    end;
    v35.importFbxRequested = function()
        if not v35.props.IsDirty then
            local l_Plugin_1 = v35.props.Plugin;
            v35.props.SetInReviewState(false);
            v35.props.ImportFBXAnimationUserMayChooseModel(l_Plugin_1, v35, v35.props.Analytics);
            return ;
        else
            v35.showLoadNewPrompt(v2);
            return ;
        end;
    end;
    v35.startAnimationFromVideoFlow = function()
        v35.props.Analytics:report("onAnimationEditorImportVideoCreate");
        v35.setShowCreateAnimationFromVideoTutorial(true);
    end;
    v35.createFromVideoRequested = function()
        if not v35.props.IsDirty then
            v35.props.SetInReviewState(false);
            v35.startAnimationFromVideoFlow();
            return ;
        else
            v35.showLoadNewPrompt(v3);
            return ;
        end;
    end;
    v35.createNew = function()
        if not v35.props.IsDirty then
            v35.props.SetInReviewState(false);
            v35.showCreateNewPrompt();
            return ;
        else
            v35.showLoadNewPrompt(v0);
            return ;
        end;
    end;
    v35.loadNew = function(v44, v45)
        if not v35.props.IsDirty then
            v35.props.SetInReviewState(false);
            v35.props.LoadAnimation(v44, v45, v35.props.Analytics);
            return ;
        else
            v35.showLoadNewPrompt(v44, v45);
            return ;
        end;
    end;
    v35.handleLoadNewPrompt = function()
        local l_props_1 = v35.props;
        local l_state_0 = v35.state;
        local l_loadingName_0 = l_state_0.loadingName;
        local l_isActionLegacyAnimSaves_0 = l_state_0.isActionLegacyAnimSaves;
        local l_Plugin_2 = v35.props.Plugin;
        v35.hideLoadNewPrompt();
        v35.props.SetInReviewState(false);
        if l_loadingName_0 == v0 then
            v35.showCreateNewPrompt();
            return ;
        elseif l_loadingName_0 == v1 then
            l_props_1.ImportKeyframeSequence(l_Plugin_2, l_props_1.Analytics);
            return ;
        elseif l_loadingName_0 == v2 then
            l_props_1.ImportFBXAnimationUserMayChooseModel(l_Plugin_2, v35, l_props_1.Analytics);
            return ;
        elseif l_loadingName_0 == v3 then
            v35.startAnimationFromVideoFlow();
            return ;
        else
            l_props_1.LoadAnimation(l_loadingName_0, l_isActionLegacyAnimSaves_0, l_props_1.Analytics);
            return ;
        end;
    end;
    v35.onSanitizeAnimation = function()
        local l_props_2 = v35.props;
        l_props_2.SanitizeAnimation(l_props_2.Analytics);
    end;
end;
v34.render = function(v52)
    local l_Localization_0 = v52.props.Localization;
    local l_props_3 = v52.props;
    local l_state_1 = v52.state;
    local l_Stylizer_0 = l_props_3.Stylizer;
    local l_AnimationName_0 = l_props_3.AnimationName;
    local l_LayoutOrder_0 = l_props_3.LayoutOrder;
    local l_IsChannelAnimation_0 = l_props_3.IsChannelAnimation;
    local l_dropdownTheme_0 = l_Stylizer_0.dropdownTheme;
    local l_showMenu_0 = l_state_1.showMenu;
    local l_showSaveAsPrompt_0 = l_state_1.showSaveAsPrompt;
    local l_showCreateNewPrompt_0 = l_state_1.showCreateNewPrompt;
    local l_showImportAnimModelChoicePrompt_0 = l_state_1.showImportAnimModelChoicePrompt;
    local l_overwriteName_0 = l_state_1.overwriteName;
    local l_loadingName_1 = l_state_1.loadingName;
    local l_showPromotePrompt_0 = l_state_1.showPromotePrompt;
    local l_IsLegacyAnimSaves_0 = l_props_3.IsLegacyAnimSaves;
    local l_isActionLegacyAnimSaves_1 = l_state_1.isActionLegacyAnimSaves;
    local l_showCreateAnimationFromVideoTutorial_0 = l_state_1.showCreateAnimationFromVideoTutorial;
    local v71 = false;
    if l_showCreateAnimationFromVideoTutorial_0 then
        v71 = game:GetService("AnimationFromVideoCreatorStudioService"):IsAgeRestricted();
        if v71 then
            l_showCreateAnimationFromVideoTutorial_0 = false;
        end;
    end;
    return v6.createElement("ImageButton", {
        Size = UDim2.new(1, -v8.CONTROLS_WIDTH - v8.TIME_DISPLAY_WIDTH, 1, 0),
        BackgroundTransparency = 1,
        ImageTransparency = 1,
        AutoButtonColor = false,
        LayoutOrder = l_LayoutOrder_0,
        [v6.Event.Activated] = v52.showMenu
    }, {
        Padding = v6.createElement("UIPadding", {
            PaddingLeft = v10,
            PaddingRight = v10
        }),
        AnimationClipLabel = v6.createElement("TextLabel", {
            Size = UDim2.new(1, -v8.TRACKLIST_BUTTON_SIZE - v8.INDENT_PADDING, 1, 0),
            BackgroundTransparency = 1,
            Text = l_AnimationName_0,
            TextTruncate = Enum.TextTruncate.AtEnd,
            TextSize = l_dropdownTheme_0.textSize,
            Font = l_Stylizer_0.font,
            TextColor3 = l_dropdownTheme_0.textColor,
            TextXAlignment = Enum.TextXAlignment.Left
        }),
        ContextButton = v6.createElement(v22, {
            AnchorPoint = Vector2.new(1, 0.5),
            Position = UDim2.new(1, 0, 0.5, 0),
            OnActivated = v52.showMenu
        }),
        AnimationClipMenu = v6.createElement(v21, {
            ShowMenu = l_showMenu_0,
            CurrentAnimation = l_AnimationName_0,
            IsLegacyAnimSaves = l_IsLegacyAnimSaves_0,
            IsChannelAnimation = l_IsChannelAnimation_0,
            OnMenuOpened = v52.hideMenu,
            OnOverwriteRequested = v52.showOverwritePrompt,
            OnSaveAsRequested = v52.showSaveAsPrompt,
            OnCreateNewRequested = v52.createNew,
            OnLoadRequested = v52.loadNew,
            OnImportRequested = v52.importRequested,
            OnImportFbxRequested = v52.importFbxRequested,
            OnCreateFromVideoRequested = v52.createFromVideoRequested,
            OnPromoteRequested = v52.showPromotePrompt,
            OnReduceKeyframesRequested = v52.showReduceKeyframesDialog,
            OnSanitizeAnimation = v52.onSanitizeAnimation
        }),
        CreateNewPrompt = l_showCreateNewPrompt_0 and v6.createElement(v24, {
            PromptText = l_Localization_0:getText("Title", "CreateNew"),
            InputText = l_Localization_0:getText("Dialog", "AnimationName"),
            Text = l_Localization_0:getText("Title", "DefaultAnimationName"),
            Buttons = {
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "Cancel"),
                    Style = "Round"
                },
                {
                    Key = true,
                    Text = l_Localization_0:getText("Dialog", "Create"),
                    Style = "RoundPrimary"
                }
            },
            OnTextSubmitted = function(v72)
                v52.hideCreateNewPrompt();
                local v73 = v9.newRigAnimation(v72);
                l_props_3.LoadAnimationData(v73, v52.props.Analytics);
                l_props_3.SetIsDirty(false);
                l_props_3.SetIsLegacyAnimSaves(false);
                l_props_3.Analytics:report("onCreateNewAnimation", v72, if not v73.Metadata then nil else v73.Metadata.Guid);
            end,
            OnClose = v52.hideCreateNewPrompt
        }),
        SaveAsPrompt = l_showSaveAsPrompt_0 and v6.createElement(v24, {
            PromptText = l_Localization_0:getText("Title", "SaveAsNew"),
            InputText = l_Localization_0:getText("Dialog", "AnimationName"),
            NoticeText = l_Localization_0:getText("Dialog", "SaveLocation"),
            Text = l_AnimationName_0,
            Buttons = {
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "Cancel"),
                    Style = "Round"
                },
                {
                    Key = true,
                    Text = l_Localization_0:getText("Dialog", "Save"),
                    Style = "RoundPrimary"
                }
            },
            OnTextSubmitted = function(v74)
                v52.hideSaveAsPrompt();
                l_props_3.SetIsLegacyAnimSaves(false);
                l_props_3.SaveAnimation(v74, l_props_3.Analytics);
            end,
            OnClose = v52.hideSaveAsPrompt
        }),
        ImportAnimModelChoicePrompt = l_showImportAnimModelChoicePrompt_0 and v6.createElement(v20, {
            Text = l_Localization_0:getText("Toast", "AnimationImportModelsDiffer"),
            ButtonWidth = v8.PROMPT_BUTTON_SIZE.X * 1.5,
            Buttons = {
                {
                    Key = true,
                    Text = l_Localization_0:getText("Toast", "AnimationImportUseFBX"),
                    Style = "Round"
                },
                {
                    Key = false,
                    Text = l_Localization_0:getText("Toast", "AnimationImportUseSelected"),
                    Style = "Round"
                }
            },
            OnButtonClicked = function(v75)
                v52.hideImportAnimModelChoicePrompt();
                v52.props.ImportLoadedFBXAnimation(plugin, v75, v52.props.Analytics);
            end
        }),
        OverwritePrompt = l_overwriteName_0 and v6.createElement(v23, {
            PromptText = l_Localization_0:getText("Menu", "Overwrite_Migrated", {
                overwriteName = l_overwriteName_0
            }),
            Buttons = {
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "No"),
                    Style = "Round"
                },
                {
                    Key = true,
                    Text = l_Localization_0:getText("Dialog", "Yes"),
                    Style = "RoundPrimary"
                }
            },
            OnButtonClicked = function(v76)
                v52.hideOverwritePrompt();
                if v76 then
                    l_props_3.SetIsLegacyAnimSaves(l_isActionLegacyAnimSaves_1);
                    l_props_3.SaveAnimation(l_overwriteName_0, l_props_3.Analytics);
                end;
            end,
            OnClose = v52.hideOverwritePrompt
        }),
        PromotePrompt = not not l_showPromotePrompt_0 and v6.createElement(v23, {
            PromptText = l_Localization_0:getText("Dialog", "PromotePrompt"),
            Buttons = {
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "Cancel"),
                    Style = "Round"
                },
                {
                    Key = true,
                    Text = l_Localization_0:getText("Dialog", "Confirm"),
                    Style = "RoundPrimary"
                }
            },
            OnButtonClicked = function(v77)
                v52.hidePromotePrompt();
                if v77 then
                    l_props_3.PromoteKeyframeSequence(l_props_3.Analytics);
                end;
            end,
            OnClose = v52.hidePromotePrompt
        }) or nil,
        LoadNewPrompt = l_loadingName_1 and v6.createElement(v24, {
            PromptText = l_Localization_0:getText("Title", "ConfirmSave"),
            InputText = l_Localization_0:getText("Dialog", "AnimationName"),
            NoticeText = l_Localization_0:getText("Dialog", "SaveLocation"),
            Text = l_AnimationName_0,
            Buttons = {
                {
                    Key = "Delete",
                    Text = l_Localization_0:getText("Dialog", "Delete"),
                    Style = "Round"
                },
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "Cancel"),
                    Style = "Round"
                },
                {
                    Key = true,
                    Text = l_Localization_0:getText("Dialog", "Save"),
                    Style = "RoundPrimary"
                }
            },
            OnButtonClicked = function(v78)
                if v78 == "Delete" then
                    v52.handleLoadNewPrompt();
                end;
            end,
            OnTextSubmitted = function(v79)
                l_props_3.SaveAnimation(v79, l_props_3.Analytics);
                v52.handleLoadNewPrompt();
            end,
            OnClose = v52.hideLoadNewPrompt
        }),
        CreateAnimationFromVideoTutorial = l_showCreateAnimationFromVideoTutorial_0 and v6.createElement(v23, {
            PromptText = l_Localization_0:getText("AnimationFromVideo", "TutorialText"),
            Buttons = {
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "Cancel"),
                    Style = "Round"
                },
                {
                    Key = true,
                    Text = l_Localization_0:getText("AnimationFromVideo", "ChooseVideo"),
                    Style = "RoundPrimary"
                }
            },
            OnButtonClicked = function(v80)
                v52.setShowCreateAnimationFromVideoTutorial(false);
                if v80 then
                    v52.continueAfterCreateAnimationFromVideoTutorial();
                end;
            end,
            OnClose = function()
                v52.setShowCreateAnimationFromVideoTutorial(false);
            end
        }),
        CreateAnimationFromVideoAgeGate = v71 and v6.createElement(v23, {
            Size = UDim2.new(0, v8.PROMPT_SIZE.Width.Offset, 0, 180),
            PromptText = l_Localization_0:getText("AnimationFromVideo", "AgeRestricted"),
            Buttons = {
                {
                    Key = false,
                    Text = l_Localization_0:getText("Dialog", "Cancel"),
                    Style = "Round"
                }
            },
            OnButtonClicked = function()
                v52.setShowCreateAnimationFromVideoTutorial(false);
            end,
            OnClose = function()
                v52.setShowCreateAnimationFromVideoTutorial(false);
            end
        })
    });
end;
return v7.connect(function(v81, _)
    return {
        Analytics = v81.Analytics,
        IsDirty = v81.Status.IsDirty,
        ReadOnly = v81.Status.ReadOnly
    };
end, function(v83)
    return {
        LoadAnimationData = function(v84, v85)
            v83(v31(v84, v85));
        end,
        LoadAnimation = function(v86, v87, v88)
            v83(v30(v86, v87, v88));
        end,
        SaveAnimation = function(v89, v90)
            v83(v33(v89, v90));
        end,
        ImportKeyframeSequence = function(v91, v92)
            v83(v28(v91, v92));
        end,
        ImportFBXAnimationUserMayChooseModel = function(v93, v94, v95)
            v83(v27(v93, v94, v95));
        end,
        CreateFromVideoAndImportFBXAnimationUserMayChooseModel = function(v96, v97, v98)
            v83(v26(v96, v97, v98));
        end,
        ImportLoadedFBXAnimation = function(v99, v100, v101)
            v83(v29(v99, v100, v101));
        end,
        SanitizeAnimation = function(v102)
            v83(v32(v102));
        end,
        SetInReviewState = function(v103)
            v83(v14(v103));
        end,
        SetIsDirty = function(v104)
            v83(v15(v104));
        end,
        SetIsLegacyAnimSaves = function(v105)
            v83(v16(v105));
        end,
        SetPlayState = function(v106)
            v83(v17(v106));
        end,
        SetReduceKeyframesDialogMode = function(v107)
            v83(v18(v107));
        end
    };
end)((l_withContext_0({
    Stylizer = l_ContextServices_0.Stylizer,
    Localization = l_ContextServices_0.Localization,
    Plugin = l_ContextServices_0.Plugin,
    Analytics = l_ContextServices_0.Analytics
})(v34)));


local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v1 = require(l_script_FirstAncestor_0.Packages.Roact);
local v2 = require(l_script_FirstAncestor_0.Packages.RoactRodux);
local v3 = require(l_script_FirstAncestor_0.Src.Util.Constants);
local l_ContextServices_0 = require(l_script_FirstAncestor_0.Packages.Framework).ContextServices;
local l_withContext_0 = l_ContextServices_0.withContext;
local v6 = require(l_script_FirstAncestor_0.Src.Components.AnimationControlPanel.AnimationClipDropdown);
local v7 = require(l_script_FirstAncestor_0.Src.Components.AnimationControlPanel.MediaControls);
local v8 = require(l_script_FirstAncestor_0.Src.Components.AnimationControlPanel.TimeDisplay);
local _ = require(l_script_FirstAncestor_0.Src.Thunks.Playback.TogglePlay);
local v10 = require(l_script_FirstAncestor_0.Src.Thunks.Playback.ToggleLooping);
local v11 = require(l_script_FirstAncestor_0.Src.Thunks.Playback.StepAnimation);
local v12 = require(l_script_FirstAncestor_0.Src.Thunks.LoadAnimationData);
local v13 = require(l_script_FirstAncestor_0.Src.Thunks.Playback.SkipAnimation);
local v14 = require(l_script_FirstAncestor_0.Src.Thunks.UpdateEditingLength);
local v15 = require(l_script_FirstAncestor_0.Src.Actions.SetPlayState);
local v16 = require(l_script_FirstAncestor_0.LuaFlags.GetFFlagTimelineUnitSeconds);
local v17 = v1.PureComponent:extend("AnimationControlPanel");
v17.init = function(v18)
    v18.toggleLoopingWrapper = function()
        return v18.props.ToggleLooping(v18.props.Analytics);
    end;
    v18.loadAnimationDataWrapper = function(v19)
        return v18.props.LoadAnimationData(v19, v18.props.Analytics);
    end;
    v18.skipBackwardWrapper = function()
        return v18.props.SkipBackward(v18.props.Analytics);
    end;
    v18.skipForwardWrapper = function()
        return v18.props.SkipForward(v18.props.Analytics);
    end;
    v18.setPlayStateWrapper = function(v20)
        return v18.props.SetPlayState(v20, v18.props.Analytics);
    end;
    v18.goToFirstFrameWrapper = function()
        return v18.props.StepAnimation(0);
    end;
    v18.goToLastFrameWrapper = function()
        local l_props_0 = v18.props;
        return l_props_0.StepAnimation(l_props_0.AnimationData.Metadata.EndTick);
    end;
end;
v17.render = function(v22)
    local l_props_1 = v22.props;
    local l_Stylizer_0 = l_props_1.Stylizer;
    local l_AnimationData_0 = l_props_1.AnimationData;
    local l_IsLegacyAnimSaves_0 = l_props_1.IsLegacyAnimSaves;
    local l_PlayState_0 = l_props_1.PlayState;
    local l_RootInstance_0 = l_props_1.RootInstance;
    return v1.createElement("Frame", {
        Size = UDim2.new(1, 0, 0, v3.TIMELINE_HEIGHT),
        BorderSizePixel = 1,
        LayoutOrder = 0,
        BackgroundColor3 = l_Stylizer_0.backgroundColor,
        BorderColor3 = l_Stylizer_0.borderColor
    }, {
        Layout = v1.createElement("UIListLayout", {
            FillDirection = Enum.FillDirection.Horizontal,
            HorizontalAlignment = Enum.HorizontalAlignment.Left,
            SortOrder = Enum.SortOrder.LayoutOrder,
            VerticalAlignment = Enum.VerticalAlignment.Center
        }),
        AnimationClipDropdown = v1.createElement(v6, {
            AnimationName = not not l_AnimationData_0 and l_AnimationData_0.Metadata.Name or "",
            IsLegacyAnimSaves = l_IsLegacyAnimSaves_0,
            RootInstance = l_RootInstance_0,
            LoadAnimationData = v22.loadAnimationDataWrapper,
            InstanceType = (l_RootInstance_0 and l_AnimationData_0) and l_AnimationData_0.Instances.Root.Type,
            LayoutOrder = 0,
            IsChannelAnimation = l_props_1.IsChannelAnimation
        }),
        MediaControls = v1.createElement(v7, {
            PlayState = l_PlayState_0,
            IsLooping = not not l_AnimationData_0 and (l_AnimationData_0.Metadata and l_AnimationData_0.Metadata.Looping or false),
            SkipBackward = v22.skipBackwardWrapper,
            SkipForward = v22.skipForwardWrapper,
            SetPlayState = v22.setPlayStateWrapper,
            ToggleLooping = v22.toggleLoopingWrapper,
            GoToFirstFrame = v22.goToFirstFrameWrapper,
            GoToLastFrame = v22.goToLastFrameWrapper,
            LayoutOrder = 1
        }),
        TimeDisplay = v1.createElement(v8, {
            StartTick = l_props_1.StartTick,
            EndTick = l_props_1.EndTick,
            FrameRate = l_props_1.FrameRate,
            ShowAsTime = if not v16() then if not v16() then l_props_1.ShowAsSeconds else nil else nil,
            TimelineUnit = l_props_1.TimelineUnit,
            AnimationData = l_AnimationData_0,
            Playhead = l_props_1.Playhead,
            EditingLength = l_props_1.EditingLength,
            StepAnimation = l_props_1.StepAnimation,
            UpdateEditingLength = l_props_1.UpdateEditingLength,
            ReadOnly = l_props_1.ReadOnly,
            LayoutOrder = 2
        })
    });
end;
return v2.connect(function(v29)
    return {
        FrameRate = v29.Status.FrameRate,
        PlayState = v29.Status.PlayState,
        ReadOnly = v29.Status.ReadOnly,
        RootInstance = v29.Status.RootInstance
    };
end, function(v30)
    return {
        ToggleLooping = function(v31)
            v30(v10(v31));
        end,
        StepAnimation = function(v32)
            v30(v11(v32));
        end,
        SetPlayState = function(v33)
            v30(v15(v33));
        end,
        LoadAnimationData = function(v34, v35)
            v30(v12(v34, v35));
        end,
        UpdateEditingLength = function(v36)
            v30(v14(v36));
        end,
        SkipBackward = function(v37)
            v30(v13(false, v37));
        end,
        SkipForward = function(v38)
            v30(v13(true, v38));
        end
    };
end)((l_withContext_0({
    Stylizer = l_ContextServices_0.Stylizer,
    Analytics = l_ContextServices_0.Analytics
})(v17)));


local l_script_FirstAncestor_0 = script:FindFirstAncestor("AnimationClipEditor");
local v1 = require(l_script_FirstAncestor_0.Packages.Roact);
local v2 = require(l_script_FirstAncestor_0.Packages.Framework);
local l_ContextServices_0 = v2.ContextServices;
local l_withContext_0 = l_ContextServices_0.withContext;
local v5 = require(l_script_FirstAncestor_0.Src.Util.Constants);
local v6 = require(l_script_FirstAncestor_0.Src.Util.LayoutOrderIterator);
local l_Button_0 = v2.UI.Button;
local v8 = require(l_script_FirstAncestor_0.Src.Components.Tooltip);
local v9 = v1.PureComponent:extend("MediaControls");
v9.makeButton = function(v10, v11, v12, v13, v14)
    return v1.createElement("Frame", {
        LayoutOrder = v10.layoutOrderIterator:getNextOrder(),
        Size = UDim2.new(0, v5.TIMELINE_HEIGHT, 0, v5.TIMELINE_HEIGHT),
        BackgroundTransparency = 1
    }, {
        Button = v1.createElement(l_Button_0, {
            ZIndex = 1,
            Size = UDim2.new(1, 0, 1, 0),
            OnClick = v12,
            Style = v10.props.Stylizer.button.MediaControl
        }, {
            Image = v1.createElement("ImageLabel", {
                BackgroundTransparency = 1,
                Size = UDim2.new(1, 0, 1, 0),
                Image = v11,
                ImageColor3 = v13.iconColor
            }),
            Tooltip = v14 and v1.createElement(v8, {
                TextKey = v14
            })
        })
    });
end;
v9.makeToggle = function(v15, v16, v17, v18, v19, v20, v21)
    local l_button_0 = v15.props.Stylizer.button;
    return v1.createElement("Frame", {
        LayoutOrder = v15.layoutOrderIterator:getNextOrder(),
        Size = UDim2.new(0, v5.TIMELINE_HEIGHT, 0, v5.TIMELINE_HEIGHT),
        BackgroundTransparency = 1
    }, {
        Button = v1.createElement(l_Button_0, {
            ZIndex = 1,
            Size = UDim2.new(1, 0, 1, 0),
            Style = not not v16 and l_button_0.ActiveControl or l_button_0.MediaControl,
            OnClick = v19
        }, {
            Image = v1.createElement("ImageLabel", {
                BackgroundTransparency = 1,
                Size = UDim2.new(1, 0, 1, 0),
                Image = not not v16 and v17 or v18,
                ImageColor3 = not not v16 and v20.iconHighlightColor or v20.iconColor
            }),
            Tooltip = v21 and v1.createElement(v8, {
                TextKey = v21
            })
        })
    });
end;
v9.makePlayToggle = function(v23, v24, v25, v26, v27, v28, v29, v30)
    local l_button_1 = v23.props.Stylizer.button;
    return v1.createElement("Frame", {
        LayoutOrder = v23.layoutOrderIterator:getNextOrder(),
        Size = UDim2.new(0, v5.TIMELINE_HEIGHT, 0, v5.TIMELINE_HEIGHT),
        BackgroundTransparency = 1
    }, {
        Button = v1.createElement(l_Button_0, {
            ZIndex = 1,
            Size = UDim2.new(1, 0, 1, 0),
            Style = not not v24 and l_button_1.ActiveControl or l_button_1.MediaControl,
            OnClick = function()
                if v23.props.SetPlayState then
                    v23.props.SetPlayState(if not v24 then v27 else v5.PLAY_STATE.Pause);
                end;
            end
        }, {
            Image = v1.createElement("ImageLabel", {
                BackgroundTransparency = 1,
                Size = UDim2.new(1, 0, 1, 0),
                Image = if not v24 then v26 else v25,
                ImageColor3 = not not v24 and v28.iconHighlightColor or v28.iconColor
            }),
            Tooltip = v1.createElement(v8, {
                TextKey = if not v24 then v30 else v29
            })
        })
    });
end;
v9.render = function(v32)
    local l_props_0 = v32.props;
    local l_Stylizer_0 = l_props_0.Stylizer;
    local l_IsLooping_0 = l_props_0.IsLooping;
    local v36 = l_props_0.PlayState == v5.PLAY_STATE.Reverse;
    local _ = l_props_0.PlayState == v5.PLAY_STATE.Pause;
    local v38 = l_props_0.PlayState == v5.PLAY_STATE.Play;
    local l_LayoutOrder_0 = l_props_0.LayoutOrder;
    local l_SkipBackward_0 = l_props_0.SkipBackward;
    local l_SkipForward_0 = l_props_0.SkipForward;
    local l_ToggleLooping_0 = l_props_0.ToggleLooping;
    local l_GoToFirstFrame_0 = l_props_0.GoToFirstFrame;
    local l_GoToLastFrame_0 = l_props_0.GoToLastFrame;
    local l_playbackTheme_0 = l_Stylizer_0.playbackTheme;
    v32.layoutOrderIterator = v6.new();
    return v1.createElement("Frame", {
        BackgroundTransparency = 1,
        LayoutOrder = l_LayoutOrder_0,
        Size = UDim2.new(0, v5.CONTROLS_WIDTH, 0, v5.TIMELINE_HEIGHT)
    }, {
        Layout = v1.createElement("UIListLayout", {
            FillDirection = Enum.FillDirection.Horizontal,
            HorizontalAlignment = Enum.HorizontalAlignment.Left,
            SortOrder = Enum.SortOrder.LayoutOrder,
            VerticalAlignment = Enum.VerticalAlignment.Center
        }),
        GoToFirstFrame = v32:makeButton(l_playbackTheme_0.goToFirstFrame, l_GoToFirstFrame_0, l_playbackTheme_0, "GoToFirstFrame"),
        SkipBackward = v32:makeButton(l_playbackTheme_0.skipBackward, l_SkipBackward_0, l_playbackTheme_0, "SkipBackward"),
        Reverse = v32:makePlayToggle(v36, l_playbackTheme_0.pause, l_playbackTheme_0.reverse, v5.PLAY_STATE.Reverse, l_playbackTheme_0, "Pause", "Reverse"),
        Play = v32:makePlayToggle(v38, l_playbackTheme_0.pause, l_playbackTheme_0.play, v5.PLAY_STATE.Play, l_playbackTheme_0, "Pause", "Play"),
        SkipForward = v32:makeButton(l_playbackTheme_0.skipForward, l_SkipForward_0, l_playbackTheme_0, "SkipForward"),
        GoToLastFrame = v32:makeButton(l_playbackTheme_0.goToLastFrame, l_GoToLastFrame_0, l_playbackTheme_0, "GoToLastFrame"),
        Loop = v32:makeToggle(l_IsLooping_0, l_playbackTheme_0.loop, l_playbackTheme_0.loop, l_ToggleLooping_0, l_playbackTheme_0, "ToggleLooping")
    });
end;
return (l_withContext_0({
    Stylizer = l_ContextServices_0.Stylizer
})(v9));