Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save aliyaliu368/891eef75e09494e965d291ead4a80d17 to your computer and use it in GitHub Desktop.
Save aliyaliu368/891eef75e09494e965d291ead4a80d17 to your computer and use it in GitHub Desktop.
教學用電子書免登入破解教學 | 本腳本用於繞過台灣主要課本/習作出版社電子書的前端身份驗證,達成不需要教師帳號即可使用電子書。支援 翰林、南一、康軒 三大出版社 | 請勿將本腳本作為抄答案、侵權等惡意用途,使用本腳本者,請自行承擔所有後果與風險

Visits_Count

教學用電子書免登入破解教學

使用前請務必閱讀 免責聲明

免責聲明

請勿將本腳本作為抄答案、侵權等惡意用途,使用本腳本者,請自行承擔所有後果與風險。

簡介

此腳本用於繞過台灣主要課本/習作出版社電子書的前端身份驗證,達成不需要教師帳號即可使用電子書。

開發緣由

原本是因為開發者忘記帶課本,但又想要查閱課本的資料,心血來潮研究看看電子書的驗證設計。
開發這個不是希望拿去抄答案,是希望讓真正需要用的人可以用到,也希望各家出版社能提供一種學生與家長的版本,就是只能瀏覽但不能顯示解答或者專為學習者設計,就可以完美解決這些問題。

如何使用

這邊示範翰林版如何使用,其他出版社以此類推 首先先前往要使用的電子書網站 (下方有連結),接著在瀏覽器的開發者頁面 (F12) 中的主控台 (Console) 輸入以下腳本,最後重新載入網頁即可迴避登入。

這邊是以 Google Chrome 的環境作為示範,Firefox/Edge/Safari 大同小異。

image

腳本

✅ 康軒

連結:康軒網頁媒體盒

localStorage.setItem("loginAccount", "mockAccount"); // 設定一個假的帳號
localStorage.setItem("uuid", "mockUUID"); // 設定假的 UUID

最後測試時間:2022/10/18

✅ 南一

連結:OneBook 南一電子書

let mockToken = JSON.stringify({
    "code": "SUCCESS",
    "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbXlhY2NvdW50Lm5hbmkuY29vbC8iLCJzdWIiOiJ1c2Vycy9qYWNreWNoaXUwMSIsImZyb20iOiJOYW5pIiwidXNlcm5hbWUiOiJqYWNreWNoaXUwMSIsImVtYWlsdmFsaWQiOnRydWUsIm1vYmlsZXZhbGlkIjpmYWxzZSwiZW1haWwiOiJraW5tYTE1OTg3NTMyQGdtYWlsLmNvbSIsInVpZCI6ImI1ZjE3MGYwLTI5ZmMtMTFlZC04NDJjLTQ5OTAxMGVhODI0MCIsImp0aSI6IjliOGI5OTE1LWYyMGQtNGNlMS04ZmJjLTA0OWFhYjkzZTY4ZiIsImlhdCI6MTY2NzIzMTA2NiwiZXhwIjoxNjcyNDE1MDY2fQ.R9cjUUSocKL9CiPTa2Tf8zPNiZLSJLRqH9eQAniMsJw"});

