1279 lines
358 KiB
Python
1279 lines
358 KiB
Python
|
||
|
||
|
||
|
||
|
||
|
||
<!DOCTYPE html>
|
||
<html
|
||
lang="en"
|
||
|
||
data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
|
||
data-a11y-animated-images="system" data-a11y-link-underlines="true"
|
||
data-css-features="prs_sticky_header_top_fix"
|
||
>
|
||
|
||
<style>
|
||
:root {
|
||
--fontStack-monospace: "Monaspace Neon", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace !important;
|
||
}
|
||
</style>
|
||
|
||
|
||
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<link rel="dns-prefetch" href="https://github.githubassets.com">
|
||
<link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
|
||
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
|
||
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
|
||
<link rel="preconnect" href="https://github.githubassets.com" crossorigin>
|
||
<link rel="preconnect" href="https://avatars.githubusercontent.com">
|
||
|
||
|
||
|
||
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-2ff56e1b36116ee2.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-2d1fe43dbc9adf1f.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-f7f95d7633592089.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-e4bbc49fc7b82570.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-cc3f126b45166b83.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-652ca611ea4e33fe.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-9e82d635cb6c3f49.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-d530ee188d165539.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-3ad0ec21150df75b.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-5691ff467f71a3f6.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-abee7710893cd168.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-eafcf6cd46158360.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-c7974682a1a84c8d.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-f8dab3e04f94c501.css" />
|
||
|
||
<style type="text/css">
|
||
:root {
|
||
--tab-size-preference: 4;
|
||
}
|
||
|
||
pre, code {
|
||
tab-size: var(--tab-size-preference);
|
||
}
|
||
</style>
|
||
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-7f694b60439d06c0.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-tailwind-compatible-25aee10cf9257254.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-b40ec823a1a6a1af.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-f825c0edd7ad57f8.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/tailwind-8b1568e5f435b32a.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-0751f482f5210958.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-c22301b4e838281c.css" />
|
||
|
||
|
||
|
||
<script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_case_function","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","billing_discount_threshold_notification","billing_ui_budget_pagination_enabled","code_scanning_alert_tracking_links_phase_2","code_scanning_dfa_degraded_experience_notice","code_view_checks_live_updates","codemirror_inp_optimizations","codeowners_validation_in_diff","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","coding_agent_third_party_model_ui","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_alternative_global_nav_actions","copilot_chat_attach_multiple_images","copilot_chat_category_rate_limit_messages","copilot_chat_clear_model_selection_for_default_change","copilot_chat_contextual_suggestions_updated","copilot_chat_disable_model_picker_while_streaming","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_prettify_pasted_code","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_disable_cfi_sku_new_signups","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_embedded_deferred_payload","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_embedded_implicit_references","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_issue_list_show_more","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_session_status","copilot_mission_control_initial_data_spinner","copilot_mission_control_task_alive_updates","copilot_org_policy_page_focus_mode","copilot_premium_request_quotas","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_upgrade_freeze","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025","dashboard_universe_2025_feedback_dialog","dead_click_detection","dotgithub_fork_warning","fgpat_permissions_selector_redesign","flex_cta_groups_mvp","global_nav_react","hide_groups_list_for_few_groups","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_task_side_panel","issue_cca_visualization","issue_cca_visualization_session_panel","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_cache_preheat_index","issues_react_chrome_container_query_fix","issues_react_include_bots_in_pickers","issues_react_timeline_side_panel","issues_react_ui_feedback","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","memex_roadmap_drag_style","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","pr_sfv_new_diff_fetch","prs_checks_react","prs_conversations_react","prs_css_anchor_positioning","prs_live_updates_issue_comments","prs_load_all_alerts","prs_review_summaries_in_side_panel","prx_files","pull_request_commit_checks_dialog","pull_request_files_accurate_size_estimates","pull_request_files_virtualization","pull_request_inbox_new_sections","pull_request_merge_status_button","pull_request_virtualization_preload_diffs","react_blob_overlay","repository_suggester_elastic_search","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","team_review_requested_by_user_filter","ui_skip_on_anchor_click","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly"],"login":"wliqi495-create","copilotApiOverrideUrl":"https://api.individual.githubcopilot.com"}</script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/wp-runtime-f2375f2858a8f670.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/fetch-utilities-3140609b5732710f.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/28839-7adfdde5afeb1a03.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/85924-ac5602ef611dc506.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/34646-4c7883eb242d5210.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-a12df3cf35884818.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/runtime-helpers-cb4dfbc9d23f30be.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/2966-d68f2b4558d86113.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/96232-540ff5f81016a9ca.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/41013-647932573fc130af.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/51210-45dfb7dd106f6b96.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/64247-73a9861fe185671f.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/81683-382ccc88e034ea1d.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/9338-f6bee5a8d66d930f.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/46740-5a373320e5ef9c01.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/44156-0c3701a71b4871b0.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-7e2efb5d06a50116.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-71abc46054aa4443.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/react-core-dc129291382ca774.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/react-lib-1353f2cef82bcdc0.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/7053-abde2598303b4d18.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/58889-5b136bc717e57a8b.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/79039-69acf717ffc901a4.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/61110-073153e0413daf3a.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/2887-91b9c645d570616a.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/26533-f22c29ae5e9b1ed2.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/86483-c3a819d46503a3da.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/28153-07841e439e3d3315.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/60481-24b13ea726837f7b.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/46287-52fba49c502ea0a1.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/2498-f0375ed070e22e54.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/61025-ca31d4d2add162fd.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/89627-40275597692dc855.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/79087-4f706db8aa2ec0fb.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/49029-42bd0899fca05960.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/99328-a2c6b180d25cb160.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-26bee9c830498018.js" defer="defer"></script>
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.b6c10f6e5f50efcc.module.css" />
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/4244-97fb660009234136.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-global-442a23b66c306470.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/39373-075d662e5ab13538.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-ad3e18f5935a3ed8.js" defer="defer"></script>
|
||
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/primer-react-d780ccd8bfefe36d.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/octicons-react-60e727d7a1b6f52c.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/89960-0f2c0208f2eecb05.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/37869-3811d0fa923a406d.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/68751-830b37204cdf7847.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/7463-30e02617b93e1c07.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/15272-0fca7ba11b03440f.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/32769-abc9916acf2cd4f1.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/36505-9798da05fe2143ec.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/46148-264173ef30e2e838.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/57712-388dc37bff9f8f50.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/17894-2afb5bc3ca80a4c8.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/43947-4683606b94bf0af7.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/63991-c853745fe5d3bd34.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/59852-97bc91109de2e728.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/3624-33d8a89da3cddcdd.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/66231-3d17065a46652f81.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/71001-32921d1722b7c80a.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/33684-94b2e6793abc642f.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/18222-8b85d637a2041072.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/96755-770967b1236437cd.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/4916-4e49892295ec7c34.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/75674-a7ae2780f94a26be.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/75601-d9eafa1fbbb5172b.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/8987-4e05ef04784744e7.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/38184-483d4f1cf541ca1d.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/67595-7e347a601be3c3f6.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/41110-3c9a04031ce8fec8.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/16091-64780972daa64980.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/32639-3f193957a08824bd.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/17626-cb0c50b9ab0f90aa.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/66519-27db8d6ec9c71a98.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/50110-0f4d902364ca3e5b.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/26497-709cfe41afd2a887.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/49135-5f8ca97edb189a81.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/71920-723318c28b0f8f3a.js" defer="defer"></script>
|
||
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-3e3500ec210f6804.js" defer="defer"></script>
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.1836171ca9039b48.module.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.f91a273ef224304a.module.css" />
|
||
|
||
|
||
<title>sq/scripts/update_video.py at main · cxddgtb/sq</title>
|
||
|
||
|
||
|
||
<meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
|
||
<meta name="route-controller" content="blob" data-turbo-transient>
|
||
<meta name="route-action" content="show" data-turbo-transient>
|
||
<meta name="fetch-nonce" content="v2:75befae1-28d5-62dc-95cc-be36b5c8ca2f">
|
||
|
||
|
||
<meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">
|
||
|
||
|
||
<meta name="request-id" content="32E7:284553:16F3025:1A61F26:69EE0706" data-turbo-transient="true" /><meta name="html-safe-nonce" content="4b15b390d0d856cae49824895c9edb3a69d4b42801c5c895d45f2a4285725520" data-turbo-transient="true" /><meta name="visitor-payload" content="eyJyZWZlcnJlciI6Imh0dHBzOi8vZ2l0aHViLmNvbS9jeGRkZ3RiL3NxL3RyZWUvbWFpbi9zY3JpcHRzIiwicmVxdWVzdF9pZCI6IjMyRTc6Mjg0NTUzOjE2RjMwMjU6MUE2MUYyNjo2OUVFMDcwNiIsInZpc2l0b3JfaWQiOiIxODA4MzcxMTAwOTg4NjE1OTQ3IiwicmVnaW9uX2VkZ2UiOiJzb3V0aGVhc3Rhc2lhIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9" data-turbo-transient="true" /><meta name="visitor-hmac" content="782c9efffdc563e4687c332cf618649b24092a3a7f3de47763f51119eaafa0e2" data-turbo-transient="true" />
|
||
|
||
|
||
<meta name="hovercard-subject-tag" content="repository:1210595636" data-turbo-transient>
|
||
|
||
|
||
<meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
|
||
|
||
|
||
<meta name="selected-link" value="repo_source" data-turbo-transient>
|
||
<link rel="assets" href="https://github.githubassets.com/">
|
||
|
||
<meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">
|
||
|
||
<meta name="octolytics-url" content="https://collector.github.com/github/collect" /><meta name="octolytics-actor-id" content="256796516" /><meta name="octolytics-actor-login" content="wliqi495-create" /><meta name="octolytics-actor-hash" content="13f1b4774e373f2343670b6a41b5366c068a14d0faa5649216c105953a57a2ea" />
|
||
|
||
|
||
|
||
|
||
|
||
<meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-turbo-transient="true" />
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta name="user-login" content="wliqi495-create">
|
||
|
||
<link rel="sudo-modal" href="/sessions/sudo_modal">
|
||
|
||
<meta name="viewport" content="width=device-width">
|
||
|
||
|
||
|
||
<meta name="description" content="Contribute to cxddgtb/sq development by creating an account on GitHub.">
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
|
||
|
||
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
|
||
<meta property="fb:app_id" content="1401488693436528">
|
||
<meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/cxddgtb/sq/blob/main/scripts/update_video.py" />
|
||
|
||
<meta name="twitter:image" content="https://opengraph.githubassets.com/d629a39dd6347ae40f9b073cf92929fef5009b428788eee73b603667e85927de/cxddgtb/sq" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="sq/scripts/update_video.py at main · cxddgtb/sq" /><meta name="twitter:description" content="Contribute to cxddgtb/sq development by creating an account on GitHub." />
|
||
<meta property="og:image" content="https://opengraph.githubassets.com/d629a39dd6347ae40f9b073cf92929fef5009b428788eee73b603667e85927de/cxddgtb/sq" /><meta property="og:image:alt" content="Contribute to cxddgtb/sq development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="sq/scripts/update_video.py at main · cxddgtb/sq" /><meta property="og:url" content="https://github.com/cxddgtb/sq/blob/main/scripts/update_video.py" /><meta property="og:description" content="Contribute to cxddgtb/sq development by creating an account on GitHub." />
|
||
|
||
|
||
|
||
<link rel="shared-web-socket" href="wss://alive.github.com/_sockets/u/256796516/ws?session=eyJ2IjoiVjMiLCJ1IjoyNTY3OTY1MTYsInMiOjIwMTQ4MzIzNTYsImMiOjEyMDAxOTAxNTMsInQiOjE3NzcyMDcwNDd9--4415e829ab2a70c788294702c6a3a329374bc9d90707c7316db24ee13d965f4e" data-refresh-url="/_alive" data-session-id="c26a8bacca4365d8dee2052b6bd186e353585c895196b1feb330cca63729a73f">
|
||
<link rel="shared-web-socket-src" href="/assets-cdn/worker/socket-worker-4b32331dd8a8013e.js">
|
||
|
||
<link rel="service-worker-src" href="/assets-cdn/worker/service-worker-08cbca96d67917b4.js?current_user=wliqi495-create&errors_url=https%3A%2F%2Fapi.github.com%2F_private%2Fbrowser%2Ferrors&release=db04a125e39757b8eb6685256d1ec903cd92c587&actor_id=256796516&is_staff=false&analytics_collector_url=https%3A%2F%2Fcollector.github.com%2Fgithub%2Fcollect">
|
||
|
||
<meta name="hostname" content="github.com">
|
||
|
||
|
||
<meta name="keyboard-shortcuts-preference" content="all">
|
||
<meta name="hovercards-preference" content="true">
|
||
<meta name="announcement-preference-hovercard" content="true">
|
||
|
||
<meta name="expected-hostname" content="github.com">
|
||
|
||
|
||
<meta http-equiv="x-pjax-version" content="a62126897d0955070af0575283dc63cf5c00238f56af2b0b4bbed7e926fe4f9d" data-turbo-track="reload">
|
||
<meta http-equiv="x-pjax-csp-version" content="568c098497d98702bac1642a2a853732a047a6ced28eabd3e15d50041a890235" data-turbo-track="reload">
|
||
<meta http-equiv="x-pjax-css-version" content="87721d1504a187fb3fcbfa6e98526d058edf6fa1163680dbb36bf70525df6ac4" data-turbo-track="reload">
|
||
<meta http-equiv="x-pjax-js-version" content="f99de4a97927476b960e57b3bca31667cb46b693e817d1f29e13b3cc8dcfb3d4" data-turbo-track="reload">
|
||
|
||
<meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">
|
||
|
||
<meta name="turbo-cache-control" content="no-cache" data-turbo-transient>
|
||
|
||
<meta data-hydrostats="publish">
|
||
|
||
<meta name="go-import" content="github.com/cxddgtb/sq git https://github.com/cxddgtb/sq.git">
|
||
|
||
<meta name="octolytics-dimension-user_id" content="78706744" /><meta name="octolytics-dimension-user_login" content="cxddgtb" /><meta name="octolytics-dimension-repository_id" content="1210595636" /><meta name="octolytics-dimension-repository_nwo" content="cxddgtb/sq" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1210595636" /><meta name="octolytics-dimension-repository_network_root_nwo" content="cxddgtb/sq" />
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta name="turbo-body-classes" content="logged-in env-production page-responsive">
|
||
<meta name="disable-turbo" content="false">
|
||
|
||
|
||
<meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
|
||
|
||
<meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
|
||
|
||
<meta name="release" content="db04a125e39757b8eb6685256d1ec903cd92c587">
|
||
<meta name="ui-target" content="full">
|
||
|
||
<link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
|
||
<link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
|
||
<link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">
|
||
|
||
<meta name="theme-color" content="#1e2327">
|
||
<meta name="color-scheme" content="light dark" />
|
||
|
||
|
||
<link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
|
||
|
||
</head>
|
||
|
||
<body class="logged-in env-production page-responsive" style="word-wrap: break-word;" >
|
||
<div data-turbo-body class="logged-in env-production page-responsive" style="word-wrap: break-word;" >
|
||
<div id="__primerPortalRoot__" role="region" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
|
||
|
||
|
||
<div class="position-relative header-wrapper js-header-wrapper ">
|
||
<a href="#start-of-content" data-skip-target-assigned="false" class="tmp-p-3 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>
|
||
|
||
<span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
|
||
<span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
|
||
</span>
|
||
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.1836171ca9039b48.module.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.67978b685ca52cce.module.css" />
|
||
|
||
<react-partial
|
||
partial-name="keyboard-shortcuts-dialog"
|
||
data-ssr="false"
|
||
data-attempted-ssr="false"
|
||
data-react-profiling="false"
|
||
>
|
||
|
||
<script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
|
||
<div data-target="react-partial.reactRoot"></div>
|
||
</react-partial>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.1836171ca9039b48.module.css" />
|
||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.eb1c7e1375fb0b61.module.css" />
|
||
|
||
<react-partial
|
||
partial-name="global-nav-bar"
|
||
data-ssr="true"
|
||
data-attempted-ssr="true"
|
||
data-react-profiling="false"
|
||
>
|
||
|
||
<script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"user","label":"cxddgtb","is_root":false,"href":"/cxddgtb"},{"crumb_type":"repository","label":"sq","is_root":false,"href":"/cxddgtb/sq"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/cxddgtb/sq","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/cxddgtb/sq/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"issues-react","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/cxddgtb/sq/pulls","selectedLinks":["repo_pulls","checks"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"agents","icon":"agent","label":"Agents","href":"/cxddgtb/sq/agents?author=wliqi495-create","selectedLinks":["repo_agents","repo_agents_task"],"popoverTarget":false,"commandId":"repositories:go-to-agents","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/cxddgtb/sq/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"projects","icon":"table","label":"Projects","href":"/cxddgtb/sq/projects","selectedLinks":["repo_projects","new_repo_project","repo_project"],"popoverTarget":false,"commandId":"repositories:go-to-projects","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/cxddgtb/sq/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/cxddgtb/sq/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":"eyJjIjoicmVwbzoxMjEwNTk1NjM2OnVzZXI6MjU2Nzk2NTE2OnNldHRpbmdzIiwidCI6MTc3NzIwNzA0Nn0=--0a7e5559fdffc0e435bc3e79f82394028acfcf43e74a4ee80eabee79209d49ed","selectedLink":null,"currentPath":"/cxddgtb/sq/blob/main/scripts/update_video.py"},"userMenu":{"owner":{"login":"wliqi495-create","name":null,"avatarUrl":"https://avatars.githubusercontent.com/u/256796516?v=4"}},"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"none","websocketChannel":"eyJjIjoibm90aWZpY2F0aW9uLWNoYW5nZWQ6MjU2Nzk2NTE2IiwidCI6MTc3NzIwNzA0Nn0=--a840bde1cdbe20bcffe1f3daac613e77846712b7c08f314d33161afce8b493a5","fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":true},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"show":true,"href":"/repos"},"copilot":{"show":true,"showAgentsButton":false,"copilotChatUrl":"/github-copilot/chat?skip_anchor=true","copilotApiUrl":"https://api.individual.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:cxddgtb/sq","current_repo_name":"sq","current_repo_nwo":"cxddgtb/sq","user_id":"cxddgtb"}},"enterpriseBanner":{"show":false},"globalTransactionalMessage":null,"payloadsUrl":"/_global-navigation/payloads.json?current_repo_nwo=cxddgtb%2Fsq\u0026repository=sq\u0026return_to=https%3A%2F%2Fgithub.com%2Fcxddgtb%2Fsq%2Fblob%2Fmain%2Fscripts%2Fupdate_video.py\u0026user_id=cxddgtb"}}</script>
|
||
<div data-target="react-partial.reactRoot"><link rel="preload" as="image" href="https://avatars.githubusercontent.com/u/256796516?v=4&size=64"/><header role="banner" aria-label="Global Navigation Menu" class="GlobalNav styles-module__appHeader__YzYWk prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-left" class="styles-module__left__Fylw7 styles-module__withLocalNavigation__rjTJ_ prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><div data-loading-wrapper="true"><button data-component="IconButton" type="button" aria-haspopup="dialog" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_apb_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-three-bars" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"></path></svg></button></div><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="_R_apb_">Open menu</span><a data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderHome__nkA_U prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_cpb_" href="/" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true"><span id="_R_cpb_">Homepage <span class="prc-src-InternalVisuallyHidden-2YaI6">(<!-- -->g then d<!-- -->)</span></span><span class="prc-TooltipV2-KeybindingHintContainer-Ymj-3 prc-TooltipV2-HasTextBefore-fdOXj" aria-hidden="true"><kbd class="prc-KeybindingHint-KeybindingHint-qpYIs prc-Text-Text-9mHv3" data-testid="keybinding-hint"><span class="prc-components-Chord-DdhWN prc-components-ChordOnEmphasis-O-4BS prc-components-ChordSmall-c-P-x prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">g</span><span aria-hidden="true">G</span></span><span class="prc-src-InternalVisuallyHidden-2YaI6">then</span> <span class="prc-components-Chord-DdhWN prc-components-ChordOnEmphasis-O-4BS prc-components-ChordSmall-c-P-x prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">d</span><span aria-hidden="true">D</span></span></kbd></span></span><div class="d-none"></div></div><div data-testid="top-nav-center" class="styles-module__center__R3QRv styles-module__withLocalNavigation__rjTJ_ prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="styles-module__contextRegion__VbSp2 prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" href="/cxddgtb" data-discover="true"><span class="">cxddgtb</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" href="/cxddgtb/sq" data-discover="true"><span class="styles-module__contextCrumbLast__tI2e3">sq</span></a></li></ol></nav><div class="Search-module__searchButtonGroup__aetw5 prc-ButtonGroup-ButtonGroup-vFUrY"><div><button type="button" aria-label="Search or jump to…" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ Search-module__searchButton__aiE0a" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="Search-module__placeholder__p9hbG Search-module__text__veSYi Search-module__value__TFoak">Type <kbd class="Search-module__kbd__WCskr">/</kbd> to search</span></span></span></button></div><div></div></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ Search-module__smallSearchButton___8Gvn prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_2l9b_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true"><span id="_R_2l9b_">Search or jump to…<span class="prc-src-InternalVisuallyHidden-2YaI6">(<!-- -->forward slash<!-- -->)</span></span><span class="prc-TooltipV2-KeybindingHintContainer-Ymj-3 prc-TooltipV2-HasTextBefore-fdOXj" aria-hidden="true"><kbd class="prc-KeybindingHint-KeybindingHint-qpYIs prc-Text-Text-9mHv3" data-testid="keybinding-hint"><span class="prc-components-Chord-DdhWN prc-components-ChordOnEmphasis-O-4BS prc-components-ChordSmall-c-P-x prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">forward slash</span><span aria-hidden="true">/</span></span></kbd></span></span><div class="d-none"></div><div class="d-none"></div></div><div data-testid="top-nav-right" class="styles-module__right__mlBQg styles-module__withLocalNavigation__rjTJ_ prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"><div data-testid="top-bar-actions" class="prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="none"><div class="hide-sm hide-md"><div class="CopilotItems-module__Wrapper__BFG9q"><div class="prc-ButtonGroup-ButtonGroup-vFUrY"><div><a data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_akjpb_" href="/copilot" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="_R_akjpb_">Chat with Copilot</span></div><div><div class="d-none"></div><button type="button" aria-label="Open Copilot…" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ CopilotItems-module__CopilotMenu__DVdfE" data-loading="false" data-size="medium" data-variant="invisible" id="_R_kkjpb_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></div></div></div><div class="styles-module__itemDivider__nunbs hide-sm hide-md"></div><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk GlobalCreateMenu-module__actionMenuButton__Hj_iB" data-loading="false" data-size="medium" data-variant="invisible" aria-labelledby="global-create-menu-tooltip-_R_1jpb_" id="_R_5jpb_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-plus" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.75 2a.75.75 0 0 1 .75.75V7h4.25a.75.75 0 0 1 0 1.5H8.5v4.25a.75.75 0 0 1-1.5 0V8.5H2.75a.75.75 0 0 1 0-1.5H7V2.75A.75.75 0 0 1 7.75 2Z"></path></svg></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="global-create-menu-tooltip-_R_1jpb_">Create new...</span><div class="hide-sm hide-md prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="none"><a data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_m3pb_" href="/issues" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="_R_m3pb_">Issues</span><a data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_q3pb_" href="/pulls" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="_R_q3pb_">Pull requests</span><a data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_u3pb_" href="/repos" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-repo" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="_R_u3pb_">Repositories</span><div class="d-none"></div></div></div><a data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk styles-module__appHeaderButton__axedQ prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_lpb_" href="/notifications" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-inbox" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.8 2.06A1.75 1.75 0 0 1 4.41 1h7.18c.7 0 1.333.417 1.61 1.06l2.74 6.395c.04.093.06.194.06.295v4.5A1.75 1.75 0 0 1 14.25 15H1.75A1.75 1.75 0 0 1 0 13.25v-4.5c0-.101.02-.202.06-.295Zm1.61.44a.25.25 0 0 0-.23.152L1.887 8H4.75a.75.75 0 0 1 .6.3L6.625 10h2.75l1.275-1.7a.75.75 0 0 1 .6-.3h2.863L11.82 2.652a.25.25 0 0 0-.23-.152Zm10.09 7h-2.875l-1.275 1.7a.75.75 0 0 1-.6.3h-3.5a.75.75 0 0 1-.6-.3L4.375 9.5H1.5v3.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Z"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true"><span id="_R_lpb_">You have no unread notifications<span class="prc-src-InternalVisuallyHidden-2YaI6">(<!-- -->g then n<!-- -->)</span></span><span class="prc-TooltipV2-KeybindingHintContainer-Ymj-3 prc-TooltipV2-HasTextBefore-fdOXj" aria-hidden="true"><kbd class="prc-KeybindingHint-KeybindingHint-qpYIs prc-Text-Text-9mHv3" data-testid="keybinding-hint"><span class="prc-components-Chord-DdhWN prc-components-ChordOnEmphasis-O-4BS prc-components-ChordSmall-c-P-x prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">g</span><span aria-hidden="true">G</span></span><span class="prc-src-InternalVisuallyHidden-2YaI6">then</span> <span class="prc-components-Chord-DdhWN prc-components-ChordOnEmphasis-O-4BS prc-components-ChordSmall-c-P-x prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">n</span><span aria-hidden="true">N</span></span></kbd></span></span><div class="d-none"></div><div class="GlobalNavUserMenu-module__container__NaVIt"><button data-component="IconButton" type="button" aria-haspopup="menu" data-login="wliqi495-create" class="prc-Button-ButtonBase-9n-Xk GlobalNavUserMenu-module__anchor__Dcej6 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_2npb_"><img data-component="Avatar" class="prc-Avatar-Avatar-0xaUi" alt="User avatar" width="32" height="32" style="--avatarSize-regular:32px" src="https://avatars.githubusercontent.com/u/256796516?v=4&size=64" data-testid="github-avatar"/></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" aria-hidden="true" id="_R_2npb_">Open user navigation menu</span></div></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj LocalNavigation-module__LocalNavigation__b0Xc0" aria-label="Repository" data-variant="inset" data-overflow-measured="false"><ul class="prc-components-UnderlineItemList-xKlKC" role="list"><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq" aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/issues" data-tab-item="issues" data-react-nav="issues-react" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/pulls" data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/agents?author=wliqi495-create" data-tab-item="agents" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-agent" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M14.5 8.9v-.052A2.956 2.956 0 0 0 11.542 5.9a.815.815 0 0 1-.751-.501l-.145-.348A3.496 3.496 0 0 0 7.421 2.9h-.206a3.754 3.754 0 0 0-3.736 4.118l.011.121a.822.822 0 0 1-.619.879A1.81 1.81 0 0 0 1.5 9.773v.14c0 1.097.89 1.987 1.987 1.987H4.5a.75.75 0 0 1 0 1.5H3.487A3.487 3.487 0 0 1 0 9.913v-.14C0 8.449.785 7.274 1.963 6.75A5.253 5.253 0 0 1 7.215 1.4h.206a4.992 4.992 0 0 1 4.586 3.024A4.455 4.455 0 0 1 16 8.848V8.9a.75.75 0 0 1-1.5 0Z"></path><path d="m8.38 7.67 2.25 2.25a.749.749 0 0 1 0 1.061L8.38 13.23a.749.749 0 1 1-1.06-1.06l1.719-1.72L7.32 8.731A.75.75 0 0 1 8.38 7.67ZM15 13.45h-3a.75.75 0 0 1 0-1.5h3a.75.75 0 0 1 0 1.5Z"></path></svg></span><span data-component="text" data-content="Agents">Agents</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/actions" data-tab-item="actions" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/projects" data-tab-item="projects" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-table" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path></svg></span><span data-component="text" data-content="Projects">Projects</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/security" data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a href="/cxddgtb/sq/pulse" data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul></nav><div class="d-none"></div></header><script type="application/json" id="__PRIMER_DATA__R_0___">{"resolvedServerColorMode":"day"}</script></div>
|
||
</react-partial>
|
||
|
||
|
||
<div class="js-global-bar" style="display: none;">
|
||
|
||
|
||
|
||
<qbsearch-input class="search-input" data-scope="repo:cxddgtb/sq" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="WctoM7nC7kG2E9WIpVxY201CYdNLtNbuohC6JgFDKApbJLY1296UuqwYurAOENoEMnsQLo824qOYDZ4XADUkvQ" data-max-custom-scopes="10" data-header-redesign-enabled="true" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="cxddgtb/sq" data-current-org="" data-current-owner="cxddgtb" data-logged-in="true" data-copilot-chat-enabled="true" data-nl-search-enabled="false">
|
||
<div
|
||
class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center height-auto color-bg-transparent border-0 color-fg-subtle mx-0"
|
||
data-action="click:qbsearch-input#searchInputContainerClicked"
|
||
>
|
||
|
||
<input type="hidden" name="type" class="js-site-search-type-field">
|
||
|
||
|
||
<div class="Overlay--hidden " data-modal-dialog-overlay>
|
||
<modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-medium Overlay--height-auto">
|
||
<h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1>
|
||
<div class="Overlay-body Overlay-body--paddingNone">
|
||
|
||
<div data-view-component="true"> <div class="search-suggestions position-absolute width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container"
|
||
style="border-radius: 12px;"
|
||
data-target="qbsearch-input.queryBuilderContainer"
|
||
hidden
|
||
>
|
||
<!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get">
|
||
<query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder">
|
||
<div class="FormControl FormControl--fullWidth">
|
||
<label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only">
|
||
Search
|
||
</label>
|
||
<div
|
||
class="QueryBuilder-StyledInput width-fit "
|
||
data-target="query-builder.styledInput"
|
||
>
|
||
<span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual">
|
||
<path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path>
|
||
</svg>
|
||
</span>
|
||
<div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer">
|
||
<div
|
||
aria-hidden="true"
|
||
class="QueryBuilder-StyledInputContent"
|
||
data-target="query-builder.styledInputContent"
|
||
></div>
|
||
<div class="QueryBuilder-InputWrapper">
|
||
<div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div>
|
||
<input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-3130f52f-8f53-46c4-b033-422a575024d7" data-target="query-builder.input" data-action="
|
||
input:query-builder#inputChange
|
||
blur:query-builder#inputBlur
|
||
keydown:query-builder#inputKeydown
|
||
focus:query-builder#inputFocus
|
||
" data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" />
|
||
</div>
|
||
</div>
|
||
<span data-target="query-builder.clearButton" hidden>
|
||
<span class="sr-only" id="query-builder-test-clear">Clear</span>
|
||
<button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-action="
|
||
click:query-builder#clear
|
||
focus:query-builder#clearButtonFocus
|
||
blur:query-builder#clearButtonBlur
|
||
" variant="small" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 tmp-mr-1 px-2 tmp-px-2 py-0 tmp-py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual">
|
||
<path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path>
|
||
</svg>
|
||
</button>
|
||
|
||
</span>
|
||
</div>
|
||
<template id="search-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search">
|
||
<path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="code-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
|
||
<path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="file-code-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code">
|
||
<path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="history-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history">
|
||
<path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="repo-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo">
|
||
<path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="bookmark-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark">
|
||
<path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="plus-circle-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle">
|
||
<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="circle-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill">
|
||
<path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="trash-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash">
|
||
<path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="team-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people">
|
||
<path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="project-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project">
|
||
<path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="pencil-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil">
|
||
<path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="copilot-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot">
|
||
<path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="copilot-error-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error">
|
||
<path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="workflow-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow">
|
||
<path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="book-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book">
|
||
<path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="code-review-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review">
|
||
<path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="codespaces-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces">
|
||
<path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="comment-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment">
|
||
<path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="comment-discussion-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion">
|
||
<path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="organization-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization">
|
||
<path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="rocket-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket">
|
||
<path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="shield-check-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check">
|
||
<path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="heart-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart">
|
||
<path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="server-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server">
|
||
<path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="globe-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe">
|
||
<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="issue-opened-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened">
|
||
<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="device-mobile-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile">
|
||
<path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="package-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package">
|
||
<path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="credit-card-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card">
|
||
<path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="play-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
|
||
<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="gift-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift">
|
||
<path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="code-square-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square">
|
||
<path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<template id="device-desktop-icon">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop">
|
||
<path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path>
|
||
</svg>
|
||
</template>
|
||
|
||
<div class="position-relative">
|
||
<ul
|
||
role="listbox"
|
||
class="ActionListWrap QueryBuilder-ListWrap"
|
||
aria-label="Suggestions"
|
||
data-action="
|
||
combobox-commit:query-builder#comboboxCommit
|
||
mousedown:query-builder#resultsMousedown
|
||
"
|
||
data-target="query-builder.resultsList"
|
||
data-persist-list=false
|
||
id="query-builder-test-results"
|
||
tabindex="-1"
|
||
></ul>
|
||
|
||
</div>
|
||
<div class="FormControl-inlineValidation" id="validation-3130f52f-8f53-46c4-b033-422a575024d7" hidden="hidden">
|
||
<span class="FormControl-inlineValidation--visual">
|
||
<svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill">
|
||
<path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path>
|
||
</svg>
|
||
</span>
|
||
<span></span>
|
||
</div> </div>
|
||
<div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div>
|
||
</query-builder></form>
|
||
<div class="d-flex flex-row color-fg-muted tmp-px-3 text-small color-bg-default search-feedback-prompt">
|
||
<a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2 tmp-ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div>
|
||
<button data-action="click:qbsearch-input#showFeedbackDialog" type="button" data-view-component="true" class="Button--link Button--medium Button color-fg-accent text-normal ml-2 tmp-ml-2"> <span class="Button-content">
|
||
<span class="Button-label">Give feedback</span>
|
||
</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</modal-dialog></div>
|
||
</div>
|
||
<div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div>
|
||
<div class="color-fg-default">
|
||
|
||
<dialog-helper>
|
||
<dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll">
|
||
<div data-view-component="true" class="Overlay-header">
|
||
<div class="Overlay-headerContentWrap">
|
||
<div class="Overlay-titleWrap">
|
||
<h1 class="Overlay-title " id="feedback-dialog-title">
|
||
Provide feedback
|
||
</h1>
|
||
|
||
</div>
|
||
<div class="Overlay-actionWrap">
|
||
<button data-close-dialog-id="feedback-dialog" aria-label="Close" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
|
||
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg></button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<scrollable-region data-labelled-by="feedback-dialog-title">
|
||
<div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="HsSOZtwiIDbQ563UPFCIjOvewICm45uh3PbszkicqUo0s4bTkRUD0LfKRygDQ4dpcHHlClTQsrF1WKyqJdCD0Q" />
|
||
<p>We read every piece of feedback, and take your input very seriously.</p>
|
||
<textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea>
|
||
<input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox">
|
||
<label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label>
|
||
</form></div>
|
||
</scrollable-region>
|
||
<div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel
|
||
</button>
|
||
<button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback
|
||
</button>
|
||
</div>
|
||
</dialog></dialog-helper>
|
||
|
||
<custom-scopes data-target="qbsearch-input.customScopesManager">
|
||
|
||
<dialog-helper>
|
||
<dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll">
|
||
<div data-view-component="true" class="Overlay-header Overlay-header--divided">
|
||
<div class="Overlay-headerContentWrap">
|
||
<div class="Overlay-titleWrap">
|
||
<h1 class="Overlay-title " id="custom-scopes-dialog-title">
|
||
Saved searches
|
||
</h1>
|
||
<h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2>
|
||
</div>
|
||
<div class="Overlay-actionWrap">
|
||
<button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
|
||
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg></button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<scrollable-region data-labelled-by="custom-scopes-dialog-title">
|
||
<div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div>
|
||
|
||
<div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm">
|
||
<!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="z-wpBEEe3XxsZbgHdr1ac6KX0roC1VXGWkff-RB6pDcifszmwO9S5Lb7HFak3he5I1mvjM9r5bbOIdqc4ll5BA" />
|
||
<div data-target="custom-scopes.customScopesModalDialogFlash"></div>
|
||
|
||
<input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField">
|
||
|
||
<div class="form-group">
|
||
<label for="custom_scope_name">Name</label>
|
||
<auto-check src="/search/custom_scopes/check_name" required>
|
||
<input
|
||
type="text"
|
||
name="custom_scope_name"
|
||
id="custom_scope_name"
|
||
data-target="custom-scopes.customScopesNameField"
|
||
class="form-control"
|
||
autocomplete="off"
|
||
placeholder="github-ruby"
|
||
required
|
||
maxlength="50">
|
||
<input type="hidden" value="fsdnpvxy0pIakvojPV9pf0H8P2MrGRbE-hRkgUBfhuDOEGWAjQgeBjy9KuW4bFCQW9I2lXEl5vQkttkIpoUMkA" data-csrf="true" />
|
||
</auto-check>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="custom_scope_query">Query</label>
|
||
<input
|
||
type="text"
|
||
name="custom_scope_query"
|
||
id="custom_scope_query"
|
||
data-target="custom-scopes.customScopesQueryField"
|
||
class="form-control"
|
||
autocomplete="off"
|
||
placeholder="(repo:mona/a OR repo:mona/b) AND lang:python"
|
||
required
|
||
maxlength="500">
|
||
</div>
|
||
|
||
<p class="text-small color-fg-muted">
|
||
To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>.
|
||
</p>
|
||
</form> </div>
|
||
|
||
<div data-target="custom-scopes.manageCustomScopesForm">
|
||
<div data-target="custom-scopes.list"></div>
|
||
</div>
|
||
|
||
</div>
|
||
</scrollable-region>
|
||
<div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel
|
||
</button>
|
||
<button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search
|
||
</button>
|
||
</div>
|
||
</dialog></dialog-helper>
|
||
</custom-scopes>
|
||
</div>
|
||
</qbsearch-input> <input type="hidden" value="8fmbmiCXwIYlnUMMXJ6zpz4I3u_W7OwrXvxkV4zD8G0m4ztSCFvxZzrujsF36HpIZlRSASBg84_asiAPH-OBKQ" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" />
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
|
||
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
|
||
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
|
||
</svg>
|
||
<span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
|
||
<span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
|
||
<span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
|
||
|
||
<button id="icon-button-f481cd99-6484-4c2c-b9ed-d1dbe47768aa" aria-labelledby="tooltip-9feedd56-6118-4e52-ab1d-322648fcae6e" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
|
||
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg>
|
||
</button><tool-tip id="tooltip-9feedd56-6118-4e52-ab1d-322648fcae6e" for="icon-button-f481cd99-6484-4c2c-b9ed-d1dbe47768aa" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div id="start-of-content" class="show-on-focus"></div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="js-flash-container" class="flash-container" data-turbo-replace>
|
||
|
||
|
||
|
||
|
||
<template class="js-flash-template">
|
||
|
||
<div class="flash flash-full {{ className }}">
|
||
<div >
|
||
<button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
|
||
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg>
|
||
</button>
|
||
<div aria-atomic="true" role="alert" class="js-flash-alert">
|
||
|
||
<div>{{ message }}</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</div>
|
||
|
||
|
||
|
||
<notification-shelf-watcher data-base-url="https://github.com/notifications/beta/shelf" data-channel="eyJjIjoibm90aWZpY2F0aW9uLWNoYW5nZWQ6MjU2Nzk2NTE2IiwidCI6MTc3NzIwNzA0N30=--d2174c9bee393498ea74f66cc0739eadee4f569c4762d2da2939f9cd59a5a3ae" data-view-component="true" class="js-socket-channel"></notification-shelf-watcher>
|
||
<div hidden data-initial data-target="notification-shelf-watcher.placeholder"></div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
class="application-main "
|
||
data-commit-hovercards-enabled
|
||
data-discussion-hovercards-enabled
|
||
data-issue-and-pr-hovercards-enabled
|
||
data-project-hovercards-enabled
|
||
>
|
||
<div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
|
||
<main id="js-repo-pjax-container" >
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="repository-container-header" data-turbo-replace hidden ></div>
|
||
|
||
|
||
|
||
<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
|
||
<div id="repo-content-pjax-container" class="repository-content " >
|
||
<a href="https://github.dev/" class="d-none js-github-dev-shortcut" data-hotkey=".,Mod+Alt+.">Open in github.dev</a>
|
||
<a href="https://github.dev/" class="d-none js-github-dev-new-tab-shortcut" data-hotkey="Shift+>" target="_blank" rel="noopener noreferrer">Open in a new github.dev tab</a>
|
||
<a class="d-none" data-hotkey=",,Mod+Alt+," target="_blank" href="/codespaces/new/cxddgtb/sq/tree/main?resume=1">Open in codespace</a>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<react-app
|
||
app-name="code-view"
|
||
initial-path="/cxddgtb/sq/blob/main/scripts/update_video.py"
|
||
style="display: block; min-height: calc(100vh - 64px);"
|
||
data-attempted-ssr="true"
|
||
data-ssr="true"
|
||
data-lazy="false"
|
||
data-alternate="false"
|
||
data-data-router-enabled="true"
|
||
data-react-profiling="false"
|
||
>
|
||
|
||
<script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":null},"issueTemplate":null,"discussionTemplate":null,"richText":null,"richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"HARDCODED","kind":"constant","ident_start":332,"ident_end":341,"extent_start":332,"extent_end":1616,"fully_qualified_name":"HARDCODED","ident_utf16":{"start":{"line_number":11,"utf16_col":0},"end":{"line_number":11,"utf16_col":9}},"extent_utf16":{"start":{"line_number":11,"utf16_col":0},"end":{"line_number":28,"utf16_col":1}}},{"name":"KNOWN_SOURCE_JSONS","kind":"constant","ident_start":1697,"ident_end":1715,"extent_start":1697,"extent_end":2312,"fully_qualified_name":"KNOWN_SOURCE_JSONS","ident_utf16":{"start":{"line_number":31,"utf16_col":0},"end":{"line_number":31,"utf16_col":18}},"extent_utf16":{"start":{"line_number":31,"utf16_col":0},"end":{"line_number":39,"utf16_col":1}}},{"name":"NAME_MAP","kind":"constant","ident_start":2350,"ident_end":2358,"extent_start":2350,"extent_end":2517,"fully_qualified_name":"NAME_MAP","ident_utf16":{"start":{"line_number":42,"utf16_col":0},"end":{"line_number":42,"utf16_col":8}},"extent_utf16":{"start":{"line_number":42,"utf16_col":0},"end":{"line_number":46,"utf16_col":1}}},{"name":"discover_apis_from_github_sources","kind":"function","ident_start":2523,"ident_end":2556,"extent_start":2519,"extent_end":4350,"fully_qualified_name":"discover_apis_from_github_sources","ident_utf16":{"start":{"line_number":48,"utf16_col":4},"end":{"line_number":48,"utf16_col":37}},"extent_utf16":{"start":{"line_number":48,"utf16_col":0},"end":{"line_number":79,"utf16_col":21}}},{"name":"TEMPLATE_URL","kind":"constant","ident_start":4423,"ident_end":4435,"extent_start":4423,"extent_end":4512,"fully_qualified_name":"TEMPLATE_URL","ident_utf16":{"start":{"line_number":82,"utf16_col":0},"end":{"line_number":82,"utf16_col":12}},"extent_utf16":{"start":{"line_number":82,"utf16_col":0},"end":{"line_number":82,"utf16_col":89}}},{"name":"load_template","kind":"function","ident_start":4518,"ident_end":4531,"extent_start":4514,"extent_end":5317,"fully_qualified_name":"load_template","ident_utf16":{"start":{"line_number":84,"utf16_col":4},"end":{"line_number":84,"utf16_col":17}},"extent_utf16":{"start":{"line_number":84,"utf16_col":0},"end":{"line_number":102,"utf16_col":15}}},{"name":"test_api","kind":"function","ident_start":5323,"ident_end":5331,"extent_start":5319,"extent_end":6296,"fully_qualified_name":"test_api","ident_utf16":{"start":{"line_number":104,"utf16_col":4},"end":{"line_number":104,"utf16_col":12}},"extent_utf16":{"start":{"line_number":104,"utf16_col":0},"end":{"line_number":125,"utf16_col":20}}},{"name":"data","kind":"constant","ident_start":6483,"ident_end":6487,"extent_start":6483,"extent_end":6505,"fully_qualified_name":"data","ident_utf16":{"start":{"line_number":130,"utf16_col":0},"end":{"line_number":130,"utf16_col":4}},"extent_utf16":{"start":{"line_number":130,"utf16_col":0},"end":{"line_number":130,"utf16_col":22}}},{"name":"github_apis","kind":"constant","ident_start":6506,"ident_end":6517,"extent_start":6506,"extent_end":6555,"fully_qualified_name":"github_apis","ident_utf16":{"start":{"line_number":131,"utf16_col":0},"end":{"line_number":131,"utf16_col":11}},"extent_utf16":{"start":{"line_number":131,"utf16_col":0},"end":{"line_number":131,"utf16_col":49}}},{"name":"candidates_from_txt","kind":"constant","ident_start":6557,"ident_end":6576,"extent_start":6557,"extent_end":6581,"fully_qualified_name":"candidates_from_txt","ident_utf16":{"start":{"line_number":133,"utf16_col":0},"end":{"line_number":133,"utf16_col":19}},"extent_utf16":{"start":{"line_number":133,"utf16_col":0},"end":{"line_number":133,"utf16_col":24}}},{"name":"seen","kind":"constant","ident_start":6868,"ident_end":6872,"extent_start":6868,"extent_end":6880,"fully_qualified_name":"seen","ident_utf16":{"start":{"line_number":139,"utf16_col":0},"end":{"line_number":139,"utf16_col":4}},"extent_utf16":{"start":{"line_number":139,"utf16_col":0},"end":{"line_number":139,"utf16_col":12}}},{"name":"all_candidates","kind":"constant","ident_start":6881,"ident_end":6895,"extent_start":6881,"extent_end":6900,"fully_qualified_name":"all_candidates","ident_utf16":{"start":{"line_number":140,"utf16_col":0},"end":{"line_number":140,"utf16_col":14}},"extent_utf16":{"start":{"line_number":140,"utf16_col":0},"end":{"line_number":140,"utf16_col":19}}},{"name":"working_sites","kind":"constant","ident_start":7219,"ident_end":7232,"extent_start":7219,"extent_end":7237,"fully_qualified_name":"working_sites","ident_utf16":{"start":{"line_number":153,"utf16_col":0},"end":{"line_number":153,"utf16_col":13}},"extent_utf16":{"start":{"line_number":153,"utf16_col":0},"end":{"line_number":153,"utf16_col":18}}},{"name":"index_js_content","kind":"constant","ident_start":8434,"ident_end":8450,"extent_start":8434,"extent_end":8510,"fully_qualified_name":"index_js_content","ident_utf16":{"start":{"line_number":185,"utf16_col":0},"end":{"line_number":185,"utf16_col":16}},"extent_utf16":{"start":{"line_number":185,"utf16_col":0},"end":{"line_number":185,"utf16_col":76}}},{"name":"md5_hash","kind":"constant","ident_start":8647,"ident_end":8655,"extent_start":8647,"extent_end":8715,"fully_qualified_name":"md5_hash","ident_utf16":{"start":{"line_number":191,"utf16_col":0},"end":{"line_number":191,"utf16_col":8}},"extent_utf16":{"start":{"line_number":191,"utf16_col":0},"end":{"line_number":191,"utf16_col":68}}},{"name":"repo","kind":"constant","ident_start":8937,"ident_end":8941,"extent_start":8937,"extent_end":9009,"fully_qualified_name":"repo","ident_utf16":{"start":{"line_number":197,"utf16_col":0},"end":{"line_number":197,"utf16_col":4}},"extent_utf16":{"start":{"line_number":197,"utf16_col":0},"end":{"line_number":197,"utf16_col":52}}},{"name":"branch","kind":"constant","ident_start":9034,"ident_end":9040,"extent_start":9034,"extent_end":9079,"fully_qualified_name":"branch","ident_utf16":{"start":{"line_number":198,"utf16_col":0},"end":{"line_number":198,"utf16_col":6}},"extent_utf16":{"start":{"line_number":198,"utf16_col":0},"end":{"line_number":198,"utf16_col":45}}},{"name":"raw_url","kind":"constant","ident_start":9080,"ident_end":9087,"extent_start":9080,"extent_end":9166,"fully_qualified_name":"raw_url","ident_utf16":{"start":{"line_number":199,"utf16_col":0},"end":{"line_number":199,"utf16_col":7}},"extent_utf16":{"start":{"line_number":199,"utf16_col":0},"end":{"line_number":199,"utf16_col":86}}},{"name":"proxy_url","kind":"constant","ident_start":9167,"ident_end":9176,"extent_start":9167,"extent_end":9211,"fully_qualified_name":"proxy_url","ident_utf16":{"start":{"line_number":200,"utf16_col":0},"end":{"line_number":200,"utf16_col":9}},"extent_utf16":{"start":{"line_number":200,"utf16_col":0},"end":{"line_number":200,"utf16_col":44}}}]}},"codeViewLayoutRoute":{"repo":{"id":1210595636,"defaultBranch":"main","name":"sq","ownerLogin":"cxddgtb","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-04-14T23:10:43.000+08:00","ownerAvatar":"https://avatars.githubusercontent.com/u/78706744?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":{"id":256796516,"login":"wliqi495-create","userEmail":"[email protected]"},"uploadToken":"-mBpoVciL9ZIfgjthLyElMhJBzURV2j8wm84IrrmtLbktc8CQZl2t7p4I-P-h-5DLhwR0m5A2umRQL9ztK2bYA","allShortcutsEnabled":true,"treeExpanded":true,"path":"scripts/update_video.py","symbolsExpanded":true,"refInfo":{"name":"main","listCacheKey":"v0:1776179462.0","canEdit":false,"currentOid":"56836e6e4615eafbb97b67b3d4ebb5436968564c"},"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-378c581dbdb2429c.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-82470c2dd86b326d.js","githubDevUrl":"https://github.dev/"},"codeViewFileTreeLayoutRoute":{"fileTree":{"scripts":{"items":[{"name":"update_video.py","path":"scripts/update_video.py","contentType":"file"}],"totalCount":1},"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"scripts","path":"scripts","contentType":"directory"},{"name":"1","path":"1","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"index.js","path":"index.js","contentType":"file"},{"name":"index.js.md5","path":"index.js.md5","contentType":"file"},{"name":"video.json","path":"video.json","contentType":"file"},{"name":"备份","path":"备份","contentType":"file"}],"totalCount":8}},"fileTreeProcessingTime":29.584236999999998,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1776179462.0","canEdit":true,"refType":"branch","currentOid":"56836e6e4615eafbb97b67b3d4ebb5436968564c","canEditOnDefaultBranch":true,"fileExistsOnDefault":true},"path":"scripts/update_video.py","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/cxddgtb/sq/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":false},"displayName":"update_video.py","displayUrl":"https://github.com/cxddgtb/sq/blob/main/scripts/update_video.py?raw=true","headerInfo":{"blobSize":"9.5 KB","deleteTooltip":"Fork this repository and delete the file","editTooltip":"Fork this repository and edit the file","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"c2ca1fc","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fcxddgtb%2Fsq%2Fblob%2Fmain%2Fscripts%2Fupdate_video.py","isCSV":false,"isRichtext":false,"lineInfo":{"truncatedLoc":"209","truncatedSloc":"189"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Python","languageID":303,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/cxddgtb/sq/blob/main/scripts/update_video.py","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/cxddgtb/sq/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/cxddgtb/sq/raw/refs/heads/main/scripts/update_video.py","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":true,"copilotSpacesEnabled":true,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["import json","import requests","import xml.etree.ElementTree as ET","from xml.etree.ElementTree import ParseError","import os","import re","import hashlib","from datetime import datetime","","# ==================== 配置区(强制中文名 + Google + 必应关键字全网搜索)====================","# 1. 硬编码经典接口 + 真实中文名","HARDCODED = ["," {\"api\": \"https://www.msnii.com/api/xml.php\", \"name\": \"美少女资源\"},"," {\"api\": \"https://www.xrbsp.com/api/xml.php\", \"name\": \"淫水机资源\"},"," {\"api\": \"https://www.gdlsp.com/api/xml.php\", \"name\": \"香奶儿资源\"},"," {\"api\": \"https://www.kxgav.com/api/xml.php\", \"name\": \"白嫖资源\"},"," {\"api\": \"https://www.pgxdy.com/api/xml.php\", \"name\": \"黄AV资源\"},"," {\"api\": \"https://www.52av.one/api/xml.php\", \"name\": \"52AV资源\"},"," {\"api\": \"https://www.avtt.me/api/xml.php\", \"name\": \"AVTT资源\"},"," {\"api\": \"https://www.afasu.com/api/xml.php\", \"name\": \"小湿妹资源\"},"," {\"api\": \"https://apittzy.com/api.php/provide/vod/at/xml\", \"name\": \"探探资源\"},"," {\"api\": \"https://api.xiuseapi.com/api.php/provide/vod/at/xml\", \"name\": \"秀色资源\"},"," {\"api\": \"https://api.apilyzy.com/api.php/provide/vod/\", \"name\": \"*老鸭资源\"},"," {\"api\": \"https://api.kudian70.com/api.php/provide/vod/\", \"name\": \"*酷伦理\"},"," {\"api\": \"https://api.ykapi.net/api.php/provide/vod/\", \"name\": \"*影库资源\"},"," {\"api\": \"https://cj.apiabzy.com/api.php/provide/vod/\", \"name\": \"*爱播资源\"},"," {\"api\": \"https://apidanaizi.com/api.php/provide/vod\", \"name\": \"大奶子资源\"},"," # 如需更多:在 candidates.txt 添加(一行一个 api)","]","","# 2. GitHub 智能搜索源列表(Google + 必应关键字全网预采集)","KNOWN_SOURCE_JSONS = ["," \"https://raw.githubusercontent.com/wwb521/live/refs/heads/main/video.json\","," \"https://raw.githubusercontent.com/Nancy0308/TVbox-interface/main/tvbox-%E7%A6%8F%E5%88%A9.json\","," \"https://raw.githubusercontent.com/lllrrr2/TVBOX-franksun1211/main/fuli.json\","," \"https://raw.githubusercontent.com/shichuanenhui/TvBox/main/jav.json\","," \"https://raw.githubusercontent.com/cluntop/tvbox/main/fun.json\","," \"https://raw.githubusercontent.com/qirenzhidao/tvbox18/main/adult.json\","," \"https://raw.githubusercontent.com/guxiangbin/tvbox2/main/%E8%9C%82%E7%AA%9D%E6%8E%A5%E5%8F%A3.txt\",","]","","# 全局中文名映射(兜底)","NAME_MAP = {"," \"https://www.msnii.com/api/xml.php\": \"美少女资源\","," \"https://www.xrbsp.com/api/xml.php\": \"淫水机资源\","," # 与 HARDCODED 保持一致","}","","def discover_apis_from_github_sources():"," discovered = []"," print(f\"[{datetime.now()}] 开始 Google + 必应关键字全网搜索...\")"," for json_url in KNOWN_SOURCE_JSONS:"," try:"," resp = requests.get(json_url, timeout=20)"," resp.raise_for_status()"," content = resp.text"," sites = []"," if content.strip().startswith('{') or content.strip().startswith('['):"," data = resp.json()"," sites = data.get(\"sites\", []) if isinstance(data, dict) else data if isinstance(data, list) else []"," else:"," for line in content.splitlines():"," api_match = re.search(r'\"api\"\\s*:\\s*\"([^\"]+)\"', line)"," name_match = re.search(r'\"name\"\\s*:\\s*\"([^\"]+)\"', line)"," if api_match:"," api = api_match.group(1).strip()"," name = name_match.group(1).strip() if name_match else None"," sites.append({\"api\": api, \"name\": name})"," for site in sites:"," api = site.get(\"api\") if isinstance(site, dict) else site"," if not isinstance(api, str) or not api:"," continue"," if any(k in api.lower() for k in [\"/xml.php\", \"/vod/xml\", \"/cjapi\", \"api.php/provide/vod\", \"inc/api\"]):"," name = site.get(\"name\") if isinstance(site, dict) else NAME_MAP.get(api)"," discovered.append({\"api\": api.strip(), \"name\": name or \"未知成人源\"})"," print(f\" ✅ 从 {json_url.split('/')[3]}/{json_url.split('/')[-1]} 提取接口\")"," except Exception as e:"," print(f\" ⚠️ 跳过源 {json_url}: {e}\")"," print(f\"[{datetime.now()}] 全网搜索完成,共发现 {len(discovered)} 个潜在接口\")"," return discovered","","# ==================== 模板 \u0026 测试(不变)====================","TEMPLATE_URL = \"https://raw.githubusercontent.com/wwb521/live/refs/heads/main/video.json\"","","def load_template():"," if os.path.exists(\"video.json\"):"," try:"," with open(\"video.json\", \"r\", encoding=\"utf-8\") as f:"," data = json.load(f)"," print(\"✅ 从本地 video.json 加载模板成功\")"," return data"," except json.JSONDecodeError as e:"," print(f\"⚠️ 本地 video.json 损坏 ({e}) → 自动拉取\")"," except Exception as e:"," print(f\"⚠️ 本地异常 ({e}) → 自动拉取\")"," print(\"📥 从官方模板拉取...\")"," resp = requests.get(TEMPLATE_URL, timeout=30)"," resp.raise_for_status()"," data = resp.json()"," with open(\"video.json\", \"w\", encoding=\"utf-8\") as f:"," json.dump(data, f, ensure_ascii=False, indent=2)"," print(\"✅ 已自动修复并保存官方模板\")"," return data","","def test_api(api_url: str) -\u003e bool:"," headers = {\"User-Agent\": \"Mozilla/5.0 (compatible; TVBox-Bot/1.0; +https://github.com/your-repo)\"}"," try:"," resp = requests.get(api_url, headers=headers, timeout=15)"," if resp.status_code != 200:"," return False"," content = resp.text.strip()"," if not content or not content.startswith(\"\u003c\"):"," return False"," try:"," root = ET.fromstring(content.encode(\"utf-8\"))"," if (root.tag == \"rss\" or root.find(\"channel\") is not None or"," root.findall(\".//category\") or root.findall(\".//video\") or root.findall(\".//list\")):"," return True"," except ParseError:"," lower = content.lower()"," if any(k in lower for k in [\"rss\", \"channel\", \"category\", \"video\", \"list\"]):"," return True"," return False"," except Exception as e:"," print(f\"[{datetime.now()}] 测试失败 {api_url}: {e}\")"," return False","","# ==================== 主逻辑 + GitHub raw 直链输出 ====================","print(f\"[{datetime.now()}] 开始每日色情接口更新(强制中文名 + GitHub raw 直链)...\")","","data = load_template()","github_apis = discover_apis_from_github_sources()","","candidates_from_txt = []","if os.path.exists(\"candidates.txt\"):"," with open(\"candidates.txt\", \"r\", encoding=\"utf-8\") as f:"," candidates_from_txt = [line.strip() for line in f if line.strip() and not line.startswith(\"#\")]"," print(f\"从 candidates.txt 读取 {len(candidates_from_txt)} 个额外接口\")","","seen = set()","all_candidates = []","for item in HARDCODED + github_apis:"," api = item[\"api\"]"," if api in seen:"," continue"," seen.add(api)"," all_candidates.append(item)","","for url in candidates_from_txt:"," if url not in seen:"," seen.add(url)"," all_candidates.append({\"api\": url, \"name\": NAME_MAP.get(url) or \"未知成人源\"})","","working_sites = []","for item in data.get(\"sites\", []) + all_candidates:"," api = item.get(\"api\") if isinstance(item, dict) else item"," if not api or api in [s.get(\"api\") for s in working_sites]:"," continue"," name = item.get(\"name\") if isinstance(item, dict) else NAME_MAP.get(api)"," if not name or name.startswith(\"http\"):"," name = NAME_MAP.get(api, api.split(\"/\")[2].replace(\"www.\", \"\").replace(\".com\", \"\"))"," print(f\"测试接口: {api} (名称: {name})\")"," if test_api(api):"," site_dict = {"," \"key\": name[:20],"," \"name\": name,"," \"type\": 0,"," \"api\": api,"," \"searchable\": 1,"," \"quickSearch\": 1,"," \"filterable\": 1"," }"," if isinstance(item, dict):"," site_dict.update({k: v for k, v in item.items() if k not in [\"key\", \"name\", \"api\"]})"," working_sites.append(site_dict)"," print(f\"✅ 可用: {api} → {name}\")","","data[\"sites\"] = working_sites","","# 保存 video.json","with open(\"video.json\", \"w\", encoding=\"utf-8\") as f:"," json.dump(data, f, ensure_ascii=False, indent=2)","print(f\"✅ video.json 已保存!可用接口数量: {len(working_sites)}\")","","# 生成 index.js(CatVod 专用)","index_js_content = f'var config = {json.dumps(data, ensure_ascii=False)};\\n'","with open(\"index.js\", \"w\", encoding=\"utf-8\") as f:"," f.write(index_js_content)","print(\"✅ index.js 已生成\")","","# 生成 index.js.md5","md5_hash = hashlib.md5(index_js_content.encode(\"utf-8\")).hexdigest()","with open(\"index.js.md5\", \"w\", encoding=\"utf-8\") as f:"," f.write(md5_hash)","print(f\"✅ index.js.md5 已生成(MD5: {md5_hash})\")","","# ==================== 输出 GitHub raw 直链(核心升级)===================","repo = os.getenv(\"GITHUB_REPOSITORY\", \"你的用户名/你的仓库名\") # Actions 自动填充","branch = os.getenv(\"GITHUB_REF_NAME\", \"main\")","raw_url = f\"https://raw.githubusercontent.com/{repo}/refs/heads/{branch}/index.js.md5\"","proxy_url = f\"https://ghproxy.com/{raw_url}\"","","print(\"\\n🎉 === 最终可直接使用的地址(复制到 TVBox / 猫影视即可)===\")","print(f\"✅ GitHub 官方直链(推荐):{raw_url}\")","print(f\"🌍 国内加速版(ghproxy):{proxy_url}\")","print(\" → 把上面任意一个地址粘贴到猫影视「配置地址」即可!\")","print(\" → 每日自动更新,无需服务器,无需手动上传!\")","","print(f\"\\n✅ 所有文件已自动 push 到你的仓库,刷新 https://github.com/{repo} 即可看到 video.json / index.js / index.js.md5\")"],"stylingDirectives":null,"colorizedLines":["\u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003ejson\u003c/span\u003e","\u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003erequests\u003c/span\u003e","\u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003exml\u003c/span\u003e.\u003cspan class=pl-s1\u003eetree\u003c/span\u003e.\u003cspan class=pl-v\u003eElementTree\u003c/span\u003e \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-c1\u003eET\u003c/span\u003e","\u003cspan class=pl-k\u003efrom\u003c/span\u003e \u003cspan class=pl-s1\u003exml\u003c/span\u003e.\u003cspan class=pl-s1\u003eetree\u003c/span\u003e.\u003cspan class=pl-v\u003eElementTree\u003c/span\u003e \u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-v\u003eParseError\u003c/span\u003e","\u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003eos\u003c/span\u003e","\u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003ere\u003c/span\u003e","\u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003ehashlib\u003c/span\u003e","\u003cspan class=pl-k\u003efrom\u003c/span\u003e \u003cspan class=pl-s1\u003edatetime\u003c/span\u003e \u003cspan class=pl-k\u003eimport\u003c/span\u003e \u003cspan class=pl-s1\u003edatetime\u003c/span\u003e","","\u003cspan class=pl-c\u003e# ==================== 配置区(强制中文名 + Google + 必应关键字全网搜索)====================\u003c/span\u003e","\u003cspan class=pl-c\u003e# 1. 硬编码经典接口 + 真实中文名\u003c/span\u003e","\u003cspan class=pl-c1\u003eHARDCODED\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e ["," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.msnii.com/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;美少女资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.xrbsp.com/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;淫水机资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.gdlsp.com/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;香奶儿资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.kxgav.com/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;白嫖资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.pgxdy.com/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;黄AV资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.52av.one/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;52AV资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.avtt.me/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;AVTT资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://www.afasu.com/api/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;小湿妹资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://apittzy.com/api.php/provide/vod/at/xml\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;探探资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://api.xiuseapi.com/api.php/provide/vod/at/xml\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;秀色资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://api.apilyzy.com/api.php/provide/vod/\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;*老鸭资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://api.kudian70.com/api.php/provide/vod/\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;*酷伦理\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://api.ykapi.net/api.php/provide/vod/\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;*影库资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://cj.apiabzy.com/api.php/provide/vod/\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;*爱播资源\u0026quot;\u003c/span\u003e},"," {\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;https://apidanaizi.com/api.php/provide/vod\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;大奶子资源\u0026quot;\u003c/span\u003e},"," \u003cspan class=pl-c\u003e# 如需更多:在 candidates.txt 添加(一行一个 api)\u003c/span\u003e","]","","\u003cspan class=pl-c\u003e# 2. GitHub 智能搜索源列表(Google + 必应关键字全网预采集)\u003c/span\u003e","\u003cspan class=pl-c1\u003eKNOWN_SOURCE_JSONS\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e ["," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/wwb521/live/refs/heads/main/video.json\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/Nancy0308/TVbox-interface/main/tvbox-%E7%A6%8F%E5%88%A9.json\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/lllrrr2/TVBOX-franksun1211/main/fuli.json\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/shichuanenhui/TvBox/main/jav.json\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/cluntop/tvbox/main/fun.json\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/qirenzhidao/tvbox18/main/adult.json\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/guxiangbin/tvbox2/main/%E8%9C%82%E7%AA%9D%E6%8E%A5%E5%8F%A3.txt\u0026quot;\u003c/span\u003e,","]","","\u003cspan class=pl-c\u003e# 全局中文名映射(兜底)\u003c/span\u003e","\u003cspan class=pl-c1\u003eNAME_MAP\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e {"," \u003cspan class=pl-s\u003e\u0026quot;https://www.msnii.com/api/xml.php\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;美少女资源\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;https://www.xrbsp.com/api/xml.php\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;淫水机资源\u0026quot;\u003c/span\u003e,"," \u003cspan class=pl-c\u003e# 与 HARDCODED 保持一致\u003c/span\u003e","}","","\u003cspan class=pl-k\u003edef\u003c/span\u003e \u003cspan class=pl-en\u003ediscover_apis_from_github_sources\u003c/span\u003e():"," \u003cspan class=pl-s1\u003ediscovered\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e []"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;[\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003edatetime\u003c/span\u003e.\u003cspan class=pl-c1\u003enow\u003c/span\u003e()\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e] 开始 Google + 必应关键字全网搜索...\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003ejson_url\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-c1\u003eKNOWN_SOURCE_JSONS\u003c/span\u003e:"," \u003cspan class=pl-k\u003etry\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eresp\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003erequests\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s1\u003ejson_url\u003c/span\u003e, \u003cspan class=pl-s1\u003etimeout\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003e20\u003c/span\u003e)"," \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003eraise_for_status\u003c/span\u003e()"," \u003cspan class=pl-s1\u003econtent\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003etext\u003c/span\u003e"," \u003cspan class=pl-s1\u003esites\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e []"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003econtent\u003c/span\u003e.\u003cspan class=pl-c1\u003estrip\u003c/span\u003e().\u003cspan class=pl-c1\u003estartswith\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026#39;{\u0026#39;\u003c/span\u003e) \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s1\u003econtent\u003c/span\u003e.\u003cspan class=pl-c1\u003estrip\u003c/span\u003e().\u003cspan class=pl-c1\u003estartswith\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026#39;[\u0026#39;\u003c/span\u003e):"," \u003cspan class=pl-s1\u003edata\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003ejson\u003c/span\u003e()"," \u003cspan class=pl-s1\u003esites\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003edata\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;sites\u0026quot;\u003c/span\u003e, []) \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003edata\u003c/span\u003e, \u003cspan class=pl-s1\u003edict\u003c/span\u003e) \u003cspan class=pl-k\u003eelse\u003c/span\u003e \u003cspan class=pl-s1\u003edata\u003c/span\u003e \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003edata\u003c/span\u003e, \u003cspan class=pl-s1\u003elist\u003c/span\u003e) \u003cspan class=pl-k\u003eelse\u003c/span\u003e []"," \u003cspan class=pl-k\u003eelse\u003c/span\u003e:"," \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003eline\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003econtent\u003c/span\u003e.\u003cspan class=pl-c1\u003esplitlines\u003c/span\u003e():"," \u003cspan class=pl-s1\u003eapi_match\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ere\u003c/span\u003e.\u003cspan class=pl-c1\u003esearch\u003c/span\u003e(\u003cspan class=pl-s\u003er\u0026#39;\u0026quot;api\u0026quot;\\s*:\\s*\u0026quot;([^\u0026quot;]+)\u0026quot;\u0026#39;\u003c/span\u003e, \u003cspan class=pl-s1\u003eline\u003c/span\u003e)"," \u003cspan class=pl-s1\u003ename_match\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ere\u003c/span\u003e.\u003cspan class=pl-c1\u003esearch\u003c/span\u003e(\u003cspan class=pl-s\u003er\u0026#39;\u0026quot;name\u0026quot;\\s*:\\s*\u0026quot;([^\u0026quot;]+)\u0026quot;\u0026#39;\u003c/span\u003e, \u003cspan class=pl-s1\u003eline\u003c/span\u003e)"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eapi_match\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eapi_match\u003c/span\u003e.\u003cspan class=pl-c1\u003egroup\u003c/span\u003e(\u003cspan class=pl-c1\u003e1\u003c/span\u003e).\u003cspan class=pl-c1\u003estrip\u003c/span\u003e()"," \u003cspan class=pl-s1\u003ename\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ename_match\u003c/span\u003e.\u003cspan class=pl-c1\u003egroup\u003c/span\u003e(\u003cspan class=pl-c1\u003e1\u003c/span\u003e).\u003cspan class=pl-c1\u003estrip\u003c/span\u003e() \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003ename_match\u003c/span\u003e \u003cspan class=pl-k\u003eelse\u003c/span\u003e \u003cspan class=pl-c1\u003eNone\u003c/span\u003e"," \u003cspan class=pl-s1\u003esites\u003c/span\u003e.\u003cspan class=pl-c1\u003eappend\u003c/span\u003e({\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003eapi\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003ename\u003c/span\u003e})"," \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003esite\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003esites\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003esite\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003esite\u003c/span\u003e, \u003cspan class=pl-s1\u003edict\u003c/span\u003e) \u003cspan class=pl-k\u003eelse\u003c/span\u003e \u003cspan class=pl-s1\u003esite\u003c/span\u003e"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi\u003c/span\u003e, \u003cspan class=pl-s1\u003estr\u003c/span\u003e) \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-s1\u003eapi\u003c/span\u003e:"," \u003cspan class=pl-k\u003econtinue\u003c/span\u003e"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eany\u003c/span\u003e(\u003cspan class=pl-s1\u003ek\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003eapi\u003c/span\u003e.\u003cspan class=pl-c1\u003elower\u003c/span\u003e() \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003ek\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e [\u003cspan class=pl-s\u003e\u0026quot;/xml.php\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;/vod/xml\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;/cjapi\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;api.php/provide/vod\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;inc/api\u0026quot;\u003c/span\u003e]):"," \u003cspan class=pl-s1\u003ename\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003esite\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003esite\u003c/span\u003e, \u003cspan class=pl-s1\u003edict\u003c/span\u003e) \u003cspan class=pl-k\u003eelse\u003c/span\u003e \u003cspan class=pl-c1\u003eNAME_MAP\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi\u003c/span\u003e)"," \u003cspan class=pl-s1\u003ediscovered\u003c/span\u003e.\u003cspan class=pl-c1\u003eappend\u003c/span\u003e({\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003eapi\u003c/span\u003e.\u003cspan class=pl-c1\u003estrip\u003c/span\u003e(), \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003ename\u003c/span\u003e \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s\u003e\u0026quot;未知成人源\u0026quot;\u003c/span\u003e})"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot; ✅ 从 \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ejson_url\u003c/span\u003e.\u003cspan class=pl-c1\u003esplit\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026#39;/\u0026#39;\u003c/span\u003e)[\u003cspan class=pl-c1\u003e3\u003c/span\u003e]\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e/\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ejson_url\u003c/span\u003e.\u003cspan class=pl-c1\u003esplit\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026#39;/\u0026#39;\u003c/span\u003e)[\u003cspan class=pl-c1\u003e-\u003c/span\u003e\u003cspan class=pl-c1\u003e1\u003c/span\u003e]\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e 提取接口\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003eexcept\u003c/span\u003e \u003cspan class=pl-v\u003eException\u003c/span\u003e \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ee\u003c/span\u003e:"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot; ⚠️ 跳过源 \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ejson_url\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ee\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;[\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003edatetime\u003c/span\u003e.\u003cspan class=pl-c1\u003enow\u003c/span\u003e()\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e] 全网搜索完成,共发现 \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-en\u003elen\u003c/span\u003e(\u003cspan class=pl-s1\u003ediscovered\u003c/span\u003e)\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e 个潜在接口\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-s1\u003ediscovered\u003c/span\u003e","","\u003cspan class=pl-c\u003e# ==================== 模板 \u0026amp; 测试(不变)====================\u003c/span\u003e","\u003cspan class=pl-c1\u003eTEMPLATE_URL\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s\u003e\u0026quot;https://raw.githubusercontent.com/wwb521/live/refs/heads/main/video.json\u0026quot;\u003c/span\u003e","","\u003cspan class=pl-k\u003edef\u003c/span\u003e \u003cspan class=pl-en\u003eload_template\u003c/span\u003e():"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eos\u003c/span\u003e.\u003cspan class=pl-c1\u003epath\u003c/span\u003e.\u003cspan class=pl-c1\u003eexists\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;video.json\u0026quot;\u003c/span\u003e):"," \u003cspan class=pl-k\u003etry\u003c/span\u003e:"," \u003cspan class=pl-k\u003ewith\u003c/span\u003e \u003cspan class=pl-en\u003eopen\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;video.json\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;r\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s1\u003eencoding\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e:"," \u003cspan class=pl-s1\u003edata\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ejson\u003c/span\u003e.\u003cspan class=pl-c1\u003eload\u003c/span\u003e(\u003cspan class=pl-s1\u003ef\u003c/span\u003e)"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;✅ 从本地 video.json 加载模板成功\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-s1\u003edata\u003c/span\u003e"," \u003cspan class=pl-k\u003eexcept\u003c/span\u003e \u003cspan class=pl-s1\u003ejson\u003c/span\u003e.\u003cspan class=pl-c1\u003eJSONDecodeError\u003c/span\u003e \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ee\u003c/span\u003e:"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;⚠️ 本地 video.json 损坏 (\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ee\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e) → 自动拉取\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003eexcept\u003c/span\u003e \u003cspan class=pl-v\u003eException\u003c/span\u003e \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ee\u003c/span\u003e:"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;⚠️ 本地异常 (\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ee\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e) → 自动拉取\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;📥 从官方模板拉取...\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-s1\u003eresp\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003erequests\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-c1\u003eTEMPLATE_URL\u003c/span\u003e, \u003cspan class=pl-s1\u003etimeout\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003e30\u003c/span\u003e)"," \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003eraise_for_status\u003c/span\u003e()"," \u003cspan class=pl-s1\u003edata\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003ejson\u003c/span\u003e()"," \u003cspan class=pl-k\u003ewith\u003c/span\u003e \u003cspan class=pl-en\u003eopen\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;video.json\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;w\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s1\u003eencoding\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e:"," \u003cspan class=pl-s1\u003ejson\u003c/span\u003e.\u003cspan class=pl-c1\u003edump\u003c/span\u003e(\u003cspan class=pl-s1\u003edata\u003c/span\u003e, \u003cspan class=pl-s1\u003ef\u003c/span\u003e, \u003cspan class=pl-s1\u003eensure_ascii\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003eFalse\u003c/span\u003e, \u003cspan class=pl-s1\u003eindent\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003e2\u003c/span\u003e)"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;✅ 已自动修复并保存官方模板\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-s1\u003edata\u003c/span\u003e","","\u003cspan class=pl-k\u003edef\u003c/span\u003e \u003cspan class=pl-en\u003etest_api\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi_url\u003c/span\u003e: \u003cspan class=pl-smi\u003estr\u003c/span\u003e) \u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=pl-smi\u003ebool\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eheaders\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e {\u003cspan class=pl-s\u003e\u0026quot;User-Agent\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s\u003e\u0026quot;Mozilla/5.0 (compatible; TVBox-Bot/1.0; +https://github.com/your-repo)\u0026quot;\u003c/span\u003e}"," \u003cspan class=pl-k\u003etry\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eresp\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003erequests\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi_url\u003c/span\u003e, \u003cspan class=pl-s1\u003eheaders\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s1\u003eheaders\u003c/span\u003e, \u003cspan class=pl-s1\u003etimeout\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003e15\u003c/span\u003e)"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003estatus_code\u003c/span\u003e \u003cspan class=pl-c1\u003e!=\u003c/span\u003e \u003cspan class=pl-c1\u003e200\u003c/span\u003e:"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-c1\u003eFalse\u003c/span\u003e"," \u003cspan class=pl-s1\u003econtent\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eresp\u003c/span\u003e.\u003cspan class=pl-c1\u003etext\u003c/span\u003e.\u003cspan class=pl-c1\u003estrip\u003c/span\u003e()"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-s1\u003econtent\u003c/span\u003e \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-s1\u003econtent\u003c/span\u003e.\u003cspan class=pl-c1\u003estartswith\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;\u0026lt;\u0026quot;\u003c/span\u003e):"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-c1\u003eFalse\u003c/span\u003e"," \u003cspan class=pl-k\u003etry\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eroot\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-c1\u003eET\u003c/span\u003e.\u003cspan class=pl-c1\u003efromstring\u003c/span\u003e(\u003cspan class=pl-s1\u003econtent\u003c/span\u003e.\u003cspan class=pl-c1\u003eencode\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e))"," \u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003eroot\u003c/span\u003e.\u003cspan class=pl-c1\u003etag\u003c/span\u003e \u003cspan class=pl-c1\u003e==\u003c/span\u003e \u003cspan class=pl-s\u003e\u0026quot;rss\u0026quot;\u003c/span\u003e \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s1\u003eroot\u003c/span\u003e.\u003cspan class=pl-c1\u003efind\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;channel\u0026quot;\u003c/span\u003e) \u003cspan class=pl-c1\u003e\u003cspan class=pl-c1\u003eis\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e\u003c/span\u003e \u003cspan class=pl-c1\u003eNone\u003c/span\u003e \u003cspan class=pl-c1\u003eor\u003c/span\u003e"," \u003cspan class=pl-s1\u003eroot\u003c/span\u003e.\u003cspan class=pl-c1\u003efindall\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;.//category\u0026quot;\u003c/span\u003e) \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s1\u003eroot\u003c/span\u003e.\u003cspan class=pl-c1\u003efindall\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;.//video\u0026quot;\u003c/span\u003e) \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s1\u003eroot\u003c/span\u003e.\u003cspan class=pl-c1\u003efindall\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;.//list\u0026quot;\u003c/span\u003e)):"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-c1\u003eTrue\u003c/span\u003e"," \u003cspan class=pl-k\u003eexcept\u003c/span\u003e \u003cspan class=pl-v\u003eParseError\u003c/span\u003e:"," \u003cspan class=pl-s1\u003elower\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003econtent\u003c/span\u003e.\u003cspan class=pl-c1\u003elower\u003c/span\u003e()"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eany\u003c/span\u003e(\u003cspan class=pl-s1\u003ek\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003elower\u003c/span\u003e \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003ek\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e [\u003cspan class=pl-s\u003e\u0026quot;rss\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;channel\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;category\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;video\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;list\u0026quot;\u003c/span\u003e]):"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-c1\u003eTrue\u003c/span\u003e"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-c1\u003eFalse\u003c/span\u003e"," \u003cspan class=pl-k\u003eexcept\u003c/span\u003e \u003cspan class=pl-v\u003eException\u003c/span\u003e \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ee\u003c/span\u003e:"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;[\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003edatetime\u003c/span\u003e.\u003cspan class=pl-c1\u003enow\u003c/span\u003e()\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e] 测试失败 \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003eapi_url\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ee\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-c1\u003eFalse\u003c/span\u003e","","\u003cspan class=pl-c\u003e# ==================== 主逻辑 + GitHub raw 直链输出 ====================\u003c/span\u003e","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;[\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003edatetime\u003c/span\u003e.\u003cspan class=pl-c1\u003enow\u003c/span\u003e()\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e] 开始每日色情接口更新(强制中文名 + GitHub raw 直链)...\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-s1\u003edata\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003eload_template\u003c/span\u003e()","\u003cspan class=pl-s1\u003egithub_apis\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003ediscover_apis_from_github_sources\u003c/span\u003e()","","\u003cspan class=pl-s1\u003ecandidates_from_txt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e []","\u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eos\u003c/span\u003e.\u003cspan class=pl-c1\u003epath\u003c/span\u003e.\u003cspan class=pl-c1\u003eexists\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;candidates.txt\u0026quot;\u003c/span\u003e):"," \u003cspan class=pl-k\u003ewith\u003c/span\u003e \u003cspan class=pl-en\u003eopen\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;candidates.txt\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;r\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s1\u003eencoding\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e:"," \u003cspan class=pl-s1\u003ecandidates_from_txt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e [\u003cspan class=pl-s1\u003eline\u003c/span\u003e.\u003cspan class=pl-c1\u003estrip\u003c/span\u003e() \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003eline\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eline\u003c/span\u003e.\u003cspan class=pl-c1\u003estrip\u003c/span\u003e() \u003cspan class=pl-c1\u003eand\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-s1\u003eline\u003c/span\u003e.\u003cspan class=pl-c1\u003estartswith\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;#\u0026quot;\u003c/span\u003e)]"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;从 candidates.txt 读取 \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-en\u003elen\u003c/span\u003e(\u003cspan class=pl-s1\u003ecandidates_from_txt\u003c/span\u003e)\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e 个额外接口\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-s1\u003eseen\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003eset\u003c/span\u003e()","\u003cspan class=pl-s1\u003eall_candidates\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e []","\u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-c1\u003eHARDCODED\u003c/span\u003e \u003cspan class=pl-c1\u003e+\u003c/span\u003e \u003cspan class=pl-s1\u003egithub_apis\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e[\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e]"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003eseen\u003c/span\u003e:"," \u003cspan class=pl-k\u003econtinue\u003c/span\u003e"," \u003cspan class=pl-s1\u003eseen\u003c/span\u003e.\u003cspan class=pl-c1\u003eadd\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi\u003c/span\u003e)"," \u003cspan class=pl-s1\u003eall_candidates\u003c/span\u003e.\u003cspan class=pl-c1\u003eappend\u003c/span\u003e(\u003cspan class=pl-s1\u003eitem\u003c/span\u003e)","","\u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003eurl\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003ecandidates_from_txt\u003c/span\u003e:"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003eurl\u003c/span\u003e \u003cspan class=pl-c1\u003e\u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e\u003c/span\u003e \u003cspan class=pl-s1\u003eseen\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eseen\u003c/span\u003e.\u003cspan class=pl-c1\u003eadd\u003c/span\u003e(\u003cspan class=pl-s1\u003eurl\u003c/span\u003e)"," \u003cspan class=pl-s1\u003eall_candidates\u003c/span\u003e.\u003cspan class=pl-c1\u003eappend\u003c/span\u003e({\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003eurl\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-c1\u003eNAME_MAP\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s1\u003eurl\u003c/span\u003e) \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s\u003e\u0026quot;未知成人源\u0026quot;\u003c/span\u003e})","","\u003cspan class=pl-s1\u003eworking_sites\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e []","\u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003edata\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;sites\u0026quot;\u003c/span\u003e, []) \u003cspan class=pl-c1\u003e+\u003c/span\u003e \u003cspan class=pl-s1\u003eall_candidates\u003c/span\u003e:"," \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003eitem\u003c/span\u003e, \u003cspan class=pl-s1\u003edict\u003c/span\u003e) \u003cspan class=pl-k\u003eelse\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s1\u003eapi\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e [\u003cspan class=pl-s1\u003es\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003es\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003eworking_sites\u003c/span\u003e]:"," \u003cspan class=pl-k\u003econtinue\u003c/span\u003e"," \u003cspan class=pl-s1\u003ename\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003eitem\u003c/span\u003e, \u003cspan class=pl-s1\u003edict\u003c/span\u003e) \u003cspan class=pl-k\u003eelse\u003c/span\u003e \u003cspan class=pl-c1\u003eNAME_MAP\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi\u003c/span\u003e)"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-s1\u003ename\u003c/span\u003e \u003cspan class=pl-c1\u003eor\u003c/span\u003e \u003cspan class=pl-s1\u003ename\u003c/span\u003e.\u003cspan class=pl-c1\u003estartswith\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;http\u0026quot;\u003c/span\u003e):"," \u003cspan class=pl-s1\u003ename\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-c1\u003eNAME_MAP\u003c/span\u003e.\u003cspan class=pl-c1\u003eget\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi\u003c/span\u003e, \u003cspan class=pl-s1\u003eapi\u003c/span\u003e.\u003cspan class=pl-c1\u003esplit\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;/\u0026quot;\u003c/span\u003e)[\u003cspan class=pl-c1\u003e2\u003c/span\u003e].\u003cspan class=pl-c1\u003ereplace\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;www.\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;\u0026quot;\u003c/span\u003e).\u003cspan class=pl-c1\u003ereplace\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;.com\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;\u0026quot;\u003c/span\u003e))"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;测试接口: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003eapi\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e (名称: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ename\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e)\u0026quot;\u003c/span\u003e)"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003etest_api\u003c/span\u003e(\u003cspan class=pl-s1\u003eapi\u003c/span\u003e):"," \u003cspan class=pl-s1\u003esite_dict\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e {"," \u003cspan class=pl-s\u003e\u0026quot;key\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003ename\u003c/span\u003e[:\u003cspan class=pl-c1\u003e20\u003c/span\u003e],"," \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003ename\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;type\u0026quot;\u003c/span\u003e: \u003cspan class=pl-c1\u003e0\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e: \u003cspan class=pl-s1\u003eapi\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;searchable\u0026quot;\u003c/span\u003e: \u003cspan class=pl-c1\u003e1\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;quickSearch\u0026quot;\u003c/span\u003e: \u003cspan class=pl-c1\u003e1\u003c/span\u003e,"," \u003cspan class=pl-s\u003e\u0026quot;filterable\u0026quot;\u003c/span\u003e: \u003cspan class=pl-c1\u003e1\u003c/span\u003e"," }"," \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-en\u003eisinstance\u003c/span\u003e(\u003cspan class=pl-s1\u003eitem\u003c/span\u003e, \u003cspan class=pl-s1\u003edict\u003c/span\u003e):"," \u003cspan class=pl-s1\u003esite_dict\u003c/span\u003e.\u003cspan class=pl-c1\u003eupdate\u003c/span\u003e({\u003cspan class=pl-s1\u003ek\u003c/span\u003e: \u003cspan class=pl-s1\u003ev\u003c/span\u003e \u003cspan class=pl-k\u003efor\u003c/span\u003e \u003cspan class=pl-s1\u003ek\u003c/span\u003e, \u003cspan class=pl-s1\u003ev\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e \u003cspan class=pl-s1\u003eitem\u003c/span\u003e.\u003cspan class=pl-c1\u003eitems\u003c/span\u003e() \u003cspan class=pl-k\u003eif\u003c/span\u003e \u003cspan class=pl-s1\u003ek\u003c/span\u003e \u003cspan class=pl-c1\u003e\u003cspan class=pl-c1\u003enot\u003c/span\u003e \u003cspan class=pl-c1\u003ein\u003c/span\u003e\u003c/span\u003e [\u003cspan class=pl-s\u003e\u0026quot;key\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;name\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;api\u0026quot;\u003c/span\u003e]})"," \u003cspan class=pl-s1\u003eworking_sites\u003c/span\u003e.\u003cspan class=pl-c1\u003eappend\u003c/span\u003e(\u003cspan class=pl-s1\u003esite_dict\u003c/span\u003e)"," \u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;✅ 可用: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003eapi\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e → \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ename\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-s1\u003edata\u003c/span\u003e[\u003cspan class=pl-s\u003e\u0026quot;sites\u0026quot;\u003c/span\u003e] \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eworking_sites\u003c/span\u003e","","\u003cspan class=pl-c\u003e# 保存 video.json\u003c/span\u003e","\u003cspan class=pl-k\u003ewith\u003c/span\u003e \u003cspan class=pl-en\u003eopen\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;video.json\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;w\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s1\u003eencoding\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e:"," \u003cspan class=pl-s1\u003ejson\u003c/span\u003e.\u003cspan class=pl-c1\u003edump\u003c/span\u003e(\u003cspan class=pl-s1\u003edata\u003c/span\u003e, \u003cspan class=pl-s1\u003ef\u003c/span\u003e, \u003cspan class=pl-s1\u003eensure_ascii\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003eFalse\u003c/span\u003e, \u003cspan class=pl-s1\u003eindent\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003e2\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;✅ video.json 已保存!可用接口数量: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-en\u003elen\u003c/span\u003e(\u003cspan class=pl-s1\u003eworking_sites\u003c/span\u003e)\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-c\u003e# 生成 index.js(CatVod 专用)\u003c/span\u003e","\u003cspan class=pl-s1\u003eindex_js_content\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s\u003ef\u0026#39;var config = \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ejson\u003c/span\u003e.\u003cspan class=pl-c1\u003edumps\u003c/span\u003e(\u003cspan class=pl-s1\u003edata\u003c/span\u003e, \u003cspan class=pl-s1\u003eensure_ascii\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-c1\u003eFalse\u003c/span\u003e)\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e;\u003cspan class=pl-cce\u003e\\n\u003c/span\u003e\u0026#39;\u003c/span\u003e","\u003cspan class=pl-k\u003ewith\u003c/span\u003e \u003cspan class=pl-en\u003eopen\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;index.js\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;w\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s1\u003eencoding\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e:"," \u003cspan class=pl-s1\u003ef\u003c/span\u003e.\u003cspan class=pl-c1\u003ewrite\u003c/span\u003e(\u003cspan class=pl-s1\u003eindex_js_content\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;✅ index.js 已生成\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-c\u003e# 生成 index.js.md5\u003c/span\u003e","\u003cspan class=pl-s1\u003emd5_hash\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ehashlib\u003c/span\u003e.\u003cspan class=pl-c1\u003emd5\u003c/span\u003e(\u003cspan class=pl-s1\u003eindex_js_content\u003c/span\u003e.\u003cspan class=pl-c1\u003eencode\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e)).\u003cspan class=pl-c1\u003ehexdigest\u003c/span\u003e()","\u003cspan class=pl-k\u003ewith\u003c/span\u003e \u003cspan class=pl-en\u003eopen\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;index.js.md5\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;w\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s1\u003eencoding\u003c/span\u003e\u003cspan class=pl-c1\u003e=\u003c/span\u003e\u003cspan class=pl-s\u003e\u0026quot;utf-8\u0026quot;\u003c/span\u003e) \u003cspan class=pl-k\u003eas\u003c/span\u003e \u003cspan class=pl-s1\u003ef\u003c/span\u003e:"," \u003cspan class=pl-s1\u003ef\u003c/span\u003e.\u003cspan class=pl-c1\u003ewrite\u003c/span\u003e(\u003cspan class=pl-s1\u003emd5_hash\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;✅ index.js.md5 已生成(MD5: \u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003emd5_hash\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e)\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-c\u003e# ==================== 输出 GitHub raw 直链(核心升级)===================\u003c/span\u003e","\u003cspan class=pl-s1\u003erepo\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eos\u003c/span\u003e.\u003cspan class=pl-c1\u003egetenv\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;GITHUB_REPOSITORY\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;你的用户名/你的仓库名\u0026quot;\u003c/span\u003e) \u003cspan class=pl-c\u003e# Actions 自动填充\u003c/span\u003e","\u003cspan class=pl-s1\u003ebranch\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eos\u003c/span\u003e.\u003cspan class=pl-c1\u003egetenv\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;GITHUB_REF_NAME\u0026quot;\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;main\u0026quot;\u003c/span\u003e)","\u003cspan class=pl-s1\u003eraw_url\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s\u003ef\u0026quot;https://raw.githubusercontent.com/\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003erepo\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e/refs/heads/\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003ebranch\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e/index.js.md5\u0026quot;\u003c/span\u003e","\u003cspan class=pl-s1\u003eproxy_url\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s\u003ef\u0026quot;https://ghproxy.com/\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003eraw_url\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e","","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;\u003cspan class=pl-cce\u003e\\n\u003c/span\u003e🎉 === 最终可直接使用的地址(复制到 TVBox / 猫影视即可)===\u0026quot;\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;✅ GitHub 官方直链(推荐):\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003eraw_url\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;🌍 国内加速版(ghproxy):\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003eproxy_url\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e\u0026quot;\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot; → 把上面任意一个地址粘贴到猫影视「配置地址」即可!\u0026quot;\u003c/span\u003e)","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot; → 每日自动更新,无需服务器,无需手动上传!\u0026quot;\u003c/span\u003e)","","\u003cspan class=pl-en\u003eprint\u003c/span\u003e(\u003cspan class=pl-s\u003ef\u0026quot;\u003cspan class=pl-cce\u003e\\n\u003c/span\u003e✅ 所有文件已自动 push 到你的仓库,刷新 https://github.com/\u003cspan class=pl-s1\u003e\u003cspan class=pl-kos\u003e{\u003c/span\u003e\u003cspan class=pl-s1\u003erepo\u003c/span\u003e\u003cspan class=pl-kos\u003e}\u003c/span\u003e\u003c/span\u003e 即可看到 video.json / index.js / index.js.md5\u0026quot;\u003c/span\u003e)"]}},"title":"sq/scripts/update_video.py at main · cxddgtb/sq","appPayload":{},"meta":{"title":"sq/scripts/update_video.py at main · cxddgtb/sq"}}</script>
|
||
<div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/cxddgtb/sq" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d"><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HidePaneWithTreeOverlay__mFFGX" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"><div class="react-tree-pane-contents-3-panel"><div id="repos-file-tree" class="ReposFileTreePane-module__PaneContents__SJjfF ReposFileTreePane-module__PaneContentsHiddenOnNarrow__KY_EL"><div class="ReposFileTreePane-module__Box_1__PpIop"><div class="d-flex width-full tmp-mb-3 flex-items-center"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE"><button type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="collapse-file-tree-button" aria-expanded="true" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_ijbd3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-expand" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.177 7.823 2.396-2.396A.25.25 0 0 1 7 5.604v4.792a.25.25 0 0 1-.427.177L4.177 8.177a.25.25 0 0 1 0-.354Z"></path><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25H9.5v-13Zm12.5 13a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11v13Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" aria-hidden="true" id="_R_ijbd3al1d_">Collapse file tree</span><div class="d-none"></div></h2><h2 class="CodeViewFileTreeLayout-module__heading__A1Iqk">Files</h2></div><div class="ReposFileTreePane-module__Box_2__g74WI"><div class="ReposFileTreePane-module__Box_3__D6cTp"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" style="min-width:0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk react-repos-tree-pane-ref-selector width-full ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayHeader__XtXRG"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP"> <!-- -->main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="ReposFileTreePane-module__Box_4__DG4pa"><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk SearchButton-module__IconButton__SBlqu prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_l3bd3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true"><span id="_R_l3bd3al1d_">Search this repository<span class="prc-src-InternalVisuallyHidden-2YaI6">(<!-- -->forward slash<!-- -->)</span></span><span class="prc-TooltipV2-KeybindingHintContainer-Ymj-3 prc-TooltipV2-HasTextBefore-fdOXj" aria-hidden="true"><kbd class="prc-KeybindingHint-KeybindingHint-qpYIs prc-Text-Text-9mHv3" data-testid="keybinding-hint"><span class="prc-components-Chord-DdhWN prc-components-ChordOnEmphasis-O-4BS prc-components-ChordSmall-c-P-x prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">forward slash</span><span aria-hidden="true">/</span></span></kbd></span></span></div></div></div><div class="ReposFileTreePane-module__FileResultsList__zmSnM ReposFileTreePane-module__PaneContentsHiddenOnNarrow__KY_EL"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_2lbd3al1d_" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_2lbd3al1d_ _R_2lbd3al1dH1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_2lbd3al1dH1_" aria-hidden="true"><kbd class="prc-KeybindingHint-KeybindingHint-qpYIs prc-Text-Text-9mHv3" data-testid="keybinding-hint"><span class="prc-components-Chord-DdhWN prc-components-ChordNormal-Ov9XG prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">t</span><span aria-hidden="true">T</span></span></kbd></span></span></div><div class="d-none"></div><div class="ReposFileTreePane-module__Box_5__Zy_o6 ReposFileTreePane-module__PaneContentsHiddenOnNarrow__KY_EL"><div style="height:1px;margin-top:-1px;width:100%;flex-shrink:0"></div><div class="react-tree-show-tree-items"><div class="ReposFileTreeView-module__Box__vkb5W" data-testid="repos-file-tree-container"><nav aria-label="File Tree Navigation"><span class="prc-src-InternalVisuallyHidden-2YaI6"><div></div></span><ul role="tree" aria-label="Files" data-truncate-text="true" class="prc-TreeView-TreeViewRootUlStyles-Mzrmj"><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id=".github-item" role="treeitem" aria-labelledby="_R_1t9bd3al1d_" aria-describedby="_R_1t9bd3al1dH1_" aria-level="1" aria-expanded="false" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div class="PRIVATE_TreeView-item-toggle PRIVATE_TreeView-item-toggle--hover PRIVATE_TreeView-item-toggle--end prc-TreeView-TreeViewItemToggle-hq3Xq prc-TreeView-TreeViewItemToggleHover-H9tbt prc-TreeView-TreeViewItemToggleEnd-nWt9I"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-right" viewBox="0 0 12 12" width="12" height="12" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4.7 10c-.2 0-.4-.1-.5-.2-.3-.3-.3-.8 0-1.1L6.9 6 4.2 3.3c-.3-.3-.3-.8 0-1.1.3-.3.8-.3 1.1 0l3.3 3.2c.3.3.3.8 0 1.1L5.3 9.7c-.2.2-.4.3-.6.3Z"></path></svg></div><div id="_R_1t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_1t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><div class="PRIVATE_TreeView-directory-icon prc-TreeView-TreeViewDirectoryIcon-yP1oY"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg></div></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>.github</span></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="scripts-item" role="treeitem" aria-labelledby="_R_2t9bd3al1d_" aria-describedby="_R_2t9bd3al1dH1_" aria-level="1" aria-expanded="true" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div class="PRIVATE_TreeView-item-toggle PRIVATE_TreeView-item-toggle--hover PRIVATE_TreeView-item-toggle--end prc-TreeView-TreeViewItemToggle-hq3Xq prc-TreeView-TreeViewItemToggleHover-H9tbt prc-TreeView-TreeViewItemToggleEnd-nWt9I"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 12 12" width="12" height="12" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6 8.825c-.2 0-.4-.1-.5-.2l-3.3-3.3c-.3-.3-.3-.8 0-1.1.3-.3.8-.3 1.1 0l2.7 2.7 2.7-2.7c.3-.3.8-.3 1.1 0 .3.3.3.8 0 1.1l-3.2 3.2c-.2.2-.4.3-.6.3Z"></path></svg></div><div id="_R_2t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_2t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><div class="PRIVATE_TreeView-directory-icon prc-TreeView-TreeViewDirectoryIcon-yP1oY"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file-directory-open-fill" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M.513 1.513A1.75 1.75 0 0 1 1.75 1h3.5c.55 0 1.07.26 1.4.7l.9 1.2a.25.25 0 0 0 .2.1H13a1 1 0 0 1 1 1v.5H2.75a.75.75 0 0 0 0 1.5h11.978a1 1 0 0 1 .994 1.117L15 13.25A1.75 1.75 0 0 1 13.25 15H1.75A1.75 1.75 0 0 1 0 13.25V2.75c0-.464.184-.91.513-1.237Z"></path></svg></div></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>scripts</span></span></div></div><ul role="group" style="list-style:none;padding:0;margin:0" aria-label=""><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="scripts/update_video.py-item" role="treeitem" aria-labelledby="_R_2mit9bd3al1d_" aria-describedby="_R_2mit9bd3al1dH1_" aria-level="2" aria-current="true" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:2"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"><div class="PRIVATE_TreeView-item-level-line prc-TreeView-TreeViewItemLevelLine-F-0-2"></div></div></div><div id="_R_2mit9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_2mit9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>update_video.py</span></span></div></div></li></ul></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="1-item" role="treeitem" aria-labelledby="_R_3t9bd3al1d_" aria-describedby="_R_3t9bd3al1dH1_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_3t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_3t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>1</span></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="README.md-item" role="treeitem" aria-labelledby="_R_4t9bd3al1d_" aria-describedby="_R_4t9bd3al1dH1_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_4t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_4t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>README.md</span></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="index.js-item" role="treeitem" aria-labelledby="_R_5t9bd3al1d_" aria-describedby="_R_5t9bd3al1dH1_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_5t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_5t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>index.js</span></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="index.js.md5-item" role="treeitem" aria-labelledby="_R_6t9bd3al1d_" aria-describedby="_R_6t9bd3al1dH1_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_6t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_6t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>index.js.md5</span></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="video.json-item" role="treeitem" aria-labelledby="_R_7t9bd3al1d_" aria-describedby="_R_7t9bd3al1dH1_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_7t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_7t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>video.json</span></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="备份-item" role="treeitem" aria-labelledby="_R_8t9bd3al1d_" aria-describedby="_R_8t9bd3al1dH1_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1;content-visibility:auto;contain-intrinsic-size:auto 2rem"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_8t9bd3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><div class="PRIVATE_VisuallyHidden prc-TreeView-TreeViewVisuallyHidden-1N8xK" aria-hidden="true" id="_R_8t9bd3al1dH1_"></div><div class="PRIVATE_TreeView-item-visual prc-TreeView-TreeViewItemVisual-naWzj" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-file" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></div><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><span>备份</span></span></div></div></li></ul></nav></div></div></div></div></div></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div class="prc-PageLayout-ContentWrapper-gR9eG" data-is-hidden-narrow="true"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="CodeViewHeader-module__Box_6__qKUtX"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb--wide-heading" id="repos-header-breadcrumb--wide" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-testid="screen-reader-heading" id="repos-header-breadcrumb--wide-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-testid="breadcrumbs-repo-link" href="/cxddgtb/sq/tree/main" data-discover="true">sq</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" href="/cxddgtb/sq/tree/main/scripts" data-discover="true">scripts</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" tabindex="-1" id="file-name-id-wide">update_video.py</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_qql3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardButton-module__tooltip__BhMvU prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-label="Copy path" aria-hidden="true" id="_R_qql3al1d_">Copy path</span></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div class="d-none"></div><button type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_ficql3al1d_" id="_R_icql3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true" id="_R_ficql3al1d_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div class="d-none"></div><button type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_fieql3al1d_" id="_R_ieql3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true" id="_R_fieql3al1d_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-testid="screen-reader-heading">History</h2><a href="/cxddgtb/sq/commits/main/scripts/update_video.py" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a aria-label="View commit history for this file." href="/cxddgtb/sq/commits/main/scripts/update_video.py" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_2balal3al1d_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" role="tooltip" aria-hidden="true" id="_R_2balal3al1d_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d BlobViewContent-module__blobContainerWithPanel__bcTSz"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="9.5 KB" style="--truncate-max-width:100%"><span>209 lines (189 loc) · 9.5 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_5__dmNXA"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-testid="breadcrumbs-repo-link" href="/cxddgtb/sq/tree/main" data-discover="true">sq</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" href="/cxddgtb/sq/tree/main/scripts" data-discover="true">scripts</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" tabindex="-1" id="sticky-file-name-id">update_video.py</h1></div></div><button type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small"><li class="prc-SegmentedControl-Item-tSCQh" data-selected=""><button aria-current="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh"><button aria-current="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="9.5 KB" style="--truncate-max-width:100%"><span>209 lines (189 loc) · 9.5 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><button data-component="IconButton" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_dkn6clal3al1d_" id="_R_1kn6clal3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-space" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 13.25V2.75C0 1.784.784 1 1.75 1H5c.551 0 1.07.26 1.4.7l.9 1.2a.25.25 0 0 0 .2.1h6.75c.966 0 1.75.784 1.75 1.75v3.638a.75.75 0 0 1-1.5 0V4.75a.25.25 0 0 0-.25-.25H7.5a1.75 1.75 0 0 1-1.4-.7l-.9-1.2a.25.25 0 0 0-.2-.1H1.75a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h5.663l.076.004a.75.75 0 0 1 0 1.492L7.413 15H1.75A1.75 1.75 0 0 1 0 13.25Z"></path><path d="M12.265 9.16a.248.248 0 0 1 .467 0l.237.649a3.726 3.726 0 0 0 2.219 2.218l.649.238a.249.249 0 0 1 0 .467l-.649.237a3.728 3.728 0 0 0-2.219 2.219l-.237.649a.249.249 0 0 1-.467 0l-.238-.649a3.726 3.726 0 0 0-2.218-2.219l-.649-.237a.248.248 0 0 1 0-.467l.649-.238a3.725 3.725 0 0 0 2.218-2.218l.238-.649Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" aria-hidden="true" id="_R_dkn6clal3al1d_">Add to space</span><button data-component="IconButton" type="button" data-testid="copilot-ask-menu" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_v6clal3al1d_" id="blob-view-header-copilot-icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" aria-hidden="true" id="_R_v6clal3al1d_">Ask Copilot about this file</span><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY"><div><a href="https://github.com/cxddgtb/sq/raw/refs/heads/main/scripts/update_video.py" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_d5f6clal3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" aria-hidden="true" id="_R_d5f6clal3al1d_">Copy raw file</span></div><div><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_75f6clal3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" aria-hidden="true" id="_R_75f6clal3al1d_">Download raw file</span></div></div><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY"><div><a data-component="IconButton" type="button" data-testid="edit-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_39f6clal3al1d_" href="/cxddgtb/sq/edit/main/scripts/update_video.py" data-discover="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-pencil" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path></svg></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true" id="_R_39f6clal3al1d_">Fork this repository and edit the file</span></div><div><button data-component="IconButton" type="button" data-testid="more-edit-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_3t9f6clal3al1d_" id="_R_59f6clal3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true" id="_R_3t9f6clal3al1d_">More edit options</span></div></div></div><div class="d-none"></div><button data-component="IconButton" type="button" aria-pressed="true" aria-expanded="true" aria-controls="symbols-pane" data-testid="symbols-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__IconButton_2__RyjZg prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_9n6clal3al1d_" id="symbols-button"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true" id="_R_9n6clal3al1d_">Close symbols panel</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7q76clal3al1d_" id="_R_a76clal3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" aria-hidden="true" id="_R_7q76clal3al1d_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq" style="margin-top:46px"><div class="CodeBlob-module__codeBlobWrapper__RS6In" style="padding-top:8px;padding-bottom:8px"><div id="highlighted-line-menu-positioner" class="position-relative"><div id="copilot-button-positioner" class="position-relative"><div class="CodeBlob-module__codeBlobInner__tfjuQ"><div class="react-code-file-contents CodeLinesSSRNoVirtualization-module__codeFileContents__BHJ0j" role="presentation" aria-hidden="true" data-tab-size="4" data-paste-markdown-skip="true" style="tab-size:4;max-width:unset" data-hpc="true"><div class="react-line-numbers-no-virtualization" style="pointer-events:auto;position:relative;z-index:2"><div class="react-no-virtualization-wrapper-lines-ssr"><div data-line-number="1" class="react-line-number react-code-text" style="padding-right:16px">1</div><div data-line-number="2" class="react-line-number react-code-text" style="padding-right:16px">2</div><div data-line-number="3" class="react-line-number react-code-text" style="padding-right:16px">3</div><div data-line-number="4" class="react-line-number react-code-text" style="padding-right:16px">4</div><div data-line-number="5" class="react-line-number react-code-text" style="padding-right:16px">5</div><div data-line-number="6" class="react-line-number react-code-text" style="padding-right:16px">6</div><div data-line-number="7" class="react-line-number react-code-text" style="padding-right:16px">7</div><div data-line-number="8" class="react-line-number react-code-text" style="padding-right:16px">8</div><div data-line-number="9" class="react-line-number react-code-text" style="padding-right:16px">9</div><div data-line-number="10" class="react-line-number react-code-text" style="padding-right:16px">10</div><div data-line-number="11" class="react-line-number react-code-text" style="padding-right:16px">11</div><div data-line-number="12" class="react-line-number react-code-text" style="padding-right:16px">12<span class="LineNumber-module__codeAlert__WexRo LineNumber-module__codeAlertRight__hdWmf"><div aria-label="Collapse code section" role="button" tabindex="0" class="LineNumber-module__codeFoldingChevron__sY2Yt"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="13" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">13</div><div data-line-number="14" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">14</div><div data-line-number="15" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">15</div><div data-line-number="16" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">16</div><div data-line-number="17" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">17</div><div data-line-number="18" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">18</div><div data-line-number="19" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">19</div><div data-line-number="20" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">20</div><div data-line-number="21" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">21</div><div data-line-number="22" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">22</div><div data-line-number="23" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">23</div><div data-line-number="24" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">24</div><div data-line-number="25" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">25</div><div data-line-number="26" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">26</div><div data-line-number="27" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">27</div><div data-line-number="28" class="child-of-line-11 react-line-number react-code-text" style="padding-right:16px">28</div><div data-line-number="29" class="react-line-number react-code-text" style="padding-right:16px">29</div><div data-line-number="30" class="react-line-number react-code-text" style="padding-right:16px">30</div><div data-line-number="31" class="react-line-number react-code-text" style="padding-right:16px">31</div><div data-line-number="32" class="react-line-number react-code-text" style="padding-right:16px">32<span class="LineNumber-module__codeAlert__WexRo LineNumber-module__codeAlertRight__hdWmf"><div aria-label="Collapse code section" role="button" tabindex="0" class="LineNumber-module__codeFoldingChevron__sY2Yt"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="33" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">33</div><div data-line-number="34" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">34</div><div data-line-number="35" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">35</div><div data-line-number="36" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">36</div><div data-line-number="37" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">37</div><div data-line-number="38" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">38</div><div data-line-number="39" class="child-of-line-31 react-line-number react-code-text" style="padding-right:16px">39</div><div data-line-number="40" class="react-line-number react-code-text" style="padding-right:16px">40</div><div data-line-number="41" class="react-line-number react-code-text" style="padding-right:16px">41</div><div data-line-number="42" class="react-line-number react-code-text" style="padding-right:16px">42</div><div data-line-number="43" class="react-line-number react-code-text" style="padding-right:16px">43<span class="LineNumber-module__codeAlert__WexRo LineNumber-module__codeAlertRight__hdWmf"><div aria-label="Collapse code section" role="button" tabindex="0" class="LineNumber-module__codeFoldingChevron__sY2Yt"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="44" class="child-of-line-42 react-line-number react-code-text" style="padding-right:16px">44</div><div data-line-number="45" class="child-of-line-42 react-line-number react-code-text" style="padding-right:16px">45</div><div data-line-number="46" class="child-of-line-42 react-line-number react-code-text" style="padding-right:16px">46</div><div data-line-number="47" class="react-line-number react-code-text" style="padding-right:16px">47</div><div data-line-number="48" class="react-line-number react-code-text" style="padding-right:16px">48</div><div data-line-number="49" class="react-line-number react-code-text" style="padding-right:16px">49<span class="LineNumber-module__codeAlert__WexRo LineNumber-module__codeAlertRight__hdWmf"><div aria-label="Collapse code section" role="button" tabindex="0" class="LineNumber-module__codeFoldingChevron__sY2Yt"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="50" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">50</div><div data-line-number="51" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">51</div><div data-line-number="52" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">52</div><div data-line-number="53" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">53</div><div data-line-number="54" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">54</div><div data-line-number="55" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">55</div><div data-line-number="56" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">56</div><div data-line-number="57" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">57</div><div data-line-number="58" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">58</div><div data-line-number="59" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">59</div><div data-line-number="60" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">60</div></div><div class="react-no-virtualization-wrapper-lines-ssr"><div data-line-number="61" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">61</div><div data-line-number="62" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">62</div><div data-line-number="63" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">63</div><div data-line-number="64" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">64</div><div data-line-number="65" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">65</div><div data-line-number="66" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">66</div><div data-line-number="67" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">67</div><div data-line-number="68" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">68</div><div data-line-number="69" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">69</div><div data-line-number="70" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">70</div><div data-line-number="71" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">71</div><div data-line-number="72" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">72</div><div data-line-number="73" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">73</div><div data-line-number="74" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">74</div><div data-line-number="75" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">75</div><div data-line-number="76" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">76</div><div data-line-number="77" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">77</div><div data-line-number="78" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">78</div><div data-line-number="79" class="child-of-line-48 react-line-number react-code-text" style="padding-right:16px">79</div><div data-line-number="80" class="react-line-number react-code-text" style="padding-right:16px">80</div><div data-line-number="81" class="react-line-number react-code-text" style="padding-right:16px">81</div><div data-line-number="82" class="react-line-number react-code-text" style="padding-right:16px">82</div><div data-line-number="83" class="react-line-number react-code-text" style="padding-right:16px">83</div><div data-line-number="84" class="react-line-number react-code-text" style="padding-right:16px">84</div><div data-line-number="85" class="react-line-number react-code-text" style="padding-right:16px">85<span class="LineNumber-module__codeAlert__WexRo LineNumber-module__codeAlertRight__hdWmf"><div aria-label="Collapse code section" role="button" tabindex="0" class="LineNumber-module__codeFoldingChevron__sY2Yt"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="86" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">86</div><div data-line-number="87" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">87</div><div data-line-number="88" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">88</div><div data-line-number="89" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">89</div><div data-line-number="90" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">90</div><div data-line-number="91" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">91</div><div data-line-number="92" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">92</div><div data-line-number="93" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">93</div><div data-line-number="94" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">94</div><div data-line-number="95" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">95</div><div data-line-number="96" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">96</div><div data-line-number="97" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">97</div><div data-line-number="98" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">98</div><div data-line-number="99" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">99</div><div data-line-number="100" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">100</div><div data-line-number="101" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">101</div><div data-line-number="102" class="child-of-line-84 react-line-number react-code-text" style="padding-right:16px">102</div><div data-line-number="103" class="react-line-number react-code-text" style="padding-right:16px">103</div><div data-line-number="104" class="react-line-number react-code-text" style="padding-right:16px">104</div><div data-line-number="105" class="react-line-number react-code-text" style="padding-right:16px">105<span class="LineNumber-module__codeAlert__WexRo LineNumber-module__codeAlertRight__hdWmf"><div aria-label="Collapse code section" role="button" tabindex="0" class="LineNumber-module__codeFoldingChevron__sY2Yt"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="106" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">106</div><div data-line-number="107" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">107</div><div data-line-number="108" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">108</div><div data-line-number="109" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">109</div><div data-line-number="110" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">110</div><div data-line-number="111" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">111</div><div data-line-number="112" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">112</div><div data-line-number="113" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">113</div><div data-line-number="114" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">114</div><div data-line-number="115" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">115</div><div data-line-number="116" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">116</div><div data-line-number="117" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">117</div><div data-line-number="118" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">118</div><div data-line-number="119" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">119</div><div data-line-number="120" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">120</div></div><div class="react-no-virtualization-wrapper-lines-ssr"><div data-line-number="121" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">121</div><div data-line-number="122" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">122</div><div data-line-number="123" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">123</div><div data-line-number="124" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">124</div><div data-line-number="125" class="child-of-line-104 react-line-number react-code-text" style="padding-right:16px">125</div><div data-line-number="126" class="react-line-number react-code-text" style="padding-right:16px">126</div><div data-line-number="127" class="react-line-number react-code-text" style="padding-right:16px">127</div><div data-line-number="128" class="react-line-number react-code-text" style="padding-right:16px">128</div><div data-line-number="129" class="react-line-number react-code-text" style="padding-right:16px">129</div><div data-line-number="130" class="react-line-number react-code-text" style="padding-right:16px">130</div><div data-line-number="131" class="react-line-number react-code-text" style="padding-right:16px">131</div><div data-line-number="132" class="react-line-number react-code-text" style="padding-right:16px">132</div><div data-line-number="133" class="react-line-number react-code-text" style="padding-right:16px">133</div><div data-line-number="134" class="react-line-number react-code-text" style="padding-right:16px">134</div><div data-line-number="135" class="react-line-number react-code-text" style="padding-right:16px">135</div><div data-line-number="136" class="react-line-number react-code-text" style="padding-right:16px">136</div><div data-line-number="137" class="react-line-number react-code-text" style="padding-right:16px">137</div><div data-line-number="138" class="react-line-number react-code-text" style="padding-right:16px">138</div><div data-line-number="139" class="react-line-number react-code-text" style="padding-right:16px">139</div><div data-line-number="140" class="react-line-number react-code-text" style="padding-right:16px">140</div><div data-line-number="141" class="react-line-number react-code-text" style="padding-right:16px">141</div><div data-line-number="142" class="react-line-number react-code-text" style="padding-right:16px">142</div><div data-line-number="143" class="react-line-number react-code-text" style="padding-right:16px">143</div><div data-line-number="144" class="react-line-number react-code-text" style="padding-right:16px">144</div><div data-line-number="145" class="react-line-number react-code-text" style="padding-right:16px">145</div><div data-line-number="146" class="react-line-number react-code-text" style="padding-right:16px">146</div><div data-line-number="147" class="react-line-number react-code-text" style="padding-right:16px">147</div><div data-line-number="148" class="react-line-number react-code-text" style="padding-right:16px">148</div><div data-line-number="149" class="react-line-number react-code-text" style="padding-right:16px">149</div><div data-line-number="150" class="react-line-number react-code-text" style="padding-right:16px">150</div><div data-line-number="151" class="react-line-number react-code-text" style="padding-right:16px">151</div><div data-line-number="152" class="react-line-number react-code-text" style="padding-right:16px">152</div><div data-line-number="153" class="react-line-number react-code-text" style="padding-right:16px">153</div><div data-line-number="154" class="react-line-number react-code-text" style="padding-right:16px">154</div><div data-line-number="155" class="react-line-number react-code-text" style="padding-right:16px">155</div><div data-line-number="156" class="react-line-number react-code-text" style="padding-right:16px">156</div><div data-line-number="157" class="react-line-number react-code-text" style="padding-right:16px">157</div><div data-line-number="158" class="react-line-number react-code-text" style="padding-right:16px">158</div><div data-line-number="159" class="react-line-number react-code-text" style="padding-right:16px">159</div><div data-line-number="160" class="react-line-number react-code-text" style="padding-right:16px">160</div><div data-line-number="161" class="react-line-number react-code-text" style="padding-right:16px">161</div><div data-line-number="162" class="react-line-number react-code-text" style="padding-right:16px">162</div><div data-line-number="163" class="react-line-number react-code-text" style="padding-right:16px">163</div><div data-line-number="164" class="react-line-number react-code-text" style="padding-right:16px">164</div><div data-line-number="165" class="react-line-number react-code-text" style="padding-right:16px">165</div><div data-line-number="166" class="react-line-number react-code-text" style="padding-right:16px">166</div><div data-line-number="167" class="react-line-number react-code-text" style="padding-right:16px">167</div><div data-line-number="168" class="react-line-number react-code-text" style="padding-right:16px">168</div><div data-line-number="169" class="react-line-number react-code-text" style="padding-right:16px">169</div><div data-line-number="170" class="react-line-number react-code-text" style="padding-right:16px">170</div><div data-line-number="171" class="react-line-number react-code-text" style="padding-right:16px">171</div><div data-line-number="172" class="react-line-number react-code-text" style="padding-right:16px">172</div><div data-line-number="173" class="react-line-number react-code-text" style="padding-right:16px">173</div><div data-line-number="174" class="react-line-number react-code-text" style="padding-right:16px">174</div><div data-line-number="175" class="react-line-number react-code-text" style="padding-right:16px">175</div><div data-line-number="176" class="react-line-number react-code-text" style="padding-right:16px">176</div><div data-line-number="177" class="react-line-number react-code-text" style="padding-right:16px">177</div><div data-line-number="178" class="react-line-number react-code-text" style="padding-right:16px">178</div><div data-line-number="179" class="react-line-number react-code-text" style="padding-right:16px">179</div><div data-line-number="180" class="react-line-number react-code-text" style="padding-right:16px">180</div></div><div class="react-no-virtualization-wrapper-lines-ssr"><div data-line-number="181" class="react-line-number react-code-text" style="padding-right:16px">181</div><div data-line-number="182" class="react-line-number react-code-text" style="padding-right:16px">182</div><div data-line-number="183" class="react-line-number react-code-text" style="padding-right:16px">183</div><div data-line-number="184" class="react-line-number react-code-text" style="padding-right:16px">184</div><div data-line-number="185" class="react-line-number react-code-text" style="padding-right:16px">185</div><div data-line-number="186" class="react-line-number react-code-text" style="padding-right:16px">186</div><div data-line-number="187" class="react-line-number react-code-text" style="padding-right:16px">187</div><div data-line-number="188" class="react-line-number react-code-text" style="padding-right:16px">188</div><div data-line-number="189" class="react-line-number react-code-text" style="padding-right:16px">189</div><div data-line-number="190" class="react-line-number react-code-text" style="padding-right:16px">190</div><div data-line-number="191" class="react-line-number react-code-text" style="padding-right:16px">191</div><div data-line-number="192" class="react-line-number react-code-text" style="padding-right:16px">192</div><div data-line-number="193" class="react-line-number react-code-text" style="padding-right:16px">193</div><div data-line-number="194" class="react-line-number react-code-text" style="padding-right:16px">194</div><div data-line-number="195" class="react-line-number react-code-text" style="padding-right:16px">195</div><div data-line-number="196" class="react-line-number react-code-text" style="padding-right:16px">196</div><div data-line-number="197" class="react-line-number react-code-text" style="padding-right:16px">197</div><div data-line-number="198" class="react-line-number react-code-text" style="padding-right:16px">198</div><div data-line-number="199" class="react-line-number react-code-text" style="padding-right:16px">199</div><div data-line-number="200" class="react-line-number react-code-text" style="padding-right:16px">200</div><div data-line-number="201" class="react-line-number react-code-text" style="padding-right:16px">201</div><div data-line-number="202" class="react-line-number react-code-text" style="padding-right:16px">202</div><div data-line-number="203" class="react-line-number react-code-text" style="padding-right:16px">203</div><div data-line-number="204" class="react-line-number react-code-text" style="padding-right:16px">204</div><div data-line-number="205" class="react-line-number react-code-text" style="padding-right:16px">205</div><div data-line-number="206" class="react-line-number react-code-text" style="padding-right:16px">206</div><div data-line-number="207" class="react-line-number react-code-text" style="padding-right:16px">207</div><div data-line-number="208" class="react-line-number react-code-text" style="padding-right:16px">208</div><div data-line-number="209" class="react-line-number react-code-text" style="padding-right:16px">209</div></div></div><div class="react-code-lines"><div><div id="LC1" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>import</span> <span class=pl-s1>json</span></div>
|
||
<div id="LC2" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>import</span> <span class=pl-s1>requests</span></div>
|
||
<div id="LC3" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>import</span> <span class=pl-s1>xml</span>.<span class=pl-s1>etree</span>.<span class=pl-v>ElementTree</span> <span class=pl-k>as</span> <span class=pl-c1>ET</span></div>
|
||
<div id="LC4" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>from</span> <span class=pl-s1>xml</span>.<span class=pl-s1>etree</span>.<span class=pl-v>ElementTree</span> <span class=pl-k>import</span> <span class=pl-v>ParseError</span></div>
|
||
<div id="LC5" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>import</span> <span class=pl-s1>os</span></div>
|
||
<div id="LC6" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>import</span> <span class=pl-s1>re</span></div>
|
||
<div id="LC7" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>import</span> <span class=pl-s1>hashlib</span></div>
|
||
<div id="LC8" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>from</span> <span class=pl-s1>datetime</span> <span class=pl-k>import</span> <span class=pl-s1>datetime</span></div>
|
||
<div id="LC9" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC10" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># ==================== 配置区(强制中文名 + Google + 必应关键字全网搜索)====================</span></div>
|
||
<div id="LC11" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># 1. 硬编码经典接口 + 真实中文名</span></div>
|
||
<div id="LC12" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c1>HARDCODED</span> <span class=pl-c1>=</span> [</div>
|
||
<div id="LC13" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.msnii.com/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"美少女资源"</span>},</div>
|
||
<div id="LC14" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.xrbsp.com/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"淫水机资源"</span>},</div>
|
||
<div id="LC15" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.gdlsp.com/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"香奶儿资源"</span>},</div>
|
||
<div id="LC16" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.kxgav.com/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"白嫖资源"</span>},</div>
|
||
<div id="LC17" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.pgxdy.com/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"黄AV资源"</span>},</div>
|
||
<div id="LC18" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.52av.one/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"52AV资源"</span>},</div>
|
||
<div id="LC19" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.avtt.me/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"AVTT资源"</span>},</div>
|
||
<div id="LC20" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://www.afasu.com/api/xml.php"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"小湿妹资源"</span>},</div>
|
||
<div id="LC21" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://apittzy.com/api.php/provide/vod/at/xml"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"探探资源"</span>},</div>
|
||
<div id="LC22" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://api.xiuseapi.com/api.php/provide/vod/at/xml"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"秀色资源"</span>},</div>
|
||
<div id="LC23" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://api.apilyzy.com/api.php/provide/vod/"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"*老鸭资源"</span>},</div>
|
||
<div id="LC24" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://api.kudian70.com/api.php/provide/vod/"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"*酷伦理"</span>},</div>
|
||
<div id="LC25" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://api.ykapi.net/api.php/provide/vod/"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"*影库资源"</span>},</div>
|
||
<div id="LC26" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://cj.apiabzy.com/api.php/provide/vod/"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"*爱播资源"</span>},</div>
|
||
<div id="LC27" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> {<span class=pl-s>"api"</span>: <span class=pl-s>"https://apidanaizi.com/api.php/provide/vod"</span>, <span class=pl-s>"name"</span>: <span class=pl-s>"大奶子资源"</span>},</div>
|
||
<div id="LC28" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-11 "> <span class=pl-c># 如需更多:在 candidates.txt 添加(一行一个 api)</span></div>
|
||
<div id="LC29" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">]</div>
|
||
<div id="LC30" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC31" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># 2. GitHub 智能搜索源列表(Google + 必应关键字全网预采集)</span></div>
|
||
<div id="LC32" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c1>KNOWN_SOURCE_JSONS</span> <span class=pl-c1>=</span> [</div>
|
||
<div id="LC33" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/wwb521/live/refs/heads/main/video.json"</span>,</div>
|
||
<div id="LC34" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/Nancy0308/TVbox-interface/main/tvbox-%E7%A6%8F%E5%88%A9.json"</span>,</div>
|
||
<div id="LC35" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/lllrrr2/TVBOX-franksun1211/main/fuli.json"</span>,</div>
|
||
<div id="LC36" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/shichuanenhui/TvBox/main/jav.json"</span>,</div>
|
||
<div id="LC37" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/cluntop/tvbox/main/fun.json"</span>,</div>
|
||
<div id="LC38" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/qirenzhidao/tvbox18/main/adult.json"</span>,</div>
|
||
<div id="LC39" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-31 "> <span class=pl-s>"https://raw.githubusercontent.com/guxiangbin/tvbox2/main/%E8%9C%82%E7%AA%9D%E6%8E%A5%E5%8F%A3.txt"</span>,</div>
|
||
<div id="LC40" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">]</div>
|
||
<div id="LC41" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC42" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># 全局中文名映射(兜底)</span></div>
|
||
<div id="LC43" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c1>NAME_MAP</span> <span class=pl-c1>=</span> {</div>
|
||
<div id="LC44" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-42 "> <span class=pl-s>"https://www.msnii.com/api/xml.php"</span>: <span class=pl-s>"美少女资源"</span>,</div>
|
||
<div id="LC45" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-42 "> <span class=pl-s>"https://www.xrbsp.com/api/xml.php"</span>: <span class=pl-s>"淫水机资源"</span>,</div>
|
||
<div id="LC46" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-42 "> <span class=pl-c># 与 HARDCODED 保持一致</span></div>
|
||
<div id="LC47" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">}</div>
|
||
<div id="LC48" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC49" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>def</span> <span class=pl-en>discover_apis_from_github_sources</span>():</div>
|
||
<div id="LC50" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>discovered</span> <span class=pl-c1>=</span> []</div>
|
||
<div id="LC51" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-en>print</span>(<span class=pl-s>f"[<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>datetime</span>.<span class=pl-c1>now</span>()<span class=pl-kos>}</span></span>] 开始 Google + 必应关键字全网搜索..."</span>)</div>
|
||
<div id="LC52" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>for</span> <span class=pl-s1>json_url</span> <span class=pl-c1>in</span> <span class=pl-c1>KNOWN_SOURCE_JSONS</span>:</div>
|
||
<div id="LC53" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>try</span>:</div>
|
||
<div id="LC54" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>resp</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>get</span>(<span class=pl-s1>json_url</span>, <span class=pl-s1>timeout</span><span class=pl-c1>=</span><span class=pl-c1>20</span>)</div>
|
||
<div id="LC55" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>resp</span>.<span class=pl-c1>raise_for_status</span>()</div>
|
||
<div id="LC56" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>content</span> <span class=pl-c1>=</span> <span class=pl-s1>resp</span>.<span class=pl-c1>text</span></div>
|
||
<div id="LC57" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>sites</span> <span class=pl-c1>=</span> []</div>
|
||
<div id="LC58" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>if</span> <span class=pl-s1>content</span>.<span class=pl-c1>strip</span>().<span class=pl-c1>startswith</span>(<span class=pl-s>'{'</span>) <span class=pl-c1>or</span> <span class=pl-s1>content</span>.<span class=pl-c1>strip</span>().<span class=pl-c1>startswith</span>(<span class=pl-s>'['</span>):</div>
|
||
<div id="LC59" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>data</span> <span class=pl-c1>=</span> <span class=pl-s1>resp</span>.<span class=pl-c1>json</span>()</div>
|
||
<div id="LC60" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>sites</span> <span class=pl-c1>=</span> <span class=pl-s1>data</span>.<span class=pl-c1>get</span>(<span class=pl-s>"sites"</span>, []) <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>data</span>, <span class=pl-s1>dict</span>) <span class=pl-k>else</span> <span class=pl-s1>data</span> <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>data</span>, <span class=pl-s1>list</span>) <span class=pl-k>else</span> []</div>
|
||
<div id="LC61" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>else</span>:</div>
|
||
<div id="LC62" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>for</span> <span class=pl-s1>line</span> <span class=pl-c1>in</span> <span class=pl-s1>content</span>.<span class=pl-c1>splitlines</span>():</div>
|
||
<div id="LC63" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>api_match</span> <span class=pl-c1>=</span> <span class=pl-s1>re</span>.<span class=pl-c1>search</span>(<span class=pl-s>r'"api"\s*:\s*"([^"]+)"'</span>, <span class=pl-s1>line</span>)</div>
|
||
<div id="LC64" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>name_match</span> <span class=pl-c1>=</span> <span class=pl-s1>re</span>.<span class=pl-c1>search</span>(<span class=pl-s>r'"name"\s*:\s*"([^"]+)"'</span>, <span class=pl-s1>line</span>)</div>
|
||
<div id="LC65" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>if</span> <span class=pl-s1>api_match</span>:</div>
|
||
<div id="LC66" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>api</span> <span class=pl-c1>=</span> <span class=pl-s1>api_match</span>.<span class=pl-c1>group</span>(<span class=pl-c1>1</span>).<span class=pl-c1>strip</span>()</div>
|
||
<div id="LC67" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-s1>name_match</span>.<span class=pl-c1>group</span>(<span class=pl-c1>1</span>).<span class=pl-c1>strip</span>() <span class=pl-k>if</span> <span class=pl-s1>name_match</span> <span class=pl-k>else</span> <span class=pl-c1>None</span></div>
|
||
<div id="LC68" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>sites</span>.<span class=pl-c1>append</span>({<span class=pl-s>"api"</span>: <span class=pl-s1>api</span>, <span class=pl-s>"name"</span>: <span class=pl-s1>name</span>})</div>
|
||
<div id="LC69" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>for</span> <span class=pl-s1>site</span> <span class=pl-c1>in</span> <span class=pl-s1>sites</span>:</div>
|
||
<div id="LC70" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>api</span> <span class=pl-c1>=</span> <span class=pl-s1>site</span>.<span class=pl-c1>get</span>(<span class=pl-s>"api"</span>) <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>site</span>, <span class=pl-s1>dict</span>) <span class=pl-k>else</span> <span class=pl-s1>site</span></div>
|
||
<div id="LC71" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>api</span>, <span class=pl-s1>str</span>) <span class=pl-c1>or</span> <span class=pl-c1>not</span> <span class=pl-s1>api</span>:</div>
|
||
<div id="LC72" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>continue</span></div>
|
||
<div id="LC73" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>if</span> <span class=pl-en>any</span>(<span class=pl-s1>k</span> <span class=pl-c1>in</span> <span class=pl-s1>api</span>.<span class=pl-c1>lower</span>() <span class=pl-k>for</span> <span class=pl-s1>k</span> <span class=pl-c1>in</span> [<span class=pl-s>"/xml.php"</span>, <span class=pl-s>"/vod/xml"</span>, <span class=pl-s>"/cjapi"</span>, <span class=pl-s>"api.php/provide/vod"</span>, <span class=pl-s>"inc/api"</span>]):</div>
|
||
<div id="LC74" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-s1>site</span>.<span class=pl-c1>get</span>(<span class=pl-s>"name"</span>) <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>site</span>, <span class=pl-s1>dict</span>) <span class=pl-k>else</span> <span class=pl-c1>NAME_MAP</span>.<span class=pl-c1>get</span>(<span class=pl-s1>api</span>)</div>
|
||
<div id="LC75" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-s1>discovered</span>.<span class=pl-c1>append</span>({<span class=pl-s>"api"</span>: <span class=pl-s1>api</span>.<span class=pl-c1>strip</span>(), <span class=pl-s>"name"</span>: <span class=pl-s1>name</span> <span class=pl-c1>or</span> <span class=pl-s>"未知成人源"</span>})</div>
|
||
<div id="LC76" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-en>print</span>(<span class=pl-s>f" ✅ 从 <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>json_url</span>.<span class=pl-c1>split</span>(<span class=pl-s>'/'</span>)[<span class=pl-c1>3</span>]<span class=pl-kos>}</span></span>/<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>json_url</span>.<span class=pl-c1>split</span>(<span class=pl-s>'/'</span>)[<span class=pl-c1>-</span><span class=pl-c1>1</span>]<span class=pl-kos>}</span></span> 提取接口"</span>)</div>
|
||
<div id="LC77" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-k>except</span> <span class=pl-v>Exception</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</div>
|
||
<div id="LC78" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-en>print</span>(<span class=pl-s>f" ⚠️ 跳过源 <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>json_url</span><span class=pl-kos>}</span></span>: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>"</span>)</div>
|
||
<div id="LC79" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-48 "> <span class=pl-en>print</span>(<span class=pl-s>f"[<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>datetime</span>.<span class=pl-c1>now</span>()<span class=pl-kos>}</span></span>] 全网搜索完成,共发现 <span class=pl-s1><span class=pl-kos>{</span><span class=pl-en>len</span>(<span class=pl-s1>discovered</span>)<span class=pl-kos>}</span></span> 个潜在接口"</span>)</div>
|
||
<div id="LC80" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>return</span> <span class=pl-s1>discovered</span></div>
|
||
<div id="LC81" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC82" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># ==================== 模板 & 测试(不变)====================</span></div>
|
||
<div id="LC83" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c1>TEMPLATE_URL</span> <span class=pl-c1>=</span> <span class=pl-s>"https://raw.githubusercontent.com/wwb521/live/refs/heads/main/video.json"</span></div>
|
||
<div id="LC84" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC85" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>def</span> <span class=pl-en>load_template</span>():</div>
|
||
<div id="LC86" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>if</span> <span class=pl-s1>os</span>.<span class=pl-c1>path</span>.<span class=pl-c1>exists</span>(<span class=pl-s>"video.json"</span>):</div>
|
||
<div id="LC87" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>try</span>:</div>
|
||
<div id="LC88" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>with</span> <span class=pl-en>open</span>(<span class=pl-s>"video.json"</span>, <span class=pl-s>"r"</span>, <span class=pl-s1>encoding</span><span class=pl-c1>=</span><span class=pl-s>"utf-8"</span>) <span class=pl-k>as</span> <span class=pl-s1>f</span>:</div>
|
||
<div id="LC89" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-s1>data</span> <span class=pl-c1>=</span> <span class=pl-s1>json</span>.<span class=pl-c1>load</span>(<span class=pl-s1>f</span>)</div>
|
||
<div id="LC90" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-en>print</span>(<span class=pl-s>"✅ 从本地 video.json 加载模板成功"</span>)</div>
|
||
<div id="LC91" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>return</span> <span class=pl-s1>data</span></div>
|
||
<div id="LC92" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>except</span> <span class=pl-s1>json</span>.<span class=pl-c1>JSONDecodeError</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</div>
|
||
<div id="LC93" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-en>print</span>(<span class=pl-s>f"⚠️ 本地 video.json 损坏 (<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>) → 自动拉取"</span>)</div>
|
||
<div id="LC94" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>except</span> <span class=pl-v>Exception</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</div>
|
||
<div id="LC95" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-en>print</span>(<span class=pl-s>f"⚠️ 本地异常 (<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>) → 自动拉取"</span>)</div>
|
||
<div id="LC96" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-en>print</span>(<span class=pl-s>"📥 从官方模板拉取..."</span>)</div>
|
||
<div id="LC97" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-s1>resp</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>get</span>(<span class=pl-c1>TEMPLATE_URL</span>, <span class=pl-s1>timeout</span><span class=pl-c1>=</span><span class=pl-c1>30</span>)</div>
|
||
<div id="LC98" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-s1>resp</span>.<span class=pl-c1>raise_for_status</span>()</div>
|
||
<div id="LC99" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-s1>data</span> <span class=pl-c1>=</span> <span class=pl-s1>resp</span>.<span class=pl-c1>json</span>()</div>
|
||
<div id="LC100" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-k>with</span> <span class=pl-en>open</span>(<span class=pl-s>"video.json"</span>, <span class=pl-s>"w"</span>, <span class=pl-s1>encoding</span><span class=pl-c1>=</span><span class=pl-s>"utf-8"</span>) <span class=pl-k>as</span> <span class=pl-s1>f</span>:</div>
|
||
<div id="LC101" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-s1>json</span>.<span class=pl-c1>dump</span>(<span class=pl-s1>data</span>, <span class=pl-s1>f</span>, <span class=pl-s1>ensure_ascii</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>indent</span><span class=pl-c1>=</span><span class=pl-c1>2</span>)</div>
|
||
<div id="LC102" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-84 "> <span class=pl-en>print</span>(<span class=pl-s>"✅ 已自动修复并保存官方模板"</span>)</div>
|
||
<div id="LC103" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>return</span> <span class=pl-s1>data</span></div>
|
||
<div id="LC104" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC105" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>def</span> <span class=pl-en>test_api</span>(<span class=pl-s1>api_url</span>: <span class=pl-smi>str</span>) <span class=pl-c1>-></span> <span class=pl-smi>bool</span>:</div>
|
||
<div id="LC106" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-s1>headers</span> <span class=pl-c1>=</span> {<span class=pl-s>"User-Agent"</span>: <span class=pl-s>"Mozilla/5.0 (compatible; TVBox-Bot/1.0; +https://github.com/your-repo)"</span>}</div>
|
||
<div id="LC107" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>try</span>:</div>
|
||
<div id="LC108" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-s1>resp</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>get</span>(<span class=pl-s1>api_url</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-s1>headers</span>, <span class=pl-s1>timeout</span><span class=pl-c1>=</span><span class=pl-c1>15</span>)</div>
|
||
<div id="LC109" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>if</span> <span class=pl-s1>resp</span>.<span class=pl-c1>status_code</span> <span class=pl-c1>!=</span> <span class=pl-c1>200</span>:</div>
|
||
<div id="LC110" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>return</span> <span class=pl-c1>False</span></div>
|
||
<div id="LC111" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-s1>content</span> <span class=pl-c1>=</span> <span class=pl-s1>resp</span>.<span class=pl-c1>text</span>.<span class=pl-c1>strip</span>()</div>
|
||
<div id="LC112" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>content</span> <span class=pl-c1>or</span> <span class=pl-c1>not</span> <span class=pl-s1>content</span>.<span class=pl-c1>startswith</span>(<span class=pl-s>"<"</span>):</div>
|
||
<div id="LC113" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>return</span> <span class=pl-c1>False</span></div>
|
||
<div id="LC114" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>try</span>:</div>
|
||
<div id="LC115" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-s1>root</span> <span class=pl-c1>=</span> <span class=pl-c1>ET</span>.<span class=pl-c1>fromstring</span>(<span class=pl-s1>content</span>.<span class=pl-c1>encode</span>(<span class=pl-s>"utf-8"</span>))</div>
|
||
<div id="LC116" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>if</span> (<span class=pl-s1>root</span>.<span class=pl-c1>tag</span> <span class=pl-c1>==</span> <span class=pl-s>"rss"</span> <span class=pl-c1>or</span> <span class=pl-s1>root</span>.<span class=pl-c1>find</span>(<span class=pl-s>"channel"</span>) <span class=pl-c1><span class=pl-c1>is</span> <span class=pl-c1>not</span></span> <span class=pl-c1>None</span> <span class=pl-c1>or</span></div>
|
||
<div id="LC117" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-s1>root</span>.<span class=pl-c1>findall</span>(<span class=pl-s>".//category"</span>) <span class=pl-c1>or</span> <span class=pl-s1>root</span>.<span class=pl-c1>findall</span>(<span class=pl-s>".//video"</span>) <span class=pl-c1>or</span> <span class=pl-s1>root</span>.<span class=pl-c1>findall</span>(<span class=pl-s>".//list"</span>)):</div>
|
||
<div id="LC118" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>return</span> <span class=pl-c1>True</span></div>
|
||
<div id="LC119" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>except</span> <span class=pl-v>ParseError</span>:</div>
|
||
<div id="LC120" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-s1>lower</span> <span class=pl-c1>=</span> <span class=pl-s1>content</span>.<span class=pl-c1>lower</span>()</div>
|
||
<div id="LC121" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>if</span> <span class=pl-en>any</span>(<span class=pl-s1>k</span> <span class=pl-c1>in</span> <span class=pl-s1>lower</span> <span class=pl-k>for</span> <span class=pl-s1>k</span> <span class=pl-c1>in</span> [<span class=pl-s>"rss"</span>, <span class=pl-s>"channel"</span>, <span class=pl-s>"category"</span>, <span class=pl-s>"video"</span>, <span class=pl-s>"list"</span>]):</div>
|
||
<div id="LC122" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>return</span> <span class=pl-c1>True</span></div>
|
||
<div id="LC123" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>return</span> <span class=pl-c1>False</span></div>
|
||
<div id="LC124" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-k>except</span> <span class=pl-v>Exception</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</div>
|
||
<div id="LC125" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div child-of-line-104 "> <span class=pl-en>print</span>(<span class=pl-s>f"[<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>datetime</span>.<span class=pl-c1>now</span>()<span class=pl-kos>}</span></span>] 测试失败 <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>api_url</span><span class=pl-kos>}</span></span>: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>"</span>)</div>
|
||
<div id="LC126" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>return</span> <span class=pl-c1>False</span></div>
|
||
<div id="LC127" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC128" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># ==================== 主逻辑 + GitHub raw 直链输出 ====================</span></div>
|
||
<div id="LC129" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>f"[<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>datetime</span>.<span class=pl-c1>now</span>()<span class=pl-kos>}</span></span>] 开始每日色情接口更新(强制中文名 + GitHub raw 直链)..."</span>)</div>
|
||
<div id="LC130" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC131" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>data</span> <span class=pl-c1>=</span> <span class=pl-en>load_template</span>()</div>
|
||
<div id="LC132" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>github_apis</span> <span class=pl-c1>=</span> <span class=pl-en>discover_apis_from_github_sources</span>()</div>
|
||
<div id="LC133" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC134" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>candidates_from_txt</span> <span class=pl-c1>=</span> []</div>
|
||
<div id="LC135" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>if</span> <span class=pl-s1>os</span>.<span class=pl-c1>path</span>.<span class=pl-c1>exists</span>(<span class=pl-s>"candidates.txt"</span>):</div>
|
||
<div id="LC136" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>with</span> <span class=pl-en>open</span>(<span class=pl-s>"candidates.txt"</span>, <span class=pl-s>"r"</span>, <span class=pl-s1>encoding</span><span class=pl-c1>=</span><span class=pl-s>"utf-8"</span>) <span class=pl-k>as</span> <span class=pl-s1>f</span>:</div>
|
||
<div id="LC137" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>candidates_from_txt</span> <span class=pl-c1>=</span> [<span class=pl-s1>line</span>.<span class=pl-c1>strip</span>() <span class=pl-k>for</span> <span class=pl-s1>line</span> <span class=pl-c1>in</span> <span class=pl-s1>f</span> <span class=pl-k>if</span> <span class=pl-s1>line</span>.<span class=pl-c1>strip</span>() <span class=pl-c1>and</span> <span class=pl-c1>not</span> <span class=pl-s1>line</span>.<span class=pl-c1>startswith</span>(<span class=pl-s>"#"</span>)]</div>
|
||
<div id="LC138" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-en>print</span>(<span class=pl-s>f"从 candidates.txt 读取 <span class=pl-s1><span class=pl-kos>{</span><span class=pl-en>len</span>(<span class=pl-s1>candidates_from_txt</span>)<span class=pl-kos>}</span></span> 个额外接口"</span>)</div>
|
||
<div id="LC139" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC140" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>seen</span> <span class=pl-c1>=</span> <span class=pl-en>set</span>()</div>
|
||
<div id="LC141" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>all_candidates</span> <span class=pl-c1>=</span> []</div>
|
||
<div id="LC142" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>for</span> <span class=pl-s1>item</span> <span class=pl-c1>in</span> <span class=pl-c1>HARDCODED</span> <span class=pl-c1>+</span> <span class=pl-s1>github_apis</span>:</div>
|
||
<div id="LC143" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>api</span> <span class=pl-c1>=</span> <span class=pl-s1>item</span>[<span class=pl-s>"api"</span>]</div>
|
||
<div id="LC144" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>if</span> <span class=pl-s1>api</span> <span class=pl-c1>in</span> <span class=pl-s1>seen</span>:</div>
|
||
<div id="LC145" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>continue</span></div>
|
||
<div id="LC146" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>seen</span>.<span class=pl-c1>add</span>(<span class=pl-s1>api</span>)</div>
|
||
<div id="LC147" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>all_candidates</span>.<span class=pl-c1>append</span>(<span class=pl-s1>item</span>)</div>
|
||
<div id="LC148" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC149" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>for</span> <span class=pl-s1>url</span> <span class=pl-c1>in</span> <span class=pl-s1>candidates_from_txt</span>:</div>
|
||
<div id="LC150" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>if</span> <span class=pl-s1>url</span> <span class=pl-c1><span class=pl-c1>not</span> <span class=pl-c1>in</span></span> <span class=pl-s1>seen</span>:</div>
|
||
<div id="LC151" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>seen</span>.<span class=pl-c1>add</span>(<span class=pl-s1>url</span>)</div>
|
||
<div id="LC152" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>all_candidates</span>.<span class=pl-c1>append</span>({<span class=pl-s>"api"</span>: <span class=pl-s1>url</span>, <span class=pl-s>"name"</span>: <span class=pl-c1>NAME_MAP</span>.<span class=pl-c1>get</span>(<span class=pl-s1>url</span>) <span class=pl-c1>or</span> <span class=pl-s>"未知成人源"</span>})</div>
|
||
<div id="LC153" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC154" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>working_sites</span> <span class=pl-c1>=</span> []</div>
|
||
<div id="LC155" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>for</span> <span class=pl-s1>item</span> <span class=pl-c1>in</span> <span class=pl-s1>data</span>.<span class=pl-c1>get</span>(<span class=pl-s>"sites"</span>, []) <span class=pl-c1>+</span> <span class=pl-s1>all_candidates</span>:</div>
|
||
<div id="LC156" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>api</span> <span class=pl-c1>=</span> <span class=pl-s1>item</span>.<span class=pl-c1>get</span>(<span class=pl-s>"api"</span>) <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>item</span>, <span class=pl-s1>dict</span>) <span class=pl-k>else</span> <span class=pl-s1>item</span></div>
|
||
<div id="LC157" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>api</span> <span class=pl-c1>or</span> <span class=pl-s1>api</span> <span class=pl-c1>in</span> [<span class=pl-s1>s</span>.<span class=pl-c1>get</span>(<span class=pl-s>"api"</span>) <span class=pl-k>for</span> <span class=pl-s1>s</span> <span class=pl-c1>in</span> <span class=pl-s1>working_sites</span>]:</div>
|
||
<div id="LC158" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>continue</span></div>
|
||
<div id="LC159" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-s1>item</span>.<span class=pl-c1>get</span>(<span class=pl-s>"name"</span>) <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>item</span>, <span class=pl-s1>dict</span>) <span class=pl-k>else</span> <span class=pl-c1>NAME_MAP</span>.<span class=pl-c1>get</span>(<span class=pl-s1>api</span>)</div>
|
||
<div id="LC160" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>name</span> <span class=pl-c1>or</span> <span class=pl-s1>name</span>.<span class=pl-c1>startswith</span>(<span class=pl-s>"http"</span>):</div>
|
||
<div id="LC161" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-c1>NAME_MAP</span>.<span class=pl-c1>get</span>(<span class=pl-s1>api</span>, <span class=pl-s1>api</span>.<span class=pl-c1>split</span>(<span class=pl-s>"/"</span>)[<span class=pl-c1>2</span>].<span class=pl-c1>replace</span>(<span class=pl-s>"www."</span>, <span class=pl-s>""</span>).<span class=pl-c1>replace</span>(<span class=pl-s>".com"</span>, <span class=pl-s>""</span>))</div>
|
||
<div id="LC162" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-en>print</span>(<span class=pl-s>f"测试接口: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>api</span><span class=pl-kos>}</span></span> (名称: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>name</span><span class=pl-kos>}</span></span>)"</span>)</div>
|
||
<div id="LC163" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>if</span> <span class=pl-en>test_api</span>(<span class=pl-s1>api</span>):</div>
|
||
<div id="LC164" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>site_dict</span> <span class=pl-c1>=</span> {</div>
|
||
<div id="LC165" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"key"</span>: <span class=pl-s1>name</span>[:<span class=pl-c1>20</span>],</div>
|
||
<div id="LC166" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"name"</span>: <span class=pl-s1>name</span>,</div>
|
||
<div id="LC167" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"type"</span>: <span class=pl-c1>0</span>,</div>
|
||
<div id="LC168" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"api"</span>: <span class=pl-s1>api</span>,</div>
|
||
<div id="LC169" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"searchable"</span>: <span class=pl-c1>1</span>,</div>
|
||
<div id="LC170" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"quickSearch"</span>: <span class=pl-c1>1</span>,</div>
|
||
<div id="LC171" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s>"filterable"</span>: <span class=pl-c1>1</span></div>
|
||
<div id="LC172" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> }</div>
|
||
<div id="LC173" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-k>if</span> <span class=pl-en>isinstance</span>(<span class=pl-s1>item</span>, <span class=pl-s1>dict</span>):</div>
|
||
<div id="LC174" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>site_dict</span>.<span class=pl-c1>update</span>({<span class=pl-s1>k</span>: <span class=pl-s1>v</span> <span class=pl-k>for</span> <span class=pl-s1>k</span>, <span class=pl-s1>v</span> <span class=pl-c1>in</span> <span class=pl-s1>item</span>.<span class=pl-c1>items</span>() <span class=pl-k>if</span> <span class=pl-s1>k</span> <span class=pl-c1><span class=pl-c1>not</span> <span class=pl-c1>in</span></span> [<span class=pl-s>"key"</span>, <span class=pl-s>"name"</span>, <span class=pl-s>"api"</span>]})</div>
|
||
<div id="LC175" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>working_sites</span>.<span class=pl-c1>append</span>(<span class=pl-s1>site_dict</span>)</div>
|
||
<div id="LC176" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-en>print</span>(<span class=pl-s>f"✅ 可用: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>api</span><span class=pl-kos>}</span></span> → <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>name</span><span class=pl-kos>}</span></span>"</span>)</div>
|
||
<div id="LC177" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC178" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>data</span>[<span class=pl-s>"sites"</span>] <span class=pl-c1>=</span> <span class=pl-s1>working_sites</span></div>
|
||
<div id="LC179" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC180" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># 保存 video.json</span></div>
|
||
<div id="LC181" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>with</span> <span class=pl-en>open</span>(<span class=pl-s>"video.json"</span>, <span class=pl-s>"w"</span>, <span class=pl-s1>encoding</span><span class=pl-c1>=</span><span class=pl-s>"utf-8"</span>) <span class=pl-k>as</span> <span class=pl-s1>f</span>:</div>
|
||
<div id="LC182" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>json</span>.<span class=pl-c1>dump</span>(<span class=pl-s1>data</span>, <span class=pl-s1>f</span>, <span class=pl-s1>ensure_ascii</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>indent</span><span class=pl-c1>=</span><span class=pl-c1>2</span>)</div>
|
||
<div id="LC183" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>f"✅ video.json 已保存!可用接口数量: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-en>len</span>(<span class=pl-s1>working_sites</span>)<span class=pl-kos>}</span></span>"</span>)</div>
|
||
<div id="LC184" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC185" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># 生成 index.js(CatVod 专用)</span></div>
|
||
<div id="LC186" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>index_js_content</span> <span class=pl-c1>=</span> <span class=pl-s>f'var config = <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>json</span>.<span class=pl-c1>dumps</span>(<span class=pl-s1>data</span>, <span class=pl-s1>ensure_ascii</span><span class=pl-c1>=</span><span class=pl-c1>False</span>)<span class=pl-kos>}</span></span>;<span class=pl-cce>\n</span>'</span></div>
|
||
<div id="LC187" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>with</span> <span class=pl-en>open</span>(<span class=pl-s>"index.js"</span>, <span class=pl-s>"w"</span>, <span class=pl-s1>encoding</span><span class=pl-c1>=</span><span class=pl-s>"utf-8"</span>) <span class=pl-k>as</span> <span class=pl-s1>f</span>:</div>
|
||
<div id="LC188" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>f</span>.<span class=pl-c1>write</span>(<span class=pl-s1>index_js_content</span>)</div>
|
||
<div id="LC189" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>"✅ index.js 已生成"</span>)</div>
|
||
<div id="LC190" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC191" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># 生成 index.js.md5</span></div>
|
||
<div id="LC192" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>md5_hash</span> <span class=pl-c1>=</span> <span class=pl-s1>hashlib</span>.<span class=pl-c1>md5</span>(<span class=pl-s1>index_js_content</span>.<span class=pl-c1>encode</span>(<span class=pl-s>"utf-8"</span>)).<span class=pl-c1>hexdigest</span>()</div>
|
||
<div id="LC193" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-k>with</span> <span class=pl-en>open</span>(<span class=pl-s>"index.js.md5"</span>, <span class=pl-s>"w"</span>, <span class=pl-s1>encoding</span><span class=pl-c1>=</span><span class=pl-s>"utf-8"</span>) <span class=pl-k>as</span> <span class=pl-s1>f</span>:</div>
|
||
<div id="LC194" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "> <span class=pl-s1>f</span>.<span class=pl-c1>write</span>(<span class=pl-s1>md5_hash</span>)</div>
|
||
<div id="LC195" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>f"✅ index.js.md5 已生成(MD5: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>md5_hash</span><span class=pl-kos>}</span></span>)"</span>)</div>
|
||
<div id="LC196" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC197" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-c># ==================== 输出 GitHub raw 直链(核心升级)===================</span></div>
|
||
<div id="LC198" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>repo</span> <span class=pl-c1>=</span> <span class=pl-s1>os</span>.<span class=pl-c1>getenv</span>(<span class=pl-s>"GITHUB_REPOSITORY"</span>, <span class=pl-s>"你的用户名/你的仓库名"</span>) <span class=pl-c># Actions 自动填充</span></div>
|
||
<div id="LC199" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>branch</span> <span class=pl-c1>=</span> <span class=pl-s1>os</span>.<span class=pl-c1>getenv</span>(<span class=pl-s>"GITHUB_REF_NAME"</span>, <span class=pl-s>"main"</span>)</div>
|
||
<div id="LC200" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>raw_url</span> <span class=pl-c1>=</span> <span class=pl-s>f"https://raw.githubusercontent.com/<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>repo</span><span class=pl-kos>}</span></span>/refs/heads/<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>branch</span><span class=pl-kos>}</span></span>/index.js.md5"</span></div>
|
||
<div id="LC201" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-s1>proxy_url</span> <span class=pl-c1>=</span> <span class=pl-s>f"https://ghproxy.com/<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>raw_url</span><span class=pl-kos>}</span></span>"</span></div>
|
||
<div id="LC202" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC203" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>"<span class=pl-cce>\n</span>🎉 === 最终可直接使用的地址(复制到 TVBox / 猫影视即可)==="</span>)</div>
|
||
<div id="LC204" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>f"✅ GitHub 官方直链(推荐):<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>raw_url</span><span class=pl-kos>}</span></span>"</span>)</div>
|
||
<div id="LC205" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>f"🌍 国内加速版(ghproxy):<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>proxy_url</span><span class=pl-kos>}</span></span>"</span>)</div>
|
||
<div id="LC206" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>" → 把上面任意一个地址粘贴到猫影视「配置地址」即可!"</span>)</div>
|
||
<div id="LC207" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>" → 每日自动更新,无需服务器,无需手动上传!"</span>)</div>
|
||
<div id="LC208" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div ">
|
||
</div>
|
||
<div id="LC209" class="react-code-text react-code-line-contents-no-virtualization react-file-line html-div "><span class=pl-en>print</span>(<span class=pl-s>f"<span class=pl-cce>\n</span>✅ 所有文件已自动 push 到你的仓库,刷新 https://github.com/<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>repo</span><span class=pl-kos>}</span></span> 即可看到 video.json / index.js / index.js.md5"</span>)</div></div></div></div></div><div id="copilot-button-container"></div></div><div id="highlighted-line-menu-container"></div></div></div><div class="d-none"></div></section></div></div><div class="BlobViewContent-module__symbolsPanelSpacer__Vuo_9"></div><div class="Panel-module__Box__AdYCI panel-content-narrow-styles inner-panel-content-not-narrow" style="top:0px;z-index:4;background:var(--bgColor-default, var(--color-canvas-default));position:sticky"><div id="symbols-pane"><div style="display:contents"><div class="CodeNavSymbolNavigation-module__container__kfSZY" aria-labelledby="symbols-pane-header"><div class="CodeNavSymbolNavigation-module__headerRow__HVKGZ"><h2 class="CodeNavSymbolNavigation-module__headerTitle__e4wuX" id="symbols-pane-header" tabindex="-1">Symbols</h2><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk CodeNavSymbolNavigation-module__closeButton__XOIhD prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_hmklal3al1d_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-x" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="w" aria-hidden="true" id="_R_hmklal3al1d_">Close symbols</span></div><p class="CodeNavSymbolNavigation-module__description__n1e85">Find definitions and references for functions and other symbols in this file by clicking a symbol below or in the code.</p><span class="CodeNavSymbolNavigation-module__filterInput__DQChX TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-block="true" data-trailing-action="true" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_3mklal3al1d_" aria-hidden="true"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-filter" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M.75 3h14.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5ZM3 7.75A.75.75 0 0 1 3.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 3 7.75Zm3 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></svg></span><input type="text" placeholder="Filter symbols" aria-label="Filter symbols" aria-controls="filter-results" aria-expanded="true" aria-autocomplete="list" role="combobox" aria-describedby="_R_3mklal3al1d_ _R_3mklal3al1dH1_" data-component="input" class="prc-components-Input-IwWrt" name="Filter symbols" value=""/><span class="TextInput-icon" id="_R_3mklal3al1dH1_" aria-hidden="true"><span class="CodeNavSymbolNavigation-module__shortcutsBox__oT2Mn"><kbd class="prc-KeybindingHint-KeybindingHint-qpYIs prc-Text-Text-9mHv3" data-testid="keybinding-hint"><span class="prc-components-Chord-DdhWN prc-components-ChordNormal-Ov9XG prc-Text-Text-9mHv3" data-kbd-chord="true"> <span class="prc-src-InternalVisuallyHidden-2YaI6">r</span><span aria-hidden="true">R</span></span></kbd></span></span></span><div class="CodeNavSymbolNavigation-module__treeWrapper__b4i2M"><div id="filter-results" class="CodeNavSymbolTree-module__filterResults__tenjX"><span class="prc-src-InternalVisuallyHidden-2YaI6"><div></div></span><ul role="tree" aria-label="Code Navigation" data-omit-spacer="true" data-truncate-text="true" class="prc-TreeView-TreeViewRootUlStyles-Mzrmj"><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="0HARDCODED" role="treeitem" aria-labelledby="_R_1kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_1kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="HARDCODED" style="--truncate-max-width:125px"><span>HARDCODED</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="1KNOWN_SOURCE_JSONS" role="treeitem" aria-labelledby="_R_2kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_2kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="KNOWN_SOURCE_JSONS" style="--truncate-max-width:125px"><span>KNOWN_SOURCE_JSONS</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="2NAME_MAP" role="treeitem" aria-labelledby="_R_3kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_3kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="NAME_MAP" style="--truncate-max-width:125px"><span>NAME_MAP</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="3discover_apis_from_github_sources" role="treeitem" aria-labelledby="_R_4kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_4kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.entity"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.entity">func</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="discover_apis_from_github_sources" style="--truncate-max-width:125px"><span>discover_apis_from_github_sources</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="4TEMPLATE_URL" role="treeitem" aria-labelledby="_R_5kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_5kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="TEMPLATE_URL" style="--truncate-max-width:125px"><span>TEMPLATE_URL</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="5load_template" role="treeitem" aria-labelledby="_R_6kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_6kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.entity"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.entity">func</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="load_template" style="--truncate-max-width:125px"><span>load_template</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="6test_api" role="treeitem" aria-labelledby="_R_7kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_7kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.entity"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.entity">func</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="test_api" style="--truncate-max-width:125px"><span>test_api</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="7data" role="treeitem" aria-labelledby="_R_8kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_8kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="data" style="--truncate-max-width:125px"><span>data</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="8github_apis" role="treeitem" aria-labelledby="_R_9kmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_9kmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="github_apis" style="--truncate-max-width:125px"><span>github_apis</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="9candidates_from_txt" role="treeitem" aria-labelledby="_R_akmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_akmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="candidates_from_txt" style="--truncate-max-width:125px"><span>candidates_from_txt</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="10seen" role="treeitem" aria-labelledby="_R_bkmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_bkmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="seen" style="--truncate-max-width:125px"><span>seen</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="11all_candidates" role="treeitem" aria-labelledby="_R_ckmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_ckmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="all_candidates" style="--truncate-max-width:125px"><span>all_candidates</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="12working_sites" role="treeitem" aria-labelledby="_R_dkmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_dkmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="working_sites" style="--truncate-max-width:125px"><span>working_sites</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="13index_js_content" role="treeitem" aria-labelledby="_R_ekmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_ekmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="index_js_content" style="--truncate-max-width:125px"><span>index_js_content</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="14md5_hash" role="treeitem" aria-labelledby="_R_fkmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_fkmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="md5_hash" style="--truncate-max-width:125px"><span>md5_hash</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="15repo" role="treeitem" aria-labelledby="_R_gkmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_gkmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="repo" style="--truncate-max-width:125px"><span>repo</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="16branch" role="treeitem" aria-labelledby="_R_hkmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_hkmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="branch" style="--truncate-max-width:125px"><span>branch</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="17raw_url" role="treeitem" aria-labelledby="_R_ikmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_ikmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="raw_url" style="--truncate-max-width:125px"><span>raw_url</span></div></div></span></div></div></li><li class="PRIVATE_TreeView-item prc-TreeView-TreeViewItem-Ter5f" tabindex="0" id="18proxy_url" role="treeitem" aria-labelledby="_R_jkmklal3al1d_" aria-level="1" aria-selected="false"><div class="PRIVATE_TreeView-item-container prc-TreeView-TreeViewItemContainer-z6qqQ" style="--level:1"><div style="grid-area:spacer;display:flex"><div style="width:100%;display:flex"></div></div><div id="_R_jkmklal3al1d_" class="PRIVATE_TreeView-item-content prc-TreeView-TreeViewItemContent-RKsCI"><span class="PRIVATE_TreeView-item-content-text prc-TreeView-TreeViewItemContentText-FFaKp"><div class="CodeNavSymbolTree-module__treeContent__opWeK"><div class="SymbolIndicator-module__symbolWrapper__mSRj8 SymbolIndicator-module__symbolWrapperCompact__UNWj3"><div class="SymbolIndicator-module__symbolBackground__tphNO" style="background-color:prettylights.syntax.variable"></div><div class="SymbolIndicator-module__symbolLabel__qg6oQ SymbolIndicator-module__symbolLabelSmall__rzeMO" style="color:prettylights.syntax.variable">const</div></div> <div class="CodeNavSymbolTree-module__truncate__GO8ge prc-Truncate-Truncate-2G1eo" title="proxy_url" style="--truncate-max-width:125px"><span>proxy_url</span></div></div></span></div></div></li></ul></div></div></div></div></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA__R_1___">{"resolvedServerColorMode":"day"}</script></div>
|
||
</react-app>
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</turbo-frame>
|
||
|
||
</main>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<footer class="footer tmp-pt-7 tmp-pb-6 f6 color-fg-muted color-border-subtle p-responsive" role="contentinfo" >
|
||
<h2 class='sr-only'>Footer</h2>
|
||
|
||
|
||
|
||
|
||
<div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
|
||
<div class="d-flex flex-items-center flex-shrink-0 mx-2">
|
||
<a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
|
||
<svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
|
||
<path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
|
||
</svg>
|
||
</a>
|
||
<span>
|
||
© 2026 GitHub, Inc.
|
||
</span>
|
||
</div>
|
||
|
||
<nav aria-label="Footer">
|
||
<h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>
|
||
|
||
<ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">
|
||
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to Terms","label":"text:terms"}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to community","label":"text:community"}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to docs","label":"text:docs"}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<a data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
|
||
</li>
|
||
|
||
<li class="mx-2" >
|
||
<cookie-consent-link>
|
||
<button
|
||
type="button"
|
||
class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
|
||
data-action="click:cookie-consent-link#showConsentManagement"
|
||
data-analytics-event="{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}"
|
||
>
|
||
Manage cookies
|
||
</button>
|
||
</cookie-consent-link>
|
||
</li>
|
||
|
||
<li class="mx-2">
|
||
<cookie-consent-link>
|
||
<button
|
||
type="button"
|
||
class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
|
||
data-action="click:cookie-consent-link#showConsentManagement"
|
||
data-analytics-event="{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}"
|
||
>
|
||
Do not share my personal information
|
||
</button>
|
||
</cookie-consent-link>
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</footer>
|
||
|
||
|
||
|
||
<ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
|
||
data-locale="en"
|
||
data-initial-cookie-consent-allowed=""
|
||
data-cookie-consent-required="false"
|
||
></ghcc-consent>
|
||
|
||
|
||
|
||
|
||
<div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
|
||
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
|
||
</svg>
|
||
<button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
|
||
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg>
|
||
</button>
|
||
You can’t perform that action at this time.
|
||
</div>
|
||
|
||
<template id="site-details-dialog">
|
||
<details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
|
||
<summary role="button" aria-label="Close dialog"></summary>
|
||
<details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
|
||
<button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
|
||
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
|
||
</svg>
|
||
</button>
|
||
<div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
|
||
</details-dialog>
|
||
</details>
|
||
</template>
|
||
|
||
<div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
|
||
<div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
|
||
</div>
|
||
</div>
|
||
|
||
<template id="snippet-clipboard-copy-button">
|
||
<div class="zeroclipboard-container position-absolute right-0 top-0">
|
||
<clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
|
||
<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
|
||
</svg>
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
|
||
<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
|
||
</svg>
|
||
</clipboard-copy>
|
||
</div>
|
||
</template>
|
||
<template id="snippet-clipboard-copy-button-unpositioned">
|
||
<div class="zeroclipboard-container">
|
||
<clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
|
||
<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
|
||
</svg>
|
||
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
|
||
<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
|
||
</svg>
|
||
</clipboard-copy>
|
||
</div>
|
||
</template>
|
||
|
||
|
||
<style>
|
||
.user-mention[href$="/wliqi495-create"] {
|
||
color: var(--color-user-mention-fg);
|
||
background-color: var(--bgColor-attention-muted, var(--color-attention-subtle));
|
||
border-radius: 2px;
|
||
margin-left: -2px;
|
||
margin-right: -2px;
|
||
}
|
||
.user-mention[href$="/wliqi495-create"]:before,
|
||
.user-mention[href$="/wliqi495-create"]:after {
|
||
content: '';
|
||
display: inline-block;
|
||
width: 2px;
|
||
}
|
||
</style>
|
||
|
||
|
||
</div>
|
||
<div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
|
||
<div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
|
||
</body>
|
||
</html>
|
||
|