From a367bc7e5c6b1f54eaa57d5f6545fabf612c46ba Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Tue, 20 Jan 2026 23:39:59 +0300 Subject: [PATCH] Initial commit for intaleq_admin --- .env | 2 +- android/app/build.gradle | 16 +- android/app/src/main/AndroidManifest.xml | 73 +- .../main/res/xml/network_security_config.xml | 21 + .../reports/problems/problems-report.html | 2 +- android/gradle.properties | 8 +- ios/Podfile.lock | 10 + lib/constant/links.dart | 32 +- .../admin/captain_admin_controller.dart | 36 + .../admin/dashboard_controller.dart | 28 +- .../admin/passenger_admin_controller.dart | 64 + lib/controller/admin/static_controller.dart | 667 +- lib/controller/auth/otp_helper.dart | 6 +- .../drivers/driver_not_active_controller.dart | 37 + .../firebase/notification_service.dart | 59 + lib/controller/functions/crud.dart | 22 +- lib/controller/functions/device_info.dart | 13 +- lib/controller/functions/encrypt_decrypt.dart | 4 +- .../functions/upload_image copy.dart | 25 +- lib/controller/functions/wallet.dart | 32 + lib/controller/notification_controller.dart | 144 +- .../rides/ride_lookup_controller.dart | 139 + lib/env/env.g.dart | 25358 ++++++++-------- lib/main.dart | 9 +- lib/views/admin/admin_home_page.dart | 726 +- lib/views/admin/captain/captain.dart | 479 +- lib/views/admin/captain/captain_details.dart | 523 +- .../driver_details_not_active_page.dart | 81 + lib/views/admin/captain/form_captain.dart | 190 +- .../captain/syrian_driver_not_active.dart | 54 + .../admin/drivers/driver_gift_check_page.dart | 219 + lib/views/admin/drivers/driver_the_best.dart | 719 +- .../admin/drivers/driver_tracker_screen.dart | 448 + lib/views/admin/drivers/monitor_ride.dart | 557 + lib/views/admin/error/error/error_page.dart | 352 + lib/views/admin/passenger/passenger.dart | 521 +- .../passenger/passenger_details_page.dart | 571 +- lib/views/admin/rides/ride_lookup_page.dart | 697 + lib/views/admin/static/notes_driver_page.dart | 163 + lib/views/admin/static/static.dart | 1367 +- lib/views/auth/login_page.dart | 13 + lib/views/invoice/add_invoice_page.dart | 2 + lib/views/widgets/my_textField.dart | 2 +- macos/Podfile | 2 +- macos/Podfile.lock | 250 + macos/Runner.xcodeproj/project.pbxproj | 126 +- .../xcshareddata/xcschemes/Runner.xcscheme | 1 + .../contents.xcworkspacedata | 3 + macos/Runner/DebugProfile.entitlements | 18 +- macos/Runner/Info.plist | 60 +- macos/Runner/Release.entitlements | 12 +- pubspec.lock | 80 + pubspec.yaml | 2 + 53 files changed, 20383 insertions(+), 14662 deletions(-) create mode 100644 android/app/src/main/res/xml/network_security_config.xml create mode 100644 lib/controller/drivers/driver_not_active_controller.dart create mode 100644 lib/controller/firebase/notification_service.dart create mode 100644 lib/controller/rides/ride_lookup_controller.dart create mode 100644 lib/views/admin/captain/driver_details_not_active_page.dart create mode 100644 lib/views/admin/captain/syrian_driver_not_active.dart create mode 100644 lib/views/admin/drivers/driver_gift_check_page.dart create mode 100644 lib/views/admin/drivers/driver_tracker_screen.dart create mode 100644 lib/views/admin/drivers/monitor_ride.dart create mode 100644 lib/views/admin/error/error/error_page.dart create mode 100644 lib/views/admin/rides/ride_lookup_page.dart create mode 100644 lib/views/admin/static/notes_driver_page.dart create mode 100644 macos/Podfile.lock diff --git a/.env b/.env index fb993eb..a6c3df8 100644 --- a/.env +++ b/.env @@ -61,7 +61,7 @@ emailService=seferservice@gmail.com allowed=TripzDriver: allowedWallet=TripzWallet: passnpassenger=hbgbitbXrXrBr -ALLOWED_ADMIN_PHONES=962798583052,962790849027,962787021927 +ALLOWED_ADMIN_PHONES=963992952235,962790849027,962787021927,963942542053,962772735902,971529155811 newId=new a=q b=x diff --git a/android/app/build.gradle b/android/app/build.gradle index fd75a9c..00da9f1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -16,17 +16,17 @@ if (keystorePropertiesFile.exists()) { android { namespace = "com.intaleq.intaleq_admin" compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion + ndkVersion = "27.0.12077973" externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "3.31.5" // Match cmake_minimum_required in CMakeLists.txt + version "3.22.1" // Match cmake_minimum_required in CMakeLists.txt } } defaultConfig { ndk { - abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" // Keep these! + abiFilters "armeabi-v7a", "arm64-v8a" // Keep these! } } compileOptions { @@ -43,10 +43,10 @@ android { applicationId = "com.intaleq.intaleq_admin" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 23 - targetSdk = flutter.targetSdkVersion - versionCode = 1 - versionName = '1.0.0' + minSdk = 30 + targetSdk = 36 + versionCode = 5 + versionName = '1.0.5' multiDexEnabled =true } @@ -75,6 +75,8 @@ flutter { } dependencies { + implementation platform('com.google.firebase:firebase-bom:33.3.0') // مثال حديث + implementation 'com.scottyab:rootbeer-lib:0.1.0' implementation 'com.google.android.gms:play-services-safetynet:18.0.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b706704..a99ee8c 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,31 @@ + + + + + + + + + + + + + + + + + - + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" /> - - + + - + - + + - - + + + + + + + + + + + + + + + + + + + - + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/network_security_config.xml b/android/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000..334e84f --- /dev/null +++ b/android/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,21 @@ + + + + + + + + + + intaleq.xyz + + + + XJXX7XthMj5VlSHfvo1q73sY7orJ9Wle0X4avj0/Vwo= + + C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHESsl= + + + + + \ No newline at end of file diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html index a1f01a3..4111900 100644 --- a/android/build/reports/problems/problems-report.html +++ b/android/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/android/gradle.properties b/android/gradle.properties index 2597170..67660bc 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,9 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx4096M android.useAndroidX=true android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=true +android.nonFinalResIds=true +dart.obfuscation=true +android.enableR8.fullMode=true +org.gradle.java.home=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 7978168..8fa203e 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -130,6 +130,10 @@ PODS: - TOCropViewController (~> 2.7.4) - image_picker_ios (0.0.1): - Flutter + - IOSSecuritySuite (1.9.11) + - jailbreak_root_detection (1.0.1): + - Flutter + - IOSSecuritySuite (~> 1.9.10) - libwebp (1.5.0): - libwebp/demux (= 1.5.0) - libwebp/mux (= 1.5.0) @@ -183,6 +187,7 @@ DEPENDENCIES: - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) - image_cropper (from `.symlinks/plugins/image_cropper/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - jailbreak_root_detection (from `.symlinks/plugins/jailbreak_root_detection/ios`) - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) @@ -206,6 +211,7 @@ SPEC REPOS: - GoogleUtilities - GTMAppAuth - GTMSessionFetcher + - IOSSecuritySuite - libwebp - Mantle - nanopb @@ -236,6 +242,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/image_cropper/ios" image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" + jailbreak_root_detection: + :path: ".symlinks/plugins/jailbreak_root_detection/ios" local_auth_darwin: :path: ".symlinks/plugins/local_auth_darwin/darwin" path_provider_foundation: @@ -272,6 +280,8 @@ SPEC CHECKSUMS: GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 image_cropper: 5f162dcf988100dc1513f9c6b7eb42cd6fbf9156 image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a + IOSSecuritySuite: b51056d5411aee567153ca86ce7f6edfdc5d2654 + jailbreak_root_detection: 9201e1dfd51dc23069cbfb8d4f4a2d18305170bf libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19 Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d diff --git a/lib/constant/links.dart b/lib/constant/links.dart index 7f77fa3..3b0fd9d 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -11,8 +11,9 @@ class AppLink { // static final String endPoint = box.read(BoxName.serverChosen); // static final String server = Env.seferCairoServer; - static final String server = 'https://intaleq.xyz/intaleq'; - static String loginJwtDriver = "https://intaleq.xyz/intaleq/loginAdmin.php"; + static final String server = 'https://api.intaleq.xyz/intaleq'; + static String loginJwtDriver = + "https://api.intaleq.xyz/intaleq/loginAdmin.php"; static String googleMapsLink = 'https://maps.googleapis.com/maps/api/'; static String llama = 'https://api.llama-api.com/chat/completions'; @@ -41,6 +42,10 @@ class AppLink { "$seferPaymentServer/Admin/getPaymentsDashboard.php"; static String getSeferWallet = "$tripzPaymentServer/seferWallet/get.php"; static String addDrivePayment = "$tripzPaymentServer/payment/add.php"; + static String addFromAdmin = + "$tripzPaymentServer/driverWallet/addFromAdmin.php"; + static String add300ToDriver = + "$tripzPaymentServer/driverWallet/add300ToDriver.php"; static String updatePaymetToPaid = "$tripzPaymentServer/payment/updatePaymetToPaid.php"; static String wallet = '$tripzPaymentServer/passengerWallet'; @@ -238,7 +243,26 @@ class AppLink { static String getPassengerDetailsByPassengerID = "$server/Admin/getPassengerDetailsByPassengerID.php"; static String getPassengerDetails = "$server/Admin/getPassengerDetails.php"; + static String admin_delete_and_blacklist_passenger = + "$server/Admin/passenger/admin_delete_and_blacklist_passenger.php"; + static String admin_update_passenger = + "$server/Admin/passenger/admin_update_passenger.php"; + static String admin_unblacklist = + "$server/Admin/passenger/admin_unblacklist.php"; + static String admin_get_rides_by_phone = + "$server/Admin/rides/admin_get_rides_by_phone.php"; + static String admin_update_ride_status = + "$server/Admin/rides/admin_update_ride_status.php"; static String getPassengerbyEmail = "$server/Admin/getPassengerbyEmail.php"; + static String updateDriverFromAdmin = + "$server/Admin/driver/updateDriverFromAdmin.php"; + static String find_driver_by_phone = + "$server/Admin/driver/find_driver_by_phone.php"; + static String getDriversPending = + "$server/auth/syria/driver/drivers_pending_list.php"; + static String getDriverDetails = + "$server/auth/syria/driver/driver_details.php"; + static String deleteCaptain = "$server/Admin/driver/deleteCaptain.php"; static String addAdminUser = "$server/Admin/adminUser/add.php"; static String getdashbord = "$server/Admin/dashbord.php"; static String getEmployee = "$server/Admin/employee/get.php"; @@ -262,6 +286,10 @@ class AppLink { static String getPassengersStatic = "$serviceApp/getPassengersStatic.php"; static String getRidesStatic = "$serviceApp/getRidesStatic.php"; static String getEmployeeStatic = "$serviceApp/getEmployeeStatic.php"; + static String getNotesForEmployee = "$serviceApp/getNotesForEmployee.php"; + static String getEmployeeDriverAfterCallingRegister = + "$serviceApp/getEmployeeDriverAfterCallingRegister.php"; + static String getEditorStatsCalls = "$serviceApp/getEditorStatsCalls.php"; static String getdriverstotalMonthly = "$serviceApp/getdriverstotalMonthly.php"; diff --git a/lib/controller/admin/captain_admin_controller.dart b/lib/controller/admin/captain_admin_controller.dart index debca72..6532813 100644 --- a/lib/controller/admin/captain_admin_controller.dart +++ b/lib/controller/admin/captain_admin_controller.dart @@ -32,6 +32,42 @@ class CaptainAdminController extends GetxController { update(); } + Future deletCaptain() async { + isLoading = true; + update(); + var res = await CRUD().get( + link: AppLink.deleteCaptain, + payload: {}, + ); + var d = jsonDecode(res); + if (d['status'] == 'success') { + captainData = d; + } + + isLoading = false; + update(); + } + + Future find_driver_by_phone(String phone) async { + isLoading = true; + update(); + var res = await CRUD().post( + link: AppLink.find_driver_by_phone, + payload: {'phone': phone}, + ); + var d = (res); + if (d != 'failure') { + captainData = d; + } else { + captainData = {}; + Get.snackbar('Error', 'No captain found with this phone number', + backgroundColor: AppColor.redColor); + } + + isLoading = false; + update(); + } + Future addCaptainPrizeToWallet() async { String? paymentId; //todo link to add wallet to captain diff --git a/lib/controller/admin/dashboard_controller.dart b/lib/controller/admin/dashboard_controller.dart index 6deefda..d599582 100644 --- a/lib/controller/admin/dashboard_controller.dart +++ b/lib/controller/admin/dashboard_controller.dart @@ -21,41 +21,47 @@ class DashboardController extends GetxController { isLoading = true; update(); - // الطلب من السيرفر الرئيسي + // 🔹 Request main dashboard data var res = await CRUD().get(link: AppLink.getdashbord, payload: {}); + print('📡 Main dashboard response: $res'); + if (res != 'failure') { var d = jsonDecode(res); - // Log.print('d: ${d}'); - dashbord = d['message']; // هذا عبارة عن List + print('✅ Decoded main dashboard: ${jsonEncode(d)}'); + dashbord = d['message']; + } else { + print('❌ Failed to load main dashboard'); } - // الطلب من سيرفر المحافظ + // 🔹 Request wallet dashboard data var resPayments = await CRUD().postWallet( link: AppLink.getPaymentsDashboard, payload: {}, ); + print('💳 Wallet dashboard response: $resPayments'); if (resPayments != 'failure') { var p = resPayments; - // Log.print('p: ${p}'); + print('✅ Decoded wallet dashboard: ${jsonEncode(p)}'); - // نتأكد أن الكل Map بداخل List if (dashbord.isNotEmpty && p['message'] is List && p['message'].isNotEmpty) { - dashbord[0].addAll(p['message'][0]); // ندمج المعلومات داخل نفس الـ Map + dashbord[0].addAll(p['message'][0]); } + } else { + print('❌ Failed to load wallet dashboard'); } - // كريدت الرسائل + // 🔹 Check SMS credit var res2 = await CRUD().kazumiSMS( link: 'https://sms.kazumi.me/api/sms/check-credit', payload: {"username": "Sefer", "password": AK.smsPasswordEgypt}, ); creditSMS = res2['credit']; - Log.print(' res2[credit]: ${res2['credit']}'); - Log.print('creditSMS: ${creditSMS}'); + print('📱 SMS Credit Response: ${jsonEncode(res2)}'); + print('💰 creditSMS: $creditSMS'); isLoading = false; update(); @@ -70,7 +76,7 @@ class DashboardController extends GetxController { // box.read(BoxName.tokensDrivers)['message'][i]['phone'].toString(), smsText.text, ); - // Log.print('CRUD().phoneDriversTest.: ${phoneNumber['phone']}'); + // print('CRUD().phoneDriversTest.: ${phoneNumber['phone']}'); Future.delayed(const Duration(microseconds: 20)); } Get.back(); diff --git a/lib/controller/admin/passenger_admin_controller.dart b/lib/controller/admin/passenger_admin_controller.dart index eb6b50a..37e4dde 100644 --- a/lib/controller/admin/passenger_admin_controller.dart +++ b/lib/controller/admin/passenger_admin_controller.dart @@ -43,6 +43,70 @@ class PassengerAdminController extends GetxController { Get.back(); } +// داخل الـController نفسه + + Future updatePassenger({ + required String id, // أو مرّر phoneLookup بدل id لو حاب + String? firstName, + String? lastName, + String? phone, + }) async { + // لا نرسل طلب إذا ما في أي تغيير + if ((firstName == null || firstName.trim().isEmpty) && + (lastName == null || lastName.trim().isEmpty) && + (phone == null || phone.trim().isEmpty)) { + return false; + } + + // فلتر بسيط للأرقام فقط + // String _normalizePhone(String s) => s.replaceAll(RegExp(r'\D+'), ''); + + final Map payload = { + 'id': + id, // لو بدك تستخدم phone_lookup بدل id: احذف هذا وأرسل {'phone_lookup': phoneLookup} + }; + + if (firstName != null && firstName.trim().isNotEmpty) { + payload['first_name'] = firstName.trim(); + } + if (lastName != null && lastName.trim().isNotEmpty) { + payload['last_name'] = lastName.trim(); + } + if (phone != null && phone.trim().isNotEmpty) { + payload['phone'] = (phone); + } + + // حالة تحميل + isLoading = true; + update(); + + try { + final res = await CRUD().post( + link: AppLink.admin_update_passenger, // عدّل الرابط حسب اسم مسارك + payload: payload, + ); + final d = (res); + + final ok = (d['status'] == 'success'); + if (ok) { + // (اختياري) حدّث الكاش/الواجهة — مثلاً أعد الجلب + Get.snackbar('Update successful', + d['message']?.toString() ?? 'Passenger updated successfully', + backgroundColor: AppColor.greenColor); + // await getPassengerCount(); // أو حدّث passengersData محليًا إذا متاح + } else { + // (اختياري) أظهر رسالة خطأ + // Get.snackbar('Update failed', d['message']?.toString() ?? 'Unknown error'); + } + return ok; + } catch (e) { + // Get.snackbar('Error', e.toString()); + return false; + } finally { + isLoading = false; + update(); + } + } void addPassengerPrizeToWalletSecure() async { try { diff --git a/lib/controller/admin/static_controller.dart b/lib/controller/admin/static_controller.dart index 8797cfe..36210cb 100644 --- a/lib/controller/admin/static_controller.dart +++ b/lib/controller/admin/static_controller.dart @@ -1,238 +1,507 @@ import 'dart:convert'; - import 'package:fl_chart/fl_chart.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; import '../../constant/links.dart'; -import '../../models/model/passengers_model.dart'; import '../../print.dart'; import '../functions/crud.dart'; class StaticController extends GetxController { - Map jsonData1 = {}; - Map jsonData2 = {}; - List staticList = []; - var chartDataPassengers; - var chartDataDrivers; - var chartDataDriversCalling; - var chartDataRides; - var chartDataEmployee; - var chartDataEmployeeMaryam; - var chartDataEmployeeRawda; - var chartDataEmployeeMena; - var chartDataEmployeeSefer4; - var chartDataDriversMatchingNotes; + // --- Date & State Management --- + DateTime? startDate = DateTime(DateTime.now().year, DateTime.now().month, 1); + DateTime? endDate = + DateTime(DateTime.now().year, DateTime.now().month + 1, 0); + + DateTime? compareStartDate; + DateTime? compareEndDate; + + bool isComparing = false; bool isLoading = false; - String totalMonthlyPassengers = ''; - String totalMonthlyRides = ''; - String totalMonthlyEmployee = ''; - String totalMonthlyDrivers = ''; - late List passengersData; - late List ridesData; - late List employeeData; - late List driversData; - Future fetch() async { - isLoading = true; - update(); // Notify the observers about the loading state change + // --- Daily Notes State --- + bool isLoadingNotes = false; + List dailyNotesList = []; - var res = await CRUD().get( - link: AppLink.getPassengersStatic, - payload: {}, - ); - jsonData1 = jsonDecode(res); - var jsonResponse = jsonDecode(res) as Map; - isLoading = false; - final List jsonData = jsonResponse['message']; - totalMonthlyPassengers = jsonData[0]['totalMonthly'].toString(); - passengersData = jsonData.map((item) { - return MonthlyPassengerInstall.fromJson(item); - }).toList(); - final List spots = passengersData - .map((data) => FlSpot( - data.day.toDouble(), - data.totalPassengers.toDouble(), - )) - .toList(); - chartDataPassengers = spots; + // --- Chart Data (Current Range) --- + List chartDataPassengers = []; + List chartDataDrivers = []; + List chartDataRides = []; + List chartDataDriversMatchingNotes = []; - update(); // Notify the observers about the data and loading state change + // Employee Data (Notes/General Stats) + List chartDataEmployeerama1 = []; + List chartDataEmployeeshahd = []; + List chartDataEmployeeRama2 = []; + List chartDataEmployeeSefer4 = []; + + // Employee Data (Calls/Activations Stats) + List chartDataCallsrama1 = []; + List chartDataCallsShahd = []; + List chartDataCallsRama2 = []; + List chartDataCallsSefer4 = []; + + // --- Chart Data (Comparison Range) --- + List chartDataPassengersCompare = []; + List chartDataDriversCompare = []; + List chartDataRidesCompare = []; + List chartDataDriversMatchingNotesCompare = []; + + // Employee Comparison (Notes) + List chartDataEmployeerama1Compare = []; + List chartDataEmployeeshahdCompare = []; + List chartDataEmployeeRama2Compare = []; + List chartDataEmployeeSefer4Compare = []; + + // Employee Comparison (Calls/Activations) + List chartDataCallsrama1Compare = []; + List chartDataCallsShahdCompare = []; + List chartDataCallsRama2Compare = []; + List chartDataCallsSefer4Compare = []; + + // --- Totals --- + String totalMonthlyPassengers = '0'; + String totalMonthlyRides = '0'; + String totalMonthlyDrivers = '0'; + + // --- Raw Lists --- + List staticList = []; + + // --- Employment Type Stats List (Simple Count) --- + List> employmentStatsList = []; + + @override + void onInit() { + super.onInit(); + getAll(); } - Future fetchRides() async { - isLoading = true; - update(); // Notify the observers about the loading state change - - var res = await CRUD().get( - link: AppLink.getRidesStatic, - payload: {}, - ); - jsonData1 = jsonDecode(res); - var jsonResponse = jsonDecode(res) as Map; - isLoading = false; - final List jsonData = jsonResponse['message']; - totalMonthlyRides = jsonData[0]['totalMonthly'].toString(); - ridesData = jsonData.map((item) { - return MonthlyRidesInstall.fromJson(item); - }).toList(); - final List spots = ridesData - .map((data) => FlSpot( - data.day.toDouble(), - data.totalRides.toDouble(), - )) - .toList(); - chartDataRides = spots; - - update(); // Notify the observers about the data and loading state change + // --- Helpers for View --- + double get daysInPeriod { + if (startDate == null || endDate == null) return 31; + return endDate!.difference(startDate!).inDays + 1.0; } - Future fetchEmployee() async { - try { - isLoading = true; - update(); + String get currentDateString { + if (startDate == null || endDate == null) return ""; + return "${DateFormat('yyyy-MM-dd').format(startDate!)} : ${DateFormat('yyyy-MM-dd').format(endDate!)}"; + } - var res = await CRUD().get(link: AppLink.getEmployeeStatic, payload: {}); + // --- Date Actions --- + void updateDateRange(DateTime start, DateTime end) { + startDate = start; + endDate = end; + if (isComparing) _calculateCompareDates(); + getAll(); + update(); + } - // First check if the response is valid JSON - if (res == 'failure') { - throw FormatException('Invalid response: $res'); - } + void _calculateCompareDates() { + if (startDate == null || endDate == null) return; + Duration duration = endDate!.difference(startDate!); + compareEndDate = startDate!.subtract(const Duration(days: 1)); + compareStartDate = compareEndDate!.subtract(duration); + } - var jsonResponse = jsonDecode(res) as Map; + Future toggleComparison() async { + isComparing = !isComparing; + if (isComparing) { + _calculateCompareDates(); + } else { + compareStartDate = null; + compareEndDate = null; + _clearComparisonData(); + } + await getAll(); + } - // Initialize empty lists for all chart data - chartDataEmployeeMaryam = []; - chartDataEmployeeRawda = []; - chartDataEmployeeMena = []; - chartDataEmployeeSefer4 = []; - totalMonthlyRides = '0'; + void _clearComparisonData() { + chartDataPassengersCompare.clear(); + chartDataDriversCompare.clear(); + chartDataRidesCompare.clear(); + chartDataDriversMatchingNotesCompare.clear(); - // Check for error response - if (jsonResponse['status'] == 'failure') { - isLoading = false; - update(); - return; - } + chartDataEmployeerama1Compare.clear(); + chartDataEmployeeshahdCompare.clear(); + chartDataEmployeeRama2Compare.clear(); + chartDataEmployeeSefer4Compare.clear(); - final List jsonData = jsonResponse['message']; - if (jsonData.isEmpty) { - isLoading = false; - update(); - return; - } + chartDataCallsrama1Compare.clear(); + chartDataCallsShahdCompare.clear(); + chartDataCallsRama2Compare.clear(); + chartDataCallsSefer4Compare.clear(); + } - totalMonthlyRides = jsonData[0]['totalMonthly']?.toString() ?? '0'; + Map _getPayload(DateTime start, DateTime end) { + return { + "start_date": DateFormat('yyyy-MM-dd').format(start), + "end_date": DateFormat('yyyy-MM-dd').format(end), + "month": start.month.toString(), + "year": start.year.toString(), + }; + } - // Group data by employee - Map> employeeDataMap = {}; + // --- Main Fetch Logic --- + Future getAll() async { + if (startDate == null || endDate == null) return; - for (var item in jsonData) { - var employeeData = MonthlyEmployeeData.fromJson(item); - if (!employeeDataMap.containsKey(employeeData.name)) { - employeeDataMap[employeeData.name] = []; - } - employeeDataMap[employeeData.name]!.add(employeeData); - } + isLoading = true; + update(); - final today = DateTime.now().day; + await Future.wait([ + fetchPassengers(isCompare: false), + fetchRides(isCompare: false), + fetchDrivers(isCompare: false), + fetchEmployee(isCompare: false), + fetchEditorCalls(isCompare: false), + fetchEmploymentStats(), + ]); - // Create data for each employee - final employeeNames = { - 'maryam': chartDataEmployeeMaryam, - 'yasmine': chartDataEmployeeRawda, - 'mena': chartDataEmployeeMena, - 'ashjan': chartDataEmployeeSefer4, - }; + if (isComparing && compareStartDate != null && compareEndDate != null) { + await Future.wait([ + fetchPassengers(isCompare: true), + fetchRides(isCompare: true), + fetchDrivers(isCompare: true), + fetchEmployee(isCompare: true), + fetchEditorCalls(isCompare: true), + ]); + } - employeeNames.forEach((name, chartData) { - var spots = []; - for (int day = 1; day <= today; day++) { - spots.add(FlSpot( - day.toDouble(), - employeeDataMap[name] - ?.firstWhere( - (e) => e.day == day, - orElse: () => MonthlyEmployeeData( - day: day, - totalEmployees: 0, - name: name, - ), - ) - .totalEmployees - .toDouble() ?? - 0, - )); - } + isLoading = false; + update(); + } - // Explicitly cast to List - if (name == 'maryam') - chartDataEmployeeMaryam = List.from(spots); - if (name == 'yasmine') - chartDataEmployeeRawda = List.from(spots); - if (name == 'mena') chartDataEmployeeMena = List.from(spots); - if (name == 'ashjan') - chartDataEmployeeSefer4 = List.from(spots); - }); - } catch (e) { - Log.print('Error in fetchEmployee: $e'); - // Set empty FlSpot lists in case of error - chartDataEmployeeMaryam = []; - chartDataEmployeeRawda = []; - chartDataEmployeeMena = []; - chartDataEmployeeSefer4 = []; - totalMonthlyRides = '0'; - } finally { - isLoading = false; - update(); + // ... (Existing Functions _generateSpots, fetchPassengers, etc.) ... + List _generateSpots(List data, String dateKey, + String valueKey, DateTime startOfRange) { + List spots = []; + Map dataMap = {}; + for (var item in data) { + String dateStr = item[dateKey].toString(); + double val = double.tryParse(item[valueKey].toString()) ?? 0.0; + dataMap[dateStr] = val; + } + DateTime rangeEnd = + (startOfRange == startDate) ? endDate! : compareEndDate!; + int totalDays = rangeEnd.difference(startOfRange).inDays + 1; + for (int i = 0; i < totalDays; i++) { + DateTime currentDate = startOfRange.add(Duration(days: i)); + String dateKeyStr = DateFormat('yyyy-MM-dd').format(currentDate); + double value = dataMap[dateKeyStr] ?? 0.0; + spots.add(FlSpot((i + 1).toDouble(), value)); + } + return spots; + } + + Future fetchPassengers({bool isCompare = false}) async { + DateTime start = isCompare ? compareStartDate! : startDate!; + DateTime end = isCompare ? compareEndDate! : endDate!; + var res = await CRUD().get( + link: AppLink.getPassengersStatic, payload: _getPayload(start, end)); + var jsonResponse = jsonDecode(res); + if (jsonResponse['status'] == 'failure') return; + final List jsonData = jsonResponse['message']; + if (!isCompare && + jsonData.isNotEmpty && + jsonData[0]['totalMonthly'] != null) { + totalMonthlyPassengers = jsonData[0]['totalMonthly'].toString(); + } + List spots = + _generateSpots(jsonData, 'day', 'totalPassengers', start); + if (isCompare) + chartDataPassengersCompare = spots; + else + chartDataPassengers = spots; + } + + Future fetchRides({bool isCompare = false}) async { + DateTime start = isCompare ? compareStartDate! : startDate!; + DateTime end = isCompare ? compareEndDate! : endDate!; + var res = await CRUD() + .get(link: AppLink.getRidesStatic, payload: _getPayload(start, end)); + var jsonResponse = jsonDecode(res); + if (jsonResponse['status'] == 'failure') return; + final List jsonData = jsonResponse['message']; + if (!isCompare && + jsonData.isNotEmpty && + jsonData[0]['totalMonthly'] != null) { + totalMonthlyRides = jsonData[0]['totalMonthly'].toString(); + } + List spots = _generateSpots(jsonData, 'day', 'totalRides', start); + if (isCompare) + chartDataRidesCompare = spots; + else + chartDataRides = spots; + } + + Future fetchDrivers({bool isCompare = false}) async { + DateTime start = isCompare ? compareStartDate! : startDate!; + DateTime end = isCompare ? compareEndDate! : endDate!; + var res = await CRUD().get( + link: AppLink.getdriverstotalMonthly, payload: _getPayload(start, end)); + var jsonResponse = jsonDecode(res); + if (jsonResponse['status'] == 'failure') return; + final List jsonData = jsonResponse['message']; + if (!isCompare && + jsonData.isNotEmpty && + jsonData[0]['totalMonthlyDrivers'] != null) { + totalMonthlyDrivers = jsonData[0]['totalMonthlyDrivers'].toString(); + } + if (!isCompare) { + staticList = jsonData; + } + + List spotsDrivers = + _generateSpots(jsonData, 'day', 'dailyTotalDrivers', start); + List spotsNotes = + _generateSpots(jsonData, 'day', 'dailyMatchingNotes', start); + if (isCompare) { + chartDataDriversCompare = spotsDrivers; + chartDataDriversMatchingNotesCompare = spotsNotes; + } else { + chartDataDrivers = spotsDrivers; + chartDataDriversMatchingNotes = spotsNotes; } } - Future fetchDrivers() async { - isLoading = true; - update(); // Notify the observers about the loading state change + Future fetchEmployee({bool isCompare = false}) async { + try { + DateTime start = isCompare ? compareStartDate! : startDate!; + DateTime end = isCompare ? compareEndDate! : endDate!; + var res = await CRUD().get( + link: AppLink.getEmployeeStatic, payload: _getPayload(start, end)); - var res = await CRUD().get( - link: AppLink.getdriverstotalMonthly, - payload: {}, - ); - jsonData2 = jsonDecode(res); - var jsonResponse = jsonDecode(res) as Map; - isLoading = false; - final List jsonData = jsonResponse['message']; - staticList = jsonData; - totalMonthlyDrivers = jsonData[0]['totalDrivers'].toString(); - driversData = jsonData.map((item) { - return MonthlyDriverInstall.fromJson(item); - }).toList(); - final List spots = driversData - .map((data) => FlSpot( - data.day.toDouble(), - data.dailyTotalDrivers.toDouble(), - )) - .toList(); - chartDataDrivers = spots; - final List spotsCalling = driversData - .map((data) => FlSpot( - data.day.toDouble(), - data.dailyTotalCallingDrivers.toDouble(), - )) - .toList(); - chartDataDriversCalling = spotsCalling; - final List spotsTotalMatchingNotes = driversData - .map((data) => FlSpot( - data.day.toDouble(), - data.dailyMatchingNotes.toDouble(), - )) - .toList(); - chartDataDriversMatchingNotes = spotsTotalMatchingNotes; + if (isCompare) { + chartDataEmployeerama1Compare = []; + chartDataEmployeeshahdCompare = []; + chartDataEmployeeRama2Compare = []; + chartDataEmployeeSefer4Compare = []; + } else { + chartDataEmployeerama1 = []; + chartDataEmployeeshahd = []; + chartDataEmployeeRama2 = []; + chartDataEmployeeSefer4 = []; + } - update(); // Notify the observers about the data and loading state change + if (res == 'failure') return; + var jsonResponse = jsonDecode(res) as Map; + if (jsonResponse['status'] == 'failure') return; + final List jsonData = jsonResponse['message']; + if (jsonData.isEmpty) return; + + Map> dateNameMap = {}; + for (var item in jsonData) { + String dateKeyStr = item['date'] ?? item['day']; + String name = item['NAME'].toString().toLowerCase().trim(); + double count = double.tryParse(item['count'].toString()) ?? 0.0; + if (!dateNameMap.containsKey(dateKeyStr)) dateNameMap[dateKeyStr] = {}; + if (dateNameMap[dateKeyStr]!.containsKey(name)) { + dateNameMap[dateKeyStr]![name] = + dateNameMap[dateKeyStr]![name]! + count; + } else { + dateNameMap[dateKeyStr]![name] = count; + } + } + + final targetLists = isCompare + ? { + 'rama1': chartDataEmployeerama1Compare, + 'shahd': chartDataEmployeeshahdCompare, + 'rama2': chartDataEmployeeRama2Compare, + 'mayar': chartDataEmployeeSefer4Compare + } + : { + 'rama1': chartDataEmployeerama1, + 'shahd': chartDataEmployeeshahd, + 'rama2': chartDataEmployeeRama2, + 'mayar': chartDataEmployeeSefer4 + }; + + int totalDays = end.difference(start).inDays + 1; + targetLists.forEach((key, listToFill) { + for (int i = 0; i < totalDays; i++) { + DateTime currentDate = start.add(Duration(days: i)); + String currentDateStr = DateFormat('yyyy-MM-dd').format(currentDate); + double value = 0; + Map? dayData = dateNameMap[currentDateStr]; + if (dayData != null) { + // if (key == 'mayar') { + // value = (dayData['mayar'] ?? 0) + + // (dayData['rama1'] ?? 0) + + // (dayData['sefer4'] ?? 0); + // } else { + value = dayData[key] ?? 0; + // } + } + listToFill.add(FlSpot((i + 1).toDouble(), value)); + } + }); + } catch (e) { + Log.print('Error in fetchEmployee: $e'); + } } - Future getAll() async { - await fetch(); - await fetchRides(); - await fetchDrivers(); - await fetchEmployee(); + Future fetchEditorCalls({bool isCompare = false}) async { + try { + DateTime start = isCompare ? compareStartDate! : startDate!; + DateTime end = isCompare ? compareEndDate! : endDate!; + + var res = await CRUD().get( + link: AppLink.getEditorStatsCalls, payload: _getPayload(start, end)); + + if (isCompare) { + chartDataCallsrama1Compare = []; + chartDataCallsShahdCompare = []; + chartDataCallsRama2Compare = []; + chartDataCallsSefer4Compare = []; + } else { + chartDataCallsrama1 = []; + chartDataCallsShahd = []; + chartDataCallsRama2 = []; + chartDataCallsSefer4 = []; + } + + if (res == 'failure') return; + + var jsonResponse = jsonDecode(res) as Map; + if (jsonResponse['status'] == 'failure') return; + + final List jsonData = jsonResponse['message']; + if (jsonData.isEmpty) return; + + Map> dateNameMap = {}; + + for (var item in jsonData) { + String dateKeyStr = item['date'] ?? item['day']; + String name = item['NAME'].toString().toLowerCase().trim(); + double count = double.tryParse(item['count'].toString()) ?? 0.0; + + if (!dateNameMap.containsKey(dateKeyStr)) { + dateNameMap[dateKeyStr] = {}; + } + + if (dateNameMap[dateKeyStr]!.containsKey(name)) { + dateNameMap[dateKeyStr]![name] = + dateNameMap[dateKeyStr]![name]! + count; + } else { + dateNameMap[dateKeyStr]![name] = count; + } + } + + final targetLists = isCompare + ? { + 'rama1': chartDataCallsrama1Compare, + 'shahd': chartDataCallsShahdCompare, + 'rama2': chartDataCallsRama2Compare, + 'mayar': chartDataCallsSefer4Compare, + } + : { + 'rama1': chartDataCallsrama1, + 'shahd': chartDataCallsShahd, + 'rama2': chartDataCallsRama2, + 'mayar': chartDataCallsSefer4, + }; + + int totalDays = end.difference(start).inDays + 1; + + targetLists.forEach((key, listToFill) { + for (int i = 0; i < totalDays; i++) { + DateTime currentDate = start.add(Duration(days: i)); + String currentDateStr = DateFormat('yyyy-MM-dd').format(currentDate); + + double value = 0; + Map? dayData = dateNameMap[currentDateStr]; + + if (dayData != null) { + // if (key == 'mayar_group') { + // value = (dayData['mayar'] ?? 0) + + // (dayData['rama1'] ?? 0) + + // (dayData['sefer4'] ?? 0); + // } else { + value = dayData[key] ?? 0; + // } + } + listToFill.add(FlSpot((i + 1).toDouble(), value)); + } + }); + } catch (e) { + Log.print('Error in fetchEditorCalls: $e'); + } + } + + // --- 🔴 FIXED: Fetch Employment Stats with Unique Check --- + Future fetchEmploymentStats() async { + try { + // لا نستخدم .clear() هنا، سنقوم باستبدال القائمة بالكامل في النهاية + + var res = await CRUD().get( + link: AppLink.getEmployeeDriverAfterCallingRegister, + payload: _getPayload(startDate!, endDate!)); + + if (res == 'failure') return; + + var jsonResponse = jsonDecode(res); + if (jsonResponse['status'] == 'success') { + if (jsonResponse['message'] != null && + jsonResponse['message']['data'] != null) { + List data = jsonResponse['message']['data']; + + List allowedNames = ['shahd', 'mayar', 'rama1', 'rama2']; + + // استخدام Map لضمان عدم تكرار الأسماء (تجميع القيم) + Map uniqueMap = {}; + + for (var item in data) { + String name = + item['employmentType'].toString().toLowerCase().trim(); + int count = int.tryParse(item['count'].toString()) ?? 0; + + if (allowedNames.contains(name)) { + if (uniqueMap.containsKey(name)) { + uniqueMap[name] = uniqueMap[name]! + count; + } else { + uniqueMap[name] = count; + } + } + } + + // تحويل الـ Map إلى القائمة النهائية + List> tempList = []; + uniqueMap.forEach((key, value) { + tempList.add({'name': key, 'count': value}); + }); + + // استبدال القائمة القديمة بالقائمة الجديدة النظيفة + employmentStatsList = tempList; + } + } + } catch (e) { + Log.print("Error fetchEmploymentStats: $e"); + } + } + + // --- Fetch Daily Notes Log --- + Future fetchDailyNotes(DateTime date) async { + try { + isLoadingNotes = true; + dailyNotesList.clear(); + update(); + + var res = await CRUD().post( + link: AppLink.getNotesForEmployee, + payload: {"date": DateFormat('yyyy-MM-dd').format(date)}); + + if (res != 'failure') { + var jsonResponse = (res); + if (jsonResponse['status'] == 'success') { + dailyNotesList = jsonResponse['message']; + } + } + } catch (e) { + Log.print("Error fetchDailyNotes: $e"); + } finally { + isLoadingNotes = false; + update(); + } } } diff --git a/lib/controller/auth/otp_helper.dart b/lib/controller/auth/otp_helper.dart index c0b4f0b..25abbba 100644 --- a/lib/controller/auth/otp_helper.dart +++ b/lib/controller/auth/otp_helper.dart @@ -21,13 +21,15 @@ class OtpHelper extends GetxController { /// إرسال OTP static Future sendOtp(String phoneNumber) async { try { + // await CRUD().getJWT(); final response = await CRUD().post( link: _sendOtpUrl, payload: {'receiver': phoneNumber}, ); - + // Log.print('_sendOtpUrl: ${_sendOtpUrl}'); + // Log.print('response: ${response}'); if (response != 'failure') { - mySnackeBarError('تم إرسال رمز التحقق إلى رقمك عبر WhatsApp'); + mySnackbarSuccess('تم إرسال رمز التحقق إلى رقمك عبر WhatsApp'); return true; } else { mySnackeBarError('حدث خطأ من الخادم. حاول مجددًا.'); diff --git a/lib/controller/drivers/driver_not_active_controller.dart b/lib/controller/drivers/driver_not_active_controller.dart new file mode 100644 index 0000000..09a60c3 --- /dev/null +++ b/lib/controller/drivers/driver_not_active_controller.dart @@ -0,0 +1,37 @@ +import 'package:get/get.dart'; + +import '../../constant/links.dart'; +import '../functions/crud.dart'; + +class DriverController extends GetxController { + List drivers = []; + Map driverDetails = {}; + + // جلب السائقين pending + getDriversPending() async { + var res = await CRUD().post( + link: AppLink.getDriversPending, // رابط drivers_pending_list.php + payload: {}, + ); + if (res != 'failure') { + drivers = (res)['message']; + update(['drivers']); // تحديث الـ UI + } else { + Get.snackbar('Error', 'Failed to load drivers'); + } + } + + // جلب تفاصيل سائق واحد + getDriverDetails(String driverId) async { + var res = await CRUD().post( + link: AppLink.getDriverDetails, // رابط driver_details.php + payload: {"id": driverId}, + ); + if (res != 'failure') { + driverDetails = (res)['message']; + update(['driverDetails']); // تحديث صفحة التفاصيل + } else { + Get.snackbar('Error', 'Failed to load driver details'); + } + } +} diff --git a/lib/controller/firebase/notification_service.dart b/lib/controller/firebase/notification_service.dart new file mode 100644 index 0000000..281bbfe --- /dev/null +++ b/lib/controller/firebase/notification_service.dart @@ -0,0 +1,59 @@ +import 'dart:convert'; +import 'package:http/http.dart' as http; + +import '../../print.dart'; + +class NotificationService { + // تأكد من أن هذا هو الرابط الصحيح لملف الإرسال + static const String _serverUrl = + 'https://syria.intaleq.xyz/intaleq/fcm/send_fcm.php'; + + static Future sendNotification({ + required String target, + required String title, + required String body, + required String? category, // <-- [الإضافة الأولى] + String? tone, + List? driverList, + bool isTopic = false, + }) async { + try { + final Map payload = { + 'target': target, + 'title': title, + 'body': body, + 'isTopic': isTopic, + }; + + if (category != null) { + payload['category'] = category; // <-- [الإضافة الثانية] + } + + if (tone != null) { + payload['tone'] = tone; + } + + if (driverList != null) { + // [مهم] تطبيق السائق يرسل passengerList + payload['passengerList'] = jsonEncode(driverList); + } + + final response = await http.post( + Uri.parse(_serverUrl), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode(payload), + ); + + if (response.statusCode == 200) { + print('✅ Notification sent successfully.'); + } else { + print( + '❌ Failed to send notification. Status code: ${response.statusCode}'); + } + } catch (e) { + print('❌ An error occurred while sending notification: $e'); + } + } +} diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index e634b8d..1bf53a8 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -1,8 +1,6 @@ import 'dart:convert'; import 'dart:io'; -import 'dart:math'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import 'package:jwt_decoder/jwt_decoder.dart'; @@ -16,9 +14,7 @@ import '../../constant/links.dart'; import '../../env/env.dart'; import '../../main.dart'; import '../../print.dart'; -import '../../views/widgets/elevated_btn.dart'; import 'device_info.dart'; -import 'encrypt_decrypt.dart'; import 'security_checks.dart'; class CRUD { @@ -225,7 +221,7 @@ class CRUD { String fingerPrint = await DeviceHelper.getDeviceFingerprint(); print('fingerPrint: ${fingerPrint}'); - await SecurityChecks.isDeviceRootedFromNative(Get.context!); + //await SecurityChecks.isDeviceRootedFromNative(Get.context!); dev = Platform.isAndroid ? 'android' : 'ios'; var payload = { @@ -239,11 +235,11 @@ class CRUD { Uri.parse(AppLink.loginWalletAdmin), body: payload, ); - // Log.print('response.request: ${response1.request}'); - // Log.print('response.body: ${response1.body}'); - // print(payload); - // Log.print( - // 'jsonDecode(response1.body)["jwt"]: ${jsonDecode(response1.body)['jwt']}'); + Log.print('response.request: ${response1.request}'); + Log.print('response.body: ${response1.body}'); + print(payload); + Log.print( + 'jsonDecode(response1.body)["jwt"]: ${jsonDecode(response1.body)['jwt']}'); await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']); return jsonDecode(response1.body)['jwt'].toString(); } @@ -268,9 +264,9 @@ class CRUD { 'X-HMAC-Auth': hmac.toString(), }, ); - Log.print('response.request:${response.request}'); - Log.print('response.body: ${response.body}'); - Log.print('payload:$payload'); + // Log.print('response.request:${response.request}'); + // Log.print('response.body: ${response.body}'); + // Log.print('payload:$payload'); if (response.statusCode == 200) { try { var jsonData = jsonDecode(response.body); diff --git a/lib/controller/functions/device_info.dart b/lib/controller/functions/device_info.dart index c0d5c3b..93bd4a6 100644 --- a/lib/controller/functions/device_info.dart +++ b/lib/controller/functions/device_info.dart @@ -5,12 +5,6 @@ import 'dart:async'; import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; - -import 'package:device_info_plus/device_info_plus.dart'; -import '../../main.dart'; class DeviceHelper { static Future getDeviceFingerprint() async { @@ -27,13 +21,17 @@ class DeviceHelper { // Fetch iOS-specific device information IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; deviceData = iosInfo.toMap(); // Convert to a map for easier access + } else if (Platform.isMacOS) { + // Fetch macOS-specific device information + MacOsDeviceInfo macInfo = await deviceInfoPlugin.macOsInfo; + deviceData = macInfo.toMap(); } else { throw UnsupportedError('Unsupported platform'); } // Extract relevant device information final String deviceId = Platform.isAndroid - ? deviceData['androidId'] ?? deviceData['serialNumber'] ?? 'unknown' + ? deviceData['fingerprint'] ?? 'unknown' : deviceData['identifierForVendor'] ?? 'unknown'; final String deviceModel = deviceData['model'] ?? 'unknown'; @@ -45,6 +43,7 @@ class DeviceHelper { // Generate and return the encrypted fingerprint final String fingerprint = '${deviceId}_${deviceModel}_$osVersion'; + // print(EncryptionHelper.instance.encryptData(fingerprint)); return (fingerprint); } catch (e) { diff --git a/lib/controller/functions/encrypt_decrypt.dart b/lib/controller/functions/encrypt_decrypt.dart index 6f62f1b..4e56d25 100644 --- a/lib/controller/functions/encrypt_decrypt.dart +++ b/lib/controller/functions/encrypt_decrypt.dart @@ -30,10 +30,10 @@ class EncryptionHelper { } debugPrint("Initializing EncryptionHelper..."); var keyOfApp = r(Env.keyOfApp).toString().split(Env.addd)[0]; - Log.print('keyOfApp: ${keyOfApp}'); + // Log.print('keyOfApp: ${keyOfApp}'); var initializationVector = r(Env.initializationVector).toString().split(Env.addd)[0]; - Log.print('initializationVector: ${initializationVector}'); + // Log.print('initializationVector: ${initializationVector}'); // Set the global instance _instance = EncryptionHelper._( diff --git a/lib/controller/functions/upload_image copy.dart b/lib/controller/functions/upload_image copy.dart index 02596ec..49ccc57 100644 --- a/lib/controller/functions/upload_image copy.dart +++ b/lib/controller/functions/upload_image copy.dart @@ -13,8 +13,10 @@ import 'package:path_provider/path_provider.dart' as path_provider; import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; +import '../../constant/info.dart'; import '../../main.dart'; import '../../print.dart'; +import 'encrypt_decrypt.dart'; class ImageController extends GetxController { File? myImage; @@ -152,7 +154,7 @@ class ImageController extends GetxController { } catch (e) { print('Error in choosImage: $e'); Get.snackbar('Image Upload Failed'.tr, e.toString(), - backgroundColor: AppColor.primaryColor); + backgroundColor: AppColor.redColor); } finally { isloading = false; update(); @@ -241,20 +243,25 @@ class ImageController extends GetxController { 'POST', Uri.parse(link), ); - + Log.print('request: ${request}'); var length = await file.length(); var stream = http.ByteStream(file.openRead()); + final headers = { + 'Authorization': + 'Bearer ${r(box.read(BoxName.jwt)).split(AppInformation.addd)[0]}', + // 'X-HMAC-Auth': '${box.read(BoxName.hmac)}', + }; + Log.print('headers: ${headers}'); + var multipartFile = http.MultipartFile( 'image', stream, length, filename: basename(file.path), ); - request.headers.addAll({ - 'Authorization': - 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', - }); + request.headers.addAll(headers); // Set the file name to the driverID + request.files.add( http.MultipartFile( 'image', @@ -270,8 +277,10 @@ class ImageController extends GetxController { var res = await http.Response.fromStream(myrequest); if (res.statusCode == 200) { Log.print('jsonDecode(res.body): ${jsonDecode(res.body)}'); - - Get.snackbar('title', 'message', backgroundColor: AppColor.greenColor); + if (jsonDecode(res.body)['status'] == 'Image uploaded successfully!') { + Get.snackbar('Success'.tr, 'Image uploaded successfully!'.tr, + backgroundColor: AppColor.greenColor); + } return jsonDecode(res.body); } else { throw Exception( diff --git a/lib/controller/functions/wallet.dart b/lib/controller/functions/wallet.dart index a644599..be1aa63 100644 --- a/lib/controller/functions/wallet.dart +++ b/lib/controller/functions/wallet.dart @@ -43,6 +43,38 @@ class WalletController extends GetxController { } } + Future addDriverWallet(String paymentMethod, driverID, point, phone) async { + // paymentToken = await generateToken(count); + // var paymentID = await getPaymentId(paymentMethod, point.toString()); + await CRUD().postWallet(link: AppLink.addFromAdmin, payload: { + 'driverID': driverID.toString(), + 'paymentID': 'gift_connect_$driverID${DateTime.timestamp()}'.toString(), + 'amount': point, + 'token': 'gift_connect', + 'paymentMethod': paymentMethod, + 'phone': phone, + }); + } + + Future addDrivergift3000(String paymentMethod, driverID, point, phone) async { + // paymentToken = await generateToken(count); + // var paymentID = await getPaymentId(paymentMethod, point.toString()); + var res = await CRUD().postWallet(link: AppLink.add300ToDriver, payload: { + 'driverID': driverID.toString(), + 'paymentID': paymentMethod, + 'amount': point, + 'token': 'gift_connect_30000', + 'paymentMethod': paymentMethod, + 'phone': phone, + }); + if (res != 'failure') { + Get.snackbar('success', 'addDrivergift3000', + backgroundColor: AppColor.greenColor); + } else { + Get.snackbar('error', res, backgroundColor: AppColor.redColor); + } + } + Future addSeferWallet(String point, driverID) async { var amount = (int.parse(point) * -1).toStringAsFixed(0); var seferToken = await generateTokenDriver(amount, driverID); diff --git a/lib/controller/notification_controller.dart b/lib/controller/notification_controller.dart index 10d8781..fc0df9a 100644 --- a/lib/controller/notification_controller.dart +++ b/lib/controller/notification_controller.dart @@ -10,6 +10,7 @@ import 'package:sefer_admin1/views/widgets/my_textField.dart'; import '../constant/style.dart'; import '../print.dart'; +import 'firebase/notification_service.dart'; class NotificationController extends GetxController { final formKey = GlobalKey(); @@ -18,14 +19,14 @@ class NotificationController extends GetxController { List tokensDriver = []; List tokensPassengers = []; - getTokensDrivers() async { - await FirebaseMessagesController().loadAllPagesAndSendNotifications(); - } + // getTokensDrivers() async { + // await FirebaseMessagesController().loadAllPagesAndSendNotifications(); + // } - getTokensPassengers() async { - await FirebaseMessagesController() - .loadAllPagesAndSendNotificationsPassengers(); - } + // getTokensPassengers() async { + // await FirebaseMessagesController() + // .loadAllPagesAndSendNotificationsPassengers(); + // } Future sendNotificationDrivers() { return Get.defaultDialog( @@ -60,34 +61,40 @@ class NotificationController extends GetxController { // tokensDriver = box.read(BoxName.tokensDrivers)['message']; // Log.print('tokensDriver: ${tokensDriver}'); // if (formKey.currentState!.validate()) { - box.read(BoxName.tokensDrivers)['message'].length; - for (var i = 0; - i < box.read(BoxName.tokensDrivers)['message'].length; - i++) { - // for (var i = 0; i < 2; i++) { - // print(i); - var res = await CRUD() - .post(link: AppLink.addNotificationCaptain, payload: { - "driverID": box - .read(BoxName.tokensDrivers)['message'][i]['id'] - .toString(), - "title": title.text, - "body": body.text, - "isPin": 'unPin', - }); - Log.print( - 'res: ${res}for ${box.read(BoxName.tokensDrivers)['message'][i]['id']}'); - // Log.print('tokensDriver[i]: ${tokensDriver[i]}'); - Future.delayed(const Duration(microseconds: 50)); - - FirebaseMessagesController().sendNotificationToAnyWithoutData( - title.text, - body.text, - box - .read(BoxName.tokensDrivers)['message'][i]['token'] - .toString(), - 'tone2.wav'); - } + // box.read(BoxName.tokensDrivers)['message'].length; + // for (var i = 0; + // i < box.read(BoxName.tokensDrivers)['message'].length; + // i++) { + // // for (var i = 0; i < 2; i++) { + // // print(i); + // var res = await CRUD() + // .post(link: AppLink.addNotificationCaptain, payload: { + // "driverID": box + // .read(BoxName.tokensDrivers)['message'][i]['id'] + // .toString(), + // "title": title.text, + // "body": body.text, + // "isPin": 'unPin', + // }); + // Log.print( + // 'res: ${res}for ${box.read(BoxName.tokensDrivers)['message'][i]['id']}'); + // // Log.print('tokensDriver[i]: ${tokensDriver[i]}'); + // Future.delayed(const Duration(microseconds: 50)); + NotificationService.sendNotification( + target: 'drivers', // الإرسال لجميع المشتركين في "service" + title: title.text, + body: body.text, + isTopic: true, + category: 'fromAdmin', // فئة توضح نوع الإشعار + ); + // FirebaseMessagesController().sendNotificationToAnyWithoutData( + // title.text, + // body.text, + // box + // .read(BoxName.tokensDrivers)['message'][i]['token'] + // .toString(), + // 'tone2.wav'); + // } Get.back(); // } }), @@ -129,38 +136,45 @@ class NotificationController extends GetxController { title: 'send'.tr, onPressed: () async { // tokensPassengers = box.read(BoxName.tokensPassengers); - var tokensPassengersData = - box.read(BoxName.tokensPassengers)['data']; +// var tokensPassengersData = +// box.read(BoxName.tokensPassengers)['data']; -// Debug print to check structure of the 'data' field - print('Tokens Passengers Data: $tokensPassengersData'); +// // Debug print to check structure of the 'data' field +// print('Tokens Passengers Data: $tokensPassengersData'); - if (tokensPassengersData is List) { - for (var i = 0; i < tokensPassengersData.length; i++) { - if (formKey.currentState!.validate()) { - var res = await CRUD() - .post(link: AppLink.addNotificationPassenger, payload: { - "passenger_id": - tokensPassengersData[i]['passengerID'].toString(), - "title": title.text, - "body": body.text, - }); - Log.print('res: ${res}'); - FirebaseMessagesController() - .sendNotificationToAnyWithoutData( - title.text, - body.text, - tokensPassengersData[i]['token'] - .toString(), // Access token correctly - 'order.wav', - ); - } - } - Get.back(); - } else { - // Handle the case where 'data' is not a list - print('Data is not a list: $tokensPassengersData'); - } +// if (tokensPassengersData is List) { +// for (var i = 0; i < tokensPassengersData.length; i++) { +// if (formKey.currentState!.validate()) { +// var res = await CRUD() +// .post(link: AppLink.addNotificationPassenger, payload: { +// "passenger_id": +// tokensPassengersData[i]['passengerID'].toString(), +// "title": title.text, +// "body": body.text, +// }); +// Log.print('res: ${res}'); +// FirebaseMessagesController() +// .sendNotificationToAnyWithoutData( +// title.text, +// body.text, +// tokensPassengersData[i]['token'] +// .toString(), // Access token correctly +// 'order.wav', +// ); +// } +// } + NotificationService.sendNotification( + target: 'passengers', // الإرسال لجميع المشتركين في "service" + title: title.text, + body: body.text, + isTopic: true, + category: 'fromAdmin', // فئة توضح نوع الإشعار + ); + Get.back(); +// } else { +// // Handle the case where 'data' is not a list +// print('Data is not a list: $tokensPassengersData'); +// } }), cancel: MyElevatedButton( title: 'cancel', diff --git a/lib/controller/rides/ride_lookup_controller.dart b/lib/controller/rides/ride_lookup_controller.dart new file mode 100644 index 0000000..49aed65 --- /dev/null +++ b/lib/controller/rides/ride_lookup_controller.dart @@ -0,0 +1,139 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../constant/links.dart'; +import '../functions/crud.dart'; + +class RideLookupController extends GetxController { + final TextEditingController phoneCtrl = TextEditingController(); + + bool isLoading = false; + Map? passenger; // {id, first_name, last_name, phone} + Map? ride; // Ride details + + // Status filter for the search tab + String currentStatusFilter = ''; + + // Whitelist of allowed statuses for the Update Dropdown + // UPDATED: Matches the exact types you requested + final List statusOptions = const [ + 'Pending', + 'Accepted', + 'EnRoute', + 'Arrived', + 'Started', + 'Completed', + 'Canceled', + ]; + + String? selectedStatus; + + // Hydrate dropdown value from the current ride data + void hydrateSelectedFromRide() { + final cur = (ride?['status'] ?? '') as String; + selectedStatus = statusOptions.contains(cur) ? cur : null; + update(); + } + + Future updateRideStatus({String? note}) async { + if (ride == null) return false; + if (selectedStatus == null || selectedStatus!.isEmpty) return false; + + isLoading = true; + update(); + + try { + final res = await CRUD().post( + link: AppLink.admin_update_ride_status, + payload: { + 'id': "${ride!['id']}", + 'status': selectedStatus!, + if (note != null && note.trim().isNotEmpty) 'reason': note.trim(), + }, + ); + + final d = jsonDecode(res); + final ok = (d['status'] == 'success'); + + if (ok) { + // Update local ride details from response + final updated = (d['message'] ?? d)['ride']; + if (updated != null) { + ride = Map.from(updated); + } + update(); + return true; + } else { + return false; + } + } catch (_) { + return false; + } finally { + isLoading = false; + update(); + } + } + + // Updated to accept status filter + Future searchLatest({String? status}) async { + final phone = phoneCtrl.text.trim(); + + // If status is passed, update the current filter + if (status != null) { + currentStatusFilter = status; + } + + // If phone is empty, we stop unless your API supports fetching "latest of all users" + if (phone.isEmpty) { + return false; + } + + isLoading = true; + update(); + + try { + final res = await CRUD().post( + link: AppLink.admin_get_rides_by_phone, + payload: { + 'phone': phone, + // If filter is 'All', send empty string to PHP, otherwise send the exact status + 'status': currentStatusFilter == 'All' ? '' : currentStatusFilter, + }, + ); + + final d = res; + + if (d['status'] == 'success') { + passenger = (d['message'] ?? d)['passenger']; + ride = (d['message'] ?? d)['ride']; + + // Hydrate the dropdown for the update section based on the fetched ride + hydrateSelectedFromRide(); + + update(); + return true; + } else { + passenger = null; + ride = null; + update(); + return false; + } + } catch (_) { + passenger = null; + ride = null; + update(); + return false; + } finally { + isLoading = false; + update(); + } + } + + String rideHeader() { + if (ride == null) return ''; + final id = ride!['id'] ?? ''; + final st = (ride!['status'] ?? '—').toString(); + return "Ride #$id — $st"; + } +} diff --git a/lib/env/env.g.dart b/lib/env/env.g.dart index a56e8e7..e5386f1 100644 --- a/lib/env/env.g.dart +++ b/lib/env/env.g.dart @@ -11,21 +11,21 @@ part of 'env.dart'; // generated_from: .env final class _Env { static const List _enviedkeyaddd = [ - 4184020447, - 3826068138, - 2306559756, - 1173205620, - 2205545518, - 1709814687, + 3639547328, + 3604945773, + 2122401710, + 2462070888, + 3591682056, + 1606802798, ]; static const List _envieddataaddd = [ - 4184020381, - 3826068166, - 2306559822, - 1173205528, - 2205545568, - 1709814771, + 3639547266, + 3604945665, + 2122401772, + 2462070788, + 3591682118, + 1606802690, ]; static final String addd = String.fromCharCodes(List.generate( @@ -35,53 +35,53 @@ final class _Env { ).map((int i) => _envieddataaddd[i] ^ _enviedkeyaddd[i])); static const List _enviedkeyinitializationVector = [ - 1578832389, - 3945784853, - 2222102556, - 2561055490, - 3003663990, - 315084469, - 4080671322, - 1930424743, - 29371404, - 2007386549, - 2526740020, - 3265054637, - 1742339467, - 3885645417, - 4256543904, - 297095771, - 1734808655, - 1845003903, - 2350640508, - 1655823791, - 2085642505, - 3169161950, + 2362868231, + 3613761660, + 3594254486, + 1193890640, + 3944692661, + 863159804, + 1982782648, + 3829180114, + 522678821, + 3766715662, + 4228228860, + 2956824767, + 840560948, + 1048683886, + 1537273655, + 1701876547, + 2800059058, + 2207745156, + 707752800, + 1535776780, + 1594371041, + 3473870700, ]; static const List _envieddatainitializationVector = [ - 1578832500, - 3945784941, - 2222102650, - 2561055611, - 3003663900, - 315084480, - 4080671281, - 1930424784, - 29371491, - 2007386576, - 2526740051, - 3265054687, - 1742339557, - 3885645323, - 4256543945, - 297095725, - 1734808599, - 1845003789, - 2350640420, - 1655823837, - 2085642571, - 3169161900, + 2362868342, + 3613761540, + 3594254576, + 1193890601, + 3944692703, + 863159689, + 1982782675, + 3829180069, + 522678858, + 3766715755, + 4228228763, + 2956824781, + 840560986, + 1048683788, + 1537273694, + 1701876533, + 2800059114, + 2207745270, + 707752760, + 1535776894, + 1594370979, + 3473870622, ]; static final String initializationVector = String.fromCharCodes( @@ -94,85 +94,163 @@ final class _Env { _enviedkeyinitializationVector[i])); static const List _enviedkeyALLOWED_ADMIN_PHONES = [ - 248735859, - 3932334051, - 1114544738, - 2534892790, - 1903759904, - 3413640007, - 159785997, - 3592336862, - 2407949844, - 1176379010, - 4287005937, - 2323122464, - 2828443150, - 133433673, - 3719414383, - 4217049170, - 2332029750, - 3288289247, - 3504434441, - 2142167933, - 1760377169, - 1008571409, - 1218222156, - 1482218510, - 2771517915, - 579679196, - 770704758, - 1835282112, - 4119145032, - 1981646524, - 3177275810, - 3249953828, - 437971328, - 3679269541, - 1398101792, - 216886244, - 202325893, - 655569227, + 3735938135, + 3983484378, + 2502056804, + 2665605909, + 468841969, + 3723387112, + 1378951267, + 3922122207, + 667061045, + 1177725799, + 3626906473, + 417965022, + 1501544317, + 1858813860, + 1393709298, + 3841290890, + 3191431969, + 2291175516, + 2672947242, + 118052153, + 395536353, + 1571191371, + 3342462709, + 2981072207, + 4167802749, + 3805913403, + 25587435, + 1429976250, + 4288281717, + 3946439750, + 371893742, + 3644971775, + 3414035311, + 1870619756, + 569654986, + 4151565873, + 2208735762, + 1083551360, + 4165784648, + 3267065951, + 2983122076, + 2784431973, + 3356321984, + 3785740634, + 2853492539, + 1849298139, + 4189328812, + 714499737, + 445699347, + 2876754013, + 3758072007, + 3491758359, + 3655362824, + 2585374409, + 520229163, + 815042461, + 1987285706, + 3267529110, + 4037806034, + 2524326630, + 1967302585, + 3111918401, + 1625888435, + 2984124586, + 1049721354, + 210804317, + 3960657690, + 3292182210, + 2883285292, + 4252517104, + 2967098557, + 3897435563, + 4075896716, + 3658708715, + 3373310029, + 3897326883, + 2232709252, ]; static const List _envieddataALLOWED_ADMIN_PHONES = [ - 248735818, - 3932334037, - 1114544720, - 2534892737, - 1903759897, - 3413640063, - 159786040, - 3592336870, - 2407949863, - 1176379058, - 4287005892, - 2323122450, - 2828443170, - 133433712, - 3719414361, - 4217049184, - 2332029697, - 3288289254, - 3504434489, - 2142167877, - 1760377189, - 1008571432, - 1218222204, - 1482218556, - 2771517932, - 579679216, - 770704719, - 1835282166, - 4119145082, - 1981646475, - 3177275802, - 3249953811, - 437971376, - 3679269527, - 1398101777, - 216886237, - 202325943, - 655569276, + 3735938158, + 3983484396, + 2502056791, + 2665605932, + 468841928, + 3723387098, + 1378951258, + 3922122218, + 667060999, + 1177725781, + 3626906458, + 417965035, + 1501544273, + 1858813853, + 1393709252, + 3841290936, + 3191431958, + 2291175525, + 2672947226, + 118052097, + 395536341, + 1571191410, + 3342462661, + 2981072253, + 4167802698, + 3805913367, + 25587410, + 1429976204, + 4288281671, + 3946439793, + 371893718, + 3644971720, + 3414035295, + 1870619742, + 569655035, + 4151565832, + 2208735776, + 1083551415, + 4165784676, + 3267065958, + 2983122090, + 2784431958, + 3356322041, + 3785740654, + 2853492489, + 1849298158, + 4189328792, + 714499755, + 445699363, + 2876754024, + 3758072052, + 3491758395, + 3655362865, + 2585374463, + 520229145, + 815042474, + 1987285757, + 3267529124, + 4037806053, + 2524326613, + 1967302540, + 3111918456, + 1625888387, + 2984124568, + 1049721382, + 210804324, + 3960657709, + 3292182259, + 2883285273, + 4252517058, + 2967098500, + 3897435546, + 4075896761, + 3658708702, + 3373310069, + 3897326866, + 2232709301, ]; static final String ALLOWED_ADMIN_PHONES = String.fromCharCodes( @@ -185,6329 +263,6329 @@ final class _Env { _enviedkeyALLOWED_ADMIN_PHONES[i])); static const List _enviedkeyprivateKeyFCM = [ - 1279324801, - 662806931, - 3573060356, - 248874147, - 4233723671, - 3285043552, - 2630458545, - 933524445, - 2538237122, - 768559037, - 454998908, - 1636897632, - 1695959601, - 3572055427, - 397192656, - 479484653, - 3360553363, - 2693542099, - 867142903, - 982018826, - 3739553349, - 2665060126, - 4094912046, - 2428771776, - 3904117, - 1099107310, - 1187285877, - 2875788149, - 2140106291, - 2599920156, - 245888894, - 3103987921, - 3484709396, - 2445819193, - 269360687, - 2870785768, - 3494295944, - 2186397973, - 4129629298, - 1384501383, - 532926708, - 1467762445, - 3966026764, - 3985340592, - 2194012018, - 1102261118, - 3126146919, - 3384467891, - 2347086802, - 3515327620, - 3435863452, - 2703679288, - 2891934741, - 1893811358, - 2917625769, - 2606555176, - 207557198, - 1430868603, - 2681823395, - 3321714888, - 4076821312, - 3876125971, - 3018025816, - 46752297, - 751875649, - 2687750936, - 2493589392, - 281238031, - 1392016429, - 1858833329, - 1676449864, - 2759260990, - 185136230, - 2284614744, - 2558605238, - 2960518500, - 1299669859, - 2350161106, - 16064463, - 3910982448, - 2008417012, - 407547874, - 3118350808, - 3293433179, - 4091664050, - 2423551850, - 1683148635, - 3432837766, - 238582655, - 107638077, - 2732344037, - 3975360949, - 422135857, - 96195689, - 1597835140, - 2681376807, - 3274358041, - 1818034892, - 3341389779, - 419404591, - 2574758877, - 252695527, - 1048200291, - 3268075511, - 2409160438, - 771145875, - 1185117954, - 1694497240, - 459547898, - 676667959, - 2931249368, - 2309203615, - 2742376974, - 1476671978, - 291393646, - 3963059177, - 2687925238, - 2333196226, - 2039532024, - 3868674789, - 3251656862, - 4129482288, - 537098602, - 2036688791, - 127471666, - 1704463092, - 930295929, - 4186432086, - 1938967516, - 2948635145, - 1976418135, - 2310394947, - 599352180, - 2551533046, - 1551539358, - 3652950226, - 2689793458, - 3746914856, - 3290972949, - 2341551643, - 3216063357, - 976395763, - 397965167, - 2862779384, - 407461582, - 3554446279, - 1401256190, - 2789888829, - 214115005, - 1836880798, - 3045689085, - 2252442488, - 559151451, - 955966583, - 2584324395, - 1347819100, - 1241980845, - 670123273, - 442575948, - 4292310693, - 1213578431, - 4065098708, - 263616880, - 661276549, - 3965779067, - 1741842208, - 810319462, - 1609570506, - 1854028552, - 2576896907, - 1750042973, - 370761363, - 792214886, - 393825350, - 4194907134, - 405901763, - 2266069492, - 2767386675, - 2335424409, - 436486758, - 782956124, - 469346349, - 4143226699, - 4094633215, - 3999904109, - 3242400485, - 2517591990, - 3624786226, - 111823136, - 2073714047, - 2137141316, - 2853917464, - 3160747945, - 792012429, - 4146319910, - 1910366073, - 2218240156, - 469565072, - 397417975, - 785377955, - 2289490663, - 1034292026, - 1250846653, - 1696619030, - 3623641794, - 1292332725, - 4249317972, - 3006030115, - 2523369032, - 424311352, - 2213959247, - 4174793298, - 2506267908, - 2014370870, - 1591040007, - 3623894541, - 2306075310, - 3482174458, - 1847537405, - 3061488421, - 3603171603, - 1758980821, - 1285476669, - 724408386, - 2480446817, - 2146688764, - 2739074097, - 498871849, - 3353689377, - 3388389130, - 3346375781, - 2325253113, - 2390294825, - 1154741668, - 1504993919, - 1282124079, - 721971231, - 24857070, - 1167052773, - 383537997, - 235607695, - 4175610596, - 1073960161, - 3500791207, - 3699969389, - 1016485183, - 2465839392, - 405657424, - 1987549868, - 1029024761, - 1923774941, - 1463128179, - 2744597008, - 31094043, - 1350466601, - 1056091382, - 2406166059, - 4173589581, - 4077953109, - 2689385039, - 3838283228, - 3729448433, - 715218321, - 4023299044, - 279372415, - 3034273437, - 2590768079, - 1419110863, - 1437379818, - 1612246884, - 2875217063, - 2350993868, - 386010709, - 4099493314, - 1816392117, - 2132833274, - 3621348916, - 1107686717, - 3141789309, - 2143679515, - 464765208, - 195299995, - 1138259226, - 3510535545, - 3272381825, - 3240600343, - 2312848700, - 2567911646, - 178954369, - 3237444763, - 3802718346, - 2909481987, - 2538731661, - 3954242168, - 1698413422, - 1228779851, - 3004078567, - 3367118759, - 3865637623, - 2655570112, - 3113592717, - 58137891, - 446426582, - 2538541466, - 1042910864, - 3786911825, - 21677681, - 613714932, - 1304372501, - 2374222665, - 467999279, - 228581417, - 3960995195, - 719625845, - 1364823232, - 3069278291, - 1131576636, - 285238901, - 2623665703, - 2729319002, - 2947952704, - 850212967, - 2711382108, - 1046114259, - 340528779, - 3553499048, - 68801076, - 3366182038, - 1464491014, - 657625141, - 1725974489, - 3783405674, - 2785813619, - 3898744341, - 397199897, - 4216622036, - 440350134, - 424214360, - 120469017, - 3575889568, - 801123507, - 1013859343, - 4284411423, - 2798070260, - 1594041986, - 1463908798, - 3685343727, - 1057833219, - 3710507741, - 2466877784, - 3930018762, - 1490141614, - 3802831405, - 1502852289, - 2536704393, - 3882517631, - 2589438749, - 1718869653, - 3560182655, - 2309987277, - 3843946284, - 82685884, - 3899015658, - 3675212024, - 3743974221, - 346469902, - 1248030174, - 1057889991, - 3461009628, - 4047796466, - 1486000588, - 1744095103, - 3197389536, - 787249651, - 1306573637, - 3267086364, - 2136229391, - 1559308455, - 4065594596, - 762338821, - 4076022455, - 2412539874, - 189320704, - 1625852787, - 918059117, - 1133099109, - 810669261, - 4239771796, - 2481374149, - 154758357, - 661788011, - 1369230872, - 1413165613, - 3440871522, - 3597282659, - 536602657, - 1340378800, - 2357214231, - 3060217423, - 1220964947, - 1651603306, - 3886164165, - 663233741, - 1910377372, - 3228224696, - 902720177, - 575847733, - 294922849, - 554062726, - 3960883226, - 4281843140, - 2488101470, - 3385862626, - 2512544274, - 688801241, - 3389447469, - 715674790, - 2862522189, - 1190831409, - 1670963445, - 921515508, - 18056951, - 2467595828, - 2155953681, - 919664157, - 784919038, - 2243585246, - 2911772955, - 2174177810, - 466763325, - 3265840614, - 3817949272, - 2582825633, - 580265788, - 2379188076, - 1495884945, - 1404002485, - 3926820842, - 4033938234, - 1818733524, - 1545321836, - 1195728026, - 714991572, - 1876458442, - 3581720313, - 3927993044, - 3308052017, - 2641216765, - 2025194258, - 696579686, - 1328137937, - 1742882739, - 472195900, - 1209358174, - 176746085, - 3821122989, - 3140474537, - 1017441108, - 1983363498, - 2903195081, - 3249920865, - 2377150580, - 285286605, - 708714282, - 723289170, - 4172659399, - 3251422699, - 2849440315, - 4038468210, - 3994216261, - 3991484198, - 104340462, - 2563208758, - 4160938109, - 2031648817, - 273190319, - 670798889, - 1578347720, - 1467222795, - 3086214917, - 3493568177, - 3148667890, - 2131988422, - 3473061565, - 3650344566, - 1857696147, - 2426387684, - 3576219986, - 3214479908, - 4156931760, - 3611674690, - 3461037756, - 202538271, - 884071710, - 1219330254, - 1760985599, - 3694827730, - 3956711588, - 4140414797, - 1897725197, - 1529105000, - 3309886962, - 3019665127, - 3257164185, - 4201803431, - 2096630610, - 3313239943, - 3003709875, - 1282772598, - 4144842570, - 2710028168, - 1082068145, - 231456738, - 1328902728, - 1122638265, - 3029769719, - 3499783351, - 191797130, - 4277277047, - 3476999635, - 3205480367, - 2794949006, - 106421238, - 2819817519, - 2245773986, - 776684761, - 2455759842, - 4132304075, - 3024214955, - 230590071, - 3388157679, - 1358402054, - 1639878964, - 1290540539, - 2759607162, - 3502724975, - 3268901311, - 782662862, - 2183220955, - 2858323569, - 353111669, - 279865821, - 3293454030, - 2385982433, - 1478219881, - 4020118586, - 1464403415, - 1528376271, - 3061459562, - 3306498956, - 431112582, - 781466162, - 440387100, - 3342771633, - 573370787, - 340686774, - 1142327333, - 857784458, - 1453685659, - 1292332859, - 2671071279, - 2048203923, - 2616681245, - 884417803, - 4279183701, - 3244846559, - 2264143494, - 1185596415, - 1193225710, - 1610947012, - 3818825379, - 2077008875, - 3404538250, - 227554213, - 2900252407, - 678706953, - 796928429, - 3904270688, - 3710272702, - 2807154769, - 1722258448, - 3675203010, - 199862920, - 1817125795, - 2447042658, - 2772110132, - 81313342, - 3248547253, - 512320252, - 2660369949, - 693113227, - 284129690, - 2769465985, - 2284376301, - 190098966, - 1394528598, - 124777843, - 1828526501, - 3794258909, - 74591466, - 1509631506, - 3931920644, - 3672226388, - 2823976573, - 786933089, - 628229247, - 2757127715, - 391830291, - 2766045221, - 1532809023, - 1930224701, - 3085778886, - 3537937145, - 4067674680, - 3408170283, - 3193492083, - 2565096379, - 3066090760, - 2317533188, - 3548688932, - 1167410648, - 2329795672, - 4291028507, - 1416516454, - 1764415174, - 1864195019, - 2972786929, - 2916829243, - 4166151081, - 631374402, - 3405622190, - 364324477, - 3930154629, - 1769566159, - 2671772137, - 3935674115, - 4076525915, - 3569199084, - 2461109890, - 3410757141, - 210407447, - 827700580, - 267586043, - 3617930753, - 3312368057, - 642690120, - 155053792, - 4201418813, - 1331409997, - 3352930442, - 3009385603, - 2319880757, - 537233267, - 58056813, - 1595655608, - 2820989750, - 1811237328, - 4080262283, - 864222234, - 3340377730, - 2093768475, - 657712852, - 4290044882, - 2996170198, - 1121074788, - 45455777, - 3019058298, - 562206857, - 1766835928, - 2213867222, - 3494755229, - 2886541381, - 495301008, - 2891646705, - 1533169098, - 2648130032, - 286411038, - 1739010490, - 3306970927, - 69530343, - 2975198042, - 2505509017, - 3345252040, - 1966944233, - 524649320, - 4196039784, - 2066063643, - 71812616, - 3795655726, - 2466476002, - 4234074991, - 515689348, - 2267109127, - 442629458, - 12068878, - 901378970, - 1386990738, - 4281127849, - 2084810365, - 1623159170, - 4067761770, - 1734682698, - 3862207235, - 2644998747, - 2259480519, - 3430190993, - 3063696074, - 3198640654, - 3650042851, - 791754236, - 2856980210, - 3436397066, - 2645644820, - 3737153867, - 2957515765, - 939320076, - 136075857, - 77815238, - 1675220499, - 2328017878, - 1284494720, - 3792103577, - 2087288601, - 832697898, - 2754682007, - 2439614828, - 3428815773, - 1304064341, - 2760975869, - 2829492770, - 81252850, - 3365474145, - 2893149853, - 1113377427, - 3472037943, - 2404946076, - 1922854225, - 3953600685, - 3545067967, - 2761966452, - 4093718515, - 266554046, - 1890394301, - 80780017, - 3875137081, - 1360336384, - 310989137, - 150469103, - 3513758336, - 986396679, - 2430273107, - 3838731568, - 4253425170, - 2339774512, - 590365918, - 4268206386, - 321386010, - 3491258604, - 2585950450, - 4245664828, - 495233600, - 1022167801, - 3584053182, - 3049513848, - 1520085374, - 23098964, - 1834488234, - 3291616678, - 1206743531, - 3422649152, - 2504839153, - 4265398755, - 846818210, - 1470623729, - 1773107316, - 2439445851, - 3914651085, - 859713640, - 420480593, - 2311712958, - 3651233052, - 48196800, - 1042979672, - 4210650594, - 270665638, - 1182977878, - 904368716, - 147197560, - 565835715, - 2516860668, - 3574362416, - 2522395676, - 1119937003, - 1612064843, - 3979787536, - 3840939963, - 3069073696, - 4166687598, - 2501173998, - 3255362130, - 3619783773, - 420899988, - 44233543, - 1547498198, - 4255187921, - 2944520291, - 1506911901, - 359829552, - 4250656984, - 3351895181, - 1810869194, - 2189803032, - 4052769677, - 436049709, - 293294611, - 3608442155, - 3916649513, - 1197519922, - 191918767, - 490342393, - 1362798498, - 1023881372, - 689265210, - 411221825, - 1074513797, - 2792376015, - 3873393559, - 2220921059, - 4143109091, - 2362544898, - 3146595359, - 182482610, - 800436386, - 11161886, - 828769819, - 677380752, - 1461405916, - 3347318633, - 3805774835, - 1021864004, - 1040842891, - 2189758682, - 1535525510, - 1423140698, - 3669263813, - 1469364107, - 3693589859, - 1695297335, - 4012996676, - 3352013019, - 4225758539, - 2011744434, - 2222299032, - 1935836692, - 8884437, - 2282316678, - 334268773, - 2817468551, - 1268537492, - 3676574201, - 3744881783, - 1063244850, - 2874875166, - 1141673327, - 2276808937, - 2003873795, - 950997701, - 1403834605, - 1868876797, - 3010709832, - 1682279084, - 3354233288, - 330779121, - 2341749530, - 759863235, - 2767390543, - 1295384893, - 340761841, - 2544244123, - 1139817663, - 3436078173, - 2539984466, - 1550588492, - 3780056860, - 1828707487, - 3831762543, - 1452964, - 3238274592, - 3631437680, - 210756590, - 28133135, - 725609937, - 1675783139, - 3632300828, - 3019488602, - 1618754606, - 1221214564, - 3723829425, - 843366704, - 1430774073, - 787842271, - 701861149, - 3588171873, - 819578248, - 2503073843, - 1569134527, - 3357654381, - 2717571266, - 1084514055, - 2431836509, - 1466042221, - 3863212566, - 133235637, - 4114325444, - 3774714927, - 2558144404, - 2825582392, - 3450280497, - 2672662014, - 654073489, - 1158222310, - 3411133099, - 4191651521, - 3456561868, - 2422637758, - 3964776560, - 3989225613, - 1290702176, - 1712057633, - 3557133013, - 3881985751, - 3272991324, - 1704351693, - 2776182539, - 4056479986, - 1469162616, - 554679762, - 4175299542, - 2340587186, - 499565661, - 4087324737, - 2737126623, - 2578993670, - 4090987555, - 722820816, - 2591310665, - 561557456, - 4152334208, - 3362393147, - 297395010, - 2302743683, - 2642050011, - 238136472, - 283509908, - 3692724572, - 1794896146, - 1710131070, - 1288356754, - 1599107178, - 3386823048, - 3132620817, - 2072064958, - 4139856984, - 4172904140, - 1841609827, - 2969860440, - 300064864, - 2072781042, - 2313766580, - 3905829388, - 300468256, - 218926621, - 2111463633, - 1764525004, - 3528862007, - 2232265027, - 657585302, - 203070414, - 3473817946, - 1845458756, - 2433371755, - 1319166981, - 1952251531, - 2308639400, - 1883107602, - 1836897835, - 2690241919, - 145466800, - 712934206, - 2205961674, - 2259923222, - 33948113, - 3872249976, - 1340253518, - 3995944871, - 3865229541, - 1944604048, - 1942486305, - 1210584206, - 587084094, - 3100608219, - 3169384175, - 1730840812, - 1397771295, - 3792341799, - 3472668731, - 3521044205, - 1077328368, - 1749817540, - 3363417269, - 1685760368, - 3251199928, - 94115734, - 3840485444, - 500285052, - 3362550256, - 4236164792, - 3788699767, - 2787960226, - 2948187862, - 479233110, - 3918634832, - 594387475, - 1128123145, - 467663913, - 326850336, - 745015371, - 501198675, - 1731174817, - 984479899, - 2824177133, - 2585610443, - 3880155440, - 1392403934, - 1250245531, - 170168423, - 3089227728, - 2890062818, - 2381187579, - 3935314458, - 1348412107, - 2602852184, - 2752572264, - 286523466, - 3016390405, - 4217893566, - 2040580139, - 2356569321, - 3542949964, - 4007372532, - 3052825328, - 2642777291, - 3244927803, - 3999919297, - 2827008779, - 2579686279, - 894362920, - 1207245737, - 2180518109, - 939162188, - 2852656135, - 3907304659, - 2946933931, - 3528009669, - 3462115314, - 896432283, - 531351975, - 2333967381, - 3398410155, - 1679493692, - 165828443, - 3865779341, - 578198195, - 3634759696, - 2458597172, - 548148527, - 1085994627, - 650935910, - 2260580502, - 2646802299, - 223764641, - 1738842166, - 67878472, - 3190595075, - 2159347697, - 3279491107, - 2237723567, - 370870889, - 3367895714, - 753113451, - 3482533082, - 1386128022, - 727427701, - 3629149806, - 3094681280, - 2282827938, - 4153438795, - 366242329, - 3530105252, - 1827576977, - 976079566, - 179345922, - 1859547181, - 2846902627, - 534320759, - 829262324, - 1704311089, - 1986859707, - 603315206, - 1882914646, - 3309585130, - 4084033700, - 267192973, - 3229269385, - 4171285871, - 3505178289, - 3894684956, - 4070775558, - 4072503657, - 1793806195, - 3293211467, - 4169707967, - 4148541809, - 2263528145, - 33538406, - 501242175, - 3506475699, - 2756409766, - 3832755131, - 1605122834, - 3119254619, - 441363470, - 1565601140, - 41320800, - 1660362552, - 2724046264, - 2451558081, - 2830746897, - 3180185455, - 2523380592, - 3615966001, - 2787541925, - 3849084123, - 3794368216, - 2534126074, - 2398463029, - 3053013139, - 2761339392, - 3411981642, - 1554947255, - 2044340622, - 1874804360, - 1149210229, - 2323930884, - 233125597, - 3664587201, - 1965818236, - 3212310660, - 963947218, - 3379565378, - 355185005, - 3330777611, - 3066394274, - 174169883, - 1743828641, - 3387901790, - 2333396101, - 812094098, - 3120976962, - 4084400097, - 1654518359, - 2710923174, - 3069866553, - 3415867382, - 1656493544, - 906726652, - 2590171591, - 1065118867, - 1770568599, - 782635254, - 2588103303, - 642298958, - 3536714031, - 358609939, - 1669298202, - 1970395733, - 3817480569, - 2995079956, - 2282010917, - 2942789358, - 3456729822, - 3669653499, - 2792536713, - 2369672665, - 3696154551, - 2848027280, - 3218550824, - 2609681118, - 2145951250, - 572988258, - 1558981030, - 703756745, - 3247987052, - 2631493507, - 3449630358, - 69498236, - 694670095, - 2170579338, - 2243110293, - 1398576724, - 2302718249, - 2780486608, - 3747438016, - 1274562134, - 1042592970, - 262013025, - 2715314356, - 2776174249, - 3569860558, - 3650709896, - 509975233, - 221931471, - 4097161719, - 1567935159, - 2227892624, - 1567791987, - 1905670043, - 3944716200, - 1710416467, - 3816136673, - 540323856, - 3272978658, - 1290576686, - 2711798553, - 4261692976, - 3946957331, - 3690173019, - 2499605427, - 3762316712, - 2906467241, - 1684061951, - 1196797466, - 888892516, - 93866139, - 3073379940, - 3543158120, - 2228317330, - 3762810881, - 3259564487, - 820166789, - 189372305, - 1362818074, - 695514536, - 1641304741, - 47748322, - 1701078851, - 4145807541, - 1369568556, - 3616309840, - 1090022778, - 2937622095, - 1816432653, - 2475721965, - 1277588240, - 2825290404, - 3717686622, - 2074256987, - 3454343228, - 2490571944, - 3468254879, - 540679348, - 4234100881, - 536495524, - 2935199487, - 2400696891, - 1772037092, - 2747971801, - 2199945316, - 1300201008, - 3811097405, - 517368368, - 2174510455, - 1670491037, - 3118118670, - 3074367302, - 2216070993, - 1720671299, - 719755363, - 1862810962, - 1683204926, - 3948227866, - 2364658765, - 1135869478, - 4273463563, - 2705834539, - 1310481980, - 1320919415, - 607447125, - 3185212378, - 1251376686, - 480995234, - 829537308, - 1658716498, - 950309680, - 2457944703, - 3014362764, - 2835443097, - 2177334333, - 2896536964, - 747755763, - 3778148315, - 2594828346, - 132203282, - 712765742, - 3976928263, - 255387857, - 1563198106, - 609423936, - 3777106923, - 1808957526, - 2845841225, - 580384459, - 985083464, - 2294224740, - 1004515342, - 1067636903, - 2123879687, - 3457972177, - 335261541, - 269360404, - 765530758, - 2712867647, - 2897086953, - 3449439735, - 4247579051, - 3416683973, - 361548881, - 405864004, - 3019753416, - 3320284824, - 3783501891, - 3930173033, - 4282797675, - 1855299596, - 3398313136, - 2643282201, - 503826576, - 3394208902, - 1513757154, - 2246089014, - 972231188, - 2166998530, - 3170984607, - 3846886887, - 1601133127, - 1485963892, - 300602902, - 1758056288, - 1191707371, - 2051321429, - 2044716977, - 787636257, - 1409293777, - 3470957634, - 2280671768, - 842242303, - 1240332261, - 756437361, - 2396464263, - 2602305796, - 3375533106, - 4045924280, - 2341784311, - 958908800, - 315563429, - 2732240198, - 2846454003, - 1434158233, - 431756828, - 3186439148, - 1158851911, - 3708656417, - 1958146051, - 2413668187, - 1754898174, - 3904171751, - 3323075865, - 1131153755, - 777550261, - 2713711391, - 3635264388, - 2198718338, - 3253108578, - 1350331362, - 1245214284, - 113397768, - 3243339265, - 1947845004, - 3374508348, - 3398398670, - 2909188485, - 3996843595, - 805382542, - 3313747893, - 3481849114, - 2681521211, - 1200783806, - 3010460648, - 627511739, - 3858056066, - 333702716, - 605338350, - 670263120, - 730649227, - 197730429, - 1100580631, - 1731787212, - 1121640221, - 12900075, - 3391234924, - 170222482, - 2018056996, - 650276008, - 956681687, - 2089939328, - 470095606, - 4269953397, - 1769619756, - 1612691451, - 1311774575, - 3097115273, - 1668328615, - 161908695, - 1608034215, - 2453179457, - 2057468633, - 3043858559, - 1498330511, - 3868256832, - 2149201001, - 2985322835, - 2428367703, - 3468619469, - 2418611395, - 3035695944, - 1463462124, - 1570538684, - 4213682618, - 2646023710, - 2282459534, - 203134453, - 3280688542, - 499406018, - 740266025, - 3995433083, - 2684708290, - 2786962540, - 3996907855, - 3540888241, - 2504152887, - 95140738, - 3410307732, - 4213281541, - 1130205300, - 1834247148, - 3085288674, - 1757496839, - 2638999860, - 944134568, - 429277883, - 1067024760, - 617238922, - 3488959294, - 741987661, - 3533927194, - 1237932260, - 1995572721, - 4246835548, - 127692972, - 602573069, - 1490010655, - 3279851246, - 2140276569, - 1067976333, - 3759403969, - 756452145, - 2530468147, - 68077798, - 2218817679, - 512488298, - 2952619615, - 411584404, - 1742607558, - 746518467, - 2323495073, - 659804361, - 2942619884, - 3094387666, - 568817846, - 2879746053, - 3466167065, - 2679379976, - 2761123490, - 1329585245, - 2002366789, - 3679068401, - 1269338689, - 3395199627, - 3800455758, - 3673241831, - 2885176066, - 2161360603, - 1524274471, - 1326722459, - 3172345686, - 3368252960, - 3254456694, - 3629314769, - 1845862028, - 2715209137, - 4168611558, - 1524295717, - 2784395814, - 2992195924, - 3880543888, - 124836284, - 3040090878, - 218181852, - 2886993195, - 1704884449, - 1159157773, - 1536949473, - 1110533636, - 2533310352, - 760201094, - 1121713762, - 3938196636, - 3861635442, - 4095223200, - 117486808, - 4016209518, - 3964941005, - 551196862, - 3888587901, - 374668424, - 2361695010, - 4160490124, - 848071013, - 2984698006, - 1217793226, - 608113933, - 3623689684, - 1171940966, - 982916749, - 3736315521, - 4220605762, - 2850639410, - 3596105656, - 2025885673, - 4179051022, - 3951152423, - 1295550588, - 3686027413, - 1069713201, - 3544311165, - 3646053791, - 1639194998, - 3215012224, - 1210495958, - 568432779, - 111218810, - 117568868, - 3623902778, - 1149326269, - 3733763850, - 3464838167, - 770265876, - 3562766163, - 3387916126, - 3267456042, - 1002733626, - 4151531329, - 157851514, - 1610490501, - 312055095, - 3131805395, - 776841067, - 2879382588, - 2986314302, - 269679171, - 3406030716, - 4068967288, - 4000906454, - 1756831720, - 37486536, - 3793273355, - 792421383, - 4070816373, - 105019835, - 1813040073, - 69360958, - 3405080290, - 1521867268, - 2105730871, - 2266564627, - 3028397809, - 4227097627, - 1372235213, - 2792045344, - 1008627816, - 3817395705, - 4275293577, - 3572559021, - 1590121875, - 3583369051, - 1022215899, - 3230960073, - 3537508057, - 1570188896, - 2088594329, - 1717763222, - 1869801634, - 1987190726, - 756019906, - 2474376734, - 1368442927, - 1088292116, - 2126187684, - 2433231968, - 3633264763, - 2100678921, - 2935112821, - 317754427, - 287068073, - 2186283649, - 572959992, - 3268887807, - 582466871, - 605740597, - 1823060721, - 1586061727, - 3111895428, - 695125864, - 1193778878, - 3655248514, - 432622350, - 3476660108, - 2932761860, - 434373208, - 2714312973, - 3039560485, - 1585095336, - 4074857722, - 2079918566, - 4109510854, - 460939301, - 3381598831, - 3365942715, - 1170217248, - 3411288949, - 3011202338, - 296265160, - 2591075506, - 946290134, - 896426416, - 1444209509, - 2460194899, - 811228227, - 3413044911, - 2374413040, - 3065359147, - 3820898995, - 819440678, - 4053324914, - 2896717853, - 4050742095, - 649133013, - 2145779445, - 4060542274, - 3337848814, - 1005314871, - 2232138185, - 3521560480, - 2939409198, - 1408340243, - 4061033550, - 2028675590, - 245729078, - 2022568044, - 204107741, - 1895299060, - 1381589737, - 806484506, - 3630866221, - 1520633492, - 2276423626, - 2191932884, - 241743326, - 2157896592, - 975413295, - 657676970, - 3124552504, - 2540517663, - 1534526342, - 2786995467, - 3208762368, - 3666336723, - 2159026271, - 3728621843, - 838384147, - 3737960495, - 1976756749, - 1882439259, - 3114302068, - 3645125261, - 1492932130, - 284632770, - 2739946427, - 1491763569, - 3318161332, - 771328911, - 624171645, - 4228996746, - 733364936, - 456840866, - 1443720601, - 1444266917, - 961217407, - 3736783322, - 2625621458, - 618487422, - 2889952671, - 2521664368, - 581333950, - 115523205, - 3428877624, - 3322968358, - 751765482, - 1794919031, - 1851508751, - 395964109, - 3339125842, - 970380309, - 675908005, - 4138210506, - 1224300211, - 777398559, - 3558332122, - 4287928453, - 3800252813, - 610534777, - 3784147937, - 2610778305, - 1877063966, - 4142701038, - 3067483222, - 3535300477, - 2093251237, - 2512229480, - 3537473195, - 2781969324, - 2928709818, - 4209870504, - 4212673161, - 4195822001, - 628434946, - 20399169, - 680195569, - 3405325316, - 4165465448, - 3199621403, - 391006568, - 3020231739, - 1150655869, - 495016696, - 1287151341, - 1799320233, - 1592803457, - 3352007667, - 895673102, - 622295143, - 2690066852, - 1840093360, - 1125655762, - 4183614611, - 3921871426, - 1531224510, - 1623852587, - 632427769, - 2484170829, - 1168786394, - 651206171, - 1658313593, - 2570586884, - 780584248, - 1130183763, - 1526530583, - 192039603, - 657220191, - 2804303289, - 3149434304, - 3698840016, - 815527660, - 267315904, - 3557221055, - 371644290, - 1078920840, - 2966475786, - 236719094, - 533820597, - 1759322410, - 2134324170, - 3543042376, - 3486470790, - 1583493125, - 165310541, - 642966488, - 2872788659, - 3609089559, - 3425356710, - 3297649859, - 1020106881, - 1481054944, - 828391201, - 2450594740, - 2965402655, - 1548936698, - 2295554854, - 3751037817, - 1034281477, - 2379874103, - 3930264439, - 953897250, - 3945677823, - 798204605, - 2216063336, - 3862632400, - 806917304, - 3811833488, - 2857989771, - 330021089, - 2310353396, - 2941899483, - 3708639458, - 649357133, - 19614190, - 710824980, - 354277345, - 1536729014, - 3111438706, - 4072091394, - 1074559321, - 3007149134, - 3548734666, - 1233947088, - 3386943152, - 1888647500, - 778313215, - 1890473053, - 659028458, - 3457078538, - 2371532230, - 2613624252, - 3353769794, - 3665815021, - 1464053017, - 2528854398, - 4061336510, - 133114235, - 2970603874, - 430720368, - 938382185, - 2213750276, - 3904566300, - 3994269680, - 3115933762, - 1473314876, - 1761727783, - 3612544130, - 1742321516, - 861456874, - 1140558921, - 94023417, - 2932725433, - 296132011, - 3486348595, - 1482584288, - 2983126516, - 3954326063, - 376192259, - 112816420, - 3423909086, - 1317318112, - 3607305526, - 3886213053, - 1930095157, - 3422259824, - 605178458, - 4274757605, - 1289885780, - 3843068925, - 2129966465, - 3560534089, - 3054852660, - 1783570279, - 224473884, - 3211113640, - 1563170354, - 110795679, - 1389123420, - 3959577935, - 2475945767, - 1091123226, - 3338933854, - 3753637060, - 4252581207, - 4240158440, - 1075574471, - 303603195, - 722016277, - 2048045598, - 2065425101, - 2290205344, - 192836548, - 1595020194, - 1535687228, - 2740465183, - 4243679716, - 2016675028, - 1518584331, - 481735219, - 3114135543, - 2147918223, - 2756601381, - 2649303924, - 4195758532, - 1508962547, - 734820573, - 3859653061, - 2138551323, - 1870138629, - 3713575137, - 164253173, - 974590166, - 3503054001, - 3660107, - 2671479156, - 3006228680, - 4089920500, - 4017796477, - 91733397, - 2434950332, - 3129899726, - 933034494, - 2283654263, - 2013383097, - 2960347433, - 202595399, - 3627841482, - 3051347326, - 89185989, - 3021877967, - 3971994324, - 3048115581, - 1947389766, - 2751014574, - 3529624507, - 761867444, - 2365316800, - 878594981, - 1058702954, - 3668378242, - 2424436780, - 3773473547, - 1236777427, - 461080454, - 245416317, - 1255236154, - 564692917, - 874372578, - 1759848312, - 4245563883, - 2625867528, - 1251399478, - 3258095919, - 1707501563, - 1621441395, - 3653245978, - 3338093925, - 1844047354, - 609432765, - 4043076648, - 3596340820, - 1159222404, - 318889338, - 1244971793, - 33743028, - 2484015238, - 3199014596, - 3798442175, - 2886175296, - 2632855092, - 2650544721, - 7661489, - 1724027283, - 3351085665, - 2586932183, - 449423177, - 3383978590, - 1479039317, - 2989368257, - 953549857, - 2288116373, - 2739866108, - 1551183128, - 871077340, - 1776269110, - 750109399, - 1049794974, - 359889247, - 1320841836, - 3743701692, - 3778613300, - 830351589, - 2217221932, - 1924872036, - 826615609, - 3776538777, - 1467182420, - 3132227816, - 3891007509, - 1634176526, - 2418490955, - 2457888601, - 715746701, - 3259171455, - 2148298870, - 549173429, - 3193173715, - 140556503, - 2068092668, - 4136795761, - 1532754588, - 1116145038, - 1709717951, - 1779552939, - 2111923500, - 681109334, - 1092540987, - 3094838379, - 793437071, - 1927534097, - 2458058573, - 1155011331, - 1203368225, - 2727874645, - 1154185207, - 4018580584, - 925142092, - 1408126118, - 2460276703, - 592363969, - 1513657813, - 1044800096, - 2055859668, - 2138483279, - 2068913499, - 1901909202, - 1238614719, - 852830351, - 755014383, - 614390969, - 4201976112, - 1062162548, - 613762219, - 742617446, - 3982563554, - 3283156464, - 2891989882, - 1701096272, - 3545497023, - 3116480170, - 1280650672, - 89638690, - 543600768, - 414954931, - 916838693, - 396111724, - 2803316982, - 3135475405, - 2621976653, - 1218090804, - 1838856102, - 2056717153, - 4252295202, - 2479296686, - 3858412115, - 81575522, - 2695465, - 1497111895, - 657285612, - 4096303717, - 2148167051, - 3234692487, - 3536488812, - 2468609849, - 1428348346, - 3326767017, - 4178677843, - 3111757296, - 280762683, - 1810191247, - 292584877, - 3177789092, - 857234507, - 1483876851, - 3305232977, - 3303665590, - 1106977696, - 3012850001, - 293192674, - 4100380873, - 4065213294, - 292718178, - 3796005011, - 1357905486, - 3991794681, - 3877808677, - 1547153577, - 3058828948, - 2302130107, - 687088202, - 2794880840, - 2758201250, - 970073658, - 660745174, - 1411608176, - 3484647224, - 4162299755, - 1330833541, - 1344352075, - 1060714531, - 3607273385, - 2041677095, - 1679791697, - 136514133, - 2041573357, - 399458458, - 1817051975, - 35970409, - 3917211363, - 2015347176, - 1110815947, - 1894432990, - 228092828, - 3311719313, - 1771395734, - 1806581333, - 2741010105, - 343549949, - 897289835, - 3032414537, - 1863179671, - 1318444013, - 2481581533, - 133945180, - 1253215175, - 3369775037, - 3266192253, - 2354242305, - 153364984, - 1435311652, - 2205368407, - 829660370, - 4217578952, - 2035950103, - 3353794168, - 453736743, - 4209812929, - 3955222419, - 4235516587, - 519123041, - 3861332504, - 4227800212, - 2965198358, - 2522763709, - 23071476, - 1768909344, - 3843385402, - 3921324496, - 3732833027, - 2873282045, - 1215567135, - 3934309468, - 3920805102, - 1505344881, - 710576978, - 546996906, - 4291748102, - 1008354390, - 2066548645, - 3584424033, - 3588295552, - 464062808, - 3191050955, - 344796141, - 1575326388, - 4060677689, - 3008038648, - 854434551, - 3574444180, - 3460100178, - 4036724387, - 4285228462, - 2341589197, - 2015700204, - 30987583, - 2416765610, - 23010992, - 1421687213, - 3150696836, - 3672158068, - 3809678980, - 3377988762, - 3196043144, - 2467302244, - 4109504393, - 2162767168, - 1773914206, - 1060456426, - 4292166182, - 365778826, - 2931779037, - 1478050019, - 2042666856, - 3778999971, - 1019086753, - 3939643012, - 3972089217, - 835990986, - 459864936, - 2278792042, - 412565492, - 3559136038, - 1307354758, - 2826086112, - 2000514003, - 2940213471, - 636820690, - 820799067, - 2759782365, - 3396378543, - 1835457760, - 2422061146, - 2741158086, - 236745169, - 328317332, - 16089180, - 4107985251, - 2115937918, - 1650787199, - 4048741791, - 3805806194, - 3685458545, - 519936796, - 1117714819, - 3217226175, - 2836889637, - 2337232716, - 1259711607, - 2511514651, - 3329792855, - 2314992349, - 2715523876, - 441125223, - 3508138434, - 439861073, - 2098616385, - 1867851310, - 332314110, - 3484597916, - 3567775387, - 1954704870, - 2701215805, - 536331925, - 3228997190, - 1366245070, - 1443179705, - 20863047, - 2891060687, - 973005577, - 1599156277, - 528357839, - 1034396049, - 788779813, - 187353349, - 924587127, - 660921838, - 3137221060, - 792630083, - 3325180090, - 4103947754, - 2990960220, - 3982570023, - 1577647261, - 3914515593, - 2495934172, - 1036046789, - 1577869927, - 3323701611, - 1065061057, - 238954938, - 397765400, - 2903281650, - 496375122, - 1017033787, - 3934993808, - 3391441282, - 3780082448, - 3510075126, - 1317329180, - 1099800849, - 1932461563, - 2366054921, - 3193578248, - 2035925272, - 1563458752, - 3213674215, - 3950083689, - 453595521, - 3114919314, - 2352423675, - 3707005255, - 2982760374, - 1585428093, - 649308520, - 651439341, - 2859265510, - 2959808702, - 3157962102, - 3047169394, - 1488167084, - 1653907712, - 2432084642, - 3243590989, - 1978755519, - 1497266055, - 2109009651, - 2420007163, - 2129360003, - 2026058002, - 1645936315, - 1430277139, - 264213150, - 2213607706, - 236396627, - 435286657, - 3969222800, - 2544226494, - 3414415347, - 689647016, - 4252074854, - 3947412815, - 2248857525, - 805134503, - 2968585018, - 942104104, - 907078810, - 159474099, - 2644400282, - 779835596, - 686059271, - 3978011090, - 1840689239, - 2815340481, - 69722469, - 3687925704, - 991155651, - 706042752, - 2847638855, - 601221863, - 672064648, - 1996511057, - 2104066903, - 360999790, - 2295884292, - 2056016000, - 1436197494, - 860034645, - 2361893514, - 3382319541, - 851587325, - 390673040, - 2137490190, - 2439402439, - 444430740, - 3581795256, - 2464734612, - 1917530583, - 2407603484, - 57116417, - 1522730320, - 513068832, - 1063234985, - 3325940652, - 803752642, - 4065539816, - 394096116, - 1743577897, - 215387268, - 2109400955, - 1035591327, - 2599486760, - 1319102091, - 1939925081, - 1932139723, - 2202344875, - 2357668114, - 1340412880, - 81450363, - 4246872022, - 4234699347, - 491290156, - 18022572, - 1941999813, - 1896679722, - 3694926638, - 2218265950, - 176945773, - 4170369278, - 3217922867, - 3912824811, - 1990245434, - 2392732196, - 680942563, - 136588675, - 3511253309, - 3813050706, - 709592331, - 2443786646, - 599279818, - 759595324, - 3350389182, - 3781406188, - 1636366361, - 837325583, - 2167108439, - 861458278, - 2879065048, - 169633335, - 93653021, - 3819703464, - 3387639747, - 2904462061, - 3103588147, - 2349108, - 3085163212, - 3263557363, - 2983785415, - 696987550, - 3253084898, - 1086501949, - 3447868153, - 1645160337, - 1413925883, - 197864773, - 2147550073, - 2068342793, - 3410586579, - 4072297712, - 962599407, - 1096448695, - 3142974176, - 4010291425, - 1312899945, - 1123155976, - 2580611808, - 2552414490, - 800876072, - 3183291174, - 3674686150, - 1688386204, - 2351758014, - 196928308, - 954724955, - 2588884608, - 2474637862, - 2459736548, - 2541826618, - 300505620, - 1490297766, - 2164513448, - 2235501877, - 237977615, - 3613394187, - 3881642472, - 3995518743, - 2167863954, - 2716141542, - 2431835439, - 3914563245, - 793406279, - 2219360567, - 2243177930, - 3782173694, - 1639312954, - 2346751445, - 1065948439, - 3808393377, - 1817883679, - 1775574494, - 2228613709, - 3111072120, - 79796634, - 1037250020, - 1443644066, - 4124728855, - 1763537799, - 2359683701, - 4263545527, - 3841613432, - 3195001381, - 2972515171, - 4047339540, - 1756991226, - 2027238437, - 3514395897, - 2261222801, - 2722673239, - 53509616, - 1157714650, - 3312071128, - 1577930175, - 1492447762, - 348822798, - 1297588246, - 2082086192, - 2125356384, - 1396989311, - 3530138687, - 1059160057, - 181073081, - 1663486080, - 3882090733, - 2246396774, - 725367627, - 4269955070, - 869822537, - 1551596877, - 1184818399, - 887119874, - 2833688226, - 2991989262, - 654364229, - 2911692011, - 2301408155, - 2548059167, - 2015266909, - 2015950796, - 2615174825, - 567648231, - 3882575740, - 1395149259, - 924623731, - 2483098135, - 822394059, - 2567331665, - 2683676676, - 709501248, - 1108959946, - 1899086668, - 1427755965, - 2266737966, - 3177489110, - 3798427965, - 2057758856, - 4233082064, - 2638806975, - 379719924, - 134218069, - 3478715500, - 149314541, - 3414242622, - 3198196492, - 3647955315, - 3135004222, - 527504193, - 833836710, - 2310663247, - 3554116832, - 3112339136, - 2261308367, - 2728874686, - 243039804, - 3236546111, - 764057702, - 2914974272, - 558064566, - 1450046956, - 2120314241, - 2471919619, - 2581294108, - 3238958126, - 1682916153, - 2947306545, - 3963790201, - 3368315357, - 875252749, - 1235132336, - 927793412, - 3059857444, - 57114807, - 2857693518, - 2366006836, - 166058491, - 3809324069, - 1373821485, - 3351247961, - 1596855015, - 3478077792, - 1313903052, - 2104966117, - 2613878407, - 2504323468, - 1379572026, - 443943375, - 1328207268, - 677539895, - 3073635576, - 792446049, - 3140598941, - 1372668661, - 2975609796, - 3289404637, - 751044867, - 2663984694, - 3383055917, - 765179813, - 772752784, - 1005422527, - 2163814183, - 76122343, - 261829482, - 4037167981, - 2147708302, - 712064341, - 2935375633, - 1692933219, - 1488998301, - 2549054833, - 1142543241, - 9875949, - 3127743734, - 3937359401, - 1061471663, - 850999350, - 1403179854, - 294296316, - 1355439733, - 716208516, - 2164971035, - 3531069290, - 1878855541, - 2876922607, - 651959370, - 3252777399, - 2560557958, - 3323065099, - 1882842949, - 1167151688, - 299535438, - 4135972863, - 1131499147, - 72017085, - 2628648431, - 3284551475, - 1560472789, - 1021365161, - 709708936, - 3145999153, - 4105639980, - 2472116977, - 4030863797, - 3031531255, - 2267822511, - 3082456603, - 1839241541, - 1066035281, - 842533859, - 799505920, - 1085943937, - 776316118, - 3045366034, - 1635191031, - 1858952211, - 575091608, - 2982570633, - 2602102629, - 3535111676, - 2987133024, - 2884929575, - 697181535, - 3956033342, - 2195270821, - 3049230771, - 990335776, - 3606785572, - 159596291, - 23046518, - 4234414803, - 3442389709, - 3997222612, - 3281447548, - 551253239, - 3522951912, - 3167819901, - 144051649, - 2993314372, - 3074069625, - 3082035344, - 1957011238, - 1819674839, - 2161362277, - 83341577, - 3213159573, - 2096053743, - 1452277606, - 652999696, - 2847462586, - 3937029092, - 3682783453, - 142193482, - 2847362240, - 288172757, - 1713973816, - 1371665498, - 3110378916, - 1567884291, - 1183592128, - 1067054158, - 3285851220, - 2361002810, - 3031551460, - 363219041, - 2593081794, - 2431537671, - 244151613, - 2626312350, - 3986264022, - 1179987719, - 3894923410, - 584030422, - 1757460599, - 2189535689, - 2145279837, - 4035348040, - 784289037, - 1011875214, - 3348604674, - 2894044010, - 3721828913, - 3810671617, - 916278736, - 1052720624, - 4091973543, - 1713010916, - 1729174392, - 817600757, - 2275662554, - 2661020511, - 3132065574, - 807628966, - 215329705, - 483541431, - 2833544976, - 3530282056, - 3950657723, - 1334370345, - 449822822, - 696427986, - 1415396108, - 1438713810, - 3784250005, - 614401826, - 1567288850, - 1557989864, - 3990040078, - 782357083, - 856658826, - 1299109537, - 2755231958, - 689920063, - 823923882, - 2109731661, - 1076461474, - 557277685, - 544365810, - 398477002, - 1851508099, - 942315316, - 2381896220, - 3201560379, - 2239549004, - 3155074513, - 1322760416, - 3694057028, - 3692840875, - 2987104416, - 2177657623, - 637264552, - 1068409916, - 2136641773, - 1925671435, - 2435175841, - 3179798902, - 7227191, - 1526600569, - 262797768, - 2618508037, - 384031662, - 2369795667, - 4108134812, - 1118145984, - 85609570, - 2356992655, - 2126926228, - 129404400, - 10077578, - 538773771, - 497987715, - 413326165, - 3737638960, - 4193337304, - 1749969057, - 2221891573, - 1352066872, - 880041699, - 2902445636, - 1088990105, - 2920271742, - 2628198447, - 3120205316, - 3160612647, - 3233843860, - 2895838590, - 2188458436, - 140786947, - 3497972266, - 3768173707, - 2064502080, - 1183638212, - 4094019817, - 4220501434, - 777226877, - 87949194, - 4166844069, - 1330680326, - 2138525343, - 2055987069, - 3435056364, - 2115232402, - 1221006195, - 1312330179, - 42761877, - 1588266298, - 3043303577, - 794491722, - 483946216, - 2933027297, - 813786395, - 1289696451, - 4255035268, - 1072699154, - 960018941, - 1401495896, - 3936439769, - 3404051594, - 1285423917, - 4138436480, - 2712045681, - 1091840467, - 3115214628, - 960766401, - 428097546, - 2982790759, - 3655065512, - 1817047913, - 2639542239, - 2782689259, - 3817081441, - 4026230252, - 1859227939, - 3832694547, - 129730887, - 254999970, - 1717654907, - 1387489330, - 3926840011, - 1482052799, - 3995626794, - 3522243524, - 3756694163, - 1108068369, - 3959648421, - 885141291, - 1506665475, - 3795449797, - 700712539, - 2413725965, - 4252475925, - 2467333285, - 3680946591, - 2604943182, - 2756697109, - 2338684995, - 1706252065, - 2832707740, - 4196715131, - 4259374294, - 2197477645, - 527382814, - 2858245452, - 3602775564, - 4228935952, - 1071742497, - 2409360047, - 4160287239, - 1238381702, - 2866983379, - 3764728060, - 1784469165, - 772971143, - 1561356704, - 2946428176, - 617878276, - 3205643256, - 3523818071, - 1486575028, - 2997433960, - 2478971270, - 1229957064, - 257495483, - 2041906738, - 1199858698, - 2646437486, - 4246496434, - 1615329778, - 2219021398, - 1840960301, - 1391499486, - 2200011518, - 3036342467, - 3924784084, - 84952565, - 3263060886, - 298567315, - 4062975837, - 3178001157, - 3579592325, - 3492021438, - 4058976337, - 3829583984, - 2882697265, - 3647153675, - 674480001, - 3926656793, - 3606213053, - 1440550943, - 212487967, - 1583406505, - 104638314, - 3152567858, - 168780516, - 2264537820, - 1045042579, - 50632410, - 3810198531, - 4108081603, - 1613749831, - 1962652319, - 2847574016, - 4266093105, - 230230747, - 3544810400, - 3168389228, - 1671883794, - 2658507745, - 80041147, - 1360078141, - 3519470012, - 740064686, - 2398250648, - 2984797202, - 106202432, - 342809727, - 1514292402, - 4017312389, - 91695346, - 337405358, - 524798171, - 3090467622, - 2735871504, - 514017017, - 565091190, - 3906124184, - 58160522, - 1663196816, - 160296197, - 3454997567, - 2185929129, - 3008562018, - 610769834, - 2031259888, - 4292133646, - 4261279929, - 2696845329, - 3502322694, - 3478275340, - 592044986, - 1175893593, - 4152472085, - 1783854671, - 725278183, - 1258164585, - 299666415, - 2318182686, - 4095218587, - 3822784744, - 2898916379, - 2618624506, - 1856438456, - 2899807545, - 1821434385, - 3525301589, - 1190321888, - 3548511751, - 3635017491, - 1339328706, - 3044681331, - 2697186683, - 4186568168, - 236008559, - 601648351, - 1039358187, - 1415995630, - 3227023297, - 3137870607, - 2507760569, - 1575658338, - 4215661826, - 2832000518, - 756723083, - 3627331136, - 4059318751, - 996167755, - 2385233313, - 3370087258, - 3995739397, - 1816872054, - 2142947331, - 4225097082, - 3430635753, - 1018155365, - 3078847586, - 3367977836, - 952299720, - 501848951, - 609312457, - 201968310, - 262515751, - 110883366, - 3996590580, - 868532131, - 2312474814, - 1191322483, - 2432439419, - 1160645711, - 210796323, - 2419767225, - 571667485, - 866873764, - 679011413, - 978341280, - 3755348519, - 4139533512, - 834030377, - 2409994735, - 2017852320, - 1727411538, - 729306866, - 1915582003, - 2156840194, - 189668386, - 1498715180, - 3404084543, - 4289400982, - 504770716, - 672448094, - 2880337079, - 1382033166, - 1933595126, - 3093543846, - 458340580, - 4026211487, - 2764959629, - 1209206419, - 2862408991, - 1404768091, - 4154318873, - 2101216481, - 285628865, - 269934530, - 948399517, - 2031030846, - 687121209, - 338878529, - 3245747476, - 1460004037, - 3583730411, - 4169817607, - 1622389781, - 2647057695, - 513234962, - 3676868773, - 3925914479, - 3522395981, - 1173949539, - 1246155317, - 1819628131, - 1414974276, - 3319178996, - 1648032084, - 372992594, - 1009223406, - 3540457367, - 1973201001, - 1257540670, - 3439797454, - 4015937703, - 4051096017, - 1788038452, - 3028888602, - 2892249670, - 4020327657, - 3442472958, - 1463085667, - 300258449, - 2985416541, - 594069974, - 3099685492, - 3457253571, - 2092807482, - 836899412, - 689841502, - 2829827577, - 2108919136, - 117276781, - 1886069523, - 568953040, - 2349566260, + 1133569861, + 2631336878, + 782153632, + 3201336902, + 631837952, + 2983168461, + 2488817414, + 138437677, + 924063199, + 3540607729, + 2070108395, + 2167491381, + 434036476, + 1432021185, + 4144709208, + 94957733, + 679660153, + 3468280030, + 307374396, + 1973917614, + 1347149425, + 2963091380, + 2396741114, + 2817505428, + 4202675606, + 1406883659, + 2190498116, + 3329056432, + 1323004755, + 4248062020, + 3737353370, + 1429733983, + 3668953609, + 689400931, + 3502322733, + 2315400353, + 124038168, + 4194882108, + 1999808299, + 1707724489, + 3439846153, + 2075405552, + 2785861829, + 3569473982, + 719832864, + 2072039208, + 2590617166, + 2107349762, + 3957510575, + 1162496764, + 2962114505, + 1300460645, + 240394541, + 3044154837, + 1183866882, + 21608530, + 3414611900, + 907026076, + 2466175683, + 4104339034, + 56647811, + 3490584428, + 585253290, + 1773541519, + 3763318258, + 1034154581, + 916870818, + 3104025930, + 3187985713, + 3347377442, + 381142488, + 1606802673, + 3262608688, + 437353484, + 1578303889, + 149421296, + 3608042017, + 3361863123, + 1837541265, + 3716700516, + 3596562113, + 3885056969, + 696365646, + 888073150, + 170835444, + 2643784874, + 3048307244, + 2677804177, + 2293018754, + 205837962, + 1819491680, + 1388816286, + 690842338, + 696985779, + 749153595, + 941841807, + 3662725343, + 385753401, + 1568503017, + 801506070, + 755000588, + 1272570947, + 3901600844, + 1238393689, + 3281418721, + 402614831, + 2874449435, + 1720402571, + 644537186, + 3787686263, + 400335132, + 4149775985, + 651382867, + 1659014845, + 3314643250, + 4038224847, + 86756982, + 2724725795, + 2307744074, + 1006463809, + 2647955156, + 797104864, + 2977598600, + 2606919403, + 895351011, + 1137660579, + 3030760962, + 1376428480, + 4261854716, + 307433750, + 4046778369, + 3221461974, + 2437346913, + 853871860, + 3451972203, + 2428265377, + 3139192743, + 699417121, + 2546447415, + 3646938900, + 321779133, + 4132651889, + 3150897467, + 3322784952, + 3321636334, + 3809206748, + 887152366, + 2725284811, + 3118585773, + 2302426343, + 2923495170, + 808817138, + 2122448850, + 4288522695, + 694121430, + 666217562, + 3456731245, + 2945634787, + 4286515422, + 2584304587, + 196624664, + 2923573934, + 495440833, + 4230033715, + 2919325867, + 1637322538, + 2441024399, + 2066037195, + 1429637805, + 3454747749, + 2992198813, + 2316066249, + 2059728876, + 1641836343, + 3372473717, + 2281518438, + 2027233573, + 2084138463, + 3906451211, + 1822877348, + 1411675113, + 892586474, + 2691798255, + 4171111378, + 1618388892, + 3628305835, + 2112352703, + 2769352428, + 3328390363, + 3547862795, + 1951111245, + 1752301420, + 3950840413, + 3733917162, + 3483625891, + 3961284589, + 1053919361, + 2364245161, + 1762251231, + 2577990521, + 3062140881, + 76894006, + 3323006640, + 3566856329, + 321653386, + 1222582341, + 3906125557, + 3207183368, + 3711704945, + 2803585006, + 1579690602, + 1561335837, + 248277811, + 1511629644, + 4225595823, + 2048236877, + 871098161, + 922796299, + 3165496228, + 2188132616, + 3314920527, + 3899363545, + 1939636581, + 111225829, + 577925552, + 484552429, + 1960109918, + 2716368548, + 3176433050, + 3601674852, + 373094431, + 2397954284, + 507596265, + 3453886844, + 1584313311, + 4078107846, + 3760649765, + 3169407464, + 2241899375, + 2176340713, + 2075366135, + 2166317154, + 2776336562, + 2892757776, + 4053008249, + 606525909, + 3377027328, + 2926964734, + 3454311800, + 3183173859, + 2486185933, + 4254240230, + 657283525, + 1197887020, + 2566237529, + 3361480729, + 3303665481, + 2777540161, + 3481688656, + 530972315, + 1141952260, + 2353730578, + 1567130567, + 1774672774, + 2759099133, + 1145398618, + 1784341895, + 2877327789, + 2283701774, + 2329358478, + 3749851982, + 889304613, + 1407703919, + 9934745, + 1632474055, + 1128381742, + 4157149222, + 901339165, + 1997833028, + 3348345862, + 918882200, + 389368392, + 1785766030, + 1011183425, + 4172425641, + 2970446214, + 3427424722, + 4065890984, + 279599603, + 3540241583, + 2107657045, + 374833093, + 2808540459, + 1133677443, + 3450784415, + 505192918, + 2761197512, + 1878885764, + 2093190413, + 365593111, + 1267461888, + 263440731, + 242490921, + 3436981670, + 70931106, + 4263682805, + 4108319982, + 3082011976, + 3638304801, + 547834987, + 1389281340, + 1165726954, + 3532323510, + 3738090780, + 2792799813, + 895056376, + 1766733245, + 2756468658, + 549127955, + 3658594335, + 3100293428, + 2189838935, + 4240567890, + 1320408354, + 1775420312, + 3106963550, + 2404621187, + 551952344, + 3979317860, + 1851160549, + 3178850306, + 2371135928, + 199118558, + 744433864, + 4252019171, + 827710697, + 3649106148, + 3901895857, + 876060027, + 117735217, + 444923369, + 3958565026, + 3825503616, + 1196211577, + 3964911068, + 1134815533, + 2104701277, + 2438251647, + 2077693689, + 1504095835, + 2972422661, + 1154532591, + 4124853811, + 2246290968, + 2099240424, + 2876187390, + 2798467629, + 1421449888, + 597729286, + 457387489, + 1499153086, + 1356594391, + 342601730, + 2132311059, + 791338823, + 883040089, + 11072842, + 1547956814, + 1127479410, + 1382813745, + 3083564782, + 57757933, + 1401265901, + 2223697359, + 4278517488, + 1442793572, + 1895302586, + 4037320066, + 1850828558, + 2690015012, + 1241674724, + 3116064231, + 845564284, + 25946255, + 4215149116, + 495055099, + 1672810856, + 1204097683, + 3789428282, + 3105344471, + 694575177, + 3452289136, + 1029896650, + 3360023878, + 164477778, + 4194287977, + 3710042738, + 3439994604, + 3530844732, + 3464877910, + 250768676, + 2766091923, + 1692725460, + 3990760111, + 2500143420, + 2288225360, + 1120586667, + 563203221, + 3827538083, + 960944785, + 187284559, + 1096897051, + 1599201569, + 366218183, + 327599743, + 552809433, + 922286152, + 1335459361, + 2540585017, + 583506026, + 2326404622, + 1027286907, + 3070665969, + 4015090822, + 3982905225, + 410023694, + 3395195240, + 1554582003, + 697806544, + 2638679054, + 4147142389, + 1346305553, + 3207189746, + 2321219320, + 3015285020, + 3277202443, + 1000205120, + 992239189, + 3971910935, + 266289801, + 3185455376, + 4205129433, + 2741042716, + 2288302182, + 2924512860, + 3159675473, + 2649659344, + 1431390315, + 3351345691, + 1985322899, + 2504948082, + 471514768, + 3592582188, + 590265372, + 1231874856, + 1822441545, + 3449101578, + 2881651809, + 1492681265, + 2787205964, + 3976134151, + 3773098695, + 2394435645, + 1109809125, + 4231449935, + 864895676, + 4110130427, + 3618915408, + 196919553, + 346361940, + 3415490747, + 405335608, + 2276418656, + 1980412698, + 2625528959, + 2125893390, + 3628088945, + 3876730320, + 4116584122, + 320861233, + 2570392315, + 2756479778, + 4260304638, + 3722879874, + 3046178060, + 1720565074, + 2770560359, + 912014247, + 1154114722, + 2398392697, + 1783089126, + 1546460693, + 204668283, + 3121352792, + 3639528845, + 2152218359, + 1312788810, + 568247798, + 124319166, + 493021345, + 1547026962, + 2251559632, + 133996748, + 2144224585, + 773611792, + 3955830954, + 410084503, + 4066825166, + 2042725973, + 1466951922, + 1930121934, + 3751731583, + 361596211, + 2154918619, + 1958735028, + 4253100770, + 1798276894, + 796014125, + 3181768284, + 2472538625, + 3746473395, + 3164354617, + 3774315671, + 2820211049, + 268279305, + 2116129449, + 101727936, + 3223098426, + 4163090882, + 1977979211, + 2069783619, + 3630469021, + 2808477081, + 2394277830, + 4273755936, + 3873756994, + 667433975, + 3543325367, + 948678910, + 3523633187, + 1065600406, + 3800848741, + 1630971465, + 2177742386, + 2169259565, + 2527662988, + 4265041234, + 1500582561, + 3783705696, + 1219124428, + 3964508217, + 1843670546, + 3654084756, + 171050360, + 664491242, + 4182800760, + 194504482, + 2724588151, + 803791207, + 2335734629, + 932536954, + 351277826, + 1745733698, + 808433890, + 3277785720, + 2268331000, + 4176006785, + 2783846944, + 2846749061, + 341760371, + 850652957, + 610136542, + 2125879925, + 1340989414, + 287096459, + 1590747309, + 2427885451, + 751554186, + 2647150186, + 4237391446, + 3763136313, + 3877298003, + 3014249088, + 3382389926, + 1631535685, + 3892604528, + 113578899, + 3571572828, + 3302253936, + 3064374549, + 3206349864, + 2304578579, + 1103680231, + 4182756619, + 353717522, + 946679590, + 112641226, + 2779609073, + 1652604443, + 4080136425, + 3861737353, + 3360215362, + 2959948846, + 3936470531, + 496941515, + 3375407516, + 3321262667, + 2335640285, + 3420603744, + 2677533980, + 3790770659, + 2069993412, + 2151268909, + 2625185327, + 1011602061, + 3094312259, + 2220111798, + 2329340907, + 3911596573, + 3635139597, + 4146685830, + 3763946467, + 3210305447, + 3929977614, + 4213604714, + 1070862604, + 3587716369, + 2324660711, + 1605219041, + 2500305989, + 3259861265, + 500582470, + 645426666, + 1542921866, + 1183594901, + 1566358777, + 1552607413, + 2615143441, + 843226814, + 571961800, + 2857771574, + 465828970, + 601724430, + 3630549817, + 4084906952, + 2289304527, + 2558936247, + 3620204471, + 800809787, + 3744817556, + 2527129768, + 478466184, + 2168202326, + 2362424043, + 4052881586, + 3740065985, + 230857130, + 2241446618, + 1087691895, + 3587787557, + 2274741308, + 3417159623, + 4195474105, + 3893812568, + 3619955078, + 1578592705, + 2342460548, + 1683392078, + 2424908660, + 1447503745, + 1685376648, + 3466313082, + 1339474830, + 831909307, + 4010134187, + 4003025695, + 3647011103, + 3782079027, + 1160932240, + 3494656117, + 1611197802, + 3567142312, + 2890077562, + 1602408714, + 472657297, + 494625495, + 106509046, + 3347756256, + 3240199890, + 1273640400, + 26328659, + 2157031379, + 694426882, + 2082449845, + 774225448, + 688955111, + 4171164651, + 3058172874, + 61808759, + 1890125294, + 3204378621, + 4036249412, + 1905152169, + 759081607, + 2643053294, + 2246357200, + 3577076693, + 3576965660, + 750521532, + 1446725730, + 883595268, + 1475256966, + 2754936968, + 2532626023, + 3976380384, + 4115602181, + 724209976, + 2743069868, + 2983502064, + 1884538091, + 3328099115, + 1306827026, + 1015926185, + 114388389, + 4148184582, + 3881534154, + 2154958112, + 2450264130, + 3423207432, + 3639858265, + 3685208575, + 2223382220, + 4143454651, + 3912117573, + 467726856, + 3747956614, + 1746667826, + 3642126639, + 2068865283, + 537066502, + 2219668398, + 3421188369, + 648060539, + 3174434539, + 1127238559, + 1260696570, + 1992801776, + 34669648, + 17786083, + 4172341182, + 2469189081, + 457767094, + 3315289129, + 628490177, + 1850498949, + 4132167689, + 1156111078, + 2607661973, + 3405842724, + 2122074618, + 2366415263, + 1017403904, + 703133706, + 1760782699, + 3950005746, + 2807076851, + 1892815493, + 4156622339, + 2949253480, + 1178452343, + 2923127021, + 2587988428, + 3219952967, + 3779832106, + 14674864, + 1178460628, + 430504797, + 1826964531, + 1641653160, + 1317393430, + 4018237409, + 2188499764, + 777463477, + 3341084647, + 1785473, + 1713958817, + 614600943, + 3882370691, + 3128770783, + 1747566540, + 3560074175, + 1039036639, + 812324281, + 1619256219, + 2502372977, + 3670497790, + 3042560186, + 1123065506, + 2583224593, + 2948298476, + 3021771220, + 1862104365, + 3597646031, + 3599995142, + 4030691110, + 2123585285, + 1992908341, + 733281288, + 3813398125, + 1870147575, + 3504460331, + 1736758862, + 3156067818, + 2750377685, + 2363934059, + 3310351310, + 3940047939, + 1578662503, + 294427273, + 806089294, + 3920958925, + 3896806913, + 1772829750, + 2344489042, + 1265846348, + 475622136, + 662357139, + 165396475, + 2749199175, + 2183375711, + 3937428306, + 803615728, + 509709769, + 3873466926, + 2172599902, + 527606578, + 40303553, + 2699653290, + 38353546, + 1822726436, + 3768380641, + 1927148863, + 1213421154, + 3186182600, + 1913248570, + 511826924, + 3822177471, + 2419777522, + 1875814791, + 817855974, + 63454356, + 3947190794, + 2325675557, + 3285547154, + 3102442928, + 1841049208, + 1444547977, + 419067849, + 1590144695, + 265849933, + 1789005293, + 1424217182, + 1030839968, + 4257727578, + 3034123782, + 1007958822, + 2610961415, + 2970216120, + 3058962717, + 3615507348, + 48179697, + 3002918546, + 3441672934, + 566382837, + 110545911, + 812350987, + 1870470422, + 1245308854, + 323897161, + 2936813890, + 2674566443, + 219377895, + 1086446979, + 1786499149, + 144398345, + 654537929, + 2395886380, + 1593335389, + 2828518475, + 3459698537, + 1787827162, + 3810757740, + 2425988724, + 4178554753, + 1418362991, + 2480692275, + 2288666395, + 3459457223, + 1653714464, + 3731039555, + 865008166, + 2292709319, + 3261752425, + 2470550971, + 1107107438, + 3714430210, + 1121490436, + 293329602, + 2146244605, + 3054248248, + 2798515481, + 2715429072, + 4123553916, + 2453465842, + 4180585184, + 311332054, + 3282685475, + 4196003183, + 143646618, + 2050741420, + 1130798427, + 2188270850, + 4182413865, + 3889327424, + 717038200, + 1009152937, + 1280770314, + 4264392438, + 605672675, + 2896879432, + 957372392, + 1032615488, + 2621739278, + 199467483, + 4230448746, + 3549149555, + 521016138, + 2846462485, + 274724402, + 2227908930, + 2967834491, + 3726412176, + 579648251, + 1013096723, + 3301766709, + 2500389133, + 4006393540, + 4012932388, + 698395652, + 2204303095, + 3219551077, + 573519650, + 1909653846, + 4023286709, + 123080637, + 3736361396, + 3419621647, + 2826723183, + 814724082, + 1073700179, + 2563994063, + 1474276044, + 3921991874, + 122646162, + 2077323014, + 1103992956, + 2139345490, + 3853409110, + 2154581931, + 1243065267, + 500043562, + 1292680936, + 872953662, + 516336047, + 2294151816, + 4067812227, + 1088621338, + 121581226, + 1270078291, + 995339050, + 2544655218, + 4275700282, + 2370560230, + 3170631092, + 4147771399, + 1641718137, + 395411316, + 3433033355, + 1661882323, + 3987552376, + 3985644864, + 2936838944, + 438444009, + 697124692, + 2325803091, + 2273501883, + 533683780, + 13177462, + 747666779, + 3544100246, + 3873810869, + 3732873649, + 1481766347, + 1348019810, + 38996467, + 1620496508, + 2700206985, + 1957448167, + 3321330398, + 3403978183, + 2542259279, + 1244737682, + 106824734, + 2889180192, + 2782979491, + 2208137029, + 1135795692, + 3243972639, + 1477336891, + 275111510, + 1786613380, + 1659228641, + 2054362147, + 196128659, + 816620318, + 4083877296, + 3716624455, + 1336671579, + 2764677258, + 801329804, + 3366317922, + 1011799852, + 3574425990, + 252138862, + 2894646204, + 2921304524, + 2462859333, + 229342323, + 3046504195, + 1508719358, + 665505174, + 2469489928, + 263479122, + 3365977587, + 4261148481, + 3654190026, + 3936839214, + 3988208864, + 3988430575, + 1451897393, + 3965115073, + 3686032844, + 3415467986, + 4020497039, + 1210122981, + 2111071161, + 2570070402, + 3947896005, + 1503190038, + 3504941178, + 2530459290, + 1800983033, + 924077923, + 41849044, + 1222720690, + 3158856279, + 1788061356, + 3691114006, + 1027122576, + 3321318183, + 3555481304, + 3531688759, + 214117354, + 1346508230, + 662442319, + 3812607766, + 2052640697, + 1608986287, + 3290855551, + 1643300988, + 1991073084, + 3768055435, + 868909615, + 1931155292, + 2551164463, + 683039949, + 2130756541, + 872271052, + 742932555, + 3602591999, + 3939291231, + 3967503725, + 88820413, + 4228851038, + 3346700824, + 718168795, + 1679949945, + 1011812910, + 4131325877, + 2366209749, + 1256096480, + 4274545458, + 88884764, + 857900399, + 614948171, + 1354041529, + 3050802805, + 446338994, + 1992706190, + 1701237523, + 1504018483, + 1341283007, + 190528434, + 4201618879, + 427878121, + 3521422876, + 3171400211, + 2453520335, + 2715250006, + 2878017940, + 407841248, + 1076646473, + 2902096371, + 1119626292, + 2644871628, + 3293596912, + 1974815981, + 1844661658, + 3463913199, + 2148341356, + 1291573129, + 2169246774, + 4121523571, + 1001828332, + 1201094370, + 2768247760, + 1187741609, + 2584658511, + 3298403860, + 19508848, + 2376541090, + 1834240020, + 2795223449, + 1569675949, + 2083566175, + 197356987, + 2187510641, + 735841287, + 1676166370, + 1470742301, + 1775423233, + 313697778, + 4150418127, + 1340236397, + 244289640, + 2419636179, + 1468768426, + 3948651692, + 4190434742, + 4240184606, + 1648085376, + 236983302, + 890850159, + 4132623352, + 1702226389, + 1275783591, + 1282324080, + 1068123143, + 2507371542, + 3567002196, + 2326254609, + 903986714, + 4275863676, + 681934685, + 3449788131, + 3658543841, + 3971267199, + 906890718, + 3220537935, + 3721238507, + 3424824871, + 4071298409, + 2350348109, + 851103759, + 308738713, + 3633342221, + 3294051521, + 60850191, + 4205293793, + 112318405, + 2392678001, + 4245426678, + 2813800834, + 544585601, + 862804006, + 635702554, + 1037318155, + 3062389050, + 1788723177, + 909046233, + 2633211423, + 1512124241, + 219688759, + 208669461, + 2341111368, + 1558771255, + 3962134562, + 3793702001, + 3678482635, + 3083064327, + 2224088978, + 121834241, + 3974743012, + 3285910810, + 2301078604, + 3991408963, + 1754131096, + 1115088084, + 742363327, + 1940874780, + 3815841784, + 3751295090, + 2438487767, + 505244835, + 2737497806, + 3686088508, + 3642212743, + 745390046, + 1171532585, + 1037089278, + 1222170202, + 3339498824, + 2420183829, + 1812185947, + 1685491936, + 2054045418, + 2916731872, + 625306470, + 2885097492, + 1531527709, + 881885921, + 4123938006, + 1223959919, + 2997456306, + 986868988, + 3499204297, + 2002259562, + 702456339, + 2180569369, + 573224295, + 3359535526, + 2265103784, + 4007182087, + 1269646626, + 3540842803, + 796051949, + 938241824, + 2538303668, + 2742240836, + 143742622, + 1113882340, + 2339965923, + 3861371050, + 1940827655, + 373043328, + 290172225, + 3309138253, + 2228544140, + 2697368471, + 314268289, + 3275936664, + 1292638624, + 3619702518, + 4134658547, + 460321722, + 3287938525, + 1056154816, + 176670928, + 21652761, + 1897619159, + 1048386769, + 3446694257, + 759789818, + 114313737, + 2656037254, + 3619510905, + 4025392287, + 2133557404, + 701572259, + 1063247232, + 2433408365, + 1329294200, + 3455774275, + 1060649066, + 372371712, + 54151955, + 4157273347, + 1028934354, + 1059536099, + 3705266405, + 2249471159, + 3723179480, + 1685144388, + 3532165340, + 426031484, + 3992264923, + 3558187790, + 789327435, + 113797040, + 3197466334, + 1846132324, + 3662284891, + 373999464, + 3527638615, + 3168581028, + 1873953465, + 1547610536, + 4188855756, + 3909799158, + 2439098621, + 1366914310, + 2552185808, + 3438947932, + 164270865, + 367726794, + 464460335, + 3684470355, + 2811443539, + 2800117708, + 577716947, + 2360729156, + 3199339255, + 2042468055, + 322152159, + 350449120, + 1338453446, + 2169901454, + 1137834952, + 1224674633, + 819627284, + 866288235, + 3684373329, + 2802084515, + 883000174, + 2124730087, + 1794186586, + 1843025586, + 1107572822, + 1553821135, + 2255976869, + 2971962377, + 1294016499, + 2779781987, + 1121528448, + 2599103176, + 52551025, + 1715784134, + 172080132, + 2909339926, + 2925801155, + 2758545856, + 2591511611, + 2537649007, + 3218650284, + 3620977964, + 2091529962, + 1908561698, + 4140639129, + 1468559223, + 3031446487, + 1538303396, + 3024701952, + 931817408, + 3315385342, + 530706375, + 776942776, + 1066889725, + 860858484, + 1380983184, + 3488107159, + 2352861314, + 768524800, + 3324839858, + 2985439478, + 2632570243, + 1269085623, + 591371703, + 3614267960, + 3634334422, + 494364802, + 2201954755, + 1822851462, + 912761235, + 3560975604, + 2823473984, + 2726516714, + 3900329550, + 3046312437, + 3202027504, + 3749404375, + 4111460380, + 3394432115, + 845091950, + 3547437680, + 2438586161, + 891753793, + 2658014682, + 3263079018, + 3181132990, + 498702745, + 1919031597, + 1885259403, + 1033195185, + 2152110138, + 2916981284, + 3597923267, + 963475408, + 2390133622, + 1279020008, + 1532292933, + 3533828736, + 3410363086, + 4086929538, + 2384284057, + 736527609, + 921831372, + 978761557, + 3581033526, + 184754562, + 1142912374, + 3579159488, + 3754076721, + 3195299577, + 3924528446, + 3367661173, + 2664527432, + 3060833069, + 87824822, + 3341591958, + 1787431305, + 2190200087, + 724746739, + 2362957509, + 1893647833, + 631707054, + 3600263608, + 3112000274, + 1195347200, + 1980784380, + 1587897178, + 1505502520, + 730808362, + 2077493665, + 1766424643, + 4169095394, + 3023491856, + 1907255295, + 1400247029, + 3439802081, + 2353421540, + 2598206379, + 241608182, + 2800597438, + 1865113119, + 2692612767, + 655943462, + 3036801590, + 4273840964, + 1531071759, + 1388648520, + 4046738566, + 2566906236, + 3190630157, + 1259094407, + 2588960543, + 881378174, + 4029007816, + 1036716304, + 1440834157, + 1045545551, + 1611580430, + 3074999947, + 3160852020, + 125510633, + 1948935563, + 2528898967, + 1349973772, + 790409835, + 933146308, + 3340496196, + 2161701996, + 2203562878, + 127500008, + 2241686805, + 301650182, + 1189877354, + 2069676893, + 2149373784, + 3925298089, + 2363633682, + 316935579, + 222701616, + 1656250469, + 2585556171, + 2344566725, + 1641407839, + 2733425029, + 3458390770, + 3862744850, + 2081559914, + 1101703091, + 4213220658, + 2871617336, + 3821441362, + 1284486133, + 1295341230, + 231768760, + 3688216658, + 434412803, + 2085597648, + 1178947430, + 1499668892, + 332651778, + 848688163, + 783466160, + 2232129444, + 1984278409, + 54161174, + 480180255, + 1460924608, + 2764823444, + 1193698181, + 130579953, + 4246187486, + 2272443719, + 3890368520, + 3817991883, + 1891017621, + 3116376438, + 1838640984, + 202212626, + 548912036, + 1276402547, + 2627209043, + 3559295082, + 136668629, + 1463185400, + 3996451093, + 1195997667, + 3703309471, + 966209630, + 1495349351, + 3818068441, + 998187068, + 465377358, + 2740367724, + 393280358, + 1284923405, + 1224681054, + 2296772677, + 792366488, + 1312887012, + 563043339, + 3204722308, + 2362148183, + 3991589490, + 3812760383, + 2376309831, + 3955295751, + 3155646167, + 718545282, + 426415781, + 160354117, + 658523776, + 2523118847, + 1301823518, + 493847556, + 4056626100, + 2397998927, + 2294563523, + 1640569883, + 1159193250, + 1855737923, + 2179119641, + 2264199499, + 1222836974, + 3897707605, + 3276299004, + 941543841, + 3250950662, + 4256183038, + 3233880332, + 1087109928, + 952749216, + 404554848, + 1410748259, + 2627152206, + 979574335, + 2707691282, + 1014678495, + 2734357556, + 1706931807, + 1748581111, + 448295008, + 592225319, + 4161750555, + 3212838838, + 412410368, + 4235477535, + 1807215053, + 542939498, + 1486293348, + 2157680973, + 2605658979, + 3385782260, + 1415388200, + 1442117433, + 222759435, + 1396810624, + 3570065468, + 2736080123, + 2834358471, + 766728789, + 825544721, + 2946948111, + 2901144947, + 3302059408, + 1587854930, + 924399321, + 4038690213, + 3466316021, + 1867950097, + 3055097144, + 1209191984, + 561463795, + 1873204665, + 2398002966, + 1880272881, + 3725511575, + 1620394432, + 1896123096, + 707343813, + 3089248093, + 3628971900, + 2382386013, + 237300537, + 3375790093, + 3131500864, + 3130912993, + 810002296, + 2443950534, + 3073420942, + 2776473731, + 1723254889, + 480346138, + 2162458117, + 2901340480, + 1459347184, + 4157536243, + 1658113007, + 2653696984, + 3483498847, + 2172581735, + 2945148912, + 369575878, + 2708837085, + 3017439704, + 572356532, + 1687730610, + 3303917138, + 4185775922, + 1542629751, + 1823588786, + 758034504, + 207137758, + 4118907251, + 3551679917, + 579289547, + 130012826, + 3056847841, + 3298176158, + 1631448630, + 3883850502, + 1781666917, + 226013389, + 1191195298, + 162910956, + 2421225516, + 3472833153, + 3105014764, + 2998279280, + 989511785, + 3122448433, + 4031112951, + 798915717, + 3124120701, + 622880500, + 1550632339, + 3582512921, + 1897853716, + 3955800050, + 2843608771, + 1783793539, + 1234540424, + 2841204267, + 3078276773, + 1897041741, + 2644748275, + 2075116374, + 3566638157, + 2545072199, + 2705581137, + 2034593660, + 1102733534, + 563102184, + 3562036002, + 1559012396, + 3081027664, + 4277200768, + 29819565, + 952516671, + 288733278, + 3944002185, + 2580949299, + 2180907477, + 701845585, + 147266494, + 370347954, + 3271320914, + 2691392956, + 2383884939, + 3524671230, + 3939649359, + 1745553757, + 3201374308, + 1372111071, + 3219710016, + 848485099, + 667408098, + 3285356951, + 1335687640, + 3644214032, + 2613006793, + 4205559384, + 1312637482, + 1614630442, + 1683627778, + 1208640814, + 2834070964, + 3592578939, + 2358819530, + 1995443443, + 3413826791, + 1776126225, + 1410383724, + 2955630995, + 2993512709, + 3236365815, + 597697885, + 3130855621, + 872085356, + 3088552112, + 3059305796, + 2016688539, + 769456081, + 1704353282, + 2894459066, + 3397853542, + 3442669343, + 2849401363, + 2439338168, + 1765298122, + 3770362729, + 2012197456, + 1236698075, + 2547134040, + 3583709679, + 1222346076, + 66929888, + 1810978692, + 140921618, + 147006822, + 716546132, + 272190641, + 4270199030, + 4112878406, + 3459132459, + 2205334703, + 2655240614, + 3460427508, + 4004166094, + 2733896947, + 2662276621, + 1235355454, + 2080490449, + 3835662405, + 2012775645, + 3831435577, + 896042505, + 847436101, + 2690167462, + 2480708720, + 34486415, + 780307332, + 1206065551, + 3684584401, + 109239563, + 1177388715, + 186055213, + 542130796, + 431317280, + 4172245957, + 659717852, + 3115120197, + 3389111893, + 612902486, + 3093454626, + 994194711, + 3302496409, + 2727804191, + 3326713816, + 2909645288, + 4081309302, + 3915134216, + 1723404026, + 3538120273, + 3346690791, + 173973591, + 3745427415, + 3605615924, + 792777225, + 3898488257, + 2851691638, + 1310137959, + 3972391863, + 2800499039, + 2126178226, + 1804903581, + 1573085093, + 3765347565, + 1947401503, + 2004990656, + 1992294665, + 794994487, + 3989725101, + 4052205259, + 4275133517, + 999898079, + 680324738, + 653725421, + 4071639383, + 413310260, + 1532627122, + 1109186269, + 1454507956, + 1285781862, + 1986139826, + 2716119693, + 1215969748, + 4236644205, + 4222317536, + 3465516680, + 235341523, + 2665785469, + 2109288089, + 3865225401, + 3901456815, + 3743371368, + 2847912006, + 1626006640, + 2457976716, + 3706719984, + 2633385040, + 2583230270, + 4011067946, + 4054333465, + 693261516, + 2607135999, + 2466950594, + 2361552982, + 3954587369, + 761811183, + 3009769247, + 862264806, + 3029405918, + 2092574479, + 3841904830, + 3016847299, + 3730784953, + 504024660, + 2701889065, + 1117738707, + 3634064406, + 3718762989, + 1744136614, + 576863562, + 2218173951, + 1287233228, + 3397782987, + 4199567582, + 796784456, + 1140293975, + 4199890228, + 3894449046, + 1599629633, + 534382349, + 2188664287, + 1188379575, + 2149173101, + 2940426567, + 1090797480, + 659007153, + 1390171376, + 827457145, + 1830598549, + 4268312346, + 2538285263, + 3432324116, + 2356562845, + 618449305, + 59317845, + 32078972, + 1432616549, + 594046403, + 4005397838, + 406342850, + 2458307266, + 3622090042, + 567965828, + 2332609232, + 3913110002, + 4262951031, + 2223365504, + 3342426145, + 2937615989, + 2775839252, + 789924065, + 2547858218, + 4095742257, + 3553568936, + 2794396975, + 2669775774, + 3492940828, + 767973272, + 2223966928, + 1943349271, + 2397350853, + 1721534631, + 2284745909, + 3407740702, + 2117904330, + 3232034135, + 16565437, + 1931391428, + 3733107895, + 4226045835, + 4041262527, + 808886639, + 866728119, + 796865561, + 516940011, + 2539355172, + 3942135406, + 4094999671, + 2693105972, + 1495848373, + 2649483499, + 2160589651, + 2962242307, + 3100995731, + 3301101694, + 2928207080, + 3820618865, + 1087878141, + 2958883758, + 2394205737, + 1361447768, + 2272811034, + 485504121, + 3294843171, + 2682287413, + 678219958, + 2324071209, + 3963482046, + 3007126565, + 1199614094, + 3164538217, + 4161981055, + 2778925309, + 62318500, + 2375538984, + 1469419268, + 1541960944, + 4137797337, + 3249238236, + 361601412, + 3415181848, + 3260509721, + 22562218, + 1067118319, + 2385726306, + 1385555483, + 1365689652, + 812527706, + 2566479528, + 4102252052, + 1339610123, + 1617514438, + 803772757, + 1830781896, + 3612102768, + 3759491386, + 4122435767, + 2036628786, + 4064824456, + 1405949265, + 1439853342, + 3933859233, + 1375799685, + 1727029396, + 3830298066, + 3621177512, + 776904443, + 3379551387, + 3354675417, + 2449813983, + 899493340, + 305076528, + 2320614618, + 2993808680, + 947776775, + 2833196371, + 2012448162, + 2485862213, + 454484984, + 1523595724, + 4242593197, + 372556332, + 1103298205, + 1648831464, + 4146669427, + 3328164483, + 988612572, + 247392334, + 1866213727, + 4150811684, + 1147567956, + 1034212146, + 96214741, + 2690679643, + 3567190262, + 383537089, + 305717567, + 2233806836, + 1230730955, + 1081378770, + 3219338543, + 3352036722, + 1759154670, + 410897617, + 2266534987, + 20622638, + 966731278, + 3881030600, + 1681142506, + 4180658998, + 508491304, + 2075219988, + 862057009, + 3811486827, + 166193849, + 1952208041, + 287050949, + 4108801649, + 3634814712, + 1441695148, + 4165943291, + 985297823, + 1950886509, + 326103870, + 52511222, + 3840171038, + 1544404498, + 1483779274, + 2509714717, + 4191272942, + 196893263, + 1752138771, + 1387920548, + 3203092670, + 3305714185, + 4020283615, + 1033783069, + 873274938, + 2512442229, + 4050706134, + 50652793, + 1076717860, + 866310729, + 2170861381, + 893749831, + 2773398050, + 475134716, + 2354613553, + 2314268426, + 1221954161, + 1136667736, + 1313435602, + 887229486, + 1360766549, + 2670668048, + 2341728973, + 1931118129, + 3373726746, + 1111218235, + 3520098808, + 1688835919, + 2940851490, + 2064836337, + 3968979974, + 3836060039, + 2942295937, + 484909846, + 57105482, + 893060117, + 3098559078, + 2646028589, + 1116334295, + 1386055093, + 2672179584, + 3465976289, + 2445951345, + 3624670035, + 1585735041, + 2706230734, + 2994891082, + 3515469200, + 1276669673, + 512187229, + 3497635883, + 218620959, + 245089060, + 4175591573, + 4155493712, + 2748673947, + 1833505305, + 2012082323, + 2709336153, + 2120857677, + 137903570, + 488916174, + 2781208725, + 2409478547, + 274592367, + 199488141, + 2342346857, + 3601780140, + 1121367165, + 3549771550, + 3076621128, + 567283226, + 3387958259, + 2030339307, + 1104740183, + 612459272, + 300767297, + 3050650430, + 2239182820, + 4159761668, + 2869764213, + 634694700, + 1106345469, + 2997451018, + 1843299496, + 430102189, + 526441779, + 1780104658, + 367387616, + 478601672, + 2464829660, + 1470568604, + 59858364, + 3322874822, + 1861332475, + 4272110389, + 2809523345, + 592218826, + 245752776, + 1160055635, + 2650328612, + 4116988655, + 2035975809, + 1888310709, + 385128325, + 705277784, + 2618129717, + 1873449709, + 2767331868, + 2978152928, + 101342520, + 496164299, + 3628094966, + 3617214560, + 3276401446, + 2823749437, + 3226661064, + 2505966670, + 2070046543, + 201965594, + 992372321, + 808827653, + 3757676062, + 2428492155, + 1976500081, + 374480624, + 1080514698, + 2981903116, + 2278910404, + 2881090894, + 1587947707, + 2995760558, + 4065642765, + 1419256387, + 2879122765, + 799732641, + 2237576159, + 2722571965, + 1945610873, + 1061221753, + 3737822677, + 3766401862, + 1794205272, + 1324118887, + 1406627255, + 1246070016, + 1663528532, + 1697199377, + 1725153851, + 1644109796, + 1555884116, + 2104188347, + 1983559692, + 410269419, + 88182632, + 2259001816, + 3545896554, + 1498254232, + 158757275, + 2086802999, + 1006471606, + 1388264984, + 2489082808, + 4121338482, + 2933397352, + 1328272844, + 2440478625, + 1874429555, + 4165076217, + 3618125529, + 426429240, + 3523227024, + 2221326617, + 1036420585, + 3084730014, + 2249454689, + 3627764096, + 2906922667, + 4069859704, + 3551319880, + 2008056542, + 4263884021, + 805474434, + 414460148, + 3631091911, + 4255385980, + 3566702050, + 3056142898, + 1412413851, + 1628335335, + 2988130790, + 1804321993, + 1260149734, + 313631333, + 1940664513, + 1251075071, + 142103746, + 253384927, + 3517416342, + 3340640409, + 426880898, + 3294484280, + 635363223, + 268138771, + 1492613435, + 4200722223, + 3285686445, + 801295415, + 2024943366, + 590788642, + 4058601891, + 2569141838, + 4203227446, + 3873029901, + 2938957729, + 2653323508, + 875351910, + 1225934695, + 3959624100, + 2491580690, + 2130038220, + 4156378275, + 2785882154, + 734574384, + 1648103801, + 3995559814, + 2769178231, + 715734292, + 851342658, + 4066600511, + 2873167890, + 367737717, + 2708556174, + 3095462268, + 2954581929, + 3596167017, + 416437246, + 3630899926, + 2652177164, + 4082497993, + 2092525777, + 4097981814, + 1798161626, + 921570821, + 2954127455, + 2903455637, + 2304798331, + 1258114076, + 3817191942, + 2909483557, + 2182250342, + 1650253435, + 1959237982, + 1275159542, + 3262458027, + 1272009741, + 452811378, + 4207284227, + 4014068428, + 2116331737, + 3821668701, + 2218821031, + 1832698056, + 993485847, + 3496889697, + 2641214206, + 1989726922, + 3632025556, + 3072807082, + 871546261, + 2112654627, + 3554921765, + 3035598716, + 3203667416, + 1926566103, + 3703963239, + 1744429225, + 2894885156, + 1619369871, + 3567760734, + 66603957, + 3634627448, + 1775619436, + 669243776, + 345554509, + 3410469602, + 1155755481, + 2545915127, + 1881644965, + 3014832373, + 991894728, + 2556172215, + 3344954145, + 1093682578, + 536721482, + 412887058, + 1927162005, + 598758544, + 1718573963, + 1056186033, + 3316535915, + 3595128100, + 1130595155, + 3859435741, + 909947405, + 1719271667, + 3984005418, + 1953576045, + 3439367892, + 1566598941, + 2942150553, + 3026742395, + 2447170263, + 3686824913, + 33431627, + 725397196, + 2320663736, + 1675683707, + 2299446991, + 3516433167, + 2048939642, + 75279992, + 2544154819, + 3300029692, + 3032144185, + 2785830866, + 2021781582, + 418522114, + 2390722409, + 197680384, + 1642831884, + 1118262832, + 1200601984, + 3464739706, + 515926247, + 1725239855, + 3994742718, + 3240728689, + 3145738916, + 1844532595, + 1620264703, + 4241585686, + 1317499201, + 572389138, + 717366194, + 1894941473, + 2632625749, + 1146787616, + 2682002716, + 191357974, + 1139509089, + 1281516716, + 2167935776, + 144366546, + 3850560335, + 2955928694, + 2476854219, + 1240245570, + 1201598779, + 3315121249, + 2067079794, + 2242637161, + 2647850380, + 3701580543, + 3720909783, + 1981567153, + 2939632748, + 3130494051, + 2236039992, + 4000430705, + 1741562167, + 2404004319, + 1683735303, + 57955420, + 3003892787, + 1345733127, + 4112811755, + 3929418014, + 1702502253, + 1563779786, + 131126007, + 3456434934, + 2711946303, + 1514661889, + 593277233, + 2310979980, + 2627253169, + 2196991012, + 734788614, + 1638451115, + 2011170818, + 2234624678, + 2644747730, + 1442906572, + 3186977457, + 3041580290, + 3056574755, + 3726946839, + 777432113, + 3096870562, + 2958583246, + 3198704593, + 968653965, + 2339592898, + 631523788, + 3180919056, + 828636999, + 578695087, + 2899843089, + 3000388853, + 3269720827, + 3037015468, + 3799598340, + 3149305514, + 2046835764, + 3530890661, + 30989217, + 2186509969, + 1179096544, + 2221010045, + 338765984, + 769504530, + 3971239329, + 2393081891, + 1544565497, + 865242040, + 3393553025, + 3524464797, + 3304062897, + 1546646632, + 3279691281, + 178822623, + 4081273624, + 88444244, + 2680632895, + 1275199310, + 2416414327, + 2419760906, + 3715897336, + 132751751, + 1119530060, + 1004169983, + 495930802, + 3413915054, + 899768813, + 3645578141, + 2499698472, + 132509074, + 25905020, + 3287880606, + 788515436, + 642323619, + 3147546391, + 3581174189, + 979602050, + 1611369111, + 2161460860, + 1095063350, + 4182558068, + 958677274, + 3492305733, + 1557372272, + 2654290688, + 566444553, + 2701083799, + 2781307160, + 1273578824, + 1387975524, + 597850620, + 2236234562, + 1466168507, + 3557657442, + 2574663791, + 4108434188, + 162027958, + 2621084243, + 403011392, + 1391061706, + 973642241, + 972433327, + 3904424455, + 1591050333, + 3027468230, + 480562783, + 847391513, + 10278627, + 891807608, + 234893054, + 1990103225, + 2718435746, + 2962618303, + 2457477564, + 2173705506, + 2840711582, + 359129712, + 1862207146, + 3179005379, + 1645874423, + 679472815, + 2797899962, + 893909343, + 3298150223, + 2373596744, + 845944693, + 743626006, + 1101645519, + 4118046404, + 3085126686, + 190442081, + 1429251740, + 3631205207, + 3554760933, + 4126353593, + 2783261338, + 2895926954, + 3712938542, + 3519916747, + 3954611278, + 3504723419, + 2842753149, + 570258929, + 1757758471, + 3191712789, + 959844640, + 3815947667, + 3894098372, + 4252794364, + 568847264, + 14599528, + 3247617154, + 4256259000, + 132921261, + 611627908, + 461842468, + 721786692, + 235906061, + 3838181019, + 2693917919, + 3584801911, + 1303671174, + 2715956353, + 2478140784, + 1156883438, + 304296391, + 4257481663, + 3383377257, + 2816549394, + 3609758812, + 965337833, + 663464027, + 2101116297, + 870118525, + 3961827375, + 1411666870, + 4042208149, + 1437767791, + 3011320579, + 628908785, + 3715862143, + 787455080, + 215407873, + 2354427590, + 3501402696, + 341761754, + 2789621373, + 2795910607, + 2196949108, + 506787737, + 2444762931, + 882455973, + 1775227796, + 3463655326, + 1613425836, + 1710055573, + 2954483535, + 428135136, + 3208103298, + 356408642, + 339078097, + 2783728495, + 1608672140, + 3468999018, + 1715268472, + 1775704350, + 2095354732, + 1816748505, + 630996696, + 3054793907, + 1376617684, + 2095298720, + 62048030, + 4177859766, + 1899791136, + 2051127621, + 196664096, + 3319551239, + 1662947943, + 258417225, + 4038741950, + 400172047, + 2774932803, + 1935359644, + 2920157004, + 70999116, + 2298111745, + 3155118629, + 954252591, + 3035077840, + 3365721730, + 3259958182, + 2966262046, + 3966771287, + 1664706857, + 1549210707, + 644267327, + 3625779575, + 35847691, + 4268504338, + 104221165, + 3793167289, + 1434899001, + 516380518, + 305714125, + 3997280967, + 3452590542, + 3101574501, + 2438551534, + 1487302260, + 699799524, + 1896565321, + 179635869, + 3577458627, + 2390294651, + 3440160896, + 1366242928, + 2623409152, + 3227684413, + 1771283579, + 1860070108, + 2525129864, + 639424412, + 3866671112, + 2583778912, + 3087668664, + 2565874715, + 4124409137, + 1716978928, + 2495926582, + 105275754, + 504654714, + 439824806, + 139092718, + 235256401, + 2052436662, + 3482201335, + 1668293439, + 3987504941, + 1030894756, + 1802687410, + 3849872306, + 1729194751, + 628020551, + 2758654744, + 3275824514, + 3396547984, + 2947249082, + 2719480175, + 2248726512, + 1528548733, + 981143734, + 3855057208, + 1889465921, + 717326424, + 3888793784, + 273177519, + 3318606717, + 2015221742, + 2498667698, + 1776840459, + 1340254574, + 2212922953, + 2588648618, + 1204650422, + 2486401588, + 1128711606, + 4071028195, + 3938015337, + 626760926, + 3422307161, + 3731948034, + 1910812643, + 829867537, + 600054897, + 846276067, + 1319580669, + 3615631593, + 747621539, + 1554392620, + 3653393404, + 3912733739, + 2977154303, + 1155671362, + 2833202039, + 2279065852, + 3013201083, + 3987119844, + 3274777164, + 1140056491, + 1816979270, + 2179608264, + 3678482641, + 3814469882, + 2355321349, + 2570806568, + 3322662929, + 1190205366, + 1292030150, + 445850460, + 1007609938, + 3203863267, + 4141964052, + 1966808952, + 1308343639, + 2379169556, + 392323325, + 2481626447, + 382317520, + 4182472484, + 2023490882, + 3775512433, + 1114127645, + 732212353, + 329275296, + 3657781914, + 2294505523, + 1622386862, + 405801504, + 3621219582, + 3355243220, + 1442897733, + 3394995933, + 770248982, + 1364846309, + 3024153508, + 3538800296, + 2652257210, + 210120814, + 1301948456, + 1247565194, + 2146699552, + 1320374747, + 897290956, + 3862254402, + 799831514, + 1914207686, + 3377904074, + 2607906779, + 4027092094, + 2763947902, + 1014475090, + 896406142, + 3514973274, + 3879235491, + 4012732357, + 3867478648, + 1414327534, + 2649597369, + 3662261765, + 2995439723, + 1996639143, + 4039511578, + 2765791850, + 3303435928, + 637778770, + 3898457532, + 518685469, + 986059285, + 1574901180, + 3032251472, + 245461152, + 3766190817, + 1353320356, + 1935265353, + 1973837543, + 3278804152, + 3214093049, + 2957835849, + 4091085412, + 255294461, + 1414770257, + 2217535651, + 1675408608, + 3831909459, + 3020670293, + 1716921447, + 3386562423, + 1988740673, + 261017061, + 2290787173, + 1983824509, + 3086118463, + 1254847698, + 4067049756, + 249698925, + 1498678668, + 784028945, + 439729327, + 4110883659, + 1613350294, + 4105915048, + 1813130890, + 679455672, + 3976052199, + 3001295100, + 2104820791, + 1162900241, + 1648044795, + 2514587003, + 2421180327, + 2283890084, + 1404122291, + 4282148353, + 1644006856, + 3614130090, + 423899502, + 2013836853, + 3009479094, + 363710018, + 1155199644, + 628882044, + 2369525976, + 3548378291, + 203495038, + 1558133755, + 2037293560, + 1180976695, + 2702892550, + 3361665033, + 3573942797, + 3246684700, + 4184909529, + 3113930097, + 3314026953, + 3543006383, + 1777684129, + 738987135, + 2408860120, + 3375406352, + 3410541010, + 2483402029, + 874265845, + 2728628655, + 2465254087, + 2763032499, + 1773018277, + 3091717447, + 3056048261, + 1627578063, + 396052709, + 799842788, + 4040195010, + 642912987, + 3176656976, + 1805691900, + 3531813876, + 4064329377, + 517657685, + 3683563198, + 2227722455, + 1853029411, + 3503447177, + 3163192579, + 1056555873, + 2381084898, + 781559930, + 2363496964, + 254498858, + 2476145011, + 4269432702, + 3103258864, + 2392439970, + 268597184, + 2516299829, + 1081588250, + 2566867051, + 1638912980, + 3024289361, + 3157978367, + 834525239, + 3419277855, + 3891176424, + 2309185042, + 3221257532, + 3004541492, + 1137530167, + 571926164, + 210118804, + 4293182733, + 2869369615, + 2784618711, + 3305896418, + 1489585285, + 3381035791, + 3790732453, + 4028183673, + 2653638877, + 2736737496, + 3797140749, + 962515952, + 2258143939, + 3564546745, + 1895130685, + 2228287067, + 2312197179, + 2626222586, + 2181090467, + 3689166059, + 3520225258, + 136758821, + 1431487264, + 2930236352, + 154402183, + 2738491176, + 344509447, + 1896458563, + 3779882758, + 2133529153, + 4286044837, + 2605636908, + 820659421, + 1811842380, + 3962094203, + 3687915725, + 2155975204, + 3928836465, + 3691703484, + 1904018067, + 1881354507, + 872419897, + 4278198967, + 2885521375, + 1376745644, + 3236945500, + 1671716578, + 370644230, + 101468213, + 284769845, + 634980179, + 1605335079, + 1282158086, + 2660914309, + 854331859, + 1000704825, + 699019275, + 2780029826, + 1260383123, + 2779903100, + 582743027, + 3718843428, + 1408230665, + 607437045, + 2934336625, + 115661440, + 4263553504, + 4276473889, + 370169645, + 2853087279, + 1027669514, + 1720229658, + 3409791618, + 285337640, + 1345790346, + 2943146913, + 2685478280, + 1487297211, + 2969341527, + 2458040056, + 214515308, + 3687721365, + 3667625811, + 1898369902, + 4230564065, + 223641391, + 3069294888, + 4116721754, + 1141151693, + 3584477412, + 384051122, + 3317163361, + 4072972608, + 1029203332, + 3860139765, + 3715612346, + 2510677815, + 612600386, + 3268435666, + 3097314045, + 370003995, + 1322283467, + 2435703924, + 1160258396, + 3171459393, + 2335321812, + 2673338575, + 4025907049, + 3884845380, + 3818902821, + 3795803746, + 147850781, + 3685404652, + 3974796711, + 356681341, + 1011203652, + 1562517675, + 2845328796, + 1736512821, + 988217836, + 181135306, + 3685976776, + 1256118881, + 3209965382, + 3363408560, + 466254918, + 1238802260, + 2587721293, + 292142954, + 3507044472, + 3171441275, + 1280320593, + 1455646407, + 3644414763, + 1408953435, + 4061979931, + 3356361782, + 3625119726, + 2573263907, + 3703724993, + 200726756, + 3890873677, + 1126147796, + 3196707360, + 730509394, + 789995795, + 4048947872, + 2517783772, + 4044958699, + 1400738798, + 2018024119, + 1708076552, + 4025504600, + 3137500897, + 1286235926, + 1493096642, + 2608737939, + 3110030890, + 2642728182, + 1595719543, + 364408439, + 2079077365, + 4193186130, + 2554702561, + 2507932143, + 1215331901, + 2013306107, + 1017301148, + 922684791, + 1736386310, + 1626170381, + 3727348039, + 2689656388, + 2440555730, ]; static const List _envieddataprivateKeyFCM = [ - 1279324886, - 662806985, - 3573060439, - 248874219, - 4233723744, - 3285043500, - 2630458596, - 933524371, - 2538237067, - 768558994, - 454998795, - 1636897548, - 1695959624, - 3572055503, - 397192581, - 479484564, - 3360553434, - 2693542025, - 867142847, - 982018899, - 3739553315, - 2665060145, - 4094912094, - 2428771751, - 3904058, - 1099107201, - 1187285827, - 2875788095, - 2140106345, - 2599920236, - 245888786, - 3103987845, - 3484709445, - 2445819208, - 269360740, - 2870785699, - 3494295994, - 2186398045, - 4129629240, - 1384501482, - 532926593, - 1467762526, - 3966026822, - 3985340571, - 2194011904, - 1102261066, - 3126146862, - 3384467914, - 2347086773, - 3515327742, - 3435863475, - 2703679343, - 2891934782, - 1893811374, - 2917625754, - 2606555229, - 207557128, - 1430868523, - 2681823461, - 3321714843, - 4076821364, - 3876126074, - 3018025748, - 46752351, - 751875701, - 2687751001, - 2493589465, - 281238138, - 1392016503, - 1858833284, - 1676449891, - 2759261001, - 185136160, - 2284614682, - 2558605298, - 2960518449, - 1299669850, - 2350161077, - 16064425, - 3910982402, - 2008416960, - 407547858, - 3118350782, - 3293433148, - 4091664088, - 2423551746, - 1683148593, - 3432837836, - 238582552, - 107638092, - 2732344020, - 3975360983, - 422135878, - 96195584, - 1597835219, - 2681376787, - 3274358093, - 1818034878, - 3341389759, - 419404667, - 2574758837, - 252695507, - 1048200250, - 3268075423, - 2409160371, - 771145959, - 1185118026, - 1694497202, - 459547795, - 676668007, - 2931249292, - 2309203677, - 2742377037, - 1476671875, - 291393547, - 3963059077, - 2687925121, - 2333196171, - 2039531931, - 3868674748, - 3251656920, - 4129482306, - 537098498, - 2036688869, - 127471710, - 1704463024, - 930295885, - 4186432046, - 1938967440, - 2948635229, - 1976418079, - 2310394898, - 599352119, - 2551533006, - 1551539448, - 3652950199, - 2689793505, - 3746914930, - 3290973024, - 2341551681, - 3216063305, - 976395655, - 397965148, - 2862779279, - 407461524, - 3554446222, - 1401256109, - 2789888879, - 214115035, - 1836880879, - 3045688983, - 2252442381, - 559151378, - 955966478, - 2584324446, - 1347819113, - 1241980821, - 670123376, - 442575908, - 4292310754, - 1213578378, - 4065098652, - 263616838, - 661276593, - 3965778985, - 1741842249, - 810319360, - 1609570472, - 1854028620, - 2576896958, - 1750042936, - 370761461, - 792214796, - 393825340, - 4194907067, - 405901813, - 2266069439, - 2767386745, - 2335424474, - 436486671, - 782956074, - 469346373, - 4143226626, - 4094633103, - 3999904053, - 3242400390, - 2517592061, - 3624786183, - 111823179, - 2073713998, - 2137141296, - 2853917483, - 3160747931, - 792012513, - 4146319979, - 1910365975, - 2218240240, - 469565148, - 397417916, - 785378009, - 2289490615, - 1034292049, - 1250846702, - 1696619111, - 3623641749, - 1292332679, - 4249317934, - 3006030157, - 2523368971, - 424311392, - 2213959190, - 4174793274, - 2506267990, - 2014370936, - 1591040072, - 3623894620, - 2306075371, - 3482174390, - 1847537366, - 3061488470, - 3603171666, - 1758980793, - 1285476689, - 724408367, - 2480446768, - 2146688690, - 2739074113, - 498871905, - 3353689463, - 3388389235, - 3346375762, - 2325253045, - 2390294888, - 1154741699, - 1504993805, - 1282124055, - 721971245, - 24857047, - 1167052719, - 383537953, - 235607738, - 4175610533, - 1073960078, - 3500791266, - 3699969304, - 1016485239, - 2465839437, - 405657353, - 1987549897, - 1029024668, - 1923774878, - 1463128127, - 2744597087, - 31094098, - 1350466643, - 1056091296, - 2406166046, - 4173589538, - 4077953048, - 2689385003, - 3838283156, - 3729448321, - 715218368, - 4023298979, - 279372347, - 3034273497, - 2590768014, - 1419110830, - 1437379757, - 1612246863, - 2875217093, - 2350993827, - 386010732, - 4099493275, - 1816392145, - 2132833179, - 3621348864, - 1107686739, - 3141789262, - 2143679560, - 464765225, - 195300053, - 1138259266, - 3510535479, - 3272381888, - 3240600416, - 2312848745, - 2567911661, - 178954473, - 3237444771, - 3802718463, - 2909482068, - 2538731774, - 3954242080, - 1698413327, - 1228779786, - 3004078511, - 3367118836, - 3865637574, - 2655570093, - 3113592806, - 58137924, - 446426548, - 2538541486, - 1042910889, - 3786911866, - 21677590, - 613714848, - 1304372575, - 2374222616, - 467999331, - 228581455, - 3960995091, - 719625735, - 1364823224, - 3069278263, - 1131576662, - 285238855, - 2623665741, - 2729318933, - 2947952648, - 850212901, - 2711382126, - 1046114203, - 340528874, - 3553499133, - 68801141, - 3366182049, - 1464491087, - 657625164, - 1725974432, - 3783405594, - 2785813541, - 3898744397, - 397199949, - 4216621968, - 440350147, - 424214301, - 120469059, - 3575889626, - 801123562, - 1013859453, - 4284411462, - 2798070151, - 1594042029, - 1463908757, - 3685343638, - 1057833288, - 3710507759, - 2466877712, - 3930018748, - 1490141635, - 3802831467, - 1502852269, - 2536704493, - 3882517584, - 2589438811, - 1718869732, - 3560182539, - 2309987322, - 3843946306, - 82685912, - 3899015613, - 3675211913, - 3743974184, - 346469984, - 1248030136, - 1057889963, - 3461009640, - 4047796387, - 1486000569, - 1744095049, - 3197389515, - 787249537, - 1306573674, - 3267086422, - 2136229466, - 1559308514, - 4065594540, - 762338925, - 4076022486, - 2412539813, - 189320781, - 1625852725, - 918059043, - 1133099022, - 810669220, - 4239771863, - 2481374125, - 154758307, - 661787935, - 1369230926, - 1413165669, - 3440871432, - 3597282607, - 536602729, - 1340378868, - 2357214296, - 3060217357, - 1220964900, - 1651603293, - 3886164127, - 663233727, - 1910377448, - 3228224725, - 902720132, - 575847774, - 294922789, - 554062844, - 3960883309, - 4281843126, - 2488101416, - 3385862555, - 2512544368, - 688801178, - 3389447547, - 715674876, - 2862522142, - 1190831427, - 1670963375, - 921515445, - 18056832, - 2467595902, - 2155953767, - 919664232, - 784918938, - 2243585162, - 2911772972, - 2174177911, - 466763367, - 3265840524, - 3817949194, - 2582825677, - 580265829, - 2379187998, - 1495885045, - 1404002520, - 3926820824, - 4033938249, - 1818733567, - 1545321754, - 1195728047, - 714991493, - 1876458494, - 3581720206, - 3927992962, - 3308052048, - 2641216644, - 2025194320, - 696579605, - 1328137917, - 1742882801, - 472195947, - 1209358190, - 176746071, - 3821123046, - 3140474621, - 1017441147, - 1983363580, - 2903195067, - 3249920825, - 2377150526, - 285286590, - 708714335, - 723289090, - 4172659341, - 3251422624, - 2849440335, - 4038468155, - 3994216306, - 3991484234, - 104340444, - 2563208796, - 4160938037, - 2031648843, - 273190374, - 670798975, - 1578347774, - 1467222854, - 3086214965, - 3493568199, - 3148667807, - 2131988363, - 3473061605, - 3650344483, - 1857696171, - 2426387606, - 3576219966, - 3214479941, - 4156931800, - 3611674736, - 3461037787, - 202538316, - 884071752, - 1219330210, - 1760985542, - 3694827656, - 3956711676, - 4140414837, - 1897725280, - 1529104932, - 3309886858, - 3019665028, - 3257164232, - 4201803466, - 2096630629, - 3313240046, - 3003709924, - 1282772500, - 4144842502, - 2710028273, - 1082068198, - 231456698, - 1328902776, - 1122638314, - 3029769667, - 3499783391, - 191797219, - 4277276943, - 3476999613, - 3205480392, - 2794949113, - 106421189, - 2819817569, - 2245773961, - 776684723, - 2455759829, - 4132304060, - 3024214983, - 230589955, - 3388157614, - 1358402174, - 1639879021, - 1290540436, - 2759607070, - 3502724873, - 3268901332, - 782662797, - 2183220927, - 2858323515, - 353111583, - 279865837, - 3293453964, - 2385982341, - 1478219788, - 4020118642, - 1464403431, - 1528376213, - 3061459497, - 3306499023, - 431112653, - 781466206, - 440387198, - 3342771696, - 573370861, - 340686789, - 1142327310, - 857784550, - 1453685706, - 1292332893, - 2671071258, - 2048204027, - 2616681300, - 884417905, - 4279183679, - 3244846516, - 2264143557, - 1185596360, - 1193225660, - 1610946983, - 3818825456, - 2077008776, - 3404538296, - 227554269, - 2900252325, - 678707047, - 796928480, - 3904270606, - 3710272655, - 2807154748, - 1722258547, - 3675203003, - 199863033, - 1817125878, - 2447042574, - 2772110207, - 81313294, - 3248547319, - 512320149, - 2660370035, - 693113314, - 284129737, - 2769466086, - 2284376239, - 190099013, - 1394528575, - 124777739, - 1828526561, - 3794258926, - 74591392, - 1509631606, - 3931920756, - 3672226323, - 2823976517, - 786933044, - 628229163, - 2757127782, - 391830346, - 2766045296, - 1532808970, - 1930224723, - 3085778848, - 3537937069, - 4067674734, - 3408170319, - 3193491988, - 2565096392, - 3066090864, - 2317533231, - 3548688962, - 1167410619, - 2329795630, - 4291028593, - 1416516355, - 1764415219, - 1864194959, - 2972786845, - 2916829268, - 4166151110, - 631374452, - 3405622228, - 364324383, - 3930154729, - 1769566084, - 2671772043, - 3935674186, - 4076525837, - 3569198982, - 2461109991, - 3410757165, - 210407521, - 827700492, - 267585998, - 3617930828, - 3312368106, - 642690062, - 155053706, - 4201418864, - 1331410047, - 3352930547, - 3009385713, - 2319880705, - 537233181, - 58056738, - 1595655624, - 2820989780, - 1811237249, - 4080262398, - 864222243, - 3340377783, - 2093768557, - 657712795, - 4290044805, - 2996170233, - 1121074702, - 45455858, - 3019058211, - 562206940, - 1766835890, - 2213867195, - 3494755247, - 2886541330, - 495301079, - 2891646593, - 1533169082, - 2648129971, - 286411123, - 1739010506, - 3306970989, - 69530289, - 2975197987, - 2505509070, - 3345251985, - 1966944142, - 524649220, - 4196039704, - 2066063663, - 71812681, - 3795655746, - 2466475916, - 4234074904, - 515689408, - 2267109193, - 442629396, - 12068930, - 901378986, - 1386990755, - 4281127897, - 2084810318, - 1623159272, - 4067761691, - 1734682721, - 3862207282, - 2644998658, - 2259480494, - 3430191081, - 3063696026, - 3198640730, - 3650042809, - 791754134, - 2856980124, - 3436397178, - 2645644832, - 3737153801, - 2957515672, - 939320120, - 136075785, - 77815169, - 1675220602, - 2328017809, - 1284494793, - 3792103628, - 2087288695, - 832697927, - 2754682109, - 2439614766, - 3428815864, - 1304064278, - 2760975820, - 2829492762, - 81252785, - 3365474096, - 2893149864, - 1113377440, - 3472037957, - 2404946171, - 1922854266, - 3953600716, - 3545068008, - 2761966338, - 4093718454, - 266553993, - 1890394344, - 80779933, - 3875137142, - 1360336461, - 310989090, - 150468992, - 3513758441, - 986396789, - 2430273076, - 3838731621, - 4253425187, - 2339774569, - 590365941, - 4268206406, - 321386075, - 3491258516, - 2585950344, - 4245664862, - 495233592, - 1022167758, - 3584053130, - 3049513728, - 1520085258, - 23098893, - 1834488268, - 3291616705, - 1206743461, - 3422649130, - 2504839056, - 4265398677, - 846818267, - 1470623669, - 1773107295, - 2439445788, - 3914651065, - 859713597, - 420480518, - 2311712981, - 3651233107, - 48196762, - 1042979592, - 4210650518, - 270665709, - 1182977797, - 904368664, - 147197469, - 565835665, - 2516860631, - 3574362368, - 2522395753, - 1119936937, - 1612064825, - 3979787638, - 3840940015, - 3069073733, - 4166687494, - 2501173928, - 3255362073, - 3619783791, - 420900000, - 44233494, - 1547498159, - 4255187873, - 2944520243, - 1506911912, - 359829631, - 4250656908, - 3351895230, - 1810869166, - 2189803082, - 4052769775, - 436049772, - 293294692, - 3608442233, - 3916649599, - 1197519964, - 191918794, - 490342272, - 1362798577, - 1023881432, - 689265264, - 411221774, - 1074513909, - 2792375980, - 3873393606, - 2220920994, - 4143109082, - 2362545018, - 3146595405, - 182482647, - 800436475, - 11161966, - 828769873, - 677380855, - 1461405875, - 3347318590, - 3805774785, - 1021864061, - 1040842956, - 2189758624, - 1535525576, - 1423140630, - 3669263755, - 1469364165, - 3693589772, - 1695297394, - 4012996627, - 3352013040, - 4225758589, - 2011744391, - 2222299088, - 1935836765, - 8884388, - 2282316767, - 334268724, - 2817468592, - 1268537539, - 3676574098, - 3744881697, - 1063244888, - 2874875182, - 1141673269, - 2276808920, - 2003873845, - 950997660, - 1403834530, - 1868876688, - 3010709801, - 1682279043, - 3354233247, - 330779033, - 2341749576, - 759863287, - 2767390466, - 1295384942, - 340761785, - 2544244172, - 1139817679, - 3436078098, - 2539984447, - 1550588477, - 3780056932, - 1828707529, - 3831762478, - 1453053, - 3238274671, - 3631437571, - 210756521, - 28133247, - 725609867, - 1675783060, - 3632300837, - 3019488523, - 1618754624, - 1221214519, - 3723829443, - 843366761, - 1430774038, - 787842204, - 701861211, - 3588171823, - 819578288, - 2503073862, - 1569134580, - 3357654277, - 2717571227, - 1084514135, - 2431836446, - 1466042201, - 3863212612, - 133235698, - 4114325387, - 3774714977, - 2558144476, - 2825582421, - 3450280538, - 2672661963, - 654073554, - 1158222262, - 3411133083, - 4191651507, - 3456561816, - 2422637808, - 3964776497, - 3989225661, - 1290702099, - 1712057688, - 3557132967, - 3881985685, - 3272991247, - 1704351741, - 2776182611, - 4056479906, - 1469162558, - 554679713, - 4175299484, - 2340587146, - 499565611, - 4087324713, - 2737126584, - 2578993740, - 4090987598, - 722820754, - 2591310715, - 561557415, - 4152334314, - 3362393198, - 297394993, - 2302743735, - 2642050029, - 238136529, - 283509968, - 3692724484, - 1794896167, - 1710130954, - 1288356820, - 1599107096, - 3386823149, - 3132620866, - 2072064905, - 4139856937, - 4172904184, - 1841609730, - 2969860384, - 300064787, - 2072780989, - 2313766631, - 3905829492, - 300468346, - 218926672, - 2111463558, - 1764524959, - 3528862054, - 2232265007, - 657585348, - 203070342, - 3473817913, - 1845458748, - 2433371704, - 1319167073, - 1952251644, - 2308639470, - 1883107652, - 1836897898, - 2690241818, - 145466816, - 712934268, - 2205961603, - 2259923312, - 33948094, - 3872249919, - 1340253465, - 3995944943, - 3865229494, - 1944604101, - 1942486348, - 1210584267, - 587084046, - 3100608168, - 3169384087, - 1730840732, - 1397771372, - 3792341853, - 3472668688, - 3521044104, - 1077328263, - 1749817479, - 3363417297, - 1685760297, - 3251199948, - 94115788, - 3840485430, - 500284971, - 3362550185, - 4236164861, - 3788699719, - 2787960264, - 2948187809, - 479233043, - 3918634785, - 594387578, - 1128123229, - 467663936, - 326850411, - 745015321, - 501198690, - 1731174892, - 984479919, - 2824177029, - 2585610427, - 3880155486, - 1392403943, - 1250245579, - 170168406, - 3089227709, - 2890062763, - 2381187531, - 3935314521, - 1348412035, - 2602852138, - 2752572161, - 286523516, - 3016390512, - 4217893612, - 2040580222, - 2356569264, - 3542950014, - 4007372477, - 3052825245, - 2642777331, - 3244927757, - 3999919274, - 2827008894, - 2579686338, - 894362991, - 1207245800, - 2180518120, - 939162123, - 2852656194, - 3907304682, - 2946934014, - 3528009719, - 3462115274, - 896432300, - 531352021, - 2333967450, - 3398410206, - 1679493726, - 165828365, - 3865779406, - 578198229, - 3634759763, - 2458597151, - 548148582, - 1085994747, - 650935859, - 2260580514, - 2646802189, - 223764718, - 1738842200, - 67878406, - 3190595178, - 2159347649, - 3279491094, - 2237723593, - 370870823, - 3367895702, - 753113351, - 3482533008, - 1386128099, - 727427585, - 3629149706, - 3094681240, - 2282827976, - 4153438780, - 366242428, - 3530105324, - 1827577055, - 976079609, - 179345998, - 1859547164, - 2846902585, - 534320701, - 829262272, - 1704311161, - 1986859659, - 603315271, - 1882914597, - 3309585068, - 4084033730, - 267193086, - 3229269425, - 4171285822, - 3505178242, - 3894685012, - 4070775637, - 4072503585, - 1793806136, - 3293211433, - 4169707985, - 4148541764, - 2263528092, - 33538354, - 501242229, - 3506475750, - 2756409802, - 3832755197, - 1605122848, - 3119254569, - 441363554, - 1565601052, - 41320750, - 1660362583, - 2724046293, - 2451558028, - 2830747005, - 3180185379, - 2523380538, - 3615966047, - 2787542007, - 3849084073, - 3794368156, - 2534125952, - 2398463084, - 3053013242, - 2761339475, - 3411981568, - 1554947201, - 2044340729, - 1874804417, - 1149210135, - 2323930950, - 233125509, - 3664587195, - 1965818152, - 3212310716, - 963947194, - 3379565424, - 355184990, - 3330777692, - 3066394362, - 174169931, - 1743828716, - 3387901712, - 2333396215, - 812094150, - 3120976937, - 4084400003, - 1654518335, - 2710923166, - 3069866606, - 3415867293, - 1656493496, - 906726537, - 2590171552, - 1065118934, - 1770568647, - 782635140, - 2588103415, - 642299006, - 3536714083, - 358609991, - 1669298275, - 1970395679, - 3817480496, - 2995079974, - 2282010962, - 2942789275, - 3456729772, - 3669653438, - 2792536801, - 2369672625, - 3696154599, - 2848027353, - 3218550852, - 2609681071, - 2145951320, - 572988181, - 1558981088, - 703756714, - 3247986972, - 2631493609, - 3449630400, - 69498154, - 694670204, - 2170579406, - 2243110392, - 1398576658, - 2302718306, - 2780486589, - 3747437972, - 1274562087, - 1042592903, - 262012932, - 2715314387, - 2776174307, - 3569860541, - 3650709986, - 509975288, - 221931404, - 4097161679, - 1567935196, - 2227892696, - 1567791898, - 1905670115, - 3944716281, - 1710416508, - 3816136586, - 540323945, - 3272978614, - 1290576670, - 2711798616, - 4261692996, - 3946957378, - 3690173032, - 2499605442, - 3762316796, - 2906467327, - 1684061831, - 1196797565, - 888892460, - 93866187, - 3073379915, - 3543158097, - 2228317436, - 3762811001, - 3259564478, - 820166896, - 189372406, - 1362818166, - 695514622, - 1641304799, - 47748230, - 1701078822, - 4145807567, - 1369568605, - 3616309820, - 1090022712, - 2937622143, - 1816432692, - 2475721876, - 1277588319, - 2825290446, - 3717686536, - 2074256949, - 3454343245, - 2490571911, - 3468254951, - 540679393, - 4234100922, - 536495562, - 2935199377, - 2400696943, - 1772037020, - 2747971819, - 2199945270, - 1300201064, - 3811097348, - 517368320, - 2174510395, - 1670491117, - 3118118760, - 3074367351, - 2216071016, - 1720671345, - 719755303, - 1862810976, - 1683204877, - 3948227944, - 2364658718, - 1135869520, - 4273463679, - 2705834589, - 1310482010, - 1320919344, - 607447137, - 3185212310, - 1251376751, - 480995281, - 829537326, - 1658716452, - 950309724, - 2457944592, - 3014362823, - 2835443189, - 2177334359, - 2896537039, - 747755700, - 3778148331, - 2594828355, - 132203355, - 712765801, - 3976928361, - 255387813, - 1563198172, - 609423882, - 3777106825, - 1808957503, - 2845841186, - 580384392, - 985083451, - 2294224658, - 1004515391, - 1067636933, - 2123879766, - 3457972151, - 335261501, - 269360483, - 765530855, - 2712867595, - 2897086858, - 3449439663, - 4247579081, - 3416684019, - 361548863, - 405863981, - 3019753379, - 3320284907, - 3783501943, - 3930172959, - 4282797660, - 1855299685, - 3398313154, - 2643282266, - 503826682, - 3394208970, - 1513757080, - 2246089075, - 972231264, - 2166998651, - 3170984662, - 3846886819, - 1601133117, - 1485963806, - 300602959, - 1758056193, - 1191707274, - 2051321350, - 2044717051, - 787636290, - 1409293793, - 3470957605, - 2280671851, - 842242249, - 1240332252, - 756437253, - 2396464382, - 2602305905, - 3375533151, - 4045924351, - 2341784263, - 958908898, - 315563462, - 2732240241, - 2846453938, - 1434158323, - 431756886, - 3186439053, - 1158851955, - 3708656480, - 1958146165, - 2413668137, - 1754898106, - 3904171667, - 3323075935, - 1131153720, - 777550301, - 2713711441, - 3635264438, - 2198718447, - 3253108571, - 1350331314, - 1245214228, - 113397839, - 3243339335, - 1947845091, - 3374508403, - 3398398598, - 2909188550, - 3996843643, - 805382635, - 3313747953, - 3481849175, - 2681521226, - 1200783832, - 3010460585, - 627511797, - 3858056161, - 333702670, - 605338296, - 670263082, - 730649343, - 197730334, - 1100580686, - 1731787168, - 1121640283, - 12900014, - 3391234849, - 170222554, - 2018056980, - 650276078, - 956681639, - 2089939375, - 470095520, - 4269953286, - 1769619813, - 1612691342, - 1311774470, - 3097115357, - 1668328680, - 161908612, - 1608034286, - 2453179512, - 2057468557, - 3043858444, - 1498330605, - 3868256888, - 2149200926, - 2985322809, - 2428367621, - 3468619425, - 2418611377, - 3035695917, - 1463462043, - 1570538637, - 4213682569, - 2646023771, - 2282459647, - 203134370, - 3280688587, - 499405978, - 740266087, - 3995433039, - 2684708346, - 2786962463, - 3996907837, - 3540888295, - 2504152959, - 95140835, - 3410307794, - 4213281635, - 1130205197, - 1834247092, - 3085288631, - 1757496900, - 2638999894, - 944134651, - 429277899, - 1067024669, - 617239023, - 3488959314, - 741987619, - 3533927275, - 1237932199, - 1995572628, - 4246835566, - 127692957, - 602573128, - 1490010728, - 3279851177, - 2140276502, - 1067976445, - 3759403943, - 756452182, - 2530468162, - 68077697, - 2218817754, - 512488201, - 2952619562, - 411584443, - 1742607603, - 746518420, - 2323495109, - 659804349, - 2942619829, - 3094387610, - 568817821, - 2879746144, - 3466167086, - 2679380046, - 2761123474, - 1329585159, - 2002366838, - 3679068297, - 1269338677, - 3395199709, - 3800455800, - 3673241739, - 2885176152, - 2161360533, - 1524274518, - 1326722509, - 3172345697, - 3368253005, - 3254456609, - 3629314696, - 1845862137, - 2715209160, - 4168611487, - 1524295747, - 2784395807, - 2992195863, - 3880543913, - 124836332, - 3040090760, - 218181813, - 2886993261, - 1704884361, - 1159157821, - 1536949435, - 1110533697, - 2533310419, - 760201165, - 1121713722, - 3938196725, - 3861635332, - 4095223239, - 117486830, - 4016209432, - 3964940991, - 551196910, - 3888587849, - 374668536, - 2361695059, - 4160490184, - 848070966, - 2984698080, - 1217793215, - 608114040, - 3623689699, - 1171940959, - 982916823, - 3736315626, - 4220605712, - 2850639362, - 3596105689, - 2025885629, - 4179051112, - 3951152403, - 1295550543, - 3686027483, - 1069713249, - 3544311051, - 3646053848, - 1639194916, - 3215012297, - 1210495903, - 568432857, - 111218764, - 117568812, - 3623902808, - 1149326295, - 3733763966, - 3464838204, - 770265945, - 3562766112, - 3387916087, - 3267456025, - 1002733689, - 4151531274, - 157851401, - 1610490583, - 312055131, - 3131805343, - 776840985, - 2879382642, - 2986314246, - 269679152, - 3406030607, - 4068967188, - 4000906414, - 1756831662, - 37486510, - 3793273417, - 792421427, - 4070816303, - 105019874, - 1813040057, - 69361007, - 3405080193, - 1521867331, - 2105730906, - 2266564695, - 3028397705, - 4227097679, - 1372235177, - 2792045328, - 1008627742, - 3817395599, - 4275293671, - 3572559052, - 1590121953, - 3583369021, - 1022215854, - 3230960121, - 3537508028, - 1570188826, - 2088594403, - 1717763235, - 1869801701, - 1987190675, - 756019958, - 2474376799, - 1368442999, - 1088292181, - 2126187671, - 2433231909, - 3633264665, - 2100678973, - 2935112711, - 317754466, - 287068109, - 2186283744, - 572959895, - 3268887741, - 582466820, - 605740664, - 1823060643, - 1586061799, - 3111895538, - 695125770, - 1193778924, - 3655248580, - 432622369, - 3476660158, - 2932761930, - 434373141, - 2714313065, - 3039560532, - 1585095370, - 4074857681, - 2079918507, - 4109510899, - 460939340, - 3381598783, - 3365942767, - 1170217334, - 3411288850, - 3011202416, - 296265106, - 2591075461, - 946290080, - 896426461, - 1444209441, - 2460194848, - 811228170, - 3413044928, - 2374412951, - 3065359198, - 3820898951, - 819440745, - 4053324870, - 2896717942, - 4050742056, - 649132965, - 2145779372, - 4060542220, - 3337848708, - 1005314919, - 2232138124, - 3521560466, - 2939409260, - 1408340261, - 4061033592, - 2028675671, - 245729100, - 2022568003, - 204107678, - 1895298966, - 1381589691, - 806484563, - 3630866203, - 1520633559, - 2276423571, - 2191932818, - 241743263, - 2157896702, - 975413353, - 657676953, - 3124552525, - 2540517740, - 1534526413, - 2786995553, - 3208762478, - 3666336669, - 2159026227, - 3728621866, - 838384248, - 3737960474, - 1976756847, - 1882439197, - 3114302008, - 3645125301, - 1492932166, - 284632820, - 2739946435, - 1491763546, - 3318161393, - 771328960, - 624171559, - 4228996843, - 733364880, - 456840911, - 1443720619, - 1444266951, - 961217317, - 3736783282, - 2625621407, - 618487346, - 2889952682, - 2521664315, - 581333905, - 115523242, - 3428877644, - 3322968420, - 751765464, - 1794918947, - 1851508860, - 395964042, - 3339125822, - 970380320, - 675908071, - 4138210493, - 1224300164, - 777398636, - 3558332052, - 4287928546, - 3800252906, - 610534714, - 3784147924, - 2610778359, - 1877064021, - 4142700959, - 3067483161, - 3535300408, - 2093251306, - 2512229391, - 3537473181, - 2781969403, - 2928709844, - 4209870572, - 4212673216, - 4195822046, - 628435067, - 20399221, - 680195519, - 3405325438, - 4165465362, - 3199621458, - 391006469, - 3020231775, - 1150655813, - 495016625, - 1287151272, - 1799320264, - 1592803564, - 3352007558, - 895673172, - 622295043, - 2690066895, - 1840093401, - 1125655731, - 4183614706, - 3921871376, - 1531224530, - 1623852563, - 632427730, - 2484170850, - 1168786314, - 651206184, - 1658313524, - 2570587006, - 780584211, - 1130183729, - 1526530596, - 192039553, - 657220202, - 2804303314, - 3149434266, - 3698839978, - 815527597, - 267315882, - 3557221005, - 371644391, - 1078920871, - 2966475839, - 236718992, - 533820624, - 1759322482, - 2134324133, - 3543042365, - 3486470902, - 1583493181, - 165310491, - 642966519, - 2872788731, - 3609089571, - 3425356739, - 3297649831, - 1020106952, - 1481054867, - 828391272, - 2450594803, - 2965402746, - 1548936627, - 2295554892, - 3751037745, - 1034281547, - 2379874114, - 3930264354, - 953897225, - 3945677712, - 798204617, - 2216063266, - 3862632424, - 806917364, - 3811833537, - 2857989810, - 330021028, - 2310353306, - 2941899414, - 3708639396, - 649357066, - 19614095, - 710825038, - 354277255, - 1536729053, - 3111438619, - 4072091488, - 1074559286, - 3007149062, - 3548734717, - 1233947062, - 3386943189, - 1888647435, - 778313166, - 1890472970, - 659028421, - 3457078628, - 2371532286, - 2613624271, - 3353769752, - 3665814956, - 1464053109, - 2528854283, - 4061336525, - 133114134, - 2970603797, - 430720275, - 938382105, - 2213750369, - 3904566357, - 3994269603, - 3115933708, - 1473314910, - 1761727828, - 3612544233, - 1742321455, - 861456775, - 1140558872, - 94023346, - 2932725494, - 296131999, - 3486348551, - 1482584207, - 2983126461, - 3954326039, - 376192324, - 112816404, - 3423909001, - 1317318071, - 3607305588, - 3886213069, - 1930095225, - 3422259774, - 605178421, - 4274757585, - 1289885819, - 3843068872, - 2129966543, - 3560534023, - 3054852613, - 1783570225, - 224473896, - 3211113712, - 1563170375, - 110795727, - 1389123355, - 3959577881, - 2475945800, - 1091123283, - 3338933814, - 3753637052, - 4252581126, - 4240158395, - 1075574408, - 303603097, - 722016345, - 2048045658, - 2065425039, - 2290205416, - 192836523, - 1595020272, - 1535687240, - 2740465259, - 4243679625, - 2016674969, - 1518584389, - 481735291, - 3114135431, - 2147918268, - 2756601409, - 2649303843, - 4195758514, - 1508962520, - 734820495, - 3859653116, - 2138551368, - 1870138696, - 3713575065, - 164253114, - 974590115, - 3503054018, - 3660092, - 2671479084, - 3006228626, - 4089920429, - 4017796366, - 91733465, - 2434950377, - 3129899652, - 933034426, - 2283654210, - 2013383119, - 2960347493, - 202595331, - 3627841529, - 3051347223, - 89186044, - 3021877909, - 3971994286, - 3048115519, - 1947389747, - 2751014626, - 3529624521, - 761867510, - 2365316772, - 878595020, - 1058702881, - 3668378341, - 2424436842, - 3773473632, - 1236777444, - 461080564, - 245416235, - 1255236220, - 564692931, - 874372534, - 1759848202, - 4245563793, - 2625867577, - 1251399541, - 3258095974, - 1707501458, - 1621441329, - 3653246046, - 3338093870, - 1844047263, - 609432827, - 4043076700, - 3596340770, - 1159222473, - 318889235, - 1244971860, - 33743058, - 2484015299, - 3199014576, - 3798442220, - 2886175251, - 2632855141, - 2650544698, - 7661560, - 1724027302, - 3351085583, - 2586932153, - 449423137, - 3383978607, - 1479039281, - 2989368201, - 953549938, - 2288116461, - 2739866030, - 1551183178, - 871077278, - 1776269124, - 750109370, - 1049795033, - 359889214, - 1320841795, - 3743701737, - 3778613369, - 830351520, - 2217221891, - 1924871936, - 826615674, - 3776538877, - 1467182342, - 3132227759, - 3891007609, - 1634176632, - 2418490911, - 2457888515, - 715746808, - 3259171383, - 2148298801, - 549173467, - 3193173666, - 140556540, - 2068092588, - 4136795670, - 1532754646, - 1116145096, - 1709717971, - 1779552963, - 2111923567, - 681109349, - 1092541012, - 3094838322, - 793437123, - 1927534163, - 2458058533, - 1155011404, - 1203368299, - 2727874614, - 1154185088, - 4018580574, - 925142137, - 1408126151, - 2460276652, - 592363913, - 1513657758, - 1044800013, - 2055859693, - 2138483323, - 2068913455, - 1901909173, - 1238614771, - 852830442, - 755014312, - 614391004, - 4201976167, - 1062162478, - 613762194, - 742617395, - 3982563483, - 3283156356, - 2891989823, - 1701096246, - 3545497034, - 3116480220, - 1280650693, - 89638766, - 543600818, - 414954964, - 916838764, - 396111661, - 2803316899, - 3135475352, - 2621976636, - 1218090840, - 1838856086, - 2056717074, - 4252295278, - 2479296708, - 3858412084, - 81575436, - 2695550, - 1497111829, - 657285507, - 4096303647, - 2148167091, - 3234692531, - 3536488756, - 2468609914, - 1428348369, - 3326767079, - 4178677765, - 3111757245, - 280762731, - 1810191293, - 292584907, - 3177789158, - 857234555, - 1483876784, - 3305232952, - 3303665536, - 1106977774, - 3012849936, - 293192576, - 4100380827, - 4065213192, - 292718119, - 3796005026, - 1357905460, - 3991794611, - 3877808717, - 1547153553, - 3058828996, - 2302130157, - 687088130, - 2794880813, - 2758201304, - 970073724, - 660745120, - 1411608070, - 3484647293, - 4162299684, - 1330833641, - 1344352115, - 1060714600, - 3607273439, - 2041677169, - 1679791674, - 136514073, - 2041573276, - 399458524, - 1817051955, - 35970323, - 3917211313, - 2015347097, - 1110815916, - 1894432906, - 228092906, - 3311719418, - 1771395802, - 1806581251, - 2741010070, - 343549854, - 897289729, - 3032414478, - 1863179695, - 1318443919, - 2481581483, - 133945110, - 1253215156, - 3369775081, - 3266192156, - 2354242377, - 153364883, - 1435311688, - 2205368370, - 829660344, - 4217578897, - 2035950118, - 3353794124, - 453736782, - 4209812919, - 3955222456, - 4235516635, - 519122982, - 3861332520, - 4227800307, - 2965198415, - 2522763751, - 23071424, - 1768909415, - 3843385425, - 3921324473, - 3732833122, - 2873281992, - 1215567221, - 3934309418, - 3920805053, - 1505344779, - 710576917, - 546996939, - 4291748149, - 1008354335, - 2066548735, - 3584423972, - 3588295665, - 464062768, - 3191050884, - 344796074, - 1575326337, - 4060677713, - 3008038560, - 854434458, - 3574444241, - 3460100112, - 4036724463, - 4285228493, - 2341589135, - 2015700111, - 30987609, - 2416765658, - 23010951, - 1421687276, - 3150696948, - 3672157989, - 3809679025, - 3377988831, - 3196043250, - 2467302155, - 4109504505, - 2162767156, - 1773914215, - 1060456367, - 4292166252, - 365778908, - 2931778992, - 1478050007, - 2042666819, - 3779000008, - 1019086835, - 3939643091, - 3972089268, - 835990948, - 459864895, - 2278791976, - 412565442, - 3559136127, - 1307354838, - 2826086025, - 2000513954, - 2940213437, - 636820648, - 820799037, - 2759782311, - 3396378519, - 1835457697, - 2422061112, - 2741158129, - 236745214, - 328317409, - 16089098, - 4107985237, - 2115937849, - 1650787126, - 4048741832, - 3805806113, - 3685458491, - 519936883, - 1117714884, - 3217226120, - 2836889667, - 2337232764, - 1259711516, - 2511514700, - 3329792870, - 2314992310, - 2715523905, - 441125170, - 3508138422, - 439861021, - 2098616440, - 1867851389, - 332314029, - 3484597934, - 3567775477, - 1954704852, - 2701215858, - 536332013, - 3228997121, - 1366245117, - 1443179754, - 20863095, - 2891060631, - 973005662, - 1599156351, - 528357821, - 1034396104, - 788779850, - 187353419, - 924587086, - 660921755, - 3137221024, - 792630037, - 3325180108, - 4103947651, - 2990960154, - 3982570051, - 1577647345, - 3914515644, - 2495934107, - 1036046772, - 1577869859, - 3323701530, - 1065061013, - 238954972, - 397765499, - 2903281606, - 496375101, - 1017033823, - 3934993865, - 3391441339, - 3780082534, - 3510075074, - 1317329274, - 1099800949, - 1932461485, - 2366054970, - 3193578346, - 2035925333, - 1563458727, - 3213674162, - 3950083673, - 453595569, - 3114919339, - 2352423592, - 3707005310, - 2982760399, - 1585428043, - 649308428, - 651439267, - 2859265460, - 2959808726, - 3157962015, - 3047169345, - 1488167166, - 1653907797, - 2432084726, - 3243590956, - 1978755569, - 1497266126, - 2109009552, - 2420007073, - 2129360075, - 2026058067, - 1645936365, - 1430277233, - 264213211, - 2213607766, - 236396643, - 435286743, - 3969222856, - 2544226500, - 3414415275, - 689647079, - 4252074767, - 3947412832, - 2248857543, - 805134483, - 2968585075, - 942104171, - 907078896, - 159474174, - 2644400348, - 779835540, - 686059377, - 3978011013, - 1840689153, - 2815340423, - 69722461, - 3687925680, - 991155610, - 706042808, - 2847638805, - 601221763, - 672064706, - 1996510977, - 2104066866, - 360999690, - 2295884401, - 2056016057, - 1436197438, - 860034588, - 2361893608, - 3382319606, - 851587241, - 390673121, - 2137490213, - 2439402387, - 444430788, - 3581795266, - 2464734683, - 1917530544, - 2407603564, - 57116489, - 1522730303, - 513068897, - 1063235047, - 3325940694, - 803752623, - 4065539792, - 394096038, - 1743577923, - 215387369, - 2109400905, - 1035591414, - 2599486750, - 1319102145, - 1939925100, - 1932139679, - 2202344935, - 2357668167, - 1340412854, - 81450250, - 4246871986, - 4234699264, - 491290139, - 18022626, - 1941999756, - 1896679778, - 3694926663, - 2218265913, - 176945749, - 4170369203, - 3217922822, - 3912824711, - 1990245460, - 2392732237, - 680942555, - 136588723, - 3511253357, - 3813050686, - 709592388, - 2443786746, - 599279780, - 759595345, - 3350389209, - 3781406106, - 1636366451, - 837325673, - 2167108450, - 861458197, - 2879065070, - 169633383, - 93653098, - 3819703497, - 3387639735, - 2904461983, - 3103588177, - 2349178, - 3085163258, - 3263557282, - 2983785356, - 696987603, - 3253084826, - 1086501974, - 3447868097, - 1645160435, - 1413925788, - 197864819, - 2147550005, - 2068342886, - 3410586522, - 4072297666, - 962599318, - 1096448752, - 3142974105, - 4010291412, - 1312899872, - 1123156043, - 2580611754, - 2552414511, - 800876108, - 3183291208, - 3674686117, - 1688386282, - 2351758045, - 196928358, - 954724980, - 2588884679, - 2474637889, - 2459736496, - 2541826626, - 300505692, - 1490297827, - 2164513496, - 2235501903, - 237977660, - 3613394282, - 3881642371, - 3995518841, - 2167864006, - 2716141442, - 2431835490, - 3914563292, - 793406221, - 2219360634, - 2243177900, - 3782173575, - 1639313001, - 2346751361, - 1065948448, - 3808393442, - 1817883762, - 1775574423, - 2228613693, - 3111072044, - 79796693, - 1037249969, - 1443644142, - 4124728914, - 1763537864, - 2359683649, - 4263545549, - 3841613333, - 3195001420, - 2972515112, - 4047339622, - 1756991149, - 2027238524, - 3514395791, - 2261222887, - 2722673211, - 53509557, - 1157714615, - 3312071097, - 1577930206, - 1492447850, - 348822841, - 1297588348, - 2082086145, - 2125356294, - 1396989237, - 3530138704, - 1059159939, - 181073037, - 1663486169, - 3882090716, - 2246396732, - 725367673, - 4269955015, - 869822483, - 1551596832, - 1184818408, - 887119913, - 2833688271, - 2991989321, - 654364284, - 2911691911, - 2301408220, - 2548059245, - 2015266846, - 2015950745, - 2615174855, - 567648148, - 3882575657, - 1395149298, - 924623664, - 2483098189, - 822394020, - 2567331600, - 2683676790, - 709501295, - 1108959918, - 1899086695, - 1427755995, - 2266737986, - 3177489052, - 3798427987, - 2057758939, - 4233081991, - 2638806984, - 379719824, - 134218018, - 3478715396, - 149314465, - 3414242577, - 3198196574, - 3647955243, - 3135004246, - 527504180, - 833836685, - 2310663231, - 3554116738, - 3112339115, - 2261308331, - 2728874699, - 243039758, - 3236546136, - 764057650, - 2914974253, - 558064593, - 1450046933, - 2120314336, - 2471919729, - 2581294120, - 3238958147, - 1682916174, - 2947306590, - 3963790142, - 3368315268, - 875252861, - 1235132297, - 927793475, - 3059857483, - 57114838, - 2857693483, - 2366006866, - 166058396, - 3809324134, - 1373821540, - 3351247916, - 1596854935, - 3478077705, - 1313902976, - 2104966097, - 2613878483, - 2504323519, - 1379572080, - 443943338, - 1328207311, - 677539961, - 3073635499, - 792446030, - 3140598992, - 1372668547, - 2975609769, - 3289404551, - 751044933, - 2663984724, - 3383055940, - 765179874, - 772752872, - 1005422547, - 2163814163, - 76122291, - 261829436, - 4037167931, - 2147708385, - 712064311, - 2935375739, - 1692933206, - 1488998352, - 2549054722, - 1142543312, - 9875877, - 3127743639, - 3937359454, - 1061471715, - 850999365, - 1403179899, - 294296255, - 1355439692, - 716208581, - 2164971135, - 3531069200, - 1878855455, - 2876922538, - 651959359, - 3252777468, - 2560558000, - 3323065184, - 1882842929, - 1167151673, - 299535375, - 4135972749, - 1131499195, - 72017106, - 2628648414, - 3284551498, - 1560472758, - 1021365227, - 709709055, - 3145999191, - 4105640006, - 2472116935, - 4030863747, - 3031531164, - 2267822554, - 3082456682, - 1839241494, - 1066035263, - 842533814, - 799505975, - 1085944010, - 776316039, - 3045366135, - 1635190931, - 1858952318, - 575091700, - 2982570701, - 2602102550, - 3535111631, - 2987132984, - 2884929610, - 697181491, - 3956033407, - 2195270868, - 3049230807, - 990335847, - 3606785615, - 159596341, - 23046432, - 4234414817, - 3442389647, - 3997222545, - 3281447439, - 551253184, - 3522951879, - 3167819807, - 144051690, - 2993314342, - 3074069535, - 3082035429, - 1957011315, - 1819674781, - 2161362194, - 83341624, - 3213159635, - 2096053644, - 1452277567, - 652999798, - 2847462531, - 3937029033, - 3682783371, - 142193426, - 2847362189, - 288172676, - 1713973846, - 1371665428, - 3110378901, - 1567884403, - 1183592098, - 1067054090, - 3285851167, - 2361002864, - 3031551410, - 363218965, - 2593081760, - 2431537708, - 244151655, - 2626312428, - 3986263984, - 1179987756, - 3894923475, - 584030351, - 1757460518, - 2189535728, - 2145279800, - 4035348028, - 784289112, - 1011875294, - 3348604786, - 2894043929, - 3721828958, - 3810671685, - 916278696, - 1052720543, - 4091973578, - 1713010902, - 1729174326, - 817600703, - 2275662472, - 2661020472, - 3132065612, - 807629004, - 215329741, - 483541444, - 2833545052, - 3530282019, - 3950657783, - 1334370400, - 449822774, - 696427946, - 1415396169, - 1438713736, - 3784250019, - 614401898, - 1567288920, - 1557989818, - 3990040143, - 782357022, - 856658921, - 1299109583, - 2755231902, - 689920071, - 823923870, - 2109731700, - 1076461543, - 557277607, - 544365785, - 398476976, - 1851508193, - 942315344, - 2381896272, - 3201560336, - 2239549051, - 3155074460, - 1322760363, - 3694057003, - 3692840903, - 2987104482, - 2177657669, - 637264594, - 1068409936, - 2136641722, - 1925671487, - 2435175884, - 3179798828, - 7227263, - 1526600501, - 262797713, - 2618508142, - 384031709, - 2369795632, - 4108134906, - 1118145976, - 85609557, - 2356992749, - 2126926309, - 129404327, - 10077648, - 538773880, - 497987787, - 413326176, - 3737639008, - 4193337260, - 1749969099, - 2221891505, - 1352066888, - 880041690, - 2902445569, - 1088990205, - 2920271695, - 2628198487, - 3120205414, - 3160612719, - 3233843940, - 2895838483, - 2188458419, - 140787013, - 3497972296, - 3768173821, - 2064502135, - 1183638172, - 4094019775, - 4220501384, - 777226768, - 87949267, - 4166844099, - 1330680405, - 2138525387, - 2055987019, - 3435056290, - 2115232487, - 1221006155, - 1312330151, - 42761945, - 1588266339, - 3043303666, - 794491749, - 483946206, - 2933027222, - 813786480, - 1289696442, - 4255035358, - 1072699243, - 960018847, - 1401495854, - 3936439777, - 3404051682, - 1285423971, - 4138436581, - 2712045632, - 1091840388, - 3115214670, - 960766446, - 428097598, - 2982790664, - 3655065475, - 1817047808, - 2639542162, - 2782689209, - 3817081359, - 4026230179, - 1859227984, - 3832694608, - 129730834, - 255000003, - 1717654792, - 1387489382, - 3926840050, - 1482052856, - 3995626849, - 3522243458, - 3756694177, - 1108068468, - 3959648479, - 885141316, - 1506665574, - 3795449775, - 700712554, - 2413726047, - 4252475973, - 2467333343, - 3680946641, - 2604943229, - 2756697170, - 2338684969, - 1706252112, - 2832707790, - 4196715083, - 4259374257, - 2197477739, - 527382892, - 2858245410, - 3602775656, - 4228936062, - 1071742485, - 2409360031, - 4160287329, - 1238381790, - 2866983317, - 3764727954, - 1784469145, - 772971202, - 1561356690, - 2946428286, - 617878332, - 3205643184, - 3523817991, - 1486574988, - 2997433915, - 2478971341, - 1229957037, - 257495544, - 2041906778, - 1199858787, - 2646437408, - 4246496468, - 1615329753, - 2219021437, - 1840960357, - 1391499419, - 2200011396, - 3036342433, - 3924784046, - 84952465, - 3263060911, - 298567410, - 4062975850, - 3178001249, - 3579592431, - 3492021478, - 4058976276, - 3829583939, - 2882697321, - 3647153764, - 674480111, - 3926656801, - 3606213010, - 1440551037, - 212488062, - 1583406572, - 104638219, - 3152567910, - 168780465, - 2264537758, - 1045042648, - 50632320, - 3810198614, - 4108081580, - 1613749774, - 1962652357, - 2847574073, - 4266093182, - 230230685, - 3544810457, - 3168389148, - 1671883847, - 2658507722, - 80041198, - 1360078168, - 3519470035, - 740064670, - 2398250715, - 2984797272, - 106202416, - 342809654, - 1514292363, - 4017312454, - 91695240, - 337405419, - 524798130, - 3090467670, - 2735871606, - 514016929, - 565091078, - 3906124203, - 58160614, - 1663196887, - 160296268, - 3454997586, - 2185929215, - 3008561930, - 610769881, - 2031259796, - 4292133727, - 4261279987, - 2696845347, - 3502322759, - 3478275451, - 592045032, - 1175893559, - 4152472140, - 1783854713, - 725278127, - 1258164482, - 299666359, - 2318182733, - 4095218604, - 3822784732, - 2898916456, - 2618624414, - 1856438400, - 2899807501, - 1821434401, - 3525301533, - 1190321817, - 3548511838, - 3635017577, - 1339328646, - 3044681268, - 2697186615, - 4186568152, - 236008493, - 601648359, - 1039358086, - 1415995576, - 3227023287, - 3137870696, - 2507760616, - 1575658261, - 4215661915, - 2832000588, - 756723162, - 3627331129, - 4059318684, - 996167776, - 2385233369, - 3370087186, - 3995739479, - 1816871963, - 2142947405, - 4225097007, - 3430635695, - 1018155306, - 3078847579, - 3367977753, - 952299695, - 501848858, - 609312417, - 201968377, - 262515786, - 110883454, - 3996590501, - 868532169, - 2312474856, - 1191322397, - 2432439312, - 1160645660, - 210796407, - 2419767168, - 571667525, - 866873813, - 679011359, - 978341328, - 3755348554, - 4139533543, - 834030431, - 2409994648, - 2017852404, - 1727411475, - 729306795, - 1915581953, - 2156840250, - 189668449, - 1498715139, - 3404084606, - 4289401082, - 504770733, - 672448055, - 2880337148, - 1382033251, - 1933595067, - 3093543884, - 458340514, - 4026211566, - 2764959706, - 1209206481, - 2862409053, - 1404768021, - 4154318962, - 2101216408, - 285628819, - 269934472, - 948399609, - 2031030792, - 687121237, - 338878485, - 3245747553, - 1460004022, - 3583730387, - 4169817648, - 1622389883, - 2647057782, - 513235016, - 3676868823, - 3925914436, - 3522395961, - 1173949459, - 1246155343, - 1819628065, - 1414974228, - 3319178936, - 1648032003, - 372992612, - 1009223358, - 3540457421, - 1973200941, - 1257540703, - 3439797391, - 4015937732, - 4051095938, - 1788038401, - 3028888699, - 2892249618, - 4020327609, - 3442472877, - 1463085644, - 300258549, - 2985416491, - 594069990, - 3099685445, - 3457253524, - 2092807439, - 836899379, - 689841426, - 2829827484, - 2108919077, - 117276677, - 1886069586, - 568953069, - 2349566217, + 1133569810, + 2631336948, + 782153715, + 3201336846, + 631838071, + 2983168385, + 2488817491, + 138437731, + 924063126, + 3540607710, + 2070108316, + 2167491417, + 434036357, + 1432021133, + 4144709133, + 94957788, + 679660080, + 3468279940, + 307374452, + 1973917687, + 1347149335, + 2963091355, + 2396741002, + 2817505523, + 4202675673, + 1406883620, + 2190498162, + 3329056506, + 1323004681, + 4248062004, + 3737353462, + 1429733899, + 3668953688, + 689400850, + 3502322790, + 2315400426, + 124038186, + 4194882164, + 1999808353, + 1707724452, + 3439846268, + 2075405475, + 2785861775, + 3569473941, + 719832914, + 2072039196, + 2590617095, + 2107349883, + 3957510600, + 1162496646, + 2962114534, + 1300460594, + 240394502, + 3044154853, + 1183866929, + 21608487, + 3414611962, + 907026124, + 2466175621, + 4104338953, + 56647863, + 3490584325, + 585253350, + 1773541625, + 3763318214, + 1034154516, + 916870891, + 3104025919, + 3187985771, + 3347377431, + 381142515, + 1606802566, + 3262608758, + 437353550, + 1578303957, + 149421221, + 3608042008, + 3361863092, + 1837541367, + 3716700502, + 3596562165, + 3885057017, + 696365608, + 888073177, + 170835358, + 2643784898, + 3048307270, + 2677804251, + 2293018853, + 205838075, + 1819491665, + 1388816380, + 690842261, + 696985818, + 749153644, + 941841851, + 3662725259, + 385753419, + 1568502917, + 801506114, + 755000676, + 1272570999, + 3901600789, + 1238393649, + 3281418660, + 402614875, + 2874449491, + 1720402657, + 644537099, + 3787686183, + 400335176, + 4149775923, + 651382800, + 1659014868, + 3314643287, + 4038224803, + 86756865, + 2724725866, + 2307744041, + 1006463768, + 2647955090, + 797104786, + 2977598688, + 2606919321, + 895350927, + 1137660647, + 3030761014, + 1376428472, + 4261854640, + 307433794, + 4046778441, + 3221461895, + 2437346850, + 853871820, + 3451972109, + 2428265412, + 3139192820, + 699417211, + 2546447426, + 3646938958, + 321779081, + 4132651781, + 3150897416, + 3322784975, + 3321636276, + 3809206677, + 887152317, + 2725284761, + 3118585803, + 2302426262, + 2923495272, + 808817031, + 2122448795, + 4288522686, + 694121379, + 666217583, + 3456731221, + 2945634714, + 4286515382, + 2584304524, + 196624685, + 2923573990, + 495440887, + 4230033671, + 2919325945, + 1637322563, + 2441024489, + 2066037161, + 1429637865, + 3454747728, + 2992198904, + 2316066223, + 2059728774, + 1641836365, + 3372473648, + 2281518416, + 2027233646, + 2084138389, + 3906451272, + 1822877389, + 1411675039, + 892586370, + 2691798182, + 4171111330, + 1618388932, + 3628305864, + 2112352756, + 2769352409, + 3328390320, + 3547862842, + 1951111225, + 1752301407, + 3950840431, + 3733917062, + 3483625966, + 3961284483, + 1053919469, + 2364245221, + 1762251156, + 2577990403, + 3062140801, + 76894045, + 3323006691, + 3566856440, + 321653469, + 1222582391, + 3906125455, + 3207183462, + 3711704882, + 2803584950, + 1579690547, + 1561335925, + 248277857, + 1511629570, + 4225595872, + 2048236828, + 871098228, + 922796359, + 3165496207, + 2188132731, + 3314920462, + 3899363509, + 1939636489, + 111225736, + 577925601, + 484552355, + 1960109870, + 2716368620, + 3176433100, + 3601674781, + 373094440, + 2397954208, + 507596200, + 3453886747, + 1584313261, + 4078107902, + 3760649751, + 3169407441, + 2241899301, + 2176340613, + 2075366082, + 2166317091, + 2776336605, + 2892757845, + 4053008140, + 606525853, + 3377027437, + 2926964647, + 3454311709, + 3183173766, + 2486185870, + 4254240170, + 657283466, + 1197887077, + 2566237475, + 3361480783, + 3303665532, + 2777540142, + 3481688605, + 530972415, + 1141952332, + 2353730658, + 1567130518, + 1774672833, + 2759099065, + 1145398558, + 1784341958, + 2877327820, + 2283701833, + 2329358501, + 3749851948, + 889304650, + 1407703894, + 9934784, + 1632474019, + 1128381775, + 4157149202, + 901339251, + 1997833079, + 3348345941, + 918882217, + 389368326, + 1785766102, + 1011183375, + 4172425704, + 2970446321, + 3427424647, + 4065890971, + 279599515, + 3540241559, + 2107656992, + 374833042, + 2808540504, + 1133677531, + 3450784510, + 505192855, + 2761197440, + 1878885847, + 2093190460, + 365593210, + 1267461995, + 263440700, + 242490955, + 3436981650, + 70931099, + 4263682782, + 4108319881, + 3082011932, + 3638304875, + 547834938, + 1389281392, + 1165726860, + 3532323550, + 3738090862, + 2792799805, + 895056284, + 1766733271, + 2756468608, + 549128057, + 3658594384, + 3100293500, + 2189838869, + 4240567904, + 1320408426, + 1775420409, + 3106963467, + 2404621250, + 551952367, + 3979317805, + 1851160476, + 3178850427, + 2371135944, + 199118472, + 744433808, + 4252019127, + 827710637, + 3649106065, + 3901895924, + 876059937, + 117735243, + 444923312, + 3958565072, + 3825503705, + 1196211466, + 3964911091, + 1134815494, + 2104701220, + 2438251572, + 2077693643, + 1504095763, + 2972422771, + 1154532482, + 4124853877, + 2246291060, + 2099240332, + 2876187345, + 2798467691, + 1421449937, + 597729394, + 457387478, + 1499153104, + 1356594355, + 342601813, + 2132311138, + 791338786, + 883040055, + 11072812, + 1547956770, + 1127479366, + 1382813792, + 3083564699, + 57757915, + 1401265862, + 2223697341, + 4278517471, + 1442793518, + 1895302639, + 4037320135, + 1850828614, + 2690015052, + 1241674629, + 3116064160, + 845564209, + 25946313, + 4215149170, + 495054992, + 1672810753, + 1204097744, + 3789428306, + 3105344417, + 694575165, + 3452289062, + 1029896578, + 3360023852, + 164477726, + 4194287905, + 3710042678, + 3439994531, + 3530844798, + 3464877857, + 250768659, + 2766091977, + 1692725414, + 3990760155, + 2500143441, + 2288225381, + 1120586688, + 563203281, + 3827538137, + 960944870, + 187284541, + 1096897133, + 1599201624, + 366218149, + 327599676, + 552809359, + 922286098, + 1335459442, + 2540585035, + 583505968, + 2326404687, + 1027286796, + 3070665915, + 4015090928, + 3982905340, + 410023786, + 3395195196, + 1554581956, + 697806517, + 2638679124, + 4147142303, + 1346305603, + 3207189662, + 2321219233, + 3015285102, + 3277202543, + 1000205101, + 992239207, + 3971911012, + 266289826, + 3185455462, + 4205129452, + 2741042765, + 2288302162, + 2924512811, + 3159675399, + 2649659313, + 1431390226, + 3351345753, + 1985322976, + 2504947998, + 471514834, + 3592582267, + 590265388, + 1231874842, + 1822441474, + 3449101662, + 2881651790, + 1492681319, + 2787205950, + 3976134239, + 3773098637, + 2394435662, + 1109809040, + 4231449887, + 864895734, + 4110130352, + 3618915364, + 196919624, + 346361955, + 3415490775, + 405335562, + 2276418570, + 1980412754, + 2625528837, + 2125893447, + 3628088871, + 3876730342, + 4116584183, + 320861185, + 2570392205, + 2756479823, + 4260304563, + 3722879962, + 3046178137, + 1720565098, + 2770560277, + 912014283, + 1154114755, + 2398392593, + 1783089108, + 1546460786, + 204668200, + 3121352718, + 3639528929, + 2152218318, + 1312788752, + 568247726, + 124319110, + 493021388, + 1547027038, + 2251559592, + 133996719, + 2144224536, + 773611901, + 3955830941, + 410084606, + 4066825113, + 2042725943, + 1466951870, + 1930121911, + 3751731496, + 361596267, + 2154918635, + 1958735079, + 4253100758, + 1798276982, + 796014148, + 3181768228, + 2472538735, + 3746473428, + 3164354638, + 3774315684, + 2820210983, + 268279330, + 2116129475, + 101727991, + 3223098445, + 4163090862, + 1977979199, + 2069783554, + 3630469093, + 2808477120, + 2394277801, + 4273755972, + 3873756964, + 667433884, + 3543325428, + 948678810, + 3523633257, + 1065600508, + 3800848725, + 1630971403, + 2177742422, + 2169259592, + 2527663044, + 4265041250, + 1500582651, + 3783705635, + 1219124367, + 3964508274, + 1843670654, + 3654084854, + 171050297, + 664491172, + 4182800651, + 194504457, + 2724588059, + 803791158, + 2335734531, + 932536911, + 351277930, + 1745733643, + 808433816, + 3277785618, + 2268330899, + 4176006850, + 2783846935, + 2846749143, + 341760272, + 850653006, + 610136509, + 2125879879, + 1340989342, + 287096537, + 1590747331, + 2427885510, + 751554276, + 2647150171, + 4237391419, + 3763136346, + 3877297962, + 3014249201, + 3382390003, + 1631535657, + 3892604475, + 113578915, + 3571572766, + 3302253849, + 3064374651, + 3206349889, + 2304578624, + 1103680128, + 4182756681, + 353717569, + 946679631, + 112641202, + 2779609013, + 1652604456, + 4080136355, + 3861737453, + 3360215346, + 2959948905, + 3936470587, + 496941470, + 3375407560, + 3321262606, + 2335640196, + 3420603701, + 2677533993, + 3790770573, + 2069993378, + 2151268985, + 2625185401, + 1011602153, + 3094312228, + 2220111813, + 2329340819, + 3911596598, + 3635139691, + 4146685925, + 3763946389, + 3210305485, + 3929977707, + 4213604703, + 1070862664, + 3587716477, + 2324660616, + 1605218958, + 2500306035, + 3259861355, + 500582436, + 645426566, + 1542921921, + 1183594999, + 1566358704, + 1552607459, + 2615143547, + 843226843, + 571961840, + 2857771584, + 465828866, + 601724475, + 3630549876, + 4084906907, + 2289304457, + 2558936285, + 3620204538, + 800809737, + 3744817645, + 2527129818, + 478466236, + 2168202296, + 2362423972, + 4052881602, + 3740065955, + 230857211, + 2241446575, + 1087691854, + 3587787536, + 2274741322, + 3417159560, + 4195474158, + 3893812599, + 3619955180, + 1578592658, + 2342460637, + 1683392027, + 2424908574, + 1447503852, + 1685376698, + 3466313005, + 1339474889, + 831909323, + 4010134235, + 4003025756, + 3647011186, + 3782079043, + 1160932306, + 3494656035, + 1611197715, + 3567142399, + 2890077475, + 1602408813, + 472657405, + 494625447, + 106508994, + 3347756193, + 3240199870, + 1273640382, + 26328612, + 2157031319, + 694426956, + 2082449907, + 774225508, + 688955095, + 4171164634, + 3058172858, + 61808708, + 1890125188, + 3204378508, + 4036249455, + 1905152152, + 759081694, + 2643053191, + 2246357160, + 3577076613, + 3576965704, + 750521574, + 1446725640, + 883595370, + 1475257078, + 2754937020, + 2532625957, + 3976380301, + 4115602225, + 724210016, + 2743069931, + 2983501977, + 1884538028, + 3328099170, + 1306827079, + 1015926215, + 114388424, + 4148184684, + 3881534088, + 2154958149, + 2450264065, + 3423207481, + 3639858273, + 3685208508, + 2223382173, + 4143454606, + 3912117622, + 467726970, + 3747956705, + 1746667801, + 3642126670, + 2068865364, + 537066608, + 2219668459, + 3421188390, + 648060462, + 3174434439, + 1127238608, + 1260696503, + 1992801667, + 34669631, + 17785994, + 4172341196, + 2469189054, + 457767139, + 3315289112, + 628490136, + 1850498990, + 4132167805, + 1156111015, + 2607662061, + 3405842782, + 2122074520, + 2366415335, + 1017403959, + 703133758, + 1760782611, + 3950005638, + 2807076778, + 1892815587, + 4156622436, + 2949253414, + 1178452253, + 2923126924, + 2587988410, + 3219952958, + 3779832174, + 14674843, + 1178460563, + 430504745, + 1826964582, + 1641653247, + 1317393533, + 4018237358, + 2188499822, + 777463525, + 3341084563, + 1785546, + 1713958898, + 614600891, + 3882370790, + 3128770701, + 1747566567, + 3560074127, + 1039036586, + 812324347, + 1619256297, + 2502372887, + 3670497706, + 3042560223, + 1123065546, + 2583224663, + 2948298407, + 3021771238, + 1862104345, + 3597645982, + 3599995263, + 4030691158, + 2123585365, + 1992908288, + 733281351, + 3813398073, + 1870147524, + 3504460367, + 1736758812, + 3156067720, + 2750377620, + 2363933980, + 3310351260, + 3940047893, + 1578662409, + 294427372, + 806089271, + 3920958878, + 3896806981, + 1772829820, + 2344488989, + 1265846332, + 475622043, + 662357186, + 165396410, + 2749199230, + 2183375655, + 3937428224, + 803615637, + 509709712, + 3873466974, + 2172599828, + 527606613, + 40303534, + 2699653373, + 38353592, + 1822726429, + 3768380582, + 1927148869, + 1213421100, + 3186182532, + 1913248628, + 511826850, + 3822177488, + 2419777463, + 1875814864, + 817855949, + 63454370, + 3947190847, + 2325675629, + 3285547227, + 3102442945, + 1841049121, + 1444548056, + 419067902, + 1590144736, + 265849894, + 1789005243, + 1424217140, + 1030839952, + 4257727488, + 3034123831, + 1007958800, + 2610961502, + 2970216183, + 3058962800, + 3615507445, + 48179678, + 3002918597, + 3441672846, + 566382759, + 110545859, + 812351046, + 1870470469, + 1245308926, + 323897118, + 2936813874, + 2674566500, + 219377802, + 1086447090, + 1786499125, + 144398431, + 654537864, + 2395886453, + 1593335314, + 2828518456, + 3459698478, + 1787827114, + 3810757686, + 2425988611, + 4178554808, + 1418362942, + 2480692317, + 2288666440, + 3459457205, + 1653714553, + 3731039596, + 865008229, + 2292709249, + 3261752359, + 2470550915, + 1107107355, + 3714430281, + 1121490540, + 293329563, + 2146244525, + 3054248315, + 2798515501, + 2715428994, + 4123553851, + 2453465789, + 4180585134, + 311331998, + 3282685518, + 4196003076, + 143646639, + 2050741487, + 1130798347, + 2188270898, + 4182413915, + 3889327380, + 717038134, + 1009153000, + 1280770362, + 4264392325, + 605672602, + 2896879418, + 957372330, + 1032615443, + 2621739326, + 199467395, + 4230448698, + 3549149493, + 521016121, + 2846462559, + 274724362, + 2227908916, + 2967834387, + 3726412279, + 579648177, + 1013096830, + 3301766775, + 2500389183, + 4006393523, + 4012932430, + 698395729, + 2204302980, + 3219551057, + 573519636, + 1909653791, + 4023286769, + 123080677, + 3736361345, + 3419621755, + 2826723113, + 814723968, + 1073700150, + 2563994012, + 1474276091, + 3921991859, + 122646182, + 2077323111, + 1103992836, + 2139345441, + 3853409049, + 2154582008, + 1243065291, + 500043632, + 1292680869, + 872953705, + 516336124, + 2294151897, + 4067812335, + 1088621384, + 121581282, + 1270078256, + 995339090, + 2544655137, + 4275700318, + 2370560145, + 3170631154, + 4147771473, + 1641718072, + 395411217, + 3433033467, + 1661882257, + 3987552305, + 3985644838, + 2936838991, + 438443950, + 697124611, + 2325803035, + 2273501928, + 533683729, + 13177371, + 747666718, + 3544100262, + 3873810886, + 3732873673, + 1481766331, + 1348019729, + 38996361, + 1620496471, + 2700207084, + 1957448080, + 3321330333, + 3403978147, + 2542259222, + 1244737766, + 106824772, + 2889180242, + 2782979572, + 2208136988, + 1135795625, + 3243972655, + 1477336913, + 275111457, + 1786613441, + 1659228560, + 2054362186, + 196128711, + 816620407, + 4083877371, + 3716624405, + 1336671594, + 2764677319, + 801329848, + 3366317834, + 1011799900, + 3574426088, + 252138839, + 2894646252, + 2921304573, + 2462859304, + 229342266, + 3046504243, + 1508719293, + 665505246, + 2469490042, + 263479099, + 3365977541, + 4261148468, + 3654189976, + 3936839291, + 3988208825, + 3988430557, + 1451897464, + 3965115052, + 3686032884, + 3415468004, + 4020497124, + 1210122896, + 2111071228, + 2570070469, + 3947895940, + 1503190051, + 3504941117, + 2530459359, + 1800982976, + 924077878, + 41849062, + 1222720650, + 3158856288, + 1788061406, + 3691114073, + 1027122661, + 3321318213, + 3555481230, + 3531688820, + 214117260, + 1346508165, + 662442340, + 3812607839, + 2052640705, + 1608986362, + 3290855499, + 1643300874, + 1991073139, + 3768055525, + 868909665, + 1931155253, + 2551164447, + 683039992, + 2130756571, + 872270978, + 742932607, + 3602591891, + 3939291157, + 3967503640, + 88820425, + 4228851002, + 3346700864, + 718168753, + 1679949838, + 1011812939, + 4131325949, + 2366209691, + 1256096471, + 4274545534, + 88884781, + 857900341, + 614948097, + 1354041485, + 3050802749, + 446338946, + 1992706255, + 1701237600, + 1504018549, + 1341283033, + 190528449, + 4201618823, + 427878072, + 3521422895, + 3171400283, + 2453520284, + 2715249950, + 2878018015, + 407841154, + 1076646439, + 2902096326, + 1119626361, + 2644871576, + 3293596858, + 1974815928, + 1844661750, + 3463913129, + 2148341342, + 1291573243, + 2169246810, + 4121523483, + 1001828258, + 1201094285, + 2768247741, + 1187741668, + 2584658467, + 3298403928, + 19508794, + 2376541132, + 1834240070, + 2795223531, + 1569676009, + 2083566117, + 197357026, + 2187510552, + 735841364, + 1676166312, + 1470742315, + 1775423350, + 313697723, + 4150418093, + 1340236335, + 244289584, + 2419636137, + 1468768510, + 3948651668, + 4190434782, + 4240184620, + 1648085427, + 236983377, + 890850103, + 4132623272, + 1702226328, + 1275783657, + 1282323970, + 1068123219, + 2507371645, + 3567002166, + 2326254713, + 903986722, + 4275863595, + 681934646, + 3449788083, + 3658543764, + 3971267096, + 906890651, + 3220537887, + 3721238425, + 3424824919, + 4071298393, + 2350348033, + 851103835, + 308738784, + 3633342279, + 3294051464, + 60850237, + 4205293718, + 112318384, + 2392677891, + 4245426611, + 2813800938, + 544585705, + 862804086, + 635702611, + 1037318247, + 3062389067, + 1788723107, + 909046190, + 2633211481, + 1512124210, + 219688775, + 208669567, + 2341111326, + 1558771297, + 3962134609, + 3793701941, + 3678482598, + 3083064385, + 2224089049, + 121834348, + 3974742960, + 3285910891, + 2301078529, + 3991408934, + 1754131199, + 1115088030, + 742363340, + 1940874870, + 3815841729, + 3751295025, + 2438487791, + 505244872, + 2737497734, + 3686088533, + 3642212863, + 745389967, + 1171532550, + 1037089173, + 1222170147, + 3339498780, + 2420183845, + 1812185882, + 1685491860, + 2054045371, + 2916731859, + 625306391, + 2885097536, + 1531527755, + 881885849, + 4123937969, + 1223959847, + 2997456354, + 986868947, + 3499204336, + 2002259460, + 702456427, + 2180569440, + 573224210, + 3359535553, + 2265103812, + 4007182161, + 1269646680, + 3540842839, + 796051848, + 938241882, + 2538303685, + 2742240808, + 143742684, + 1113882324, + 2339965914, + 3861371091, + 1940827720, + 373043434, + 290172183, + 3309138211, + 2228544253, + 2697368504, + 314268409, + 3275936717, + 1292638603, + 3619702424, + 4134658461, + 460321774, + 3287938469, + 1056154866, + 176670850, + 21652801, + 1897619182, + 1048386785, + 3446694205, + 759789706, + 114313839, + 2656037303, + 3619510848, + 4025392301, + 2133557464, + 701572241, + 1063247283, + 2433408287, + 1329294123, + 3455774261, + 1060648990, + 372371830, + 54152053, + 4157273412, + 1028934374, + 1059536047, + 3705266340, + 2249471172, + 3723179498, + 1685144370, + 3532165296, + 426031379, + 3992264848, + 3558187874, + 789327393, + 113797115, + 3197466265, + 1846132308, + 3662284834, + 373999393, + 3527638544, + 3168581066, + 1873953485, + 1547610606, + 4188855686, + 3909799060, + 2439098516, + 1366914413, + 2552185747, + 3438947887, + 164270951, + 367726843, + 464460365, + 3684470274, + 2811443509, + 2800117652, + 577716900, + 2360729125, + 3199339203, + 2042468020, + 322152071, + 350449026, + 1338453488, + 2169901536, + 1137834913, + 1224674594, + 819627367, + 866288223, + 3684373287, + 2802084500, + 883000071, + 2124730005, + 1794186521, + 1843025624, + 1107572762, + 1553821109, + 2255976928, + 2971962493, + 1294016394, + 2779781930, + 1121528516, + 2599103154, + 52550939, + 1715784095, + 172080229, + 2909340023, + 2925801104, + 2758545802, + 2591511640, + 2537648991, + 3218650315, + 3620978015, + 2091529948, + 1908561691, + 4140639213, + 1468559118, + 3031446434, + 1538303433, + 3024702023, + 931817456, + 3315385244, + 530706340, + 776942735, + 1066889660, + 860858398, + 1380983258, + 3488107254, + 2352861366, + 768524865, + 3324839876, + 2985439364, + 2632570311, + 1269085635, + 591371761, + 3614267995, + 3634334398, + 494364876, + 2201954801, + 1822851563, + 912761258, + 3560975524, + 2823473944, + 2726516653, + 3900329480, + 3046312346, + 3202027455, + 3749404319, + 4111460447, + 3394432067, + 845091851, + 3547437620, + 2438586236, + 891753776, + 2658014652, + 3263078955, + 3181133040, + 498702842, + 1919031583, + 1885259485, + 1033195211, + 2152110158, + 2916981319, + 3597923226, + 963475388, + 2390133552, + 1279019949, + 1532292872, + 3533828808, + 3410363134, + 4086929604, + 2384284137, + 736527574, + 921831322, + 978761510, + 3581033599, + 184754679, + 1142912287, + 3579159444, + 3754076798, + 3195299498, + 3924528503, + 3367661132, + 2664527388, + 3060833118, + 87824852, + 3341591982, + 1787431422, + 2190200189, + 724746657, + 2362957481, + 1893647787, + 631707083, + 3600263631, + 3112000291, + 1195347251, + 1980784313, + 1587897131, + 1505502575, + 730808447, + 2077493753, + 1766424589, + 4169095382, + 3023491880, + 1907255180, + 1400246919, + 3439802039, + 2353421484, + 2598206410, + 241608112, + 2800597464, + 1865113190, + 2692612807, + 655943539, + 3036801653, + 4273840934, + 1531071836, + 1388648504, + 4046738659, + 2566906137, + 3190630241, + 1259094505, + 2588960622, + 881378109, + 4029007789, + 1036716322, + 1440834140, + 1045545482, + 1611580537, + 3075000012, + 3160852091, + 125510553, + 1948935661, + 2528899056, + 1349973885, + 790409740, + 933146257, + 3340496167, + 2161701913, + 2203562833, + 127499997, + 2241686850, + 301650274, + 1189877278, + 2069676804, + 2149373712, + 3925298050, + 2363633783, + 316935596, + 222701686, + 1656250453, + 2585556113, + 2344566774, + 1641407783, + 2733425137, + 3458390692, + 3862744868, + 2081559814, + 1101703145, + 4213220732, + 2871617353, + 3821441284, + 1284486082, + 1295341251, + 231768815, + 3688216587, + 434412918, + 2085597609, + 1178947359, + 1499668986, + 332651835, + 848688224, + 783466121, + 2232129524, + 1984278527, + 54161279, + 480180313, + 1460924584, + 2764823460, + 1193698271, + 130579892, + 4246187421, + 2272443660, + 3890368592, + 3817991842, + 1891017699, + 3116376337, + 1838641006, + 202212708, + 548912086, + 1276402467, + 2627209063, + 3559295002, + 136668580, + 1463185340, + 3996451142, + 1195997589, + 3703309546, + 966209579, + 1495349328, + 3818068448, + 998187110, + 465377317, + 2740367678, + 393280342, + 1284923500, + 1224680970, + 2296772643, + 792366508, + 1312886999, + 563043397, + 3204722388, + 2362148129, + 3991589429, + 3812760429, + 2376309774, + 3955295822, + 3155646085, + 718545332, + 426415853, + 160354087, + 658523882, + 2523118731, + 1301823541, + 493847625, + 4056626119, + 2397998886, + 2294563568, + 1640569944, + 1159193321, + 1855737904, + 2179119691, + 2264199463, + 1222836898, + 3897707559, + 3276298930, + 941543833, + 3250950773, + 4256182925, + 3233880416, + 1087109968, + 952749286, + 404554758, + 1410748193, + 2627152250, + 979574373, + 2707691339, + 1014678447, + 2734357605, + 1706931772, + 1748581040, + 448294925, + 592225379, + 4161750627, + 3212838882, + 412410468, + 4235477551, + 1807215035, + 542939420, + 1486293258, + 2157680940, + 2605658897, + 3385782162, + 1415388253, + 1442117385, + 222759534, + 1396810746, + 3570065478, + 2736080078, + 2834358400, + 766728704, + 825544741, + 2946948174, + 2901144875, + 3302059473, + 1587854945, + 924399260, + 4038690247, + 3466315969, + 1867950179, + 3055097185, + 1209192020, + 561463698, + 1873204694, + 2398003028, + 1880272834, + 3725511642, + 1620394386, + 1896123040, + 707343795, + 3089248063, + 3628971822, + 2382385947, + 237300502, + 3375790143, + 3131500814, + 3130912940, + 810002204, + 2443950519, + 3073421036, + 2776473768, + 1723254820, + 480346159, + 2162458220, + 2901340432, + 1459347108, + 4157536165, + 1658112904, + 2653696906, + 3483498757, + 2172581712, + 2945148806, + 369575851, + 2708837017, + 3017439659, + 572356605, + 1687730653, + 3303917109, + 4185775943, + 1542629699, + 1823588861, + 758034556, + 207137717, + 4118907156, + 3551679965, + 579289490, + 130012884, + 3056847755, + 3298176206, + 1631448691, + 3883850548, + 1781666855, + 226013435, + 1191195284, + 162910909, + 2421225558, + 3472833198, + 3105014703, + 2998279186, + 989511739, + 3122448504, + 4031112897, + 798915782, + 3124120612, + 622880434, + 1550632402, + 3582513015, + 1897853778, + 3955800001, + 2843608758, + 1783793648, + 1234540483, + 2841204289, + 3078276811, + 1897041667, + 2644748191, + 2075116399, + 3566638118, + 2545072242, + 2705581107, + 2034593594, + 1102733458, + 563102160, + 3562036038, + 1559012378, + 3081027624, + 4277200811, + 29819624, + 952516720, + 288733188, + 3944002280, + 2580949355, + 2180907448, + 701845603, + 147266524, + 370348008, + 3271320890, + 2691393009, + 2383884999, + 3524671179, + 3939649284, + 1745553778, + 3201374283, + 1372111019, + 3219709954, + 848485081, + 667408054, + 3285357028, + 1335687583, + 3644214140, + 2613006844, + 4205559322, + 1312637533, + 1614630429, + 1683627889, + 1208640864, + 2834070995, + 3592578844, + 2358819465, + 1995443398, + 3413826769, + 1776126298, + 1410383645, + 2955631068, + 2993512768, + 3236365752, + 597697850, + 3130855667, + 872085307, + 3088552158, + 3059305728, + 2016688594, + 769456062, + 1704353403, + 2894459022, + 3397853480, + 3442669413, + 2849401449, + 2439338225, + 1765298087, + 3770362637, + 2012197480, + 1236698002, + 2547133981, + 3583709582, + 1222346033, + 66929813, + 1810978782, + 140921718, + 147006733, + 716546109, + 272190672, + 4270198935, + 4112878356, + 3459132487, + 2205334679, + 2655240589, + 3460427483, + 4004166046, + 2733896896, + 2662276672, + 1235355460, + 2080490490, + 3835662375, + 2012775662, + 3831435531, + 896042556, + 847436078, + 2690167548, + 2480708618, + 34486478, + 780307438, + 1206065597, + 3684584372, + 109239588, + 1177388702, + 186055243, + 542130697, + 431317368, + 4172245930, + 659717801, + 3115120181, + 3389111917, + 612902400, + 3093454605, + 994194783, + 3302496429, + 2727804282, + 3326713788, + 2909645217, + 4081309189, + 3915134273, + 1723403965, + 3538120244, + 3346690734, + 173973565, + 3745427359, + 3605615994, + 792777340, + 3898488212, + 2851691613, + 1310137864, + 3972391875, + 2800498965, + 2126178186, + 1804903633, + 1573085172, + 3765347540, + 1947401562, + 2004990638, + 1992294724, + 794994545, + 3989725162, + 4052205226, + 4275133463, + 999898041, + 680324841, + 653725316, + 4071639349, + 413310299, + 1532627194, + 1109186282, + 1454507986, + 1285781763, + 1986139893, + 2716119740, + 1215969667, + 4236644162, + 4222317454, + 3465516720, + 235341472, + 2665785383, + 2109288152, + 3865225429, + 3901456858, + 3743371291, + 2847911979, + 1626006535, + 2457976815, + 3706719872, + 2633385013, + 2583230327, + 4011068025, + 4054333527, + 693261486, + 2607135884, + 2466950569, + 2361552917, + 3954587268, + 761811134, + 3009769300, + 862264745, + 3029405930, + 2092574523, + 3841904849, + 3016847242, + 3730784897, + 504024595, + 2701889049, + 1117738628, + 3634064449, + 3718762927, + 1744136662, + 576863494, + 2218173873, + 1287233187, + 3397783039, + 4199567601, + 796784509, + 1140293913, + 4199890298, + 3894449063, + 1599629591, + 534382393, + 2188664199, + 1188379586, + 2149173053, + 2940426496, + 1090797566, + 659007198, + 1390171321, + 827457041, + 1830598637, + 4268312395, + 2538285212, + 3432324187, + 2356562943, + 618449365, + 59317777, + 32078910, + 1432616493, + 594046380, + 4005397788, + 406342838, + 2458307254, + 3622090071, + 567965897, + 2332609182, + 3913109946, + 4262950919, + 2223365555, + 3342426181, + 2937615906, + 2775839330, + 789924042, + 2547858296, + 4095742216, + 3553569019, + 2794397026, + 2669775846, + 3492940883, + 767973357, + 2223966883, + 1943349344, + 2397350813, + 1721534717, + 2284745964, + 3407740781, + 2117904262, + 3232034050, + 16565495, + 1931391360, + 3733107842, + 4226045949, + 4041262579, + 808886571, + 866728068, + 796865648, + 516939986, + 2539355262, + 3942135316, + 4094999605, + 2693105985, + 1495848441, + 2649483417, + 2160589585, + 2962242407, + 3100995834, + 3301101621, + 2928206991, + 3820618807, + 1087878038, + 2958883737, + 2394205787, + 1361447694, + 2272811100, + 485504015, + 3294843255, + 2682287431, + 678219980, + 2324071192, + 3963482109, + 3007126636, + 1199614183, + 3164538155, + 4161980987, + 2778925238, + 62318529, + 2375539054, + 1469419376, + 1541960838, + 4137797268, + 3249238197, + 361601473, + 3415181950, + 3260509788, + 22562270, + 1067118268, + 2385726257, + 1385555530, + 1365689695, + 812527635, + 2566479517, + 4102252154, + 1339610213, + 1617514414, + 803772772, + 1830781868, + 3612102712, + 3759491433, + 4122435791, + 2036628832, + 4064824538, + 1405949203, + 1439853420, + 3933859276, + 1375799746, + 1727029493, + 3830298109, + 3621177597, + 776904374, + 3379551454, + 3354675446, + 2449813947, + 899493279, + 305076564, + 2320614536, + 2993808751, + 947776875, + 2833196325, + 2012448246, + 2485862175, + 454484877, + 1523595652, + 4242593258, + 372556354, + 1103298284, + 1648831427, + 4146669347, + 3328164580, + 988612502, + 247392264, + 1866213683, + 4150811724, + 1147567895, + 1034212097, + 96214714, + 2690679554, + 3567190202, + 383537027, + 305717591, + 2233806779, + 1230730881, + 1081378737, + 3219338584, + 3352036676, + 1759154651, + 410897584, + 2266534968, + 20622694, + 966731333, + 3881030565, + 1681142483, + 4180658946, + 508491356, + 2075220083, + 862057085, + 3811486734, + 166193918, + 1952208076, + 287050898, + 4108801579, + 3634814657, + 1441695225, + 4165943170, + 985297899, + 1950886440, + 326103896, + 52511107, + 3840171112, + 1544404583, + 1483779206, + 2509714735, + 4191272841, + 196893190, + 1752138834, + 1387920625, + 3203092715, + 3305714296, + 4020283571, + 1033783085, + 873274953, + 2512442169, + 4050706108, + 50652702, + 1076717898, + 866310686, + 2170861319, + 893749800, + 2773398104, + 475134660, + 2354613509, + 2314268498, + 1221954098, + 1136667699, + 1313435548, + 887229560, + 1360766488, + 2670668096, + 2341729023, + 1931118167, + 3373726808, + 1111218187, + 3520098747, + 1688835878, + 2940851476, + 2064836287, + 3968980039, + 3836060133, + 2942296019, + 484909936, + 57105423, + 893060132, + 3098559004, + 2646028647, + 1116334271, + 1386055053, + 2672179664, + 3465976247, + 2445951289, + 3624670006, + 1585735163, + 2706230664, + 2994891068, + 3515469286, + 1276669612, + 512187154, + 3497635911, + 218620967, + 245089135, + 4175591651, + 4155493638, + 2748674032, + 1833505365, + 2012082402, + 2709336095, + 2120857657, + 137903528, + 488916124, + 2781208804, + 2409478644, + 274592315, + 199488251, + 2342346754, + 3601780192, + 1121367083, + 3549771569, + 3076621099, + 567283312, + 3387958196, + 2030339283, + 1104740149, + 612459390, + 300767243, + 3050650445, + 2239182768, + 4159761765, + 2869764157, + 634694727, + 1106345361, + 2997451119, + 1843299522, + 430102260, + 526441730, + 1780104678, + 367387529, + 478601662, + 2464829687, + 1470568684, + 59858427, + 3322874870, + 1861332380, + 4272110444, + 2809523403, + 592218878, + 245752719, + 1160055608, + 2650328653, + 4116988558, + 2035975860, + 1888310751, + 385128435, + 705277707, + 2618129743, + 1873449642, + 2767331965, + 2978152915, + 101342577, + 496164241, + 3628094899, + 3617214481, + 3276401486, + 2823749490, + 3226661007, + 2505966715, + 2070046503, + 201965634, + 992372236, + 808827712, + 3757676124, + 2428492087, + 1976499986, + 374480562, + 1080514793, + 2981903210, + 2278910388, + 2881090937, + 1587947770, + 2995760606, + 4065642844, + 1419256438, + 2879122696, + 799732699, + 2237576112, + 2722571981, + 1945610765, + 1061221696, + 3737822608, + 3766401804, + 1794205198, + 1324118794, + 1406627203, + 1246070059, + 1663528511, + 1697199427, + 1725153900, + 1644109777, + 1555884090, + 2104188396, + 1983559758, + 410269405, + 88182577, + 2259001736, + 3545896451, + 1498254313, + 158757369, + 2086803021, + 1006471632, + 1388265058, + 2489082752, + 4121338419, + 2933397258, + 1328272891, + 2440478606, + 1874429446, + 4165076143, + 3618125551, + 426429311, + 3523227097, + 2221326670, + 1036420538, + 3084730068, + 2249454606, + 3627764167, + 2906922652, + 4069859614, + 3551319928, + 2008056501, + 4263883938, + 805474483, + 414460063, + 3631091874, + 4255385897, + 3566701974, + 3056142974, + 1412413858, + 1628335284, + 2988130741, + 1804322043, + 1260149640, + 313631319, + 1940664462, + 1251074951, + 142103685, + 253384940, + 3517416389, + 3340640425, + 426880986, + 3294484335, + 635363293, + 268138849, + 1492613474, + 4200722240, + 3285686499, + 801295374, + 2024943475, + 590788678, + 4058601973, + 2569141816, + 4203227487, + 3873029963, + 2938957765, + 2653323416, + 875351891, + 1225934624, + 3959624149, + 2491580758, + 2130038205, + 4156378359, + 2785882188, + 734574419, + 1648103757, + 3995559913, + 2769178131, + 715734349, + 851342715, + 4066600521, + 2873167910, + 367737619, + 2708556266, + 3095462186, + 2954581914, + 3596166923, + 416437171, + 3630899889, + 2652177241, + 4082498041, + 2092525793, + 4097981775, + 1798161545, + 921570876, + 2954127398, + 2903455651, + 2304798239, + 1258114130, + 3817192020, + 2909483597, + 2182250255, + 1650253384, + 1959237900, + 1275159459, + 3262458111, + 1272009836, + 452811324, + 4207284298, + 4014068399, + 2116331651, + 3821668629, + 2218821094, + 1832698014, + 993485941, + 3496889636, + 2641214130, + 1989726970, + 3632025474, + 3072807154, + 871546351, + 2112654715, + 3554921834, + 3035598613, + 3203667447, + 1926566053, + 3703963219, + 1744429280, + 2894885223, + 1619369957, + 3567760659, + 66604019, + 3634627360, + 1775619354, + 669243863, + 345554459, + 3410469540, + 1155755489, + 2545915023, + 1881645052, + 3014832333, + 991894682, + 2556172243, + 3344954219, + 1093682626, + 536721455, + 412887158, + 1927162080, + 598758569, + 1718574019, + 1056186104, + 3316535817, + 3595128167, + 1130595079, + 3859435692, + 909947430, + 1719271591, + 3984005498, + 1953575959, + 3439367835, + 1566599034, + 2942150633, + 3026742323, + 2447170232, + 3686824848, + 33431557, + 725397174, + 2320663765, + 1675683651, + 2299446941, + 3516433253, + 2048939543, + 75279946, + 2544154794, + 3300029642, + 3032144243, + 2785830887, + 2021781530, + 418522190, + 2390722364, + 197680486, + 1642831997, + 1118262868, + 1200602067, + 3464739661, + 515926185, + 1725239910, + 3994742774, + 3240728600, + 3145738947, + 1844532555, + 1620264626, + 4241585699, + 1317499181, + 572389244, + 717366235, + 1894941465, + 2632625765, + 1146787696, + 2682002800, + 191358041, + 1139509005, + 1281516738, + 2167935821, + 144366517, + 3850560313, + 2955928604, + 2476854189, + 1240245623, + 1201598792, + 3315121239, + 2067079714, + 2242637086, + 2647850477, + 3701580427, + 3720909733, + 1981567187, + 2939632674, + 3130494037, + 2236040041, + 4000430650, + 1741562234, + 2404004263, + 1683735404, + 57955428, + 3003892817, + 1345733216, + 4112811741, + 3929418066, + 1702502146, + 1563779715, + 131125957, + 3456434831, + 2711946360, + 1514662008, + 593277188, + 2310980037, + 2627253234, + 2196991086, + 734788659, + 1638451151, + 2011170924, + 2234624709, + 2644747684, + 1442906543, + 3186977507, + 3041580333, + 3056574820, + 3726946928, + 777432165, + 3096870618, + 2958583174, + 3198704532, + 968654077, + 2339592888, + 631523839, + 3180919153, + 828636972, + 578695105, + 2899843141, + 3000388753, + 3269720758, + 3037015517, + 3799598414, + 3149305575, + 2046835794, + 3530890716, + 30989298, + 2186510021, + 1179096535, + 2221009982, + 338766029, + 769504603, + 3971239377, + 2393081975, + 1544565430, + 865242093, + 3393553101, + 3524464856, + 3304062974, + 1546646620, + 3279691371, + 178822578, + 4081273713, + 88444191, + 2680632909, + 1275199257, + 2416414254, + 2419761020, + 3715897230, + 132751851, + 1119529993, + 1004169874, + 495930835, + 3413915087, + 899768725, + 3645578154, + 2499698498, + 132509091, + 25904922, + 3287880660, + 788515331, + 642323673, + 3147546403, + 3581174260, + 979602099, + 1611369165, + 2161460814, + 1095063311, + 4182557998, + 958677367, + 3492305778, + 1557372251, + 2654290797, + 566444622, + 2701083822, + 2781307252, + 1273578767, + 1387975446, + 597850559, + 2236234519, + 1466168533, + 3557657361, + 2574663738, + 4108434229, + 162028021, + 2621084169, + 403011375, + 1391061643, + 973642355, + 972433280, + 3904424547, + 1591050358, + 3027468192, + 480562739, + 847391571, + 10278541, + 891807531, + 234892969, + 1990103246, + 2718435782, + 2962618312, + 2457477588, + 2173705582, + 2840711601, + 359129634, + 1862207218, + 3179005355, + 1645874306, + 679472772, + 2797899978, + 893909309, + 3298150180, + 2373596716, + 845944576, + 743626020, + 1101645480, + 4118046352, + 3085126771, + 190441990, + 1429251749, + 3631205174, + 3554760855, + 4126353549, + 2783261431, + 2895927005, + 3712938561, + 3519916684, + 3954611223, + 3504723371, + 2842753092, + 570258870, + 1757758568, + 3191712884, + 959844677, + 3815947765, + 3894098339, + 4252794303, + 568847337, + 14599453, + 3247617266, + 4256259025, + 132921313, + 611627952, + 461842544, + 721786743, + 235906119, + 3838181118, + 2693917876, + 3584801849, + 1303671253, + 2715956398, + 2478140733, + 1156883352, + 304296362, + 4257481701, + 3383377199, + 2816549488, + 3609758773, + 965337774, + 663463971, + 2101116389, + 870118473, + 3961827451, + 1411666912, + 4042208195, + 1437767680, + 3011320673, + 628908699, + 3715862090, + 787455013, + 215407986, + 2354427551, + 3501402624, + 341761723, + 2789621258, + 2795910531, + 2196948999, + 506787756, + 2444762992, + 882455964, + 1775227861, + 3463655418, + 1613425878, + 1710055679, + 2954483466, + 428135061, + 3208103369, + 356408692, + 339078074, + 2783728411, + 1608672253, + 3468998955, + 1715268362, + 1775704366, + 2095354627, + 1816748520, + 630996641, + 3054793936, + 1376617622, + 2095298775, + 62048120, + 4177859804, + 1899791126, + 2051127667, + 196664139, + 3319551346, + 1662947862, + 258417178, + 4038741968, + 400172122, + 2774932852, + 1935359703, + 2920156957, + 70999081, + 2298111845, + 3155118664, + 954252611, + 3035077780, + 3365721841, + 3259958165, + 2966262086, + 3966771258, + 1664706885, + 1549210642, + 644267342, + 3625779475, + 35847756, + 4268504441, + 104221147, + 3793167343, + 1434898955, + 516380452, + 305714056, + 3997280948, + 3452590585, + 3101574474, + 2438551436, + 1487302239, + 699799430, + 1896565295, + 179635944, + 3577458582, + 2390294577, + 3440161015, + 1366242881, + 2623409222, + 3227684446, + 1771283490, + 1860070074, + 2525129905, + 639424465, + 3866671198, + 2583778872, + 3087668725, + 2565874762, + 4124409183, + 1716978878, + 2495926535, + 105275674, + 504654616, + 439824866, + 139092645, + 235256347, + 2052436704, + 3482201219, + 1668293469, + 3987504902, + 1030894846, + 1802687424, + 3849872340, + 1729194708, + 628020486, + 2758654785, + 3275824595, + 3396548009, + 2947249119, + 2719480091, + 2248726437, + 1528548653, + 981143750, + 3855057227, + 1889465902, + 717326364, + 3888793792, + 273177536, + 3318606608, + 2015221724, + 2498667772, + 1776840513, + 1340254524, + 2212922926, + 2588648640, + 1204650460, + 2486401616, + 1128711621, + 4071028143, + 3938015234, + 626760850, + 3422307088, + 3731948114, + 1910812571, + 829867604, + 600054827, + 846276053, + 1319580597, + 3615631523, + 747621617, + 1554392685, + 3653393337, + 3912733768, + 2977154193, + 1155671306, + 2833201935, + 2279065800, + 3013201026, + 3987119777, + 3274777118, + 1140056448, + 1816979260, + 2179608234, + 3678482613, + 3814469814, + 2355321390, + 2570806559, + 3322663004, + 1190205437, + 1292030121, + 445850416, + 1007609872, + 3203863217, + 4141964142, + 1966808852, + 1308343552, + 2379169568, + 392323216, + 2481626389, + 382317464, + 4182472552, + 2023490843, + 3775512346, + 1114127726, + 732212450, + 329275334, + 3657781986, + 2294505476, + 1622386892, + 405801553, + 3621219497, + 3355243150, + 1442897718, + 3394995861, + 770248995, + 1364846261, + 3024153552, + 3538800322, + 2652257278, + 210120734, + 1301948433, + 1247565263, + 2146699588, + 1320374762, + 897290932, + 3862254368, + 799831442, + 1914207670, + 3377904039, + 2607906732, + 4027092024, + 2763947804, + 1014475044, + 896406089, + 3514973186, + 3879235573, + 4012732407, + 3867478549, + 1414327479, + 2649597407, + 3662261846, + 2995439679, + 1996639121, + 4039511636, + 2765791775, + 3303435936, + 637778742, + 3898457584, + 518685508, + 986059390, + 1574901139, + 3032251494, + 245461207, + 3766190730, + 1353320413, + 1935265299, + 1973837470, + 3278804186, + 3214092943, + 2957835889, + 4091085324, + 255294387, + 1414770228, + 2217535634, + 1675408567, + 3831909433, + 3020670330, + 1716921427, + 3386562328, + 1988740714, + 261016972, + 2290787112, + 1983824431, + 3086118481, + 1254847645, + 4067049839, + 249698862, + 1498678745, + 784029040, + 439729372, + 4110883615, + 1613350319, + 4105915119, + 1813130945, + 679455742, + 3976052181, + 3001295001, + 2104820813, + 1162900350, + 1648044702, + 2514586897, + 2421180310, + 2283890166, + 1404122339, + 4282148475, + 1644006790, + 3614130073, + 423899433, + 2013836895, + 3009479111, + 363709968, + 1155199660, + 628881947, + 2369525950, + 3548378305, + 203494928, + 1558133663, + 2037293462, + 1180976643, + 2702892598, + 3361665135, + 3573942869, + 3246684762, + 4184909495, + 3113930053, + 3314026892, + 3543006365, + 1777684175, + 738987079, + 2408860048, + 3375406400, + 3410541034, + 2483402110, + 874265790, + 2728628682, + 2465254020, + 2763032539, + 1773018316, + 3091717385, + 3056048355, + 1627578084, + 396052686, + 799842732, + 4040194951, + 642912929, + 3176656946, + 1805691782, + 3531813776, + 4064329368, + 517657652, + 3683563145, + 2227722419, + 1853029449, + 3503447249, + 3163192646, + 1056555858, + 2381084858, + 781559829, + 2363497066, + 254498834, + 2476144988, + 4269432604, + 3103258769, + 2392440039, + 268597153, + 2516299873, + 1081588303, + 2566866985, + 1638912927, + 3024289291, + 3157978282, + 834525272, + 3419277910, + 3891176370, + 2309185067, + 3221257587, + 3004541554, + 1137530190, + 571926244, + 210118849, + 4293182758, + 2869369690, + 2784618674, + 3305896333, + 1489585333, + 3381035852, + 3790732527, + 4028183561, + 2653638804, + 2736737505, + 3797140814, + 962515850, + 2258143878, + 3564546768, + 1895130701, + 2228287037, + 2312197219, + 2626222474, + 2181090448, + 3689165959, + 3520225197, + 136758892, + 1431487309, + 2930236310, + 154402287, + 2738491227, + 344509539, + 1896458514, + 3779882828, + 2133529203, + 4286044900, + 2605636955, + 820659343, + 1811842338, + 3962094114, + 3687915771, + 2155975276, + 3928836378, + 3691703524, + 1904018112, + 1881354556, + 872419853, + 4278198980, + 2885521339, + 1376745620, + 3236945512, + 1671716562, + 370644302, + 101468236, + 284769900, + 634980137, + 1605335139, + 1282158145, + 2660914377, + 854331875, + 1000704891, + 699019315, + 2780029935, + 1260383173, + 2779902986, + 582742932, + 3718843509, + 1408230782, + 607436972, + 2934336571, + 115661521, + 4263553433, + 4276473954, + 370169606, + 2853087319, + 1027669570, + 1720229704, + 3409791727, + 285337702, + 1345790431, + 2943146983, + 2685478343, + 1487297154, + 2969341474, + 2458039967, + 214515201, + 3687721469, + 3667625756, + 1898369795, + 4230564025, + 223641470, + 3069294914, + 4116721676, + 1141151651, + 3584477327, + 384051169, + 3317163317, + 4072972665, + 1029203420, + 3860139652, + 3715612400, + 2510677831, + 612600367, + 3268435709, + 3097313931, + 370004076, + 1322283423, + 2435703861, + 1160258309, + 3171459443, + 2335321836, + 2673338508, + 4025907014, + 3884845317, + 3818902857, + 3795803731, + 147850868, + 3685404583, + 3974796746, + 356681264, + 1011203630, + 1562517741, + 2845328877, + 1736512866, + 988217774, + 181135240, + 3685976710, + 1256118794, + 3209965375, + 3363408610, + 466254860, + 1238802224, + 2587721339, + 292142854, + 3507044396, + 3171441166, + 1280320546, + 1455646463, + 3644414748, + 1408953397, + 4061980018, + 3356361836, + 3625119644, + 2573263880, + 3703724981, + 200726676, + 3890873655, + 1126147734, + 3196707440, + 730509342, + 789995844, + 4048947862, + 2517783692, + 4044958641, + 1400738730, + 2018024150, + 1708076617, + 4025504571, + 3137500850, + 1286235939, + 1493096611, + 2608737991, + 3110030970, + 2642728101, + 1595719512, + 364408339, + 2079077251, + 4193186146, + 2554702544, + 2507932088, + 1215331848, + 2013306012, + 1017301200, + 922684690, + 1736386371, + 1626170469, + 3727347974, + 2689656441, + 2440555759, ]; static final String privateKeyFCM = String.fromCharCodes(List.generate( @@ -6517,35 +6595,35 @@ final class _Env { ).map((int i) => _envieddataprivateKeyFCM[i] ^ _enviedkeyprivateKeyFCM[i])); static const List _enviedkeypassnpassenger = [ - 1757414005, - 514986313, - 4151797804, - 97325440, - 3379937222, - 576595249, - 2559539658, - 8567208, - 4271065238, - 508041504, - 3204796963, - 1435370898, - 3094755634, + 2488819431, + 2770223150, + 2582335575, + 2610561879, + 2411505875, + 1657282424, + 2400061973, + 1985533252, + 4982124, + 3405874632, + 4088173917, + 168716871, + 1460210415, ]; static const List _envieddatapassnpassenger = [ - 1757413917, - 514986283, - 4151797835, - 97325538, - 3379937199, - 576595269, - 2559539624, - 8567280, - 4271065316, - 508041592, - 3204797009, - 1435370960, - 3094755648, + 2488819343, + 2770223180, + 2582335536, + 2610561845, + 2411505850, + 1657282316, + 2400062071, + 1985533212, + 4982046, + 3405874576, + 4088173871, + 168716805, + 1460210333, ]; static final String passnpassenger = String.fromCharCodes(List.generate( @@ -6555,15 +6633,15 @@ final class _Env { ).map((int i) => _envieddatapassnpassenger[i] ^ _enviedkeypassnpassenger[i])); static const List _enviedkeynewId = [ - 2009498597, - 1912159798, - 349064147, + 3031355905, + 2427189358, + 4227842261, ]; static const List _envieddatanewId = [ - 2009498507, - 1912159827, - 349064100, + 3031356015, + 2427189259, + 4227842210, ]; static final String newId = String.fromCharCodes(List.generate( @@ -6573,33 +6651,33 @@ final class _Env { ).map((int i) => _envieddatanewId[i] ^ _enviedkeynewId[i])); static const List _enviedkeyallowed = [ - 3235956510, - 571889789, - 3400769876, - 265587103, - 655752813, - 629462643, - 2025133890, - 2351496342, - 3413331780, - 1114393771, - 2036505266, - 3959304053, + 571556174, + 1938322362, + 2450700270, + 3883374647, + 2501284320, + 589521911, + 2333171601, + 2952046055, + 3394402264, + 765042122, + 3480784058, + 1478648951, ]; static const List _envieddataallowed = [ - 3235956554, - 571889679, - 3400769853, - 265587183, - 655752727, - 629462583, - 2025133872, - 2351496447, - 3413331762, - 1114393806, - 2036505280, - 3959304015, + 571556122, + 1938322376, + 2450700167, + 3883374663, + 2501284250, + 589521843, + 2333171683, + 2952045966, + 3394402222, + 765042095, + 3480784072, + 1478648909, ]; static final String allowed = String.fromCharCodes(List.generate( @@ -6609,71 +6687,71 @@ final class _Env { ).map((int i) => _envieddataallowed[i] ^ _enviedkeyallowed[i])); static const List _enviedkeybasicAuthCredentials = [ - 1511654194, - 3575795244, - 1227490417, - 527640050, - 3871923376, - 4031295051, - 1390183179, - 3442892390, - 2212257034, - 949045519, - 2188626333, - 2283817801, - 2133657331, - 1619454805, - 2010750059, - 1020888170, - 850672916, - 3276641294, - 376387638, - 3248865663, - 2438550937, - 3491074149, - 3046128887, - 3612797548, - 3197124550, - 3896314357, - 4110396586, - 780170803, - 2137888112, - 1413493953, - 67174621, + 1171627515, + 2920834, + 1773476736, + 1662360174, + 3976040406, + 420027252, + 2188556584, + 2766592129, + 326216410, + 3265762873, + 3780778546, + 3561706076, + 21086913, + 574055011, + 3882614780, + 1826192253, + 3474285061, + 3822251971, + 2387425596, + 3594997982, + 1521373709, + 4284943469, + 2531332148, + 1426969750, + 1118645882, + 1075537670, + 569556090, + 978228654, + 4161679133, + 2395031260, + 380630070, ]; static const List _envieddatabasicAuthCredentials = [ - 1511654213, - 3575795293, - 1227490335, - 527639967, - 3871923393, - 4031295034, - 1390183288, - 3442892300, - 2212257139, - 949045625, - 2188626410, - 2283817763, - 2133657221, - 1619454831, - 2010749957, - 1020888091, - 850672998, - 3276641367, - 376387708, - 3248865583, - 2438551001, - 3491074132, - 3046128832, - 3612797535, - 3197124593, - 3896314285, - 4110396632, - 780170859, - 2137888028, - 1413493891, - 67174577, + 1171627404, + 2920947, + 1773476846, + 1662360067, + 3976040359, + 420027141, + 2188556635, + 2766592235, + 326216355, + 3265762895, + 3780778565, + 3561706038, + 21086903, + 574055001, + 3882614674, + 1826192140, + 3474285175, + 3822251930, + 2387425654, + 3594997902, + 1521373773, + 4284943452, + 2531332099, + 1426969765, + 1118645837, + 1075537758, + 569555976, + 978228726, + 4161679217, + 2395031198, + 380630106, ]; static final String basicAuthCredentials = String.fromCharCodes( @@ -6686,65 +6764,65 @@ final class _Env { _enviedkeybasicAuthCredentials[i])); static const List _enviedkeybasicCompareFaces = [ - 2421100800, - 3397933571, - 2369214106, - 3136895179, - 3615729333, - 2636360191, - 2152261677, - 1456834091, - 3656203984, - 1289266952, - 2470039579, - 2408141792, - 3587954520, - 501373726, - 1466408144, - 59280945, - 4146715710, - 1868614554, - 90924153, - 1703149559, - 2671491957, - 1876571842, - 1007708727, - 3051381325, - 4131722653, - 3318332617, - 3347307057, - 667605013, + 2619977277, + 3663038405, + 2607741389, + 1493848637, + 3168440982, + 2922050375, + 1637496925, + 3485178165, + 2577893418, + 1320091529, + 358422193, + 3956561098, + 3865055531, + 3228809269, + 194868560, + 1207514434, + 3953247386, + 2209440152, + 3279222745, + 592735149, + 3806977348, + 790419202, + 3293672064, + 2229699769, + 162266597, + 2376414881, + 1154960442, + 3956440468, ]; static const List _envieddatabasicCompareFaces = [ - 2421100922, - 3397933673, - 2369214191, - 3136895137, - 3615729369, - 2636360074, - 2152261724, - 1456834125, - 3656203936, - 1289267042, - 2470039585, - 2408141710, - 3587954473, - 501373804, - 1466408073, - 59280987, - 4146715726, - 1868614618, - 90924104, - 1703149504, - 2671491910, - 1876571893, - 1007708783, - 3051381311, - 4131722693, - 3318332581, - 3347307123, - 667605113, + 2619977287, + 3663038383, + 2607741368, + 1493848663, + 3168441082, + 2922050354, + 1637496876, + 3485178195, + 2577893466, + 1320091619, + 358422155, + 3956561060, + 3865055578, + 3228809287, + 194868489, + 1207514408, + 3953247466, + 2209440216, + 3279222760, + 592735130, + 3806977399, + 790419253, + 3293672152, + 2229699787, + 162266557, + 2376414925, + 1154960504, + 3956440568, ]; static final String basicCompareFaces = String.fromCharCodes( @@ -6756,129 +6834,129 @@ final class _Env { _envieddatabasicCompareFaces[i] ^ _enviedkeybasicCompareFaces[i])); static const List _enviedkeybasicCompareFacesURL = [ - 4235979342, - 107091280, - 3769740472, - 2222084587, - 384144624, - 3140250032, - 1997944230, - 1918081104, - 2596592456, - 1777376467, - 988115540, - 2075032590, - 1667533897, - 2031814449, - 79891751, - 3922355855, - 2137405931, - 2570742106, - 1735317659, - 1877794703, - 4041141819, - 4064715208, - 2151919522, - 701152092, - 4135360582, - 3590111345, - 3964339254, - 488816067, - 342387056, - 3669799231, - 156793059, - 2214319007, - 1679768627, - 2031538490, - 65772023, - 2069195370, - 728988288, - 3658819502, - 3578487325, - 779352690, - 577911063, - 937381759, - 2034503781, - 2258435376, - 3025814797, - 2495417297, - 3911226822, - 200632297, - 2187542188, - 448707784, - 4168377315, - 340404973, - 554493486, - 1716731532, - 2387259924, - 2615105614, - 2396184738, - 2798086821, - 1255080927, - 1232424033, + 1346303975, + 2629076685, + 2970965832, + 558341252, + 548577589, + 4014912986, + 3777192577, + 3989160753, + 3957276480, + 4162203919, + 3049854352, + 724067773, + 3297673131, + 906535930, + 3377634195, + 832648210, + 4144867747, + 4103292733, + 124892029, + 2492806706, + 1038049038, + 786664172, + 2157258951, + 1881524520, + 3686067592, + 3042675886, + 3111736241, + 2506046267, + 764724622, + 997676373, + 3116583509, + 2275122009, + 2732506655, + 4203471349, + 3647882059, + 2832153296, + 3544329552, + 3333848209, + 3098941436, + 179874878, + 4253300882, + 1937986626, + 2194413499, + 723497112, + 4131989256, + 97391730, + 4264680715, + 4152555737, + 3043272639, + 639178387, + 4190211238, + 274626550, + 827003188, + 3381416721, + 623732000, + 3400423116, + 801088801, + 1732870145, + 2309896388, + 518112003, ]; static const List _envieddatabasicCompareFacesURL = [ - 4235979302, - 107091236, - 3769740492, - 2222084507, - 384144515, - 3140249994, - 1997944201, - 1918081151, - 2596592430, - 1777376434, - 988115511, - 2075032683, - 1667533924, - 2031814485, - 79891778, - 3922355963, - 2137405838, - 2570742073, - 1735317743, - 1877794722, - 4041141853, - 4064715262, - 2151919515, - 701152110, - 4135360626, - 3590111298, - 3964339215, - 488816113, - 342386963, - 3669799179, - 156792960, - 2214319016, - 1679768605, - 2031538514, - 65771922, - 2069195288, - 728988399, - 3658819525, - 3578487400, - 779352595, - 577911143, - 937381647, - 2034503755, - 2258435411, - 3025814882, - 2495417276, - 3911226857, - 200632202, - 2187542211, - 448707749, - 4168377235, - 340404876, - 554493532, - 1716731625, - 2387259979, - 2615105576, - 2396184771, - 2798086854, - 1255080890, - 1232423954, + 1346303887, + 2629076665, + 2970965820, + 558341364, + 548577606, + 4014912992, + 3777192622, + 3989160734, + 3957276454, + 4162204014, + 3049854451, + 724067800, + 3297673094, + 906535838, + 3377634294, + 832648294, + 4144867782, + 4103292766, + 124891913, + 2492806687, + 1038049128, + 786664154, + 2157259006, + 1881524506, + 3686067644, + 3042675869, + 3111736200, + 2506046217, + 764724717, + 997676385, + 3116583478, + 2275122030, + 2732506673, + 4203471261, + 3647882030, + 2832153250, + 3544329535, + 3333848314, + 3098941321, + 179874911, + 4253300962, + 1937986610, + 2194413461, + 723497211, + 4131989351, + 97391647, + 4264680740, + 4152555706, + 3043272656, + 639178494, + 4190211286, + 274626455, + 827003206, + 3381416820, + 623732095, + 3400423082, + 801088832, + 1732870242, + 2309896353, + 518112112, ]; static final String basicCompareFacesURL = String.fromCharCodes( @@ -6891,91 +6969,91 @@ final class _Env { _enviedkeybasicCompareFacesURL[i])); static const List _enviedkeyaccountSIDTwillo = [ - 3721408600, - 3947171842, - 3278552791, - 1290841325, - 1883121039, - 2848794990, - 1845944893, - 858090342, - 1317737027, - 4044106667, - 2056165759, - 3698222050, - 2969351416, - 2321420962, - 3550569128, - 181592456, - 3757412330, - 2463370668, - 483441015, - 1395969574, - 1542632707, - 3748823934, - 1307424768, - 110451220, - 462031736, - 409558539, - 60274066, - 1056939778, - 3413923450, - 1547907937, - 2130755320, - 1992047794, - 1091933354, - 547822685, - 2440111100, - 3424577644, - 2247696802, - 3734255597, - 1482445038, - 2772372126, - 2770894772, + 4061742007, + 3599962607, + 1635104436, + 2389009084, + 2034372200, + 3565771371, + 1726104097, + 3366616123, + 2662269498, + 2354541721, + 2460343423, + 1613949928, + 3801075804, + 2445061548, + 1768226310, + 745100707, + 4271583822, + 1185092190, + 1052663448, + 2021863819, + 2938391466, + 3189594433, + 229378354, + 1683737623, + 1509479591, + 1718166343, + 3103556867, + 453424511, + 4132595251, + 1579233130, + 4251866744, + 2580267701, + 3036822815, + 2007268182, + 145513440, + 3130610447, + 831047080, + 3331115302, + 3908007566, + 2106450412, + 2677853752, ]; static const List _envieddataaccountSIDTwillo = [ - 3721408521, - 3947171908, - 3278552751, - 1290841309, - 1883121150, - 2848794903, - 1845944841, - 858090323, - 1317737077, - 4044106689, - 2056165642, - 3698221960, - 2969351371, - 2321420954, - 3550569115, - 181592550, - 3757412307, - 2463370708, - 483440898, - 1395969631, - 1542632753, - 3748823887, - 1307424825, - 110451232, - 462031625, - 409558589, - 60274080, - 1056939835, - 3413923339, - 1547907920, - 2130755230, - 1992047832, - 1091933338, - 547822628, - 2440111051, - 3424577588, - 2247696848, - 3734255541, - 1482444930, - 2772372188, - 2770894808, + 4061742054, + 3599962537, + 1635104460, + 2389009036, + 2034372121, + 3565771282, + 1726104085, + 3366616078, + 2662269452, + 2354541811, + 2460343306, + 1613949826, + 3801075823, + 2445061524, + 1768226357, + 745100749, + 4271583863, + 1185092134, + 1052663533, + 2021863922, + 2938391448, + 3189594480, + 229378315, + 1683737635, + 1509479638, + 1718166385, + 3103556913, + 453424454, + 4132595266, + 1579233115, + 4251866654, + 2580267743, + 3036822831, + 2007268143, + 145513431, + 3130610519, + 831047130, + 3331115390, + 3908007650, + 2106450350, + 2677853780, ]; static final String accountSIDTwillo = String.fromCharCodes( @@ -6987,325 +7065,325 @@ final class _Env { _envieddataaccountSIDTwillo[i] ^ _enviedkeyaccountSIDTwillo[i])); static const List _enviedkeyserverAPI = [ - 3094642348, - 4121506206, - 827617737, - 2848816033, - 3213192673, - 4228182843, - 999386122, - 1220272359, - 267423703, - 1900033012, - 1944522775, - 3527212004, - 1859421952, - 889465882, - 1434182672, - 2184684236, - 737152098, - 1771835272, - 2010674798, - 2878793908, - 4226638094, - 1112911882, - 3292015836, - 666822431, - 3025891230, - 2173838592, - 3844334995, - 2263447002, - 2176013394, - 3009282342, - 1562658662, - 3746143550, - 3067587152, - 2521593711, - 3429293712, - 2303766424, - 2922240631, - 1156219267, - 1805959872, - 37212918, - 127814544, - 2028392127, - 2676479203, - 1996060275, - 620111390, - 1099120563, - 3424543361, - 3931194771, - 2012636768, - 2472981310, - 1825367032, - 3677390013, - 745083740, - 3403190758, - 3242229914, - 2805151842, - 2306765567, - 382466205, - 1388308985, - 942683536, - 3571948047, - 1175434082, - 4072429267, - 3872998741, - 1284492511, - 1964889309, - 467562698, - 3230552194, - 4004618865, - 2209982301, - 2117482407, - 1982549967, - 1334186295, - 2947885287, - 3806681118, - 4260875097, - 3997005067, - 1946017544, - 109237713, - 909068578, - 608529079, - 279817952, - 378484100, - 752413422, - 3356837079, - 16994617, - 2741430961, - 3798529846, - 2426473427, - 210315061, - 375479981, - 3239625849, - 1743921987, - 453901307, - 2903998185, - 3858934269, - 3788721278, - 2087128503, - 3831753353, - 2224498213, - 3022281978, - 1135043387, - 3668798529, - 503401808, - 1270770969, - 2012982971, - 4080372035, - 802447983, - 2311082641, - 3926045920, - 1189273073, - 1456400080, - 1684598679, - 2968257951, - 2678762546, - 3298858786, - 1228590739, - 350776737, - 2849006208, - 481759723, - 4157940961, - 2661362995, - 2733466299, - 3268771250, - 3519278686, - 1166194619, - 2883179992, - 2171852174, - 3593191018, - 1814621414, - 2825656219, - 1315956728, - 2225883374, - 3935953512, - 3843957003, - 3992352210, - 791623037, - 1900046594, - 2194281717, - 173693204, - 3188046480, - 1977818732, - 2636224273, - 1834520938, - 564647724, - 3466055227, - 2352858981, - 4139238342, - 2609575473, - 181332596, - 3247722768, - 4220498014, - 3696639377, - 3428982343, - 297904278, - 2231950037, - 3297882200, - 1005405782, + 2293015959, + 2926936416, + 754713994, + 1879177331, + 3010367632, + 2331019857, + 1981454485, + 2022062379, + 70733539, + 2385910867, + 4181703881, + 3811532071, + 2083581455, + 2024042842, + 872991547, + 2096731808, + 3687220286, + 1079788284, + 2972148923, + 3463026642, + 702866374, + 3833629760, + 3254795387, + 1748563216, + 1425761115, + 1114265423, + 1291897108, + 3508612605, + 4170163035, + 64332401, + 4001548807, + 593052420, + 2738184806, + 3949311381, + 4030058807, + 433727145, + 1412218154, + 984455934, + 3018343098, + 607855449, + 3831988072, + 3988357687, + 2020725381, + 1608151706, + 3038453786, + 311730672, + 294232048, + 1259710598, + 3134368654, + 1212166389, + 3021130905, + 4092652837, + 3607733940, + 3624672522, + 3325104542, + 2343446236, + 1940698349, + 3741285099, + 576553194, + 2753508854, + 1533348535, + 953434871, + 3183028239, + 188764603, + 237251648, + 412548870, + 927203250, + 3059078396, + 1706005021, + 513065983, + 1244466660, + 1156042268, + 1643413036, + 1233060717, + 501636137, + 3310073628, + 704059199, + 1593488971, + 1269263079, + 1263949358, + 2810813537, + 3514255579, + 1027853145, + 2559804475, + 504400660, + 2908260781, + 3891590208, + 1988350317, + 3793199272, + 1138964747, + 2931313742, + 1249563942, + 1775933755, + 680400221, + 4217916984, + 2770259341, + 738612783, + 2484845867, + 3547361336, + 910699503, + 1325736454, + 1224765566, + 711030438, + 1283633041, + 48458527, + 655012284, + 1770237206, + 531760275, + 87583876, + 1962181311, + 3646947175, + 839419762, + 3563905313, + 2872121407, + 3280777072, + 3217748352, + 2164796486, + 2913284242, + 2905637391, + 2831279558, + 1468848219, + 2550222175, + 3982541680, + 2995326993, + 4035210995, + 267043828, + 716873193, + 1116245303, + 1822772839, + 927480690, + 3097843470, + 3851424742, + 3994979247, + 2542882136, + 3999272813, + 1478207279, + 2410291106, + 3137210450, + 2933337757, + 3196350738, + 1453871709, + 2931724670, + 1070266193, + 1472563550, + 3427297970, + 3645735156, + 2112201060, + 3442776882, + 2593705571, + 839101667, + 374945482, + 284772623, + 3598299129, + 2573901293, + 2786779760, + 3198178720, + 3250698064, + 3986009591, ]; static const List _envieddataserverAPI = [ - 3094642429, - 4121506255, - 827617688, - 2848816112, - 3213192590, - 4228182873, - 999386201, - 1220272277, - 267423653, - 1900032946, - 1944522878, - 3527211998, - 1859422033, - 889465932, - 1434182721, - 2184684276, - 737152085, - 1771835376, - 2010674747, - 2878793859, - 4226638196, - 1112911997, - 3292015775, - 666822505, - 3025891315, - 2173838682, - 3844335081, - 2263446912, - 2176013366, - 3009282375, - 1562658590, - 3746143563, - 3067587075, - 2521593693, - 3429293814, - 2303766442, - 2922240580, - 1156219354, - 1805959924, - 37212827, - 127814634, - 2028392072, - 2676479150, - 1996060169, - 620111463, - 1099120636, - 3424543483, - 3931194849, - 2012636760, - 2472981329, - 1825366940, - 3677389967, - 745083710, - 3403190676, - 3242229932, - 2805151785, - 2306765478, - 382466276, - 1388308892, - 942683606, - 3571948142, - 1175434038, - 4072429189, - 3872998681, - 1284492440, - 1964889326, - 467562625, - 3230552241, - 4004618777, - 2209982245, - 2117482386, - 1982549909, - 1334186326, - 2947885234, - 3806681191, - 4260875041, - 3997005116, - 1946017645, - 109237640, - 909068628, - 608529142, - 279817913, - 378484212, - 752413359, - 3356836993, - 16994653, - 2741431034, - 3798529885, - 2426473470, - 210315015, - 375479957, - 3239625807, - 1743921933, - 453901231, - 2903998139, - 3858934164, - 3788721229, - 2087128525, - 3831753466, - 2224498204, - 3022281875, - 1135043432, - 3668798478, - 503401790, - 1270771009, - 2012982991, - 4080371995, - 802447933, - 2311082712, - 3926045848, - 1189272962, - 1456400039, - 1684598768, - 2968257964, - 2678762617, - 3298858823, - 1228590832, - 350776803, - 2849006317, - 481759640, - 4157940877, - 2661362944, - 2733466349, - 3268771274, - 3519278612, - 1166194562, - 2883179951, - 2171852225, - 3593190983, - 1814621328, - 2825656274, - 1315956616, - 2225883289, - 3935953437, - 3843957055, - 3992352130, - 791622923, - 1900046645, - 2194281617, - 173693311, - 3188046552, - 1977818631, - 2636224329, - 1834520836, - 564647749, - 3466055246, - 2352858909, - 4139238283, - 2609575522, - 181332528, - 3247722871, - 4220497929, - 3696639433, - 3428982325, - 297904334, - 2231950009, - 3297882138, - 1005405754, + 2293016006, + 2926936369, + 754714075, + 1879177250, + 3010367743, + 2331019827, + 1981454534, + 2022062425, + 70733457, + 2385910805, + 4181703840, + 3811532061, + 2083581534, + 2024042764, + 872991594, + 2096731800, + 3687220233, + 1079788164, + 2972148974, + 3463026661, + 702866364, + 3833629751, + 3254795320, + 1748563302, + 1425761078, + 1114265365, + 1291897198, + 3508612519, + 4170163007, + 64332304, + 4001548927, + 593052529, + 2738184757, + 3949311399, + 4030058833, + 433727131, + 1412218137, + 984455847, + 3018343054, + 607855412, + 3831987986, + 3988357632, + 2020725448, + 1608151776, + 3038453859, + 311730623, + 294231946, + 1259710708, + 3134368694, + 1212166298, + 3021131005, + 4092652823, + 3607733974, + 3624672632, + 3325104552, + 2343446167, + 1940698292, + 3741285010, + 576553103, + 2753508784, + 1533348566, + 953434787, + 3183028313, + 188764663, + 237251591, + 412548917, + 927203321, + 3059078351, + 1706005109, + 513065863, + 1244466641, + 1156042310, + 1643413069, + 1233060664, + 501636176, + 3310073700, + 704059144, + 1593488942, + 1269263038, + 1263949400, + 2810813472, + 3514255490, + 1027853097, + 2559804538, + 504400706, + 2908260809, + 3891590155, + 1988350214, + 3793199237, + 1138964793, + 2931313782, + 1249563920, + 1775933813, + 680400137, + 4217917034, + 2770259428, + 738612764, + 2484845905, + 3547361355, + 910699478, + 1325736559, + 1224765485, + 711030505, + 1283633151, + 48458567, + 655012296, + 1770237262, + 531760321, + 87583949, + 1962181319, + 3646947092, + 839419653, + 3563905350, + 2872121356, + 3280777019, + 3217748453, + 2164796453, + 2913284304, + 2905637474, + 2831279541, + 1468848183, + 2550222188, + 3982541606, + 2995327081, + 4035210937, + 267043789, + 716873118, + 1116245368, + 1822772810, + 927480580, + 3097843527, + 3851424662, + 3994979288, + 2542882093, + 3999272793, + 1478207359, + 2410291156, + 3137210469, + 2933337849, + 3196350841, + 1453871637, + 2931724565, + 1070266121, + 1472563504, + 3427298011, + 3645735041, + 2112200988, + 3442776959, + 2593705520, + 839101607, + 374945453, + 284772696, + 3598299041, + 2573901215, + 2786779688, + 3198178764, + 3250698002, + 3986009499, ]; static final String serverAPI = String.fromCharCodes(List.generate( @@ -7315,87 +7393,87 @@ final class _Env { ).map((int i) => _envieddataserverAPI[i] ^ _enviedkeyserverAPI[i])); static const List _enviedkeymapAPIKEY = [ - 2153809501, - 1717724714, - 2151938677, - 1229863763, - 2746914801, - 2696393788, - 3964805992, - 2628282829, - 2971325611, - 1913336259, - 3410639682, - 1074762273, - 2849331597, - 2019010228, - 1671228132, - 1758485582, - 1648641920, - 2740973582, - 1209685156, - 2572170395, - 3507709988, - 418998655, - 1555447890, - 1211807488, - 1885466080, - 3862747019, - 2048117101, - 3537696603, - 2578736352, - 3464547711, - 4184654064, - 1925582979, - 1564045091, - 3602355776, - 1521167478, - 1619900017, - 303179868, - 1742350684, - 483803176, + 590595859, + 1725547051, + 710486845, + 1227915785, + 2549895144, + 688514078, + 3943369896, + 3858000073, + 869856315, + 848858417, + 435215866, + 2514344073, + 1588727850, + 2309094374, + 965634129, + 1998686686, + 4095429781, + 3708319268, + 2120152229, + 4103649435, + 4102909837, + 2905227452, + 494799181, + 3532194356, + 4103156907, + 3555540401, + 2752131075, + 2032733869, + 1504269994, + 1766878288, + 1883341851, + 2651616596, + 779141393, + 2296724889, + 1004035135, + 445861254, + 1623814505, + 304800323, + 4036018663, ]; static const List _envieddatamapAPIKEY = [ - 2153809436, - 1717724771, - 2151938575, - 1229863730, - 2746914722, - 2696393797, - 3964805931, - 2628282763, - 2971325656, - 1913336212, - 3410639616, - 1074762320, - 2849331707, - 2019010271, - 1671228092, - 1758485556, - 1648642027, - 2740973631, - 1209685219, - 2572170489, - 3507709961, - 418998557, - 1555447825, - 1211807559, - 1885466008, - 3862747132, - 2048117020, - 3537696527, - 2578736279, - 3464547637, - 4184653985, - 1925583048, - 1564045162, - 3602355749, - 1521167422, - 1619899931, - 303179796, - 1742350698, - 483803164, + 590595922, + 1725547106, + 710486855, + 1227915880, + 2549895099, + 688514151, + 3943369963, + 3858000015, + 869856328, + 848858470, + 435215800, + 2514344184, + 1588727900, + 2309094285, + 965634057, + 1998686628, + 4095429886, + 3708319253, + 2120152290, + 4103649529, + 4102909856, + 2905227486, + 494799118, + 3532194419, + 4103156947, + 3555540422, + 2752131186, + 2032733945, + 1504270045, + 1766878234, + 1883341898, + 2651616543, + 779141464, + 2296724988, + 1004035191, + 445861356, + 1623814433, + 304800373, + 4036018643, ]; static final String mapAPIKEY = String.fromCharCodes(List.generate( @@ -7405,71 +7483,71 @@ final class _Env { ).map((int i) => _envieddatamapAPIKEY[i] ^ _enviedkeymapAPIKEY[i])); static const List _enviedkeytwilloRecoveryCode = [ - 3537420439, - 3071366073, - 4124975510, - 4079975764, - 1641569888, - 1090253385, - 961259178, - 2480470956, - 2156023688, - 2331328498, - 1578917116, - 436602571, - 1213917411, - 2660599139, - 1124019908, - 3226120242, - 1000488265, - 1653285308, - 884328320, - 361930530, - 4085604186, - 387663512, - 728462850, - 1031208531, - 1745429678, - 4179566444, - 1366642943, - 480691156, - 3926943327, - 1177733874, - 3999473938, + 3061181226, + 711391497, + 4095166760, + 1023880297, + 1881687363, + 2641927194, + 2425000206, + 2521734215, + 1014044374, + 2699701736, + 3823094162, + 1444617229, + 3912188074, + 1273144673, + 817689102, + 85385811, + 1084488378, + 3544249515, + 854844610, + 1298892397, + 1626466121, + 3984551581, + 1141458084, + 3261001117, + 3898644321, + 995741513, + 4053079005, + 759468828, + 1405019929, + 4203215804, + 1255405236, ]; static const List _envieddatatwilloRecoveryCode = [ - 3537420500, - 3071366136, - 4124975555, - 4079975779, - 1641569881, - 1090253325, - 961259234, - 2480471036, - 2156023744, - 2331328451, - 1578917054, - 436602529, - 1213917350, - 2660599130, - 1124019860, - 3226120295, - 1000488193, - 1653285256, - 884328389, - 361930614, - 4085604098, - 387663564, - 728462929, - 1031208459, - 1745429748, - 4179566388, - 1366642829, - 480691084, - 3926943283, - 1177733808, - 3999474046, + 3061181289, + 711391560, + 4095166845, + 1023880286, + 1881687418, + 2641927262, + 2425000262, + 2521734167, + 1014044318, + 2699701721, + 3823094224, + 1444617319, + 3912188143, + 1273144664, + 817689182, + 85385734, + 1084488434, + 3544249503, + 854844551, + 1298892345, + 1626466065, + 3984551625, + 1141458167, + 3261001157, + 3898644283, + 995741457, + 4053078959, + 759468868, + 1405020021, + 4203215870, + 1255405272, ]; static final String twilloRecoveryCode = String.fromCharCodes( @@ -7481,87 +7559,87 @@ final class _Env { _envieddatatwilloRecoveryCode[i] ^ _enviedkeytwilloRecoveryCode[i])); static const List _enviedkeyauthTokenTwillo = [ - 3362180945, - 3000957571, - 94474985, - 2902254753, - 259948397, - 3358661688, - 3894298645, - 3823635530, - 105227886, - 4107232009, - 3935735069, - 2075554634, - 2145437488, - 49444953, - 3434409934, - 181967200, - 997177958, - 968129460, - 2217376028, - 3345799519, - 4255271060, - 3516841777, - 1609997986, - 3324685951, - 319716042, - 1531829892, - 3141436171, - 1678235352, - 3679542999, - 1174829834, - 3576519681, - 2717004457, - 978001268, - 1346107625, - 1448636811, - 3908533015, - 3494071621, - 1002886071, - 3251450010, + 819342226, + 788789891, + 3123247776, + 1481241070, + 131911166, + 4108653561, + 3716173209, + 1119431390, + 1550093162, + 2509594978, + 2860707611, + 2111091813, + 4054343762, + 3411344303, + 1994883266, + 3969747323, + 1882528013, + 3978866887, + 1319130456, + 3700576663, + 3709959726, + 2119958655, + 382328356, + 3154706001, + 3101953264, + 539908562, + 1029018845, + 3103710034, + 1952580682, + 3757216819, + 305274852, + 946291334, + 3010737308, + 1257562287, + 96545321, + 2074025436, + 4085510880, + 3435203013, + 2957985435, ]; static const List _envieddataauthTokenTwillo = [ - 3362180966, - 3000957619, - 94474908, - 2902254744, - 259948373, - 3358661714, - 3894298720, - 3823635578, - 105227868, - 4107232056, - 3935735081, - 2075554597, - 2145437512, - 49444897, - 3434409978, - 181967121, - 997177942, - 968129473, - 2217376043, - 3345799531, - 4255271076, - 3516841731, - 1609997978, - 3324685834, - 319716090, - 1531829942, - 3141436218, - 1678235309, - 3679543011, - 1174829947, - 3576519796, - 2717004447, - 978001217, - 1346107569, - 1448636921, - 3908533071, - 3494071593, - 1002886133, - 3251450102, + 819342245, + 788789939, + 3123247829, + 1481241047, + 131911110, + 4108653459, + 3716173292, + 1119431406, + 1550093144, + 2509594963, + 2860707631, + 2111091722, + 4054343722, + 3411344343, + 1994883318, + 3969747210, + 1882528061, + 3978866866, + 1319130479, + 3700576675, + 3709959710, + 2119958605, + 382328348, + 3154705956, + 3101953216, + 539908576, + 1029018860, + 3103709991, + 1952580734, + 3757216834, + 305274769, + 946291376, + 3010737321, + 1257562359, + 96545371, + 2074025348, + 4085510796, + 3435202951, + 2957985527, ]; static final String authTokenTwillo = String.fromCharCodes(List.generate( @@ -7572,125 +7650,125 @@ final class _Env { (int i) => _envieddataauthTokenTwillo[i] ^ _enviedkeyauthTokenTwillo[i])); static const List _enviedkeychatGPTkey = [ - 3786852239, - 3732632804, - 1053776283, - 609961636, - 3506360346, - 625368775, - 2871139619, - 2231800289, - 1635317307, - 1543784181, - 2094286987, - 172967389, - 2741963363, - 1223310290, - 328811405, - 3373915683, - 2685671354, - 369992755, - 663737942, - 4032223782, - 1781476190, - 1326656188, - 765874861, - 1064585155, - 3868720560, - 1364876958, - 443431170, - 3262248349, - 3375731716, - 4170786754, - 545906736, - 2778646075, - 2090318803, - 2041482066, - 1152946381, - 130562977, - 560898742, - 2988169869, - 3017356002, - 4050807567, - 2695741927, - 318740299, - 1909018411, - 3623348726, - 3322266726, - 1327776977, - 1933379424, - 94627726, - 3658778696, - 4230763093, - 3699488827, - 1059401774, - 117625551, - 49472154, - 372487933, - 3089433325, - 3795614663, - 1356721168, + 2373063976, + 961934885, + 534858355, + 830900214, + 3199666739, + 720552233, + 113100068, + 2200605260, + 556295078, + 67647025, + 1451807346, + 2491370255, + 2893404701, + 1879305313, + 3133612886, + 3070369966, + 862113390, + 2037984315, + 3795516698, + 312857166, + 3742379061, + 1217962401, + 2010433459, + 2228418192, + 2231876400, + 3729060013, + 2441381393, + 731976795, + 557686674, + 2618343914, + 1377745390, + 1623097872, + 3730022414, + 902078926, + 2859139402, + 1566082863, + 2480423706, + 4033392722, + 1931234461, + 2591610421, + 3013673505, + 1732686785, + 2986393469, + 1881665331, + 860727576, + 1734306062, + 495896289, + 2800158209, + 471241334, + 2438296124, + 4062945115, + 2688029754, + 1961162835, + 1186389968, + 107649520, + 2714634333, + 2851633431, + 197373554, ]; static const List _envieddatachatGPTkey = [ - 3786852341, - 3732632707, - 1053776310, - 609961616, - 3506360409, - 625368821, - 2871139605, - 2231800208, - 1635317263, - 1543784102, - 2094287058, - 172967354, - 2741963297, - 1223310233, - 328811484, - 3373915718, - 2685671410, - 369992809, - 663737874, - 4032223831, - 1781476149, - 1326656235, - 765874882, - 1064585140, - 3868720627, - 1364876967, - 443431258, - 3262248431, - 3375731836, - 4170786725, - 545906789, - 2778646142, - 2090318773, - 2041481991, - 1152946356, - 130562968, - 560898812, - 2988169951, - 3017355925, - 4050807613, - 2695741845, - 318740262, - 1909018397, - 3623348647, - 3322266708, - 1327776944, - 1933379332, - 94627820, - 3658778747, - 4230763070, - 3699488849, - 1059401817, - 117625495, - 49472232, - 372487845, - 3089433217, - 3795614597, - 1356721276, + 2373064018, + 961934914, + 534858334, + 830900162, + 3199666800, + 720552219, + 113100050, + 2200605245, + 556295058, + 67647074, + 1451807275, + 2491370344, + 2893404767, + 1879305258, + 3133612807, + 3070369995, + 862113318, + 2037984353, + 3795516766, + 312857151, + 3742379102, + 1217962486, + 2010433500, + 2228418279, + 2231876467, + 3729059988, + 2441381449, + 731976745, + 557686762, + 2618343821, + 1377745339, + 1623097941, + 3730022504, + 902078875, + 2859139379, + 1566082838, + 2480423760, + 4033392640, + 1931234538, + 2591610375, + 3013673555, + 1732686764, + 2986393419, + 1881665378, + 860727594, + 1734306159, + 495896197, + 2800158307, + 471241285, + 2438296151, + 4062945073, + 2688029773, + 1961162763, + 1186389922, + 107649448, + 2714634289, + 2851633493, + 197373470, ]; static final String chatGPTkey = String.fromCharCodes(List.generate( @@ -7700,133 +7778,133 @@ final class _Env { ).map((int i) => _envieddatachatGPTkey[i] ^ _enviedkeychatGPTkey[i])); static const List _enviedkeytransactionCloude = [ - 4256137704, - 1131235090, - 3524805807, - 1137093455, - 95805664, - 2028039779, - 403105163, - 2466168397, - 2959604363, - 265564894, - 1442637881, - 2407873072, - 556426829, - 2097078225, - 116178150, - 1999637691, - 1766923333, - 433938057, - 3182632941, - 778732578, - 4054520808, - 3398533491, - 2450186659, - 2575208799, - 1962670118, - 1263195345, - 2599037580, - 2087788003, - 3752380882, - 3451045572, - 3937155722, - 4008799724, - 1920870975, - 153705789, - 2381914293, - 1556283338, - 1783684442, - 1394036715, - 2348122788, - 835763958, - 2857575123, - 191745781, - 72176964, - 1329174336, - 1492221001, - 3270884876, - 3667641416, - 3951314661, - 2719291792, - 1078630316, - 74369559, - 3064791176, - 2484022190, - 4189065941, - 3882930302, - 1050346586, - 2459339915, - 781594494, - 467086029, - 4130603018, - 4129298068, - 3655195844, + 1118941550, + 4099935787, + 173571499, + 3973513861, + 2437807982, + 1298203410, + 2065872094, + 510006101, + 1802609342, + 913683503, + 970036513, + 1338211370, + 2072089381, + 829805509, + 1524997266, + 2082051612, + 1857851532, + 2270814699, + 2407687675, + 2593046736, + 1458174257, + 3566124664, + 2756991287, + 2472475135, + 512460199, + 700164825, + 111889193, + 255851361, + 2412891345, + 3059660993, + 4294813237, + 190284628, + 4288139700, + 1940195597, + 1231020279, + 204048557, + 1814049298, + 2890749594, + 1995384340, + 1458073577, + 54859711, + 3726054855, + 2770635461, + 3788671078, + 2687647528, + 3032352966, + 4129921504, + 4197172041, + 2218114342, + 2204224811, + 523808078, + 225969632, + 1060955425, + 3050302343, + 2739866115, + 3758726503, + 2871157659, + 1930976711, + 1574507384, + 1567738871, + 2104303443, + 3409050505, ]; static const List _envieddatatransactionCloude = [ - 4256137657, - 1131235194, - 3524805836, - 1137093432, - 95805589, - 2028039690, - 403105255, - 2466168354, - 2959604454, - 265564847, - 1442637914, - 2407873119, - 556426788, - 2097078195, - 116178140, - 1999637738, - 1766923283, - 433938118, - 3182632882, - 778732648, - 4054520742, - 3398533418, - 2450186726, - 2575208731, - 1962670100, - 1263195273, - 2599037659, - 2087787938, - 3752380896, - 3451045618, - 3937155795, - 4008799668, - 1920871028, - 153705854, - 2381914247, - 1556283294, - 1783684362, - 1394036689, - 2348122877, - 835763901, - 2857575138, - 191745713, - 72176914, - 1329174280, - 1492221055, - 3270884959, - 3667641346, - 3951314599, - 2719291811, - 1078630301, - 74369625, - 3064791227, - 2484022270, - 4189065872, - 3882930255, - 1050346511, - 2459339987, - 781594380, - 467085973, - 4130603110, - 4129298134, - 3655195816, + 1118941503, + 4099935811, + 173571528, + 3973513970, + 2437807899, + 1298203515, + 2065872050, + 510006074, + 1802609363, + 913683550, + 970036546, + 1338211397, + 2072089420, + 829805479, + 1524997288, + 2082051661, + 1857851610, + 2270814628, + 2407687588, + 2593046682, + 1458174335, + 3566124577, + 2756991346, + 2472475067, + 512460181, + 700164737, + 111889278, + 255851296, + 2412891363, + 3059661047, + 4294813292, + 190284556, + 4288139775, + 1940195662, + 1231020229, + 204048633, + 1814049346, + 2890749600, + 1995384397, + 1458073506, + 54859662, + 3726054787, + 2770635411, + 3788671022, + 2687647518, + 3032352917, + 4129921450, + 4197171979, + 2218114325, + 2204224794, + 523808000, + 225969619, + 1060955505, + 3050302402, + 2739866162, + 3758726450, + 2871157699, + 1930976693, + 1574507296, + 1567738779, + 2104303377, + 3409050597, ]; static final String transactionCloude = String.fromCharCodes( @@ -7838,85 +7916,85 @@ final class _Env { _envieddatatransactionCloude[i] ^ _enviedkeytransactionCloude[i])); static const List _enviedkeyvisionApi = [ - 2587413125, - 3873776415, - 4101742375, - 1175413350, - 2211467417, - 3359371623, - 2765348110, - 72153215, - 1510187110, - 3007833241, - 2285799989, - 498201912, - 1109185188, - 2025019304, - 3496052825, - 3397956748, - 2184623442, - 1836007574, - 102070427, - 1598026421, - 3465689361, - 703356516, - 1413374599, - 3735457548, - 1147409172, - 1855542604, - 1685439105, - 2567710940, - 1458392111, - 1030621460, - 576465074, - 1340377154, - 1771370400, - 1137886121, - 3320372229, - 861270479, - 4026741435, - 3287230557, + 4242309064, + 3151994194, + 2380760007, + 304141338, + 1141936832, + 174192233, + 200721148, + 1366498521, + 3994849747, + 198064029, + 2463099604, + 1181848525, + 3585832905, + 1502567312, + 3741612627, + 1967290201, + 803376063, + 3996968427, + 1831735777, + 676746421, + 2813831933, + 3101088886, + 715804512, + 2542397118, + 3053186523, + 135963899, + 1418413242, + 1709277287, + 1585287105, + 2608667577, + 3086633796, + 2447653279, + 1487281515, + 4061373748, + 1061157679, + 1486038403, + 3512903590, + 1236737199, ]; static const List _envieddatavisionApi = [ - 2587413174, - 3873776495, - 4101742438, - 1175413290, - 2211467498, - 3359371542, - 2765348189, - 72153132, - 1510187071, - 3007833293, - 2285800003, - 498201922, - 1109185236, - 2025019294, - 3496052832, - 3397956829, - 2184623463, - 1836007632, - 102070486, - 1598026492, - 3465689462, - 703356422, - 1413374717, - 3735457638, - 1147409235, - 1855542650, - 1685439195, - 2567710957, - 1458392149, - 1030621567, - 576465094, - 1340377096, - 1771370488, - 1137886171, - 3320372317, - 861270435, - 4026741497, - 3287230513, + 4242309115, + 3151994146, + 2380759942, + 304141398, + 1141936819, + 174192152, + 200721071, + 1366498442, + 3994849674, + 198064073, + 2463099554, + 1181848503, + 3585832889, + 1502567334, + 3741612650, + 1967290120, + 803376010, + 3996968365, + 1831735724, + 676746492, + 2813831834, + 3101088788, + 715804442, + 2542397140, + 3053186460, + 135963853, + 1418413280, + 1709277270, + 1585287099, + 2608667602, + 3086633776, + 2447653333, + 1487281459, + 4061373766, + 1061157751, + 1486038511, + 3512903652, + 1236737219, ]; static final String visionApi = String.fromCharCodes(List.generate( @@ -7926,237 +8004,237 @@ final class _Env { ).map((int i) => _envieddatavisionApi[i] ^ _enviedkeyvisionApi[i])); static const List _enviedkeysecretKey = [ - 3654463152, - 3416585590, - 3149442923, - 717063272, - 3080547632, - 266800536, - 2759980491, - 2472288810, - 4121794722, - 2196338447, - 906107486, - 1090401676, - 1134651509, - 1511420274, - 1825853416, - 1798074629, - 218876838, - 537036421, - 2404747747, - 16063446, - 2432645494, - 2520161535, - 476781644, - 2819869157, - 1122326427, - 2108107605, - 1296509960, - 1324443907, - 2349447386, - 3531397169, - 3458259817, - 3907233693, - 2827287199, - 2435574896, - 3572243293, - 1198251345, - 3998966605, - 1435932076, - 2261345401, - 3274847032, - 4010681091, - 1919423268, - 3071606787, - 3053141085, - 4123880137, - 3029216777, - 796750198, - 798322019, - 3300309355, - 1631443949, - 4100494388, - 612815205, - 1671043887, - 2042330225, - 3485693301, - 1158490048, - 946237303, - 3001039540, - 4167115672, - 3859138898, - 1117687614, - 1658579885, - 3647987345, - 2607633038, - 2491991917, - 2238113065, - 999163941, - 3334549387, - 1014819469, - 2365576395, - 2123276065, - 239732841, - 3411829899, - 614444503, - 3420340265, - 1224259483, - 2756679908, - 116821267, - 3288044276, - 1634826746, - 1912454918, - 3080184510, - 3531761406, - 403624695, - 1754471204, - 2352341728, - 554577622, - 684370183, - 1937395147, - 964593560, - 2125111951, - 2484308985, - 469494435, - 2156652283, - 2410203027, - 4174100142, - 1456331799, - 569240699, - 3318451332, - 2379208115, - 2829592092, - 268674417, - 2601915327, - 640630908, - 1241136337, - 3526214825, - 78576860, - 3068800988, - 2492167598, - 2155894656, - 103631069, - 2133170522, - 4110066301, - 2136591219, + 21976699, + 1452998254, + 3036621410, + 7204005, + 1217430364, + 1670749229, + 482443604, + 3787147714, + 3697591561, + 742636372, + 542298477, + 1900028264, + 2091851107, + 2847672537, + 1775609193, + 1293392594, + 1735553420, + 3561282980, + 3663882305, + 1047022619, + 3447458639, + 1502752036, + 578647052, + 3493309161, + 1961326923, + 554654685, + 692809793, + 3912080221, + 1833041368, + 2063027993, + 3304308332, + 1294912617, + 3735434889, + 1311730222, + 2176507922, + 1363188572, + 1907861464, + 1954860693, + 2228680260, + 2918092799, + 767117478, + 977702458, + 2461801236, + 1854573550, + 226743729, + 2276742753, + 3203858729, + 1142276358, + 3167166563, + 1552026201, + 189479665, + 1089169811, + 1002861696, + 2952471421, + 3754954323, + 3381138527, + 1639641755, + 3649951534, + 797070922, + 69860492, + 951331360, + 3765322333, + 3952633267, + 817477413, + 2581543012, + 1550755402, + 3117745567, + 2274389987, + 1661625387, + 3329340226, + 2697431099, + 310408627, + 540379112, + 671549684, + 4246332165, + 1313335061, + 2495209344, + 3269290275, + 1460499156, + 2475981176, + 1545086440, + 2148364716, + 835386431, + 2721291697, + 1837033020, + 4222541807, + 3025058180, + 682141564, + 2338650966, + 3765002432, + 731039597, + 137641532, + 3496992292, + 211059179, + 1827626144, + 2351567086, + 239064065, + 2671650538, + 1949697983, + 2184859639, + 129349646, + 924743146, + 394532272, + 546076401, + 1956982163, + 3377099016, + 1504616618, + 856480505, + 3127793245, + 4195545612, + 3577865707, + 546718952, + 1097498367, + 721435183, ]; static const List _envieddatasecretKey = [ - 3654463178, - 3416585489, - 3149442868, - 717063194, - 3080547679, - 266800616, - 2759980449, - 2472288885, - 4121794711, - 2196338488, - 906107415, - 1090401765, - 1134651395, - 1511420228, - 1825853336, - 1798074696, - 218876896, - 537036486, - 2404747681, - 16063376, - 2432645383, - 2520161484, - 476781583, - 2819869143, - 1122326517, - 2108107619, - 1296510017, - 1324443995, - 2349447350, - 3531397212, - 3458259715, - 3907233764, - 2827287284, - 2435574784, - 3572243237, - 1198251285, - 3998966560, - 1435932155, - 2261345344, - 3274846987, - 4010681168, - 1919423347, - 3071606832, - 3053141035, - 4123880127, - 3029216849, - 796750110, - 798322005, - 3300309331, - 1631443896, - 4100494453, - 612815196, - 1671043963, - 2042330180, - 3485693235, - 1158489999, - 946237221, - 3001039584, - 4167115727, - 3859138869, - 1117687657, - 1658579934, - 3647987397, - 2607633085, - 2491991898, - 2238113146, - 999163985, - 3334549440, - 1014819582, - 2365576324, - 2123276145, - 239732749, - 3411830012, - 614444435, - 3420340301, - 1224259560, - 2756679837, - 116821291, - 3288044165, - 1634826664, - 1912454975, - 3080184525, - 3531761292, - 403624634, - 1754471281, - 2352341644, - 554577571, - 684370278, - 1937395107, - 964593643, - 2125111996, - 2484308887, - 469494515, - 2156652211, - 2410203109, - 4174100169, - 1456331861, - 569240602, - 3318451383, - 2379208064, - 2829592168, - 268674358, - 2601915348, - 640630853, - 1241136353, - 3526214879, - 78576778, - 3068801001, - 2492167670, - 2155894770, - 103630981, - 2133170486, - 4110066239, - 2136591135, + 21976577, + 1452998153, + 3036621373, + 7204055, + 1217430323, + 1670749277, + 482443582, + 3787147677, + 3697591612, + 742636387, + 542298404, + 1900028161, + 2091851029, + 2847672559, + 1775609113, + 1293392543, + 1735553482, + 3561283047, + 3663882243, + 1047022685, + 3447458622, + 1502752023, + 578647119, + 3493309147, + 1961326885, + 554654699, + 692809736, + 3912080133, + 1833041332, + 2063028084, + 3304308230, + 1294912528, + 3735434978, + 1311730270, + 2176508010, + 1363188504, + 1907861429, + 1954860738, + 2228680317, + 2918092748, + 767117557, + 977702509, + 2461801255, + 1854573464, + 226743751, + 2276742713, + 3203858753, + 1142276400, + 3167166555, + 1552026124, + 189479600, + 1089169834, + 1002861780, + 2952471368, + 3754954261, + 3381138448, + 1639641801, + 3649951610, + 797070877, + 69860587, + 951331447, + 3765322286, + 3952633319, + 817477398, + 2581542995, + 1550755353, + 3117745643, + 2274389928, + 1661625432, + 3329340173, + 2697431147, + 310408663, + 540379039, + 671549616, + 4246332257, + 1313335142, + 2495209465, + 3269290267, + 1460499109, + 2475981098, + 1545086417, + 2148364767, + 835386445, + 2721291772, + 1837033065, + 4222541699, + 3025058289, + 682141469, + 2338650942, + 3765002419, + 731039582, + 137641554, + 3496992372, + 211059107, + 1827626198, + 2351566985, + 239064131, + 2671650443, + 1949697932, + 2184859588, + 129349754, + 924743085, + 394532315, + 546076360, + 1956982179, + 3377099134, + 1504616700, + 856480460, + 3127793157, + 4195545726, + 3577865651, + 546718852, + 1097498301, + 721435203, ]; static final String secretKey = String.fromCharCodes(List.generate( @@ -8166,237 +8244,237 @@ final class _Env { ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); static const List _enviedkeystripePublishableKe = [ - 876514748, - 3658219415, - 2076135858, - 40205727, - 1517171072, - 3477284252, - 362607344, - 4243435846, - 1318148537, - 2070291139, - 3189615878, - 2658254458, - 3451629188, - 2366106020, - 3425948970, - 4262994335, - 619782453, - 38440205, - 3779921531, - 95454900, - 3064295405, - 325337346, - 2582345877, - 663305894, - 4181923300, - 2733377203, - 1744020604, - 2444027456, - 2787558541, - 2827753833, - 1279538374, - 2513160312, - 2790913443, - 460154456, - 1908612745, - 3001862570, - 604842350, - 3194255383, - 3825639760, - 834700785, - 1351339590, - 1068699204, - 2276945742, - 3905087556, - 1201994132, - 1433007093, - 572855162, - 2978592381, - 1089092991, - 2435560104, - 1585561424, - 2024222980, - 587364406, - 2066162669, - 2158595549, - 3793911624, - 1301986217, - 1840181878, - 488320380, - 1429381767, - 2093424505, - 1430017187, - 1599842342, - 2358096446, - 2888291713, - 4234892307, - 3652652610, - 1734387639, - 1227483346, - 3146929026, - 3339544755, - 2817461714, - 70042317, - 1252342861, - 2312293144, - 1544430299, - 1737279479, - 217116193, - 3462497349, - 3712190436, - 1298055884, - 1587166190, - 191591702, - 719346531, - 3771333436, - 1779391119, - 3800857304, - 1136654901, - 3559928019, - 2912180931, - 1202711060, - 3358184719, - 473143128, - 3947649157, - 500211350, - 255404824, - 3214288455, - 4161791343, - 202463212, - 1007650001, - 2637754075, - 2509849682, - 3197368873, - 4059814102, - 1226905424, - 3450998767, - 615888451, - 3599988369, - 4279456103, - 2744807956, - 1394542425, - 1853957078, - 3143588770, - 2033137164, + 852742872, + 1267117993, + 503617470, + 1227210553, + 2107322754, + 629662297, + 1647470630, + 4015924574, + 830318470, + 3170081617, + 3637973033, + 788582207, + 4290426641, + 351432888, + 3692598474, + 177929365, + 3310512599, + 1303155240, + 2881829959, + 1786735677, + 38833684, + 1110730400, + 2898366826, + 1140664119, + 1811663489, + 1181053236, + 265553710, + 1401588207, + 3805654817, + 571396201, + 2225462231, + 4053735026, + 2220028632, + 1790914927, + 2360028602, + 2052396718, + 3100582716, + 2213480629, + 2781025944, + 3164842593, + 4137208770, + 3273862597, + 1525887355, + 3861438604, + 347768894, + 1364438944, + 3682299133, + 1246189992, + 2163071351, + 2263627641, + 2880507300, + 128701581, + 3981557139, + 4287695248, + 3819246629, + 4076488269, + 4191833813, + 3991586521, + 4011393507, + 2964934600, + 2703871376, + 3337092834, + 1054416731, + 1597148239, + 3123200130, + 1236696155, + 2577532411, + 1727996216, + 2507691163, + 48480224, + 1257280029, + 1667721827, + 1106142015, + 694710280, + 4219128825, + 793984548, + 2454521291, + 3787230524, + 2791698277, + 2133664514, + 251781124, + 3690268377, + 3394026555, + 1741346204, + 1099332453, + 1195251920, + 3617564075, + 499799394, + 1149001320, + 3196589237, + 973074427, + 2630431583, + 1298595435, + 2138223436, + 3825256479, + 733165633, + 1821275026, + 1900219900, + 882412125, + 3291640377, + 3685282013, + 1359362228, + 1806858115, + 2108102838, + 1204058960, + 2250910429, + 3725157861, + 2139320964, + 3752972078, + 3110196582, + 2072562545, + 1090174480, + 1575782319, + 2705828397, ]; static const List _envieddatastripePublishableKe = [ - 876514762, - 3658219504, - 2076135917, - 40205807, - 1517171186, - 3477284339, - 362607232, - 4243435820, - 1318148582, - 2070291190, - 3189615921, - 2658254387, - 3451629293, - 2366106066, - 3425948956, - 4262994386, - 619782515, - 38440270, - 3779921465, - 95454962, - 3064295324, - 325337393, - 2582345942, - 663305876, - 4181923210, - 2733377157, - 1744020503, - 2444027406, - 2787558599, - 2827753735, - 1279538332, - 2513160250, - 2790913498, - 460154382, - 1908612799, - 3001862596, - 604842267, - 3194255443, - 3825639716, - 834700713, - 1351339555, - 1068699261, - 2276945671, - 3905087534, - 1201994193, - 1433007013, - 572855093, - 2978592283, - 1089092887, - 2435560133, - 1585561376, - 2024223040, - 587364418, - 2066162618, - 2158595504, - 3793911612, - 1301986202, - 1840181819, - 488320304, - 1429381845, - 2093424457, - 1430017220, - 1599842423, - 2358096462, - 2888291816, - 4234892379, - 3652652577, - 1734387686, - 1227483327, - 3146929091, - 3339544821, - 2817461663, - 70042264, - 1252342813, - 2312293226, - 1544430209, - 1737279380, - 217116178, - 3462497300, - 3712190349, - 1298055823, - 1587166122, - 191591804, - 719346459, - 3771333502, - 1779391189, - 3800857236, - 1136654935, - 3559927979, - 2912180871, - 1202711127, - 3358184764, - 473143101, - 3947649251, - 500211438, - 255404879, - 3214288447, - 4161791253, - 202463199, - 1007650018, - 2637754041, - 2509849605, - 3197368929, - 4059814119, - 1226905354, - 3450998664, - 615888433, - 3599988450, - 4279456063, - 2744808038, - 1394542337, - 1853957050, - 3143588832, - 2033137248, + 852742830, + 1267118030, + 503617505, + 1227210569, + 2107322864, + 629662262, + 1647470678, + 4015924532, + 830318553, + 3170081636, + 3637973022, + 788582262, + 4290426744, + 351432910, + 3692598524, + 177929432, + 3310512529, + 1303155307, + 2881829893, + 1786735739, + 38833765, + 1110730387, + 2898366761, + 1140664069, + 1811663599, + 1181053186, + 265553733, + 1401588129, + 3805654891, + 571396103, + 2225462157, + 4053734960, + 2220028577, + 1790914873, + 2360028556, + 2052396736, + 3100582729, + 2213480689, + 2781026028, + 3164842553, + 4137208743, + 3273862652, + 1525887282, + 3861438694, + 347768955, + 1364439024, + 3682299058, + 1246190030, + 2163071263, + 2263627540, + 2880507348, + 128701641, + 3981557223, + 4287695303, + 3819246664, + 4076488249, + 4191833830, + 3991586452, + 4011393455, + 2964934554, + 2703871392, + 3337092741, + 1054416650, + 1597148223, + 3123200235, + 1236696083, + 2577532312, + 1727996265, + 2507691254, + 48480161, + 1257280091, + 1667721774, + 1106142058, + 694710360, + 4219128715, + 793984638, + 2454521256, + 3787230479, + 2791698228, + 2133664619, + 251781191, + 3690268317, + 3394026577, + 1741346276, + 1099332391, + 1195251850, + 3617564135, + 499799296, + 1149001232, + 3196589297, + 973074360, + 2630431596, + 1298595342, + 2138223402, + 3825256551, + 733165590, + 1821275114, + 1900219782, + 882412142, + 3291640330, + 3685281983, + 1359362275, + 1806858187, + 2108102791, + 1204058890, + 2250910394, + 3725157783, + 2139321079, + 3752972150, + 3110196500, + 2072562473, + 1090174588, + 1575782381, + 2705828417, ]; static final String stripePublishableKe = String.fromCharCodes( @@ -8409,125 +8487,125 @@ final class _Env { _enviedkeystripePublishableKe[i])); static const List _enviedkeychatGPTkeySefer = [ - 3828515769, - 1122510313, - 3953262767, - 1408310452, - 1822194240, - 154082633, - 1001660738, - 484193291, - 2002203759, - 629351227, - 3973770150, - 26674579, - 1284003086, - 3422591402, - 3920459085, - 2134304979, - 1913021756, - 1336748742, - 1746926880, - 2817268193, - 192604422, - 1582102568, - 2785560302, - 2762244930, - 1572274322, - 384464138, - 4180286216, - 686462029, - 3218873456, - 3526440497, - 2825628193, - 2000997445, - 1300670423, - 1664907881, - 1816966356, - 3323342264, - 3038708469, - 1211530530, - 2493583177, - 1749362911, - 43204795, - 2694147136, - 2658505682, - 2792646701, - 4068187237, - 3193187187, - 3152040852, - 1921832143, - 4044809475, - 2491530058, - 2192584287, - 315634015, - 1575880275, - 2766211356, - 459800476, - 952682329, - 1397265637, - 3700145818, + 1132355700, + 2616724811, + 4205165985, + 2527290338, + 2146395996, + 3243284861, + 3407574293, + 3576653388, + 2798493378, + 1894911129, + 1555304931, + 3730703163, + 1669589981, + 2105350927, + 4086765581, + 3812593271, + 3363213248, + 1464244491, + 3102964009, + 1945033573, + 2223495306, + 2951049579, + 2215848300, + 3311874590, + 2212415185, + 3916148226, + 1867222140, + 3526574019, + 1328262358, + 4246540573, + 2624840385, + 2481823204, + 653533026, + 2856072332, + 3549493501, + 56765761, + 2387997616, + 2703564721, + 1539159159, + 899993527, + 153098900, + 2041834298, + 2972517624, + 1850715488, + 207628368, + 3318888898, + 2094521065, + 1071133446, + 3614717711, + 2241551134, + 865998752, + 3053364456, + 2928984891, + 4047901208, + 2069660987, + 1499741840, + 2518915131, + 851825950, ]; static const List _envieddatachatGPTkeySefer = [ - 3828515779, - 1122510222, - 3953262722, - 1408310525, - 1822194217, - 154082587, - 1001660785, - 484193378, - 2002203739, - 629351252, - 3973770185, - 26674665, - 1284003183, - 3422591385, - 3920459028, - 2134304933, - 1913021780, - 1336748720, - 1746926914, - 2817268184, - 192604532, - 1582102642, - 2785560197, - 2762244979, - 1572274385, - 384464179, - 4180286288, - 686462015, - 3218873352, - 3526440534, - 2825628276, - 2000997376, - 1300670439, - 1664907781, - 1816966380, - 3323342290, - 3038708391, - 1211530608, - 2493583123, - 1749362861, - 43204851, - 2694147114, - 2658505697, - 2792646780, - 4068187136, - 3193187142, - 3152040901, - 1921832087, - 4044809555, - 2491530022, - 2192584238, - 315633929, - 1575880203, - 2766211438, - 459800516, - 952682293, - 1397265575, - 3700145910, + 1132355598, + 2616724780, + 4205165964, + 2527290283, + 2146395957, + 3243284783, + 3407574310, + 3576653349, + 2798493430, + 1894911222, + 1555304844, + 3730703169, + 1669589948, + 2105350972, + 4086765652, + 3812593153, + 3363213224, + 1464244605, + 3102964043, + 1945033564, + 2223495416, + 2951049521, + 2215848199, + 3311874607, + 2212415122, + 3916148283, + 1867222052, + 3526574001, + 1328262318, + 4246540666, + 2624840340, + 2481823137, + 653533010, + 2856072416, + 3549493445, + 56765739, + 2387997666, + 2703564771, + 1539159085, + 899993541, + 153098972, + 2041834320, + 2972517579, + 1850715441, + 207628341, + 3318888951, + 2094521016, + 1071133534, + 3614717791, + 2241551218, + 865998801, + 3053364414, + 2928984931, + 4047901290, + 2069661027, + 1499741948, + 2518915193, + 851826034, ]; static final String chatGPTkeySefer = String.fromCharCodes(List.generate( @@ -8538,157 +8616,157 @@ final class _Env { (int i) => _envieddatachatGPTkeySefer[i] ^ _enviedkeychatGPTkeySefer[i])); static const List _enviedkeyllamaKey = [ - 718274881, - 43918519, - 1035336099, - 3530924980, - 4177290048, - 3891250685, - 1417458965, - 2462639059, - 1173170674, - 134564287, - 3916589804, - 3907114176, - 59541341, - 1084921401, - 399944843, - 2167463616, - 985939721, - 3602640176, - 3637308129, - 445991234, - 1042298384, - 4261190747, - 75311953, - 4076073787, - 3146584602, - 3753629753, - 3615512101, - 875903464, - 883808121, - 3468599075, - 2746200671, - 1072473529, - 4002086586, - 1973891555, - 2864880638, - 704984882, - 1760979656, - 3589747206, - 3252999772, - 3864969355, - 2619144558, - 2506943584, - 3852811552, - 2726057005, - 1664604992, - 577026891, - 3109760396, - 240297872, - 975650921, - 1447165586, - 1201836595, - 912313223, - 3587424956, - 4039444014, - 1142697319, - 1101696944, - 2981762231, - 2586652660, - 3810960882, - 3795959514, - 3307311850, - 2929648546, - 3409186162, - 3918093583, - 3259877139, - 1253635736, - 3006720290, - 3882729327, - 3870725696, - 1350987208, - 248531164, - 4062780763, - 3478462698, - 2191690024, + 1046758203, + 395008810, + 1953335401, + 2453937327, + 3279053365, + 1317244565, + 3574039562, + 1215902332, + 1644280699, + 518881544, + 3844689288, + 501085620, + 1349721798, + 2543356164, + 961930120, + 2818059939, + 3469485470, + 495624143, + 2760936556, + 2425296758, + 3500690850, + 2773468800, + 1918639328, + 2232542112, + 4208402208, + 1334575062, + 794476552, + 1469116811, + 2141997342, + 2257055320, + 3738100120, + 2800440337, + 2089922040, + 1630009804, + 138746912, + 3777561700, + 2821301478, + 2593962585, + 3273791986, + 576637506, + 410833351, + 3638804837, + 151198496, + 494283407, + 3064398941, + 3295715808, + 3928421722, + 1572458343, + 2771449688, + 3691682050, + 2193264043, + 3187159780, + 3304236798, + 1172781432, + 4020314708, + 1406058279, + 1733425633, + 74657417, + 870365763, + 4238651139, + 1606537654, + 4235541775, + 685386054, + 4129252757, + 2847373843, + 2912633518, + 681412129, + 743116068, + 1543224887, + 2061637412, + 4204939294, + 173568990, + 1114381103, + 3421798646, ]; static const List _envieddatallamaKey = [ - 718274835, - 43918565, - 1035336078, - 3530925041, - 4177290037, - 3891250564, - 1417459066, - 2462638997, - 1173170614, - 134564330, - 3916589722, - 3907114150, - 59541263, - 1084921469, - 399944905, - 2167463599, - 985939811, - 3602640132, - 3637308119, - 445991204, - 1042298442, - 4261190672, - 75311888, - 4076073807, - 3146584657, - 3753629811, - 3615512086, - 875903390, - 883808022, - 3468599150, - 2746200679, - 1072473588, - 4002086606, - 1973891540, - 2864880584, - 704984842, - 1760979627, - 3589747286, - 3252999737, - 3864969409, - 2619144504, - 2506943575, - 3852811623, - 2726057059, - 1664604964, - 577026826, - 3109760487, - 240297920, - 975650877, - 1447165657, - 1201836631, - 912313310, - 3587424900, - 4039444065, - 1142697219, - 1101696989, - 2981762190, - 2586652570, - 3810960838, - 3795959485, - 3307311757, - 2929648613, - 3409186051, - 3918093638, - 3259877158, - 1253635807, - 3006720347, - 3882729216, - 3870725656, - 1350987194, - 248531076, - 4062780727, - 3478462632, - 2191690052, + 1046758249, + 395008888, + 1953335364, + 2453937386, + 3279053376, + 1317244652, + 3574039653, + 1215902266, + 1644280639, + 518881629, + 3844689406, + 501085650, + 1349721748, + 2543356224, + 961930186, + 2818059980, + 3469485556, + 495624187, + 2760936538, + 2425296656, + 3500690936, + 2773468875, + 1918639265, + 2232542164, + 4208402283, + 1334575004, + 794476603, + 1469116925, + 2141997425, + 2257055253, + 3738100128, + 2800440412, + 2089921932, + 1630009851, + 138746902, + 3777561692, + 2821301381, + 2593962505, + 3273791895, + 576637448, + 410833297, + 3638804818, + 151198567, + 494283457, + 3064398905, + 3295715745, + 3928421681, + 1572458295, + 2771449612, + 3691682121, + 2193264079, + 3187159741, + 3304236742, + 1172781367, + 4020314672, + 1406058314, + 1733425624, + 74657511, + 870365815, + 4238651236, + 1606537681, + 4235541832, + 685386039, + 4129252828, + 2847373862, + 2912633577, + 681412184, + 743116107, + 1543224943, + 2061637462, + 4204939334, + 173568946, + 1114381165, + 3421798554, ]; static final String llamaKey = String.fromCharCodes(List.generate( @@ -8698,65 +8776,65 @@ final class _Env { ).map((int i) => _envieddatallamaKey[i] ^ _enviedkeyllamaKey[i])); static const List _enviedkeyserverPHP = [ - 690267321, - 986154779, - 3912670525, - 2020362393, - 2727368054, - 868762389, - 3336627634, - 1486140679, - 3854218818, - 345798652, - 2113101983, - 1413021410, - 4254920968, - 2567637083, - 3216036756, - 2638115032, - 538950038, - 3568054948, - 2024838444, - 1936285171, - 123229642, - 2521088569, - 4142818245, - 3069657302, - 948569947, - 3065710519, - 41540649, - 249400926, + 136784060, + 3329979825, + 3963111006, + 275155448, + 1346893870, + 3643081673, + 844539938, + 3201830972, + 2240275309, + 1976641573, + 882466245, + 3994694885, + 2903906195, + 3937636000, + 777269346, + 754464604, + 2551192637, + 2699808318, + 2110753149, + 3808933615, + 2299845352, + 147834543, + 249091391, + 1721998470, + 1997931045, + 3728953200, + 1675657642, + 234794800, ]; static const List _envieddataserverPHP = [ - 690267345, - 986154863, - 3912670537, - 2020362473, - 2727367941, - 868762415, - 3336627613, - 1486140712, - 3854218787, - 345798540, - 2113102070, - 1413021388, - 4254921083, - 2567637054, - 3216036850, - 2638115005, - 538950116, - 3568054922, - 2024838464, - 1936285082, - 123229628, - 2521088604, - 4142818282, - 3069657253, - 948569918, - 3065710545, - 41540684, - 249400876, + 136784084, + 3329979845, + 3963110954, + 275155336, + 1346893917, + 3643081715, + 844539917, + 3201830931, + 2240275212, + 1976641621, + 882466220, + 3994694859, + 2903906272, + 3937636037, + 777269252, + 754464569, + 2551192655, + 2699808272, + 2110753041, + 3808933510, + 2299845278, + 147834570, + 249091344, + 1721998581, + 1997931072, + 3728953110, + 1675657679, + 234794818, ]; static final String serverPHP = String.fromCharCodes(List.generate( @@ -8766,77 +8844,77 @@ final class _Env { ).map((int i) => _envieddataserverPHP[i] ^ _enviedkeyserverPHP[i])); static const List _enviedkeyseferAlexandriaServer = [ - 3130442956, - 4159453127, - 1435322127, - 3505180604, - 2378495829, - 1487183399, - 1372745074, - 3321809836, - 2210972875, - 2436730833, - 156324606, - 479930271, - 2278564115, - 1625529197, - 2462548402, - 2110251768, - 1800913045, - 3914764925, - 2561423239, - 28131136, - 3808095291, - 3826571942, - 3192331182, - 3151262737, - 612910381, - 1116367226, - 339139684, - 82367597, - 1878153550, - 1438314440, - 1071949741, - 4226074809, - 2006603887, - 104296793, + 2678342472, + 911184417, + 2158768204, + 998467215, + 3083374296, + 2149883830, + 892800160, + 2754182323, + 3199574306, + 966044870, + 3598396201, + 3181074056, + 2231062873, + 3018774722, + 3637627180, + 1675789918, + 866711761, + 1880740419, + 491729161, + 3288189254, + 2033470673, + 2654508839, + 4227816290, + 3944220878, + 2714480020, + 1508824018, + 1179598114, + 2526469296, + 2392336840, + 1655593147, + 3989870417, + 2957024241, + 1306650807, + 399063647, ]; static const List _envieddataseferAlexandriaServer = [ - 3130442916, - 4159453107, - 1435322235, - 3505180620, - 2378495782, - 1487183389, - 1372745053, - 3321809795, - 2210972856, - 2436730804, - 156324504, - 479930362, - 2278564193, - 1625529100, - 2462548446, - 2110251677, - 1800913133, - 3914764828, - 2561423337, - 28131108, - 3808095305, - 3826571983, - 3192331215, - 3151262783, - 612910430, - 1116367123, - 339139600, - 82367496, - 1878153569, - 1438314427, - 1071949768, - 4226074847, - 2006603786, - 104296747, + 2678342432, + 911184469, + 2158768184, + 998467327, + 3083374251, + 2149883788, + 892800143, + 2754182300, + 3199574353, + 966044835, + 3598396239, + 3181074157, + 2231062827, + 3018774691, + 3637627200, + 1675789883, + 866711721, + 1880740386, + 491729255, + 3288189218, + 2033470627, + 2654508878, + 4227816195, + 3944220896, + 2714480103, + 1508823995, + 1179598166, + 2526469333, + 2392336871, + 1655593160, + 3989870388, + 2957024151, + 1306650834, + 399063597, ]; static final String seferAlexandriaServer = String.fromCharCodes( @@ -8849,459 +8927,459 @@ final class _Env { _enviedkeyseferAlexandriaServer[i])); static const List _enviedkeywhatsapp = [ - 2314826291, - 3705858160, - 2733576005, - 2574229956, - 2193296548, - 1803609467, - 2978302673, - 1525226554, - 461544383, - 4269942853, - 1901453392, - 787427305, - 610992601, - 3396561063, - 3600604474, - 4038130351, - 3674117733, - 3065755419, - 1658137477, - 1095657005, - 304006016, - 145406252, - 2027048891, - 1173962907, - 2172563228, - 2278848442, - 752169586, - 531303566, - 3492598424, - 66380735, - 136852293, - 2956932059, - 669191123, - 527777235, - 167191276, - 2805348444, - 1729263794, - 1385765292, - 2591641537, - 715966522, - 1513753165, - 48266555, - 2458133980, - 3451583562, - 2548265665, - 829900145, - 3246705661, - 1124976797, - 3193694097, - 1002460522, - 1642617955, - 3776995085, - 2682978427, - 3057991762, - 1853396094, - 3216259780, - 2031149651, - 1084895166, - 1369940232, - 2874274133, - 4022239950, - 2636929910, - 1690173967, - 1687171307, - 3506209777, - 3374925507, - 1865398683, - 3633869538, - 3638894531, - 4239993695, - 2497880038, - 1360153668, - 2834566748, - 1249564345, - 3204343765, - 1308247711, - 2050515352, - 708068455, - 792968551, - 4141844180, - 2213364689, - 2662098845, - 1766804796, - 1156367325, - 239889576, - 2939081648, - 3918245325, - 3542161055, - 3233083982, - 2055579115, - 1781284714, - 144356209, - 4270888948, - 1121549347, - 1140834615, - 1493519308, - 595114979, - 1164782533, - 2989457958, - 1238777474, - 2272656959, - 2100593090, - 2625403831, - 2233559563, - 1811942331, - 1604782696, - 999024462, - 845286856, - 1753266125, - 299767516, - 469256077, - 1751323727, - 4020414466, - 1625710104, - 3399152516, - 291604961, - 639180565, - 2373261919, - 2378984807, - 2708802280, - 4195641655, - 771291976, - 1574473714, - 1018605914, - 1885712612, - 1031487623, - 432381962, - 4124790828, - 4208931970, - 1559732144, - 1401344603, - 1163908458, - 3923533473, - 1115587448, - 2793584775, - 962624732, - 2058771688, - 529408705, - 2966443566, - 3769757663, - 3761308600, - 1450097904, - 961674376, - 1415639059, - 362893202, - 908268066, - 2997060034, - 3204324547, - 26249817, - 2401321084, - 3092399958, - 3662211376, - 1837897414, - 134852601, - 1614383128, - 3581532033, - 1639059727, - 1824224605, - 1382933689, - 2896175625, - 1925511203, - 3935692519, - 539664745, - 1365029565, - 2164037395, - 3812836188, - 2557390918, - 2906196765, - 4228420694, - 1848412359, - 3337391915, - 2303142266, - 114547934, - 3938964087, - 928354934, - 3785376213, - 2166350240, - 398157133, - 2947652590, - 1461468363, - 686077996, - 4251629055, - 1514833890, - 1883577095, - 2428118207, - 3649479287, - 2386283762, - 3992819500, - 1627572360, - 2823609251, - 3188042215, - 1096240208, - 2743216881, - 3671930706, - 2750355672, - 687529587, - 1124238295, - 118820826, - 2871849821, - 2640521823, - 511491064, - 1544570156, - 164984782, - 3697817683, - 395117147, - 3333850388, - 3736536663, - 512864734, - 3196286767, - 1431087716, - 1573567079, - 3691459886, - 2960306340, - 2827187368, - 1682304056, - 580258271, - 2747284367, - 2401707395, - 3894499304, - 600982657, - 1848141143, - 4207274952, - 1511492725, - 3482158830, - 2846325392, + 1865934477, + 470239689, + 4036471296, + 2160427406, + 4118066865, + 3283361244, + 4148590103, + 2500913758, + 3289510749, + 1650314614, + 1689493709, + 1358346019, + 2070078769, + 3913518243, + 3148768190, + 1442781110, + 1288086312, + 2062794235, + 3417590733, + 1651368454, + 1137143026, + 1513122744, + 2443321653, + 3154740397, + 841859175, + 2183935495, + 1415577355, + 2260587322, + 66539239, + 1801389163, + 956515969, + 3199754478, + 1713026935, + 2082575629, + 1922876038, + 425039213, + 2361743019, + 3868512309, + 3152855175, + 559820798, + 1118478308, + 2542036464, + 1364373848, + 2369241172, + 2988243622, + 227104355, + 3591056375, + 216746303, + 1962914655, + 2531420995, + 2939317724, + 3872885702, + 3282738572, + 3232671827, + 2264249589, + 1898464521, + 4236397185, + 3566093731, + 1658336297, + 2160936377, + 2776951058, + 860904727, + 3229909217, + 1150176268, + 3616654759, + 2700939400, + 3978798356, + 2201402828, + 108076149, + 3678927331, + 3067768326, + 1570754358, + 2217817676, + 1560848988, + 3784628055, + 4227127211, + 3635899623, + 2097722833, + 2420759675, + 618408425, + 3948031410, + 1690510567, + 1742737049, + 3552709002, + 3804175656, + 2525481113, + 3146825753, + 1998711895, + 2050727943, + 2829149535, + 788978160, + 1175696898, + 4170331080, + 2338259788, + 690172299, + 3854564381, + 2304396960, + 793199571, + 1568159346, + 1733125859, + 389177205, + 3698411061, + 3776076497, + 3844170192, + 202938393, + 2677636715, + 3597470318, + 2271388930, + 67407118, + 2804378997, + 2088523376, + 3648477881, + 2176057080, + 1418674012, + 3338953122, + 1497437562, + 2119728353, + 2628484369, + 1475170805, + 1055053098, + 1855099557, + 829431043, + 1553910249, + 173321112, + 3116769201, + 1053798782, + 1074206741, + 1180452413, + 780930116, + 4025252875, + 3344965525, + 774922988, + 1420761348, + 2576861369, + 3479691063, + 4260517407, + 3923144396, + 776879607, + 2784374088, + 3627545051, + 3170443413, + 56931634, + 534230463, + 413627036, + 158846251, + 374867456, + 2947920902, + 3312242211, + 3920439140, + 3757628273, + 3326871813, + 1129616875, + 2173889050, + 3273611449, + 2209014709, + 1054893635, + 274588319, + 1030060936, + 1225990859, + 1967920099, + 1500357118, + 4158317299, + 2715634413, + 3247534722, + 226355008, + 1060797540, + 3163788606, + 3886604503, + 1010193593, + 3169025688, + 4091748588, + 1310616799, + 1364105843, + 897660430, + 737780023, + 983087932, + 2622267459, + 1260736875, + 3246297987, + 3882012242, + 1276679860, + 635742828, + 1086973666, + 2918529318, + 3092934762, + 1735849887, + 125155234, + 2076129520, + 2445611883, + 854280602, + 3106518390, + 3672910932, + 3305019311, + 3335188740, + 3527337138, + 728200086, + 58950914, + 764490865, + 4100716152, + 3652135408, + 3997937220, + 1317895054, + 2815449943, + 660033916, + 4278045327, + 2833551708, + 3429833982, + 276938524, + 1553950989, + 1694119636, + 1740963759, + 1751476734, + 3750656267, + 3534508835, + 608920604, + 994882155, + 244482147, + 2962744634, + 663156684, + 2256811906, + 1076536936, + 140128007, + 2215911479, + 3196140294, + 3410165268, ]; static const List _envieddatawhatsapp = [ - 2314826358, - 3705858097, - 2733575940, - 2574229899, - 2193296592, - 1803609369, - 2978302603, - 1525226616, - 461544428, - 4269942800, - 1901453339, - 787427294, - 610992621, - 3396561125, - 3600604533, - 4038130389, - 3674117682, - 3065755426, - 1658137596, - 1095657039, - 304006071, - 145406232, - 2027048958, - 1173963004, - 2172563293, - 2278848458, - 752169507, - 531303639, - 3492598508, - 66380790, - 136852349, - 2956932067, - 669191101, - 527777162, - 167191192, - 2805348377, - 1729263755, - 1385765318, - 2591641488, - 715966547, - 1513753204, - 48266602, - 2458133938, - 3451583494, - 2548265606, - 829900033, - 3246705546, - 1124976814, - 3193694167, - 1002460475, - 1642617875, - 3776995182, - 2682978382, - 3057991734, - 1853395974, - 3216259725, - 2031149631, - 1084895226, - 1369940335, - 2874274051, - 4022239876, - 2636929804, - 1690174060, - 1687171238, - 3506209672, - 3374925492, - 1865398750, - 3633869472, - 3638894514, - 4239993617, - 2497879999, - 1360153634, - 2834566767, - 1249564362, - 3204343789, - 1308247791, - 2050515443, - 708068364, - 792968529, - 4141844151, - 2213364619, - 2662098911, - 1766804745, - 1156367244, - 239889560, - 2939081668, - 3918245286, - 3542161108, - 3233083963, - 2055579064, - 1781284645, - 144356139, - 4270888886, - 1121549392, - 1140834680, - 1493519290, - 595114926, - 1164782495, - 2989458023, - 1238777521, - 2272657003, - 2100593057, - 2625403843, - 2233559651, - 1811942283, - 1604782625, - 999024418, - 845286794, - 1753266053, - 299767439, - 469256172, - 1751323650, - 4020414548, - 1625710188, - 3399152615, - 291604915, - 639180623, - 2373261852, - 2378984724, - 2708802185, - 4195641699, - 771291907, - 1574473660, - 1018605833, - 1885712561, - 1031487735, - 432382060, - 4124790880, - 4208932048, - 1559732215, - 1401344521, - 1163908360, - 3923533457, - 1115587338, - 2793584879, - 962624656, - 2058771597, - 529408699, - 2966443616, - 3769757593, - 3761308628, - 1450097820, - 961674488, - 1415639114, - 362893264, - 908268101, - 2997060015, - 3204324525, - 26249791, - 2401320990, - 3092399934, - 3662211429, - 1837897383, - 134852483, - 1614383179, - 3581532123, - 1639059789, - 1824224516, - 1382933729, - 2896175725, - 1925511249, - 3935692499, - 539664729, - 1365029587, - 2164037502, - 3812836114, - 2557390962, - 2906196812, - 4228420627, - 1848412320, - 3337391964, - 2303142175, - 114547861, - 3938964037, - 928354835, - 3785376164, - 2166350329, - 398157084, - 2947652480, - 1461468319, - 686078072, - 4251628977, - 1514833815, - 1883577205, - 2428118214, - 3649479203, - 2386283709, - 3992819541, - 1627572426, - 2823609288, - 3188042156, - 1096240138, - 2743216819, - 3671930723, - 2750355605, - 687529515, - 1124238234, - 118820781, - 2871849835, - 2640521738, - 511491023, - 1544570237, - 164984736, - 3697817607, - 395117065, - 3333850437, - 3736536595, - 512864678, - 3196286823, - 1431087622, - 1573567026, - 3691459960, - 2960306376, - 2827187417, - 1682304095, - 580258198, - 2747284445, - 2401707479, - 3894499226, - 600982761, - 1848141110, - 4207274919, - 1511492634, - 3482158772, - 2846325460, + 1865934536, + 470239624, + 4036471361, + 2160427457, + 4118066885, + 3283361214, + 4148590157, + 2500913692, + 3289510670, + 1650314531, + 1689493638, + 1358346004, + 2070078725, + 3913518305, + 3148768241, + 1442781132, + 1288086399, + 2062794178, + 3417590708, + 1651368548, + 1137142981, + 1513122700, + 2443321712, + 3154740426, + 841859110, + 2183935607, + 1415577434, + 2260587363, + 66539155, + 1801389090, + 956516025, + 3199754454, + 1713026841, + 2082575700, + 1922876146, + 425039144, + 2361742994, + 3868512351, + 3152855254, + 559820695, + 1118478301, + 2542036385, + 1364373814, + 2369241112, + 2988243681, + 227104275, + 3591056256, + 216746252, + 1962914585, + 2531420946, + 2939317676, + 3872885669, + 3282738617, + 3232671799, + 2264249485, + 1898464576, + 4236397293, + 3566093799, + 1658336334, + 2160936431, + 2776951128, + 860904813, + 3229909122, + 1150176321, + 3616654814, + 2700939519, + 3978798417, + 2201402766, + 108076036, + 3678927277, + 3067768415, + 1570754384, + 2217817727, + 1560848943, + 3784628079, + 4227127259, + 3635899532, + 2097722810, + 2420759629, + 618408330, + 3948031464, + 1690510501, + 1742737068, + 3552709083, + 3804175640, + 2525481197, + 3146825842, + 1998711836, + 2050728050, + 2829149452, + 788978111, + 1175696984, + 4170331018, + 2338259775, + 690172356, + 3854564459, + 2304397037, + 793199497, + 1568159283, + 1733125840, + 389177121, + 3698411094, + 3776076453, + 3844170168, + 202938409, + 2677636642, + 3597470210, + 2271388992, + 67407174, + 2804378918, + 2088523281, + 3648477940, + 2176057006, + 1418673960, + 3338953153, + 1497437480, + 2119728315, + 2628484434, + 1475170694, + 1055053131, + 1855099633, + 829431112, + 1553910183, + 173321163, + 3116769252, + 1053798670, + 1074206835, + 1180452465, + 780930070, + 4025252940, + 3344965575, + 774922894, + 1420761396, + 2576861387, + 3479691103, + 4260517459, + 3923144361, + 776879501, + 2784374022, + 3627544989, + 3170443513, + 56931678, + 534230479, + 413627077, + 158846313, + 374867559, + 2947921003, + 3312242253, + 3920439042, + 3757628179, + 3326871917, + 1129616830, + 2173889147, + 3273611459, + 2209014758, + 1054893593, + 274588381, + 1030061009, + 1225990803, + 1967920007, + 1500357004, + 4158317255, + 2715634397, + 3247534828, + 226354989, + 1060797482, + 3163788554, + 3886604422, + 1010193660, + 3169025791, + 4091748507, + 1310616762, + 1364105784, + 897660476, + 737780050, + 983087949, + 2622267418, + 1260736826, + 3246298093, + 3882012166, + 1276679904, + 635742754, + 1086973591, + 2918529364, + 3092934675, + 1735849931, + 125155309, + 2076129417, + 2445611817, + 854280689, + 3106518333, + 3672910862, + 3305019373, + 3335188789, + 3527337215, + 728200142, + 58950991, + 764490758, + 4100716110, + 3652135333, + 3997937267, + 1317895135, + 2815449913, + 660033832, + 4278045405, + 2833551629, + 3429833914, + 276938596, + 1553951045, + 1694119606, + 1740963834, + 1751476648, + 3750656359, + 3534508882, + 608920699, + 994882082, + 244482097, + 2962744686, + 663156670, + 2256812010, + 1076536841, + 140128104, + 2215911512, + 3196140380, + 3410165328, ]; static final String whatsapp = String.fromCharCodes(List.generate( @@ -9311,41 +9389,41 @@ final class _Env { ).map((int i) => _envieddatawhatsapp[i] ^ _enviedkeywhatsapp[i])); static const List _enviedkeywhatappID = [ - 3541601174, - 1376766950, - 276779285, - 104349768, - 2130563736, - 1547842195, - 4153132128, - 1829301397, - 3309911463, - 163177719, - 4023562387, - 697894604, - 3604205243, - 2228891821, - 1033273803, - 2800896661, + 3123272374, + 3828651595, + 4029932330, + 1607246416, + 1779628122, + 2831414386, + 639956309, + 814357000, + 3090170036, + 3378591476, + 258323974, + 3049708808, + 3852322243, + 3653663471, + 1679480947, + 4101228167, ]; static const List _envieddatawhatappID = [ - 3541601189, - 1376766928, - 276779308, - 104349809, - 2130563755, - 1547842218, - 4153132119, - 1829301414, - 3309911441, - 163177669, - 4023562411, - 697894653, - 3604205194, - 2228891797, - 1033273852, - 2800896684, + 3123272325, + 3828651645, + 4029932307, + 1607246441, + 1779628137, + 2831414347, + 639956322, + 814357051, + 3090169986, + 3378591430, + 258324030, + 3049708857, + 3852322290, + 3653663447, + 1679480900, + 4101228222, ]; static final String whatappID = String.fromCharCodes(List.generate( @@ -9355,61 +9433,61 @@ final class _Env { ).map((int i) => _envieddatawhatappID[i] ^ _enviedkeywhatappID[i])); static const List _enviedkeyseferPaymentServer = [ - 4041910065, - 3750565872, - 1774250308, - 1109874365, - 2462053754, - 156182580, - 1932377152, - 3860367672, - 951561788, - 2208884840, - 2450769819, - 3703756580, - 1793324006, - 574671184, - 2885330743, - 2531320255, - 216834867, - 198077899, - 3720958049, - 4058092462, - 3827553790, - 1903208137, - 906085840, - 2160187600, - 3089562779, - 1680658518, + 3135591403, + 4052118669, + 1252878878, + 2326376361, + 2892565907, + 3141608763, + 3337838895, + 3127217716, + 522732804, + 673504242, + 3008226015, + 812786587, + 996271070, + 2014188411, + 2361945143, + 4265052590, + 3070533467, + 620957098, + 1474692178, + 3022997745, + 1899596157, + 4187766408, + 2427871948, + 20441730, + 493532712, + 3269520029, ]; static const List _envieddataseferPaymentServer = [ - 4041910105, - 3750565764, - 1774250288, - 1109874381, - 2462053641, - 156182542, - 1932377199, - 3860367639, - 951561807, - 2208884749, - 2450769917, - 3703756609, - 1793323924, - 574671136, - 2885330752, - 2531320209, - 216834880, - 198077859, - 3720957966, - 4058092510, - 3827553745, - 1903208122, - 906085813, - 2160187574, - 3089562878, - 1680658468, + 3135591299, + 4052118777, + 1252878954, + 2326376409, + 2892565984, + 3141608705, + 3337838848, + 3127217691, + 522732919, + 673504151, + 3008225977, + 812786686, + 996271020, + 2014188299, + 2361945152, + 4265052544, + 3070533416, + 620957122, + 1474692157, + 3022997633, + 1899596114, + 4187766523, + 2427871913, + 20441828, + 493532749, + 3269520111, ]; static final String seferPaymentServer = String.fromCharCodes( @@ -9421,95 +9499,95 @@ final class _Env { _envieddataseferPaymentServer[i] ^ _enviedkeyseferPaymentServer[i])); static const List _enviedkeyseferCairoServer = [ - 138743384, - 438834682, - 1798193620, - 1922682257, - 633113906, - 3031685544, - 2449610601, - 1478661285, - 530099082, - 1902153614, - 1183656720, - 439667246, - 2075771564, - 2548611103, - 366266381, - 3661016385, - 816362445, - 1513882374, - 3310966987, - 3181267732, - 108417366, - 3198277404, - 3903338650, - 3146982780, - 2229529171, - 4191915930, - 3307556352, - 3207956038, - 132947553, - 506915609, - 3503227296, - 81779609, - 2824310429, - 3297570925, - 2539239238, - 1928047182, - 660747716, - 1340781596, - 2336552572, - 285946027, - 4122051035, - 235994590, - 1380966811, + 4203282252, + 4137070837, + 2250967405, + 453566573, + 2752956968, + 1903263830, + 1889272289, + 611470739, + 1702129731, + 1876620994, + 454451364, + 3000433964, + 768284265, + 1321939726, + 2940756997, + 1044479748, + 3437110981, + 1265925004, + 998980043, + 2127742623, + 3514062751, + 3448706290, + 3197411473, + 3572048172, + 3923224580, + 988084329, + 315672878, + 1485538712, + 2629567749, + 3100733085, + 106899519, + 2854528337, + 837501440, + 1433498020, + 891021752, + 1149349037, + 2218971392, + 1623064706, + 3794151780, + 811867401, + 1158037355, + 2900434970, + 1244093694, ]; static const List _envieddataseferCairoServer = [ - 138743344, - 438834574, - 1798193568, - 1922682337, - 633113921, - 3031685522, - 2449610566, - 1478661258, - 530099193, - 1902153707, - 1183656802, - 439667288, - 2075771593, - 2548611181, - 366266403, - 3661016370, - 816362408, - 1513882464, - 3310966958, - 3181267814, - 108417400, - 3198277488, - 3903338739, - 3146982666, - 2229529142, - 4191915957, - 3307556467, - 3207956003, - 132947463, - 506915708, - 3503227346, - 81779639, - 2824310526, - 3297570817, - 2539239215, - 1928047149, - 660747695, - 1340781619, - 2336552463, - 285946062, - 4122051005, - 235994555, - 1380966889, + 4203282212, + 4137070721, + 2250967321, + 453566493, + 2752957019, + 1903263852, + 1889272270, + 611470780, + 1702129712, + 1876620967, + 454451414, + 3000434010, + 768284172, + 1321939836, + 2940757035, + 1044479863, + 3437110944, + 1265925098, + 998980014, + 2127742701, + 3514062769, + 3448706206, + 3197411576, + 3572048218, + 3923224673, + 988084294, + 315672925, + 1485538813, + 2629567843, + 3100733176, + 106899533, + 2854528383, + 837501539, + 1433498056, + 891021777, + 1149349070, + 2218971499, + 1623064749, + 3794151703, + 811867500, + 1158037261, + 2900435071, + 1244093580, ]; static final String seferCairoServer = String.fromCharCodes( @@ -9521,69 +9599,69 @@ final class _Env { _envieddataseferCairoServer[i] ^ _enviedkeyseferCairoServer[i])); static const List _enviedkeyseferGizaServer = [ - 1057231226, - 3186685233, - 1129519098, - 2322481574, - 3219424309, - 2923622608, - 2931597946, - 572062068, - 2629570670, - 2573757500, - 145639330, - 3602249100, - 2475129460, - 1734840390, - 2750869143, - 3366876069, - 1720094607, - 2996828456, - 3467619886, - 945392666, - 3111306502, - 885856024, - 3588930078, - 1682878843, - 3268170832, - 1401766694, - 2583383148, - 9231482, - 2291772170, - 2925242720, + 3386422574, + 658945938, + 3147852946, + 3436382974, + 2617576302, + 4107446200, + 1496752726, + 4156773746, + 915030253, + 1661851596, + 4145152485, + 2290014793, + 937712491, + 1057345618, + 1199060917, + 245219112, + 1900102055, + 2784879724, + 3531510454, + 1245124105, + 415336105, + 4005162117, + 1594071004, + 3641158419, + 3326798233, + 226565801, + 3600506810, + 1957536236, + 2818146872, + 1278273604, ]; static const List _envieddataseferGizaServer = [ - 1057231122, - 3186685253, - 1129518990, - 2322481622, - 3219424326, - 2923622634, - 2931597909, - 572062043, - 2629570569, - 2573757525, - 145639384, - 3602249197, - 2475129351, - 1734840355, - 2750869233, - 3366876096, - 1720094717, - 2996828422, - 3467619905, - 945392756, - 3111306602, - 885856113, - 3588930160, - 1682878750, - 3268170879, - 1401766741, - 2583383049, - 9231388, - 2291772271, - 2925242642, + 3386422598, + 658946022, + 3147853030, + 3436382862, + 2617576221, + 4107446146, + 1496752761, + 4156773725, + 915030154, + 1661851557, + 4145152415, + 2290014760, + 937712408, + 1057345591, + 1199060947, + 245219149, + 1900102101, + 2784879682, + 3531510489, + 1245124199, + 415336133, + 4005162220, + 1594070962, + 3641158518, + 3326798262, + 226565850, + 3600506847, + 1957536138, + 2818146909, + 1278273590, ]; static final String seferGizaServer = String.fromCharCodes(List.generate( @@ -9594,125 +9672,125 @@ final class _Env { (int i) => _envieddataseferGizaServer[i] ^ _enviedkeyseferGizaServer[i])); static const List _enviedkeychatGPTkeySeferNew = [ - 1041695226, - 2173373535, - 341990905, - 1763264159, - 777042825, - 1991126721, - 1761259376, - 257188993, - 1839602067, - 3385619378, - 2103230069, - 1649316915, - 3557661837, - 3392412546, - 2971883861, - 963126969, - 3981368869, - 1887415813, - 1581534540, - 2517575305, - 3083998530, - 3410633466, - 1554506031, - 1312723327, - 218632814, - 1848454071, - 1974239534, - 3011871356, - 1803099298, - 1212482053, - 2147833951, - 1348216715, - 3065585456, - 1100485486, - 3735039057, - 2004104375, - 2438984628, - 294886511, - 2430772296, - 2854454045, - 908603532, - 1779808136, - 3317780304, - 683854560, - 1400999196, - 2601887940, - 1959572244, - 971692621, - 3132645241, - 1493266058, - 1837758334, - 1930937451, - 2422274802, - 3932310372, - 3264064477, - 810936702, - 335122644, - 2037393774, + 670343961, + 2099436572, + 2748487954, + 410161662, + 2391316034, + 207643226, + 1482437577, + 1832494595, + 1720304821, + 2671997039, + 2928148491, + 561934326, + 1099778348, + 710596425, + 4099460131, + 3158026226, + 1801115082, + 108515838, + 762927687, + 2545011948, + 1646378309, + 2741216438, + 4148253487, + 4111334840, + 196042494, + 3750793718, + 1602169483, + 1706765565, + 1875609236, + 719986160, + 3637640023, + 2150028780, + 2446428740, + 778221324, + 1197846423, + 642707837, + 991110745, + 4239328672, + 2166327981, + 197916721, + 390785125, + 1740014208, + 19358397, + 2071127388, + 3942569885, + 2525572915, + 2260455209, + 190236529, + 3833237399, + 1717926805, + 461272987, + 1259175192, + 1829157857, + 3751862755, + 3093813446, + 4257394174, + 3064644496, + 2690120205, ]; static const List _envieddatachatGPTkeySeferNew = [ - 1041695104, - 2173373496, - 341990868, - 1763264197, - 777042877, - 1991126702, - 1761259313, - 257189067, - 1839602160, - 3385619443, - 2103229991, - 1649316988, - 3557661930, - 3392412620, - 2971883789, - 963126995, - 3981368898, - 1887415927, - 1581534473, - 2517575360, - 3083998487, - 3410633410, - 1554506057, - 1312723252, - 218632749, - 1848454030, - 1974239606, - 3011871246, - 1803099354, - 1212482146, - 2147833866, - 1348216782, - 3065585412, - 1100485439, - 3735039013, - 2004104389, - 2438984646, - 294886403, - 2430772281, - 2854454060, - 908603637, - 1779808225, - 3317780261, - 683854488, - 1400999212, - 2601887918, - 1959572312, - 971692670, - 3132645149, - 1493266115, - 1837758250, - 1930937400, - 2422274730, - 3932310294, - 3264064389, - 810936594, - 335122582, - 2037393666, + 670344035, + 2099436667, + 2748487999, + 410161572, + 2391316086, + 207643189, + 1482437512, + 1832494665, + 1720304854, + 2671996974, + 2928148569, + 561934265, + 1099778379, + 710596359, + 4099460219, + 3158026136, + 1801115053, + 108515724, + 762927618, + 2545011877, + 1646378256, + 2741216398, + 4148253513, + 4111334899, + 196042429, + 3750793679, + 1602169555, + 1706765455, + 1875609324, + 719986071, + 3637639938, + 2150028713, + 2446428784, + 778221405, + 1197846499, + 642707727, + 991110699, + 4239328716, + 2166328028, + 197916672, + 390785052, + 1740014313, + 19358408, + 2071127332, + 3942569901, + 2525572953, + 2260455269, + 190236482, + 3833237491, + 1717926876, + 461273039, + 1259175243, + 1829157817, + 3751862673, + 3093813406, + 4257394066, + 3064644562, + 2690120289, ]; static final String chatGPTkeySeferNew = String.fromCharCodes( @@ -9724,103 +9802,103 @@ final class _Env { _envieddatachatGPTkeySeferNew[i] ^ _enviedkeychatGPTkeySeferNew[i])); static const List _enviedkeycohere = [ - 611511544, - 1494452428, - 3788262256, - 1681395157, - 82861946, - 586291657, - 671229906, - 1459241267, - 3678840420, - 2268281541, - 2294500242, - 1235456790, - 344793054, - 3610961336, - 3486158049, - 3116145203, - 507636381, - 1092952097, - 305669009, - 1839841840, - 322404352, - 2002994562, - 3016821069, - 3923148745, - 2661946875, - 1638514321, - 1234237929, - 2460210205, - 982114055, - 4154344271, - 1767367401, - 65715456, - 2625375753, - 3960063167, - 2822422269, - 274135076, - 2099222704, - 2488762699, - 1766933556, - 3849061471, - 1693806126, - 462421162, - 3674358775, - 4243502407, - 1730120886, - 248869296, - 2373970844, + 1045774623, + 2744562576, + 1084731650, + 106832296, + 1127252310, + 3505122781, + 3450952233, + 1816065711, + 4086632613, + 2016421943, + 3197997299, + 4117044866, + 2349760624, + 2068792646, + 3008799040, + 3460651405, + 2340769555, + 642391604, + 984870091, + 1610370150, + 3710112192, + 3224999419, + 4186071622, + 3744637460, + 4195497261, + 3623198901, + 1835508085, + 3545387579, + 1677395378, + 3109543583, + 568039885, + 513044574, + 2085317912, + 1389830393, + 237991368, + 49936519, + 2408640372, + 1119872736, + 2956844789, + 738253549, + 2595880821, + 119058790, + 117257915, + 2562399525, + 2490971307, + 3386261537, + 4273516650, ]; static const List _envieddatacohere = [ - 611511481, - 1494452409, - 3788262172, - 1681395106, - 82861854, - 586291697, - 671229867, - 1459241222, - 3678840375, - 2268281493, - 2294500293, - 1235456889, - 344793005, - 3610961288, - 3486157961, - 3116145273, - 507636469, - 1092952141, - 305669078, - 1839841792, - 322404468, - 2002994669, - 3016821016, - 3923148719, - 2661946819, - 1638514422, - 1234237862, - 2460210293, - 982114130, - 4154344218, - 1767367323, - 65715568, - 2625375855, - 3960063114, - 2822422188, - 274135062, - 2099222756, - 2488762651, - 1766933593, - 3849061385, - 1693806185, - 462421234, - 3674358661, - 4243502367, - 1730120922, - 248869362, - 2373970928, + 1045774686, + 2744562661, + 1084731758, + 106832351, + 1127252274, + 3505122789, + 3450952272, + 1816065690, + 4086632694, + 2016421991, + 3197997220, + 4117044973, + 2349760515, + 2068792694, + 3008799016, + 3460651463, + 2340769659, + 642391640, + 984870028, + 1610370134, + 3710112180, + 3224999316, + 4186071571, + 3744637554, + 4195497237, + 3623198930, + 1835508026, + 3545387603, + 1677395431, + 3109543626, + 568039871, + 513044526, + 2085318014, + 1389830348, + 237991321, + 49936565, + 2408640288, + 1119872688, + 2956844696, + 738253499, + 2595880754, + 119058750, + 117257929, + 2562399613, + 2490971335, + 3386261603, + 4273516550, ]; static final String cohere = String.fromCharCodes(List.generate( @@ -9830,239 +9908,239 @@ final class _Env { ).map((int i) => _envieddatacohere[i] ^ _enviedkeycohere[i])); static const List _enviedkeyclaudeAiAPI = [ - 3034037130, - 926388308, - 2455240759, - 2877837449, - 3178666606, - 3821984622, - 4035713713, - 2631947741, - 1741436046, - 347044261, - 2098230402, - 392270337, - 2087315398, - 56462518, - 3734757705, - 3805753747, - 1896715169, - 1838201098, - 257384494, - 871300050, - 3618684997, - 3934443295, - 4288677946, - 1367192345, - 1419308381, - 1306837461, - 1890637660, - 1651492271, - 3803257689, - 3315215278, - 1251866829, - 3796364120, - 1731641453, - 572888194, - 998800706, - 3860569544, - 271737826, - 1639692636, - 4179042251, - 780752137, - 3219204908, - 1048360616, - 2746918807, - 794537253, - 3545111528, - 353133027, - 83548857, - 559271346, - 785867514, - 589789459, - 2779141453, - 2727871382, - 2321668104, - 503551951, - 813609973, - 2227406076, - 2380044236, - 2215276103, - 1632693059, - 3373195732, - 1266312605, - 3232243129, - 2656157427, - 749274454, - 3735205680, - 3102857140, - 3503773715, - 1965366288, - 2246790831, - 2872431953, - 3366195114, - 3702820457, - 1984719832, - 3376326976, - 1477444999, - 3114914308, - 2033253554, - 1420961223, - 3261751890, - 2688806475, - 2248134969, - 3613819559, - 610110857, - 2994420122, - 3640746315, - 561256401, - 1548474356, - 813435086, - 905045331, - 3402198959, - 1989131828, - 603703707, - 301770614, - 1359789795, - 3865286971, - 1025129323, - 567810933, - 3620075973, - 2063387978, - 958920781, - 595959923, - 3211584822, - 2718879729, - 3624452564, - 1535922140, - 239550681, - 559737499, - 2704810600, - 1056935442, - 2514312056, - 1552663011, - 2848449571, - 2951657340, - 2294438483, - 3515215606, + 1286261501, + 1227360073, + 2952728173, + 2354259663, + 2734802162, + 1302820208, + 3065292227, + 3507239645, + 4078311878, + 2112675487, + 648610177, + 2118298054, + 2638050511, + 1937932531, + 2642632417, + 42054778, + 1009858078, + 1088733390, + 2630739162, + 3645657724, + 1242478334, + 3956356083, + 1865989582, + 4206381823, + 378815095, + 1887896035, + 1629228110, + 681546834, + 2895863875, + 2077738296, + 3089149287, + 1767475329, + 2277836263, + 4276644060, + 1019715367, + 3728570410, + 1051861764, + 3274295669, + 3481367260, + 2276933372, + 2027178921, + 3230921621, + 3883618989, + 3234434263, + 1075262783, + 1422076536, + 3391696697, + 248256319, + 4232634116, + 1708850093, + 2900579530, + 1748486427, + 324082811, + 313911562, + 3328504268, + 690200481, + 4097209222, + 2072968481, + 761748753, + 1480151332, + 2438613159, + 263392568, + 2949935942, + 2665525141, + 1169719388, + 594734272, + 1829781356, + 4056791317, + 3082688623, + 3035704111, + 992106038, + 1881981912, + 2942930372, + 1864236852, + 2976155710, + 2554631886, + 1193741133, + 2613181932, + 225078980, + 2025245188, + 4092831578, + 2173858450, + 623467418, + 2758772568, + 4051468311, + 2728777548, + 2346801758, + 2071179120, + 1925714863, + 3163977090, + 1229827609, + 471409727, + 3108392502, + 760689892, + 1665919829, + 572445798, + 3954887991, + 1347529306, + 2191862636, + 470979311, + 4025576152, + 3631889940, + 4022823024, + 2787080048, + 2771745443, + 2012572480, + 3626893289, + 1917492338, + 3873399792, + 1093713953, + 4019497347, + 3981403722, + 2406730306, + 2912208786, + 2147799941, ]; static const List _envieddataclaudeAiAPI = [ - 3034037232, - 926388275, - 2455240730, - 2877837560, - 3178666508, - 3821984525, - 4035713692, - 2631947692, - 1741436152, - 347044298, - 2098230449, - 392270392, - 2087315370, - 56462491, - 3734757681, - 3805753796, - 1896715246, - 1838201202, - 257384551, - 871299989, - 3618684978, - 3934443336, - 4288677998, - 1367192406, - 1419308327, - 1306837398, - 1890637594, - 1651492333, - 3803257655, - 3315215335, - 1251866772, - 3796364043, - 1731641382, - 572888265, - 998800682, - 3860569518, - 271737755, - 1639692582, - 4179042196, - 780752194, - 3219204986, - 1048360681, - 2746918881, - 794537303, - 3545111456, - 353133006, - 83548815, - 559271405, - 785867470, - 589789513, - 2779141384, - 2727871452, - 2321668164, - 503551993, - 813609933, - 2227406011, - 2380044179, - 2215276054, - 1632692993, - 3373195676, - 1266312623, - 3232243087, - 2656157340, - 749274419, - 3735205732, - 3102857211, - 3503773790, - 1965366365, - 2246790848, - 2872431872, - 3366195167, - 3702820366, - 1984719841, - 3376326923, - 1477445106, - 3114914379, - 2033253592, - 1420961197, - 3261751833, - 2688806424, - 2248135017, - 3613819640, - 610110920, - 2994420142, - 3640746264, - 561256418, - 1548474279, - 813435035, - 905045271, - 3402198979, - 1989131862, - 603703779, - 301770532, - 1359789786, - 3865287007, - 1025129246, - 567810851, - 3620075967, - 2063387941, - 958920732, - 595959902, - 3211584891, - 2718879642, - 3624452492, - 1535922051, - 239550604, - 559737546, - 2704810553, - 1056935491, - 2514311968, - 1552662929, - 2848449659, - 2951657232, - 2294438417, - 3515215514, + 1286261383, + 1227360046, + 2952728128, + 2354259646, + 2734802064, + 1302820115, + 3065292270, + 3507239596, + 4078311856, + 2112675568, + 648610226, + 2118298111, + 2638050467, + 1937932510, + 2642632345, + 42054701, + 1009858129, + 1088733366, + 2630739091, + 3645657659, + 1242478217, + 3956356004, + 1865989530, + 4206381744, + 378814989, + 1887895968, + 1629228040, + 681546768, + 2895863853, + 2077738353, + 3089149246, + 1767475410, + 2277836204, + 4276643991, + 1019715407, + 3728570444, + 1051861885, + 3274295567, + 3481367171, + 2276933303, + 2027179007, + 3230921684, + 3883619035, + 3234434213, + 1075262839, + 1422076501, + 3391696655, + 248256352, + 4232634160, + 1708850167, + 2900579471, + 1748486481, + 324082743, + 313911612, + 3328504308, + 690200550, + 4097209305, + 2072968560, + 761748819, + 1480151404, + 2438613141, + 263392526, + 2949935913, + 2665525232, + 1169719304, + 594734223, + 1829781281, + 4056791384, + 3082688512, + 3035704190, + 992106051, + 1881981887, + 2942930429, + 1864236927, + 2976155723, + 2554631809, + 1193741095, + 2613181830, + 225078927, + 2025245271, + 4092831498, + 2173858509, + 623467483, + 2758772588, + 4051468356, + 2728777599, + 2346801677, + 2071179045, + 1925714923, + 3163977198, + 1229827707, + 471409735, + 3108392548, + 760689885, + 1665919793, + 572445715, + 3954888033, + 1347529248, + 2191862531, + 470979262, + 4025576181, + 3631890009, + 4022822939, + 2787079976, + 2771745532, + 2012572437, + 3626893240, + 1917492259, + 3873399713, + 1093714041, + 4019497457, + 3981403666, + 2406730286, + 2912208848, + 2147800041, ]; static final String claudeAiAPI = String.fromCharCodes(List.generate( @@ -10072,183 +10150,183 @@ final class _Env { ).map((int i) => _envieddataclaudeAiAPI[i] ^ _enviedkeyclaudeAiAPI[i])); static const List _enviedkeypayPalClientId = [ - 1245667966, - 227233349, - 3794959348, - 923429575, - 170143512, - 3801056279, - 1915401842, - 381508056, - 1720779303, - 737290740, - 372559087, - 3341684616, - 1398938778, - 3093826911, - 2491397004, - 4041213175, - 244631680, - 2969628473, - 3207079429, - 3492445348, - 2348575385, - 1874376850, - 1379553046, - 1573461379, - 1981592417, - 1215829251, - 4187859974, - 1705037924, - 60941902, - 1362041303, - 228137601, - 2078349372, - 2831689278, - 2355424757, - 3775236762, - 4293487373, - 2650580100, - 92662277, - 2792189609, - 1430609215, - 2281167567, - 4135954845, - 4024483176, - 3508522880, - 3769715392, - 756727223, - 357591894, - 3698688968, - 4139033573, - 1129879094, - 4013009958, - 2240408549, - 1492589943, - 1706047308, - 2383728431, - 2202134356, - 2172594300, - 1044677234, - 1339198555, - 3944168732, - 896150162, - 3918395605, - 2393229529, - 2307339880, - 743989309, - 3256797385, - 2593354391, - 2634038619, - 4050414374, - 4069865429, - 3269967716, - 2966681969, - 2917236585, - 3285522120, - 3664527378, - 2996539919, - 2769522357, - 1190603530, - 433158334, - 3073888508, - 953054685, - 2719313268, - 4033892201, - 1802901234, - 3336517296, - 1794505272, - 2807414204, + 1158962379, + 307677221, + 615712910, + 2091728334, + 1835747518, + 3983445529, + 2925963708, + 2565680115, + 2379419404, + 1390035600, + 3628420267, + 977164944, + 4248863076, + 2089289321, + 2888202633, + 4141985015, + 3955937220, + 3662612321, + 944909612, + 2547814107, + 1964166411, + 1366326452, + 2945845854, + 471938061, + 2315401231, + 2837215939, + 4113056208, + 1804517706, + 1272698707, + 356483835, + 3976334097, + 3479103913, + 40618663, + 3876402308, + 1584600206, + 1734468373, + 2325869756, + 2628653592, + 1200498657, + 304578131, + 4084429047, + 3466811532, + 2367252697, + 1484687295, + 3692688838, + 741868302, + 1227885823, + 1347642999, + 2623240903, + 2311775255, + 1257099472, + 1499881622, + 3567469936, + 167880220, + 2013398832, + 1993595998, + 1940972656, + 3051157831, + 2514663168, + 4226507786, + 2972368284, + 416284699, + 3995589828, + 4181110079, + 3713709091, + 3251077871, + 1999364607, + 2107411583, + 1633375779, + 3722134016, + 368224648, + 385303178, + 3449035994, + 1180190181, + 4089557288, + 47956423, + 3102393398, + 1816001500, + 315426149, + 3117497924, + 840224386, + 1584246848, + 990038207, + 3527220974, + 722112166, + 3773320437, + 1447054960, ]; static const List _envieddatapayPalClientId = [ - 1245667887, - 227233284, - 3794959288, - 923429566, - 170143605, - 3801056379, - 1915401748, - 381507990, - 1720779374, - 737290689, - 372559035, - 3341684722, - 1398938862, - 3093826923, - 2491397119, - 4041213146, - 244631801, - 2969628490, - 3207079530, - 3492445406, - 2348575407, - 1874376932, - 1379553106, - 1573461431, - 1981592382, - 1215829357, - 4187860087, - 1705037884, - 60941950, - 1362041220, - 228137684, - 2078349384, - 2831689301, - 2355424694, - 3775236805, - 4293487484, - 2650580189, - 92662355, - 2792189572, - 1430609258, - 2281167528, - 4135954934, - 4024483165, - 3508522983, - 3769715361, - 756727290, - 357591817, - 3698689008, - 4139033535, - 1129879067, - 4013009997, - 2240408450, - 1492589891, - 1706047232, - 2383728410, - 2202134375, - 2172594199, - 1044677194, - 1339198478, - 3944168809, - 896150250, - 3918395530, - 2393229549, - 2307339778, - 743989368, - 3256797342, - 2593354447, - 2634038559, - 4050414413, - 4069865371, - 3269967636, - 2966681897, - 2917236526, - 3285522075, - 3664527429, - 2996539999, - 2769522373, - 1190603587, - 433158340, - 3073888440, - 953054619, - 2719313196, - 4033892123, - 1802901162, - 3336517340, - 1794505338, - 2807414224, + 1158962330, + 307677284, + 615712962, + 2091728311, + 1835747539, + 3983445621, + 2925963738, + 2565680061, + 2379419461, + 1390035621, + 3628420351, + 977165034, + 4248862992, + 2089289309, + 2888202746, + 4141984986, + 3955937213, + 3662612242, + 944909635, + 2547814049, + 1964166461, + 1366326466, + 2945845786, + 471938105, + 2315401296, + 2837215917, + 4113056161, + 1804517650, + 1272698723, + 356483752, + 3976334148, + 3479103965, + 40618700, + 3876402375, + 1584600273, + 1734468452, + 2325869797, + 2628653646, + 1200498636, + 304578054, + 4084428944, + 3466811623, + 2367252716, + 1484687320, + 3692688807, + 741868355, + 1227885728, + 1347642959, + 2623240861, + 2311775290, + 1257099451, + 1499881713, + 3567469892, + 167880272, + 2013398789, + 1993596013, + 1940972571, + 3051157887, + 2514663253, + 4226507903, + 2972368356, + 416284740, + 3995589872, + 4181110101, + 3713709158, + 3251077816, + 1999364519, + 2107411515, + 1633375816, + 3722134094, + 368224760, + 385303250, + 3449035933, + 1180190134, + 4089557375, + 47956375, + 3102393414, + 1816001429, + 315426079, + 3117497856, + 840224452, + 1584246808, + 990038221, + 3527220918, + 722112202, + 3773320375, + 1447054876, ]; static final String payPalClientId = String.fromCharCodes(List.generate( @@ -10258,181 +10336,181 @@ final class _Env { ).map((int i) => _envieddatapayPalClientId[i] ^ _enviedkeypayPalClientId[i])); static const List _enviedkeypayPalSecret = [ - 4097230390, - 409274982, - 3986381828, - 1126060983, - 4025195224, - 3229571054, - 4200471853, - 3530104170, - 2562340089, - 3207912622, - 1303946376, - 4255179412, - 2672010539, - 530603730, - 2735314550, - 1588364198, - 224433740, - 2138854245, - 1634315212, - 3887068491, - 2592083602, - 149932143, - 3761560414, - 1861713019, - 4047284722, - 660332942, - 3183798240, - 141036367, - 3155031233, - 2625557955, - 4130997351, - 1835197350, - 1307911331, - 2662435319, - 2931696636, - 3838892196, - 50948466, - 1777052518, - 4032089335, - 3242091593, - 3667446436, - 976308791, - 4288190479, - 3710952568, - 582412470, - 3913648290, - 3923255932, - 3796114741, - 1773260059, - 2651411619, - 2334061222, - 2990157995, - 3542407215, - 4040109192, - 3540127508, - 457370847, - 2966831933, - 2819044937, - 1610244882, - 2517559657, - 6056933, - 2703290450, - 4030072248, - 1922003142, - 1240355097, - 2386392644, - 2175587674, - 2894399966, - 3412003933, - 1745054168, - 2826067156, - 2991046135, - 2532404447, - 292941992, - 3170151114, - 867722518, - 1383987886, - 2761198598, - 865968039, - 3360562170, - 3420380332, - 3768223007, - 3652731353, - 836640485, - 1381201539, - 2233857248, + 739732313, + 2664767087, + 3572624635, + 1907728500, + 1861724185, + 2142646064, + 1931393997, + 2697781641, + 1210895087, + 2084852298, + 1135444872, + 3420476071, + 2841772834, + 3524405220, + 661189914, + 3976958655, + 1062936559, + 3056130150, + 184616341, + 2599483555, + 4253680559, + 1986033411, + 1452412727, + 4092960152, + 751659217, + 1985211052, + 2241786935, + 828446056, + 398348400, + 3295906472, + 3802132728, + 148240941, + 2536173005, + 2048208747, + 3195521388, + 3987349740, + 829115356, + 683912346, + 2027393185, + 31934422, + 2313609525, + 3287629605, + 1613062420, + 4034510835, + 2921832973, + 3354260814, + 2289945782, + 2184901124, + 2656934831, + 4012045457, + 3963477787, + 334752317, + 1421499989, + 41542685, + 3321454589, + 3063175331, + 2013768162, + 1527425867, + 3270244073, + 2648257151, + 313269852, + 3743230470, + 198051244, + 393316185, + 33594026, + 3723537188, + 3120929165, + 4000357751, + 2281273248, + 3503743097, + 1657804135, + 1750641043, + 720525904, + 1626843600, + 4215304532, + 2628940815, + 3035320362, + 2869518997, + 2716962910, + 387463954, + 2997368722, + 3555306019, + 2326419286, + 2406185964, + 106284720, + 69484099, ]; static const List _envieddatapayPalSecret = [ - 4097230460, - 409274916, - 3986381893, - 1126061046, - 4025195182, - 3229570975, - 4200471911, - 3530104123, - 2562340030, - 3207912699, - 1303946491, - 4255179487, - 2672010607, - 530603746, - 2735314476, - 1588364236, - 224433700, - 2138854225, - 1634315143, - 3887068449, - 2592083703, - 149932044, - 3761560356, - 1861712899, - 4047284628, - 660333004, - 3183798182, - 141036343, - 3155031276, - 2625558000, - 4130997343, - 1835197429, - 1307911367, - 2662435227, - 2931696542, - 3838892269, - 50948385, - 1777052499, - 4032089281, - 3242091551, - 3667446518, - 976308858, - 4288190519, - 3710952502, - 582412530, - 3913648324, - 3923255833, - 3796114691, - 1773260150, - 2651411657, - 2334061291, - 2990158030, - 3542407285, - 4040109250, - 3540127612, - 457370769, - 2966831985, - 2819044867, - 1610244983, - 2517559554, - 6056912, - 2703290378, - 4030072287, - 1922003095, - 1240355162, - 2386392629, - 2175587601, - 2894399901, - 3412003861, - 1745054124, - 2826067078, - 2991046033, - 2532404457, - 292942053, - 3170151072, - 867722564, - 1383987927, - 2761198635, - 865968065, - 3360562114, - 3420380404, - 3768223085, - 3652731265, - 836640393, - 1381201601, - 2233857164, + 739732243, + 2664767021, + 3572624570, + 1907728437, + 1861724271, + 2142646081, + 1931393927, + 2697781720, + 1210895016, + 2084852255, + 1135444987, + 3420476140, + 2841772902, + 3524405204, + 661189952, + 3976958677, + 1062936455, + 3056130130, + 184616414, + 2599483593, + 4253680586, + 1986033504, + 1452412749, + 4092960224, + 751659191, + 1985211118, + 2241786993, + 828445968, + 398348381, + 3295906459, + 3802132672, + 148241022, + 2536172969, + 2048208647, + 3195521294, + 3987349669, + 829115279, + 683912367, + 2027393175, + 31934336, + 2313609575, + 3287629672, + 1613062444, + 4034510781, + 2921833033, + 3354260776, + 2289945811, + 2184901170, + 2656934850, + 4012045563, + 3963477846, + 334752344, + 1421499919, + 41542743, + 3321454485, + 3063175405, + 2013768110, + 1527425793, + 3270243980, + 2648257044, + 313269865, + 3743230558, + 198051275, + 393316104, + 33594089, + 3723537237, + 3120929222, + 4000357684, + 2281273320, + 3503742989, + 1657804085, + 1750641141, + 720525926, + 1626843549, + 4215304510, + 2628940893, + 3035320403, + 2869519032, + 2716962872, + 387463978, + 2997368778, + 3555306065, + 2326419214, + 2406185856, + 106284786, + 69484079, ]; static final String payPalSecret = String.fromCharCodes(List.generate( @@ -10442,101 +10520,101 @@ final class _Env { ).map((int i) => _envieddatapayPalSecret[i] ^ _enviedkeypayPalSecret[i])); static const List _enviedkeygeminiApi = [ - 2632934229, - 1799219161, - 2652696151, - 457168196, - 1287626220, - 2904559486, - 3328762106, - 961302768, - 3262865357, - 3144526109, - 1316648923, - 2237072714, - 2013347072, - 2654723587, - 1314406791, - 4257415766, - 1939354793, - 2949127422, - 2839830465, - 1374752426, - 4229958301, - 2995234880, - 1087160856, - 1092247069, - 3297872119, - 2898949752, - 4092528646, - 4048177241, - 3602977648, - 3394584930, - 185127446, - 1511605545, - 662907953, - 4013823520, - 1456949060, - 2028984991, - 232179696, - 1828989902, - 2819857040, - 3719195687, - 4053544757, - 2962551322, - 1635624208, - 2943450587, - 2450255297, - 939534702, + 3345560342, + 2922573360, + 1206957034, + 3220621402, + 3050097607, + 672497970, + 1763652323, + 2964366469, + 260724265, + 1619853423, + 2893504212, + 543645032, + 1855933033, + 1572595655, + 2621250033, + 499168338, + 3832536323, + 1874863324, + 901521756, + 106465515, + 408371901, + 425942735, + 3316378247, + 2041707989, + 1277518095, + 1172032096, + 3879689643, + 2959900401, + 2185145793, + 1175924965, + 2580909975, + 447396632, + 1735402539, + 667490449, + 194829623, + 2359972406, + 2335681577, + 3443479920, + 3425854100, + 1346354876, + 2687030839, + 4201914926, + 433105072, + 3281090046, + 1123559874, + 2746285635, ]; static const List _envieddatageminiApi = [ - 2632934148, - 1799219094, - 2652696122, - 457168181, - 1287626166, - 2904559373, - 3328762027, - 961302697, - 3262865312, - 3144526125, - 1316648931, - 2237072700, - 2013347180, - 2654723660, - 1314406902, - 4257415740, - 1939354848, - 2949127369, - 2839830442, - 1374752454, - 4229958347, - 2995234826, - 1087160958, - 1092247147, - 3297872039, - 2898949708, - 4092528721, - 4048177179, - 3602977590, - 3394584871, - 185127545, - 1511605580, - 662907996, - 4013823562, - 1456949027, - 2028985062, - 232179651, - 1828989943, - 2819857062, - 3719195726, - 4053544813, - 2962551400, - 1635624264, - 2943450551, - 2450255235, - 939534594, + 3345560391, + 2922573439, + 1206956935, + 3220621355, + 3050097565, + 672497985, + 1763652274, + 2964366556, + 260724292, + 1619853407, + 2893504236, + 543644958, + 1855932933, + 1572595592, + 2621249920, + 499168312, + 3832536394, + 1874863339, + 901521719, + 106465415, + 408371947, + 425942661, + 3316378337, + 2041707939, + 1277518175, + 1172032084, + 3879689724, + 2959900339, + 2185145735, + 1175924896, + 2580910072, + 447396733, + 1735402566, + 667490555, + 194829648, + 2359972431, + 2335681562, + 3443479881, + 3425854114, + 1346354901, + 2687030895, + 4201914972, + 433105128, + 3281089938, + 1123559808, + 2746285615, ]; static final String geminiApi = String.fromCharCodes(List.generate( @@ -10546,101 +10624,101 @@ final class _Env { ).map((int i) => _envieddatageminiApi[i] ^ _enviedkeygeminiApi[i])); static const List _enviedkeygeminiApiMasa = [ - 3806554372, - 3964273813, - 3400690841, - 3993107285, - 947332588, - 567067889, - 330120572, - 602810814, - 4281129194, - 2556527681, - 765587194, - 4055156520, - 2754889642, - 375225097, - 2659311947, - 4266142455, - 988454182, - 3368144050, - 3034478035, - 3283879555, - 3241937762, - 1153323755, - 3896500637, - 1457344484, - 3731385330, - 2796947665, - 1949737039, - 1509915978, - 1790607971, - 2467701288, - 4162684551, - 2843447192, - 776609348, - 2714258467, - 1007709031, - 3409819276, - 3354235594, - 2794921085, - 3765662632, - 1218084057, - 4202748104, - 1628753253, - 482743602, - 2355830269, - 3091259095, - 3584092524, + 2881515655, + 3243653102, + 3919061164, + 529731162, + 2789203300, + 1614747035, + 1520454485, + 197748373, + 1136974296, + 2701090237, + 2670231970, + 1873094193, + 3568739763, + 369177359, + 1742142770, + 1762870963, + 1684266105, + 3143254790, + 2025583498, + 3751467200, + 2942208825, + 3918528191, + 4213025600, + 1752012011, + 2963148183, + 2146182955, + 197502139, + 1484527997, + 194812885, + 2782339502, + 490271811, + 4270919468, + 2235264425, + 178856990, + 3783115939, + 3890150072, + 3296843513, + 549847513, + 3362130755, + 4028884949, + 4174997294, + 2134697142, + 4282717313, + 2018022131, + 3105267020, + 2379364791, ]; static const List _envieddatageminiApiMasa = [ - 3806554453, - 3964273882, - 3400690932, - 3993107236, - 947332534, - 567067778, - 330120493, - 602810871, - 4281129114, - 2556527653, - 765587127, - 4055156508, - 2754889704, - 375225179, - 2659311928, - 4266142396, - 988454219, - 3368144083, - 3034477975, - 3283879625, - 3241937709, - 1153323707, - 3896500650, - 1457344384, - 3731385256, - 2796947617, - 1949737082, - 1509916007, - 1790607872, - 2467701278, - 4162684617, - 2843447247, - 776609314, - 2714258496, - 1007708943, - 3409819323, - 3354235546, - 2794921020, - 3765662660, - 1218083976, - 4202748048, - 1628753175, - 482743658, - 2355830161, - 3091259029, - 3584092416, + 2881515734, + 3243653025, + 3919061185, + 529731115, + 2789203262, + 1614747112, + 1520454404, + 197748444, + 1136974248, + 2701090265, + 2670232047, + 1873094149, + 3568739825, + 369177437, + 1742142785, + 1762871032, + 1684266004, + 3143254887, + 2025583566, + 3751467146, + 2942208886, + 3918528239, + 4213025655, + 1752011919, + 2963148237, + 2146183003, + 197502094, + 1484527952, + 194812854, + 2782339480, + 490271757, + 4270919547, + 2235264463, + 178857085, + 3783115979, + 3890150031, + 3296843433, + 549847448, + 3362130735, + 4028884868, + 4174997366, + 2134697156, + 4282717401, + 2018022047, + 3105266958, + 2379364827, ]; static final String geminiApiMasa = String.fromCharCodes(List.generate( @@ -10650,87 +10728,87 @@ final class _Env { ).map((int i) => _envieddatageminiApiMasa[i] ^ _enviedkeygeminiApiMasa[i])); static const List _enviedkeyagoraAppId = [ - 322955499, - 1802132897, - 3408345873, - 1443736637, - 914296049, - 1913720577, - 554753389, - 95197085, - 3289387699, - 789808860, - 2122614257, - 1369410329, - 2424838099, - 2123384348, - 1927654694, - 1694373322, - 1646119434, - 261856971, - 1778967242, - 2041226896, - 494830624, - 1288662876, - 69059238, - 3353998990, - 4291260580, - 2791920964, - 342453163, - 2696431704, - 1528636599, - 693731065, - 3444510574, - 1113712187, - 2512581473, - 722785461, - 640812732, - 3966182575, - 3258614772, - 32533122, - 1525433224, + 3089331006, + 3560766277, + 825969137, + 906493642, + 3507883174, + 3629478722, + 716145019, + 736618674, + 3814543006, + 531262085, + 1069707472, + 1794745024, + 1799477682, + 3997601683, + 2384816050, + 1180863786, + 922162112, + 3729452903, + 1820971096, + 661727629, + 377334609, + 1832494407, + 3063815916, + 1221571281, + 3714335252, + 309885433, + 1556167695, + 2537322565, + 3970383379, + 2095609686, + 2280663226, + 1009151530, + 578649856, + 994147052, + 3565099187, + 1606180888, + 1625646757, + 507544281, + 3074868305, ]; static const List _envieddataagoraAppId = [ - 322955484, - 1802132880, - 3408345897, - 1443736581, - 914296001, - 1913720679, - 554753375, - 95197175, - 3289387653, - 789808879, - 2122614215, - 1369410422, - 2424838118, - 2123384364, - 1927654687, - 1694373280, - 1646119480, - 261857023, - 1778967219, - 2041226917, - 494830610, - 1288662885, - 69059218, - 3353999034, - 4291260572, - 2791921012, - 342453202, - 2696431723, - 1528636551, - 693730956, - 3444510550, - 1113712143, - 2512581465, - 722785517, - 640812750, - 3966182647, - 3258614680, - 32533184, - 1525433316, + 3089330953, + 3560766324, + 825969097, + 906493682, + 3507883158, + 3629478692, + 716144969, + 736618712, + 3814543016, + 531262134, + 1069707494, + 1794745007, + 1799477639, + 3997601699, + 2384816011, + 1180863808, + 922162162, + 3729452883, + 1820971041, + 661727672, + 377334627, + 1832494462, + 3063815896, + 1221571301, + 3714335276, + 309885385, + 1556167798, + 2537322614, + 3970383395, + 2095609635, + 2280663170, + 1009151518, + 578649912, + 994146996, + 3565099201, + 1606180928, + 1625646793, + 507544219, + 3074868285, ]; static final String agoraAppId = String.fromCharCodes(List.generate( @@ -10740,89 +10818,89 @@ final class _Env { ).map((int i) => _envieddataagoraAppId[i] ^ _enviedkeyagoraAppId[i])); static const List _enviedkeyagoraAppCertificate = [ - 2093383308, - 4072188091, - 3133437958, - 3398519137, - 4168681924, - 3305708443, - 1836163883, - 4115738259, - 2635356837, - 2962494938, - 1175059944, - 1022231908, - 225341599, - 3253833437, - 82958117, - 1990924149, - 1681161152, - 3062789812, - 887500146, - 3649523233, - 3327407503, - 3818657312, - 4236937263, - 3858187622, - 3228713217, - 1812878730, - 1842633884, - 361190977, - 1312293375, - 1070378818, - 2994094878, - 3115615204, - 1418405586, - 1356323056, - 2215851209, - 1449682783, - 4204472986, - 3392506278, - 3103005220, - 1042906214, + 3690479738, + 2491892003, + 3380135185, + 4178313776, + 355299000, + 1512500202, + 4131100492, + 1598833776, + 2234394556, + 3844317455, + 2753898166, + 2893052929, + 1930225798, + 1129918226, + 4250912199, + 3782575902, + 2789606497, + 739785026, + 491873921, + 1492281286, + 2654777686, + 1100222529, + 1006688894, + 886277114, + 748931844, + 2647871976, + 1819981845, + 2568220181, + 616719616, + 3098653489, + 2516170827, + 3623309345, + 2538829850, + 3098051278, + 4220928193, + 2594251663, + 3217786871, + 2443608156, + 4099109288, + 3557800709, ]; static const List _envieddataagoraAppCertificate = [ - 2093383398, - 4072188042, - 3133438001, - 3398519056, - 4168681981, - 3305708463, - 1836163871, - 4115738342, - 2635356817, - 2962494947, - 1175059931, - 1022231901, - 225341615, - 3253833399, - 82958157, - 1990924036, - 1681161207, - 3062789761, - 887500106, - 3649523284, - 3327407550, - 3818657302, - 4236937243, - 3858187615, - 3228713269, - 1812878782, - 1842633892, - 361190960, - 1312293325, - 1070378811, - 2994094888, - 3115615132, - 1418405556, - 1356322949, - 2215851153, - 1449682733, - 4204473026, - 3392506314, - 3103005286, - 1042906122, + 3690479632, + 2491891986, + 3380135206, + 4178313793, + 355298945, + 1512500190, + 4131100536, + 1598833669, + 2234394504, + 3844317494, + 2753898117, + 2893052984, + 1930225846, + 1129918328, + 4250912175, + 3782575983, + 2789606486, + 739785079, + 491873977, + 1492281267, + 2654777703, + 1100222583, + 1006688842, + 886277059, + 748931888, + 2647871964, + 1819981869, + 2568220260, + 616719666, + 3098653512, + 2516170877, + 3623309401, + 2538829948, + 3098051259, + 4220928153, + 2594251773, + 3217786799, + 2443608112, + 4099109354, + 3557800809, ]; static final String agoraAppCertificate = String.fromCharCodes( @@ -10835,183 +10913,183 @@ final class _Env { _enviedkeyagoraAppCertificate[i])); static const List _enviedkeypayPalClientIdLive = [ - 3114574254, - 4010651511, - 461696017, - 3960507585, - 2098272697, - 2228179679, - 2215403740, - 2297499665, - 576332403, - 2097842102, - 655895736, - 2500215309, - 3669982586, - 50105411, - 2070097355, - 1481179313, - 4249675769, - 3538483031, - 3352260188, - 2322021775, - 2176665063, - 3696037112, - 492538790, - 3278174367, - 1558135091, - 830475840, - 105246111, - 1291944224, - 2556018688, - 3631731097, - 2150560026, - 135542065, - 2833156012, - 4149554516, - 2647863720, - 1280162410, - 2021821697, - 1453202556, - 728225760, - 427000676, - 780069603, - 2100147223, - 504309289, - 3498080016, - 2028235676, - 225153491, - 1138640981, - 1494496832, - 4058401920, - 3205071119, - 3480650765, - 852899703, - 3507406242, - 762861345, - 246426241, - 415122435, - 3162136073, - 2904346179, - 1663927195, - 3090817861, - 2584211414, - 2211017538, - 526345851, - 3142538720, - 3329114310, - 3501397612, - 1432215677, - 2299195949, - 3891157240, - 3259849767, - 1906461528, - 2573319057, - 3845383478, - 822825742, - 3823871886, - 3516703043, - 876077945, - 331348410, - 3996949037, - 704426408, - 1695871896, - 317062564, - 1197473844, - 2065326364, - 1641085809, - 430851767, - 2456830432, + 3498212718, + 2040045360, + 1454338361, + 2925702768, + 4032876285, + 330197820, + 2964508372, + 4290089181, + 4088742651, + 3184626717, + 1125682327, + 1288414844, + 2532221751, + 3393819830, + 1255156312, + 2081028481, + 1786731466, + 2556256597, + 2074018026, + 4278464473, + 3690208954, + 789657379, + 1499646751, + 2108045939, + 2387099979, + 4212594781, + 1185264404, + 3443914588, + 484521154, + 1692885126, + 1808261924, + 308124766, + 3104586301, + 3054522469, + 452743987, + 4115752992, + 3679384335, + 756182608, + 769834775, + 103870765, + 2361154858, + 880981506, + 268938416, + 781623876, + 3893743452, + 3239800154, + 1147112662, + 4214232654, + 2699205678, + 630232630, + 1395784349, + 2568589887, + 3672114013, + 3304610955, + 2379491329, + 1864385115, + 2066528676, + 219147460, + 2637806174, + 1205524959, + 2664432498, + 1587265586, + 4163318448, + 1661196011, + 3867917677, + 1063528552, + 3109017888, + 3949690742, + 1045420231, + 191834221, + 1746801123, + 3330559930, + 2439707600, + 755220539, + 929533834, + 1202916867, + 909027002, + 3009628763, + 3574240305, + 2962886476, + 1748507431, + 4245650729, + 2109266774, + 3185727328, + 4003696869, + 3613827171, + 2744545564, ]; static const List _envieddatapayPalClientIdLive = [ - 3114574335, - 4010651437, - 461696087, - 3960507562, - 2098272723, - 2228179614, - 2215403699, - 2297499723, - 576332309, - 2097842161, - 655895756, - 2500215395, - 3669982493, - 50105357, - 2070097336, - 1481179348, - 4249675659, - 3538483003, - 3352260144, - 2322021817, - 2176664981, - 3696037067, - 492538821, - 3278174428, - 1558135046, - 830475894, - 105246151, - 1291944268, - 2556018737, - 3631731178, - 2150560076, - 135542141, - 2833156093, - 4149554495, - 2647863750, - 1280162399, - 2021821797, - 1453202481, - 728225666, - 427000605, - 780069510, - 2100147317, - 504309313, - 3498080106, - 2028235734, - 225153418, - 1138640992, - 1494496889, - 4058401989, - 3205071198, - 3480650814, - 852899615, - 3507406296, - 762861334, - 246426328, - 415122555, - 3162136168, - 2904346118, - 1663927274, - 3090817792, - 2584211346, - 2211017499, - 526345771, - 3142538676, - 3329114259, - 3501397546, - 1432215582, - 2299196028, - 3891157167, - 3259849814, - 1906461486, - 2573319156, - 3845383526, - 822825839, - 3823871967, - 3516703094, - 876077868, - 331348464, - 3996949095, - 704426494, - 1695871946, - 317062652, - 1197473862, - 2065326404, - 1641085725, - 430851829, - 2456830348, + 3498212671, + 2040045418, + 1454338431, + 2925702683, + 4032876183, + 330197885, + 2964508347, + 4290089095, + 4088742557, + 3184626778, + 1125682403, + 1288414738, + 2532221776, + 3393819896, + 1255156267, + 2081028580, + 1786731448, + 2556256569, + 2074017926, + 4278464495, + 3690208968, + 789657360, + 1499646844, + 2108045872, + 2387100030, + 4212594795, + 1185264460, + 3443914544, + 484521203, + 1692885237, + 1808262002, + 308124690, + 3104586348, + 3054522382, + 452744029, + 4115752981, + 3679384427, + 756182557, + 769834869, + 103870804, + 2361154895, + 880981600, + 268938456, + 781623870, + 3893743382, + 3239800067, + 1147112675, + 4214232695, + 2699205739, + 630232679, + 1395784366, + 2568589911, + 3672113959, + 3304611004, + 2379491416, + 1864385059, + 2066528709, + 219147393, + 2637806127, + 1205524890, + 2664432438, + 1587265643, + 4163318496, + 1661195967, + 3867917624, + 1063528494, + 3109017923, + 3949690663, + 1045420176, + 191834140, + 1746801045, + 3330559967, + 2439707520, + 755220570, + 929533915, + 1202916918, + 909027055, + 3009628689, + 3574240379, + 2962886426, + 1748507509, + 4245650801, + 2109266724, + 3185727288, + 4003696777, + 3613827105, + 2744545648, ]; static final String payPalClientIdLive = String.fromCharCodes( @@ -11023,185 +11101,185 @@ final class _Env { _envieddatapayPalClientIdLive[i] ^ _enviedkeypayPalClientIdLive[i])); static const List _enviedkeypayPalSecretLive = [ - 3013884973, - 2821916540, - 1942616952, - 1810264227, - 3814851345, - 1887400487, - 172621378, - 1074368265, - 1689283907, - 485675311, - 2855761881, - 993568442, - 3694712110, - 3267197672, - 3956580973, - 1893918083, - 4253013203, - 3473546496, - 3365059475, - 1517926911, - 3887841047, - 3999058038, - 1423115631, - 2440681843, - 847951055, - 2113286267, - 1702376040, - 3590943609, - 2062245659, - 2652460525, - 3672155105, - 2744221350, - 1622306795, - 2382218978, - 689735113, - 3247929415, - 4284686008, - 3250981844, - 3743012099, - 1609967369, - 705237651, - 760366665, - 3186003733, - 1643040906, - 1014347274, - 1787969461, - 3879481471, - 3227929057, - 784003730, - 1942885733, - 2107109739, - 91227898, - 2012482545, - 705024103, - 2925611884, - 831722647, - 497250309, - 1092407769, - 2872329371, - 838133701, - 1756643026, - 3139562425, - 1548671685, - 2639759269, - 2945263624, - 3978352841, - 1181054723, - 2723996002, - 855323137, - 3902120524, - 2283070037, - 3182355662, - 3420428529, - 3579345955, - 2327686259, - 3186996435, - 2354649418, - 2284392487, - 3613993087, - 1942803059, - 4182207187, - 2293213850, - 1418220806, - 1347035498, - 1360454355, - 3813416994, - 1660339295, - 292375086, + 1686803173, + 2549344406, + 2999418297, + 981626647, + 1527658308, + 4017623410, + 1723825857, + 4100347843, + 3032197825, + 1138415466, + 1003701203, + 514593984, + 2985297447, + 3253769350, + 3982308256, + 1067056987, + 2330571008, + 2838835968, + 1679919862, + 922383968, + 3522006032, + 4214936532, + 4114126476, + 2367435495, + 928096466, + 3805436937, + 2633603398, + 1111413243, + 1579940898, + 308985158, + 2491025730, + 3597640978, + 3804648423, + 3533580722, + 1856231693, + 2075258072, + 2571185761, + 313383712, + 1165529499, + 2509825669, + 2363882239, + 2527332889, + 3617498090, + 3356063982, + 808951948, + 3000210089, + 3164426459, + 2293343536, + 67466769, + 2311640352, + 1534605779, + 1632261458, + 3598863213, + 15219130, + 1635084602, + 3113121575, + 2119034386, + 847082734, + 3747580858, + 2004700801, + 3829608622, + 3984960622, + 2171756218, + 3054571568, + 3367881948, + 803605721, + 764673468, + 3721621437, + 3506835852, + 909939506, + 1403965023, + 2340131697, + 2519720416, + 904668221, + 4276524814, + 3753718784, + 2516371154, + 1589183634, + 181349719, + 3828000718, + 67709880, + 671390186, + 3173014221, + 3465463940, + 941857293, + 4037575635, + 2172377945, + 296532492, ]; static const List _envieddatapayPalSecretLive = [ - 3013885031, - 2821916461, - 1942616892, - 1810264290, - 3814851397, - 1887400534, - 172621353, - 1074368354, - 1689283885, - 485675371, - 2855761855, - 993568467, - 3694712168, - 3267197592, - 3956580904, - 1893918146, - 4253013149, - 3473546550, - 3365059491, - 1517926836, - 3887841109, - 3999057986, - 1423115551, - 2440681780, - 847951039, - 2113286207, - 1702375945, - 3590943539, - 2062245745, - 2652460436, - 3672155024, - 2744221412, - 1622306730, - 2382218886, - 689735152, - 3247929389, - 4284686016, - 3250981785, - 3743012161, - 1609967449, - 705237731, - 760366643, - 3186003778, - 1643040991, - 1014347323, - 1787969509, - 3879481422, - 3227928970, - 784003745, - 1942885677, - 2107109722, - 91227792, - 2012482475, - 705024015, - 2925611837, - 831722749, - 497250411, - 1092407790, - 2872329384, - 838133632, - 1756642970, - 3139562442, - 1548671630, - 2639759348, - 2945263718, - 3978352808, - 1181054772, - 2723995990, - 855323217, - 3902120564, - 2283069989, - 3182355703, - 3420428489, - 3579345995, - 2327686164, - 3186996380, - 2354649380, - 2284392554, - 3613992990, - 1942802980, - 4182207107, - 2293213901, - 1418220894, - 1347035416, - 1360454283, - 3813417038, - 1660339229, - 292375106, + 1686803119, + 2549344455, + 2999418365, + 981626710, + 1527658256, + 4017623299, + 1723825834, + 4100347816, + 3032197807, + 1138415406, + 1003701173, + 514593961, + 2985297505, + 3253769462, + 3982308325, + 1067056922, + 2330571086, + 2838836022, + 1679919814, + 922383915, + 3522006098, + 4214936544, + 4114126588, + 2367435424, + 928096418, + 3805437005, + 2633603367, + 1111413169, + 1579940936, + 308985151, + 2491025715, + 3597641040, + 3804648358, + 3533580758, + 1856231732, + 2075258034, + 2571185689, + 313383789, + 1165529561, + 2509825749, + 2363882127, + 2527332963, + 3617498045, + 3356063931, + 808951997, + 3000210169, + 3164426474, + 2293343579, + 67466786, + 2311640424, + 1534605794, + 1632261432, + 3598863159, + 15219154, + 1635084651, + 3113121613, + 2119034492, + 847082713, + 3747580809, + 2004700868, + 3829608678, + 3984960541, + 2171756273, + 3054571617, + 3367881906, + 803605688, + 764673419, + 3721621385, + 3506835932, + 909939466, + 1403964975, + 2340131656, + 2519720408, + 904668245, + 4276524905, + 3753718863, + 2516371132, + 1589183711, + 181349686, + 3828000665, + 67709928, + 671390141, + 3173014165, + 3465464054, + 941857365, + 4037575615, + 2172377883, + 296532576, ]; static final String payPalSecretLive = String.fromCharCodes( @@ -11213,35 +11291,35 @@ final class _Env { _envieddatapayPalSecretLive[i] ^ _enviedkeypayPalSecretLive[i])); static const List _enviedkeyintegrationIdPayMob = [ - 2712678300, - 3061768505, - 3719050571, - 3681882834, - 570397643, - 2305195569, - 1316007571, - 3727240136, - 2628718788, - 2722902749, - 3701125463, - 3841634291, - 1881441900, + 1417526965, + 3263383533, + 91540503, + 1899043115, + 441464185, + 1408303186, + 739953865, + 373704305, + 2877724056, + 1385385587, + 1213934967, + 1982766086, + 2741497519, ]; static const List _envieddataintegrationIdPayMob = [ - 2712678316, - 3061768459, - 3719050616, - 3681882853, - 570397693, - 2305195522, - 1316007587, - 3727240080, - 2628718774, - 2722902661, - 3701125435, - 3841634225, - 1881441792, + 1417526917, + 3263383519, + 91540516, + 1899043100, + 441464143, + 1408303201, + 739953913, + 373704233, + 2877724138, + 1385385515, + 1213934875, + 1982766148, + 2741497539, ]; static final String integrationIdPayMob = String.fromCharCodes( @@ -11254,53 +11332,53 @@ final class _Env { _enviedkeyintegrationIdPayMob[i])); static const List _enviedkeypasswordPayMob = [ - 1623830400, - 484366932, - 1761549607, - 3934118037, - 3841612148, - 96780172, - 1154983199, - 965549846, - 1855095364, - 2791790061, - 26302373, - 653521578, - 1644891670, - 4076340387, - 577819052, - 3452680564, - 736182487, - 1174382954, - 1985009894, - 2491429983, - 419747161, - 3716564113, + 1112005101, + 1529182612, + 2713540861, + 795328389, + 1645747591, + 830558058, + 3235663825, + 2402337045, + 1704058611, + 1807481934, + 4114759014, + 2442548906, + 3879069201, + 1254582425, + 1835722365, + 1675986163, + 2985281344, + 3972423584, + 3430383610, + 3697632766, + 1092163911, + 3949013966, ]; static const List _envieddatapasswordPayMob = [ - 1623830503, - 484366868, - 1761549641, - 3934118142, - 3841612080, - 96780222, - 1154983228, - 965549871, - 1855095421, - 2791789958, - 26302340, - 653521602, - 1644891730, - 4076340476, - 577819010, - 3452680451, - 736182415, - 1174382872, - 1985009854, - 2491429939, - 419747099, - 3716564221, + 1112005002, + 1529182676, + 2713540755, + 795328494, + 1645747651, + 830558040, + 3235663858, + 2402337068, + 1704058570, + 1807481893, + 4114758983, + 2442548930, + 3879069269, + 1254582470, + 1835722323, + 1675986052, + 2985281304, + 3972423634, + 3430383522, + 3697632658, + 1092163845, + 3949013922, ]; static final String passwordPayMob = String.fromCharCodes(List.generate( @@ -11310,43 +11388,43 @@ final class _Env { ).map((int i) => _envieddatapasswordPayMob[i] ^ _enviedkeypasswordPayMob[i])); static const List _enviedkeyusernamePayMob = [ - 4090151, - 4102553018, - 3621236088, - 2568791231, - 644055495, - 2703371348, - 2862650941, - 424822023, - 1644786860, - 2374079916, - 1749124849, - 1284711377, - 3391499103, - 1329214336, - 1023678449, - 945916939, - 3448395998, + 404532329, + 2709626969, + 581294901, + 3232867313, + 1847531785, + 3160654111, + 1403524875, + 2787863372, + 4118201515, + 2889116121, + 1132769932, + 2720512716, + 1077363859, + 2108498877, + 3720923995, + 2714342127, + 1746163795, ]; static const List _envieddatausernamePayMob = [ - 4090132, - 4102552973, - 3621236043, - 2568791182, - 644055550, - 2703371365, - 2862650893, - 424822067, - 1644786844, - 2374079897, - 1749124803, - 1284711305, - 3391499053, - 1329214424, - 1023678365, - 945917001, - 3448395954, + 404532314, + 2709626990, + 581294854, + 3232867264, + 1847531824, + 3160654126, + 1403524923, + 2787863416, + 4118201499, + 2889116140, + 1132769982, + 2720512660, + 1077363937, + 2108498917, + 3720923959, + 2714342061, + 1746163775, ]; static final String usernamePayMob = String.fromCharCodes(List.generate( @@ -11356,581 +11434,581 @@ final class _Env { ).map((int i) => _envieddatausernamePayMob[i] ^ _enviedkeyusernamePayMob[i])); static const List _enviedkeypayMobApikey = [ - 2723835122, - 4101613959, - 347849490, - 1256357132, - 3941792656, - 2799531417, - 2581736305, - 202498234, - 3138935695, - 4231646060, - 542674357, - 113527357, - 172516467, - 3120512878, - 1202982540, - 1241650034, - 2735931488, - 650652221, - 2382281890, - 354991547, - 4257628324, - 795138838, - 2575843195, - 1352132538, - 1416295413, - 4069490316, - 2206550763, - 463084226, - 2307849317, - 3606409115, - 1522223813, - 2531038350, - 3983170633, - 4095540617, - 497405447, - 204944123, - 1622558672, - 270361343, - 3336492904, - 1680444640, - 15974998, - 3411295354, - 1309218607, - 561281008, - 2656752336, - 3450113799, - 3053823594, - 3459283762, - 1248989118, - 3801170603, - 3412970787, - 2963678766, - 256166268, - 1154403590, - 2883118158, - 1959264146, - 641594074, - 1055807500, - 2243925081, - 1149183845, - 1710564951, - 2701594175, - 105332568, - 1387115019, - 4205170590, - 3152994338, - 3680361536, - 2166783079, - 3036229024, - 409239715, - 1952179080, - 4184149578, - 4198174941, - 1081520127, - 2641676270, - 2323341993, - 2757595291, - 324949604, - 4122774020, - 3389647551, - 1022118992, - 1682306056, - 2512750295, - 441487210, - 1635276940, - 3959115136, - 981690723, - 1210704508, - 2583834050, - 172226250, - 276547477, - 2795696262, - 4079715306, - 3861098880, - 2731194673, - 393510150, - 1538396311, - 2442056857, - 2645633316, - 3803720244, - 3256992561, - 1360043489, - 3833937163, - 390115611, - 537144169, - 2489693854, - 1838113132, - 1623387268, - 1506430991, - 4278698097, - 437502026, - 477391568, - 3519523037, - 2501236465, - 1651757795, - 3470269357, - 3206705329, - 22767323, - 2029910823, - 2912381989, - 2938212123, - 2602947075, - 2179553790, - 888078198, - 3645244792, - 885268228, - 1528362436, - 714653709, - 4212453261, - 2288875766, - 1450973376, - 1205449574, - 2573486006, - 3787149934, - 828051394, - 816430311, - 1772823515, - 2113560391, - 3211946072, - 2902655182, - 543995169, - 695614882, - 1386588193, - 2813344662, - 2456766260, - 557125774, - 1475052077, - 2573258926, - 2563784479, - 213705877, - 4103878738, - 523033509, - 2762198810, - 46970579, - 582362092, - 215823929, - 2706750743, - 2395734980, - 1245876355, - 4012848530, - 2918549721, - 2691587580, - 3677048323, - 3421477101, - 1353228861, - 1486679090, - 2054788028, - 181210626, - 3275568126, - 4181314140, - 1562041060, - 3765003898, - 3988998845, - 4028347037, - 4116445395, - 98063716, - 827227331, - 2699170719, - 3195329727, - 3151545850, - 1604211281, - 2546772552, - 615359519, - 314520509, - 819880422, - 2045016359, - 2539255488, - 3690899513, - 1229680094, - 286472935, - 1987288039, - 3332556197, - 3395659586, - 4132879778, - 1136936060, - 115051432, - 565714258, - 3474168889, - 84242287, - 1030895335, - 2162471984, - 1877154118, - 846881574, - 1705061394, - 1699216525, - 2538872462, - 2785704098, - 2793695652, - 272449851, - 2288676981, - 3017932372, - 3597866945, - 2756792263, - 2609240526, - 3745089747, - 391101824, - 2517322765, - 3885975596, - 3360134411, - 2221345655, - 608588069, - 1973745252, - 513764758, - 31285859, - 3175023325, - 801332860, - 3213457659, - 919566733, - 3887089601, - 3668948608, - 2239206111, - 1483412930, - 1629780719, - 2232579945, - 2702926613, - 259054579, - 249649985, - 561396278, - 3132422581, - 2179701285, - 2222613461, - 538516147, - 3895354148, - 2630716677, - 1648569711, - 222648903, - 2624543881, - 1911113048, - 1114948679, - 3833044490, - 4215850605, - 929213587, - 3966150967, - 1001938562, - 2192546257, - 732846335, - 1567413585, - 2198780801, - 1010173859, - 634513082, - 1782810517, - 4144199296, - 426961756, - 1684353868, - 857339008, - 2669696369, - 83501775, - 1177548206, - 4252312355, - 1380645586, - 2625733258, - 1308084406, - 2346383215, - 1579896551, - 3277279071, - 11076541, - 3587850412, - 1466957468, - 212911086, - 2096561785, - 895625091, - 1904417911, - 1106651014, - 290285265, - 537873865, - 3266454946, + 2156512160, + 2749747479, + 2969388392, + 4055118126, + 3045577699, + 490203723, + 1774417868, + 1107059065, + 3170744337, + 1084230053, + 1865849046, + 2877134478, + 702377432, + 1226091863, + 26846506, + 3996652510, + 1411496581, + 2926602357, + 2700119870, + 2606836392, + 1354578579, + 1033924352, + 74228097, + 4170247195, + 873360593, + 2748318779, + 2263315153, + 2826384014, + 3582413331, + 2221990706, + 3944242822, + 3029543767, + 2872488480, + 1835503418, + 3659818944, + 2366662398, + 1008586299, + 2826666190, + 1329641716, + 3652989632, + 2935593741, + 1687202690, + 1526780746, + 2343408140, + 3808135129, + 3118221645, + 3732165185, + 1281794021, + 130140203, + 283700504, + 2589836030, + 4183975573, + 590339126, + 1029997274, + 967061642, + 1997594046, + 2908052586, + 358914832, + 2178363839, + 460103444, + 1129576238, + 3718201627, + 347568641, + 769425599, + 67474002, + 3005327881, + 2720134884, + 1890740325, + 2287546695, + 4181183831, + 9909565, + 657273669, + 1540255763, + 1937567420, + 2689046926, + 2801055376, + 3156051618, + 827077985, + 3720991582, + 1381992539, + 2387310779, + 1094848860, + 778372855, + 2351797210, + 677595179, + 1764857131, + 2702644448, + 1499750759, + 3964245161, + 706925967, + 822010807, + 2825696467, + 3655535118, + 1923752780, + 941429714, + 876276332, + 2311983886, + 1078529168, + 2475054251, + 982128516, + 4151418621, + 4166218094, + 3719554534, + 3677111207, + 1854762695, + 2494078977, + 2791331835, + 147021843, + 3307971400, + 2841905408, + 2160860031, + 1755134641, + 2919044266, + 2997840411, + 233600554, + 1894569097, + 3800206825, + 3277743361, + 3598016087, + 3622885952, + 3019330690, + 3073259091, + 428008179, + 17697518, + 189165416, + 2223665148, + 3524318539, + 1425751564, + 1235952693, + 3407110963, + 3444172054, + 3902980920, + 3380627945, + 2195283964, + 3433027888, + 3040448066, + 2612876586, + 4010989892, + 2098590187, + 1412304955, + 1104308905, + 3647129655, + 2064800519, + 3677870624, + 3366286947, + 2161821326, + 1245059411, + 181993155, + 2333166070, + 3087212255, + 3414822859, + 2663797591, + 1585226605, + 2439119269, + 1102516543, + 312816208, + 1807883815, + 2906527926, + 1131150783, + 515039613, + 3639364064, + 462548574, + 3481604820, + 409454027, + 2163281407, + 2048657469, + 2316664516, + 3525401088, + 1948308916, + 2874566167, + 2877090138, + 2375647808, + 1798523337, + 440692631, + 2568342811, + 626165605, + 770246022, + 553625395, + 1903599032, + 2936931736, + 1916980224, + 1183337777, + 3303541017, + 219135959, + 3387217171, + 606048426, + 3502987509, + 2774556799, + 2852112371, + 1220500395, + 222217586, + 639136462, + 516121620, + 2739283643, + 186450556, + 4211827752, + 1479788747, + 1096524592, + 166573123, + 3096252948, + 1318236592, + 3224218270, + 801477577, + 1079487725, + 1911596875, + 4118436121, + 2947939205, + 2409539994, + 1117520408, + 1221013606, + 736949044, + 1715723768, + 3531267653, + 2584008039, + 1549863685, + 978921404, + 1940456683, + 1948395538, + 4075485643, + 1734480163, + 3011498975, + 476682628, + 448623030, + 1888546377, + 1542374769, + 3544407226, + 2788333141, + 831247260, + 2655087416, + 2435564998, + 2703729490, + 2303253015, + 3362011500, + 2373933917, + 212219962, + 3941400335, + 2542751906, + 1293962739, + 133112821, + 2159734784, + 2114068651, + 1906882530, + 470947538, + 2888653229, + 810525124, + 2409353275, + 3303289369, + 2147064768, + 985776000, + 3920845653, + 3522395285, + 3328873357, + 1626979618, + 618591160, + 3285925362, + 1813887464, + 2533894586, + 1524897332, + 2094947551, + 4281721758, + 685207670, + 3758574822, + 3008126681, + 1168427282, + 1600196531, + 72800162, + 824806799, + 1395876299, + 1798202691, + 1223761745, + 691756726, + 4019761135, + 3124667227, + 4072198595, + 308739772, + 2164639394, + 2133827489, + 3751235874, + 3080714168, + 315849707, + 2039632867, + 3550041251, + 652991768, + 3057667210, + 52448976, + 540248956, ]; static const List _envieddatapayMobApikey = [ - 2723835071, - 4101614019, - 347849568, - 1256357195, - 3941792737, - 2799531474, - 2581736244, - 202498285, - 3138935772, - 4231646045, - 542674375, - 113527403, - 172516354, - 3120512774, - 1202982630, - 1241649941, - 2735931399, - 650652277, - 2382281940, - 354991614, - 4257628404, - 795138898, - 2575843085, - 1352132586, - 1416295327, - 4069490374, - 2206550748, - 463084212, - 2307849279, - 3606409183, - 1522223751, - 2531038411, - 3983170609, - 4095540731, - 497405512, - 204944076, - 1622558595, - 270361292, - 3336492842, - 1680444581, - 15974932, - 3411295261, - 1309218653, - 561280924, - 2656752310, - 3450113874, - 3053823517, - 3459283814, - 1248989183, - 3801170584, - 3412970826, - 2963678747, - 256166190, - 1154403688, - 2883118110, - 1959264167, - 641593984, - 1055807586, - 2243925039, - 1149183754, - 1710564891, - 2701594124, - 105332501, - 1387115065, - 4205170637, - 3152994331, - 3680361522, - 2166783010, - 3036229090, - 409239748, - 1952179194, - 4184149542, - 4198174867, - 1081520043, - 2641676170, - 2323342028, - 2757595363, - 324949548, - 4122774065, - 3389647567, - 1022118916, - 1682306136, - 2512750257, - 441487197, - 1635276994, - 3959115210, - 981690641, - 1210704394, - 2583834043, - 172226299, - 276547559, - 2795696355, - 4079715248, - 3861098954, - 2731194695, - 393510199, - 1538396355, - 2442056951, - 2645633299, - 3803720270, - 3256992599, - 1360043478, - 3833937277, - 390115663, - 537144096, - 2489693914, - 1838113045, - 1623387379, - 1506431077, - 4278698041, - 437501997, - 477391585, - 3519522974, - 2501236422, - 1651757743, - 3470269384, - 3206705352, - 22767336, - 2029910815, - 2912382061, - 2938212175, - 2602947143, - 2179553671, - 888078136, - 3645244729, - 885268279, - 1528362418, - 714653754, - 4212453337, - 2288875686, - 1450973350, - 1205449474, - 2573486030, - 3787149860, - 828051376, - 816430214, - 1772823459, - 2113560438, - 3211946026, - 2902655161, - 543995249, - 695614927, - 1386588273, - 2813344738, - 2456766329, - 557125828, - 1475052116, - 2573258964, - 2563784558, - 213705950, - 4103878679, - 523033596, - 2762198848, - 46970550, - 582361995, - 215823953, - 2706750822, - 2395735031, - 1245876430, - 4012848615, - 2918549653, - 2691587497, - 3677048433, - 3421477035, - 1353228917, - 1486679041, - 2054788093, - 181210675, - 3275568063, - 4181314107, - 1562041004, - 3765003801, - 3988998901, - 4028347052, - 4116445414, - 98063655, - 827227289, - 2699170726, - 3195329770, - 3151545755, - 1604211211, - 2546772508, - 615359571, - 314520562, - 819880350, - 2045016393, - 2539255479, - 3690899465, - 1229680028, - 286472883, - 1987287939, - 3332556255, - 3395659530, - 4132879850, - 1136935950, - 115051498, - 565714195, - 3474168907, - 84242182, - 1030895252, - 2162472042, - 1877154083, - 846881620, - 1705061447, - 1699216576, - 2538872539, - 2785704183, - 2793695710, - 272449889, - 2288676932, - 3017932310, - 3597866927, - 2756792197, - 2609240491, - 3745089686, - 391101929, - 2517322855, - 3885975652, - 3360134525, - 2221345593, - 608588111, - 1973745213, - 513764826, - 31285773, - 3175023246, - 801332813, - 3213457593, - 919566808, - 3887089544, - 3668948675, - 2239206034, - 1483412906, - 1629780668, - 2232579844, - 2702926661, - 259054491, - 249649920, - 561396231, - 3132422528, - 2179701324, - 2222613427, - 538516219, - 3895354205, - 2630716755, - 1648569630, - 222648844, - 2624543948, - 1911112981, - 1114948623, - 3833044573, - 4215850516, - 929213656, - 3966151035, - 1001938656, - 2192546216, - 732846218, - 1567413528, - 2198780881, - 1010173909, - 634513113, - 1782810589, - 4144199353, - 426961673, - 1684353833, - 857339084, - 2669696322, - 83501753, - 1177548276, - 4252312410, - 1380645526, - 2625733356, - 1308084363, - 2346383116, - 1579896465, - 3277279036, - 11076581, - 3587850462, - 1466957508, - 212910978, - 2096561723, - 895625199, - 1904417813, - 1106651108, - 290285235, - 537873835, - 3266454976, + 2156512237, + 2749747539, + 2969388314, + 4055118185, + 3045577618, + 490203648, + 1774417801, + 1107058990, + 3170744386, + 1084230036, + 1865848996, + 2877134552, + 702377385, + 1226091839, + 26846528, + 3996652473, + 1411496674, + 2926602301, + 2700119880, + 2606836461, + 1354578627, + 1033924420, + 74228215, + 4170247243, + 873360571, + 2748318833, + 2263315174, + 2826384120, + 3582413385, + 2221990774, + 3944242884, + 3029543698, + 2872488536, + 1835503432, + 3659818895, + 2366662345, + 1008586344, + 2826666237, + 1329641654, + 3652989573, + 2935593807, + 1687202789, + 1526780728, + 2343408224, + 3808135103, + 3118221592, + 3732165174, + 1281793969, + 130140266, + 283700523, + 2589835927, + 4183975584, + 590339172, + 1029997236, + 967061722, + 1997593995, + 2908052528, + 358914942, + 2178363849, + 460103547, + 1129576290, + 3718201640, + 347568716, + 769425549, + 67473921, + 3005327920, + 2720134806, + 1890740256, + 2287546629, + 4181183792, + 9909583, + 657273641, + 1540255837, + 1937567464, + 2689047018, + 2801055477, + 3156051674, + 827077929, + 3720991595, + 1381992491, + 2387310831, + 1094848780, + 778372753, + 2351797229, + 677595237, + 1764857185, + 2702644370, + 1499750673, + 3964245200, + 706926014, + 822010821, + 2825696438, + 3655535188, + 1923752710, + 941429668, + 876276317, + 2311983962, + 1078529278, + 2475054236, + 982128638, + 4151418523, + 4166218073, + 3719554448, + 3677111283, + 1854762638, + 2494079045, + 2791331714, + 147021924, + 3307971362, + 2841905480, + 2160859928, + 1755134592, + 2919044329, + 2997840428, + 233600614, + 1894569196, + 3800206736, + 3277743410, + 3598016111, + 3622885896, + 3019330774, + 3073259031, + 428008074, + 17697440, + 189165353, + 2223665103, + 3524318525, + 1425751611, + 1235952737, + 3407111011, + 3444172144, + 3902980956, + 3380627857, + 2195283894, + 3433027906, + 3040448035, + 2612876626, + 4010989941, + 2098590105, + 1412304972, + 1104308985, + 3647129690, + 2064800599, + 3677870676, + 3366286894, + 2161821380, + 1245059370, + 181993145, + 2333165959, + 3087212180, + 3414822798, + 2663797518, + 1585226551, + 2439119296, + 1102516568, + 312816184, + 1807883862, + 2906527877, + 1131150834, + 515039496, + 3639364012, + 462548491, + 3481604774, + 409453965, + 2163281335, + 2048657422, + 2316664453, + 3525401137, + 1948308981, + 2874566256, + 2877090066, + 2375647779, + 1798523265, + 440692646, + 2568342830, + 626165542, + 770246108, + 553625354, + 1903599085, + 2936931833, + 1916980314, + 1183337829, + 3303541077, + 219135896, + 3387217259, + 606048452, + 3502987394, + 2774556751, + 2852112305, + 1220500479, + 222217494, + 639136436, + 516121692, + 2739283699, + 186450446, + 4211827818, + 1479788682, + 1096524610, + 166573098, + 3096253031, + 1318236650, + 3224218363, + 801477563, + 1079487672, + 1911596806, + 4118436172, + 2947939280, + 2409540064, + 1117520450, + 1221013591, + 736949110, + 1715723670, + 3531267591, + 2584007938, + 1549863744, + 978921429, + 1940456577, + 1948395610, + 4075485629, + 1734480237, + 3011498933, + 476682717, + 448623098, + 1888546343, + 1542374690, + 3544407179, + 2788333079, + 831247305, + 2655087473, + 2435564933, + 2703729439, + 2303253119, + 3362011455, + 2373933872, + 212220010, + 3941400423, + 2542751971, + 1293962690, + 133112768, + 2159734889, + 2114068685, + 1906882474, + 470947499, + 2888653307, + 810525109, + 2409353328, + 3303289436, + 2147064717, + 985776072, + 3920845570, + 3522395372, + 3328873414, + 1626979694, + 618591194, + 3285925259, + 1813887389, + 2533894643, + 1524897380, + 2094947497, + 4281721853, + 685207614, + 3758574815, + 3008126604, + 1168427383, + 1600196607, + 72800145, + 824806905, + 1395876241, + 1798202682, + 1223761685, + 691756752, + 4019761106, + 3124667192, + 4072198581, + 308739807, + 2164639482, + 2133827539, + 3751235962, + 3080714196, + 315849641, + 2039632783, + 3550041281, + 652991866, + 3057667304, + 52448946, + 540248862, ]; static final String payMobApikey = String.fromCharCodes(List.generate( @@ -11940,35 +12018,35 @@ final class _Env { ).map((int i) => _envieddatapayMobApikey[i] ^ _enviedkeypayMobApikey[i])); static const List _enviedkeyintegrationIdPayMobWallet = [ - 1439305676, - 20069714, - 3314915528, - 3149616572, - 232992535, - 4259314667, - 3056382372, - 130542987, - 1830385159, - 4072565990, - 4059811978, - 109080418, - 1973069856, + 2199029462, + 1381762579, + 1035389835, + 2301212620, + 4098779353, + 3813714428, + 2159906595, + 295151910, + 3441193566, + 1120499211, + 2567959827, + 2022953168, + 3116052433, ]; static const List _envieddataintegrationIdPayMobWallet = [ - 1439305724, - 20069728, - 3314915583, - 3149616523, - 232992544, - 4259314648, - 3056382365, - 130543059, - 1830385269, - 4072565950, - 4059812070, - 109080352, - 1973069900, + 2199029478, + 1381762593, + 1035389884, + 2301212667, + 4098779374, + 3813714383, + 2159906586, + 295151998, + 3441193516, + 1120499283, + 2567959935, + 2022953106, + 3116052413, ]; static final String integrationIdPayMobWallet = String.fromCharCodes( @@ -11981,41 +12059,41 @@ final class _Env { _enviedkeyintegrationIdPayMobWallet[i])); static const List _enviedkeysmsPasswordEgypt = [ - 1234677663, - 1947025940, - 1673913163, - 3084474715, - 2362922444, - 2262423299, - 2784317743, - 339399304, - 2932637832, - 542066160, - 1471719531, - 1746146554, - 405434186, - 2974027939, - 3134585333, - 3435782243, + 3416621437, + 2031660888, + 1803482199, + 1352858980, + 1516850406, + 1348524184, + 3677227258, + 2021089538, + 1120716056, + 670289654, + 3686735344, + 3856174016, + 2305451887, + 4146413048, + 3244789741, + 4019214010, ]; static const List _envieddatasmsPasswordEgypt = [ - 1234677717, - 1947025981, - 1673913117, - 3084474675, - 2362922481, - 2262423410, - 2784317773, - 339399335, - 2932637896, - 542066109, - 1471719475, - 1746146440, - 405434130, - 2974027983, - 3134585271, - 3435782159, + 3416621367, + 2031660913, + 1803482113, + 1352858892, + 1516850395, + 1348524265, + 3677227160, + 2021089581, + 1120716120, + 670289595, + 3686735272, + 3856174002, + 2305451831, + 4146412948, + 3244789679, + 4019214038, ]; static final String smsPasswordEgypt = String.fromCharCodes( @@ -12027,73 +12105,73 @@ final class _Env { _envieddatasmsPasswordEgypt[i] ^ _enviedkeysmsPasswordEgypt[i])); static const List _enviedkeyocpApimSubscriptionKey = [ - 354334352, - 1705674182, - 2926444552, - 1447258396, - 369332433, - 2079467831, - 1460212291, - 1680645957, - 138913, - 4142816813, - 2817308476, - 2479431955, - 2296405907, - 1815850006, - 819495686, - 2901938250, - 3139926811, - 3065176364, - 3220596795, - 1043890259, - 624717790, - 685130063, - 1653975665, - 2821174005, - 2595199409, - 93425964, - 3539385160, - 1037123023, - 918408141, - 2273077326, - 1485860357, - 2046204781, + 471176146, + 3158385045, + 580764052, + 654174929, + 4059514860, + 1272579671, + 4095434934, + 3165298524, + 3806199178, + 3538617412, + 4152409965, + 4153174060, + 2042008369, + 1334546813, + 3544781497, + 3847315324, + 1636423954, + 1869134391, + 368343637, + 2407576772, + 198035226, + 173339932, + 3665559839, + 1727260147, + 2130362298, + 985458494, + 4067927666, + 2202745536, + 2776427237, + 3656714239, + 2749346742, + 1107135976, ]; static const List _envieddataocpApimSubscriptionKey = [ - 354334368, - 1705674144, - 2926444605, - 1447258488, - 369332400, - 2079467860, - 1460212256, - 1680645926, - 138949, - 4142816847, - 2817308511, - 2479432054, - 2296405927, - 1815850023, - 819495733, - 2901938299, - 3139926905, - 3065176349, - 3220596826, - 1043890278, - 624717752, - 685130102, - 1653975620, - 2821173959, - 2595199368, - 93425941, - 3539385214, - 1037123068, - 918408189, - 2273077372, - 1485860448, - 2046204766, + 471176162, + 3158385139, + 580764065, + 654174901, + 4059514765, + 1272579636, + 4095434965, + 3165298495, + 3806199278, + 3538617382, + 4152409870, + 4153174089, + 2042008325, + 1334546764, + 3544781450, + 3847315277, + 1636424048, + 1869134342, + 368343604, + 2407576817, + 198035324, + 173339941, + 3665559850, + 1727260097, + 2130362243, + 985458439, + 4067927620, + 2202745587, + 2776427221, + 3656714189, + 2749346771, + 1107135963, ]; static final String ocpApimSubscriptionKey = String.fromCharCodes( @@ -12106,135 +12184,135 @@ final class _Env { _enviedkeyocpApimSubscriptionKey[i])); static const List _enviedkeychatGPTkeySeferNew4 = [ - 2481067785, - 638510892, - 3318303535, - 1266058891, - 319655716, - 791143234, - 3288365967, - 1145248350, - 332350821, - 4188612537, - 1077811363, - 3884137570, - 285769662, - 1471433315, - 2775994551, - 808611922, - 271939287, - 1015814827, - 191772075, - 2261750012, - 1704928384, - 1049815213, - 1021881699, - 3169973746, - 3831983109, - 3976443929, - 2946135092, - 1861880840, - 2770931809, - 2484838865, - 3343107459, - 3522991685, - 1306534074, - 935459197, - 2424964680, - 8972001, - 3739319661, - 3120820080, - 3712623184, - 2397707864, - 1760095134, - 814907231, - 1660994983, - 326829538, - 3524376921, - 3567861026, - 3611751842, - 2934298990, - 595111321, - 249174490, - 459183284, - 897963298, - 1830910603, - 1740643656, - 195031506, - 3193229708, - 1770343999, - 3194973287, - 2278862513, - 1070993171, - 3393499184, - 3356970485, - 240619025, + 2381442616, + 1867050637, + 1397252667, + 1775411544, + 3840979633, + 3025154038, + 1191771697, + 217270836, + 2916178439, + 1708425003, + 423480389, + 351531955, + 1560090944, + 3774372051, + 1859158980, + 1964496969, + 3308470848, + 3841356476, + 1340198113, + 2031263291, + 1260489717, + 153442885, + 1798276891, + 3155755755, + 123182835, + 3402530082, + 3411128957, + 4146893217, + 3046525917, + 2529868346, + 246774735, + 53148358, + 2826543583, + 3147410771, + 301328377, + 3954622922, + 523596434, + 3780117733, + 4075924512, + 3832510985, + 329586729, + 3709059156, + 3194696216, + 1621661668, + 979641468, + 399429110, + 2468123070, + 539744562, + 1147386824, + 1269822379, + 2752899845, + 2107213675, + 1361273282, + 2575308338, + 1313382092, + 4291789407, + 469771489, + 2395687230, + 2729380322, + 1936146089, + 1533014559, + 2597884613, + 146758073, ]; static const List _envieddatachatGPTkeySeferNew4 = [ - 2481067891, - 638510923, - 3318303490, - 1266059005, - 319655752, - 791143211, - 3288366058, - 1145248371, - 332350807, - 4188612565, - 1077811346, - 3884137528, - 285769682, - 1471433235, - 2775994575, - 808611899, - 271939258, - 1015814887, - 191772129, - 2261749962, - 1704928503, - 1049815292, - 1021881644, - 3169973636, - 3831983207, - 3976444027, - 2946135040, - 1861880924, - 2770931727, - 2484838802, - 3343107514, - 3522991645, - 1306534088, - 935459077, - 2424964655, - 8971956, - 3739319592, - 3120819977, - 3712623110, - 2397707785, - 1760095191, - 814907178, - 1660994961, - 326829494, - 3524376848, - 3567861094, - 3611751830, - 2934298911, - 595111369, - 249174510, - 459183346, - 897963383, - 1830910686, - 1740643641, - 195031485, - 3193229791, - 1770343946, - 3194973247, - 2278862531, - 1070993227, - 3393499228, - 3356970423, - 240619133, + 2381442626, + 1867050730, + 1397252630, + 1775411502, + 3840979677, + 3025153951, + 1191771732, + 217270809, + 2916178485, + 1708425031, + 423480436, + 351532009, + 1560090924, + 3774372003, + 1859158972, + 1964496928, + 3308470829, + 3841356528, + 1340198059, + 2031263245, + 1260489602, + 153442836, + 1798276948, + 3155755677, + 123182737, + 3402530112, + 3411128905, + 4146893301, + 3046525875, + 2529868409, + 246774774, + 53148318, + 2826543533, + 3147410731, + 301328286, + 3954622879, + 523596503, + 3780117660, + 4075924598, + 3832511064, + 329586784, + 3709059105, + 3194696238, + 1621661616, + 979641397, + 399429042, + 2468123018, + 539744579, + 1147386776, + 1269822367, + 2752899907, + 2107213630, + 1361273239, + 2575308355, + 1313382051, + 4291789324, + 469771476, + 2395687270, + 2729380240, + 1936146161, + 1533014643, + 2597884551, + 146758101, ]; static final String chatGPTkeySeferNew4 = String.fromCharCodes( @@ -12247,239 +12325,239 @@ final class _Env { _enviedkeychatGPTkeySeferNew4[i])); static const List _enviedkeyanthropicAIkeySeferNew = [ - 1799300063, - 1392292470, - 864789084, - 3233892298, - 1015532172, - 3492751356, - 3128097799, - 4232623569, - 472702912, - 843118390, - 1027027162, - 540687447, - 3929212946, - 2027150391, - 792172690, - 2470213019, - 2265577324, - 3451135429, - 83672587, - 1156911701, - 1157975609, - 1172014322, - 867529829, - 1358014513, - 918299356, - 3459066696, - 1036998676, - 2094581599, - 3326155205, - 1389362413, - 1409868577, - 4187183000, - 1419331576, - 1316706201, - 2571951872, - 3529522515, - 4058931639, - 1504047966, - 1353296598, - 2107783174, - 2984866335, - 1709152719, - 752344320, - 864838021, - 4178598331, - 3316278549, - 1463981656, - 77060698, - 436601811, - 2067424306, - 65399550, - 1542213616, - 2913065975, - 3657515452, - 4249626054, - 173127949, - 647471168, - 506047490, - 3502688069, - 1475662762, - 4280881961, - 3832964265, - 1551986975, - 1909542734, - 976895300, - 473933085, - 1064782995, - 2034579854, - 2520903062, - 1922665387, - 3364577055, - 1114876927, - 2255904995, - 579372323, - 1576569811, - 4089683122, - 1862449403, - 426002356, - 2075550880, - 1830983289, - 1444762287, - 649722059, - 3943091198, - 853943927, - 3016431179, - 846798301, - 2262605434, - 651883548, - 2850911570, - 2621321078, - 1573428243, - 3882835656, - 2435163576, - 2493637076, - 2302930703, - 3332205940, - 3709100961, - 2789119928, - 4262417208, - 1680641879, - 1699904010, - 1206408370, - 1287725666, - 1317726244, - 3368012532, - 4138461084, - 553037019, - 3648316152, - 2558138993, - 2403297430, - 517761917, - 381444240, - 2490787284, - 1428976904, - 3859126406, + 440415033, + 3481077323, + 2351371344, + 288481861, + 1686766284, + 3622131985, + 1517759729, + 162218873, + 604728260, + 3916034383, + 726836953, + 1390373222, + 1313828993, + 3953920014, + 1210100472, + 636672723, + 2614778888, + 3256229455, + 4178701107, + 2175295549, + 581987297, + 2324410691, + 993526411, + 590897688, + 4131950141, + 1288350918, + 3047320354, + 1322424989, + 1550581193, + 2878806244, + 3233091400, + 1142932090, + 614521182, + 2419880789, + 1035341765, + 1673493904, + 4101051446, + 796536829, + 1331670153, + 1267654245, + 3078736492, + 464054371, + 2826108800, + 2985689774, + 2771215091, + 1285536431, + 2315560808, + 3514480796, + 4030336050, + 2950480752, + 2178285607, + 4178841704, + 2986715985, + 3530745786, + 615901237, + 881855124, + 3373546339, + 1444811969, + 4146566305, + 2821320265, + 2982736412, + 3308881966, + 3052128729, + 3831551676, + 2766571643, + 2433159288, + 2796477796, + 1324992066, + 399061202, + 642755973, + 4143477333, + 2707469362, + 3720826222, + 3400605387, + 2739617522, + 3017961433, + 3390862920, + 513520140, + 2251179580, + 624584094, + 2370674769, + 1669622004, + 11589773, + 236105173, + 2483386644, + 3949126604, + 1604768598, + 1317378690, + 2286953704, + 3045210649, + 1178973471, + 3464784953, + 2463864209, + 2261523411, + 1877928610, + 3336578558, + 2891378150, + 4046181905, + 3691642705, + 1096972210, + 1439704108, + 4159831330, + 4293511786, + 2769129919, + 410562615, + 420517500, + 3728341081, + 2369774650, + 4150826016, + 843207388, + 1237388578, + 546503206, + 502978408, + 1103967478, + 411610807, ]; static const List _envieddataanthropicAIkeySeferNew = [ - 1799300005, - 1392292369, - 864789105, - 3233892283, - 1015532270, - 3492751263, - 3128097834, - 4232623520, - 472702902, - 843118425, - 1027027177, - 540687470, - 3929212991, - 2027150426, - 792172796, - 2470213039, - 2265577274, - 3451135393, - 83672646, - 1156911620, - 1157975564, - 1172014236, - 867529744, - 1358014587, - 918299321, - 3459066625, - 1036998733, - 2094581559, - 3326155144, - 1389362339, - 1409868565, - 4187183048, - 1419331516, - 1316706240, - 2571951986, - 3529522532, - 4058931654, - 1504047921, - 1353296558, - 2107783221, - 2984866354, - 1709152699, - 752344370, - 864838124, - 4178598282, - 3316278617, - 1463981616, - 77060717, - 436601778, - 2067424380, - 65399466, - 1542213556, - 2913065873, - 3657515493, - 4249625984, - 173127968, - 647471111, - 506047588, - 3502688125, - 1475662813, - 4280881985, - 3832964348, - 1551987029, - 1909542676, - 976895239, - 473933166, - 1064783015, - 2034579897, - 2520903123, - 1922665422, - 3364577146, - 1114876819, - 2255904936, - 579372365, - 1576569835, - 4089683181, - 1862449326, - 426002391, - 2075550925, - 1830983212, - 1444762338, - 649722022, - 3943091095, - 853943844, - 3016431111, - 846798268, - 2262605340, - 651883564, - 2850911495, - 2621321020, - 1573428340, - 3882835704, - 2435163644, - 2493637026, - 2302930778, - 3332205848, - 3709101040, - 2789119946, - 4262417276, - 1680641827, - 1699904039, - 1206408325, - 1287725652, - 1317726311, - 3368012454, - 4138461166, - 553036976, - 3648316073, - 2558138912, - 2403297486, - 517761807, - 381444296, - 2490787256, - 1428976970, - 3859126506, + 440415043, + 3481077292, + 2351371389, + 288481844, + 1686766254, + 3622132082, + 1517759708, + 162218760, + 604728242, + 3916034336, + 726836970, + 1390373215, + 1313829036, + 3953920099, + 1210100374, + 636672743, + 2614778974, + 3256229419, + 4178701182, + 2175295596, + 581987284, + 2324410669, + 993526526, + 590897746, + 4131950168, + 1288350863, + 3047320443, + 1322425077, + 1550581124, + 2878806186, + 3233091452, + 1142932010, + 614521114, + 2419880716, + 1035341751, + 1673493927, + 4101051463, + 796536722, + 1331670257, + 1267654230, + 3078736449, + 464054295, + 2826108850, + 2985689799, + 2771215042, + 1285536483, + 2315560704, + 3514480811, + 4030336083, + 2950480702, + 2178285683, + 4178841644, + 2986715959, + 3530745827, + 615901299, + 881855161, + 3373546276, + 1444811943, + 4146566297, + 2821320254, + 2982736500, + 3308882043, + 3052128659, + 3831551718, + 2766571576, + 2433159179, + 2796477776, + 1324992117, + 399061143, + 642756064, + 4143477296, + 2707469406, + 3720826149, + 3400605349, + 2739617482, + 3017961350, + 3390862877, + 513520239, + 2251179601, + 624584139, + 2370674716, + 1669621913, + 11589860, + 236105094, + 2483386712, + 3949126573, + 1604768560, + 1317378738, + 2286953661, + 3045210707, + 1178973560, + 3464784905, + 2463864277, + 2261523365, + 1877928695, + 3336578450, + 2891378103, + 4046181987, + 3691642645, + 1096972230, + 1439704065, + 4159831317, + 4293511772, + 2769129980, + 410562661, + 420517390, + 3728341042, + 2369774699, + 4150826097, + 843207300, + 1237388624, + 546503294, + 502978308, + 1103967412, + 411610843, ]; static final String anthropicAIkeySeferNew = String.fromCharCodes( @@ -12492,135 +12570,135 @@ final class _Env { _enviedkeyanthropicAIkeySeferNew[i])); static const List _enviedkeyllama3Key = [ - 1664970791, - 320481485, - 1305174568, - 298387227, - 3405084341, - 522063534, - 724462339, - 3577816739, - 3234733023, - 3901670063, - 3637162954, - 968226786, - 218708884, - 1537738660, - 2110167300, - 3303228265, - 4009452671, - 2978453822, - 1909550277, - 3488647907, - 804674030, - 4283561573, - 519448186, - 2194642438, - 2370243743, - 1318949981, - 1202417983, - 2242821061, - 4239186519, - 2570882968, - 3252450783, - 632977840, - 3888701722, - 3710448665, - 2574312035, - 4098862598, - 4265795597, - 2597641242, - 3258331470, - 4083946068, - 2518168091, - 1490484205, - 1306007843, - 783994373, - 3493657048, - 974537058, - 935806854, - 43259297, - 2410529635, - 3589460534, - 764362370, - 2529740328, - 604853669, - 580033265, - 3599536822, - 409362759, - 4027283261, - 648576669, - 3246516310, - 3371434852, - 3997448085, - 119229112, - 1131064834, + 3572481898, + 2198763672, + 4266389949, + 194977134, + 4108211437, + 2053667721, + 4103250415, + 923461869, + 3689102089, + 4215912861, + 2840020339, + 1291843711, + 3066303235, + 637162077, + 4089840734, + 2755384350, + 266516998, + 2147734435, + 1971112343, + 893601327, + 1059802444, + 3038118734, + 4176920206, + 2125561606, + 1790473939, + 635573349, + 1755219331, + 952592272, + 2828598413, + 1470709880, + 1365805985, + 1017727377, + 483877279, + 2633096056, + 1736628348, + 744976085, + 2060718974, + 172374259, + 1424671706, + 2531482868, + 930335001, + 2798422613, + 65834050, + 1179104162, + 1307565357, + 2186467103, + 2324931291, + 2761073838, + 658395544, + 297981328, + 3032132029, + 2554868846, + 298738134, + 2354744510, + 397407695, + 3291252503, + 2706569827, + 1382292102, + 1277793008, + 3186033650, + 1988297014, + 1037048923, + 3595786289, ]; static const List _envieddatallama3Key = [ - 1664970828, - 320481463, - 1305174607, - 298387268, - 3405084352, - 522063610, - 724462427, - 3577816794, - 3234733036, - 3901670090, - 3637162995, - 968226726, - 218708950, - 1537738694, - 2110167367, - 3303228216, - 4009452622, - 2978453880, - 1909550251, - 3488647854, - 804673961, - 4283561480, - 519448066, - 2194642527, - 2370243816, - 1318949897, - 1202418036, - 2242821052, - 4239186468, - 2570883040, - 3252450790, - 632977893, - 3888701769, - 3710448680, - 2574311937, - 4098862707, - 4265795711, - 2597641314, - 3258331396, - 4083946046, - 2518168111, - 1490484107, - 1306007909, - 783994482, - 3493656983, - 974536968, - 935806947, - 43259285, - 2410529583, - 3589460588, - 764362432, - 2529740413, - 604853731, - 580033210, - 3599536892, - 409362708, - 4027283212, - 648576709, - 3246516260, - 3371434812, - 3997448185, - 119229178, - 1131064942, + 3572481793, + 2198763746, + 4266389978, + 194977073, + 4108211352, + 2053667805, + 4103250359, + 923461780, + 3689102138, + 4215912952, + 2840020298, + 1291843643, + 3066303297, + 637162047, + 4089840669, + 2755384399, + 266517047, + 2147734501, + 1971112441, + 893601378, + 1059802379, + 3038118691, + 4176920310, + 2125561695, + 1790473892, + 635573297, + 1755219400, + 952592361, + 2828598526, + 1470709760, + 1365805976, + 1017727428, + 483877324, + 2633096009, + 1736628254, + 744976032, + 2060718860, + 172374155, + 1424671632, + 2531482782, + 930335021, + 2798422579, + 65833988, + 1179104213, + 1307565410, + 2186467189, + 2324931262, + 2761073818, + 658395604, + 297981386, + 3032132095, + 2554868795, + 298738064, + 2354744565, + 397407621, + 3291252548, + 2706569810, + 1382292190, + 1277792898, + 3186033578, + 1988297050, + 1037048857, + 3595786333, ]; static final String llama3Key = String.fromCharCodes(List.generate( @@ -12630,279 +12708,279 @@ final class _Env { ).map((int i) => _envieddatallama3Key[i] ^ _enviedkeyllama3Key[i])); static const List _enviedkeypayMobOutClientSecrret = [ - 3497701327, - 2917636721, - 2560487287, - 1437799237, - 3665105773, - 2427766774, - 1695333088, - 1145394424, - 2794412968, - 163410850, - 3492824641, - 866005364, - 3422093694, - 2785236678, - 2643462792, - 936794215, - 2764626308, - 1874673334, - 1059281503, - 2258413905, - 2121863440, - 3523493017, - 3023522065, - 3261034121, - 3306490793, - 15610043, - 1015267190, - 1415784519, - 2427293742, - 1812497531, - 1994956056, - 2103912856, - 2521377452, - 3802879567, - 4026906724, - 1630799532, - 2477327574, - 1857724159, - 3853480194, - 3781753905, - 2886603211, - 3239343211, - 1662501971, - 1806767798, - 2537133269, - 1548566712, - 3287911446, - 2044712870, - 1379134318, - 480096939, - 1408514629, - 847831937, - 375218333, - 2112436548, - 4215426338, - 991161828, - 2553581699, - 2258662110, - 2913056981, - 2731374690, - 2584560068, - 14244994, - 3150436646, - 446275894, - 2045931374, - 2140461716, - 1254196401, - 1721603937, - 1912717589, - 2267744997, - 2053805213, - 1639831450, - 3800680703, - 1777443486, - 46606569, - 3436690213, - 3511329907, - 4013620819, - 1832053998, - 536687476, - 2992070007, - 2783564267, - 3271183283, - 3582879846, - 3129164421, - 4286200153, - 1335122516, - 2903415603, - 3101330082, - 4125351248, - 1559187067, - 360399971, - 4102836091, - 1890095429, - 2244132068, - 3752822795, - 1136052588, - 523503548, - 2387698447, - 3409309349, - 940678243, - 1120002443, - 1248064193, - 2331683453, - 1380162150, - 2926383688, - 1843526623, - 3508961724, - 975828479, - 3765044565, - 2421271044, - 1241968679, - 1239167955, - 3163422048, - 1118375755, - 2829874419, - 1163724927, - 923464102, - 4195524101, - 3995843341, - 1733022342, - 4023620456, - 2832897992, - 1260542913, - 3930150752, - 2437356655, - 4091057797, - 2611556368, - 2784129236, - 1620620459, - 2297268988, - 1018579155, - 856963564, - 444650195, - 1076683242, + 1791175069, + 4274302398, + 2640019683, + 226626444, + 2129466949, + 3370573502, + 1838185322, + 1661460518, + 1471552216, + 284247277, + 592558703, + 2721247847, + 1411044004, + 1716699342, + 2602920259, + 3248471857, + 2400803405, + 3542688653, + 97726941, + 1327359358, + 3921043617, + 2743794380, + 3779296726, + 302543532, + 1934107464, + 1886556912, + 3105507418, + 3013174638, + 546582165, + 2866756923, + 3375057284, + 40608270, + 2700307707, + 2281798243, + 3064205456, + 2435585786, + 471262151, + 1109633429, + 2268316166, + 220452796, + 2358948626, + 776422409, + 1219598009, + 116682801, + 3881474372, + 3413318048, + 1380917233, + 444744348, + 2278996499, + 1955318953, + 1142785951, + 269692139, + 1689414586, + 3364295709, + 3609160927, + 3828025868, + 2102524012, + 339941484, + 456355302, + 1281294123, + 3294899989, + 24023387, + 1078560164, + 4187133903, + 3881470412, + 3894452684, + 1532438968, + 2730357960, + 3633287995, + 2545592955, + 3230220363, + 1650489044, + 3083570276, + 2876810793, + 3154138833, + 3601137810, + 3383259116, + 1843399614, + 3785140761, + 3903839396, + 3703132483, + 521417572, + 3493042551, + 2660676881, + 502128880, + 458791535, + 347561458, + 3488775302, + 2954583900, + 1932780718, + 1968040293, + 1221461083, + 805690927, + 1397152166, + 9419300, + 3022184595, + 2819076579, + 3037437633, + 1069227510, + 3543696866, + 644361757, + 4066100141, + 1908720734, + 1699522416, + 3173902814, + 1127523762, + 800611780, + 3004873618, + 1208922121, + 3134865091, + 4141647798, + 2736322675, + 3237776966, + 1290198067, + 491594743, + 3082583214, + 3801718029, + 1980363941, + 781258854, + 2566488484, + 2698709985, + 3449578448, + 593576507, + 2843511536, + 1103580082, + 2040065597, + 1101635704, + 434408713, + 80044955, + 150216274, + 2548439424, + 1537205109, + 671175664, + 2357986282, + 1040240055, ]; static const List _envieddatapayMobOutClientSecrret = [ - 3497701303, - 2917636616, - 2560487197, - 1437799215, - 3665105727, - 2427766682, - 1695333003, - 1145394329, - 2794412992, - 163410920, - 3492824588, - 866005316, - 3422093606, - 2785236645, - 2643462843, - 936794207, - 2764626387, - 1874673372, - 1059281438, - 2258413857, - 2121863507, - 3523493078, - 3023522169, - 3261034161, - 3306490827, - 15610061, - 1015267089, - 1415784459, - 2427293719, - 1812497416, - 1994956148, - 2103912926, - 2521377500, - 3802879489, - 4026906624, - 1630799585, - 2477327599, - 1857724070, - 3853480295, - 3781753970, - 2886603198, - 3239343186, - 1662501906, - 1806767838, - 2537133209, - 1548566729, - 3287911540, - 2044712905, - 1379134245, - 480096998, - 1408514581, - 847832053, - 375218416, - 2112436503, - 4215426388, - 991161735, - 2553581745, - 2258662032, - 2913057004, - 2731374637, - 2584560112, - 14245110, - 3150436734, - 446275918, - 2045931304, - 2140461784, - 1254196455, - 1721603923, - 1912717663, - 2267744932, - 2053805259, - 1639831468, - 3800680588, - 1777443562, - 46606507, - 3436690294, - 3511329831, - 4013620754, - 1832053929, - 536687410, - 2992069936, - 2783564200, - 3271183333, - 3582879763, - 3129164519, - 4286200094, - 1335122481, - 2903415557, - 3101330159, - 4125351198, - 1559186955, - 360399872, - 4102836044, - 1890095368, - 2244131998, - 3752822849, - 1136052482, - 523503590, - 2387698492, - 3409309430, - 940678154, - 1120002527, - 1248064247, - 2331683386, - 1380162070, - 2926383657, - 1843526569, - 3508961790, - 975828368, - 3765044502, - 2421271112, - 1241968752, - 1239167928, - 3163422005, - 1118375741, - 2829874341, - 1163724829, - 923464130, - 4195524182, - 3995843401, - 1733022439, - 4023620389, - 2832898040, - 1260542907, - 3930150696, - 2437356569, - 4091057904, - 2611556434, - 2784129179, - 1620620531, - 2297268878, - 1018579083, - 856963456, - 444650129, - 1076683142, + 1791175141, + 4274302407, + 2640019593, + 226626534, + 2129466903, + 3370573522, + 1838185217, + 1661460551, + 1471552176, + 284247207, + 592558626, + 2721247831, + 1411044092, + 1716699309, + 2602920304, + 3248471817, + 2400803354, + 3542688743, + 97726876, + 1327359246, + 3921043682, + 2743794307, + 3779296702, + 302543508, + 1934107434, + 1886556806, + 3105507389, + 3013174562, + 546582188, + 2866756936, + 3375057384, + 40608328, + 2700307595, + 2281798189, + 3064205556, + 2435585719, + 471262206, + 1109633484, + 2268316259, + 220452863, + 2358948711, + 776422448, + 1219598072, + 116682841, + 3881474312, + 3413318097, + 1380917139, + 444744435, + 2278996568, + 1955319012, + 1142785999, + 269692063, + 1689414615, + 3364295758, + 3609160873, + 3828025967, + 2102523998, + 339941410, + 456355295, + 1281294180, + 3294900001, + 24023343, + 1078560252, + 4187133879, + 3881470346, + 3894452608, + 1532439022, + 2730358010, + 3633288049, + 2545592890, + 3230220317, + 1650489058, + 3083570199, + 2876810845, + 3154138771, + 3601137857, + 3383259064, + 1843399679, + 3785140830, + 3903839458, + 3703132420, + 521417511, + 3493042465, + 2660676964, + 502128786, + 458791464, + 347561367, + 3488775344, + 2954583825, + 1932780768, + 1968040213, + 1221461048, + 805690904, + 1397152235, + 9419358, + 3022184665, + 2819076493, + 3037437595, + 1069227461, + 3543696817, + 644361844, + 4066100217, + 1908720744, + 1699522359, + 3173902766, + 1127523795, + 800611762, + 3004873680, + 1208922214, + 3134865024, + 4141647866, + 2736322596, + 3237776941, + 1290198118, + 491594625, + 3082583288, + 3801718127, + 1980363969, + 781258805, + 2566488544, + 2698709888, + 3449578397, + 593576459, + 2843511434, + 1103580154, + 2040065611, + 1101635597, + 434408779, + 80045012, + 150216202, + 2548439538, + 1537205037, + 671175580, + 2357986216, + 1040240091, ]; static final String payMobOutClientSecrret = String.fromCharCodes( @@ -12915,33 +12993,33 @@ final class _Env { _enviedkeypayMobOutClientSecrret[i])); static const List _enviedkeyallowedWallet = [ - 608170278, - 4070172800, - 713894558, - 2290568712, - 2489951646, - 2594012884, - 2032937063, - 115566825, - 2643640708, - 3389227422, - 4088391674, - 3994109634, + 1694229894, + 3999798160, + 448883603, + 3004281707, + 3728431091, + 4197831559, + 3505724573, + 2577029677, + 2137661136, + 4217007177, + 1756899448, + 518319248, ]; static const List _envieddataallowedWallet = [ - 608170354, - 4070172914, - 713894647, - 2290568824, - 2489951716, - 2594012803, - 2032936966, - 115566725, - 2643640808, - 3389227515, - 4088391566, - 3994109688, + 1694229970, + 3999798242, + 448883706, + 3004281627, + 3728430985, + 4197831632, + 3505724668, + 2577029697, + 2137661116, + 4217007148, + 1756899340, + 518319274, ]; static final String allowedWallet = String.fromCharCodes(List.generate( @@ -12951,103 +13029,103 @@ final class _Env { ).map((int i) => _envieddataallowedWallet[i] ^ _enviedkeyallowedWallet[i])); static const List _enviedkeypayMobOutClient_id = [ - 1965273895, - 251112756, - 1021360684, - 1760486580, - 3074877518, - 318875691, - 421715299, - 880136620, - 4152884916, - 4108776113, - 77354292, - 2009417891, - 1363872513, - 1531838405, - 3553893983, - 3430035287, - 517387946, - 2257426273, - 2265627234, - 2574723351, - 1648070365, - 2380605039, - 632456759, - 4186782496, - 146908438, - 2728212071, - 3711711213, - 2228982572, - 2499775539, - 555978191, - 3726204011, - 3941353298, - 45047142, - 1060289778, - 2766523477, - 1304711584, - 1920044190, - 4276220986, - 3040104725, - 1487696085, - 3809105538, - 3528196112, - 2908673502, - 3237884278, - 1472941766, - 2147417982, - 572438709, + 979983630, + 2508789854, + 3342679617, + 414951138, + 1079222340, + 2328078156, + 772570862, + 2864880607, + 1647329883, + 1977857149, + 1422043970, + 3625133941, + 3119399678, + 3958275097, + 2809221326, + 1471069410, + 694611393, + 928648581, + 175362392, + 1623958064, + 1600744102, + 2501977433, + 959253698, + 1257331100, + 1074547703, + 1176503077, + 1546625303, + 3098776092, + 1533226722, + 2812471837, + 1112951286, + 1602675172, + 3208237481, + 3504868848, + 1642540271, + 779799845, + 2883949092, + 1503722689, + 3681385494, + 2420641192, + 3494475686, + 3926374187, + 3655378190, + 1480693833, + 873781787, + 3137712878, + 3158057581, ]; static const List _envieddatapayMobOutClient_id = [ - 1965273981, - 251112708, - 1021360665, - 1760486593, - 3074877498, - 318875679, - 421715291, - 880136648, - 4152884962, - 4108776154, - 77354335, - 2009417968, - 1363872563, - 1531838370, - 3553893910, - 3430035301, - 517387984, - 2257426180, - 2265627148, - 2574723409, - 1648070299, - 2380604940, - 632456828, - 4186782547, - 146908528, - 2728212003, - 3711711142, - 2228982602, - 2499775611, - 555978126, - 3726203966, - 3941353314, - 45047089, - 1060289719, - 2766523417, - 1304711633, - 1920044245, - 4276220995, - 3040104799, - 1487696101, - 3809105614, - 3528196168, - 2908673452, - 3237884206, - 1472941738, - 2147417916, - 572438745, + 979983700, + 2508789870, + 3342679668, + 414951063, + 1079222320, + 2328078200, + 772570838, + 2864880571, + 1647329805, + 1977857046, + 1422043945, + 3625133862, + 3119399628, + 3958275198, + 2809221255, + 1471069392, + 694611387, + 928648672, + 175362358, + 1623958134, + 1600744160, + 2501977402, + 959253641, + 1257331183, + 1074547601, + 1176503137, + 1546625372, + 3098776186, + 1533226666, + 2812471900, + 1112951203, + 1602675156, + 3208237566, + 3504868789, + 1642540195, + 779799892, + 2883949167, + 1503722680, + 3681385564, + 2420641176, + 3494475754, + 3926374259, + 3655378300, + 1480693777, + 873781879, + 3137712812, + 3158057473, ]; static final String payMobOutClient_id = String.fromCharCodes( @@ -13059,73 +13137,73 @@ final class _Env { _envieddatapayMobOutClient_id[i] ^ _enviedkeypayMobOutClient_id[i])); static const List _enviedkeypayMobOutPassword = [ - 3046523764, - 1967164127, - 101592283, - 3121811434, - 2219759894, - 3705657411, - 1464695482, - 3260321893, - 1948702050, - 1980441070, - 4286351675, - 1010027237, - 136257506, - 312904951, - 1706125793, - 3647738103, - 2487968249, - 503480611, - 293396140, - 2236098926, - 1094729191, - 2960231447, - 2217186162, - 1834078797, - 2567075134, - 1792144990, - 1089020808, - 3415115440, - 597412956, - 153238271, - 1956332533, - 1548811449, + 3777244660, + 912864580, + 876854029, + 31397964, + 2402256236, + 3558089177, + 405282331, + 1026183174, + 2007236667, + 2400875168, + 2067671069, + 3379238164, + 3326887990, + 2036026928, + 1366655300, + 1593480823, + 1064143790, + 1275708644, + 3766542030, + 1537117210, + 86300338, + 2374149402, + 2174478652, + 1104011002, + 3591848939, + 668153194, + 1201352467, + 1107268086, + 3108266920, + 1789980402, + 688174663, + 4268912646, ]; static const List _envieddatapayMobOutPassword = [ - 3046523696, - 1967164141, - 101592225, - 3121811360, - 2219759952, - 3705657403, - 1464695505, - 3260321824, - 1948702017, - 1980440994, - 4286351733, - 1010027150, - 136257489, - 312904833, - 1706125723, - 3647738052, - 2487968193, - 503480665, - 293396126, - 2236098826, - 1094729150, - 2960231535, - 2217186050, - 1834078723, - 2567075160, - 1792144905, - 1089020880, - 3415115458, - 597412868, - 153238163, - 1956332471, - 1548811477, + 3777244592, + 912864630, + 876854135, + 31397894, + 2402256170, + 3558089121, + 405282416, + 1026183235, + 2007236632, + 2400875244, + 2067671123, + 3379238271, + 3326887941, + 2036026950, + 1366655294, + 1593480772, + 1064143766, + 1275708574, + 3766542076, + 1537117310, + 86300395, + 2374149474, + 2174478668, + 1104010932, + 3591848845, + 668153149, + 1201352523, + 1107267972, + 3108266992, + 1789980318, + 688174597, + 4268912746, ]; static final String payMobOutPassword = String.fromCharCodes( @@ -13137,57 +13215,57 @@ final class _Env { _envieddatapayMobOutPassword[i] ^ _enviedkeypayMobOutPassword[i])); static const List _enviedkeypayMobOutUserName = [ - 1517267622, - 3581019719, - 2265541189, - 4199853435, - 733593041, - 3253403280, - 1972789009, - 336582501, - 1920675372, - 940818255, - 907883946, - 3943258064, - 2872577903, - 3630656087, - 1363200141, - 2634387921, - 2418471153, - 3666332815, - 197993275, - 988403987, - 422481299, - 3931397185, - 3433843438, - 1596261089, + 1918639183, + 2401964853, + 3565683034, + 1895964189, + 3596231414, + 1862637613, + 2056930245, + 1566061619, + 2875080933, + 1883383284, + 183134750, + 3712444261, + 4202700050, + 2336494786, + 2509515411, + 324331526, + 2761085601, + 4075221958, + 2606528383, + 2298152803, + 2759530582, + 3789793797, + 4268109091, + 338600608, ]; static const List _envieddatapayMobOutUserName = [ - 1517267676, - 3581019693, - 2265541168, - 4199853329, - 733593021, - 3253403343, - 1972789088, - 336582419, - 1920675395, - 940818192, - 907883980, - 3943258023, - 2872577796, - 3630656061, - 1363200235, - 2634387894, - 2418471067, - 3666332899, - 197993315, - 988404065, - 422481355, - 3931397165, - 3433843372, - 1596261005, + 1918639157, + 2401964895, + 3565682991, + 1895964279, + 3596231322, + 1862637682, + 2056930228, + 1566061637, + 2875080842, + 1883383211, + 183134840, + 3712444178, + 4202700153, + 2336494760, + 2509515509, + 324331617, + 2761085643, + 4075221930, + 2606528295, + 2298152721, + 2759530510, + 3789793897, + 4268109153, + 338600652, ]; static final String payMobOutUserName = String.fromCharCodes( @@ -13198,9 +13276,9 @@ final class _Env { ).map((int i) => _envieddatapayMobOutUserName[i] ^ _enviedkeypayMobOutUserName[i])); - static const List _enviedkeyA = [621552519]; + static const List _enviedkeyA = [3669847309]; - static const List _envieddataA = [621552598]; + static const List _envieddataA = [3669847388]; static final String A = String.fromCharCodes(List.generate( _envieddataA.length, @@ -13208,9 +13286,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataA[i] ^ _enviedkeyA[i])); - static const List _enviedkeyB = [124244880]; + static const List _enviedkeyB = [2691187575]; - static const List _envieddataB = [124244936]; + static const List _envieddataB = [2691187503]; static final String B = String.fromCharCodes(List.generate( _envieddataB.length, @@ -13218,9 +13296,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataB[i] ^ _enviedkeyB[i])); - static const List _enviedkeyC = [930921266]; + static const List _enviedkeyC = [1476171811]; - static const List _envieddataC = [930921332]; + static const List _envieddataC = [1476171877]; static final String C = String.fromCharCodes(List.generate( _envieddataC.length, @@ -13228,9 +13306,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataC[i] ^ _enviedkeyC[i])); - static const List _enviedkeyD = [2250365783]; + static const List _enviedkeyD = [2692972781]; - static const List _envieddataD = [2250365710]; + static const List _envieddataD = [2692972724]; static final String D = String.fromCharCodes(List.generate( _envieddataD.length, @@ -13238,9 +13316,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataD[i] ^ _enviedkeyD[i])); - static const List _enviedkeyE = [1514385852]; + static const List _enviedkeyE = [346088415]; - static const List _envieddataE = [1514385910]; + static const List _envieddataE = [346088341]; static final String E = String.fromCharCodes(List.generate( _envieddataE.length, @@ -13248,9 +13326,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataE[i] ^ _enviedkeyE[i])); - static const List _enviedkeyF = [704890003]; + static const List _enviedkeyF = [3306563796]; - static const List _envieddataF = [704890054]; + static const List _envieddataF = [3306563713]; static final String F = String.fromCharCodes(List.generate( _envieddataF.length, @@ -13258,9 +13336,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataF[i] ^ _enviedkeyF[i])); - static const List _enviedkeyG = [3179311896]; + static const List _enviedkeyG = [740311107]; - static const List _envieddataG = [3179311955]; + static const List _envieddataG = [740311048]; static final String G = String.fromCharCodes(List.generate( _envieddataG.length, @@ -13268,9 +13346,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataG[i] ^ _enviedkeyG[i])); - static const List _enviedkeyH = [1761336190]; + static const List _enviedkeyH = [1937341364]; - static const List _envieddataH = [1761336105]; + static const List _envieddataH = [1937341411]; static final String H = String.fromCharCodes(List.generate( _envieddataH.length, @@ -13278,9 +13356,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataH[i] ^ _enviedkeyH[i])); - static const List _enviedkeyI = [3781202306]; + static const List _enviedkeyI = [2115946541]; - static const List _envieddataI = [3781202381]; + static const List _envieddataI = [2115946594]; static final String I = String.fromCharCodes(List.generate( _envieddataI.length, @@ -13288,9 +13366,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataI[i] ^ _enviedkeyI[i])); - static const List _enviedkeyJ = [1326210442]; + static const List _enviedkeyJ = [3314402949]; - static const List _envieddataJ = [1326210511]; + static const List _envieddataJ = [3314403008]; static final String J = String.fromCharCodes(List.generate( _envieddataJ.length, @@ -13298,9 +13376,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataJ[i] ^ _enviedkeyJ[i])); - static const List _enviedkeyK = [445423807]; + static const List _enviedkeyK = [620434005]; - static const List _envieddataK = [445423864]; + static const List _envieddataK = [620433938]; static final String K = String.fromCharCodes(List.generate( _envieddataK.length, @@ -13308,9 +13386,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataK[i] ^ _enviedkeyK[i])); - static const List _enviedkeyL = [1546569440]; + static const List _enviedkeyL = [1180655650]; - static const List _envieddataL = [1546569394]; + static const List _envieddataL = [1180655728]; static final String L = String.fromCharCodes(List.generate( _envieddataL.length, @@ -13318,9 +13396,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataL[i] ^ _enviedkeyL[i])); - static const List _enviedkeyM = [453363201]; + static const List _enviedkeyM = [3139361766]; - static const List _envieddataM = [453363279]; + static const List _envieddataM = [3139361704]; static final String M = String.fromCharCodes(List.generate( _envieddataM.length, @@ -13328,9 +13406,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataM[i] ^ _enviedkeyM[i])); - static const List _enviedkeyN = [580459699]; + static const List _enviedkeyN = [3049045212]; - static const List _envieddataN = [580459761]; + static const List _envieddataN = [3049045150]; static final String N = String.fromCharCodes(List.generate( _envieddataN.length, @@ -13338,9 +13416,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataN[i] ^ _enviedkeyN[i])); - static const List _enviedkeyO = [3487169620]; + static const List _enviedkeyO = [2266599974]; - static const List _envieddataO = [3487169565]; + static const List _envieddataO = [2266600047]; static final String O = String.fromCharCodes(List.generate( _envieddataO.length, @@ -13348,9 +13426,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataO[i] ^ _enviedkeyO[i])); - static const List _enviedkeyP = [1776375258]; + static const List _enviedkeyP = [1074033543]; - static const List _envieddataP = [1776375180]; + static const List _envieddataP = [1074033617]; static final String P = String.fromCharCodes(List.generate( _envieddataP.length, @@ -13358,9 +13436,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataP[i] ^ _enviedkeyP[i])); - static const List _enviedkeyQ = [1322153939]; + static const List _enviedkeyQ = [2647546717]; - static const List _envieddataQ = [1322153874]; + static const List _envieddataQ = [2647546652]; static final String Q = String.fromCharCodes(List.generate( _envieddataQ.length, @@ -13368,9 +13446,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataQ[i] ^ _enviedkeyQ[i])); - static const List _enviedkeyR = [2924419422]; + static const List _enviedkeyR = [3790845943]; - static const List _envieddataR = [2924419346]; + static const List _envieddataR = [3790845883]; static final String R = String.fromCharCodes(List.generate( _envieddataR.length, @@ -13378,9 +13456,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataR[i] ^ _enviedkeyR[i])); - static const List _enviedkeyS = [451004087]; + static const List _enviedkeyS = [43300891]; - static const List _envieddataS = [451004141]; + static const List _envieddataS = [43300929]; static final String S = String.fromCharCodes(List.generate( _envieddataS.length, @@ -13388,9 +13466,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataS[i] ^ _enviedkeyS[i])); - static const List _enviedkeyT = [478852539]; + static const List _enviedkeyT = [3507578833]; - static const List _envieddataT = [478852600]; + static const List _envieddataT = [3507578770]; static final String T = String.fromCharCodes(List.generate( _envieddataT.length, @@ -13398,9 +13476,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataT[i] ^ _enviedkeyT[i])); - static const List _enviedkeyU = [610419110]; + static const List _enviedkeyU = [3499348722]; - static const List _envieddataU = [610419182]; + static const List _envieddataU = [3499348666]; static final String U = String.fromCharCodes(List.generate( _envieddataU.length, @@ -13408,9 +13486,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataU[i] ^ _enviedkeyU[i])); - static const List _enviedkeyV = [2844858273]; + static const List _enviedkeyV = [1770507908]; - static const List _envieddataV = [2844858353]; + static const List _envieddataV = [1770507988]; static final String V = String.fromCharCodes(List.generate( _envieddataV.length, @@ -13418,9 +13496,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataV[i] ^ _enviedkeyV[i])); - static const List _enviedkeyW = [3067383091]; + static const List _enviedkeyW = [710768163]; - static const List _envieddataW = [3067383143]; + static const List _envieddataW = [710768247]; static final String W = String.fromCharCodes(List.generate( _envieddataW.length, @@ -13428,9 +13506,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataW[i] ^ _enviedkeyW[i])); - static const List _enviedkeyX = [1619286782]; + static const List _enviedkeyX = [1231391567]; - static const List _envieddataX = [1619286714]; + static const List _envieddataX = [1231391499]; static final String X = String.fromCharCodes(List.generate( _envieddataX.length, @@ -13438,9 +13516,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataX[i] ^ _enviedkeyX[i])); - static const List _enviedkeyY = [2591943762]; + static const List _enviedkeyY = [2348108661]; - static const List _envieddataY = [2591943681]; + static const List _envieddataY = [2348108582]; static final String Y = String.fromCharCodes(List.generate( _envieddataY.length, @@ -13448,9 +13526,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataY[i] ^ _enviedkeyY[i])); - static const List _enviedkeyZ = [229310777]; + static const List _enviedkeyZ = [4202936308]; - static const List _envieddataZ = [229310836]; + static const List _envieddataZ = [4202936249]; static final String Z = String.fromCharCodes(List.generate( _envieddataZ.length, @@ -13458,9 +13536,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataZ[i] ^ _enviedkeyZ[i])); - static const List _enviedkeya = [1536770102]; + static const List _enviedkeya = [1258692106]; - static const List _envieddataa = [1536770119]; + static const List _envieddataa = [1258692219]; static final String a = String.fromCharCodes(List.generate( _envieddataa.length, @@ -13468,9 +13546,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataa[i] ^ _enviedkeya[i])); - static const List _enviedkeyb = [3960042836]; + static const List _enviedkeyb = [185978357]; - static const List _envieddatab = [3960042796]; + static const List _envieddatab = [185978253]; static final String b = String.fromCharCodes(List.generate( _envieddatab.length, @@ -13478,9 +13556,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatab[i] ^ _enviedkeyb[i])); - static const List _enviedkeyc = [324416982]; + static const List _enviedkeyc = [1002619573]; - static const List _envieddatac = [324416944]; + static const List _envieddatac = [1002619603]; static final String c = String.fromCharCodes(List.generate( _envieddatac.length, @@ -13488,9 +13566,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatac[i] ^ _enviedkeyc[i])); - static const List _enviedkeyd = [427889464]; + static const List _enviedkeyd = [1511313002]; - static const List _envieddatad = [427889473]; + static const List _envieddatad = [1511312915]; static final String d = String.fromCharCodes(List.generate( _envieddatad.length, @@ -13498,9 +13576,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatad[i] ^ _enviedkeyd[i])); - static const List _enviedkeye = [898361344]; + static const List _enviedkeye = [319701477]; - static const List _envieddatae = [898361450]; + static const List _envieddatae = [319701391]; static final String e = String.fromCharCodes(List.generate( _envieddatae.length, @@ -13508,9 +13586,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatae[i] ^ _enviedkeye[i])); - static const List _enviedkeyf = [1202330885]; + static const List _enviedkeyf = [1505429496]; - static const List _envieddataf = [1202330992]; + static const List _envieddataf = [1505429389]; static final String f = String.fromCharCodes(List.generate( _envieddataf.length, @@ -13518,9 +13596,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataf[i] ^ _enviedkeyf[i])); - static const List _enviedkeyg = [1729197249]; + static const List _enviedkeyg = [3437297919]; - static const List _envieddatag = [1729197226]; + static const List _envieddatag = [3437297812]; static final String g = String.fromCharCodes(List.generate( _envieddatag.length, @@ -13528,9 +13606,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatag[i] ^ _enviedkeyg[i])); - static const List _enviedkeyh = [1990312942]; + static const List _enviedkeyh = [1452421920]; - static const List _envieddatah = [1990312857]; + static const List _envieddatah = [1452421975]; static final String h = String.fromCharCodes(List.generate( _envieddatah.length, @@ -13538,9 +13616,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatah[i] ^ _enviedkeyh[i])); - static const List _enviedkeyi = [1932907869]; + static const List _enviedkeyi = [801542640]; - static const List _envieddatai = [1932907826]; + static const List _envieddatai = [801542559]; static final String i = String.fromCharCodes(List.generate( _envieddatai.length, @@ -13548,9 +13626,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatai[i] ^ _enviedkeyi[i])); - static const List _enviedkeyj = [1241547470]; + static const List _enviedkeyj = [3178617758]; - static const List _envieddataj = [1241547435]; + static const List _envieddataj = [3178617851]; static final String j = String.fromCharCodes(List.generate( _envieddataj.length, @@ -13558,9 +13636,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataj[i] ^ _enviedkeyj[i])); - static const List _enviedkeyk = [259611394]; + static const List _enviedkeyk = [910033774]; - static const List _envieddatak = [259611493]; + static const List _envieddatak = [910033673]; static final String k = String.fromCharCodes(List.generate( _envieddatak.length, @@ -13568,9 +13646,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatak[i] ^ _enviedkeyk[i])); - static const List _enviedkeyl = [151830303]; + static const List _enviedkeyl = [3262988596]; - static const List _envieddatal = [151830381]; + static const List _envieddatal = [3262988614]; static final String l = String.fromCharCodes(List.generate( _envieddatal.length, @@ -13578,9 +13656,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatal[i] ^ _enviedkeyl[i])); - static const List _enviedkeym = [1799738310]; + static const List _enviedkeym = [4161268557]; - static const List _envieddatam = [1799738280]; + static const List _envieddatam = [4161268515]; static final String m = String.fromCharCodes(List.generate( _envieddatam.length, @@ -13588,9 +13666,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatam[i] ^ _enviedkeym[i])); - static const List _enviedkeyn = [1090460205]; + static const List _enviedkeyn = [1866024422]; - static const List _envieddatan = [1090460239]; + static const List _envieddatan = [1866024324]; static final String n = String.fromCharCodes(List.generate( _envieddatan.length, @@ -13598,9 +13676,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatan[i] ^ _enviedkeyn[i])); - static const List _enviedkeyo = [1789573424]; + static const List _enviedkeyo = [2356433566]; - static const List _envieddatao = [1789573465]; + static const List _envieddatao = [2356433655]; static final String o = String.fromCharCodes(List.generate( _envieddatao.length, @@ -13608,9 +13686,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatao[i] ^ _enviedkeyo[i])); - static const List _enviedkeyp = [1878676969]; + static const List _enviedkeyp = [3221197543]; - static const List _envieddatap = [1878676895]; + static const List _envieddatap = [3221197457]; static final String p = String.fromCharCodes(List.generate( _envieddatap.length, @@ -13618,9 +13696,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatap[i] ^ _enviedkeyp[i])); - static const List _enviedkeyq = [2695059956]; + static const List _enviedkeyq = [1441620817]; - static const List _envieddataq = [2695059861]; + static const List _envieddataq = [1441620784]; static final String q = String.fromCharCodes(List.generate( _envieddataq.length, @@ -13628,9 +13706,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataq[i] ^ _enviedkeyq[i])); - static const List _enviedkeyr = [1939405581]; + static const List _enviedkeyr = [2338076256]; - static const List _envieddatar = [1939405665]; + static const List _envieddatar = [2338076172]; static final String r = String.fromCharCodes(List.generate( _envieddatar.length, @@ -13638,9 +13716,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatar[i] ^ _enviedkeyr[i])); - static const List _enviedkeys = [1180085828]; + static const List _enviedkeys = [3541953140]; - static const List _envieddatas = [1180085822]; + static const List _envieddatas = [3541953038]; static final String s = String.fromCharCodes(List.generate( _envieddatas.length, @@ -13648,9 +13726,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatas[i] ^ _enviedkeys[i])); - static const List _enviedkeyt = [1580305672]; + static const List _enviedkeyt = [1180244588]; - static const List _envieddatat = [1580305771]; + static const List _envieddatat = [1180244495]; static final String t = String.fromCharCodes(List.generate( _envieddatat.length, @@ -13658,9 +13736,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatat[i] ^ _enviedkeyt[i])); - static const List _enviedkeyu = [2323155548]; + static const List _enviedkeyu = [1249543756]; - static const List _envieddatau = [2323155508]; + static const List _envieddatau = [1249543716]; static final String u = String.fromCharCodes(List.generate( _envieddatau.length, @@ -13668,9 +13746,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatau[i] ^ _enviedkeyu[i])); - static const List _enviedkeyv = [1278629770]; + static const List _enviedkeyv = [3272247679]; - static const List _envieddatav = [1278629882]; + static const List _envieddatav = [3272247567]; static final String v = String.fromCharCodes(List.generate( _envieddatav.length, @@ -13678,9 +13756,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatav[i] ^ _enviedkeyv[i])); - static const List _enviedkeyw = [237199249]; + static const List _enviedkeyw = [1149161987]; - static const List _envieddataw = [237199333]; + static const List _envieddataw = [1149162103]; static final String w = String.fromCharCodes(List.generate( _envieddataw.length, @@ -13688,9 +13766,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataw[i] ^ _enviedkeyw[i])); - static const List _enviedkeyx = [1874377583]; + static const List _enviedkeyx = [922652415]; - static const List _envieddatax = [1874377483]; + static const List _envieddatax = [922652315]; static final String x = String.fromCharCodes(List.generate( _envieddatax.length, @@ -13698,9 +13776,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatax[i] ^ _enviedkeyx[i])); - static const List _enviedkeyy = [3787631554]; + static const List _enviedkeyy = [3053150165]; - static const List _envieddatay = [3787631537]; + static const List _envieddatay = [3053150118]; static final String y = String.fromCharCodes(List.generate( _envieddatay.length, @@ -13708,9 +13786,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatay[i] ^ _enviedkeyy[i])); - static const List _enviedkeyz = [3711317403]; + static const List _enviedkeyz = [2047383862]; - static const List _envieddataz = [3711317494]; + static const List _envieddataz = [2047383899]; static final String z = String.fromCharCodes(List.generate( _envieddataz.length, @@ -13719,85 +13797,85 @@ final class _Env { ).map((int i) => _envieddataz[i] ^ _enviedkeyz[i])); static const List _enviedkeykeyOfApp = [ - 552608534, - 3108184057, - 918610805, - 1650458840, - 4088118252, - 2462399260, - 4057715841, - 1487250240, - 1035770947, - 2305263347, - 2850090036, - 3054486205, - 1255162216, - 4170665077, - 3763331735, - 1333575978, - 1335369643, - 249778031, - 1241107597, - 2854534229, - 2563993585, - 744037855, - 344719674, - 3433993396, - 1873779619, - 3261640083, - 746630754, - 3108340333, - 745432909, - 879004739, - 2433384939, - 3726346045, - 1194236542, - 1344318617, - 137789182, - 1572867349, - 936738961, - 3244834692, + 4244184874, + 4107512659, + 2622522874, + 1645925263, + 913853953, + 1777373664, + 1889373768, + 558620175, + 2961007568, + 3688084515, + 1364454989, + 921996628, + 3825877930, + 2135905355, + 2011599918, + 2208987645, + 745071802, + 334467154, + 3673450172, + 3796616278, + 3422993682, + 1335020432, + 3949030242, + 1948720617, + 1792135573, + 2634584073, + 850114781, + 1985160764, + 3334693369, + 1933911873, + 1377163926, + 3712457630, + 1145127440, + 2498192437, + 85469232, + 3454294148, + 2953289630, + 3968588203, ]; static const List _envieddatakeyOfApp = [ - 552608628, - 3108183960, - 918610713, - 1650458795, - 4088118153, - 2462399338, - 4057715905, - 1487250295, - 1035770997, - 2305263306, - 2850089986, - 3054486217, - 1255162121, - 4170664983, - 3763331833, - 1333576011, - 1335369674, - 249777941, - 1241107688, - 2854534182, - 2563993500, - 744037818, - 344719698, - 3433993425, - 1873779665, - 3261640182, - 746630661, - 3108340247, - 745432893, - 879004709, - 2433384833, - 3726346066, - 1194236454, - 1344318699, - 137789094, - 1572867431, - 936739027, - 3244834806, + 4244184904, + 4107512626, + 2622522774, + 1645925372, + 913854052, + 1777373590, + 1889373704, + 558620216, + 2961007590, + 3688084506, + 1364455035, + 921996576, + 3825877963, + 2135905321, + 2011599936, + 2208987548, + 745071835, + 334467112, + 3673450201, + 3796616229, + 3422993791, + 1335020533, + 3949030154, + 1948720524, + 1792135655, + 2634584172, + 850114746, + 1985160774, + 3334693257, + 1933911847, + 1377164028, + 3712457713, + 1145127496, + 2498192455, + 85469288, + 3454294262, + 2953289692, + 3968588249, ]; static final String keyOfApp = String.fromCharCodes(List.generate( diff --git a/lib/main.dart b/lib/main.dart index 9cf4291..c84645d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:firebase_core/firebase_core.dart'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -9,12 +8,11 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:sefer_admin1/views/auth/login_page.dart'; - +import 'package:intl/date_symbol_data_local.dart'; import 'controller/firebase/firbase_messge.dart'; import 'controller/functions/encrypt_decrypt.dart'; import 'firebase_options.dart'; import 'models/db_sql.dart'; -import 'views/admin/admin_home_page.dart'; final box = GetStorage(); const storage = FlutterSecureStorage(); @@ -31,12 +29,13 @@ DbSql sql = DbSql.instance; void main() async { WidgetsFlutterBinding.ensureInitialized(); await GetStorage.init(); + await initializeDateFormatting('ar', null); await EncryptionHelper.initialize(); if (Platform.isAndroid || Platform.isIOS) { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); - await FirebaseMessagesController().requestFirebaseMessagingPermission(); + // await FirebaseMessagesController().requestFirebaseMessagingPermission(); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); @@ -51,7 +50,7 @@ void main() async { DeviceOrientation.portraitDown, ]); } // Enable Crashlytics collection - FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; + // FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; runApp(const MainApp()); } diff --git a/lib/views/admin/admin_home_page.dart b/lib/views/admin/admin_home_page.dart index ea8bedd..1b41176 100644 --- a/lib/views/admin/admin_home_page.dart +++ b/lib/views/admin/admin_home_page.dart @@ -1,180 +1,237 @@ import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:get/get.dart'; import 'package:sefer_admin1/constant/colors.dart'; import 'package:sefer_admin1/controller/admin/dashboard_controller.dart'; -import 'package:sefer_admin1/controller/admin/register_captain_controller.dart'; import 'package:sefer_admin1/controller/admin/static_controller.dart'; import 'package:sefer_admin1/controller/notification_controller.dart'; import 'package:sefer_admin1/main.dart'; -import 'package:sefer_admin1/views/admin/captain/drivers_cant_registe.dart'; +import 'package:sefer_admin1/views/admin/drivers/driver_tracker_screen.dart'; +import 'package:sefer_admin1/views/admin/error/error/error_page.dart'; import 'package:sefer_admin1/views/widgets/mycircular.dart'; -// Please make sure all these imports are correct for your project structure +// تأكد من صحة المسارات import '../../constant/box_name.dart'; -import '../../constant/links.dart'; -import '../../constant/style.dart'; import '../../controller/functions/crud.dart'; import '../invoice/invoice_list_page.dart'; -import '../widgets/my_scafold.dart'; import '../widgets/my_textField.dart'; -import '../invoice/add_invoice_page.dart'; import 'captain/captain.dart'; -import 'dashboard_widget.dart'; // Assuming DashboardStatCard is here +import 'captain/syrian_driver_not_active.dart'; +import 'drivers/driver_gift_check_page.dart'; import 'drivers/driver_the_best.dart'; +import 'drivers/monitor_ride.dart'; import 'employee/employee_page.dart'; import 'packages.dart'; import 'passenger/passenger.dart'; -import 'rides/rides.dart'; +import 'rides/ride_lookup_page.dart'; import 'static/static.dart'; import 'wallet/wallet.dart'; class AdminHomePage extends StatelessWidget { AdminHomePage({super.key}); - // Responsive grid column calculation - int _calculateCrossAxisCount(BuildContext context) { - double screenWidth = MediaQuery.of(context).size.width; - if (screenWidth > 1200) return 5; // Large desktops - if (screenWidth > 900) return 4; // Desktops - if (screenWidth > 600) return 3; // Tablets - return 2; // Phones - } - - // Helper to format currency - String _formatCurrency(dynamic value) { - if (value == null) return '\$0.00'; - final number = double.tryParse(value.toString()); - if (number != null) return '\$${number.toStringAsFixed(2)}'; - return '\$0.00'; - } - final TextEditingController _messageController = TextEditingController(); + // حساب عدد الأعمدة + int _calculateCrossAxisCount(BuildContext context, {bool isSmall = false}) { + double screenWidth = MediaQuery.of(context).size.width; + if (screenWidth > 1200) return isSmall ? 6 : 5; + if (screenWidth > 900) return isSmall ? 5 : 4; + if (screenWidth > 600) return isSmall ? 4 : 3; + return isSmall ? 3 : 2; + } + + String _formatCurrency(dynamic value) { + if (value == null) return '0.00'; + final number = double.tryParse(value.toString()); + if (number != null) return number.toStringAsFixed(2); + return '0.00'; + } + @override Widget build(BuildContext context) { - // Make sure DashboardController is initialized final DashboardController dashboardController = Get.put(DashboardController()); - // Action items list with Arabic titles + // 1. تحديد هوية المستخدم الحالي + String myPhone = box.read(BoxName.adminPhone).toString(); + + // 2. تحديد من هو "السوبر أدمن" الذي يرى كل شيء + // يمكنك إضافة المزيد من الأرقام هنا باستخدام || أو قائمة + bool isSuperAdmin = myPhone == '963942542053' || myPhone == '963992952235'; + + // 3. بناء القائمة باستخدام (Collection If) final List> actionItems = [ + // --- عناصر يراها الجميع --- { 'title': 'الركاب', - 'icon': Icons.people_alt_outlined, - 'onPressed': () => Get.to(() => Passengrs(), - transition: Transition.rightToLeftWithFade) + 'icon': Icons.people_alt_rounded, + 'color': Colors.blueAccent, + 'onPressed': () => + Get.to(() => Passengrs(), transition: Transition.fadeIn) }, { 'title': 'الكباتن', - 'icon': Icons.sports_motorsports_outlined, + 'icon': Icons.sports_motorsports_rounded, + 'color': Colors.orangeAccent, 'onPressed': () => - Get.to(() => Captain(), transition: Transition.rightToLeftWithFade) - }, - { - 'title': 'المحفظة', - 'icon': Icons.account_balance_wallet_outlined, - 'onPressed': () => - Get.to(() => Wallet(), transition: Transition.rightToLeftWithFade) + Get.to(() => CaptainsPage(), transition: Transition.fadeIn) }, { 'title': 'الرحلات', - 'icon': Icons.directions_car_filled_outlined, + 'icon': Icons.directions_car_filled_rounded, + 'color': Colors.indigoAccent, 'onPressed': () => - Get.to(() => Rides(), transition: Transition.rightToLeftWithFade) + Get.to(() => RidesDashboardScreen(), transition: Transition.fadeIn) + // Get.to(() => RideLookupPage(), transition: Transition.fadeIn) }, + { + 'title': ' الكباتن النشطين', + 'icon': Icons.directions_car_filled_rounded, + 'color': Colors.indigoAccent, + 'onPressed': () => + Get.to(() => IntaleqTrackerScreen(), transition: Transition.fadeIn) + }, + + // --- عناصر خاصة بالسوبر أدمن فقط (Using Collection If) --- + + if (isSuperAdmin) + { + 'title': 'مراقبة الرحلات'.tr, + 'icon': Icons.route, // أيقونة مناسبة لمراقبة الرحلات + 'color': Colors.purpleAccent, + 'onPressed': () => + Get.to(() => RideMonitorScreen(), transition: Transition.fadeIn), + }, + + if (isSuperAdmin) + { + 'title': 'المحفظة', // الأمور المالية حساسة + 'icon': Icons.account_balance_wallet_rounded, + 'color': Colors.purpleAccent, + 'onPressed': () => + Get.to(() => Wallet(), transition: Transition.fadeIn) + }, + if (isSuperAdmin) + { + 'title': 'دفع هدية 300'.tr, + 'icon': Icons.card_giftcard, // أيقونة الهدية + 'color': Colors.purpleAccent, + 'onPressed': () => Get.to(() => DriverGiftCheckPage(), + transition: Transition.fadeIn), + }, + + // if (isSuperAdmin) { 'title': 'الإحصائيات', - 'icon': Icons.bar_chart_outlined, + 'icon': Icons.bar_chart_rounded, + 'color': Colors.teal, 'onPressed': () async { await Get.put(StaticController()).getAll(); Get.to(() => const StaticDash()); } }, - { - 'title': 'إرسال واتساب للسائقين', - 'icon': Icons.message_outlined, - 'iconColor': Colors.green.shade600, - 'onPressed': () => _showWhatsAppDialog(context) - }, - { - 'title': 'إرسال إشعار للسائقين', - 'icon': Icons.notifications_active_outlined, - 'onPressed': () async => - await Get.put(NotificationController()).getTokensDrivers() - }, - { - 'title': 'إرسال إشعار للركاب', - 'icon': Icons.notification_important_outlined, - 'onPressed': () async => - await Get.put(NotificationController()).getTokensPassengers() - }, - { - 'title': 'تسجيل كابتن جديد', - 'icon': Icons.person_add_alt_1_outlined, - 'onPressed': () async { - await Get.put(RegisterCaptainController()) - .getDriverNotCompleteRegistration(); - Get.to(() => const DriversCantRegister()); - } - }, - { - 'title': 'تحديث الباقات', - 'icon': Icons.inventory_2_outlined, - 'onPressed': () => Get.to(() => PackageUpdateScreen()) - }, - { - 'title': 'الموظفون', - 'icon': Icons.badge_outlined, - 'onPressed': () => Get.to(() => EmployeePage()) - }, - { - 'title': 'أفضل السائقين', - 'icon': Icons.star_border_purple500_outlined, - 'onPressed': () => Get.to(() => DriverTheBest()) - }, - { - 'title': 'إضافة فاتورة', - 'icon': Icons.post_add_outlined, - // 'onPressed': () => Get.to(() => AddInvoicePage()) - 'onPressed': () => Get.to(() => InvoiceListPage()) - }, - { - 'title': 'إضافة جهاز كمسؤول', - 'icon': Icons.admin_panel_settings_outlined, - 'onPressed': () async => await CRUD() - .post(link: AppLink.addAdminUser, payload: {'name': 'b'}) - }, + + // هذا هو الجزء الذي طلبته تحديداً + if (isSuperAdmin) + { + 'title': 'واتساب سائقين', + 'icon': Icons.message_rounded, + 'color': Colors.green, + 'onPressed': () => _showWhatsAppDialog(context) + }, + + // --- عودة للعناصر العامة (أو يمكنك تقييدها أيضاً) --- + + if (isSuperAdmin) + { + 'title': 'إشعار للسائقين', + 'icon': Icons.notifications_active_rounded, + 'color': Colors.deepOrange, + 'onPressed': () async => + await Get.put(NotificationController()).sendNotificationDrivers() + }, + if (isSuperAdmin) + { + 'title': 'إشعار للركاب', + 'icon': Icons.notification_important_rounded, + 'color': Colors.pinkAccent, + 'onPressed': () async => await Get.put(NotificationController()) + .sendNotificationPassengers() + }, + if (isSuperAdmin) + { + 'title': 'تسجيل كابتن', + 'icon': Icons.person_add_alt_1_rounded, + 'color': Colors.cyan, + 'onPressed': () => Get.to(() => DriversPendingPage()) + }, + + if (isSuperAdmin) // تحديث الباقات للمدير فقط + { + 'title': 'تحديث الباقات', + 'icon': Icons.inventory_2_rounded, + 'color': Colors.brown, + 'onPressed': () => Get.to(() => PackageUpdateScreen()) + }, + + if (isSuperAdmin) // الموظفون للمدير فقط + { + 'title': 'الموظفون', + 'icon': Icons.badge_rounded, + 'color': Colors.blueGrey, + 'onPressed': () => Get.to(() => EmployeePage()) + }, + + if (isSuperAdmin) + { + 'title': 'أفضل السائقين', + 'icon': Icons.star_rounded, + 'color': Colors.amber, + 'onPressed': () => Get.to(() => DriverTheBestRedesigned()) + }, + + if (isSuperAdmin) // الفواتير للمدير فقط + { + 'title': 'الفواتير', + 'icon': Icons.receipt_long_rounded, + 'color': Colors.green.shade800, + 'onPressed': () => Get.to(() => InvoiceListPage()) + }, + + if (isSuperAdmin) + { + 'title': 'سجل الأخطاء', + 'icon': Icons.error_outline_rounded, + 'color': Colors.redAccent, + 'onPressed': () => Get.to(() => ErrorListPage()) + }, ]; - return MyScafolld( - title: 'لوحة التحكم الرئيسية', - action: IconButton( - onPressed: () async { + return Scaffold( + backgroundColor: const Color(0xFFF5F7FA), + body: RefreshIndicator( + onRefresh: () async { await dashboardController.getDashBoard(); }, - icon: const Icon(Icons.refresh, color: AppColor.primaryColor, size: 28), - tooltip: 'تحديث', - ), - body: [ - GetBuilder(builder: (controller) { + child: GetBuilder(builder: (controller) { if (controller.dashbord.isEmpty) { - return const MyCircularProgressIndicator(); + return const Center(child: MyCircularProgressIndicator()); } - // Main data map for easier access final data = controller.dashbord[0]; - // Stat cards list with Arabic titles + // إحصائيات لوحة التحكم final List> statCards = [ - { - 'title': 'رصيد الرسائل', - 'value': controller.creditSMS.toString(), - 'icon': Icons.sms_outlined, - 'color': Colors.lightBlue - }, + // يمكنك تطبيق نفس المنطق هنا لإخفاء الأرباح عن الموظفين العاديين + if (isSuperAdmin) + { + 'title': 'رصيد الرسائل', + 'value': controller.creditSMS.toString(), + 'icon': Icons.sms_outlined, + 'color': Colors.lightBlue + }, { 'title': 'الركاب', 'value': data['countPassengers'].toString(), @@ -193,12 +250,15 @@ class AdminHomePage extends StatelessWidget { 'icon': Icons.calendar_month_outlined, 'color': Colors.purple }, - { - 'title': 'متوسط التكلفة', - 'value': _formatCurrency(data['avg_passenger_price']), - 'icon': Icons.monetization_on_outlined, - 'color': Colors.green - }, + + if (isSuperAdmin) // إخفاء الأمور المالية + { + 'title': 'متوسط التكلفة', + 'value': _formatCurrency(data['avg_passenger_price']), + 'icon': Icons.monetization_on_outlined, + 'color': Colors.green + }, + { 'title': 'الرحلات المكتملة', 'value': data['completed_rides'].toString(), @@ -211,24 +271,29 @@ class AdminHomePage extends StatelessWidget { 'icon': Icons.cancel_outlined, 'color': AppColor.redColor }, + + // if (isSuperAdmin) // إخفاء المدفوعات { 'title': 'مدفوعات السائقين', 'value': _formatCurrency(data['payments']), 'icon': Icons.payments_outlined, 'color': Colors.indigo }, + // if (isSuperAdmin) { 'title': 'محفظة انطلق', 'value': _formatCurrency(data['seferWallet']), 'icon': Icons.account_balance_wallet_outlined, 'color': Colors.deepOrange }, + { 'title': 'عدد التحويلات', 'value': data['transfer_from_count'].toString(), 'icon': Icons.swap_horiz_outlined, 'color': Colors.brown }, + // ... بقية العناصر التي لا تحتاج إخفاء { 'title': 'رحلات الصباح', 'value': data['morning_ride_count'].toString(), @@ -248,43 +313,96 @@ class AdminHomePage extends StatelessWidget { 'color': Colors.black87 }, { - 'title': 'نوع كومفورت', + 'title': 'كومفورت', 'value': data['comfort'].toString(), 'icon': Icons.event_seat_outlined, 'color': Colors.cyan }, { - 'title': 'نوع سبيد', + 'title': 'سبيد', 'value': data['speed'].toString(), 'icon': Icons.speed_outlined, 'color': Colors.red.shade700 }, { - 'title': 'نوع ليدي', + 'title': 'ليدي', 'value': data['lady'].toString(), 'icon': Icons.woman_2_outlined, 'color': Colors.pink }, ]; - return AnimationLimiter( - child: ListView( - padding: - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 10.0), - children: [ - // --- Statistics Grid Section --- - AnimationLimiter( - child: GridView.builder( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: _calculateCrossAxisCount(context), - mainAxisSpacing: 12.0, - crossAxisSpacing: 12.0, - childAspectRatio: 1.8, + return CustomScrollView( + physics: const BouncingScrollPhysics(), + slivers: [ + SliverAppBar( + expandedHeight: 120.0, + floating: true, + pinned: true, + backgroundColor: AppColor.primaryColor, + elevation: 0, + flexibleSpace: FlexibleSpaceBar( + titlePadding: + const EdgeInsets.only(left: 16, right: 16, bottom: 16), + title: const Text( + 'لوحة التحكم', + style: TextStyle( + fontWeight: FontWeight.bold, color: Colors.white), + ), + background: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + AppColor.primaryColor, + AppColor.primaryColor.withOpacity(0.8), + ], + ), ), - itemCount: statCards.length, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { + child: Stack( + children: [ + Positioned( + left: -20, + top: -20, + child: Icon(Icons.dashboard, + size: 150, color: Colors.white.withOpacity(0.1)), + ), + ], + ), + ), + ), + actions: [ + IconButton( + onPressed: () async => + await dashboardController.getDashBoard(), + icon: const Icon(Icons.refresh, color: Colors.white), + ), + ], + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 20, 16, 10), + child: Text( + "نظرة عامة", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.grey[800]), + ), + ), + ), + SliverPadding( + padding: const EdgeInsets.symmetric(horizontal: 16), + sliver: SliverGrid( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: _calculateCrossAxisCount(context), + mainAxisSpacing: 12.0, + crossAxisSpacing: 12.0, + childAspectRatio: 1.6, + ), + delegate: SliverChildBuilderDelegate( + (context, index) { final card = statCards[index]; return AnimationConfiguration.staggeredGrid( position: index, @@ -292,184 +410,274 @@ class AdminHomePage extends StatelessWidget { columnCount: _calculateCrossAxisCount(context), child: ScaleAnimation( child: FadeInAnimation( - child: DashboardStatCard( - title: card['title'] as String, - value: card['value'].toString(), - icon: card['icon'] as IconData, - iconColor: card['color'] as Color, - valueColor: (card['color'] as Color), + child: _buildModernStatCard( + title: card['title'], + value: card['value'], + icon: card['icon'], + color: card['color'], ), ), ), ); }, + childCount: statCards.length, ), ), - - const SizedBox(height: 20), - Text("الإجراءات السريعة", - style: Theme.of(context) - .textTheme - .titleLarge - ?.copyWith(fontWeight: FontWeight.bold)), - const SizedBox(height: 10), - - // --- Admin Actions List Section --- - AnimationLimiter( - child: ListView.builder( - itemCount: actionItems.length, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 24, 16, 10), + child: Text( + "إدارة النظام", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.grey[800]), + ), + ), + ), + SliverPadding( + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 10), + sliver: SliverGrid( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: + _calculateCrossAxisCount(context, isSmall: true), + mainAxisSpacing: 12.0, + crossAxisSpacing: 12.0, + childAspectRatio: 1.0, + ), + delegate: SliverChildBuilderDelegate( + (context, index) { final item = actionItems[index]; - return AnimationConfiguration.staggeredList( + return AnimationConfiguration.staggeredGrid( position: index, duration: const Duration(milliseconds: 375), + columnCount: + _calculateCrossAxisCount(context, isSmall: true), child: SlideAnimation( verticalOffset: 50.0, child: FadeInAnimation( - child: AdminActionTile( - title: item['title'] as String, - icon: item['icon'] as IconData, - onPressed: item['onPressed'] as void Function(), - iconColor: item['iconColor'] as Color?, + child: _buildActionCard( + context, + title: item['title'], + icon: item['icon'], + color: item['color'], + onTap: item['onPressed'], ), ), ), ); }, + childCount: actionItems.length, ), ), + ), + const SliverToBoxAdapter(child: SizedBox(height: 40)), + ], + ); + }), + ), + ); + } + + // --- بقية الدوال (buildModernStatCard, buildActionCard, showWhatsAppDialog) تبقى كما هي --- + Widget _buildModernStatCard({ + required String title, + required String value, + required IconData icon, + required Color color, + }) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.04), + blurRadius: 10, + offset: const Offset(0, 4), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: color.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + ), + child: Icon(icon, color: color, size: 20), + ), ], ), - ); - }), - ], - isleading: false, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + value, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.grey[900], + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 4), + Text( + title, + style: TextStyle( + fontSize: 12, + color: Colors.grey[600], + fontWeight: FontWeight.w500, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], + ), + ], + ), + ), + ); + } + + Widget _buildActionCard( + BuildContext context, { + required String title, + required IconData icon, + required Color color, + required VoidCallback onTap, + }) { + return Material( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + elevation: 0, + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(16), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16), + border: Border.all(color: Colors.grey.shade200), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [color.withOpacity(0.2), color.withOpacity(0.05)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + ), + child: Icon(icon, size: 28, color: color), + ), + const SizedBox(height: 12), + Text( + title, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.bold, + color: Colors.black87, + ), + ), + ], + ), + ), + ), ); } void _showWhatsAppDialog(BuildContext context) { Get.dialog( AlertDialog( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)), - title: Text('تأكيد إرسال الرسائل؟'), - content: MyTextForm( - controller: _messageController, - label: 'الرسالة', - hint: 'أدخل نص الرسالة هنا', - type: TextInputType.text, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + title: const Text('إرسال رسالة جماعية', + style: TextStyle(fontWeight: FontWeight.bold)), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.all(15), + decoration: BoxDecoration( + color: Colors.green.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + ), + child: const Icon(Icons.send, size: 40, color: Colors.green), + ), + const SizedBox(height: 15), + MyTextForm( + controller: _messageController, + label: 'الرسالة', + hint: 'اكتب الرسالة هنا...', + type: TextInputType.text, + ), + ], ), + actionsPadding: const EdgeInsets.all(15), actions: [ TextButton( onPressed: () { _messageController.clear(); Get.back(); }, - child: Text('إلغاء'), + child: const Text('إلغاء', style: TextStyle(color: Colors.grey)), ), - ElevatedButton( + ElevatedButton.icon( style: ElevatedButton.styleFrom( - backgroundColor: AppColor.primaryColor), + backgroundColor: Colors.green, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + ), + icon: const Icon(Icons.send, size: 18, color: Colors.white), + label: const Text('إرسال', style: TextStyle(color: Colors.white)), onPressed: () async { if (_messageController.text.isNotEmpty) { - Get.back(); // Close dialog first + Get.back(); var driverPhones = box.read(BoxName.tokensDrivers)['message'] as List?; if (driverPhones == null || driverPhones.isEmpty) { - Get.snackbar('خطأ', 'لم يتم العثور على أرقام هواتف للسائقين.', - snackPosition: SnackPosition.BOTTOM); + Get.snackbar('تنبيه', 'لا توجد بيانات اتصال للسائقين', + backgroundColor: Colors.amber.withOpacity(0.5)); return; } + Get.snackbar('جاري الإرسال', 'بدأت عملية الإرسال في الخلفية...', + backgroundColor: Colors.blue.withOpacity(0.3)); + for (var driverData in driverPhones) { if (driverData['phone'] != null) { await CRUD().sendWhatsAppAuth( driverData['phone'].toString(), _messageController.text, ); - // Random delay to avoid being flagged as spam await Future.delayed( - Duration(seconds: Random().nextInt(5) + 2)); + Duration(seconds: Random().nextInt(3) + 1)); } } _messageController.clear(); - Get.snackbar( - 'نجاح', - 'تم إرسال الرسائل بنجاح', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green.shade100, - colorText: Colors.black, - ); + Get.snackbar('نجاح', 'تمت العملية بنجاح', + backgroundColor: Colors.green.withOpacity(0.5)); } }, - child: Text('إرسال', style: TextStyle(color: Colors.white)), ), ], ), - barrierDismissible: false, - ); - } -} - -// Renamed for clarity and improved design -class AdminActionTile extends StatelessWidget { - const AdminActionTile({ - super.key, - required this.title, - required this.onPressed, - required this.icon, - this.iconColor, - }); - - final String title; - final VoidCallback onPressed; - final IconData icon; - final Color? iconColor; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 6.0), - child: Material( - color: Theme.of(context).cardColor, - borderRadius: BorderRadius.circular(12.0), - child: InkWell( - onTap: onPressed, - borderRadius: BorderRadius.circular(12.0), - child: Container( - padding: - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 18.0), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12.0), - border: Border.all(color: Colors.grey.withOpacity(0.2))), - child: Row( - children: [ - Icon( - icon, - size: 26, - color: iconColor ?? AppColor.primaryColor, - ), - const SizedBox(width: 16), - Expanded( - child: Text( - title, - style: AppStyle.title.copyWith( - fontSize: 16, - fontWeight: FontWeight.w500, - ), - ), - ), - const Icon( - Icons.arrow_forward_ios, - size: 16, - color: Colors.grey, - ), - ], - ), - ), - ), - ), ); } } diff --git a/lib/views/admin/captain/captain.dart b/lib/views/admin/captain/captain.dart index ba2f269..118eb7e 100644 --- a/lib/views/admin/captain/captain.dart +++ b/lib/views/admin/captain/captain.dart @@ -1,223 +1,302 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +// تأكد من استيراد مكتبة الاتصال إذا أردت تفعيل زر الاتصال فعلياً +// import 'package:url_launcher/url_launcher.dart'; -import '../../../constant/colors.dart'; -import '../../../constant/style.dart'; -import '../../../controller/admin/captain_admin_controller.dart'; -import '../../../controller/functions/encrypt_decrypt.dart'; -import '../../widgets/elevated_btn.dart'; +import '../../../constant/box_name.dart'; +import '../../../controller/functions/launch.dart'; +import '../../../main.dart'; import '../../widgets/my_scafold.dart'; import '../../widgets/my_textField.dart'; import '../../widgets/mycircular.dart'; +import '../../../constant/style.dart'; +import '../../../controller/admin/captain_admin_controller.dart'; import 'captain_details.dart'; -import 'form_captain.dart'; -class Captain extends StatelessWidget { - Captain({super.key}); - final CaptainAdminController captainAdminController = +class CaptainsPage extends StatelessWidget { + CaptainsPage({super.key}); + + final CaptainAdminController captainController = Get.put(CaptainAdminController()); + final TextEditingController searchController = TextEditingController(); + + // 🔴 هام جداً: قم بتغيير هذا المتغير بناءً على حالة تسجيل الدخول الحقيقية في تطبيقك + // مثال: bool isAdmin = Get.find().isAdmin; + // final bool isAdmin = true; // اجعلها false لتجربة وضع المستخدم العادي + String myPhone = box.read(BoxName.adminPhone).toString(); + + // 2. تحديد من هو "السوبر أدمن" الذي يرى كل شيء + // يمكنك إضافة المزيد من الأرقام هنا باستخدام || أو قائمة + bool isSuperAdmin = false; @override Widget build(BuildContext context) { + isSuperAdmin = myPhone == '963942542053' || myPhone == '963992952235'; + return MyScafolld( - title: 'Captain'.tr, - body: [ - GetBuilder( - builder: (captainAdminController) => Column( - children: [ - captainAdminController.isLoading - ? const MyCircularProgressIndicator() - : Column( - children: [ - Padding( - padding: const EdgeInsets.all(5), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - captainAdmin( - captainAdminController, - 'Captains Count', - 'countPassenger', - ), - MyElevatedButton( - title: 'Add Prize to Gold Captains', - onPressed: () { - var date = DateTime.now(); - var day = date.weekday; - - if (day == 6) { - // Saturday is 6 - Get.defaultDialog( - title: - 'Add Prize to Gold Captains', - titleStyle: AppStyle.title, - content: Column( - children: [ - Text( - 'Add Points to their wallet as prize' - .tr, - style: AppStyle.title, - ), - Form( - key: captainAdminController - .formCaptainPrizeKey, - child: MyTextForm( - controller: - captainAdminController - .captainPrizeController, - label: - 'Count of prize' - .tr, - hint: 'Count of prize' - .tr, - type: TextInputType - .number)) - ], - ), - confirm: MyElevatedButton( - title: 'Add', - onPressed: () async { - if (captainAdminController - .formCaptainPrizeKey - .currentState! - .validate()) { - captainAdminController - .addCaptainsPrizeToWalletSecure(); - } - }, - ), - ); - } else { - Get.defaultDialog( - title: - 'This day is not allowed', - titleStyle: AppStyle.title, - middleText: - 'Saturday only Allowed day', - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - })); - } - }) - ], - ), - ), - const SizedBox( - height: 10, - ), - InkWell( - onTap: () { - //todo search - }, - child: Padding( - padding: const EdgeInsets.all(3), - child: Container( - width: Get.width, - height: 110, - decoration: BoxDecoration( - border: Border.all( - width: 2, - color: AppColor.greenColor)), - child: formSearchCaptain() - // ], - // ), - ), - ), - ), - SizedBox( - height: Get.height * .5, - child: ListView.builder( - itemCount: captainAdminController - .captainData['message'].length, - itemBuilder: (context, index) { - final user = captainAdminController - .captainData['message'][index]; - - return InkWell( - onTap: () { - Get.to(const CaptainsDetailsPage(), - arguments: { - 'data': user, - }); - }, - child: Padding( - padding: const EdgeInsets.all(3), - child: Container( - decoration: BoxDecoration( - border: Border.all(width: 2)), - child: ListTile( - title: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Name : ${(user['first_name'])} ${(user['last_name'])}', - style: AppStyle.title, - ), - Text( - 'Rating : ${user['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - subtitle: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Count Trip : ${user['countPassengerRide']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate : ${user['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - ), - ), - ), - ); - }, - ), - ), - ], - ), - ], - )) - ], + title: 'Search for Captain'.tr, isleading: true, + body: [ + Container( + height: MediaQuery.of(context).size.height, // لضمان أخذ المساحة + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + // --- شريط البحث المحسن --- + _buildSearchSection(context), + + const SizedBox(height: 20), + + // --- قائمة النتائج --- + Expanded( + child: GetBuilder( + builder: (controller) { + if (controller.isLoading) { + return const Center(child: MyCircularProgressIndicator()); + } + + if (controller.captainData['message'] == null || + controller.captainData['message'].isEmpty) { + return _buildEmptyState(); + } + + return ListView.separated( + physics: const BouncingScrollPhysics(), + itemCount: controller.captainData['message'].length, + separatorBuilder: (context, index) => + const SizedBox(height: 12), + itemBuilder: (context, index) { + final captain = + controller.captainData['message'][index]; + return _buildCaptainCard(context, captain); + }, + ); + }, + ), + ), + // مساحة إضافية في الأسفل لتجنب تداخل المحتوى مع الحواف + const SizedBox(height: 80), + ], + ), + ), + ], ); } - Container captainAdmin(CaptainAdminController captainAdminController, - String title, String jsonField) { + // --- ودجت البحث --- + Widget _buildSearchSection(BuildContext context) { return Container( - height: Get.height * .1, - decoration: BoxDecoration(border: Border.all(width: 2)), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: () {}, - child: Column( - children: [ - Text( - title.tr, - style: AppStyle.title, - ), - Text( - captainAdminController.captainData['message'][0][jsonField] - .toString(), - style: AppStyle.title, - ), - ], + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 2, + blurRadius: 10, + offset: const Offset(0, 2), + ), + ], + ), + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), + child: Row( + children: [ + Expanded( + child: MyTextForm( + controller: searchController, + label: 'Captain Phone Number'.tr, + hint: 'Enter phone number...'.tr, + type: TextInputType.phone, + // يمكنك إزالة الحواف من الـ TextField الأصلي إذا أردت ليتناسب مع الكونتينر + ), + ), + Container( + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + borderRadius: BorderRadius.circular(10), + ), + child: IconButton( + icon: const Icon(Icons.search, size: 28, color: Colors.white), + onPressed: () { + final phone = searchController.text; + if (phone.isNotEmpty) { + captainController.find_driver_by_phone(phone); + } else { + Get.snackbar( + 'Error'.tr, + 'Please enter a phone number to search.'.tr, + backgroundColor: Colors.red.withOpacity(0.8), + colorText: Colors.white, + ); + } + }, + ), + ), + ], + ), + ); + } + + // --- بطاقة الكابتن المحسنة --- + Widget _buildCaptainCard(BuildContext context, dynamic captain) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.08), + spreadRadius: 1, + blurRadius: 8, + offset: const Offset(0, 4), + ), + ], + border: Border.all(color: Colors.grey.withOpacity(0.1)), + ), + child: Material( + color: Colors.transparent, + child: InkWell( + borderRadius: BorderRadius.circular(16), + onTap: () { + Get.to(() => const CaptainDetailsPage(), + arguments: {'data': captain}); + }, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Row( + children: [ + // صورة الكابتن أو أيقونة + CircleAvatar( + radius: 28, + backgroundColor: + Theme.of(context).primaryColor.withOpacity(0.1), + child: Icon( + Icons.person, + color: Theme.of(context).primaryColor, + size: 30, + ), + ), + const SizedBox(width: 15), + + // المعلومات النصية + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // الاسم + Text( + '${captain['first_name']} ${captain['last_name']}', + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black87, + ), + ), + const SizedBox(height: 4), + + // رقم الهاتف (مع المنطق) + Row( + children: [ + Icon(Icons.phone_iphone, + size: 14, color: Colors.grey[600]), + const SizedBox(width: 4), + Text( + _formatPhoneNumber(captain['phone'].toString()), + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Colors.grey[700], + fontFamily: + 'monospace', // لجعل الأرقام والنجوم متناسقة + ), + ), + ], + ), + + // الإيميل (يظهر فقط للأدمن) + if (isSuperAdmin && captain['email'] != null) ...[ + const SizedBox(height: 4), + Row( + children: [ + Icon(Icons.email_outlined, + size: 14, color: Colors.grey[600]), + const SizedBox(width: 4), + Expanded( + child: Text( + captain['email'], + style: TextStyle( + fontSize: 12, + color: Colors.grey[600], + ), + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ], + ], + ), + ), + + // أزرار الإجراءات + Column( + children: [ + // زر الاتصال (فقط للأدمن) + if (isSuperAdmin) + IconButton( + onPressed: () { + // منطق الاتصال + makePhoneCall('+' + captain['phone']); + // Get.snackbar( + // 'Call', 'Calling ${captain['phone']}...'); + }, + icon: const Icon(Icons.call, color: Colors.green), + tooltip: 'Call Captain', + ), + + if (!isSuperAdmin) + const Icon(Icons.arrow_forward_ios, + size: 16, color: Colors.grey), + ], + ), + ], + ), ), ), ), ); } + + // --- دالة تنسيق الرقم (المنطق المطلوب) --- + String _formatPhoneNumber(String phone) { + if (isSuperAdmin) { + return phone; // للأدمن: إظهار الرقم كاملاً + } else { + // للمستخدم العادي: إظهار آخر 4 أرقام فقط + if (phone.length <= 4) return phone; + String lastFour = phone.substring(phone.length - 4); + String maskedPart = '*' * (phone.length - 4); + return '$maskedPart$lastFour'; // النتيجة: *******1234 + } + } + + // --- تصميم الحالة الفارغة --- + Widget _buildEmptyState() { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.search_off_rounded, size: 80, color: Colors.grey[300]), + const SizedBox(height: 10), + Text( + 'No captains found.'.tr, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + color: Colors.grey[500], + ), + ), + ], + ), + ); + } } diff --git a/lib/views/admin/captain/captain_details.dart b/lib/views/admin/captain/captain_details.dart index 594e1bf..b31ee62 100644 --- a/lib/views/admin/captain/captain_details.dart +++ b/lib/views/admin/captain/captain_details.dart @@ -1,167 +1,404 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; -import '../../../constant/style.dart'; import '../../../controller/admin/captain_admin_controller.dart'; import '../../../controller/firebase/firbase_messge.dart'; +import '../../../main.dart'; // Import main to access myPhone import '../../widgets/elevated_btn.dart'; import '../../widgets/my_scafold.dart'; import '../../widgets/my_textField.dart'; +import 'form_captain.dart'; -class CaptainsDetailsPage extends StatelessWidget { - const CaptainsDetailsPage({super.key}); +class CaptainDetailsPage extends StatelessWidget { + const CaptainDetailsPage({super.key}); @override Widget build(BuildContext context) { - final arguments = Get.arguments; - final Map data = arguments['data']; - var key = Get.find().formCaptainPrizeKey; - var titleNotify = Get.find().titleNotify; - var bodyNotify = Get.find().bodyNotify; + final Map data = Get.arguments['data']; + final controller = Get.find(); + String myPhone = box.read(BoxName.adminPhone).toString(); + + // Define Super Admin Logic + final bool isSuperAdmin = + myPhone == '963942542053' || myPhone == '963992952235'; + return MyScafolld( - title: data['first_name'] + ' ' + data['last_name'], + title: 'Captain Profile'.tr, + isleading: true, body: [ - Padding( - padding: const EdgeInsets.all(8.0), + SingleChildScrollView( + padding: const EdgeInsets.only(bottom: 40), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - 'Email is ${data['email']}', - style: AppStyle.title, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Phone is ${data['phone']}', - style: AppStyle.title, - ), - Text( - 'gender is ${data['gender']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'status is ${data['status']}', - style: AppStyle.title, - ), - Text( - 'birthdate is ${data['birthdate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'site is ${data['site']}', - style: AppStyle.title, - ), - // Text( - // 'sosPhone is ${data['sosPhone']}', - // style: AppStyle.title, - // ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Feedback is ${data['countFeedback']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate is ${data['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Cancel is ${data['countPassengerCancel']}', - style: AppStyle.title, - ), - Text( - 'Count Ride is ${data['countPassengerRide']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Rating Captain Avarage is ${data['passengerAverageRating']}', - style: AppStyle.title, - ), - Text( - 'Rating is ${data['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - Container( - decoration: BoxDecoration( - border: Border.all(width: 3, color: AppColor.yellowColor)), - child: TextButton( - onPressed: () async { - Get.defaultDialog( - title: 'Send Notification'.tr, - titleStyle: AppStyle.title, - content: Form( - key: key, - child: Column( - children: [ - MyTextForm( - controller: titleNotify, - label: 'title'.tr, - hint: 'title notificaton'.tr, - type: TextInputType.name), - const SizedBox( - height: 10, - ), - MyTextForm( - controller: bodyNotify, - label: 'body'.tr, - hint: 'body notificaton'.tr, - type: TextInputType.name) - ], - ), - ), - confirm: MyElevatedButton( - title: 'Send', - onPressed: () { - if (key.currentState!.validate()) { - FirebaseMessagesController() - .sendNotificationToAnyWithoutData( - titleNotify.text, - bodyNotify.text, - data['passengerToken'], - 'order.wav'); - Get.back(); - } - })); - }, - child: Text( - "Send Notificaion to Captains ".tr, - style: AppStyle.title, - ), + // --- Header Section (Avatar & Name) --- + _buildHeaderSection(context, data), + + const SizedBox(height: 20), + + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + children: [ + // --- Personal Information Card --- + _buildInfoCard( + title: 'Personal Information', + icon: Icons.person, + children: [ + _buildDetailTile( + Icons.email_outlined, + 'Email', + isSuperAdmin + ? data['email'] + : _maskEmail( + data['email']) // Mask email for non-super + ), + _buildDetailTile( + Icons.phone_iphone, + 'Phone', + _formatPhoneNumber( + data['phone'].toString(), isSuperAdmin)), + _buildDetailTile(Icons.transgender, 'Gender', + data['gender'] ?? 'Not specified'), + _buildDetailTile(Icons.cake_outlined, 'Birthdate', + data['birthdate'] ?? 'N/A'), + ], + ), + const SizedBox(height: 16), + + // --- Ride Statistics Card --- + _buildInfoCard( + title: 'Performance & Stats', + icon: Icons.bar_chart_rounded, + children: [ + _buildDetailTile(Icons.star_rate_rounded, 'Rating', + '${data['ratingPassenger'] ?? 0.0} / 5.0', + valueColor: Colors.amber[700]), + _buildDetailTile(Icons.directions_car_filled_outlined, + 'Total Rides', data['countPassengerRide']), + _buildDetailTile(Icons.cancel_outlined, + 'Canceled Rides', data['countPassengerCancel'], + valueColor: Colors.redAccent), + ], + ), + const SizedBox(height: 30), + + // --- Action Buttons --- + _buildActionButtons( + context, controller, data, isSuperAdmin), + ], ), - ) + ), ], ), - ) + ), ], - isleading: true, + ); + } + + // --- Header with Gradient Background --- + Widget _buildHeaderSection(BuildContext context, Map data) { + return Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(vertical: 25), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + blurRadius: 10, + offset: const Offset(0, 5), + ) + ], + borderRadius: const BorderRadius.vertical(bottom: Radius.circular(30)), + ), + child: Column( + children: [ + CircleAvatar( + radius: 45, + backgroundColor: AppColor.primaryColor.withOpacity(0.1), + child: Text( + data['first_name'] != null + ? data['first_name'][0].toUpperCase() + : 'C', + style: TextStyle( + fontSize: 35, + fontWeight: FontWeight.bold, + color: AppColor.primaryColor), + ), + ), + const SizedBox(height: 12), + Text( + '${data['first_name']} ${data['last_name']}', + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + color: Colors.black87), + ), + const SizedBox(height: 4), + Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), + decoration: BoxDecoration( + color: Colors.green.withOpacity(0.1), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + 'Active Captain'.tr, + style: const TextStyle( + fontSize: 12, + color: Colors.green, + fontWeight: FontWeight.w600), + ), + ), + ], + ), + ); + } + + Widget _buildInfoCard( + {required String title, + required IconData icon, + required List children}) { + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.05), + spreadRadius: 2, + blurRadius: 10) + ], + border: Border.all(color: Colors.grey.withOpacity(0.1)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon(icon, color: AppColor.primaryColor, size: 22), + const SizedBox(width: 10), + Text(title.tr, + style: const TextStyle( + fontSize: 17, fontWeight: FontWeight.bold)), + ], + ), + Divider(height: 25, color: Colors.grey.withOpacity(0.2)), + ...children, + ], + ), + ); + } + + Widget _buildDetailTile(IconData icon, String label, dynamic value, + {Color? valueColor}) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.grey[100], + borderRadius: BorderRadius.circular(8)), + child: Icon(icon, color: Colors.grey[600], size: 18), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(label.tr, + style: TextStyle(fontSize: 12, color: Colors.grey[500])), + Text( + value?.toString() ?? 'N/A', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + color: valueColor ?? Colors.black87), + ), + ], + ), + ), + ], + ), + ); + } + + Widget _buildActionButtons( + BuildContext context, + CaptainAdminController controller, + Map data, + bool isSuperAdmin) { + return Column( + children: [ + // Notification is available for everyone + SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton.icon( + icon: const Icon(Icons.notifications_active_outlined, + color: Colors.white), + label: Text("Send Notification".tr, + style: const TextStyle(color: Colors.white, fontSize: 16)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.primaryColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + onPressed: () => _showSendNotificationDialog(controller, data), + ), + ), + + // Edit and Delete ONLY for Super Admin + if (isSuperAdmin) ...[ + const SizedBox(height: 16), + Row( + children: [ + Expanded( + child: ElevatedButton.icon( + icon: const Icon(Icons.edit_note_rounded, size: 20), + label: Text("Edit".tr), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + foregroundColor: AppColor.yellowColor, + elevation: 0, + side: BorderSide(color: AppColor.yellowColor), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + padding: const EdgeInsets.symmetric(vertical: 12), + ), + onPressed: () { + Get.to(() => const FormCaptain(), arguments: { + 'isEditMode': true, + 'captainData': data, + }); + }, + ), + ), + const SizedBox(width: 16), + Expanded( + child: ElevatedButton.icon( + icon: const Icon(Icons.delete_outline_rounded, size: 20), + label: Text("Delete".tr), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red[50], + foregroundColor: Colors.red, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + padding: const EdgeInsets.symmetric(vertical: 12), + ), + onPressed: () => _showDeleteConfirmation(data), + ), + ), + ], + ), + ] else ...[ + // Message for normal admins + const SizedBox(height: 15), + Text( + "Only Super Admins can edit or delete captains.", + style: TextStyle( + color: Colors.grey[400], + fontSize: 12, + fontStyle: FontStyle.italic), + ) + ] + ], + ); + } + + // --- Helper Methods --- + + String _formatPhoneNumber(String phone, bool isSuperAdmin) { + if (isSuperAdmin) return phone; + if (phone.length <= 4) return phone; + return '${'*' * (phone.length - 4)}${phone.substring(phone.length - 4)}'; + } + + String _maskEmail(String? email) { + if (email == null || email.isEmpty) return 'N/A'; + int atIndex = email.indexOf('@'); + if (atIndex <= 1) return email; // Too short to mask + return '${email.substring(0, 2)}****${email.substring(atIndex)}'; + } + + void _showSendNotificationDialog( + CaptainAdminController controller, Map data) { + Get.defaultDialog( + title: 'Send Notification'.tr, + titleStyle: const TextStyle(fontWeight: FontWeight.bold), + content: Form( + key: controller.formCaptainPrizeKey, + child: Column( + children: [ + MyTextForm( + controller: controller.titleNotify, + label: 'Title'.tr, + hint: 'Enter notification title'.tr, + type: TextInputType.text, + ), + const SizedBox(height: 10), + MyTextForm( + controller: controller.bodyNotify, + label: 'Body'.tr, + hint: 'Enter message body'.tr, + type: TextInputType.text, + ), + ], + ), + ), + confirm: SizedBox( + width: 100, + child: MyElevatedButton( + title: 'Send', + onPressed: () { + // Check if key is valid (might be recreated) + if (controller.formCaptainPrizeKey.currentState?.validate() ?? + true) { + FirebaseMessagesController().sendNotificationToAnyWithoutData( + controller.titleNotify.text, + controller.bodyNotify.text, + data['passengerToken'] ?? '', // Safety check + 'order.wav'); + Get.back(); + Get.snackbar("Success", "Notification Sent", + backgroundColor: Colors.green.withOpacity(0.2)); + } + }, + ), + ), + cancel: TextButton( + onPressed: () => Get.back(), + child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey))), + ); + } + + void _showDeleteConfirmation(Map user) { + Get.defaultDialog( + title: 'Confirm Deletion'.tr, + titleStyle: + const TextStyle(color: Colors.redAccent, fontWeight: FontWeight.bold), + middleText: + 'Are you sure you want to delete ${user['first_name']}? This action cannot be undone.' + .tr, + confirm: ElevatedButton( + style: ElevatedButton.styleFrom(backgroundColor: Colors.redAccent), + onPressed: () { + // Call delete function here + // controller.deleteCaptain(user['id']); + Get.back(); + Get.snackbar("Deleted", "Captain has been removed", + backgroundColor: Colors.red.withOpacity(0.2)); + }, + child: Text('Delete'.tr, style: const TextStyle(color: Colors.white)), + ), + cancel: TextButton( + onPressed: () => Get.back(), + child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey))), ); } } diff --git a/lib/views/admin/captain/driver_details_not_active_page.dart b/lib/views/admin/captain/driver_details_not_active_page.dart new file mode 100644 index 0000000..9ca0f4e --- /dev/null +++ b/lib/views/admin/captain/driver_details_not_active_page.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../controller/drivers/driver_not_active_controller.dart'; + +class DriverDetailsPage extends StatelessWidget { + final String driverId; + final DriverController controller = Get.find(); + + DriverDetailsPage({super.key, required this.driverId}); + + /// Helper function to safely get String values from dynamic map + String safeVal(Map d, String key) { + final v = d[key]; + if (v == null || v == false) return ''; + return v.toString(); + } + + @override + Widget build(BuildContext context) { + controller.getDriverDetails(driverId); + + return Scaffold( + appBar: AppBar(title: const Text("Driver Details")), + body: GetBuilder( + id: 'driverDetails', + builder: (c) { + if (c.driverDetails.isEmpty) { + return const Center(child: CircularProgressIndicator()); + } + + final d = c.driverDetails['driver'] as Map; + final docs = c.driverDetails['documents'] as List; + + return SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Name: ${safeVal(d, 'first_name')} ${safeVal(d, 'last_name')}"), + Text("Phone: ${safeVal(d, 'phone')}"), + Text("Email: ${safeVal(d, 'email')}"), + Text("National Number: ${safeVal(d, 'national_number')}"), + Text("Gender: ${safeVal(d, 'gender')}"), + Text("Birthdate: ${safeVal(d, 'birthdate')}"), + Text("Status: ${safeVal(d, 'status')}"), + Text("License Type: ${safeVal(d, 'license_type')}"), + Text("License Categories: ${safeVal(d, 'license_categories')}"), + Text("Issue Date: ${safeVal(d, 'issue_date')}"), + Text("Expiry Date: ${safeVal(d, 'expiry_date')}"), + Text("Address: ${safeVal(d, 'address')}"), + Text("Site: ${safeVal(d, 'site')}"), + Text("Employment Type: ${safeVal(d, 'employmentType')}"), + Text("Marital Status: ${safeVal(d, 'maritalStatus')}"), + const SizedBox(height: 16), + const Text("Documents:", + style: TextStyle(fontWeight: FontWeight.bold)), + const SizedBox(height: 8), + ...docs.map((doc) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(safeVal(doc, "doc_type")), + const SizedBox(height: 4), + Image.network( + safeVal(doc, "link"), + height: 200, + fit: BoxFit.contain, + errorBuilder: (ctx, err, st) => + const Icon(Icons.broken_image), + ), + const SizedBox(height: 16), + ], + )), + ], + ), + ); + }, + ), + ); + } +} diff --git a/lib/views/admin/captain/form_captain.dart b/lib/views/admin/captain/form_captain.dart index 8856434..c0b219d 100644 --- a/lib/views/admin/captain/form_captain.dart +++ b/lib/views/admin/captain/form_captain.dart @@ -1,84 +1,122 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import '../../../constant/colors.dart'; +import 'package:sefer_admin1/controller/functions/crud.dart'; +import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../controller/admin/captain_admin_controller.dart'; import '../../widgets/elevated_btn.dart'; -import 'captain_details.dart'; +import '../../widgets/my_scafold.dart'; +import '../../widgets/my_textField.dart'; -GetBuilder formSearchCaptain() { - // DbSql sql = DbSql.instance; - return GetBuilder( - builder: (controller) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: Container( - decoration: - const BoxDecoration(color: AppColor.secondaryColor), - child: TextField( - decoration: InputDecoration( - border: const OutlineInputBorder( - borderRadius: BorderRadius.only(), - gapPadding: 4, - borderSide: BorderSide( - color: AppColor.redColor, - width: 2, - )), - suffixIcon: InkWell( - onTap: () async { - if (controller.captainController.text.length > 4) { - await controller.getCaptains(); +class FormCaptain extends StatefulWidget { + const FormCaptain({super.key}); - Get.defaultDialog( - title: controller.captain['message'][0] - ['email'], - titleStyle: AppStyle.title, - content: Column( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Name is ${controller.captain['message'][0]['first_name']} ${controller.captain['message'][0]['last_name']}', - style: AppStyle.title, - ), - Text( - 'phone is ${controller.captain['message'][0]['phone']}', - style: AppStyle.title, - ), - ], - ), - confirm: MyElevatedButton( - title: 'Go To Details'.tr, - onPressed: () { - Get.to( - () => const CaptainsDetailsPage(), - arguments: { - 'data': controller - .captain['message'][0], - }); - })); - } - }, - child: const Icon(Icons.search)), - hintText: 'Search for Passenger'.tr, - hintStyle: AppStyle.title, - hintMaxLines: 1, - prefixIcon: IconButton( - onPressed: () async { - controller.captainController.clear(); - // controller.clearPlaces(); - }, - icon: Icon( - Icons.clear, - color: Colors.red[300], - ), - ), - ), - controller: controller.captainController, - ), - ), - ) - ], - )); + @override + State createState() => _FormCaptainState(); +} + +class _FormCaptainState extends State { + final CaptainAdminController controller = Get.find(); + final _formKey = GlobalKey(); + + late TextEditingController firstNameController; + late TextEditingController lastNameController; + late TextEditingController phoneController; + + bool isEditMode = false; + Map? captainData; + + @override + void initState() { + super.initState(); + if (Get.arguments != null && Get.arguments['isEditMode'] == true) { + isEditMode = true; + captainData = Get.arguments['captainData']; + firstNameController = + TextEditingController(text: captainData?['first_name'] ?? ''); + lastNameController = + TextEditingController(text: captainData?['last_name'] ?? ''); + phoneController = + TextEditingController(text: captainData?['phone'] ?? ''); + } else { + firstNameController = TextEditingController(); + lastNameController = TextEditingController(); + phoneController = TextEditingController(); + } + } + + @override + void dispose() { + firstNameController.dispose(); + lastNameController.dispose(); + phoneController.dispose(); + super.dispose(); + } + + Future _saveForm() async { + if (_formKey.currentState!.validate()) { + // Create a map of the updated data + Map updatedData = { + 'id': captainData?['id'], // Important for the WHERE clause in SQL + // 'first_name': firstNameController.text, + // 'last_name': lastNameController.text, + 'phone': phoneController.text, + }; + var res = await CRUD() + .post(link: AppLink.updateDriverFromAdmin, payload: updatedData); + + if (res != 'failure') { + print('Updating data: $updatedData'); + + Get.back(); // Go back after saving + Get.snackbar('Success', 'Captain data updated successfully!'); + } + // controller.updateCaptain(updatedData); + } + } + + @override + Widget build(BuildContext context) { + return MyScafolld( + title: 'Edit Captain'.tr, + isleading: true, + body: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Form( + key: _formKey, + child: ListView( + children: [ + MyTextForm( + controller: firstNameController, + label: 'First Name'.tr, + hint: 'Enter first name'.tr, + type: TextInputType.name, + ), + const SizedBox(height: 16), + MyTextForm( + controller: lastNameController, + label: 'Last Name'.tr, + hint: 'Enter last name'.tr, + type: TextInputType.name, + ), + const SizedBox(height: 16), + MyTextForm( + controller: phoneController, + label: 'Phone Number'.tr, + hint: 'Enter phone number'.tr, + type: TextInputType.phone, + ), + const SizedBox(height: 32), + MyElevatedButton( + title: 'Update'.tr, + onPressed: _saveForm, + ), + ], + ), + ), + ), + ], + ); + } } diff --git a/lib/views/admin/captain/syrian_driver_not_active.dart b/lib/views/admin/captain/syrian_driver_not_active.dart new file mode 100644 index 0000000..fe4eafa --- /dev/null +++ b/lib/views/admin/captain/syrian_driver_not_active.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:secure_string_operations/secure_string_operations.dart'; +import 'package:sefer_admin1/constant/box_name.dart'; + +import '../../../constant/info.dart'; +import '../../../constant/char_map.dart'; + +import '../../../controller/drivers/driver_not_active_controller.dart'; +import '../../../controller/functions/encrypt_decrypt.dart'; +import '../../../main.dart'; +import '../../../print.dart'; +import 'driver_details_not_active_page.dart'; + +class DriversPendingPage extends StatelessWidget { + final DriverController controller = Get.put(DriverController()); + + DriversPendingPage({super.key}); + + @override + Widget build(BuildContext context) { + controller.getDriversPending(); + Log.print( + ': ${X.r(X.r(X.r(box.read(BoxName.jwt), cn), cC), cs).toString().split(AppInformation.addd)[0]}'); + + return Scaffold( + appBar: AppBar(title: const Text("Drivers Pending")), + body: GetBuilder( + id: 'drivers', + builder: (c) { + if (c.drivers.isEmpty) { + return Center( + child: const Text('no drivers found yet', + style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), + ); + } + return ListView.builder( + itemCount: c.drivers.length, + itemBuilder: (ctx, i) { + final d = c.drivers[i]; + return ListTile( + title: Text(d["first_name"] + d['last_name'] ?? ""), + subtitle: Text(d["phone"] ?? ""), + onTap: () { + Get.to(() => DriverDetailsPage(driverId: d["id"].toString())); + }, + ); + }, + ); + }, + ), + ); + } +} diff --git a/lib/views/admin/drivers/driver_gift_check_page.dart b/lib/views/admin/drivers/driver_gift_check_page.dart new file mode 100644 index 0000000..1f01cda --- /dev/null +++ b/lib/views/admin/drivers/driver_gift_check_page.dart @@ -0,0 +1,219 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:sefer_admin1/controller/functions/crud.dart'; +import 'package:sefer_admin1/controller/functions/wallet.dart'; // تأكد من المسار + +// --- Controller: المسؤول عن المنطق (البحث، الفحص، الإضافة) --- +class DriverGiftCheckerController extends GetxController { + // للتحكم في حقل النص + final TextEditingController phoneController = TextEditingController(); + + // لعرض النتائج وحالة التحميل + var statusLog = "".obs; + var isLoading = false.obs; + + // قائمة السائقين (سنقوم بتحميلها للبحث عن الـ ID) + List driversCache = []; + + @override + void onInit() { + super.onInit(); + // fetchDriverCache(); // تحميل البيانات عند فتح الصفحة + } + + // 1. تحميل قائمة السائقين لاستخراج الـ ID منها + Future fetchDriverCache() async { + try { + final response = await CRUD().post( + link: + 'https://api.intaleq.xyz/intaleq/Admin/driver/getDriverGiftPayment.php', + payload: {'phone': phoneController.text.trim()}, + ); + // print('response: ${response}'); + + if (response != 'failure') { + driversCache = (response['message']); + } + } catch (e) { + debugPrint("Error loading cache: $e"); + } + } + + // --- الدالة الرئيسية التي تنفذ العملية المطلوبة --- + Future processDriverGift() async { + String phoneInput = phoneController.text.trim(); + + if (phoneInput.isEmpty) { + Get.snackbar("تنبيه", "يرجى إدخال رقم الهاتف", + backgroundColor: Colors.orange); + return; + } + await fetchDriverCache(); + isLoading.value = true; + statusLog.value = "جاري البحث عن السائق..."; + + try { + // الخطوة 1: استخراج الـ ID بناءً على رقم الهاتف + var driver = driversCache.firstWhere( + (d) => d['phone'].toString().contains(phoneInput), + orElse: () => null, + ); + + if (driver == null) { + statusLog.value = "❌ لم يتم العثور على سائق بهذا الرقم في الكاش."; + isLoading.value = false; + return; + } + + String driverId = driver['id'].toString(); + String driverName = driver['name_arabic'] ?? 'بدون اسم'; + + statusLog.value = + "✅ تم العثور على السائق: $driverName (ID: $driverId)\nجاري فحص رصيد الهدايا..."; + + // الخطوة 2: فحص السيرفر هل الهدية موجودة؟ + // bool hasGift = await _checkIfGiftExistsOnServer(driverId); + + // if (hasGift) { + // statusLog.value += + // "\n⚠️ هذا السائق لديه هدية الافتتاح (30,000) مسبقاً. لم يتم اتخاذ إجراء."; + // } else { + // الخطوة 3: إضافة الهدية + statusLog.value += "\n🎁 الهدية غير موجودة. جاري الإضافة..."; + await _addGiftToDriver(driverId, phoneInput, "30000"); + // } + } catch (e) { + statusLog.value = "حدث خطأ غير متوقع: $e"; + } finally { + isLoading.value = false; + } + } + + // دالة إضافة الهدية باستخدام WalletController الموجود عندك + Future _addGiftToDriver( + String driverId, String phone, String amount) async { + final wallet = Get.put(WalletController()); + + // استخدام الدالة الموجودة في نظامك + await wallet.addDrivergift3000('new driver', driverId, amount, phone); + + // statusLog.value += "\n✅ تمت إضافة مبلغ $amount ل.س بنجاح!"; + + // إضافة تنبيه مرئي + // Get.snackbar("تم بنجاح", "تمت إضافة هدية الافتتاح للسائق", + // backgroundColor: Colors.green, colorText: Colors.white); + } +} + +// --- View: واجهة المستخدم --- +class DriverGiftCheckPage extends StatelessWidget { + const DriverGiftCheckPage({super.key}); + + @override + Widget build(BuildContext context) { + // حقن الكنترولر + final controller = Get.put(DriverGiftCheckerController()); + + return Scaffold( + backgroundColor: const Color(0xFFF8FAFC), + appBar: AppBar( + title: const Text("فحص ومنح هدية الافتتاح", + style: TextStyle(fontWeight: FontWeight.bold)), + backgroundColor: const Color(0xFF0F172A), // نفس لون الهيدر السابق + foregroundColor: Colors.white, + ), + body: Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + children: [ + // كارد الإدخال + Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow(color: Colors.grey.withOpacity(0.1), blurRadius: 10) + ], + ), + child: Column( + children: [ + const Icon(Icons.card_giftcard, + size: 50, color: Colors.amber), + const SizedBox(height: 10), + const Text( + "أدخل رقم الهاتف للتحقق", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 20), + + // حقل الإدخال + TextField( + controller: controller.phoneController, + keyboardType: TextInputType.phone, + decoration: InputDecoration( + hintText: 'مثال: 0912345678', + prefixIcon: const Icon(Icons.phone), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10)), + filled: true, + fillColor: Colors.grey[50], + ), + ), + const SizedBox(height: 20), + + // زر التنفيذ + Obx(() => SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton( + onPressed: controller.isLoading.value + ? null + : () => controller.processDriverGift(), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF0F172A), + foregroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + ), + child: controller.isLoading.value + ? const CircularProgressIndicator( + color: Colors.white) + : const Text("تحقق ومنح الهدية (30,000)", + style: TextStyle(fontSize: 16)), + ), + )), + ], + ), + ), + + const SizedBox(height: 30), + + // منطقة عرض النتائج (Log) + Expanded( + child: Container( + width: double.infinity, + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.black87, + borderRadius: BorderRadius.circular(12), + ), + child: SingleChildScrollView( + child: Obx(() => Text( + controller.statusLog.value.isEmpty + ? "بانتظار العملية..." + : controller.statusLog.value, + style: const TextStyle( + color: Colors.greenAccent, + fontFamily: 'monospace', + height: 1.5), + )), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/views/admin/drivers/driver_the_best.dart b/lib/views/admin/drivers/driver_the_best.dart index 0b57142..4b789dd 100644 --- a/lib/views/admin/drivers/driver_the_best.dart +++ b/lib/views/admin/drivers/driver_the_best.dart @@ -1,103 +1,654 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:sefer_admin1/constant/links.dart'; -import 'package:sefer_admin1/controller/functions/crud.dart'; -import 'package:sefer_admin1/controller/functions/encrypt_decrypt.dart'; +import 'package:get_storage/get_storage.dart'; // Ensure get_storage is in pubspec.yaml import 'package:sefer_admin1/controller/functions/wallet.dart'; -import 'package:sefer_admin1/views/widgets/elevated_btn.dart'; -import 'package:sefer_admin1/views/widgets/my_scafold.dart'; -import '../../../controller/drivers/driverthebest.dart'; -import 'alexandria.dart'; -import 'giza.dart'; +// --- New Controller to handle the specific JSON URL --- +class DriverCacheController extends GetxController { + List drivers = []; + bool isLoading = false; + String lastUpdated = ''; + String searchQuery = ''; // Search query state -class DriverTheBest extends StatelessWidget { - const DriverTheBest({super.key}); + // Storage for paid drivers + final box = GetStorage(); + List paidDrivers = []; + + @override + void onInit() { + super.onInit(); + // Load previously paid drivers from storage + var stored = box.read('paid_drivers'); + if (stored != null) { + paidDrivers = List.from(stored.map((e) => e.toString())); + } + fetchData(); + } + + Future fetchData() async { + isLoading = true; + update(); // Notify UI to show loader + try { + // Using GetConnect to fetch the JSON directly + final response = await GetConnect().get( + 'https://api.intaleq.xyz/intaleq/ride/location/active_drivers_cache.json', + ); + + if (response.body != null && response.body is Map) { + if (response.body['data'] != null) { + drivers = List.from(response.body['data']); + } + if (response.body['last_updated'] != null) { + lastUpdated = response.body['last_updated'].toString(); + } + } + } catch (e) { + debugPrint("Error fetching driver cache: $e"); + } finally { + isLoading = false; + update(); // Update UI with data + } + } + + // Update search query + void updateSearchQuery(String query) { + searchQuery = query; + update(); + } + + // Mark driver as paid and save to storage + void markAsPaid(String driverId) { + // Validation: Don't mark if ID is invalid + if (driverId == 'null' || driverId.isEmpty) return; + + if (!paidDrivers.contains(driverId)) { + paidDrivers.add(driverId); + box.write('paid_drivers', paidDrivers); + update(); + } + } + + // Clear all paid status (Delete Box) + void clearPaidStorage() { + paidDrivers.clear(); + box.remove('paid_drivers'); + update(); + Get.snackbar( + "Storage Cleared", + "Paid status history has been reset", + backgroundColor: Colors.redAccent, + colorText: Colors.white, + snackPosition: SnackPosition.BOTTOM, + ); + } + + // Check if driver is already paid + bool isDriverPaid(String driverId) { + return paidDrivers.contains(driverId); + } +} + +class DriverTheBestRedesigned extends StatelessWidget { + const DriverTheBestRedesigned({super.key}); @override Widget build(BuildContext context) { - Get.put(Driverthebest(), permanent: true); - return MyScafolld( - title: 'Best Drivers'.tr, - body: [ - GetBuilder(builder: (driverthebest) { - return driverthebest.driver.isNotEmpty - ? Column( + // Put the new controller + final controller = Get.put(DriverCacheController()); + + return Scaffold( + backgroundColor: const Color(0xFFF8FAFC), // slate-50 background + body: SafeArea( + child: GetBuilder(builder: (ctrl) { + if (ctrl.isLoading) { + return const Center(child: CircularProgressIndicator()); + } + + // Filter List based on Search Query + List filteredDrivers = ctrl.drivers.where((driver) { + if (ctrl.searchQuery.isEmpty) return true; + final phone = driver['phone']?.toString() ?? ''; + // Simple contains check for phone + return phone.contains(ctrl.searchQuery); + }).toList(); + + // Sort by Active Time (Hours) Descending + // We use the filtered list for sorting and display + filteredDrivers.sort((a, b) { + double hoursA = _calculateHoursFromStr(a['active_time']); + double hoursB = _calculateHoursFromStr(b['active_time']); + return hoursB.compareTo(hoursA); + }); + + // --- 1. Calculate Stats (Based on ALL drivers, not just filtered, to keep dashboard stable) --- + int totalDrivers = ctrl.drivers.length; + int eliteCount = 0; + int inactiveCount = 0; + double maxTime = 0.0; + + for (var driver in ctrl.drivers) { + double hours = _calculateHoursFromStr(driver['active_time']); + if (hours > maxTime) maxTime = hours; + if (hours >= 50) { + eliteCount++; + } else if (hours < 5) { + inactiveCount++; + } + } + + return Column( + children: [ + // --- 2. Header (Slate-900 style) --- + Container( + padding: const EdgeInsets.all(16), + decoration: const BoxDecoration( + color: Color(0xFF0F172A), // slate-900 + boxShadow: [BoxShadow(color: Colors.black26, blurRadius: 4)], + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, + Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - MyElevatedButton( - title: 'Giza', - onPressed: () { - Get.to(() => DriverTheBestGiza()); - }), - MyElevatedButton( - title: 'Alexandria', - onPressed: () { - Get.to(() => DriverTheBestAlexandria()); - }), - ], - ), - SizedBox( - height: Get.height * .7, - child: ListView.builder( - itemCount: driverthebest.driver.length, - itemBuilder: (context, index) { - final driver = driverthebest.driver[index]; - return ListTile( - leading: CircleAvatar( - child: Text( - (int.parse(driver['driver_count']) * 5 / 3600) - .toStringAsFixed( - 0), // Perform division first, then convert to string + Row( + children: [ + const Icon(Icons.local_taxi, + color: Colors.yellow, size: 24), + const SizedBox(width: 8), + Text( + 'Best Drivers Dashboard'.tr, + style: const TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold, ), ), - title: - Text((driver['name_arabic']) ?? 'Unknown Name'), - subtitle: - Text('Phone: ${(driver['phone']) ?? 'N/A'}'), - trailing: IconButton( - onPressed: () async { - Get.defaultDialog( - title: - 'are you sure to pay to this driver gift' - .tr, - middleText: '', - onConfirm: () async { - final wallet = - Get.put(WalletController()); - await wallet.addPaymentToDriver( - '200', - driver['id'].toString(), - driver['token']); - await wallet.addSeferWallet( - '200', driver['id'].toString()); - await CRUD().post( - link: AppLink.deleteRecord, - payload: { - 'driver_id': driver['id'].toString() - }); - driverthebest.driver.removeAt(index); - driverthebest.update(); - Get.back(); - }, - onCancel: () => Get.back()); - }, - icon: const Icon(Icons.wallet_giftcard_rounded), + ], + ), + const SizedBox(height: 4), + Row( + children: [ + const Icon(Icons.access_time, + color: Colors.grey, size: 12), + const SizedBox(width: 4), + Text( + ctrl.lastUpdated.isNotEmpty + ? 'Updated: ${ctrl.lastUpdated}' + : 'Data Live', + style: TextStyle( + color: Colors.grey[400], fontSize: 12), ), - ); - }, + ], + ), + ], + ), + // Action Buttons (Delete Box & Refresh) + Row( + children: [ + // Delete Box Icon + IconButton( + onPressed: () { + Get.defaultDialog( + title: "Reset Paid Status", + middleText: + "Are you sure you want to clear the list of paid drivers? This cannot be undone.", + textConfirm: "Yes, Clear", + textCancel: "Cancel", + confirmTextColor: Colors.white, + buttonColor: Colors.red, + onConfirm: () { + ctrl.clearPaidStorage(); + Get.back(); + }, + ); + }, + icon: const Icon(Icons.delete_forever, + color: Colors.redAccent), + tooltip: "Clear Paid Storage", + style: IconButton.styleFrom( + backgroundColor: Colors.white10), + ), + const SizedBox(width: 8), + IconButton( + onPressed: () { + ctrl.fetchData(); + }, + icon: const Icon(Icons.refresh, + color: Colors.blueAccent), + style: IconButton.styleFrom( + backgroundColor: Colors.white10), + ), + ], + ) + ], + ), + ), + + Expanded( + child: SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // --- 3. Statistics Cards Grid --- + SizedBox( + height: 100, // Fixed height for cards + child: Row( + children: [ + Expanded( + child: _buildStatCard('Total', + totalDrivers.toString(), Colors.blue)), + const SizedBox(width: 8), + Expanded( + child: _buildStatCard('Elite', + eliteCount.toString(), Colors.amber)), + ], + ), ), + const SizedBox(height: 8), + SizedBox( + height: 100, + child: Row( + children: [ + Expanded( + child: _buildStatCard('Inactive', + inactiveCount.toString(), Colors.red)), + const SizedBox(width: 8), + Expanded( + child: _buildStatCard( + 'Max Time', + '${maxTime.toStringAsFixed(1)}h', + Colors.green)), + ], + ), + ), + + const SizedBox(height: 24), + + // --- 4. Search Bar --- + TextField( + onChanged: (val) => ctrl.updateSearchQuery(val), + decoration: InputDecoration( + hintText: 'Search by phone number...', + prefixIcon: + const Icon(Icons.search, color: Colors.grey), + filled: true, + fillColor: Colors.white, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide.none, + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + ), + ), + + const SizedBox(height: 16), + + // --- 5. Driver List --- + if (filteredDrivers.isEmpty) + Center( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Text( + ctrl.searchQuery.isNotEmpty + ? "No drivers found with this number" + : "No drivers available", + style: TextStyle(color: Colors.grey[400])), + )) + else + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: filteredDrivers.length, + separatorBuilder: (c, i) => + const SizedBox(height: 12), + itemBuilder: (context, index) { + final driver = filteredDrivers[index]; + return _buildDriverCard( + context, driver, index, ctrl); + }, + ), + ], + ), + ), + ), + ], + ); + }), + ), + ); + } + + // --- Helper Methods --- + + // Updated to parse the Arabic string format "5 ساعة 30 دقيقة" + double _calculateHoursFromStr(dynamic activeTimeStr) { + if (activeTimeStr == null || activeTimeStr is! String) return 0.0; + + try { + int hours = 0; + int mins = 0; + + // Extract hours + final hoursMatch = RegExp(r'(\d+)\s*ساعة').firstMatch(activeTimeStr); + if (hoursMatch != null) { + hours = int.parse(hoursMatch.group(1) ?? '0'); + } + + // Extract minutes + final minsMatch = RegExp(r'(\d+)\s*دقيقة').firstMatch(activeTimeStr); + if (minsMatch != null) { + mins = int.parse(minsMatch.group(1) ?? '0'); + } + + return hours + (mins / 60.0); + } catch (e) { + return 0.0; + } + } + + Widget _buildStatCard(String title, String value, Color color) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + border: Border(right: BorderSide(color: color, width: 4)), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + blurRadius: 4, + offset: const Offset(0, 2)) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(title, + style: const TextStyle( + fontSize: 12, + color: Colors.grey, + fontWeight: FontWeight.bold)), + const SizedBox(height: 4), + Text(value, + style: TextStyle( + fontSize: 22, + color: color.withOpacity(0.8), + fontWeight: FontWeight.bold)), + ], + ), + ); + } + + Widget _buildDriverCard(BuildContext context, Map driver, int index, + DriverCacheController controller) { + double hours = _calculateHoursFromStr(driver['active_time']); + String driverId = driver['id']?.toString() ?? 'null'; + bool isPaid = controller.isDriverPaid(driverId); + + // Determine Status Category (mimicking HTML logic) + String statusText; + Color statusColor; + if (hours >= 50) { + statusText = "Elite"; + statusColor = Colors.amber; + } else if (hours >= 20) { + statusText = "Stable"; + statusColor = Colors.green; + } else if (hours >= 5) { + statusText = "Experimental"; + statusColor = Colors.blue; + } else { + statusText = "Inactive"; + statusColor = Colors.red; + } + + // Override colors if paid + Color cardBackground = isPaid ? Colors.teal.shade50 : Colors.white; + Color borderColor = isPaid ? Colors.teal : Colors.transparent; + + // Calculate progress (max assumed 60 hours for 100% bar) + double progress = (hours / 60).clamp(0.0, 1.0); + + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: cardBackground, + border: isPaid ? Border.all(color: borderColor, width: 2) : null, + borderRadius: BorderRadius.circular(12), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.05), + blurRadius: 10, + offset: const Offset(0, 4)) + ], + ), + child: Column( + children: [ + if (isPaid) + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + padding: + const EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + color: Colors.teal, + borderRadius: BorderRadius.circular(4)), + child: const Text("PAID", + style: TextStyle( + color: Colors.white, + fontSize: 10, + fontWeight: FontWeight.bold)), + ) + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Avatar + CircleAvatar( + backgroundColor: statusColor.withOpacity(0.1), + radius: 24, + child: Text( + hours.toStringAsFixed(0), + style: TextStyle( + color: statusColor, fontWeight: FontWeight.bold), + ), + ), + const SizedBox(width: 12), + + // Name and Phone + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + driver['name_arabic'] ?? 'Unknown Name', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: isPaid + ? Colors.teal.shade900 + : const Color(0xFF334155)), + ), + const SizedBox(height: 4), + Text( + driver['phone'] ?? 'N/A', + style: const TextStyle( + fontFamily: 'monospace', + fontSize: 12, + color: Colors.grey), + ), + const SizedBox(height: 2), + Text( + driver['active_time'] ?? '', + style: TextStyle(fontSize: 10, color: Colors.grey[400]), ), ], - ) - : const Center( - child: Text('No drivers available.'), - ); - }) - ], - isleading: true, + ), + ), + + // Status Badge + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: statusColor.withOpacity(0.1), + borderRadius: BorderRadius.circular(4), + border: Border.all(color: statusColor.withOpacity(0.2)), + ), + child: Text( + statusText, + style: TextStyle( + fontSize: 10, + color: statusColor, + fontWeight: FontWeight.bold), + ), + ), + ], + ), + + const SizedBox(height: 12), + + // Progress Bar + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("Performance", + style: TextStyle(fontSize: 10, color: Colors.grey[600])), + Text("${hours.toStringAsFixed(2)} hrs", + style: const TextStyle( + fontSize: 10, fontWeight: FontWeight.bold)), + ], + ), + const SizedBox(height: 4), + LinearProgressIndicator( + value: progress, + backgroundColor: Colors.grey[100], + color: statusColor, + minHeight: 6, + borderRadius: BorderRadius.circular(3), + ), + ], + ), + + const SizedBox(height: 16), + const Divider(height: 1), + const SizedBox(height: 8), + + // Actions Row + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + // Pay Gift Button (The specific request) + isPaid + ? const Text("Payment Completed", + style: TextStyle( + color: Colors.teal, fontWeight: FontWeight.bold)) + : ElevatedButton.icon( + onPressed: () { + _showPayDialog(driver, controller); + }, + icon: const Icon(Icons.card_giftcard, size: 16), + label: Text("Pay Gift".tr), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.indigo, // Dark blue/purple + foregroundColor: Colors.white, + padding: const EdgeInsets.symmetric( + horizontal: 16, vertical: 8), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8)), + ), + ), + ], + ) + ], + ), + ); + } + + void _showPayDialog(Map driver, DriverCacheController controller) { + // Check for valid ID immediately + String driverId = driver['driver_id']?.toString() ?? ''; + String phone = driver['phone']?.toString() ?? ''; + if (driverId.isEmpty || driverId == 'null') { + Get.snackbar("Error", "Cannot pay driver with missing ID", + backgroundColor: Colors.red, colorText: Colors.white); + return; + } + + // Controller for the Amount Field + final TextEditingController amountController = + TextEditingController(text: '50000'); + + Get.defaultDialog( + title: 'Confirm Payment', + titleStyle: const TextStyle( + color: Color(0xFF0F172A), fontWeight: FontWeight.bold), + content: Column( + children: [ + const Icon(Icons.wallet_giftcard, size: 50, color: Colors.indigo), + const SizedBox(height: 10), + Text( + 'Sending gift to ${driver['name_arabic']}', + textAlign: TextAlign.center, + ), + const SizedBox(height: 15), + // Amount Field + TextFormField( + controller: amountController, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + labelText: 'Amount (SYP)', + border: OutlineInputBorder(), + prefixIcon: Icon(Icons.attach_money), + ), + ), + ], + ), + textConfirm: 'Pay Now', + confirmTextColor: Colors.white, + buttonColor: Colors.indigo, + onConfirm: () async { + final wallet = Get.put(WalletController()); + + // Get amount from field + String amount = amountController.text.trim(); + if (amount.isEmpty) amount = '0'; + + // String driverToken = driver['token'] ?? ''; + + // 1. Add Payment + await wallet.addDriverWallet('gift_connect', driverId, amount, phone); + + // 2. Add to Sefer Wallet + //await wallet.addSeferWallet(amount, driverId); + + // 3. Delete Record via CRUD + // await CRUD() + // .post(link: AppLink.deleteRecord, payload: {'driver_id': driverId}); + + // 4. UI Update & Storage + // Mark as paid instead of removing completely, so we can see the color change + controller.markAsPaid(driverId); + + Get.back(); // Close Dialog + + Get.snackbar("Success", "Payment of $amount EGP sent to driver", + backgroundColor: Colors.green, + colorText: Colors.white, + snackPosition: SnackPosition.BOTTOM); + }, + textCancel: 'Cancel', + onCancel: () => Get.back(), ); } } diff --git a/lib/views/admin/drivers/driver_tracker_screen.dart b/lib/views/admin/drivers/driver_tracker_screen.dart new file mode 100644 index 0000000..effd69c --- /dev/null +++ b/lib/views/admin/drivers/driver_tracker_screen.dart @@ -0,0 +1,448 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:math' as math; +import 'package:flutter/material.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:latlong2/latlong.dart'; +import 'package:http/http.dart' as http; +import 'package:url_launcher/url_launcher.dart'; // ضروري من أجل الاتصال + +import '../../../constant/box_name.dart'; +import '../../../main.dart'; + +class IntaleqTrackerScreen extends StatefulWidget { + const IntaleqTrackerScreen({super.key}); + + @override + State createState() => _IntaleqTrackerScreenState(); +} + +class _IntaleqTrackerScreenState extends State { + // === Map Controller === + final MapController _mapController = MapController(); + List _markers = []; + + // === State Variables === + bool isLiveMode = true; + bool isLoading = false; + String lastUpdated = "جاري التحميل..."; + + // === Counters === + int liveCount = 0; + int dayCount = 0; + Timer? _timer; + + // === Admin Info === + String myPhone = box.read(BoxName.adminPhone).toString(); + bool get isSuperAdmin => + myPhone == '963942542053' || myPhone == '963992952235'; + + // === URLs === + final String _baseDir = "https://api.intaleq.xyz/intaleq/ride/location/"; + + @override + void initState() { + super.initState(); + fetchData(); + + // === تعديل 1: التحديث كل 5 دقائق بدلاً من 15 ثانية === + _timer = Timer.periodic(const Duration(minutes: 5), (timer) { + if (mounted) fetchData(); + }); + } + + @override + void dispose() { + _timer?.cancel(); + _mapController.dispose(); + super.dispose(); + } + + // === دالة إجراء الاتصال === + Future _makePhoneCall(String phoneNumber) async { + final Uri launchUri = Uri(scheme: 'tel', path: phoneNumber); + if (await canLaunchUrl(launchUri)) { + await launchUrl(launchUri); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("لا يمكن إجراء الاتصال لهذا الرقم")), + ); + } + } + + // === Fetch Data Function === + Future fetchData() async { + if (!mounted) return; + setState(() => isLoading = true); + + try { + // 1. طلب التحديث من PHP + String updateUrl = + "${_baseDir}getUpdatedLocationForAdmin.php?mode=${isLiveMode ? 'live' : 'day'}"; + await http.get(Uri.parse(updateUrl)); + + String v = DateTime.now().millisecondsSinceEpoch.toString(); + + // === Live Data === + final responseLive = + await http.get(Uri.parse("${_baseDir}locations_live.json?v=$v")); + if (responseLive.statusCode == 200) { + final data = json.decode(responseLive.body); + List drivers = (data is Map && data.containsKey('drivers')) + ? data['drivers'] + : data; + + setState(() { + liveCount = drivers.length; + if (isLiveMode) _buildMarkers(drivers); + }); + } + + // === Day Data === + final responseDay = + await http.get(Uri.parse("${_baseDir}locations_day.json?v=$v")); + if (responseDay.statusCode == 200) { + final data = json.decode(responseDay.body); + List drivers = (data is Map && data.containsKey('drivers')) + ? data['drivers'] + : data; + + setState(() { + dayCount = drivers.length; + if (!isLiveMode) _buildMarkers(drivers); + }); + } + + setState(() { + lastUpdated = DateTime.now().toString().substring(11, 19); + }); + } catch (e) { + print("Exception: $e"); + setState(() => lastUpdated = "خطأ في الاتصال"); + } finally { + if (mounted) setState(() => isLoading = false); + } + } + + // === Build Markers === + void _buildMarkers(List drivers) { + List newMarkers = []; + + for (var d in drivers) { + double lat = double.tryParse((d['lat'] ?? "0").toString()) ?? 0.0; + double lon = double.tryParse((d['lon'] ?? "0").toString()) ?? 0.0; + double heading = double.tryParse((d['heading'] ?? "0").toString()) ?? 0.0; + + String id = (d['id'] ?? "Unknown").toString(); + String speed = (d['speed'] ?? "0").toString(); + String name = (d['name'] ?? "كابتن").toString(); + String phone = (d['phone'] ?? "").toString(); + String completed = (d['completed'] ?? "0").toString(); + String cancelled = (d['cancelled'] ?? "0").toString(); + + if (lat != 0 && lon != 0) { + newMarkers.add( + Marker( + point: LatLng(lat, lon), + width: 50, + height: 50, + child: GestureDetector( + onTap: () { + _showDriverInfoDialog( + driverId: id, + name: name, + phone: phone, + speed: speed, + heading: heading, + completed: completed, + cancelled: cancelled, + ); + }, + child: Stack( + alignment: Alignment.center, + children: [ + Container( + width: 32, + height: 32, + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + shape: BoxShape.circle, + boxShadow: const [ + BoxShadow(blurRadius: 3, color: Colors.black26) + ]), + ), + Transform.rotate( + angle: heading * (math.pi / 180), + child: Icon( + Icons.navigation, + color: isLiveMode + ? const Color(0xFF27AE60) + : const Color(0xFF2980B9), + size: 28, + ), + ), + ], + ), + ), + ), + ); + } + } + setState(() { + _markers = newMarkers; + }); + } + + // === Dialog Function === + void _showDriverInfoDialog({ + required String driverId, + required String name, + required String phone, + required String speed, + required double heading, + required String completed, + required String cancelled, + }) { + showDialog( + context: context, + builder: (_) => Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), + backgroundColor: Colors.white, + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Text("بيانات الكابتن", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Color(0xFF2C3E50))), + const Divider(thickness: 1, height: 25), + _infoRow(Icons.person, "الاسم", name), + _infoRow(Icons.badge, "المعرف (ID)", driverId), + _infoRow(Icons.speed, "السرعة", "$speed كم/س"), + const SizedBox(height: 10), + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade200)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _statItem("مكتملة", completed, Colors.green), + Container( + width: 1, height: 30, color: Colors.grey.shade300), + _statItem("ملغاة", cancelled, Colors.red), + ], + ), + ), + + // === تعديل 2: جعل رقم الهاتف قابلاً للنقر === + if (isSuperAdmin) ...[ + const SizedBox(height: 15), + InkWell( + onTap: () { + if (phone.isNotEmpty) _makePhoneCall(phone); + }, + borderRadius: BorderRadius.circular(8), + child: Container( + padding: + const EdgeInsets.symmetric(vertical: 8, horizontal: 10), + decoration: BoxDecoration( + color: const Color(0xFFFFF3CD), + borderRadius: BorderRadius.circular(8), + border: Border.all(color: const Color(0xFFFFEEBA))), + child: Row( + children: [ + Expanded( + child: _infoRow(Icons.phone, "الهاتف", phone, + isPrivate: true)), + const SizedBox(width: 5), + const Icon(Icons.call, color: Colors.green, size: 20), + ], + ), + ), + ), + ], + + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + child: ElevatedButton( + onPressed: () => Navigator.pop(context), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF2C3E50), + foregroundColor: Colors.white, + ), + child: const Text("إغلاق"), + ), + ) + ], + ), + ), + ), + ); + } + + // Helper Widgets + Widget _infoRow(IconData icon, String label, String value, + {bool isPrivate = false}) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 4), + child: Row( + children: [ + Icon(icon, + size: 20, + color: isPrivate ? Colors.orange[800] : Colors.grey[600]), + const SizedBox(width: 8), + Text("$label: ", + style: + const TextStyle(fontWeight: FontWeight.bold, fontSize: 13)), + Expanded( + child: Text(value, + style: TextStyle( + fontSize: 14, + fontWeight: + isPrivate ? FontWeight.bold : FontWeight.normal), + textAlign: TextAlign.end)), + ], + ), + ); + } + + Widget _statItem(String label, String val, Color color) { + return Column( + children: [ + Text(val, + style: TextStyle( + color: color, fontWeight: FontWeight.bold, fontSize: 16)), + Text(label, style: const TextStyle(fontSize: 11, color: Colors.grey)), + ], + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text("نظام تتبع الكباتن"), + backgroundColor: const Color(0xFF2C3E50), + foregroundColor: Colors.white), + body: Stack( + children: [ + FlutterMap( + mapController: _mapController, + options: const MapOptions( + initialCenter: LatLng(33.513, 36.276), initialZoom: 10.0), + children: [ + TileLayer( + urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', + userAgentPackageName: 'com.tripz.app'), + MarkerLayer(markers: _markers), + ], + ), + + // === Dashboard === + Positioned( + top: 20, + right: 15, + child: Container( + width: 260, + padding: const EdgeInsets.all(15), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.95), + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow(color: Colors.black12, blurRadius: 10) + ]), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + const Text("لوحة التحكم", + style: TextStyle(fontWeight: FontWeight.bold)), + const Divider(), + + // أزرار التبديل + Row( + children: [ + Expanded( + child: _modeBtn("أرشيف اليوم", !isLiveMode, () { + setState(() => isLiveMode = false); + fetchData(); + })), + const SizedBox(width: 8), + Expanded( + child: _modeBtn("مباشر", isLiveMode, () { + setState(() => isLiveMode = true); + fetchData(); + })), + ], + ), + const SizedBox(height: 15), + + // === عرض العدادين معاً === + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("$liveCount", + style: const TextStyle( + color: Color(0xFF27AE60), + fontWeight: FontWeight.bold, + fontSize: 14)), + const Text("نشط الآن (مباشر):", + style: TextStyle(fontSize: 12)), + ], + ), + const SizedBox(height: 5), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("$dayCount", + style: const TextStyle( + color: Color(0xFF2980B9), + fontWeight: FontWeight.bold, + fontSize: 14)), + const Text("إجمالي اليوم:", + style: TextStyle(fontSize: 12)), + ], + ), + + const SizedBox(height: 10), + Text(isLoading ? "جاري التحديث..." : "تحديث: $lastUpdated", + style: const TextStyle(fontSize: 10, color: Colors.grey)), + const SizedBox(height: 8), + SizedBox( + width: double.infinity, + child: ElevatedButton( + onPressed: isLoading ? null : fetchData, + child: const Text("تحديث البيانات"))) + ], + ), + ), + ), + ], + ), + ); + } + + Widget _modeBtn(String title, bool active, VoidCallback onTap) { + return InkWell( + onTap: onTap, + child: Container( + alignment: Alignment.center, + padding: const EdgeInsets.symmetric(vertical: 8), + decoration: BoxDecoration( + color: active ? const Color(0xFF3498DB) : Colors.white, + borderRadius: BorderRadius.circular(6), + border: Border.all(color: const Color(0xFF3498DB))), + child: Text(title, + style: TextStyle( + color: active ? Colors.white : const Color(0xFF3498DB), + fontWeight: active ? FontWeight.bold : FontWeight.normal)), + ), + ); + } +} diff --git a/lib/views/admin/drivers/monitor_ride.dart b/lib/views/admin/drivers/monitor_ride.dart new file mode 100644 index 0000000..72d764c --- /dev/null +++ b/lib/views/admin/drivers/monitor_ride.dart @@ -0,0 +1,557 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:latlong2/latlong.dart'; +// Keep your specific imports +import 'package:sefer_admin1/controller/functions/crud.dart'; +import 'package:sefer_admin1/print.dart'; + +/// -------------------------------------------------------------------------- +/// 1. DATA MODELS +/// -------------------------------------------------------------------------- + +class DriverLocation { + final double latitude; + final double longitude; + final double speed; + final double heading; + final String updatedAt; + + DriverLocation({ + required this.latitude, + required this.longitude, + required this.speed, + required this.heading, + required this.updatedAt, + }); + + factory DriverLocation.fromJson(Map json) { + return DriverLocation( + latitude: double.tryParse(json['latitude'].toString()) ?? 0.0, + longitude: double.tryParse(json['longitude'].toString()) ?? 0.0, + speed: double.tryParse(json['speed'].toString()) ?? 0.0, + heading: double.tryParse(json['heading'].toString()) ?? 0.0, + updatedAt: json['updated_at'] ?? '', + ); + } +} + +/// -------------------------------------------------------------------------- +/// 2. GETX CONTROLLER +/// -------------------------------------------------------------------------- + +class RideMonitorController extends GetxController { + // CONFIGURATION + final String apiUrl = + "https://api.intaleq.xyz/intaleq/Admin/rides/monitorRide.php"; + + // INPUT CONTROLLERS + final TextEditingController phoneInputController = TextEditingController(); + + // OBSERVABLES + var isTracking = false.obs; + var isLoading = false.obs; + var hasError = false.obs; + var errorMessage = ''.obs; + + // Driver & Ride Data + var driverLocation = Rxn(); + var driverName = "Unknown Driver".obs; + var rideStatus = "Waiting...".obs; + + // Route Data + var startPoint = Rxn(); + var endPoint = Rxn(); + var routePolyline = [].obs; // List of points for the line + + // Map Variables + final MapController mapController = MapController(); + Timer? _timer; + bool _isFirstLoad = true; // To trigger auto-fit bounds only on first success + + @override + void onClose() { + _timer?.cancel(); + phoneInputController.dispose(); + super.onClose(); + } + + // --- ACTIONS --- + + void startSearch() { + if (phoneInputController.text.trim().isEmpty) { + Get.snackbar("Error", "Please enter a phone number"); + return; + } + + // Reset state + hasError.value = false; + errorMessage.value = ''; + driverLocation.value = null; + startPoint.value = null; + endPoint.value = null; + routePolyline.clear(); + driverName.value = "Loading..."; + rideStatus.value = "Loading..."; + _isFirstLoad = true; + + // Switch UI + isTracking.value = true; + isLoading.value = true; + + // Start fetching + fetchRideData(); + + // Start Polling + _timer?.cancel(); + _timer = Timer.periodic(const Duration(seconds: 10), (timer) { + fetchRideData(); + }); + } + + void stopTracking() { + _timer?.cancel(); + isTracking.value = false; + isLoading.value = false; + phoneInputController.clear(); + } + + Future fetchRideData() async { + final phone = phoneInputController.text.trim(); + if (phone.isEmpty) return; + + try { + final response = await CRUD().post( + link: apiUrl, + payload: {"phone": phone}, + ); + + // Log.print('response: ${response}'); + + if (response != 'failure') { + final jsonResponse = response; + + if ((jsonResponse['message'] != null && + jsonResponse['message'] != 'failure') || + jsonResponse['status'] == 'success') { + final data = + jsonResponse['message'] ?? jsonResponse['data'] ?? jsonResponse; + + // 1. Parse Driver Info + if (data['driver_details'] != null) { + driverName.value = data['driver_details']['fullname'] ?? "Unknown"; + } + + // 2. Parse Ride Info & Route + if (data['ride_details'] != null) { + rideStatus.value = data['ride_details']['status'] ?? "Unknown"; + + // Parse Start/End Locations (Format: "lat,lng") + String? startStr = data['ride_details']['start_location']; + String? endStr = data['ride_details']['end_location']; + + LatLng? s = _parseLatLngString(startStr); + LatLng? e = _parseLatLngString(endStr); + + if (s != null && e != null) { + startPoint.value = s; + endPoint.value = e; + routePolyline.value = [s, e]; // Straight line for now + } + } + + // 3. Parse Live Location + final locData = data['driver_location']; + if (locData is Map) { + final newLocation = DriverLocation.fromJson(locData); + driverLocation.value = newLocation; + + // 4. Update Camera Bounds + _updateMapBounds(); + } else { + // Even if no live driver, we might want to show the route + if (startPoint.value != null && endPoint.value != null) { + _updateMapBounds(); + } + print("No live location coordinates."); + } + + hasError.value = false; + } else { + hasError.value = true; + errorMessage.value = jsonResponse['message'] ?? + "Phone number not found or no active ride."; + } + } else { + hasError.value = true; + errorMessage.value = "Connection Failed"; + } + } catch (e) { + print("Polling Error: $e"); + if (isLoading.value) { + hasError.value = true; + errorMessage.value = e.toString(); + } + } finally { + isLoading.value = false; + } + } + + // Helper to parse "lat,lng" string + LatLng? _parseLatLngString(String? str) { + if (str == null || !str.contains(',')) return null; + try { + final parts = str.split(','); + final lat = double.parse(parts[0].trim()); + final lng = double.parse(parts[1].trim()); + return LatLng(lat, lng); + } catch (e) { + print("Error parsing location string '$str': $e"); + return null; + } + } + + // Logic to fit start, end, and driver on screen + void _updateMapBounds() { + // Only auto-fit on the first successful load to avoid fighting user pan/zoom + if (!_isFirstLoad) return; + + List pointsToFit = []; + + if (startPoint.value != null) pointsToFit.add(startPoint.value!); + if (endPoint.value != null) pointsToFit.add(endPoint.value!); + if (driverLocation.value != null) { + pointsToFit.add(LatLng( + driverLocation.value!.latitude, driverLocation.value!.longitude)); + } + + if (pointsToFit.isNotEmpty) { + try { + final bounds = LatLngBounds.fromPoints(pointsToFit); + mapController.fitCamera( + CameraFit.bounds( + bounds: bounds, + padding: + const EdgeInsets.all(80.0), // Padding so markers aren't on edge + ), + ); + _isFirstLoad = false; // Disable auto-fit after initial success + } catch (e) { + print("Map Controller not ready yet: $e"); + } + } + } +} + +/// -------------------------------------------------------------------------- +/// 3. UI SCREEN +/// -------------------------------------------------------------------------- + +class RideMonitorScreen extends StatelessWidget { + const RideMonitorScreen({super.key}); + + @override + Widget build(BuildContext context) { + final RideMonitorController controller = Get.put(RideMonitorController()); + + return Scaffold( + appBar: AppBar( + title: const Text("Admin Ride Monitor"), + backgroundColor: Colors.blueAccent, + foregroundColor: Colors.white, + actions: [ + Obx(() => controller.isTracking.value + ? IconButton( + icon: const Icon(Icons.close), + onPressed: controller.stopTracking, + tooltip: "Stop Tracking", + ) + : const SizedBox.shrink()), + ], + ), + body: Obx(() { + if (!controller.isTracking.value) { + return _buildSearchForm(context, controller); + } + return _buildMapTrackingView(controller); + }), + ); + } + + Widget _buildSearchForm( + BuildContext context, RideMonitorController controller) { + return Center( + child: Padding( + padding: const EdgeInsets.all(24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.map_outlined, size: 80, color: Colors.blueAccent), + const SizedBox(height: 20), + const Text( + "Track Active Ride", + style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 10), + const Text( + "Enter Driver or Passenger Phone Number", + style: TextStyle(color: Colors.grey), + ), + const SizedBox(height: 30), + TextField( + controller: controller.phoneInputController, + keyboardType: TextInputType.phone, + decoration: InputDecoration( + labelText: "Phone Number", + hintText: "e.g. 9639...", + border: + OutlineInputBorder(borderRadius: BorderRadius.circular(10)), + prefixIcon: const Icon(Icons.phone), + ), + ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton( + onPressed: controller.startSearch, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.blueAccent, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + ), + child: const Text("Start Monitoring", + style: TextStyle(color: Colors.white, fontSize: 16)), + ), + ), + ], + ), + ), + ); + } + + Widget _buildMapTrackingView(RideMonitorController controller) { + return Stack( + children: [ + FlutterMap( + mapController: controller.mapController, + options: MapOptions( + initialCenter: const LatLng(30.0444, 31.2357), + initialZoom: 12.0, + ), + children: [ + TileLayer( + urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', + userAgentPackageName: 'com.sefer.admin', + ), + + // 1. ROUTE LINE (Polyline) + if (controller.routePolyline.isNotEmpty) + PolylineLayer( + polylines: [ + Polyline( + points: controller.routePolyline.value, + strokeWidth: 5.0, + color: Colors.blueAccent.withOpacity(0.8), + borderStrokeWidth: 2.0, + borderColor: Colors.blue[900]!, + ), + ], + ), + + // 2. START & END MARKERS + MarkerLayer( + markers: [ + // Start Point (Green Flag) + if (controller.startPoint.value != null) + Marker( + point: controller.startPoint.value!, + width: 40, + height: 40, + child: + const Icon(Icons.flag, color: Colors.green, size: 40), + alignment: Alignment.topCenter, + ), + + // End Point (Red Flag) + if (controller.endPoint.value != null) + Marker( + point: controller.endPoint.value!, + width: 40, + height: 40, + child: const Icon(Icons.flag, color: Colors.red, size: 40), + alignment: Alignment.topCenter, + ), + + // Driver Car Marker + if (controller.driverLocation.value != null) + Marker( + point: LatLng( + controller.driverLocation.value!.latitude, + controller.driverLocation.value!.longitude, + ), + width: 60, + height: 60, + child: Transform.rotate( + angle: (controller.driverLocation.value!.heading * + (3.14159 / 180)), + child: Column( + children: [ + const Icon( + Icons.directions_car_filled, + color: Colors + .black, // Dark car for visibility on blue line + size: 35, + ), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 4, vertical: 1), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.8), + borderRadius: BorderRadius.circular(4), + ), + child: Text( + "${controller.driverLocation.value!.speed.toInt()} km", + style: const TextStyle( + fontSize: 10, fontWeight: FontWeight.bold), + ), + ) + ], + ), + ), + ), + ], + ), + ], + ), + + // LOADING OVERLAY + if (controller.isLoading.value && + controller.driverLocation.value == null && + controller.startPoint.value == null) + Container( + color: Colors.black45, + child: const Center( + child: CircularProgressIndicator(color: Colors.white)), + ), + + // ERROR OVERLAY + if (controller.hasError.value) + Center( + child: Container( + margin: const EdgeInsets.all(20), + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: const [ + BoxShadow(blurRadius: 10, color: Colors.black26) + ]), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.error_outline, color: Colors.red, size: 40), + const SizedBox(height: 10), + Text(controller.errorMessage.value, + textAlign: TextAlign.center), + const SizedBox(height: 10), + ElevatedButton( + onPressed: controller.stopTracking, + child: const Text("Back")) + ], + ), + ), + ), + + // INFO CARD + if (!controller.hasError.value && !controller.isLoading.value) + Positioned( + bottom: 20, + left: 20, + right: 20, + child: Card( + elevation: 8, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15)), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + const CircleAvatar( + backgroundColor: Colors.blueAccent, + child: Icon(Icons.person, color: Colors.white), + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + controller.driverName.value, + style: const TextStyle( + fontSize: 18, fontWeight: FontWeight.bold), + overflow: TextOverflow.ellipsis, + ), + Row( + children: [ + Icon(Icons.circle, + size: 10, + color: + controller.rideStatus.value == 'Begin' + ? Colors.green + : Colors.grey), + const SizedBox(width: 5), + Text(controller.rideStatus.value, + style: const TextStyle( + fontWeight: FontWeight.w600)), + ], + ), + ], + ), + ), + ], + ), + const Divider(), + if (controller.driverLocation.value != null) + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _buildInfoBadge(Icons.speed, + "${controller.driverLocation.value!.speed.toStringAsFixed(1)} km/h"), + _buildInfoBadge( + Icons.access_time, + controller.driverLocation.value!.updatedAt + .split(' ') + .last), + ], + ) + else + const Text("Connecting to driver...", + style: TextStyle( + color: Colors.orange, + fontStyle: FontStyle.italic)), + ], + ), + ), + ), + ), + ], + ); + } + + Widget _buildInfoBadge(IconData icon, String text) { + return Row( + children: [ + Icon(icon, size: 16, color: Colors.grey[600]), + const SizedBox(width: 4), + Text(text, + style: TextStyle( + color: Colors.grey[800], fontWeight: FontWeight.bold)), + ], + ); + } +} diff --git a/lib/views/admin/error/error/error_page.dart b/lib/views/admin/error/error/error_page.dart new file mode 100644 index 0000000..83f9359 --- /dev/null +++ b/lib/views/admin/error/error/error_page.dart @@ -0,0 +1,352 @@ +import 'package:flutter/material.dart'; +import 'package:sefer_admin1/constant/colors.dart'; +import 'package:sefer_admin1/constant/links.dart'; +import 'package:sefer_admin1/controller/functions/crud.dart'; + +class ErrorLog { + final String id; + final String error; + final String userId; + final String userType; + final String phone; + final String createdAt; + final String device; + final String details; + final String status; + + ErrorLog({ + required this.id, + required this.error, + required this.userId, + required this.userType, + required this.phone, + required this.createdAt, + required this.device, + required this.details, + required this.status, + }); + + factory ErrorLog.fromJson(Map j) => ErrorLog( + id: (j['id'] ?? '').toString(), + error: (j['error'] ?? '').toString(), + userId: (j['userId'] ?? '').toString(), + userType: (j['userType'] ?? '').toString(), + phone: (j['phone'] ?? '').toString(), + createdAt: (j['created_at'] ?? '').toString(), + device: (j['device'] ?? '').toString(), + details: (j['details'] ?? '').toString(), + status: (j['status'] ?? '').toString(), + ); +} + +class ErrorListPage extends StatefulWidget { + const ErrorListPage({Key? key}) : super(key: key); + + @override + State createState() => _ErrorListPageState(); +} + +class _ErrorListPageState extends State { + static String baseUrl = '${AppLink.server}/Admin/error'; + static const String listEndpoint = "error_list_last20.php"; + static const String searchEndpoint = "error_search_by_phone.php"; + + final TextEditingController _phoneCtrl = TextEditingController(); + bool _loading = false; + String? _errorMsg; + List _items = []; + bool _searchMode = false; + + @override + void initState() { + super.initState(); + _fetchLast20(); + } + + Future _fetchLast20() async { + setState(() { + _loading = true; + _errorMsg = null; + _searchMode = false; + }); + try { + final res = + await CRUD().post(link: "$baseUrl/$listEndpoint", payload: {}); + final map = (res); + if (map['status'] == 'success') { + final List data = (map['message'] ?? []) as List; + final items = data.map((e) => ErrorLog.fromJson(e)).toList(); + setState(() { + _items = items.cast(); + }); + } else { + setState(() => _errorMsg = map['message']?.toString() ?? 'Failed'); + } + } catch (e) { + setState(() => _errorMsg = e.toString()); + } finally { + if (mounted) setState(() => _loading = false); + } + } + + Future _searchByPhone() async { + final phone = _phoneCtrl.text.trim(); + if (phone.isEmpty) { + return _fetchLast20(); + } + setState(() { + _loading = true; + _errorMsg = null; + _searchMode = true; + }); + try { + final res = await CRUD() + .post(link: "$baseUrl/$searchEndpoint", payload: {"phone": phone}); + final map = (res); + if (map['status'] == 'success') { + final List data = (map['message'] ?? []) as List; + final items = data.map((e) => ErrorLog.fromJson(e)).toList(); + setState(() { + _items = items.cast(); + }); + } else { + setState(() => _errorMsg = map['message']?.toString() ?? 'Failed'); + } + } catch (e) { + setState(() => _errorMsg = e.toString()); + } finally { + if (mounted) setState(() => _loading = false); + } + } + + void _clearSearch() { + _phoneCtrl.clear(); + FocusScope.of(context).unfocus(); + _fetchLast20(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.grey[100], + appBar: AppBar( + title: const Text('سجل الأخطاء'), + backgroundColor: Colors.white, + foregroundColor: Colors.black, + elevation: 1.0, + centerTitle: true, + ), + body: Column( + children: [ + _SearchBar( + controller: _phoneCtrl, + onSearch: _searchByPhone, + onClear: _clearSearch, + ), + Expanded( + child: _buildBody(), + ), + ], + ), + ); + } + + Widget _buildBody() { + if (_loading) { + return const Center(child: CircularProgressIndicator()); + } + + if (_errorMsg != null) { + return Center( + child: Text( + _errorMsg!, + style: TextStyle(color: Colors.red[700]), + ), + ); + } + + if (_items.isEmpty) { + return const Center(child: Text('لا توجد سجلات')); + } + + return RefreshIndicator( + onRefresh: () async { + if (_searchMode) { + await _searchByPhone(); + } else { + await _fetchLast20(); + } + }, + child: ListView.builder( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + itemCount: _items.length, + itemBuilder: (context, index) { + final e = _items[index]; + return _ErrorTile(e); + }, + ), + ); + } +} + +class _SearchBar extends StatelessWidget { + final TextEditingController controller; + final VoidCallback onSearch; + final VoidCallback onClear; + + const _SearchBar({ + required this.controller, + required this.onSearch, + required this.onClear, + }); + + @override + Widget build(BuildContext context) { + return Card( + margin: const EdgeInsets.all(12), + elevation: 2, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), + child: Row( + children: [ + Expanded( + child: TextField( + controller: controller, + keyboardType: TextInputType.phone, + onSubmitted: (_) => onSearch(), + decoration: const InputDecoration( + hintText: 'بحث برقم الهاتف...', + prefixIcon: Icon(Icons.search), + border: InputBorder.none, + ), + ), + ), + const SizedBox(width: 8), + ElevatedButton( + onPressed: onSearch, + child: const Text('بحث'), + ), + const SizedBox(width: 8), + TextButton( + onPressed: onClear, + child: const Text('مسح'), + ), + ], + ), + ), + ); + } +} + +class _ErrorTile extends StatelessWidget { + final ErrorLog item; + const _ErrorTile(this.item); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + // تحديد الألوان بناءً على نوع المستخدم + Color? typeBgColor; + Color? typeTextColor; + + final type = item.userType.toLowerCase(); + if (type.contains('driver') || type.contains('سائق')) { + typeBgColor = Colors.green.shade100; + typeTextColor = Colors.green.shade800; + } else if (type.contains('passenger') || type.contains('راكب')) { + typeBgColor = Colors.amber.shade100; // لون ذهبي/أصفر + typeTextColor = Colors.amber.shade900; + } + + return Card( + margin: const EdgeInsets.only(bottom: 12), + elevation: 2, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // السطر الأول: نص الخطأ (قابل للنسخ) + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: SelectableText( + item.error.isEmpty ? '(بدون عنوان)' : item.error, + style: theme.textTheme.titleMedium + ?.copyWith(fontWeight: FontWeight.bold), + ), + ), + // تم إزالة _StatusPill (ويدجت الحالة New) من هنا + ], + ), + const SizedBox(height: 8), + // تفاصيل مختصرة (قابل للنسخ) + if (item.details.isNotEmpty) + SelectableText( + item.details, + style: theme.textTheme.bodyMedium + ?.copyWith(color: Colors.grey[700]), + ), + const SizedBox(height: 12), + // معلومات تقنية + Wrap( + spacing: 8, + runSpacing: 6, + children: [ + _KV('الهاتف', item.phone), + _KV('المستخدم', item.userId), + // تمرير الألوان المخصصة لنوع المستخدم + _KV( + 'النوع', + item.userType, + bgColor: typeBgColor, + textColor: typeTextColor, + ), + _KV('الجهاز', item.device), + _KV('التاريخ', item.createdAt), + _KV('ID', item.id), + ], + ), + ], + ), + ), + ); + } +} + +class _KV extends StatelessWidget { + final String k; + final String v; + final Color? bgColor; + final Color? textColor; + + const _KV(this.k, this.v, {this.bgColor, this.textColor}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: bgColor ?? Colors.grey[200], + borderRadius: BorderRadius.circular(8), + ), + child: Text.rich(TextSpan( + style: TextStyle(fontSize: 11, color: textColor ?? Colors.grey[600]), + children: [ + TextSpan(text: "$k: "), + TextSpan( + text: v.isEmpty ? '—' : v, + style: TextStyle( + fontWeight: FontWeight.bold, + color: textColor ?? Colors.grey[800], + ), + ), + ], + )), + ); + } +} diff --git a/lib/views/admin/passenger/passenger.dart b/lib/views/admin/passenger/passenger.dart index 460268f..fbf15b6 100644 --- a/lib/views/admin/passenger/passenger.dart +++ b/lib/views/admin/passenger/passenger.dart @@ -1,205 +1,390 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:sefer_admin1/controller/functions/encrypt_decrypt.dart'; +import '../../../constant/box_name.dart'; +import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/admin/passenger_admin_controller.dart'; +import '../../../main.dart'; // للوصول إلى box import '../../widgets/elevated_btn.dart'; import '../../widgets/my_scafold.dart'; import '../../widgets/my_textField.dart'; import '../../widgets/mycircular.dart'; -import 'form_passenger.dart'; import 'passenger_details_page.dart'; class Passengrs extends StatelessWidget { Passengrs({super.key}); + final PassengerAdminController passengerAdminController = Get.put(PassengerAdminController()); + @override Widget build(BuildContext context) { + // 1. منطق السوبر أدمن + String myPhone = box.read(BoxName.adminPhone).toString(); + bool isSuperAdmin = myPhone == '963942542053' || myPhone == '963992952235'; + return MyScafolld( - title: 'Passengrs'.tr, + title: 'Passengers Management'.tr, isleading: true, body: [ - GetBuilder( - builder: (passengerAdminController) => Column( - children: [ - passengerAdminController.isLoading - ? const MyCircularProgressIndicator() - : Column( - children: [ - Padding( - padding: const EdgeInsets.all(5), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - passengerAdmin( - passengerAdminController, - 'Passengers Count', - 'countPassenger', - ), - MyElevatedButton( - title: 'Add Prize to Gold Passengers', - onPressed: () { - var date = DateTime.now(); - var day = date.weekday; + // استخدام Expanded أو Container بطول الشاشة لتجنب المشاكل + SizedBox( + height: Get.height, // تأمين مساحة العمل + child: GetBuilder( + builder: (controller) { + if (controller.isLoading) { + return const Center(child: MyCircularProgressIndicator()); + } - if (day == 6) { - // Saturday is 6 - Get.defaultDialog( - title: - 'Add Prize to Gold Passengers', - titleStyle: AppStyle.title, - content: Column( - children: [ - Text( - 'Add Points to their wallet as prize' - .tr, - style: AppStyle.title, - ), - Form( - key: - passengerAdminController - .formPrizeKey, - child: MyTextForm( - controller: - passengerAdminController - .passengerPrizeController, - label: - 'Count of prize' - .tr, - hint: 'Count of prize' - .tr, - type: TextInputType - .number)) - ], - ), - confirm: MyElevatedButton( - title: 'Add', - onPressed: () async { - if (passengerAdminController - .formPrizeKey - .currentState! - .validate()) { - passengerAdminController - .addPassengerPrizeToWalletSecure(); - } - }, - ), - ); - } else { - Get.defaultDialog( - title: - 'This day is not allowed', - titleStyle: AppStyle.title, - middleText: - 'Saturday only Allowed day', - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - })); - } - }) - ], - ), - ), - const SizedBox( - height: 10, - ), - formSearchPassengers(), - SizedBox( - height: Get.height * .5, - child: ListView.builder( - itemCount: passengerAdminController - .passengersData['message'].length, - itemBuilder: (context, index) { - final user = passengerAdminController - .passengersData['message'][index]; + return Column( + children: [ + // --- قسم الإحصائيات والجوائز (Dashboard) --- + Padding( + padding: const EdgeInsets.all(16.0), + child: _buildDashboardCard(context, controller), + ), - return InkWell( - onTap: () { - Get.to(const PassengerDetailsPage(), - arguments: { - 'data': user, - }); - }, - child: Padding( - padding: const EdgeInsets.all(3), - child: Container( - decoration: BoxDecoration( - border: Border.all(width: 2)), - child: ListTile( - title: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Name : ${(user['first_name'])} ${(user['last_name'])}', - style: AppStyle.title, - ), - Text( - 'Rating : ${user['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - subtitle: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Count Trip : ${user['countPassengerRide']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate : ${user['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - ), - ), - ), - ); - }, - ), - ), - ], - ), - ], - )) + // --- عنوان القائمة --- + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "All Passengers".tr, + style: AppStyle.title.copyWith( + fontSize: 18, fontWeight: FontWeight.bold), + ), + Text( + "${controller.passengersData['message']?.length ?? 0} Users", + style: + TextStyle(color: Colors.grey[600], fontSize: 12), + ), + ], + ), + ), + const SizedBox(height: 10), + + // --- قائمة الركاب --- + // استخدام Expanded هنا هو الحل الجذري لمكلة Overflow + Expanded( + child: _buildPassengersList(controller, isSuperAdmin), + ), + + // مساحة سفلية صغيرة لضمان عدم التصاق القائمة بالحافة + const SizedBox(height: 20), + ], + ); + }, + ), + ), ], ); } - Container passengerAdmin(PassengerAdminController passengerAdminController, - String title, String jsonField) { + // --- تصميم بطاقة الإحصائيات (Dashboard) --- + Widget _buildDashboardCard( + BuildContext context, PassengerAdminController controller) { + // جلب العدد بأمان + final String countValue = (controller.passengersData['message'] != null && + controller.passengersData['message'].isNotEmpty) + ? controller.passengersData['message'][0]['countPassenger'] + ?.toString() ?? + '0' + : '0'; + return Container( - height: Get.height * .1, - decoration: BoxDecoration(border: Border.all(width: 2)), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: () {}, - child: Column( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + blurRadius: 15, + offset: const Offset(0, 5), + ), + ], + ), + child: Column( + children: [ + Row( children: [ - Text( - title.tr, - style: AppStyle.title, + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: AppColor.primaryColor.withOpacity(0.1), + shape: BoxShape.circle, + ), + child: Icon(Icons.groups_rounded, + color: AppColor.primaryColor, size: 30), ), - Text( - passengerAdminController.passengersData['message'][0][jsonField] - .toString(), - style: AppStyle.title, + const SizedBox(width: 15), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Total Passengers'.tr, + style: const TextStyle(fontSize: 14, color: Colors.grey), + ), + Text( + countValue, + style: const TextStyle( + fontSize: 24, fontWeight: FontWeight.bold), + ), + ], ), ], ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + height: 45, + child: ElevatedButton.icon( + icon: const Icon(Icons.card_giftcard, + color: Colors.white, size: 20), + label: Text('Add Prize to Gold Passengers'.tr, + style: const TextStyle( + color: Colors.white, fontWeight: FontWeight.bold)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.yellowColor, // لون ذهبي + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + elevation: 0, + ), + onPressed: () { + _showAddPrizeDialog(controller); + }, + ), + ), + ], + ), + ); + } + + // --- بناء قائمة الركاب --- + Widget _buildPassengersList( + PassengerAdminController controller, bool isSuperAdmin) { + final List passengers = controller.passengersData['message'] ?? []; + + if (passengers.isEmpty) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.person_off_outlined, size: 60, color: Colors.grey[300]), + const SizedBox(height: 10), + Text("No passengers found".tr, + style: TextStyle(color: Colors.grey[400])), + ], + ), + ); + } + + return ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 16), + physics: const BouncingScrollPhysics(), + itemCount: passengers.length, + separatorBuilder: (context, index) => const SizedBox(height: 12), + itemBuilder: (context, index) { + final user = passengers[index]; + return _buildPassengerItem(user, isSuperAdmin); + }, + ); + } + + // --- عنصر الراكب الواحد (Card) --- + Widget _buildPassengerItem(dynamic user, bool isSuperAdmin) { + String firstName = user['first_name'] ?? ''; + String lastName = user['last_name'] ?? ''; + String fullName = '$firstName $lastName'.trim(); + if (fullName.isEmpty) fullName = 'Unknown User'; + + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + border: Border.all(color: Colors.grey.withOpacity(0.1)), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.05), + blurRadius: 5, + offset: const Offset(0, 2), + ), + ], + ), + child: Material( + color: Colors.transparent, + child: InkWell( + borderRadius: BorderRadius.circular(15), + onTap: () { + // الانتقال للتفاصيل مع تمرير صلاحية الأدمن + Get.to( + () => const PassengerDetailsPage(), + arguments: {'data': user, 'isSuperAdmin': isSuperAdmin}, + ); + }, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Row( + children: [ + // Avatar + CircleAvatar( + radius: 25, + backgroundColor: AppColor.primaryColor.withOpacity(0.1), + child: Text( + fullName.isNotEmpty ? fullName[0].toUpperCase() : 'U', + style: TextStyle( + color: AppColor.primaryColor, + fontWeight: FontWeight.bold, + fontSize: 18), + ), + ), + const SizedBox(width: 15), + + // Info + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + fullName, + style: const TextStyle( + fontWeight: FontWeight.bold, fontSize: 16), + ), + const SizedBox(height: 4), + + // Stats Row + Row( + children: [ + Icon(Icons.star_rounded, + size: 16, color: Colors.amber[700]), + Text( + " ${user['ratingPassenger'] ?? '0.0'} ", + style: const TextStyle( + fontSize: 12, fontWeight: FontWeight.bold), + ), + const SizedBox(width: 8), + Icon(Icons.directions_car, + size: 14, color: Colors.grey[400]), + Text( + " ${user['countPassengerRide'] ?? '0'} Trips", + style: TextStyle( + fontSize: 12, color: Colors.grey[600]), + ), + ], + ), + + const SizedBox(height: 4), + // Phone Number (Masked logic) + Row( + children: [ + Icon(Icons.phone_iphone, + size: 12, color: Colors.grey[400]), + const SizedBox(width: 4), + Text( + _formatPhoneNumber( + user['phone'].toString(), isSuperAdmin), + style: TextStyle( + fontSize: 12, + color: Colors.grey[500], + fontFamily: 'monospace'), + ), + ], + ), + + // Email (Show only if Super Admin) + if (isSuperAdmin && user['email'] != null) ...[ + const SizedBox(height: 2), + Text( + user['email'], + style: + TextStyle(fontSize: 10, color: Colors.grey[400]), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ) + ] + ], + ), + ), + + // Arrow + Icon(Icons.arrow_forward_ios_rounded, + size: 16, color: Colors.grey[300]), + ], + ), + ), ), ), ); } + + // --- دالة تنسيق الرقم (إظهار آخر 4 أرقام لغير الأدمن) --- + String _formatPhoneNumber(String phone, bool isSuperAdmin) { + if (isSuperAdmin) return phone; // إظهار الرقم كاملاً للسوبر أدمن + + // لغير الأدمن + if (phone.length <= 4) return phone; + String lastFour = phone.substring(phone.length - 4); + String masked = '*' * (phone.length - 4); + return '$masked$lastFour'; // النتيجة: *******5678 + } + + // --- دالة إضافة الجوائز --- + void _showAddPrizeDialog(PassengerAdminController controller) { + // التحقق من يوم السبت + if (DateTime.now().weekday == DateTime.saturday) { + Get.defaultDialog( + title: 'Add Prize'.tr, + titleStyle: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18), + contentPadding: const EdgeInsets.all(20), + content: Form( + key: controller.formPrizeKey, + child: Column( + children: [ + Text( + 'Add Points to Gold Passengers wallet'.tr, + textAlign: TextAlign.center, + style: TextStyle(fontSize: 14, color: Colors.grey[700]), + ), + const SizedBox(height: 20), + MyTextForm( + controller: controller.passengerPrizeController, + label: 'Prize Amount'.tr, + hint: '1000...', + type: TextInputType.number, + ), + ], + ), + ), + confirm: SizedBox( + width: 120, + child: MyElevatedButton( + title: 'Add', + onPressed: () async { + if (controller.formPrizeKey.currentState!.validate()) { + controller.addPassengerPrizeToWalletSecure(); + Get.back(); + } + }, + ), + ), + cancel: TextButton( + onPressed: () => Get.back(), + child: + Text('Cancel'.tr, style: const TextStyle(color: Colors.grey))), + ); + } else { + Get.snackbar( + 'Not Allowed'.tr, + 'Prizes can only be added on Saturdays.'.tr, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + icon: const Icon(Icons.error_outline, color: Colors.red), + snackPosition: SnackPosition.TOP, + margin: const EdgeInsets.all(10), + ); + } + } } diff --git a/lib/views/admin/passenger/passenger_details_page.dart b/lib/views/admin/passenger/passenger_details_page.dart index 7919774..e2a678d 100644 --- a/lib/views/admin/passenger/passenger_details_page.dart +++ b/lib/views/admin/passenger/passenger_details_page.dart @@ -1,167 +1,458 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; -import '../../../constant/style.dart'; import '../../../controller/admin/passenger_admin_controller.dart'; +import '../../../controller/functions/crud.dart'; import '../../../controller/firebase/firbase_messge.dart'; +import '../../../constant/links.dart'; +import '../../../main.dart'; // To access 'box' for admin phone check import '../../widgets/elevated_btn.dart'; import '../../widgets/my_scafold.dart'; import '../../widgets/my_textField.dart'; +import 'form_passenger.dart'; class PassengerDetailsPage extends StatelessWidget { const PassengerDetailsPage({super.key}); @override Widget build(BuildContext context) { - final arguments = Get.arguments; - final Map data = arguments['data']; - var key = Get.find().formPrizeKey; - var titleNotify = Get.find().titleNotify; - var bodyNotify = Get.find().bodyNotify; + final Map data = Get.arguments['data']; + final controller = Get.find(); + + // 1. Define Super Admin Logic (Same as Captains Page) + String myPhone = box.read(BoxName.adminPhone).toString(); + bool isSuperAdmin = myPhone == '963942542053' || myPhone == '963992952235'; + return MyScafolld( - title: data['first_name'], + title: 'Passenger Profile'.tr, + isleading: true, body: [ - Padding( - padding: const EdgeInsets.all(8.0), + SingleChildScrollView( + padding: const EdgeInsets.only(bottom: 40), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - 'Email is ${data['email']}', - style: AppStyle.title, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Phone is ${data['phone']}', - style: AppStyle.title, - ), - Text( - 'gender is ${data['gender']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'status is ${data['status']}', - style: AppStyle.title, - ), - Text( - 'birthdate is ${data['birthdate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'site is ${data['site']}', - style: AppStyle.title, - ), - Text( - 'sosPhone is ${data['sosPhone']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Feedback is ${data['countFeedback']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate is ${data['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Cancel is ${data['countPassengerCancel']}', - style: AppStyle.title, - ), - Text( - 'Count Ride is ${data['countPassengerRide']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Rating Captain Avarage is ${data['passengerAverageRating']}', - style: AppStyle.title, - ), - Text( - 'Rating is ${data['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - Container( - decoration: BoxDecoration( - border: Border.all(width: 3, color: AppColor.yellowColor)), - child: TextButton( - onPressed: () async { - Get.defaultDialog( - title: 'Send Notification'.tr, - titleStyle: AppStyle.title, - content: Form( - key: key, - child: Column( - children: [ - MyTextForm( - controller: titleNotify, - label: 'title'.tr, - hint: 'title notificaton'.tr, - type: TextInputType.name), - const SizedBox( - height: 10, - ), - MyTextForm( - controller: bodyNotify, - label: 'body'.tr, - hint: 'body notificaton'.tr, - type: TextInputType.name) - ], - ), + // --- Header Section (Avatar & Name) --- + _buildHeaderSection(context, data), + + const SizedBox(height: 20), + + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + children: [ + // --- Personal Information Card --- + _buildInfoCard( + title: 'Personal Information', + icon: Icons.person, + children: [ + _buildDetailTile( + Icons.email_outlined, + 'Email', + isSuperAdmin + ? data['email'] + : _maskEmail(data['email']), ), - confirm: MyElevatedButton( - title: 'Send', - onPressed: () { - if (key.currentState!.validate()) { - FirebaseMessagesController() - .sendNotificationToAnyWithoutData( - titleNotify.text, - bodyNotify.text, - data['passengerToken'], - 'order.wav'); - Get.back(); - } - })); - }, - child: Text( - "Send Notificaion to Passenger ".tr, - style: AppStyle.title, - ), + _buildDetailTile( + Icons.phone_iphone, + 'Phone', + _formatPhoneNumber( + data['phone'].toString(), isSuperAdmin), + ), + _buildDetailTile( + Icons.transgender, + 'Gender', + data['gender'] ?? 'Not specified', + ), + _buildDetailTile( + Icons.cake_outlined, + 'Birthdate', + data['birthdate'] ?? 'N/A', + ), + _buildDetailTile( + Icons.location_on_outlined, + 'Site', + data['site'] ?? 'N/A', + ), + // SOS Phone is critical, usually shown, but we can mask it too if needed + _buildDetailTile( + Icons.sos, + 'SOS Phone', + data['sosPhone'] ?? 'N/A', + valueColor: Colors.redAccent, + ), + ], + ), + const SizedBox(height: 16), + + // --- Ride Statistics Card --- + _buildInfoCard( + title: 'Activity & Stats', + icon: Icons.bar_chart_rounded, + children: [ + _buildDetailTile( + Icons.star_rate_rounded, + 'Rating', + '${data['ratingPassenger'] ?? 0.0}', + valueColor: Colors.amber[700], + ), + _buildDetailTile( + Icons.directions_car_filled_outlined, + 'Total Rides', + data['countPassengerRide'], + ), + _buildDetailTile( + Icons.cancel_outlined, + 'Canceled Rides', + data['countPassengerCancel'], + valueColor: Colors.redAccent, + ), + _buildDetailTile( + Icons.rate_review_outlined, + 'Feedback Given', + data['countFeedback'], + ), + ], + ), + const SizedBox(height: 30), + + // --- Action Buttons --- + _buildActionButtons( + context, controller, data, isSuperAdmin), + ], ), - ) + ), ], ), - ) + ), ], - isleading: true, + ); + } + + // --- Header with Gradient/White Background --- + Widget _buildHeaderSection(BuildContext context, Map data) { + String firstName = data['first_name'] ?? ''; + String lastName = data['last_name'] ?? ''; + String fullName = '$firstName $lastName'.trim(); + if (fullName.isEmpty) fullName = "Passenger"; + + return Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(vertical: 25), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + blurRadius: 10, + offset: const Offset(0, 5), + ) + ], + borderRadius: const BorderRadius.vertical(bottom: Radius.circular(30)), + ), + child: Column( + children: [ + CircleAvatar( + radius: 45, + backgroundColor: AppColor.primaryColor.withOpacity(0.1), + child: Text( + fullName[0].toUpperCase(), + style: TextStyle( + fontSize: 35, + fontWeight: FontWeight.bold, + color: AppColor.primaryColor), + ), + ), + const SizedBox(height: 12), + Text( + fullName, + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + color: Colors.black87), + ), + const SizedBox(height: 4), + Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), + decoration: BoxDecoration( + color: Colors.blue.withOpacity(0.1), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + data['status'] ?? 'Active', + style: const TextStyle( + fontSize: 12, + color: Colors.blue, + fontWeight: FontWeight.w600), + ), + ), + ], + ), + ); + } + + Widget _buildInfoCard( + {required String title, + required IconData icon, + required List children}) { + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.05), + spreadRadius: 2, + blurRadius: 10) + ], + border: Border.all(color: Colors.grey.withOpacity(0.1)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon(icon, color: AppColor.primaryColor, size: 22), + const SizedBox(width: 10), + Text(title.tr, + style: const TextStyle( + fontSize: 17, fontWeight: FontWeight.bold)), + ], + ), + Divider(height: 25, color: Colors.grey.withOpacity(0.2)), + ...children, + ], + ), + ); + } + + Widget _buildDetailTile(IconData icon, String label, dynamic value, + {Color? valueColor}) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.grey[100], + borderRadius: BorderRadius.circular(8)), + child: Icon(icon, color: Colors.grey[600], size: 18), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(label.tr, + style: TextStyle(fontSize: 12, color: Colors.grey[500])), + Text( + value?.toString() ?? 'N/A', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + color: valueColor ?? Colors.black87), + overflow: TextOverflow.ellipsis, + ), + ], + ), + ), + ], + ), + ); + } + + Widget _buildActionButtons( + BuildContext context, + PassengerAdminController controller, + Map data, + bool isSuperAdmin) { + return Column( + children: [ + // --- Send Notification (For All Admins) --- + SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton.icon( + icon: const Icon(Icons.notifications_active_outlined, + color: Colors.white), + label: Text("Send Notification".tr, + style: const TextStyle(color: Colors.white, fontSize: 16)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.primaryColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + onPressed: () => _showSendNotificationDialog(controller, data), + ), + ), + + // --- Edit/Delete (Super Admin Only) --- + if (isSuperAdmin) ...[ + const SizedBox(height: 16), + Row( + children: [ + Expanded( + child: ElevatedButton.icon( + icon: const Icon(Icons.edit_note_rounded, size: 20), + label: Text("Edit".tr), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + foregroundColor: AppColor.yellowColor, + elevation: 0, + side: BorderSide(color: AppColor.yellowColor), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + padding: const EdgeInsets.symmetric(vertical: 12), + ), + onPressed: () { + // Get.to(() => const FormPassenger(), arguments: { + // 'isEditMode': true, + // 'passengerData': data, + // }); + }, + ), + ), + const SizedBox(width: 16), + Expanded( + child: ElevatedButton.icon( + icon: const Icon(Icons.delete_outline_rounded, size: 20), + label: Text("Delete".tr), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red[50], + foregroundColor: Colors.red, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + padding: const EdgeInsets.symmetric(vertical: 12), + ), + onPressed: () => _showDeleteConfirmation(data), + ), + ), + ], + ), + ] else ...[ + // Message for normal admins + const SizedBox(height: 15), + Text( + "Only Super Admins can edit or delete passengers.", + style: TextStyle( + color: Colors.grey[400], + fontSize: 12, + fontStyle: FontStyle.italic), + ) + ], + ], + ); + } + + // --- Helper: Format Phone (Last 4 digits for normal admin) --- + String _formatPhoneNumber(String phone, bool isSuperAdmin) { + if (isSuperAdmin) return phone; + if (phone.length <= 4) return phone; + return '${'*' * (phone.length - 4)}${phone.substring(phone.length - 4)}'; + } + + // --- Helper: Mask Email --- + String _maskEmail(String? email) { + if (email == null || email.isEmpty) return 'N/A'; + int atIndex = email.indexOf('@'); + if (atIndex <= 1) return email; // Too short to mask + return '${email.substring(0, 2)}****${email.substring(atIndex)}'; + } + + void _showSendNotificationDialog( + PassengerAdminController controller, Map data) { + Get.defaultDialog( + title: 'Send Notification'.tr, + titleStyle: const TextStyle(fontWeight: FontWeight.bold), + content: Form( + key: controller.formPrizeKey, + child: Column( + children: [ + MyTextForm( + controller: controller.titleNotify, + label: 'Title'.tr, + hint: 'Notification title'.tr, + type: TextInputType.text), + const SizedBox(height: 10), + MyTextForm( + controller: controller.bodyNotify, + label: 'Body'.tr, + hint: 'Message body'.tr, + type: TextInputType.text) + ], + ), + ), + confirm: SizedBox( + width: 100, + child: MyElevatedButton( + title: 'Send', + onPressed: () { + // Validate form safely + if (controller.formPrizeKey.currentState?.validate() ?? false) { + FirebaseMessagesController().sendNotificationToAnyWithoutData( + controller.titleNotify.text, + controller.bodyNotify.text, + data['passengerToken'], + 'order.wav'); + Get.back(); + Get.snackbar('Success', 'Notification sent successfully!', + backgroundColor: Colors.green.withOpacity(0.2)); + } + }, + ), + ), + cancel: TextButton( + onPressed: () => Get.back(), + child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey))), + ); + } + + void _showDeleteConfirmation(Map user) { + Get.defaultDialog( + title: 'Confirm Deletion'.tr, + titleStyle: + const TextStyle(color: Colors.redAccent, fontWeight: FontWeight.bold), + middleText: + 'Are you sure you want to delete ${user['first_name']}? This action cannot be undone.' + .tr, + confirm: ElevatedButton( + style: ElevatedButton.styleFrom(backgroundColor: Colors.redAccent), + onPressed: () async { + // 1. Close Dialog + Get.back(); + + // 2. Perform Delete Operation + var res = await CRUD().post( + link: AppLink.admin_delete_and_blacklist_passenger, + payload: { + 'id': user['id'], + 'phone': user['phone'], + 'reason': 'Deleted by admin', + }, + ); + + // 3. Handle Result + if (res['status'] == 'success') { + Get.back(); // Go back to list page + Get.snackbar('Deleted', 'Passenger removed successfully', + backgroundColor: Colors.red.withOpacity(0.2)); + // Ideally, trigger a refresh on the controller here + // Get.find().getAll(); + } else { + Get.snackbar('Error', res['message'] ?? 'Failed to delete', + backgroundColor: Colors.red.withOpacity(0.2)); + } + }, + child: Text('Delete'.tr, style: const TextStyle(color: Colors.white)), + ), + cancel: TextButton( + onPressed: () => Get.back(), + child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey)), + ), ); } } diff --git a/lib/views/admin/rides/ride_lookup_page.dart b/lib/views/admin/rides/ride_lookup_page.dart new file mode 100644 index 0000000..7c0c7a7 --- /dev/null +++ b/lib/views/admin/rides/ride_lookup_page.dart @@ -0,0 +1,697 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:latlong2/latlong.dart'; +import 'package:url_launcher/url_launcher.dart'; // ضروري للاتصال +import '../../../controller/functions/crud.dart'; +import '../../../constant/box_name.dart'; // لتحديد هوية المستخدم الحالي +import '../../../main.dart'; // للوصول لـ box + +// ========================================== +// 1. MODEL +// ========================================== +class RideDashboardModel { + final String rideId; + final String status; + final String startLocation; + final String endLocation; + final String date; + final String time; + final String price; + final String distance; + + final String driverId; + final String driverName; + final String driverPhone; + final String driverCompletedCount; + final String driverCanceledCount; + + final String passengerName; + final String passengerPhone; + final String passengerCompletedCount; + + final String cancelReason; + + RideDashboardModel({ + required this.rideId, + required this.status, + required this.startLocation, + required this.endLocation, + required this.date, + required this.time, + required this.price, + required this.distance, + required this.driverId, + required this.driverName, + required this.driverPhone, + required this.driverCompletedCount, + required this.driverCanceledCount, + required this.passengerName, + required this.passengerPhone, + required this.passengerCompletedCount, + required this.cancelReason, + }); + + factory RideDashboardModel.fromJson(Map json) { + return RideDashboardModel( + rideId: json['id'].toString(), + status: json['status'] ?? '', + startLocation: json['start_location'] ?? '', + endLocation: json['end_location'] ?? '', + date: json['date'] ?? '', + time: json['time'] ?? '', + price: json['price']?.toString() ?? '0', + distance: json['distance']?.toString() ?? '0', + driverId: json['driver_id'].toString(), + driverName: json['driver_full_name'] ?? 'غير معروف', + driverPhone: json['d_phone'] ?? '', + driverCompletedCount: (json['d_completed'] ?? 0).toString(), + driverCanceledCount: (json['d_canceled'] ?? 0).toString(), + passengerName: json['passenger_full_name'] ?? 'غير معروف', + passengerPhone: json['p_phone'] ?? '', + passengerCompletedCount: (json['p_completed'] ?? 0).toString(), + cancelReason: json['cancel_reason'] ?? '', + ); + } + + LatLng? getStartLatLng() { + try { + var parts = startLocation.split(','); + return LatLng(double.parse(parts[0]), double.parse(parts[1])); + } catch (e) { + return null; + } + } + + LatLng? getEndLatLng() { + try { + var parts = endLocation.split(','); + return LatLng(double.parse(parts[0]), double.parse(parts[1])); + } catch (e) { + return null; + } + } +} + +// ========================================== +// 2. CONTROLLER +// ========================================== +class RidesListController extends GetxController { + var isLoading = false.obs; + var allRidesList = []; + var displayedRides = [].obs; + + TextEditingController searchController = TextEditingController(); + String currentStatus = 'Begin'; + + // === التحقق من صلاحية الأدمن === + // نقرأ رقم الهاتف الحالي المخزن في التطبيق + String myPhone = box.read(BoxName.adminPhone)?.toString() ?? ''; + + bool get isSuperAdmin { + // ضع هنا أرقام هواتف الأدمن المسموح لهم برؤية الأرقام والاتصال + return myPhone == '963942542053' || myPhone == '963992952235'; + } + + final String apiUrl = + "https://api.intaleq.xyz/intaleq/Admin/rides/get_rides_by_status.php"; + + @override + void onInit() { + super.onInit(); + fetchRides(); + } + + void changeTab(String status) { + currentStatus = status; + searchController.clear(); + fetchRides(); + } + + void filterRides(String query) { + if (query.isEmpty) { + displayedRides.value = allRidesList; + } else { + displayedRides.value = allRidesList.where((ride) { + return ride.driverPhone.contains(query) || + ride.passengerPhone.contains(query) || + ride.driverName.toLowerCase().contains(query.toLowerCase()) || + ride.passengerName.toLowerCase().contains(query.toLowerCase()) || + ride.rideId.contains(query); + }).toList(); + } + } + + Future fetchRides() async { + isLoading.value = true; + allRidesList.clear(); + displayedRides.clear(); + try { + var response = + await CRUD().post(link: apiUrl, payload: {"status": currentStatus}); + if (response != 'failure' && response['status'] == 'success') { + List data = []; + if (response['message'] is List) + data = response['message']; + else if (response['data'] is List) data = response['data']; + + allRidesList = data.map((e) => RideDashboardModel.fromJson(e)).toList(); + displayedRides.value = allRidesList; + } + } catch (e) { + print("Error fetching rides: $e"); + } finally { + isLoading.value = false; + } + } +} + +// ========================================== +// 3. MAIN DASHBOARD SCREEN +// ========================================== +class RidesDashboardScreen extends StatelessWidget { + const RidesDashboardScreen({super.key}); + + @override + Widget build(BuildContext context) { + final controller = Get.put(RidesListController()); + + return DefaultTabController( + length: 4, + child: Scaffold( + appBar: AppBar( + title: const Text("مراقبة الرحلات"), + bottom: TabBar( + isScrollable: true, + onTap: (index) { + List statuses = ['Begin', 'New', 'Completed', 'Canceled']; + controller.changeTab(statuses[index]); + }, + tabs: const [ + Tab(text: "جارية", icon: Icon(Icons.directions_car)), + Tab(text: "جديدة", icon: Icon(Icons.new_releases)), + Tab(text: "مكتملة", icon: Icon(Icons.check_circle)), + Tab(text: "ملغاة", icon: Icon(Icons.cancel)), + ], + ), + ), + body: Column( + children: [ + Padding( + padding: const EdgeInsets.all(10.0), + child: TextField( + controller: controller.searchController, + onChanged: (val) => controller.filterRides(val), + decoration: InputDecoration( + hintText: "بحث...", + prefixIcon: const Icon(Icons.search), + filled: true, + fillColor: Colors.grey.shade100, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide.none), + ), + ), + ), + Expanded( + child: Obx(() { + if (controller.isLoading.value) + return const Center(child: CircularProgressIndicator()); + if (controller.displayedRides.isEmpty) + return const Center(child: Text("لا توجد رحلات")); + + return ListView.builder( + padding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 5), + itemCount: controller.displayedRides.length, + itemBuilder: (context, index) { + final ride = controller.displayedRides[index]; + return _buildRideCard( + ride, controller.isSuperAdmin); // نمرر صلاحية الأدمن + }, + ); + }), + ), + ], + ), + ), + ); + } + + Widget _buildRideCard(RideDashboardModel ride, bool isAdmin) { + Color statusColor = _getStatusColor(ride.status); + String statusText = _getStatusText(ride.status); + + return Card( + margin: const EdgeInsets.only(bottom: 12), + elevation: 2, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + child: InkWell( + borderRadius: BorderRadius.circular(12), + onTap: () => Get.to(() => RideMapMonitorScreen( + ride: ride, isAdmin: isAdmin)), // نمرر الصلاحية للخريطة أيضاً + child: Padding( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("رحلة #${ride.rideId}", + style: const TextStyle( + fontWeight: FontWeight.bold, fontSize: 16)), + Container( + padding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 4), + decoration: BoxDecoration( + color: statusColor.withOpacity(0.1), + borderRadius: BorderRadius.circular(12), + border: Border.all(color: statusColor)), + child: Text(statusText, + style: TextStyle( + color: statusColor, + fontWeight: FontWeight.bold, + fontSize: 12)), + ), + ], + ), + const SizedBox(height: 10), + // Stats + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade200)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _statItem( + Icons.attach_money, + "السعر", + "${double.tryParse(ride.price)?.toStringAsFixed(0) ?? 0}", + Colors.green), + Container( + width: 1, height: 25, color: Colors.grey.shade300), + _statItem( + Icons.social_distance, + "المسافة", + "${double.tryParse(ride.distance)?.toStringAsFixed(1) ?? 0} كم", + Colors.blue), + Container( + width: 1, height: 25, color: Colors.grey.shade300), + _statItem( + Icons.access_time, + "الوقت", + ride.time.length > 5 + ? ride.time.substring(0, 5) + : ride.time, + Colors.orange), + ], + ), + ), + const SizedBox(height: 12), + _locationRow(Icons.my_location, ride.startLocation, Colors.blue), + const SizedBox(height: 6), + _locationRow(Icons.location_on, ride.endLocation, Colors.red), + const Divider(height: 20), + + // === معلومات السائق والراكب مع ميزة إخفاء الرقم === + Row( + children: [ + Expanded( + child: _userInfo( + title: "الكابتن", + name: ride.driverName, + phone: ride.driverPhone, + isAdmin: isAdmin, + completed: ride.driverCompletedCount, + canceled: ride.driverCanceledCount)), + Container(width: 1, height: 40, color: Colors.grey.shade300), + const SizedBox(width: 10), + Expanded( + child: _userInfo( + title: "الراكب", + name: ride.passengerName, + phone: ride.passengerPhone, + isAdmin: isAdmin, + completed: ride.passengerCompletedCount)), + ], + ), + + if ((ride.status.contains('Cancel') || + ride.status == 'TimeOut') && + ride.cancelReason.isNotEmpty && + ride.cancelReason != 'لا يوجد سبب') ...[ + const SizedBox(height: 10), + Container( + width: double.infinity, + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.red.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.red.shade200)), + child: Text("السبب: ${ride.cancelReason}", + style: + TextStyle(color: Colors.red.shade900, fontSize: 13)), + ) + ] + ], + ), + ), + ), + ); + } + + // === ويدجت عرض المعلومات مع منطق الإخفاء === + Widget _userInfo( + {required String title, + required String name, + required String phone, + required bool isAdmin, + String? completed, + String? canceled}) { + // 1. منطق الإخفاء (Masking) + String displayPhone = phone; + if (!isAdmin && phone.length > 4) { + // إظهار آخر 4 أرقام فقط + displayPhone = + phone.substring(phone.length - 4).padLeft(phone.length, '*'); + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(title, style: const TextStyle(fontSize: 10, color: Colors.grey)), + Text(name, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 13)), + + // 2. رقم الهاتف وزر الاتصال + Row( + children: [ + Text(displayPhone, + style: const TextStyle( + fontSize: 11, color: Colors.grey, letterSpacing: 1)), + if (isAdmin && phone.isNotEmpty) ...[ + const SizedBox(width: 4), + InkWell( + onTap: () => _makePhoneCall(phone), + child: const Icon(Icons.call, size: 14, color: Colors.green), + ) + ] + ], + ), + + if (completed != null) + Text("تم: $completed ${canceled != null ? '| ألغى: $canceled' : ''}", + style: const TextStyle(fontSize: 9, color: Colors.black54)), + ], + ); + } + + Future _makePhoneCall(String phoneNumber) async { + // التحقق مما إذا كانت العلامة موجودة مسبقاً لتجنب التكرار (++963) + String formattedPhone = phoneNumber; + if (!formattedPhone.startsWith('+')) { + formattedPhone = '+$formattedPhone'; + } + + final Uri launchUri = Uri(scheme: 'tel', path: formattedPhone); + + if (await canLaunchUrl(launchUri)) { + await launchUrl(launchUri); + } else { + // يمكنك هنا إضافة تنبيه بسيط في حال فشل فتح التطبيق + debugPrint("لا يمكن الاتصال بالرقم: $formattedPhone"); + } + } + + // Helpers + Color _getStatusColor(String s) { + if (s == 'Begin' || s == 'Arrived') return Colors.green; + if (s == 'Finished') return Colors.teal; + if (s.contains('Cancel') || s == 'TimeOut') return Colors.red; + if (s == 'New') return Colors.blue; + return Colors.grey; + } + + String _getStatusText(String s) { + if (s == 'Begin' || s == 'Arrived') return "جارية 🟢"; + if (s == 'Finished') return "مكتملة ✅"; + if (s == 'CancelFromDriver' || s == 'CancelFromDriverAfterApply') + return "ألغاها السائق 👨‍✈️"; + if (s == 'CancelFromPassenger') return "ألغاها الراكب 👤"; + if (s == 'TimeOut') return "انتهى الوقت ⏱️"; + if (s == 'New') return "جديدة 🆕"; + return "ملغاة ❌"; + } + + Widget _statItem(IconData icon, String label, String value, Color color) { + return Column(children: [ + Icon(icon, size: 18, color: color), + Text(value, + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 13)), + Text(label, style: const TextStyle(fontSize: 10, color: Colors.grey)) + ]); + } + + Widget _locationRow(IconData icon, String text, Color color) { + return Row(children: [ + Icon(icon, size: 16, color: color), + const SizedBox(width: 8), + Expanded( + child: Text(text, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontSize: 13))) + ]); + } +} + +// ========================================== +// 4. MAP MONITOR SCREEN +// ========================================== +class RideMapMonitorScreen extends StatefulWidget { + final RideDashboardModel ride; + final bool isAdmin; // نستقبل الصلاحية هنا أيضاً + const RideMapMonitorScreen( + {super.key, required this.ride, required this.isAdmin}); + + @override + State createState() => _RideMapMonitorScreenState(); +} + +class _RideMapMonitorScreenState extends State { + final MapController mapController = MapController(); + LatLng? startPos, endPos, driverPos; + Timer? _timer; + bool isFirstLoad = true; + + @override + void initState() { + super.initState(); + startPos = widget.ride.getStartLatLng(); + endPos = widget.ride.getEndLatLng(); + if (widget.ride.status == 'Begin' || widget.ride.status == 'Arrived') { + fetchDriverLocation(); + _timer = Timer.periodic( + const Duration(seconds: 10), (_) => fetchDriverLocation()); + } + WidgetsBinding.instance.addPostFrameCallback((_) => _fitBounds()); + } + + @override + void dispose() { + _timer?.cancel(); + mapController.dispose(); + super.dispose(); + } + + void _fitBounds() { + List points = []; + if (startPos != null) points.add(startPos!); + if (endPos != null) points.add(endPos!); + if (driverPos != null) points.add(driverPos!); + if (points.isNotEmpty) { + try { + mapController.fitCamera(CameraFit.bounds( + bounds: LatLngBounds.fromPoints(points), + padding: const EdgeInsets.all(50))); + } catch (e) {} + } + } + + Future fetchDriverLocation() async { + String trackUrl = + "https://api.intaleq.xyz/intaleq/Admin/rides/get_driver_live_pos.php"; + try { + var response = await CRUD() + .post(link: trackUrl, payload: {"driver_id": widget.ride.driverId}); + if (response != 'failure') { + var d = response['message']; + setState(() { + driverPos = LatLng(double.parse(d['latitude'].toString()), + double.parse(d['longitude'].toString())); + }); + if (isFirstLoad) { + _fitBounds(); + isFirstLoad = false; + } + } + } catch (e) {} + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text("تتبع الرحلة #${widget.ride.rideId}"), + backgroundColor: Colors.white, + foregroundColor: Colors.black, + elevation: 1), + body: Stack( + children: [ + FlutterMap( + mapController: mapController, + options: MapOptions( + initialCenter: startPos ?? const LatLng(33.513, 36.276), + initialZoom: 13), + children: [ + TileLayer( + urlTemplate: + 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'), + if (startPos != null && endPos != null) + PolylineLayer(polylines: [ + Polyline( + points: [startPos!, endPos!], + strokeWidth: 4, + color: Colors.blue.withOpacity(0.7)) + ]), + MarkerLayer(markers: [ + if (startPos != null) + Marker( + point: startPos!, + width: 40, + height: 40, + child: + const Icon(Icons.flag, color: Colors.green, size: 40), + alignment: Alignment.topCenter), + if (endPos != null) + Marker( + point: endPos!, + width: 40, + height: 40, + child: const Icon(Icons.location_on, + color: Colors.red, size: 40), + alignment: Alignment.topCenter), + if (driverPos != null) + Marker( + point: driverPos!, + width: 50, + height: 50, + child: Container( + decoration: const BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + boxShadow: [ + BoxShadow(blurRadius: 5, color: Colors.black26) + ]), + child: const Icon(Icons.directions_car, + color: Colors.blue, size: 30))), + ]), + ], + ), + Positioned( + bottom: 20, + left: 15, + right: 15, + child: Card( + elevation: 5, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15)), + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("السعر: ${widget.ride.price}", + style: const TextStyle( + fontWeight: FontWeight.bold, + color: Colors.green)), + Text("المسافة: ${widget.ride.distance} كم") + ]), + const Divider(), + _mapInfo(Icons.person, "الكابتن: ${widget.ride.driverName}", + widget.ride.driverPhone), + const SizedBox(height: 5), + _mapInfo( + Icons.person_outline, + "الراكب: ${widget.ride.passengerName}", + widget.ride.passengerPhone), + const SizedBox(height: 5), + _simpleInfo( + Icons.my_location, "من: ${widget.ride.startLocation}"), + _simpleInfo( + Icons.location_on, "إلى: ${widget.ride.endLocation}"), + ], + ), + ), + ), + ) + ], + ), + floatingActionButton: FloatingActionButton( + mini: true, + child: const Icon(Icons.center_focus_strong), + onPressed: _fitBounds), + ); + } + + // ويدجت خاصة بالخريطة تطبق نفس منطق الإخفاء + Widget _mapInfo(IconData icon, String text, String phone) { + String displayPhone = phone; + if (!widget.isAdmin && phone.length > 4) { + displayPhone = + phone.substring(phone.length - 4).padLeft(phone.length, '*'); + } + + return Row( + children: [ + Icon(icon, size: 18, color: Colors.grey[700]), + const SizedBox(width: 8), + Expanded( + child: Text("$text ($displayPhone)", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontSize: 14))), + if (widget.isAdmin && phone.isNotEmpty) + InkWell( + onTap: () async { + final Uri launchUri = Uri(scheme: 'tel', path: phone); + if (await canLaunchUrl(launchUri)) await launchUrl(launchUri); + }, + child: const Icon(Icons.call, size: 18, color: Colors.green), + ) + ], + ); + } + + Widget _simpleInfo(IconData icon, String text) { + return Row(children: [ + Icon(icon, size: 18, color: Colors.grey[700]), + const SizedBox(width: 8), + Expanded( + child: Text(text, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontSize: 14))) + ]); + } +} diff --git a/lib/views/admin/static/notes_driver_page.dart b/lib/views/admin/static/notes_driver_page.dart new file mode 100644 index 0000000..d4ba8a6 --- /dev/null +++ b/lib/views/admin/static/notes_driver_page.dart @@ -0,0 +1,163 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:intl/intl.dart' hide TextDirection; +import 'package:sefer_admin1/controller/functions/launch.dart'; + +import '../../../controller/admin/static_controller.dart'; +import '../../widgets/mycircular.dart'; + +class DailyNotesView extends StatelessWidget { + const DailyNotesView({super.key}); + + @override + Widget build(BuildContext context) { + // نستخدم نفس الكونترولر للوصول لدالة جلب الملاحظات + final controller = Get.find(); + + // عند فتح الصفحة، نجلب ملاحظات اليوم الحالي + WidgetsBinding.instance.addPostFrameCallback((_) { + controller.fetchDailyNotes(DateTime.now()); + }); + + return Scaffold( + backgroundColor: const Color(0xFFF0F2F5), + appBar: AppBar( + title: Text( + 'سجل المكالمات اليومي', + style: const TextStyle( + color: Color(0xFF1A1A1A), + fontWeight: FontWeight.w800, + fontSize: 20, + ), + ), + centerTitle: true, + backgroundColor: Colors.white, + elevation: 0, + iconTheme: const IconThemeData(color: Colors.black87), + ), + body: GetBuilder( + builder: (controller) { + if (controller.isLoadingNotes) { + return const Center(child: MyCircularProgressIndicator()); + } + + if (controller.dailyNotesList.isEmpty) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.note_alt_outlined, + size: 80, color: Colors.grey.shade300), + const SizedBox(height: 10), + Text("لا توجد سجلات لهذا اليوم", + style: TextStyle(color: Colors.grey.shade600)), + ], + ), + ); + } + + return ListView.separated( + padding: const EdgeInsets.all(16), + itemCount: controller.dailyNotesList.length, + separatorBuilder: (context, index) => const SizedBox(height: 12), + itemBuilder: (context, index) { + final note = controller.dailyNotesList[index]; + final String name = note['editor'] ?? note['name'] ?? 'Unknown'; + final String phone = note['phone'] ?? note['phone'] ?? 'Unknown'; + final String content = note['note'] ?? note['content'] ?? ''; + final String time = note['createdAt'] ?? ''; + + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.03), + blurRadius: 10, + offset: const Offset(0, 4), + ) + ], + border: Border( + right: BorderSide( + color: _getEmployeeColor(name), width: 4))), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + CircleAvatar( + radius: 14, + backgroundColor: + _getEmployeeColor(name).withOpacity(0.1), + child: Icon(Icons.person, + size: 16, color: _getEmployeeColor(name)), + ), + const SizedBox(width: 8), + Text( + name.toUpperCase(), + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.grey.shade800, + fontSize: 14), + ), + const SizedBox(width: 100), + InkWell( + onTap: () { + makePhoneCall('+$phone'); + }, + child: Row( + children: [ + Text( + phone, + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.grey.shade800, + fontSize: 14), + ), + Icon(Icons.phone) + ], + ), + ), + const SizedBox(width: 22), + Text( + time.split(' ').last, // عرض الوقت فقط + style: TextStyle( + color: Colors.grey.shade400, fontSize: 12), + textDirection: TextDirection.ltr, + ), + ], + ), + ], + ), + const Divider(height: 20), + Text( + content, + style: TextStyle( + fontSize: 14, + color: Colors.grey.shade700, + height: 1.5), + ), + ], + ), + ); + }, + ); + }, + ), + ); + } + + Color _getEmployeeColor(String name) { + String n = name.toLowerCase().trim(); + if (n.contains('shahd')) return Colors.redAccent; + if (n.contains('mayar')) return Colors.amber.shade700; + if (n.contains('rama2')) return Colors.green; + if (n.contains('rama1')) return Colors.blue; + return Colors.blueGrey; + } +} diff --git a/lib/views/admin/static/static.dart b/lib/views/admin/static/static.dart index f7212db..cd9d8dd 100644 --- a/lib/views/admin/static/static.dart +++ b/lib/views/admin/static/static.dart @@ -1,575 +1,824 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:get/get.dart'; -import 'package:sefer_admin1/constant/style.dart'; +import 'package:intl/intl.dart' hide TextDirection; +import 'package:sefer_admin1/constant/colors.dart'; import 'package:sefer_admin1/controller/admin/static_controller.dart'; import 'package:sefer_admin1/views/widgets/mycircular.dart'; - -import '../../../constant/colors.dart'; -import '../../widgets/my_scafold.dart'; +// import صفحة الملاحظات الجديدة +import 'notes_driver_page.dart'; class StaticDash extends StatelessWidget { const StaticDash({super.key}); @override Widget build(BuildContext context) { - Get.put(StaticController()); - return MyScafolld( - title: 'Static Dash'.tr, - action: IconButton( - onPressed: () async { - await Get.put(StaticController()).getAll(); - }, - icon: const Icon( - Icons.replay_circle_filled_rounded, - color: AppColor.greenColor, + final controller = Get.put(StaticController()); + bool isRtl = Directionality.of(context) == TextDirection.rtl; + + return Scaffold( + backgroundColor: const Color(0xFFF0F2F5), + appBar: AppBar( + title: Text( + 'لوحة الإحصائيات'.tr, + style: const TextStyle( + color: Color(0xFF1A1A1A), + fontWeight: FontWeight.w800, + fontSize: 22, ), ), - body: [ - GetBuilder(builder: (staticController) { - return staticController.isLoading - ? const MyCircularProgressIndicator() - : ListView( - children: [ - SizedBox( - height: Get.height * .3, - width: double.maxFinite, - // decoration: AppStyle.boxDecoration1, - child: Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: MediaQuery.of(context).size.height * 0.4, - child: LineChart( - LineChartData( - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: - staticController.chartDataPassengers, - isCurved: true, - color: Colors.blue, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: - true), // Show dots on each point - belowBarData: BarAreaData( - show: true, - color: Colors.deepPurpleAccent - .withOpacity( - 0.3), // Custom gradient color - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: Colors.yellow, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - 'Total passengers on month ${staticController.totalMonthlyPassengers}' - .tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of Passengers on days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - ), - gridData: const FlGridData(show: true), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: Colors.blueAccent), - left: - BorderSide(color: Colors.blueAccent), - ), - ), - ), - ), - ), - )), - const SizedBox( - height: 5, - ), - SizedBox( - height: Get.height * .3, - width: double.maxFinite, - // decoration: AppStyle.boxDecoration1, - child: Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: MediaQuery.of(context).size.height * 0.4, - child: LineChart( - LineChartData( - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: staticController.chartDataDrivers, - isCurved: true, - color: Colors.blue, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: - true), // Show dots on each point - belowBarData: BarAreaData( - show: true, - color: Colors.deepPurpleAccent - .withOpacity( - 0.3), // Custom gradient color - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: Colors.yellow, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - 'Total Drivers on month ${staticController.totalMonthlyDrivers}' - .tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of Drivers on days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - ), - gridData: const FlGridData(show: true), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: Colors.blueAccent), - left: - BorderSide(color: Colors.blueAccent), - ), - ), - ), - ), - ), - )), - const SizedBox( - height: 5, - ), - SizedBox( - height: Get.height * .3, - width: double.maxFinite, - // decoration: AppStyle.boxDecoration1, - child: Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: MediaQuery.of(context).size.height * 0.4, - child: LineChart( - LineChartData( - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: staticController.chartDataRides, - isCurved: true, - color: const Color.fromARGB( - 255, 84, 181, 182), // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: - true), // Show dots on each point - belowBarData: BarAreaData( - show: true, - color: const Color.fromARGB( - 255, 65, 144, 86) - .withOpacity( - 0.3), // Custom gradient color - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: Colors.yellow, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - 'Total Rides on month ${staticController.totalMonthlyRides}' - .tr, - style: AppStyle.subtitle, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of Rides on days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - ), - gridData: const FlGridData(show: true), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: Colors.blueAccent), - left: - BorderSide(color: Colors.blueAccent), - ), - ), - ), - ), - ), - )), - const SizedBox( - height: 5, - ), - SizedBox( - height: Get.height * .3, - width: double.maxFinite, - child: Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: MediaQuery.of(context).size.height * 0.4, - child: LineChart( - LineChartData( - lineBarsData: [ - LineChartBarData( - spots: staticController - .chartDataEmployeeMaryam, - isCurved: true, - color: - Colors.blue, // Custom color for Maryam - barWidth: 3, - dotData: const FlDotData(show: true), - belowBarData: BarAreaData( - show: true, - color: Colors.blue.withOpacity(0.3)), - ), - LineChartBarData( - spots: - staticController.chartDataEmployeeRawda, - isCurved: true, - color: Colors.red, // Custom color for Rawda - barWidth: 3, - dotData: const FlDotData(show: true), - belowBarData: BarAreaData( - show: true, - color: Colors.red.withOpacity(0.3)), - ), - LineChartBarData( - spots: - staticController.chartDataEmployeeMena, - isCurved: true, - color: - Colors.green, // Custom color for Mena - barWidth: 3, - dotData: const FlDotData(show: true), - belowBarData: BarAreaData( - show: true, - color: Colors.green.withOpacity(0.3)), - ), - LineChartBarData( - spots: staticController - .chartDataEmployeeSefer4, - isCurved: true, - color: - Colors.yellow, // Custom color for Mena - barWidth: 3, - dotData: const FlDotData(show: true), - belowBarData: BarAreaData( - show: true, - color: Colors.yellow.withOpacity(0.3)), - ), - ], - titlesData: const FlTitlesData( - bottomTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true), - ), - ), - gridData: const FlGridData(show: true), - borderData: FlBorderData(show: true), - ), - ), - ), - ), - ), - // SizedBox( - // height: Get.height * .3, - // width: double.maxFinite, - // // decoration: AppStyle.boxDecoration1, - // child: Padding( - // padding: const EdgeInsets.all(6), - // child: Container( - // decoration: AppStyle.boxDecoration1, - // height: MediaQuery.of(context).size.height * 0.4, - // child: LineChart( - // LineChartData( - // lineBarsData: [ - // LineChartBarData( - // isStepLineChart: true, - // spots: staticController - // .chartDataDriversCalling, - // isCurved: true, - // color: Colors - // .deepPurpleAccent, // Custom color - // barWidth: 3, // Thinner line - // dotData: const FlDotData( - // show: - // true), // Show dots on each point - // belowBarData: BarAreaData( - // show: true, - // color: Colors.deepPurpleAccent - // .withOpacity( - // 0.3), // Custom gradient color - // ), - // isStrokeJoinRound: true, - // shadow: const BoxShadow( - // color: Colors.yellow, - // blurRadius: 4, - // offset: Offset(2, 2), - // ), - // ), - // ], - // showingTooltipIndicators: const [], - // titlesData: FlTitlesData( - // show: true, - // topTitles: AxisTitles( - // axisNameWidget: Text( - // 'Days'.tr, - // style: const TextStyle( - // fontSize: 14, - // fontWeight: FontWeight.bold), - // ), - // axisNameSize: 30, - // ), - // bottomTitles: AxisTitles( - // axisNameWidget: Text( - // 'Total Drivers on month are Calliing ${staticController.staticList[0]['totalMonthlyCallingDrivers']}' - // .tr, - // style: AppStyle.subtitle, - // ), - // axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, - // showTitles: true, - // ), - // ), - // leftTitles: AxisTitles( - // axisNameWidget: Text( - // 'Counts of Drivers on days'.tr, - // style: const TextStyle( - // fontSize: 14, - // fontWeight: FontWeight.bold), - // ), - // axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, - // showTitles: true, - // ), - // ), - // ), - // gridData: const FlGridData(show: true), - // borderData: FlBorderData( - // show: true, - // border: const Border( - // bottom: - // BorderSide(color: Colors.blueAccent), - // left: - // BorderSide(color: Colors.blueAccent), - // ), - // ), - // ), - // ), - // ), - // )), - // const SizedBox( - // height: 5, - // ), - SizedBox( - height: Get.height * .3, - width: double.maxFinite, - // decoration: AppStyle.boxDecoration1, - child: Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: MediaQuery.of(context).size.height * 0.4, - child: LineChart( - LineChartData( - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: staticController - .chartDataDriversMatchingNotes, - isCurved: true, - color: Colors - .deepPurpleAccent, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: - true), // Show dots on each point - belowBarData: BarAreaData( - show: true, - color: Colors.deepPurpleAccent - .withOpacity( - 0.3), // Custom gradient color - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: Colors.yellow, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - 'Total Drivers on month are register after calling ${staticController.staticList[0]['totalMonthlyMatchingNotes']}' - .tr, - style: AppStyle.subtitle, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of Drivers on days'.tr, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold), - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - ), - gridData: const FlGridData(show: true), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: Colors.blueAccent), - left: - BorderSide(color: Colors.blueAccent), - ), - ), - ), - ), - ), - )), - const SizedBox( - height: 5, - ), - ], - ); - }) + backgroundColor: Colors.transparent, + elevation: 0, + centerTitle: true, + iconTheme: const IconThemeData(color: Colors.black87), + leading: IconButton( + onPressed: () => Get.back(), + icon: Icon( + isRtl ? Icons.arrow_forward_ios : Icons.arrow_back_ios, + size: 20, + )), + actions: [ + Container( + margin: const EdgeInsets.symmetric(horizontal: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + blurRadius: 10, + offset: const Offset(0, 4)) + ], + ), + child: IconButton( + onPressed: () async { + await controller.getAll(); + }, + icon: const Icon(Icons.refresh_rounded, + color: AppColor.primaryColor), + ), + ), ], - isleading: true); + ), + body: GetBuilder( + builder: (staticController) { + if (staticController.isLoading) { + return const Center(child: MyCircularProgressIndicator()); + } + + return AnimationLimiter( + child: ListView( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), + physics: const BouncingScrollPhysics(), + children: AnimationConfiguration.toStaggeredList( + duration: const Duration(milliseconds: 500), + childAnimationBuilder: (widget) => SlideAnimation( + verticalOffset: 50.0, + child: FadeInAnimation(child: widget), + ), + children: [ + Center( + child: Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Text( + _formatDateRange(staticController), + style: TextStyle( + color: Colors.grey[600], + fontWeight: FontWeight.bold, + fontSize: 14), + ), + ), + ), + + _buildSectionHeader("نظرة عامة على النمو", Icons.trending_up), + + // --- Passengers Card --- + _buildModernChartCard( + context, + title: 'الركاب', + totalValue: + staticController.totalMonthlyPassengers.toString(), + spots: staticController.chartDataPassengers + .cast() + .toList(), + compareSpots: staticController.isComparing + ? staticController.chartDataPassengersCompare + .cast() + .toList() + : null, + baseColor: const Color(0xFF2979FF), + icon: Icons.groups_rounded, + controller: staticController, + ), + const SizedBox(height: 16), + + // --- Drivers Card --- + _buildModernChartCard( + context, + title: 'السائقون', + totalValue: staticController.totalMonthlyDrivers.toString(), + spots: staticController.chartDataDrivers + .cast() + .toList(), + compareSpots: staticController.isComparing + ? staticController.chartDataDriversCompare + .cast() + .toList() + : null, + baseColor: const Color(0xFFFF9100), + icon: Icons.drive_eta_rounded, + controller: staticController, + ), + const SizedBox(height: 16), + + // --- Rides Card --- + _buildModernChartCard( + context, + title: 'الرحلات', + totalValue: staticController.totalMonthlyRides.toString(), + spots: + staticController.chartDataRides.cast().toList(), + compareSpots: staticController.isComparing + ? staticController.chartDataRidesCompare + .cast() + .toList() + : null, + baseColor: const Color(0xFF651FFF), + icon: Icons.map_rounded, + controller: staticController, + ), + const SizedBox(height: 24), + + _buildSectionHeader( + "أداء فريق العمل", Icons.workspaces_filled), + + // --- Activations Card (No Click Action) --- + _buildMultiLineChartCard( + context: context, + title: 'تفعيل السائقين (Activations)', + spotsrama1: staticController.chartDataEmployeerama1, + spotsShahd: staticController.chartDataEmployeeshahd, + spotsRama: staticController.chartDataEmployeeRama2, + spotsMayar: staticController.chartDataEmployeeSefer4, + spotsrama1Compare: + staticController.chartDataEmployeerama1Compare, + spotsShahdCompare: + staticController.chartDataEmployeeshahdCompare, + spotsRamaCompare: + staticController.chartDataEmployeeRama2Compare, + spotsMayarCompare: + staticController.chartDataEmployeeSefer4Compare, + staticController: staticController, + ), + + const SizedBox(height: 16), + + // --- 🔴 Modified: Calls Card (With Navigation) --- + _buildMultiLineChartCard( + context: context, + title: 'عدد المكالمات (Calls)', + // إضافة التوجيه للصفحة الجديدة عند الضغط + onTap: () { + Get.to(() => const DailyNotesView()); + }, + spotsrama1: staticController.chartDataCallsrama1, + spotsShahd: staticController.chartDataCallsShahd, + spotsRama: staticController.chartDataCallsRama2, + spotsMayar: staticController.chartDataCallsSefer4, + spotsrama1Compare: + staticController.chartDataCallsrama1Compare, + spotsShahdCompare: + staticController.chartDataCallsShahdCompare, + spotsRamaCompare: + staticController.chartDataCallsRama2Compare, + spotsMayarCompare: + staticController.chartDataCallsSefer4Compare, + staticController: staticController, + ), + + const SizedBox(height: 24), + + // --- Employment Stats List --- + if (staticController.employmentStatsList.isNotEmpty) ...[ + _buildSectionHeader( + "إجمالي الإدخالات حسب الموظف", Icons.list_alt_rounded), + _buildEmploymentStatsList( + staticController.employmentStatsList), + const SizedBox(height: 24), + ], + + _buildSectionHeader( + "متابعة التسجيل", Icons.assignment_turned_in), + + // --- Drivers Matching Notes Card --- + _buildModernChartCard( + context, + title: 'سائقين بعد الاتصال', + totalValue: staticController.staticList.isNotEmpty && + staticController.staticList[0] + ['totalMonthlyMatchingNotes'] != + null + ? "${staticController.staticList[0]['totalMonthlyMatchingNotes']}" + : "0", + spots: staticController.chartDataDriversMatchingNotes + .cast() + .toList(), + compareSpots: staticController.isComparing + ? staticController.chartDataDriversMatchingNotesCompare + .cast() + .toList() + : null, + baseColor: const Color(0xFF00BFA5), + icon: Icons.phone_in_talk_rounded, + controller: staticController, + ), + const SizedBox(height: 40), + ], + ), + ), + ); + }, + ), + ); + } + + // ... (Employment Stats List - No Change) + Widget _buildEmploymentStatsList(List> stats) { + Color getEmployeeColor(String name) { + String n = name.toLowerCase().trim(); + if (n.contains('shahd')) return Colors.redAccent; + if (n.contains('mayar')) return Colors.amber.shade700; + if (n.contains('rama2')) return Colors.green; + if (n.contains('rama1')) return Colors.blue; + return Colors.blueGrey; + } + + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.04), + blurRadius: 15, + offset: const Offset(0, 5)) + ]), + padding: const EdgeInsets.all(20), + child: Column( + children: [ + Row( + children: [ + Icon(Icons.people_outline, color: Colors.blueGrey.shade700), + const SizedBox(width: 10), + Text("الأداء الإجمالي (العدد)", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: Colors.grey.shade800)), + ], + ), + const Divider(height: 25), + Wrap( + spacing: 12, + runSpacing: 12, + children: stats.map((item) { + Color itemColor = getEmployeeColor(item['name'].toString()); + return Container( + width: 100, + padding: + const EdgeInsets.symmetric(vertical: 12, horizontal: 8), + decoration: BoxDecoration( + color: itemColor.withOpacity(0.08), + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: itemColor.withOpacity(0.5), width: 1.5)), + child: Column( + children: [ + Text( + item['name'].toString().toUpperCase(), + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: itemColor), + textAlign: TextAlign.center, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 6), + Text( + item['count'].toString(), + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w900, + color: Colors.grey.shade800), + ) + ], + ), + ); + }).toList(), + ), + ], + ), + ); + } + + // ... (Header Widget - No Change) + Widget _buildSectionHeader(String title, IconData icon) { + return Padding( + padding: const EdgeInsets.only(bottom: 12.0, top: 8.0, right: 4), + child: Row( + children: [ + Icon(icon, size: 20, color: Colors.grey[600]), + const SizedBox(width: 8), + Text(title, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.grey[800], + fontFamily: 'Cairo')), + ], + ), + ); + } + + // ... (Modern Chart Card - No Change) + Widget _buildModernChartCard(BuildContext context, + {required String title, + required String totalValue, + required List spots, + List? compareSpots, + required Color baseColor, + required IconData icon, + required StaticController controller}) { + List allSpots = [...spots]; + if (compareSpots != null) allSpots.addAll(compareSpots); + double maxY = _calculateMaxY(allSpots); + double interval = _calculateInterval(maxY); + double daysInPeriod = _getDaysInPeriod(controller); + double xInterval = _calculateXInterval(daysInPeriod); + + return Container( + height: 400, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(24), + boxShadow: [ + BoxShadow( + color: baseColor.withOpacity(0.08), + blurRadius: 20, + offset: const Offset(0, 8)) + ]), + child: Column( + children: [ + _buildCardHeader(context, title, totalValue, icon, baseColor, + controller.isComparing), + Expanded( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 0, 16, 10), + child: Directionality( + textDirection: TextDirection.ltr, + child: LineChart(LineChartData( + minX: 1, + maxX: daysInPeriod > 0 ? daysInPeriod : 1, + minY: 0, + maxY: maxY, + lineTouchData: _buildTooltipData(controller), + gridData: _buildGridData(interval), + titlesData: _buildTitlesData( + interval, xInterval, daysInPeriod, controller), + borderData: FlBorderData(show: false), + lineBarsData: [ + if (compareSpots != null && compareSpots.isNotEmpty) + _buildLine(compareSpots, Colors.grey.withOpacity(0.4), + isDashed: true, isStep: true), + _buildLine(spots, baseColor, isStep: true), + ])), + ), + ), + ), + _buildControlBar(context, controller, baseColor), + ], + ), + ); + } + + // --- 🔴 Modified: Multi Line Chart (Adding onTap) --- + Widget _buildMultiLineChartCard({ + required BuildContext context, + required String title, + required StaticController staticController, + // Add onTap parameter + VoidCallback? onTap, + required List spotsrama1, + required List spotsShahd, + required List spotsRama, + required List spotsMayar, + required List spotsrama1Compare, + required List spotsShahdCompare, + required List spotsRamaCompare, + required List spotsMayarCompare, + }) { + final allSpots = [ + ...spotsrama1, + ...spotsShahd, + ...spotsRama, + ...spotsMayar + ]; + double maxY = _calculateMaxY(allSpots); + double interval = _calculateInterval(maxY); + double daysInPeriod = _getDaysInPeriod(staticController); + double xInterval = _calculateXInterval(daysInPeriod); + + return Container( + height: 460, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(24), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.05), + blurRadius: 15, + offset: const Offset(0, 5)) + ]), + child: Column( + children: [ + // 🔴 Wrap Header with InkWell if onTap is provided + InkWell( + onTap: onTap, + borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + child: _buildCardHeader( + context, + title, + null, + Icons.bar_chart_rounded, + Colors.black54, + staticController.isComparing, + showArrow: onTap != null), // Pass showArrow flag + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Wrap( + spacing: 16, + runSpacing: 8, + alignment: WrapAlignment.center, + children: [ + _buildLegendItem("راما 1", Colors.blue), + _buildLegendItem("شهد", Colors.redAccent), + _buildLegendItem("راما 2", Colors.green), + _buildLegendItem("ميار", Colors.amber.shade700), + ], + ), + ), + const SizedBox(height: 15), + Expanded( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 0, 16, 10), + child: Directionality( + textDirection: TextDirection.ltr, + child: LineChart(LineChartData( + minX: 1, + maxX: daysInPeriod > 0 ? daysInPeriod : 1, + minY: 0, + maxY: maxY, + lineTouchData: _buildTooltipData(staticController), + gridData: _buildGridData(interval), + titlesData: _buildTitlesData( + interval, xInterval, daysInPeriod, staticController), + borderData: FlBorderData(show: false), + lineBarsData: [ + if (staticController.isComparing) ...[ + _buildLine( + spotsrama1Compare, Colors.blue.withOpacity(0.3), + isDashed: true, isStep: false), + _buildLine(spotsShahdCompare, + Colors.redAccent.withOpacity(0.3), + isDashed: true, isStep: false), + _buildLine( + spotsRamaCompare, Colors.green.withOpacity(0.3), + isDashed: true, isStep: false), + _buildLine(spotsMayarCompare, + Colors.amber.shade700.withOpacity(0.3), + isDashed: true, isStep: false), + ], + _buildLine(spotsrama1, Colors.blue, isStep: false), + _buildLine(spotsShahd, Colors.redAccent, isStep: false), + _buildLine(spotsRama, Colors.green, isStep: false), + _buildLine(spotsMayar, Colors.amber.shade700, + isStep: false), + ])), + ), + ), + ), + _buildControlBar(context, staticController, Colors.blueGrey), + ], + ), + ); + } + + // ... (Shared Components) ... + // 🔴 Modified _buildCardHeader to accept showArrow + Widget _buildCardHeader(BuildContext context, String title, + String? totalValue, IconData icon, Color color, bool isComparing, + {bool showArrow = false}) { + return Padding( + padding: const EdgeInsets.all(20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: color.withOpacity(0.1), + borderRadius: BorderRadius.circular(16)), + child: Icon(icon, color: color, size: 26)), + const SizedBox(width: 14), + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Text(title, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.grey[800])), + if (totalValue != null) ...[ + const SizedBox(height: 4), + Text('الإجمالي: $totalValue', + style: TextStyle( + fontSize: 13, + color: Colors.grey[500], + fontWeight: FontWeight.w600)) + ], + // إضافة نص صغير يدل على إمكانية الضغط + if (showArrow) + Padding( + padding: const EdgeInsets.only(top: 4.0), + child: Text("اضغط لعرض التفاصيل اليومية", + style: TextStyle( + fontSize: 10, color: AppColor.primaryColor)), + ) + ]), + ], + ), + Row(children: [ + if (showArrow) + Icon(Icons.arrow_forward_ios_rounded, + size: 16, color: Colors.grey[400]), + if (isComparing) ...[ + const SizedBox(width: 8), + Container( + width: 8, + height: 8, + decoration: const BoxDecoration( + color: Colors.grey, shape: BoxShape.circle)), + const SizedBox(width: 4), + Text("الفترة السابقة", + style: TextStyle(fontSize: 10, color: Colors.grey[600])) + ] + ]) + ], + ), + ); + } + + LineTouchData _buildTooltipData(StaticController controller) { + return LineTouchData( + handleBuiltInTouches: true, + touchTooltipData: LineTouchTooltipData( + getTooltipColor: (touchedSpot) => Colors.black87, + tooltipPadding: const EdgeInsets.all(10), + tooltipRoundedRadius: 8, + getTooltipItems: (List touchedBarSpots) { + return touchedBarSpots.map((barSpot) { + DateTime? start = controller.startDate; + if (start != null) { + DateTime date = start.add(Duration(days: barSpot.x.toInt() - 1)); + String formattedDate = DateFormat('d MMM', 'en').format(date); + return LineTooltipItem( + '$formattedDate \n', + const TextStyle( + color: Colors.white70, + fontWeight: FontWeight.bold, + fontSize: 12), + children: [ + TextSpan( + text: barSpot.y.toInt().toString(), + style: TextStyle( + color: barSpot.bar.color, + fontWeight: FontWeight.w900, + fontSize: 14)) + ]); + } + return LineTooltipItem( + barSpot.y.toString(), + const TextStyle( + color: Colors.white, fontWeight: FontWeight.bold)); + }).toList(); + }, + ), + ); + } + + FlGridData _buildGridData(double interval) { + return FlGridData( + show: true, + drawVerticalLine: false, + horizontalInterval: interval, + getDrawingHorizontalLine: (value) => + FlLine(color: Colors.grey.withOpacity(0.08), strokeWidth: 1)); + } + + FlTitlesData _buildTitlesData(double interval, double xInterval, + double daysInPeriod, StaticController controller) { + return FlTitlesData( + show: true, + rightTitles: const AxisTitles(sideTitles: SideTitles(showTitles: false)), + topTitles: const AxisTitles(sideTitles: SideTitles(showTitles: false)), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 30, + interval: xInterval, + getTitlesWidget: (value, meta) { + if (value <= 0 || value > daysInPeriod) + return const SizedBox.shrink(); + if (controller.startDate != null) { + int dayOffset = value.toInt() - 1; + DateTime date = + controller.startDate!.add(Duration(days: dayOffset)); + String text = DateFormat('d/M', 'en').format(date); + return Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text(text, + style: TextStyle( + color: Colors.grey[400], + fontSize: 10, + fontWeight: FontWeight.bold))); + } + return const SizedBox.shrink(); + })), + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + interval: interval, + reservedSize: 40, + getTitlesWidget: (value, meta) => Text(_formatNumber(value), + style: TextStyle(color: Colors.grey[400], fontSize: 10)))), + ); + } + + Widget _buildControlBar( + BuildContext context, StaticController controller, Color color) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + decoration: BoxDecoration( + color: Colors.grey[50], + borderRadius: + const BorderRadius.vertical(bottom: Radius.circular(24)), + border: Border(top: BorderSide(color: Colors.grey.shade200))), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: InkWell( + onTap: () async { + DateTimeRange? picked = await showDateRangePicker( + context: context, + firstDate: DateTime(2020), + lastDate: DateTime.now().add(const Duration(days: 1)), + initialDateRange: DateTimeRange( + start: controller.startDate ?? + DateTime.now() + .subtract(const Duration(days: 30)), + end: controller.endDate ?? DateTime.now()), + builder: (context, child) { + return Theme( + data: Theme.of(context).copyWith( + colorScheme: ColorScheme.light( + primary: AppColor.primaryColor, + onPrimary: Colors.white, + onSurface: Colors.black)), + child: child!); + }); + if (picked != null) + controller.updateDateRange(picked.start, picked.end); + }, + child: Container( + padding: const EdgeInsets.symmetric( + vertical: 8, horizontal: 12), + decoration: BoxDecoration( + border: Border.all(color: Colors.grey.shade300), + borderRadius: BorderRadius.circular(8), + color: Colors.white), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.calendar_today_rounded, + size: 16, color: color), + const SizedBox(width: 8), + Text(_formatDateRange(controller), + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.bold, + color: Colors.grey[800]), + overflow: TextOverflow.ellipsis) + ])))), + const SizedBox(width: 12), + TextButton.icon( + onPressed: controller.toggleComparison, + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8))), + icon: Icon( + controller.isComparing + ? Icons.visibility_off_outlined + : Icons.compare_arrows_rounded, + size: 18, + color: controller.isComparing ? Colors.redAccent : color), + label: Text(controller.isComparing ? "إلغاء" : "مقارنة", + style: TextStyle( + fontSize: 12, + color: controller.isComparing ? Colors.redAccent : color, + fontWeight: FontWeight.w600))) + ], + ), + ); + } + + LineChartBarData _buildLine(List spots, Color color, + {bool isDashed = false, bool isStep = false}) { + return LineChartBarData( + spots: spots, + isCurved: !isStep, // Curved if not step + curveSmoothness: 0.25, + isStepLineChart: isStep, + color: color, + barWidth: isDashed ? 2 : 2.5, + isStrokeCapRound: !isStep, + dotData: const FlDotData(show: false), + dashArray: isDashed ? [5, 5] : null, + lineChartStepData: const LineChartStepData(stepDirection: 0.5), + ); + } + + Widget _buildLegendItem(String name, Color color) { + return Row(mainAxisSize: MainAxisSize.min, children: [ + Container( + width: 10, + height: 10, + decoration: BoxDecoration(color: color, shape: BoxShape.circle)), + const SizedBox(width: 6), + Text(name, + style: TextStyle( + fontSize: 12, + color: Colors.grey[700], + fontWeight: FontWeight.w600)) + ]); + } + + double _getDaysInPeriod(StaticController controller) { + if (controller.startDate == null || controller.endDate == null) return 30; + return controller.endDate!.difference(controller.startDate!).inDays + 1.0; + } + + double _calculateXInterval(double daysInPeriod) { + if (daysInPeriod > 60) return 30; + if (daysInPeriod > 30) return 10; + if (daysInPeriod > 10) return 5; + return 1; + } + + String _formatDateRange(StaticController controller) { + if (controller.startDate == null || controller.endDate == null) + return controller.currentDateString; + String start = + "${controller.startDate!.day}/${controller.startDate!.month}/${controller.startDate!.year}"; + String end = + "${controller.endDate!.day}/${controller.endDate!.month}/${controller.endDate!.year}"; + return "$start - $end"; + } + + double _calculateMaxY(List spots) { + if (spots.isEmpty) return 10; + double maxVal = 0; + for (var spot in spots) { + if (spot.y > maxVal) maxVal = spot.y; + } + if (maxVal == 0) return 5; + return (maxVal * 1.2).ceilToDouble(); + } + + double _calculateInterval(double maxY) { + if (maxY <= 10) return 2; + if (maxY <= 50) return 10; + if (maxY <= 100) return 20; + if (maxY <= 500) return 100; + if (maxY <= 1000) return 200; + return maxY / 5; + } + + String _formatNumber(double value) { + if (value >= 1000) return '${(value / 1000).toStringAsFixed(1)}k'; + return value.toInt().toString(); } } diff --git a/lib/views/auth/login_page.dart b/lib/views/auth/login_page.dart index 957526e..c8faf24 100644 --- a/lib/views/auth/login_page.dart +++ b/lib/views/auth/login_page.dart @@ -4,6 +4,8 @@ import 'package:sefer_admin1/env/env.dart'; import '../../controller/auth/login_controller.dart'; import '../../controller/auth/otp_helper.dart'; +import '../../controller/functions/crud.dart'; +import '../../print.dart'; class AdminLoginPage extends StatefulWidget { const AdminLoginPage({super.key}); @@ -17,6 +19,7 @@ class _AdminLoginPageState extends State { bool _isLoading = false; Future _submit() async { final allowedPhones = Env.ALLOWED_ADMIN_PHONES; + Log.print('allowedPhones: ${allowedPhones}'); allowedPhones.toString().split(','); final phone = _phoneController.text.trim(); @@ -36,6 +39,16 @@ class _AdminLoginPageState extends State { setState(() => _isLoading = false); } + @override + void initState() { + super.initState(); + _initializeToken(); // استدعاء دالة async بدون await + } + + void _initializeToken() async { + await CRUD().getJWT(); + } + @override Widget build(BuildContext context) { Get.put(OtpHelper()); diff --git a/lib/views/invoice/add_invoice_page.dart b/lib/views/invoice/add_invoice_page.dart index 4fdf5d4..e5a92ea 100644 --- a/lib/views/invoice/add_invoice_page.dart +++ b/lib/views/invoice/add_invoice_page.dart @@ -39,6 +39,7 @@ class _AddInvoicePageState extends State { final driverID = '123'; // ← عدّله حسب نظامك final invoiceNumber = generateInvoiceNumber(); final amount = _amountController.text.trim(); + final itemName = _itemNameController.text.trim(); final date = DateTime.now().toIso8601String().split('T').first; setState(() => _isLoading = true); @@ -54,6 +55,7 @@ class _AddInvoicePageState extends State { ..fields['driverID'] = driverID ..fields['invoiceNumber'] = invoiceNumber ..fields['amount'] = amount + ..fields['name'] = itemName ..fields['date'] = date ..headers.addAll(headers); diff --git a/lib/views/widgets/my_textField.dart b/lib/views/widgets/my_textField.dart index 2d4168b..54f2bf0 100644 --- a/lib/views/widgets/my_textField.dart +++ b/lib/views/widgets/my_textField.dart @@ -51,7 +51,7 @@ class MyTextForm extends StatelessWidget { return 'Please enter a valid email.'.tr; } } else if (type == TextInputType.phone) { - if (value.length != 11) { + if (value.length != 10) { return 'Please enter a valid phone number.'.tr; } } diff --git a/macos/Podfile b/macos/Podfile index 29c8eb3..ff5ddb3 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..5022cd0 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,250 @@ +PODS: + - AppAuth (1.7.6): + - AppAuth/Core (= 1.7.6) + - AppAuth/ExternalUserAgent (= 1.7.6) + - AppAuth/Core (1.7.6) + - AppAuth/ExternalUserAgent (1.7.6): + - AppAuth/Core + - AppCheckCore (11.2.0): + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - device_info_plus (0.0.1): + - FlutterMacOS + - file_selector_macos (0.0.1): + - FlutterMacOS + - Firebase/CoreOnly (11.15.0): + - FirebaseCore (~> 11.15.0) + - Firebase/Crashlytics (11.15.0): + - Firebase/CoreOnly + - FirebaseCrashlytics (~> 11.15.0) + - Firebase/Messaging (11.15.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 11.15.0) + - firebase_core (3.15.2): + - Firebase/CoreOnly (~> 11.15.0) + - FlutterMacOS + - firebase_crashlytics (4.3.10): + - Firebase/CoreOnly (~> 11.15.0) + - Firebase/Crashlytics (~> 11.15.0) + - firebase_core + - FlutterMacOS + - firebase_messaging (15.2.10): + - Firebase/CoreOnly (~> 11.15.0) + - Firebase/Messaging (~> 11.15.0) + - firebase_core + - FlutterMacOS + - FirebaseCore (11.15.0): + - FirebaseCoreInternal (~> 11.15.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Logger (~> 8.1) + - FirebaseCoreExtension (11.15.0): + - FirebaseCore (~> 11.15.0) + - FirebaseCoreInternal (11.15.0): + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseCrashlytics (11.15.0): + - FirebaseCore (~> 11.15.0) + - FirebaseInstallations (~> 11.0) + - FirebaseRemoteConfigInterop (~> 11.0) + - FirebaseSessions (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/Environment (~> 8.1) + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - FirebaseInstallations (11.15.0): + - FirebaseCore (~> 11.15.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - PromisesObjC (~> 2.4) + - FirebaseMessaging (11.15.0): + - FirebaseCore (~> 11.15.0) + - FirebaseInstallations (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Reachability (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - FirebaseRemoteConfigInterop (11.15.0) + - FirebaseSessions (11.15.0): + - FirebaseCore (~> 11.15.0) + - FirebaseCoreExtension (~> 11.15.0) + - FirebaseInstallations (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - PromisesSwift (~> 2.1) + - flutter_image_compress_macos (1.0.0): + - FlutterMacOS + - flutter_secure_storage_macos (6.1.3): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - google_sign_in_ios (0.0.1): + - AppAuth (>= 1.7.4) + - Flutter + - FlutterMacOS + - GoogleSignIn (~> 8.0) + - GTMSessionFetcher (>= 3.4.0) + - GoogleDataTransport (10.1.0): + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - GoogleSignIn (8.0.0): + - AppAuth (< 2.0, >= 1.7.3) + - AppCheckCore (~> 11.0) + - GTMAppAuth (< 5.0, >= 4.1.1) + - GTMSessionFetcher/Core (~> 3.3) + - GoogleUtilities/AppDelegateSwizzler (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.1.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.1.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.1.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.1.0) + - GoogleUtilities/Reachability (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GTMAppAuth (4.1.1): + - AppAuth/Core (~> 1.7) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher (3.5.0): + - GTMSessionFetcher/Full (= 3.5.0) + - GTMSessionFetcher/Core (3.5.0) + - GTMSessionFetcher/Full (3.5.0): + - GTMSessionFetcher/Core + - local_auth_darwin (0.0.1): + - Flutter + - FlutterMacOS + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - PromisesSwift (2.4.0): + - PromisesObjC (= 2.4.0) + - sqflite_darwin (0.0.4): + - Flutter + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) + - firebase_crashlytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_crashlytics/macos`) + - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`) + - flutter_image_compress_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_image_compress_macos/macos`) + - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - google_sign_in_ios (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin`) + - local_auth_darwin (from `Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + +SPEC REPOS: + trunk: + - AppAuth + - AppCheckCore + - Firebase + - FirebaseCore + - FirebaseCoreExtension + - FirebaseCoreInternal + - FirebaseCrashlytics + - FirebaseInstallations + - FirebaseMessaging + - FirebaseRemoteConfigInterop + - FirebaseSessions + - GoogleDataTransport + - GoogleSignIn + - GoogleUtilities + - GTMAppAuth + - GTMSessionFetcher + - nanopb + - PromisesObjC + - PromisesSwift + +EXTERNAL SOURCES: + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + firebase_core: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos + firebase_crashlytics: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_crashlytics/macos + firebase_messaging: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos + flutter_image_compress_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_image_compress_macos/macos + flutter_secure_storage_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos + FlutterMacOS: + :path: Flutter/ephemeral + google_sign_in_ios: + :path: Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin + local_auth_darwin: + :path: Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + sqflite_darwin: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + +SPEC CHECKSUMS: + AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 + AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f + device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76 + file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31 + Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e + firebase_core: 7667f880631ae8ad10e3d6567ab7582fe0682326 + firebase_crashlytics: af8dce4a4f3b2b1556bf51043623060a5fc7eca7 + firebase_messaging: df39858bcbbcce792c9e4f1ca51b41123d6181fd + FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e + FirebaseCoreExtension: edbd30474b5ccf04e5f001470bdf6ea616af2435 + FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4 + FirebaseCrashlytics: e09d0bc19aa54a51e45b8039c836ef73f32c039a + FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843 + FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09 + FirebaseRemoteConfigInterop: 1c6135e8a094cc6368949f5faeeca7ee8948b8aa + FirebaseSessions: b9a92c1c51bbb81e78fc3142cda6d925d700f8e7 + flutter_image_compress_macos: e68daf54bb4bf2144c580fd4d151c949cbf492f0 + flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + google_sign_in_ios: b48bb9af78576358a168361173155596c845f0b9 + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 + GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4 + GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 + GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de + GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19 + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index fbd37d1..be5737c 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -21,12 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 17D3E71566D6F280AC1497ED /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 529702085A98989612EF4B94 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + D35F436D72E4B2EDD1E1BBEC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A0BEBB6BD55D52332CA81ED /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 2BE9293BC2E10C9D5F0F08B9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* intaleq_admin.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "intaleq_admin.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* intaleq_admin.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = intaleq_admin.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -76,8 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4A0BEBB6BD55D52332CA81ED /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 529702085A98989612EF4B94 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 57D62622DF9F1AFCA371D456 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 693E736CE390D9EAD52093D9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 991BB790141B213D8BF9E75C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 996CBF94A18BBCF3EEC882E7 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + AB6DA36D2BAECCF1DC13A82F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D35F436D72E4B2EDD1E1BBEC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,6 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 17D3E71566D6F280AC1497ED /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -124,7 +136,8 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, + 442C92138252D77B90B180F9 /* Pods */, + 41EA67A3A7FCB1DDADFB314F /* Frameworks */, ); sourceTree = ""; }; @@ -172,13 +185,29 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 41EA67A3A7FCB1DDADFB314F /* Frameworks */ = { isa = PBXGroup; children = ( + 529702085A98989612EF4B94 /* Pods_Runner.framework */, + 4A0BEBB6BD55D52332CA81ED /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + 442C92138252D77B90B180F9 /* Pods */ = { + isa = PBXGroup; + children = ( + AB6DA36D2BAECCF1DC13A82F /* Pods-Runner.debug.xcconfig */, + 2BE9293BC2E10C9D5F0F08B9 /* Pods-Runner.release.xcconfig */, + 991BB790141B213D8BF9E75C /* Pods-Runner.profile.xcconfig */, + 996CBF94A18BBCF3EEC882E7 /* Pods-RunnerTests.debug.xcconfig */, + 57D62622DF9F1AFCA371D456 /* Pods-RunnerTests.release.xcconfig */, + 693E736CE390D9EAD52093D9 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + FF11494ED183929E30BE29BC /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 5B019689435FA2B04EF137C6 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 3FC083AA4C1F1997BBCE63BC /* [CP] Embed Pods Frameworks */, + 6131D245E36334FE0924BDA0 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -329,6 +362,84 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 3FC083AA4C1F1997BBCE63BC /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 5B019689435FA2B04EF137C6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 6131D245E36334FE0924BDA0 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + FF11494ED183929E30BE29BC /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 996CBF94A18BBCF3EEC882E7 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 57D62622DF9F1AFCA371D456 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 693E736CE390D9EAD52093D9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -461,7 +575,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -543,7 +657,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -593,7 +707,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 567a41a..28976d2 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements index dddb8a3..5ca7d15 100644 --- a/macos/Runner/DebugProfile.entitlements +++ b/macos/Runner/DebugProfile.entitlements @@ -1,12 +1,12 @@ - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.network.server - - - + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.network.server + + + \ No newline at end of file diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist index 4789daa..a62dce0 100644 --- a/macos/Runner/Info.plist +++ b/macos/Runner/Info.plist @@ -1,32 +1,34 @@ - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - $(PRODUCT_COPYRIGHT) - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - + + com.apple.security.network.client + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + \ No newline at end of file diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements index 852fa1a..4e40553 100644 --- a/macos/Runner/Release.entitlements +++ b/macos/Runner/Release.entitlements @@ -1,8 +1,10 @@ - - com.apple.security.app-sandbox - - - + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 8f6a750..3c3bb62 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -201,6 +201,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.6" + dart_earcut: + dependency: transitive + description: + name: dart_earcut + sha256: e485001bfc05dcbc437d7bfb666316182e3522d4c3f9668048e004d0eb2ce43b + url: "https://pub.dev" + source: hosted + version: "1.2.0" dart_style: dependency: transitive description: @@ -478,6 +486,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.0" + flutter_map: + dependency: "direct main" + description: + name: flutter_map + sha256: "2ecb34619a4be19df6f40c2f8dce1591675b4eff7a6857bd8f533706977385da" + url: "https://pub.dev" + source: hosted + version: "7.0.2" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -824,6 +840,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + latlong2: + dependency: "direct main" + description: + name: latlong2 + sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe" + url: "https://pub.dev" + source: hosted + version: "0.9.1" leak_tracker: dependency: transitive description: @@ -856,6 +880,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.1" + lists: + dependency: transitive + description: + name: lists + sha256: "4ca5c19ae4350de036a7e996cdd1ee39c93ac0a2b840f4915459b7d0a7d4ab27" + url: "https://pub.dev" + source: hosted + version: "1.0.1" local_auth: dependency: "direct main" description: @@ -896,6 +928,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.11" + logger: + dependency: transitive + description: + name: logger + sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3 + url: "https://pub.dev" + source: hosted + version: "2.6.2" logging: dependency: transitive description: @@ -928,6 +968,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.16.0" + mgrs_dart: + dependency: transitive + description: + name: mgrs_dart + sha256: fb89ae62f05fa0bb90f70c31fc870bcbcfd516c843fb554452ab3396f78586f7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" mime: dependency: transitive description: @@ -1032,6 +1080,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.9.1" + polylabel: + dependency: transitive + description: + name: polylabel + sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b" + url: "https://pub.dev" + source: hosted + version: "1.0.1" pool: dependency: transitive description: @@ -1048,6 +1104,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.3" + proj4dart: + dependency: transitive + description: + name: proj4dart + sha256: c8a659ac9b6864aa47c171e78d41bbe6f5e1d7bd790a5814249e6b68bc44324e + url: "https://pub.dev" + source: hosted + version: "2.1.0" pub_semver: dependency: transitive description: @@ -1228,6 +1292,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + unicode: + dependency: transitive + description: + name: unicode + sha256: "0f69e46593d65245774d4f17125c6084d2c20b4e473a983f6e21b7d7762218f1" + url: "https://pub.dev" + source: hosted + version: "0.3.1" url_launcher: dependency: "direct main" description: @@ -1356,6 +1428,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + wkt_parser: + dependency: transitive + description: + name: wkt_parser + sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13" + url: "https://pub.dev" + source: hosted + version: "2.0.0" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 38ba416..6159e95 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,8 @@ dependencies: get_storage: ^2.1.1 google_fonts: ^6.2.1 # google_maps_flutter: ^2.6.1 + flutter_map: ^7.0.0 # مكتبة OpenStreetMap للفلاتر + latlong2: ^0.9.1 google_sign_in: ^6.2.1 http: ^1.0.0 # image: ^4.1.7