let fieldName = "nani_oneclass_login_token";
var d = new Date();
d.setTime(d.getTime() + (1 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
var hostname = window.location.hostname;
if (hostname.indexOf("oneclass.com.tw") > 0) {
  document.cookie = fieldName + "=" + mockToken + ";" + expires + ";path=/;domain=oneclass.com.tw";
} else {
  document.cookie = fieldName + "=" + mockToken + ";" + expires + ";path=/";
}
    
localStorage.setItem("nani_tokenInfo", mockToken); // 設定身分驗證用的 toekn

最後測試時間:2022/11/13
token 由 @jackychiu0207 提供

❌ 翰林

連結:翰林行動大師電子書

let time = new Date().getTime().toString();
localStorage.setItem("last_signinX_v2023", time); // 將帳號登入日期設定為現在,避免被判定為過期
localStorage.setItem("roleX_v2023", "老師"); // 設定身份為老師
localStorage.setItem("emailX_v2023", "[email protected]"); // 由於翰林電子書會驗證是否有設定 email,如果有設定才能使用
localStorage.setItem("tokenX_v2023", "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1NzgwNWYxZGQ3ZmE5YTZiNTI3ZjQ0ZWNmZmJkNDhjIiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NjYyNTk4NzEsImV4cCI6MTY2ODkzODI3MSwiaXNzIjoiaHR0cHM6Ly9pZC5obGUuY29tLnR3IiwiYXVkIjpbImh0dHBzOi8vaWQuaGxlLmNvbS50dy9yZXNvdXJjZXMiLCJhcGkxIiwiSWRlbnRpdHlTZXJ2ZXJBcGkiLCJoYW5saW4tYXBpIl0sImNsaWVudF9pZCI6ImpzIiwic3ViIjoiZGJiYmEwNmEtNWNkNy00NTI5LWI2MjEtOTBlYjdhMGIxOWZlIiwiYXV0aF90aW1lIjoxNjY2MjU5ODcwLCJpZHAiOiJsb2NhbCIsIkFzcE5ldC5JZGVudGl0eS5TZWN1cml0eVN0YW1wIjoiNURHN1ZSWVVWRUdUSjJVQ1czU0FDRkpBT1NHM0RONEIiLCJyb2xlIjpbIuiAgeW4qyIsIuiAgeW4qyJdLCJlbWFpbCI6WyJraW5tYTE1OTg3NTMyQGdtYWlsLmNvbSIsImtpbm1hMTU5ODc1MzJAZ21haWwuY29tIl0sImZhbWlseV9uYW1lIjoi576FIiwiZ2l2ZW5fbmFtZSI6IuWFg-iyniIsIm5hbWUiOiLnvoXlhYPosp4iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoi576F5YWD6LKeIiwidXNlcl9kb21haW4iOiJlZHUiLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiYXBpMSIsIklkZW50aXR5U2VydmVyQXBpIiwiaGFubGluLWFwaSIsIm9mZmxpbmVfYWNjZXNzIl0sImFtciI6WyJwd2QiXX0.So0Fcvd-a_BlnQcgcmO7vXTxlCJ_AnIEPPwpoHHpqc2cP3fBCGrY496R1q4J9j2E9sYUahxeYu7M3RMhPS_79JiEq8EWcSUvNxJASwAgvmek_HxWS2sgPZbvFkCJ1zYXfqHpbUaRfeqNPZyB3Yno94OYU4nl5f0gRzwUf2kGiyM2XhTO5EQZUCXGDJfqNmBlnwL45MwlQ_l_sRSYFNllda37nTECse91Qe1DeYKCm1Z9s8MerCCnmJgpjNsKOPodvbz8ynUT7qbU2IDldb8z8h0mtI9DbW8tuG63c-Nqyr2ZHPXT5aIaWtYUUBgFrVakVW-nI0kv5cEYj8grUyuZFg") // 設定身分驗證用的 token

最後測試時間:2022/11/12
token 由 @jackychiu0207 提供

限制

  • 因為此腳本僅繞過前端的身份驗證,因此可能會導致無法使用儲存班級紀錄、測驗等功能。
  • 翰林版電子書每天會自動重置資料,因此需重新執行腳本。
  • 南一版電子書因設計較為嚴謹,可能在未來此破解方法將無法使用,需尋找更好的解決方案。

The script was made by SiongSng | 此腳本由 菘菘 製作
版權所有 © 2022 菘菘。 保留所有權利。
Copyright © 2022 SiongSng. All rights reserved.

Copy link

ghost commented Sep 6, 2024

感謝分享的腳本只能用在電子書
各方需要我在這裡找到分享
https://apk.tw/?fromuid=3675460

@CC77-Lee
Copy link

CC77-Lee commented Sep 6, 2024

破解更新啦,這次有自動化注入國小電子書
ha5418

用了篡改猴還是會出現登入畫面,不知是不又失效了?
感謝您熱心地提供

@vochant
Copy link

vochant commented Sep 6, 2024

破解更新啦,這次有自動化注入國小電子書
ha5418

用了篡改猴還是會出現登入畫面,不知是不又失效了? 感謝您熱心地提供

麻煩提供一下是哪個地方出現了登陸界面,提供一下網址可以嗎?目前設計的範圍是僅限查看電子書,其他地方因為有常量,我也只有手動修改的辦法

@chichi0301
Copy link

請問有人有去年的國小4上或是4下的康軒電子書嗎(5上5下.6上6下)? 可否寄給我或是檔案也可以..
([email protected])

@yy080
Copy link

yy080 commented Sep 6, 2024

求首冊與一年級數學

@chichi0301
Copy link

請問有人有去年的國小4上或是4下的康軒電子書嗎(5上5下.6上6下)? 可否寄給我或是檔案名稱也可以.. ([email protected]) 謝謝

@ha5418
Copy link

ha5418 commented Sep 6, 2024

破解更新啦,這次有自動化注入國小電子書
ha5418

用了篡改猴還是會出現登入畫面,不知是不又失效了? 感謝您熱心地提供

麻煩提供一下是哪個地方出現了登陸界面,提供一下網址可以嗎?目前設計的範圍是僅限查看電子書,其他地方因為有常量,我也只有手動修改的辦法

vochant
首先非常感謝你的提供
我目前已經可以使用你提供的腳本了
先前是不會操作竄改猴

@nuke936
Copy link

nuke936 commented Sep 7, 2024 via email

@vochant
Copy link

vochant commented Sep 7, 2024

您好!我和你先前一樣使用竄改猴 點選後就進入到登入帳號密碼畫面,請問可以教我怎麼使用破解 ha5418 @.> 於 2024年9月7日 週六 上午1:46 寫道:

@.
* commented on this gist. ------------------------------ 破解更新啦,這次有自動化注入國小電子書 ha5418 https://gist.github.com/ha5418 用了篡改猴還是會出現登入畫面,不知是不又失效了? 感謝您熱心地提供 麻煩提供一下是哪個地方出現了登陸界面,提供一下網址可以嗎?目前設計的範圍是僅限查看電子書,其他地方因為有常量,我也只有手動修改的辦法 vochant https://gist.github.com/vochant 首先非常感謝你的提供 我目前已經可以使用你提供的腳本了 先前是不會操作竄改猴 — Reply to this email directly, view it on GitHub https://gist.github.com/aliyaliu368/891eef75e09494e965d291ead4a80d17#gistcomment-5181169 or unsubscribe https://github.com/notifications/unsubscribe-auth/BDH73M7RZ2AA3VIR4TKRIETZVHS6ZBFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDUOJ2WLJDOMFWWLO3UNBZGKYLEL5YGC4TUNFRWS4DBNZ2F6YLDORUXM2LUPGBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCOJUGU3TENJSU52HE2LHM5SXFJTDOJSWC5DF . You are receiving this email because you commented on the thread. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub .

請麻煩提供一下網址

也可以看看F12的控制台中有沒有出現「運行模式: xxx (理由: 發現window.xxx)」字樣或者「運行模式未知」,回復我顯示什麼或者都沒有

@nuke936
Copy link

nuke936 commented Sep 7, 2024

您好_> 於2024年9月7日週六上午1:46 寫道:

_
@**
.**
* 對此要點發表評論。 ------------------------------ 破解更新啦,這次有自動化注入國小電子書 ha5418 https://gist. github .com/ha5418用了竄改猴還是會出現登入畫面,不知是不是又失效了? 感謝您熱心地提供麻煩提供一下是哪個位置出現登陸介面,提供一下網址可以嗎?gist.github.com/vochant首先非常感謝你提供的腳本,我目前已經可以使用你提供的腳本了,以前是不會操作竄改猴的 - 直接回复此電子郵件,在 GitHub https://gist.github上查看它。 ZLTSKBKK5TBNR2WLJDUOJ2WLJDOMFWWLO3UNBZGKYLEL5YGC4TUNFRWS4DBNZ2F6YLDORUXM2LUPGBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4IXDFVRZVJJJDOMFWWLK3UNBZGKYLEL52HS4IX OR4XAZNEM5UXG5FFOZQWY5LFVEYTCOJUGU3TENJSU52HE2LHM5SXFJTDOJSWC5DF .您收到這封電子郵件是因為您對該主題發表了評論。使用適用於 iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675或 Android https://play.google.com/store的GitHub Mobile 隨時隨地分類通知/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub

請麻煩提供一下網址

也可以看看F12的控制台中有沒有出現「運行模式: xxx (理由:發現window.xxx)」字樣或「運行模式未知」,回覆我顯示什麼或都沒有

感謝熱心回覆,我注入另一個KNSHDownloader腳本已可以使用網頁版
想請教可以用電腦版或是其它下載的方法嗎??
再次感謝您!!

@kellyrayn
Copy link

@nuke936
請問你是用那個腳本??

@amy76121
Copy link

amy76121 commented Sep 8, 2024 via email

@nuke936
Copy link

nuke936 commented Sep 8, 2024

@kellyrayn
Copy link

kellyrayn commented Sep 9, 2024 via email

@kellyrayn
Copy link

@nuke936 請問你是用那個腳本??

https://gist.github.com/aliyaliu368/891eef75e09494e965d291ead4a80d17?permalink_comment_id=5179920#gistcomment-5179920

試試這個

我也是用這個腳本
但要點開電子書時
就會要求要登入
想請問您篡改猴內要需要做什麼設定嗎?

@kellyrayn
Copy link

@nuke936
Copy link

nuke936 commented Sep 9, 2024

@nuke936請問你用的是動漫腳本嗎?

https://gist.github.com/aliyaliu368/891eef75e09494e965d291ead4a80d17?permalink_comment_id=5179920#gistcomment-5179920
試試這個

我也想用這個腳本 但要點開電子書時 就會要求登入 請問您修改猴子內要做什麼設定嗎?

image

我可以使用的是2.1 的這個版本,沒有其它設定

@okokpc
Copy link

okokpc commented Sep 10, 2024

// ==UserScript==
// @name         KNSHUtility
// @namespace    http://vochant.github.io/
// @version      2.1
// @description  KNSH Utility - Cracks & Features
// @author       Mirekintoc (vochant)
// @match        webetextbook.knsh.com.tw/*
// @match        digitalmaster.knsh.com.tw/v3/pages/*/index.html*
// @match        digitalmaster.knsh.com.tw/ebooks/BookMain/Viewer_A/index.html*
// @icon         https://webetextbook.knsh.com.tw/Ebookvieweran4Teacher/favicon.ico
// @grant        none
// @license      MIT
// @require      https://cdn.bootcdn.net/ajax/libs/jszip/3.10.1/jszip.js
// ==/UserScript==

(function() {
    'use strict';
    // 页面类型判定
    if (window.openebook) {
        console.log("运行模式: 导览页 (理由: 发现 window.openebook)");
        // 导览页面 - 绕过登录验证
        let src = window.openebook.toString(); // 修改前的代码
        let src_arg0 = src.split('(')[1].split(')')[0]; // 唯一的参数
        let src_main = src.split('{').slice(1).join('{').split('}').slice(0, -1).join('}').replace('readKeygrip', '_alwaysTrue'); // 主要片段,已打补丁
        let c = (async function() {}).constructor; // 获取 AsyncFunction 的构造函数
        window._alwaysTrue = function() {true}; // 一个用于绕过验证的替代函数
        window.openebook = c(src_arg0, src_main); // 替换原函数
    }
    else if (window.externalManager) {
        console.log("运行模式: 国小电子书 (理由: 发现 window.externalManager)");
        // 国小电子书页面 - 绕过登录验证
        window.SaveCommForKnshAPIOriginal = window.SaveCommForKnshAPI; // 备份原构造函数
        window.SaveCommForKnshAPI = function() {
            let obj = new SaveCommForKnshAPIOriginal;
            obj.VerifyHasLogin = function(arg) {
                var t = senjClass.GetQueryString("shortcode");
                var n = function(t) {
                    arg && arg.fun && arg.fun(t)
                };
                n({result: true});
                return true;
            }; // 重写
            console.log(obj);
            return obj;
        }; // 重写构造函数
    }
    else if (window.app) {
        console.log("运行模式: 国中电子书 (理由: 发现 window.app)");
        // 国中电子书页面 - 注入下载器
        window.downloadAssets = async function() {
            // 常量定义
            let options = {
                data_prefix: 'https://storage1.knsh.com.tw/WebEbook/',
                data_suffix: '/pageConfig.json',
                image_prefix: '/content/book/'
            }

            // 创建归档实例
            let zip = new JSZip();

            // 获取 ID
            let param = new URLSearchParams(location.search);
            let bookid = param.get('id').split('&')[0];

            // 获取描述
            let manifest_url = options.data_prefix + bookid + options.data_suffix;
            let manifest = await fetch(manifest_url).then(res => {
                return res.json();
            });
            manifest = manifest.content.book;

            // 获取索引
            let pages = [];
            manifest.forEach(function(item, index) {
                pages = pages.concat(item.files.reverse());
            });

            // 获取页
            let Page = async function(url) {
                // 获取数据
                let data = await fetch(url).then(res => {
                    return res.text();
                });
                // 获取路径
                let fromPath = './image';
                let toPath = url.split('/').slice(0, url.split('/').length - 1).join('/') + '/image';
                // 替换 URL
                data = data.replaceAll(fromPath, toPath);
                return data;
            }
            var proc = 0;
            let callback = async (item, index) => {
                // 添加非空页
                if (item != 'empty') {
                    let url = options.data_prefix + bookid + options.image_prefix + item + '.svg';
                    await Page(url).then(content => {
                        zip.file(index + ".svg", content);
                    });
                }
                // 计数并判定结束条件
                proc++;
                if (proc == pages.length) {
                    // 下载归档
                    zip.generateAsync({ type: 'blob' }).then(data => {
                        let Download = document.createElement('a');
                        Download.href = URL.createObjectURL(data);
                        Download.download = 'data.zip';
                        Download.style = 'display: none';
                        document.body.appendChild(Download);
                        Download.click();
                    });
                }
            };
            // 爬取全部页
            for (var i = 0; i < pages.length; i++) {
                callback(pages[i], i);
            }
            // 附: 控制台输入 downloadAssets() 下载
        }
    }
    else {
        console.log('运行模式未知');
    }
})();

使用這個腳本,國中可以,但國小會被要求輸入帳密,請問高手們,是否還要設定什麼呢?

@kerry0112
Copy link

破解程式碼
https://ppt.cc/fuOVtx
需要者可自行使用,原版https://ppt.cc/frXiKx

@kerry0112
Copy link

kerry0112 commented Sep 11, 2024

康軒媒體盒:(2024/9/11)
https://ppt.cc/fZKXBx
(請複製連結後,再打開)

@TRENTREN123456
Copy link

康軒媒體盒:(2024/9/11) https://ppt.cc/fZKXBx (請複製連結後,再打開)

大大你好,複製連結打開後沒有辦法打開媒體盒呢><
想請問上述的CODE是破解康軒的電子書嗎?
自從他更新網頁版本就沒辦法破解了
求求教學
謝謝你

@TRENTREN123456
Copy link

康軒媒體盒:(2024/9/11) https://ppt.cc/fZKXBx (請複製連結後,再打開)

大大你好,複製連結打開後沒有辦法打開媒體盒呢>< 想請問上述的CODE是破解康軒的電子書嗎? 自從他更新網頁版本就沒辦法破解了 求求教學 謝謝你

Uploading Screen Shot 2024-09-12 at 6.32.25 pm.png…

@kerry0112
Copy link

點進去裡面,按下載(另外建立是因為避免康軒媒體盒更新影響到破解)應該就可以了

@TRENTREN123456
Copy link

點進去裡面,按下載(另外建立是因為避免康軒媒體盒更新影響到破解)應該就可以了

我是電腦白痴(啜泣) 請問可不可以幫我下載康軒 Wonder World (7) 六年級上學期的課本
可以付款給您!! 拜託了 急需這本課本..... (掩鼻啜泣)

@vochant
Copy link

vochant commented Sep 12, 2024

誰使用我的腳本遇到問題的可以先看一下控制台中腳本的運行模式調試信息和應該被注入的關鍵變量的值,我在Windows和Linux系統上分別使用Chrome瀏覽器和Edge瀏覽器都沒有遇到需要登陸的情況(設計範圍外的內容除外),不知道BUG出在哪我也沒法修啊(

不過誰需要代下載的我確實可以試試看,網頁端有的可下載資源都可以

@reb1166
Copy link

reb1166 commented Sep 12, 2024 via email

@TRENTREN123456
Copy link

您好,我可以幫你下載上傳,請問你會用google driver 方式下載嗎 TRENTREN123456 @.> 於 2024年9月12日 週四 下午7:20 寫道:

@.
* commented on this gist. ------------------------------ 點進去裡面,按下載(另外建立是因為避免康軒媒體盒更新影響到破解)應該就可以了 我是電腦白痴(啜泣) 請問可不可以幫我下載康軒 Wonder World (7) 六年級上學期的課本 可以付款給您!! 拜託了 急需這本課本..... (掩鼻啜泣) 我的email: @.*** — Reply to this email directly, view it on GitHub https://gist.github.com/aliyaliu368/891eef75e09494e965d291ead4a80d17#gistcomment-5187355 or unsubscribe https://github.com/notifications/unsubscribe-auth/BDH73M3BXE6LKLXUL2M2GY3ZWF2H5BFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDUOJ2WLJDOMFWWLO3UNBZGKYLEL5YGC4TUNFRWS4DBNZ2F6YLDORUXM2LUPGBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCOJUGU3TENJSU52HE2LHM5SXFJTDOJSWC5DF . You are receiving this email because you commented on the thread. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub .

@nuke936
謝謝你><!昨天下載了windows 模擬器然後照著破解說明
最後到了康軒的舊版網站頁面後有下載成功了
謝謝你的心意 真的非常感激

@TRENTREN123456
Copy link

還有你真的很厲害!謝謝幫助大家下載學習用的東西

@htgle
Copy link

htgle commented Sep 14, 2024

請問各位大老可以開放下載的功能嗎 電子書+題庫 謝謝

@egfvdf
Copy link

egfvdf commented Sep 14, 2024

誰使用我的腳本遇到問題的可以先看一下控制台中腳本的運行模式調試信息和應該被注入的關鍵變量的值,我在Windows和Linux系統上分別使用Chrome瀏覽器和Edge瀏覽器都沒有遇到需要登陸的情況(設計範圍外的內容除外),不知道BUG出在哪我也沒法修啊(

不過誰需要代下載的我確實可以試試看,網頁端有的可下載資源都可以

求帮助这里的脚本我都用篡改猴试过了都没用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment