From 334458111dea61f76c26deb1166af0ef0e4b912d Mon Sep 17 00:00:00 2001 From: lebr0nli Date: Fri, 13 Aug 2021 12:32:31 +0800 Subject: [PATCH] Add support to Safari #19 --- .../Quizlet bypass Extension/Info.plist | 33 ++ .../Quizlet_bypass_Extension.entitlements | 10 + .../Resources/js/quizlet_bypass.js | 120 +++++ .../Resources/manifest.json | 18 + .../SafariWebExtensionHandler.swift | 26 + .../Quizlet bypass.xcodeproj/project.pbxproj | 506 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 22073 bytes .../xcschemes/xcschememanagement.plist | 14 + .../Quizlet bypass/AppDelegate.swift | 25 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 58 ++ .../Assets.xcassets/Contents.json | 6 + .../Quizlet bypass/Base.lproj/Main.storyboard | 167 ++++++ .../Quizlet bypass/Info.plist | 30 ++ .../Quizlet_bypass.entitlements | 10 + .../Quizlet bypass/ViewController.swift | 51 ++ 18 files changed, 1100 insertions(+) create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass Extension/Info.plist create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass Extension/Quizlet_bypass_Extension.entitlements create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/js/quizlet_bypass.js create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/manifest.json create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass Extension/SafariWebExtensionHandler.swift create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.pbxproj create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcuserdata/alanli.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/xcuserdata/alanli.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/AppDelegate.swift create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/Contents.json create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/Base.lproj/Main.storyboard create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/Info.plist create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/Quizlet_bypass.entitlements create mode 100644 Quizlet-bypass(Safari)/Quizlet bypass/ViewController.swift diff --git a/Quizlet-bypass(Safari)/Quizlet bypass Extension/Info.plist b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Info.plist new file mode 100644 index 0000000..1752d42 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Quizlet bypass Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSExtension + + NSExtensionPointIdentifier + com.apple.Safari.web-extension + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).SafariWebExtensionHandler + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass Extension/Quizlet_bypass_Extension.entitlements b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Quizlet_bypass_Extension.entitlements new file mode 100644 index 0000000..f2ef3ae --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Quizlet_bypass_Extension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/js/quizlet_bypass.js b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/js/quizlet_bypass.js new file mode 100644 index 0000000..873adb2 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/js/quizlet_bypass.js @@ -0,0 +1,120 @@ +// Remove 'x' free solutions badge and "verify your email" badge. +setTimeout(function () { + if (document.querySelector('.BannerWrapper')) { document.querySelector('.BannerWrapper').style.display = "none"; } + if (document.querySelector('.UINotification')) { document.querySelector('.UINotification').style.display = "none"; } +}, 2000); + +checkIfNewAccountNeeded(); + +function checkIfNewAccountNeeded() +{ + setTimeout(function () { + console.log("test"); + // Three cases: Almost out of solutions, not logged in at all, or out of solutions. + + // Almost out of solutions + if (pageContains("This is your last free explanation")) + { + // Don't reload, not actually out of solutions yet. + signUpNewAccount(false); + } + // Not logged in + else if (pageContains("Create a free account to see explanations")) + { + signUpNewAccount(true); + } + // Out of solutions + else if (pageContains("YOU'VE REACHED YOUR FREE LIMIT")) + { + signUpNewAccount(true); + } + + + // Catchall for logged out entirely. + else if (!isLoggedIn()) + { + signUpNewAccount(true); + } + // Catchall for out of solutions + else if (pageContains('source=explanations_meter_exceeded')) + { + signUpNewAccount(true); + } + }, 2000) +} + +function signUpNewAccount(doesReload) +{ + // We're just gonna assume this is a large enough characterspace for it to never matter. + var name = "sq_bypass_" + randomString(10, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); + + var request = fetch("https://quizlet.com/webapi/3.2/direct-signup", { + "headers": { + "accept": "application/json", + "accept-language": "en-US,en;q=0.9", + "content-type": "application/json", + "cs-token": getToken(), + "sec-ch-ua": "\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"91\", \"Chromium\";v=\"91\"", + "sec-ch-ua-mobile": "?0", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "x-requested-with": "XMLHttpRequest" + }, + "referrer": "https://quizlet.com/goodbye", + "referrerPolicy": "origin-when-cross-origin", + "body": "{\"TOS\":false,\"birth_day\":\"5\",\"birth_month\":\"5\",\"birth_year\":\"2000\",\"email\":\"" + name + "@example.com\",\"is_free_teacher\":\"2\",\"is_parent\":false,\"password1\":\"SladerBypassPassword\",\"redir\":\"https://quizlet.com/goodbye\",\"signupOrigin\":\"global-header-link\",\"screenName\":\"Logout/logoutMobileSplash\",\"username\":\"" + name + "\",\"marketing_opt_out\":false}", + "method": "POST", + "mode": "cors", + "credentials": "include" + }).then(function() + { + if (doesReload) + { + location.reload(); + } + }); + return true; +}; + +function randomString(length, chars) { + var result = ''; + for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; + return result; +}; + +function getToken(){ + token = document.cookie.match("(?:^|;)\\s*" + "qtkn".replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "$&") + "=([^;]*)"); + return decodeURIComponent(token[1]); +}; + +function pageContains(str) +{ + if (document.body.innerHTML.match(str)) + { + return true; + } + else + { + return false; + } +} + +function isLoggedIn() +{ + // Looks for `{"LOGGED_IN":false,` in the header. + var li = document.head.innerHTML.match(/"LOGGED_IN":(\w+)/)[1]; + + if (li === "false") + { + return false; + } + else if (li === "true") + { + return true; + } + else + { + return true; // Return true on possible error to prevent explosion of accounts. Effectively assumes logged in on error. + } +} diff --git a/Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/manifest.json b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/manifest.json new file mode 100644 index 0000000..99f74fa --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass Extension/Resources/manifest.json @@ -0,0 +1,18 @@ +{ + "name": "Quizlet bypass", + "version": "0.10", + "author": "Alan Li & Ethan Harvey", + "description": "Quizlet limit bypass", + "content_scripts": [ + { + "matches": [ + "*://quizlet.com/explanations/questions/*", + "*://quizlet.com/explanations/textbook-solutions/*/*" + ], + "js": [ + "js/quizlet_bypass.js" + ] + } + ], + "manifest_version": 2 +} \ No newline at end of file diff --git a/Quizlet-bypass(Safari)/Quizlet bypass Extension/SafariWebExtensionHandler.swift b/Quizlet-bypass(Safari)/Quizlet bypass Extension/SafariWebExtensionHandler.swift new file mode 100644 index 0000000..690b5a8 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass Extension/SafariWebExtensionHandler.swift @@ -0,0 +1,26 @@ +// +// SafariWebExtensionHandler.swift +// Quizlet bypass Extension +// +// Created by Alan Li on 2021/8/13. +// + +import SafariServices +import os.log + +let SFExtensionMessageKey = "message" + +class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { + + func beginRequest(with context: NSExtensionContext) { + let item = context.inputItems[0] as! NSExtensionItem + let message = item.userInfo?[SFExtensionMessageKey] + os_log(.default, "Received message from browser.runtime.sendNativeMessage: %@", message as! CVarArg) + + let response = NSExtensionItem() + response.userInfo = [ SFExtensionMessageKey: [ "Response to": message ] ] + + context.completeRequest(returningItems: [response], completionHandler: nil) + } + +} diff --git a/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.pbxproj b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.pbxproj new file mode 100644 index 0000000..01eb12b --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.pbxproj @@ -0,0 +1,506 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 47E2B58726C6212C00A24D52 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E2B58626C6212C00A24D52 /* AppDelegate.swift */; }; + 47E2B58A26C6212C00A24D52 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47E2B58826C6212C00A24D52 /* Main.storyboard */; }; + 47E2B58C26C6212C00A24D52 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E2B58B26C6212C00A24D52 /* ViewController.swift */; }; + 47E2B58E26C6212E00A24D52 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 47E2B58D26C6212E00A24D52 /* Assets.xcassets */; }; + 47E2B59526C6212E00A24D52 /* Quizlet bypass Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 47E2B59426C6212E00A24D52 /* Quizlet bypass Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 47E2B59A26C6212E00A24D52 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47E2B59926C6212E00A24D52 /* Cocoa.framework */; }; + 47E2B59D26C6212E00A24D52 /* SafariWebExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E2B59C26C6212E00A24D52 /* SafariWebExtensionHandler.swift */; }; + 47E2B5AC26C6212F00A24D52 /* js in Resources */ = {isa = PBXBuildFile; fileRef = 47E2B5AA26C6212F00A24D52 /* js */; }; + 47E2B5AD26C6212F00A24D52 /* manifest.json in Resources */ = {isa = PBXBuildFile; fileRef = 47E2B5AB26C6212F00A24D52 /* manifest.json */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 47E2B59626C6212E00A24D52 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 47E2B57A26C6212C00A24D52 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 47E2B59326C6212E00A24D52; + remoteInfo = "Quizlet bypass Extension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 47E2B5A526C6212E00A24D52 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 47E2B59526C6212E00A24D52 /* Quizlet bypass Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 47E2B58226C6212C00A24D52 /* Quizlet bypass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Quizlet bypass.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 47E2B58526C6212C00A24D52 /* Quizlet_bypass.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Quizlet_bypass.entitlements; sourceTree = ""; }; + 47E2B58626C6212C00A24D52 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 47E2B58926C6212C00A24D52 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 47E2B58B26C6212C00A24D52 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 47E2B58D26C6212E00A24D52 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 47E2B58F26C6212E00A24D52 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 47E2B59426C6212E00A24D52 /* Quizlet bypass Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Quizlet bypass Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 47E2B59926C6212E00A24D52 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 47E2B59C26C6212E00A24D52 /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; + 47E2B59E26C6212E00A24D52 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 47E2B59F26C6212E00A24D52 /* Quizlet_bypass_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Quizlet_bypass_Extension.entitlements; sourceTree = ""; }; + 47E2B5AA26C6212F00A24D52 /* js */ = {isa = PBXFileReference; lastKnownFileType = folder; name = js; path = Resources/js; sourceTree = ""; }; + 47E2B5AB26C6212F00A24D52 /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = manifest.json; path = Resources/manifest.json; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 47E2B57F26C6212C00A24D52 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 47E2B59126C6212E00A24D52 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 47E2B59A26C6212E00A24D52 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 47E2B57926C6212C00A24D52 = { + isa = PBXGroup; + children = ( + 47E2B58426C6212C00A24D52 /* Quizlet bypass */, + 47E2B59B26C6212E00A24D52 /* Quizlet bypass Extension */, + 47E2B59826C6212E00A24D52 /* Frameworks */, + 47E2B58326C6212C00A24D52 /* Products */, + ); + sourceTree = ""; + }; + 47E2B58326C6212C00A24D52 /* Products */ = { + isa = PBXGroup; + children = ( + 47E2B58226C6212C00A24D52 /* Quizlet bypass.app */, + 47E2B59426C6212E00A24D52 /* Quizlet bypass Extension.appex */, + ); + name = Products; + sourceTree = ""; + }; + 47E2B58426C6212C00A24D52 /* Quizlet bypass */ = { + isa = PBXGroup; + children = ( + 47E2B58526C6212C00A24D52 /* Quizlet_bypass.entitlements */, + 47E2B58626C6212C00A24D52 /* AppDelegate.swift */, + 47E2B58826C6212C00A24D52 /* Main.storyboard */, + 47E2B58B26C6212C00A24D52 /* ViewController.swift */, + 47E2B58D26C6212E00A24D52 /* Assets.xcassets */, + 47E2B58F26C6212E00A24D52 /* Info.plist */, + ); + path = "Quizlet bypass"; + sourceTree = ""; + }; + 47E2B59826C6212E00A24D52 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 47E2B59926C6212E00A24D52 /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 47E2B59B26C6212E00A24D52 /* Quizlet bypass Extension */ = { + isa = PBXGroup; + children = ( + 47E2B5A926C6212F00A24D52 /* Resources */, + 47E2B59C26C6212E00A24D52 /* SafariWebExtensionHandler.swift */, + 47E2B59E26C6212E00A24D52 /* Info.plist */, + 47E2B59F26C6212E00A24D52 /* Quizlet_bypass_Extension.entitlements */, + ); + path = "Quizlet bypass Extension"; + sourceTree = ""; + }; + 47E2B5A926C6212F00A24D52 /* Resources */ = { + isa = PBXGroup; + children = ( + 47E2B5AA26C6212F00A24D52 /* js */, + 47E2B5AB26C6212F00A24D52 /* manifest.json */, + ); + name = Resources; + path = "Quizlet bypass Extension"; + sourceTree = SOURCE_ROOT; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 47E2B58126C6212C00A24D52 /* Quizlet bypass */ = { + isa = PBXNativeTarget; + buildConfigurationList = 47E2B5A626C6212E00A24D52 /* Build configuration list for PBXNativeTarget "Quizlet bypass" */; + buildPhases = ( + 47E2B57E26C6212C00A24D52 /* Sources */, + 47E2B57F26C6212C00A24D52 /* Frameworks */, + 47E2B58026C6212C00A24D52 /* Resources */, + 47E2B5A526C6212E00A24D52 /* Embed App Extensions */, + ); + buildRules = ( + ); + dependencies = ( + 47E2B59726C6212E00A24D52 /* PBXTargetDependency */, + ); + name = "Quizlet bypass"; + productName = "Quizlet bypass"; + productReference = 47E2B58226C6212C00A24D52 /* Quizlet bypass.app */; + productType = "com.apple.product-type.application"; + }; + 47E2B59326C6212E00A24D52 /* Quizlet bypass Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 47E2B5A226C6212E00A24D52 /* Build configuration list for PBXNativeTarget "Quizlet bypass Extension" */; + buildPhases = ( + 47E2B59026C6212E00A24D52 /* Sources */, + 47E2B59126C6212E00A24D52 /* Frameworks */, + 47E2B59226C6212E00A24D52 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Quizlet bypass Extension"; + productName = "Quizlet bypass Extension"; + productReference = 47E2B59426C6212E00A24D52 /* Quizlet bypass Extension.appex */; + productType = "com.apple.product-type.app-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 47E2B57A26C6212C00A24D52 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 1250; + TargetAttributes = { + 47E2B58126C6212C00A24D52 = { + CreatedOnToolsVersion = 12.5.1; + }; + 47E2B59326C6212E00A24D52 = { + CreatedOnToolsVersion = 12.5.1; + }; + }; + }; + buildConfigurationList = 47E2B57D26C6212C00A24D52 /* Build configuration list for PBXProject "Quizlet bypass" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 47E2B57926C6212C00A24D52; + productRefGroup = 47E2B58326C6212C00A24D52 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 47E2B58126C6212C00A24D52 /* Quizlet bypass */, + 47E2B59326C6212E00A24D52 /* Quizlet bypass Extension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 47E2B58026C6212C00A24D52 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 47E2B58E26C6212E00A24D52 /* Assets.xcassets in Resources */, + 47E2B58A26C6212C00A24D52 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 47E2B59226C6212E00A24D52 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 47E2B5AD26C6212F00A24D52 /* manifest.json in Resources */, + 47E2B5AC26C6212F00A24D52 /* js in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 47E2B57E26C6212C00A24D52 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 47E2B58C26C6212C00A24D52 /* ViewController.swift in Sources */, + 47E2B58726C6212C00A24D52 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 47E2B59026C6212E00A24D52 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 47E2B59D26C6212E00A24D52 /* SafariWebExtensionHandler.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 47E2B59726C6212E00A24D52 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 47E2B59326C6212E00A24D52 /* Quizlet bypass Extension */; + targetProxy = 47E2B59626C6212E00A24D52 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 47E2B58826C6212C00A24D52 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 47E2B58926C6212C00A24D52 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 47E2B5A026C6212E00A24D52 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 47E2B5A126C6212E00A24D52 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 47E2B5A326C6212E00A24D52 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "Quizlet bypass Extension/Quizlet_bypass_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = "Quizlet bypass Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = "com.alanli.Quizlet-bypass.Extension"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 47E2B5A426C6212E00A24D52 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "Quizlet bypass Extension/Quizlet_bypass_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = "Quizlet bypass Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = "com.alanli.Quizlet-bypass.Extension"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 47E2B5A726C6212E00A24D52 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = "Quizlet bypass/Quizlet_bypass.entitlements"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "Quizlet bypass/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = "com.alanli.Quizlet-bypass"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 47E2B5A826C6212E00A24D52 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = "Quizlet bypass/Quizlet_bypass.entitlements"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "Quizlet bypass/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = "com.alanli.Quizlet-bypass"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 47E2B57D26C6212C00A24D52 /* Build configuration list for PBXProject "Quizlet bypass" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 47E2B5A026C6212E00A24D52 /* Debug */, + 47E2B5A126C6212E00A24D52 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 47E2B5A226C6212E00A24D52 /* Build configuration list for PBXNativeTarget "Quizlet bypass Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 47E2B5A326C6212E00A24D52 /* Debug */, + 47E2B5A426C6212E00A24D52 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 47E2B5A626C6212E00A24D52 /* Build configuration list for PBXNativeTarget "Quizlet bypass" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 47E2B5A726C6212E00A24D52 /* Debug */, + 47E2B5A826C6212E00A24D52 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 47E2B57A26C6212C00A24D52 /* Project object */; +} diff --git a/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcuserdata/alanli.xcuserdatad/UserInterfaceState.xcuserstate b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/project.xcworkspace/xcuserdata/alanli.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cd106f6177ff4546bf0391096409fd648eabf2b3 GIT binary patch literal 22073 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 literal 0 HcmV?d00001 diff --git a/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/xcuserdata/alanli.xcuserdatad/xcschemes/xcschememanagement.plist b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/xcuserdata/alanli.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..82e31a1 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass.xcodeproj/xcuserdata/alanli.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Quizlet bypass.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/AppDelegate.swift b/Quizlet-bypass(Safari)/Quizlet bypass/AppDelegate.swift new file mode 100644 index 0000000..a1adf5b --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/AppDelegate.swift @@ -0,0 +1,25 @@ +// +// AppDelegate.swift +// Quizlet bypass +// +// Created by Alan Li on 2021/8/13. +// + +import Cocoa + +@main +class AppDelegate: NSObject, NSApplicationDelegate { + + func applicationDidFinishLaunching(_ notification: Notification) { + // Insert code here to initialize your application + } + + func applicationWillTerminate(_ notification: Notification) { + // Insert code here to tear down your application + } + + func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + +} diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AccentColor.colorset/Contents.json b/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AppIcon.appiconset/Contents.json b/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..50ab7bd --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/Contents.json b/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/Base.lproj/Main.storyboard b/Quizlet-bypass(Safari)/Quizlet bypass/Base.lproj/Main.storyboard new file mode 100644 index 0000000..40988f3 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/Base.lproj/Main.storyboard @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/Info.plist b/Quizlet-bypass(Safari)/Quizlet bypass/Info.plist new file mode 100644 index 0000000..cfbbdb7 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/Quizlet_bypass.entitlements b/Quizlet-bypass(Safari)/Quizlet bypass/Quizlet_bypass.entitlements new file mode 100644 index 0000000..f2ef3ae --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/Quizlet_bypass.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Quizlet-bypass(Safari)/Quizlet bypass/ViewController.swift b/Quizlet-bypass(Safari)/Quizlet bypass/ViewController.swift new file mode 100644 index 0000000..e38c810 --- /dev/null +++ b/Quizlet-bypass(Safari)/Quizlet bypass/ViewController.swift @@ -0,0 +1,51 @@ +// +// ViewController.swift +// Quizlet bypass +// +// Created by Alan Li on 2021/8/13. +// + +import Cocoa +import SafariServices.SFSafariApplication +import SafariServices.SFSafariExtensionManager + +let appName = "Quizlet bypass" +let extensionBundleIdentifier = "com.alanli.Quizlet-bypass.Extension" + +class ViewController: NSViewController { + + @IBOutlet var appNameLabel: NSTextField! + + override func viewDidLoad() { + super.viewDidLoad() + self.appNameLabel.stringValue = appName + SFSafariExtensionManager.getStateOfSafariExtension(withIdentifier: extensionBundleIdentifier) { (state, error) in + guard let state = state, error == nil else { + // Insert code to inform the user that something went wrong. + return + } + + DispatchQueue.main.async { + if (state.isEnabled) { + self.appNameLabel.stringValue = "\(appName)'s extension is currently on." + } else { + self.appNameLabel.stringValue = "\(appName)'s extension is currently off. You can turn it on in Safari Extensions preferences." + } + } + } + } + + @IBAction func openSafariExtensionPreferences(_ sender: AnyObject?) { + SFSafariApplication.showPreferencesForExtension(withIdentifier: extensionBundleIdentifier) { error in + guard error == nil else { + // Insert code to inform the user that something went wrong. + return + } + + DispatchQueue.main.async { + NSApplication.shared.terminate(nil) + } + } + } + +}