From f7a772a42875ff554a6d3d9a646668bf08905acf Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 27 Sep 2024 10:51:55 +0000 Subject: [PATCH] Auto commit artifacts (v0.8.10) --- src/linktools/assets/android-tools.json | 2 +- src/linktools/assets/frida.js | 595 ++++++++++++------------ 2 files changed, 300 insertions(+), 297 deletions(-) diff --git a/src/linktools/assets/android-tools.json b/src/linktools/assets/android-tools.json index 95a1f960..f750ed3f 100644 --- a/src/linktools/assets/android-tools.json +++ b/src/linktools/assets/android-tools.json @@ -4,6 +4,6 @@ "md5": "41e4ef98df4fb49471b16afb1338770b", "main": "android.tools.Main", "size": 88335, - "time": "2024-09-19 14:58:38" + "time": "2024-09-27 18:51:42" } } diff --git a/src/linktools/assets/frida.js b/src/linktools/assets/frida.js index 0bace3c2..866b7141 100644 --- a/src/linktools/assets/frida.js +++ b/src/linktools/assets/frida.js @@ -129,59 +129,58 @@ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.getDescFromAddress = exports.getDebugSymbolFromAddress = exports.getEventImpl = exports.hookFunction = exports.hookFunctionWithCallbacks = exports.hookFunctionWithOptions = exports.getExportFunction = exports.o = void 0; -var t = require("./log"), r = function() { - function t() {} - return Object.defineProperty(t.prototype, "dlopen", { +var r = require("./log"), t = function() { + function r() {} + return Object.defineProperty(r.prototype, "dlopen", { get: function() { return a(null, "dlopen", "pointer", [ "pointer", "int" ]); }, enumerable: !1, configurable: !0 - }), t; + }), r; }(); -exports.o = new r; +exports.o = new t; var e = new ModuleMap, n = {}, o = {}; -function a(t, r, e, o) { - var a = (t || "") + "|" + r; +function a(r, t, e, o) { + var a = (r || "") + "|" + t; if (a in n) return n[a]; - var c = Module.findExportByName(t, r); - if (null === c) throw Error("cannot find " + r); + var c = Module.findExportByName(r, t); + if (null === c) throw Error("cannot find " + t); return n[a] = new NativeFunction(c, e, o), n[a]; } -function c(t, r, e) { - return i(t, r, u(e)); +function c(r, t, e) { + return s(r, t, u(e)); } -function i(r, e, n) { - var o = Module.findExportByName(r, e); +function s(t, e, n) { + var o = Module.findExportByName(t, e); if (null === o) throw Error("cannot find " + e); var a = { - get: function(t, r, n) { - return "name" === r ? e : t[r]; + get: function(r, t, n) { + return "name" === t ? e : r[t]; } }, c = {}; - "onEnter" in n && (c.onEnter = function(t) { - n.onEnter.call(new Proxy(this, a), t); - }), "onLeave" in n && (c.onLeave = function(t) { - n.onLeave.call(new Proxy(this, a), t); + "onEnter" in n && (c.onEnter = function(r) { + n.onEnter.call(new Proxy(this, a), r); + }), "onLeave" in n && (c.onLeave = function(r) { + n.onLeave.call(new Proxy(this, a), r); }); - var i = Interceptor.attach(o, c); - return t.i("Hook function: " + e + " (" + o + ")"), i; -} - -function s(r, e, n, o, c) { - var i = a(r, e, n, o); - if (null === i) throw Error("cannot find " + e); - isFunction(c) || (c = u(c)); - var s = o; - Interceptor.replace(i, new NativeCallback((function() { - for (var t = this, r = [], a = 0; a < o.length; a++) r[a] = arguments[a]; - var s = new Proxy(i, { - get: function(r, a, c) { + var s = Interceptor.attach(o, c); + return r.i("Hook function: " + e + " (" + o + ")"), s; +} + +function i(t, e, n, o, c) { + var s = a(t, e, n, o); + if (null === s) throw Error("cannot find " + e); + var i = isFunction(c) ? c : u(c), l = o; + Interceptor.replace(s, new NativeCallback((function() { + for (var r = this, t = [], a = 0; a < o.length; a++) t[a] = arguments[a]; + var c = new Proxy(s, { + get: function(t, a, c) { switch (a) { case "name": return e; @@ -193,65 +192,66 @@ function s(r, e, n, o, c) { return n; case "context": - return t.context; + return r.context; default: - r[a]; + t[a]; } }, - apply: function(t, r, e) { - return t.apply(null, e[0]); + apply: function(r, t, e) { + return r.apply(null, e[0]); } }); - return c.call(s, r); - }), n, s)), t.i("Hook function: " + e + " (" + i + ")"); + return i.call(c, t); + }), n, l)), r.i("Hook function: " + e + " (" + s + ")"); } -function u(r) { - var e = new function() { - for (var t in this.method = !0, this.thread = !1, this.stack = !1, this.symbol = !0, - this.backtracer = "accurate", this.args = !1, this.extras = {}, r) t in this ? this[t] = r[t] : this.extras[t] = r[t]; - }, n = function(r) { +function u(t) { + var e = {}; + if (e.method = parseBoolean(t.method, !0), e.thread = parseBoolean(t.thread, !1), + e.stack = parseBoolean(t.stack, !1), e.symbol = parseBoolean(t.symbol, !0), e.backtracer = t.backtracer || "accurate", + e.args = parseBoolean(t.args, !1), e.extras = {}, null != t.extras) for (var n in t.extras) e.extras[n] = t.extras[n]; + var o = function(t) { var n = {}; for (var o in e.extras) n[o] = e.extras[o]; !1 !== e.method && (n.method_name = this.name), !1 !== e.thread && (n.thread_id = Process.getCurrentThreadId()), - !1 !== e.args && (n.args = pretty2Json(r), n.result = null, n.error = null); + !1 !== e.args && (n.args = pretty2Json(t), n.result = null, n.error = null); try { - var a = this(r); + var a = this(t); return !1 !== e.args && (n.result = pretty2Json(a)), a; - } catch (t) { - throw !1 !== e.args && (n.error = pretty2Json(t)), t; + } catch (r) { + throw !1 !== e.args && (n.error = pretty2Json(r)), r; } finally { - if (!1 !== e.stack) for (var c = n.stack = [], i = "accurate" === e.backtracer ? Backtracer.ACCURATE : Backtracer.FUZZY, s = Thread.backtrace(this.context, i), u = 0; u < s.length; u++) c.push(h(s[u], !1 !== e.symbol)); - t.event(n); + if (!1 !== e.stack) for (var c = n.stack = [], s = "accurate" === e.backtracer ? Backtracer.ACCURATE : Backtracer.FUZZY, i = Thread.backtrace(this.context, s), u = 0; u < i.length; u++) c.push(p(i[u], !1 !== e.symbol)); + r.event(n); } }; - return n.onLeave = function(r) { + return o.onLeave = function(t) { var n = {}; for (var o in e.extras) n[o] = e.extras[o]; if (!1 !== e.method && (n.method_name = this.name), !1 !== e.thread && (n.thread_id = Process.getCurrentThreadId()), - !1 !== e.args && (n.result = pretty2Json(r)), !1 !== e.stack) for (var a = n.stack = [], c = "accurate" === e.backtracer ? Backtracer.ACCURATE : Backtracer.FUZZY, i = Thread.backtrace(this.context, c), s = 0; s < i.length; s++) a.push(h(i[s], !1 !== e.symbol)); - t.event(n); - }, n; + !1 !== e.args && (n.result = pretty2Json(t)), !1 !== e.stack) for (var a = n.stack = [], c = "accurate" === e.backtracer ? Backtracer.ACCURATE : Backtracer.FUZZY, s = Thread.backtrace(this.context, c), i = 0; i < s.length; i++) a.push(p(s[i], !1 !== e.symbol)); + r.event(n); + }, o; } -function l(t) { - var r = t.toString(); - return void 0 === o[r] && (o[r] = DebugSymbol.fromAddress(t)), o[r]; +function l(r) { + var t = r.toString(); + return void 0 === o[t] && (o[t] = DebugSymbol.fromAddress(r)), o[t]; } -function h(t, r) { - if (r) { - var n = l(t); +function p(r, t) { + if (t) { + var n = l(r); if (null != n) return n.toString(); } - var o = e.find(t); - return null != o ? "".concat(t, " ").concat(o.name, "!").concat(t.sub(o.base)) : "".concat(t); + var o = e.find(r); + return null != o ? "".concat(r, " ").concat(o.name, "!").concat(r.sub(o.base)) : "".concat(r); } -exports.getExportFunction = a, exports.hookFunctionWithOptions = c, exports.hookFunctionWithCallbacks = i, -exports.hookFunction = s, exports.getEventImpl = u, exports.getDebugSymbolFromAddress = l, -exports.getDescFromAddress = h; +exports.getExportFunction = a, exports.hookFunctionWithOptions = c, exports.hookFunctionWithCallbacks = s, +exports.hookFunction = i, exports.getEventImpl = u, exports.getDebugSymbolFromAddress = l, +exports.getDescFromAddress = p; },{"./log":4}],3:[function(require,module,exports){ "use strict"; @@ -260,7 +260,7 @@ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.getErrorStack = exports.runOnCreateApplication = exports.runOnCreateContext = exports.traceClasses = exports.chooseClassLoader = exports.bypassSslPinning = exports.setWebviewDebuggingEnabled = exports.use = exports.getStackTrace = exports.getJavaEnumValue = exports.fromJavaArray = exports.isJavaArray = exports.isJavaObject = exports.getEventImpl = exports.hookClass = exports.hookAllMethods = exports.hookAllConstructors = exports.hookMethods = exports.hookMethod = exports.findClass = exports.getClassMethod = exports.getClassName = exports.getObjectHandle = exports.isSameObject = exports.o = void 0; -var e = require("./log"), t = function() { +var e = require("./log"), r = function() { function e() { this.excludeHookPackages = [ "java.", "javax.", "android.", "androidx." ]; } @@ -333,55 +333,55 @@ var e = require("./log"), t = function() { }), e; }(); -function r(e, t) { - return e === t || null != e && null != t && (!!e.hasOwnProperty("$isSameObject") && e.$isSameObject(t)); +function t(e, r) { + return e === r || null != e && null != r && (!!e.hasOwnProperty("$isSameObject") && e.$isSameObject(r)); } function n(e) { return null == e ? null : e.hasOwnProperty("$h") ? e.$h : void 0; } -function a(t) { - var r = t.$className; - if (null != r) return r; - if (null != (r = t.__name__)) return r; - if (null != t.$classWrapper) { - if (null != (r = t.$classWrapper.$className)) return r; - if (null != (r = t.$classWrapper.__name__)) return r; +function a(r) { + var t = r.$className; + if (null != t) return t; + if (null != (t = r.__name__)) return t; + if (null != r.$classWrapper) { + if (null != (t = r.$classWrapper.$className)) return t; + if (null != (t = r.$classWrapper.__name__)) return t; } - e.e("Cannot get class name: " + t); + e.e("Cannot get class name: " + r); } -function o(e, t) { - var r = e[t]; - return void 0 !== r || "$" == t[0] && void 0 !== (r = e["_" + t]) ? r : void 0; +function o(e, r) { + var t = e[r]; + return void 0 !== t || "$" == r[0] && void 0 !== (t = e["_" + r]) ? t : void 0; } -function s(e, t) { - if (void 0 === t && (t = void 0), void 0 !== t && null != t) return Java.ClassFactory.get(t).use(e); +function s(e, r) { + if (void 0 === r && (r = void 0), void 0 !== r && null != r) return Java.ClassFactory.get(r).use(e); if (parseInt(Java.androidVersion) < 7) return Java.use(e); - for (var r = null, n = 0, a = Java.enumerateClassLoadersSync(); n < a.length; n++) { + for (var t = null, n = 0, a = Java.enumerateClassLoadersSync(); n < a.length; n++) { var o = a[n]; try { var i = s(e, o); if (null != i) return i; } catch (e) { - null == r && (r = e); + null == t && (t = e); } } - throw r; + throw t; } -function i(e, t, r, n) { +function i(e, r, t, n) { void 0 === n && (n = null); - var i = t; + var i = r; if ("string" == typeof i) { var l = i, c = e; "string" == typeof c && (c = s(c)); var u = o(c, l); if (void 0 === u || void 0 === u.overloads) throw Error("Cannot find method: " + a(c) + "." + l); - if (null != r) { - var p = r; + if (null != t) { + var p = t; for (var d in p) "string" != typeof p[d] && (p[d] = a(p[d])); i = u.overload.apply(u, p); } else { @@ -392,221 +392,221 @@ function i(e, t, r, n) { P(i), E(i, n); } -function l(e, t, r) { - void 0 === r && (r = null); +function l(e, r, t) { + void 0 === t && (t = null); var n = e; "string" == typeof n && (n = s(n)); - var i = o(n, t); - if (void 0 === i || void 0 === i.overloads) throw Error("Cannot find method: " + a(n) + "." + t); + var i = o(n, r); + if (void 0 === i || void 0 === i.overloads) throw Error("Cannot find method: " + a(n) + "." + r); for (var l = 0; l < i.overloads.length; l++) { var c = i.overloads[l]; - void 0 !== c.returnType && void 0 !== c.returnType.className && (P(c), E(c, r)); + void 0 !== c.returnType && void 0 !== c.returnType.className && (P(c), E(c, t)); } } -function c(e, t) { - void 0 === t && (t = null); - var r = e; - "string" == typeof r && (r = s(r)), l(r, "$init", t); +function c(e, r) { + void 0 === r && (r = null); + var t = e; + "string" == typeof t && (t = s(t)), l(t, "$init", r); } -function u(e, t) { - void 0 === t && (t = null); - var r = e; - "string" == typeof r && (r = s(r)); - for (var n = [], a = null, o = r.class; null != o; ) { +function u(e, r) { + void 0 === r && (r = null); + var t = e; + "string" == typeof t && (t = s(t)); + for (var n = [], a = null, o = t.class; null != o; ) { for (var i = o.getDeclaredMethods(), c = 0; c < i.length; c++) { var u = i[c].getName(); - n.indexOf(u) < 0 && (n.push(u), l(r, u, t)); + n.indexOf(u) < 0 && (n.push(u), l(t, u, r)); } if (a = o.getSuperclass(), o.$dispose(), null == a) break; if (L((o = Java.cast(a, exports.o.classClass)).getName())) break; } } -function p(e, t) { - void 0 === t && (t = null); - var r = e; - "string" == typeof r && (r = s(r)), c(r, t), u(r, t); +function p(e, r) { + void 0 === r && (r = null); + var t = e; + "string" == typeof t && (t = s(t)), c(t, r), u(t, r); } -function d(t) { - var r = new function() { - for (var e in this.method = !0, this.thread = !1, this.stack = !1, this.args = !1, - this.extras = {}, t) e in this ? this[e] = t[e] : this.extras[e] = t[e]; - }; - return function(t, n) { +function d(r) { + var t = {}; + if (t.method = parseBoolean(r.method, !0), t.thread = parseBoolean(r.thread, !1), + t.stack = parseBoolean(r.stack, !1), t.args = parseBoolean(r.args, !1), t.extras = {}, + null != r.extras) for (var n in r.extras) t.extras[n] = r.extras[n]; + return function(r, n) { var a = {}; - for (var o in r.extras) a[o] = r.extras[o]; - !1 !== r.method && (a.class_name = t.$className, a.method_name = this.name, a.method_simple_name = this.methodName), - !1 !== r.thread && (a.thread_id = Process.getCurrentThreadId(), a.thread_name = exports.o.threadClass.currentThread().getName()), - !1 !== r.args && (a.args = pretty2Json(n), a.result = null, a.error = null); + for (var o in t.extras) a[o] = t.extras[o]; + !1 !== t.method && (a.class_name = r.$className, a.method_name = this.name, a.method_simple_name = this.methodName), + !1 !== t.thread && (a.thread_id = Process.getCurrentThreadId(), a.thread_name = exports.o.threadClass.currentThread().getName()), + !1 !== t.args && (a.args = pretty2Json(n), a.result = null, a.error = null); try { - var s = this(t, n); - return !1 !== r.args && (a.result = pretty2Json(s)), s; + var s = this(r, n); + return !1 !== t.args && (a.result = pretty2Json(s)), s; } catch (e) { - throw !1 !== r.args && (a.error = pretty2Json(e)), e; + throw !1 !== t.args && (a.error = pretty2Json(e)), e; } finally { - !1 !== r.stack && (a.stack = pretty2Json(b())), e.event(a); + !1 !== t.stack && (a.stack = pretty2Json(b())), e.event(a); } }; } function f(e) { if (e instanceof Object && e.hasOwnProperty("class") && e.class instanceof Object) { - var t = e.class; - if (t.hasOwnProperty("getName") && t.hasOwnProperty("getDeclaredClasses") && t.hasOwnProperty("getDeclaredFields") && t.hasOwnProperty("getDeclaredMethods")) return !0; + var r = e.class; + if (r.hasOwnProperty("getName") && r.hasOwnProperty("getDeclaredClasses") && r.hasOwnProperty("getDeclaredFields") && r.hasOwnProperty("getDeclaredMethods")) return !0; } return !1; } function g(e) { if (e instanceof Object && e.hasOwnProperty("class") && e.class instanceof Object) { - var t = e.class; - if (t.hasOwnProperty("isArray") && t.isArray()) return !0; + var r = e.class; + if (r.hasOwnProperty("isArray") && r.isArray()) return !0; } return !1; } -function h(e, t) { - var r = e; - "string" == typeof r && (r = s(r)); - for (var n = [], a = Java.vm.getEnv(), o = 0; o < a.getArrayLength(t.$handle); o++) n.push(Java.cast(a.getObjectArrayElement(t.$handle, o), r)); +function v(e, r) { + var t = e; + "string" == typeof t && (t = s(t)); + for (var n = [], a = Java.vm.getEnv(), o = 0; o < a.getArrayLength(r.$handle); o++) n.push(Java.cast(a.getObjectArrayElement(r.$handle, o), t)); return n; } -function v(e, t) { - var r = e; - "string" == typeof r && (r = s(r)); - var n = r.class.getEnumConstants(); - n instanceof Array || (n = h(r, n)); - for (var a = 0; a < n.length; a++) if (n[a].toString() === t) return n[a]; - throw new Error("Name of " + t + " does not match " + r); +function h(e, r) { + var t = e; + "string" == typeof t && (t = s(t)); + var n = t.class.getEnumConstants(); + n instanceof Array || (n = v(t, n)); + for (var a = 0; a < n.length; a++) if (n[a].toString() === r) return n[a]; + throw new Error("Name of " + r + " does not match " + t); } function b(e) { void 0 === e && (e = void 0); - for (var t = [], r = (e || exports.o.throwableClass.$new()).getStackTrace(), n = 0; n < r.length; n++) t.push(r[n]); - return t; + for (var r = [], t = (e || exports.o.throwableClass.$new()).getStackTrace(), n = 0; n < t.length; n++) r.push(t[n]); + return r; } -exports.o = new t, exports.isSameObject = r, exports.getObjectHandle = n, exports.getClassName = a, +exports.o = new r, exports.isSameObject = t, exports.getObjectHandle = n, exports.getClassName = a, exports.getClassMethod = o, exports.findClass = s, exports.hookMethod = i, exports.hookMethods = l, exports.hookAllConstructors = c, exports.hookAllMethods = u, exports.hookClass = p, -exports.getEventImpl = d, exports.isJavaObject = f, exports.isJavaArray = g, exports.fromJavaArray = h, -exports.getJavaEnumValue = v, exports.getStackTrace = b; +exports.getEventImpl = d, exports.isJavaObject = f, exports.isJavaArray = g, exports.fromJavaArray = v, +exports.getJavaEnumValue = h, exports.getStackTrace = b; var y = null; -function m(t) { - var r = exports.o.hashSetClass.$new(), n = function(r) { - for (var n, a = t.entries(), o = function() { +function m(r) { + var t = exports.o.hashSetClass.$new(), n = function(t) { + for (var n, a = r.entries(), o = function() { var a = n.value[0], o = n.value[1], i = null; try { - i = s(a, r); + i = s(a, t); } catch (e) {} - null != i && (t.delete(a), o.forEach((function(t, r, n) { + null != i && (r.delete(a), o.forEach((function(r, t, n) { try { - t(i); - } catch (t) { - e.w("Call JavaHelper.use callback error: " + t); + r(i); + } catch (r) { + e.w("Call JavaHelper.use callback error: " + r); } }))); }; !(n = a.next()).done; ) o(); }, a = exports.o.classClass, o = exports.o.classLoaderClass; - i(a, "forName", [ "java.lang.String", "boolean", o ], (function(e, t) { - var a = t[2]; - return null == a || r.contains(a) || (r.add(a), n(a)), this(e, t); - })), i(o, "loadClass", [ "java.lang.String", "boolean" ], (function(e, t) { + i(a, "forName", [ "java.lang.String", "boolean", o ], (function(e, r) { + var a = r[2]; + return null == a || t.contains(a) || (t.add(a), n(a)), this(e, r); + })), i(o, "loadClass", [ "java.lang.String", "boolean" ], (function(e, r) { var a = e; - return r.contains(a) || (r.add(a), n(a)), this(e, t); + return t.contains(a) || (t.add(a), n(a)), this(e, r); })); } -function x(t, r) { +function x(r, t) { var n = null; try { - n = s(t); + n = s(r); } catch (e) { var a; - if (null == y && m(y = new Map), y.has(t)) void 0 !== (a = y.get(t)) && a.add(r); else (a = new Set).add(r), - y.set(t, a); + if (null == y && m(y = new Map), y.has(r)) void 0 !== (a = y.get(r)) && a.add(t); else (a = new Set).add(t), + y.set(r, a); return; } try { - r(n); - } catch (t) { - e.w("Call JavaHelper.use callback error: " + t); + t(n); + } catch (r) { + e.w("Call JavaHelper.use callback error: " + r); } } function C() { e.w("Android Enable Webview Debugging"), ignoreError((function() { - var t = s("android.webkit.WebView"); - l(t, "setWebContentsDebuggingEnabled", (function(r, n) { - return e.d("".concat(t, ".setWebContentsDebuggingEnabled: ").concat(n[0])), n[0] = !0, - this(r, n); - })), l(t, "loadUrl", (function(r, n) { - return e.d("".concat(t, ".loadUrl: ").concat(n[0])), t.setWebContentsDebuggingEnabled(!0), - this(r, n); + var r = s("android.webkit.WebView"); + l(r, "setWebContentsDebuggingEnabled", (function(t, n) { + return e.d("".concat(r, ".setWebContentsDebuggingEnabled: ").concat(n[0])), n[0] = !0, + this(t, n); + })), l(r, "loadUrl", (function(t, n) { + return e.d("".concat(r, ".loadUrl: ").concat(n[0])), r.setWebContentsDebuggingEnabled(!0), + this(t, n); })); })), ignoreError((function() { - var t = s("com.uc.webview.export.WebView"); - l(t, "setWebContentsDebuggingEnabled", (function(r, n) { - return e.d("".concat(t, ".setWebContentsDebuggingEnabled: ").concat(n[0])), n[0] = !0, - this(r, n); - })), l(t, "loadUrl", (function(r, n) { - return e.d("".concat(t, ".loadUrl: ").concat(n[0])), t.setWebContentsDebuggingEnabled(!0), - this(r, n); + var r = s("com.uc.webview.export.WebView"); + l(r, "setWebContentsDebuggingEnabled", (function(t, n) { + return e.d("".concat(r, ".setWebContentsDebuggingEnabled: ").concat(n[0])), n[0] = !0, + this(t, n); + })), l(r, "loadUrl", (function(t, n) { + return e.d("".concat(r, ".loadUrl: ").concat(n[0])), r.setWebContentsDebuggingEnabled(!0), + this(t, n); })); })); } function k() { e.w("Android Bypass ssl pinning"); - var t = Java.use("java.util.Arrays"); + var r = Java.use("java.util.Arrays"); ignoreError((function() { - return l("com.android.org.conscrypt.TrustManagerImpl", "checkServerTrusted", (function(r, n) { - if (e.d("SSL bypassing " + this), "void" != this.returnType.type) return "pointer" == this.returnType.type && "java.util.List" == this.returnType.className ? t.asList(n[0]) : void 0; + return l("com.android.org.conscrypt.TrustManagerImpl", "checkServerTrusted", (function(t, n) { + if (e.d("SSL bypassing " + this), "void" != this.returnType.type) return "pointer" == this.returnType.type && "java.util.List" == this.returnType.className ? r.asList(n[0]) : void 0; })); })), ignoreError((function() { - return l("com.google.android.gms.org.conscrypt.Platform", "checkServerTrusted", (function(t, r) { + return l("com.google.android.gms.org.conscrypt.Platform", "checkServerTrusted", (function(r, t) { e.d("SSL bypassing " + this); })); })), ignoreError((function() { - return l("com.android.org.conscrypt.Platform", "checkServerTrusted", (function(t, r) { + return l("com.android.org.conscrypt.Platform", "checkServerTrusted", (function(r, t) { e.d("SSL bypassing " + this); })); })), ignoreError((function() { - return l("okhttp3.CertificatePinner", "check", (function(t, r) { + return l("okhttp3.CertificatePinner", "check", (function(r, t) { if (e.d("SSL bypassing " + this), "boolean" == this.returnType.type) return !0; })); })), ignoreError((function() { - return l("okhttp3.CertificatePinner", "check$okhttp", (function(t, r) { + return l("okhttp3.CertificatePinner", "check$okhttp", (function(r, t) { e.d("SSL bypassing " + this); })); })), ignoreError((function() { - return l("com.android.okhttp.CertificatePinner", "check", (function(t, r) { + return l("com.android.okhttp.CertificatePinner", "check", (function(r, t) { if (e.d("SSL bypassing " + this), "boolean" == this.returnType.type) return !0; })); })), ignoreError((function() { - return l("com.android.okhttp.CertificatePinner", "check$okhttp", (function(t, r) { + return l("com.android.okhttp.CertificatePinner", "check$okhttp", (function(r, t) { e.d("SSL bypassing " + this); })); })), ignoreError((function() { - return l("com.android.org.conscrypt.TrustManagerImpl", "verifyChain", (function(t, r) { - return e.d("SSL bypassing " + this), r[0]; + return l("com.android.org.conscrypt.TrustManagerImpl", "verifyChain", (function(r, t) { + return e.d("SSL bypassing " + this), t[0]; })); })); } -function w(t) { - e.w("choose classloder: " + t), Java.enumerateClassLoaders({ - onMatch: function(r) { +function w(r) { + e.w("choose classloder: " + r), Java.enumerateClassLoaders({ + onMatch: function(t) { try { - null != r.findClass(t) && (e.i("choose classloader: " + r), Reflect.set(Java.classFactory, "loader", r)); - } catch (t) { - e.e(pretty2Json(t)); + null != t.findClass(r) && (e.i("choose classloader: " + t), Reflect.set(Java.classFactory, "loader", t)); + } catch (r) { + e.e(pretty2Json(r)); } }, onComplete: function() { @@ -615,16 +615,16 @@ function w(t) { }); } -function O(t, r, n) { - void 0 === r && (r = void 0), void 0 === n && (n = void 0), t = null != t ? t.trim().toLowerCase() : "", - r = null != r ? r.trim().toLowerCase() : "", n = null != n ? n : { +function O(r, t, n) { + void 0 === t && (t = void 0), void 0 === n && (n = void 0), r = null != r ? r.trim().toLowerCase() : "", + t = null != t ? t.trim().toLowerCase() : "", n = null != n ? n : { stack: !0, args: !0 - }, e.w("trace classes, include: " + t + ", exclude: " + r + ", options: " + JSON.stringify(n)), + }, e.w("trace classes, include: " + r + ", exclude: " + t + ", options: " + JSON.stringify(n)), Java.enumerateLoadedClasses({ onMatch: function(e) { var a = e.toString().toLowerCase(); - a.indexOf(t) >= 0 && ("" == r || a.indexOf(r) < 0) && u(e, d(n)); + a.indexOf(r) >= 0 && ("" == t || a.indexOf(t) < 0) && u(e, d(n)); }, onComplete: function() { e.d("enumerate classLoaders complete"); @@ -633,15 +633,15 @@ function O(t, r, n) { } function S(e) { - l("android.app.ContextImpl", "createAppContext", (function(t, r) { - var n = this(t, r); + l("android.app.ContextImpl", "createAppContext", (function(r, t) { + var n = this(r, t); return e(n), n; })); } function j(e) { - l("android.app.LoadedApk", "makeApplication", (function(t, r) { - var n = this(t, r); + l("android.app.LoadedApk", "makeApplication", (function(r, t) { + var n = this(r, t); return e(n), n; })); } @@ -691,12 +691,12 @@ function P(e) { configurable: !0, enumerable: !0, get: function() { - var e = J(this.returnType.className), t = J(this.className) + "." + this.methodName, r = ""; + var e = J(this.returnType.className), r = J(this.className) + "." + this.methodName, t = ""; if (this.argumentTypes.length > 0) { - r = J(this.argumentTypes[0].className); - for (var n = 1; n < this.argumentTypes.length; n++) r = r + ", " + J(this.argumentTypes[n].className); + t = J(this.argumentTypes[0].className); + for (var n = 1; n < this.argumentTypes.length; n++) t = t + ", " + J(this.argumentTypes[n].className); } - return e + " " + t + "(" + r + ")"; + return e + " " + r + "(" + t + ")"; } }, toString: { @@ -708,37 +708,37 @@ function P(e) { }); } -function E(t, r) { - if (void 0 === r && (r = null), null != r) { - var n = new Proxy(t, { - apply: function(e, t, r) { - var n = r[0], a = r[1]; +function E(r, t) { + if (void 0 === t && (t = null), null != t) { + var n = new Proxy(r, { + apply: function(e, r, t) { + var n = t[0], a = t[1]; return e.apply(n, a); } - }); - isFunction(r) || (r = d(r)), t.implementation = function() { - return r.call(n, this, Array.prototype.slice.call(arguments)); - }, e.i("Hook method: " + t); - } else t.implementation = null, e.i("Unhook method: " + t); + }), a = isFunction(t) ? t : d(t); + r.implementation = function() { + return a.call(n, this, Array.prototype.slice.call(arguments)); + }, e.i("Hook method: " + r); + } else r.implementation = null, e.i("Unhook method: " + r); } function L(e) { - for (var t in exports.o.excludeHookPackages) if (0 == e.indexOf(exports.o.excludeHookPackages[t])) return !0; + for (var r in exports.o.excludeHookPackages) if (0 == e.indexOf(exports.o.excludeHookPackages[r])) return !0; return !1; } -function A(t) { +function A(r) { try { - var r = n(t); - if (void 0 !== r) { - for (var a = Java.cast(r, exports.o.throwableClass), o = [], s = 0, i = b(a); s < i.length; s++) { + var t = n(r); + if (void 0 !== t) { + for (var a = Java.cast(t, exports.o.throwableClass), o = [], s = 0, i = b(a); s < i.length; s++) { var l = i[s]; o.push(" at ".concat(l)); } return o.length > 0 ? "".concat(a, "\n").concat(o.join("\n")) : "".concat(a); } - } catch (t) { - e.d("getErrorStack error: ".concat(t)); + } catch (r) { + e.d("getErrorStack error: ".concat(r)); } } @@ -830,95 +830,95 @@ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.bypassSslPinning = exports.convert2ObjcObject = exports.getEventImpl = exports.hookMethods = exports.hookMethod = void 0; -var t = require("./log"), e = require("./c"); +var e = require("./log"), t = require("./c"); -function n(t, e, n) { - void 0 === n && (n = null); - var r = t; - if ("string" == typeof r && (r = ObjC.classes[r]), void 0 === r) throw Error('cannot find class "' + t + '"'); - var o = e; - if ("string" == typeof o && (o = r[o]), void 0 === o) throw Error('cannot find method "' + e + '" in class "' + r + '"'); - a(r, o), c(o, n); +function r(e, t, r) { + void 0 === r && (r = null); + var n = e; + if ("string" == typeof n && (n = ObjC.classes[n]), void 0 === n) throw Error('cannot find class "' + e + '"'); + var o = t; + if ("string" == typeof o && (o = n[o]), void 0 === o) throw Error('cannot find method "' + t + '" in class "' + n + '"'); + s(n, o), l(o, r); } -function r(t, e, n) { - void 0 === n && (n = null); - var r = t; - if ("string" == typeof r && (r = ObjC.classes[r]), void 0 === r) throw Error('cannot find class "' + t + '"'); - for (var o = r.$ownMethods.length, i = 0; i < o; i++) { - var s = r.$ownMethods[i]; - if (s.indexOf(e) >= 0) { - var l = r[s]; - a(r, l), c(l, n); +function n(e, t, r) { + void 0 === r && (r = null); + var n = e; + if ("string" == typeof n && (n = ObjC.classes[n]), void 0 === n) throw Error('cannot find class "' + e + '"'); + for (var o = n.$ownMethods.length, i = 0; i < o; i++) { + var a = n.$ownMethods[i]; + if (a.indexOf(t) >= 0) { + var c = n[a]; + s(n, c), l(c, r); } } } -function o(n) { - var r = new function() { - for (var t in this.method = !0, this.thread = !1, this.stack = !1, this.symbol = !0, - this.backtracer = "accurate", this.args = !1, this.extras = {}, n) t in this ? this[t] = n[t] : this.extras[t] = n[t]; - }; - return function(n, o) { - var s = {}; - for (var a in r.extras) s[a] = r.extras[a]; - if (!1 !== r.method && (s.class_name = new ObjC.Object(n).$className, s.method_name = this.name, - s.method_simple_name = this.methodName), !1 !== r.thread && (s.thread_id = Process.getCurrentThreadId(), - s.thread_name = ObjC.classes.NSThread.currentThread().name().toString()), !1 !== r.args) { - for (var c = [], l = 0; l < o.length; l++) c.push(i(o[l])); - s.args = pretty2Json(c), s.result = null, s.error = null; +function o(r) { + var n = {}; + if (n.method = parseBoolean(r.method, !0), n.thread = parseBoolean(r.thread, !1), + n.stack = parseBoolean(r.stack, !1), n.symbol = parseBoolean(r.symbol, !0), n.backtracer = r.backtracer || "accurate", + n.args = parseBoolean(r.args, !1), n.extras = {}, null != r.extras) for (var o in r.extras) n.extras[o] = r.extras[o]; + return function(r, o) { + var a = {}; + for (var s in n.extras) a[s] = n.extras[s]; + if (!1 !== n.method && (a.class_name = new ObjC.Object(r).$className, a.method_name = this.name, + a.method_simple_name = this.methodName), !1 !== n.thread && (a.thread_id = Process.getCurrentThreadId(), + a.thread_name = ObjC.classes.NSThread.currentThread().name().toString()), !1 !== n.args) { + for (var l = [], c = 0; c < o.length; c++) l.push(i(o[c])); + a.args = pretty2Json(l), a.result = null, a.error = null; } try { - var u = this(n, o); - return !1 !== r.args && (s.result = pretty2Json(i(u))), u; - } catch (t) { - throw !1 !== r.args && (s.error = pretty2Json(t)), t; + var u = this(r, o); + return !1 !== n.args && (a.result = pretty2Json(i(u))), u; + } catch (e) { + throw !1 !== n.args && (a.error = pretty2Json(e)), e; } finally { - if (!1 !== r.stack) { - var d = s.stack = [], h = "accurate" === r.backtracer ? Backtracer.ACCURATE : Backtracer.FUZZY, f = Thread.backtrace(this.context, h); - for (l = 0; l < f.length; l++) d.push(e.getDescFromAddress(f[l], !1 !== r.symbol)); + if (!1 !== n.stack) { + var d = a.stack = [], p = "accurate" === n.backtracer ? Backtracer.ACCURATE : Backtracer.FUZZY, f = Thread.backtrace(this.context, p); + for (c = 0; c < f.length; c++) d.push(t.getDescFromAddress(f[c], !1 !== n.symbol)); } - t.event(s); + e.event(a); } }; } -function i(t) { - return t instanceof NativePointer || "object" == typeof t && t.hasOwnProperty("handle") ? new ObjC.Object(t) : t; +function i(e) { + return e instanceof NativePointer || "object" == typeof e && e.hasOwnProperty("handle") ? new ObjC.Object(e) : e; } -function s() { - t.w("iOS Bypass ssl pinning"); +function a() { + e.w("iOS Bypass ssl pinning"); try { Module.ensureInitialized("libboringssl.dylib"); - } catch (e) { - t.d("libboringssl.dylib module not loaded. Trying to manually load it."), Module.load("libboringssl.dylib"); + } catch (t) { + e.d("libboringssl.dylib module not loaded. Trying to manually load it."), Module.load("libboringssl.dylib"); } - var n = new NativeCallback((function(e, n) { - return t.d("custom SSL context verify callback, returning SSL_VERIFY_NONE"), 0; + var r = new NativeCallback((function(t, r) { + return e.d("custom SSL context verify callback, returning SSL_VERIFY_NONE"), 0; }), "int", [ "pointer", "pointer" ]); try { - e.hookFunction("libboringssl.dylib", "SSL_set_custom_verify", "void", [ "pointer", "int", "pointer" ], (function(e) { - return t.d("SSL_set_custom_verify(), setting custom callback."), e[2] = n, this(e); + t.hookFunction("libboringssl.dylib", "SSL_set_custom_verify", "void", [ "pointer", "int", "pointer" ], (function(t) { + return e.d("SSL_set_custom_verify(), setting custom callback."), t[2] = r, this(t); })); - } catch (r) { - e.hookFunction("libboringssl.dylib", "SSL_CTX_set_custom_verify", "void", [ "pointer", "int", "pointer" ], (function(e) { - return t.d("SSL_CTX_set_custom_verify(), setting custom callback."), e[2] = n, this(e); + } catch (n) { + t.hookFunction("libboringssl.dylib", "SSL_CTX_set_custom_verify", "void", [ "pointer", "int", "pointer" ], (function(t) { + return e.d("SSL_CTX_set_custom_verify(), setting custom callback."), t[2] = r, this(t); })); } - e.hookFunction("libboringssl.dylib", "SSL_get_psk_identity", "pointer", [ "pointer" ], (function(e) { - return t.d('SSL_get_psk_identity(), returning "fakePSKidentity"'), Memory.allocUtf8String("fakePSKidentity"); + t.hookFunction("libboringssl.dylib", "SSL_get_psk_identity", "pointer", [ "pointer" ], (function(t) { + return e.d('SSL_get_psk_identity(), returning "fakePSKidentity"'), Memory.allocUtf8String("fakePSKidentity"); })); } -function a(t, e) { - var n = e.origImplementation || e.implementation, r = t.toString(), o = ObjC.selectorAsString(e.selector), i = ObjC.classes.NSThread.hasOwnProperty(o); - Object.defineProperties(e, { +function s(e, t) { + var r = t.origImplementation || t.implementation, n = e.toString(), o = ObjC.selectorAsString(t.selector), i = ObjC.classes.NSThread.hasOwnProperty(o); + Object.defineProperties(t, { className: { configurable: !0, enumerable: !0, get: function() { - return r; + return n; } }, methodName: { @@ -932,14 +932,14 @@ function a(t, e) { configurable: !0, enumerable: !0, get: function() { - return (i ? "+" : "-") + "[" + r + " " + o + "]"; + return (i ? "+" : "-") + "[" + n + " " + o + "]"; } }, origImplementation: { configurable: !0, enumerable: !0, get: function() { - return n; + return r; } }, toString: { @@ -950,23 +950,26 @@ function a(t, e) { }); } -function c(e, n) { - void 0 === n && (n = null), null != n ? (isFunction(n) || (n = o(n)), e.implementation = ObjC.implement(e, (function() { - var t = this, r = Array.prototype.slice.call(arguments), o = r.shift(), i = r.shift(), s = new Proxy(e, { - get: function(e, n, r) { - return n in t ? t[n] : e[n]; - }, - apply: function(t, e, n) { - var r = n[0], o = n[1]; - return t.origImplementation.apply(null, [].concat(r, i, o)); - } - }); - return n.call(s, o, r); - })), t.i("Hook method: " + e)) : (e.implementation = e.origImplementation, t.i("Unhook method: " + pretty2String(e))); +function l(t, r) { + if (void 0 === r && (r = null), null != r) { + var n = isFunction(r) ? r : o(r); + t.implementation = ObjC.implement(t, (function() { + var e = this, r = Array.prototype.slice.call(arguments), o = r.shift(), i = r.shift(), a = new Proxy(t, { + get: function(t, r, n) { + return r in e ? e[r] : t[r]; + }, + apply: function(e, t, r) { + var n = r[0], o = r[1]; + return e.origImplementation.apply(null, [].concat(n, i, o)); + } + }); + return n.call(a, o, r); + })), e.i("Hook method: " + t); + } else t.implementation = t.origImplementation, e.i("Unhook method: " + pretty2String(t)); } -exports.hookMethod = n, exports.hookMethods = r, exports.getEventImpl = o, exports.convert2ObjcObject = i, -exports.bypassSslPinning = s; +exports.hookMethod = r, exports.hookMethods = n, exports.getEventImpl = o, exports.convert2ObjcObject = i, +exports.bypassSslPinning = a; },{"./c":2,"./log":4}]},{},[1]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsImxpYi9jLnRzIiwibGliL2phdmEudHMiLCJsaWIvbG9nLnRzIiwibGliL29iamMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FDQUEsSUFBQSxJQUFBLFFBQUEsY0FDQSxJQUFBLFFBQUEsWUFDQSxJQUFBLFFBQUEsZUFDQSxJQUFBLFFBQUEsZUFNTSxJQUFhLFNBQUM7RUFDaEIsT0FBTztJQUNILElBQUksVUFBVSxTQUFTLEdBQUc7TUFFdEIsS0FEQSxJQUFJLElBQVUsY0FBYyxVQUFVLEtBQzdCLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUNsQyxLQUFXO01BQ1gsS0FBVyxjQUFjLFVBQVU7TUFFdkMsRUFBRztXQUVILEVBQUc7QUFFWDtBQUNKOztBQUVBLFFBQVEsUUFBUSxFQUFXLEVBQUksRUFBRSxLQUFLLEtBQ3RDLFFBQVEsT0FBTyxFQUFXLEVBQUksRUFBRSxLQUFLLEtBQ3JDLFFBQVEsT0FBTyxFQUFXLEVBQUksRUFBRSxLQUFLO0FBQ3JDLFFBQVEsUUFBUSxFQUFXLEVBQUksRUFBRSxLQUFLLEtBQ3RDLFFBQVEsTUFBTSxFQUFXLEVBQUksRUFBRSxLQUFLLEtBR1MsUUFBekMsT0FBTyxrQ0FDUCxPQUFPLGdDQUErQixTQUFBO0VBQ2xDLElBQUksU0FBUTtFQUNaLElBQUksYUFBaUIsT0FBTztJQUN4QixJQUFNLElBQWEsRUFBTTtTQUNOLE1BQWYsTUFDQSxJQUFROztFQUdoQixJQUFJLEtBQUssV0FBVztJQUNoQixJQUFNLElBQVksRUFBSyxjQUFjO1NBQ25CLE1BQWQsV0FDYyxNQUFWLElBQ0EsS0FBUyxvQkFBQSxPQUFvQixLQUU3QixJQUFROztFQUlwQixFQUFJLFVBQVUsS0FBSyxHQUFPO0FBQzlCOztBQWlCSixJQUFBLElBQUE7RUFBQSxTQUFBLEtBb0JBO0VBQUEsT0FsQkksRUFBQSxVQUFBLE9BQUEsU0FBSyxH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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsImxpYi9jLnRzIiwibGliL2phdmEudHMiLCJsaWIvbG9nLnRzIiwibGliL29iamMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FDQUEsSUFBQSxJQUFBLFFBQUEsY0FDQSxJQUFBLFFBQUEsWUFDQSxJQUFBLFFBQUEsZUFDQSxJQUFBLFFBQUEsZUFNTSxJQUFhLFNBQUM7RUFDaEIsT0FBTztJQUNILElBQUksVUFBVSxTQUFTLEdBQUc7TUFFdEIsS0FEQSxJQUFJLElBQVUsY0FBYyxVQUFVLEtBQzdCLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUNsQyxLQUFXO01BQ1gsS0FBVyxjQUFjLFVBQVU7TUFFdkMsRUFBRztXQUVILEVBQUc7QUFFWDtBQUNKOztBQUVBLFFBQVEsUUFBUSxFQUFXLEVBQUksRUFBRSxLQUFLLEtBQ3RDLFFBQVEsT0FBTyxFQUFXLEVBQUksRUFBRSxLQUFLLEtBQ3JDLFFBQVEsT0FBTyxFQUFXLEVBQUksRUFBRSxLQUFLO0FBQ3JDLFFBQVEsUUFBUSxFQUFXLEVBQUksRUFBRSxLQUFLLEtBQ3RDLFFBQVEsTUFBTSxFQUFXLEVBQUksRUFBRSxLQUFLLEtBR1MsUUFBekMsT0FBTyxrQ0FDUCxPQUFPLGdDQUErQixTQUFBO0VBQ2xDLElBQUksU0FBUTtFQUNaLElBQUksYUFBaUIsT0FBTztJQUN4QixJQUFNLElBQWEsRUFBTTtTQUNOLE1BQWYsTUFDQSxJQUFROztFQUdoQixJQUFJLEtBQUssV0FBVztJQUNoQixJQUFNLElBQVksRUFBSyxjQUFjO1NBQ25CLE1BQWQsV0FDYyxNQUFWLElBQ0EsS0FBUyxvQkFBQSxPQUFvQixLQUU3QixJQUFROztFQUlwQixFQUFJLFVBQVUsS0FBSyxHQUFPO0FBQzlCOztBQWlCSixJQUFBLElBQUE7RUFBQSxTQUFBLEtBb0JBO0VBQUEsT0FsQkksRUFBQSxVQUFBLE9BQUEsU0FBSyxH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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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