Advertisement
6jarjar6

StatConfig.java

Apr 23rd, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.79 KB | None | 0 0
  1. package com.tencent.wxop.stat;
  2.  
  3. import android.content.Context;
  4. import android.os.Build;
  5. import android.os.Build.VERSION;
  6. import com.tencent.a.a.a.a.g;
  7. import com.tencent.imsdk.android.IR.fuse;
  8. import com.tencent.imsdk.android.IR.path;
  9. import com.tencent.imsdk.android.tools.log.LogUtils;
  10. import com.tencent.tmgp.cod.gamepad.GameSirButtonCode;
  11. import com.tencent.wxop.stat.common.StatLogger;
  12. import com.tencent.wxop.stat.common.k;
  13. import com.tencent.wxop.stat.common.p;
  14. import com.tencent.wxop.stat.common.q;
  15. import java.net.URI;
  16. import java.util.Iterator;
  17. import org.json.JSONException;
  18. import org.json.JSONObject;
  19.  
  20. public class StatConfig {
  21.     private static String A = null;
  22.     private static String B;
  23.     private static String C;
  24.     private static String D = "mta_channel";
  25.     private static int E = 180;
  26.     private static int F = GameSirButtonCode.BUTTON_L1;
  27.     private static long G = 0;
  28.     private static long H = 300000;
  29.     private static volatile String I = "http://pingma.qq.com:80/mstat/report";
  30.     private static int J = 0;
  31.     private static volatile int K = 0;
  32.     private static int L = 20;
  33.     private static int M = 0;
  34.     private static boolean N = false;
  35.     private static int O = GameSirButtonCode.BUTTON_L2;
  36.     private static boolean P = false;
  37.     private static String Q = null;
  38.     private static boolean R = false;
  39.     private static g S = null;
  40.     static f a = new f(2);
  41.     static f b = new f(1);
  42.     static String c = "__HIBERNATE__";
  43.     static String d = "__HIBERNATE__TIME";
  44.     static String e = "__MTA_KILL__";
  45.     static String f = "";
  46.     static boolean g = false;
  47.     static int h = 100;
  48.     static long i = LogUtils.LOG_FUSE_TIME;
  49.     public static boolean isAutoExceptionCaught = true;
  50.     static boolean j = true;
  51.     static volatile String k = "pingma.qq.com:80";
  52.     static boolean l = true;
  53.     static int m = 0;
  54.     static long n = LogUtils.LOG_FUSE_TIME;
  55.     static int o = GameSirButtonCode.BUTTON_Y;
  56.     private static StatLogger p = k.b();
  57.     private static StatReportStrategy q = StatReportStrategy.APP_LAUNCH;
  58.     private static boolean r = false;
  59.     private static boolean s = true;
  60.     private static int t = 30000;
  61.     private static int u = 100000;
  62.     private static int v = 30;
  63.     private static int w = 10;
  64.     private static int x = 100;
  65.     private static int y = 30;
  66.     private static int z = 1;
  67.  
  68.     static int a() {
  69.         return v;
  70.     }
  71.  
  72.     static String a(Context context) {
  73.         return q.a(p.a(context, "_mta_ky_tag_", null));
  74.     }
  75.  
  76.     static String a(String str, String str2) {
  77.         try {
  78.             String string = b.b.getString(str);
  79.             return string != null ? string : str2;
  80.         } catch (Throwable th) {
  81.             p.w("can't find custom key:" + str);
  82.             return str2;
  83.         }
  84.     }
  85.  
  86.     static synchronized void a(int i) {
  87.         synchronized (StatConfig.class) {
  88.             K = i;
  89.         }
  90.     }
  91.  
  92.     static void a(long j) {
  93.         p.b(i.a(), c, j);
  94.         setEnableStatService(false);
  95.         p.warn("MTA is disable for current SDK version");
  96.     }
  97.  
  98.     static void a(Context context, f fVar) {
  99.         if (fVar.a == b.a) {
  100.             b = fVar;
  101.             a(fVar.b);
  102.             if (!b.b.isNull("iplist")) {
  103.                 a.a(context).a(b.b.getString("iplist"));
  104.             }
  105.         } else if (fVar.a == a.a) {
  106.             a = fVar;
  107.         }
  108.     }
  109.  
  110.     static void a(Context context, f fVar, JSONObject jSONObject) {
  111.         Object obj = null;
  112.         try {
  113.             Iterator keys = jSONObject.keys();
  114.             while (keys.hasNext()) {
  115.                 String str = (String) keys.next();
  116.                 if (str.equalsIgnoreCase("v")) {
  117.                     int i = jSONObject.getInt(str);
  118.                     Object obj2 = fVar.d != i ? 1 : obj;
  119.                     fVar.d = i;
  120.                     obj = obj2;
  121.                 } else if (str.equalsIgnoreCase(path.DOCS_IMSDK_CHANNEL)) {
  122.                     str = jSONObject.getString(path.DOCS_IMSDK_CHANNEL);
  123.                     if (str.length() > 0) {
  124.                         fVar.b = new JSONObject(str);
  125.                     }
  126.                 } else if (str.equalsIgnoreCase("m")) {
  127.                     fVar.c = jSONObject.getString("m");
  128.                 }
  129.             }
  130.             if (obj == 1) {
  131.                 au a = au.a(i.a());
  132.                 if (a != null) {
  133.                     a.a(fVar);
  134.                 }
  135.                 if (fVar.a == b.a) {
  136.                     a(fVar.b);
  137.                     b(fVar.b);
  138.                 }
  139.             }
  140.             a(context, fVar);
  141.         } catch (Throwable e) {
  142.             p.e(e);
  143.         } catch (Throwable e2) {
  144.             p.e(e2);
  145.         }
  146.     }
  147.  
  148.     static void a(Context context, String str) {
  149.         if (str != null) {
  150.             p.b(context, "_mta_ky_tag_", q.b(str));
  151.         }
  152.     }
  153.  
  154.     static void a(Context context, JSONObject jSONObject) {
  155.         try {
  156.             Iterator keys = jSONObject.keys();
  157.             while (keys.hasNext()) {
  158.                 String str = (String) keys.next();
  159.                 if (str.equalsIgnoreCase(Integer.toString(b.a))) {
  160.                     a(context, b, jSONObject.getJSONObject(str));
  161.                 } else if (str.equalsIgnoreCase(Integer.toString(a.a))) {
  162.                     a(context, a, jSONObject.getJSONObject(str));
  163.                 } else if (str.equalsIgnoreCase("rs")) {
  164.                     StatReportStrategy statReportStrategy = StatReportStrategy.getStatReportStrategy(jSONObject.getInt(str));
  165.                     if (statReportStrategy != null) {
  166.                         q = statReportStrategy;
  167.                         if (isDebugEnable()) {
  168.                             p.d("Change to ReportStrategy:" + statReportStrategy.name());
  169.                         }
  170.                     }
  171.                 } else {
  172.                     return;
  173.                 }
  174.             }
  175.         } catch (Throwable e) {
  176.             p.e(e);
  177.         }
  178.     }
  179.  
  180.     static void a(JSONObject jSONObject) {
  181.         try {
  182.             StatReportStrategy statReportStrategy = StatReportStrategy.getStatReportStrategy(jSONObject.getInt("rs"));
  183.             if (statReportStrategy != null) {
  184.                 setStatSendStrategy(statReportStrategy);
  185.             }
  186.         } catch (JSONException e) {
  187.             if (isDebugEnable()) {
  188.                 p.i("rs not found.");
  189.             }
  190.         }
  191.     }
  192.  
  193.     static boolean a(int i, int i2, int i3) {
  194.         return i >= i2 && i <= i3;
  195.     }
  196.  
  197.     private static boolean a(String str) {
  198.         if (str == null) {
  199.             return false;
  200.         }
  201.         if (B == null) {
  202.             B = str;
  203.             return true;
  204.         } else if (B.contains(str)) {
  205.             return false;
  206.         } else {
  207.             B += "|" + str;
  208.             return true;
  209.         }
  210.     }
  211.  
  212.     static boolean a(JSONObject jSONObject, String str, String str2) {
  213.         if (!jSONObject.isNull(str)) {
  214.             String optString = jSONObject.optString(str);
  215.             if (k.c(str2) && k.c(optString) && str2.equalsIgnoreCase(optString)) {
  216.                 return true;
  217.             }
  218.         }
  219.         return false;
  220.     }
  221.  
  222.     static void b() {
  223.         M++;
  224.     }
  225.  
  226.     static void b(int i) {
  227.         if (i >= 0) {
  228.             M = i;
  229.         }
  230.     }
  231.  
  232.     static void b(Context context, JSONObject jSONObject) {
  233.         try {
  234.             String optString = jSONObject.optString(e);
  235.             if (k.c(optString)) {
  236.                 JSONObject jSONObject2 = new JSONObject(optString);
  237.                 if (jSONObject2.length() != 0) {
  238.                     Object obj;
  239.                     if (!jSONObject2.isNull("sm")) {
  240.                         obj = jSONObject2.get("sm");
  241.                         int intValue = obj instanceof Integer ? ((Integer) obj).intValue() : obj instanceof String ? Integer.valueOf((String) obj).intValue() : 0;
  242.                         if (intValue > 0) {
  243.                             if (isDebugEnable()) {
  244.                                 p.i("match sleepTime:" + intValue + " minutes");
  245.                             }
  246.                             p.b(context, d, System.currentTimeMillis() + ((long) ((intValue * 60) * 1000)));
  247.                             setEnableStatService(false);
  248.                             p.warn("MTA is disable for current SDK version");
  249.                         }
  250.                     }
  251.                     if (a(jSONObject2, "sv", "2.0.3")) {
  252.                         p.i("match sdk version:2.0.3");
  253.                         obj = 1;
  254.                     } else {
  255.                         obj = null;
  256.                     }
  257.                     if (a(jSONObject2, "md", Build.MODEL)) {
  258.                         p.i("match MODEL:" + Build.MODEL);
  259.                         obj = 1;
  260.                     }
  261.                     if (a(jSONObject2, "av", k.j(context))) {
  262.                         p.i("match app version:" + k.j(context));
  263.                         obj = 1;
  264.                     }
  265.                     if (a(jSONObject2, "mf", Build.MANUFACTURER)) {
  266.                         p.i("match MANUFACTURER:" + Build.MANUFACTURER);
  267.                         obj = 1;
  268.                     }
  269.                     if (a(jSONObject2, "osv", VERSION.SDK_INT)) {
  270.                         p.i("match android SDK version:" + VERSION.SDK_INT);
  271.                         obj = 1;
  272.                     }
  273.                     if (a(jSONObject2, "ov", VERSION.SDK_INT)) {
  274.                         p.i("match android SDK version:" + VERSION.SDK_INT);
  275.                         obj = 1;
  276.                     }
  277.                     if (a(jSONObject2, "ui", au.a(context).b(context).b())) {
  278.                         p.i("match imei:" + au.a(context).b(context).b());
  279.                         obj = 1;
  280.                     }
  281.                     if (a(jSONObject2, "mid", getLocalMidOnly(context))) {
  282.                         p.i("match mid:" + getLocalMidOnly(context));
  283.                         obj = 1;
  284.                     }
  285.                     if (obj != null) {
  286.                         a(k.b("2.0.3"));
  287.                     }
  288.                 }
  289.             }
  290.         } catch (Throwable e) {
  291.             p.e(e);
  292.         }
  293.     }
  294.  
  295.     static void b(JSONObject jSONObject) {
  296.         if (jSONObject != null && jSONObject.length() != 0) {
  297.             try {
  298.                 b(i.a(), jSONObject);
  299.                 String string = jSONObject.getString(c);
  300.                 if (isDebugEnable()) {
  301.                     p.d("hibernateVer:" + string + ", current version:2.0.3");
  302.                 }
  303.                 long b = k.b(string);
  304.                 if (k.b("2.0.3") <= b) {
  305.                     a(b);
  306.                 }
  307.             } catch (JSONException e) {
  308.                 p.d("__HIBERNATE__ not found.");
  309.             }
  310.         }
  311.     }
  312.  
  313.     static int c() {
  314.         return M;
  315.     }
  316.  
  317.     public static synchronized String getAppKey(Context context) {
  318.         String str;
  319.         synchronized (StatConfig.class) {
  320.             if (B != null) {
  321.                 str = B;
  322.             } else {
  323.                 if (context != null) {
  324.                     if (B == null) {
  325.                         B = k.f(context);
  326.                     }
  327.                 }
  328.                 if (B == null || B.trim().length() == 0) {
  329.                     p.error((Object) "AppKey can not be null or empty, please read Developer's Guide first!");
  330.                 }
  331.                 str = B;
  332.             }
  333.         }
  334.         return str;
  335.     }
  336.  
  337.     public static int getCurSessionStatReportCount() {
  338.         return K;
  339.     }
  340.  
  341.     public static g getCustomLogger() {
  342.         return S;
  343.     }
  344.  
  345.     public static String getCustomProperty(String str) {
  346.         try {
  347.             return a.b.getString(str);
  348.         } catch (Throwable th) {
  349.             p.e(th);
  350.             return null;
  351.         }
  352.     }
  353.  
  354.     public static String getCustomProperty(String str, String str2) {
  355.         try {
  356.             String string = a.b.getString(str);
  357.             return string != null ? string : str2;
  358.         } catch (Throwable th) {
  359.             p.e(th);
  360.             return str2;
  361.         }
  362.     }
  363.  
  364.     public static String getCustomUserId(Context context) {
  365.         if (context == null) {
  366.             p.error((Object) "Context for getCustomUid is null.");
  367.             return null;
  368.         }
  369.         if (Q == null) {
  370.             Q = p.a(context, "MTA_CUSTOM_UID", "");
  371.         }
  372.         return Q;
  373.     }
  374.  
  375.     public static long getFlushDBSpaceMS() {
  376.         return n;
  377.     }
  378.  
  379.     public static synchronized String getInstallChannel(Context context) {
  380.         String str;
  381.         synchronized (StatConfig.class) {
  382.             if (C != null) {
  383.                 str = C;
  384.             } else {
  385.                 str = p.a(context, D, "");
  386.                 C = str;
  387.                 if (str == null || C.trim().length() == 0) {
  388.                     C = k.g(context);
  389.                 }
  390.                 if (C == null || C.trim().length() == 0) {
  391.                     p.w("installChannel can not be null or empty, please read Developer's Guide first!");
  392.                 }
  393.                 str = C;
  394.             }
  395.         }
  396.         return str;
  397.     }
  398.  
  399.     public static String getLocalMidOnly(Context context) {
  400.         return context != null ? g.E(context).p().a() : fuse.CLOSE;
  401.     }
  402.  
  403.     public static int getMaxBatchReportCount() {
  404.         return y;
  405.     }
  406.  
  407.     public static int getMaxDaySessionNumbers() {
  408.         return L;
  409.     }
  410.  
  411.     public static int getMaxImportantDataSendRetryCount() {
  412.         return x;
  413.     }
  414.  
  415.     public static int getMaxParallelTimmingEvents() {
  416.         return F;
  417.     }
  418.  
  419.     public static int getMaxReportEventLength() {
  420.         return O;
  421.     }
  422.  
  423.     public static int getMaxSendRetryCount() {
  424.         return w;
  425.     }
  426.  
  427.     public static int getMaxSessionStatReportCount() {
  428.         return J;
  429.     }
  430.  
  431.     public static int getMaxStoreEventCount() {
  432.         return u;
  433.     }
  434.  
  435.     public static String getMid(Context context) {
  436.         return getLocalMidOnly(context);
  437.     }
  438.  
  439.     public static long getMsPeriodForMethodsCalledLimitClear() {
  440.         return i;
  441.     }
  442.  
  443.     public static int getNumEventsCachedInMemory() {
  444.         return m;
  445.     }
  446.  
  447.     public static int getNumEventsCommitPerSec() {
  448.         return z;
  449.     }
  450.  
  451.     public static int getNumOfMethodsCalledLimit() {
  452.         return h;
  453.     }
  454.  
  455.     public static String getQQ(Context context) {
  456.         return p.a(context, "mta.acc.qq", f);
  457.     }
  458.  
  459.     public static int getReportCompressedSize() {
  460.         return o;
  461.     }
  462.  
  463.     public static int getSendPeriodMinutes() {
  464.         return E;
  465.     }
  466.  
  467.     public static int getSessionTimoutMillis() {
  468.         return t;
  469.     }
  470.  
  471.     public static String getStatReportHost() {
  472.         return k;
  473.     }
  474.  
  475.     public static String getStatReportUrl() {
  476.         return I;
  477.     }
  478.  
  479.     public static StatReportStrategy getStatSendStrategy() {
  480.         return q;
  481.     }
  482.  
  483.     public static boolean isAutoExceptionCaught() {
  484.         return isAutoExceptionCaught;
  485.     }
  486.  
  487.     public static boolean isDebugEnable() {
  488.         return r;
  489.     }
  490.  
  491.     public static boolean isEnableConcurrentProcess() {
  492.         return P;
  493.     }
  494.  
  495.     public static boolean isEnableSmartReporting() {
  496.         return j;
  497.     }
  498.  
  499.     public static boolean isEnableStatService() {
  500.         return s;
  501.     }
  502.  
  503.     public static boolean isReportEventsByOrder() {
  504.         return l;
  505.     }
  506.  
  507.     public static boolean isXGProMode() {
  508.         return R;
  509.     }
  510.  
  511.     public static void setAppKey(Context context, String str) {
  512.         if (context == null) {
  513.             p.error((Object) "ctx in StatConfig.setAppKey() is null");
  514.         } else if (str == null || str.length() > GameSirButtonCode.BUTTON_X) {
  515.             p.error((Object) "appkey in StatConfig.setAppKey() is null or exceed 256 bytes");
  516.         } else {
  517.             if (B == null) {
  518.                 B = a(context);
  519.             }
  520.             if ((a(str) | a(k.f(context))) != 0) {
  521.                 a(context, B);
  522.             }
  523.         }
  524.     }
  525.  
  526.     public static void setAppKey(String str) {
  527.         if (str == null) {
  528.             p.error((Object) "appkey in StatConfig.setAppKey() is null");
  529.         } else if (str.length() > GameSirButtonCode.BUTTON_X) {
  530.             p.error((Object) "The length of appkey cann't exceed 256 bytes.");
  531.         } else {
  532.             B = str;
  533.         }
  534.     }
  535.  
  536.     public static void setAutoExceptionCaught(boolean z) {
  537.         isAutoExceptionCaught = z;
  538.     }
  539.  
  540.     public static void setCustomLogger(g gVar) {
  541.         S = gVar;
  542.     }
  543.  
  544.     public static void setCustomUserId(Context context, String str) {
  545.         if (context == null) {
  546.             p.error((Object) "Context for setCustomUid is null.");
  547.             return;
  548.         }
  549.         p.b(context, "MTA_CUSTOM_UID", str);
  550.         Q = str;
  551.     }
  552.  
  553.     public static void setDebugEnable(boolean z) {
  554.         r = z;
  555.         k.b().setDebugEnable(z);
  556.     }
  557.  
  558.     public static void setEnableConcurrentProcess(boolean z) {
  559.         P = z;
  560.     }
  561.  
  562.     public static void setEnableSmartReporting(boolean z) {
  563.         j = z;
  564.     }
  565.  
  566.     public static void setEnableStatService(boolean z) {
  567.         s = z;
  568.         if (!z) {
  569.             p.warn("!!!!!!MTA StatService has been disabled!!!!!!");
  570.         }
  571.     }
  572.  
  573.     public static void setFlushDBSpaceMS(long j) {
  574.         if (j > 0) {
  575.             n = j;
  576.         }
  577.     }
  578.  
  579.     public static void setInstallChannel(Context context, String str) {
  580.         if (str.length() > GameSirButtonCode.BUTTON_B) {
  581.             p.error((Object) "the length of installChannel can not exceed the range of 128 bytes.");
  582.             return;
  583.         }
  584.         C = str;
  585.         p.b(context, D, str);
  586.     }
  587.  
  588.     public static void setInstallChannel(String str) {
  589.         if (str.length() > GameSirButtonCode.BUTTON_B) {
  590.             p.error((Object) "the length of installChannel can not exceed the range of 128 bytes.");
  591.         } else {
  592.             C = str;
  593.         }
  594.     }
  595.  
  596.     public static void setMaxBatchReportCount(int i) {
  597.         if (a(i, 2, 1000)) {
  598.             y = i;
  599.         } else {
  600.             p.error((Object) "setMaxBatchReportCount can not exceed the range of [2,1000].");
  601.         }
  602.     }
  603.  
  604.     public static void setMaxDaySessionNumbers(int i) {
  605.         if (i <= 0) {
  606.             p.e((Object) "maxDaySessionNumbers must be greater than 0.");
  607.         } else {
  608.             L = i;
  609.         }
  610.     }
  611.  
  612.     public static void setMaxImportantDataSendRetryCount(int i) {
  613.         if (i > 100) {
  614.             x = i;
  615.         }
  616.     }
  617.  
  618.     public static void setMaxParallelTimmingEvents(int i) {
  619.         if (a(i, 1, (int) GameSirButtonCode.BUTTON_L2)) {
  620.             F = i;
  621.         } else {
  622.             p.error((Object) "setMaxParallelTimmingEvents can not exceed the range of [1, 4096].");
  623.         }
  624.     }
  625.  
  626.     public static void setMaxReportEventLength(int i) {
  627.         if (i <= 0) {
  628.             p.error((Object) "maxReportEventLength on setMaxReportEventLength() must greater than 0.");
  629.         } else {
  630.             O = i;
  631.         }
  632.     }
  633.  
  634.     public static void setMaxSendRetryCount(int i) {
  635.         if (a(i, 1, 1000)) {
  636.             w = i;
  637.         } else {
  638.             p.error((Object) "setMaxSendRetryCount can not exceed the range of [1,1000].");
  639.         }
  640.     }
  641.  
  642.     public static void setMaxSessionStatReportCount(int i) {
  643.         if (i < 0) {
  644.             p.error((Object) "maxSessionStatReportCount cannot be less than 0.");
  645.         } else {
  646.             J = i;
  647.         }
  648.     }
  649.  
  650.     public static void setMaxStoreEventCount(int i) {
  651.         if (a(i, 0, 500000)) {
  652.             u = i;
  653.         } else {
  654.             p.error((Object) "setMaxStoreEventCount can not exceed the range of [0, 500000].");
  655.         }
  656.     }
  657.  
  658.     public static void setNumEventsCachedInMemory(int i) {
  659.         if (i >= 0) {
  660.             m = i;
  661.         }
  662.     }
  663.  
  664.     public static void setNumEventsCommitPerSec(int i) {
  665.         if (i > 0) {
  666.             z = i;
  667.         }
  668.     }
  669.  
  670.     public static void setNumOfMethodsCalledLimit(int i, long j) {
  671.         h = i;
  672.         if (j >= 1000) {
  673.             i = j;
  674.         }
  675.     }
  676.  
  677.     public static void setQQ(Context context, String str) {
  678.         p.b(context, "mta.acc.qq", str);
  679.         f = str;
  680.     }
  681.  
  682.     public static void setReportCompressedSize(int i) {
  683.         if (i > 0) {
  684.             o = i;
  685.         }
  686.     }
  687.  
  688.     public static void setReportEventsByOrder(boolean z) {
  689.         l = z;
  690.     }
  691.  
  692.     public static void setSendPeriodMinutes(int i) {
  693.         if (a(i, 1, 10080)) {
  694.             E = i;
  695.         } else {
  696.             p.error((Object) "setSendPeriodMinutes can not exceed the range of [1, 7*24*60] minutes.");
  697.         }
  698.     }
  699.  
  700.     public static void setSessionTimoutMillis(int i) {
  701.         if (a(i, 1000, 86400000)) {
  702.             t = i;
  703.         } else {
  704.             p.error((Object) "setSessionTimoutMillis can not exceed the range of [1000, 24 * 60 * 60 * 1000].");
  705.         }
  706.     }
  707.  
  708.     public static void setStatReportUrl(String str) {
  709.         if (str == null || str.length() == 0) {
  710.             p.error((Object) "statReportUrl cannot be null or empty.");
  711.             return;
  712.         }
  713.         I = str;
  714.         try {
  715.             k = new URI(I).getHost();
  716.         } catch (Exception e) {
  717.             p.w(e);
  718.         }
  719.         if (isDebugEnable()) {
  720.             p.i("url:" + I + ", domain:" + k);
  721.         }
  722.     }
  723.  
  724.     public static void setStatSendStrategy(StatReportStrategy statReportStrategy) {
  725.         q = statReportStrategy;
  726.         if (statReportStrategy != StatReportStrategy.PERIOD) {
  727.             StatServiceImpl.c = 0;
  728.         }
  729.         if (isDebugEnable()) {
  730.             p.d("Change to statSendStrategy: " + statReportStrategy);
  731.         }
  732.     }
  733.  
  734.     public static void setXGProMode(boolean z) {
  735.         R = z;
  736.     }
  737. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement