Full Code of X-Plane/XPlane2Blender for AI

master 295c894c4550 cached
783 files
32.3 MB
5.8M tokens
1444 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (23,252K chars total). Download the full file to get everything.
Repository: X-Plane/XPlane2Blender
Branch: master
Commit: 295c894c4550
Files: 783
Total size: 32.3 MB

Directory structure:
gitextract_sbtft37o/

├── .gitignore
├── .isort.cfg
├── .pre-commit-config.yaml
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── addons/
│   └── addons.README
├── io_xplane2blender/
│   ├── __init__.py
│   ├── resources/
│   │   ├── Commands.txt
│   │   ├── DataRefs.txt
│   │   └── lights.txt
│   ├── tests/
│   │   ├── __init__.py
│   │   ├── animation_file_mappings.py
│   │   └── test_creation_helpers.py
│   ├── xplane_config.py
│   ├── xplane_constants.py
│   ├── xplane_export.py
│   ├── xplane_helpers.py
│   ├── xplane_ops.py
│   ├── xplane_ops_dev.py
│   ├── xplane_props.py
│   ├── xplane_types/
│   │   ├── __init__.py
│   │   ├── xplane_attribute.py
│   │   ├── xplane_attributes.py
│   │   ├── xplane_bone.py
│   │   ├── xplane_commands.py
│   │   ├── xplane_empty.py
│   │   ├── xplane_face.py
│   │   ├── xplane_file.py
│   │   ├── xplane_header.py
│   │   ├── xplane_keyframe.py
│   │   ├── xplane_keyframe_collection.py
│   │   ├── xplane_light.py
│   │   ├── xplane_manipulator.py
│   │   ├── xplane_material.py
│   │   ├── xplane_material_utils.py
│   │   ├── xplane_mesh.py
│   │   ├── xplane_object.py
│   │   ├── xplane_primitive.py
│   │   └── xplane_vlights.py
│   ├── xplane_ui.py
│   ├── xplane_updater.py
│   └── xplane_utils/
│       ├── __init__.py
│       ├── xplane_commands_txt_parser.py
│       ├── xplane_datarefs_txt_parser.py
│       ├── xplane_effective_gloss.py
│       ├── xplane_lights_txt_parser.py
│       ├── xplane_updater_helpers.py
│       └── xplane_wiper_gradient.py
├── mkbuild.py
├── pylintrc
├── pyproject.toml
├── requirements.txt
├── run.py
├── tests/
│   ├── addon/
│   │   ├── addon.test.py
│   │   ├── fixtures/
│   │   │   ├── test_multiple_export_works_anim_bone.obj
│   │   │   ├── test_multiple_export_works_simple.obj
│   │   │   └── test_multiple_export_works_uv_map.obj
│   │   ├── multiple_export_works.test.blend
│   │   └── multiple_export_works.test.py
│   ├── animation/
│   │   ├── TestCase1.test.blend
│   │   ├── TestCase1.test.py
│   │   ├── TestCase2.test.blend
│   │   ├── TestCase2.test.py
│   │   ├── TestCase3.test.blend
│   │   ├── TestCase3.test.py
│   │   ├── TestCase4.test.blend
│   │   ├── TestCase4.test.py
│   │   ├── TestCase5_nested_sets.test.blend
│   │   ├── TestCase5_nested_sets.test.py
│   │   ├── TestCase6_scaling_rot.test.blend
│   │   ├── TestCase6_scaling_rot.test.py
│   │   ├── TestCase7_scaling_rotloc.test.blend
│   │   ├── TestCase7_scaling_rotloc.test.py
│   │   ├── TestCase8_bone_optimization.test.blend
│   │   ├── TestCase8_bone_optimization.test.py
│   │   ├── TestCase9_keyframe_loops.test.blend
│   │   ├── TestCase9_keyframe_loops.test.py
│   │   ├── armature_bone_block_parent_relationships.test.blend
│   │   ├── armature_bone_block_parent_relationships.test.py
│   │   ├── armature_nested_offset.test.blend
│   │   ├── armature_nested_offset.test.py
│   │   ├── axis.test.blend
│   │   ├── axis.test.disabled.py
│   │   ├── bone_animations.test.blend
│   │   ├── bone_animations.test.py
│   │   ├── fixtures/
│   │   │   ├── TestCase1/
│   │   │   │   ├── armature_rotation_arbitrary_axis.obj
│   │   │   │   ├── armature_rotation_twoaxis_3keys.obj
│   │   │   │   ├── armature_translation_arbitrary.obj
│   │   │   │   ├── object_rotation_X_axis_angle.obj
│   │   │   │   ├── object_rotation_X_quaternion.obj
│   │   │   │   ├── object_rotation_X_xyz_euler.obj
│   │   │   │   ├── object_rotation_X_xzy_euler.obj
│   │   │   │   ├── object_rotation_X_yxz_euler.obj
│   │   │   │   ├── object_rotation_X_yzx_euler.obj
│   │   │   │   ├── object_rotation_X_zxy_euler.obj
│   │   │   │   ├── object_rotation_X_zyx_euler.obj
│   │   │   │   ├── object_rotation_Y_axis_angle.obj
│   │   │   │   ├── object_rotation_Y_quaternion.obj
│   │   │   │   ├── object_rotation_Y_xyz_euler.obj
│   │   │   │   ├── object_rotation_Y_xzy_euler.obj
│   │   │   │   ├── object_rotation_Y_yxz_euler.obj
│   │   │   │   ├── object_rotation_Y_yzx_euler.obj
│   │   │   │   ├── object_rotation_Y_zxy_euler.obj
│   │   │   │   ├── object_rotation_Y_zyx_euler.obj
│   │   │   │   └── object_translation.obj
│   │   │   ├── TestCase2/
│   │   │   │   ├── object_rotation_Z_axis_angle.obj
│   │   │   │   ├── object_rotation_Z_quaternion.obj
│   │   │   │   ├── object_rotation_Z_xyz_euler.obj
│   │   │   │   ├── object_rotation_Z_xzy_euler.obj
│   │   │   │   ├── object_rotation_Z_yxz_euler.obj
│   │   │   │   ├── object_rotation_Z_yzx_euler.obj
│   │   │   │   ├── object_rotation_Z_zxy_euler.obj
│   │   │   │   ├── object_rotation_Z_zyx_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_axis_angle.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_quaternion.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_xyz_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_xzy_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_yxz_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_yzx_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_zxy_euler.obj
│   │   │   │   └── object_rotation_arbitrary_3key_zyx_euler.obj
│   │   │   ├── TestCase3/
│   │   │   │   ├── object_rotation_translation_arbitrary_axis_angle.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_quaternion.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_xyz_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_xzy_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_yxz_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_yzx_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_zxy_euler.obj
│   │   │   │   └── object_rotation_translation_arbitrary_zyx_euler.obj
│   │   │   ├── TestCase4/
│   │   │   │   ├── armature_combined_rotation_translation.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_axis_angle.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_quaternion.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_xyz_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_xzy_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_yxz_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_yzx_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_zxy_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_zyx_euler.obj
│   │   │   │   ├── object_orthogonal_3keys.obj
│   │   │   │   └── object_rotation_translation_orthogonal.obj
│   │   │   ├── TestCase5_nested_sets/
│   │   │   │   ├── armature_locrot_nested_armature_locrot.obj
│   │   │   │   ├── armature_locrot_whereOBJ_trans_rotation_arbitrary.obj
│   │   │   │   ├── armature_locrot_whereOBJ_trans_rotation_single_axis.obj
│   │   │   │   ├── armature_rot_nested_armature_rot.obj
│   │   │   │   ├── armature_rot_nested_armature_rot_3keys.obj
│   │   │   │   ├── mega_nested_mega.obj
│   │   │   │   ├── object_trans_arbitrary_nested_object_trans_arbitrary.obj
│   │   │   │   └── object_trans_ortho_nested_object_trans_ortho.obj
│   │   │   ├── TestCase6_scaling_rot/
│   │   │   │   └── TestCase6_scaling_rot.obj
│   │   │   ├── TestCase7_scaling_rotloc/
│   │   │   │   └── TestCase7_scaling_rotloc.obj
│   │   │   ├── TestCase8_bone_optimization/
│   │   │   │   ├── TestCase8_loc.obj
│   │   │   │   ├── TestCase8_rot.obj
│   │   │   │   ├── TestCase8_rot_loc.obj
│   │   │   │   └── TestCase8_static.obj
│   │   │   ├── TestCase9_keyframe_loops/
│   │   │   │   ├── TestCase9_loop_arm.obj
│   │   │   │   ├── TestCase9_loop_arm_bone.obj
│   │   │   │   ├── TestCase9_loop_bone.obj
│   │   │   │   └── TestCase9_loop_none.obj
│   │   │   ├── armature_bone_block_parent_relationships/
│   │   │   │   ├── test_Armature_arm_anim_bone_anim.obj
│   │   │   │   ├── test_Armature_arm_anim_bone_no_anim.obj
│   │   │   │   ├── test_Armature_arm_no_anim_bone_anim.obj
│   │   │   │   ├── test_Armature_arm_no_anim_bone_no_anim.obj
│   │   │   │   └── test_no_parent.obj
│   │   │   ├── nested_bones/
│   │   │   │   ├── test_1_Armature_child_bones_one_leaf_mesh.obj
│   │   │   │   ├── test_2_Armature_child_bones_mesh_on_each.obj
│   │   │   │   ├── test_3_Armature_multiple_arms_one_leaf_mesh.obj
│   │   │   │   └── test_4_Armature_multiple_arms_child_bones_on_each.obj
│   │   │   ├── test_01_datablock_datablock.obj
│   │   │   ├── test_02_bone_datablock.obj
│   │   │   ├── test_03_bone_bone_connected_offset_translation.obj
│   │   │   ├── test_05_bone_bone_connected_no_offset_translation.obj
│   │   │   ├── test_bone_animations.obj
│   │   │   ├── test_kf_points_1_ignored_2_used.obj
│   │   │   ├── test_multiple_armatures.obj
│   │   │   ├── test_nested_armatures.obj
│   │   │   ├── test_nested_bone_animations.obj
│   │   │   ├── test_no_drop_dup_trans_rot_aa.obj
│   │   │   ├── test_no_drop_dup_trans_rot_euler.obj
│   │   │   ├── test_no_drop_dup_trans_rot_quat.obj
│   │   │   ├── test_show_hide_hide_near_0.obj
│   │   │   ├── test_show_hide_show_near_0.obj
│   │   │   ├── test_single_bone_initial_rotation.obj
│   │   │   └── transform_stack/
│   │   │       ├── test_transform_stack_cube_loc_w_parent.obj
│   │   │       ├── test_transform_stack_cube_loc_wo_parent.obj
│   │   │       ├── test_transform_stack_cube_locrot_w_parent.obj
│   │   │       ├── test_transform_stack_cube_locrot_wo_parent.obj
│   │   │       ├── test_transform_stack_cube_none_w_parent.obj
│   │   │       ├── test_transform_stack_cube_none_wo_parent.obj
│   │   │       ├── test_transform_stack_cube_rot_w_parent.obj
│   │   │       └── test_transform_stack_cube_rot_wo_parent.obj
│   │   ├── list.rtf
│   │   ├── multiple_armatures.test.blend
│   │   ├── multiple_armatures.test.py
│   │   ├── nested_armatures.test.blend
│   │   ├── nested_armatures.test.py
│   │   ├── nested_bones.test.blend
│   │   ├── nested_bones.test.py
│   │   ├── no_dropped_dup_keys.test.blend
│   │   ├── no_dropped_dup_keys.test.py
│   │   ├── one_kf_point_fcurve_ignored.test.blend
│   │   ├── one_kf_point_fcurve_ignored.test.py
│   │   ├── show_hide_anim_types.test.blend
│   │   ├── show_hide_anim_types.test.py
│   │   ├── single_bone_initial_rotation.test.blend
│   │   ├── single_bone_initial_rotation.test.py
│   │   ├── transform_stack_w_parent.test.blend
│   │   ├── transform_stack_w_parent.test.py
│   │   ├── transform_stack_wo_parent.test.blend
│   │   └── transform_stack_wo_parent.test.py
│   ├── build_system/
│   │   ├── build_number_obj_footer.test.py
│   │   ├── build_number_prop.test.py
│   │   ├── build_number_updater.test.py
│   │   ├── build_number_verstruct.test.py
│   │   └── originals/
│   │       ├── v3_20_14.blend
│   │       ├── v3_3_13.blend
│   │       └── v3_4_0-beta_4.blend
│   ├── features/
│   │   ├── cockpit_features/
│   │   │   ├── cockpit_device.test.blend
│   │   │   ├── cockpit_device.test.py
│   │   │   ├── cockpit_lit_only.test.blend
│   │   │   ├── cockpit_lit_only.test.py
│   │   │   ├── cockpit_material.test.blend
│   │   │   ├── cockpit_material.test.py
│   │   │   ├── cockpit_panel_luminance.test.blend
│   │   │   ├── cockpit_panel_luminance.test.py
│   │   │   ├── cockpit_regions.test.blend
│   │   │   ├── cockpit_regions.test.py
│   │   │   ├── fixtures/
│   │   │   │   ├── test_01_cockpit_lit_only_exported.obj
│   │   │   │   ├── test_03_cockpit_lit_only_no_export_regions.obj
│   │   │   │   ├── test_04_cockpit_lit_no_export_panel_mode_default.obj
│   │   │   │   ├── test_05_cockpit_lit_only_no_export_wrong_version.obj
│   │   │   │   ├── test_06_cockpit_lit_only_exported.obj
│   │   │   │   ├── test_07_cockpit_lit_only_resets.obj
│   │   │   │   ├── test_aircraft_material.obj
│   │   │   │   ├── test_cockpit_material.obj
│   │   │   │   ├── test_cockpit_regions_used_aircraft.obj
│   │   │   │   ├── test_cockpit_regions_used_cockpit.obj
│   │   │   │   ├── test_device_mix_with_panel.obj
│   │   │   │   ├── test_device_passing_auto_adjust_off.obj
│   │   │   │   ├── test_device_passing_bitfield.obj
│   │   │   │   ├── test_device_passing_lighting_channel.obj
│   │   │   │   ├── test_device_passing_names.obj
│   │   │   │   ├── test_hud_glass_and_reset.obj
│   │   │   │   ├── test_hud_glass_panel_device.obj
│   │   │   │   ├── test_hud_glass_panel_emissive.obj
│   │   │   │   ├── test_hud_glass_panel_regions.obj
│   │   │   │   ├── test_hud_glass_panel_texture.obj
│   │   │   │   ├── test_panel_luminance_cockpit.obj
│   │   │   │   ├── test_panel_luminance_cockpit_device.obj
│   │   │   │   ├── test_panel_luminance_cockpit_lit_only.obj
│   │   │   │   └── test_panel_luminance_cockpit_regions.obj
│   │   │   ├── hud_glass.test.blend
│   │   │   └── hud_glass.test.py
│   │   ├── draped.test.blend
│   │   ├── draped.test.py
│   │   ├── draw_enabled.test.blend
│   │   ├── draw_enabled.test.py
│   │   ├── export_control_methods.test.blend
│   │   ├── export_control_methods.test.py
│   │   ├── export_control_methods_lights.test.blend
│   │   ├── export_control_methods_lights.test.py
│   │   ├── export_control_methods_object.test.blend
│   │   ├── export_control_methods_object.test.py
│   │   ├── export_path_dir/
│   │   │   ├── Custom Scenery/
│   │   │   │   └── Kansas City/
│   │   │   │       └── cars/
│   │   │   │           ├── fixtures/
│   │   │   │           │   └── honda_1.obj
│   │   │   │           ├── honda_1.test.blend
│   │   │   │           └── honda_1.test.py
│   │   │   └── default_scenery/
│   │   │       ├── Kansas City/
│   │   │       │   ├── cars/
│   │   │       │   │   ├── fixtures/
│   │   │       │   │   │   └── honda_2.obj
│   │   │       │   │   ├── honda_2.test.blend
│   │   │       │   │   └── honda_2.test.py
│   │   │       │   ├── fixtures/
│   │   │       │   │   └── honda_3.obj
│   │   │       │   ├── honda_3.test.blend
│   │   │       │   └── honda_3.test.py
│   │   │       ├── four/
│   │   │       │   └── levels/
│   │   │       │       └── deep/
│   │   │       │           └── cars/
│   │   │       │               ├── fixtures/
│   │   │       │               │   └── honda_5.obj
│   │   │       │               ├── honda_5.test.blend
│   │   │       │               └── honda_5.test.py
│   │   │       ├── honda_4.test.blend
│   │   │       └── honda_4.test.py
│   │   ├── fixtures/
│   │   │   ├── test_01_ll1.obj
│   │   │   ├── test_02_no_ll_ll1.obj
│   │   │   ├── test_03_ll1_ll1.obj
│   │   │   ├── test_04_ll1_ll2.obj
│   │   │   ├── test_05_ll1_no_ll_ll2.obj
│   │   │   ├── test_06_ll1_no_ll.obj
│   │   │   ├── test_1_NotVisibleByItself_Exp.obj
│   │   │   ├── test_1_NotVisibleByItself_Exp_anim.obj
│   │   │   ├── test_2_VisibleParent_Exp.obj
│   │   │   ├── test_2_VisibleParent_Exp_anim.obj
│   │   │   ├── test_3_SplitParentVisibleChildren_Exp_anim.obj
│   │   │   ├── test_3_VisibleButSplitParent_Exp_anim.obj
│   │   │   ├── test_4_NotVisibleButSplitParent_Exp_anim.obj
│   │   │   ├── test_4_SplitParentNotVisibleChildren_Exp_anim.obj
│   │   │   ├── test_DisabledInViewport.obj
│   │   │   ├── test_HiddenInViewport.obj
│   │   │   ├── test_conditions.obj
│   │   │   ├── test_cube_empty_cube.obj
│   │   │   ├── test_custom_anim_prop.obj
│   │   │   ├── test_custom_header_props.obj
│   │   │   ├── test_custom_prop.obj
│   │   │   ├── test_draped.obj
│   │   │   ├── test_draw_enabled.obj
│   │   │   ├── test_export_in_layers_disabled.obj
│   │   │   ├── test_export_in_layers_enabled.obj
│   │   │   ├── test_exports_mixed_ll_correctly.obj
│   │   │   ├── test_exports_photometric_correctly.obj
│   │   │   ├── test_exports_with_photometric_ignored.obj
│   │   │   ├── test_float_prec_manip_props_wysiwyg.obj
│   │   │   ├── test_float_prec_start_end_height_cmp.obj
│   │   │   ├── test_group_instances.obj
│   │   │   ├── test_has_global_luminance_6000.obj
│   │   │   ├── test_instanced.obj
│   │   │   ├── test_instanced_header_empty_cube.obj
│   │   │   ├── test_lights.obj
│   │   │   ├── test_lod_layer_1.obj
│   │   │   ├── test_lod_layer_2.obj
│   │   │   ├── test_lod_layer_3.obj
│   │   │   ├── test_lod_layer_4.obj
│   │   │   ├── test_lod_layer_5.obj
│   │   │   ├── test_manipulators.obj
│   │   │   ├── test_materials.obj
│   │   │   ├── test_optimize.obj
│   │   │   ├── test_pass_1_validations_not_applied.obj
│   │   │   ├── test_pass_2a_additive_ordered.obj
│   │   │   ├── test_pass_3a_selective_ordered.obj
│   │   │   ├── test_pass_4a_additive_not_mixed.obj
│   │   │   ├── test_pass_4b_selective_not_mixed.obj
│   │   │   ├── test_pass_5a_selective_far_near_equal.obj
│   │   │   ├── test_pass_6a_selective_1st_near_is_0.obj
│   │   │   ├── test_pass_7a_1st_lod_is_1st_command.obj
│   │   │   ├── test_passing_magnets.obj
│   │   │   ├── test_show_hide_animation.obj
│   │   │   ├── test_texture_composition_nm.obj
│   │   │   ├── test_texture_composition_nm_spec.obj
│   │   │   ├── test_texture_composition_spec.obj
│   │   │   ├── test_texture_coords.obj
│   │   │   └── texture_composition.obj
│   │   ├── float_prop_follows_precision.test.blend
│   │   ├── float_prop_follows_precision.test.py
│   │   ├── global_luminance.test.blend
│   │   ├── global_luminance.test.py
│   │   ├── instanced.test.blend
│   │   ├── instanced.test.py
│   │   ├── instant_export_from_menu.test.blend
│   │   ├── instant_export_from_menu.test.py
│   │   ├── light_level_photometric.test.blend
│   │   ├── light_level_photometric.test.py
│   │   ├── light_level_reset.test.blend
│   │   ├── light_level_reset.test.py
│   │   ├── lights.test.blend
│   │   ├── lights.test.py
│   │   ├── lod.test.blend
│   │   ├── lod.test.py
│   │   ├── lod_overrides/
│   │   │   ├── fixtures/
│   │   │   │   ├── test_AllIgnored.obj
│   │   │   │   ├── test_ExportableObjectOverride_object_special_1_2_3.obj
│   │   │   │   ├── test_IncludeAndIgnore.obj
│   │   │   │   ├── test_LooksPastUnconvertedXPlaneObjects.obj
│   │   │   │   ├── test_NestedDuplicateOverrides.obj
│   │   │   │   ├── test_NoOverridesTakesParents.obj
│   │   │   │   ├── test_NonSequentialOverrides.obj
│   │   │   │   ├── test_OverridesAppliedToAllChildren.obj
│   │   │   │   └── test_OverridesCombined.obj
│   │   │   ├── lod_overrides_applied.test.blend
│   │   │   └── lod_overrides_applied.test.py
│   │   ├── lod_validation.test.blend
│   │   ├── lod_validation.test.py
│   │   ├── magnets.test.blend
│   │   ├── magnets.test.py
│   │   ├── manipulators.test.blend
│   │   ├── manipulators.test.py
│   │   ├── materials.test.blend
│   │   ├── materials.test.py
│   │   ├── no_material.test.blend
│   │   ├── no_material.test.py
│   │   ├── passive_resetting.test.blend
│   │   ├── passive_resetting.test.py
│   │   ├── rain/
│   │   │   ├── bake_wiper_texture.test.blend
│   │   │   ├── bake_wiper_texture.test.py
│   │   │   ├── bake_wiper_texture_bad_rgb_only.test.blend
│   │   │   ├── bake_wiper_texture_bad_rgb_only.test.py
│   │   │   ├── fixtures/
│   │   │   │   ├── test_inst_scenery_no_options.obj
│   │   │   │   ├── test_missing_paths_no_options.obj
│   │   │   │   ├── test_none_enabled_no_options.obj
│   │   │   │   ├── test_scenery_no_options.obj
│   │   │   │   ├── test_thermal_options.obj
│   │   │   │   └── test_wiper_options.obj
│   │   │   ├── rain_header_props.test.blend
│   │   │   └── rain_header_props.test.py
│   │   ├── various.test.blend
│   │   └── various.test.py
│   ├── lights/
│   │   ├── aim_non_spot_light.test.blend
│   │   ├── aim_non_spot_light.test.py
│   │   ├── anim_vs_non_anim_vs_is_nested.test.blend
│   │   ├── anim_vs_non_anim_vs_is_nested.test.py
│   │   ├── automatic_detect/
│   │   │   ├── automatic_ignore_old_lights.test.blend
│   │   │   ├── automatic_ignore_old_lights.test.py
│   │   │   ├── automatic_is_omni_light.test.blend
│   │   │   ├── automatic_is_omni_light.test.py
│   │   │   ├── automatic_light_properties.test.blend
│   │   │   ├── automatic_light_properties.test.py
│   │   │   ├── automatic_parent_and_self_animated.test.blend
│   │   │   ├── automatic_parent_and_self_animated.test.py
│   │   │   ├── automatic_point_vs_spot.test.blend
│   │   │   ├── automatic_point_vs_spot.test.py
│   │   │   ├── automatic_special_animation_cases.test.blend
│   │   │   ├── automatic_special_animation_cases.test.py
│   │   │   ├── automatic_width_recalc.test.blend
│   │   │   ├── automatic_width_recalc.test.py
│   │   │   └── fixtures/
│   │   │       ├── test_automatic_light_properties.obj
│   │   │       ├── test_automatic_special_animation_cases.obj
│   │   │       ├── test_automatic_special_animation_dir_mag_calc_cases.obj
│   │   │       ├── test_non_omni_lights.obj
│   │   │       ├── test_omni_lights.obj
│   │   │       ├── test_parent_animated_lights.obj
│   │   │       ├── test_self_animated_lights.obj
│   │   │       ├── test_spot_params_bb.obj
│   │   │       ├── test_spot_params_bb_rotated_90.obj
│   │   │       └── test_spot_params_bb_rotated_off_axis.obj
│   │   ├── custom_light_rgb_override.test.blend
│   │   ├── custom_light_rgb_override.test.py
│   │   ├── fixtures/
│   │   │   ├── light_spill_custom/
│   │   │   │   ├── test_light_spill_custom_dref.obj
│   │   │   │   ├── test_light_spill_custom_dxyz.obj
│   │   │   │   ├── test_light_spill_custom_rgb.obj
│   │   │   │   ├── test_light_spill_custom_semi_point.obj
│   │   │   │   ├── test_light_spill_custom_semi_spot.obj
│   │   │   │   ├── test_light_spill_custom_size.obj
│   │   │   │   └── test_light_spill_custom_xyz.obj
│   │   │   ├── test_Custom_Spot_RGB_values_disabled.obj
│   │   │   ├── test_Custom_Spot_RGB_values_enabled.obj
│   │   │   ├── test_aim_non_spot_light.obj
│   │   │   ├── test_anim_vs_non_anim_vs_has_parent.obj
│   │   │   ├── test_bb_and_sp_both.obj
│   │   │   ├── test_bb_omni_param.obj
│   │   │   ├── test_dir_and_sp.obj
│   │   │   ├── test_named.obj
│   │   │   ├── test_point_vs_is_omni_vs_is_optimized.obj
│   │   │   ├── test_rotation_delta_autocorrect.obj
│   │   │   ├── test_spot_vs_is_omni_vs_is_optimized.obj
│   │   │   ├── test_sw_light_callback_used.obj
│   │   │   ├── test_unused_param_pass.obj
│   │   │   ├── test_v12_lights_have_candela.obj
│   │   │   ├── test_v12_lights_have_candela_bb_omni.obj
│   │   │   ├── test_v12_lights_have_candela_bb_sp.obj
│   │   │   ├── test_v12_lights_have_candela_pm_omni.obj
│   │   │   └── test_v12_lights_have_candela_pm_sp.obj
│   │   ├── known_vs_unknown_named_vs_param.test.blend
│   │   ├── known_vs_unknown_named_vs_param.test.py
│   │   ├── light_spill_custom_attributes.test.blend
│   │   ├── light_spill_custom_attributes.test.py
│   │   ├── light_type_vs_is_omni_vs_is_optimized.test.blend
│   │   ├── light_type_vs_is_omni_vs_is_optimized.test.py
│   │   ├── omni_dir_param_name_bb_sp_both.test.blend
│   │   ├── omni_dir_param_name_bb_sp_both.test.py
│   │   ├── param_light_params.test.blend
│   │   ├── param_light_params.test.py
│   │   ├── rotation_delta_autocorrect.test.blend
│   │   ├── rotation_delta_autocorrect.test.py
│   │   ├── sw_light_callback_applied.test.blend
│   │   ├── sw_light_callback_applied.test.py
│   │   ├── v12_lights_cd_export.test.blend
│   │   └── v12_lights_cd_export.test.py
│   ├── materials/
│   │   ├── blend_glass/
│   │   │   ├── blend_glass.test.blend
│   │   │   ├── blend_glass.test.py
│   │   │   └── fixtures/
│   │   │       ├── test_air_glass_off_expect_no_dir.obj
│   │   │       ├── test_air_glass_on_expect_dir.obj
│   │   │       ├── test_ckpt_glass_off_expect_no_dir.obj
│   │   │       ├── test_ckpt_glass_on_expect_dir.obj
│   │   │       ├── test_panel_glass_off_expect_no_dir.obj
│   │   │       └── test_panel_glass_on_expect_dir.obj
│   │   ├── fixtures/
│   │   │   ├── TEXTURE_MAP_normal.obj
│   │   │   ├── TEXTURE_MAP_normal_gloss.obj
│   │   │   ├── TEXTURE_MAP_normal_material_gloss.obj
│   │   │   ├── test_AOTC_2Mats_PNL.obj
│   │   │   ├── test_COTC_2Mat_Hard.obj
│   │   │   ├── test_COTC_2Mat_Manip_SolidCamera.obj
│   │   │   ├── test_IST_2Mats_SameSPEC_DifSURF.obj
│   │   │   ├── test_IST_2Mats_wDraping.obj
│   │   │   ├── test_SSO_2compatibleMats_Draped.obj
│   │   │   ├── test_SSO_3compatibleMats.obj
│   │   │   └── test_blend_ratio.obj
│   │   ├── normal_metalness/
│   │   │   ├── fixtures/
│   │   │   │   ├── draped_spec_scenery/
│   │   │   │   │   ├── test_norm_met_off_one_drap_inst.obj
│   │   │   │   │   ├── test_norm_met_off_one_drap_scen.obj
│   │   │   │   │   ├── test_norm_met_on_one_drap_inst.obj
│   │   │   │   │   ├── test_norm_met_on_one_drap_scen.obj
│   │   │   │   │   ├── test_norm_met_on_two_drap_inst.obj
│   │   │   │   │   └── test_norm_met_on_two_drap_scen.obj
│   │   │   │   ├── norm_met_basic/
│   │   │   │   │   ├── test_D_metal_NON_D_metal.obj
│   │   │   │   │   ├── test_D_metal_NON_D_non_metal.obj
│   │   │   │   │   ├── test_D_metal_NON_D_none.obj
│   │   │   │   │   ├── test_D_non_metal_NON_D_metal.obj
│   │   │   │   │   ├── test_D_non_metal_NON_D_non_metal.obj
│   │   │   │   │   ├── test_D_non_metal_NON_D_none.obj
│   │   │   │   │   ├── test_D_none_NON_D_metal.obj
│   │   │   │   │   ├── test_D_none_NON_D_non_metal.obj
│   │   │   │   │   └── test_D_none_NON_D_none.obj
│   │   │   │   └── norm_met_spec/
│   │   │   │       ├── test_none_1_mat_inst.obj
│   │   │   │       ├── test_none_1_mat_scen.obj
│   │   │   │       ├── test_none_2_mat_scen.obj
│   │   │   │       ├── test_norm_1_mat_inst.obj
│   │   │   │       ├── test_norm_1_mat_scen.obj
│   │   │   │       ├── test_norm_2_mat_inst.obj
│   │   │   │       └── test_norm_2_mat_scen.obj
│   │   │   ├── norm_met_basic.test.blend
│   │   │   ├── norm_met_basic.test.py
│   │   │   ├── norm_met_draped_spec_scenery.test.blend
│   │   │   ├── norm_met_draped_spec_scenery.test.py
│   │   │   ├── norm_met_spec.test.blend
│   │   │   ├── norm_met_spec.test.py
│   │   │   ├── norm_met_validations.test.blend
│   │   │   └── norm_met_validations.test.py
│   │   ├── objects/
│   │   │   ├── AOTC_2Mat_ManipRJECT.test.blend
│   │   │   ├── AOTC_2Mat_ManipRJECT.test.py
│   │   │   ├── AOTC_2Mats_PNL.test.blend
│   │   │   ├── AOTC_2Mats_PNL.test.py
│   │   │   ├── AOTC_Draped_RJECT.test.blend
│   │   │   ├── AOTC_Draped_RJECT.test.py
│   │   │   ├── COTC_2Mat_Draped.test.blend
│   │   │   ├── COTC_2Mat_Draped.test.py
│   │   │   ├── COTC_2Mat_Hard.test.blend
│   │   │   ├── COTC_2Mat_Hard.test.py
│   │   │   ├── COTC_2Mat_Manip_SolidCamera.test.blend
│   │   │   ├── COTC_2Mat_Manip_SolidCamera.test.py
│   │   │   ├── IST_2Mats_SameSPEC_DifSURF.test.blend
│   │   │   ├── IST_2Mats_SameSPEC_DifSURF.test.py
│   │   │   ├── IST_2Mats_VarSPEC.test.blend
│   │   │   ├── IST_2Mats_VarSPEC.test.py
│   │   │   ├── IST_2Mats_wDraping.test.blend
│   │   │   ├── IST_2Mats_wDraping.test.py
│   │   │   ├── SSO_2compatibleMats_Draped.test.blend
│   │   │   ├── SSO_2compatibleMats_Draped.test.py
│   │   │   ├── SSO_2incompatibleATTRs_Draped.test.blend
│   │   │   ├── SSO_2incompatibleATTRs_Draped.test.py
│   │   │   ├── SSO_2incompatibleDraped_Mats.test.blend
│   │   │   ├── SSO_2incompatibleDraped_Mats.test.py
│   │   │   ├── SSO_illegal_usePanel_tex.test.blend
│   │   │   ├── SSO_illegal_usePanel_tex.test.py
│   │   │   ├── TEXTURE_MAP.test.blend
│   │   │   ├── TEXTURE_MAP.test.py
│   │   │   ├── blend_ratio.test.blend
│   │   │   └── blend_ratio.test.py
│   │   └── shadow/
│   │       ├── fixtures/
│   │       │   ├── test_01_all_cast_local_off.obj
│   │       │   ├── test_01_all_cast_shadows_off.obj
│   │       │   ├── test_02_all_cast_local_on.obj
│   │       │   ├── test_02_all_cast_shadows_on.obj
│   │       │   ├── test_03_1_cast_shadows_off.obj
│   │       │   ├── test_03a_1_cast_local_off.obj
│   │       │   ├── test_03b_1_or_more_cast_local_off_on_off.obj
│   │       │   ├── test_04_1_or_more_but_not_all_off.obj
│   │       │   └── test_05_all_cast_shadows_off_non_scenery.obj
│   │       ├── shadow_no_shadow.test.blend
│   │       ├── shadow_no_shadow.test.py
│   │       ├── shadow_no_shadow_non_scenery_type.test.blend
│   │       └── shadow_no_shadow_non_scenery_type.test.py
│   ├── monkey/
│   │   ├── fixtures/
│   │   │   └── test_monkey.obj
│   │   ├── monkey.test.blend
│   │   └── monkey.test.py
│   ├── object/
│   │   ├── axis_detent_ranges.test.blend
│   │   ├── axis_detent_ranges.test.py
│   │   ├── bone_configurations_drag_axis.test.py
│   │   ├── bone_configurations_drag_axis_detent.test.py
│   │   ├── bone_configurations_drag_rotate.test.py
│   │   ├── bone_configurations_drag_rotate_detent.test.py
│   │   ├── bone_configurations_drag_rotate_detent_arm.test.py
│   │   ├── bone_configurations_drag_rotate_detent_bone.test.py
│   │   ├── drag_axis_autodetect.test.blend
│   │   ├── drag_axis_autodetect.test.py
│   │   ├── drag_axis_w_detents.test.blend
│   │   ├── drag_axis_w_detents.test.py
│   │   ├── drag_rotate_obj_lib.blend
│   │   ├── drag_rotate_start_end_the_same.test.blend
│   │   ├── drag_rotate_start_end_the_same.test.py
│   │   ├── fixtures/
│   │   │   ├── test_01_2_rot_kf_0_detents_0_manip_kf.obj
│   │   │   ├── test_01_known_good_test.obj
│   │   │   ├── test_01_mesh_ll_overload_emits.obj
│   │   │   ├── test_02_3_rot_kf_0_detents_1_manip_kf.obj
│   │   │   ├── test_02_mesh_ll_overload_emits_not_material.obj
│   │   │   ├── test_03_4_rot_kf_0_detents_2_manip_kf.obj
│   │   │   ├── test_03_mesh_ll_overload_weird_cases.obj
│   │   │   ├── test_04_5_rot_kf_3_detents_3_manip_kf.obj
│   │   │   ├── test_04_known_good_drag_axis_autodetect.obj
│   │   │   ├── test_04_mesh_ll_overload_emits_not_material_nts.obj
│   │   │   ├── test_05_6_rot_kf_4_detents_1_pit_4_manip_kf.obj
│   │   │   ├── test_07_counter_clockwise_also_allowed.obj
│   │   │   ├── test_08_neg_15_15_degree_animation_allowed.obj
│   │   │   ├── test_08_no_detents_also_allowed.obj
│   │   │   ├── test_08_pit_at_start_and_end.obj
│   │   │   ├── test_10_known_good_drag_axis_w_detents.obj
│   │   │   ├── test_10_known_good_translation_bone.obj
│   │   │   ├── test_11_known_good_rotation_bone.obj
│   │   │   ├── test_drag_rotate_start_end_the_same.obj
│   │   │   ├── test_override_autodetect_datarefs_drag_axis.obj
│   │   │   ├── test_override_autodetect_datarefs_drag_axis_w_detents.obj
│   │   │   ├── test_override_autodetect_datarefs_drag_rotate.obj
│   │   │   └── test_override_autodetect_datarefs_drag_rotate_dentent.obj
│   │   ├── manip_keyframe.test.blend
│   │   ├── manip_keyframe.test.py
│   │   ├── object_ll_override.test.blend
│   │   ├── object_ll_override.test.py
│   │   ├── override_autodetect_datarefs.test.blend
│   │   ├── override_autodetect_datarefs.test.py
│   │   ├── rotation_bone_rules.test.blend
│   │   ├── rotation_bone_rules.test.py
│   │   ├── translation_bone_rules.test.blend
│   │   └── translation_bone_rules.test.py
│   ├── particles/
│   │   ├── fixtures/
│   │   │   ├── particle_test.pss
│   │   │   ├── test_02_Empty_index_enabled.obj
│   │   │   ├── test_03_Empty_index_disabled.obj
│   │   │   ├── test_file_pss_and_real.obj
│   │   │   ├── test_file_pss_but_not_real.obj
│   │   │   ├── test_particle_emitter_animated.obj
│   │   │   ├── test_particle_emitter_static.obj
│   │   │   └── test_particle_non_colocated_anim.obj
│   │   ├── particle_name_and_index.test.blend
│   │   ├── particle_name_and_index.test.py
│   │   ├── particle_non_colocated_anim.test.blend
│   │   ├── particle_non_colocated_anim.test.py
│   │   ├── particle_pss_file.test.blend
│   │   ├── particle_pss_file.test.py
│   │   ├── particle_static_anim.test.blend
│   │   └── particle_static_anim.test.py
│   ├── template.py
│   ├── template.test.blend
│   ├── updater/
│   │   ├── blend_mode_blend_glass_update.test.blend
│   │   ├── blend_mode_blend_glass_update.test.py
│   │   ├── custom_startup/
│   │   │   └── no_xp2b.blend
│   │   ├── in_place_update.test.blend
│   │   ├── in_place_update.test.py
│   │   ├── layers_to_collections.test.blend
│   │   ├── layers_to_collections.test.py
│   │   ├── move_global_mat_props.test.blend
│   │   ├── move_global_mat_props.test.py
│   │   ├── part_of_panel_to_cockpit_feature.test.blend
│   │   ├── part_of_panel_to_cockpit_feature.test.py
│   │   ├── pre_4_0_0_alpha_6.test.blend
│   │   ├── pre_4_0_0_alpha_6.test.py
│   │   ├── pre_4_1_0_beta_1_regions_changes_panel_mode.test.blend
│   │   ├── pre_4_1_0_beta_1_regions_changes_panel_mode.test.py
│   │   ├── pre_automatic_default_lights_as_default.test.blend
│   │   ├── pre_automatic_default_lights_as_default.test.py
│   │   ├── shadow/
│   │   │   ├── fixtures/
│   │   │   │   ├── test_01_aircraft_force_global_shadows.obj
│   │   │   │   ├── test_01_aircraft_force_global_shadows_root.obj
│   │   │   │   ├── test_01_global_off_layers.obj
│   │   │   │   ├── test_01_global_off_root_objects.obj
│   │   │   │   ├── test_02_cockpit_force_global_shadows.obj
│   │   │   │   ├── test_02_cockpit_force_global_shadows_root.obj
│   │   │   │   ├── test_02_global_on_layers.obj
│   │   │   │   └── test_02_global_on_root_objects.obj
│   │   │   ├── shadow_local_off_non_scenery.test.blend
│   │   │   ├── shadow_local_off_non_scenery.test.py
│   │   │   ├── update_cast_shadow.test.blend
│   │   │   ├── update_cast_shadow.test.py
│   │   │   ├── update_cast_shadow_table_output.test.blend
│   │   │   └── update_cast_shadow_table_output.test.py
│   │   ├── synchronize_version_numbers.test.py
│   │   └── updater.test.disabled.py
│   ├── utils/
│   │   ├── command_parser.test.py
│   │   ├── dataref_parser.test.py
│   │   ├── lights_column_name.test.py
│   │   ├── lights_parser.test.py
│   │   ├── test_commands_txts/
│   │   │   ├── Commands_desc_line_has_trailing_whitespace.txt
│   │   │   ├── Commands_empty_file.txt
│   │   │   ├── Commands_empty_line.txt
│   │   │   ├── Commands_line_starts_with_whitespace.txt
│   │   │   ├── Commands_no_desc_line_has_trailing_whitespace.txt
│   │   │   └── Commands_no_description_passes.txt
│   │   ├── test_datarefs_txts/
│   │   │   ├── DataRefs_empty.txt
│   │   │   ├── DataRefs_header_completely_wrong.txt
│   │   │   ├── DataRefs_header_file_version_is_one.txt
│   │   │   ├── DataRefs_header_xp_version_is_wrong.txt
│   │   │   ├── DataRefs_invalid_array_type.txt
│   │   │   ├── DataRefs_invalid_array_type_index_wrong.txt
│   │   │   ├── DataRefs_invalid_iswritable.txt
│   │   │   ├── DataRefs_invalid_type_wrong.txt
│   │   │   ├── DataRefs_line_starts_with_whitespace.txt
│   │   │   ├── DataRefs_no_blank_second_line.txt
│   │   │   └── DataRefs_no_datarefs_in_it.txt
│   │   └── test_lights_txts/
│   │       ├── arguments_sorted_well.txt
│   │       ├── lights_comments_ignored.txt
│   │       └── lights_empty.txt
│   ├── xplane_export.test.disabled.py
│   └── xplane_types/
│       ├── xplane_bone/
│       │   ├── collect_animations.test.blend
│       │   ├── collect_animations.test.py
│       │   ├── object_matrices.test.blend
│       │   └── object_matrices.test.py
│       └── xplane_file/
│           ├── bad_nested_exportable_roots.test.blend
│           ├── bad_nested_exportable_roots.test.py
│           ├── create_from_layers.test.blend
│           ├── create_from_layers.test.py
│           ├── create_from_root_objects.test.blend
│           ├── create_from_root_objects.test.py
│           ├── current_scene_exclusive_collection.test.blend
│           ├── current_scene_exclusive_collection.test.py
│           ├── fixtures/
│           │   ├── root_object_offsets.test_a.obj
│           │   ├── root_object_offsets.test_b.obj
│           │   ├── root_object_offsets.test_c.obj
│           │   ├── root_object_offsets_animated_a.obj
│           │   ├── root_object_offsets_animated_b.obj
│           │   ├── root_object_offsets_animated_c.obj
│           │   ├── test_ExportableCollection.obj
│           │   ├── test_ExportableObject.obj
│           │   ├── test_ExportableObjectArmatureCases.obj
│           │   ├── test_Exportable_child_out_of_scene_warn_and_ignore.obj
│           │   ├── test_Exportable_no_convert_makes_bones.obj
│           │   ├── test_Exportable_out_of_collection_no_error.obj
│           │   ├── test_current_scene_exclusive_collection.obj
│           │   ├── test_export_root_objects_1.obj
│           │   ├── test_export_root_objects_2.obj
│           │   ├── test_one_of_each_animation_type.obj
│           │   ├── test_resource_paths_cases_1_4.obj
│           │   ├── test_resource_paths_cases_5_and_10.obj
│           │   ├── test_write_static.obj
│           │   ├── test_write_trans_anim.obj
│           │   └── test_write_transrot_anim.obj
│           ├── frame_set_optimization.test.blend
│           ├── frame_set_optimization.test.py
│           ├── performance_spheres_no_anim.test.blend
│           ├── performance_spheres_no_anim.test.disabled.py
│           ├── recursive_collection_collects.test.blend
│           ├── recursive_collection_collects.test.py
│           ├── recursive_collection_edge_cases.test.blend
│           ├── recursive_collection_edge_cases.test.py
│           ├── resource_path_new_file.test.py
│           ├── resource_paths.test.blend
│           ├── resource_paths.test.py
│           ├── root_object_offsets.test.blend
│           ├── root_object_offsets.test.py
│           ├── root_object_offsets_animated.test.blend
│           ├── root_object_offsets_animated.test.py
│           ├── sort_by_weight.test.blend
│           ├── sort_by_weight.test.py
│           ├── split_parent/
│           │   ├── fixtures/
│           │   │   ├── test_1_LandingGearCollection.obj
│           │   │   ├── test_1_WheelCollection.obj
│           │   │   ├── test_1_reuse_of_parent.obj
│           │   │   ├── test_1_reuse_of_parent_out_of_order.obj
│           │   │   ├── test_2_LandingGearExpObject.obj
│           │   │   ├── test_2_WheelCollection.obj
│           │   │   ├── test_2_reuse_of_parent.obj
│           │   │   ├── test_3_ButtonCollection.obj
│           │   │   ├── test_4_ExportableCollection.obj
│           │   │   ├── test_AAA_animation.obj
│           │   │   ├── test_AAA_mesh.obj
│           │   │   ├── test_AAn_animation.obj
│           │   │   ├── test_AAn_mesh.obj
│           │   │   ├── test_AnA_animation.obj
│           │   │   ├── test_AnA_mesh.obj
│           │   │   ├── test_Ann_animation.obj
│           │   │   ├── test_Ann_mesh.obj
│           │   │   ├── test_Collection_not_really_animated.obj
│           │   │   ├── test_ExpCollWalkToColl.obj
│           │   │   ├── test_ExpCollWalkToExpColl.obj
│           │   │   ├── test_ExpCollWalkToMasterCollection.obj
│           │   │   ├── test_ExpCollWalkToRoot.obj
│           │   │   ├── test_ExpCollection_not_really_animated.obj
│           │   │   ├── test_HasManip_Exp.obj
│           │   │   ├── test_HasVisuals_Exp.obj
│           │   │   ├── test_ParentOutOfScene.obj
│           │   │   ├── test_SnakeOut_Exp.obj
│           │   │   ├── test_nAA_animation.obj
│           │   │   ├── test_nAA_mesh.obj
│           │   │   ├── test_nAn_animation.obj
│           │   │   ├── test_nAn_mesh.obj
│           │   │   ├── test_new_branch_index_0.obj
│           │   │   ├── test_new_branch_index_1.obj
│           │   │   ├── test_new_branch_index_2.obj
│           │   │   ├── test_new_branch_index_last.obj
│           │   │   ├── test_nnA_animation.obj
│           │   │   └── test_nnA_mesh.obj
│           │   ├── parent_out_of_collection_find_anim.test.blend
│           │   ├── parent_out_of_collection_find_anim.test.py
│           │   ├── parent_out_of_collection_index_preserved.test.blend
│           │   ├── parent_out_of_collection_index_preserved.test.py
│           │   ├── parent_out_of_collection_no_attr_share.test.blend
│           │   ├── parent_out_of_collection_no_attr_share.test.py
│           │   ├── parent_out_of_collection_not_anim.test.blend
│           │   ├── parent_out_of_collection_not_anim.test.py
│           │   ├── parent_out_of_collection_snake_out.test.blend
│           │   ├── parent_out_of_collection_snake_out.test.py
│           │   ├── parent_out_of_collection_will_walk_up.test.blend
│           │   ├── parent_out_of_collection_will_walk_up.test.py
│           │   ├── parent_out_of_collection_workflows.test.blend
│           │   └── parent_out_of_collection_workflows.test.py
│           ├── write.test.blend
│           └── write.test.py
└── tests.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.pyc
io_xplane_debug.py
setup.py
tmp
*.blend1
*.blend2
*.blend3
*.blend4
*.blend5
__pycache__

*.swo
*.swp
*.orig

*.zip

.mypy_cache/*
.idea/*
.vs/*
builds/*

*.pyproj
*.sln
.DS_Store

io_xplane2blender_build/*

tests/object/config_blends/*

*_tmp_bake_images*
tests/features/rain/two_slot_textures/wiper_gradient_texture.png
tests/features/rain/four_slot_textures/wiper_gradient_texture.png


================================================
FILE: .isort.cfg
================================================
[settings]
multi_line_output = 3
include_trailing_comma = True
force_grid_wrap = 0
use_parentheses = True
ensure_newline_before_comments = True
line_length = 88
known_third_party = bmesh,bpy,idprop,mathutils
skip=tests,tools


================================================
FILE: .pre-commit-config.yaml
================================================
repos:
-   repo: https://github.com/pre-commit/mirrors-isort
    rev: v4.3.21
    hooks:
    - id: isort
-   repo: https://github.com/psf/black
    rev: stable
    hooks:
    - id: black


================================================
FILE: .travis.yml
================================================
language: python
python:
  - "3.7"
addons:
  apt:
    packages:
      - blender
sudo: false
install:
  - BLENDER_VERSION="2.80"
  - BLENDER_VERSION_SUFFIX=""
  - BLENDER_ARCHIVE="blender-${BLENDER_VERSION}${BLENDER_VERSION_SUFFIX}-linux-glibc217-x86_64"
  - mkdir tmp && cd tmp
  - wget http://ftp.nluug.nl/pub/graphics/blender/release/Blender${BLENDER_VERSION}/${BLENDER_ARCHIVE}.tar.bz2
  - tar jxf ${BLENDER_ARCHIVE}.tar.bz2
  - mv ${BLENDER_ARCHIVE} blender
  - rm ${BLENDER_ARCHIVE}.tar.bz2
  - cd ..
  - ln -s ${PWD}/io_xplane2blender ${PWD}/tmp/blender/${BLENDER_VERSION}/scripts/addons/io_xplane2blender
script: python tests.py --blender ./tmp/blender/blender


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
 advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
 address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
 professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at ted at x-plane dot com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
[![Build Status](https://travis-ci.org/X-Plane/XPlane2Blender.svg?branch=master)](https://travis-ci.org/X-Plane/XPlane2Blender)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)

# Introduction
This addon for Blender 2.80 and up makes it possible to export models made in Blender to the X-Plane object format (.obj). 
An experimental importer has been added in 4.2.0-Alpha 1 and can be found here: https://github.com/X-Plane/XPlane2Blender/releases/tag/v4.2.0-alpha.1 

## Contact Us
The best way to contact us is through [a bug report](https://github.com/X-Plane/XPlane2Blender/issues). Otherwise, e-mail **ted at x-plane dot com**, especially if you're worried about the security of your models while we debug them.

## General Requirements
- Blender 2.80-83. 2.90 seems to work but is not officially supported
- For the greatest stability, use the latest non-beta version of [XPlane2Blender](https://github.com/X-Plane/XPlane2Blender/releases/latest)

XPlane2Blender for Blender 2.79 can still be downloaded from the releases page, but it isn't supported anymore. An experimental converter for Blender 2.49 projects is also available and is supported.

## Automatic Installation
**Note: This process will override an existing copy of the plugin!** To backup your current version of the plugin, see the manual instructions in the [manual](https://xp2b-docs.gitbook.io/xplane2blender-docs/index-3/34_installation). **Always make backups of your work, especially when beta testing, as newer versions may not be backwards compatibility.** Read the release notes for more details.

1. Download the [addon](https://github.com/X-Plane/XPlane2Blender/releases/latest) with a name like ``io_xplane2blender_4_0_0-rc_1-89_20200910152046.zip``. **Do not download the .zip file called "Source Code", do not unzip the io_xplane2blender .zip file**
2. In Blender, open up the Preferences, go to the Addons tab, and click at the bottom "Install From File..."
3. Using the file picker, find the .zip file and click "Install From File...". This will automatically unzip to the addons folder
4. Ensure the checkbox next to the words "Import-Export: Export: X-Plane (.obj)" is checked
5. **Restart Blender even if you see the UI change**
6. Begin using XPlane2Blender!

For less stable betas or different versions see the [releases page](https://github.com/X-Plane/XPlane2Blender/releases). Be sure to read the notes.

## Get Started!
See the [Introduction to XPlane2Blender Video](https://developer.x-plane.com/tools/blender/) and download the example files and you'll be well on your way to exporting your first mesh and seeing it in X-Plane! Although the Blender version shown is Blender 2.79, XPlane2Blender is almost entirely the same across versions.

## Documentation Sources
- [XPlane2Blender Manual](https://xp2b-docs.gitbook.io/xplane2blender-docs)
- [The PZL-M-18, an open source aircraft](https://github.com/todirbg/PZL-M-18)
- [The BD-5J Microjet, an open source jet](https://forums.x-plane.org/index.php?/files/file/27269-bd-5j-microjet)
- [Dan Klaue's "Using Blender With PlaneMaker" Playlist](https://www.youtube.com/playlist?list=PLDB0F4B925CF9169C). While older it still explains many of the principles of XPlane2Blender
- [X-Plane Scenery File Formats](http://developer.x-plane.com/docs/specs/)
- [X-Plane.org's 3d Modeling board](https://forums.x-plane.org/index.php?/forums/forum/45-3d-modeling/)
- [X-Plane Scenery Developer Blog/Knowledge Base](http://developer.x-plane.com/)
- [X-Plane Modeling Tutorials](http://developer.x-plane.com/docs/modeling/)

## Test Suite
**The average user does not need the test suite.** Before releasing a build to the public we test the code many many many times! This is only useful for developers and power users who make changes to the source code. The tests folder must also be in the same folder as the addon folder (see manual installation).

If you have Python installed (hopefully matching Blender's internal interpreter for maximum stability) and the **full source code** downloaded, you can run the test suite. It will attempt to export sample .blend files that utilize various features of the exporter and print the results (see the contents of the ``test`` folder). All passing means XPlane2Blender is safe to use. In the XPlane2Blender folder, open up a command line and run

``python tests.py --print-fails``

This will run all tests until the end or a failure occurs. Only detailed logs will be printed for the failed test. See ``--help`` to show all flags and what they do.


================================================
FILE: addons/addons.README
================================================
01234567890123456789012345678901234567890123456789012345678901234567890123456789
This directory and the symlink "modules" exist in this repo to work around a 
problem: while the code has the Blender add-on (io_xplane2blender) in the root
of the GIT repository, Blender in headless mode will only load add-ons for an
arbitrary path by looking in the subdirectory addons/modules.

In other words, if we do

BLENDER_USER_CONFIG=/home/bartsimpson/my_crud blender -b \
   --addons wicked_addon -P some_script.py

Blender will look in /home/bartsimpson/my_crud/addons/modules/ to find
"wicked_addon".  

Since our repo isn't structured that way, modules is a symlink that points back
a directory, making <git root>/addons/modules the smae as <git root> and
allowing our script to work.



================================================
FILE: io_xplane2blender/__init__.py
================================================
# ##### BEGIN GPL LICENSE BLOCK #####
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2
#  of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software Foundation,
#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
import bpy

# Contains informations for Blender to recognize and categorize the addon.
bl_info = {
    "name": "XPlane2Blender Export for X-Plane OBJs",
    "description": "Export X-Plane objects/planes (.obj format)",
    "author": "Ted Greene, Ben Supnik, Amy Parent, Maya F. Eroglu",
    "version": (4, 4, 0),
    "blender": (2, 80, 0),
    "location": "File > Import/Export > X-Plane",
    "warning": "",
    "wiki_url": "https://github.com/X-Plane/XPlane2Blender/wiki",
    "tracker_url": "https://github.com/X-Plane/XPlane2Blender/issues",
    "category": "Import-Export",
}

if "" not in locals():

    from . import xplane_ui
    from . import xplane_props
    from . import xplane_export
    from . import xplane_ops
    from . import xplane_ops_dev
    from . import xplane_config
    from . import xplane_updater
    from .xplane_utils import xplane_lights_txt_parser
    from .xplane_utils import xplane_wiper_gradient
else:
    import importlib
    xplane_ui      = importlib.reload(xplane_ui)
    xplane_props   = importlib.reload(xplane_props)
    xplane_export  = importlib.reload(xplane_export)
    xplane_ops     = importlib.reload(xplane_ops)
    xplane_ops_dev = importlib.reload(xplane_ops_dev)
    xplane_config  = importlib.reload(xplane_config)
    xplane_updater = importlib.reload(xplane_updater)
    xplane_lights_txt_parser = importlib.reload(xplane_lights_txt_parser)
    xplane_wiper_gradient = importlib.reload(xplane_wiper_gradient)


# Function: menu_func
# Adds the export option to the menu.
#
# Parameters:
#   self - Instance to something
#   context - The Blender context object
def menu_func(self, context):
    self.layout.operator(
        xplane_export.EXPORT_OT_ExportXPlane.bl_idname, text="X-Plane Object (.obj)"
    )


# Function: register
# Registers the addon with all its classes and the menu function.
def register():
    xplane_export.register()
    xplane_props.register()
    xplane_ops.register()
    xplane_ops_dev.register()
    xplane_ui.register()
    bpy.types.TOPBAR_MT_file_export.append(menu_func)


# Function: unregister
# Unregisters the addon and all its classes and removes the entry from the menu.
def unregister():
    xplane_export.unregister()
    xplane_ui.unregister()
    xplane_ops.unregister()
    xplane_ops_dev.unregister()
    xplane_props.unregister()
    bpy.types.TOPBAR_MT_file_export.remove(menu_func)


if __name__ == "__main__":
    register()


================================================
FILE: io_xplane2blender/resources/Commands.txt
================================================
sim/none/none                                      Do nothing.
sim/operation/quit                                 Quit X-Plane.
sim/operation/screenshot                           Take a screenshot.
sim/operation/show_menu                            Show the in-sim menu.
sim/operation/make_current_aircraft_icons          (Re)generate all icons for the current aircraft.
sim/operation/make_single_icon                     (Re)generate the icon for the current aircraft & livery.
sim/operation/make_missing_icons                   Generate all missing aircraft & livery icons.
sim/operation/regen_weather                        Regenerate weather.
sim/operation/cycle_dump                           Print out a cycle dump for this frame.
sim/operation/recording                            Toggle user interaction recording pane.
sim/operation/test_data_ref                        Test dataref: Run from 0 to 1 and back.
sim/operation/show_fps                             Toggle on-screen frame-rate display.
sim/operation/dev_console                          Toggle dev console.
sim/operation/toggle_full_screen                   Toggle full-screen mode.
sim/operation/reload_aircraft                      Force reloading the current aircraft (including art).
sim/operation/reload_aircraft_no_art               Force reloading the current aircraft (skip art reload).
sim/operation/reload_scenery                       Force reloading the current scenery.
sim/operation/fail_system                          Fail selected in failures screen.
sim/operation/make_panel_previews                  Make screenshots of your panels.
sim/operation/close_windows                        Close any windows to get back to cockpit.
sim/operation/load_situation_1                     Load situation.
sim/operation/load_situation_2                     Load situation.
sim/operation/load_situation_3                     Load situation.
sim/view/track-ir_toggle                           Toggle TrackIR control.
sim/map/show_current                               Toggle the sectional map window.
sim/map/show_instructor_operator_station           Toggle the instructor operator station (IOS) window.
sim/map/show_low_enroute                           Toggle the low enroute map.
sim/map/show_high_enroute                          Toggle the high enroute map.
sim/map/show_sectional                             Toggle the sectional map.
sim/operation/toggle_flight_config                 Toggle the Flight Configuration window.
sim/operation/toggle_main_menu                     Toggle the Main Menu screen.
sim/operation/toggle_settings_window               Toggle the Settings window.
sim/operation/toggle_flight_school_window          Toggle the Flight School window.
sim/operation/toggle_key_shortcuts_window          Toggle the Keyboard Shortcuts window.
sim/operation/open_weight_and_balance_window       Open the Weight & Balance window.
sim/operation/open_failures_window                 Open the Failures window.
sim/operation/toggle_data_output_graph             Toggle display of the data output graph.
sim/operation/toggle_weather_map                   Toggle display of the weather map.
sim/operation/toggle_data_output_cockpit           Toggle display of the cockpit data output.
sim/operation/toggle_joy_profiles_window           Toggle the keyboard & joystick profiles window.
sim/operation/toggle_custom_location_window        Toggle the Location details window.
sim/operation/show_camera_editor                   Show the camera keyframe editor.
sim/operation/toggle_style_guide                   Toggle display of the V11 UI style guide.
sim/operation/slider_01                            Slider #1 On/Off control.
sim/operation/slider_02                            Slider #2 On/Off control.
sim/operation/slider_03                            Slider #3 On/Off control.
sim/operation/slider_04                            Slider #4 On/Off control.
sim/operation/slider_05                            Slider #5 On/Off control.
sim/operation/slider_06                            Slider #6 On/Off control.
sim/operation/slider_07                            Slider #7 On/Off control.
sim/operation/slider_08                            Slider #8 On/Off control.
sim/operation/slider_09                            Slider #9 On/Off control.
sim/operation/slider_10                            Slider #10 On/Off control.
sim/operation/slider_11                            Slider #11 On/Off control.
sim/operation/slider_12                            Slider #12 On/Off control.
sim/operation/slider_13                            Slider #13 On/Off control.
sim/operation/slider_14                            Slider #14 On/Off control.
sim/operation/slider_15                            Slider #15 On/Off control.
sim/operation/slider_16                            Slider #16 On/Off control.
sim/operation/slider_17                            Slider #17 On/Off control.
sim/operation/slider_18                            Slider #18 On/Off control.
sim/operation/slider_19                            Slider #19 On/Off control.
sim/operation/slider_20                            Slider #20 On/Off control.
sim/operation/slider_21                            Slider #21 On/Off control.
sim/operation/slider_22                            Slider #22 On/Off control.
sim/operation/slider_23                            Slider #23 On/Off control.
sim/operation/slider_24                            Slider #24 On/Off control.
sim/operation/fix_all_systems                      Fix all failed systems.
sim/operation/auto_board                           Auto-set electrical system for boarding.
sim/operation/auto_start                           Auto-start engines to running, real-time.
sim/operation/fully_service_acf                    Finish servicing current viewed aircraft.
sim/operation/quick_start                          Quick-start engines to running.
sim/magnetos/magnetos_off                          Magnetos off.
sim/magnetos/magnetos_both                         Magnetos both.
sim/engines/engage_starters                        Engage starters.
sim/engines/throttle_down                          Throttle down a bit.
sim/engines/throttle_up                            Throttle up a bit.
sim/engines/TOGA_power                             Engage TOGA power.
sim/engines/prop_down                              Prop coarse a bit.
sim/engines/prop_up                                Prop fine a bit.
sim/engines/mixture_min                            Mixture to cut off.
sim/engines/mixture_down                           Mixture lean a bit.
sim/engines/mixture_up                             Mixture rich a bit.
sim/engines/mixture_max                            Mixture to full rich.
sim/engines/carb_heat_off                          Carb heat off.
sim/engines/carb_heat_on                           Carb heat on.
sim/engines/carb_heat_toggle                       Carb heat toggle.
sim/flight_controls/cowl_flaps_open                Move cowl flaps open a bit.
sim/flight_controls/cowl_flaps_closed              Move cowl flaps to closed a bit.
sim/engines/idle_hi_lo_toggle                      Idle high/low toggle.
sim/engines/idle_hi_lo_toggle_1                    Idle high/low toggle Engine 1.
sim/engines/idle_hi_lo_toggle_2                    Idle high/low toggle Engine 2.
sim/engines/idle_hi_lo_toggle_3                    Idle high/low toggle Engine 3.
sim/engines/idle_hi_lo_toggle_4                    Idle high/low toggle Engine 4.
sim/engines/idle_hi_lo_toggle_5                    Idle high/low toggle Engine 5.
sim/engines/idle_hi_lo_toggle_6                    Idle high/low toggle Engine 6.
sim/engines/idle_hi_lo_toggle_7                    Idle high/low toggle Engine 7.
sim/engines/idle_hi_lo_toggle_8                    Idle high/low toggle Engine 8.
sim/fadec/fadec_toggle                             FADEC toggle.
sim/engines/governor_on                            Throttle governor on.
sim/engines/governor_off                           Throttle governor off.
sim/engines/governor_toggle                        Throttle governor toggle.
sim/engines/collective_idle_release                Throttle idle release button.
sim/engines/collective_idle_release_1              Throttle idle release button, Engine 1.
sim/engines/collective_idle_release_2              Throttle idle release button, Engine 2.
sim/engines/collective_idle_release_3              Throttle idle release button, Engine 3.
sim/engines/collective_idle_release_4              Throttle idle release button, Engine 4.
sim/engines/collective_idle_release_5              Throttle idle release button, Engine 5.
sim/engines/collective_idle_release_6              Throttle idle release button, Engine 6.
sim/engines/collective_idle_release_7              Throttle idle release button, Engine 7.
sim/engines/collective_idle_release_8              Throttle idle release button, Engine 8.
sim/engines/clutch_on                              Clutch on.
sim/engines/clutch_off                             Clutch off.
sim/engines/clutch_toggle                          Clutch toggle.
sim/engines/beta_toggle                            Toggle Beta prop.
sim/engines/thrust_reverse_toggle                  Toggle thrust reversers.
sim/engines/thrust_reverse_hold                    Hold thrust reverse at max.
sim/starters/shut_down                             Pull fuel and mags for shutdown.
sim/magnetos/magnetos_down_1                       Magnetos down one notch for engine #1.
sim/magnetos/magnetos_down_2                       Magnetos down one notch for engine #2.
sim/magnetos/magnetos_down_3                       Magnetos down one notch for engine #3.
sim/magnetos/magnetos_down_4                       Magnetos down one notch for engine #4.
sim/magnetos/magnetos_down_5                       Magnetos down one notch for engine #5.
sim/magnetos/magnetos_down_6                       Magnetos down one notch for engine #6.
sim/magnetos/magnetos_down_7                       Magnetos down one notch for engine #7.
sim/magnetos/magnetos_down_8                       Magnetos down one notch for engine #8.
sim/magnetos/magnetos_up_1                         Magnetos up one notch for engine #1.
sim/magnetos/magnetos_up_2                         Magnetos up one notch for engine #2.
sim/magnetos/magnetos_up_3                         Magnetos up one notch for engine #3.
sim/magnetos/magnetos_up_4                         Magnetos up one notch for engine #4.
sim/magnetos/magnetos_up_5                         Magnetos up one notch for engine #5.
sim/magnetos/magnetos_up_6                         Magnetos up one notch for engine #6.
sim/magnetos/magnetos_up_7                         Magnetos up one notch for engine #7.
sim/magnetos/magnetos_up_8                         Magnetos up one notch for engine #8.
sim/magnetos/magnetos_off_1                        Magnetos off for engine #1.
sim/magnetos/magnetos_off_2                        Magnetos off for engine #2.
sim/magnetos/magnetos_off_3                        Magnetos off for engine #3.
sim/magnetos/magnetos_off_4                        Magnetos off for engine #4.
sim/magnetos/magnetos_off_5                        Magnetos off for engine #5.
sim/magnetos/magnetos_off_6                        Magnetos off for engine #6.
sim/magnetos/magnetos_off_7                        Magnetos off for engine #7.
sim/magnetos/magnetos_off_8                        Magnetos off for engine #8.
sim/magnetos/magnetos_left_1                       Magnetos left for engine #1.
sim/magnetos/magnetos_left_2                       Magnetos left for engine #2.
sim/magnetos/magnetos_left_3                       Magnetos left for engine #3.
sim/magnetos/magnetos_left_4                       Magnetos left for engine #4.
sim/magnetos/magnetos_left_5                       Magnetos left for engine #5.
sim/magnetos/magnetos_left_6                       Magnetos left for engine #6.
sim/magnetos/magnetos_left_7                       Magnetos left for engine #7.
sim/magnetos/magnetos_left_8                       Magnetos left for engine #8.
sim/magnetos/magnetos_right_1                      Magnetos right for engine #1.
sim/magnetos/magnetos_right_2                      Magnetos right for engine #2.
sim/magnetos/magnetos_right_3                      Magnetos right for engine #3.
sim/magnetos/magnetos_right_4                      Magnetos right for engine #4.
sim/magnetos/magnetos_right_5                      Magnetos right for engine #5.
sim/magnetos/magnetos_right_6                      Magnetos right for engine #6.
sim/magnetos/magnetos_right_7                      Magnetos right for engine #7.
sim/magnetos/magnetos_right_8                      Magnetos right for engine #8.
sim/magnetos/magnetos_both_1                       Magnetos both for engine #1.
sim/magnetos/magnetos_both_2                       Magnetos both for engine #2.
sim/magnetos/magnetos_both_3                       Magnetos both for engine #3.
sim/magnetos/magnetos_both_4                       Magnetos both for engine #4.
sim/magnetos/magnetos_both_5                       Magnetos both for engine #5.
sim/magnetos/magnetos_both_6                       Magnetos both for engine #6.
sim/magnetos/magnetos_both_7                       Magnetos both for engine #7.
sim/magnetos/magnetos_both_8                       Magnetos both for engine #8.
sim/ignition/ignition_down_1                       Ignition key down one notch for engine #1.
sim/ignition/ignition_down_2                       Ignition key down one notch for engine #2.
sim/ignition/ignition_down_3                       Ignition key down one notch for engine #3.
sim/ignition/ignition_down_4                       Ignition key down one notch for engine #4.
sim/ignition/ignition_down_5                       Ignition key down one notch for engine #5.
sim/ignition/ignition_down_6                       Ignition key down one notch for engine #6.
sim/ignition/ignition_down_7                       Ignition key down one notch for engine #7.
sim/ignition/ignition_down_8                       Ignition key down one notch for engine #8.
sim/ignition/ignition_up_1                         Ignition key up one notch for engine #1.
sim/ignition/ignition_up_2                         Ignition key up one notch for engine #2.
sim/ignition/ignition_up_3                         Ignition key up one notch for engine #3.
sim/ignition/ignition_up_4                         Ignition key up one notch for engine #4.
sim/ignition/ignition_up_5                         Ignition key up one notch for engine #5.
sim/ignition/ignition_up_6                         Ignition key up one notch for engine #6.
sim/ignition/ignition_up_7                         Ignition key up one notch for engine #7.
sim/ignition/ignition_up_8                         Ignition key up one notch for engine #8.
sim/magnetos/magnetos_left_on_1                    Magnetos left rocker switch on for engine #1.
sim/magnetos/magnetos_left_on_2                    Magnetos left rocker switch on for engine #2.
sim/magnetos/magnetos_left_on_3                    Magnetos left rocker switch on for engine #3.
sim/magnetos/magnetos_left_on_4                    Magnetos left rocker switch on for engine #4.
sim/magnetos/magnetos_left_on_5                    Magnetos left rocker switch on for engine #5.
sim/magnetos/magnetos_left_on_6                    Magnetos left rocker switch on for engine #6.
sim/magnetos/magnetos_left_on_7                    Magnetos left rocker switch on for engine #7.
sim/magnetos/magnetos_left_on_8                    Magnetos left rocker switch on for engine #8.
sim/magnetos/magnetos_right_on_1                   Magnetos right rocker switch on for engine #1.
sim/magnetos/magnetos_right_on_2                   Magnetos right rocker switch on for engine #2.
sim/magnetos/magnetos_right_on_3                   Magnetos right rocker switch on for engine #3.
sim/magnetos/magnetos_right_on_4                   Magnetos right rocker switch on for engine #4.
sim/magnetos/magnetos_right_on_5                   Magnetos right rocker switch on for engine #5.
sim/magnetos/magnetos_right_on_6                   Magnetos right rocker switch on for engine #6.
sim/magnetos/magnetos_right_on_7                   Magnetos right rocker switch on for engine #7.
sim/magnetos/magnetos_right_on_8                   Magnetos right rocker switch on for engine #8.
sim/magnetos/magnetos_left_off_1                   Magnetos left rocker switch off for engine #1.
sim/magnetos/magnetos_left_off_2                   Magnetos left rocker switch off for engine #2.
sim/magnetos/magnetos_left_off_3                   Magnetos left rocker switch off for engine #3.
sim/magnetos/magnetos_left_off_4                   Magnetos left rocker switch off for engine #4.
sim/magnetos/magnetos_left_off_5                   Magnetos left rocker switch off for engine #5.
sim/magnetos/magnetos_left_off_6                   Magnetos left rocker switch off for engine #6.
sim/magnetos/magnetos_left_off_7                   Magnetos left rocker switch off for engine #7.
sim/magnetos/magnetos_left_off_8                   Magnetos left rocker switch off for engine #8.
sim/magnetos/magnetos_right_off_1                  Magnetos right rocker switch off for engine #1.
sim/magnetos/magnetos_right_off_2                  Magnetos right rocker switch off for engine #2.
sim/magnetos/magnetos_right_off_3                  Magnetos right rocker switch off for engine #3.
sim/magnetos/magnetos_right_off_4                  Magnetos right rocker switch off for engine #4.
sim/magnetos/magnetos_right_off_5                  Magnetos right rocker switch off for engine #5.
sim/magnetos/magnetos_right_off_6                  Magnetos right rocker switch off for engine #6.
sim/magnetos/magnetos_right_off_7                  Magnetos right rocker switch off for engine #7.
sim/magnetos/magnetos_right_off_8                  Magnetos right rocker switch off for engine #8.
sim/igniters/igniter_arm_off_1                     Igniter #1 arm off.
sim/igniters/igniter_arm_off_2                     Igniter #2 arm off.
sim/igniters/igniter_arm_off_3                     Igniter #3 arm off.
sim/igniters/igniter_arm_off_4                     Igniter #4 arm off.
sim/igniters/igniter_arm_off_5                     Igniter #5 arm off.
sim/igniters/igniter_arm_off_6                     Igniter #6 arm off.
sim/igniters/igniter_arm_off_7                     Igniter #7 arm off.
sim/igniters/igniter_arm_off_8                     Igniter #8 arm off.
sim/igniters/igniter_arm_on_1                      Igniter #1 arm on.
sim/igniters/igniter_arm_on_2                      Igniter #2 arm on.
sim/igniters/igniter_arm_on_3                      Igniter #3 arm on.
sim/igniters/igniter_arm_on_4                      Igniter #4 arm on.
sim/igniters/igniter_arm_on_5                      Igniter #5 arm on.
sim/igniters/igniter_arm_on_6                      Igniter #6 arm on.
sim/igniters/igniter_arm_on_7                      Igniter #7 arm on.
sim/igniters/igniter_arm_on_8                      Igniter #8 arm on.
sim/igniters/igniter_contin_off_1                  Igniter #1 contin-ignition off.
sim/igniters/igniter_contin_off_2                  Igniter #2 contin-ignition off.
sim/igniters/igniter_contin_off_3                  Igniter #3 contin-ignition off.
sim/igniters/igniter_contin_off_4                  Igniter #4 contin-ignition off.
sim/igniters/igniter_contin_off_5                  Igniter #5 contin-ignition off.
sim/igniters/igniter_contin_off_6                  Igniter #6 contin-ignition off.
sim/igniters/igniter_contin_off_7                  Igniter #7 contin-ignition off.
sim/igniters/igniter_contin_off_8                  Igniter #8 contin-ignition off.
sim/igniters/igniter_contin_on_1                   Igniter #1 contin-ignition on.
sim/igniters/igniter_contin_on_2                   Igniter #2 contin-ignition on.
sim/igniters/igniter_contin_on_3                   Igniter #3 contin-ignition on.
sim/igniters/igniter_contin_on_4                   Igniter #4 contin-ignition on.
sim/igniters/igniter_contin_on_5                   Igniter #5 contin-ignition on.
sim/igniters/igniter_contin_on_6                   Igniter #6 contin-ignition on.
sim/igniters/igniter_contin_on_7                   Igniter #7 contin-ignition on.
sim/igniters/igniter_contin_on_8                   Igniter #8 contin-ignition on.
sim/starters/eng_mode_norm                         Engine mode selector: NORM.
sim/starters/eng_mode_start                        Engine mode selector: IGN/START.
sim/starters/eng_mode_crank                        Engine mode selector: CRANK.
sim/starters/engage_starter_1                      Engage starter #1.
sim/starters/engage_starter_2                      Engage starter #2.
sim/starters/engage_starter_3                      Engage starter #3.
sim/starters/engage_starter_4                      Engage starter #4.
sim/starters/engage_starter_5                      Engage starter #5.
sim/starters/engage_starter_6                      Engage starter #6.
sim/starters/engage_starter_7                      Engage starter #7.
sim/starters/engage_starter_8                      Engage starter #8.
sim/engines/throttle_horizontal_down               Throttle horizontal down a bit.
sim/engines/throttle_horizontal_up                 Throttle horizontal up a bit.
sim/engines/throttle_down_1                        Throttle down a bit for engine #1.
sim/engines/throttle_down_2                        Throttle down a bit for engine #2.
sim/engines/throttle_down_3                        Throttle down a bit for engine #3.
sim/engines/throttle_down_4                        Throttle down a bit for engine #4.
sim/engines/throttle_down_5                        Throttle down a bit for engine #5.
sim/engines/throttle_down_6                        Throttle down a bit for engine #6.
sim/engines/throttle_down_7                        Throttle down a bit for engine #7.
sim/engines/throttle_down_8                        Throttle down a bit for engine #8.
sim/engines/throttle_down_9                        Throttle down a bit for engine #9.
sim/engines/throttle_up_1                          Throttle up a bit for engine #1.
sim/engines/throttle_up_2                          Throttle up a bit for engine #2.
sim/engines/throttle_up_3                          Throttle up a bit for engine #3.
sim/engines/throttle_up_4                          Throttle up a bit for engine #4.
sim/engines/throttle_up_5                          Throttle up a bit for engine #5.
sim/engines/throttle_up_6                          Throttle up a bit for engine #6.
sim/engines/throttle_up_7                          Throttle up a bit for engine #7.
sim/engines/throttle_up_8                          Throttle up a bit for engine #8.
sim/engines/throttle_up_9                          Throttle up a bit for engine #9.
sim/engines/prop_down_1                            Prop down a bit for engine #1.
sim/engines/prop_down_2                            Prop down a bit for engine #2.
sim/engines/prop_down_3                            Prop down a bit for engine #3.
sim/engines/prop_down_4                            Prop down a bit for engine #4.
sim/engines/prop_down_5                            Prop down a bit for engine #5.
sim/engines/prop_down_6                            Prop down a bit for engine #6.
sim/engines/prop_down_7                            Prop down a bit for engine #7.
sim/engines/prop_down_8                            Prop down a bit for engine #8.
sim/engines/prop_up_1                              Prop up a bit for engine #1.
sim/engines/prop_up_2                              Prop up a bit for engine #2.
sim/engines/prop_up_3                              Prop up a bit for engine #3.
sim/engines/prop_up_4                              Prop up a bit for engine #4.
sim/engines/prop_up_5                              Prop up a bit for engine #5.
sim/engines/prop_up_6                              Prop up a bit for engine #6.
sim/engines/prop_up_7                              Prop up a bit for engine #7.
sim/engines/prop_up_8                              Prop up a bit for engine #8.
sim/engines/mixture_down_1                         Mixture down a bit for engine #1.
sim/engines/mixture_down_2                         Mixture down a bit for engine #2.
sim/engines/mixture_down_3                         Mixture down a bit for engine #3.
sim/engines/mixture_down_4                         Mixture down a bit for engine #4.
sim/engines/mixture_down_5                         Mixture down a bit for engine #5.
sim/engines/mixture_down_6                         Mixture down a bit for engine #6.
sim/engines/mixture_down_7                         Mixture down a bit for engine #7.
sim/engines/mixture_down_8                         Mixture down a bit for engine #8.
sim/engines/mixture_up_1                           Mixture up a bit for engine #1.
sim/engines/mixture_up_2                           Mixture up a bit for engine #2.
sim/engines/mixture_up_3                           Mixture up a bit for engine #3.
sim/engines/mixture_up_4                           Mixture up a bit for engine #4.
sim/engines/mixture_up_5                           Mixture up a bit for engine #5.
sim/engines/mixture_up_6                           Mixture up a bit for engine #6.
sim/engines/mixture_up_7                           Mixture up a bit for engine #7.
sim/engines/mixture_up_8                           Mixture up a bit for engine #8.
sim/engines/beta_toggle_1                          Toggle beta prop #1.
sim/engines/beta_toggle_2                          Toggle beta prop #2.
sim/engines/beta_toggle_3                          Toggle beta prop #3.
sim/engines/beta_toggle_4                          Toggle beta prop #4.
sim/engines/beta_toggle_5                          Toggle beta prop #5.
sim/engines/beta_toggle_6                          Toggle beta prop #6.
sim/engines/beta_toggle_7                          Toggle beta prop #7.
sim/engines/beta_toggle_8                          Toggle beta prop #8.
sim/engines/thrust_reverse_toggle_1                Toggle thrust reversers #1.
sim/engines/thrust_reverse_toggle_2                Toggle thrust reversers #2.
sim/engines/thrust_reverse_toggle_3                Toggle thrust reversers #3.
sim/engines/thrust_reverse_toggle_4                Toggle thrust reversers #4.
sim/engines/thrust_reverse_toggle_5                Toggle thrust reversers #5.
sim/engines/thrust_reverse_toggle_6                Toggle thrust reversers #6.
sim/engines/thrust_reverse_toggle_7                Toggle thrust reversers #7.
sim/engines/thrust_reverse_toggle_8                Toggle thrust reversers #8.
sim/engines/thrust_reverse_hold_1                  Hold thrust reverse at max #1.
sim/engines/thrust_reverse_hold_2                  Hold thrust reverse at max #2.
sim/engines/thrust_reverse_hold_3                  Hold thrust reverse at max #3.
sim/engines/thrust_reverse_hold_4                  Hold thrust reverse at max #4.
sim/engines/thrust_reverse_hold_5                  Hold thrust reverse at max #5.
sim/engines/thrust_reverse_hold_6                  Hold thrust reverse at max #6.
sim/engines/thrust_reverse_hold_7                  Hold thrust reverse at max #7.
sim/engines/thrust_reverse_hold_8                  Hold thrust reverse at max #8.
sim/starters/shut_down_1                           Pull fuel and mags for shut-down #1.
sim/starters/shut_down_2                           Pull fuel and mags for shut-down #2.
sim/starters/shut_down_3                           Pull fuel and mags for shut-down #3.
sim/starters/shut_down_4                           Pull fuel and mags for shut-down #4.
sim/starters/shut_down_5                           Pull fuel and mags for shut-down #5.
sim/starters/shut_down_6                           Pull fuel and mags for shut-down #6.
sim/starters/shut_down_7                           Pull fuel and mags for shut-down #7.
sim/starters/shut_down_8                           Pull fuel and mags for shut-down #8.
sim/flight_controls/cowl_flaps_closed_1            Move cowl flaps #1 closed a bit.
sim/flight_controls/cowl_flaps_closed_2            Move cowl flaps #2 closed a bit.
sim/flight_controls/cowl_flaps_closed_3            Move cowl flaps #3 closed a bit.
sim/flight_controls/cowl_flaps_closed_4            Move cowl flaps #4 closed a bit.
sim/flight_controls/cowl_flaps_closed_5            Move cowl flaps #5 closed a bit.
sim/flight_controls/cowl_flaps_closed_6            Move cowl flaps #6 closed a bit.
sim/flight_controls/cowl_flaps_closed_7            Move cowl flaps #7 closed a bit.
sim/flight_controls/cowl_flaps_closed_8            Move cowl flaps #8 closed a bit.
sim/flight_controls/cowl_flaps_open_1              Move cowl flaps #1 open a bit.
sim/flight_controls/cowl_flaps_open_2              Move cowl flaps #2 open a bit.
sim/flight_controls/cowl_flaps_open_3              Move cowl flaps #3 open a bit.
sim/flight_controls/cowl_flaps_open_4              Move cowl flaps #4 open a bit.
sim/flight_controls/cowl_flaps_open_5              Move cowl flaps #5 open a bit.
sim/flight_controls/cowl_flaps_open_6              Move cowl flaps #6 open a bit.
sim/flight_controls/cowl_flaps_open_7              Move cowl flaps #7 open a bit.
sim/flight_controls/cowl_flaps_open_8              Move cowl flaps #8 open a bit.
sim/fadec/fadec_1_off                              FADEC #1 off.
sim/fadec/fadec_2_off                              FADEC #2 off.
sim/fadec/fadec_3_off                              FADEC #3 off.
sim/fadec/fadec_4_off                              FADEC #4 off.
sim/fadec/fadec_5_off                              FADEC #5 off.
sim/fadec/fadec_6_off                              FADEC #6 off.
sim/fadec/fadec_7_off                              FADEC #7 off.
sim/fadec/fadec_8_off                              FADEC #8 off.
sim/fadec/fadec_1_on                               FADEC #1 on.
sim/fadec/fadec_2_on                               FADEC #2 on.
sim/fadec/fadec_3_on                               FADEC #3 on.
sim/fadec/fadec_4_on                               FADEC #4 on.
sim/fadec/fadec_5_on                               FADEC #5 on.
sim/fadec/fadec_6_on                               FADEC #6 on.
sim/fadec/fadec_7_on                               FADEC #7 on.
sim/fadec/fadec_8_on                               FADEC #8 on.
sim/altair/alternate_air_off_1                     Alternate air #1 off.
sim/altair/alternate_air_off_2                     Alternate air #2 off.
sim/altair/alternate_air_off_3                     Alternate air #3 off.
sim/altair/alternate_air_off_4                     Alternate air #4 off.
sim/altair/alternate_air_off_5                     Alternate air #5 off.
sim/altair/alternate_air_off_6                     Alternate air #6 off.
sim/altair/alternate_air_off_7                     Alternate air #7 off.
sim/altair/alternate_air_off_8                     Alternate air #8 off.
sim/altair/alternate_air_on_1                      Alternate air #1 on.
sim/altair/alternate_air_on_2                      Alternate air #2 on.
sim/altair/alternate_air_on_3                      Alternate air #3 on.
sim/altair/alternate_air_on_4                      Alternate air #4 on.
sim/altair/alternate_air_on_5                      Alternate air #5 on.
sim/altair/alternate_air_on_6                      Alternate air #6 on.
sim/altair/alternate_air_on_7                      Alternate air #7 on.
sim/altair/alternate_air_on_8                      Alternate air #8 on.
sim/altair/alternate_air_backup_off_1              Alternate air backup #1 off.
sim/altair/alternate_air_backup_off_2              Alternate air backup #2 off.
sim/altair/alternate_air_backup_off_3              Alternate air backup #3 off.
sim/altair/alternate_air_backup_off_4              Alternate air backup #4 off.
sim/altair/alternate_air_backup_off_5              Alternate air backup #5 off.
sim/altair/alternate_air_backup_off_6              Alternate air backup #6 off.
sim/altair/alternate_air_backup_off_7              Alternate air backup #7 off.
sim/altair/alternate_air_backup_off_8              Alternate air backup #8 off.
sim/altair/alternate_air_backup_on_1               Alternate air backup #1 on.
sim/altair/alternate_air_backup_on_2               Alternate air backup #2 on.
sim/altair/alternate_air_backup_on_3               Alternate air backup #3 on.
sim/altair/alternate_air_backup_on_4               Alternate air backup #4 on.
sim/altair/alternate_air_backup_on_5               Alternate air backup #5 on.
sim/altair/alternate_air_backup_on_6               Alternate air backup #6 on.
sim/altair/alternate_air_backup_on_7               Alternate air backup #7 on.
sim/altair/alternate_air_backup_on_8               Alternate air backup #8 on.
sim/engines/fire_ext_1_off                         Fire extinguisher #1 off.
sim/engines/fire_ext_2_off                         Fire extinguisher #2 off.
sim/engines/fire_ext_3_off                         Fire extinguisher #3 off.
sim/engines/fire_ext_4_off                         Fire extinguisher #4 off.
sim/engines/fire_ext_5_off                         Fire extinguisher #5 off.
sim/engines/fire_ext_6_off                         Fire extinguisher #6 off.
sim/engines/fire_ext_7_off                         Fire extinguisher #7 off.
sim/engines/fire_ext_8_off                         Fire extinguisher #8 off.
sim/engines/fire_ext_1_on                          Fire extinguisher #1 on.
sim/engines/fire_ext_2_on                          Fire extinguisher #2 on.
sim/engines/fire_ext_3_on                          Fire extinguisher #3 on.
sim/engines/fire_ext_4_on                          Fire extinguisher #4 on.
sim/engines/fire_ext_5_on                          Fire extinguisher #5 on.
sim/engines/fire_ext_6_on                          Fire extinguisher #6 on.
sim/engines/fire_ext_7_on                          Fire extinguisher #7 on.
sim/engines/fire_ext_8_on                          Fire extinguisher #8 on.
sim/flight_controls/flaps_up                       Flaps up a notch.
sim/flight_controls/flaps_down                     Flaps down a notch.
sim/flight_controls/vector_sweep_aft               Vector or sweep aft.
sim/flight_controls/vector_sweep_forward           Vector or sweep forward.
sim/flight_controls/blimp_lift_down                Blimp lift down a bit.
sim/flight_controls/blimp_lift_up                  Blimp lift up a bit.
sim/flight_controls/speed_brakes_down_one          Speedbrakes extend one.
sim/flight_controls/speed_brakes_up_one            Speedbrakes retract one.
sim/flight_controls/speed_brakes_down_all          Speedbrakes extend full.
sim/flight_controls/speed_brakes_up_all            Speedbrakes retract full.
sim/flight_controls/speed_brakes_toggle            Speedbrakes toggle.
sim/flight_controls/landing_gear_down              Landing gear down.
sim/flight_controls/landing_gear_up                Landing gear up.
sim/flight_controls/landing_gear_toggle            Landing gear toggle.
sim/flight_controls/landing_gear_off               Landing gear off.
sim/flight_controls/landing_gear_downlock_release  Landing gear downlock release (override squat switch).
sim/flight_controls/landing_gear_emer_on           Landing gear emergency override down.
sim/flight_controls/landing_gear_emer_off          Landing gear emergency override off.
sim/flight_controls/nwheel_steer_on                Nosewheel steer on.
sim/flight_controls/nwheel_steer_off               Nosewheel steer off.
sim/flight_controls/nwheel_steer_toggle            Nosewheel steer toggle.
sim/flight_controls/tail_wheel_lock_toggle         Toggle tailwheel lock.
sim/flight_controls/tail_wheel_lock_engage         Engage tailwheel lock.
sim/flight_controls/water_rudder_down              Water rudder down (engage).
sim/flight_controls/water_rudder_up                Water rudder up (disengage).
sim/flight_controls/water_rudder_toggle            Toggle water rudder.
sim/flight_controls/left_brake                     Hold brake left.
sim/flight_controls/right_brake                    Hold brake right.
sim/flight_controls/brakes_toggle_regular          Toggle brakes regular effort.
sim/flight_controls/brakes_toggle_max              Toggle brakes max effort.
sim/flight_controls/brakes_regular                 Hold brakes regular.
sim/flight_controls/brakes_max                     Hold brakes maximum.
sim/flight_controls/brakes_toggle_auto             Toggle auto-brakes.
sim/flight_controls/brakes_dn_auto                 Auto-brakes down.
sim/flight_controls/brakes_up_auto                 Auto-brakes up.
sim/flight_controls/brakes_off_auto                Auto-brakes off/disarm.
sim/flight_controls/brakes_rto_auto                Auto-brakes RTO.
sim/flight_controls/brakes_1_auto                  Auto-brakes 1.
sim/flight_controls/brakes_2_auto                  Auto-brakes 2.
sim/flight_controls/brakes_3_auto                  Auto-brakes 3.
sim/flight_controls/brakes_max_auto                Auto-brakes max.
sim/systems/yaw_damper_on                          Yaw damper on.
sim/systems/yaw_damper_off                         Yaw damper off.
sim/systems/yaw_damper_toggle                      Toggle yaw damper.
sim/systems/pitch_augmentation_on                  Pitch augmentation on.
sim/systems/pitch_augmentation_off                 Pitch augmentation off.
sim/systems/pitch_augmentation_toggle              Toggle pitch augmentation.
sim/systems/roll_augmentation_on                   Roll augmentation on.
sim/systems/roll_augmentation_off                  Roll augmentation off.
sim/systems/roll_augmentation_toggle               Toggle roll augmentation.
sim/systems/prop_sync_on                           Prop sync on.
sim/systems/prop_sync_off                          Prop sync off.
sim/systems/prop_sync_toggle                       Prop sync toggle.
sim/systems/feather_mode_down                      Auto-feather mode down.
sim/systems/feather_mode_up                        Auto-feather mode up.
sim/systems/feather_mode_off                       Auto-feather off.
sim/systems/feather_mode_arm                       Auto-feather on.
sim/systems/feather_mode_test                      Auto-feather test.
sim/flight_controls/hydraulic_on                   All engine-driven hydraulic pumps on
sim/flight_controls/hydraulic_off                  All engine-driven hydraulic pumps off
sim/flight_controls/hydraulic_tog                  All engine-driven hydraulic pumps tog
sim/flight_controls/hydraulic_acmp_on              Electric motor-driven hydraulic pump 1 on
sim/flight_controls/hydraulic_acmp_off             Electric motor-driven hydraulic pump 1 off
sim/flight_controls/hydraulic_acmp_tog             Electric motor-driven hydraulic pump 1 tog
sim/flight_controls/hydraulic_acmp2_on             Electric motor-driven hydraulic pump 2 on
sim/flight_controls/hydraulic_acmp2_off            Electric motor-driven hydraulic pump 2 off
sim/flight_controls/hydraulic_acmp2_tog            Electric motor-driven hydraulic pump 2 tog
sim/flight_controls/hydraulic_acmp3_on             Electric motor-driven hydraulic pump 3 on
sim/flight_controls/hydraulic_acmp3_off            Electric motor-driven hydraulic pump 3 off
sim/flight_controls/hydraulic_acmp3_tog            Electric motor-driven hydraulic pump 3 tog
sim/flight_controls/hydraulic_eng1A_on             Engine 1-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng2A_on             Engine 2-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng3A_on             Engine 3-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng4A_on             Engine 4-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng5A_on             Engine 5-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng6A_on             Engine 6-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng7A_on             Engine 7-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng8A_on             Engine 8-driven hydraulic pump A on
sim/flight_controls/hydraulic_eng1B_on             Engine 1-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng2B_on             Engine 2-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng3B_on             Engine 3-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng4B_on             Engine 4-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng5B_on             Engine 5-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng6B_on             Engine 6-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng7B_on             Engine 7-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng8B_on             Engine 8-driven hydraulic pump B on
sim/flight_controls/hydraulic_eng1C_on             Engine 1-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng2C_on             Engine 2-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng3C_on             Engine 3-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng4C_on             Engine 4-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng5C_on             Engine 5-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng6C_on             Engine 6-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng7C_on             Engine 7-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng8C_on             Engine 8-driven hydraulic pump C on
sim/flight_controls/hydraulic_eng1A_off            Engine 1-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng2A_off            Engine 2-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng3A_off            Engine 3-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng4A_off            Engine 4-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng5A_off            Engine 5-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng6A_off            Engine 6-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng7A_off            Engine 7-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng8A_off            Engine 8-driven hydraulic pump A off
sim/flight_controls/hydraulic_eng1B_off            Engine 1-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng2B_off            Engine 2-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng3B_off            Engine 3-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng4B_off            Engine 4-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng5B_off            Engine 5-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng6B_off            Engine 6-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng7B_off            Engine 7-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng8B_off            Engine 8-driven hydraulic pump B off
sim/flight_controls/hydraulic_eng1C_off            Engine 1-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng2C_off            Engine 2-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng3C_off            Engine 3-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng4C_off            Engine 4-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng5C_off            Engine 5-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng6C_off            Engine 6-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng7C_off            Engine 7-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng8C_off            Engine 8-driven hydraulic pump C off
sim/flight_controls/hydraulic_eng1A_tog            Engine 1-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng2A_tog            Engine 2-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng3A_tog            Engine 3-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng4A_tog            Engine 4-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng5A_tog            Engine 5-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng6A_tog            Engine 6-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng7A_tog            Engine 7-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng8A_tog            Engine 8-driven hydraulic pump A toggle
sim/flight_controls/hydraulic_eng1B_tog            Engine 1-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng2B_tog            Engine 2-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng3B_tog            Engine 3-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng4B_tog            Engine 4-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng5B_tog            Engine 5-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng6B_tog            Engine 6-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng7B_tog            Engine 7-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng8B_tog            Engine 8-driven hydraulic pump B toggle
sim/flight_controls/hydraulic_eng1C_tog            Engine 1-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng2C_tog            Engine 2-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng3C_tog            Engine 3-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng4C_tog            Engine 4-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng5C_tog            Engine 5-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng6C_tog            Engine 6-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng7C_tog            Engine 7-driven hydraulic pump C toggle
sim/flight_controls/hydraulic_eng8C_tog            Engine 8-driven hydraulic pump C toggle
sim/flight_controls/tailhook_down                  Tailhook down.
sim/flight_controls/tailhook_up                    Tailhook up.
sim/flight_controls/tailhook_toggle                Toggle the tailhook.
sim/flight_controls/canopy_open                    Canopy open.
sim/flight_controls/canopy_close                   Canopy close.
sim/flight_controls/canopy_toggle                  Canopy toggle.
sim/flight_controls/rotor_brake_toggle             Toggle rotor brake.
sim/flight_controls/hotel_mode_toggle              Toggle hotel mode.
sim/systems/artificial_stability_toggle            Toggle artificial stability power.
sim/flight_controls/puffers_toggle                 Toggle puffers.
sim/engines/rockets_up                             Orbital maneuver rockets up.
sim/engines/rockets_down                           Orbital maneuver rockets down.
sim/engines/rockets_left                           Orbital maneuver rockets left.
sim/engines/rockets_right                          Orbital maneuver rockets right.
sim/engines/rockets_forward                        Orbital maneuver rockets fore.
sim/engines/rockets_aft                            Orbital maneuver rockets aft.
sim/fuel/fuel_tank_selector_lft_one                Select fuel tank left one.
sim/fuel/fuel_tank_selector_rgt_one                Select fuel tank right one.
sim/fuel/fuel_tank_pump_1_on                       Fuel pump for tank #1 on.
sim/fuel/fuel_tank_pump_2_on                       Fuel pump for tank #2 on.
sim/fuel/fuel_tank_pump_3_on                       Fuel pump for tank #3 on.
sim/fuel/fuel_tank_pump_4_on                       Fuel pump for tank #4 on.
sim/fuel/fuel_tank_pump_5_on                       Fuel pump for tank #5 on.
sim/fuel/fuel_tank_pump_6_on                       Fuel pump for tank #6 on.
sim/fuel/fuel_tank_pump_7_on                       Fuel pump for tank #7 on.
sim/fuel/fuel_tank_pump_8_on                       Fuel pump for tank #8 on.
sim/fuel/fuel_tank_pump_9_on                       Fuel pump for tank #9 on.
sim/fuel/fuel_tank_pump_1_off                      Fuel pump for tank #1 off.
sim/fuel/fuel_tank_pump_2_off                      Fuel pump for tank #2 off.
sim/fuel/fuel_tank_pump_3_off                      Fuel pump for tank #3 off.
sim/fuel/fuel_tank_pump_4_off                      Fuel pump for tank #4 off.
sim/fuel/fuel_tank_pump_5_off                      Fuel pump for tank #5 off.
sim/fuel/fuel_tank_pump_6_off                      Fuel pump for tank #6 off.
sim/fuel/fuel_tank_pump_7_off                      Fuel pump for tank #7 off.
sim/fuel/fuel_tank_pump_8_off                      Fuel pump for tank #8 off.
sim/fuel/fuel_tank_pump_9_off                      Fuel pump for tank #9 off.
sim/fuel/fuel_selector_none                        Set fuel selector to none (shut off).
sim/fuel/fuel_selector_lft                         Set fuel selector to left tanks.
sim/fuel/fuel_selector_ctr                         Set fuel selector to center tanks.
sim/fuel/fuel_selector_rgt                         Set fuel selector to right tanks.
sim/fuel/fuel_selector_aft                         Set fuel selector to aft (trim) tanks.
sim/fuel/fuel_selector_all                         Set fuel selector to all tanks.
sim/fuel/fuel_selector_none2                       Set fuel selector to none (shut off), alternate position.
sim/fuel/left_fuel_selector_none                   Set fuel selector for left engine to none (shut off).
sim/fuel/left_fuel_selector_lft                    Set fuel selector for left engine to left tanks.
sim/fuel/left_fuel_selector_ctr                    Set fuel selector for left engine to center tanks.
sim/fuel/left_fuel_selector_rgt                    Set fuel selector for left engine to right tanks.
sim/fuel/left_fuel_selector_aft                    Set fuel selector for left engine to aft (trim) tanks.
sim/fuel/left_fuel_selector_all                    Set fuel selector for left engine to all tanks.
sim/fuel/left_fuel_selector_down                   Fuel selector for left engine down one position.
sim/fuel/left_fuel_selector_up                     Fuel selector for left engine up one position.
sim/fuel/right_fuel_selector_none                  Set fuel selector for right engine to none (shut off).
sim/fuel/right_fuel_selector_lft                   Set fuel selector for right engine to left tanks.
sim/fuel/right_fuel_selector_ctr                   Set fuel selector for right engine to center tanks.
sim/fuel/right_fuel_selector_rgt                   Set fuel selector for right engine to right tanks.
sim/fuel/right_fuel_selector_aft                   Set fuel selector for right engine to aft (trim) tanks.
sim/fuel/right_fuel_selector_all                   Set fuel selector for right engine to all tanks.
sim/fuel/right_fuel_selector_down                  Fuel selector for right engine down one position.
sim/fuel/right_fuel_selector_up                    Fuel selector for right engine up one position.
sim/fuel/fuel_transfer_to_lft                      Transfer fuel to left.
sim/fuel/fuel_transfer_to_ctr                      Transfer fuel to center.
sim/fuel/fuel_transfer_to_rgt                      Transfer fuel to right.
sim/fuel/fuel_transfer_to_aft                      Transfer fuel to aft.
sim/fuel/fuel_transfer_to_off                      Transfer fuel to none.
sim/fuel/fuel_transfer_from_lft                    Transfer fuel from left.
sim/fuel/fuel_transfer_from_ctr                    Transfer fuel from center.
sim/fuel/fuel_transfer_from_rgt                    Transfer fuel from right.
sim/fuel/fuel_transfer_from_aft                    Transfer fuel from aft.
sim/fuel/fuel_transfer_from_off                    Transfer fuel from none.
sim/fuel/fuel_crossfeed_from_lft_tank              Cross-feed fuel from left tank.
sim/fuel/fuel_crossfeed_off                        Cross-feed fuel off.
sim/fuel/fuel_crossfeed_from_rgt_tank              Cross-feed fuel from right tank.
sim/fuel/fuel_firewall_valve_lft_open              Firewall fuel valve left open.
sim/fuel/fuel_firewall_valve_lft_closed            Firewall fuel valve left closed.
sim/fuel/fuel_firewall_valve_rgt_open              Firewall fuel valve right open.
sim/fuel/fuel_firewall_valve_rgt_closed            Firewall fuel valve right closed.
sim/fuel/left_xfer_override                        Aux to feeder transfer left override.
sim/fuel/left_xfer_on                              Aux to feeder transfer left on.
sim/fuel/left_xfer_off                             Aux to feeder transfer left off.
sim/fuel/left_xfer_up                              Aux to feeder transfer left off->on->overide.
sim/fuel/left_xfer_dn                              Aux to feeder transfer left override->on->off.
sim/fuel/right_xfer_override                       Aux to feeder transfer right override.
sim/fuel/right_xfer_on                             Aux to feeder transfer right on.
sim/fuel/right_xfer_off                            Aux to feeder transfer right off.
sim/fuel/right_xfer_up                             Aux to feeder transfer right off->on->overide.
sim/fuel/right_xfer_dn                             Aux to feeder transfer right override->on->off.
sim/fuel/left_xfer_test                            Aux to feeder transfer test left.
sim/fuel/right_xfer_test                           Aux to feeder transfer test right.
sim/fuel/totalizer_init                            Initialize fuel totalizer to actual fuel.
sim/fuel/auto_crossfeed_on_open                    Crossfeed valve open.
sim/fuel/auto_crossfeed_auto                       Open crossfeed valve when pressure difference detected.
sim/fuel/auto_crossfeed_off                        Close crossfeed valve and turn off auto-crossfeed.
sim/fuel/auto_crossfeed_up                         Auto-crossfeed off->auto->on.
sim/fuel/auto_crossfeed_down                       Auto-crossfeed on->auto->off.
sim/fuel/fuel_pumps_on                             Fuel pumps on.
sim/fuel/fuel_pumps_off                            Fuel pumps off.
sim/fuel/fuel_pumps_tog                            Fuel pumps toggle.
sim/fuel/fuel_pump_1_on                            Fuel pump for engine #1 on.
sim/fuel/fuel_pump_2_on                            Fuel pump for engine #2 on.
sim/fuel/fuel_pump_3_on                            Fuel pump for engine #3 on.
sim/fuel/fuel_pump_4_on                            Fuel pump for engine #4 on.
sim/fuel/fuel_pump_5_on                            Fuel pump for engine #5 on.
sim/fuel/fuel_pump_6_on                            Fuel pump for engine #6 on.
sim/fuel/fuel_pump_7_on                            Fuel pump for engine #7 on.
sim/fuel/fuel_pump_8_on                            Fuel pump for engine #8 on.
sim/fuel/fuel_pump_1_off                           Fuel pump for engine #1 off.
sim/fuel/fuel_pump_2_off                           Fuel pump for engine #2 off.
sim/fuel/fuel_pump_3_off                           Fuel pump for engine #3 off.
sim/fuel/fuel_pump_4_off                           Fuel pump for engine #4 off.
sim/fuel/fuel_pump_5_off                           Fuel pump for engine #5 off.
sim/fuel/fuel_pump_6_off                           Fuel pump for engine #6 off.
sim/fuel/fuel_pump_7_off                           Fuel pump for engine #7 off.
sim/fuel/fuel_pump_8_off                           Fuel pump for engine #8 off.
sim/fuel/fuel_pump_1_tog                           Fuel pump for engine #1 toggle.
sim/fuel/fuel_pump_2_tog                           Fuel pump for engine #2 toggle.
sim/fuel/fuel_pump_3_tog                           Fuel pump for engine #3 toggle.
sim/fuel/fuel_pump_4_tog                           Fuel pump for engine #4 toggle.
sim/fuel/fuel_pump_5_tog                           Fuel pump for engine #5 toggle.
sim/fuel/fuel_pump_6_tog                           Fuel pump for engine #6 toggle.
sim/fuel/fuel_pump_7_tog                           Fuel pump for engine #7 toggle.
sim/fuel/fuel_pump_8_tog                           Fuel pump for engine #8 toggle.
sim/fuel/fuel_pump_1_prime                         Fuel pump prime for engine #1 on.
sim/fuel/fuel_pump_2_prime                         Fuel pump prime for engine #2 on.
sim/fuel/fuel_pump_3_prime                         Fuel pump prime for engine #3 on.
sim/fuel/fuel_pump_4_prime                         Fuel pump prime for engine #4 on.
sim/fuel/fuel_pump_5_prime                         Fuel pump prime for engine #5 on.
sim/fuel/fuel_pump_6_prime                         Fuel pump prime for engine #6 on.
sim/fuel/fuel_pump_7_prime                         Fuel pump prime for engine #7 on.
sim/fuel/fuel_pump_8_prime                         Fuel pump prime for engine #8 on.
sim/fuel/engine_1_primer                           Actuate the primer plugin on engine #1.
sim/fuel/engine_2_primer                           Actuate the primer plugin on engine #2.
sim/fuel/engine_3_primer                           Actuate the primer plugin on engine #3.
sim/fuel/engine_4_primer                           Actuate the primer plugin on engine #4.
sim/fuel/engine_5_primer                           Actuate the primer plugin on engine #5.
sim/fuel/engine_6_primer                           Actuate the primer plugin on engine #6.
sim/fuel/engine_7_primer                           Actuate the primer plugin on engine #7.
sim/fuel/engine_8_primer                           Actuate the primer plugin on engine #8.
sim/electrical/cross_tie_on                        Cross-tie on.
sim/electrical/cross_tie_off                       Cross-tie off.
sim/electrical/cross_tie_toggle                    Cross-tie toggle.
sim/electrical/inverters_on                        Inverters on.
sim/electrical/inverters_off                       Inverters off.
sim/electrical/inverters_toggle                    Inverters toggle.
sim/electrical/inverter_1_on                       Inverter 1 on.
sim/electrical/inverter_1_off                      Inverter 1 off.
sim/electrical/inverter_1_toggle                   Inverter 1 toggle.
sim/electrical/inverter_2_on                       Inverter 2 on.
sim/electrical/inverter_2_off                      Inverter 2 off.
sim/electrical/inverter_2_toggle                   Inverter 2 toggle.
sim/electrical/batteries_toggle                    Batteries all toggle.
sim/electrical/battery_1_on                        Battery 1 on.
sim/electrical/battery_2_on                        Battery 2 on.
sim/electrical/battery_1_off                       Battery 1 off.
sim/electrical/battery_2_off                       Battery 2 off.
sim/electrical/battery_1_toggle                    Battery 1 toggle.
sim/electrical/battery_2_toggle                    Battery 2 toggle.
sim/electrical/generators_toggle                   Generators all toggle.
sim/electrical/generator_1_off                     Generator #1 off.
sim/electrical/generator_2_off                     Generator #2 off.
sim/electrical/generator_3_off                     Generator #3 off.
sim/electrical/generator_4_off                     Generator #4 off.
sim/electrical/generator_5_off                     Generator #5 off.
sim/electrical/generator_6_off                     Generator #6 off.
sim/electrical/generator_7_off                     Generator #7 off.
sim/electrical/generator_8_off                     Generator #8 off.
sim/electrical/generator_1_on                      Generator #1 on.
sim/electrical/generator_2_on                      Generator #2 on.
sim/electrical/generator_3_on                      Generator #3 on.
sim/electrical/generator_4_on                      Generator #4 on.
sim/electrical/generator_5_on                      Generator #5 on.
sim/electrical/generator_6_on                      Generator #6 on.
sim/electrical/generator_7_on                      Generator #7 on.
sim/electrical/generator_8_on                      Generator #8 on.
sim/electrical/generator_1_toggle                  Generator #1 toggle.
sim/electrical/generator_2_toggle                  Generator #2 toggle.
sim/electrical/generator_3_toggle                  Generator #3 toggle.
sim/electrical/generator_4_toggle                  Generator #4 toggle.
sim/electrical/generator_5_toggle                  Generator #5 toggle.
sim/electrical/generator_6_toggle                  Generator #6 toggle.
sim/electrical/generator_7_toggle                  Generator #7 toggle.
sim/electrical/generator_8_toggle                  Generator #8 toggle.
sim/electrical/generator_1_reset                   Generator #1 reset.
sim/electrical/generator_2_reset                   Generator #2 reset.
sim/electrical/generator_3_reset                   Generator #3 reset.
sim/electrical/generator_4_reset                   Generator #4 reset.
sim/electrical/generator_5_reset                   Generator #5 reset.
sim/electrical/generator_6_reset                   Generator #6 reset.
sim/electrical/generator_7_reset                   Generator #7 reset.
sim/electrical/generator_8_reset                   Generator #8 reset.
sim/electrical/APU_start                           APU start.
sim/electrical/APU_on                              APU on.
sim/electrical/APU_off                             APU off.
sim/electrical/APU_fire_shutoff                    APU emergency shutoff with fire handle.
sim/electrical/APU_generator_on                    APU generator on.
sim/electrical/APU_generator_off                   APU generator off.
sim/electrical/GPU_on                              GPU on.
sim/electrical/GPU_off                             GPU off.
sim/electrical/GPU_toggle                          GPU toggle.
sim/electrical/recharge                            Re-charge batteries.
sim/lights/nav_lights_on                           Nav lights on.
sim/lights/nav_lights_off                          Nav lights off.
sim/lights/nav_lights_toggle                       Nav lights toggle.
sim/lights/beacon_lights_on                        Beacon lights on.
sim/lights/beacon_lights_off                       Beacon lights off.
sim/lights/beacon_lights_toggle                    Beacon lights toggle.
sim/lights/strobe_lights_on                        Strobe lights on.
sim/lights/strobe_lights_off                       Strobe lights off.
sim/lights/strobe_lights_toggle                    Strobe lights toggle.
sim/lights/taxi_lights_on                          Taxi lights on.
sim/lights/taxi_lights_off                         Taxi lights off.
sim/lights/taxi_lights_toggle                      Taxi lights toggle.
sim/lights/landing_lights_on                       Landing lights on.
sim/lights/landing_lights_off                      Landing lights off.
sim/lights/landing_lights_toggle                   Landing lights toggle.
sim/lights/landing_01_light_on                     Landing light 01 on.
sim/lights/landing_02_light_on                     Landing light 02 on.
sim/lights/landing_03_light_on                     Landing light 03 on.
sim/lights/landing_04_light_on                     Landing light 04 on.
sim/lights/landing_05_light_on                     Landing light 05 on.
sim/lights/landing_06_light_on                     Landing light 06 on.
sim/lights/landing_07_light_on                     Landing light 07 on.
sim/lights/landing_08_light_on                     Landing light 08 on.
sim/lights/landing_09_light_on                     Landing light 09 on.
sim/lights/landing_10_light_on                     Landing light 10 on.
sim/lights/landing_11_light_on                     Landing light 11 on.
sim/lights/landing_12_light_on                     Landing light 12 on.
sim/lights/landing_13_light_on                     Landing light 13 on.
sim/lights/landing_14_light_on                     Landing light 14 on.
sim/lights/landing_15_light_on                     Landing light 15 on.
sim/lights/landing_16_light_on                     Landing light 16 on.
sim/lights/landing_01_light_off                    Landing light 01 off.
sim/lights/landing_02_light_off                    Landing light 02 off.
sim/lights/landing_03_light_off                    Landing light 03 off.
sim/lights/landing_04_light_off                    Landing light 04 off.
sim/lights/landing_05_light_off                    Landing light 05 off.
sim/lights/landing_06_light_off                    Landing light 06 off.
sim/lights/landing_07_light_off                    Landing light 07 off.
sim/lights/landing_08_light_off                    Landing light 08 off.
sim/lights/landing_09_light_off                    Landing light 09 off.
sim/lights/landing_10_light_off                    Landing light 10 off.
sim/lights/landing_11_light_off                    Landing light 11 off.
sim/lights/landing_12_light_off                    Landing light 12 off.
sim/lights/landing_13_light_off                    Landing light 13 off.
sim/lights/landing_14_light_off                    Landing light 14 off.
sim/lights/landing_15_light_off                    Landing light 15 off.
sim/lights/landing_16_light_off                    Landing light 16 off.
sim/lights/landing_01_light_tog                    Landing light 01 toggle.
sim/lights/landing_02_light_tog                    Landing light 02 toggle.
sim/lights/landing_03_light_tog                    Landing light 03 toggle.
sim/lights/landing_04_light_tog                    Landing light 04 toggle.
sim/lights/landing_05_light_tog                    Landing light 05 toggle.
sim/lights/landing_06_light_tog                    Landing light 06 toggle.
sim/lights/landing_07_light_tog                    Landing light 07 toggle.
sim/lights/landing_08_light_tog                    Landing light 08 toggle.
sim/lights/landing_09_light_tog                    Landing light 09 toggle.
sim/lights/landing_10_light_tog                    Landing light 10 toggle.
sim/lights/landing_11_light_tog                    Landing light 11 toggle.
sim/lights/landing_12_light_tog                    Landing light 12 toggle.
sim/lights/landing_13_light_tog                    Landing light 13 toggle.
sim/lights/landing_14_light_tog                    Landing light 14 toggle.
sim/lights/landing_15_light_tog                    Landing light 15 toggle.
sim/lights/landing_16_light_tog                    Landing light 16 toggle.
sim/lights/generic_01_light_tog                    Generic light 01 toggle.
sim/lights/generic_02_light_tog                    Generic light 02 toggle.
sim/lights/generic_03_light_tog                    Generic light 03 toggle.
sim/lights/generic_04_light_tog                    Generic light 04 toggle.
sim/lights/generic_05_light_tog                    Generic light 05 toggle.
sim/lights/generic_06_light_tog                    Generic light 06 toggle.
sim/lights/generic_07_light_tog                    Generic light 07 toggle.
sim/lights/generic_08_light_tog                    Generic light 08 toggle.
sim/lights/generic_09_light_tog                    Generic light 09 toggle.
sim/lights/generic_10_light_tog                    Generic light 10 toggle.
sim/lights/generic_11_light_tog                    Generic light 11 toggle.
sim/lights/generic_12_light_tog                    Generic light 12 toggle.
sim/lights/generic_13_light_tog                    Generic light 13 toggle.
sim/lights/generic_14_light_tog                    Generic light 14 toggle.
sim/lights/generic_15_light_tog                    Generic light 15 toggle.
sim/lights/generic_16_light_tog                    Generic light 16 toggle.
sim/lights/generic_17_light_tog                    Generic light 17 toggle.
sim/lights/generic_18_light_tog                    Generic light 18 toggle.
sim/lights/generic_19_light_tog                    Generic light 19 toggle.
sim/lights/generic_20_light_tog                    Generic light 20 toggle.
sim/lights/generic_21_light_tog                    Generic light 21 toggle.
sim/lights/generic_22_light_tog                    Generic light 22 toggle.
sim/lights/generic_23_light_tog                    Generic light 23 toggle.
sim/lights/generic_24_light_tog                    Generic light 24 toggle.
sim/lights/generic_25_light_tog                    Generic light 25 toggle.
sim/lights/generic_26_light_tog                    Generic light 26 toggle.
sim/lights/generic_27_light_tog                    Generic light 27 toggle.
sim/lights/generic_28_light_tog                    Generic light 28 toggle.
sim/lights/generic_29_light_tog                    Generic light 29 toggle.
sim/lights/generic_30_light_tog                    Generic light 30 toggle.
sim/lights/generic_31_light_tog                    Generic light 31 toggle.
sim/lights/generic_32_light_tog                    Generic light 32 toggle.
sim/lights/generic_33_light_tog                    Generic light 33 toggle.
sim/lights/generic_34_light_tog                    Generic light 34 toggle.
sim/lights/generic_35_light_tog                    Generic light 35 toggle.
sim/lights/generic_36_light_tog                    Generic light 36 toggle.
sim/lights/generic_37_light_tog                    Generic light 37 toggle.
sim/lights/generic_38_light_tog                    Generic light 38 toggle.
sim/lights/generic_39_light_tog                    Generic light 39 toggle.
sim/lights/generic_40_light_tog                    Generic light 40 toggle.
sim/lights/generic_41_light_tog                    Generic light 41 toggle.
sim/lights/generic_42_light_tog                    Generic light 42 toggle.
sim/lights/generic_43_light_tog                    Generic light 43 toggle.
sim/lights/generic_44_light_tog                    Generic light 44 toggle.
sim/lights/generic_45_light_tog                    Generic light 45 toggle.
sim/lights/generic_46_light_tog                    Generic light 46 toggle.
sim/lights/generic_47_light_tog                    Generic light 47 toggle.
sim/lights/generic_48_light_tog                    Generic light 48 toggle.
sim/lights/generic_49_light_tog                    Generic light 49 toggle.
sim/lights/generic_50_light_tog                    Generic light 50 toggle.
sim/lights/generic_51_light_tog                    Generic light 51 toggle.
sim/lights/generic_52_light_tog                    Generic light 52 toggle.
sim/lights/generic_53_light_tog                    Generic light 53 toggle.
sim/lights/generic_54_light_tog                    Generic light 54 toggle.
sim/lights/generic_55_light_tog                    Generic light 55 toggle.
sim/lights/generic_56_light_tog                    Generic light 56 toggle.
sim/lights/generic_57_light_tog                    Generic light 57 toggle.
sim/lights/generic_58_light_tog                    Generic light 58 toggle.
sim/lights/generic_59_light_tog                    Generic light 59 toggle.
sim/lights/generic_60_light_tog                    Generic light 60 toggle.
sim/lights/generic_61_light_tog                    Generic light 61 toggle.
sim/lights/generic_62_light_tog                    Generic light 62 toggle.
sim/lights/generic_63_light_tog                    Generic light 63 toggle.
sim/lights/generic_64_light_tog                    Generic light 64 toggle.
sim/lights/spot_lights_on                          Spot lights on.
sim/lights/spot_lights_off                         Spot lights off.
sim/lights/spot_lights_toggle                      Spot lights toggle.
sim/systems/avionics_on                            Avionics on.
sim/systems/avionics_off                           Avionics off.
sim/systems/avionics_toggle                        Avionics toggle.
sim/systems/gnd_com_power_on                       Avionics2/Ground clearance bus on.
sim/systems/gnd_com_power_off                      Avionics2/Ground clearance bus off.
sim/systems/gnd_com_power_toggle                   Avionics2/Ground clearance bus toggle.
sim/bleed_air/bleed_air_down                       Bleed air mode down.
sim/bleed_air/bleed_air_up                         Bleed air mode up.
sim/bleed_air/bleed_air_off                        Bleed air off.
sim/bleed_air/bleed_air_left                       Bleed air from left engine.
sim/bleed_air/bleed_air_both                       Bleed air from either engine.
sim/bleed_air/bleed_air_right                      Bleed air from right engine.
sim/bleed_air/bleed_air_apu                        Bleed air from APU.
sim/bleed_air/bleed_air_auto                       Bleed air from any engine or APU.
sim/bleed_air/bleed_air_left_on                    Bleed air left engine on.
sim/bleed_air/bleed_air_left_ins_only              Bleed air left engine instruments only.
sim/bleed_air/bleed_air_left_off                   Bleed air left engine off.
sim/bleed_air/bleed_air_right_on                   Bleed air right engine on.
sim/bleed_air/bleed_air_right_ins_only             Bleed air right engine instruments only.
sim/bleed_air/bleed_air_right_off                  Bleed air right engine off.
sim/bleed_air/engine_1_off                         Bleed air shut off engine 1.
sim/bleed_air/engine_2_off                         Bleed air shut off engine 2.
sim/bleed_air/engine_3_off                         Bleed air shut off engine 3.
sim/bleed_air/engine_4_off                         Bleed air shut off engine 4.
sim/bleed_air/engine_5_off                         Bleed air shut off engine 5.
sim/bleed_air/engine_6_off                         Bleed air shut off engine 6.
sim/bleed_air/engine_7_off                         Bleed air shut off engine 7.
sim/bleed_air/engine_8_off                         Bleed air shut off engine 8.
sim/bleed_air/engine_1_on                          Bleed air on engine 1.
sim/bleed_air/engine_2_on                          Bleed air on engine 2.
sim/bleed_air/engine_3_on                          Bleed air on engine 3.
sim/bleed_air/engine_4_on                          Bleed air on engine 4.
sim/bleed_air/engine_5_on                          Bleed air on engine 5.
sim/bleed_air/engine_6_on                          Bleed air on engine 6.
sim/bleed_air/engine_7_on                          Bleed air on engine 7.
sim/bleed_air/engine_8_on                          Bleed air on engine 8.
sim/bleed_air/engine_1_toggle                      Bleed air toggle engine 1.
sim/bleed_air/engine_2_toggle                      Bleed air toggle engine 2.
sim/bleed_air/engine_3_toggle                      Bleed air toggle engine 3.
sim/bleed_air/engine_4_toggle                      Bleed air toggle engine 4.
sim/bleed_air/engine_5_toggle                      Bleed air toggle engine 5.
sim/bleed_air/engine_6_toggle                      Bleed air toggle engine 6.
sim/bleed_air/engine_7_toggle                      Bleed air toggle engine 7.
sim/bleed_air/engine_8_toggle                      Bleed air toggle engine 8.
sim/bleed_air/gpu_off                              Bleed air shut off GPU.
sim/bleed_air/gpu_on                               Bleed air on GPU.
sim/bleed_air/gpu_toggle                           Bleed air toggle GPU.
sim/bleed_air/apu_off                              Bleed air shut off APU.
sim/bleed_air/apu_on                               Bleed air on APU.
sim/bleed_air/apu_toggle                           Bleed air toggle APU.
sim/bleed_air/isolation_left_shut                  Bleed air shut left isolation.
sim/bleed_air/isolation_left_open                  Bleed air open left isolation.
sim/bleed_air/isolation_left_toggle                Bleed air toggle left isolation.
sim/bleed_air/isolation_right_shut                 Bleed air shut right isolation.
sim/bleed_air/isolation_right_open                 Bleed air open right isolation.
sim/bleed_air/isolation_right_toggle               Bleed air toggle right isolation.
sim/bleed_air/pack_left_off                        Bleed air left pack off.
sim/bleed_air/pack_left_on                         Bleed air left pack on.
sim/bleed_air/pack_left_toggle                     Bleed air left pack toggle.
sim/bleed_air/pack_center_off                      Bleed air center pack off.
sim/bleed_air/pack_center_on                       Bleed air center pack on.
sim/bleed_air/pack_center_toggle                   Bleed air center pack toggle.
sim/bleed_air/pack_right_off                       Bleed air right pack off.
sim/bleed_air/pack_right_on                        Bleed air right pack on.
sim/bleed_air/pack_right_toggle                    Bleed air right pack toggle.
sim/pressurization/test                            Pressurization test.
sim/pressurization/dump_on                         Dump pressurization on.
sim/pressurization/dump_off                        Dump pressurization off.
sim/pressurization/vvi_down                        Cabin vertical speed down.
sim/pressurization/vvi_up                          Cabin vertical speed up.
sim/pressurization/cabin_alt_down                  Cabin altitude down.
sim/pressurization/cabin_alt_up                    Cabin altitude up.
sim/pressurization/aircond_on                      Air conditioning on.
sim/pressurization/aircond_off                     Air conditioning off.
sim/pressurization/heater_on                       Electric heater on.
sim/pressurization/heater_grd_max                  Electric heater on ground max.
sim/pressurization/heater_off                      Electric heater off.
sim/pressurization/heater_up                       Electric heater off->on->grd max.
sim/pressurization/heater_dn                       Electric heater grd max->on->off.
sim/pressurization/fan_auto                        Vent fan auto (on only with AC or heat).
sim/pressurization/fan_low                         Vent fan on low.
sim/pressurization/fan_high                        Vent fan high.
sim/pressurization/fan_up                          Vent fan setting up.
sim/pressurization/fan_down                        Vent fan setting down.
sim/ice/anti_ice_toggle                            Anti-ice: toggle all.
sim/ice/alternate_static_port                      Toggle alternate static port.
sim/ice/pitot_heat0_on                             Anti-ice: left pitot heat on.
sim/ice/pitot_heat1_on                             Anti-ice: right pitot heat on.
sim/ice/pitot_heat0_off                            Anti-ice: left pitot heat off.
sim/ice/pitot_heat1_off                            Anti-ice: right pitot heat off.
sim/ice/pitot_heat0_tog                            Anti-ice: left pitot heat toggle.
sim/ice/pitot_heat1_tog                            Anti-ice: right pitot heat toggle.
sim/ice/static_heat0_on                            Anti-ice: left static heat on.
sim/ice/static_heat1_on                            Anti-ice: right static heat on.
sim/ice/static_heat0_off                           Anti-ice: left static heat off.
sim/ice/static_heat1_off                           Anti-ice: right static heat off.
sim/ice/static_heat0_tog                           Anti-ice: left static heat toggle.
sim/ice/static_heat1_tog                           Anti-ice: right static heat toggle.
sim/ice/AOA_heat0_on                               Anti-ice: AOA on.
sim/ice/AOA_heat1_on                               Anti-ice: AOA on.
sim/ice/AOA_heat0_off                              Anti-ice: AOA off.
sim/ice/AOA_heat1_off                              Anti-ice: AOA off.
sim/ice/AOA_heat0_tog                              Anti-ice: AOA toggle.
sim/ice/AOA_heat1_tog                              Anti-ice: AOA toggle.
sim/ice/window_heat_on                             Anti-ice: window heat on.
sim/ice/window_heat_off                            Anti-ice: window heat off.
sim/ice/window_heat_tog                            Anti-ice: window heat toggle.
sim/ice/window2_heat_on                            Anti-ice: window 2 heat on.
sim/ice/window2_heat_off                           Anti-ice: window 2 heat off.
sim/ice/window2_heat_tog                           Anti-ice: window 2 heat toggle.
sim/ice/window3_heat_on                            Anti-ice: window 3 heat on.
sim/ice/window3_heat_off                           Anti-ice: window 3 heat off.
sim/ice/window3_heat_tog                           Anti-ice: window 3 heat toggle.
sim/ice/window4_heat_on                            Anti-ice: window 4 heat on.
sim/ice/window4_heat_off                           Anti-ice: window 4 heat off.
sim/ice/window4_heat_tog                           Anti-ice: window 4 heat toggle.
sim/ice/wing_heat_on                               Anti-ice: all wing, anti-ice heat on.
sim/ice/wing_heat0_on                              Anti-ice: left wing, anti-ice heat on.
sim/ice/wing_heat1_on                              Anti-ice: right wing, anti-ice heat on.
sim/ice/wing_heat_off                              Anti-ice: all wing, anti-ice heat off.
sim/ice/wing_heat0_off                             Anti-ice: left wing, anti-ice heat off.
sim/ice/wing_heat1_off                             Anti-ice: right wing, anti-ice heat off.
sim/ice/wing_heat_tog                              Anti-ice: all wing, anti-ice heat toggle.
sim/ice/wing_heat0_tog                             Anti-ice: left wing, anti-ice heat toggle.
sim/ice/wing_heat1_tog                             Anti-ice: right wing, anti-ice heat toggle.
sim/ice/tail_heat_on                               Anti-ice: all tail, anti-ice heat on.
sim/ice/tail_heat0_on                              Anti-ice: left tail, anti-ice heat on.
sim/ice/tail_heat1_on                              Anti-ice: right tail, anti-ice heat on.
sim/ice/tail_heat_off                              Anti-ice: all tail, anti-ice heat off.
sim/ice/tail_heat0_off                             Anti-ice: left tail, anti-ice heat off.
sim/ice/tail_heat1_off                             Anti-ice: right tail, anti-ice heat off.
sim/ice/tail_heat_tog                              Anti-ice: all tail, anti-ice heat toggle.
sim/ice/tail_heat0_tog                             Anti-ice: left tail, anti-ice heat toggle.
sim/ice/tail_heat1_tog                             Anti-ice: right tail, anti-ice heat toggle.
sim/ice/wing_boot_on                               Anti-ice: all wing, de-icing boots on schedule.
sim/ice/wing_boot0_on                              Anti-ice: left wing, de-icing boots on schedule.
sim/ice/wing_boot1_on                              Anti-ice: right wing, de-icing boots on schedule.
sim/ice/wing_boot_off                              Anti-ice: all wing, de-icing boots off.
sim/ice/wing_boot0_off                             Anti-ice: left wing, de-icing boots off.
sim/ice/wing_boot1_off                             Anti-ice: right wing, de-icing boots off.
sim/ice/wing_boot_tog                              Anti-ice: all wing, de-icing boots toggle.
sim/ice/wing_boot0_tog                             Anti-ice: left wing, de-icing boots toggle.
sim/ice/wing_boot1_tog                             Anti-ice: right wing, de-icing boots toggle.
sim/ice/wing_boot_single                           Anti-ice: all wing, de-icing boots single auto.
sim/ice/wing_boot0_single                          Anti-ice: left wing, de-icing boots single auto.
sim/ice/wing_boot1_single                          Anti-ice: right wing, de-icing boots single auto.
sim/ice/wing_boot_man                              Anti-ice: all wing, de-icing boots manual.
sim/ice/wing_boot0_man                             Anti-ice: left wing, de-icing boots manual.
sim/ice/wing_boot1_man                             Anti-ice: right wing, de-icing boots manual.
sim/ice/tail_boot_on                               Anti-ice: all tail, de-icing boots on schedule.
sim/ice/tail_boot0_on                              Anti-ice: left tail, de-icing boots on schedule.
sim/ice/tail_boot1_on                              Anti-ice: right tail, de-icing boots on schedule.
sim/ice/tail_boot_off                              Anti-ice: all tail, de-icing boots off.
sim/ice/tail_boot0_off                             Anti-ice: left tail, de-icing boots off.
sim/ice/tail_boot1_off                             Anti-ice: right tail, de-icing boots off.
sim/ice/tail_boot_tog                              Anti-ice: all tail, de-icing boots toggle.
sim/ice/tail_boot0_tog                             Anti-ice: left tail, de-icing boots toggle.
sim/ice/tail_boot1_tog                             Anti-ice: right tail, de-icing boots toggle.
sim/ice/tail_boot_single                           Anti-ice: all tail, de-icing boots single auto.
sim/ice/tail_boot0_single                          Anti-ice: left tail, de-icing boots single auto.
sim/ice/tail_boot1_single                          Anti-ice: right tail, de-icing boots single auto.
sim/ice/tail_boot_man                              Anti-ice: all tail, de-icing boots manual.
sim/ice/tail_boot0_man                             Anti-ice: left tail, de-icing boots manual.
sim/ice/tail_boot1_man                             Anti-ice: right tail, de-icing boots manual.
sim/ice/wing_tai_on                                Anti-ice: all wing, bleed anti-ice on.
sim/ice/wing_tai0_on                               Anti-ice: left wing, bleed anti-ice on.
sim/ice/wing_tai1_on                               Anti-ice: right wing, bleed anti-ice on.
sim/ice/wing_tai_off                               Anti-ice: all wing, bleed anti-ice off.
sim/ice/wing_tai0_off                              Anti-ice: left wing, bleed anti-ice off.
sim/ice/wing_tai1_off                              Anti-ice: right wing, bleed anti-ice off.
sim/ice/wing_tai_tog                               Anti-ice: all wing, bleed anti-ice toggle.
sim/ice/wing_tai0_tog                              Anti-ice: left wing, bleed anti-ice toggle.
sim/ice/wing_tai1_tog                              Anti-ice: right wing, bleed anti-ice toggle.
sim/ice/tail_tai_on                                Anti-ice: all tail, bleed anti-ice on.
sim/ice/tail_tai0_on                               Anti-ice: left tail, bleed anti-ice on.
sim/ice/tail_tai1_on                               Anti-ice: right tail, bleed anti-ice on.
sim/ice/tail_tai_off                               Anti-ice: all tail, bleed anti-ice off.
sim/ice/tail_tai0_off                              Anti-ice: left tail, bleed anti-ice off.
sim/ice/tail_tai1_off                              Anti-ice: right tail, bleed anti-ice off.
sim/ice/tail_tai_tog                               Anti-ice: all tail, bleed anti-ice toggle.
sim/ice/tail_tai0_tog                              Anti-ice: left tail, bleed anti-ice toggle.
sim/ice/tail_tai1_tog                              Anti-ice: right tail, bleed anti-ice toggle.
sim/ice/tks_off                                    Anti-ice: TKS all off.
sim/ice/tks_norm                                   Anti-ice: TKS all on, normal flow rate.
sim/ice/tks_high                                   Anti-ice: TKS all on, high flow rate.
sim/ice/tks_max                                    Anti-ice: TKS max flow rate for 2 minutes.
sim/ice/tks_bkup_on                                Anti-ice: TKS backup pump manual on.
sim/ice/tks_bkup_off                               Anti-ice: TKS backup pump off.
sim/ice/wing_tks_on                                Anti-ice: all wing, TKS de-ice normal.
sim/ice/wing_tks0_on                               Anti-ice: left wing, TKS de-ice normal.
sim/ice/wing_tks1_on                               Anti-ice: right wing, TKS de-ice normal.
sim/ice/wing_tks_high                              Anti-ice: all wing, TKS de-ice high.
sim/ice/wing_tks0_high                             Anti-ice: left wing, TKS de-ice high.
sim/ice/wing_tks1_high                             Anti-ice: right wing, TKS de-ice high.
sim/ice/wing_tks_off                               Anti-ice: all wing, TKS de-ice off.
sim/ice/wing_tks0_off                              Anti-ice: left wing, TKS de-ice off.
sim/ice/wing_tks1_off                              Anti-ice: right wing, TKS de-ice off.
sim/ice/wing_tks_tog                               Anti-ice: all wing, TKS de-ice toggle.
sim/ice/wing_tks0_tog                              Anti-ice: left wing, TKS de-ice toggle.
sim/ice/wing_tks1_tog                              Anti-ice: right wing, TKS de-ice toggle.
sim/ice/tail_tks_on                                Anti-ice: all tail, TKS de-ice normal.
sim/ice/tail_tks0_on                               Anti-ice: left tail, TKS de-ice normal.
sim/ice/tail_tks1_on                               Anti-ice: right tail, TKS de-ice normal.
sim/ice/tail_tks_high                              Anti-ice: all tail, TKS de-ice high.
sim/ice/tail_tks0_high                             Anti-ice: left tail, TKS de-ice high.
sim/ice/tail_tks1_high                             Anti-ice: right tail, TKS de-ice high.
sim/ice/tail_tks_off                               Anti-ice: all tail, TKS de-ice off.
sim/ice/tail_tks0_off                              Anti-ice: left tail, TKS de-ice off.
sim/ice/tail_tks1_off                              Anti-ice: right tail, TKS de-ice off.
sim/ice/tail_tks_tog                               Anti-ice: all tail, TKS de-ice toggle.
sim/ice/tail_tks0_tog                              Anti-ice: left tail, TKS de-ice toggle.
sim/ice/tail_tks1_tog                              Anti-ice: right tail, TKS de-ice toggle.
sim/ice/inlet_heat_on                              Anti-ice: all engines inlet heat on.
sim/ice/inlet_heat_off                             Anti-ice: all engines inlet heat off.
sim/ice/inlet_heat_tog                             Anti-ice: all engines inlet heat toggle.
sim/ice/inlet_heat0_on                             Anti-ice: engine #1 inlet heat on.
sim/ice/inlet_heat1_on                             Anti-ice: engine #2 inlet heat on.
sim/ice/inlet_heat2_on                             Anti-ice: engine #3 inlet heat on.
sim/ice/inlet_heat3_on                             Anti-ice: engine #4 inlet heat on.
sim/ice/inlet_heat4_on                             Anti-ice: engine #5 inlet heat on.
sim/ice/inlet_heat5_on                             Anti-ice: engine #6 inlet heat on.
sim/ice/inlet_heat6_on                             Anti-ice: engine #7 inlet heat on.
sim/ice/inlet_heat7_on                             Anti-ice: engine #8 inlet heat on.
sim/ice/inlet_heat0_off                            Anti-ice: engine #1 inlet heat off.
sim/ice/inlet_heat1_off                            Anti-ice: engine #2 inlet heat off.
sim/ice/inlet_heat2_off                            Anti-ice: engine #3 inlet heat off.
sim/ice/inlet_heat3_off                            Anti-ice: engine #4 inlet heat off.
sim/ice/inlet_heat4_off                            Anti-ice: engine #5 inlet heat off.
sim/ice/inlet_heat5_off                            Anti-ice: engine #6 inlet heat off.
sim/ice/inlet_heat6_off                            Anti-ice: engine #7 inlet heat off.
sim/ice/inlet_heat7_off                            Anti-ice: engine #8 inlet heat off.
sim/ice/inlet_heat0_tog                            Anti-ice: engine #1 inlet heat toggle.
sim/ice/inlet_heat1_tog                            Anti-ice: engine #2 inlet heat toggle.
sim/ice/inlet_heat2_tog                            Anti-ice: engine #3 inlet heat toggle.
sim/ice/inlet_heat3_tog                            Anti-ice: engine #4 inlet heat toggle.
sim/ice/inlet_heat4_tog                            Anti-ice: engine #5 inlet heat toggle.
sim/ice/inlet_heat5_tog                            Anti-ice: engine #6 inlet heat toggle.
sim/ice/inlet_heat6_tog                            Anti-ice: engine #7 inlet heat toggle.
sim/ice/inlet_heat7_tog                            Anti-ice: engine #8 inlet heat toggle.
sim/ice/inlet_eai0_on                              Anti-ice: engine #1 anti-ice on.
sim/ice/inlet_eai1_on                              Anti-ice: engine #2 anti-ice on.
sim/ice/inlet_eai2_on                              Anti-ice: engine #3 anti-ice on.
sim/ice/inlet_eai3_on                              Anti-ice: engine #4 anti-ice on.
sim/ice/inlet_eai4_on                              Anti-ice: engine #5 anti-ice on.
sim/ice/inlet_eai5_on                              Anti-ice: engine #6 anti-ice on.
sim/ice/inlet_eai6_on                              Anti-ice: engine #7 anti-ice on.
sim/ice/inlet_eai7_on                              Anti-ice: engine #8 anti-ice on.
sim/ice/inlet_eai0_off                             Anti-ice: engine #1 anti-ice off.
sim/ice/inlet_eai1_off                             Anti-ice: engine #2 anti-ice off.
sim/ice/inlet_eai2_off                             Anti-ice: engine #3 anti-ice off.
sim/ice/inlet_eai3_off                             Anti-ice: engine #4 anti-ice off.
sim/ice/inlet_eai4_off                             Anti-ice: engine #5 anti-ice off.
sim/ice/inlet_eai5_off                             Anti-ice: engine #6 anti-ice off.
sim/ice/inlet_eai6_off                             Anti-ice: engine #7 anti-ice off.
sim/ice/inlet_eai7_off                             Anti-ice: engine #8 anti-ice off.
sim/ice/inlet_eai0_tog                             Anti-ice: engine #1 anti-ice toggle.
sim/ice/inlet_eai1_tog                             Anti-ice: engine #2 anti-ice toggle.
sim/ice/inlet_eai2_tog                             Anti-ice: engine #3 anti-ice toggle.
sim/ice/inlet_eai3_tog                             Anti-ice: engine #4 anti-ice toggle.
sim/ice/inlet_eai4_tog                             Anti-ice: engine #5 anti-ice toggle.
sim/ice/inlet_eai5_tog                             Anti-ice: engine #6 anti-ice toggle.
sim/ice/inlet_eai6_tog                             Anti-ice: engine #7 anti-ice toggle.
sim/ice/inlet_eai7_tog                             Anti-ice: engine #8 anti-ice toggle.
sim/ice/prop_heat_on                               Anti-ice: all prop heat on.
sim/ice/prop_heat_off                              Anti-ice: all prop heat off.
sim/ice/prop_heat_tog                              Anti-ice: all prop heat toggle.
sim/ice/prop_heat0_on                              Anti-ice: engine #1 prop heat on.
sim/ice/prop_heat1_on                              Anti-ice: engine #2 prop heat on.
sim/ice/prop_heat2_on                              Anti-ice: engine #3 prop heat on.
sim/ice/prop_heat3_on                              Anti-ice: engine #4 prop heat on.
sim/ice/prop_heat4_on                              Anti-ice: engine #5 prop heat on.
sim/ice/prop_heat5_on                              Anti-ice: engine #6 prop heat on.
sim/ice/prop_heat6_on                              Anti-ice: engine #7 prop heat on.
sim/ice/prop_heat7_on                              Anti-ice: engine #8 prop heat on.
sim/ice/prop_heat0_off                             Anti-ice: engine #1 prop heat off.
sim/ice/prop_heat1_off                             Anti-ice: engine #2 prop heat off.
sim/ice/prop_heat2_off                             Anti-ice: engine #3 prop heat off.
sim/ice/prop_heat3_off                             Anti-ice: engine #4 prop heat off.
sim/ice/prop_heat4_off                             Anti-ice: engine #5 prop heat off.
sim/ice/prop_heat5_off                             Anti-ice: engine #6 prop heat off.
sim/ice/prop_heat6_off                             Anti-ice: engine #7 prop heat off.
sim/ice/prop_heat7_off                             Anti-ice: engine #8 prop heat off.
sim/ice/prop_heat0_tog                             Anti-ice: engine #1 prop heat toggle.
sim/ice/prop_heat1_tog                             Anti-ice: engine #2 prop heat toggle.
sim/ice/prop_heat2_tog                             Anti-ice: engine #3 prop heat toggle.
sim/ice/prop_heat3_tog                             Anti-ice: engine #4 prop heat toggle.
sim/ice/prop_heat4_tog                             Anti-ice: engine #5 prop heat toggle.
sim/ice/prop_heat5_tog                             Anti-ice: engine #6 prop heat toggle.
sim/ice/prop_heat6_tog                             Anti-ice: engine #7 prop heat toggle.
sim/ice/prop_heat7_tog                             Anti-ice: engine #8 prop heat toggle.
sim/ice/prop_tks_on                                Anti-ice: all prop TKS norm.
sim/ice/prop_tks_high                              Anti-ice: all prop TKS high.
sim/ice/prop_tks_off                               Anti-ice: all prop TKS off.
sim/ice/prop_tks_tog                               Anti-ice: all prop TKS toggle.
sim/ice/prop_tks0_on                               Anti-ice: engine #1 prop TKS norm.
sim/ice/prop_tks1_on                               Anti-ice: engine #2 prop TKS norm.
sim/ice/prop_tks2_on                               Anti-ice: engine #3 prop TKS norm.
sim/ice/prop_tks3_on                               Anti-ice: engine #4 prop TKS norm.
sim/ice/prop_tks4_on                               Anti-ice: engine #5 prop TKS norm.
sim/ice/prop_tks5_on                               Anti-ice: engine #6 prop TKS norm.
sim/ice/prop_tks6_on                               Anti-ice: engine #7 prop TKS norm.
sim/ice/prop_tks7_on                               Anti-ice: engine #8 prop TKS norm.
sim/ice/prop_tks0_high                             Anti-ice: engine #1 prop TKS high.
sim/ice/prop_tks1_high                             Anti-ice: engine #2 prop TKS high.
sim/ice/prop_tks2_high                             Anti-ice: engine #3 prop TKS high.
sim/ice/prop_tks3_high                             Anti-ice: engine #4 prop TKS high.
sim/ice/prop_tks4_high                             Anti-ice: engine #5 prop TKS high.
sim/ice/prop_tks5_high                             Anti-ice: engine #6 prop TKS high.
sim/ice/prop_tks6_high                             Anti-ice: engine #7 prop TKS high.
sim/ice/prop_tks7_high                             Anti-ice: engine #8 prop TKS high.
sim/ice/prop_tks0_off                              Anti-ice: engine #1 prop TKS off.
sim/ice/prop_tks1_off                              Anti-ice: engine #2 prop TKS off.
sim/ice/prop_tks2_off                              Anti-ice: engine #3 prop TKS off.
sim/ice/prop_tks3_off                              Anti-ice: engine #4 prop TKS off.
sim/ice/prop_tks4_off                              Anti-ice: engine #5 prop TKS off.
sim/ice/prop_tks5_off                              Anti-ice: engine #6 prop TKS off.
sim/ice/prop_tks6_off                              Anti-ice: engine #7 prop TKS off.
sim/ice/prop_tks7_off                              Anti-ice: engine #8 prop TKS off.
sim/ice/prop_tks0_tog                              Anti-ice: engine #1 prop TKS toggle.
sim/ice/prop_tks1_tog                              Anti-ice: engine #2 prop TKS toggle.
sim/ice/prop_tks2_tog                              Anti-ice: engine #3 prop TKS toggle.
sim/ice/prop_tks3_tog                              Anti-ice: engine #4 prop TKS toggle.
sim/ice/prop_tks4_tog                              Anti-ice: engine #5 prop TKS toggle.
sim/ice/prop_tks5_tog                              Anti-ice: engine #6 prop TKS toggle.
sim/ice/prop_tks6_tog                              Anti-ice: engine #7 prop TKS toggle.
sim/ice/prop_tks7_tog                              Anti-ice: engine #8 prop TKS toggle.
sim/ice/detect_on                                  Anti-ice: ice detection on.
sim/ice/detect_off                                 Anti-ice: ice detection off.
sim/oxy/crew_valve_on                              Crew oxygen: master valve open/on.
sim/oxy/crew_valve_off                             Crew oxygen: master valve closed/off.
sim/oxy/crew_valve_toggle                          Crew oxygen: master valve toggle
sim/oxy/crew_regulator_up                          Crew oxygen: demand regulator up.
sim/oxy/crew_regulator_down                        Crew oxygen: demand regulator down.
sim/oxy/passenger_o2_on                            Passenger oxygen: drop masks.
sim/flight_controls/parachute_flares               Deploy parachute flares.
sim/flight_controls/smoke_toggle                   Toggle smoke puffing.
sim/flight_controls/water_scoop_toggle             Toggle water scoop.
sim/flight_controls/boost                          Water or Nitrous engine BOOST.
sim/flight_controls/ignite_jato                    Ignite JATO.
sim/flight_controls/jettison_payload               Jettison the payload.
sim/flight_controls/jettison_reset                 Reset the jettisonable payload.
sim/flight_controls/dump_fuel_on                   Dump fuel on.
sim/flight_controls/dump_fuel_off                  Dump fuel off.
sim/flight_controls/dump_fuel_toggle               Dump fuel toggle.
sim/flight_controls/deploy_parachute               Deploy/jettison chute.
sim/flight_controls/eject                          Eject.
sim/flight_controls/drop_tank                      Drop all drop tanks.
sim/weapons/re_arm_aircraft                        Re-arm aircraft to default specs.
sim/weapons/master_arm_on                          Master arm on.
sim/weapons/master_arm_off                         Master arm off.
sim/weapons/fire_mode_down                         Weapon single/pair/ripple/salvo down.
sim/weapons/fire_mode_up                           Weapon single/pair/ripple/salvo up.
sim/weapons/fire_rate_down                         Weapon fire rate down.
sim/weapons/fire_rate_up                           Weapon fire rate up.
sim/weapons/weapon_select_down                     Weapon select down.
sim/weapons/weapon_select_up                       Weapon select up.
sim/weapons/fire_guns                              Fire guns.
sim/weapons/fire_air_to_air                        Fire air-to-air selection.
sim/weapons/fire_air_to_ground                     Fire air-to-ground selection.
sim/weapons/fire_any_armed                         Fire all armed selections.
sim/weapons/fire_any_shell                         Fire selected weapon.
sim/weapons/GPS_lock_here                          Target camera pointer in GPS.
sim/weapons/weapon_target_down                     Target select down.
sim/weapons/weapon_target_up                       Target select up.
sim/weapons/deploy_chaff                           Deploy chaff.
sim/weapons/deploy_flares                          Deploy flares.
sim/operation/prev_livery                          Load previous livery.
sim/operation/next_livery                          Load next livery.
sim/systems/seatbelt_sign_toggle                   Toggle seatbelt sign.
sim/systems/no_smoking_toggle                      Toggle smoking sign.
sim/systems/wipers_dn                              Windshield wipers down.
sim/systems/wipers_up                              Windshield wipers up.
sim/systems/wipers2_dn                             Windshield wipers co-pilot down.
sim/systems/wipers2_up                             Windshield wipers co-pilot up.
sim/systems/rain_repellent_on                      Rain repellent on.
sim/systems/rain_repellent_off                     Rain repellent off.
sim/systems/rain_repellent_toggle                  Rain repellent toggle.
sim/systems/rain_repellent2_on                     Rain repellent co-pilot on.
sim/systems/rain_repellent2_off                    Rain repellent co-pilot off.
sim/systems/rain_repellent2_toggle                 Rain repellent co-pilot toggle.
sim/lights/spot_light_left                         Aim spotlight left.
sim/lights/spot_light_right                        Aim spotlight right.
sim/lights/spot_light_up                           Aim spotlight up.
sim/lights/spot_light_down                         Aim spotlight down.
sim/lights/spot_light_center                       Aim spotlight to center.
sim/flight_controls/door_open_1                    Door #1 open.
sim/flight_controls/door_open_2                    Door #2 open.
sim/flight_controls/door_open_3                    Door #3 open.
sim/flight_controls/door_open_4                    Door #4 open.
sim/flight_controls/door_open_5                    Door #5 open.
sim/flight_controls/door_open_6                    Door #6 open.
sim/flight_controls/door_open_7                    Door #7 open.
sim/flight_controls/door_open_8                    Door #8 open.
sim/flight_controls/door_open_9                    Door #9 open.
sim/flight_controls/door_open_10                   Door #10 open.
sim/flight_controls/door_open_11                   Door #11 open.
sim/flight_controls/door_open_12                   Door #12 open.
sim/flight_controls/door_open_13                   Door #13 open.
sim/flight_controls/door_open_14                   Door #14 open.
sim/flight_controls/door_open_15                   Door #15 open.
sim/flight_controls/door_open_16                   Door #16 open.
sim/flight_controls/door_open_17                   Door #17 open.
sim/flight_controls/door_open_18                   Door #18 open.
sim/flight_controls/door_open_19                   Door #19 open.
sim/flight_controls/door_open_20                   Door #20 open.
sim/flight_controls/door_close_1                   Door #1 close.
sim/flight_controls/door_close_2                   Door #2 close.
sim/flight_controls/door_close_3                   Door #3 close.
sim/flight_controls/door_close_4                   Door #4 close.
sim/flight_controls/door_close_5                   Door #5 close.
sim/flight_controls/door_close_6                   Door #6 close.
sim/flight_controls/door_close_7                   Door #7 close.
sim/flight_controls/door_close_8                   Door #8 close.
sim/flight_controls/door_close_9                   Door #9 close.
sim/flight_controls/door_close_10                  Door #10 close.
sim/flight_controls/door_close_11                  Door #11 close.
sim/flight_controls/door_close_12                  Door #12 close.
sim/flight_controls/door_close_13                  Door #13 close.
sim/flight_controls/door_close_14                  Door #14 close.
sim/flight_controls/door_close_15                  Door #15 close.
sim/flight_controls/door_close_16                  Door #16 close.
sim/flight_controls/door_close_17                  Door #17 close.
sim/flight_controls/door_close_18                  Door #18 close.
sim/flight_controls/door_close_19                  Door #19 close.
sim/flight_controls/door_close_20                  Door #20 close.
sim/general/action                                 General action command.
sim/flight_controls/glider_tow_release             Release tow-plane cable for gliders.
sim/flight_controls/winch_release                  Release winch (for gliders).
sim/flight_controls/glider_all_release             Release tow-plane and winch for gliders.
sim/flight_controls/glider_tow_left                Tow-plane for gliders: Take me left.
sim/flight_controls/glider_tow_right               Tow-plane for gliders: Take me right.
sim/flight_controls/winch_faster                   Winch faster. (for gliders).
sim/flight_controls/winch_slower                   Winch slower. (for gliders).
sim/flight_controls/engage_cat_shot                Engage catapault.
sim/ground_ops/jetway                              Service the airplane with jetways.
sim/ground_ops/service_plane                       Service the airplane with ground trucks.
sim/ground_ops/pushback_left                       Push-back for airliners: Nose 90 left.
sim/ground_ops/pushback_straight                   Push-back for airliners: Straight back.
sim/ground_ops/pushback_right                      Push-back for airliners: Nose 90 right.
sim/ground_ops/pushback_stop                       Push-back for airliners: Stop and let go.
sim/ground_ops/toggle_window                       Toggle the ground handling window.
sim/radios/power_nav1_off                          Power NAV1 off.
sim/radios/power_nav1_on                           Power NAV1 on.
sim/radios/power_nav2_off                          Power NAV2 off.
sim/radios/power_nav2_on                           Power NAV2 on.
sim/radios/power_tac1_off                          Power TAC1 off.
sim/radios/power_tac1_rec                          Power TAC1 receive only.
sim/radios/power_tac1_tr                           Power TAC1 transmit/receive.
sim/radios/power_tac2_off                          Power TAC2 off.
sim/radios/power_tac2_rec                          Power TAC2 receive only.
sim/radios/power_tac2_tr                           Power TAC2 transmit/receive.
sim/radios/power_com1_off                          Power COM1 off.
sim/radios/power_com1_on                           Power COM1 on.
sim/radios/power_com2_off                          Power COM2 off.
sim/radios/power_com2_on                           Power COM2 on.
sim/radios/power_adf1_dn                           Power ADF1 dn.
sim/radios/power_adf1_up                           Power ADF1 up.
sim/radios/power_adf2_dn                           Power ADF2 dn.
sim/radios/power_adf2_up                           Power ADF2 up.
sim/radios/adf1_power_mode_0                       ADF 1 off.
sim/radios/adf1_power_mode_1                       ADF 1 antenna.
sim/radios/adf1_power_mode_2                       ADF 1 on.
sim/radios/adf1_power_mode_3                       ADF 1 tone.
sim/radios/adf1_power_mode_4                       ADF 1 test.
sim/radios/adf2_power_mode_0                       ADF 2 off.
sim/radios/adf2_power_mode_1                       ADF 2 antenna.
sim/radios/adf2_power_mode_2                       ADF 2 on.
sim/radios/adf2_power_mode_3                       ADF 2 tone.
sim/radios/adf2_power_mode_4                       ADF 2 test.
sim/radios/actv_com1_coarse_down                   COM 1 coarse down.
sim/radios/actv_com1_coarse_up                     COM 1 coarse up.
sim/radios/actv_com1_fine_down                     COM 1 fine down (25kHz).
sim/radios/actv_com1_fine_up                       COM 1 fine up (25kHz).
sim/radios/actv_com1_coarse_down_833               COM 1 coarse down (8.33 kHz).
sim/radios/actv_com1_coarse_up_833                 COM 1 coarse up (8.33 kHz).
sim/radios/actv_com1_fine_down_833                 COM 1 fine down (8.33 kHz).
sim/radios/actv_com1_fine_up_833                   COM 1 fine up (8.33 kHz).
sim/radios/stby_com1_coarse_down                   COM 1 standby coarse down.
sim/radios/stby_com1_coarse_up                     COM 1 standby coarse up.
sim/radios/stby_com1_fine_down                     COM 1 standby fine down (25kHz).
sim/radios/stby_com1_fine_up                       COM 1 standby fine up (25kHz).
sim/radios/stby_com1_coarse_down_833               COM 1 standby coarse down (8.33kHz).
sim/radios/stby_com1_coarse_up_833                 COM 1 standby coarse up (8.33kHz).
sim/radios/stby_com1_fine_down_833                 COM 1 standby fine down (8.33kHz).
sim/radios/stby_com1_fine_up_833                   COM 1 standby fine up (8.33kHz).
sim/radios/actv_com2_coarse_down                   COM 2 coarse down.
sim/radios/actv_com2_coarse_up                     COM 2 coarse up.
sim/radios/actv_com2_fine_down                     COM 2 fine down (25kHz).
sim/radios/actv_com2_fine_up                       COM 2 fine up (25kHz).
sim/radios/actv_com2_coarse_down_833               COM 2 coarse down (8.33kHz).
sim/radios/actv_com2_coarse_up_833                 COM 2 coarse up (8.33kHz).
sim/radios/actv_com2_fine_down_833                 COM 2 fine down (8.33kHz).
sim/radios/actv_com2_fine_up_833                   COM 2 fine up (8.33kHz).
sim/radios/stby_com2_coarse_down                   COM 2 standby coarse down.
sim/radios/stby_com2_coarse_up                     COM 2 standby coarse up.
sim/radios/stby_com2_fine_down                     COM 2 standby fine down (25kHz).
sim/radios/stby_com2_fine_up                       COM 2 standby fine up (25kHz).
sim/radios/stby_com2_coarse_down_833               COM 2 standby coarse down (8.33kHz).
sim/radios/stby_com2_coarse_up_833                 COM 2 standby coarse up (8.33kHz).
sim/radios/stby_com2_fine_down_833                 COM 2 standby fine down (8.33kHz).
sim/radios/stby_com2_fine_up_833                   COM 2 standby fine up (8.33kHz).
sim/radios/actv_nav1_coarse_down                   NAV 1 coarse down.
sim/radios/actv_nav1_coarse_up                     NAV 1 coarse up.
sim/radios/actv_nav1_fine_down                     NAV 1 fine down.
sim/radios/actv_nav1_fine_up                       NAV 1 fine up.
sim/radios/stby_nav1_coarse_down                   NAV 1 standby coarse down.
sim/radios/stby_nav1_coarse_up                     NAV 1 standby coarse up.
sim/radios/stby_nav1_fine_down                     NAV 1 standby fine down.
sim/radios/stby_nav1_fine_up                       NAV 1 standby fine up.
sim/radios/actv_nav2_coarse_down                   NAV 2 coarse down.
sim/radios/actv_nav2_coarse_up                     NAV 2 coarse up.
sim/radios/actv_nav2_fine_down                     NAV 2 fine down.
sim/radios/actv_nav2_fine_up                       NAV 2 fine up.
sim/radios/stby_nav2_coarse_down                   NAV 2 standby coarse down.
sim/radios/stby_nav2_coarse_up                     NAV 2 standby coarse up.
sim/radios/stby_nav2_fine_down                     NAV 2 standby fine down.
sim/radios/stby_nav2_fine_up                       NAV 2 standby fine up.
sim/radios/actv_tac1_channel_1down                 TACAN 1 channel 1s down.
sim/radios/actv_tac1_channel_1up                   TACAN 1 channel 1s up.
sim/radios/actv_tac1_channel_10down                TACAN 1 channel 10s down.
sim/radios/actv_tac1_channel_10up                  TACAN 1 channel 10s up.
sim/radios/actv_tac1_channel_down                  TACAN 1 channel down.
sim/radios/actv_tac1_channel_up                    TACAN 1 channel up.
sim/radios/actv_tac1_mode_x                        TACAN 1 mode X.
sim/radios/actv_tac1_mode_y                        TACAN 1 mode Y.
sim/radios/stby_tac1_channel_1down                 TACAN 1 standby channel 1s down.
sim/radios/stby_tac1_channel_1up                   TACAN 1 standby channel 1s up.
sim/radios/stby_tac1_channel_10down                TACAN 1 standby channel 10s down.
sim/radios/stby_tac1_channel_10up                  TACAN 1 standby channel 10s up.
sim/radios/stby_tac1_channel_down                  TACAN 1 standby channel down.
sim/radios/stby_tac1_channel_up                    TACAN 1 standby channel up.
sim/radios/stby_tac1_mode_x                        TACAN 1 standby mode X.
sim/radios/stby_tac1_mode_y                        TACAN 1 standby mode Y.
sim/radios/actv_tac2_channel_1down                 TACAN 2 channel 1s down.
sim/radios/actv_tac2_channel_1up                   TACAN 2 channel 1s up.
sim/radios/actv_tac2_channel_10down                TACAN 2 channel 10s down.
sim/radios/actv_tac2_channel_10up                  TACAN 2 channel 10s up.
sim/radios/actv_tac2_channel_down                  TACAN 2 channel down.
sim/radios/actv_tac2_channel_up                    TACAN 2 channel up.
sim/radios/actv_tac2_mode_x                        TACAN 2 mode X.
sim/radios/actv_tac2_mode_y                        TACAN 2 mode Y.
sim/radios/stby_tac2_channel_1down                 TACAN 2 standby channel 1s down.
sim/radios/stby_tac2_channel_1up                   TACAN 2 standby channel 1s up.
sim/radios/stby_tac2_channel_10down                TACAN 2 standby channel 10s down.
sim/radios/stby_tac2_channel_10up                  TACAN 2 standby channel 10s up.
sim/radios/stby_tac2_channel_down                  TACAN 2 standby channel down.
sim/radios/stby_tac2_channel_up                    TACAN 2 standby channel up.
sim/radios/stby_tac2_mode_x                        TACAN 2 standby mode X.
sim/radios/stby_tac2_mode_y                        TACAN 2 standby mode Y.
sim/radios/actv_dme_coarse_down                    DME coarse down.
sim/radios/actv_dme_coarse_up                      DME coarse up.
sim/radios/actv_dme_fine_down                      DME fine down.
sim/radios/actv_dme_fine_up                        DME fine up.
sim/radios/stby_dme_coarse_down                    DME standby coarse down.
sim/radios/stby_dme_coarse_up                      DME standby coarse up.
sim/radios/stby_dme_fine_down                      DME standby fine down.
sim/radios/stby_dme_fine_up                        DME standby fine up.
sim/radios/actv_adf1_hundreds_down                 ADF active 1 hundreds down.
sim/radios/actv_adf1_hundreds_up                   ADF active 1 hundreds up.
sim/radios/actv_adf1_tens_down                     ADF active 1 tens down.
sim/radios/actv_adf1_tens_up                       ADF active 1 tens up.
sim/radios/actv_adf1_ones_down                     ADF active 1 ones down.
sim/radios/actv_adf1_ones_up                       ADF active 1 ones up.
sim/radios/actv_adf1_ones_tens_down                ADF active 1 ones and tens down.
sim/radios/actv_adf1_ones_tens_up                  ADF active 1 ones and tens up.
sim/radios/actv_adf1_hundreds_thous_down           ADF active 1 hundreds and thousands down.
sim/radios/actv_adf1_hundreds_thous_up             ADF active 1 hundreds and thousands up.
sim/radios/actv_adf1_4dig_hundreds_down            4-digit ADF active 1 hundreds down.
sim/radios/actv_adf1_4dig_hundreds_up              4-digit ADF active 1 hundreds up.
sim/radios/actv_adf1_4dig_tens_down                4-digit ADF active 1 tens down.
sim/radios/actv_adf1_4dig_tens_up                  4-digit ADF active 1 tens up.
sim/radios/actv_adf1_4dig_ones_down                4-digit ADF active 1 ones down.
sim/radios/actv_adf1_4dig_ones_up                  4-digit ADF active 1 ones up.
sim/radios/stby_adf1_hundreds_down                 ADF standby 1 hundreds down.
sim/radios/stby_adf1_hundreds_up                   ADF standby 1 hundreds up.
sim/radios/stby_adf1_tens_down                     ADF standby 1 tens down.
sim/radios/stby_adf1_tens_up                       ADF standby 1 tens up.
sim/radios/stby_adf1_ones_down                     ADF standby 1 ones down.
sim/radios/stby_adf1_ones_up                       ADF standby 1 ones up.
sim/radios/stby_adf1_ones_tens_down                ADF standby 1 ones and tens down.
sim/radios/stby_adf1_ones_tens_up                  ADF standby 1 ones and tens up.
sim/radios/stby_adf1_hundreds_thous_down           ADF standby 1 hundreds and thousands down.
sim/radios/stby_adf1_hundreds_thous_up             ADF standby 1 hundreds and thousands up.
sim/radios/stby_adf1_4dig_hundreds_down            4-digit ADF standby 1 hundreds down.
sim/radios/stby_adf1_4dig_hundreds_up              4-digit ADF standby 1 hundreds up.
sim/radios/stby_adf1_4dig_tens_down                4-digit ADF standby 1 tens down.
sim/radios/stby_adf1_4dig_tens_up                  4-digit ADF standby 1 tens up.
sim/radios/stby_adf1_4dig_ones_down                4-digit ADF standby 1 ones down.
sim/radios/stby_adf1_4dig_ones_up                  4-digit ADF standby 1 ones up.
sim/radios/actv_adf2_hundreds_down                 ADF active 2 hundreds down.
sim/radios/actv_adf2_hundreds_up                   ADF active 2 hundreds up.
sim/radios/actv_adf2_tens_down                     ADF active 2 tens down.
sim/radios/actv_adf2_tens_up                       ADF active 2 tens up.
sim/radios/actv_adf2_ones_down                     ADF active 2 ones down.
sim/radios/actv_adf2_ones_up                       ADF active 2 ones up.
sim/radios/actv_adf2_ones_tens_down                ADF active 2 ones and tens down.
sim/radios/actv_adf2_ones_tens_up                  ADF active 2 ones and tens up.
sim/radios/actv_adf2_hundreds_thous_down           ADF active 2 hundreds and thousands down.
sim/radios/actv_adf2_hundreds_thous_up             ADF active 2 hundreds and thousands up.
sim/radios/actv_adf2_4dig_hundreds_down            4-digit ADF active 2 hundreds down.
sim/radios/actv_adf2_4dig_hundreds_up              4-digit ADF active 2 hundreds up.
sim/radios/actv_adf2_4dig_tens_down                4-digit ADF active 2 tens down.
sim/radios/actv_adf2_4dig_tens_up                  4-digit ADF active 2 tens up.
sim/radios/actv_adf2_4dig_ones_down                4-digit ADF active 2 ones down.
sim/radios/actv_adf2_4dig_ones_up                  4-digit ADF active 2 ones up.
sim/radios/stby_adf2_hundreds_down                 ADF standby 2 hundreds down.
sim/radios/stby_adf2_hundreds_up                   ADF standby 2 hundreds up.
sim/radios/stby_adf2_tens_down                     ADF standby 2 tens down.
sim/radios/stby_adf2_tens_up                       ADF standby 2 tens up.
sim/radios/stby_adf2_ones_down                     ADF standby 2 ones down.
sim/radios/stby_adf2_ones_up                       ADF standby 2 ones up.
sim/radios/stby_adf2_ones_tens_down                ADF standby 2 ones and tens down.
sim/radios/stby_adf2_ones_tens_up                  ADF standby 2 ones and tens up.
sim/radios/stby_adf2_hundreds_thous_down           ADF standby 2 hundreds and thousands down.
sim/radios/stby_adf2_hundreds_thous_up             ADF standby 2 hundreds and thousands up.
sim/radios/stby_adf2_4dig_hundreds_down            4-digit ADF standby 2 hundreds down.
sim/radios/stby_adf2_4dig_hundreds_up              4-digit ADF standby 2 hundreds up.
sim/radios/stby_adf2_4dig_tens_down                4-digit ADF standby 2 tens down.
sim/radios/stby_adf2_4dig_tens_up                  4-digit ADF standby 2 tens up.
sim/radios/stby_adf2_4dig_ones_down                4-digit ADF standby 2 ones down.
sim/radios/stby_adf2_4dig_ones_up                  4-digit ADF standby 2 ones up.
sim/transponder/transponder_digit_0                Transponder digit to 0.
sim/transponder/transponder_digit_1                Transponder digit to 1.
sim/transponder/transponder_digit_2                Transponder digit to 2.
sim/transponder/transponder_digit_3                Transponder digit to 3.
sim/transponder/transponder_digit_4                Transponder digit to 4.
sim/transponder/transponder_digit_5                Transponder digit to 5.
sim/transponder/transponder_digit_6                Transponder digit to 6.
sim/transponder/transponder_digit_7                Transponder digit to 7.
sim/transponder/transponder_CLR                    Transponder reset to first digit.
sim/transponder/transponder_thousands_down         Transponder thousands down.
sim/transponder/transponder_thousands_up           Transponder thousands up.
sim/transponder/transponder_hundreds_down          Transponder hundreds down.
sim/transponder/transponder_hundreds_up            Transponder hundreds up.
sim/transponder/transponder_tens_down              Transponder tens down.
sim/transponder/transponder_tens_up                Transponder tens up.
sim/transponder/transponder_ones_down              Transponder ones down.
sim/transponder/transponder_ones_up                Transponder ones up.
sim/transponder/transponder_12_down                Transponder digits 1 and 2 down.
sim/transponder/transponder_12_up                  Transponder digits 1 and 2 up.
sim/transponder/transponder_34_down                Transponder digits 3 and 4 down.
sim/transponder/transponder_34_up                  Transponder digits 3 and 4 up.
sim/audio_panel/transmit_audio_com1                Transmit audio: COM1.
sim/audio_panel/transmit_audio_com2                Transmit audio: COM2.
sim/audio_panel/monitor_audio_com_auto             Monitor audio: COM auto (same as transmit) toggle.
sim/audio_panel/monitor_audio_com1                 Monitor audio: COM1 toggle.
sim/audio_panel/monitor_audio_com2                 Monitor audio: COM2 toggle.
sim/audio_panel/monitor_audio_nav1                 Monitor audio: NAV1 toggle.
sim/audio_panel/monitor_audio_nav2                 Monitor audio: NAV2 toggle.
sim/audio_panel/monitor_audio_adf1                 Monitor audio: ADF1 toggle.
sim/audio_panel/monitor_audio_adf2                 Monitor audio: ADF2 toggle.
sim/audio_panel/monitor_audio_dme                  Monitor audio: DME toggle.
sim/audio_panel/monitor_audio_mkr                  Monitor audio: MKR toggle.
sim/audio_panel/transmit_audio_com1_man            Transmit audio: COM1 - old panel, doesn't change listener.
sim/audio_panel/transmit_audio_com2_man            Transmit audio: COM2 - old panel, doesn't change listener.
sim/audio_panel/monitor_audio_com_auto_off         Monitor audio: COM auto (same as transmit) off.
sim/audio_panel/monitor_audio_com1_off             Monitor audio: COM1 off.
sim/audio_panel/monitor_audio_com2_off             Monitor audio: COM2 off.
sim/audio_panel/monitor_audio_nav1_off             Monitor audio: NAV1 off.
sim/audio_panel/monitor_audio_nav2_off             Monitor audio: NAV2 off.
sim/audio_panel/monitor_audio_adf1_off             Monitor audio: ADF1 off.
sim/audio_panel/monitor_audio_adf2_off             Monitor audio: ADF2 off.
sim/audio_panel/monitor_audio_dme_off              Monitor audio: DME off.
sim/audio_panel/monitor_audio_mkr_off              Monitor audio: MKR off.
sim/audio_panel/monitor_audio_com_auto_on          Monitor audio: COM auto (same as transmit) on.
sim/audio_panel/monitor_audio_com1_on              Monitor audio: COM1 on.
sim/audio_panel/monitor_audio_com2_on              Monitor audio: COM2 on.
sim/audio_panel/monitor_audio_nav1_on              Monitor audio: NAV1 on.
sim/audio_panel/monitor_audio_nav2_on              Monitor audio: NAV2 on.
sim/audio_panel/monitor_audio_adf1_on              Monitor audio: ADF1 on.
sim/audio_panel/monitor_audio_adf2_on              Monitor audio: ADF2 on.
sim/audio_panel/monitor_audio_dme_on               Monitor audio: DME on.
sim/audio_panel/monitor_audio_mkr_on               Monitor audio: MKR on.
sim/audio_panel/use_pilot_audio                    Audio: Listen to pilot's audio panel.
sim/audio_panel/use_copilot_audio                  Audio: Listen to copilot's audio panel.
sim/audio_panel_copilot/transmit_audio_com1        Copilot: Transmit audio: COM1.
sim/audio_panel_copilot/transmit_audio_com2        Copilot: Transmit audio: COM2.
sim/audio_panel_copilot/monitor_audio_com_auto     Copilot: Monitor audio: COM auto (same as transmit) toggle.
sim/audio_panel_copilot/monitor_audio_com1         Copilot: Monitor audio: COM1 toggle.
sim/audio_panel_copilot/monitor_audio_com2         Copilot: Monitor audio: COM2 toggle.
sim/audio_panel_copilot/monitor_audio_nav1         Copilot: Monitor audio: NAV1 toggle.
sim/audio_panel_copilot/monitor_audio_nav2         Copilot: Monitor audio: NAV2 toggle.
sim/audio_panel_copilot/monitor_audio_adf1         Copilot: Monitor audio: ADF1 toggle.
sim/audio_panel_copilot/monitor_audio_adf2         Copilot: Monitor audio: ADF2 toggle.
sim/audio_panel_copilot/monitor_audio_dme          Copilot: Monitor audio: DME toggle.
sim/audio_panel_copilot/monitor_audio_mkr          Copilot: Monitor audio: MKR toggle.
sim/audio_panel_copilot/transmit_audio_com1_man    Copilot: Transmit audio: COM1 - old panel, doesn't change listener.
sim/audio_panel_copilot/transmit_audio_com2_man    Copilot: Transmit audio: COM2 - old panel, doesn't change listener.
sim/audio_panel_copilot/monitor_audio_com_auto_off Copilot: Monitor audio: COM auto (same as transmit) off.
sim/audio_panel_copilot/monitor_audio_com1_off     Copilot: Monitor audio: COM1 off.
sim/audio_panel_copilot/monitor_audio_com2_off     Copilot: Monitor audio: COM2 off.
sim/audio_panel_copilot/monitor_audio_nav1_off     Copilot: Monitor audio: NAV1 off.
sim/audio_panel_copilot/monitor_audio_nav2_off     Copilot: Monitor audio: NAV2 off.
sim/audio_panel_copilot/monitor_audio_adf1_off     Copilot: Monitor audio: ADF1 off.
sim/audio_panel_copilot/monitor_audio_adf2_off     Copilot: Monitor audio: ADF2 off.
sim/audio_panel_copilot/monitor_audio_dme_off      Copilot: Monitor audio: DME off.
sim/audio_panel_copilot/monitor_audio_mkr_off      Copilot: Monitor audio: MKR off.
sim/audio_panel_copilot/monitor_audio_com_auto_on  Copilot: Monitor audio: COM auto (same as transmit) on.
sim/audio_panel_copilot/monitor_audio_com1_on      Copilot: Monitor audio: COM1 on.
sim/audio_panel_copilot/monitor_audio_com2_on      Copilot: Monitor audio: COM2 on.
sim/audio_panel_copilot/monitor_audio_nav1_on      Copilot: Monitor audio: NAV1 on.
sim/audio_panel_copilot/monitor_audio_nav2_on      Copilot: Monitor audio: NAV2 on.
sim/audio_panel_copilot/monitor_audio_adf1_on      Copilot: Monitor audio: ADF1 on.
sim/audio_panel_copilot/monitor_audio_adf2_on      Copilot: Monitor audio: ADF2 on.
sim/audio_panel_copilot/monitor_audio_dme_on       Copilot: Monitor audio: DME on.
sim/audio_panel_copilot/monitor_audio_mkr_on       Copilot: Monitor audio: MKR on.
sim/transponder/transponder_ident                  Transponder ID.
sim/transponder/transponder_off                    Transponder off.
sim/transponder/transponder_standby                Transponder standby.
sim/transponder/transponder_on                     Transponder on.
sim/transponder/transponder_alt                    Transponder alt.
sim/transponder/transponder_test                   Transponder test.
sim/transponder/transponder_ground                 Transponder ground.
sim/transponder/transponder_dn                     Transponder mode down.
sim/transponder/transponder_up                     Transponder mode up.
sim/transponder/transponder_ta_only                Transponder TA only.
sim/transponder/transponder_ta_ra                  Transponder TA/RA.
sim/radios/nav1_standy_flip                        NAV 1 flip standby.
sim/radios/nav2_standy_flip                        NAV 2 flip standby.
sim/radios/com1_standy_flip                        COM 1 flip standby.
sim/radios/com2_standy_flip                        COM 2 flip standby.
sim/radios/adf1_standy_flip                        ADF 1 flip standby.
sim/radios/adf2_standy_flip                        ADF 2 flip standby.
sim/radios/dme_standby_flip                        DME flip standby.
sim/radios/RMI_L_tog                               RMI left NAV toggle VOR/NDB.
sim/radios/RMI_R_tog                               RMI right NAV toggle VOR/NDB.
sim/radios/copilot_RMI_L_tog_cop                   Copilot RMI left NAV toggle VOR/NDB.
sim/radios/copilot_RMI_R_tog_cop                   Copilot RMI right NAV toggle VOR/NDB.
sim/radios/rmu1/coarse_down                        RMU 1: tune coarse down.
sim/radios/rmu1/coarse_up                          RMU 1: tune coarse up.
sim/radios/rmu1/fine_down                          RMU 1: tune fine down.
sim/radios/rmu1/fine_up                            RMU 1: tune fine up.
sim/radios/rmu1/ls_1l                              RMU 1: line select 1l
sim/radios/rmu1/ls_2l                              RMU 1: line select 2l
sim/radios/rmu1/ls_3l                              RMU 1: line select 3l
sim/radios/rmu1/ls_4l                              RMU 1: line select 4l
sim/radios/rmu1/ls_5l                              RMU 1: line select 5l
sim/radios/rmu1/ls_6l                              RMU 1: line select 6l
sim/radios/rmu1/ls_1r                              RMU 1: line select 1r
sim/radios/rmu1/ls_2r                              RMU 1: line select 2r
sim/radios/rmu1/ls_3r                              RMU 1: line select 3r
sim/radios/rmu1/ls_4r                              RMU 1: line select 4r
sim/radios/rmu1/ls_5r                              RMU 1: line select 5r
sim/radios/rmu1/ls_6r                              RMU 1: line select 6r
sim/radios/rmu1/12                                 RMU 1: 1/2
sim/radios/rmu1/ID                                 RMU 1: ID
sim/radios/rmu1/DME                                RMU 1: DME
sim/radios/rmu1/popup                              RMU 1: Popup
sim/radios/rmu1/popout                             RMU 1: Pop out window
sim/radios/rmu2/coarse_down                        RMU 2: tune coarse down.
sim/radios/rmu2/coarse_up                          RMU 2: tune coarse up.
sim/radios/rmu2/fine_down                          RMU 2: tune fine down.
sim/radios/rmu2/fine_up                            RMU 2: tune fine up.
sim/radios/rmu2/ls_1l                              RMU 2: line select 1l
sim/radios/rmu2/ls_2l                              RMU 2: line select 2l
sim/radios/rmu2/ls_3l                              RMU 2: line select 3l
sim/radios/rmu2/ls_4l                              RMU 2: line select 4l
sim/radios/rmu2/ls_5l                              RMU 2: line select 5l
sim/radios/rmu2/ls_6l                              RMU 2: line select 6l
sim/radios/rmu2/ls_1r                              RMU 2: line select 1r
sim/radios/rmu2/ls_2r                              RMU 2: line select 2r
sim/radios/rmu2/ls_3r                              RMU 2: line select 3r
sim/radios/rmu2/ls_4r                              RMU 2: line select 4r
sim/radios/rmu2/ls_5r                              RMU 2: line select 5r
sim/radios/rmu2/ls_6r                              RMU 2: line select 6r
sim/radios/rmu2/12                                 RMU 2: 1/2
sim/radios/rmu2/ID                                 RMU 2: ID
sim/radios/rmu2/DME                                RMU 2: DME
sim/radios/rmu2/popup                              RMU 2: Popup
sim/radios/rmu2/popout                             RMU 2: Pop out window
sim/instruments/ECAM_mode_up                       ECAM mode up.
sim/instruments/ECAM_mode_down                     ECAM mode down.
sim/instruments/map_zoom_in                        Zoom in EFIS map.
sim/instruments/map_zoom_out                       Zoom out EFIS map.
sim/instruments/EFIS_wxr                           EFIS map weather.
sim/instruments/EFIS_tcas                          EFIS map TCAS.
sim/instruments/EFIS_apt                           EFIS map airport.
sim/instruments/EFIS_fix                           EFIS map fix.
sim/instruments/EFIS_vor                           EFIS map VOR.
sim/instruments/EFIS_ndb                           EFIS map NDB.
sim/instruments/EFIS_terr                          EFIS map terrain.
sim/instruments/EFIS_mode_up                       EFIS mode up (APP/VOR/MAP/PLN)
sim/instruments/EFIS_mode_dn                       EFIS mode down (PLN/MAP/VOR/APP)
sim/instruments/EFIS_mfd_map                       EFIS MFD map toggle (MAP<->PLN)
sim/instruments/EFIS_arc_full                      EFIS HSI toggle arc/full
sim/instruments/EFIS_tcas_window                   EFIS map TCAS window.
sim/instruments/EFIS_wxr_pfd                       EFIS HSI arc with weather on PFD.
sim/instruments/map_copilot_zoom_in                Zoom in copilot EFIS map.
sim/instruments/map_copilot_zoom_out               Zoom out copilot EFIS map.
sim/instruments/EFIS_copilot_wxr                   EFIS copilot map weather.
sim/instruments/EFIS_copilot_tcas                  EFIS copilot map TCAS.
sim/instruments/EFIS_copilot_apt                   EFIS copilot map airport.
sim/instruments/EFIS_copilot_fix                   EFIS copilot map fix.
sim/instruments/EFIS_copilot_vor                   EFIS copilot map VOR.
sim/instruments/EFIS_copilot_ndb                   EFIS copilot map NDB.
sim/instruments/EFIS_copilot_terr                  EFIS copilot map terrain.
sim/instruments/EFIS_copilot_mode_up               EFIS copilot mode up (APP/VOR/MAP/PLN)
sim/instruments/EFIS_copilot_mode_dn               EFIS copilot mode down (PLN/MAP/VOR/APP)
sim/instruments/EFIS_copilot_mfd_map               EFIS copilot MFD map toggle (MAP<->PLN)
sim/instruments/EFIS_copilot_arc_full              EFIS copilot HSI toggle arc/full
sim/instruments/EFIS_copilot_tcas_window           EFIS copilot map TCAS window.
sim/instruments/EFIS_copilot_wxr_pfd               EFIS HSI arc with weather on copilot PFD.
sim/instruments/PFD_copilot_popup                  EFIS copilot PFD popup.
sim/instruments/EFIS_copilot_back                  EFIS copilot MFD back.
sim/instruments/EFIS_copilot_softkey_1             EFIS copilot MFD softkey 1.
sim/instruments/EFIS_copilot_softkey_2             EFIS copilot MFD softkey 2.
sim/instruments/EFIS_copilot_softkey_3             EFIS copilot MFD softkey 3.
sim/instruments/EFIS_copilot_softkey_4             EFIS copilot MFD softkey 4.
sim/instruments/EFIS_copilot_softkey_5             EFIS copilot MFD softkey 5.
sim/instruments/EFIS_copilot_popup                 EFIS copilot MFD popup.
sim/instruments/EFIS_copilot_pan_up                EFIS copilot pan up.
sim/instruments/EFIS_copilot_pan_down              EFIS copilot pan down.
sim/instruments/EFIS_copilot_pan_left              EFIS copilot pan left.
sim/instruments/EFIS_copilot_pan_right             EFIS copilot pan right.
sim/instruments/EFIS_copilot_skp                   EFIS copilot skip.
sim/instruments/EFIS_copilot_rcl                   EFIS copilot recall.
sim/instruments/center_control_left                Center MFD control left.
sim/instruments/center_control_right               Center MFD control right.
sim/instruments/EFIS_center_back                   EFIS center MFD back.
sim/instruments/EFIS_center_softkey_1              EFIS center MFD softkey 1.
sim/instruments/EFIS_center_softkey_2              EFIS center MFD softkey 2.
sim/instruments/EFIS_center_softkey_3              EFIS center MFD softkey 3.
sim/instruments/EFIS_center_softkey_4              EFIS center MFD softkey 4.
sim/instruments/EFIS_center_softkey_5              EFIS center MFD softkey 5.
sim/instruments/EFIS_center_popup                  EFIS center popup.
sim/instruments/PFD_pilot_popup                    EFIS pilot PFD popup.
sim/instruments/EFIS_back                          EFIS pilot MFD back.
sim/instruments/EFIS_softkey_1                     EFIS pilot MFD softkey 1.
sim/instruments/EFIS_softkey_2                     EFIS pilot MFD softkey 2.
sim/instruments/EFIS_softkey_3                     EFIS pilot MFD softkey 3.
sim/instruments/EFIS_softkey_4                     EFIS pilot MFD softkey 4.
sim/instruments/EFIS_softkey_5                     EFIS pilot MFD softkey 5.
sim/instruments/EFIS_pilot_popup                   EFIS pilot MFD popup.
sim/instruments/EFIS_pan_up                        EFIS pilot pan up.
sim/instruments/EFIS_pan_down                      EFIS pilot pan down.
sim/instruments/EFIS_pan_left                      EFIS pilot pan left.
sim/instruments/EFIS_pan_right                     EFIS pilot pan right.
sim/instruments/EFIS_skp                           EFIS pilot skip.
sim/instruments/EFIS_rcl                           EFIS pilot recall.
sim/instruments/EFIS_1_pilot_sel_dn                EFIS 1 brg pointer pilot down (ADF/off/VOR)
sim/instruments/EFIS_1_pilot_sel_up                EFIS 1 brg pointer pilot up (ADF/off/VOR)
sim/instruments/EFIS_1_pilot_sel_off               EFIS 1 brg pointer pilot OFF
sim/instruments/EFIS_1_pilot_sel_vor               EFIS 1 brg pointer pilot VOR
sim/instruments/EFIS_1_pilot_sel_adf               EFIS 1 brg pointer pilot ADF
sim/instruments/EFIS_1_pilot_sel_fms               EFIS 1 brg pointer pilot FMS
sim/instruments/EFIS_1_copilot_sel_dn              EFIS 1 brg pointer copilot down (ADF/off/VOR)
sim/instruments/EFIS_1_copilot_sel_up              EFIS 1 brg pointer copilot up (ADF/off/VOR)
sim/instruments/EFIS_1_copilot_sel_off             EFIS 1 brg pointer copilot OFF
sim/instruments/EFIS_1_copilot_sel_vor             EFIS 1 brg pointer copilot VOR
sim/instruments/EFIS_1_copilot_sel_adf             EFIS 1 brg pointer copilot ADF
sim/instruments/EFIS_1_copilot_sel_fms             EFIS 1 brg pointer copilot FMS
sim/instruments/EFIS_2_pilot_sel_dn                EFIS 2 selection pilot down (ADF/off/VOR)
sim/instruments/EFIS_2_pilot_sel_up                EFIS 2 selection pilot up (ADF/off/VOR)
sim/instruments/EFIS_2_pilot_sel_off               EFIS 2 brg pointer pilot OFF
sim/instruments/EFIS_2_pilot_sel_vor               EFIS 2 brg pointer pilot VOR
sim/instruments/EFIS_2_pilot_sel_adf               EFIS 2 brg pointer pilot ADF
sim/instruments/EFIS_2_pilot_sel_fms               EFIS 2 brg pointer pilot FMS
sim/instruments/EFIS_2_copilot_sel_dn              EFIS 2 selection copilot down (ADF/off/VOR)
sim/instruments/EFIS_2_copilot_sel_up              EFIS 2 selection copilot up (ADF/off/VOR)
sim/instruments/EFIS_2_copilot_sel_off             EFIS 2 brg pointer copilot OFF
sim/instruments/EFIS_2_copilot_sel_vor             EFIS 2 brg pointer copilot VOR
sim/instruments/EFIS_2_copilot_sel_adf             EFIS 2 brg pointer copilot ADF
sim/instruments/EFIS_2_copilot_sel_fms             EFIS 2 brg pointer copilot FMS
sim/radios/obs1_down                               OBS 1 down.
sim/radios/obs1_up                                 OBS 1 up.
sim/radios/obs2_down                               OBS 2 down.
sim/radios/obs2_up                                 OBS 2 up.
sim/radios/obs_HSI_down                            OBS HSI down.
sim/radios/obs_HSI_up                              OBS HSI up.
sim/radios/obs_HSI_direct                          OBS HSI direct course.
sim/radios/adf1_card_down                          ADF card 1 down.
sim/radios/adf1_card_up                            ADF card 1 up.
sim/radios/adf2_card_down                          ADF card 2 down.
sim/radios/adf2_card_up                            ADF card 2 up.
sim/radios/copilot_obs1_down                       Copilot OBS 1 down.
sim/radios/copilot_obs1_up                         Copilot OBS 1 up.
sim/radios/copilot_obs2_down                       Copilot OBS 2 down.
sim/radios/copilot_obs2_up                         Copilot OBS 2 up.
sim/radios/copilot_obs_HSI_down                    Copilot OBS HSI down.
sim/radios/copilot_obs_HSI_up                      Copilot OBS HSI up.
sim/radios/copilot_obs_HSI_direct                  Copilot OBS HSI direct course.
sim/radios/copilot_adf1_card_down                  Copilot ADF card 1 down.
sim/radios/copilot_adf1_card_up                    Copilot ADF card 1 up.
sim/radios/copilot_adf2_card_down                  Copilot ADF card 2 down.
sim/radios/copilot_adf2_card_up                    Copilot ADF card 2 up.
sim/autopilot/hsi_select_down                      HSI select down one.
sim/autopilot/hsi_select_up                        HSI select up one.
sim/autopilot/hsi_select_nav_1                     HSI shows NAV 1.
sim/autopilot/hsi_select_nav_2                     HSI shows NAV 2.
sim/autopilot/hsi_toggle_nav                       HSI toggles between NAV 1 and NAV 2.
sim/autopilot/hsi_select_gps                       HSI shows GPS.
sim/autopilot/hsi_select_gps2                      HSI shows GPS2.
sim/autopilot/hsi_toggle_gps                       HSI toggles between GPS 1 and GPS 2.
sim/autopilot/hsi_toggle_preview                   HSI preview toggle on/off.
sim/autopilot/hsi_select_copilot_down              HSI select down one, copilot.
sim/autopilot/hsi_select_copilot_up                HSI select up one, copilot.
sim/autopilot/hsi_select_copilot_nav_1             HSI shows NAV 1, copilot.
sim/autopilot/hsi_select_copilot_nav_2             HSI shows NAV 2, copilot.
sim/autopilot/hsi_toggle_copilot_nav               HSI toggles between NAV 2 and NAV 1, copilot.
sim/autopilot/hsi_select_copilot_gps               HSI shows GPS, copilot.
sim/autopilot/hsi_select_copilot_gps2              HSI shows GPS2, copilot.
sim/autopilot/hsi_toggle_copilot_gps               HSI toggles between GPS 2 and GPS 1, copilot.
sim/autopilot/hsi_toggle_copilot_preview           HSI preview toggle on/off, copilot.
sim/flight_controls/carrier_ILS                    Set the radios for the carrier ILS.
sim/autopilot/source_01                            Change autopilot instrument source, 0 or 1
sim/autopilot/fdir_on                              Flight director on.
sim/autopilot/fdir_toggle                          Flight director toggle.
sim/autopilot/servos_on                            Servos on.
sim/autopilot/servos_toggle                        Servos toggle.
sim/autopilot/fdir_servos_down_one                 Flight director down (on/FDIR/off).
sim/autopilot/fdir_servos_up_one                   Flight director up (off/FDIR/on).
sim/autopilot/fdir_command_bars_on                 Flight director command bars on.
sim/autopilot/fdir_command_bars_off                Flight director command bars off.
sim/autopilot/fdir_command_bars_toggle             Flight director command bars toggle.
sim/autopilot/servos_fdir_off                      Disco servos, flt dir.
sim/autopilot/servos_fdir_yawd_off                 Disco servos, flt dir, yaw damp.
sim/autopilot/servos_fdir_yawd_trim_off            Disco servos, flt dir, yaw damp, trim.
sim/autopilot/control_wheel_steer                  Control wheel steering mode.
sim/autopilot/fdir2_on                             Flight director 2 on.
sim/autopilot/fdir2_toggle                         Flight director 2 toggle.
sim/autopilot/servos2_on                           Servos 2 on.
sim/autopilot/servos2_toggle                       Servos 2 toggle.
sim/autopilot/fdir2_servos_down_one                Flight director 2 down (on/FDIR/off).
sim/autopilot/fdir2_servos_up_one                  Flight director 2 up (off/FDIR/on).
sim/autopilot/fdir2_command_bars_on                Flight director 2 command bars on.
sim/autopilot/fdir2_command_bars_off               Flight director 2 command bars off.
sim/autopilot/fdir2_command_bars_toggle            Flight director 2 command bars toggle.
sim/autopilot/servos_fdir2_off                     Disco servos 2, flt dir 2.
sim/autopilot/CWSA                                 CWS A - Control wheel steering mode AP A.
sim/autopilot/CWSB                                 CWS B - Control wheel steering mode AP B.
sim/autopilot/servos3_on                           Servos 3 on.
sim/autopilot/servos3_toggle                       Servos 3 toggle.
sim/autopilot/servos_fdir3_off                     Disco servos 3.
sim/autopilot/servos_off_any                       Disco servos, which ever side is active.
sim/autopilot/ap_disc_trim_interrupt               Disconnect autopilot and interrupt pitch trim servo.
sim/autopilot/servos_yawd_off_any                  Disco servos and yaw damp, any side.
sim/autopilot/servos_yawd_trim_off_any             Disco servos, yaw damp and trim any side.
sim/autopilot/electric_master_off                  Autopilot electric master switch off.
sim/autopilot/electric_master_on                   Autopilot electric master switch on.
sim/autopilot/electric_master_toggle               Autopilot electric master switch toggle.
sim/autopilot/priority_pb_left                     Stick priority: Left
sim/autopilot/priority_pb_right                    Stick priority: Right
sim/autopilot/autothrottle_on                      Autopilot auto-throttle speed-hold on.
sim/autopilot/autothrottle_off                     Autopilot auto-throttle all modes off, remain armed.
sim/autopilot/autothrottle_toggle                  Autopilot auto-throttle speed toggle.
sim/autopilot/autothrottle_n1epr                   Autopilot auto-throttle EPR/N1 hold on.
sim/autopilot/autothrottle_n1epr_toggle            Autopilot auto-throttle EPR/N1 hold toggle.
sim/autopilot/autothrottle_arm                     Autopilot auto-throttle arm.
sim/autopilot/autothrottle_retard                  Autopilot auto-throttle retard to flight idle.
sim/autopilot/autothrottle_hard_off                Autopilot auto-throttle off and dis-arm.
sim/autopilot/heading                              Autopilot heading-select.
sim/autopilot/track                                Autopilot track.
sim/autopilot/heading_hold                         Autopilot heading-hold.
sim/autopilot/wing_leveler                         Autopilot wing-level / roll hold.
sim/autopilot/rate_hold                            Autopilot wing-level / rate hold.
sim/autopilot/attitude                             Autopilot roll + pitch hold.
sim/autopilot/hdg_nav                              Autopilot heading select and NAV arm.
sim/autopilot/NAV                                  Autopilot VOR/LOC arm.
sim/autopilot/vertical_speed                       Autopilot vertical speed, at current VSI.
sim/autopilot/fpa                                  Autopilot flight path angle, current FPA.
sim/autopilot/alt_vs                               Autopilot vertical speed, at current VSI, arm ALT.
sim/autopilot/vertical_speed_pre_sel               Autopilot vertical speed, at pre-sel VSI.
sim/autopilot/pitch_sync                           Autopilot pitch-sync.
sim/autopilot/level_change                         Autopilot level change.
sim/autopilot/altitude_hold                        Autopilot altitude select or hold.
sim/autopilot/terrain_following                    Autopilot terrain-mode following.
sim/autopilot/take_off_go_around                   Autopilot take-off go-around.
sim/autopilot/reentry                              Autopilot re-entry.
sim/autopilot/glide_slope                          Autopilot glideslope.
sim/autopilot/vnav                                 Autopilot VNAV PTH for G1000.
sim/autopilot/vnav_spd                             Autopilot VNAV SPD (not G1000).
sim/autopilot/gpss                                 Autopilot GPS Steering.
sim/autopilot/climb                                Autopilot Climb Speed Ref.
sim/autopilot/descend                              Autopilot Descend.
sim/autopilot/trkfpa                               Autopilot TRK/FPA vs HDG/VS toggle.
sim/autopilot/alt_intv                             Autopilot VNAV altitude intervention.
sim/autopilot/spd_intv                             Autopilot VNAV speed intervention.
sim/autopilot/airspeed_sync                        Autopilot airspeed sync.
sim/autopilot/heading_sync                         Autopilot heading sync.
sim/autopilot/heading_sync_pilot                   Autopilot heading sync pilot bug.
sim/autopilot/heading_sync_copilot                 Autopilot heading sync copilot bug.
sim/autopilot/vertical_speed_sync                  Autopilot VVI sync.
sim/autopilot/altitude_sync                        Autopilot altitude sync.
sim/autopilot/heading_down                         Autopilot heading down.
sim/autopilot/heading_up                           Autopilot heading up.
sim/autopilot/heading_copilot_down                 Autopilot heading copilot down.
sim/autopilot/heading_copilot_up      
Download .txt
gitextract_sbtft37o/

├── .gitignore
├── .isort.cfg
├── .pre-commit-config.yaml
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── addons/
│   └── addons.README
├── io_xplane2blender/
│   ├── __init__.py
│   ├── resources/
│   │   ├── Commands.txt
│   │   ├── DataRefs.txt
│   │   └── lights.txt
│   ├── tests/
│   │   ├── __init__.py
│   │   ├── animation_file_mappings.py
│   │   └── test_creation_helpers.py
│   ├── xplane_config.py
│   ├── xplane_constants.py
│   ├── xplane_export.py
│   ├── xplane_helpers.py
│   ├── xplane_ops.py
│   ├── xplane_ops_dev.py
│   ├── xplane_props.py
│   ├── xplane_types/
│   │   ├── __init__.py
│   │   ├── xplane_attribute.py
│   │   ├── xplane_attributes.py
│   │   ├── xplane_bone.py
│   │   ├── xplane_commands.py
│   │   ├── xplane_empty.py
│   │   ├── xplane_face.py
│   │   ├── xplane_file.py
│   │   ├── xplane_header.py
│   │   ├── xplane_keyframe.py
│   │   ├── xplane_keyframe_collection.py
│   │   ├── xplane_light.py
│   │   ├── xplane_manipulator.py
│   │   ├── xplane_material.py
│   │   ├── xplane_material_utils.py
│   │   ├── xplane_mesh.py
│   │   ├── xplane_object.py
│   │   ├── xplane_primitive.py
│   │   └── xplane_vlights.py
│   ├── xplane_ui.py
│   ├── xplane_updater.py
│   └── xplane_utils/
│       ├── __init__.py
│       ├── xplane_commands_txt_parser.py
│       ├── xplane_datarefs_txt_parser.py
│       ├── xplane_effective_gloss.py
│       ├── xplane_lights_txt_parser.py
│       ├── xplane_updater_helpers.py
│       └── xplane_wiper_gradient.py
├── mkbuild.py
├── pylintrc
├── pyproject.toml
├── requirements.txt
├── run.py
├── tests/
│   ├── addon/
│   │   ├── addon.test.py
│   │   ├── fixtures/
│   │   │   ├── test_multiple_export_works_anim_bone.obj
│   │   │   ├── test_multiple_export_works_simple.obj
│   │   │   └── test_multiple_export_works_uv_map.obj
│   │   ├── multiple_export_works.test.blend
│   │   └── multiple_export_works.test.py
│   ├── animation/
│   │   ├── TestCase1.test.blend
│   │   ├── TestCase1.test.py
│   │   ├── TestCase2.test.blend
│   │   ├── TestCase2.test.py
│   │   ├── TestCase3.test.blend
│   │   ├── TestCase3.test.py
│   │   ├── TestCase4.test.blend
│   │   ├── TestCase4.test.py
│   │   ├── TestCase5_nested_sets.test.blend
│   │   ├── TestCase5_nested_sets.test.py
│   │   ├── TestCase6_scaling_rot.test.blend
│   │   ├── TestCase6_scaling_rot.test.py
│   │   ├── TestCase7_scaling_rotloc.test.blend
│   │   ├── TestCase7_scaling_rotloc.test.py
│   │   ├── TestCase8_bone_optimization.test.blend
│   │   ├── TestCase8_bone_optimization.test.py
│   │   ├── TestCase9_keyframe_loops.test.blend
│   │   ├── TestCase9_keyframe_loops.test.py
│   │   ├── armature_bone_block_parent_relationships.test.blend
│   │   ├── armature_bone_block_parent_relationships.test.py
│   │   ├── armature_nested_offset.test.blend
│   │   ├── armature_nested_offset.test.py
│   │   ├── axis.test.blend
│   │   ├── axis.test.disabled.py
│   │   ├── bone_animations.test.blend
│   │   ├── bone_animations.test.py
│   │   ├── fixtures/
│   │   │   ├── TestCase1/
│   │   │   │   ├── armature_rotation_arbitrary_axis.obj
│   │   │   │   ├── armature_rotation_twoaxis_3keys.obj
│   │   │   │   ├── armature_translation_arbitrary.obj
│   │   │   │   ├── object_rotation_X_axis_angle.obj
│   │   │   │   ├── object_rotation_X_quaternion.obj
│   │   │   │   ├── object_rotation_X_xyz_euler.obj
│   │   │   │   ├── object_rotation_X_xzy_euler.obj
│   │   │   │   ├── object_rotation_X_yxz_euler.obj
│   │   │   │   ├── object_rotation_X_yzx_euler.obj
│   │   │   │   ├── object_rotation_X_zxy_euler.obj
│   │   │   │   ├── object_rotation_X_zyx_euler.obj
│   │   │   │   ├── object_rotation_Y_axis_angle.obj
│   │   │   │   ├── object_rotation_Y_quaternion.obj
│   │   │   │   ├── object_rotation_Y_xyz_euler.obj
│   │   │   │   ├── object_rotation_Y_xzy_euler.obj
│   │   │   │   ├── object_rotation_Y_yxz_euler.obj
│   │   │   │   ├── object_rotation_Y_yzx_euler.obj
│   │   │   │   ├── object_rotation_Y_zxy_euler.obj
│   │   │   │   ├── object_rotation_Y_zyx_euler.obj
│   │   │   │   └── object_translation.obj
│   │   │   ├── TestCase2/
│   │   │   │   ├── object_rotation_Z_axis_angle.obj
│   │   │   │   ├── object_rotation_Z_quaternion.obj
│   │   │   │   ├── object_rotation_Z_xyz_euler.obj
│   │   │   │   ├── object_rotation_Z_xzy_euler.obj
│   │   │   │   ├── object_rotation_Z_yxz_euler.obj
│   │   │   │   ├── object_rotation_Z_yzx_euler.obj
│   │   │   │   ├── object_rotation_Z_zxy_euler.obj
│   │   │   │   ├── object_rotation_Z_zyx_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_axis_angle.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_quaternion.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_xyz_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_xzy_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_yxz_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_yzx_euler.obj
│   │   │   │   ├── object_rotation_arbitrary_3key_zxy_euler.obj
│   │   │   │   └── object_rotation_arbitrary_3key_zyx_euler.obj
│   │   │   ├── TestCase3/
│   │   │   │   ├── object_rotation_translation_arbitrary_axis_angle.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_quaternion.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_xyz_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_xzy_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_yxz_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_yzx_euler.obj
│   │   │   │   ├── object_rotation_translation_arbitrary_zxy_euler.obj
│   │   │   │   └── object_rotation_translation_arbitrary_zyx_euler.obj
│   │   │   ├── TestCase4/
│   │   │   │   ├── armature_combined_rotation_translation.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_axis_angle.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_quaternion.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_xyz_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_xzy_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_yxz_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_yzx_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_zxy_euler.obj
│   │   │   │   ├── object_orthagonal_2axis_3keys_zyx_euler.obj
│   │   │   │   ├── object_orthogonal_3keys.obj
│   │   │   │   └── object_rotation_translation_orthogonal.obj
│   │   │   ├── TestCase5_nested_sets/
│   │   │   │   ├── armature_locrot_nested_armature_locrot.obj
│   │   │   │   ├── armature_locrot_whereOBJ_trans_rotation_arbitrary.obj
│   │   │   │   ├── armature_locrot_whereOBJ_trans_rotation_single_axis.obj
│   │   │   │   ├── armature_rot_nested_armature_rot.obj
│   │   │   │   ├── armature_rot_nested_armature_rot_3keys.obj
│   │   │   │   ├── mega_nested_mega.obj
│   │   │   │   ├── object_trans_arbitrary_nested_object_trans_arbitrary.obj
│   │   │   │   └── object_trans_ortho_nested_object_trans_ortho.obj
│   │   │   ├── TestCase6_scaling_rot/
│   │   │   │   └── TestCase6_scaling_rot.obj
│   │   │   ├── TestCase7_scaling_rotloc/
│   │   │   │   └── TestCase7_scaling_rotloc.obj
│   │   │   ├── TestCase8_bone_optimization/
│   │   │   │   ├── TestCase8_loc.obj
│   │   │   │   ├── TestCase8_rot.obj
│   │   │   │   ├── TestCase8_rot_loc.obj
│   │   │   │   └── TestCase8_static.obj
│   │   │   ├── TestCase9_keyframe_loops/
│   │   │   │   ├── TestCase9_loop_arm.obj
│   │   │   │   ├── TestCase9_loop_arm_bone.obj
│   │   │   │   ├── TestCase9_loop_bone.obj
│   │   │   │   └── TestCase9_loop_none.obj
│   │   │   ├── armature_bone_block_parent_relationships/
│   │   │   │   ├── test_Armature_arm_anim_bone_anim.obj
│   │   │   │   ├── test_Armature_arm_anim_bone_no_anim.obj
│   │   │   │   ├── test_Armature_arm_no_anim_bone_anim.obj
│   │   │   │   ├── test_Armature_arm_no_anim_bone_no_anim.obj
│   │   │   │   └── test_no_parent.obj
│   │   │   ├── nested_bones/
│   │   │   │   ├── test_1_Armature_child_bones_one_leaf_mesh.obj
│   │   │   │   ├── test_2_Armature_child_bones_mesh_on_each.obj
│   │   │   │   ├── test_3_Armature_multiple_arms_one_leaf_mesh.obj
│   │   │   │   └── test_4_Armature_multiple_arms_child_bones_on_each.obj
│   │   │   ├── test_01_datablock_datablock.obj
│   │   │   ├── test_02_bone_datablock.obj
│   │   │   ├── test_03_bone_bone_connected_offset_translation.obj
│   │   │   ├── test_05_bone_bone_connected_no_offset_translation.obj
│   │   │   ├── test_bone_animations.obj
│   │   │   ├── test_kf_points_1_ignored_2_used.obj
│   │   │   ├── test_multiple_armatures.obj
│   │   │   ├── test_nested_armatures.obj
│   │   │   ├── test_nested_bone_animations.obj
│   │   │   ├── test_no_drop_dup_trans_rot_aa.obj
│   │   │   ├── test_no_drop_dup_trans_rot_euler.obj
│   │   │   ├── test_no_drop_dup_trans_rot_quat.obj
│   │   │   ├── test_show_hide_hide_near_0.obj
│   │   │   ├── test_show_hide_show_near_0.obj
│   │   │   ├── test_single_bone_initial_rotation.obj
│   │   │   └── transform_stack/
│   │   │       ├── test_transform_stack_cube_loc_w_parent.obj
│   │   │       ├── test_transform_stack_cube_loc_wo_parent.obj
│   │   │       ├── test_transform_stack_cube_locrot_w_parent.obj
│   │   │       ├── test_transform_stack_cube_locrot_wo_parent.obj
│   │   │       ├── test_transform_stack_cube_none_w_parent.obj
│   │   │       ├── test_transform_stack_cube_none_wo_parent.obj
│   │   │       ├── test_transform_stack_cube_rot_w_parent.obj
│   │   │       └── test_transform_stack_cube_rot_wo_parent.obj
│   │   ├── list.rtf
│   │   ├── multiple_armatures.test.blend
│   │   ├── multiple_armatures.test.py
│   │   ├── nested_armatures.test.blend
│   │   ├── nested_armatures.test.py
│   │   ├── nested_bones.test.blend
│   │   ├── nested_bones.test.py
│   │   ├── no_dropped_dup_keys.test.blend
│   │   ├── no_dropped_dup_keys.test.py
│   │   ├── one_kf_point_fcurve_ignored.test.blend
│   │   ├── one_kf_point_fcurve_ignored.test.py
│   │   ├── show_hide_anim_types.test.blend
│   │   ├── show_hide_anim_types.test.py
│   │   ├── single_bone_initial_rotation.test.blend
│   │   ├── single_bone_initial_rotation.test.py
│   │   ├── transform_stack_w_parent.test.blend
│   │   ├── transform_stack_w_parent.test.py
│   │   ├── transform_stack_wo_parent.test.blend
│   │   └── transform_stack_wo_parent.test.py
│   ├── build_system/
│   │   ├── build_number_obj_footer.test.py
│   │   ├── build_number_prop.test.py
│   │   ├── build_number_updater.test.py
│   │   ├── build_number_verstruct.test.py
│   │   └── originals/
│   │       ├── v3_20_14.blend
│   │       ├── v3_3_13.blend
│   │       └── v3_4_0-beta_4.blend
│   ├── features/
│   │   ├── cockpit_features/
│   │   │   ├── cockpit_device.test.blend
│   │   │   ├── cockpit_device.test.py
│   │   │   ├── cockpit_lit_only.test.blend
│   │   │   ├── cockpit_lit_only.test.py
│   │   │   ├── cockpit_material.test.blend
│   │   │   ├── cockpit_material.test.py
│   │   │   ├── cockpit_panel_luminance.test.blend
│   │   │   ├── cockpit_panel_luminance.test.py
│   │   │   ├── cockpit_regions.test.blend
│   │   │   ├── cockpit_regions.test.py
│   │   │   ├── fixtures/
│   │   │   │   ├── test_01_cockpit_lit_only_exported.obj
│   │   │   │   ├── test_03_cockpit_lit_only_no_export_regions.obj
│   │   │   │   ├── test_04_cockpit_lit_no_export_panel_mode_default.obj
│   │   │   │   ├── test_05_cockpit_lit_only_no_export_wrong_version.obj
│   │   │   │   ├── test_06_cockpit_lit_only_exported.obj
│   │   │   │   ├── test_07_cockpit_lit_only_resets.obj
│   │   │   │   ├── test_aircraft_material.obj
│   │   │   │   ├── test_cockpit_material.obj
│   │   │   │   ├── test_cockpit_regions_used_aircraft.obj
│   │   │   │   ├── test_cockpit_regions_used_cockpit.obj
│   │   │   │   ├── test_device_mix_with_panel.obj
│   │   │   │   ├── test_device_passing_auto_adjust_off.obj
│   │   │   │   ├── test_device_passing_bitfield.obj
│   │   │   │   ├── test_device_passing_lighting_channel.obj
│   │   │   │   ├── test_device_passing_names.obj
│   │   │   │   ├── test_hud_glass_and_reset.obj
│   │   │   │   ├── test_hud_glass_panel_device.obj
│   │   │   │   ├── test_hud_glass_panel_emissive.obj
│   │   │   │   ├── test_hud_glass_panel_regions.obj
│   │   │   │   ├── test_hud_glass_panel_texture.obj
│   │   │   │   ├── test_panel_luminance_cockpit.obj
│   │   │   │   ├── test_panel_luminance_cockpit_device.obj
│   │   │   │   ├── test_panel_luminance_cockpit_lit_only.obj
│   │   │   │   └── test_panel_luminance_cockpit_regions.obj
│   │   │   ├── hud_glass.test.blend
│   │   │   └── hud_glass.test.py
│   │   ├── draped.test.blend
│   │   ├── draped.test.py
│   │   ├── draw_enabled.test.blend
│   │   ├── draw_enabled.test.py
│   │   ├── export_control_methods.test.blend
│   │   ├── export_control_methods.test.py
│   │   ├── export_control_methods_lights.test.blend
│   │   ├── export_control_methods_lights.test.py
│   │   ├── export_control_methods_object.test.blend
│   │   ├── export_control_methods_object.test.py
│   │   ├── export_path_dir/
│   │   │   ├── Custom Scenery/
│   │   │   │   └── Kansas City/
│   │   │   │       └── cars/
│   │   │   │           ├── fixtures/
│   │   │   │           │   └── honda_1.obj
│   │   │   │           ├── honda_1.test.blend
│   │   │   │           └── honda_1.test.py
│   │   │   └── default_scenery/
│   │   │       ├── Kansas City/
│   │   │       │   ├── cars/
│   │   │       │   │   ├── fixtures/
│   │   │       │   │   │   └── honda_2.obj
│   │   │       │   │   ├── honda_2.test.blend
│   │   │       │   │   └── honda_2.test.py
│   │   │       │   ├── fixtures/
│   │   │       │   │   └── honda_3.obj
│   │   │       │   ├── honda_3.test.blend
│   │   │       │   └── honda_3.test.py
│   │   │       ├── four/
│   │   │       │   └── levels/
│   │   │       │       └── deep/
│   │   │       │           └── cars/
│   │   │       │               ├── fixtures/
│   │   │       │               │   └── honda_5.obj
│   │   │       │               ├── honda_5.test.blend
│   │   │       │               └── honda_5.test.py
│   │   │       ├── honda_4.test.blend
│   │   │       └── honda_4.test.py
│   │   ├── fixtures/
│   │   │   ├── test_01_ll1.obj
│   │   │   ├── test_02_no_ll_ll1.obj
│   │   │   ├── test_03_ll1_ll1.obj
│   │   │   ├── test_04_ll1_ll2.obj
│   │   │   ├── test_05_ll1_no_ll_ll2.obj
│   │   │   ├── test_06_ll1_no_ll.obj
│   │   │   ├── test_1_NotVisibleByItself_Exp.obj
│   │   │   ├── test_1_NotVisibleByItself_Exp_anim.obj
│   │   │   ├── test_2_VisibleParent_Exp.obj
│   │   │   ├── test_2_VisibleParent_Exp_anim.obj
│   │   │   ├── test_3_SplitParentVisibleChildren_Exp_anim.obj
│   │   │   ├── test_3_VisibleButSplitParent_Exp_anim.obj
│   │   │   ├── test_4_NotVisibleButSplitParent_Exp_anim.obj
│   │   │   ├── test_4_SplitParentNotVisibleChildren_Exp_anim.obj
│   │   │   ├── test_DisabledInViewport.obj
│   │   │   ├── test_HiddenInViewport.obj
│   │   │   ├── test_conditions.obj
│   │   │   ├── test_cube_empty_cube.obj
│   │   │   ├── test_custom_anim_prop.obj
│   │   │   ├── test_custom_header_props.obj
│   │   │   ├── test_custom_prop.obj
│   │   │   ├── test_draped.obj
│   │   │   ├── test_draw_enabled.obj
│   │   │   ├── test_export_in_layers_disabled.obj
│   │   │   ├── test_export_in_layers_enabled.obj
│   │   │   ├── test_exports_mixed_ll_correctly.obj
│   │   │   ├── test_exports_photometric_correctly.obj
│   │   │   ├── test_exports_with_photometric_ignored.obj
│   │   │   ├── test_float_prec_manip_props_wysiwyg.obj
│   │   │   ├── test_float_prec_start_end_height_cmp.obj
│   │   │   ├── test_group_instances.obj
│   │   │   ├── test_has_global_luminance_6000.obj
│   │   │   ├── test_instanced.obj
│   │   │   ├── test_instanced_header_empty_cube.obj
│   │   │   ├── test_lights.obj
│   │   │   ├── test_lod_layer_1.obj
│   │   │   ├── test_lod_layer_2.obj
│   │   │   ├── test_lod_layer_3.obj
│   │   │   ├── test_lod_layer_4.obj
│   │   │   ├── test_lod_layer_5.obj
│   │   │   ├── test_manipulators.obj
│   │   │   ├── test_materials.obj
│   │   │   ├── test_optimize.obj
│   │   │   ├── test_pass_1_validations_not_applied.obj
│   │   │   ├── test_pass_2a_additive_ordered.obj
│   │   │   ├── test_pass_3a_selective_ordered.obj
│   │   │   ├── test_pass_4a_additive_not_mixed.obj
│   │   │   ├── test_pass_4b_selective_not_mixed.obj
│   │   │   ├── test_pass_5a_selective_far_near_equal.obj
│   │   │   ├── test_pass_6a_selective_1st_near_is_0.obj
│   │   │   ├── test_pass_7a_1st_lod_is_1st_command.obj
│   │   │   ├── test_passing_magnets.obj
│   │   │   ├── test_show_hide_animation.obj
│   │   │   ├── test_texture_composition_nm.obj
│   │   │   ├── test_texture_composition_nm_spec.obj
│   │   │   ├── test_texture_composition_spec.obj
│   │   │   ├── test_texture_coords.obj
│   │   │   └── texture_composition.obj
│   │   ├── float_prop_follows_precision.test.blend
│   │   ├── float_prop_follows_precision.test.py
│   │   ├── global_luminance.test.blend
│   │   ├── global_luminance.test.py
│   │   ├── instanced.test.blend
│   │   ├── instanced.test.py
│   │   ├── instant_export_from_menu.test.blend
│   │   ├── instant_export_from_menu.test.py
│   │   ├── light_level_photometric.test.blend
│   │   ├── light_level_photometric.test.py
│   │   ├── light_level_reset.test.blend
│   │   ├── light_level_reset.test.py
│   │   ├── lights.test.blend
│   │   ├── lights.test.py
│   │   ├── lod.test.blend
│   │   ├── lod.test.py
│   │   ├── lod_overrides/
│   │   │   ├── fixtures/
│   │   │   │   ├── test_AllIgnored.obj
│   │   │   │   ├── test_ExportableObjectOverride_object_special_1_2_3.obj
│   │   │   │   ├── test_IncludeAndIgnore.obj
│   │   │   │   ├── test_LooksPastUnconvertedXPlaneObjects.obj
│   │   │   │   ├── test_NestedDuplicateOverrides.obj
│   │   │   │   ├── test_NoOverridesTakesParents.obj
│   │   │   │   ├── test_NonSequentialOverrides.obj
│   │   │   │   ├── test_OverridesAppliedToAllChildren.obj
│   │   │   │   └── test_OverridesCombined.obj
│   │   │   ├── lod_overrides_applied.test.blend
│   │   │   └── lod_overrides_applied.test.py
│   │   ├── lod_validation.test.blend
│   │   ├── lod_validation.test.py
│   │   ├── magnets.test.blend
│   │   ├── magnets.test.py
│   │   ├── manipulators.test.blend
│   │   ├── manipulators.test.py
│   │   ├── materials.test.blend
│   │   ├── materials.test.py
│   │   ├── no_material.test.blend
│   │   ├── no_material.test.py
│   │   ├── passive_resetting.test.blend
│   │   ├── passive_resetting.test.py
│   │   ├── rain/
│   │   │   ├── bake_wiper_texture.test.blend
│   │   │   ├── bake_wiper_texture.test.py
│   │   │   ├── bake_wiper_texture_bad_rgb_only.test.blend
│   │   │   ├── bake_wiper_texture_bad_rgb_only.test.py
│   │   │   ├── fixtures/
│   │   │   │   ├── test_inst_scenery_no_options.obj
│   │   │   │   ├── test_missing_paths_no_options.obj
│   │   │   │   ├── test_none_enabled_no_options.obj
│   │   │   │   ├── test_scenery_no_options.obj
│   │   │   │   ├── test_thermal_options.obj
│   │   │   │   └── test_wiper_options.obj
│   │   │   ├── rain_header_props.test.blend
│   │   │   └── rain_header_props.test.py
│   │   ├── various.test.blend
│   │   └── various.test.py
│   ├── lights/
│   │   ├── aim_non_spot_light.test.blend
│   │   ├── aim_non_spot_light.test.py
│   │   ├── anim_vs_non_anim_vs_is_nested.test.blend
│   │   ├── anim_vs_non_anim_vs_is_nested.test.py
│   │   ├── automatic_detect/
│   │   │   ├── automatic_ignore_old_lights.test.blend
│   │   │   ├── automatic_ignore_old_lights.test.py
│   │   │   ├── automatic_is_omni_light.test.blend
│   │   │   ├── automatic_is_omni_light.test.py
│   │   │   ├── automatic_light_properties.test.blend
│   │   │   ├── automatic_light_properties.test.py
│   │   │   ├── automatic_parent_and_self_animated.test.blend
│   │   │   ├── automatic_parent_and_self_animated.test.py
│   │   │   ├── automatic_point_vs_spot.test.blend
│   │   │   ├── automatic_point_vs_spot.test.py
│   │   │   ├── automatic_special_animation_cases.test.blend
│   │   │   ├── automatic_special_animation_cases.test.py
│   │   │   ├── automatic_width_recalc.test.blend
│   │   │   ├── automatic_width_recalc.test.py
│   │   │   └── fixtures/
│   │   │       ├── test_automatic_light_properties.obj
│   │   │       ├── test_automatic_special_animation_cases.obj
│   │   │       ├── test_automatic_special_animation_dir_mag_calc_cases.obj
│   │   │       ├── test_non_omni_lights.obj
│   │   │       ├── test_omni_lights.obj
│   │   │       ├── test_parent_animated_lights.obj
│   │   │       ├── test_self_animated_lights.obj
│   │   │       ├── test_spot_params_bb.obj
│   │   │       ├── test_spot_params_bb_rotated_90.obj
│   │   │       └── test_spot_params_bb_rotated_off_axis.obj
│   │   ├── custom_light_rgb_override.test.blend
│   │   ├── custom_light_rgb_override.test.py
│   │   ├── fixtures/
│   │   │   ├── light_spill_custom/
│   │   │   │   ├── test_light_spill_custom_dref.obj
│   │   │   │   ├── test_light_spill_custom_dxyz.obj
│   │   │   │   ├── test_light_spill_custom_rgb.obj
│   │   │   │   ├── test_light_spill_custom_semi_point.obj
│   │   │   │   ├── test_light_spill_custom_semi_spot.obj
│   │   │   │   ├── test_light_spill_custom_size.obj
│   │   │   │   └── test_light_spill_custom_xyz.obj
│   │   │   ├── test_Custom_Spot_RGB_values_disabled.obj
│   │   │   ├── test_Custom_Spot_RGB_values_enabled.obj
│   │   │   ├── test_aim_non_spot_light.obj
│   │   │   ├── test_anim_vs_non_anim_vs_has_parent.obj
│   │   │   ├── test_bb_and_sp_both.obj
│   │   │   ├── test_bb_omni_param.obj
│   │   │   ├── test_dir_and_sp.obj
│   │   │   ├── test_named.obj
│   │   │   ├── test_point_vs_is_omni_vs_is_optimized.obj
│   │   │   ├── test_rotation_delta_autocorrect.obj
│   │   │   ├── test_spot_vs_is_omni_vs_is_optimized.obj
│   │   │   ├── test_sw_light_callback_used.obj
│   │   │   ├── test_unused_param_pass.obj
│   │   │   ├── test_v12_lights_have_candela.obj
│   │   │   ├── test_v12_lights_have_candela_bb_omni.obj
│   │   │   ├── test_v12_lights_have_candela_bb_sp.obj
│   │   │   ├── test_v12_lights_have_candela_pm_omni.obj
│   │   │   └── test_v12_lights_have_candela_pm_sp.obj
│   │   ├── known_vs_unknown_named_vs_param.test.blend
│   │   ├── known_vs_unknown_named_vs_param.test.py
│   │   ├── light_spill_custom_attributes.test.blend
│   │   ├── light_spill_custom_attributes.test.py
│   │   ├── light_type_vs_is_omni_vs_is_optimized.test.blend
│   │   ├── light_type_vs_is_omni_vs_is_optimized.test.py
│   │   ├── omni_dir_param_name_bb_sp_both.test.blend
│   │   ├── omni_dir_param_name_bb_sp_both.test.py
│   │   ├── param_light_params.test.blend
│   │   ├── param_light_params.test.py
│   │   ├── rotation_delta_autocorrect.test.blend
│   │   ├── rotation_delta_autocorrect.test.py
│   │   ├── sw_light_callback_applied.test.blend
│   │   ├── sw_light_callback_applied.test.py
│   │   ├── v12_lights_cd_export.test.blend
│   │   └── v12_lights_cd_export.test.py
│   ├── materials/
│   │   ├── blend_glass/
│   │   │   ├── blend_glass.test.blend
│   │   │   ├── blend_glass.test.py
│   │   │   └── fixtures/
│   │   │       ├── test_air_glass_off_expect_no_dir.obj
│   │   │       ├── test_air_glass_on_expect_dir.obj
│   │   │       ├── test_ckpt_glass_off_expect_no_dir.obj
│   │   │       ├── test_ckpt_glass_on_expect_dir.obj
│   │   │       ├── test_panel_glass_off_expect_no_dir.obj
│   │   │       └── test_panel_glass_on_expect_dir.obj
│   │   ├── fixtures/
│   │   │   ├── TEXTURE_MAP_normal.obj
│   │   │   ├── TEXTURE_MAP_normal_gloss.obj
│   │   │   ├── TEXTURE_MAP_normal_material_gloss.obj
│   │   │   ├── test_AOTC_2Mats_PNL.obj
│   │   │   ├── test_COTC_2Mat_Hard.obj
│   │   │   ├── test_COTC_2Mat_Manip_SolidCamera.obj
│   │   │   ├── test_IST_2Mats_SameSPEC_DifSURF.obj
│   │   │   ├── test_IST_2Mats_wDraping.obj
│   │   │   ├── test_SSO_2compatibleMats_Draped.obj
│   │   │   ├── test_SSO_3compatibleMats.obj
│   │   │   └── test_blend_ratio.obj
│   │   ├── normal_metalness/
│   │   │   ├── fixtures/
│   │   │   │   ├── draped_spec_scenery/
│   │   │   │   │   ├── test_norm_met_off_one_drap_inst.obj
│   │   │   │   │   ├── test_norm_met_off_one_drap_scen.obj
│   │   │   │   │   ├── test_norm_met_on_one_drap_inst.obj
│   │   │   │   │   ├── test_norm_met_on_one_drap_scen.obj
│   │   │   │   │   ├── test_norm_met_on_two_drap_inst.obj
│   │   │   │   │   └── test_norm_met_on_two_drap_scen.obj
│   │   │   │   ├── norm_met_basic/
│   │   │   │   │   ├── test_D_metal_NON_D_metal.obj
│   │   │   │   │   ├── test_D_metal_NON_D_non_metal.obj
│   │   │   │   │   ├── test_D_metal_NON_D_none.obj
│   │   │   │   │   ├── test_D_non_metal_NON_D_metal.obj
│   │   │   │   │   ├── test_D_non_metal_NON_D_non_metal.obj
│   │   │   │   │   ├── test_D_non_metal_NON_D_none.obj
│   │   │   │   │   ├── test_D_none_NON_D_metal.obj
│   │   │   │   │   ├── test_D_none_NON_D_non_metal.obj
│   │   │   │   │   └── test_D_none_NON_D_none.obj
│   │   │   │   └── norm_met_spec/
│   │   │   │       ├── test_none_1_mat_inst.obj
│   │   │   │       ├── test_none_1_mat_scen.obj
│   │   │   │       ├── test_none_2_mat_scen.obj
│   │   │   │       ├── test_norm_1_mat_inst.obj
│   │   │   │       ├── test_norm_1_mat_scen.obj
│   │   │   │       ├── test_norm_2_mat_inst.obj
│   │   │   │       └── test_norm_2_mat_scen.obj
│   │   │   ├── norm_met_basic.test.blend
│   │   │   ├── norm_met_basic.test.py
│   │   │   ├── norm_met_draped_spec_scenery.test.blend
│   │   │   ├── norm_met_draped_spec_scenery.test.py
│   │   │   ├── norm_met_spec.test.blend
│   │   │   ├── norm_met_spec.test.py
│   │   │   ├── norm_met_validations.test.blend
│   │   │   └── norm_met_validations.test.py
│   │   ├── objects/
│   │   │   ├── AOTC_2Mat_ManipRJECT.test.blend
│   │   │   ├── AOTC_2Mat_ManipRJECT.test.py
│   │   │   ├── AOTC_2Mats_PNL.test.blend
│   │   │   ├── AOTC_2Mats_PNL.test.py
│   │   │   ├── AOTC_Draped_RJECT.test.blend
│   │   │   ├── AOTC_Draped_RJECT.test.py
│   │   │   ├── COTC_2Mat_Draped.test.blend
│   │   │   ├── COTC_2Mat_Draped.test.py
│   │   │   ├── COTC_2Mat_Hard.test.blend
│   │   │   ├── COTC_2Mat_Hard.test.py
│   │   │   ├── COTC_2Mat_Manip_SolidCamera.test.blend
│   │   │   ├── COTC_2Mat_Manip_SolidCamera.test.py
│   │   │   ├── IST_2Mats_SameSPEC_DifSURF.test.blend
│   │   │   ├── IST_2Mats_SameSPEC_DifSURF.test.py
│   │   │   ├── IST_2Mats_VarSPEC.test.blend
│   │   │   ├── IST_2Mats_VarSPEC.test.py
│   │   │   ├── IST_2Mats_wDraping.test.blend
│   │   │   ├── IST_2Mats_wDraping.test.py
│   │   │   ├── SSO_2compatibleMats_Draped.test.blend
│   │   │   ├── SSO_2compatibleMats_Draped.test.py
│   │   │   ├── SSO_2incompatibleATTRs_Draped.test.blend
│   │   │   ├── SSO_2incompatibleATTRs_Draped.test.py
│   │   │   ├── SSO_2incompatibleDraped_Mats.test.blend
│   │   │   ├── SSO_2incompatibleDraped_Mats.test.py
│   │   │   ├── SSO_illegal_usePanel_tex.test.blend
│   │   │   ├── SSO_illegal_usePanel_tex.test.py
│   │   │   ├── TEXTURE_MAP.test.blend
│   │   │   ├── TEXTURE_MAP.test.py
│   │   │   ├── blend_ratio.test.blend
│   │   │   └── blend_ratio.test.py
│   │   └── shadow/
│   │       ├── fixtures/
│   │       │   ├── test_01_all_cast_local_off.obj
│   │       │   ├── test_01_all_cast_shadows_off.obj
│   │       │   ├── test_02_all_cast_local_on.obj
│   │       │   ├── test_02_all_cast_shadows_on.obj
│   │       │   ├── test_03_1_cast_shadows_off.obj
│   │       │   ├── test_03a_1_cast_local_off.obj
│   │       │   ├── test_03b_1_or_more_cast_local_off_on_off.obj
│   │       │   ├── test_04_1_or_more_but_not_all_off.obj
│   │       │   └── test_05_all_cast_shadows_off_non_scenery.obj
│   │       ├── shadow_no_shadow.test.blend
│   │       ├── shadow_no_shadow.test.py
│   │       ├── shadow_no_shadow_non_scenery_type.test.blend
│   │       └── shadow_no_shadow_non_scenery_type.test.py
│   ├── monkey/
│   │   ├── fixtures/
│   │   │   └── test_monkey.obj
│   │   ├── monkey.test.blend
│   │   └── monkey.test.py
│   ├── object/
│   │   ├── axis_detent_ranges.test.blend
│   │   ├── axis_detent_ranges.test.py
│   │   ├── bone_configurations_drag_axis.test.py
│   │   ├── bone_configurations_drag_axis_detent.test.py
│   │   ├── bone_configurations_drag_rotate.test.py
│   │   ├── bone_configurations_drag_rotate_detent.test.py
│   │   ├── bone_configurations_drag_rotate_detent_arm.test.py
│   │   ├── bone_configurations_drag_rotate_detent_bone.test.py
│   │   ├── drag_axis_autodetect.test.blend
│   │   ├── drag_axis_autodetect.test.py
│   │   ├── drag_axis_w_detents.test.blend
│   │   ├── drag_axis_w_detents.test.py
│   │   ├── drag_rotate_obj_lib.blend
│   │   ├── drag_rotate_start_end_the_same.test.blend
│   │   ├── drag_rotate_start_end_the_same.test.py
│   │   ├── fixtures/
│   │   │   ├── test_01_2_rot_kf_0_detents_0_manip_kf.obj
│   │   │   ├── test_01_known_good_test.obj
│   │   │   ├── test_01_mesh_ll_overload_emits.obj
│   │   │   ├── test_02_3_rot_kf_0_detents_1_manip_kf.obj
│   │   │   ├── test_02_mesh_ll_overload_emits_not_material.obj
│   │   │   ├── test_03_4_rot_kf_0_detents_2_manip_kf.obj
│   │   │   ├── test_03_mesh_ll_overload_weird_cases.obj
│   │   │   ├── test_04_5_rot_kf_3_detents_3_manip_kf.obj
│   │   │   ├── test_04_known_good_drag_axis_autodetect.obj
│   │   │   ├── test_04_mesh_ll_overload_emits_not_material_nts.obj
│   │   │   ├── test_05_6_rot_kf_4_detents_1_pit_4_manip_kf.obj
│   │   │   ├── test_07_counter_clockwise_also_allowed.obj
│   │   │   ├── test_08_neg_15_15_degree_animation_allowed.obj
│   │   │   ├── test_08_no_detents_also_allowed.obj
│   │   │   ├── test_08_pit_at_start_and_end.obj
│   │   │   ├── test_10_known_good_drag_axis_w_detents.obj
│   │   │   ├── test_10_known_good_translation_bone.obj
│   │   │   ├── test_11_known_good_rotation_bone.obj
│   │   │   ├── test_drag_rotate_start_end_the_same.obj
│   │   │   ├── test_override_autodetect_datarefs_drag_axis.obj
│   │   │   ├── test_override_autodetect_datarefs_drag_axis_w_detents.obj
│   │   │   ├── test_override_autodetect_datarefs_drag_rotate.obj
│   │   │   └── test_override_autodetect_datarefs_drag_rotate_dentent.obj
│   │   ├── manip_keyframe.test.blend
│   │   ├── manip_keyframe.test.py
│   │   ├── object_ll_override.test.blend
│   │   ├── object_ll_override.test.py
│   │   ├── override_autodetect_datarefs.test.blend
│   │   ├── override_autodetect_datarefs.test.py
│   │   ├── rotation_bone_rules.test.blend
│   │   ├── rotation_bone_rules.test.py
│   │   ├── translation_bone_rules.test.blend
│   │   └── translation_bone_rules.test.py
│   ├── particles/
│   │   ├── fixtures/
│   │   │   ├── particle_test.pss
│   │   │   ├── test_02_Empty_index_enabled.obj
│   │   │   ├── test_03_Empty_index_disabled.obj
│   │   │   ├── test_file_pss_and_real.obj
│   │   │   ├── test_file_pss_but_not_real.obj
│   │   │   ├── test_particle_emitter_animated.obj
│   │   │   ├── test_particle_emitter_static.obj
│   │   │   └── test_particle_non_colocated_anim.obj
│   │   ├── particle_name_and_index.test.blend
│   │   ├── particle_name_and_index.test.py
│   │   ├── particle_non_colocated_anim.test.blend
│   │   ├── particle_non_colocated_anim.test.py
│   │   ├── particle_pss_file.test.blend
│   │   ├── particle_pss_file.test.py
│   │   ├── particle_static_anim.test.blend
│   │   └── particle_static_anim.test.py
│   ├── template.py
│   ├── template.test.blend
│   ├── updater/
│   │   ├── blend_mode_blend_glass_update.test.blend
│   │   ├── blend_mode_blend_glass_update.test.py
│   │   ├── custom_startup/
│   │   │   └── no_xp2b.blend
│   │   ├── in_place_update.test.blend
│   │   ├── in_place_update.test.py
│   │   ├── layers_to_collections.test.blend
│   │   ├── layers_to_collections.test.py
│   │   ├── move_global_mat_props.test.blend
│   │   ├── move_global_mat_props.test.py
│   │   ├── part_of_panel_to_cockpit_feature.test.blend
│   │   ├── part_of_panel_to_cockpit_feature.test.py
│   │   ├── pre_4_0_0_alpha_6.test.blend
│   │   ├── pre_4_0_0_alpha_6.test.py
│   │   ├── pre_4_1_0_beta_1_regions_changes_panel_mode.test.blend
│   │   ├── pre_4_1_0_beta_1_regions_changes_panel_mode.test.py
│   │   ├── pre_automatic_default_lights_as_default.test.blend
│   │   ├── pre_automatic_default_lights_as_default.test.py
│   │   ├── shadow/
│   │   │   ├── fixtures/
│   │   │   │   ├── test_01_aircraft_force_global_shadows.obj
│   │   │   │   ├── test_01_aircraft_force_global_shadows_root.obj
│   │   │   │   ├── test_01_global_off_layers.obj
│   │   │   │   ├── test_01_global_off_root_objects.obj
│   │   │   │   ├── test_02_cockpit_force_global_shadows.obj
│   │   │   │   ├── test_02_cockpit_force_global_shadows_root.obj
│   │   │   │   ├── test_02_global_on_layers.obj
│   │   │   │   └── test_02_global_on_root_objects.obj
│   │   │   ├── shadow_local_off_non_scenery.test.blend
│   │   │   ├── shadow_local_off_non_scenery.test.py
│   │   │   ├── update_cast_shadow.test.blend
│   │   │   ├── update_cast_shadow.test.py
│   │   │   ├── update_cast_shadow_table_output.test.blend
│   │   │   └── update_cast_shadow_table_output.test.py
│   │   ├── synchronize_version_numbers.test.py
│   │   └── updater.test.disabled.py
│   ├── utils/
│   │   ├── command_parser.test.py
│   │   ├── dataref_parser.test.py
│   │   ├── lights_column_name.test.py
│   │   ├── lights_parser.test.py
│   │   ├── test_commands_txts/
│   │   │   ├── Commands_desc_line_has_trailing_whitespace.txt
│   │   │   ├── Commands_empty_file.txt
│   │   │   ├── Commands_empty_line.txt
│   │   │   ├── Commands_line_starts_with_whitespace.txt
│   │   │   ├── Commands_no_desc_line_has_trailing_whitespace.txt
│   │   │   └── Commands_no_description_passes.txt
│   │   ├── test_datarefs_txts/
│   │   │   ├── DataRefs_empty.txt
│   │   │   ├── DataRefs_header_completely_wrong.txt
│   │   │   ├── DataRefs_header_file_version_is_one.txt
│   │   │   ├── DataRefs_header_xp_version_is_wrong.txt
│   │   │   ├── DataRefs_invalid_array_type.txt
│   │   │   ├── DataRefs_invalid_array_type_index_wrong.txt
│   │   │   ├── DataRefs_invalid_iswritable.txt
│   │   │   ├── DataRefs_invalid_type_wrong.txt
│   │   │   ├── DataRefs_line_starts_with_whitespace.txt
│   │   │   ├── DataRefs_no_blank_second_line.txt
│   │   │   └── DataRefs_no_datarefs_in_it.txt
│   │   └── test_lights_txts/
│   │       ├── arguments_sorted_well.txt
│   │       ├── lights_comments_ignored.txt
│   │       └── lights_empty.txt
│   ├── xplane_export.test.disabled.py
│   └── xplane_types/
│       ├── xplane_bone/
│       │   ├── collect_animations.test.blend
│       │   ├── collect_animations.test.py
│       │   ├── object_matrices.test.blend
│       │   └── object_matrices.test.py
│       └── xplane_file/
│           ├── bad_nested_exportable_roots.test.blend
│           ├── bad_nested_exportable_roots.test.py
│           ├── create_from_layers.test.blend
│           ├── create_from_layers.test.py
│           ├── create_from_root_objects.test.blend
│           ├── create_from_root_objects.test.py
│           ├── current_scene_exclusive_collection.test.blend
│           ├── current_scene_exclusive_collection.test.py
│           ├── fixtures/
│           │   ├── root_object_offsets.test_a.obj
│           │   ├── root_object_offsets.test_b.obj
│           │   ├── root_object_offsets.test_c.obj
│           │   ├── root_object_offsets_animated_a.obj
│           │   ├── root_object_offsets_animated_b.obj
│           │   ├── root_object_offsets_animated_c.obj
│           │   ├── test_ExportableCollection.obj
│           │   ├── test_ExportableObject.obj
│           │   ├── test_ExportableObjectArmatureCases.obj
│           │   ├── test_Exportable_child_out_of_scene_warn_and_ignore.obj
│           │   ├── test_Exportable_no_convert_makes_bones.obj
│           │   ├── test_Exportable_out_of_collection_no_error.obj
│           │   ├── test_current_scene_exclusive_collection.obj
│           │   ├── test_export_root_objects_1.obj
│           │   ├── test_export_root_objects_2.obj
│           │   ├── test_one_of_each_animation_type.obj
│           │   ├── test_resource_paths_cases_1_4.obj
│           │   ├── test_resource_paths_cases_5_and_10.obj
│           │   ├── test_write_static.obj
│           │   ├── test_write_trans_anim.obj
│           │   └── test_write_transrot_anim.obj
│           ├── frame_set_optimization.test.blend
│           ├── frame_set_optimization.test.py
│           ├── performance_spheres_no_anim.test.blend
│           ├── performance_spheres_no_anim.test.disabled.py
│           ├── recursive_collection_collects.test.blend
│           ├── recursive_collection_collects.test.py
│           ├── recursive_collection_edge_cases.test.blend
│           ├── recursive_collection_edge_cases.test.py
│           ├── resource_path_new_file.test.py
│           ├── resource_paths.test.blend
│           ├── resource_paths.test.py
│           ├── root_object_offsets.test.blend
│           ├── root_object_offsets.test.py
│           ├── root_object_offsets_animated.test.blend
│           ├── root_object_offsets_animated.test.py
│           ├── sort_by_weight.test.blend
│           ├── sort_by_weight.test.py
│           ├── split_parent/
│           │   ├── fixtures/
│           │   │   ├── test_1_LandingGearCollection.obj
│           │   │   ├── test_1_WheelCollection.obj
│           │   │   ├── test_1_reuse_of_parent.obj
│           │   │   ├── test_1_reuse_of_parent_out_of_order.obj
│           │   │   ├── test_2_LandingGearExpObject.obj
│           │   │   ├── test_2_WheelCollection.obj
│           │   │   ├── test_2_reuse_of_parent.obj
│           │   │   ├── test_3_ButtonCollection.obj
│           │   │   ├── test_4_ExportableCollection.obj
│           │   │   ├── test_AAA_animation.obj
│           │   │   ├── test_AAA_mesh.obj
│           │   │   ├── test_AAn_animation.obj
│           │   │   ├── test_AAn_mesh.obj
│           │   │   ├── test_AnA_animation.obj
│           │   │   ├── test_AnA_mesh.obj
│           │   │   ├── test_Ann_animation.obj
│           │   │   ├── test_Ann_mesh.obj
│           │   │   ├── test_Collection_not_really_animated.obj
│           │   │   ├── test_ExpCollWalkToColl.obj
│           │   │   ├── test_ExpCollWalkToExpColl.obj
│           │   │   ├── test_ExpCollWalkToMasterCollection.obj
│           │   │   ├── test_ExpCollWalkToRoot.obj
│           │   │   ├── test_ExpCollection_not_really_animated.obj
│           │   │   ├── test_HasManip_Exp.obj
│           │   │   ├── test_HasVisuals_Exp.obj
│           │   │   ├── test_ParentOutOfScene.obj
│           │   │   ├── test_SnakeOut_Exp.obj
│           │   │   ├── test_nAA_animation.obj
│           │   │   ├── test_nAA_mesh.obj
│           │   │   ├── test_nAn_animation.obj
│           │   │   ├── test_nAn_mesh.obj
│           │   │   ├── test_new_branch_index_0.obj
│           │   │   ├── test_new_branch_index_1.obj
│           │   │   ├── test_new_branch_index_2.obj
│           │   │   ├── test_new_branch_index_last.obj
│           │   │   ├── test_nnA_animation.obj
│           │   │   └── test_nnA_mesh.obj
│           │   ├── parent_out_of_collection_find_anim.test.blend
│           │   ├── parent_out_of_collection_find_anim.test.py
│           │   ├── parent_out_of_collection_index_preserved.test.blend
│           │   ├── parent_out_of_collection_index_preserved.test.py
│           │   ├── parent_out_of_collection_no_attr_share.test.blend
│           │   ├── parent_out_of_collection_no_attr_share.test.py
│           │   ├── parent_out_of_collection_not_anim.test.blend
│           │   ├── parent_out_of_collection_not_anim.test.py
│           │   ├── parent_out_of_collection_snake_out.test.blend
│           │   ├── parent_out_of_collection_snake_out.test.py
│           │   ├── parent_out_of_collection_will_walk_up.test.blend
│           │   ├── parent_out_of_collection_will_walk_up.test.py
│           │   ├── parent_out_of_collection_workflows.test.blend
│           │   └── parent_out_of_collection_workflows.test.py
│           ├── write.test.blend
│           └── write.test.py
└── tests.py
Download .txt
SYMBOL INDEX (1444 symbols across 204 files)

FILE: io_xplane2blender/__init__.py
  function menu_func (line 64) | def menu_func(self, context):
  function register (line 72) | def register():
  function unregister (line 83) | def unregister():

FILE: io_xplane2blender/tests/__init__.py
  class TemporarilyMakeRootExportable (line 36) | class TemporarilyMakeRootExportable:
    method __init__ (line 43) | def __init__(
    method __enter__ (line 85) | def __enter__(self):
    method __exit__ (line 88) | def __exit__(self, exc_type, value, traceback):
  class XPlaneTestCase (line 104) | class XPlaneTestCase(unittest.TestCase):
    method setUp (line 105) | def setUp(self, useLogger=True):
    method useLogger (line 115) | def useLogger(self):
    method assertImagesEqual (line 126) | def assertImagesEqual(
    method assertMatricesEqual (line 189) | def assertMatricesEqual(self, mA, mB, tolerance=FLOAT_TOLERANCE):
    method assertObjectsInXPlaneFile (line 194) | def assertObjectsInXPlaneFile(self, xplaneFile, objectNames):
    method assertXPlaneBoneTreeEqual (line 209) | def assertXPlaneBoneTreeEqual(
    method assertFloatsEqual (line 247) | def assertFloatsEqual(self, a: float, b: float, tolerance: float = FLO...
    method assertFloatVectorsEqual (line 257) | def assertFloatVectorsEqual(
    method parseFileToLines (line 264) | def parseFileToLines(self, data: str) -> List[Tuple[Union[float, str]]]:
    method assertFilesEqual (line 289) | def assertFilesEqual(
    method assertFileOutputEqualsFixture (line 415) | def assertFileOutputEqualsFixture(
    method assertFileTmpEqualsFixture (line 436) | def assertFileTmpEqualsFixture(
    method assertLoggerErrors (line 451) | def assertLoggerErrors(self, expected_logger_errors: int) -> None:
    method assertLayerExportEqualsFixture (line 475) | def assertLayerExportEqualsFixture(
    method assertExportableRootExportEqualsFixture (line 498) | def assertExportableRootExportEqualsFixture(
    method assertAttributesEqualDict (line 519) | def assertAttributesEqualDict(
    method createXPlaneFileFromPotentialRoot (line 573) | def createXPlaneFileFromPotentialRoot(
    method exportLayer (line 596) | def exportLayer(
    method exportExportableRoot (line 609) | def exportExportableRoot(
    method get_XPlane2Blender_log_content (line 657) | def get_XPlane2Blender_log_content() -> List[str]:
  class XPlaneAnimationTestCase (line 665) | class XPlaneAnimationTestCase(XPlaneTestCase):
    method setUp (line 666) | def setUp(self):
    method exportAnimationTestCase (line 669) | def exportAnimationTestCase(self, name, dest):
    method runAnimationTestCase (line 695) | def runAnimationTestCase(self, name, __dirname__):
  function get_source_folder (line 725) | def get_source_folder() -> pathlib.Path:
  function get_project_folder (line 730) | def get_project_folder() -> pathlib.Path:
  function get_tests_folder (line 735) | def get_tests_folder() -> pathlib.Path:
  function get_tmp_folder (line 739) | def get_tmp_folder() -> pathlib.Path:
  function make_fixture_path (line 743) | def make_fixture_path(dirname, filename, sub_dir=""):
  function runTestCases (line 747) | def runTestCases(testCases):

FILE: io_xplane2blender/tests/test_creation_helpers.py
  class AxisDetentRangeInfo (line 63) | class AxisDetentRangeInfo:
    method __init__ (line 64) | def __init__(self, start: float, end: float, height: float):
  class BoneInfo (line 70) | class BoneInfo:
    method __init__ (line 71) | def __init__(self, name: str, head: Vector, tail: Vector, parent: str):
  class DatablockInfo (line 84) | class DatablockInfo:
    method __init__ (line 96) | def __init__(
  class KeyframeInfo (line 147) | class KeyframeInfo:
    method __init__ (line 148) | def __init__(
    method __str__ (line 180) | def __str__(self) -> str:
  class ParentInfo (line 256) | class ParentInfo:
    method __init__ (line 257) | def __init__(
  function create_bone (line 276) | def create_bone(armature: bpy.types.Object, bone_info: BoneInfo) -> str:
  function create_datablock_collection (line 303) | def create_datablock_collection(
  function create_datablock_armature (line 334) | def create_datablock_armature(
  function create_datablock_empty (line 403) | def create_datablock_empty(
  function create_datablock_mesh (line 430) | def create_datablock_mesh(
  function create_datablock_light (line 489) | def create_datablock_light(
  function create_datablock_image_from_disk (line 516) | def create_datablock_image_from_disk(filepath: Union[Path, str]) -> bpy....
  function create_material (line 530) | def create_material(material_name: str):
  function create_material_default (line 537) | def create_material_default() -> bpy.types.Material:
  function create_scene (line 544) | def create_scene(name: str) -> bpy.types.Scene:
  function get_image (line 552) | def get_image(name: str) -> Optional[bpy.types.Image]:
  function get_light (line 559) | def get_light(name: str) -> Optional[bpy.types.Light]:
  function get_material (line 567) | def get_material(material_name: str) -> Optional[bpy.types.Material]:
  function get_material_default (line 571) | def get_material_default() -> bpy.types.Material:
  function delete_all_collections (line 579) | def delete_all_collections():
  function delete_all_images (line 584) | def delete_all_images():
  function delete_all_lights (line 590) | def delete_all_lights():
  function delete_all_materials (line 596) | def delete_all_materials():
  function delete_all_objects (line 602) | def delete_all_objects():
  function delete_all_other_scenes (line 608) | def delete_all_other_scenes():
  function delete_all_text_files (line 617) | def delete_all_text_files():
  function delete_everything (line 623) | def delete_everything():
  function lookup_potential_root_from_name (line 636) | def lookup_potential_root_from_name(name: str) -> PotentialRoot:
  function make_root_exportable (line 654) | def make_root_exportable(
  function make_root_unexportable (line 688) | def make_root_unexportable(
  function set_animation_data (line 719) | def set_animation_data(
  function set_collection (line 840) | def set_collection(
  function set_manipulator_settings (line 861) | def set_manipulator_settings(
  function set_material (line 902) | def set_material(
  function set_parent (line 919) | def set_parent(blender_object: bpy.types.Object, parent_info: ParentInfo...
  function set_rotation (line 934) | def set_rotation(
  function set_xplane_layer (line 954) | def set_xplane_layer(
  class TemporaryStartFile (line 969) | class TemporaryStartFile:
    method __init__ (line 970) | def __init__(self, temporary_startup_path: str):
    method __enter__ (line 973) | def __enter__(self) -> None:
    method __exit__ (line 986) | def __exit__(self, type, value, traceback) -> None:
  function create_initial_test_setup (line 994) | def create_initial_test_setup():

FILE: io_xplane2blender/xplane_config.py
  function getDebug (line 28) | def getDebug() -> bool:
  function setDebug (line 32) | def setDebug(debug: bool) -> None:

FILE: io_xplane2blender/xplane_constants.py
  function _get_addon_folder (line 16) | def _get_addon_folder() -> str:
  function _get_resources_folder (line 25) | def _get_resources_folder() -> str:
  function _get_all_manipulators (line 171) | def _get_all_manipulators():

FILE: io_xplane2blender/xplane_export.py
  class XPLANE_MT_xplane_export_log (line 19) | class XPLANE_MT_xplane_export_log(bpy.types.Menu):
    method draw (line 23) | def draw(self, context):
  function showLogDialog (line 30) | def showLogDialog():
  class EXPORT_OT_ExportXPlane (line 35) | class EXPORT_OT_ExportXPlane(bpy.types.Operator, ExportHelper):
    method execute (line 68) | def execute(self, context):
    method _startLogging (line 146) | def _startLogging(self):
    method _endLogging (line 176) | def _endLogging(self):
    method _writeXPlaneFile (line 180) | def _writeXPlaneFile(
    method invoke (line 239) | def invoke(self, context, event):

FILE: io_xplane2blender/xplane_helpers.py
  class UnwriteableXPlaneType (line 38) | class UnwriteableXPlaneType(ValueError):
  function floatToStr (line 42) | def floatToStr(n: float) -> str:
  function resolveBlenderPath (line 58) | def resolveBlenderPath(path: str) -> str:
  function effective_normal_metalness (line 67) | def effective_normal_metalness(xp_file: "xplane_file.XPlaneFile") -> bool:
  function effective_normal_metalness_draped (line 74) | def effective_normal_metalness_draped(xp_file: "xplane_file.XPlaneFile")...
  function is_path_decal_lib (line 81) | def is_path_decal_lib(file_path: str) -> bool:
  function get_plugin_resources_folder (line 85) | def get_plugin_resources_folder() -> str:
  function get_potential_objects_in_exportable_root (line 89) | def get_potential_objects_in_exportable_root(
  function get_rotation_from_rotatable (line 109) | def get_rotation_from_rotatable(
  function get_collections_in_scene (line 123) | def get_collections_in_scene(scene: bpy.types.Scene) -> List[bpy.types.C...
  function get_layer_collections_in_view_layer (line 141) | def get_layer_collections_in_view_layer(
  function get_exportable_roots_in_scene (line 162) | def get_exportable_roots_in_scene(
  function is_visible_in_viewport (line 174) | def is_visible_in_viewport(
  function is_exportable_root (line 187) | def is_exportable_root(
  function round_vec (line 200) | def round_vec(v: mathutils.Vector, ndigits: int) -> mathutils.Vector:
  function vec_b_to_x (line 204) | def vec_b_to_x(v) -> mathutils.Vector:
  function vec_x_to_b (line 208) | def vec_x_to_b(v) -> mathutils.Vector:
  class VerStruct (line 214) | class VerStruct:
    method __init__ (line 215) | def __init__(
    method __eq__ (line 231) | def __eq__(self, other):
    method __ne__ (line 239) | def __ne__(self, other):
    method __lt__ (line 242) | def __lt__(self, other):
    method __gt__ (line 255) | def __gt__(self, other):
    method __ge__ (line 268) | def __ge__(self, other):
    method __le__ (line 271) | def __le__(self, other):
    method __repr__ (line 275) | def __repr__(self):
    method __str__ (line 285) | def __str__(self):
    method is_valid (line 301) | def is_valid(self) -> bool:
    method add_to_version_history (line 382) | def add_to_version_history(
    method current (line 413) | def current():
    method from_version_entry (line 423) | def from_version_entry(
    method make_new_build_number (line 435) | def make_new_build_number():
    method parse_version (line 451) | def parse_version(version_str: str) -> Optional["VerStruct"]:
  class XPlaneLogger (line 533) | class XPlaneLogger:
    method __init__ (line 534) | def __init__(self):
    method addTransport (line 538) | def addTransport(
    method clear (line 543) | def clear(self):
    method clearTransports (line 547) | def clearTransports(self):
    method clearMessages (line 550) | def clearMessages(self):
    method messagesToString (line 553) | def messagesToString(self, messages=None):
    method log (line 569) | def log(self, messageType, message, context=None):
    method error (line 578) | def error(self, message, context=None):
    method warn (line 581) | def warn(self, message, context=None):
    method info (line 584) | def info(self, message, context=None):
    method success (line 587) | def success(self, message, context=None):
    method findOfType (line 590) | def findOfType(self, messageType):
    method hasOfType (line 599) | def hasOfType(self, messageType):
    method findErrors (line 606) | def findErrors(self):
    method hasErrors (line 609) | def hasErrors(self):
    method findWarnings (line 612) | def findWarnings(self):
    method hasWarnings (line 615) | def hasWarnings(self):
    method findInfos (line 618) | def findInfos(self):
    method messageToString (line 622) | def messageToString(messageType, message, context=None):
    method InternalTextTransport (line 627) | def InternalTextTransport(name="XPlane2Blender.log"):
    method ConsoleTransport (line 643) | def ConsoleTransport():
    method FileTransport (line 652) | def FileTransport(filehandle):

FILE: io_xplane2blender/xplane_ops.py
  function findFCurveByPath (line 33) | def findFCurveByPath(fcurves, path):
  function makeKeyframesLinear (line 55) | def makeKeyframesLinear(obj, path):
  function getDatarefValuePath (line 80) | def getDatarefValuePath(index: int, bone: Optional[bpy.types.Bone] = Non...
  class OBJECT_OT_add_xplane_axis_detent_range (line 93) | class OBJECT_OT_add_xplane_axis_detent_range(bpy.types.Operator):
    method execute (line 98) | def execute(self, context):
  class OBJECT_OT_remove_xplane_axis_detent_range (line 104) | class OBJECT_OT_remove_xplane_axis_detent_range(bpy.types.Operator):
    method execute (line 111) | def execute(self, context):
  class COLLECTION_OT_add_xplane_layer_attribute (line 117) | class COLLECTION_OT_add_xplane_layer_attribute(bpy.types.Operator):
    method execute (line 124) | def execute(self, context):
  class COLLECTION_OT_remove_xplane_layer_attribute (line 130) | class COLLECTION_OT_remove_xplane_layer_attribute(bpy.types.Operator):
    method execute (line 138) | def execute(self, context):
  class OBJECT_OT_add_xplane_layer_attribute (line 144) | class OBJECT_OT_add_xplane_layer_attribute(bpy.types.Operator):
    method execute (line 151) | def execute(self, context):
  class OBJECT_OT_remove_xplane_layer_attribute (line 157) | class OBJECT_OT_remove_xplane_layer_attribute(bpy.types.Operator):
    method execute (line 164) | def execute(self, context):
  class OBJECT_OT_add_xplane_object_attribute (line 172) | class OBJECT_OT_add_xplane_object_attribute(bpy.types.Operator):
    method execute (line 177) | def execute(self, context):
  class OBJECT_OT_remove_xplane_object_attribute (line 185) | class OBJECT_OT_remove_xplane_object_attribute(bpy.types.Operator):
    method execute (line 192) | def execute(self, context):
  class OBJECT_OT_add_xplane_object_anim_attribute (line 200) | class OBJECT_OT_add_xplane_object_anim_attribute(bpy.types.Operator):
    method execute (line 205) | def execute(self, context):
  class OBJECT_OT_remove_xplane_object_anim_attribute (line 213) | class OBJECT_OT_remove_xplane_object_anim_attribute(bpy.types.Operator):
    method execute (line 220) | def execute(self, context):
  class OBJECT_OT_add_xplane_material_attribute (line 228) | class OBJECT_OT_add_xplane_material_attribute(bpy.types.Operator):
    method execute (line 233) | def execute(self, context):
  class OBJECT_OT_remove_xplane_material_attribute (line 241) | class OBJECT_OT_remove_xplane_material_attribute(bpy.types.Operator):
    method execute (line 248) | def execute(self, context):
  class OBJECT_OT_add_xplane_light_attribute (line 256) | class OBJECT_OT_add_xplane_light_attribute(bpy.types.Operator):
    method execute (line 261) | def execute(self, context):
  class OBJECT_OT_remove_xplane_light_attribute (line 269) | class OBJECT_OT_remove_xplane_light_attribute(bpy.types.Operator):
    method execute (line 276) | def execute(self, context):
  class OBJECT_OT_add_xplane_dataref (line 284) | class OBJECT_OT_add_xplane_dataref(bpy.types.Operator):
    method execute (line 289) | def execute(self, context):
  class OBJECT_OT_remove_xplane_dataref (line 297) | class OBJECT_OT_remove_xplane_dataref(bpy.types.Operator):
    method execute (line 304) | def execute(self, context):
  class OBJECT_OT_add_xplane_dataref_keyframe (line 325) | class OBJECT_OT_add_xplane_dataref_keyframe(bpy.types.Operator):
    method execute (line 334) | def execute(self, context):
  class OBJECT_OT_remove_xplane_dataref_keyframe (line 352) | class OBJECT_OT_remove_xplane_dataref_keyframe(bpy.types.Operator):
    method execute (line 361) | def execute(self, context):
  class COLLECTION_OT_add_xplane_export_path_directive (line 371) | class COLLECTION_OT_add_xplane_export_path_directive(bpy.types.Operator):
    method execute (line 378) | def execute(self, context):
  class COLLECTION_OT_remove_xplane_export_path_directive (line 384) | class COLLECTION_OT_remove_xplane_export_path_directive(bpy.types.Operat...
    method execute (line 392) | def execute(self, context):
  class OBJECT_OT_add_xplane_export_path_directive (line 398) | class OBJECT_OT_add_xplane_export_path_directive(bpy.types.Operator):
    method execute (line 403) | def execute(self, context):
  class OBJECT_OT_remove_xplane_export_path_directive (line 409) | class OBJECT_OT_remove_xplane_export_path_directive(bpy.types.Operator):
    method execute (line 416) | def execute(self, context):
  class BONE_OT_add_xplane_dataref (line 424) | class BONE_OT_add_xplane_dataref(bpy.types.Operator):
    method execute (line 429) | def execute(self, context):
  class BONE_OT_remove_xplane_dataref (line 438) | class BONE_OT_remove_xplane_dataref(bpy.types.Operator):
    method execute (line 445) | def execute(self, context):
  class BONE_OT_add_xplane_dataref_keyframe (line 466) | class BONE_OT_add_xplane_dataref_keyframe(bpy.types.Operator):
    method execute (line 476) | def execute(self, context):
  class BONE_OT_remove_xplane_dataref_keyframe (line 497) | class BONE_OT_remove_xplane_dataref_keyframe(bpy.types.Operator):
    method execute (line 506) | def execute(self, context):
  class OBJECT_OT_add_xplane_object_condition (line 520) | class OBJECT_OT_add_xplane_object_condition(bpy.types.Operator):
    method execute (line 525) | def execute(self, context):
  class OBJECT_OT_remove_xplane_object_condition (line 533) | class OBJECT_OT_remove_xplane_object_condition(bpy.types.Operator):
    method execute (line 540) | def execute(self, context):
  class OBJECT_OT_add_xplane_material_condition (line 549) | class OBJECT_OT_add_xplane_material_condition(bpy.types.Operator):
    method execute (line 554) | def execute(self, context):
  class OBJECT_OT_remove_xplane_material_condition (line 562) | class OBJECT_OT_remove_xplane_material_condition(bpy.types.Operator):
    method execute (line 569) | def execute(self, context):
  class SCENE_OT_export_to_relative_dir (line 577) | class SCENE_OT_export_to_relative_dir(bpy.types.Operator):
    method execute (line 585) | def execute(self, context):
  class XPLANE_OT_CommandSearchToggle (line 590) | class XPLANE_OT_CommandSearchToggle(bpy.types.Operator):
    method execute (line 603) | def execute(self, context):
  class XPLANE_OT_DatarefSearchToggle (line 642) | class XPLANE_OT_DatarefSearchToggle(bpy.types.Operator):
    method execute (line 655) | def execute(self, context):
  class XPLANE_OT_XPlaneMessage (line 698) | class XPLANE_OT_XPlaneMessage(bpy.types.Operator):
    method execute (line 716) | def execute(self, context):
    method invoke (line 719) | def invoke(self, context, event):
    method draw (line 723) | def draw(self, context):
  class XPLANE_OT_bake_wiper_gradient_texture (line 730) | class XPLANE_OT_bake_wiper_gradient_texture(bpy.types.Operator):
    method execute (line 762) | def execute(self, context):
    method poll (line 994) | def poll(cls, context):

FILE: io_xplane2blender/xplane_ops_dev.py
  class SCENE_OT_dev_apply_default_material_to_all (line 16) | class SCENE_OT_dev_apply_default_material_to_all(bpy.types.Operator):
    method execute (line 21) | def execute(self, context):
  class SCENE_OT_dev_create_lights_txt_summary (line 34) | class SCENE_OT_dev_create_lights_txt_summary(bpy.types.Operator):
    method execute (line 41) | def execute(self, context):
  class SCENE_OT_dev_root_names_from_objects (line 92) | class SCENE_OT_dev_root_names_from_objects(bpy.types.Operator):
    method execute (line 101) | def execute(self, context: bpy.types.Context):
  class SCENE_OT_dev_rerun_updater (line 109) | class SCENE_OT_dev_rerun_updater(bpy.types.Operator):
    method execute (line 116) | def execute(self, context):

FILE: io_xplane2blender/xplane_props.py
  class XPlane2BlenderVersion (line 93) | class XPlane2BlenderVersion(bpy.types.PropertyGroup):
    method update_version_property (line 103) | def update_version_property(self, context):
    method safe_set_version_data (line 170) | def safe_set_version_data(
    method make_struct (line 214) | def make_struct(self):
    method addon_version_clean_str (line 224) | def addon_version_clean_str(self):
    method __repr__ (line 230) | def __repr__(self) -> str:
    method __str__ (line 242) | def __str__(self) -> str:
  class XPlaneAxisDetentRange (line 253) | class XPlaneAxisDetentRange(bpy.types.PropertyGroup):
    method __str__ (line 274) | def __str__(self):
  class XPlaneCustomAttribute (line 284) | class XPlaneCustomAttribute(bpy.types.PropertyGroup):
  class ListItemCommand (line 312) | class ListItemCommand(bpy.types.PropertyGroup):
  class ListItemDataref (line 328) | class ListItemDataref(bpy.types.PropertyGroup):
  class XPlaneCommandSearchWindow (line 352) | class XPlaneCommandSearchWindow(bpy.types.PropertyGroup):
    method onclick_command (line 363) | def onclick_command(self, context):
  class XPlaneDatarefSearchWindow (line 409) | class XPlaneDatarefSearchWindow(bpy.types.PropertyGroup):
    method onclick_dataref (line 420) | def onclick_dataref(self, context):
  class XPlaneExportPathDirective (line 467) | class XPlaneExportPathDirective(bpy.types.PropertyGroup):
  class XPlaneEmitter (line 474) | class XPlaneEmitter(bpy.types.PropertyGroup):
  class XPlaneMagnet (line 492) | class XPlaneMagnet(bpy.types.PropertyGroup):
  class XPlaneWheel (line 508) | class XPlaneWheel(bpy.types.PropertyGroup):
  class XPlaneEmpty (line 521) | class XPlaneEmpty(bpy.types.PropertyGroup):
  class XPlaneDataref (line 560) | class XPlaneDataref(bpy.types.PropertyGroup):
  class XPlaneCondition (line 614) | class XPlaneCondition(bpy.types.PropertyGroup):
  class XPlaneManipulatorSettings (line 661) | class XPlaneManipulatorSettings(bpy.types.PropertyGroup):
    method get_manip_types_for_this_version (line 688) | def get_manip_types_for_this_version(self,context):
    method get_effective_type_desc (line 926) | def get_effective_type_desc(self) -> str:
    method get_effective_type_name (line 934) | def get_effective_type_name(self) -> str:
  class XPlaneCockpitRegion (line 950) | class XPlaneCockpitRegion(bpy.types.PropertyGroup):
  class XPlaneLOD (line 992) | class XPlaneLOD(bpy.types.PropertyGroup):
    method __str__ (line 1013) | def __str__(self)->str:
  class XPlaneThermalSourceSettings (line 1016) | class XPlaneThermalSourceSettings(bpy.types.PropertyGroup):
  class XPlaneWiperSettings (line 1026) | class XPlaneWiperSettings(bpy.types.PropertyGroup):
  class XPlaneRainSettings (line 1054) | class XPlaneRainSettings(bpy.types.PropertyGroup):
  class XPlaneLayer (line 1132) | class XPlaneLayer(bpy.types.PropertyGroup):
    method update_cockpit_regions (line 1146) | def update_cockpit_regions(self, context)->None:
    method update_lods (line 1152) | def update_lods(self, context):
  class XPlaneCollectionSettings (line 1944) | class XPlaneCollectionSettings(bpy.types.PropertyGroup):
  class XPlaneSceneSettings (line 1957) | class XPlaneSceneSettings(bpy.types.PropertyGroup):
  class XPlaneObjectSettings (line 2055) | class XPlaneObjectSettings(bpy.types.PropertyGroup):
  class XPlaneBoneSettings (line 2197) | class XPlaneBoneSettings(bpy.types.PropertyGroup):
  class XPlaneMaterialSettings (line 2236) | class XPlaneMaterialSettings(bpy.types.PropertyGroup):
    method get_cockpit_feature_types_for_this_version (line 2365) | def get_cockpit_feature_types_for_this_version(self, context) -> List[...
  class XPlaneLightSettings (line 2496) | class XPlaneLightSettings(bpy.types.PropertyGroup):
  function register (line 2641) | def register():
  function unregister (line 2679) | def unregister():

FILE: io_xplane2blender/xplane_types/xplane_attribute.py
  class XPlaneAttributeName (line 15) | class XPlaneAttributeName(str):
    method __new__ (line 16) | def __new__(
    method __eq__ (line 24) | def __eq__(
    method __lt__ (line 32) | def __lt__(
    method __hash__ (line 43) | def __hash__(
  class XPlaneAttribute (line 51) | class XPlaneAttribute:
    method __init__ (line 57) | def __init__(
    method addValue (line 69) | def addValue(self, value: Optional[AttributeValueType]) -> None:
    method addValues (line 76) | def addValues(self, values: AttributeValueTypeList):
    method setValue (line 85) | def setValue(self, value: AttributeValueType, i: int = 0):
    method getValue (line 89) | def getValue(self, i: int = 0) -> Optional[AttributeValueType]:
    method getValueAsString (line 96) | def getValueAsString(self, i: int = 0) -> str:
    method getValues (line 141) | def getValues(self) -> AttributeValueTypeList:
    method getValuesAsString (line 148) | def getValuesAsString(self) -> str:
    method removeValues (line 155) | def removeValues(self):

FILE: io_xplane2blender/xplane_types/xplane_attributes.py
  class XPlaneAttributes (line 9) | class XPlaneAttributes(OrderedDict):
    method __init__ (line 10) | def __init__(self):
    method order (line 13) | def order(self):
    method add (line 19) | def add(self, attr: XPlaneAttribute):
    method get (line 25) | def get(self, name: str) -> Optional[XPlaneAttribute]:
    method set (line 31) | def set(self, attr: XPlaneAttribute) -> None:
    method __str__ (line 35) | def __str__(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_bone.py
  class XPlaneBone (line 46) | class XPlaneBone:
    method __init__ (line 47) | def __init__(
    method sortChildren (line 111) | def sortChildren(self) -> None:
    method isDataRefAnimatedForTranslation (line 122) | def isDataRefAnimatedForTranslation(self) -> bool:
    method isDataRefAnimatedForRotation (line 140) | def isDataRefAnimatedForRotation(self) -> bool:
    method isAnimated (line 156) | def isAnimated(self) -> bool:
    method collectAnimations (line 163) | def collectAnimations(self) -> None:
    method getName (line 241) | def getName(self, ignore_indent_level: bool = False) -> str:
    method getBlenderName (line 267) | def getBlenderName(self) -> str:
    method getIndent (line 275) | def getIndent(self) -> str:
    method getFirstAnimatedParent (line 281) | def getFirstAnimatedParent(self) -> Optional[str]:
    method getBlenderWorldMatrix (line 296) | def getBlenderWorldMatrix(self) -> mathutils.Matrix:
    method getPreAnimationMatrix (line 330) | def getPreAnimationMatrix(self) -> mathutils.Matrix:
    method getPostAnimationMatrix (line 418) | def getPostAnimationMatrix(self) -> mathutils.Matrix:
    method getBakeMatrixForMyAnimations (line 484) | def getBakeMatrixForMyAnimations(self) -> mathutils.Matrix:
    method getBakeMatrixForAttached (line 505) | def getBakeMatrixForAttached(self) -> mathutils.Matrix:
    method __str__ (line 524) | def __str__(self) -> str:
    method writeAnimationPrefix (line 536) | def writeAnimationPrefix(self) -> None:
    method _writeStaticTranslation (line 598) | def _writeStaticTranslation(self, bakeMatrix: mathutils.Matrix) -> None:
    method _writeStaticRotation (line 628) | def _writeStaticRotation(self, bakeMatrix: mathutils.Matrix) -> str:
    method _writeKeyframesLoop (line 677) | def _writeKeyframesLoop(self, dataref: str) -> str:
    method _writeTranslationKeyframes (line 686) | def _writeTranslationKeyframes(self, dataref: str) -> str:
    method _writeAxisAngleRotationKeyframes (line 727) | def _writeAxisAngleRotationKeyframes(self, dataref, keyframes) -> str:
    method _writeQuaternionRotationKeyframes (line 764) | def _writeQuaternionRotationKeyframes(self, dataref, keyframes) -> str:
    method _writeEulerRotationKeyframes (line 768) | def _writeEulerRotationKeyframes(self, dataref, keyframes) -> str:
    method _writeRotationKeyframes (line 807) | def _writeRotationKeyframes(self, dataref) -> str:
    method _writeAnimAttributes (line 829) | def _writeAnimAttributes(self) -> str:
    method writeAnimationSuffix (line 842) | def writeAnimationSuffix(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_commands.py
  class XPlaneCommands (line 76) | class XPlaneCommands:
    method __init__ (line 83) | def __init__(self, xplaneFile) -> None:
    method write (line 118) | def write(self, *, lod_bucket_index: Optional[int]) -> str:
    method writeXPlaneBone (line 135) | def writeXPlaneBone(
    method _writeXPlaneObjectPrefix (line 177) | def _writeXPlaneObjectPrefix(self, xplaneObject):
    method _writeXPlaneObjectSuffix (line 192) | def _writeXPlaneObjectSuffix(self, xplaneObject: xplane_object.XPlaneO...
    method writeAttribute (line 206) | def writeAttribute(
    method canWriteAttribute (line 250) | def canWriteAttribute(
    method addReseter (line 260) | def addReseter(self, attr: str, reseter: str) -> None:
    method getAllAttributesForReseter (line 272) | def getAllAttributesForReseter(self, attr):
    method getAttributeCounterparts (line 279) | def getAttributeCounterparts(self, attr) -> List[str]:
    method writeReseters (line 310) | def writeReseters(self, xplaneObject: xplane_object.XPlaneObject) -> str:
    method _writeConditions (line 413) | def _writeConditions(self, conditions, xplaneObject, close=False):

FILE: io_xplane2blender/xplane_types/xplane_empty.py
  class XPlaneEmpty (line 13) | class XPlaneEmpty(XPlaneObject):
    method __init__ (line 14) | def __init__(self, blenderObject):
    method collect (line 19) | def collect(self) -> None:
    method write (line 50) | def write(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_face.py
  class XPlaneFace (line 3) | class XPlaneFace:
    method __init__ (line 19) | def __init__(self):

FILE: io_xplane2blender/xplane_types/xplane_file.py
  class NotExportableRootError (line 49) | class NotExportableRootError(ValueError):
  function createFilesFromBlenderRootObjects (line 53) | def createFilesFromBlenderRootObjects(
  function createFileFromBlenderRootObject (line 88) | def createFileFromBlenderRootObject(
  class LocRotPerFrame (line 139) | class LocRotPerFrame:
  function _pre_scan_all_keyframes (line 163) | def _pre_scan_all_keyframes():
  class XPlaneFile (line 222) | class XPlaneFile:
    method __init__ (line 228) | def __init__(self, filename: str, options: xplane_props.XPlaneLayer) -...
    method create_xplane_bone_hiearchy (line 254) | def create_xplane_bone_hiearchy(
    method get_xplane_objects (line 627) | def get_xplane_objects(self) -> List["XPlaneObject"]:
    method validateMaterials (line 646) | def validateMaterials(self) -> bool:
    method validateOptions (line 680) | def validateOptions(self) -> bool:
    method getMaterials (line 695) | def getMaterials(self) -> List[bpy.types.Material]:
    method compareMaterials (line 714) | def compareMaterials(self, refMaterials):
    method writeFooter (line 752) | def writeFooter(self):
    method write (line 759) | def write(self) -> str:
    method _writeLods (line 822) | def _writeLods(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_header.py
  class XPlaneHeader (line 27) | class XPlaneHeader:
    method __init__ (line 33) | def __init__(self, xplaneFile: "XPlaneFile", obj_version: int) -> None:
    method _init (line 158) | def _init(self):
    method get_path_relative_to_dir (line 1028) | def get_path_relative_to_dir(self, res_path: str, export_dir: str) -> ...
    method _getCanonicalTexturePath (line 1111) | def _getCanonicalTexturePath(self, texpath) -> str:
    method write (line 1124) | def write(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_keyframe.py
  class XPlaneKeyframe (line 11) | class XPlaneKeyframe:
    method __init__ (line 12) | def __init__(
    method __str__ (line 88) | def __str__(self) -> str:
    method asAA (line 100) | def asAA(self) -> "XPlaneKeyframe":
    method asEuler (line 131) | def asEuler(self) -> "XPlaneKeyframe":
    method asQuaternion (line 152) | def asQuaternion(self) -> "XPlaneKeyframe":

FILE: io_xplane2blender/xplane_types/xplane_keyframe_collection.py
  class XPlaneKeyframeCollection (line 20) | class XPlaneKeyframeCollection(MutableSequence):
    method __init__ (line 30) | def __init__(self, data: List[XPlaneKeyframe]):
    method __repr__ (line 114) | def __repr__(self):
    method __len__ (line 117) | def __len__(self):
    method __getitem__ (line 121) | def __getitem__(self, i):
    method __delitem__ (line 125) | def __delitem__(self, i):
    method __setitem__ (line 129) | def __setitem__(self, i, val):
    method __str__ (line 132) | def __str__(self):
    method insert (line 135) | def insert(self, i, val):
    method append (line 138) | def append(self, val):
    method getReferenceAxes (line 141) | def getReferenceAxes(self):
    method getDataref (line 148) | def getDataref(self):
    method getRotationMode (line 151) | def getRotationMode(self):
    method getRotationKeyframeTables (line 163) | def getRotationKeyframeTables(
    method getRotationKeyframeTablesNoClamps (line 216) | def getRotationKeyframeTablesNoClamps(
    method getTranslationKeyframeTable (line 228) | def getTranslationKeyframeTable(self):
    method getTranslationKeyframeTableNoClamps (line 238) | def getTranslationKeyframeTableNoClamps(self):
    method getTranslationKeyframeTableWScale (line 249) | def getTranslationKeyframeTableWScale(self):
    method asAA (line 256) | def asAA(self) -> "XPlaneKeyframeCollection":
    method asEuler (line 259) | def asEuler(self) -> "XPlaneKeyframeCollection":
    method asQuaternion (line 262) | def asQuaternion(self) -> "XPlaneKeyframeCollection":
    method toAA (line 265) | def toAA(self) -> "XPlaneKeyframeCollection":
    method toEuler (line 269) | def toEuler(self) -> "XPlaneKeyframeCollection":
    method toQuaternion (line 273) | def toQuaternion(self) -> "XPlaneKeyframeCollection":
    method filter_clamping_keyframes (line 278) | def filter_clamping_keyframes(

FILE: io_xplane2blender/xplane_types/xplane_light.py
  class _LightSpillCustomParams (line 22) | class _LightSpillCustomParams:
    method a (line 28) | def a(self):
    method __str__ (line 38) | def __str__(self):
  class XPlaneLight (line 60) | class XPlaneLight(xplane_object.XPlaneObject):
    method __init__ (line 61) | def __init__(self, blenderObject: bpy.types.Object):
    method collect (line 123) | def collect(self) -> None:
    method write (line 516) | def write(self) -> None:
    method get_light_direction_b (line 716) | def get_light_direction_b(self) -> Vector:
    method DIR_MAG_for_billboard (line 728) | def DIR_MAG_for_billboard(spot_size: float):
    method WIDTH_for_billboard (line 732) | def WIDTH_for_billboard(spot_size: float):
    method WIDTH_for_spill (line 738) | def WIDTH_for_spill(spot_size: float):

FILE: io_xplane2blender/xplane_types/xplane_manipulator.py
  function round_vector (line 30) | def round_vector(vec, ndigits=5) -> Vector:
  function check_bone_has_n_datarefs (line 43) | def check_bone_has_n_datarefs(
  function check_bone_has_parent (line 84) | def check_bone_has_parent(
  function check_bone_is_animated_for_rotation (line 102) | def check_bone_is_animated_for_rotation(
  function check_bone_is_animated_for_translation (line 131) | def check_bone_is_animated_for_translation(
  function check_bone_is_animated_on_n_axes (line 153) | def check_bone_is_animated_on_n_axes(
  function check_bone_is_leaf (line 198) | def check_bone_is_leaf(
  function check_bone_is_not_animated_for_rotation (line 216) | def check_bone_is_not_animated_for_rotation(
  function check_bone_is_not_animated_for_translation (line 234) | def check_bone_is_not_animated_for_translation(
  function check_bone_parent_is_animated_for_rotation (line 252) | def check_bone_parent_is_animated_for_rotation(
  function check_bone_parent_is_animated_for_translation (line 268) | def check_bone_parent_is_animated_for_translation(
  function check_bones_drag_detent_are_orthogonal (line 284) | def check_bones_drag_detent_are_orthogonal(
  function check_bones_rotation_translation_animations_are_orthogonal (line 331) | def check_bones_rotation_translation_animations_are_orthogonal(
  function _check_keyframe_translation_count (line 364) | def _check_keyframe_translation_count(
  function check_keyframe_translation_eq_count (line 411) | def check_keyframe_translation_eq_count(
  function check_keyframe_translation_ge_count (line 429) | def check_keyframe_translation_ge_count(
  function check_keyframes_rotation_are_orderered (line 447) | def check_keyframes_rotation_are_orderered(
  function check_manip_has_axis_detent_ranges (line 477) | def check_manip_has_axis_detent_ranges(
  function find_armature_datablock (line 498) | def find_armature_datablock(bone: XPlaneBone) -> Optional[bpy.types.Obje...
  function get_lift_at_max (line 508) | def get_lift_at_max(translation_bone: XPlaneBone) -> float:
  function check_spec_drag_axis_bone (line 517) | def check_spec_drag_axis_bone(
  function get_information_sources (line 559) | def get_information_sources(
  function check_spec_rotation_bone (line 807) | def check_spec_rotation_bone(
  function check_spec_detent_bone (line 839) | def check_spec_detent_bone(
  class XPlaneManipulator (line 881) | class XPlaneManipulator:
    method __init__ (line 888) | def __init__(self, xplanePrimative: "XPlanePrimitive"):
    method collect (line 895) | def collect(self) -> None:

FILE: io_xplane2blender/xplane_types/xplane_material.py
  class XPlaneMaterial (line 22) | class XPlaneMaterial:
    method __init__ (line 45) | def __init__(self, xplaneObject: xplane_object.XPlaneObject):
    method collect (line 96) | def collect(self) -> None:
    method collectCustomAttributes (line 204) | def collectCustomAttributes(self, mat: bpy.types.Material) -> None:
    method collectCockpitAttributes (line 214) | def collectCockpitAttributes(self, mat: bpy.types.Material) -> None:
    method collectLightLevelAttributes (line 295) | def collectLightLevelAttributes(self, mat: bpy.types.Material) -> None:
    method collectConditions (line 311) | def collectConditions(self, mat: bpy.types.Material) -> None:
    method write (line 315) | def write(self) -> str:
    method isCompatibleTo (line 350) | def isCompatibleTo(
    method isValid (line 359) | def isValid(self, exportType: str) -> Tuple[List[str], List[str]]:

FILE: io_xplane2blender/xplane_types/xplane_material_utils.py
  function compare (line 19) | def compare(
  function compareScenery (line 33) | def compareScenery(
  function compareInstanced (line 65) | def compareInstanced(
  function compareAircraft (line 106) | def compareAircraft(
  function validate (line 133) | def validate(mat: XPlaneMaterial, exportType: str) -> MaterialValidation...
  function validateScenery (line 171) | def validateScenery(mat: XPlaneMaterial) -> MaterialValidationMsgs:
  function validateInstanced (line 190) | def validateInstanced(mat: XPlaneMaterial) -> MaterialValidationMsgs:
  function validatePanel (line 215) | def validatePanel(mat: XPlaneMaterial) -> MaterialValidationMsgs:
  function validateCockpit (line 241) | def validateCockpit(mat: XPlaneMaterial) -> MaterialValidationMsgs:
  function validateAircraft (line 258) | def validateAircraft(mat: XPlaneMaterial) -> MaterialValidationMsgs:
  function validateDraped (line 278) | def validateDraped(mat: XPlaneMaterial) -> MaterialValidationMsgs:
  function getFirstMatchingMaterial (line 309) | def getFirstMatchingMaterial(
  function getReferenceMaterials (line 321) | def getReferenceMaterials(

FILE: io_xplane2blender/xplane_types/xplane_mesh.py
  class XPlaneMesh (line 19) | class XPlaneMesh:
    method __init__ (line 27) | def __init__(self):
    method collectXPlaneObjects (line 44) | def collectXPlaneObjects(self, xplaneObjects: List[XPlaneObject]) -> N...
    method writeVertices (line 159) | def writeVertices(self) -> str:
    method writeIndices (line 188) | def writeIndices(self) -> str:
    method write (line 220) | def write(self):

FILE: io_xplane2blender/xplane_types/xplane_object.py
  class XPlaneObject (line 16) | class XPlaneObject:
    method __init__ (line 22) | def __init__(self, blenderObject: bpy.types.Object) -> None:
    method __str__ (line 52) | def __str__(self):
    method setWeight (line 63) | def setWeight(self, defaultWeight: int = 0) -> None:
    method collect (line 82) | def collect(self) -> None:
    method collectCustomAttributes (line 102) | def collectCustomAttributes(self):
    method collectAnimAttributes (line 121) | def collectAnimAttributes(self):
    method collectConditions (line 136) | def collectConditions(self):
    method write (line 141) | def write(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_primitive.py
  class XPlanePrimitive (line 25) | class XPlanePrimitive(XPlaneObject):
    method __init__ (line 30) | def __init__(self, blenderObject: bpy.types.Object):
    method setWeight (line 45) | def setWeight(self, defaultWeight:int = 0)->None:
    method collect (line 69) | def collect(self) -> None:
    method collectLightLevelAttributes (line 88) | def collectLightLevelAttributes(self) -> None:
    method write (line 102) | def write(self) -> str:

FILE: io_xplane2blender/xplane_types/xplane_vlights.py
  class XPlaneVLights (line 12) | class XPlaneVLights:
    method __init__ (line 20) | def __init__(self) -> None:
    method append (line 30) | def append(self, light: xplane_light.XPlaneLight) -> None:
    method write (line 50) | def write(self) -> str:

FILE: io_xplane2blender/xplane_ui.py
  class DATA_PT_xplane (line 20) | class DATA_PT_xplane(bpy.types.Panel):
    method draw (line 28) | def draw(self, context):
  class MATERIAL_PT_xplane (line 40) | class MATERIAL_PT_xplane(bpy.types.Panel):
    method poll (line 49) | def poll(self, context):
    method draw (line 53) | def draw(self, context):
  class RENDER_PT_xplane (line 67) | class RENDER_PT_xplane(bpy.types.Panel):
    method poll (line 76) | def poll(self, context):
    method draw (line 79) | def draw(self, context):
  class SCENE_PT_xplane (line 109) | class SCENE_PT_xplane(bpy.types.Panel):
    method poll (line 118) | def poll(self, context):
    method draw (line 121) | def draw(self, context):
  function light_level_layout (line 126) | def light_level_layout(
  class OBJECT_PT_xplane (line 170) | class OBJECT_PT_xplane(bpy.types.Panel):
    method poll (line 179) | def poll(self, context):
    method draw (line 187) | def draw(self, context):
  class BONE_PT_xplane (line 219) | class BONE_PT_xplane(bpy.types.Panel):
    method poll (line 228) | def poll(self, context):
    method draw (line 236) | def draw(self, context):
  function empty_layout (line 243) | def empty_layout(layout: bpy.types.UILayout, empty_obj: bpy.types.Object):
  function rain_layout (line 284) | def rain_layout(
  function scene_layout (line 334) | def scene_layout(layout: bpy.types.UILayout, scene: bpy.types.Scene):
  function scene_dev_layout (line 418) | def scene_dev_layout(layout: bpy.types.UILayout, scene: bpy.types.Scene):
  function collection_layer_layout (line 468) | def collection_layer_layout(
  function object_layer_layout (line 497) | def object_layer_layout(layout: bpy.types.UILayout, obj: bpy.types.Object):
  function layer_layout (line 530) | def layer_layout(
  function custom_layer_layout (line 941) | def custom_layer_layout(
  function command_search_window_layout (line 986) | def command_search_window_layout(layout):
  function dataref_search_window_layout (line 999) | def dataref_search_window_layout(layout):
  function export_path_dir_layer_layout (line 1012) | def export_path_dir_layer_layout(
  function mesh_layout (line 1054) | def mesh_layout(layout: bpy.types.UILayout, obj: bpy.types.Object) -> None:
  function light_layout (line 1061) | def light_layout(layout: bpy.types.UILayout, obj: bpy.types.Object) -> N...
  function material_layout (line 1276) | def material_layout(layout: UILayout, active_material: bpy.types.Materia...
  function custom_layout (line 1397) | def custom_layout(
  function animation_layout (line 1462) | def animation_layout(
  function cockpit_layout (line 1554) | def cockpit_layout(
  function axis_detent_ranges_layout (line 1596) | def axis_detent_ranges_layout(
  function manipulator_layout (line 1621) | def manipulator_layout(layout: bpy.types.UILayout, obj: bpy.types.Object...
  function conditions_layout (line 1879) | def conditions_layout(
  function lod_layout (line 1911) | def lod_layout(layout: bpy.types.UILayout, obj: bpy.types.Object) -> None:
  function weight_layout (line 1919) | def weight_layout(layout: bpy.types.UILayout, obj: bpy.types.Object) -> ...
  class XPLANE_UL_CommandSearchList (line 1926) | class XPLANE_UL_CommandSearchList(bpy.types.UIList):
    method draw_item (line 1929) | def draw_item(
    method draw_filter (line 1959) | def draw_filter(self, context, layout):
    method filter_items (line 1965) | def filter_items(self, context, data, propname):
  class XPLANE_UL_DatarefSearchList (line 2002) | class XPLANE_UL_DatarefSearchList(bpy.types.UIList):
    method draw_item (line 2005) | def draw_item(
    method draw_filter (line 2039) | def draw_filter(self, context, layout):
    method filter_items (line 2045) | def filter_items(self, context, data, propname):

FILE: io_xplane2blender/xplane_updater.py
  function _layers_to_collection (line 58) | def _layers_to_collection(logger: xplane_helpers.XPlaneLogger) -> None:
  function _change_pre_3_3_0_properties (line 180) | def _change_pre_3_3_0_properties(logger: xplane_helpers.XPlaneLogger) ->...
  function _update_LocRot (line 213) | def _update_LocRot(
  function _rollback_blend_glass (line 266) | def _rollback_blend_glass(logger: XPlaneLogger) -> None:
  function _set_shadow_local_and_delete_global_shadow (line 306) | def _set_shadow_local_and_delete_global_shadow(
  function _move_global_material_props (line 416) | def _move_global_material_props(
  function _panel_to_cockpit_feature (line 495) | def _panel_to_cockpit_feature(logger: xplane_helpers.XPlaneLogger):
  function _regions_change_panel_mode (line 504) | def _regions_change_panel_mode(logger: xplane_helpers.XPlaneLogger):
  function _update_light_intensities (line 512) | def _update_light_intensities(logger: xplane_helpers.XPlaneLogger):
  function update (line 519) | def update(
  function _synchronize_last_version_across_histories (line 613) | def _synchronize_last_version_across_histories(last_version: xplane_help...
  function load_handler (line 621) | def load_handler(dummy):
  function save_handler (line 764) | def save_handler(dummy):

FILE: io_xplane2blender/xplane_utils/xplane_commands_txt_parser.py
  class CommandInfoStruct (line 36) | class CommandInfoStruct:
    method __init__ (line 37) | def __init__(self, command: str, description: Optional[str]):
    method is_invalid (line 41) | def is_invalid(self) -> str:
  function parse_commands_txt (line 50) | def parse_commands_txt(filepath: str) -> Union[List[CommandInfoStruct], ...
  function get_commands_txt_file_content (line 91) | def get_commands_txt_file_content(filepath: str) -> Union[List[CommandIn...

FILE: io_xplane2blender/xplane_utils/xplane_datarefs_txt_parser.py
  class DatarefInfoStruct (line 32) | class DatarefInfoStruct:
    method __init__ (line 33) | def __init__(
    method is_invalid (line 60) | def is_invalid(self) -> str:
    method __repr__ (line 85) | def __repr__(self) -> str:
  function parse_datarefs_txt (line 94) | def parse_datarefs_txt(filepath: str) -> Union[List[DatarefInfoStruct], ...
  function get_datarefs_txt_file_content (line 151) | def get_datarefs_txt_file_content(filepath: str) -> Union[List[DatarefIn...

FILE: io_xplane2blender/xplane_utils/xplane_effective_gloss.py
  function ggx_distribution_cdf (line 4) | def ggx_distribution_cdf(x, alpha):
  function get_effective_gloss (line 12) | def get_effective_gloss(file_path) -> float:

FILE: io_xplane2blender/xplane_utils/xplane_lights_txt_parser.py
  class ColumnName (line 140) | class ColumnName(enum.Enum):
    method param_to_canonical_column_name (line 172) | def param_to_canonical_column_name(
  function get_overload_column_info (line 216) | def get_overload_column_info(overload_type: str) -> Dict[ColumnName, bool]:
  function _replace_columns_via_values (line 308) | def _replace_columns_via_values(
  function _do_rgb_to_dxyz_w_calc (line 315) | def _do_rgb_to_dxyz_w_calc(overload: "ParsedLightOverload") -> None:
  function _do_rgb_to_dxyz_dir_mag_calc (line 326) | def _do_rgb_to_dxyz_dir_mag_calc(overload: "ParsedLightOverload") -> None:
  function _do_rgba_to_dxyz_w (line 342) | def _do_rgba_to_dxyz_w(overload: "ParsedLightOverload") -> None:
  function _do_force_WIDTH_1 (line 350) | def _do_force_WIDTH_1(overload: "ParsedLightOverload") -> None:
  class ParsedLightOverload (line 403) | class ParsedLightOverload:
    method __contains__ (line 423) | def __contains__(self, item: str) -> bool:
    method __getitem__ (line 429) | def __getitem__(self, key: Union[ColumnName, int, str]) -> Union[float...
    method __setitem__ (line 456) | def __setitem__(self, key: Union[ColumnName, int, str], value: float) ...
    method __str__ (line 477) | def __str__(self) -> str:
    method __iter__ (line 480) | def __iter__(self) -> Iterator[Union[float, str]]:
    method apply_sw_callback (line 483) | def apply_sw_callback(self) -> None:
    method is_omni (line 497) | def is_omni(self) -> bool:
    method get (line 608) | def get(
    method prototype (line 618) | def prototype(self) -> Tuple[str, ...]:
    method replace_parameterization_argument (line 621) | def replace_parameterization_argument(
  class ParsedLight (line 631) | class ParsedLight:
    method __init__ (line 643) | def __init__(self, name: str) -> None:
    method __str__ (line 648) | def __str__(self) -> str:
    method best_overload (line 651) | def best_overload(self) -> ParsedLightOverload:
  function is_automatic_light_compatible (line 658) | def is_automatic_light_compatible(light_name: str) -> bool:
  function get_parsed_light (line 697) | def get_parsed_light(light_name: str) -> ParsedLight:
  class LightsTxtFileParsingError (line 708) | class LightsTxtFileParsingError(Exception):
  function parse_lights_file (line 712) | def parse_lights_file():

FILE: io_xplane2blender/xplane_utils/xplane_updater_helpers.py
  function _get_enum_item (line 11) | def _get_enum_item(
  function check_property_group_has_non_default (line 38) | def check_property_group_has_non_default(
  function copy_property_group (line 83) | def copy_property_group(
  function copy_former_property_group_to_property_group (line 146) | def copy_former_property_group_to_property_group(
  function delete_property_from_datablock (line 157) | def delete_property_from_datablock(
  function delete_property_from_blend_file (line 175) | def delete_property_from_blend_file(idprop_groups: List[Any], prop: str)...
  function reorder_enum_prop (line 191) | def reorder_enum_prop(
  function rename_prop (line 204) | def rename_prop(

FILE: io_xplane2blender/xplane_utils/xplane_wiper_gradient.py
  function _get_pixel (line 18) | def _get_pixel(
  function _put_pixel (line 26) | def _put_pixel(
  function make_wiper_images (line 36) | def make_wiper_images(

FILE: mkbuild.py
  function _build_number_sanity_check (line 13) | def _build_number_sanity_check(string: str):
  function _raise (line 37) | def _raise(ex):
  function _number_check_ge (line 41) | def _number_check_ge(n):
  function _make_parser (line 49) | def _make_parser() -> argparse.ArgumentParser:
  class VerData (line 149) | class VerData:
    method __init__ (line 154) | def __init__(
    method make_new_build_number (line 169) | def make_new_build_number():
  function _change_version_info (line 174) | def _change_version_info(new_version: VerData) -> Optional[VerData]:
  function _run_tests (line 260) | def _run_tests(test_args) -> None:
  function _delete_unwanted_contents (line 269) | def _delete_unwanted_contents(keep_files: str) -> None:
  function _make_and_place_zip (line 315) | def _make_and_place_zip(new_version: VerData, tmp_build_folder: str, des...
  function main (line 361) | def main(argv=None):

FILE: run.py
  function _make_argparse (line 13) | def _make_argparse():
  function main (line 37) | def main(argv=None) -> int:

FILE: tests.py
  function clean_tmp_folder (line 11) | def clean_tmp_folder():
  function _make_argparse (line 25) | def _make_argparse():
  function main (line 94) | def main(argv=None) -> int:

FILE: tests/addon/addon.test.py
  class TestAddon (line 4) | class TestAddon(XPlaneTestCase):
    method test_addon_enabled (line 5) | def test_addon_enabled(self):

FILE: tests/addon/multiple_export_works.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestMultipleExportWorks (line 18) | class TestMultipleExportWorks(XPlaneTestCase):
    method test_multiple_export_works_simple (line 19) | def test_multiple_export_works_simple(self)->None:
    method test_multiple_export_works_uv_map (line 30) | def test_multiple_export_works_uv_map(self)->None:
    method test_multiple_export_works_anim_bone (line 41) | def test_multiple_export_works_anim_bone(self)->None:

FILE: tests/animation/TestCase1.test.py
  class TestCase1 (line 9) | class TestCase1(XPlaneAnimationTestCase):
    method test_TestCase1 (line 10) | def test_TestCase1(self):

FILE: tests/animation/TestCase2.test.py
  class TestCase2 (line 9) | class TestCase2(XPlaneAnimationTestCase):
    method test_TestCase2 (line 10) | def test_TestCase2(self):

FILE: tests/animation/TestCase3.test.py
  class TestCase3 (line 9) | class TestCase3(XPlaneAnimationTestCase):
    method test_TestCase3 (line 10) | def test_TestCase3(self):

FILE: tests/animation/TestCase4.test.py
  class TestCase4 (line 9) | class TestCase4(XPlaneAnimationTestCase):
    method test_TestCase4 (line 10) | def test_TestCase4(self):

FILE: tests/animation/TestCase5_nested_sets.test.py
  class TestCase5_nested_sets (line 9) | class TestCase5_nested_sets(XPlaneAnimationTestCase):
    method test_TestCase5_nested_sets (line 10) | def test_TestCase5_nested_sets(self):

FILE: tests/animation/TestCase6_scaling_rot.test.py
  class TestCase6_scaling_rot (line 9) | class TestCase6_scaling_rot(XPlaneAnimationTestCase):
    method test_TestCase6_scaling_rot (line 10) | def test_TestCase6_scaling_rot(self):

FILE: tests/animation/TestCase7_scaling_rotloc.test.py
  class TestCase7_scaling_rotloc (line 9) | class TestCase7_scaling_rotloc(XPlaneAnimationTestCase):
    method test_TestCase7_scaling_rotloc (line 10) | def test_TestCase7_scaling_rotloc(self):

FILE: tests/animation/TestCase8_bone_optimization.test.py
  class TestCase8_bone_optimization (line 9) | class TestCase8_bone_optimization(XPlaneAnimationTestCase):
    method test_TestCase8_bone_optimization (line 10) | def test_TestCase8_bone_optimization(self):

FILE: tests/animation/TestCase9_keyframe_loops.test.py
  class TestCase9_keyframe_loops (line 9) | class TestCase9_keyframe_loops(XPlaneAnimationTestCase):
    method test_TestCase9_keyframe_loops (line 10) | def test_TestCase9_keyframe_loops(self):

FILE: tests/animation/armature_bone_block_parent_relationships.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestArmatureBoneBlockParentRelationships (line 18) | class TestArmatureBoneBlockParentRelationships(XPlaneTestCase):
    method test_Armature_arm_anim_bone_anim (line 19) | def test_Armature_arm_anim_bone_anim(self):
    method test_Armature_arm_anim_bone_no_anim (line 28) | def test_Armature_arm_anim_bone_no_anim(self):
    method test_Armature_arm_no_anim_bone_anim (line 37) | def test_Armature_arm_no_anim_bone_anim(self):
    method test_Armature_arm_no_anim_bone_no_anim (line 46) | def test_Armature_arm_no_anim_bone_no_anim(self):
    method test_no_parent (line 55) | def test_no_parent(self):

FILE: tests/animation/armature_nested_offset.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestArmatureNestedOffset (line 16) | class TestArmatureNestedOffset(XPlaneTestCase):
    method test_01_datablock_datablock (line 17) | def test_01_datablock_datablock(self):
    method test_02_bone_datablock (line 26) | def test_02_bone_datablock(self):
    method test_03_bone_bone_connected_offset_translation (line 35) | def test_03_bone_bone_connected_offset_translation(self):
    method test_05_bone_bone_connected_no_offset_translation (line 44) | def test_05_bone_bone_connected_no_offset_translation(self):

FILE: tests/animation/axis.test.disabled.py
  class TestAxis (line 10) | class TestAxis(XPlaneTestCase):
    method test_axis (line 11) | def test_axis(self):

FILE: tests/animation/bone_animations.test.py
  class TestBoneAnimations (line 9) | class TestBoneAnimations(XPlaneTestCase):
    method test_bone_animations (line 10) | def test_bone_animations(self):
    method test_nested_bone_animations (line 22) | def test_nested_bone_animations(self):

FILE: tests/animation/multiple_armatures.test.py
  class TestMultipleArmatures (line 9) | class TestMultipleArmatures(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method test_multiple_armatures (line 13) | def test_multiple_armatures(self):

FILE: tests/animation/nested_armatures.test.py
  class TestNestedArmatures (line 9) | class TestNestedArmatures(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method test_nested_armatures (line 13) | def test_nested_armatures(self):

FILE: tests/animation/nested_bones.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestNestedBones (line 16) | class TestNestedBones(XPlaneTestCase):
    method test_1_Armature_child_bones_one_leaf_mesh (line 17) | def test_1_Armature_child_bones_one_leaf_mesh(self):
    method test_2_Armature_child_bones_mesh_on_each (line 26) | def test_2_Armature_child_bones_mesh_on_each(self):
    method test_3_Armature_multiple_arms_one_leaf_mesh (line 35) | def test_3_Armature_multiple_arms_one_leaf_mesh(self):
    method test_4_Armature_multiple_arms_child_bones_on_each (line 44) | def test_4_Armature_multiple_arms_child_bones_on_each(self):

FILE: tests/animation/no_dropped_dup_keys.test.py
  class TestNoDroppedDupKeys (line 9) | class TestNoDroppedDupKeys(XPlaneTestCase):
    method test_no_drop_dup_keys (line 10) | def test_no_drop_dup_keys(self):

FILE: tests/animation/one_kf_point_fcurve_ignored.test.py
  class OneKFPointFCurveIgnored (line 14) | class OneKFPointFCurveIgnored(XPlaneTestCase):
    method test_kf_points_1_ignored_2_used (line 15) | def test_kf_points_1_ignored_2_used(self)->None:

FILE: tests/animation/show_hide_anim_types.test.py
  class TestShowHideAnimTypes (line 9) | class TestShowHideAnimTypes(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method test_show_hide_anim_types (line 13) | def test_show_hide_anim_types(self):

FILE: tests/animation/single_bone_initial_rotation.test.py
  class TestSingleBoneInitialRotation (line 9) | class TestSingleBoneInitialRotation(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method test_single_bone_initial_rotation (line 13) | def test_single_bone_initial_rotation(self):

FILE: tests/animation/transform_stack_w_parent.test.py
  class TestTransformStackWParent (line 9) | class TestTransformStackWParent(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method test_transform_stack_w (line 13) | def test_transform_stack_w(self):

FILE: tests/animation/transform_stack_wo_parent.test.py
  class TestTransformStackWOParent (line 9) | class TestTransformStackWOParent(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method test_transform_stack_wo (line 13) | def test_transform_stack_wo(self):

FILE: tests/build_system/build_number_obj_footer.test.py
  class TestBlendBuildNumberObjFooter (line 11) | class TestBlendBuildNumberObjFooter(XPlaneTestCase):
    method test_build_number_obj_footer (line 12) | def test_build_number_obj_footer(self):

FILE: tests/build_system/build_number_prop.test.py
  class TestBuildNumberProp (line 14) | class TestBuildNumberProp(XPlaneTestCase):
    method test_safe_set_version_data (line 17) | def test_safe_set_version_data(self):

FILE: tests/build_system/build_number_updater.test.py
  class TestBuildNumberUpdater (line 14) | class TestBuildNumberUpdater(XPlaneTestCase):
    method run_update_cycle (line 16) | def run_update_cycle(self, filename: str, to_parse: str):
    method test_update_from_3_2_14 (line 53) | def test_update_from_3_2_14(self):
    method test_update_from_3_3_13 (line 60) | def test_update_from_3_3_13(self):
    method test_update_from_3_4_0 (line 67) | def test_update_from_3_4_0(self):
    method test_update_from_new_file (line 73) | def test_update_from_new_file(self):

FILE: tests/build_system/build_number_verstruct.test.py
  class TestBuildNumberVerStruct (line 15) | class TestBuildNumberVerStruct(XPlaneTestCase):
    method test_constructor_defaults_correct (line 19) | def test_constructor_defaults_correct(self):
    method test_repr_makes_struct_in_eval (line 53) | def test_repr_makes_struct_in_eval(self):
    method test_xplane2blender_str (line 63) | def test_xplane2blender_str(self):
    method test_invalid_ver_addition (line 71) | def test_invalid_ver_addition(self):
    method test_valid_ver_addition (line 83) | def test_valid_ver_addition(self):
    method test_make_new_build_number (line 95) | def test_make_new_build_number(self):
    method test_parse_version (line 103) | def test_parse_version(self):
    method test_rich_compare (line 207) | def test_rich_compare(self):

FILE: tests/features/cockpit_features/cockpit_device.test.py
  class TestCockpitDevice (line 15) | class TestCockpitDevice(XPlaneTestCase):
    method test_passing_cases (line 16) | def test_passing_cases(self) -> None:
    method test_failing_cases (line 34) | def test_failing_cases(self) -> None:

FILE: tests/features/cockpit_features/cockpit_lit_only.test.py
  class TestCockpitLitOnly (line 15) | class TestCockpitLitOnly(XPlaneTestCase):
    method test_Scene_1100 (line 16) | def test_Scene_1100(self) -> None:
    method test_Scene_1110 (line 27) | def test_Scene_1110(self) -> None:
    method test_Scene_default_version (line 48) | def test_Scene_default_version(self) -> None:

FILE: tests/features/cockpit_features/cockpit_material.test.py
  class TestCockpitMaterial (line 13) | class TestCockpitMaterial(XPlaneTestCase):
    method test_cockpit_export (line 14) | def test_cockpit_export(self):
    method test_aircraft_material (line 25) | def test_aircraft_material(self):

FILE: tests/features/cockpit_features/cockpit_panel_luminance.test.py
  class TestCockpitFeatureLuminance (line 15) | class TestCockpitFeatureLuminance(XPlaneTestCase):
    method test_cockpit_feature_luminance (line 16) | def test_cockpit_feature_luminance(self)->None:

FILE: tests/features/cockpit_features/cockpit_regions.test.py
  class TestCockpitRegions (line 15) | class TestCockpitRegions(XPlaneTestCase):
    method test_cockpit_regions (line 16) | def test_cockpit_regions(self) -> None:

FILE: tests/features/cockpit_features/hud_glass.test.py
  class TestHudGlass (line 15) | class TestHudGlass(XPlaneTestCase):
    method test_hud_glass (line 16) | def test_hud_glass(self)->None:

FILE: tests/features/draped.test.py
  class TestDraped (line 10) | class TestDraped(XPlaneTestCase):
    method test_draped_export (line 11) | def test_draped_export(self):

FILE: tests/features/draw_enabled.test.py
  class TestDrawEnabled (line 10) | class TestDrawEnabled(XPlaneTestCase):
    method test_draped_export (line 11) | def test_draped_export(self):

FILE: tests/features/export_control_methods.test.py
  class TestExportControlMethods (line 14) | class TestExportControlMethods(XPlaneTestCase):
    method test_ExpCollectionDisabledInViewport (line 15) | def test_ExpCollectionDisabledInViewport(self)->None:
    method test_ExpCollectionHiddenInViewport (line 19) | def test_ExpCollectionHiddenInViewport(self)->None:
    method test_ExpCollectionNotMarkedExportable (line 23) | def test_ExpCollectionNotMarkedExportable(self)->None:
    method test_ExpCollectionParentDisabledInViewport (line 27) | def test_ExpCollectionParentDisabledInViewport(self)->None:
    method test_ExpCollectionParentHiddenInViewport (line 31) | def test_ExpCollectionParentHiddenInViewport(self)->None:
    method test_CubeNotMarkedExportable (line 35) | def test_CubeNotMarkedExportable(self)->None:
    method test_ExpObjectDisabledInViewport (line 39) | def test_ExpObjectDisabledInViewport(self)->None:
    method test_ExpObjectHiddenInViewport (line 43) | def test_ExpObjectHiddenInViewport(self)->None:

FILE: tests/features/export_control_methods_lights.test.py
  class TestExportControlMethodsLights (line 14) | class TestExportControlMethodsLights(XPlaneTestCase):
    method test_NotAnimated (line 15) | def test_NotAnimated(self)->None:
    method test_Animated (line 30) | def test_Animated(self)->None:

FILE: tests/features/export_control_methods_object.test.py
  class TestExportControlMethodsObject (line 14) | class TestExportControlMethodsObject(XPlaneTestCase):
    method test_DisabledInViewport (line 15) | def test_DisabledInViewport(self)->None:
    method test_HiddenInViewport (line 25) | def test_HiddenInViewport(self)->None:

FILE: tests/features/export_path_dir/Custom Scenery/Kansas City/cars/honda_1.test.py
  function filterLines (line 9) | def filterLines(line):
  class TestExportPathCustomScene_1 (line 12) | class TestExportPathCustomScene_1(XPlaneTestCase):
    method test_find_custom_scenery (line 13) | def test_find_custom_scenery(self):

FILE: tests/features/export_path_dir/default_scenery/Kansas City/cars/honda_2.test.py
  function filterLines (line 9) | def filterLines(line):
  class TestExportPathCustomScene_2 (line 12) | class TestExportPathCustomScene_2(XPlaneTestCase):
    method test_find_default_scenery (line 13) | def test_find_default_scenery(self):

FILE: tests/features/export_path_dir/default_scenery/Kansas City/honda_3.test.py
  function filterLines (line 9) | def filterLines(line):
  class TestExportPathCustomScene_3 (line 12) | class TestExportPathCustomScene_3(XPlaneTestCase):
    method test_no_second_folder_works (line 13) | def test_no_second_folder_works(self):

FILE: tests/features/export_path_dir/default_scenery/four/levels/deep/cars/honda_5.test.py
  function filterLines (line 9) | def filterLines(line):
  class TestExportPathCustomScene_5 (line 12) | class TestExportPathCustomScene_5(XPlaneTestCase):
    method test_deeply_nested_still_works (line 13) | def test_deeply_nested_still_works(self):

FILE: tests/features/export_path_dir/default_scenery/honda_4.test.py
  function filterLines (line 9) | def filterLines(line):
  class TestExportPathCustomScene_4 (line 12) | class TestExportPathCustomScene_4(XPlaneTestCase):
    method test_missing_one_dir_after_fails (line 13) | def test_missing_one_dir_after_fails(self):

FILE: tests/features/float_prop_follows_precision.test.py
  class TestFloatPropFollowsPrecision (line 16) | class TestFloatPropFollowsPrecision(XPlaneTestCase):
    method test_float_prec_start_end_height_cmp (line 17) | def test_float_prec_start_end_height_cmp(self) -> None:
    method test_float_prec_manip_props_wysiwyg (line 25) | def test_float_prec_manip_props_wysiwyg(self) -> None:

FILE: tests/features/global_luminance.test.py
  class TestGlobalLuminance (line 16) | class TestGlobalLuminance(XPlaneTestCase):
    method test_global_luminance (line 17) | def test_global_luminance(self)->None:

FILE: tests/features/instanced.test.py
  class TestInstanced (line 10) | class TestInstanced(XPlaneTestCase):
    method test_instanced_export (line 11) | def test_instanced_export(self):

FILE: tests/features/instant_export_from_menu.test.py
  class TestInstantExportFromMenu (line 13) | class TestInstantExportFromMenu(XPlaneTestCase):
    method assert_file_exists (line 14) | def assert_file_exists(self,layer_num:int,relpath:str):
    method test_ensure_append (line 25) | def test_ensure_append(self):
    method test_ensure_no_append (line 28) | def test_ensure_no_append(self):
    method test_ensure_no_folder_named_filename (line 31) | def test_ensure_no_folder_named_filename(self):
    method test_ensure_no_abs_path_filename (line 38) | def test_ensure_no_abs_path_filename(self):
    method test_ensure_paths_are_normalized_filename (line 48) | def test_ensure_paths_are_normalized_filename(self):
    method test_ensure_blender_paths_resolve_filename (line 51) | def test_ensure_blender_paths_resolve_filename(self):
    method test_ensure_lazy_paths_resolve_filename (line 56) | def test_ensure_lazy_paths_resolve_filename(self):
    method test_ensure_dot_paths_are_created_filename (line 60) | def test_ensure_dot_paths_are_created_filename(self):

FILE: tests/features/light_level_photometric.test.py
  class TestLightLevelPhotometric (line 16) | class TestLightLevelPhotometric(XPlaneTestCase):
    method test_feature_exports (line 17) | def test_feature_exports(self) -> None:
    method test_wrong_export_types (line 35) | def test_wrong_export_types(self):
    method test_exports_with_photometric_ignored (line 43) | def test_exports_with_photometric_ignored(self) -> None:

FILE: tests/features/light_level_reset.test.py
  class TestLightLevelReset (line 15) | class TestLightLevelReset(XPlaneTestCase):
    method test_light_level_reset_directives (line 16) | def test_light_level_reset_directives(self) -> None:

FILE: tests/features/lights.test.py
  class TestLights (line 10) | class TestLights(XPlaneTestCase):
    method test_lights_export (line 11) | def test_lights_export(self):

FILE: tests/features/lod.test.py
  class TestLODs (line 95) | class TestLODs(XPlaneTestCase):
    method test_lods_export (line 96) | def test_lods_export(self):

FILE: tests/features/lod_overrides/lod_overrides_applied.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestLodOverridesApplied (line 19) | class TestLodOverridesApplied(XPlaneTestCase):
    method _assert_root (line 20) | def _assert_root(self, filename:str)->None:
    method test_AllIgnored (line 33) | def test_AllIgnored(self)->None:
    method test_IncludeAndIgnore (line 37) | def test_IncludeAndIgnore(self)->None:
    method test_NestedDuplicateOverrides (line 41) | def test_NestedDuplicateOverrides(self)->None:
    method test_NonSequentialOverrides (line 45) | def test_NonSequentialOverrides(self)->None:
    method test_NoOverridesTakesParents (line 49) | def test_NoOverridesTakesParents(self)->None:
    method test_OverridesAppliedToAllChildren (line 53) | def test_OverridesAppliedToAllChildren(self)->None:
    method test_OverridesCombined (line 57) | def test_OverridesCombined(self)->None:
    method test_ExportableObjectOverride_object_special_1_2_3 (line 61) | def test_ExportableObjectOverride_object_special_1_2_3(self)->None:

FILE: tests/features/lod_validation.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestLodValidation (line 18) | class TestLodValidation(XPlaneTestCase):
    method _test_fail_case (line 19) | def _test_fail_case(self, name:str, num_errors:int=1):
    method _test_passing_case (line 23) | def _test_passing_case(self, filename:str):
    method test_fail_2a_additive_ordered_backwards (line 31) | def test_fail_2a_additive_ordered_backwards(self)->None:
    method test_fail_2b_additive_ordered_out_of_order (line 35) | def test_fail_2b_additive_ordered_out_of_order(self)->None:
    method test_fail_3a_selective_ordered_backwards (line 39) | def test_fail_3a_selective_ordered_backwards(self)->None:
    method test_fail_3b_selective_ordered_out_of_order (line 43) | def test_fail_3b_selective_ordered_out_of_order(self)->None:
    method test_fail_3c_selective_ordered_out_of_order_decreasing_ranges (line 47) | def test_fail_3c_selective_ordered_out_of_order_decreasing_ranges(self...
    method test_fail_4a_additive_to_selective_mixed (line 51) | def test_fail_4a_additive_to_selective_mixed(self)->None:
    method test_fail_4b_selective_to_additive_mixed (line 55) | def test_fail_4b_selective_to_additive_mixed(self)->None:
    method test_fail_5a_selective_far_near_equal_gap (line 59) | def test_fail_5a_selective_far_near_equal_gap(self)->None:
    method test_fail_5b_selective_far_near_equal_overlap (line 63) | def test_fail_5b_selective_far_near_equal_overlap(self)->None:
    method test_fail_6a_selective_1st_near_is_0 (line 67) | def test_fail_6a_selective_1st_near_is_0(self)->None:
    method test_fail_7a_additive_bucket_near_is_far (line 71) | def test_fail_7a_additive_bucket_near_is_far(self)->None:
    method test_fail_7b_selective_bucket_near_is_far (line 75) | def test_fail_7b_selective_bucket_near_is_far(self)->None:
    method test_pass_1_validations_not_applied (line 79) | def test_pass_1_validations_not_applied(self)->None:
    method test_pass_2a_additive_ordered (line 83) | def test_pass_2a_additive_ordered(self)->None:
    method test_pass_3a_selective_ordered (line 87) | def test_pass_3a_selective_ordered(self)->None:
    method test_pass_4a_additive_not_mixed (line 91) | def test_pass_4a_additive_not_mixed(self)->None:
    method test_pass_4b_selective_not_mixed (line 95) | def test_pass_4b_selective_not_mixed(self)->None:
    method test_pass_5a_selective_far_near_equal (line 99) | def test_pass_5a_selective_far_near_equal(self)->None:
    method test_pass_6a_selective_1st_near_is_0 (line 103) | def test_pass_6a_selective_1st_near_is_0(self)->None:
    method test_pass_7a_1st_lod_is_1st_command (line 107) | def test_pass_7a_1st_lod_is_1st_command(self)->None:

FILE: tests/features/magnets.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestMagnets (line 16) | class TestMagnets(XPlaneTestCase):
    method test_passing_magnets (line 17) | def test_passing_magnets(self):
    method test_no_type (line 26) | def test_no_type(self):
    method test_blank_debug_name (line 30) | def test_blank_debug_name(self):
    method test_wrong_export_type (line 34) | def test_wrong_export_type(self):

FILE: tests/features/manipulators.test.py
  class TestMaterials (line 13) | class TestMaterials(XPlaneTestCase):
    method test_manipulator_attributes (line 14) | def test_manipulator_attributes(self):
    method test_export_manipulators (line 268) | def test_export_manipulators(self):

FILE: tests/features/materials.test.py
  class TestMaterials (line 13) | class TestMaterials(XPlaneTestCase):
    method test_material_attributes (line 14) | def test_material_attributes(self):
    method test_export_materials (line 150) | def test_export_materials(self):

FILE: tests/features/no_material.test.py
  class TestNoMaterial (line 11) | class TestNoMaterial(XPlaneTestCase):
    method test_no_material (line 12) | def test_no_material(self):

FILE: tests/features/passive_resetting.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestPassiveResetting (line 18) | class TestPassiveResetting(XPlaneTestCase):
    method test_cube_empty_cube (line 19) | def test_cube_empty_cube(self):
    method test_instanced_header_empty_cube (line 28) | def test_instanced_header_empty_cube(self):

FILE: tests/features/rain/bake_wiper_texture.test.py
  class TestBakeWiperTexture (line 17) | class TestBakeWiperTexture(XPlaneTestCase):
    method setUp (line 18) | def setUp(self):
    method _test_bake_op (line 37) | def _test_bake_op(self, slot: str) -> None:
    method test_bake_systems (line 108) | def test_bake_systems(self) -> None:

FILE: tests/features/rain/bake_wiper_texture_bad_rgb_only.test.py
  class TestBakeWiperTextureBadRGBOnly (line 17) | class TestBakeWiperTextureBadRGBOnly(XPlaneTestCase):
    method test_bad_wiper_image_rgb_only (line 18) | def test_bad_wiper_image_rgb_only(self)->None:

FILE: tests/features/rain/rain_header_props.test.py
  class TestRainHeaderProps (line 16) | class TestRainHeaderProps(XPlaneTestCase):
    method test_thermal_wiper_fixtures (line 17) | def test_thermal_wiper_fixtures(self) -> None:
    method test_no_options (line 36) | def test_no_options(self) -> None:
    method test_errors (line 56) | def test_errors(self) -> None:

FILE: tests/features/various.test.py
  class TestMaterials (line 10) | class TestMaterials(XPlaneTestCase):
    method test_custom_prop_export (line 12) | def test_custom_prop_export(self):
    method test_conditions_export (line 25) | def test_conditions_export(self):
    method test_optimize_export (line 39) | def test_optimize_export(self):
    method test_texture_coords_export (line 56) | def test_texture_coords_export(self):
    method test_group_instances_export (line 71) | def test_group_instances_export(self):
    method test_custom_header_props_export (line 86) | def test_custom_header_props_export(self):
    method test_custom_anim_prop_export (line 99) | def test_custom_anim_prop_export(self):
    method test_show_hide_animation_export (line 112) | def test_show_hide_animation_export(self):

FILE: tests/lights/aim_non_spot_light.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestAimNonSpotLight (line 16) | class TestAimNonSpotLight(XPlaneTestCase):
    method test_aim_non_spot_light (line 17) | def test_aim_non_spot_light(self):

FILE: tests/lights/anim_vs_non_anim_vs_is_nested.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestAnimVsNonAnimVsIsNested (line 16) | class TestAnimVsNonAnimVsIsNested(XPlaneTestCase):
    method test_anim_vs_non_anim_vs_has_parent (line 17) | def test_anim_vs_non_anim_vs_has_parent(self):

FILE: tests/lights/automatic_detect/automatic_ignore_old_lights.test.py
  class TestAutomaticIgnoreOldLights (line 15) | class TestAutomaticIgnoreOldLights(XPlaneTestCase):
    method test_automatic_ignore_old_lights (line 16) | def test_automatic_ignore_old_lights(self)->None:

FILE: tests/lights/automatic_detect/automatic_is_omni_light.test.py
  class TestAutomaticIsOmniLight (line 15) | class TestAutomaticIsOmniLight(XPlaneTestCase):
    method test_omni_lights (line 16) | def test_omni_lights(self)->None:
    method test_non_omni_lights (line 25) | def test_non_omni_lights(self)->None:
    method test_is_omni_api (line 34) | def test_is_omni_api(self)->None:
    method test_is_non_omni_api (line 51) | def test_is_non_omni_api(self)->None:

FILE: tests/lights/automatic_detect/automatic_light_properties.test.py
  class TestAutomaticLightProperties (line 15) | class TestAutomaticLightProperties(XPlaneTestCase):
    method test_automatic_light_properties (line 16) | def test_automatic_light_properties(self)->None:

FILE: tests/lights/automatic_detect/automatic_parent_and_self_animated.test.py
  class TestAutomaticParentAndSelfAnimated (line 15) | class TestAutomaticParentAndSelfAnimated(XPlaneTestCase):
    method test_self_animated_lights (line 16) | def test_self_animated_lights(self)->None:
    method test_parent_animated_lights (line 26) | def test_parent_animated_lights(self)->None:

FILE: tests/lights/automatic_detect/automatic_point_vs_spot.test.py
  class TestAutomaticPointVsSpot (line 15) | class TestAutomaticPointVsSpot(XPlaneTestCase):
    method test_automatic_point_vs_spot_error (line 16) | def test_automatic_point_vs_spot_error(self)->None:
    method test_automatic_point_vs_spot_okay (line 21) | def test_automatic_point_vs_spot_okay(self)->None:

FILE: tests/lights/automatic_detect/automatic_special_animation_cases.test.py
  class TestAutomaticSpecialAnimationCases (line 15) | class TestAutomaticSpecialAnimationCases(XPlaneTestCase):
    method test_automatic_special_animation_cases (line 16) | def test_automatic_special_animation_cases(self)->None:
    method test_automatic_special_animation_dir_mag_calc_cases (line 26) | def test_automatic_special_animation_dir_mag_calc_cases(self)->None:

FILE: tests/lights/automatic_detect/automatic_width_recalc.test.py
  class TestAutomaticWidthRecalc (line 15) | class TestAutomaticWidthRecalc(XPlaneTestCase):
    method test_spot_params_bb (line 16) | def test_spot_params_bb(self)->None:
    method test_spot_params_bb_rotated_90 (line 26) | def test_spot_params_bb_rotated_90(self)->None:
    method test_spot_params_bb_rotated_off_axis (line 36) | def test_spot_params_bb_rotated_off_axis(self)->None:

FILE: tests/lights/custom_light_rgb_override.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestCustomLightRGBOverride (line 15) | class TestCustomLightRGBOverride(XPlaneTestCase):
    method test_Custom_Spot_RGB_values_disabled (line 16) | def test_Custom_Spot_RGB_values_disabled(self):
    method test_Custom_Spot_RGB_values_enabled (line 25) | def test_Custom_Spot_RGB_values_enabled(self):

FILE: tests/lights/known_vs_unknown_named_vs_param.test.py
  class TestKnownVsUnknownNamedVsParam (line 16) | class TestKnownVsUnknownNamedVsParam(XPlaneTestCase):
    method test_01_known_param_should_error (line 17) | def test_01_known_param_should_error(self):
    method test_02_known_named_should_pass (line 21) | def test_02_known_named_should_pass(self):
    method test_03_unknown_should_pass_no_auto (line 26) | def test_03_unknown_should_pass_no_auto(self):
    method test_04_known_param_enough_params_should_pass (line 31) | def test_04_known_param_enough_params_should_pass(self):
    method test_05_known_param_not_enough_params_should_error (line 35) | def test_05_known_param_not_enough_params_should_error(self):
    method test_06_known_named_fake_params_should_error (line 39) | def test_06_known_named_fake_params_should_error(self):
    method test_07_known_named_empty_param_should_error (line 43) | def test_07_known_named_empty_param_should_error(self):
    method test_08_unknown_params (line 47) | def test_08_unknown_params(self):
    method test_09_unknown_empty_params (line 51) | def test_09_unknown_empty_params(self):
    method test_10_custom_light_not_autocorrected (line 55) | def test_10_custom_light_not_autocorrected(self):

FILE: tests/lights/light_spill_custom_attributes.test.py
  class TestLightSpillCustomAttributes (line 14) | class TestLightSpillCustomAttributes(XPlaneTestCase):
    method test_light_attributes (line 15) | def test_light_attributes(self)->None:
    method test_incompatible_light_types (line 33) | def test_incompatible_light_types(self):

FILE: tests/lights/light_type_vs_is_omni_vs_is_optimized.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestLightTypeVsIsOmniVsIsOptimized (line 16) | class TestLightTypeVsIsOmniVsIsOptimized(XPlaneTestCase):
    method test_point_vs_is_omni_vs_is_optimized (line 17) | def test_point_vs_is_omni_vs_is_optimized(self):
    method test_spot_vs_is_omni_vs_is_optimized (line 26) | def test_spot_vs_is_omni_vs_is_optimized(self):

FILE: tests/lights/omni_dir_param_name_bb_sp_both.test.py
  function filterLines (line 10) | def filterLines(line):
  class TestOmniDirParamNameBbSpBoth (line 15) | class TestOmniDirParamNameBbSpBoth(XPlaneTestCase):
    method test_bb_and_sp_both (line 16) | def test_bb_and_sp_both(self):
    method test_bb_omni_param (line 25) | def test_bb_omni_param(self):
    method test_dir_and_sp (line 34) | def test_dir_and_sp(self):
    method test_named (line 43) | def test_named(self):

FILE: tests/lights/param_light_params.test.py
  class TestParamLightParams (line 12) | class TestParamLightParams(XPlaneTestCase):
    method test_comment_correct (line 13) | def test_comment_correct(self):
    method test_illegal_params_content (line 19) | def test_illegal_params_content(self):
    method test_unused_param_pass (line 23) | def test_unused_param_pass(self):
    method test_unused_param_fail (line 33) | def test_unused_param_fail(self):

FILE: tests/lights/rotation_delta_autocorrect.test.py
  function filterLines (line 10) | def filterLines(line):
  class TestRotationDeltaAutoCorrect (line 15) | class TestRotationDeltaAutoCorrect(XPlaneTestCase):
    method test_rotation_delta_autocorrect (line 16) | def test_rotation_delta_autocorrect(self):

FILE: tests/lights/sw_light_callback_applied.test.py
  class TestSwLightCallbackApplied (line 15) | class TestSwLightCallbackApplied(XPlaneTestCase):
    method test_sw_light_callback_used (line 16) | def test_sw_light_callback_used(self):

FILE: tests/lights/v12_lights_cd_export.test.py
  class TestV12LightsCDExport (line 16) | class TestV12LightsCDExport(XPlaneTestCase):
    method test_v12_lights_have_candela (line 17) | def test_v12_lights_have_candela(self) -> None:

FILE: tests/materials/blend_glass/blend_glass.test.py
  function filterLines (line 12) | def filterLines(line):
  class TestBlendGlass (line 16) | class TestBlendGlass(XPlaneTestCase):
    method test_air_glass_off_expect_no_dir (line 17) | def test_air_glass_off_expect_no_dir(self):
    method test_air_glass_on_expect_dir (line 26) | def test_air_glass_on_expect_dir(self):
    method test_ckpt_glass_off_expect_no_dir (line 35) | def test_ckpt_glass_off_expect_no_dir(self):
    method test_ckpt_glass_on_expect_dir (line 44) | def test_ckpt_glass_on_expect_dir(self):
    method test_panel_glass_off_expect_no_dir (line 53) | def test_panel_glass_off_expect_no_dir(self):
    method test_panel_glass_on_expect_dir (line 62) | def test_panel_glass_on_expect_dir(self):
    method test_instanced_glass_illegal (line 71) | def test_instanced_glass_illegal(self):
    method test_scenery_glass_illegal (line 78) | def test_scenery_glass_illegal(self):

FILE: tests/materials/normal_metalness/norm_met_basic.test.py
  function get_image (line 27) | def get_image(name):
  function create_images (line 40) | def create_images():
  function get_texture_name (line 46) | def get_texture_name(is_draped,is_normal):
  function get_texture (line 59) | def get_texture(is_draped,is_normal):
  function create_textures (line 68) | def create_textures():
  function get_material_name (line 75) | def get_material_name(is_metal,is_draped):
  function get_material (line 79) | def get_material(is_metal,is_draped):
  function create_materials (line 108) | def create_materials():
  function create_object_names (line 115) | def create_object_names():
  function delete_scene_data (line 126) | def delete_scene_data():
  function create_partial_test_setup (line 146) | def create_partial_test_setup():
  function filterLines (line 210) | def filterLines(line):
  class TestNormMetBasic (line 225) | class TestNormMetBasic(XPlaneTestCase):
    method test_D_metal_NON_D_metal (line 226) | def test_D_metal_NON_D_metal(self):
    method test_D_metal_NON_D_non_metal (line 233) | def test_D_metal_NON_D_non_metal(self):
    method test_D_metal_NON_D_none (line 240) | def test_D_metal_NON_D_none(self):
    method test_D_non_metal_NON_D_metal (line 247) | def test_D_non_metal_NON_D_metal(self):
    method test_D_non_metal_NON_D_non_metal (line 255) | def test_D_non_metal_NON_D_non_metal(self):
    method test_D_non_metal_NON_D_none (line 262) | def test_D_non_metal_NON_D_none(self):
    method test_D_none_NON_D_metal (line 269) | def test_D_none_NON_D_metal(self):
    method test_D_none_NON_D_non_metal (line 277) | def test_D_none_NON_D_non_metal(self):
    method test_D_none_NON_D_none (line 284) | def test_D_none_NON_D_none(self):

FILE: tests/materials/normal_metalness/norm_met_draped_spec_scenery.test.py
  function filterLines (line 12) | def filterLines(line):
  class TestNormMetDrapedSpecScenery (line 23) | class TestNormMetDrapedSpecScenery(XPlaneTestCase):
    method test_norm_met_off_one_drap_inst (line 24) | def test_norm_met_off_one_drap_inst(self):
    method test_norm_met_off_one_drap_scen (line 28) | def test_norm_met_off_one_drap_scen(self):
    method test_norm_met_off_two_drap_inst (line 32) | def test_norm_met_off_two_drap_inst(self):
    method test_norm_met_off_two_drap_scen (line 37) | def test_norm_met_off_two_drap_scen(self):
    method test_norm_met_on_one_drap_inst (line 42) | def test_norm_met_on_one_drap_inst(self):
    method test_norm_met_on_one_drap_scen (line 46) | def test_norm_met_on_one_drap_scen(self):
    method test_norm_met_on_two_drap_inst (line 50) | def test_norm_met_on_two_drap_inst(self):
    method test_norm_met_on_two_drap_scen (line 54) | def test_norm_met_on_two_drap_scen(self):

FILE: tests/materials/normal_metalness/norm_met_spec.test.py
  function create_partial_test_env (line 6) | def create_partial_test_env(self):
  function filterLines (line 49) | def filterLines(line):
  class TestNormMetSpec (line 59) | class TestNormMetSpec(XPlaneTestCase):
    method test_none_1_mat_inst (line 60) | def test_none_1_mat_inst(self):
    method test_none_1_mat_scen (line 68) | def test_none_1_mat_scen(self):
    method test_none_2_mat_inst (line 76) | def test_none_2_mat_inst(self):
    method test_none_2_mat_scen (line 80) | def test_none_2_mat_scen(self):
    method test_norm_1_mat_inst (line 88) | def test_norm_1_mat_inst(self):
    method test_norm_1_mat_scen (line 96) | def test_norm_1_mat_scen(self):
    method test_norm_2_mat_inst (line 104) | def test_norm_2_mat_inst(self):
    method test_norm_2_mat_scen (line 112) | def test_norm_2_mat_scen(self):

FILE: tests/materials/normal_metalness/norm_met_validations.test.py
  class TestNormMetValidations (line 11) | class TestNormMetValidations(XPlaneTestCase):
    method test_01_mismatching_metalness_error (line 12) | def test_01_mismatching_metalness_error(self):
    method test_02_03_warn_no_nml_tex (line 16) | def test_02_03_warn_no_nml_tex(self):
    method test_06_Mixed_panel_metal_on (line 24) | def test_06_Mixed_panel_metal_on(self):
    method test_07_Mixed_panel_metal_on (line 28) | def test_07_Mixed_panel_metal_on(self):

FILE: tests/materials/objects/AOTC_2Mat_ManipRJECT.test.py
  class TestAOTC_2Mat_ManipRJECT (line 11) | class TestAOTC_2Mat_ManipRJECT(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/AOTC_2Mats_PNL.test.py
  class TestAOTC_2Mats_PNL (line 11) | class TestAOTC_2Mats_PNL(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/AOTC_Draped_RJECT.test.py
  class TestAOTC_Draped_RJECT (line 11) | class TestAOTC_Draped_RJECT(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/COTC_2Mat_Draped.test.py
  class TestCOTC_2Mat_Draped (line 11) | class TestCOTC_2Mat_Draped(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/COTC_2Mat_Hard.test.py
  class TestCOTC_2Mat_Hard (line 11) | class TestCOTC_2Mat_Hard(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/COTC_2Mat_Manip_SolidCamera.test.py
  class TestCOTC_2Mat_Manip_SolidCamera (line 11) | class TestCOTC_2Mat_Manip_SolidCamera(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/IST_2Mats_SameSPEC_DifSURF.test.py
  class TestIST_2MatsSameSPECDifSURF (line 11) | class TestIST_2MatsSameSPECDifSURF(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/IST_2Mats_VarSPEC.test.py
  class TestIST_2Mats_VarSPEC (line 11) | class TestIST_2Mats_VarSPEC(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/IST_2Mats_wDraping.test.py
  class TestIST_2Mats_wDraping (line 11) | class TestIST_2Mats_wDraping(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/SSO_2compatibleMats_Draped.test.py
  class TestSSO_2compatibleMats_Draped (line 10) | class TestSSO_2compatibleMats_Draped(XPlaneTestCase):
    method test_export (line 11) | def test_export(self):

FILE: tests/materials/objects/SSO_2incompatibleATTRs_Draped.test.py
  class TestSSO_2incompatibleATTRsDrapedMats (line 11) | class TestSSO_2incompatibleATTRsDrapedMats(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/SSO_2incompatibleDraped_Mats.test.py
  class TestSSO_2incompatibleDrapedMats (line 11) | class TestSSO_2incompatibleDrapedMats(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/SSO_illegal_usePanel_tex.test.py
  class TestSSO_IllegalUsePanelTex (line 11) | class TestSSO_IllegalUsePanelTex(XPlaneTestCase):
    method test_export (line 12) | def test_export(self):

FILE: tests/materials/objects/TEXTURE_MAP.test.py
  class TestTEXTURE_MAP_export (line 10) | class TestTEXTURE_MAP_export(XPlaneTestCase):
    method test_export (line 11) | def test_export(self):
    method test_mixed_source_error (line 28) | def test_mixed_source_error(self):

FILE: tests/materials/objects/blend_ratio.test.py
  class TestBlendRatio (line 15) | class TestBlendRatio(XPlaneTestCase):
    method test_blend_ratio (line 16) | def test_blend_ratio(self) -> None:

FILE: tests/materials/shadow/shadow_no_shadow.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestShadowNoShadow (line 16) | class TestShadowNoShadow(XPlaneTestCase):
    method test_01_all_cast_shadows_off (line 17) | def test_01_all_cast_shadows_off(self):
    method test_02_all_cast_shadows_on (line 26) | def test_02_all_cast_shadows_on(self):
    method test_03_1_cast_shadows_off (line 35) | def test_03_1_cast_shadows_off(self):
    method test_04_1_or_more_but_not_all_off (line 44) | def test_04_1_or_more_but_not_all_off(self):
    method test_05_all_cast_shadows_off_non_scenery (line 54) | def test_05_all_cast_shadows_off_non_scenery(self):

FILE: tests/materials/shadow/shadow_no_shadow_non_scenery_type.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestShadowNoShadowNonSceneryType (line 17) | class TestShadowNoShadowNonSceneryType(XPlaneTestCase):
    method test_01_all_cast_local_off (line 18) | def test_01_all_cast_local_off(self):
    method test_02_all_cast_local_on (line 27) | def test_02_all_cast_local_on(self):
    method test_03a_1_cast_local_off (line 36) | def test_03a_1_cast_local_off(self):
    method test_03b_1_or_more_cast_local_off_on_off (line 45) | def test_03b_1_or_more_cast_local_off_on_off(self):

FILE: tests/monkey/monkey.test.py
  class MonkeyTest (line 10) | class MonkeyTest(XPlaneTestCase):
    method filterLines (line 11) | def filterLines(self, line):
    method test_monkey_export (line 15) | def test_monkey_export(self):

FILE: tests/object/axis_detent_ranges.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestAxisDetentRanges (line 17) | class TestAxisDetentRanges(XPlaneTestCase):
    method test_01_known_good_test (line 18) | def test_01_known_good_test(self):
    method test_02_gen_range_list_not_start_at_v1_min (line 26) | def test_02_gen_range_list_not_start_at_v1_min(self):
    method test_03_gen_range_list_not_end_at_v1_max (line 30) | def test_03_gen_range_list_not_end_at_v1_max(self):
    method test_04_gen_range_list_has_gap (line 34) | def test_04_gen_range_list_has_gap(self):
    method test_05_gen_range_start_greater_than_end (line 38) | def test_05_gen_range_start_greater_than_end(self):
    method test_06_gen_range_height_greater_than_max_lift (line 42) | def test_06_gen_range_height_greater_than_max_lift(self):
    method test_07_pit_list_of_one_cannot_be_stop_pit (line 46) | def test_07_pit_list_of_one_cannot_be_stop_pit(self):
    method test_08_pit_at_start_and_end (line 50) | def test_08_pit_at_start_and_end(self):
    method test_09_pit_stop_pit_taller_than_neighbors (line 58) | def test_09_pit_stop_pit_taller_than_neighbors(self):

FILE: tests/object/bone_configurations_drag_axis.test.py
  class TestBoneConfigurationsDragAxis (line 15) | class TestBoneConfigurationsDragAxis(XPlaneTestCase):
    method test_drag_axis_case_01 (line 17) | def test_drag_axis_case_01(self):
    method test_drag_axis_case_02 (line 32) | def test_drag_axis_case_02(self):
    method test_drag_axis_case_03 (line 49) | def test_drag_axis_case_03(self):
    method test_drag_axis_case_04 (line 66) | def test_drag_axis_case_04(self):
    method test_drag_axis_case_05 (line 83) | def test_drag_axis_case_05(self):
    method test_drag_axis_case_06 (line 101) | def test_drag_axis_case_06(self):
    method test_drag_axis_case_07 (line 119) | def test_drag_axis_case_07(self):
    method test_drag_axis_case_08 (line 137) | def test_drag_axis_case_08(self):
    method test_drag_axis_case_09 (line 153) | def test_drag_axis_case_09(self):
    method test_drag_axis_case_10 (line 169) | def test_drag_axis_case_10(self):
    method test_drag_axis_case_11 (line 184) | def test_drag_axis_case_11(self):
    method test_drag_axis_case_12 (line 200) | def test_drag_axis_case_12(self):

FILE: tests/object/bone_configurations_drag_axis_detent.test.py
  class TestBoneConfigurationsDragAxisDetent (line 15) | class TestBoneConfigurationsDragAxisDetent(XPlaneTestCase):
    method test_drag_axis_detent_case_01 (line 17) | def test_drag_axis_detent_case_01(self):
    method test_drag_axis_detent_case_02 (line 35) | def test_drag_axis_detent_case_02(self):
    method test_drag_axis_detent_case_03 (line 54) | def test_drag_axis_detent_case_03(self):
    method test_drag_axis_detent_case_04 (line 74) | def test_drag_axis_detent_case_04(self):
    method test_drag_axis_detent_case_05 (line 94) | def test_drag_axis_detent_case_05(self):
    method test_drag_axis_detent_case_06 (line 113) | def test_drag_axis_detent_case_06(self):
    method test_drag_axis_detent_case_07 (line 135) | def test_drag_axis_detent_case_07(self):
    method test_drag_axis_detent_case_08 (line 153) | def test_drag_axis_detent_case_08(self):
    method test_drag_axis_detent_case_09 (line 170) | def test_drag_axis_detent_case_09(self):
    method test_drag_axis_detent_case_10 (line 187) | def test_drag_axis_detent_case_10(self):
    method test_drag_axis_detent_case_11 (line 203) | def test_drag_axis_detent_case_11(self):
    method test_drag_axis_detent_case_12 (line 217) | def test_drag_axis_detent_case_12(self):
    method test_drag_axis_detent_case_13 (line 235) | def test_drag_axis_detent_case_13(self):
    method test_drag_axis_detent_case_14 (line 254) | def test_drag_axis_detent_case_14(self):
    method test_drag_axis_detent_case_15 (line 273) | def test_drag_axis_detent_case_15(self):
    method test_drag_axis_detent_case_16 (line 293) | def test_drag_axis_detent_case_16(self):

FILE: tests/object/bone_configurations_drag_rotate.test.py
  class TestBoneConfigurationsDragRotate (line 15) | class TestBoneConfigurationsDragRotate(XPlaneTestCase):
    method test_drag_rotate_case_01 (line 17) | def test_drag_rotate_case_01(self):
    method test_drag_rotate_case_02 (line 32) | def test_drag_rotate_case_02(self):
    method test_drag_rotate_case_03 (line 49) | def test_drag_rotate_case_03(self):
    method test_drag_rotate_case_04 (line 66) | def test_drag_rotate_case_04(self):
    method test_drag_rotate_case_05 (line 83) | def test_drag_rotate_case_05(self):
    method test_drag_rotate_case_06 (line 101) | def test_drag_rotate_case_06(self):
    method test_drag_rotate_case_07 (line 119) | def test_drag_rotate_case_07(self):
    method test_drag_rotate_case_08 (line 137) | def test_drag_rotate_case_08(self):
    method test_drag_rotate_case_09 (line 156) | def test_drag_rotate_case_09(self):
    method test_drag_rotate_case_10 (line 171) | def test_drag_rotate_case_10(self):
    method test_drag_rotate_case_11 (line 186) | def test_drag_rotate_case_11(self):
    method test_drag_rotate_case_12 (line 202) | def test_drag_rotate_case_12(self):

FILE: tests/object/bone_configurations_drag_rotate_detent.test.py
  class TestBoneConfigurationsDragRotateDetent (line 15) | class TestBoneConfigurationsDragRotateDetent(XPlaneTestCase):
    method test_drag_rotate_detent_case_01 (line 17) | def test_drag_rotate_detent_case_01(self):
    method test_drag_rotate_detent_case_02 (line 35) | def test_drag_rotate_detent_case_02(self):
    method test_drag_rotate_detent_case_03 (line 54) | def test_drag_rotate_detent_case_03(self):
    method test_drag_rotate_detent_case_04 (line 74) | def test_drag_rotate_detent_case_04(self):
    method test_drag_rotate_detent_case_05 (line 94) | def test_drag_rotate_detent_case_05(self):
    method test_drag_rotate_detent_case_06 (line 113) | def test_drag_rotate_detent_case_06(self):
    method test_drag_rotate_detent_case_07 (line 135) | def test_drag_rotate_detent_case_07(self):
    method test_drag_rotate_detent_case_08 (line 153) | def test_drag_rotate_detent_case_08(self):
    method test_drag_rotate_detent_case_09 (line 170) | def test_drag_rotate_detent_case_09(self):
    method test_drag_rotate_detent_case_10 (line 187) | def test_drag_rotate_detent_case_10(self):
    method test_drag_rotate_detent_case_11 (line 203) | def test_drag_rotate_detent_case_11(self):
    method test_drag_rotate_detent_case_12 (line 220) | def test_drag_rotate_detent_case_12(self):
    method test_drag_rotate_detent_case_13 (line 237) | def test_drag_rotate_detent_case_13(self):
    method test_drag_rotate_detent_case_14 (line 253) | def test_drag_rotate_detent_case_14(self):
    method test_drag_rotate_detent_case_15 (line 266) | def test_drag_rotate_detent_case_15(self):
    method test_drag_rotate_detent_case_16 (line 284) | def test_drag_rotate_detent_case_16(self):
    method test_drag_rotate_detent_case_17 (line 303) | def test_drag_rotate_detent_case_17(self):
    method test_drag_rotate_detent_case_18 (line 322) | def test_drag_rotate_detent_case_18(self):
    method test_drag_rotate_detent_case_19 (line 342) | def test_drag_rotate_detent_case_19(self):
    method test_drag_rotate_detent_case_20 (line 362) | def test_drag_rotate_detent_case_20(self):

FILE: tests/object/bone_configurations_drag_rotate_detent_arm.test.py
  class TestBoneConfigurationsDragRotateDetentArm (line 23) | class TestBoneConfigurationsDragRotateDetentArm(XPlaneTestCase):
    method test_drag_rotate_detent_arm_case_01 (line 25) | def test_drag_rotate_detent_arm_case_01(self):
    method test_drag_rotate_detent_arm_case_02 (line 43) | def test_drag_rotate_detent_arm_case_02(self):
    method test_drag_rotate_detent_arm_case_03 (line 62) | def test_drag_rotate_detent_arm_case_03(self):
    method test_drag_rotate_detent_arm_case_04 (line 82) | def test_drag_rotate_detent_arm_case_04(self):
    method test_drag_rotate_detent_arm_case_05 (line 102) | def test_drag_rotate_detent_arm_case_05(self):
    method test_drag_rotate_detent_arm_case_06 (line 121) | def test_drag_rotate_detent_arm_case_06(self):
    method test_drag_rotate_detent_arm_case_07 (line 143) | def test_drag_rotate_detent_arm_case_07(self):
    method test_drag_rotate_detent_arm_case_08 (line 161) | def test_drag_rotate_detent_arm_case_08(self):
    method test_drag_rotate_detent_arm_case_09 (line 178) | def test_drag_rotate_detent_arm_case_09(self):
    method test_drag_rotate_detent_arm_case_10 (line 195) | def test_drag_rotate_detent_arm_case_10(self):
    method test_drag_rotate_detent_arm_case_11 (line 211) | def test_drag_rotate_detent_arm_case_11(self):
    method test_drag_rotate_detent_arm_case_12 (line 228) | def test_drag_rotate_detent_arm_case_12(self):
    method test_drag_rotate_detent_arm_case_13 (line 245) | def test_drag_rotate_detent_arm_case_13(self):
    method test_drag_rotate_detent_arm_case_14 (line 261) | def test_drag_rotate_detent_arm_case_14(self):
    method test_drag_rotate_detent_arm_case_15 (line 274) | def test_drag_rotate_detent_arm_case_15(self):
    method test_drag_rotate_detent_arm_case_16 (line 292) | def test_drag_rotate_detent_arm_case_16(self):
    method test_drag_rotate_detent_arm_case_17 (line 311) | def test_drag_rotate_detent_arm_case_17(self):
    method test_drag_rotate_detent_arm_case_18 (line 330) | def test_drag_rotate_detent_arm_case_18(self):
    method test_drag_rotate_detent_arm_case_19 (line 350) | def test_drag_rotate_detent_arm_case_19(self):

FILE: tests/object/bone_configurations_drag_rotate_detent_bone.test.py
  class TestBoneConfigurationsDragRotateDetentBone (line 22) | class TestBoneConfigurationsDragRotateDetentBone(XPlaneTestCase):
    method test_drag_rotate_detent_bone_case_01 (line 24) | def test_drag_rotate_detent_bone_case_01(self):
    method test_drag_rotate_detent_bone_case_02 (line 42) | def test_drag_rotate_detent_bone_case_02(self):
    method test_drag_rotate_detent_bone_case_03 (line 61) | def test_drag_rotate_detent_bone_case_03(self):
    method test_drag_rotate_detent_bone_case_04 (line 81) | def test_drag_rotate_detent_bone_case_04(self):
    method test_drag_rotate_detent_bone_case_05 (line 101) | def test_drag_rotate_detent_bone_case_05(self):
    method test_drag_rotate_detent_bone_case_06 (line 120) | def test_drag_rotate_detent_bone_case_06(self):
    method test_drag_rotate_detent_bone_case_07 (line 142) | def test_drag_rotate_detent_bone_case_07(self):
    method test_drag_rotate_detent_bone_case_08 (line 160) | def test_drag_rotate_detent_bone_case_08(self):
    method test_drag_rotate_detent_bone_case_09 (line 177) | def test_drag_rotate_detent_bone_case_09(self):
    method test_drag_rotate_detent_bone_case_10 (line 194) | def test_drag_rotate_detent_bone_case_10(self):
    method test_drag_rotate_detent_bone_case_11 (line 210) | def test_drag_rotate_detent_bone_case_11(self):
    method test_drag_rotate_detent_bone_case_12 (line 227) | def test_drag_rotate_detent_bone_case_12(self):
    method test_drag_rotate_detent_bone_case_13 (line 244) | def test_drag_rotate_detent_bone_case_13(self):
    method test_drag_rotate_detent_bone_case_14 (line 260) | def test_drag_rotate_detent_bone_case_14(self):
    method test_drag_rotate_detent_bone_case_15 (line 273) | def test_drag_rotate_detent_bone_case_15(self):
    method test_drag_rotate_detent_bone_case_16 (line 291) | def test_drag_rotate_detent_bone_case_16(self):
    method test_drag_rotate_detent_bone_case_17 (line 310) | def test_drag_rotate_detent_bone_case_17(self):
    method test_drag_rotate_detent_bone_case_18 (line 329) | def test_drag_rotate_detent_bone_case_18(self):
    method test_drag_rotate_detent_bone_case_19 (line 349) | def test_drag_rotate_detent_bone_case_19(self):

FILE: tests/object/drag_axis_autodetect.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestDragAxisAutoDetect (line 16) | class TestDragAxisAutoDetect(XPlaneTestCase):
    method test_01_not_driven_by_one_dataref (line 17) | def test_01_not_driven_by_one_dataref(self):
    method test_02_doesnt_have_two_non_clamping_keyframes (line 21) | def test_02_doesnt_have_two_non_clamping_keyframes(self):
    method test_03_not_leaf_bone (line 25) | def test_03_not_leaf_bone(self):
    method test_04_known_good_drag_axis_autodetect (line 29) | def test_04_known_good_drag_axis_autodetect(self):

FILE: tests/object/drag_axis_w_detents.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestDragAxisWDetents (line 18) | class TestDragAxisWDetents(XPlaneTestCase):
    method test_01_parent_driven_by_two_datarefs (line 19) | def test_01_parent_driven_by_two_datarefs(self):
    method test_02_parent_has_three_non_clamping_keyframes (line 23) | def test_02_parent_has_three_non_clamping_keyframes(self):
    method test_03_translation_bone_driven_by_two_datarefs (line 27) | def test_03_translation_bone_driven_by_two_datarefs(self):
    method test_04_translation_bone_has_three_non_clamping_keyframes (line 31) | def test_04_translation_bone_has_three_non_clamping_keyframes(self):
    method test_05_translation_bone_not_a_leaf (line 35) | def test_05_translation_bone_not_a_leaf(self):
    method test_06_translation_bone_has_non_anim_parent (line 39) | def test_06_translation_bone_has_non_anim_parent(self):
    method test_07_translation_bone_not_orthogonal (line 43) | def test_07_translation_bone_not_orthogonal(self):
    method test_08_translation_bone_pos_not_both_zero (line 47) | def test_08_translation_bone_pos_not_both_zero(self):
    method test_09_translation_bone_must_have_axis_detent_ranges (line 51) | def test_09_translation_bone_must_have_axis_detent_ranges(self):
    method test_10_known_good_drag_axis_w_detents (line 55) | def test_10_known_good_drag_axis_w_detents(self):

FILE: tests/object/drag_rotate_start_end_the_same.test.py
  class TestDragRotateStartEndTheSame (line 14) | class TestDragRotateStartEndTheSame(XPlaneTestCase):
    method test_drag_rotate_start_end_the_same (line 15) | def test_drag_rotate_start_end_the_same(self)->None:

FILE: tests/object/manip_keyframe.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestManipKeyframe (line 18) | class TestManipKeyframe(XPlaneTestCase):
    method test_01_2_rot_kf_0_detents_0_manip_kf (line 19) | def test_01_2_rot_kf_0_detents_0_manip_kf(self):
    method test_02_3_rot_kf_0_detents_1_manip_kf (line 28) | def test_02_3_rot_kf_0_detents_1_manip_kf(self):
    method test_03_4_rot_kf_0_detents_2_manip_kf (line 37) | def test_03_4_rot_kf_0_detents_2_manip_kf(self):
    method test_04_5_rot_kf_3_detents_3_manip_kf (line 46) | def test_04_5_rot_kf_3_detents_3_manip_kf(self):
    method test_05_6_rot_kf_4_detents_1_pit_4_manip_kf (line 55) | def test_05_6_rot_kf_4_detents_1_pit_4_manip_kf(self):

FILE: tests/object/object_ll_override.test.py
  class TestObjectLLOverride (line 15) | class TestObjectLLOverride(XPlaneTestCase):
    method test_01_mesh_ll_overload_emits (line 16) | def test_01_mesh_ll_overload_emits(self) -> None:
    method test_02_mesh_ll_overload_emits_not_material (line 26) | def test_02_mesh_ll_overload_emits_not_material(self) -> None:
    method test_03_mesh_ll_overload_weird_cases (line 36) | def test_03_mesh_ll_overload_weird_cases(self) -> None:
    method test_04_mesh_ll_overload_emits_not_material_nts (line 46) | def test_04_mesh_ll_overload_emits_not_material_nts(self)->None:

FILE: tests/object/override_autodetect_datarefs.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestOverrideAutodetectDatarefs (line 16) | class TestOverrideAutodetectDatarefs(XPlaneTestCase):
    method test_override_autodetect_datarefs_drag_axis (line 17) | def test_override_autodetect_datarefs_drag_axis(self):
    method test_override_autodetect_datarefs_drag_axis_w_detents (line 26) | def test_override_autodetect_datarefs_drag_axis_w_detents(self):
    method test_override_autodetect_datarefs_drag_rotate (line 35) | def test_override_autodetect_datarefs_drag_rotate(self):
    method test_override_autodetect_datarefs_drag_rotate_dentent (line 44) | def test_override_autodetect_datarefs_drag_rotate_dentent(self):

FILE: tests/object/rotation_bone_rules.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestRotationBoneRules (line 16) | class TestRotationBoneRules(XPlaneTestCase):
    method test_01_no_animated_rotation_bone (line 17) | def test_01_no_animated_rotation_bone(self):
    method test_02_only_rotated_around_one_axis (line 20) | def test_02_only_rotated_around_one_axis(self):
    method test_03_rot_keyframes_must_be_sorted (line 23) | def test_03_rot_keyframes_must_be_sorted(self):
    method test_04_must_be_driven_by_only_1_dataref (line 27) | def test_04_must_be_driven_by_only_1_dataref(self):
    method test_05_must_have_at_least_2_non_clamping_keyframes (line 31) | def test_05_must_have_at_least_2_non_clamping_keyframes(self):
    method test_06_0_degree_rotation_not_allowed (line 35) | def test_06_0_degree_rotation_not_allowed(self):
    method test_07_counter_clockwise_also_allowed (line 39) | def test_07_counter_clockwise_also_allowed(self):
    method test_08_neg_15_15_degree_animation_allowed (line 48) | def test_08_neg_15_15_degree_animation_allowed(self):
    method test_09_dataref_values_descending_allowed (line 56) | def test_09_dataref_values_descending_allowed(self):
    method test_10_no_rounding_bug_from_unnormalized_vector (line 60) | def test_10_no_rounding_bug_from_unnormalized_vector(self):
    method test_11_known_good_rotation_bone (line 64) | def test_11_known_good_rotation_bone(self):

FILE: tests/object/translation_bone_rules.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestTranslationBoneRules (line 16) | class TestTranslationBoneRules(XPlaneTestCase):
    method test_01_bone_must_be_leaf_bone (line 19) | def test_01_bone_must_be_leaf_bone(self):
    method test_02_bone_must_have_parent_w_rotation (line 23) | def test_02_bone_must_have_parent_w_rotation(self):
    method test_03_must_only_be_driven_by_only_1_dataref (line 27) | def test_03_must_only_be_driven_by_only_1_dataref(self):
    method test_04_must_have_exactly_2_keyframes (line 31) | def test_04_must_have_exactly_2_keyframes(self):
    method test_05_must_not_animate_along_rotation_axis (line 35) | def test_05_must_not_animate_along_rotation_axis(self):
    method test_06_positions_at_each_keyframe_must_not_be_same (line 39) | def test_06_positions_at_each_keyframe_must_not_be_same(self):
    method test_07_position_at_each_keyframe_must_not_both_be_0 (line 43) | def test_07_position_at_each_keyframe_must_not_both_be_0(self):
    method test_08_must_not_be_animated_for_rotation (line 47) | def test_08_must_not_be_animated_for_rotation(self):
    method test_09_must_have_axis_detent_ranges (line 51) | def test_09_must_have_axis_detent_ranges(self):
    method test_10_known_good_translation_bone (line 55) | def test_10_known_good_translation_bone(self):

FILE: tests/particles/particle_name_and_index.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestParticleNameAndIndex (line 16) | class TestParticleNameAndIndex(XPlaneTestCase):
    method test_01_Empty_blank_name_fails (line 17) | def test_01_Empty_blank_name_fails(self):
    method test_02_Empty_index_enabled (line 21) | def test_02_Empty_index_enabled(self):
    method test_03_Empty_index_disabled (line 30) | def test_03_Empty_index_disabled(self):

FILE: tests/particles/particle_non_colocated_anim.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestParticleNonColocatedAnim (line 17) | class TestParticleNonColocatedAnim(XPlaneTestCase):
    method test_particle_non_colocated_anim (line 18) | def test_particle_non_colocated_anim(self):

FILE: tests/particles/particle_pss_file.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestParticlePssFile (line 15) | class TestParticlePssFile(XPlaneTestCase):
    method test_file_not_dot_pss (line 16) | def test_file_not_dot_pss(self):
    method test_file_pss_but_not_real (line 20) | def test_file_pss_but_not_real(self):
    method test_file_pss_and_real (line 29) | def test_file_pss_and_real(self):
    method test_empties_without_pss_fails (line 38) | def test_empties_without_pss_fails(self):

FILE: tests/particles/particle_static_anim.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestParticleStaticAnim (line 16) | class TestParticleStaticAnim(XPlaneTestCase):
    method test_particle_emitter_animated (line 17) | def test_particle_emitter_animated(self):
    method test_particle_emitter_static (line 26) | def test_particle_emitter_static(self):

FILE: tests/template.py
  class TestBlendFileNameCamelCaseNoPunctuation (line 32) | class TestBlendFileNameCamelCaseNoPunctuation(XPlaneTestCase):
    method test_fixture_or_layer_name_snake_case (line 34) | def test_fixture_or_layer_name_snake_case(self)->None:

FILE: tests/updater/blend_mode_blend_glass_update.test.py
  class TestBlendModeBlendGlassUpdate (line 14) | class TestBlendModeBlendGlassUpdate(XPlaneTestCase):
    method test_blend_mode_blend_glass_update (line 15) | def test_blend_mode_blend_glass_update(self):

FILE: tests/updater/in_place_update.test.py
  class TestInPlaceUpdate (line 11) | class TestInPlaceUpdate(XPlaneTestCase):
    method test_anim_type_to_anim_type (line 12) | def test_anim_type_to_anim_type(self):

FILE: tests/updater/layers_to_collections.test.py
  class TestLayersToCollections (line 16) | class TestLayersToCollections(XPlaneTestCase):
    method assertXPlaneLayerEqual (line 17) | def assertXPlaneLayerEqual(
    method get_default_xplane_layer_props_dict (line 87) | def get_default_xplane_layer_props_dict(self) -> Dict[str, Any]:
    method test_collections_renamed (line 156) | def test_collections_renamed(self) -> None:
    method test_no_extras_created (line 185) | def test_no_extras_created(self) -> None:
    method test_is_exportable_correct (line 211) | def test_is_exportable_correct(self) -> None:
    method test_is_not_hide_viewport (line 235) | def test_is_not_hide_viewport(self) -> None:
    method test_layer_4_properties_copied (line 245) | def test_layer_4_properties_copied(self) -> None:
    method test_layer_5_properties_copied (line 255) | def test_layer_5_properties_copied(self) -> None:
    method test_layer_6_properties_copied (line 277) | def test_layer_6_properties_copied(self) -> None:
    method test_layer_7_properties_copied (line 320) | def test_layer_7_properties_copied(self) -> None:
    method test_layer_8_properties_copied (line 354) | def test_layer_8_properties_copied(self) -> None:
    method test_layer_9_properties_copied (line 377) | def test_layer_9_properties_copied(self) -> None:
    method test_layer_10_properties_copied (line 387) | def test_layer_10_properties_copied(self) -> None:
    method test_layer_10_in_Scene_fourth_copied (line 397) | def test_layer_10_in_Scene_fourth_copied(self) -> None:
    method test_root_objects_mode_layer_1 (line 405) | def test_root_objects_mode_layer_1(self) -> None:
    method test_root_objects_mode_layer_2 (line 415) | def test_root_objects_mode_layer_2(self) -> None:
    method test_layers_deleted (line 422) | def test_layers_deleted(self) -> None:

FILE: tests/updater/move_global_mat_props.test.py
  class TestMoveGlobalMatProps (line 15) | class TestMoveGlobalMatProps(XPlaneTestCase):
    method test_properties_updated (line 16) | def test_properties_updated(self):

FILE: tests/updater/part_of_panel_to_cockpit_feature.test.py
  class TestPartOfPanelToCockpitFeature (line 15) | class TestPartOfPanelToCockpitFeature(XPlaneTestCase):
    method test_post_update (line 16) | def test_post_update(self) -> None:

FILE: tests/updater/pre_4_0_0_alpha_6.test.py
  class TestPre4_0_0_alpha_6PropsUpdated (line 13) | class TestPre4_0_0_alpha_6PropsUpdated(XPlaneTestCase):
    method test_autodetectTexturesFalse (line 14) | def test_autodetectTexturesFalse(self)->None:
    method test_exportMode_deleted (line 18) | def test_exportMode_deleted(self)->None:
    method test_index_deleted (line 27) | def test_index_deleted(self)->None:
    method test_export_mesh_deleted (line 36) | def test_export_mesh_deleted(self)->None:
    method test_export_deleted (line 45) | def test_export_deleted(self)->None:

FILE: tests/updater/pre_4_1_0_beta_1_regions_changes_panel_mode.test.py
  class TestPre_4_1_0_Beta_1_RegionsChangesPanelMode (line 15) | class TestPre_4_1_0_Beta_1_RegionsChangesPanelMode(XPlaneTestCase):
    method test_cockpit_regions_changes_panel_mode (line 16) | def test_cockpit_regions_changes_panel_mode(self) -> None:

FILE: tests/updater/pre_automatic_default_lights_as_default.test.py
  class TestPreAutomaticDefaultLightsAsDefault (line 13) | class TestPreAutomaticDefaultLightsAsDefault(XPlaneTestCase):
    method test_update_preserves_default_light_type (line 14) | def test_update_preserves_default_light_type(self)->None:

FILE: tests/updater/shadow/shadow_local_off_non_scenery.test.py
  function filterLines (line 14) | def filterLines(line:Tuple[str])->bool:
  class TestShadowLocalOffNonScenery (line 20) | class TestShadowLocalOffNonScenery(XPlaneTestCase):
    method test_properties_correct (line 21) | def test_properties_correct(self):
    method test_01_aircraft_force_global_shadows (line 32) | def test_01_aircraft_force_global_shadows(self):
    method test_02_cockpit_force_global_shadows (line 42) | def test_02_cockpit_force_global_shadows(self):
    method test_01_aircraft_force_global_shadows_root (line 52) | def test_01_aircraft_force_global_shadows_root(self):
    method test_02_cockpit_force_global_shadows_root (line 62) | def test_02_cockpit_force_global_shadows_root(self):

FILE: tests/updater/shadow/update_cast_shadow.test.py
  function filterLines (line 14) | def filterLines(line:Tuple[str])->bool:
  class TestUpdateCastShadow (line 20) | class TestUpdateCastShadow(XPlaneTestCase):
    method test_properties_correct (line 21) | def test_properties_correct(self):
    method test_01_global_off_layers (line 40) | def test_01_global_off_layers(self):
    method test_02_global_on_layers (line 51) | def test_02_global_on_layers(self):
    method test_01_global_off_root_objects (line 82) | def test_01_global_off_root_objects(self):
    method test_02_global_on_root_objects (line 93) | def test_02_global_on_root_objects(self):

FILE: tests/updater/shadow/update_cast_shadow_table_output.test.py
  class TestUpdateCastShadowTableOutput (line 14) | class TestUpdateCastShadowTableOutput(XPlaneTestCase):
    method test_updater_logger_output (line 15) | def test_updater_logger_output(self):

FILE: tests/updater/synchronize_version_numbers.test.py
  class TestSynchronizeVersionNumbers (line 15) | class TestSynchronizeVersionNumbers(XPlaneTestCase):
    method assertVersionHistoryEqual (line 16) | def assertVersionHistoryEqual(
    method assertVersionsSynchronize (line 30) | def assertVersionsSynchronize(self) -> None:
    method assertIdPropIsDeprecated (line 42) | def assertIdPropIsDeprecated(self) -> None:
    method test_syncronize (line 51) | def test_syncronize(self) -> None:

FILE: tests/updater/updater.test.disabled.py
  class TestUpdater (line 6) | class TestUpdater(XPlaneTestCase):
    method test_updater_stores_current_version (line 7) | def test_updater_stores_current_version(self):

FILE: tests/utils/command_parser.test.py
  class TestCommandsTxtParser (line 12) | class TestCommandsTxtParser(XPlaneTestCase):
    method test_Commands_empty_line (line 16) | def test_Commands_empty_line(self):
    method test_Commands_empty_file (line 22) | def test_Commands_empty_file(self):
    method test_Commands_line_starts_with_whitespace (line 28) | def test_Commands_line_starts_with_whitespace(self):
    method test_Commands_no_desc_line_has_trailing_whitespace (line 34) | def test_Commands_no_desc_line_has_trailing_whitespace(self):
    method test_Commands_desc_line_has_trailing_whitespace (line 40) | def test_Commands_desc_line_has_trailing_whitespace(self):
    method test_Commands_no_description_passes (line 46) | def test_Commands_no_description_passes(self):
    method test_Commands_missing (line 55) | def test_Commands_missing(self):
    method test_Commands_in_resource_passes (line 61) | def test_Commands_in_resource_passes(self):

FILE: tests/utils/dataref_parser.test.py
  class TestDatarefTxtParser (line 12) | class TestDatarefTxtParser(XPlaneTestCase):
    method test_DataRefs_empty (line 15) | def test_DataRefs_empty(self):
    method test_DataRefs_header_completely_wrong (line 21) | def test_DataRefs_header_completely_wrong(self):
    method test_DataRefs_header_file_version_is_one (line 27) | def test_DataRefs_header_file_version_is_one(self):
    method test_DataRefs_header_xp_version_is_wrong (line 34) | def test_DataRefs_header_xp_version_is_wrong(self):
    method test_DataRefs_invalid_array_type (line 40) | def test_DataRefs_invalid_array_type(self):
    method test_DataRefs_invalid_array_type_index_wrong (line 46) | def test_DataRefs_invalid_array_type_index_wrong(self):
    method test_DataRefs_invalid_iswritable (line 52) | def test_DataRefs_invalid_iswritable(self):
    method test_DataRefs_invalid_type_wrong (line 58) | def test_DataRefs_invalid_type_wrong(self):
    method test_DataRefs_line_starts_with_whitespace (line 64) | def test_DataRefs_line_starts_with_whitespace(self):
    method test_DataRefs_no_blank_second_line (line 70) | def test_DataRefs_no_blank_second_line(self):
    method test_DataRefs_no_datarefs_in_it (line 76) | def test_DataRefs_no_datarefs_in_it(self):
    method test_DataRefs_missing (line 82) | def test_DataRefs_missing(self):

FILE: tests/utils/lights_column_name.test.py
  class TestColumnName (line 18) | class TestColumnName(XPlaneTestCase):
    method setUp (line 19) | def setUp(self):
    method test_ColumnName_enum (line 22) | def test_ColumnName_enum(self) -> None:
    method test_param_to_canonical_column_name (line 45) | def test_param_to_canonical_column_name(self)->None:
    method test_parsed_light_overload (line 58) | def test_parsed_light_overload(self) -> None:

FILE: tests/utils/lights_parser.test.py
  class _ReplaceLightsFile (line 24) | class _ReplaceLightsFile:
    method __init__ (line 25) | def __init__(self, *, temporary_lights_txt_path:pathlib.Path=None, tem...
    method __enter__ (line 30) | def __enter__(self)->None:
    method __exit__ (line 42) | def __exit__(self, type, value, traceback)->None:
  class TestLightsParser (line 47) | class TestLightsParser(XPlaneTestCase):
    method setUp (line 48) | def setUp(self):
    method _test (line 60) | def _test(self, content:str, expected_errors:int)->None:
    method test_arguments_sorted_well (line 68) | def test_arguments_sorted_well(self):
    method test_real_lights_txt_parses (line 88) | def test_real_lights_txt_parses(self):
    method test_light_repeatable_cases_parse (line 96) | def test_light_repeatable_cases_parse(self)->None:
    method test_light_nonstandard_params_parse (line 106) | def test_light_nonstandard_params_parse(self)->None:
    method test_no_lights_file (line 116) | def test_no_lights_file(self)->None:
    method test_file_empty (line 125) | def test_file_empty(self)->None:
    method test_no_valid_records (line 131) | def test_no_valid_records(self)->None:
    method test_comments_ignored (line 148) | def test_comments_ignored(self)->None:
    method test_light_name_is_invalid (line 155) | def test_light_name_is_invalid(self)->None:
    method test_unknown_record_types (line 163) | def test_unknown_record_types(self)->None:
    method test_incomplete_record_type (line 183) | def test_incomplete_record_type(self):
    method test_arguments_not_standard_notation (line 199) | def test_arguments_not_standard_notation(self):
    method test_arguments_len_doesnt_match_type (line 207) | def test_arguments_len_doesnt_match_type(self):
    method test_arguments_noop_and_dref_not_in_correct_column (line 229) | def test_arguments_noop_and_dref_not_in_correct_column(self):
    method test_parameterization_arg_in_non_param_light (line 237) | def test_parameterization_arg_in_non_param_light(self):
    method test_unknown_parameterization_arg_in_param_light (line 245) | def test_unknown_parameterization_arg_in_param_light(self):
    method test_parameterization_arg_in_wrong_column (line 254) | def test_parameterization_arg_in_wrong_column(self):
    method test_light_param_count_is_not_an_int (line 273) | def test_light_param_count_is_not_an_int(self):
    method test_light_param_has_duplicate_params (line 286) | def test_light_param_has_duplicate_params(self):
    method test_duplicate_light_param_defs (line 298) | def test_duplicate_light_param_defs(self):
    method test_unknown_param_names (line 313) | def test_unknown_param_names(self):
    method test_has_light_param_def_but_no_overloads (line 322) | def test_has_light_param_def_but_no_overloads(self):

FILE: tests/xplane_export.test.disabled.py
  class TestExportXPlaneFiles (line 9) | class TestExportXPlaneFiles(XPlaneTestCase):
    method setUp (line 10) | def setUp(self):
    method beforeEach (line 13) | def beforeEach(self):
    method test_export_layers_from_fresh_blend_file (line 16) | def test_export_layers_from_fresh_blend_file(self):
    method test_export_root_objects_from_fresh_blend_file (line 31) | def test_export_root_objects_from_fresh_blend_file(self):

FILE: tests/xplane_types/xplane_bone/collect_animations.test.py
  class TestAnimations (line 10) | class TestAnimations(XPlaneTestCase):
    method test_bone_animations (line 11) | def test_bone_animations(self):

FILE: tests/xplane_types/xplane_bone/object_matrices.test.py
  class TestMatrices (line 18) | class TestMatrices(XPlaneTestCase):
    method getBoneByBlenderName (line 19) | def getBoneByBlenderName(self, name: str, parent: xplane_bone.XPlaneBo...
    method test_bone_root_matrices (line 34) | def test_bone_root_matrices(self):
    method test_child_bone_matrices (line 59) | def test_child_bone_matrices(self):

FILE: tests/xplane_types/xplane_file/bad_nested_exportable_roots.test.py
  class TestBadNestedExportableRoots (line 15) | class TestBadNestedExportableRoots(XPlaneTestCase):
    method test_nested_exportable_roots_caught (line 16) | def test_nested_exportable_roots_caught(self)->None:

FILE: tests/xplane_types/xplane_file/create_from_layers.test.py
  class TestCreateFromLayers (line 8) | class TestCreateFromLayers(XPlaneTestCase):
    method test_create_files_from_single_layer (line 9) | def test_create_files_from_single_layer(self):

FILE: tests/xplane_types/xplane_file/create_from_root_objects.test.py
  function filterLines (line 10) | def filterLines(line:Tuple[str])->bool:
  class TestCreateFromRootObjects (line 18) | class TestCreateFromRootObjects(XPlaneTestCase):
    method test_create_files_from_root_objects (line 19) | def test_create_files_from_root_objects(self):

FILE: tests/xplane_types/xplane_file/current_scene_exclusive_collection.test.py
  function filterLines (line 11) | def filterLines(line):
  class TestCurrentSceneExclusiveCollection (line 15) | class TestCurrentSceneExclusiveCollection(XPlaneTestCase):
    method test_current_scene_exclusive_collection (line 16) | def test_current_scene_exclusive_collection(self):

FILE: tests/xplane_types/xplane_file/frame_set_optimization.test.py
  class TestFrameSetOptimization (line 17) | class TestFrameSetOptimization(XPlaneTestCase):
    method test_time_test (line 18) | def test_time_test(self) -> None:
    method test_cache_results (line 34) | def test_cache_results(self) -> None:
    method _edit_export_edit_export (line 78) | def _edit_export_edit_export(self, suffix: str):
    method test_edit_export_animate_export_unittest (line 103) | def test_edit_export_animate_export_unittest(self):
    method test_edit_export_animate_export_operators (line 120) | def test_edit_export_animate_export_operators(self):
    method test_one_of_each_animation_type (line 142) | def test_one_of_each_animation_type(self):

FILE: tests/xplane_types/xplane_file/performance_spheres_no_anim.test.disabled.py
  class TestPerformanceSpheresNoAnim (line 12) | class TestPerformanceSpheresNoAnim(XPlaneTestCase):
    method test_performance_spheres_no_anim (line 13) | def test_performance_spheres_no_anim(self):

FILE: tests/xplane_types/xplane_file/recursive_collection_collects.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestRecursiveCollectionCollects (line 17) | class TestRecursiveCollectionCollects(XPlaneTestCase):
    method test_ExportableCollection (line 18) | def test_ExportableCollection(self)->None:
    method test_ExportableObject (line 28) | def test_ExportableObject(self)->None:
    method test_ExportableObjectArmatureCases (line 38) | def test_ExportableObjectArmatureCases(self)->None:

FILE: tests/xplane_types/xplane_file/recursive_collection_edge_cases.test.py
  class TestRecursiveCollectionEdgeCases (line 16) | class TestRecursiveCollectionEdgeCases(XPlaneTestCase):
    method test_Exportable_no_convert_makes_bones (line 17) | def test_Exportable_no_convert_makes_bones(self)->None:
    method test_Exportable_out_of_collection_no_error (line 28) | def test_Exportable_out_of_collection_no_error(self):
    method test_Exportable_child_out_of_scene_warn_and_ignore (line 44) | def test_Exportable_child_out_of_scene_warn_and_ignore(self):

FILE: tests/xplane_types/xplane_file/resource_path_new_file.test.py
  class TestResourcePathNewFile (line 16) | class TestResourcePathNewFile(XPlaneTestCase):
    method test_new_file_cwd_1_and_2 (line 17) | def test_new_file_cwd_1_and_2(self) -> None:

FILE: tests/xplane_types/xplane_file/resource_paths.test.py
  class TestResourcePaths (line 22) | class TestResourcePaths(XPlaneTestCase):
    method test_resource_paths_cases_1_4 (line 23) | def test_resource_paths_cases_1_4(self) -> None:
    method test_resource_paths_cases_5_and_10 (line 33) | def test_resource_paths_cases_5_and_10(self) -> None:
    method test_errors_6_7 (line 43) | def test_errors_6_7(self) -> None:

FILE: tests/xplane_types/xplane_file/root_object_offsets.test.py
  class TestRootObjectOffsets (line 11) | class TestRootObjectOffsets(XPlaneTestCase):
    method test_root_object_offsets (line 12) | def test_root_object_offsets(self):

FILE: tests/xplane_types/xplane_file/root_object_offsets_animated.test.py
  class TestRootObjectOffsetsAnimated (line 10) | class TestRootObjectOffsetsAnimated(XPlaneTestCase):
    method test_root_object_offsets_animated (line 11) | def test_root_object_offsets_animated(self):

FILE: tests/xplane_types/xplane_file/sort_by_weight.test.py
  class TestSortByWeight (line 19) | class TestSortByWeight(XPlaneTestCase):
    method test_sort_by_weight_objects (line 20) | def test_sort_by_weight_objects(self)->None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_find_anim.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestParentOutOfCollectionFindAnim (line 19) | class TestParentOutOfCollectionFindAnim(XPlaneTestCase):
    method _runAssert (line 20) | def _runAssert(self)->None:
    method test_AAA (line 35) | def test_AAA(self)->None:
    method test_AAn (line 38) | def test_AAn(self)->None:
    method test_AnA (line 41) | def test_AnA(self)->None:
    method test_Ann (line 44) | def test_Ann(self)->None:
    method test_nAA (line 47) | def test_nAA(self)->None:
    method test_nAn (line 50) | def test_nAn(self)->None:
    method test_nnA (line 53) | def test_nnA(self)->None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_index_preserved.test.py
  class TestParentOutOfCollectionIndexPreserved (line 14) | class TestParentOutOfCollectionIndexPreserved(XPlaneTestCase):
    method test_new_branch_index_0 (line 15) | def test_new_branch_index_0(self) -> None:
    method test_new_branch_index_1 (line 25) | def test_new_branch_index_1(self) -> None:
    method test_new_branch_index_2 (line 35) | def test_new_branch_index_2(self) -> None:
    method test_new_branch_index_last (line 45) | def test_new_branch_index_last(self) -> None:
    method test_1_reuse_of_parent (line 55) | def test_1_reuse_of_parent(self) -> None:
    method test_1_reuse_of_parent_out_of_order (line 65) | def test_1_reuse_of_parent_out_of_order(self) -> None:
    method test_2_reuse_of_parent (line 75) | def test_2_reuse_of_parent(self) -> None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_no_attr_share.test.py
  class TestParentOutOfCollectionNoAttrShare (line 14) | class TestParentOutOfCollectionNoAttrShare(XPlaneTestCase):
    method test_HasManip_Exp (line 15) | def test_HasManip_Exp(self)->None:
    method test_HasVisuals_Exp (line 25) | def test_HasVisuals_Exp(self)->None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_not_anim.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class ParentOutOfCollectionNotAnim (line 19) | class ParentOutOfCollectionNotAnim(XPlaneTestCase):
    method test_ExpCollection_not_really_animated (line 20) | def test_ExpCollection_not_really_animated(self)->None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_snake_out.test.py
  class TestBlendFileNameCamelCaseNoPunctuation (line 14) | class TestBlendFileNameCamelCaseNoPunctuation(XPlaneTestCase):
    method test_SnakeOut_Exp (line 15) | def test_SnakeOut_Exp(self)->None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_will_walk_up.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestParentOutOfCollectionWillWalkUp (line 18) | class TestParentOutOfCollectionWillWalkUp(XPlaneTestCase):
    method test_ExpCollWalkToColl (line 19) | def test_ExpCollWalkToColl(self)->None:
    method test_ExpCollWalkToExpColl (line 29) | def test_ExpCollWalkToExpColl(self)->None:
    method test_ExpCollWalkToMasterCollection (line 39) | def test_ExpCollWalkToMasterCollection(self)->None:
    method test_ExpCollWalkToRoot (line 49) | def test_ExpCollWalkToRoot(self)->None:
    method test_ParentOutOfScene (line 59) | def test_ParentOutOfScene(self)->None:

FILE: tests/xplane_types/xplane_file/split_parent/parent_out_of_collection_workflows.test.py
  function filterLines (line 13) | def filterLines(line:Tuple[str])->bool:
  class TestParentOutOfCollectionWorkflows (line 19) | class TestParentOutOfCollectionWorkflows(XPlaneTestCase):
    method test_1_LandingGearCollection (line 20) | def test_1_LandingGearCollection(self)->None:
    method test_1_WheelCollection (line 29) | def test_1_WheelCollection(self)->None:
    method test_2_LandingGearExpObject (line 38) | def test_2_LandingGearExpObject(self)->None:
    method test_2_WheelCollection (line 47) | def test_2_WheelCollection(self)->None:
    method test_3_ButtonCollection (line 56) | def test_3_ButtonCollection(self)->None:
    method test_4_ExportableCollection (line 65) | def test_4_ExportableCollection(self)->None:

FILE: tests/xplane_types/xplane_file/write.test.py
  class TestWriteXPlaneFiles (line 10) | class TestWriteXPlaneFiles(XPlaneTestCase):
    method setUp (line 11) | def setUp(self):
    method test_write_static (line 14) | def test_write_static(self):
    method test_write_trans_animated (line 20) | def test_write_trans_animated(self):
    method test_write_transrot_animated (line 24) | def test_write_transrot_animated(self):
Copy disabled (too large) Download .json
Condensed preview — 783 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (25,835K chars).
[
  {
    "path": ".gitignore",
    "chars": 394,
    "preview": "*.pyc\nio_xplane_debug.py\nsetup.py\ntmp\n*.blend1\n*.blend2\n*.blend3\n*.blend4\n*.blend5\n__pycache__\n\n*.swo\n*.swp\n*.orig\n\n*.zi"
  },
  {
    "path": ".isort.cfg",
    "chars": 225,
    "preview": "[settings]\nmulti_line_output = 3\ninclude_trailing_comma = True\nforce_grid_wrap = 0\nuse_parentheses = True\nensure_newline"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 187,
    "preview": "repos:\n-   repo: https://github.com/pre-commit/mirrors-isort\n    rev: v4.3.21\n    hooks:\n    - id: isort\n-   repo: https"
  },
  {
    "path": ".travis.yml",
    "chars": 668,
    "preview": "language: python\npython:\n  - \"3.7\"\naddons:\n  apt:\n    packages:\n      - blender\nsudo: false\ninstall:\n  - BLENDER_VERSION"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3354,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "LICENSE",
    "chars": 35147,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 4729,
    "preview": "[![Build Status](https://travis-ci.org/X-Plane/XPlane2Blender.svg?branch=master)](https://travis-ci.org/X-Plane/XPlane2B"
  },
  {
    "path": "addons/addons.README",
    "chars": 781,
    "preview": "01234567890123456789012345678901234567890123456789012345678901234567890123456789\nThis directory and the symlink \"modules"
  },
  {
    "path": "io_xplane2blender/__init__.py",
    "chars": 3225,
    "preview": "# ##### BEGIN GPL LICENSE BLOCK #####\n#\n#  This program is free software; you can redistribute it and/or\n#  modify it un"
  },
  {
    "path": "io_xplane2blender/resources/Commands.txt",
    "chars": 216121,
    "preview": "sim/none/none                                      Do nothing.\nsim/operation/quit                                 Quit X"
  },
  {
    "path": "io_xplane2blender/resources/DataRefs.txt",
    "chars": 577341,
    "preview": "2 1208 Wed Aug 16 20:19:08 2023\n\nsim/aircraft/autopilot/vvi_step_ft\tfloat\ty\tfeet\tStep increment for autopilot VVI\t\nsim/a"
  },
  {
    "path": "io_xplane2blender/resources/lights.txt",
    "chars": 107406,
    "preview": "A\n850\nLIGHT_SPECS\n\n# WARNING TO X-PLANE USERS\n#\n# This is an internal file that contains data for the built-in X-Plane l"
  },
  {
    "path": "io_xplane2blender/tests/__init__.py",
    "chars": 29279,
    "preview": "import array\nimport collections\nimport io\nimport itertools\nimport os\nimport pathlib\nfrom pprint import pprint\nimport shu"
  },
  {
    "path": "io_xplane2blender/tests/animation_file_mappings.py",
    "chars": 6166,
    "preview": "\"\"\"\nContains the mapping between .blend files\nand what is supposed to be tested in them\n\"\"\"\nfrom typing import Dict, Set"
  },
  {
    "path": "io_xplane2blender/tests/test_creation_helpers.py",
    "chars": 34647,
    "preview": "\"\"\"\ntest_creation_tools\n\nThese allow the quick automated setup of test cases\n\n- get_ get's a Blender datablock or piece "
  },
  {
    "path": "io_xplane2blender/xplane_config.py",
    "chars": 1217,
    "preview": "# File: xplane_config.py\n# Holds config variables that are used throughout the addon.\nfrom typing import Tuple\n\nimport b"
  },
  {
    "path": "io_xplane2blender/xplane_constants.py",
    "chars": 8185,
    "preview": "\"\"\"\n  #####     ##   ##  ##   ####  ####  ####    #####   ####    ##    ####   ###   ##  ##   ###  #\n   #   #   # #    #"
  },
  {
    "path": "io_xplane2blender/xplane_export.py",
    "chars": 8694,
    "preview": "\"\"\"The starting point for the export process, the start of the addon\"\"\"\n\nimport os\nimport os.path\nimport sys\nfrom typing"
  },
  {
    "path": "io_xplane2blender/xplane_helpers.py",
    "chars": 23148,
    "preview": "import datetime\nimport itertools\nimport os\nimport re\nfrom datetime import timezone\nfrom typing import Iterable, List, Op"
  },
  {
    "path": "io_xplane2blender/xplane_ops.py",
    "chars": 37651,
    "preview": "from pathlib import Path\nimport shutil\nimport time\nfrom typing import Any, Dict, List, Optional, Tuple\n\nimport bpy\n\nfrom"
  },
  {
    "path": "io_xplane2blender/xplane_ops_dev.py",
    "chars": 4828,
    "preview": "# File: xplane_ops_dev.py\n# Defines Operators specifically for plugin development\n\nimport os\nimport re\nfrom collections "
  },
  {
    "path": "io_xplane2blender/xplane_props.py",
    "chars": 108160,
    "preview": "\"\"\"\nDefines X-Plane Properties attached to regular Blender data types.\n\"\"\"\n\nfrom typing import Callable, List, Tuple\n\nim"
  },
  {
    "path": "io_xplane2blender/xplane_types/__init__.py",
    "chars": 498,
    "preview": "# Author: Ondrej Brinkel <info@anzui.de>\n\nfrom .xplane_attribute import XPlaneAttribute\nfrom .xplane_attributes import X"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_attribute.py",
    "chars": 5165,
    "preview": "from typing import Any, Dict, List, Optional, Union, Callable\nfrom functools import total_ordering\n\nfrom io_xplane2blend"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_attributes.py",
    "chars": 1155,
    "preview": "from collections import OrderedDict\nfrom typing import Optional\n\nfrom io_xplane2blender.xplane_types.xplane_attribute im"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_bone.py",
    "chars": 36230,
    "preview": "\"\"\"\nAbout the XPlaneBone/XPlaneObject API\n=====================================\nXPlane2Blender makes it's own hierarchy "
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_commands.py",
    "chars": 17371,
    "preview": "import re\nfrom typing import Any, Dict, List, Optional, Tuple, Union\n\nimport bpy\n\nfrom io_xplane2blender import xplane_h"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_empty.py",
    "chars": 6175,
    "preview": "import math\n\nimport bpy\nimport mathutils\n\nfrom io_xplane2blender import xplane_config, xplane_helpers\nfrom io_xplane2ble"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_face.py",
    "chars": 925,
    "preview": "# Class: XPlaneFace\n# A mesh face. This class is just a data wrapper used by <XPlaneFaces>.\nclass XPlaneFace:\n    # Prop"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_file.py",
    "chars": 39314,
    "preview": "\"\"\"\nThis is the entry point for the exporter's collection and where it starts writing, proper.\nThe important paths are\n\n"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_header.py",
    "chars": 62713,
    "preview": "import os\nimport platform\nimport re\nfrom collections import OrderedDict\nfrom pathlib import Path\nfrom typing import List"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_keyframe.py",
    "chars": 6958,
    "preview": "import copy\nfrom typing import Tuple\n\nimport bpy\nimport mathutils\n\nfrom io_xplane2blender import xplane_helpers\nfrom io_"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_keyframe_collection.py",
    "chars": 13944,
    "preview": "import copy\nimport math\nfrom collections import namedtuple\nfrom collections.abc import MutableSequence, Iterable\nfrom ty"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_light.py",
    "chars": 31882,
    "preview": "import math\nimport re\nfrom copy import deepcopy\nfrom dataclasses import dataclass, field\nfrom itertools import chain, ta"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_manipulator.py",
    "chars": 63907,
    "preview": "\"\"\"\nCreated on Jan 30, 2018\n\n@author: Ted\n\"\"\"\n\nimport collections\nimport decimal\nimport typing\nfrom typing import Callab"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_material.py",
    "chars": 15909,
    "preview": "from typing import List, Tuple\n\nimport bpy\n\nimport io_xplane2blender\nfrom io_xplane2blender.xplane_types import xplane_o"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_material_utils.py",
    "chars": 12029,
    "preview": "from typing import Callable, List, Optional, Tuple\n\nimport bpy\n\nfrom io_xplane2blender.xplane_helpers import (\n    effec"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_mesh.py",
    "chars": 9152,
    "preview": "import array\nimport collections\nimport re\nimport time\nfrom typing import List, Optional\n\nimport bpy\nimport mathutils\n\nfr"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_object.py",
    "chars": 6466,
    "preview": "import itertools\nfrom typing import Dict, List, Optional\n\nimport bpy\nimport mathutils\n\nfrom io_xplane2blender.xplane_con"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_primitive.py",
    "chars": 5506,
    "preview": "import collections\nimport math\nimport sys\nfrom typing import Any\n\nimport bpy\nfrom mathutils import Vector\n\nfrom io_xplan"
  },
  {
    "path": "io_xplane2blender/xplane_types/xplane_vlights.py",
    "chars": 1678,
    "preview": "from typing import List\n\nimport bpy\n\nfrom io_xplane2blender.xplane_types import xplane_light\n\nfrom ..xplane_constants im"
  },
  {
    "path": "io_xplane2blender/xplane_ui.py",
    "chars": 85885,
    "preview": "\"\"\"\nCreates the User Interface for all X-Plane properties.\n\"\"\"\n\nimport collections\nimport math\nfrom typing import Option"
  },
  {
    "path": "io_xplane2blender/xplane_updater.py",
    "chars": 33922,
    "preview": "\"\"\"\n #####     ##   ##  ##   ####  ####  ####  #    ### ##  ####  ####  ####    ####  ####    #####   ####    ##    ####"
  },
  {
    "path": "io_xplane2blender/xplane_utils/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "io_xplane2blender/xplane_utils/xplane_commands_txt_parser.py",
    "chars": 3276,
    "preview": "import os\nimport pathlib\nimport re\nimport sys\nfrom collections import OrderedDict\nfrom pathlib import Path\nfrom typing i"
  },
  {
    "path": "io_xplane2blender/xplane_utils/xplane_datarefs_txt_parser.py",
    "chars": 5650,
    "preview": "import os\nimport pathlib\nimport re\nimport sys\nfrom collections import OrderedDict\nfrom pathlib import Path\nfrom typing i"
  },
  {
    "path": "io_xplane2blender/xplane_utils/xplane_effective_gloss.py",
    "chars": 1389,
    "preview": "import numpy\nimport bpy\n\ndef ggx_distribution_cdf(x, alpha):\n    sin_x_squared = numpy.sin(x) ** 2\n    cos_x_squared = n"
  },
  {
    "path": "io_xplane2blender/xplane_utils/xplane_lights_txt_parser.py",
    "chars": 35674,
    "preview": "\"\"\"\nThe main class for parsing and interpring the contents of lights.txt.\n\nFirst parse the file, then get ParsedLights v"
  },
  {
    "path": "io_xplane2blender/xplane_utils/xplane_updater_helpers.py",
    "chars": 7872,
    "preview": "import collections\nfrom typing import Any, Dict, List, Optional, Set, Tuple, Union\n\nimport bpy\nimport idprop\n\n# This is "
  },
  {
    "path": "io_xplane2blender/xplane_utils/xplane_wiper_gradient.py",
    "chars": 3058,
    "preview": "import array\nimport sys\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Dict, List, Option"
  },
  {
    "path": "mkbuild.py",
    "chars": 16444,
    "preview": "import argparse\nimport datetime\nimport os\nimport re\nimport shutil\nimport subprocess\nimport sys\nfrom collections import n"
  },
  {
    "path": "pylintrc",
    "chars": 36,
    "preview": "[BASIC]\ndisable=W0141, W0401, C0103\n"
  },
  {
    "path": "pyproject.toml",
    "chars": 207,
    "preview": "[tool.black]\nline-length = 88\ninclude = '\\.pyi?$'\nexclude = '''\n(\n  /(\n      \\.git\n    | \\.mypy_cache\n    | \\.vs\n    | \\"
  },
  {
    "path": "requirements.txt",
    "chars": 47,
    "preview": "black==19.10b0\nisort==4.3.21\npre-commit==2.7.1\n"
  },
  {
    "path": "run.py",
    "chars": 2507,
    "preview": "# This is a small python script that launches Blender from the command line with the X-Plane exporter out of your GIT re"
  },
  {
    "path": "tests/addon/addon.test.py",
    "chars": 214,
    "preview": "from io_xplane2blender.tests import *\nimport io_xplane2blender\n\nclass TestAddon(XPlaneTestCase):\n    def test_addon_enab"
  },
  {
    "path": "tests/addon/fixtures/test_multiple_export_works_anim_bone.obj",
    "chars": 5129,
    "preview": "I\n800\nOBJ\n\nNORMAL_METALNESS\nGLOBAL_specular\t1\nPOINT_COUNTS\t42\t0\t0\t42\n\nVT\t-0.03089895\t-0.05446467\t-0.03938532\t0.00000012\t"
  },
  {
    "path": "tests/addon/fixtures/test_multiple_export_works_simple.obj",
    "chars": 1024,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t12\t0\t0\t12\n\nVT\t1\t1\t-1\t0\t0\t-1\t0.875\t0.75\t# 0\nVT\t-1\t1\t-1\t0\t0\t-1\t0.875\t0.5\t# 1\nVT\t-1\t-1\t-1\t0\t0\t-1\t0."
  },
  {
    "path": "tests/addon/fixtures/test_multiple_export_works_uv_map.obj",
    "chars": 25011,
    "preview": "I\n800\nOBJ\n\nTEXTURE\tIcosphere_UV.png\nPOINT_COUNTS\t240\t0\t0\t240\n\nVT\t-3.87891817\t-0.97002554\t0.36160302\t0.05665261\t-0.998050"
  },
  {
    "path": "tests/addon/multiple_export_works.test.py",
    "chars": 1557,
    "preview": "import inspect\n\nfrom typing import Tuple\nimport os\nimport sys\n\nimport bpy\nfrom io_xplane2blender import xplane_config\nfr"
  },
  {
    "path": "tests/animation/TestCase1.test.py",
    "chars": 403,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase2.test.py",
    "chars": 403,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase3.test.py",
    "chars": 403,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase4.test.py",
    "chars": 403,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase5_nested_sets.test.py",
    "chars": 462,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase6_scaling_rot.test.py",
    "chars": 462,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase7_scaling_rotloc.test.py",
    "chars": 477,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase8_bone_optimization.test.py",
    "chars": 492,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/TestCase9_keyframe_loops.test.py",
    "chars": 477,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/armature_bone_block_parent_relationships.test.py",
    "chars": 1876,
    "preview": "import bpy\nimport os\nimport inspect\nimport sys\n\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xpla"
  },
  {
    "path": "tests/animation/armature_nested_offset.test.py",
    "chars": 1476,
    "preview": "import inspect\nimport os\nimport sys\n\nimport bpy\nfrom io_xplane2blender import xplane_config\nfrom io_xplane2blender.tests"
  },
  {
    "path": "tests/animation/axis.test.disabled.py",
    "chars": 546,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender.xplane_types import xplane_"
  },
  {
    "path": "tests/animation/bone_animations.test.py",
    "chars": 1017,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/fixtures/TestCase1/armature_rotation_arbitrary_axis.obj",
    "chars": 3425,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/armature_rotation_twoaxis_3keys.obj",
    "chars": 2331,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/armature_translation_arbitrary.obj",
    "chars": 1937,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_axis_angle.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_quaternion.obj",
    "chars": 1878,
    "preview": "I\n800\nOBJ\n\nTEXTURE\t../../../../../../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\nPOIN"
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_xyz_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_xzy_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_yxz_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_yzx_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_zxy_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_X_zyx_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_axis_angle.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_quaternion.obj",
    "chars": 1889,
    "preview": "I\n800\nOBJ\n\nTEXTURE\t../../../../../../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\nPOIN"
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_xyz_euler.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_xzy_euler.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_yxz_euler.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_yzx_euler.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_zxy_euler.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_rotation_Y_zyx_euler.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase1/object_translation.obj",
    "chars": 1891,
    "preview": "I\n800\nOBJ\n\nTEXTURE\t../../../../../../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\nPOIN"
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_axis_angle.obj",
    "chars": 1790,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_quaternion.obj",
    "chars": 1813,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../../../../../../../../alxunru/Desktop/X-Plane 10/Aircraft/Test Case"
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_xyz_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_xzy_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_yxz_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_yzx_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_zxy_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_Z_zyx_euler.obj",
    "chars": 1789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_axis_angle.obj",
    "chars": 2184,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_quaternion.obj",
    "chars": 1600,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\n\nV"
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_xyz_euler.obj",
    "chars": 2185,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_xzy_euler.obj",
    "chars": 2185,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_yxz_euler.obj",
    "chars": 2182,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_yzx_euler.obj",
    "chars": 2184,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_zxy_euler.obj",
    "chars": 2183,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase2/object_rotation_arbitrary_3key_zyx_euler.obj",
    "chars": 2185,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_axis_angle.obj",
    "chars": 1880,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_quaternion.obj",
    "chars": 2317,
    "preview": "I\n800\nOBJ\n\nTEXTURE\t../../../../../../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\nPOIN"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_xyz_euler.obj",
    "chars": 2129,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_xzy_euler.obj",
    "chars": 2128,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_yxz_euler.obj",
    "chars": 2121,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_yzx_euler.obj",
    "chars": 2129,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_zxy_euler.obj",
    "chars": 2128,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase3/object_rotation_translation_arbitrary_zyx_euler.obj",
    "chars": 2128,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase4/armature_combined_rotation_translation.obj",
    "chars": 2379,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_axis_angle.obj",
    "chars": 2142,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_quaternion.obj",
    "chars": 2061,
    "preview": "I\n800\nOBJ\n\nTEXTURE\t../../../../alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\nPOINT_COUNTS\t36\t0\t0\t36\n\nV"
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_xyz_euler.obj",
    "chars": 2142,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_xzy_euler.obj",
    "chars": 1982,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_yxz_euler.obj",
    "chars": 2142,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_yzx_euler.obj",
    "chars": 2141,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_zxy_euler.obj",
    "chars": 1982,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthagonal_2axis_3keys_zyx_euler.obj",
    "chars": 1982,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_orthogonal_3keys.obj",
    "chars": 1823,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase4/object_rotation_translation_orthogonal.obj",
    "chars": 1932,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\nTEXTURE\t../../../../Users/alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test."
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/armature_locrot_nested_armature_locrot.obj",
    "chars": 3831,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.50000012\t0.49999994\t0.49999997\t-0.00000021\t-0.00000012\t1\t0\t0\t# 0\nVT\t0.49999991\t"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/armature_locrot_whereOBJ_trans_rotation_arbitrary.obj",
    "chars": 2668,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t-0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/armature_locrot_whereOBJ_trans_rotation_single_axis.obj",
    "chars": 2394,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.5\t0.5\t-0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/armature_rot_nested_armature_rot.obj",
    "chars": 3467,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.50000012\t0.49999994\t0.49999997\t-0.00000021\t-0.00000012\t1\t0\t0\t# 0\nVT\t0.49999991\t"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/armature_rot_nested_armature_rot_3keys.obj",
    "chars": 4212,
    "preview": "I\n800\nOBJ\n\nTEXTURE\t../../../../alxunru/Desktop/X-Plane 10/Aircraft/Test Cases/objects/test.png\nPOINT_COUNTS\t36\t0\t0\t36\n\nV"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/mega_nested_mega.obj",
    "chars": 5150,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-0.50000012\t0.49999994\t0.49999997\t-0.00000021\t-0.00000012\t1\t0\t0\t# 0\nVT\t0.49999991\t"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/object_trans_arbitrary_nested_object_trans_arbitrary.obj",
    "chars": 3741,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase5_nested_sets/object_trans_ortho_nested_object_trans_ortho.obj",
    "chars": 3793,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-0.5\t0.5\t0.5\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.5\t-0.5\t0.5\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.5\t-0.5\t-0.5\t-1\t0"
  },
  {
    "path": "tests/animation/fixtures/TestCase6_scaling_rot/TestCase6_scaling_rot.obj",
    "chars": 2732,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1.00000012\t1.99999988\t0.99999988\t-1\t0\t-0.00000012\t0\t0\t# 0\nVT\t-1.00000012\t-1.99999"
  },
  {
    "path": "tests/animation/fixtures/TestCase7_scaling_rotloc/TestCase7_scaling_rotloc.obj",
    "chars": 2797,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1.00000012\t1.99999988\t0.99999988\t-1\t0\t-0.00000012\t0\t0\t# 0\nVT\t-1.00000012\t-1.99999"
  },
  {
    "path": "tests/animation/fixtures/TestCase8_bone_optimization/TestCase8_loc.obj",
    "chars": 4028,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase8_bone_optimization/TestCase8_rot.obj",
    "chars": 3320,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase8_bone_optimization/TestCase8_rot_loc.obj",
    "chars": 3403,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase8_bone_optimization/TestCase8_static.obj",
    "chars": 3934,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase9_keyframe_loops/TestCase9_loop_arm.obj",
    "chars": 3434,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase9_keyframe_loops/TestCase9_loop_arm_bone.obj",
    "chars": 3461,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase9_keyframe_loops/TestCase9_loop_bone.obj",
    "chars": 3427,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/TestCase9_keyframe_loops/TestCase9_loop_none.obj",
    "chars": 3410,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t0\t-"
  },
  {
    "path": "tests/animation/fixtures/armature_bone_block_parent_relationships/test_Armature_arm_anim_bone_anim.obj",
    "chars": 1595,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t0\t0\t0\t0\n\n# 0 ROOT\n# 1 Object: Armature_arm_anim_bone_anim\nANIM_begin\n# rotation keyframes\nANIM_r"
  },
  {
    "path": "tests/animation/fixtures/armature_bone_block_parent_relationships/test_Armature_arm_anim_bone_no_anim.obj",
    "chars": 1190,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t0\t0\t0\t0\n\n# 0 ROOT\n# 1 Object: Armature_arm_anim_bone_no_anim\nANIM_begin\n# rotation keyframes\nANI"
  },
  {
    "path": "tests/animation/fixtures/armature_bone_block_parent_relationships/test_Armature_arm_no_anim_bone_anim.obj",
    "chars": 1114,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t0\t0\t0\t0\n\n# 0 ROOT\n# 1 Object: Armature_arm_no_anim_bone_anim\n# ARMATURE: Armature_arm_no_anim_bo"
  },
  {
    "path": "tests/animation/fixtures/armature_bone_block_parent_relationships/test_Armature_arm_no_anim_bone_no_anim.obj",
    "chars": 1037,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t0\t0\t0\t0\n\n# 0 ROOT\n# 1 Object: Armature_arm_no_anim_bone_no_anim\n# ARMATURE: Armature_arm_no_anim"
  },
  {
    "path": "tests/animation/fixtures/armature_bone_block_parent_relationships/test_no_parent.obj",
    "chars": 826,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t0\t0\t0\t0\n\n# 0 ROOT\n# 1 Object: no_parent\n# EMPTY: no_parent\tweight: 0\n\t# 2 Object: lamp_anim\n\tANI"
  },
  {
    "path": "tests/animation/fixtures/nested_bones/test_1_Armature_child_bones_one_leaf_mesh.obj",
    "chars": 1895,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t-0.25\t0.25\t-1.25\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.25\t0.25\t-0.75\t-1\t0\t0\t0\t0\t# 1\nVT\t-0.25\t-0.25\t"
  },
  {
    "path": "tests/animation/fixtures/nested_bones/test_2_Armature_child_bones_mesh_on_each.obj",
    "chars": 4622,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t108\n\nVT\t-0.25\t0.24999996\t-0.75\t-1\t0\t0\t0\t0\t# 0\nVT\t-0.25\t-0.25000003\t-0.75000006\t-1\t0\t0\t0\t0"
  },
  {
    "path": "tests/animation/fixtures/nested_bones/test_3_Armature_multiple_arms_one_leaf_mesh.obj",
    "chars": 5000,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t48\t0\t0\t72\n\nVT\t-0.24999975\t0.24999969\t-1.66421342\t-1\t0\t-0.00000015\t0\t0\t# 0\nVT\t-0.24999982\t0.24999"
  },
  {
    "path": "tests/animation/fixtures/nested_bones/test_4_Armature_multiple_arms_child_bones_on_each.obj",
    "chars": 15346,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t168\t0\t0\t252\n\nVT\t-0.24999975\t0.24999969\t-1.66421342\t-1\t0\t-0.00000015\t0\t0\t# 0\nVT\t-0.24999982\t0.249"
  },
  {
    "path": "tests/animation/fixtures/test_01_datablock_datablock.obj",
    "chars": 90593,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t1056\t0\t0\t1440\n\nVT\t0.12499999\t1.56698728\t-0.21650651\t0.06918406\t-0.9636113\t-0.25819889\t0\t0\t# 0\nVT"
  },
  {
    "path": "tests/animation/fixtures/test_02_bone_datablock.obj",
    "chars": 91066,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t1056\t0\t0\t1440\n\nVT\t0.00000002\t-0.25000006\t-1.56698728\t-0.06918409\t0.25819889\t-0.9636113\t0\t0\t# 0\nV"
  },
  {
    "path": "tests/animation/fixtures/test_03_bone_bone_connected_offset_translation.obj",
    "chars": 91501,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t1056\t0\t0\t1440\n\nVT\t0.00000002\t-0.25000006\t-1.56698728\t-0.06918409\t0.25819889\t-0.9636113\t0\t0\t# 0\nV"
  },
  {
    "path": "tests/animation/fixtures/test_05_bone_bone_connected_no_offset_translation.obj",
    "chars": 100654,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t1152\t0\t0\t1584\n\nVT\t0.10825315\t-0.1875\t0.12500001\t0.18615673\t-0.69474655\t0.69474655\t0\t0\t# 0\nVT\t-0\t"
  },
  {
    "path": "tests/animation/fixtures/test_bone_animations.obj",
    "chars": 2980,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1.00000012\t1.00000119\t-4.99999952\t0\t1\t0.00000024\t0\t0\t# 0\nVT\t1\t1.00000119\t-5\t0\t1\t0"
  },
  {
    "path": "tests/animation/fixtures/test_kf_points_1_ignored_2_used.obj",
    "chars": 2789,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1\t0.99999994\t0.99999994\t0\t1\t-0\t0.625\t0.25\t# 0\nVT\t-1\t0.99999994\t-0.99999994\t0\t1\t-0"
  },
  {
    "path": "tests/animation/fixtures/test_multiple_armatures.obj",
    "chars": 6360,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t108\t0\t0\t108\n\nVT\t-1.00000012\t-1\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t1\t-1\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t1\t-1\t-0.999"
  },
  {
    "path": "tests/animation/fixtures/test_nested_armatures.obj",
    "chars": 2389,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1.00000012\t1\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t1\t1\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t1\t1\t-0.99999994"
  },
  {
    "path": "tests/animation/fixtures/test_nested_bone_animations.obj",
    "chars": 5834,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t72\t0\t0\t72\n\nVT\t-0.50000006\t0.50000054\t-5.5\t0\t1\t0.00000006\t0\t0\t# 0\nVT\t0.5\t0.50000054\t-5.5\t0\t1\t0.00"
  },
  {
    "path": "tests/animation/fixtures/test_no_drop_dup_trans_rot_aa.obj",
    "chars": 2836,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1.00000012\t-1\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t1\t-1\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t1\t-1\t-0.99999"
  },
  {
    "path": "tests/animation/fixtures/test_no_drop_dup_trans_rot_euler.obj",
    "chars": 3103,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1.00000012\t-0.99999994\t0.99999994\t0\t-1\t-0.00000003\t0\t0\t# 0\nVT\t1\t-0.99999994\t1.000"
  },
  {
    "path": "tests/animation/fixtures/test_no_drop_dup_trans_rot_quat.obj",
    "chars": 3355,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1\t-1\t0.99999982\t0.00000001\t-1\t-0.00000001\t0\t0\t# 0\nVT\t1\t-1\t1\t0.00000001\t-1\t-0.0000"
  },
  {
    "path": "tests/animation/fixtures/test_show_hide_hide_near_0.obj",
    "chars": 1169,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t2\t-"
  },
  {
    "path": "tests/animation/fixtures/test_show_hide_show_near_0.obj",
    "chars": 1169,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t-1\t2\t1\t-1\t0\t0\t0\t0\t# 0\nVT\t-1\t0\t1\t-1\t0\t0\t0\t0\t# 1\nVT\t-1\t0\t-1\t-1\t0\t0\t0\t0\t# 2\nVT\t-1\t2\t-"
  },
  {
    "path": "tests/animation/fixtures/test_single_bone_initial_rotation.obj",
    "chars": 67319,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t678\t0\t0\t678\n\nVT\t0.61266744\t1.02808869\t-0.02689901\t0.81704152\t0.56880397\t0.09418012\t0.90234375\t0."
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_loc_w_parent.obj",
    "chars": 3847,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t48\t0\t0\t72\n\nVT\t-0.99999964\t-1.41421342\t-0.00000012\t0.00000001\t-0.70710677\t-0.70710677\t0\t0\t# 0\nVT\t"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_loc_wo_parent.obj",
    "chars": 2420,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t-1.00000012\t-1.41421342\t-0.00000012\t0.00000001\t-0.70710677\t-0.70710677\t0\t0\t# 0\nVT\t"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_locrot_w_parent.obj",
    "chars": 3733,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t48\t0\t0\t72\n\nVT\t-1.00000012\t-1\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t1\t-1\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t1\t-1\t-0.99999"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_locrot_wo_parent.obj",
    "chars": 2276,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t-1.00000012\t-1\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t1\t-1\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t1\t-1\t-0.99999"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_none_w_parent.obj",
    "chars": 3189,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t48\t0\t0\t72\n\nVT\t16\t-0.41421342\t-0.00000012\t0.00000001\t-0.70710677\t-0.70710683\t0\t0\t# 0\nVT\t18\t-0.414"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_none_wo_parent.obj",
    "chars": 1841,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t11\t-1.41421342\t-0.00000012\t0.00000001\t-0.70710677\t-0.70710683\t0\t0\t# 0\nVT\t13\t-1.414"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_rot_w_parent.obj",
    "chars": 3395,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t48\t0\t0\t72\n\nVT\t4\t0\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t6\t0\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t6\t0\t-0.99999994\t0\t-1\t0\t0\t"
  },
  {
    "path": "tests/animation/fixtures/transform_stack/test_transform_stack_cube_rot_wo_parent.obj",
    "chars": 2000,
    "preview": "I\n800\nOBJ\n\nPOINT_COUNTS\t24\t0\t0\t36\n\nVT\t-1.00000012\t-1\t0.99999982\t0\t-1\t0\t0\t0\t# 0\nVT\t1\t-1\t1\t0\t-1\t0\t0\t0\t# 1\nVT\t1\t-1\t-0.99999"
  },
  {
    "path": "tests/animation/list.rtf",
    "chars": 5011,
    "preview": "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1347\\cocoasubrtf570\n{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica;\\f1\\fnil\\fcharset0 Helvetica"
  },
  {
    "path": "tests/animation/multiple_armatures.test.py",
    "chars": 677,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/nested_armatures.test.py",
    "chars": 667,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/nested_bones.test.py",
    "chars": 1521,
    "preview": "import bpy\nimport os\nimport inspect\nimport sys\n\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xpla"
  },
  {
    "path": "tests/animation/no_dropped_dup_keys.test.py",
    "chars": 1013,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/one_kf_point_fcurve_ignored.test.py",
    "chars": 649,
    "preview": "import inspect\n\nfrom typing import Tuple\nimport os\nimport sys\n\nimport bpy\nfrom io_xplane2blender import xplane_config\nfr"
  },
  {
    "path": "tests/animation/show_hide_anim_types.test.py",
    "chars": 1151,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/single_bone_initial_rotation.test.py",
    "chars": 721,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/transform_stack_w_parent.test.py",
    "chars": 945,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/animation/transform_stack_wo_parent.test.py",
    "chars": 953,
    "preview": "import bpy\nimport os\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_config\n\n__dir"
  },
  {
    "path": "tests/build_system/build_number_obj_footer.test.py",
    "chars": 930,
    "preview": "import bpy\nimport os\nimport re\nimport sys\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender import xplane_con"
  },
  {
    "path": "tests/build_system/build_number_prop.test.py",
    "chars": 2563,
    "preview": "import bpy\n\nimport os\nimport sys\nfrom io_xplane2blender import bl_info\nfrom io_xplane2blender import xplane_config\nfrom "
  },
  {
    "path": "tests/build_system/build_number_updater.test.py",
    "chars": 4185,
    "preview": "import os\nimport sys\nfrom shutil import *\n\nimport bpy\n\nfrom io_xplane2blender import xplane_config, xplane_constants\nfro"
  },
  {
    "path": "tests/build_system/build_number_verstruct.test.py",
    "chars": 9031,
    "preview": "import os\nimport sys\nfrom shutil import *\n\nimport bpy\nfrom bpy.app import build_type\n\nfrom io_xplane2blender import xpla"
  },
  {
    "path": "tests/features/cockpit_features/cockpit_device.test.py",
    "chars": 1200,
    "preview": "import inspect\nimport os\nimport sys\nfrom typing import Tuple\n\nimport bpy\n\nfrom io_xplane2blender import xplane_config\nfr"
  },
  {
    "path": "tests/features/cockpit_features/cockpit_lit_only.test.py",
    "chars": 2007,
    "preview": "import inspect\nimport os\nimport sys\nfrom typing import Tuple\n\nimport bpy\n\nfrom io_xplane2blender import xplane_config\nfr"
  },
  {
    "path": "tests/features/cockpit_features/cockpit_material.test.py",
    "chars": 913,
    "preview": "import os\nimport sys\n\nimport bpy\n\nfrom io_xplane2blender.tests import *\nfrom io_xplane2blender.xplane_config import getD"
  },
  {
    "path": "tests/features/cockpit_features/cockpit_panel_luminance.test.py",
    "chars": 925,
    "preview": "from pathlib import Path\nimport inspect\nimport os\nimport sys\nfrom typing import Tuple\n\nimport bpy\n\nfrom io_xplane2blende"
  },
  {
    "path": "tests/features/cockpit_features/cockpit_regions.test.py",
    "chars": 870,
    "preview": "import inspect\nimport os\nimport sys\nfrom typing import Tuple\n\nimport bpy\n\nfrom io_xplane2blender import xplane_config\nfr"
  },
  {
    "path": "tests/features/cockpit_features/fixtures/test_01_cockpit_lit_only_exported.obj",
    "chars": 1594,
    "preview": "I\n800\nOBJ\n\nGLOBAL_cockpit_lit\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1\t1\t1\t0\t1\t-0\t0.625\t0.25\t# 0\nVT\t-1\t1\t-1\t0\t1\t-0\t0.625\t0\t# 1\nVT\t1"
  },
  {
    "path": "tests/features/cockpit_features/fixtures/test_03_cockpit_lit_only_no_export_regions.obj",
    "chars": 1624,
    "preview": "I\n800\nOBJ\n\nCOCKPIT_REGION\t0\t0\t2\t2\nGLOBAL_cockpit_lit\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1\t1\t1\t0\t1\t-0\t0.625\t0.25\t# 0\nVT\t-1\t1\t-1\t"
  },
  {
    "path": "tests/features/cockpit_features/fixtures/test_04_cockpit_lit_no_export_panel_mode_default.obj",
    "chars": 1593,
    "preview": "I\n800\nOBJ\n\nGLOBAL_cockpit_lit\nPOINT_COUNTS\t36\t0\t0\t36\n\nVT\t-1\t1\t1\t0\t1\t-0\t0.625\t0.25\t# 0\nVT\t-1\t1\t-1\t0\t1\t-0\t0.625\t0\t# 1\nVT\t1"
  }
]

// ... and 583 more files (download for full content)

About this extraction

This page contains the full source code of the X-Plane/XPlane2Blender GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 783 files (32.3 MB), approximately 5.8M tokens, and a symbol index with 1444 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!