summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore9
-rw-r--r--61.patch30
-rw-r--r--64.patch31
-rw-r--r--LICENSE1825
-rw-r--r--Makefile4
-rw-r--r--PHPINFO9
-rw-r--r--REFLECTION1813
-rw-r--r--php-pecl-phpy.spec187
8 files changed, 3908 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..01f0400
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+clog
+package-*.xml
+*.tgz
+*.tar.bz2
+*.tar.gz
+*.tar.xz
+*.tar.xz.asc
+*.src.rpm
+*/*rpm
diff --git a/61.patch b/61.patch
new file mode 100644
index 0000000..19dca69
--- /dev/null
+++ b/61.patch
@@ -0,0 +1,30 @@
+From c69b1c59e15402fad6def1a82c97730831af01b0 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Tue, 20 Aug 2024 10:30:31 +0200
+Subject: [PATCH] this is a c++ ext, use proper linker command
+
+---
+ config.m4 | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/config.m4 b/config.m4
+index da07656..e63353a 100644
+--- a/config.m4
++++ b/config.m4
+@@ -48,7 +48,6 @@ if test "$PHP_PHPY" != "no"; then
+ fi
+
+ PHP_REQUIRE_CXX()
+- PHP_ADD_LIBRARY(stdc++, 1, PHPY_SHARED_LIBADD)
+
+ PHP_SUBST(PHPY_SHARED_LIBADD)
+
+@@ -69,7 +68,7 @@ if test "$PHP_PHPY" != "no"; then
+ phpy_source_files=$(cd $phpy_source_dir && find src -type f -name "*.cc")
+ phpy_source_files="phpy.cc $phpy_source_files"
+
+- PHP_NEW_EXTENSION(phpy, $phpy_source_files , $ext_shared)
++ PHP_NEW_EXTENSION(phpy, $phpy_source_files , $ext_shared,,, cxx)
+
+ AC_MSG_RESULT([$ext_builddir])
+
diff --git a/64.patch b/64.patch
new file mode 100644
index 0000000..f342d23
--- /dev/null
+++ b/64.patch
@@ -0,0 +1,31 @@
+From b3159e9d7d6ed9104246f183a3bad07e6cdfe187 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Tue, 20 Aug 2024 11:15:45 +0200
+Subject: [PATCH] report extension and python version
+
+---
+ phpy.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/phpy.cc b/phpy.cc
+index 0690a0a..20f42b8 100644
+--- a/phpy.cc
++++ b/phpy.cc
+@@ -7,6 +7,7 @@
+ #include "php.h"
+ #include "ext/standard/info.h"
+ #include "php_phpy.h"
++#include <patchlevel.h>
+
+ /* {{{ PHP_RINIT_FUNCTION */
+ PHP_RINIT_FUNCTION(phpy)
+@@ -31,7 +32,8 @@ PHP_MINFO_FUNCTION(phpy)
+ php_info_print_table_row(2, "Copyright", "上海识沃网络科技有限公司");
+ php_info_print_table_row(2, "Email", "service@swoole.com");
+ php_info_print_table_row(2, "Website", "https://www.swoole.com/");
+- php_info_print_table_row(2, "Version", PHP_PHPY_VERSION);
++ php_info_print_table_row(2, "Extension Version", PHP_PHPY_VERSION);
++ php_info_print_table_row(2, "Python Version", PY_VERSION);
+ php_info_print_table_end();
+ }
+ /* }}} */
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..c4e69de
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,1825 @@
+
+
+
+
+
+
+<!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"
+ >
+
+
+
+ <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-efd2f2257c96.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-6b1e37da2254.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-aa16bfa90fb8.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-f4daad25d8cf.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-a4629b2e906b.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-afcc3a6a38dd.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-79bca7145393.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-fe4137b54b26.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-1911f0cf0db4.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-8500c2c7ce5f.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-bbda46ca867f.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-fe6db6dfddd1.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-cf4e90581e80.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-992e95451f25.css" />
+<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-34406d39e629.css" />
+
+
+
+
+ <script type="application/json" id="client-env">{"locale":"en","featureFlags":["code_vulnerability_scanning","copilot_beta_features_opt_in","copilot_chat_conversation_intent_knowledge_search_skill","copilot_chat_static_thread_suggestions","copilot_completion_new_domain","copilot_conversational_ux_history_refs","copilot_followup_to_agent","copilot_implicit_context","copilot_smell_icebreaker_ux","custom_inp","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghas_copilot_agents_ga_web_updates","ghost_pilot_stream_handling","hovercard_accessibility","hovercard_longer_activate_timeout","marketing_pages_search_explore_provider","remove_child_patch","sample_network_conn_type","site_metered_billing_update","ignore_hidden_in_quote_reply"]}</script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-e9fc2a6de642.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_js-89a69c248502.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-56729c905fe2.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_smoothscroll-polyfill_di-75db2e-686488490524.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-cd098098ff2e.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_focus-zone_js-c9086a4fb62b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-f9b958f5f2df.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_anchored-position_js-node_modules_fzy_js_index-05960a-797b1227c4b8.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_details-d-ed9a97-841122a1e9d4.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-cd48220d74d5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_delegated-events_dist_in-3efda3-701acb69193f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-2e8678-34feeec9c894.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_catalyst_lib_index_js-node_modules_github_clipboard-copy-element_-782ca5-54763cd55b96.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-3959a9-5779869d7165.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_onfocus_ts-ui_packages_trusted-types-policies_policy_ts-ui_packages-6fe316-9d50d6f10c3d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-074e91131d8f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-f7a66f1ddeb6.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_catalyst_lib_index_js-node_modules_github_hydro-analytics-client_-7901e7-dc88587c14ed.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_stack-68835d-a18220f1db8d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-ce7225a304c5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-f8a5485c982a.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-858e043fcf76.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-6cf3320416b8.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_scroll-anchoring_dist_scroll-anchoring_esm_js-node_modules_github_hotkey-1a1d91-fa9f29a8514b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-0e07cc183eed.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_session-resume_dist_index_js-node_modules_primer_behaviors_dist_e-ac74c6-5e03381c44b5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_jtml_lib_index_js-53b423ede32a.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_textarea-autosi-9e0349-ab4976fc78a6.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-e15463ecf7e6.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_onfocus_ts-app_ass-421cec-f0e1d31bff9a.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-112600808cf9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-467754-8b1a4442f9b3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-4accd4baf37d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_blob-anchor_ts-app_assets_modules_github_filter-sort_ts-app_assets_-6deafe-fc95155e233a.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-3b4c83250375.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff531-bf7e5a3732fd.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-3ddac678adaf.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-e73b311a14f1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_repositories_get-repo-element_ts-4fc152f40452.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-a8d08997ac4f.js"></script>
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_primer_octicons-react_di-b40d97-06881c63f955.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Box_Box_js-55a9038b54f0.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Button_Button_js-b0edbfb6a9e5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_TooltipV2_Tooltip_js-4d5019830e3c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_clsx_dist_clsx_m_js-node_modules_primer_react_node_modules_primer_octico-c56103-e91295e60abd.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_ActionList_index_js-f646728c385c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_ActionMenu_ActionMenu_js-node_modules_primer_react_-5b2420-048f91dcedb3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Text_Text_js-node_modules_primer_react_lib-esm_Text-7845da-adcc76ee8848.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_FormControl_FormControl_js-1f51ab2bdcca.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_react-router-dom_dist_index_js-c5568c29d405.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_ConfirmationDialog_ConfirmationDialog_js-099e8bfead83.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Heading_Heading_js-node_modules_primer_react_lib-es-96435f-69dda7b301fe.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_TreeView_TreeView_js-163f241772cf.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_anchored-position_js-node_modules_primer_react-4d507b-85f1dac4ce7d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_AvatarStack_AvatarStack_js-node_modules_primer_reac-cd52f5-34ef2ba7726b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_scroll-into-view_js-node_modules_primer_react_-3602e6-08dffc43caa6.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_react-core_create-browser-history_ts-ui_packages_safe-storage_safe-storage_ts-ui_-682c2c-7a1e99981675.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_react-core_register-app_ts-d92f692cd90a.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-9eb3412d85a7.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-7b0796d1324c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_commit-attribution_index_ts-ui_packages_commit-checks-status_index_ts-ui_packages-f45efb-a5bb4a693481.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_copy-to-clipboard_index_ts-ui_packages_react-core_use-feature-flag_ts-ui_packages-9fa6b6-6e8c63eb2d15.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-canonical-object_ts-ui_packages_code-view-shared_hooks-9a3d65-c2af6875bd6f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_repos-file-tree-view_repos-file-tree-view_ts-ui_packages_feature-request_FeatureR-ec5225-ec38d5ad4ab9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-code-view-bea370344f2f.js"></script>
+<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-code-view.234ae39ff1fa1232236c.module.css" />
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_primer_octicons-react_di-b40d97-06881c63f955.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Box_Box_js-55a9038b54f0.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Button_Button_js-b0edbfb6a9e5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_TooltipV2_Tooltip_js-4d5019830e3c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_clsx_dist_clsx_m_js-node_modules_primer_react_node_modules_primer_octico-c56103-e91295e60abd.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_ActionList_index_js-f646728c385c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_ActionMenu_ActionMenu_js-node_modules_primer_react_-5b2420-048f91dcedb3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Text_Text_js-node_modules_primer_react_lib-esm_Text-7845da-adcc76ee8848.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_FormControl_FormControl_js-1f51ab2bdcca.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_FilteredActionList_FilteredActionList_js-5a52bf212e2b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Dialog_js-node_modules_primer_react_lib-esm_Feature-cdf735-892e8f58058f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_react-core_create-browser-history_ts-ui_packages_safe-storage_safe-storage_ts-ui_-682c2c-7a1e99981675.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-be1efa498152.js"></script>
+<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.572fff1cb5c3caef1ac9.module.css" />
+
+
+ <title>phpy/LICENSE at 1.0.6 · swoole/phpy · GitHub</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="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">
+
+
+ <meta name="request-id" content="97F0:240551:45696F:466B55:66C458A9" data-pjax-transient="true"/><meta name="html-safe-nonce" content="49bee853e8667a9ef06dc17ae685ee098255daf7fc695467ac6a581e4b02f6bc" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5N0YwOjI0MDU1MTo0NTY5NkY6NDY2QjU1OjY2QzQ1OEE5IiwidmlzaXRvcl9pZCI6IjE2MzI4NjYxNzQ0NjU0OTcyNTciLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="0ef6cbc435ae7a17d16b457531cefae706a3c1951c84d903988c3d23c6f0b6a5" data-pjax-transient="true"/>
+
+
+ <meta name="hovercard-subject-tag" content="repository:727141597" 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="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />
+
+
+
+
+
+
+ <meta name="user-login" content="">
+
+
+
+ <meta name="viewport" content="width=device-width">
+
+
+
+ <meta name="description" content="Connecting the Python and PHP ecosystems together. Contribute to swoole/phpy 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/swoole/phpy/blob/1.0.6/LICENSE" />
+
+ <meta name="twitter:image:src" content="https://opengraph.githubassets.com/3163a6ac0e798537f3c06805b96b3d91a9a31e02128d403ef089f396521a1223/swoole/phpy" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="phpy/LICENSE at 1.0.6 · swoole/phpy" /><meta name="twitter:description" content="Connecting the Python and PHP ecosystems together. Contribute to swoole/phpy development by creating an account on GitHub." />
+ <meta property="og:image" content="https://opengraph.githubassets.com/3163a6ac0e798537f3c06805b96b3d91a9a31e02128d403ef089f396521a1223/swoole/phpy" /><meta property="og:image:alt" content="Connecting the Python and PHP ecosystems together. Contribute to swoole/phpy 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="phpy/LICENSE at 1.0.6 · swoole/phpy" /><meta property="og:url" content="https://github.com/swoole/phpy/blob/1.0.6/LICENSE" /><meta property="og:description" content="Connecting the Python and PHP ecosystems together. Contribute to swoole/phpy development by creating an account on GitHub." />
+
+
+
+
+
+ <meta name="hostname" content="github.com">
+
+
+
+ <meta name="expected-hostname" content="github.com">
+
+
+ <meta http-equiv="x-pjax-version" content="4d8f002ae675efc3189024491d2df57117cbe5e0107821c94bee0367e391acf3" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-csp-version" content="43bc2a0e2750a1219c17b5bf1ec22aae37041bbc018bc5e27bb7708f80e7ab88" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-css-version" content="7f3a6fa631adee55b20691ccc8267f762130f641fe9a0d5ba41c45f484f2eb18" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-js-version" content="26d0b83b35e050fb5420e7188dc400b69de8ff0400eae837cb9ba716ee538299" 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/swoole/phpy git https://github.com/swoole/phpy.git">
+
+ <meta name="octolytics-dimension-user_id" content="8121270" /><meta name="octolytics-dimension-user_login" content="swoole" /><meta name="octolytics-dimension-repository_id" content="727141597" /><meta name="octolytics-dimension-repository_nwo" content="swoole/phpy" /><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="727141597" /><meta name="octolytics-dimension-repository_network_root_nwo" content="swoole/phpy" />
+
+
+
+
+
+ <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
+
+
+ <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">
+
+ <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">
+
+<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-out env-production page-responsive" style="word-wrap: break-word;">
+ <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;">
+
+
+
+ <div class="position-relative js-header-wrapper ">
+ <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 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>
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_react_lib-esm_Dialog_Dialog_js-node_modules_primer_react_lib-esm_-bd7638-683c833a31df.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-15a4cf222dbb.js"></script>
+
+<react-partial
+ partial-name="keyboard-shortcuts-dialog"
+ data-ssr="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>
+
+
+
+
+
+
+
+
+
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-9a621ecbf672.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-b81e688feb0f.js"></script>
+<header class="HeaderMktg header-logged-out js-details-container js-header Details position-relative f4 py-3" role="banner" data-color-mode=light data-light-theme=light data-dark-theme=dark>
+ <h2 class="sr-only">Navigation Menu</h2>
+
+ <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation">
+ <span class="d-none">Toggle navigation</span>
+ </button>
+
+ <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1">
+ <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto">
+ <div class="flex-1">
+ <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content">
+ <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div>
+ <div class="HeaderMenu-toggle-bar rounded my-1"></div>
+ <div class="HeaderMenu-toggle-bar rounded my-1"></div></span>
+ </span>
+</button>
+ </div>
+
+ <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav"
+ href="/"
+ aria-label="Homepage"
+ data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Logomark;ref_loc:Header&quot;}">
+ <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github">
+ <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path>
+</svg>
+ </a>
+
+ <div class="flex-1 flex-order-2 text-right">
+ <a
+ href="/login?return_to=https%3A%2F%2Fgithub.com%2Fswoole%2Fphpy%2Fblob%2F1.0.6%2FLICENSE"
+ class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav"
+ data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/swoole/phpy/blob/1.0.6/LICENSE&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9b5639010b01990a7b12fef0686aacf0baffce42712ad84ffaa3c28829e9d272"
+ data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to Sign in&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}"
+ >
+ Sign in
+ </a>
+ </div>
+ </div>
+
+
+ <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0">
+ <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0">
+ <nav class="HeaderMenu-nav" aria-label="Global">
+ <ul class="d-lg-flex list-style-none">
+ <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item">
+ <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false">
+ Product
+ <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1">
+ <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>
+ </button>
+ <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 py-2 py-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex dropdown-menu-wide">
+ <div class="px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7">
+ <ul class="list-style-none f5" >
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;actions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;actions_link_product_navbar&quot;}" href="https://github.com/features/actions">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3">
+ <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Actions</div>
+ Automate any workflow
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;packages&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;packages_link_product_navbar&quot;}" href="https://github.com/features/packages">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-package color-fg-subtle mr-3">
+ <path d="M12.876.64V.639l8.25 4.763c.541.313.875.89.875 1.515v9.525a1.75 1.75 0 0 1-.875 1.516l-8.25 4.762a1.748 1.748 0 0 1-1.75 0l-8.25-4.763a1.75 1.75 0 0 1-.875-1.515V6.917c0-.625.334-1.202.875-1.515L11.126.64a1.748 1.748 0 0 1 1.75 0Zm-1 1.298L4.251 6.34l7.75 4.474 7.75-4.474-7.625-4.402a.248.248 0 0 0-.25 0Zm.875 19.123 7.625-4.402a.25.25 0 0 0 .125-.216V7.639l-7.75 4.474ZM3.501 7.64v8.803c0 .09.048.172.125.216l7.625 4.402v-8.947Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Packages</div>
+ Host and manage packages
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_product_navbar&quot;}" href="https://github.com/features/security">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3">
+ <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Security</div>
+ Find and fix vulnerabilities
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;codespaces&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;codespaces_link_product_navbar&quot;}" href="https://github.com/features/codespaces">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3">
+ <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.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>
+ <div>
+ <div class="color-fg-default h4">Codespaces</div>
+ Instant dev environments
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_copilot&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_copilot_link_product_navbar&quot;}" href="https://github.com/features/copilot">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3">
+ <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">GitHub Copilot</div>
+ Write better code with AI
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_review&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_review_link_product_navbar&quot;}" href="https://github.com/features/code-review">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3">
+ <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Code review</div>
+ Manage code changes
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;issues&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;issues_link_product_navbar&quot;}" href="https://github.com/features/issues">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3">
+ <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Issues</div>
+ Plan and track work
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;discussions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;discussions_link_product_navbar&quot;}" href="https://github.com/features/discussions">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3">
+ <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.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-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Discussions</div>
+ Collaborate outside of code
+ </div>
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="px-lg-4">
+ <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span>
+ <ul class="list-style-none f5" aria-labelledby="product-explore-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;all_features&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;all_features_link_product_navbar&quot;}" href="https://github.com/features">
+ All features
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;documentation&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;documentation_link_product_navbar&quot;}" href="https://docs.github.com">
+ Documentation
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle">
+ <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path>
+</svg>
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_skills&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_skills_link_product_navbar&quot;}" href="https://skills.github.com">
+ GitHub Skills
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle">
+ <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path>
+</svg>
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;blog&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;blog_link_product_navbar&quot;}" href="https://github.blog">
+ Blog
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle">
+ <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path>
+</svg>
+</a></li>
+
+ </ul>
+ </div>
+ </div>
+</li>
+
+ <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item">
+ <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false">
+ Solutions
+ <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1">
+ <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>
+ </button>
+ <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 py-2 py-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 px-lg-4">
+ <div class="border-bottom pb-3 mb-3">
+ <span class="d-block h4 color-fg-default my-1" id="solutions-by-size-heading">By size</span>
+ <ul class="list-style-none f5" aria-labelledby="solutions-by-size-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprise&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprise_link_solutions_navbar&quot;}" href="https://github.com/enterprise">
+ Enterprise
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;teams&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;teams_link_solutions_navbar&quot;}" href="https://github.com/team">
+ Teams
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;startups&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}" href="https://github.com/enterprise/startups">
+ Startups
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="border-bottom pb-3 mb-3">
+ <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span>
+ <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;healthcare&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}" href="https://github.com/solutions/industries/healthcare">
+ Healthcare
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;financial_services&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}" href="https://github.com/solutions/industries/financial-services">
+ Financial services
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;manufacturing&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}" href="https://github.com/solutions/industries/manufacturing">
+ Manufacturing
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="">
+ <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span>
+ <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ci_cd_amp_automation&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ci_cd_amp_automation_link_solutions_navbar&quot;}" href="https://github.com/solutions/ci-cd">
+ CI/CD &amp; Automation
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}" href="https://github.com/solutions/devops">
+ DevOps
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devsecops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}" href="https://github.com/solutions/devsecops">
+ DevSecOps
+
+
+</a></li>
+
+ </ul>
+ </div>
+ </div>
+</li>
+
+ <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item">
+ <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false">
+ Resources
+ <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1">
+ <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>
+ </button>
+ <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 py-2 py-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex dropdown-menu-wide">
+ <div class="px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7">
+ <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span>
+ <ul class="list-style-none f5" aria-labelledby="resources-topics-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ai&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}" href="/resources/articles/ai">
+ AI
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}" href="/resources/articles/devops">
+ DevOps
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}" href="/resources/articles/security">
+ Security
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;software_development&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}" href="/resources/articles/software-development">
+ Software Development
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="px-lg-4">
+ <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span>
+ <ul class="list-style-none f5" aria-labelledby="resources-explore-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;learning_pathways&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;learning_pathways_link_resources_navbar&quot;}" href="https://resources.github.com/learn/pathways">
+ Learning Pathways
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle">
+ <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path>
+</svg>
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;white_papers_ebooks_webinars&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;white_papers_ebooks_webinars_link_resources_navbar&quot;}" href="https://resources.github.com">
+ White papers, Ebooks, Webinars
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle">
+ <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path>
+</svg>
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;customer_stories&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}" href="https://github.com/customer-stories">
+ Customer Stories
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;partners&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}" href="https://partner.github.com">
+ Partners
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle">
+ <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path>
+</svg>
+</a></li>
+
+ </ul>
+ </div>
+ </div>
+</li>
+
+
+ <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item">
+ <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false">
+ Open Source
+ <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1">
+ <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>
+ </button>
+ <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 py-2 py-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 px-lg-4">
+ <div class="border-bottom pb-3 mb-3">
+ <ul class="list-style-none f5" >
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_sponsors&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}" href="/sponsors">
+
+ <div>
+ <div class="color-fg-default h4">GitHub Sponsors</div>
+ Fund open source developers
+ </div>
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="border-bottom pb-3 mb-3">
+ <ul class="list-style-none f5" >
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;the_readme_project&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;the_readme_project_link_open_source_navbar&quot;}" href="https://github.com/readme">
+
+ <div>
+ <div class="color-fg-default h4">The ReadME Project</div>
+ GitHub community articles
+ </div>
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="">
+ <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span>
+ <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;topics&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}" href="https://github.com/topics">
+ Topics
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;trending&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}" href="https://github.com/trending">
+ Trending
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;collections&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}" href="https://github.com/collections">
+ Collections
+
+
+</a></li>
+
+ </ul>
+ </div>
+ </div>
+</li>
+
+
+ <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item">
+ <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false">
+ Enterprise
+ <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1">
+ <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>
+ </button>
+ <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 py-2 py-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 px-lg-4">
+ <div class="border-bottom pb-3 mb-3">
+ <ul class="list-style-none f5" >
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}" href="/enterprise">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3">
+ <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Enterprise platform</div>
+ AI-powered developer platform
+ </div>
+
+
+</a></li>
+
+ </ul>
+ </div>
+ <div class="">
+ <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span>
+ <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading">
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;advanced_security&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;advanced_security_link_enterprise_navbar&quot;}" href="https://github.com/enterprise/advanced-security">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3">
+ <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Advanced Security</div>
+ Enterprise-grade security features
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_copilot&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_copilot_link_enterprise_navbar&quot;}" href="/features/copilot#enterprise">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3">
+ <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">GitHub Copilot</div>
+ Enterprise-grade AI features
+ </div>
+
+
+</a></li>
+
+ <li>
+ <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;premium_support&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}" href="/premium-support">
+ <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3">
+ <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.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-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path>
+</svg>
+ <div>
+ <div class="color-fg-default h4">Premium Support</div>
+ Enterprise-grade 24/7 support
+ </div>
+
+
+</a></li>
+
+ </ul>
+ </div>
+ </div>
+</li>
+
+
+ <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item">
+ <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;pricing&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;pricing_link_global_navbar&quot;}" href="https://github.com/pricing">Pricing</a>
+</li>
+
+ </ul>
+ </nav>
+
+ <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3">
+
+
+
+<qbsearch-input class="search-input" data-scope="repo:swoole/phpy" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="QFojzN4IH2jz5AaO9xMxRLD76TJTGVvAinfNJOyMwOWjHWB34zroLpwno8WfnFlPbjHrZrJnoWHn3XOJuQ_69g" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="swoole/phpy" data-current-org="swoole" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true">
+ <div
+ class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded"
+ data-action="click:qbsearch-input#searchInputContainerClicked"
+ >
+ <button
+ type="button"
+ class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none"
+ data-target="qbsearch-input.inputButton"
+ aria-label="Search or jump to…"
+ aria-haspopup="dialog"
+ placeholder="Search or jump to..."
+ data-hotkey=s,/
+ autocapitalize="off"
+ data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;searchbar&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"
+ data-action="click:qbsearch-input#handleExpand"
+ >
+ <div class="mr-2 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-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>
+ </div>
+ <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span>
+ <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator">
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg>
+
+ </div>
+ </button>
+
+ <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-large 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-fixed 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-b773bc7a-8c90-4e9c-a08c-70b99c7dfbbc" 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 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-target="query-builder.clearButton" data-action="
+ click:query-builder#clear
+ focus:query-builder#clearButtonFocus
+ blur:query-builder#clearButtonBlur
+ " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 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>
+
+ </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"
+ ></ul>
+ </div>
+ <div class="FormControl-inlineValidation" id="validation-b773bc7a-8c90-4e9c-a08c-70b99c7dfbbc" 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 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">
+ Search syntax tips
+</a> <div class="d-flex flex-1"></div>
+ </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">
+ <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" 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" data-csrf="true" name="authenticity_token" value="tgT2Q3conbM5xzVLGY7yrqM3FPeGmFhoebBbIsYm/n9gLa9D9ioEcehnq2+DGLEhrRaPZocZpbC6f5PvydVnUw==" />
+ <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">
+ <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" 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" data-csrf="true" name="authenticity_token" value="sK9qZEvzEyehKNj4YJngCIut0eKG2K6COjKC+QXLoXBFqub5JB7ukaPRtm/Sf1tl6KAIiC7rOe1Y64dy5SsMHg==" />
+ <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" data-csrf="true" value="ixt8Fp0wo45gBWaU+80q0NbhJzEAjks7z8eEG35Hb0yCr317c0y+KFoSrzVMhPNMoeoMs5EgeMo+yyZJKqtoQQ==" />
+ </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>
+
+ <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block">
+ <a
+ href="/login?return_to=https%3A%2F%2Fgithub.com%2Fswoole%2Fphpy%2Fblob%2F1.0.6%2FLICENSE"
+ class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1"
+ style="margin-left: 12px;"
+ data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/swoole/phpy/blob/1.0.6/LICENSE&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9b5639010b01990a7b12fef0686aacf0baffce42712ad84ffaa3c28829e9d272"
+ data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}"
+ >
+ Sign in
+ </a>
+ </div>
+
+ <a href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=swoole%2Fphpy"
+ class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1"
+ data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/swoole/phpy/blob/1.0.6/LICENSE&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9b5639010b01990a7b12fef0686aacf0baffce42712ad84ffaa3c28829e9d272"
+ data-analytics-event="{&quot;category&quot;:&quot;Sign up&quot;,&quot;action&quot;:&quot;click to sign up for account&quot;,&quot;label&quot;:&quot;ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show;ref_cta:Sign up;ref_loc:header logged out&quot;}"
+ >
+ Sign up
+ </a>
+ <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button>
+ </div>
+ </div>
+ </div>
+ </div>
+</header>
+
+ <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-efc7d035-8198-4a9c-89a1-098b1d15b0ca" aria-labelledby="tooltip-76b79892-be43-49e9-b313-fe7197cfc72d" 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-76b79892-be43-49e9-b313-fe7197cfc72d" for="icon-button-efc7d035-8198-4a9c-89a1-098b1d15b0ca" 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>
+
+
+
+ <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment>
+
+
+
+
+
+ <div
+ class="application-main "
+ data-commit-hovercards-enabled
+ data-discussion-hovercards-enabled
+ data-issue-and-pr-hovercards-enabled
+ >
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
+ <main id="js-repo-pjax-container" >
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>
+
+ <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;">
+
+ <div class="flex-auto min-width-0 width-fit">
+
+ <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2">
+ <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>
+
+ <span class="author flex-self-stretch" itemprop="author">
+ <a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/swoole/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/swoole">
+ swoole
+</a> </span>
+ <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
+ <strong itemprop="name" class="mr-2 flex-self-stretch">
+ <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/swoole/phpy">phpy</a>
+ </strong>
+
+ <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
+ </div>
+
+
+ </div>
+
+ <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
+ <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
+
+
+
+ <li>
+ <a href="/login?return_to=%2Fswoole%2Fphpy" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/swoole/phpy/blob/1.0.6/LICENSE&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="92db32e67ea8b39384591e3b95677b38b24ee8ead91d271ecb446b9cdff48418" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2">
+ <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
+</svg>Notifications
+</a> <tool-tip id="tooltip-d71ae59f-8576-4d2f-821a-d9d7af3162a8" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>
+
+ </li>
+
+ <li>
+ <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fswoole%2Fphpy" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:727141597,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/swoole/phpy/blob/1.0.6/LICENSE&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="6e34842e63ccc78c093509e7e8fbda40f6a3d65de7e5b3f1f72b47c306bfd76f" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2">
+ <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
+</svg>Fork
+ <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="42" data-view-component="true" class="Counter">42</span>
+</a>
+ </li>
+
+ <li>
+ <div data-view-component="true" class="BtnGroup d-flex">
+ <a href="/login?return_to=%2Fswoole%2Fphpy" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:727141597,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/swoole/phpy/blob/1.0.6/LICENSE&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="4cdca0df68f852054e68d45a804b36383998ea1395a3d5b48f4b1597f98cb006" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-s btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2">
+ <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Star
+</span> <span id="repo-stars-counter-star" aria-label="499 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="499" data-view-component="true" class="Counter js-social-count">499</span>
+</a> <button aria-label="You must be signed in to add this repository to a list" type="button" disabled="disabled" data-view-component="true" class="btn-sm btn BtnGroup-item px-2"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <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></div>
+ </li>
+
+</ul>
+
+ </div>
+ </div>
+
+ <div id="responsive-meta-container" data-turbo-replace>
+</div>
+
+
+ <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5">
+
+ <ul data-view-component="true" class="UnderlineNav-body list-style-none">
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="code-tab" href="/swoole/phpy/tree/1.0.6" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /swoole/phpy/tree/1.0.6" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Code">Code</span>
+ <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="issues-tab" href="/swoole/phpy/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /swoole/phpy/issues /_view_fragments/issues/index/swoole/phpy/layout" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <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 UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Issues">Issues</span>
+ <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="2" data-view-component="true" class="Counter">2</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="pull-requests-tab" href="/swoole/phpy/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /swoole/phpy/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Pull requests">Pull requests</span>
+ <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="1" data-view-component="true" class="Counter">1</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="actions-tab" href="/swoole/phpy/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /swoole/phpy/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Actions">Actions</span>
+ <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="projects-tab" href="/swoole/phpy/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /swoole/phpy/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Projects">Projects</span>
+ <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="security-tab" href="/swoole/phpy/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /swoole/phpy/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Security">Security</span>
+ <include-fragment src="/swoole/phpy/security/overall-count" accept="text/fragment+html"></include-fragment>
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="insights-tab" href="/swoole/phpy/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /swoole/phpy/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
+ <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 data-content="Insights">Insights</span>
+ <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+</ul>
+ <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true">
+ <focus-group direction="vertical" mnemonics retain>
+ <button id="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-button" popovertarget="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-overlay" aria-controls="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-list" aria-haspopup="true" aria-labelledby="tooltip-932ecf39-dbfb-4666-a411-7ab36155eb2d" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
+ <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><tool-tip id="tooltip-932ecf39-dbfb-4666-a411-7ab36155eb2d" for="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>
+
+
+<anchored-position id="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-overlay" anchor="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
+ <div data-view-component="true" class="Overlay Overlay--size-auto">
+
+ <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list>
+ <div data-view-component="true">
+ <ul aria-labelledby="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-button" id="action-menu-6c80e7ba-7d25-4742-b32a-c8a90783625f-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
+ <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-01cc0d7c-5b80-456c-bf22-ebb37e33717f" href="/swoole/phpy/tree/1.0.6" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <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>
+ </span>
+
+ <span data-view-component="true" class="ActionListItem-label">
+ Code
+</span>
+</a>
+
+</li>
+ <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-1a23c334-3c2b-493c-b45a-108d1e9b7810" href="/swoole/phpy/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <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>
+ </span>
+
+ <span data-view-component="true" class="ActionListItem-label">
+ Issues
+</span>
+</a>
+
+</li>
+ <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-1fee7e35-8299-4034-9137-69eaf002ac54" href="/swoole/phpy/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
+ <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-view-component="true" class="ActionListItem-label">
+ Pull requests
+</span>
+</a>
+
+</li>
+ <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-12c4969e-fc1f-4a3c-ade2-8c431d7013a4" href="/swoole/phpy/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <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>
+ </span>
+
+ <span data-view-component="true" class="ActionListItem-label">
+ Actions
+</span>
+</a>
+
+</li>
+ <li hidden="hidden" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-dea8fa29-2742-4f44-ac79-5ece41e82a6c" href="/swoole/phpy/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table">
+ <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-view-component="true" class="ActionListItem-label">
+ Projects
+</span>
+</a>
+
+</li>
+ <li hidden="hidden" data-menu-item="i5security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-078abc0c-bcf1-43f5-939e-4143a2ac63b2" href="/swoole/phpy/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
+ <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-view-component="true" class="ActionListItem-label">
+ Security
+</span>
+</a>
+
+</li>
+ <li hidden="hidden" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
+
+
+ <a tabindex="-1" id="item-f76c19aa-363e-4aba-b0db-11497ab7ca4a" href="/swoole/phpy/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
+ <span class="ActionListItem-visual ActionListItem-visual--leading">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
+ <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-view-component="true" class="ActionListItem-label">
+ Insights
+</span>
+</a>
+
+</li>
+</ul>
+</div></action-list>
+
+
+</div>
+
+</div></anchored-position> </focus-group>
+</action-menu></div>
+</nav>
+
+ </div>
+
+
+
+
+
+<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
+ <div id="repo-content-pjax-container" class="repository-content " >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<react-app
+ app-name="react-code-view"
+ initial-path="/swoole/phpy/blob/1.0.6/LICENSE"
+ style="display: block; min-height: calc(100vh - 64px)"
+ data-ssr="false"
+ data-lazy="false"
+ data-alternate="false"
+>
+
+ <script type="application/json" data-target="react-app.embeddedData">{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"include","path":"include","contentType":"directory"},{"name":"lib","path":"lib","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":"stubs","path":"stubs","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":"tools","path":"tools","contentType":"directory"},{"name":".clang-format","path":".clang-format","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"CMakeLists.txt","path":"CMakeLists.txt","contentType":"file"},{"name":"Dockerfile","path":"Dockerfile","contentType":"file"},{"name":"Dockerfile.alpine","path":"Dockerfile.alpine","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README-CN.md","path":"README-CN.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"code-format.sh","path":"code-format.sh","contentType":"file"},{"name":"composer.json","path":"composer.json","contentType":"file"},{"name":"config.m4","path":"config.m4","contentType":"file"},{"name":"config.w32","path":"config.w32","contentType":"file"},{"name":"make.sh","path":"make.sh","contentType":"file"},{"name":"package.xml","path":"package.xml","contentType":"file"},{"name":"php_phpy.h","path":"php_phpy.h","contentType":"file"},{"name":"phpunit.xml","path":"phpunit.xml","contentType":"file"},{"name":"phpy.cc","path":"phpy.cc","contentType":"file"}],"totalCount":26}},"fileTreeProcessingTime":4.401662,"foldersToFetch":[],"repo":{"id":727141597,"defaultBranch":"main","name":"phpy","ownerLogin":"swoole","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-12-04T09:15:17.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/8121270?v=4","public":true,"private":false,"isOrgOwned":true},"codeLineWrapEnabled":false,"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"1.0.6","listCacheKey":"v0:1724142298.0","canEdit":false,"refType":"tag","currentOid":"fdda4342c24cd5b95acd8f524837d7e37b4384c5"},"path":"LICENSE","currentUser":null,"blob":{"rawLines":[""," Apache License"," Version 2.0, January 2004"," http://www.apache.org/licenses/",""," TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION",""," 1. Definitions.",""," \"License\" shall mean the terms and conditions for use, reproduction,"," and distribution as defined by Sections 1 through 9 of this document.",""," \"Licensor\" shall mean the copyright owner or entity authorized by"," the copyright owner that is granting the License.",""," \"Legal Entity\" shall mean the union of the acting entity and all"," other entities that control, are controlled by, or are under common"," control with that entity. For the purposes of this definition,"," \"control\" means (i) the power, direct or indirect, to cause the"," direction or management of such entity, whether by contract or"," otherwise, or (ii) ownership of fifty percent (50%) or more of the"," outstanding shares, or (iii) beneficial ownership of such entity.",""," \"You\" (or \"Your\") shall mean an individual or Legal Entity"," exercising permissions granted by this License.",""," \"Source\" form shall mean the preferred form for making modifications,"," including but not limited to software source code, documentation"," source, and configuration files.",""," \"Object\" form shall mean any form resulting from mechanical"," transformation or translation of a Source form, including but"," not limited to compiled object code, generated documentation,"," and conversions to other media types.",""," \"Work\" shall mean the work of authorship, whether in Source or"," Object form, made available under the License, as indicated by a"," copyright notice that is included in or attached to the work"," (an example is provided in the Appendix below).",""," \"Derivative Works\" shall mean any work, whether in Source or Object"," form, that is based on (or derived from) the Work and for which the"," editorial revisions, annotations, elaborations, or other modifications"," represent, as a whole, an original work of authorship. For the purposes"," of this License, Derivative Works shall not include works that remain"," separable from, or merely link (or bind by name) to the interfaces of,"," the Work and Derivative Works thereof.",""," \"Contribution\" shall mean any work of authorship, including"," the original version of the Work and any modifications or additions"," to that Work or Derivative Works thereof, that is intentionally"," submitted to Licensor for inclusion in the Work by the copyright owner"," or by an individual or Legal Entity authorized to submit on behalf of"," the copyright owner. For the purposes of this definition, \"submitted\""," means any form of electronic, verbal, or written communication sent"," to the Licensor or its representatives, including but not limited to"," communication on electronic mailing lists, source code control systems,"," and issue tracking systems that are managed by, or on behalf of, the"," Licensor for the purpose of discussing and improving the Work, but"," excluding communication that is conspicuously marked or otherwise"," designated in writing by the copyright owner as \"Not a Contribution.\"",""," \"Contributor\" shall mean Licensor and any individual or Legal Entity"," on behalf of whom a Contribution has been received by Licensor and"," subsequently incorporated within the Work.",""," 2. Grant of Copyright License. Subject to the terms and conditions of"," this License, each Contributor hereby grants to You a perpetual,"," worldwide, non-exclusive, no-charge, royalty-free, irrevocable"," copyright license to reproduce, prepare Derivative Works of,"," publicly display, publicly perform, sublicense, and distribute the"," Work and such Derivative Works in Source or Object form.",""," 3. Grant of Patent License. Subject to the terms and conditions of"," this License, each Contributor hereby grants to You a perpetual,"," worldwide, non-exclusive, no-charge, royalty-free, irrevocable"," (except as stated in this section) patent license to make, have made,"," use, offer to sell, sell, import, and otherwise transfer the Work,"," where such license applies only to those patent claims licensable"," by such Contributor that are necessarily infringed by their"," Contribution(s) alone or by combination of their Contribution(s)"," with the Work to which such Contribution(s) was submitted. If You"," institute patent litigation against any entity (including a"," cross-claim or counterclaim in a lawsuit) alleging that the Work"," or a Contribution incorporated within the Work constitutes direct"," or contributory patent infringement, then any patent licenses"," granted to You under this License for that Work shall terminate"," as of the date such litigation is filed.",""," 4. Redistribution. You may reproduce and distribute copies of the"," Work or Derivative Works thereof in any medium, with or without"," modifications, and in Source or Object form, provided that You"," meet the following conditions:",""," (a) You must give any other recipients of the Work or"," Derivative Works a copy of this License; and",""," (b) You must cause any modified files to carry prominent notices"," stating that You changed the files; and",""," (c) You must retain, in the Source form of any Derivative Works"," that You distribute, all copyright, patent, trademark, and"," attribution notices from the Source form of the Work,"," excluding those notices that do not pertain to any part of"," the Derivative Works; and",""," (d) If the Work includes a \"NOTICE\" text file as part of its"," distribution, then any Derivative Works that You distribute must"," include a readable copy of the attribution notices contained"," within such NOTICE file, excluding those notices that do not"," pertain to any part of the Derivative Works, in at least one"," of the following places: within a NOTICE text file distributed"," as part of the Derivative Works; within the Source form or"," documentation, if provided along with the Derivative Works; or,"," within a display generated by the Derivative Works, if and"," wherever such third-party notices normally appear. The contents"," of the NOTICE file are for informational purposes only and"," do not modify the License. You may add Your own attribution"," notices within Derivative Works that You distribute, alongside"," or as an addendum to the NOTICE text from the Work, provided"," that such additional attribution notices cannot be construed"," as modifying the License.",""," You may add Your own copyright statement to Your modifications and"," may provide additional or different license terms and conditions"," for use, reproduction, or distribution of Your modifications, or"," for any such Derivative Works as a whole, provided Your use,"," reproduction, and distribution of the Work otherwise complies with"," the conditions stated in this License.",""," 5. Submission of Contributions. Unless You explicitly state otherwise,"," any Contribution intentionally submitted for inclusion in the Work"," by You to the Licensor shall be under the terms and conditions of"," this License, without any additional terms or conditions."," Notwithstanding the above, nothing herein shall supersede or modify"," the terms of any separate license agreement you may have executed"," with Licensor regarding such Contributions.",""," 6. Trademarks. This License does not grant permission to use the trade"," names, trademarks, service marks, or product names of the Licensor,"," except as required for reasonable and customary use in describing the"," origin of the Work and reproducing the content of the NOTICE file.",""," 7. Disclaimer of Warranty. Unless required by applicable law or"," agreed to in writing, Licensor provides the Work (and each"," Contributor provides its Contributions) on an \"AS IS\" BASIS,"," WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"," implied, including, without limitation, any warranties or conditions"," of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A"," PARTICULAR PURPOSE. You are solely responsible for determining the"," appropriateness of using or redistributing the Work and assume any"," risks associated with Your exercise of permissions under this License.",""," 8. Limitation of Liability. In no event and under no legal theory,"," whether in tort (including negligence), contract, or otherwise,"," unless required by applicable law (such as deliberate and grossly"," negligent acts) or agreed to in writing, shall any Contributor be"," liable to You for damages, including any direct, indirect, special,"," incidental, or consequential damages of any character arising as a"," result of this License or out of the use or inability to use the"," Work (including but not limited to damages for loss of goodwill,"," work stoppage, computer failure or malfunction, or any and all"," other commercial damages or losses), even if such Contributor"," has been advised of the possibility of such damages.",""," 9. Accepting Warranty or Additional Liability. While redistributing"," the Work or Derivative Works thereof, You may choose to offer,"," and charge a fee for, acceptance of support, warranty, indemnity,"," or other liability obligations and/or rights consistent with this"," License. However, in accepting such obligations, You may act only"," on Your own behalf and on Your sole responsibility, not on behalf"," of any other Contributor, and only if You agree to indemnify,"," defend, and hold each Contributor harmless for any liability"," incurred by, or claims asserted against, such Contributor by reason"," of your accepting any such warranty or additional liability.",""," END OF TERMS AND CONDITIONS",""," APPENDIX: How to apply the Apache License to your work.",""," To apply the Apache License to your work, attach the following"," boilerplate notice, with the fields enclosed by brackets \"[]\""," replaced with your own identifying information. (Don't include"," the brackets!) The text should be enclosed in the appropriate"," comment syntax for the file format. We also recommend that a"," file or class name and description of purpose be included on the"," same \"printed page\" as the copyright notice for easier"," identification within third-party archives.",""," Copyright 上海识沃网络科技有限公司 [service@swoole.com]",""," Licensed under the Apache License, Version 2.0 (the \"License\");"," you may not use this file except in compliance with the License."," You may obtain a copy of the License at",""," http://www.apache.org/licenses/LICENSE-2.0",""," Unless required by applicable law or agreed to in writing, software"," distributed under the License is distributed on an \"AS IS\" BASIS,"," WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."," See the License for the specific language governing permissions and"," limitations under the License."],"stylingDirectives":[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/swoole/phpy/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"LICENSE","displayUrl":"https://github.com/swoole/phpy/blob/1.0.6/LICENSE?raw=true","headerInfo":{"blobSize":"11.1 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":null,"isGitLfs":false,"onBranch":false,"shortPath":"008e268","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fswoole%2Fphpy%2Fblob%2F1.0.6%2FLICENSE","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"202","truncatedSloc":"169"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"Text","languageID":372,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/swoole/phpy/blob/1.0.6/LICENSE","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/swoole/phpy/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/swoole/phpy/raw/1.0.6/LICENSE","renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"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,"symbols":{"timed_out":false,"not_analyzed":true,"symbols":[]}},"copilotInfo":null,"copilotAccessAllowed":false,"csrf_tokens":{"/swoole/phpy/branches":{"post":"3HITEkhXp-3OXsLahTD7I-0royYPUaSjBkXQnG4YHhlY9AiApztMqRRNoij2M4ODxuDlfrbCjFEXuId70R6FOg"},"/repos/preferences":{"post":"M5nOjQKYVVvDDkHZxYR43sMd-SwQ7-oKmGoQI9c1v5BgO04erAgNl2BSot2sswm71NOk4fLVbQxEH6uJdA1_8g"}}},"title":"phpy/LICENSE at 1.0.6 · swoole/phpy","appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-1583894afd38.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-3a63a487027b.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"overview_shared_code_dropdown_button":false,"react_blob_overlay":false,"copilot_conversational_ux_embedding_update":false,"copilot_smell_icebreaker_ux":true,"copilot_workspace":false}}}</script>
+ <div data-target="react-app.reactRoot"></div>
+</react-app>
+</turbo-frame>
+
+
+
+ </div>
+
+</turbo-frame>
+
+ </main>
+ </div>
+
+ </div>
+
+ <footer class="footer pt-8 pb-6 f6 color-fg-muted 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="Homepage" title="GitHub" 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="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path>
+</svg>
+</a>
+ <span>
+ &copy; 2024 GitHub,&nbsp;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="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" 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="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" 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="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
+ </li>
+
+ <li class="mx-2">
+ <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
+ </li>
+
+ <li class="mx-2">
+ <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
+ </li>
+
+ <li class="mx-2">
+ <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
+ </li>
+
+ <li class="mr-3" >
+ <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="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
+ >
+ Manage cookies
+ </button>
+ </cookie-consent-link>
+</li>
+
+<li class="mr-3">
+ <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="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
+ >
+ 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-initial-cookie-consent-allowed="" data-cookie-consent-required="true"></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 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">
+ <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">
+ <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>
+
+
+
+
+ </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>
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..13af741
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,4 @@
+SRCDIR := $(shell pwd)
+NAME := $(shell basename $(SRCDIR))
+include ../../../common/Makefile
+
diff --git a/PHPINFO b/PHPINFO
new file mode 100644
index 0000000..bd983cc
--- /dev/null
+++ b/PHPINFO
@@ -0,0 +1,9 @@
+
+phpy
+
+phpy support => enabled
+Copyright => 上海识沃网络科技有限公司
+Email => service@swoole.com
+Website => https://www.swoole.com/
+Extension Version => 1.0.6
+Python Version => 3.12.4
diff --git a/REFLECTION b/REFLECTION
new file mode 100644
index 0000000..2e069be
--- /dev/null
+++ b/REFLECTION
@@ -0,0 +1,1813 @@
+Extension [ <persistent> extension #87 phpy version 1.0.6 ] {
+
+ - Classes [13] {
+ Class [ <internal:phpy> class PyCore ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [12] {
+ Method [ <internal:phpy> static public method import ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy> static public method eval ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $code ]
+ Parameter #1 [ <optional> ?array $globals = null ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy> static public method int ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $value ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy> static public method float ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $value ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy> static public method bytes ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed $value = null ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy> static public method object ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed $value = null ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy> static public method fn ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> callable $cb ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy> static public method scalar ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $value ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy> static public method next ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> PyObject $iter ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy> static public method fileno ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $fp ]
+ }
+ - Return [ int|false ]
+ }
+
+ Method [ <internal:phpy> static public method setOptions ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> array $options ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy> static public method __callStatic ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [0] {
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> class PyObject implements Stringable, Iterator, Traversable, ArrayAccess, Countable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed $value = null ]
+ }
+ }
+
+ Method [ <internal:phpy> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyStr extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $value ]
+ }
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyModule extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, inherits PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed $value = null ]
+ }
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyDict extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> array $value = null ]
+ }
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> abstract class PySequence extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [18] {
+ Method [ <internal:phpy> public method contains ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $v ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy> public method slice ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> int $s ]
+ Parameter #1 [ <required> int $e ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed $value = null ]
+ }
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyList extends PySequence implements Stringable, Iterator, Traversable, ArrayAccess, Countable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [18] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> array $value = null ]
+ }
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PySequence> public method contains ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $v ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PySequence> public method slice ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> int $s ]
+ Parameter #1 [ <required> int $e ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyTuple extends PySequence implements Stringable, Iterator, Traversable, ArrayAccess, Countable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [18] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $data ]
+ }
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PySequence> public method contains ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $v ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PySequence> public method slice ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> int $s ]
+ Parameter #1 [ <required> int $e ]
+ }
+ - Return [ PyObject ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PySet extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [17] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> array $data = null ]
+ }
+ }
+
+ Method [ <internal:phpy, overwrites PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+
+ Method [ <internal:phpy> public method contains ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $v ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyType extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> private method __construct ] {
+
+ - Parameters [0] {
+ }
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyFn extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> callable $fn ]
+ }
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> <iterateable> final class PyIter extends PyObject implements Countable, ArrayAccess, Traversable, Iterator, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [16] {
+ Method [ <internal:phpy, overwrites PyObject, ctor> private method __construct ] {
+
+ - Parameters [0] {
+ }
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __call ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> array $arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __get ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> string $name ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __set ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> string $name ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject> public method __invoke ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> mixed ...$arguments ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetGet ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetSet ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> mixed $offset ]
+ Parameter #1 [ <required> mixed $value ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetUnset ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype ArrayAccess> public method offsetExists ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> mixed $offset ]
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method key ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method next ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method rewind ] {
+
+ - Parameters [0] {
+ }
+ - Return [ void ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method valid ] {
+
+ - Parameters [0] {
+ }
+ - Return [ bool ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Iterator> public method current ] {
+
+ - Parameters [0] {
+ }
+ - Return [ mixed ]
+ }
+
+ Method [ <internal:phpy, inherits PyObject, prototype Countable> public method count ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+ }
+ }
+
+ Class [ <internal:phpy> final class PyError extends Exception implements Throwable, Stringable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [8] {
+ Property [ protected $message = '' ]
+ Property [ protected $code = 0 ]
+ Property [ protected string $file = '' ]
+ Property [ protected int $line = 0 ]
+ Property [ public $error = NULL ]
+ Property [ public $type = NULL ]
+ Property [ public $value = NULL ]
+ Property [ public $traceback = NULL ]
+ }
+
+ - Methods [10] {
+ Method [ <internal:Core, inherits Exception, ctor> public method __construct ] {
+
+ - Parameters [3] {
+ Parameter #0 [ <optional> string $message = "" ]
+ Parameter #1 [ <optional> int $code = 0 ]
+ Parameter #2 [ <optional> ?Throwable $previous = null ]
+ }
+ }
+
+ Method [ <internal:Core, inherits Exception> public method __wakeup ] {
+
+ - Parameters [0] {
+ }
+ - Tentative return [ void ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getMessage ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getCode ] {
+
+ - Parameters [0] {
+ }
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getFile ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getLine ] {
+
+ - Parameters [0] {
+ }
+ - Return [ int ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getTrace ] {
+
+ - Parameters [0] {
+ }
+ - Return [ array ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getPrevious ] {
+
+ - Parameters [0] {
+ }
+ - Return [ ?Throwable ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Throwable> final public method getTraceAsString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+
+ Method [ <internal:Core, inherits Exception, prototype Stringable> public method __toString ] {
+
+ - Parameters [0] {
+ }
+ - Return [ string ]
+ }
+ }
+ }
+ }
+}
+
diff --git a/php-pecl-phpy.spec b/php-pecl-phpy.spec
new file mode 100644
index 0000000..4d22a30
--- /dev/null
+++ b/php-pecl-phpy.spec
@@ -0,0 +1,187 @@
+# remirepo spec file for php-pecl-phpy
+#
+# Copyright (c) 2024 Remi Collet
+# License: CC-BY-SA-4.0
+# http://creativecommons.org/licenses/by-sa/4.0/
+#
+# Please, preserve the changelog entries
+#
+%if 0%{?scl:1}
+%scl_package php-pecl-phpy
+%else
+%global _root_bindir %{_bindir}
+%endif
+
+%global pecl_name phpy
+%global ini_name 40-%{pecl_name}.ini
+%global with_zts 0%{!?_without_zts:%{?__ztsphp:1}}
+%global sources %{pecl_name}-%{version}
+%global _configure ../%{sources}/configure
+
+
+Summary: An extension for inter-calling Python and PHP
+Name: %{?scl_prefix}php-pecl-%{pecl_name}
+Version: 1.0.6
+Release: 1%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
+License: Apache-2.0
+URL: https://pecl.php.net/package/%{pecl_name}
+Source0: https://pecl.php.net/get/%{sources}.tgz
+
+Source1: https://github.com/swoole/phpy/blob/%{version}/LICENSE
+Patch0: 61.patch
+Patch1: 64.patch
+
+BuildRequires: make
+BuildRequires: %{?dtsprefix}gcc
+BuildRequires: %{?scl_prefix}php-devel >= 8.1
+BuildRequires: %{?scl_prefix}php-pear
+# See https://github.com/swoole/phpy/issues/63
+BuildRequires: python3-devel >= 3.8
+
+Requires: %{?scl_prefix}php(zend-abi) = %{php_zend_api}
+Requires: %{?scl_prefix}php(api) = %{php_core_api}
+
+Provides: %{?scl_prefix}php-%{pecl_name} = %{version}
+Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = %{version}
+Provides: %{?scl_prefix}php-pecl(%{pecl_name}) = %{version}
+Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version}
+
+
+%description
+This extension allows PHP to directly use Python modules and functions without
+RPC. Including Pytorch, transformer, numpy, tensorflow and other Python AI
+libraries, which can be used like calling PHP functions.
+
+Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')%{?scl: as Software Collection (%{scl} by %{?scl_vendor}%{!?scl_vendor:rh})}.
+
+
+%prep
+%setup -q -c
+
+# Don't install/register tests
+sed -e 's/role="test"/role="src"/' \
+ -e '/README/s/role="src"/role="doc"/' \
+ -e '/LICENSE/s/role="doc"/role="src"/' \
+ -i package.xml
+
+cd %{sources}
+# drop unneeded options (keep std=c++14)
+sed -s '/-Wall/d' -i config.m4
+
+# See https://github.com/swoole/phpy/pull/61
+%patch -P0 -p1 -b .pr61
+
+# See https://github.com/swoole/phpy/pull/64
+%patch -P1 -p1 -b .pr64
+
+# See https://github.com/swoole/phpy/pull/62
+cp %{SOURCE1} .
+
+# Sanity check, really often broken
+extver=$(sed -n '/# define PHP_PHPY_VERSION/{s/.* "//;s/".*$//;p}' php_phpy.h)
+if test "x${extver}" != "x%{version}"; then
+ : Error: Upstream extension version is ${extver}, expecting %{version}.
+ exit 1
+fi
+cd ..
+
+mkdir NTS
+%if %{with_zts}
+mkdir ZTS
+%endif
+
+# Create configuration file
+cat > %{ini_name} << 'EOF'
+; Enable %{pecl_name} extension module
+extension=%{pecl_name}.so
+EOF
+
+
+%build
+%{?dtsenable}
+
+cd %{sources}
+%{__phpize}
+
+cd ../NTS
+%configure \
+ --enable-phpy \
+ --with-python-config=%{_root_bindir}/python3-config \
+ --with-libdir=%{_lib} \
+ --with-php-config=%{__phpconfig}
+make %{?_smp_mflags}
+
+%if %{with_zts}
+cd ../ZTS
+%configure \
+ --enable-phpy \
+ --with-python-config=%{_root_bindir}/python3-config \
+ --with-libdir=%{_lib} \
+ --with-php-config=%{__ztsphpconfig}
+make %{?_smp_mflags}
+%endif
+
+
+%install
+%{?dtsenable}
+
+make -C NTS \
+ install INSTALL_ROOT=%{buildroot}
+
+# install config file
+install -D -m 644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name}
+
+# Install XML package description
+install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml
+
+%if %{with_zts}
+make -C ZTS \
+ install INSTALL_ROOT=%{buildroot}
+
+install -D -m 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name}
+%endif
+
+# Documentation
+for i in LICENSE $(grep 'role="doc"' package.xml | sed -e 's/^.*name="//;s/".*$//')
+do install -Dpm 644 %{sources}/$i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i
+done
+
+
+%check
+cd %{sources}
+
+# Minimal load test for NTS extension
+%{__php} --no-php-ini \
+ --define extension=%{buildroot}/%{php_extdir}/%{pecl_name}.so \
+ --modules | grep '^%{pecl_name}$'
+
+%if %{with_zts}
+# Minimal load test for ZTS extension
+%{__ztsphp} --no-php-ini \
+ --define extension=%{buildroot}/%{php_ztsextdir}/%{pecl_name}.so \
+ --modules | grep '^%{pecl_name}$'
+%endif
+
+
+%files
+%license %{sources}/LICENSE
+%doc %{pecl_docdir}/%{pecl_name}
+%{pecl_xmldir}/%{name}.xml
+
+%config(noreplace) %{php_inidir}/%{ini_name}
+%{php_extdir}/%{pecl_name}.so
+
+%if %{with_zts}
+%config(noreplace) %{php_ztsinidir}/%{ini_name}
+%{php_ztsextdir}/%{pecl_name}.so
+%endif
+
+
+%changelog
+* Tue Aug 20 2024 Remi Collet <remi@remirepo.net> - 1.0.6-1
+- initial package
+- open https://github.com/swoole/phpy/pull/61 use cxx linker
+- open https://github.com/swoole/phpy/pull/62 add LICENSE
+- open https://github.com/swoole/phpy/issues/63 broken with python 3.6
+- open https://github.com/swoole/phpy/pull/64 report python version
+